Repository: ethereum/execution-spec-tests Branch: main Commit: 88e9fb8f10ed Files: 3495 Total size: 35.0 MB Directory structure: gitextract_fhedyb34/ ├── .git-blame-ignore-revs ├── .github/ │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ ├── build-evm-base/ │ │ │ └── action.yaml │ │ ├── build-evm-client/ │ │ │ ├── besu/ │ │ │ │ └── action.yaml │ │ │ ├── ethjs/ │ │ │ │ └── action.yml │ │ │ ├── evmone/ │ │ │ │ └── action.yaml │ │ │ └── geth/ │ │ │ └── action.yaml │ │ ├── build-fixtures/ │ │ │ └── action.yaml │ │ └── fetch-binary/ │ │ └── action.yaml │ ├── configs/ │ │ ├── eels_resolutions.json │ │ ├── evm-impl.yaml │ │ ├── evm.yaml │ │ └── feature.yaml │ ├── scripts/ │ │ ├── fill_introduced_tests.sh │ │ ├── fill_prepatched_tests.sh │ │ ├── generate_eip_report.py │ │ ├── get_release_props.py │ │ └── parse_ported_tests.sh │ └── workflows/ │ ├── check_eip_versions.yaml │ ├── check_links.yml │ ├── coverage.yaml │ ├── docs_deploy.yaml │ ├── fixtures.yaml │ ├── fixtures_feature.yaml │ └── tox_verify.yaml ├── .gitignore ├── .lycheeignore ├── .markdownlint.yaml ├── .pre-commit-config.yaml ├── .pyspelling.yml ├── .readthedocs.yaml ├── .vscode/ │ ├── extensions.json │ ├── launch.recommended.json │ └── settings.json ├── CLAUDE.md ├── CONTRIBUTING.md ├── HUMANS.md ├── LICENSE ├── README.md ├── SECURITY.md ├── docs/ │ ├── CHANGELOG.md │ ├── changelog_section_template.md │ ├── dev/ │ │ ├── coding_style.md │ │ ├── configurations.md │ │ ├── deps_and_packaging.md │ │ ├── docs.md │ │ ├── documenting_clis.md │ │ ├── index.md │ │ ├── interactive_usage.md │ │ ├── logging.md │ │ ├── precommit.md │ │ └── test_actions_locally.md │ ├── filling_tests/ │ │ ├── debugging_t8n_tools.md │ │ ├── filling_tests_command_line.md │ │ ├── filling_tests_dev_fork.md │ │ ├── filling_tests_vs_code.md │ │ ├── getting_started.md │ │ ├── img/ │ │ │ ├── vs_code_executing_tests.kra │ │ │ └── vs_code_exploring_tests.kra │ │ ├── index.md │ │ ├── test_ids.md │ │ └── transition_tool_support.md │ ├── getting_started/ │ │ ├── code_standards.md │ │ ├── code_standards_details.md │ │ ├── getting_help.md │ │ ├── installation.md │ │ ├── installation_troubleshooting.md │ │ ├── repository_overview.md │ │ └── setup_vs_code.md │ ├── index.md │ ├── javascripts/ │ │ └── site.js │ ├── library/ │ │ ├── cli/ │ │ │ ├── eest.md │ │ │ ├── evm_bytes.md │ │ │ ├── extract_config.md │ │ │ └── index.md │ │ ├── ethereum_clis.md │ │ ├── ethereum_test_base_types.md │ │ ├── ethereum_test_exceptions.md │ │ ├── ethereum_test_fixtures.md │ │ ├── ethereum_test_forks.md │ │ ├── ethereum_test_specs.md │ │ ├── ethereum_test_tools.md │ │ ├── ethereum_test_types.md │ │ ├── ethereum_test_vm.md │ │ ├── index.md │ │ └── pytest_plugins/ │ │ ├── filler.md │ │ ├── forks.md │ │ ├── index.md │ │ └── spec_version_checker.md │ ├── navigation.md │ ├── running_tests/ │ │ ├── consume/ │ │ │ ├── cache.md │ │ │ ├── direct.md │ │ │ ├── exceptions.md │ │ │ ├── index.md │ │ │ └── simulators.md │ │ ├── execute/ │ │ │ ├── eth_config.md │ │ │ ├── hive.md │ │ │ ├── index.md │ │ │ ├── remote.md │ │ │ └── transaction_metadata.md │ │ ├── hive/ │ │ │ ├── ci_integration.md │ │ │ ├── client_config.md │ │ │ ├── common_options.md │ │ │ ├── dev_mode.md │ │ │ ├── hiveview.md │ │ │ └── index.md │ │ ├── index.md │ │ ├── releases.md │ │ ├── running.md │ │ ├── test_formats/ │ │ │ ├── blockchain_test.md │ │ │ ├── blockchain_test_engine.md │ │ │ ├── blockchain_test_engine_x.md │ │ │ ├── blockchain_test_sync.md │ │ │ ├── common_types.md │ │ │ ├── exceptions.md │ │ │ ├── index.md │ │ │ ├── state_test.md │ │ │ └── transaction_test.md │ │ └── useful_pytest_options.md │ ├── scripts/ │ │ ├── copy_repo_docs_to_mkdocs.py │ │ ├── gen_test_case_reference.py │ │ └── generate_fill_help.py │ ├── stylesheets/ │ │ └── custom.css │ ├── templates/ │ │ ├── base.md.j2 │ │ ├── directory.md.j2 │ │ ├── function.html.j2 │ │ ├── function.md.j2 │ │ ├── function_parameter_datatable.html.j2 │ │ ├── markdown_header.md.j2 │ │ └── module.md.j2 │ └── writing_tests/ │ ├── adding_a_new_test.md │ ├── benchmarks.md │ ├── checklist_templates/ │ │ ├── eip_testing_checklist_template.md │ │ └── index.md │ ├── code_standards.md │ ├── eip_checklist.md │ ├── exception_tests.md │ ├── fork_methods.md │ ├── fuzzer_bridge.md │ ├── gas_optimization.md │ ├── index.md │ ├── porting_legacy_tests.md │ ├── post_mortems.md │ ├── reference_specification.md │ ├── test_markers.md │ ├── tutorials/ │ │ ├── blockchain.md │ │ └── state_transition.md │ ├── types_of_tests.md │ ├── verifying_changes.md │ └── writing_a_new_test.md ├── mkdocs.yml ├── pyproject.toml ├── pyrightconfig.json ├── scripts/ │ └── convert_addresses.py ├── src/ │ ├── cli/ │ │ ├── __init__.py │ │ ├── check_fixtures.py │ │ ├── compare_fixtures.py │ │ ├── diff_opcode_counts.py │ │ ├── eest/ │ │ │ ├── __init__.py │ │ │ ├── cli.py │ │ │ ├── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── clean.py │ │ │ │ └── info.py │ │ │ ├── make/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cli.py │ │ │ │ ├── commands/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── env.py │ │ │ │ │ └── test.py │ │ │ │ └── templates/ │ │ │ │ ├── blockchain_test.py.j2 │ │ │ │ └── state_test.py.j2 │ │ │ └── quotes.py │ │ ├── eofwrap.py │ │ ├── evm_bytes.py │ │ ├── extract_config.py │ │ ├── fillerconvert/ │ │ │ ├── fillerconvert.py │ │ │ └── verify_filled.py │ │ ├── fuzzer_bridge/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── blocktest_builder.py │ │ │ ├── cli.py │ │ │ ├── converter.py │ │ │ ├── examples/ │ │ │ │ ├── README.md │ │ │ │ ├── comprehensive_large.json │ │ │ │ ├── comprehensive_largest.json │ │ │ │ ├── comprehensive_medium_1.json │ │ │ │ ├── comprehensive_medium_2.json │ │ │ │ └── comprehensive_smallest.json │ │ │ ├── models.py │ │ │ ├── performance_utils.py │ │ │ └── production_test.py │ │ ├── gen_index.py │ │ ├── generate_checklist_stubs.py │ │ ├── gentest/ │ │ │ ├── __init__.py │ │ │ ├── cli.py │ │ │ ├── request_manager.py │ │ │ ├── source_code_generator.py │ │ │ ├── templates/ │ │ │ │ └── blockchain_test/ │ │ │ │ └── transaction.py.j2 │ │ │ ├── test_context_providers.py │ │ │ ├── test_providers.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ └── test_cli.py │ │ ├── hasher.py │ │ ├── input/ │ │ │ ├── __init__.py │ │ │ ├── input_repository.py │ │ │ └── questionary_input_repository.py │ │ ├── modify_static_test_gas_limits.py │ │ ├── order_fixtures.py │ │ ├── pytest_commands/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── check_eip_versions.py │ │ │ ├── checklist.py │ │ │ ├── consume.py │ │ │ ├── execute.py │ │ │ ├── fill.py │ │ │ ├── processors.py │ │ │ ├── pytest_ini_files/ │ │ │ │ ├── pytest-check-eip-versions.ini │ │ │ │ ├── pytest-consume.ini │ │ │ │ ├── pytest-execute-eth-config.ini │ │ │ │ ├── pytest-execute-hive.ini │ │ │ │ ├── pytest-execute-recover.ini │ │ │ │ ├── pytest-execute.ini │ │ │ │ └── pytest-fill.ini │ │ │ └── watcher.py │ │ ├── show_pre_alloc_group_stats.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_eofwrap.py │ │ │ ├── test_evm_bytes.py │ │ │ ├── test_fuzzer_bridge.py │ │ │ ├── test_generate_all_formats.py │ │ │ ├── test_order_fixtures.py │ │ │ ├── test_pytest_execute_command.py │ │ │ ├── test_pytest_fill_command.py │ │ │ └── vectors/ │ │ │ ├── fuzzer_test_0.json │ │ │ ├── fuzzer_test_1.json │ │ │ ├── fuzzer_test_2.json │ │ │ ├── fuzzer_test_3.json │ │ │ └── fuzzer_test_4.json │ │ └── tox_helpers.py │ ├── config/ │ │ ├── __init__.py │ │ ├── app.py │ │ ├── check_eip_versions.py │ │ ├── docs.py │ │ ├── env.py │ │ └── templates/ │ │ └── env.yaml.j2 │ ├── conftest.py │ ├── ethereum_clis/ │ │ ├── __init__.py │ │ ├── cli_types.py │ │ ├── clis/ │ │ │ ├── __init__.py │ │ │ ├── besu.py │ │ │ ├── erigon.py │ │ │ ├── ethereumjs.py │ │ │ ├── ethrex.py │ │ │ ├── evmone.py │ │ │ ├── execution_specs.py │ │ │ ├── geth.py │ │ │ ├── nethermind.py │ │ │ ├── nimbus.py │ │ │ └── reth.py │ │ ├── ethereum_cli.py │ │ ├── file_utils.py │ │ ├── fixture_consumer_tool.py │ │ ├── py.typed │ │ ├── tests/ │ │ │ ├── test_execution_specs.py │ │ │ ├── test_transition_tool.py │ │ │ └── test_transition_tools_support.py │ │ └── transition_tool.py │ ├── ethereum_test_base_types/ │ │ ├── __init__.py │ │ ├── base_types.py │ │ ├── base_types_json.py │ │ ├── composite_types.py │ │ ├── constants.py │ │ ├── conversions.py │ │ ├── mixins.py │ │ ├── py.typed │ │ ├── pydantic.py │ │ ├── reference_spec/ │ │ │ ├── __init__.py │ │ │ ├── git_reference_spec.py │ │ │ └── reference_spec.py │ │ ├── serialization.py │ │ └── tests/ │ │ ├── __init__.py │ │ ├── test_base_types.py │ │ └── test_reference_spec.py │ ├── ethereum_test_benchmark/ │ │ ├── __init__.py │ │ └── benchmark_code_generator.py │ ├── ethereum_test_checklists/ │ │ ├── __init__.py │ │ ├── eip_checklist.py │ │ ├── eip_checklist.pyi │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_checklist_template_consistency.py │ ├── ethereum_test_exceptions/ │ │ ├── __init__.py │ │ ├── engine_api.py │ │ ├── exception_mapper.py │ │ ├── exceptions/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── block.py │ │ │ ├── eof.py │ │ │ ├── exceptions_types.py │ │ │ └── transaction.py │ │ ├── exceptions.py │ │ ├── py.typed │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_exceptions.py │ ├── ethereum_test_execution/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── blob_transaction.py │ │ └── transaction_post.py │ ├── ethereum_test_fixtures/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── blockchain.py │ │ ├── collector.py │ │ ├── common.py │ │ ├── consume.py │ │ ├── eof.py │ │ ├── file.py │ │ ├── pre_alloc_groups.py │ │ ├── py.typed │ │ ├── state.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_base.py │ │ │ ├── test_blockchain.py │ │ │ ├── test_eof.py │ │ │ └── test_state.py │ │ └── transaction.py │ ├── ethereum_test_forks/ │ │ ├── __init__.py │ │ ├── base_decorators.py │ │ ├── base_fork.py │ │ ├── forks/ │ │ │ ├── __init__.py │ │ │ ├── forks.py │ │ │ ├── helpers.py │ │ │ └── transition.py │ │ ├── gas_costs.py │ │ ├── helpers.py │ │ ├── py.typed │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_fork_range_descriptor.py │ │ │ └── test_forks.py │ │ └── transition_base_fork.py │ ├── ethereum_test_rpc/ │ │ ├── __init__.py │ │ ├── rpc.py │ │ ├── rpc_types.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_types.py │ ├── ethereum_test_specs/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── base_static.py │ │ ├── benchmark.py │ │ ├── blobs.py │ │ ├── blockchain.py │ │ ├── debugging.py │ │ ├── eof.py │ │ ├── helpers.py │ │ ├── py.typed │ │ ├── state.py │ │ ├── static_state/ │ │ │ ├── __init__.py │ │ │ ├── account.py │ │ │ ├── common/ │ │ │ │ ├── __init__.py │ │ │ │ ├── common.py │ │ │ │ ├── compile_yul.py │ │ │ │ └── tags.py │ │ │ ├── environment.py │ │ │ ├── expect_section.py │ │ │ ├── general_transaction.py │ │ │ └── state_static.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── helpers.py │ │ │ ├── test_benchmark.py │ │ │ ├── test_expect.py │ │ │ ├── test_fixtures.py │ │ │ ├── test_transaction.py │ │ │ └── test_types.py │ │ └── transaction.py │ ├── ethereum_test_tools/ │ │ ├── __init__.py │ │ ├── py.typed │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ └── test_code.py │ │ ├── tools_code/ │ │ │ ├── __init__.py │ │ │ ├── generators.py │ │ │ └── yul.py │ │ └── utility/ │ │ ├── __init__.py │ │ ├── generators.py │ │ ├── pytest.py │ │ ├── tests/ │ │ │ └── test_pytest.py │ │ └── versioning.py │ ├── ethereum_test_types/ │ │ ├── __init__.py │ │ ├── account_types.py │ │ ├── blob_types.py │ │ ├── block_access_list/ │ │ │ ├── __init__.py │ │ │ ├── account_absent_values.py │ │ │ ├── account_changes.py │ │ │ ├── exceptions.py │ │ │ ├── expectations.py │ │ │ ├── modifiers.py │ │ │ └── t8n.py │ │ ├── block_types.py │ │ ├── chain_config_types.py │ │ ├── eof/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ └── v1/ │ │ │ ├── __init__.py │ │ │ └── constants.py │ │ ├── helpers.py │ │ ├── kzg_trusted_setup.txt │ │ ├── phase_manager.py │ │ ├── py.typed │ │ ├── receipt_types.py │ │ ├── request_types.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_blob_types.py │ │ │ ├── test_block_access_lists.py │ │ │ ├── test_eof_v1.py │ │ │ ├── test_helpers.py │ │ │ ├── test_phase_manager.py │ │ │ ├── test_post_alloc.py │ │ │ ├── test_transactions.py │ │ │ └── test_types.py │ │ ├── transaction_types.py │ │ ├── trie.py │ │ └── utils.py │ ├── ethereum_test_vm/ │ │ ├── __init__.py │ │ ├── bytecode.py │ │ ├── evm_types.py │ │ ├── helpers.py │ │ ├── opcodes.py │ │ ├── py.typed │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_vm.py │ └── pytest_plugins/ │ ├── __init__.py │ ├── concurrency.py │ ├── consume/ │ │ ├── __init__.py │ │ ├── consume.py │ │ ├── direct/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ └── test_via_direct.py │ │ ├── hive_engine_test/ │ │ │ └── __init__.py │ │ ├── hive_simulators_reorg/ │ │ │ └── __init__.py │ │ ├── releases.py │ │ ├── simulators/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── engine/ │ │ │ │ ├── __init__.py │ │ │ │ └── conftest.py │ │ │ ├── exceptions.py │ │ │ ├── helpers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── ruleset.py │ │ │ │ └── timing.py │ │ │ ├── rlp/ │ │ │ │ ├── __init__.py │ │ │ │ └── conftest.py │ │ │ ├── simulator_logic/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_via_engine.py │ │ │ │ ├── test_via_rlp.py │ │ │ │ └── test_via_sync.py │ │ │ ├── single_test_client.py │ │ │ ├── sync/ │ │ │ │ ├── __init__.py │ │ │ │ └── conftest.py │ │ │ ├── test_case_description.py │ │ │ └── timing_data.py │ │ └── tests/ │ │ ├── __init__.py │ │ ├── release_information.json │ │ ├── test_consume_args.py │ │ ├── test_fixtures_source_input_types.py │ │ └── test_releases.py │ ├── custom_logging/ │ │ ├── __init__.py │ │ ├── plugin_logging.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_logging.py │ ├── eels_resolutions.json │ ├── eels_resolver.py │ ├── execute/ │ │ ├── __init__.py │ │ ├── eth_config/ │ │ │ ├── __init__.py │ │ │ ├── eth_config.py │ │ │ ├── execute_eth_config.py │ │ │ ├── execute_types.py │ │ │ ├── networks.yml │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── genesis_example.json │ │ │ ├── test_execute_eth_config.py │ │ │ └── test_genesis.py │ │ ├── execute.py │ │ ├── execute_recover.py │ │ ├── pre_alloc.py │ │ ├── recover.py │ │ ├── rpc/ │ │ │ ├── __init__.py │ │ │ ├── chain_builder_eth_rpc.py │ │ │ ├── hive.py │ │ │ ├── remote.py │ │ │ └── remote_seed_sender.py │ │ ├── sender.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_pre_alloc.py │ ├── filler/ │ │ ├── __init__.py │ │ ├── eip_checklist.py │ │ ├── filler.py │ │ ├── fixture_output.py │ │ ├── gen_test_doc/ │ │ │ ├── __init__.py │ │ │ ├── gen_test_doc.py │ │ │ └── page_props.py │ │ ├── ported_tests.py │ │ ├── pre_alloc.py │ │ ├── static_filler.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_benchmarking.py │ │ │ ├── test_collect_only.py │ │ │ ├── test_eip_checklist.py │ │ │ ├── test_filler.py │ │ │ ├── test_filling_session.py │ │ │ ├── test_format_selector.py │ │ │ ├── test_generate_all_formats.py │ │ │ ├── test_output_directory.py │ │ │ ├── test_phase_manager.py │ │ │ ├── test_pre_alloc.py │ │ │ ├── test_prealloc_group.py │ │ │ ├── test_prealloc_group_usage_example.py │ │ │ ├── test_slow_marker_pre_alloc.py │ │ │ └── test_verify_sync_marker.py │ │ └── witness.py │ ├── fix_package_test_path.py │ ├── forks/ │ │ ├── __init__.py │ │ ├── forks.py │ │ └── tests/ │ │ ├── __init__.py │ │ ├── test_bad_command_line_options.py │ │ ├── test_bad_validity_markers.py │ │ ├── test_covariant_markers.py │ │ ├── test_fork_parametrizer_types.py │ │ ├── test_forks.py │ │ └── test_markers.py │ ├── help/ │ │ ├── __init__.py │ │ ├── help.py │ │ └── tests/ │ │ └── test_help.py │ ├── py.typed │ ├── pytest_hive/ │ │ ├── hive_info.py │ │ └── pytest_hive.py │ ├── shared/ │ │ ├── benchmarking.py │ │ ├── execute_fill.py │ │ ├── helpers.py │ │ └── transaction_fixtures.py │ ├── solc/ │ │ ├── __init__.py │ │ └── solc.py │ └── spec_version_checker/ │ ├── __init__.py │ └── spec_version_checker.py ├── stubs/ │ ├── joblib/ │ │ └── __init__.pyi │ ├── jwt/ │ │ ├── __init__.pyi │ │ └── encode.pyi │ ├── pytest_metadata/ │ │ ├── __init__.pyi │ │ └── plugin.pyi │ ├── trie/ │ │ ├── __init__.pyi │ │ └── hexary.pyi │ └── xdist/ │ ├── __init__.pyi │ └── methods.pyi ├── tests/ │ ├── __init__.py │ ├── amsterdam/ │ │ ├── __init__.py │ │ └── eip7928_block_level_access_lists/ │ │ ├── __init__.py │ │ ├── spec.py │ │ ├── test_block_access_lists.py │ │ ├── test_block_access_lists_eip7702.py │ │ ├── test_block_access_lists_invalid.py │ │ ├── test_block_access_lists_opcodes.py │ │ └── test_cases.md │ ├── benchmark/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── helpers.py │ │ ├── stateful/ │ │ │ ├── __init__.py │ │ │ ├── bloatnet/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── test_bloatnet.py │ │ │ │ ├── test_multi_opcode.py │ │ │ │ └── test_single_opcode.py │ │ │ └── conftest.py │ │ ├── test_worst_blocks.py │ │ ├── test_worst_bytecode.py │ │ ├── test_worst_compute.py │ │ ├── test_worst_memory.py │ │ ├── test_worst_opcode.py │ │ └── test_worst_stateful_opcodes.py │ ├── berlin/ │ │ ├── __init__.py │ │ ├── eip2929_gas_cost_increases/ │ │ │ ├── __init__.py │ │ │ ├── test_call.py │ │ │ └── test_precompile_warming.py │ │ └── eip2930_access_list/ │ │ ├── __init__.py │ │ ├── spec.py │ │ ├── test_acl.py │ │ └── test_tx_intrinsic_gas.py │ ├── byzantium/ │ │ ├── __init__.py │ │ └── eip198_modexp_precompile/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ └── test_modexp.py │ ├── cancun/ │ │ ├── __init__.py │ │ ├── eip1153_tstore/ │ │ │ ├── __init__.py │ │ │ ├── spec.py │ │ │ ├── test_basic_tload.py │ │ │ ├── test_tload_calls.py │ │ │ ├── test_tload_reentrancy.py │ │ │ ├── test_tstorage.py │ │ │ ├── test_tstorage_clear_after_tx.py │ │ │ ├── test_tstorage_create_contexts.py │ │ │ ├── test_tstorage_execution_contexts.py │ │ │ ├── test_tstorage_reentrancy_contexts.py │ │ │ ├── test_tstorage_selfdestruct.py │ │ │ └── test_tstore_reentrancy.py │ │ ├── eip4788_beacon_root/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── spec.py │ │ │ └── test_beacon_root_contract.py │ │ ├── eip4844_blobs/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── conftest.py │ │ │ ├── point_evaluation_vectors/ │ │ │ │ ├── README.md │ │ │ │ ├── concat_kzg_vectors_to_json.py │ │ │ │ ├── go_kzg_4844_verify_kzg_proof.json │ │ │ │ └── requirements.txt │ │ │ ├── spec.py │ │ │ ├── test_blob_txs.py │ │ │ ├── test_blob_txs_full.py │ │ │ ├── test_blobhash_opcode.py │ │ │ ├── test_blobhash_opcode_contexts.py │ │ │ ├── test_excess_blob_gas.py │ │ │ ├── test_excess_blob_gas_fork_transition.py │ │ │ ├── test_point_evaluation_precompile.py │ │ │ └── test_point_evaluation_precompile_gas.py │ │ ├── eip5656_mcopy/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── test_mcopy.py │ │ │ ├── test_mcopy_contexts.py │ │ │ └── test_mcopy_memory_expansion.py │ │ ├── eip6780_selfdestruct/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_dynamic_create2_selfdestruct_collision.py │ │ │ ├── test_reentrancy_selfdestruct_revert.py │ │ │ ├── test_selfdestruct.py │ │ │ └── test_selfdestruct_revert.py │ │ └── eip7516_blobgasfee/ │ │ ├── __init__.py │ │ └── test_blobgasfee_opcode.py │ ├── constantinople/ │ │ ├── __init__.py │ │ ├── eip1014_create2/ │ │ │ ├── __init__.py │ │ │ ├── spec.py │ │ │ ├── test_create_returndata.py │ │ │ └── test_recreate.py │ │ └── eip145_bitwise_shift/ │ │ ├── __init__.py │ │ ├── spec.py │ │ └── test_shift_combinations.py │ ├── frontier/ │ │ ├── __init__.py │ │ ├── create/ │ │ │ ├── __init__.py │ │ │ ├── test_create_one_byte.py │ │ │ ├── test_create_suicide_during_init.py │ │ │ └── test_create_suicide_store.py │ │ ├── examples/ │ │ │ ├── __init__.py │ │ │ └── test_block_intermediate_state.py │ │ ├── identity_precompile/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── conftest.py │ │ │ ├── test_identity.py │ │ │ └── test_identity_returndatasize.py │ │ ├── opcodes/ │ │ │ ├── __init__.py │ │ │ ├── test_all_opcodes.py │ │ │ ├── test_blockhash.py │ │ │ ├── test_call.py │ │ │ ├── test_call_and_callcode_gas_calculation.py │ │ │ ├── test_calldatacopy.py │ │ │ ├── test_calldataload.py │ │ │ ├── test_calldatasize.py │ │ │ ├── test_dup.py │ │ │ ├── test_push.py │ │ │ ├── test_selfdestruct.py │ │ │ └── test_swap.py │ │ ├── precompiles/ │ │ │ ├── __init__.py │ │ │ ├── test_precompile_absence.py │ │ │ └── test_precompiles.py │ │ └── scenarios/ │ │ ├── __init__.py │ │ ├── common.py │ │ ├── programs/ │ │ │ ├── __init__.py │ │ │ ├── all_frontier_opcodes.py │ │ │ ├── context_calls.py │ │ │ ├── invalid_opcodes.py │ │ │ └── static_violation.py │ │ ├── scenarios/ │ │ │ ├── __init__.py │ │ │ ├── call_combinations.py │ │ │ ├── create_combinations.py │ │ │ ├── double_call_combinations.py │ │ │ └── revert_combinations.py │ │ └── test_scenarios.py │ ├── homestead/ │ │ ├── __init__.py │ │ ├── coverage/ │ │ │ ├── __init__.py │ │ │ └── test_coverage.py │ │ ├── identity_precompile/ │ │ │ ├── __init__.py │ │ │ └── test_identity.py │ │ └── yul/ │ │ └── __init__.py │ ├── istanbul/ │ │ ├── __init__.py │ │ ├── eip1344_chainid/ │ │ │ ├── __init__.py │ │ │ └── test_chainid.py │ │ └── eip152_blake2/ │ │ ├── __init__.py │ │ ├── common.py │ │ ├── conftest.py │ │ ├── spec.py │ │ ├── test_blake2.py │ │ └── test_blake2_delegatecall.py │ ├── osaka/ │ │ ├── __init__.py │ │ ├── eip7594_peerdas/ │ │ │ ├── __init__.py │ │ │ ├── spec.py │ │ │ ├── test_get_blobs.py │ │ │ └── test_max_blob_per_tx.py │ │ ├── eip7823_modexp_upper_bounds/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── eip_checklist_external_coverage.txt │ │ │ ├── eip_checklist_not_applicable.txt │ │ │ ├── spec.py │ │ │ └── test_modexp_upper_bounds.py │ │ ├── eip7825_transaction_gas_limit_cap/ │ │ │ ├── __init__.py │ │ │ ├── eip_checklist_external_coverage.txt │ │ │ ├── eip_checklist_not_applicable.txt │ │ │ ├── spec.py │ │ │ ├── test_tx_gas_limit.py │ │ │ └── test_tx_gas_limit_transition_fork.py │ │ ├── eip7883_modexp_gas_increase/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── eip_checklist_external_coverage.txt │ │ │ ├── eip_checklist_not_applicable.txt │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_modexp_thresholds.py │ │ │ ├── test_modexp_thresholds_transition.py │ │ │ └── vector/ │ │ │ ├── legacy.json │ │ │ └── vectors.json │ │ ├── eip7918_blob_reserve_price/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── spec.py │ │ │ ├── test_blob_base_fee.py │ │ │ ├── test_blob_reserve_price_with_bpo.py │ │ │ └── test_blob_reserve_price_with_bpo_transitions.py │ │ ├── eip7934_block_rlp_limit/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── eip_checklist_external_coverage.txt │ │ │ ├── eip_checklist_not_applicable.txt │ │ │ ├── spec.py │ │ │ └── test_max_block_rlp_size.py │ │ ├── eip7939_count_leading_zeros/ │ │ │ ├── __init__.py │ │ │ ├── eip_checklist_external_coverage.txt │ │ │ ├── eip_checklist_not_applicable.txt │ │ │ ├── spec.py │ │ │ └── test_count_leading_zeros.py │ │ └── eip7951_p256verify_precompiles/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── eip_checklist_external_coverage.txt │ │ ├── eip_checklist_not_applicable.txt │ │ ├── helpers.py │ │ ├── scripts/ │ │ │ └── find_low_p256_points.sage │ │ ├── spec.py │ │ ├── test_p256verify.py │ │ ├── test_p256verify_before_fork.py │ │ └── vectors/ │ │ ├── secp256r1_k_and_s.json │ │ ├── secp256r1_modified_r_s.json │ │ ├── secp256r1_public_key.json │ │ ├── secp256r1_shamir_multiplication.json │ │ ├── secp256r1_signature_specific.json │ │ ├── secp256r1_small_large_r_s.json │ │ ├── secp256r1_special_case_hash.json │ │ ├── secp256r1_special_case_r_s.json │ │ ├── secp256r1_special_points.json │ │ └── secp256r1_u1_u2.json │ ├── paris/ │ │ ├── __init__.py │ │ ├── eip7610_create_collision/ │ │ │ ├── __init__.py │ │ │ └── test_initcollision.py │ │ └── security/ │ │ ├── __init__.py │ │ └── test_selfdestruct_balance_bug.py │ ├── prague/ │ │ ├── __init__.py │ │ ├── eip2537_bls_12_381_precompiles/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_bls12_g1add.py │ │ │ ├── test_bls12_g1msm.py │ │ │ ├── test_bls12_g1mul.py │ │ │ ├── test_bls12_g2add.py │ │ │ ├── test_bls12_g2msm.py │ │ │ ├── test_bls12_g2mul.py │ │ │ ├── test_bls12_map_fp2_to_g2.py │ │ │ ├── test_bls12_map_fp_to_g1.py │ │ │ ├── test_bls12_pairing.py │ │ │ ├── test_bls12_precompiles_before_fork.py │ │ │ ├── test_bls12_variable_length_input_contracts.py │ │ │ ├── test_eip_mainnet.py │ │ │ └── vectors/ │ │ │ ├── add_G1_bls.json │ │ │ ├── add_G2_bls.json │ │ │ ├── fail-add_G1_bls.json │ │ │ ├── fail-add_G2_bls.json │ │ │ ├── fail-map_fp2_to_G2_bls.json │ │ │ ├── fail-map_fp_to_G1_bls.json │ │ │ ├── fail-msm_G1_bls.json │ │ │ ├── fail-msm_G2_bls.json │ │ │ ├── fail-mul_G1_bls.json │ │ │ ├── fail-mul_G2_bls.json │ │ │ ├── fail-pairing_check_bls.json │ │ │ ├── map_fp2_to_G2_bls.json │ │ │ ├── map_fp_to_G1_bls.json │ │ │ ├── msm_G1_bls.json │ │ │ ├── msm_G2_bls.json │ │ │ ├── mul_G1_bls.json │ │ │ ├── mul_G2_bls.json │ │ │ ├── pairing_check_bls.json │ │ │ └── test-vectors.md │ │ ├── eip2935_historical_block_hashes_from_state/ │ │ │ ├── __init__.py │ │ │ ├── contract_deploy_tx.json │ │ │ ├── spec.py │ │ │ ├── test_block_hashes.py │ │ │ ├── test_contract_deployment.py │ │ │ └── test_eip_mainnet.py │ │ ├── eip6110_deposits/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_deposits.py │ │ │ ├── test_eip_mainnet.py │ │ │ └── test_modified_contract.py │ │ ├── eip7002_el_triggerable_withdrawals/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── contract_deploy_tx.json │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_contract_deployment.py │ │ │ ├── test_eip_mainnet.py │ │ │ ├── test_modified_withdrawal_contract.py │ │ │ ├── test_withdrawal_requests.py │ │ │ └── test_withdrawal_requests_during_fork.py │ │ ├── eip7251_consolidations/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── contract_deploy_tx.json │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_consolidations.py │ │ │ ├── test_consolidations_during_fork.py │ │ │ ├── test_contract_deployment.py │ │ │ ├── test_eip_mainnet.py │ │ │ └── test_modified_consolidation_contract.py │ │ ├── eip7623_increase_calldata_cost/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_eip_mainnet.py │ │ │ ├── test_execution_gas.py │ │ │ ├── test_refunds.py │ │ │ └── test_transaction_validity.py │ │ ├── eip7685_general_purpose_el_requests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── spec.py │ │ │ └── test_multi_type_requests.py │ │ └── eip7702_set_code_tx/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── spec.py │ │ ├── test_calls.py │ │ ├── test_eip_mainnet.py │ │ ├── test_gas.py │ │ ├── test_invalid_tx.py │ │ ├── test_set_code_txs.py │ │ └── test_set_code_txs_2.py │ ├── shanghai/ │ │ ├── __init__.py │ │ ├── eip3651_warm_coinbase/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── spec.py │ │ │ └── test_warm_coinbase.py │ │ ├── eip3855_push0/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── spec.py │ │ │ └── test_push0.py │ │ ├── eip3860_initcode/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── helpers.py │ │ │ ├── spec.py │ │ │ ├── test_initcode.py │ │ │ └── test_with_eof.py │ │ └── eip4895_withdrawals/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── spec.py │ │ └── test_withdrawals.py │ ├── static/ │ │ ├── README.md │ │ ├── __init__.py │ │ └── state_tests/ │ │ ├── Cancun/ │ │ │ ├── __init__.py │ │ │ ├── stEIP1153_transientStorage/ │ │ │ │ ├── 10_revertUndoesStoreAfterReturnFiller.yml │ │ │ │ ├── 14_revertAfterNestedStaticcallFiller.yml │ │ │ │ ├── 15_tstoreCannotBeDosdFiller.yml │ │ │ │ ├── 17_tstoreGasFiller.yml │ │ │ │ ├── 19_oogUndoesTransientStoreFiller.yml │ │ │ │ ├── 21_tstoreCannotBeDosdOOOFiller.yml │ │ │ │ ├── __init__.py │ │ │ │ ├── transStorageOKFiller.yml │ │ │ │ └── transStorageResetFiller.yml │ │ │ ├── stEIP4844_blobtransactions/ │ │ │ │ ├── __init__.py │ │ │ │ ├── createBlobhashTxFiller.yml │ │ │ │ ├── emptyBlobhashListFiller.yml │ │ │ │ ├── opcodeBlobhBoundsFiller.yml │ │ │ │ ├── opcodeBlobhashOutOfRangeFiller.yml │ │ │ │ └── wrongBlobhashVersionFiller.yml │ │ │ └── stEIP5656_MCOPY/ │ │ │ ├── MCOPYFiller.yml │ │ │ ├── MCOPY_copy_costFiller.yml │ │ │ ├── MCOPY_memory_expansion_costFiller.yml │ │ │ ├── MCOPY_memory_hashFiller.yml │ │ │ └── __init__.py │ │ ├── README.md │ │ ├── Shanghai/ │ │ │ ├── __init__.py │ │ │ ├── stEIP3651_warmcoinbase/ │ │ │ │ ├── __init__.py │ │ │ │ ├── coinbaseWarmAccountCallGasFailFiller.yml │ │ │ │ └── coinbaseWarmAccountCallGasFiller.yml │ │ │ ├── stEIP3855_push0/ │ │ │ │ ├── __init__.py │ │ │ │ ├── push0Filler.yml │ │ │ │ ├── push0Filler_test.yml │ │ │ │ ├── push0Gas2Filler.yml │ │ │ │ └── push0GasFiller.yml │ │ │ └── stEIP3860_limitmeterinitcode/ │ │ │ ├── __init__.py │ │ │ ├── create2InitCodeSizeLimitFiller.yml │ │ │ ├── createInitCodeSizeLimitFiller.yml │ │ │ └── creationTxInitCodeSizeLimitFiller.yml │ │ ├── VMTests/ │ │ │ ├── __init__.py │ │ │ ├── vmArithmeticTest/ │ │ │ │ ├── __init__.py │ │ │ │ ├── addFiller.yml │ │ │ │ ├── addmodFiller.yml │ │ │ │ ├── arithFiller.yml │ │ │ │ ├── divByZeroFiller.yml │ │ │ │ ├── divFiller.yml │ │ │ │ ├── expFiller.yml │ │ │ │ ├── expPower256Filler.yml │ │ │ │ ├── expPower256Of256Filler.yml │ │ │ │ ├── expPower2Filler.yml │ │ │ │ ├── fibFiller.yml │ │ │ │ ├── modFiller.yml │ │ │ │ ├── mulFiller.yml │ │ │ │ ├── mulmodFiller.yml │ │ │ │ ├── notFiller.yml │ │ │ │ ├── sdivFiller.yml │ │ │ │ ├── signextendFiller.yml │ │ │ │ ├── smodFiller.yml │ │ │ │ ├── subFiller.yml │ │ │ │ ├── twoOpsFiller.yml │ │ │ │ └── twoOpsGen.js │ │ │ ├── vmBitwiseLogicOperation/ │ │ │ │ ├── __init__.py │ │ │ │ ├── andFiller.yml │ │ │ │ ├── byteFiller.yml │ │ │ │ ├── eqFiller.yml │ │ │ │ ├── gtFiller.yml │ │ │ │ ├── iszeroFiller.yml │ │ │ │ ├── ltFiller.yml │ │ │ │ ├── notFiller.yml │ │ │ │ ├── orFiller.yml │ │ │ │ ├── sgtFiller.yml │ │ │ │ ├── sltFiller.yml │ │ │ │ └── xorFiller.yml │ │ │ ├── vmIOandFlowOperations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── codecopyFiller.yml │ │ │ │ ├── gasFiller.yml │ │ │ │ ├── jumpFiller.yml │ │ │ │ ├── jumpToPushFiller.yml │ │ │ │ ├── jumpiFiller.yml │ │ │ │ ├── loop_stacklimitFiller.yml │ │ │ │ ├── loopsConditionalsFiller.yml │ │ │ │ ├── mloadFiller.yml │ │ │ │ ├── msizeFiller.yml │ │ │ │ ├── mstore8Filler.yml │ │ │ │ ├── mstoreFiller.yml │ │ │ │ ├── pcFiller.yml │ │ │ │ ├── popFiller.yml │ │ │ │ ├── returnFiller.yml │ │ │ │ └── sstore_sloadFiller.yml │ │ │ ├── vmLogTest/ │ │ │ │ ├── __init__.py │ │ │ │ ├── log0Filler.yml │ │ │ │ ├── log1Filler.yml │ │ │ │ ├── log2Filler.yml │ │ │ │ ├── log3Filler.yml │ │ │ │ └── log4Filler.yml │ │ │ └── vmTests/ │ │ │ ├── __init__.py │ │ │ ├── blockInfoFiller.yml │ │ │ ├── envInfoFiller.yml │ │ │ ├── randomFiller.yml │ │ │ ├── sha3Filler.yml │ │ │ └── suicideFiller.yml │ │ ├── __init__.py │ │ ├── stArgsZeroOneBalance/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── addNonConstFiller.yml │ │ │ ├── addmodNonConstFiller.yml │ │ │ ├── andNonConstFiller.yml │ │ │ ├── balanceNonConstFiller.yml │ │ │ ├── byteNonConstFiller.yml │ │ │ ├── callNonConstFiller.yml │ │ │ ├── callcodeNonConstFiller.yml │ │ │ ├── calldatacopyNonConstFiller.yml │ │ │ ├── calldataloadNonConstFiller.yml │ │ │ ├── codecopyNonConstFiller.yml │ │ │ ├── createNonConstFiller.yml │ │ │ ├── delegatecallNonConstFiller.yml │ │ │ ├── divNonConstFiller.yml │ │ │ ├── eqNonConstFiller.yml │ │ │ ├── expNonConstFiller.yml │ │ │ ├── extcodecopyNonConstFiller.yml │ │ │ ├── extcodesizeNonConstFiller.yml │ │ │ ├── gtNonConstFiller.yml │ │ │ ├── iszeroNonConstFiller.yml │ │ │ ├── jumpNonConstFiller.yml │ │ │ ├── jumpiNonConstFiller.yml │ │ │ ├── log0NonConstFiller.yml │ │ │ ├── log1NonConstFiller.yml │ │ │ ├── log2NonConstFiller.yml │ │ │ ├── log3NonConstFiller.yml │ │ │ ├── ltNonConstFiller.yml │ │ │ ├── mloadNonConstFiller.yml │ │ │ ├── modNonConstFiller.yml │ │ │ ├── mstore8NonConstFiller.yml │ │ │ ├── mstoreNonConstFiller.yml │ │ │ ├── mulNonConstFiller.yml │ │ │ ├── mulmodNonConstFiller.yml │ │ │ ├── notNonConstFiller.yml │ │ │ ├── orNonConstFiller.yml │ │ │ ├── returnNonConstFiller.yml │ │ │ ├── sdivNonConstFiller.yml │ │ │ ├── sgtNonConstFiller.yml │ │ │ ├── sha3NonConstFiller.yml │ │ │ ├── signextNonConstFiller.yml │ │ │ ├── sloadNonConstFiller.yml │ │ │ ├── sltNonConstFiller.yml │ │ │ ├── smodNonConstFiller.yml │ │ │ ├── sstoreNonConstFiller.yml │ │ │ ├── subNonConstFiller.yml │ │ │ ├── suicideNonConstFiller.yml │ │ │ └── xorNonConstFiller.yml │ │ ├── stAttackTest/ │ │ │ ├── ContractCreationSpamFiller.json │ │ │ ├── CrashingTransactionFiller.json │ │ │ └── __init__.py │ │ ├── stBadOpcode/ │ │ │ ├── __init__.py │ │ │ ├── eip2315NotRemovedFiller.json │ │ │ ├── invalidAddrFiller.yml │ │ │ ├── measureGasFiller.yml │ │ │ ├── operationDiffGasFiller.yml │ │ │ └── undefinedOpcodeFirstByteFiller.yml │ │ ├── stBugs/ │ │ │ ├── __init__.py │ │ │ ├── randomStatetestDEFAULT-Tue_07_58_41-15153-575192Filler.json │ │ │ ├── randomStatetestDEFAULT-Tue_07_58_41-15153-575192_londonFiller.json │ │ │ ├── returndatacopyPythonBug_Tue_03_48_41-1432Filler.json │ │ │ └── staticcall_createfailsFiller.json │ │ ├── stCallCodes/ │ │ │ ├── __init__.py │ │ │ ├── call_OOG_additionalGasCosts1Filler.json │ │ │ ├── call_OOG_additionalGasCosts2Filler.json │ │ │ ├── callcall_00Filler.json │ │ │ ├── callcall_00_OOGEFiller.json │ │ │ ├── callcall_00_OOGE_valueTransferFiller.json │ │ │ ├── callcall_00_SuicideEndFiller.json │ │ │ ├── callcallcall_000Filler.json │ │ │ ├── callcallcall_000_OOGEFiller.json │ │ │ ├── callcallcall_000_OOGMAfterFiller.json │ │ │ ├── callcallcall_000_OOGMBeforeFiller.json │ │ │ ├── callcallcall_000_SuicideEndFiller.json │ │ │ ├── callcallcall_000_SuicideMiddleFiller.json │ │ │ ├── callcallcall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcallcode_001Filler.json │ │ │ ├── callcallcallcode_001_OOGEFiller.json │ │ │ ├── callcallcallcode_001_OOGMAfterFiller.json │ │ │ ├── callcallcallcode_001_OOGMBeforeFiller.json │ │ │ ├── callcallcallcode_001_SuicideEndFiller.json │ │ │ ├── callcallcallcode_001_SuicideMiddleFiller.json │ │ │ ├── callcallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcode_01Filler.json │ │ │ ├── callcallcode_01_OOGEFiller.json │ │ │ ├── callcallcode_01_SuicideEndFiller.json │ │ │ ├── callcallcodecall_010Filler.json │ │ │ ├── callcallcodecall_010_OOGEFiller.json │ │ │ ├── callcallcodecall_010_OOGMAfterFiller.json │ │ │ ├── callcallcodecall_010_OOGMBeforeFiller.json │ │ │ ├── callcallcodecall_010_SuicideEndFiller.json │ │ │ ├── callcallcodecall_010_SuicideMiddleFiller.json │ │ │ ├── callcallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcodecallcode_011Filler.json │ │ │ ├── callcallcodecallcode_011_OOGEFiller.json │ │ │ ├── callcallcodecallcode_011_OOGMAfterFiller.json │ │ │ ├── callcallcodecallcode_011_OOGMBeforeFiller.json │ │ │ ├── callcallcodecallcode_011_SuicideEndFiller.json │ │ │ ├── callcallcodecallcode_011_SuicideMiddleFiller.json │ │ │ ├── callcallcodecallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodeDynamicCode2SelfCallFiller.json │ │ │ ├── callcodeDynamicCodeFiller.json │ │ │ ├── callcodeEmptycontractFiller.json │ │ │ ├── callcodeInInitcodeToEmptyContractFiller.json │ │ │ ├── callcodeInInitcodeToExisContractWithVTransferNEMoneyFiller.json │ │ │ ├── callcodeInInitcodeToExistingContractFiller.json │ │ │ ├── callcodeInInitcodeToExistingContractWithValueTransferFiller.json │ │ │ ├── callcode_checkPCFiller.json │ │ │ ├── callcodecall_10Filler.json │ │ │ ├── callcodecall_10_OOGEFiller.json │ │ │ ├── callcodecall_10_SuicideEndFiller.json │ │ │ ├── callcodecallcall_100Filler.json │ │ │ ├── callcodecallcall_100_OOGEFiller.json │ │ │ ├── callcodecallcall_100_OOGMAfterFiller.json │ │ │ ├── callcodecallcall_100_OOGMBeforeFiller.json │ │ │ ├── callcodecallcall_100_SuicideEndFiller.json │ │ │ ├── callcodecallcall_100_SuicideMiddleFiller.json │ │ │ ├── callcodecallcall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcallcode_101Filler.json │ │ │ ├── callcodecallcallcode_101_OOGEFiller.json │ │ │ ├── callcodecallcallcode_101_OOGMAfterFiller.json │ │ │ ├── callcodecallcallcode_101_OOGMBeforeFiller.json │ │ │ ├── callcodecallcallcode_101_SuicideEndFiller.json │ │ │ ├── callcodecallcallcode_101_SuicideMiddleFiller.json │ │ │ ├── callcodecallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcode_11Filler.json │ │ │ ├── callcodecallcode_11_OOGEFiller.json │ │ │ ├── callcodecallcode_11_SuicideEndFiller.json │ │ │ ├── callcodecallcodecall_110Filler.json │ │ │ ├── callcodecallcodecall_110_OOGEFiller.json │ │ │ ├── callcodecallcodecall_110_OOGMAfterFiller.json │ │ │ ├── callcodecallcodecall_110_OOGMBeforeFiller.json │ │ │ ├── callcodecallcodecall_110_SuicideEndFiller.json │ │ │ ├── callcodecallcodecall_110_SuicideMiddleFiller.json │ │ │ ├── callcodecallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcodecallcode_111Filler.json │ │ │ ├── callcodecallcodecallcode_111_OOGEFiller.json │ │ │ ├── callcodecallcodecallcode_111_OOGMAfterFiller.json │ │ │ ├── callcodecallcodecallcode_111_OOGMBeforeFiller.json │ │ │ ├── callcodecallcodecallcode_111_SuicideEndFiller.json │ │ │ ├── callcodecallcodecallcode_111_SuicideMiddleFiller.json │ │ │ └── callcodecallcodecallcode_ABCB_RECURSIVEFiller.json │ │ ├── stCallCreateCallCodeTest/ │ │ │ ├── Call1024BalanceTooLowFiller.json │ │ │ ├── Call1024OOGFiller.json │ │ │ ├── Call1024PreCallsFiller.json │ │ │ ├── CallLoseGasOOGFiller.json │ │ │ ├── CallRecursiveBombPreCallFiller.json │ │ │ ├── Callcode1024BalanceTooLowFiller.json │ │ │ ├── Callcode1024OOGFiller.json │ │ │ ├── CallcodeLoseGasOOGFiller.json │ │ │ ├── __init__.py │ │ │ ├── callOutput1Filler.json │ │ │ ├── callOutput2Filler.json │ │ │ ├── callOutput3FailFiller.json │ │ │ ├── callOutput3Filler.json │ │ │ ├── callOutput3partialFailFiller.json │ │ │ ├── callOutput3partialFiller.json │ │ │ ├── callWithHighValueAndGasOOGFiller.json │ │ │ ├── callWithHighValueAndOOGatTxLevelFiller.json │ │ │ ├── callWithHighValueFiller.json │ │ │ ├── callWithHighValueOOGinCallFiller.json │ │ │ ├── callcodeOutput1Filler.json │ │ │ ├── callcodeOutput2Filler.json │ │ │ ├── callcodeOutput3FailFiller.json │ │ │ ├── callcodeOutput3Filler.json │ │ │ ├── callcodeOutput3partialFailFiller.json │ │ │ ├── callcodeOutput3partialFiller.json │ │ │ ├── callcodeWithHighValueAndGasOOGFiller.json │ │ │ ├── callcodeWithHighValueFiller.json │ │ │ ├── contractCreationMakeCallThatAskMoreGasThenTransactionProvidedFiller.json │ │ │ ├── createFailBalanceTooLowFiller.json │ │ │ ├── createInitFailBadJumpDestination2Filler.json │ │ │ ├── createInitFailBadJumpDestinationFiller.json │ │ │ ├── createInitFailStackSizeLargerThan1024Filler.json │ │ │ ├── createInitFailStackUnderflowFiller.json │ │ │ ├── createInitFailUndefinedInstruction2Filler.json │ │ │ ├── createInitFailUndefinedInstructionFiller.json │ │ │ ├── createInitFail_OOGduringInit2Filler.json │ │ │ ├── createInitFail_OOGduringInitFiller.json │ │ │ ├── createInitOOGforCREATEFiller.json │ │ │ ├── createJS_ExampleContractFiller.json │ │ │ ├── createJS_NoCollisionFiller.json │ │ │ ├── createNameRegistratorPerTxsFiller.json │ │ │ ├── createNameRegistratorPerTxsNotEnoughGasFiller.json │ │ │ ├── createNameRegistratorPreStore1NotEnoughGasFiller.json │ │ │ └── createNameRegistratorendowmentTooHighFiller.json │ │ ├── stCallDelegateCodesCallCodeHomestead/ │ │ │ ├── __init__.py │ │ │ ├── callcallcallcode_001Filler.json │ │ │ ├── callcallcallcode_001_OOGEFiller.json │ │ │ ├── callcallcallcode_001_OOGMAfterFiller.json │ │ │ ├── callcallcallcode_001_OOGMBeforeFiller.json │ │ │ ├── callcallcallcode_001_SuicideEndFiller.json │ │ │ ├── callcallcallcode_001_SuicideMiddleFiller.json │ │ │ ├── callcallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcode_01Filler.json │ │ │ ├── callcallcode_01_OOGEFiller.json │ │ │ ├── callcallcode_01_SuicideEndFiller.json │ │ │ ├── callcallcodecall_010Filler.json │ │ │ ├── callcallcodecall_010_OOGEFiller.json │ │ │ ├── callcallcodecall_010_OOGMAfterFiller.json │ │ │ ├── callcallcodecall_010_OOGMBeforeFiller.json │ │ │ ├── callcallcodecall_010_SuicideEndFiller.json │ │ │ ├── callcallcodecall_010_SuicideMiddleFiller.json │ │ │ ├── callcallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcodecallcode_011Filler.json │ │ │ ├── callcallcodecallcode_011_OOGEFiller.json │ │ │ ├── callcallcodecallcode_011_OOGMAfterFiller.json │ │ │ ├── callcallcodecallcode_011_OOGMBeforeFiller.json │ │ │ ├── callcallcodecallcode_011_SuicideEndFiller.json │ │ │ ├── callcallcodecallcode_011_SuicideMiddleFiller.json │ │ │ ├── callcallcodecallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecall_10Filler.json │ │ │ ├── callcodecall_10_OOGEFiller.json │ │ │ ├── callcodecall_10_SuicideEndFiller.json │ │ │ ├── callcodecallcall_100Filler.json │ │ │ ├── callcodecallcall_100_OOGEFiller.json │ │ │ ├── callcodecallcall_100_OOGMAfterFiller.json │ │ │ ├── callcodecallcall_100_OOGMBeforeFiller.json │ │ │ ├── callcodecallcall_100_SuicideEndFiller.json │ │ │ ├── callcodecallcall_100_SuicideMiddleFiller.json │ │ │ ├── callcodecallcall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcallcode_101Filler.json │ │ │ ├── callcodecallcallcode_101_OOGEFiller.json │ │ │ ├── callcodecallcallcode_101_OOGMAfterFiller.json │ │ │ ├── callcodecallcallcode_101_OOGMBeforeFiller.json │ │ │ ├── callcodecallcallcode_101_SuicideEndFiller.json │ │ │ ├── callcodecallcallcode_101_SuicideMiddleFiller.json │ │ │ ├── callcodecallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcode_11Filler.json │ │ │ ├── callcodecallcode_11_OOGEFiller.json │ │ │ ├── callcodecallcode_11_SuicideEndFiller.json │ │ │ ├── callcodecallcodecall_110Filler.json │ │ │ ├── callcodecallcodecall_110_OOGEFiller.json │ │ │ ├── callcodecallcodecall_110_OOGMAfterFiller.json │ │ │ ├── callcodecallcodecall_110_OOGMBeforeFiller.json │ │ │ ├── callcodecallcodecall_110_SuicideEndFiller.json │ │ │ ├── callcodecallcodecall_110_SuicideMiddleFiller.json │ │ │ ├── callcodecallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcodecallcode_111Filler.json │ │ │ ├── callcodecallcodecallcode_111_OOGEFiller.json │ │ │ ├── callcodecallcodecallcode_111_OOGMAfterFiller.json │ │ │ ├── callcodecallcodecallcode_111_OOGMBeforeFiller.json │ │ │ ├── callcodecallcodecallcode_111_SuicideEndFiller.json │ │ │ ├── callcodecallcodecallcode_111_SuicideMiddleFiller.json │ │ │ └── callcodecallcodecallcode_ABCB_RECURSIVEFiller.json │ │ ├── stCallDelegateCodesHomestead/ │ │ │ ├── __init__.py │ │ │ ├── callcallcallcode_001Filler.json │ │ │ ├── callcallcallcode_001_OOGEFiller.json │ │ │ ├── callcallcallcode_001_OOGMAfterFiller.json │ │ │ ├── callcallcallcode_001_OOGMBeforeFiller.json │ │ │ ├── callcallcallcode_001_SuicideEndFiller.json │ │ │ ├── callcallcallcode_001_SuicideMiddleFiller.json │ │ │ ├── callcallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcode_01Filler.json │ │ │ ├── callcallcode_01_OOGEFiller.json │ │ │ ├── callcallcode_01_SuicideEndFiller.json │ │ │ ├── callcallcodecall_010Filler.json │ │ │ ├── callcallcodecall_010_OOGEFiller.json │ │ │ ├── callcallcodecall_010_OOGMAfterFiller.json │ │ │ ├── callcallcodecall_010_OOGMBeforeFiller.json │ │ │ ├── callcallcodecall_010_SuicideEndFiller.json │ │ │ ├── callcallcodecall_010_SuicideMiddleFiller.json │ │ │ ├── callcallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcallcodecallcode_011Filler.json │ │ │ ├── callcallcodecallcode_011_OOGEFiller.json │ │ │ ├── callcallcodecallcode_011_OOGMAfterFiller.json │ │ │ ├── callcallcodecallcode_011_OOGMBeforeFiller.json │ │ │ ├── callcallcodecallcode_011_SuicideEndFiller.json │ │ │ ├── callcallcodecallcode_011_SuicideMiddleFiller.json │ │ │ ├── callcallcodecallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecall_10Filler.json │ │ │ ├── callcodecall_10_OOGEFiller.json │ │ │ ├── callcodecall_10_SuicideEndFiller.json │ │ │ ├── callcodecallcall_100Filler.json │ │ │ ├── callcodecallcall_100_OOGEFiller.json │ │ │ ├── callcodecallcall_100_OOGMAfterFiller.json │ │ │ ├── callcodecallcall_100_OOGMBeforeFiller.json │ │ │ ├── callcodecallcall_100_SuicideEndFiller.json │ │ │ ├── callcodecallcall_100_SuicideMiddleFiller.json │ │ │ ├── callcodecallcall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcallcode_101Filler.json │ │ │ ├── callcodecallcallcode_101_OOGEFiller.json │ │ │ ├── callcodecallcallcode_101_OOGMAfterFiller.json │ │ │ ├── callcodecallcallcode_101_OOGMBeforeFiller.json │ │ │ ├── callcodecallcallcode_101_SuicideEndFiller.json │ │ │ ├── callcodecallcallcode_101_SuicideMiddleFiller.json │ │ │ ├── callcodecallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcode_11Filler.json │ │ │ ├── callcodecallcode_11_OOGEFiller.json │ │ │ ├── callcodecallcode_11_SuicideEndFiller.json │ │ │ ├── callcodecallcodecall_110Filler.json │ │ │ ├── callcodecallcodecall_110_OOGEFiller.json │ │ │ ├── callcodecallcodecall_110_OOGMAfterFiller.json │ │ │ ├── callcodecallcodecall_110_OOGMBeforeFiller.json │ │ │ ├── callcodecallcodecall_110_SuicideEndFiller.json │ │ │ ├── callcodecallcodecall_110_SuicideMiddleFiller.json │ │ │ ├── callcodecallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── callcodecallcodecallcode_111Filler.json │ │ │ ├── callcodecallcodecallcode_111_OOGEFiller.json │ │ │ ├── callcodecallcodecallcode_111_OOGMAfterFiller.json │ │ │ ├── callcodecallcodecallcode_111_OOGMBeforeFiller.json │ │ │ ├── callcodecallcodecallcode_111_SuicideEndFiller.json │ │ │ ├── callcodecallcodecallcode_111_SuicideMiddleFiller.json │ │ │ └── callcodecallcodecallcode_ABCB_RECURSIVEFiller.json │ │ ├── stChainId/ │ │ │ ├── __init__.py │ │ │ ├── chainIdFiller.json │ │ │ └── chainIdGasCostFiller.json │ │ ├── stCodeCopyTest/ │ │ │ ├── ExtCodeCopyTargetRangeLongerThanCodeTestsFiller.json │ │ │ ├── ExtCodeCopyTestsParisFiller.json │ │ │ └── __init__.py │ │ ├── stCodeSizeLimit/ │ │ │ ├── __init__.py │ │ │ ├── codesizeInitFiller.json │ │ │ ├── codesizeOOGInvalidSizeFiller.json │ │ │ ├── codesizeValidFiller.json │ │ │ ├── create2CodeSizeLimitFiller.yml │ │ │ └── createCodeSizeLimitFiller.yml │ │ ├── stCreate2/ │ │ │ ├── CREATE2_Bounds2Filler.json │ │ │ ├── CREATE2_Bounds3Filler.json │ │ │ ├── CREATE2_BoundsFiller.json │ │ │ ├── CREATE2_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json │ │ │ ├── CREATE2_FirstByte_loopFiller.yml │ │ │ ├── CREATE2_HighNonceDelegatecallFiller.yml │ │ │ ├── CREATE2_HighNonceFiller.yml │ │ │ ├── CREATE2_HighNonceMinus1Filler.yml │ │ │ ├── CREATE2_SuicideFiller.json │ │ │ ├── Create2OOGFromCallRefundsFiller.yml │ │ │ ├── Create2OOGafterInitCodeFiller.json │ │ │ ├── Create2OOGafterInitCodeReturndata2Filler.json │ │ │ ├── Create2OOGafterInitCodeReturndata3Filler.json │ │ │ ├── Create2OOGafterInitCodeReturndataFiller.json │ │ │ ├── Create2OOGafterInitCodeReturndataSizeFiller.json │ │ │ ├── Create2OOGafterInitCodeRevert2Filler.json │ │ │ ├── Create2OOGafterInitCodeRevertFiller.json │ │ │ ├── Create2OnDepth1023Filler.json │ │ │ ├── Create2OnDepth1024Filler.json │ │ │ ├── Create2RecursiveFiller.json │ │ │ ├── CreateMessageRevertedFiller.json │ │ │ ├── CreateMessageRevertedOOGInInit2Filler.json │ │ │ ├── RevertDepthCreate2OOGBerlinFiller.json │ │ │ ├── RevertDepthCreate2OOGFiller.json │ │ │ ├── RevertDepthCreateAddressCollisionBerlinFiller.json │ │ │ ├── RevertDepthCreateAddressCollisionFiller.json │ │ │ ├── RevertInCreateInInitCreate2ParisFiller.json │ │ │ ├── RevertOpcodeCreateFiller.json │ │ │ ├── RevertOpcodeInCreateReturnsCreate2Filler.json │ │ │ ├── __init__.py │ │ │ ├── call_outsize_then_create2_successful_then_returndatasizeFiller.json │ │ │ ├── call_then_create2_successful_then_returndatasizeFiller.json │ │ │ ├── create2InitCodesFiller.json │ │ │ ├── create2SmartInitCodeFiller.json │ │ │ ├── create2callPrecompilesFiller.json │ │ │ ├── create2checkFieldsInInitcodeFiller.json │ │ │ ├── create2collisionBalanceFiller.json │ │ │ ├── create2collisionCode2Filler.json │ │ │ ├── create2collisionCodeFiller.json │ │ │ ├── create2collisionNonceFiller.json │ │ │ ├── create2collisionSelfdestructed2Filler.json │ │ │ ├── create2collisionSelfdestructedFiller.json │ │ │ ├── create2collisionSelfdestructedOOGFiller.json │ │ │ ├── create2collisionSelfdestructedRevertFiller.json │ │ │ ├── create2collisionStorageParisFiller.json │ │ │ ├── create2noCashFiller.json │ │ │ ├── returndatacopy_0_0_following_successful_createFiller.json │ │ │ ├── returndatacopy_afterFailing_createFiller.json │ │ │ ├── returndatacopy_following_createFiller.json │ │ │ ├── returndatacopy_following_revert_in_createFiller.json │ │ │ ├── returndatacopy_following_successful_createFiller.json │ │ │ └── returndatasize_following_successful_createFiller.json │ │ ├── stCreateTest/ │ │ │ ├── CREATE2_CallDataFiller.yml │ │ │ ├── CREATE2_RefundEFFiller.yml │ │ │ ├── CREATE_ContractRETURNBigOffsetFiller.yml │ │ │ ├── CREATE_ContractSSTOREDuringInitFiller.json │ │ │ ├── CREATE_EContractCreateEContractInInit_TrFiller.json │ │ │ ├── CREATE_EContractCreateNEContractInInitOOG_TrFiller.json │ │ │ ├── CREATE_EContractCreateNEContractInInit_TrFiller.json │ │ │ ├── CREATE_EContract_ThenCALLToNonExistentAccFiller.json │ │ │ ├── CREATE_EmptyContractAndCallIt_0weiFiller.json │ │ │ ├── CREATE_EmptyContractAndCallIt_1weiFiller.json │ │ │ ├── CREATE_EmptyContractFiller.json │ │ │ ├── CREATE_EmptyContractWithBalanceFiller.json │ │ │ ├── CREATE_EmptyContractWithStorageAndCallIt_0weiFiller.json │ │ │ ├── CREATE_EmptyContractWithStorageAndCallIt_1weiFiller.json │ │ │ ├── CREATE_EmptyContractWithStorageFiller.json │ │ │ ├── CREATE_HighNonceFiller.yml │ │ │ ├── CREATE_HighNonceMinus1Filler.yml │ │ │ ├── CREATE_empty000CreateinInitCode_TransactionFiller.json │ │ │ ├── CodeInConstructorFiller.yml │ │ │ ├── CreateAddressWarmAfterFailFiller.yml │ │ │ ├── CreateCollisionResultsFiller.yml │ │ │ ├── CreateCollisionToEmpty2Filler.json │ │ │ ├── CreateOOGFromCallRefundsFiller.yml │ │ │ ├── CreateOOGFromEOARefundsFiller.yml │ │ │ ├── CreateOOGafterInitCodeFiller.json │ │ │ ├── CreateOOGafterInitCodeReturndata2Filler.json │ │ │ ├── CreateOOGafterInitCodeReturndata3Filler.json │ │ │ ├── CreateOOGafterInitCodeReturndataFiller.json │ │ │ ├── CreateOOGafterInitCodeReturndataSizeFiller.json │ │ │ ├── CreateOOGafterInitCodeRevert2Filler.json │ │ │ ├── CreateOOGafterInitCodeRevertFiller.json │ │ │ ├── CreateOOGafterMaxCodesizeFiller.yml │ │ │ ├── CreateResultsFiller.yml │ │ │ ├── CreateTransactionCallDataFiller.yml │ │ │ ├── CreateTransactionHighNonceFiller.yml │ │ │ ├── CreateTransactionRefundEFFiller.yml │ │ │ ├── TransactionCollisionToEmpty2Filler.json │ │ │ ├── TransactionCollisionToEmptyButCodeFiller.json │ │ │ ├── TransactionCollisionToEmptyButNonceFiller.json │ │ │ ├── __init__.py │ │ │ ├── createFailResultFiller.yml │ │ │ └── createLargeResultFiller.yml │ │ ├── stDelegatecallTestHomestead/ │ │ │ ├── Call1024BalanceTooLowFiller.json │ │ │ ├── Call1024OOGFiller.json │ │ │ ├── Call1024PreCallsFiller.json │ │ │ ├── CallLoseGasOOGFiller.json │ │ │ ├── CallRecursiveBombPreCallFiller.json │ │ │ ├── CallcodeLoseGasOOGFiller.json │ │ │ ├── Delegatecall1024Filler.json │ │ │ ├── Delegatecall1024OOGFiller.json │ │ │ ├── __init__.py │ │ │ ├── callOutput1Filler.json │ │ │ ├── callOutput2Filler.json │ │ │ ├── callOutput3Filler.json │ │ │ ├── callOutput3partialFailFiller.json │ │ │ ├── callOutput3partialFiller.json │ │ │ ├── callWithHighValueAndGasOOGFiller.json │ │ │ ├── callcodeOutput3Filler.json │ │ │ ├── callcodeWithHighValueAndGasOOGFiller.json │ │ │ ├── deleagateCallAfterValueTransferFiller.json │ │ │ ├── delegatecallAndOOGatTxLevelFiller.json │ │ │ ├── delegatecallBasicFiller.json │ │ │ ├── delegatecallEmptycontractFiller.json │ │ │ ├── delegatecallInInitcodeToEmptyContractFiller.json │ │ │ ├── delegatecallInInitcodeToExistingContractFiller.json │ │ │ ├── delegatecallInInitcodeToExistingContractOOGFiller.json │ │ │ ├── delegatecallOOGinCallFiller.json │ │ │ ├── delegatecallSenderCheckFiller.json │ │ │ ├── delegatecallValueCheckFiller.json │ │ │ ├── delegatecodeDynamicCode2SelfCallFiller.json │ │ │ └── delegatecodeDynamicCodeFiller.json │ │ ├── stEIP150Specific/ │ │ │ ├── CallAndCallcodeConsumeMoreGasThenTransactionHasFiller.json │ │ │ ├── CallAskMoreGasOnDepth2ThenTransactionHasFiller.json │ │ │ ├── CallGoesOOGOnSecondLevel2Filler.json │ │ │ ├── CallGoesOOGOnSecondLevelFiller.json │ │ │ ├── CreateAndGasInsideCreateFiller.json │ │ │ ├── DelegateCallOnEIPFiller.json │ │ │ ├── ExecuteCallThatAskForeGasThenTrabsactionHasFiller.json │ │ │ ├── NewGasPriceForCodesFiller.json │ │ │ ├── SuicideToExistingContractFiller.json │ │ │ ├── SuicideToNotExistingContractFiller.json │ │ │ ├── Transaction64Rule_d64e0Filler.json │ │ │ ├── Transaction64Rule_d64m1Filler.json │ │ │ ├── Transaction64Rule_d64p1Filler.json │ │ │ ├── Transaction64Rule_integerBoundariesFiller.yml │ │ │ └── __init__.py │ │ ├── stEIP150singleCodeGasPrices/ │ │ │ ├── RawBalanceGasFiller.json │ │ │ ├── RawCallCodeGasAskFiller.json │ │ │ ├── RawCallCodeGasFiller.json │ │ │ ├── RawCallCodeGasMemoryAskFiller.json │ │ │ ├── RawCallCodeGasMemoryFiller.json │ │ │ ├── RawCallCodeGasValueTransferAskFiller.json │ │ │ ├── RawCallCodeGasValueTransferFiller.json │ │ │ ├── RawCallCodeGasValueTransferMemoryAskFiller.json │ │ │ ├── RawCallCodeGasValueTransferMemoryFiller.json │ │ │ ├── RawCallGasAskFiller.json │ │ │ ├── RawCallGasFiller.json │ │ │ ├── RawCallGasValueTransferAskFiller.json │ │ │ ├── RawCallGasValueTransferFiller.json │ │ │ ├── RawCallGasValueTransferMemoryAskFiller.json │ │ │ ├── RawCallGasValueTransferMemoryFiller.json │ │ │ ├── RawCallMemoryGasAskFiller.json │ │ │ ├── RawCallMemoryGasFiller.json │ │ │ ├── RawCreateFailGasValueTransfer2Filler.json │ │ │ ├── RawCreateFailGasValueTransferFiller.json │ │ │ ├── RawCreateGasFiller.json │ │ │ ├── RawCreateGasMemoryFiller.json │ │ │ ├── RawCreateGasValueTransferFiller.json │ │ │ ├── RawCreateGasValueTransferMemoryFiller.json │ │ │ ├── RawDelegateCallGasAskFiller.json │ │ │ ├── RawDelegateCallGasFiller.json │ │ │ ├── RawDelegateCallGasMemoryAskFiller.json │ │ │ ├── RawDelegateCallGasMemoryFiller.json │ │ │ ├── RawExtCodeCopyGasFiller.json │ │ │ ├── RawExtCodeCopyMemoryGasFiller.json │ │ │ ├── RawExtCodeSizeGasFiller.json │ │ │ ├── __init__.py │ │ │ ├── eip2929-ffFiller.yml │ │ │ ├── eip2929Filler.yml │ │ │ ├── eip2929OOGFiller.yml │ │ │ ├── gasCostBerlinFiller.yml │ │ │ ├── gasCostExpFiller.yml │ │ │ ├── gasCostFiller.yml │ │ │ ├── gasCostJumpFiller.yml │ │ │ ├── gasCostMemSegFiller.yml │ │ │ ├── gasCostMemoryFiller.yml │ │ │ └── gasCostReturnFiller.yml │ │ ├── stEIP1559/ │ │ │ ├── __init__.py │ │ │ ├── baseFeeDiffPlacesFiller.yml │ │ │ ├── baseFeeDiffPlacesOsakaFiller.yml │ │ │ ├── gasPriceDiffPlacesFiller.yml │ │ │ ├── gasPriceDiffPlacesOsakaFiller.yml │ │ │ ├── lowFeeCapFiller.yml │ │ │ ├── lowGasLimitFiller.yml │ │ │ ├── lowGasPriceOldTypesFiller.yml │ │ │ ├── outOfFundsFiller.yml │ │ │ ├── outOfFundsOldTypesFiller.yml │ │ │ ├── senderBalanceFiller.yml │ │ │ ├── tipTooHighFiller.yml │ │ │ ├── transactionIntinsicBug_ParisFiller.yml │ │ │ ├── typeTwoBerlinFiller.yml │ │ │ └── valCausesOOFFiller.yml │ │ ├── stEIP158Specific/ │ │ │ ├── CALL_OneVCallSuicide2Filler.json │ │ │ ├── CALL_OneVCallSuicideFiller.json │ │ │ ├── CALL_ZeroVCallSuicideFiller.json │ │ │ ├── EXP_EmptyFiller.json │ │ │ ├── EXTCODESIZE_toEpmtyParisFiller.json │ │ │ ├── EXTCODESIZE_toNonExistentFiller.json │ │ │ ├── __init__.py │ │ │ ├── callToEmptyThenCallErrorParisFiller.json │ │ │ └── vitalikTransactionTestParisFiller.json │ │ ├── stEIP2930/ │ │ │ ├── __init__.py │ │ │ ├── addressOpcodesFiller.yml │ │ │ ├── coinbaseT01Filler.yml │ │ │ ├── coinbaseT2Filler.yml │ │ │ ├── manualCreateFiller.yml │ │ │ ├── storageCostsFiller.yml │ │ │ ├── transactionCostsFiller.yml │ │ │ └── variedContextFiller.yml │ │ ├── stEIP3607/ │ │ │ ├── __init__.py │ │ │ ├── initCollidingWithNonEmptyAccountFiller.yml │ │ │ ├── transactionCollidingWithNonEmptyAccount_callsFiller.yml │ │ │ ├── transactionCollidingWithNonEmptyAccount_callsItselfFiller.yml │ │ │ ├── transactionCollidingWithNonEmptyAccount_init_ParisFiller.yml │ │ │ └── transactionCollidingWithNonEmptyAccount_send_ParisFiller.yml │ │ ├── stExample/ │ │ │ ├── __init__.py │ │ │ ├── accessListExampleFiller.yml │ │ │ ├── add11Filler.json │ │ │ ├── add11_ymlFiller.yml │ │ │ ├── basefeeExampleFiller.yml │ │ │ ├── eip1559Filler.yml │ │ │ ├── indexesOmitExampleFiller.yml │ │ │ ├── invalidTrFiller.json │ │ │ ├── labelsExampleFiller.yml │ │ │ ├── mergeTestFiller.yml │ │ │ ├── rangesExampleFiller.yml │ │ │ └── yulExampleFiller.yml │ │ ├── stExtCodeHash/ │ │ │ ├── __init__.py │ │ │ ├── callToNonExistentFiller.json │ │ │ ├── callToSuicideThenExtcodehashFiller.json │ │ │ ├── codeCopyZero_ParisFiller.yml │ │ │ ├── createEmptyThenExtcodehashFiller.json │ │ │ ├── dynamicAccountOverwriteEmpty_ParisFiller.yml │ │ │ ├── extCodeCopyBoundsFiller.yml │ │ │ ├── extCodeHashAccountWithoutCodeFiller.yml │ │ │ ├── extCodeHashCALLCODEFiller.json │ │ │ ├── extCodeHashCALLFiller.json │ │ │ ├── extCodeHashChangedAccountFiller.json │ │ │ ├── extCodeHashCreatedAndDeletedAccountCallFiller.json │ │ │ ├── extCodeHashCreatedAndDeletedAccountFiller.json │ │ │ ├── extCodeHashCreatedAndDeletedAccountRecheckInOuterCallFiller.json │ │ │ ├── extCodeHashCreatedAndDeletedAccountStaticCallFiller.json │ │ │ ├── extCodeHashDELEGATECALLFiller.json │ │ │ ├── extCodeHashDeletedAccount1CancunFiller.yml │ │ │ ├── extCodeHashDeletedAccount1Filler.yml │ │ │ ├── extCodeHashDeletedAccount2CancunFiller.yml │ │ │ ├── extCodeHashDeletedAccount2Filler.yml │ │ │ ├── extCodeHashDeletedAccount3Filler.yml │ │ │ ├── extCodeHashDeletedAccount4Filler.yml │ │ │ ├── extCodeHashDeletedAccountCancunFiller.yml │ │ │ ├── extCodeHashDeletedAccountFiller.yml │ │ │ ├── extCodeHashDynamicArgumentFiller.json │ │ │ ├── extCodeHashInInitCodeFiller.json │ │ │ ├── extCodeHashMaxCodeSizeFiller.yml │ │ │ ├── extCodeHashNewAccountFiller.json │ │ │ ├── extCodeHashNonExistingAccountFiller.yml │ │ │ ├── extCodeHashPrecompilesFiller.yml │ │ │ ├── extCodeHashSTATICCALLFiller.json │ │ │ ├── extCodeHashSelfFiller.json │ │ │ ├── extCodeHashSelfInInitFiller.json │ │ │ ├── extCodeHashSubcallOOGFiller.yml │ │ │ ├── extCodeHashSubcallSuicideCancunFiller.yml │ │ │ ├── extCodeHashSubcallSuicideFiller.yml │ │ │ └── extcodehashEmpty_ParisFiller.yml │ │ ├── stHomesteadSpecific/ │ │ │ ├── __init__.py │ │ │ ├── contractCreationOOGdontLeaveEmptyContractFiller.json │ │ │ ├── contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json │ │ │ ├── createContractViaContractFiller.json │ │ │ ├── createContractViaContractOOGInitCodeFiller.json │ │ │ └── createContractViaTransactionCost53000Filler.json │ │ ├── stInitCodeTest/ │ │ │ ├── CallContractToCreateContractAndCallItOOGFiller.json │ │ │ ├── CallContractToCreateContractNoCashFiller.json │ │ │ ├── CallContractToCreateContractOOGBonusGasFiller.json │ │ │ ├── CallContractToCreateContractOOGFiller.json │ │ │ ├── CallContractToCreateContractWhichWouldCreateContractIfCalledFiller.json │ │ │ ├── CallContractToCreateContractWhichWouldCreateContractInInitCodeFiller.json │ │ │ ├── CallRecursiveContractFiller.json │ │ │ ├── CallTheContractToCreateEmptyContractFiller.json │ │ │ ├── OutOfGasContractCreationFiller.json │ │ │ ├── OutOfGasPrefundedContractCreationFiller.json │ │ │ ├── ReturnTest2Filler.json │ │ │ ├── ReturnTestFiller.json │ │ │ ├── StackUnderFlowContractCreationFiller.json │ │ │ ├── TransactionCreateAutoSuicideContractFiller.json │ │ │ ├── TransactionCreateRandomInitCodeFiller.json │ │ │ ├── TransactionCreateStopInInitcodeFiller.json │ │ │ ├── TransactionCreateSuicideInInitcodeFiller.json │ │ │ └── __init__.py │ │ ├── stLogTests/ │ │ │ ├── __init__.py │ │ │ ├── log0_emptyMemFiller.json │ │ │ ├── log0_logMemStartTooHighFiller.json │ │ │ ├── log0_logMemsizeTooHighFiller.json │ │ │ ├── log0_logMemsizeZeroFiller.json │ │ │ ├── log0_nonEmptyMemFiller.json │ │ │ ├── log0_nonEmptyMem_logMemSize1Filler.json │ │ │ ├── log0_nonEmptyMem_logMemSize1_logMemStart31Filler.json │ │ │ ├── log1_CallerFiller.json │ │ │ ├── log1_MaxTopicFiller.json │ │ │ ├── log1_emptyMemFiller.json │ │ │ ├── log1_logMemStartTooHighFiller.json │ │ │ ├── log1_logMemsizeTooHighFiller.json │ │ │ ├── log1_logMemsizeZeroFiller.json │ │ │ ├── log1_nonEmptyMemFiller.json │ │ │ ├── log1_nonEmptyMem_logMemSize1Filler.json │ │ │ ├── log1_nonEmptyMem_logMemSize1_logMemStart31Filler.json │ │ │ ├── log2_CallerFiller.json │ │ │ ├── log2_MaxTopicFiller.json │ │ │ ├── log2_emptyMemFiller.json │ │ │ ├── log2_logMemStartTooHighFiller.json │ │ │ ├── log2_logMemsizeTooHighFiller.json │ │ │ ├── log2_logMemsizeZeroFiller.json │ │ │ ├── log2_nonEmptyMemFiller.json │ │ │ ├── log2_nonEmptyMem_logMemSize1Filler.json │ │ │ ├── log2_nonEmptyMem_logMemSize1_logMemStart31Filler.json │ │ │ ├── log3_CallerFiller.json │ │ │ ├── log3_MaxTopicFiller.json │ │ │ ├── log3_PCFiller.json │ │ │ ├── log3_emptyMemFiller.json │ │ │ ├── log3_logMemStartTooHighFiller.json │ │ │ ├── log3_logMemsizeTooHighFiller.json │ │ │ ├── log3_logMemsizeZeroFiller.json │ │ │ ├── log3_nonEmptyMemFiller.json │ │ │ ├── log3_nonEmptyMem_logMemSize1Filler.json │ │ │ ├── log3_nonEmptyMem_logMemSize1_logMemStart31Filler.json │ │ │ ├── log4_CallerFiller.json │ │ │ ├── log4_MaxTopicFiller.json │ │ │ ├── log4_PCFiller.json │ │ │ ├── log4_emptyMemFiller.json │ │ │ ├── log4_logMemStartTooHighFiller.json │ │ │ ├── log4_logMemsizeTooHighFiller.json │ │ │ ├── log4_logMemsizeZeroFiller.json │ │ │ ├── log4_nonEmptyMemFiller.json │ │ │ ├── log4_nonEmptyMem_logMemSize1Filler.json │ │ │ ├── log4_nonEmptyMem_logMemSize1_logMemStart31Filler.json │ │ │ └── logInOOG_CallFiller.json │ │ ├── stMemExpandingEIP150Calls/ │ │ │ ├── CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCallsFiller.json │ │ │ ├── CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCallsFiller.json │ │ │ ├── CallGoesOOGOnSecondLevel2WithMemExpandingCallsFiller.json │ │ │ ├── CallGoesOOGOnSecondLevelWithMemExpandingCallsFiller.json │ │ │ ├── CreateAndGasInsideCreateWithMemExpandingCallsFiller.json │ │ │ ├── DelegateCallOnEIPWithMemExpandingCallsFiller.json │ │ │ ├── ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCallsFiller.json │ │ │ ├── NewGasPriceForCodesWithMemExpandingCallsFiller.json │ │ │ ├── OOGinReturnFiller.yml │ │ │ └── __init__.py │ │ ├── stMemoryStressTest/ │ │ │ ├── CALLCODE_Bounds2Filler.json │ │ │ ├── CALLCODE_Bounds3Filler.json │ │ │ ├── CALLCODE_Bounds4Filler.json │ │ │ ├── CALLCODE_BoundsFiller.json │ │ │ ├── CALL_Bounds2Filler.json │ │ │ ├── CALL_Bounds2aFiller.json │ │ │ ├── CALL_Bounds3Filler.json │ │ │ ├── CALL_BoundsFiller.json │ │ │ ├── CREATE_Bounds2Filler.json │ │ │ ├── CREATE_Bounds3Filler.json │ │ │ ├── CREATE_BoundsFiller.json │ │ │ ├── DELEGATECALL_Bounds2Filler.json │ │ │ ├── DELEGATECALL_Bounds3Filler.json │ │ │ ├── DELEGATECALL_BoundsFiller.json │ │ │ ├── DUP_BoundsFiller.json │ │ │ ├── FillStackFiller.json │ │ │ ├── JUMPI_BoundsFiller.json │ │ │ ├── JUMP_Bounds2Filler.json │ │ │ ├── JUMP_BoundsFiller.json │ │ │ ├── MLOAD_Bounds2Filler.json │ │ │ ├── MLOAD_Bounds3Filler.json │ │ │ ├── MLOAD_BoundsFiller.json │ │ │ ├── MSTORE_Bounds2Filler.json │ │ │ ├── MSTORE_Bounds2aFiller.json │ │ │ ├── MSTORE_BoundsFiller.json │ │ │ ├── POP_BoundsFiller.json │ │ │ ├── RETURN_BoundsFiller.json │ │ │ ├── SLOAD_BoundsFiller.json │ │ │ ├── SSTORE_BoundsFiller.json │ │ │ ├── __init__.py │ │ │ ├── mload32bitBound2Filler.json │ │ │ ├── mload32bitBoundFiller.json │ │ │ ├── mload32bitBound_MsizeFiller.json │ │ │ ├── mload32bitBound_return2Filler.json │ │ │ ├── mload32bitBound_returnFiller.json │ │ │ ├── static_CALL_Bounds2Filler.json │ │ │ ├── static_CALL_Bounds2aFiller.json │ │ │ ├── static_CALL_Bounds3Filler.json │ │ │ └── static_CALL_BoundsFiller.json │ │ ├── stMemoryTest/ │ │ │ ├── __init__.py │ │ │ ├── bufferFiller.yml │ │ │ ├── bufferSrcOffsetFiller.yml │ │ │ ├── callDataCopyOffsetFiller.json │ │ │ ├── calldatacopy_dejavu2Filler.json │ │ │ ├── calldatacopy_dejavuFiller.json │ │ │ ├── codeCopyOffsetFiller.json │ │ │ ├── codecopy_dejavu2Filler.json │ │ │ ├── codecopy_dejavuFiller.json │ │ │ ├── extcodecopy_dejavuFiller.json │ │ │ ├── log1_dejavuFiller.json │ │ │ ├── log2_dejavuFiller.json │ │ │ ├── log3_dejavuFiller.json │ │ │ ├── log4_dejavuFiller.json │ │ │ ├── mem0b_singleByteFiller.json │ │ │ ├── mem31b_singleByteFiller.json │ │ │ ├── mem32b_singleByteFiller.json │ │ │ ├── mem32kb+1Filler.json │ │ │ ├── mem32kb+31Filler.json │ │ │ ├── mem32kb+32Filler.json │ │ │ ├── mem32kb+33Filler.json │ │ │ ├── mem32kb-1Filler.json │ │ │ ├── mem32kb-31Filler.json │ │ │ ├── mem32kb-32Filler.json │ │ │ ├── mem32kb-33Filler.json │ │ │ ├── mem32kbFiller.json │ │ │ ├── mem32kb_singleByte+1Filler.json │ │ │ ├── mem32kb_singleByte+31Filler.json │ │ │ ├── mem32kb_singleByte+32Filler.json │ │ │ ├── mem32kb_singleByte+33Filler.json │ │ │ ├── mem32kb_singleByte-1Filler.json │ │ │ ├── mem32kb_singleByte-31Filler.json │ │ │ ├── mem32kb_singleByte-32Filler.json │ │ │ ├── mem32kb_singleByte-33Filler.json │ │ │ ├── mem32kb_singleByteFiller.json │ │ │ ├── mem33b_singleByteFiller.json │ │ │ ├── mem64kb+1Filler.json │ │ │ ├── mem64kb+31Filler.json │ │ │ ├── mem64kb+32Filler.json │ │ │ ├── mem64kb+33Filler.json │ │ │ ├── mem64kb-1Filler.json │ │ │ ├── mem64kb-31Filler.json │ │ │ ├── mem64kb-32Filler.json │ │ │ ├── mem64kb-33Filler.json │ │ │ ├── mem64kbFiller.json │ │ │ ├── mem64kb_singleByte+1Filler.json │ │ │ ├── mem64kb_singleByte+31Filler.json │ │ │ ├── mem64kb_singleByte+32Filler.json │ │ │ ├── mem64kb_singleByte+33Filler.json │ │ │ ├── mem64kb_singleByte-1Filler.json │ │ │ ├── mem64kb_singleByte-31Filler.json │ │ │ ├── mem64kb_singleByte-32Filler.json │ │ │ ├── mem64kb_singleByte-33Filler.json │ │ │ ├── mem64kb_singleByteFiller.json │ │ │ ├── memCopySelfFiller.yml │ │ │ ├── memReturnFiller.json │ │ │ ├── mload16bitBoundFiller.json │ │ │ ├── mload8bitBoundFiller.json │ │ │ ├── mload_dejavuFiller.json │ │ │ ├── mstore_dejavuFiller.json │ │ │ ├── mstroe8_dejavuFiller.json │ │ │ ├── oogFiller.yml │ │ │ ├── sha3_dejavuFiller.json │ │ │ ├── stackLimitGas_1023Filler.json │ │ │ ├── stackLimitGas_1024Filler.json │ │ │ ├── stackLimitGas_1025Filler.json │ │ │ ├── stackLimitPush31_1023Filler.json │ │ │ ├── stackLimitPush31_1024Filler.json │ │ │ ├── stackLimitPush31_1025Filler.json │ │ │ ├── stackLimitPush32_1023Filler.json │ │ │ ├── stackLimitPush32_1024Filler.json │ │ │ └── stackLimitPush32_1025Filler.json │ │ ├── stNonZeroCallsTest/ │ │ │ ├── NonZeroValue_CALLCODEFiller.json │ │ │ ├── NonZeroValue_CALLCODE_ToEmpty_ParisFiller.json │ │ │ ├── NonZeroValue_CALLCODE_ToNonNonZeroBalanceFiller.json │ │ │ ├── NonZeroValue_CALLCODE_ToOneStorageKey_ParisFiller.json │ │ │ ├── NonZeroValue_CALLFiller.json │ │ │ ├── NonZeroValue_CALL_ToEmpty_ParisFiller.json │ │ │ ├── NonZeroValue_CALL_ToNonNonZeroBalanceFiller.json │ │ │ ├── NonZeroValue_CALL_ToOneStorageKey_ParisFiller.json │ │ │ ├── NonZeroValue_DELEGATECALLFiller.json │ │ │ ├── NonZeroValue_DELEGATECALL_ToEmpty_ParisFiller.json │ │ │ ├── NonZeroValue_DELEGATECALL_ToNonNonZeroBalanceFiller.json │ │ │ ├── NonZeroValue_DELEGATECALL_ToOneStorageKey_ParisFiller.json │ │ │ ├── NonZeroValue_SUICIDEFiller.json │ │ │ ├── NonZeroValue_SUICIDE_ToEmpty_ParisFiller.json │ │ │ ├── NonZeroValue_SUICIDE_ToNonNonZeroBalanceFiller.json │ │ │ ├── NonZeroValue_SUICIDE_ToOneStorageKey_ParisFiller.json │ │ │ ├── NonZeroValue_TransactionCALLFiller.json │ │ │ ├── NonZeroValue_TransactionCALL_ToEmpty_ParisFiller.json │ │ │ ├── NonZeroValue_TransactionCALL_ToNonNonZeroBalanceFiller.json │ │ │ ├── NonZeroValue_TransactionCALL_ToOneStorageKey_ParisFiller.json │ │ │ ├── NonZeroValue_TransactionCALLwithDataFiller.json │ │ │ ├── NonZeroValue_TransactionCALLwithData_ToEmpty_ParisFiller.json │ │ │ ├── NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalanceFiller.json │ │ │ ├── NonZeroValue_TransactionCALLwithData_ToOneStorageKey_ParisFiller.json │ │ │ └── __init__.py │ │ ├── stPreCompiledContracts/ │ │ │ ├── __init__.py │ │ │ ├── modexpFiller.json │ │ │ ├── modexpTestsFiller.yml │ │ │ ├── precompsEIP2929CancunFiller.yml │ │ │ └── sec80Filler.json │ │ ├── stPreCompiledContracts2/ │ │ │ ├── CALLCODEEcrecover0Filler.json │ │ │ ├── CALLCODEEcrecover0_0inputFiller.json │ │ │ ├── CALLCODEEcrecover0_Gas2999Filler.json │ │ │ ├── CALLCODEEcrecover0_NoGasFiller.json │ │ │ ├── CALLCODEEcrecover0_completeReturnValueFiller.json │ │ │ ├── CALLCODEEcrecover0_gas3000Filler.json │ │ │ ├── CALLCODEEcrecover0_overlappingInputOutputFiller.json │ │ │ ├── CALLCODEEcrecover1Filler.json │ │ │ ├── CALLCODEEcrecover2Filler.json │ │ │ ├── CALLCODEEcrecover3Filler.json │ │ │ ├── CALLCODEEcrecover80Filler.json │ │ │ ├── CALLCODEEcrecoverH_prefixed0Filler.json │ │ │ ├── CALLCODEEcrecoverR_prefixed0Filler.json │ │ │ ├── CALLCODEEcrecoverS_prefixed0Filler.json │ │ │ ├── CALLCODEEcrecoverV_prefixed0Filler.json │ │ │ ├── CALLCODEEcrecoverV_prefixedf0Filler.json │ │ │ ├── CALLCODERipemd160_0Filler.json │ │ │ ├── CALLCODERipemd160_1Filler.json │ │ │ ├── CALLCODERipemd160_2Filler.json │ │ │ ├── CALLCODERipemd160_3Filler.json │ │ │ ├── CALLCODERipemd160_3_postfixed0Filler.json │ │ │ ├── CALLCODERipemd160_3_prefixed0Filler.json │ │ │ ├── CALLCODERipemd160_4Filler.json │ │ │ ├── CALLCODERipemd160_4_gas719Filler.json │ │ │ ├── CALLCODERipemd160_5Filler.json │ │ │ ├── CALLCODESha256_0Filler.json │ │ │ ├── CALLCODESha256_1Filler.json │ │ │ ├── CALLCODESha256_1_nonzeroValueFiller.json │ │ │ ├── CALLCODESha256_2Filler.json │ │ │ ├── CALLCODESha256_3Filler.json │ │ │ ├── CALLCODESha256_3_postfix0Filler.json │ │ │ ├── CALLCODESha256_3_prefix0Filler.json │ │ │ ├── CALLCODESha256_4Filler.json │ │ │ ├── CALLCODESha256_4_gas99Filler.json │ │ │ ├── CALLCODESha256_5Filler.json │ │ │ ├── CallEcrecover0Filler.json │ │ │ ├── CallEcrecover0_0inputFiller.json │ │ │ ├── CallEcrecover0_Gas2999Filler.json │ │ │ ├── CallEcrecover0_NoGasFiller.json │ │ │ ├── CallEcrecover0_completeReturnValueFiller.json │ │ │ ├── CallEcrecover0_gas3000Filler.json │ │ │ ├── CallEcrecover0_overlappingInputOutputFiller.json │ │ │ ├── CallEcrecover1Filler.json │ │ │ ├── CallEcrecover2Filler.json │ │ │ ├── CallEcrecover3Filler.json │ │ │ ├── CallEcrecover80Filler.json │ │ │ ├── CallEcrecoverCheckLengthFiller.json │ │ │ ├── CallEcrecoverCheckLengthWrongVFiller.json │ │ │ ├── CallEcrecoverH_prefixed0Filler.json │ │ │ ├── CallEcrecoverInvalidSignatureFiller.json │ │ │ ├── CallEcrecoverR_prefixed0Filler.json │ │ │ ├── CallEcrecoverS_prefixed0Filler.json │ │ │ ├── CallEcrecoverUnrecoverableKeyFiller.json │ │ │ ├── CallEcrecoverV_prefixed0Filler.json │ │ │ ├── CallEcrecover_OverflowFiller.yml │ │ │ ├── CallRipemd160_0Filler.json │ │ │ ├── CallRipemd160_1Filler.json │ │ │ ├── CallRipemd160_2Filler.json │ │ │ ├── CallRipemd160_3Filler.json │ │ │ ├── CallRipemd160_3_postfixed0Filler.json │ │ │ ├── CallRipemd160_3_prefixed0Filler.json │ │ │ ├── CallRipemd160_4Filler.json │ │ │ ├── CallRipemd160_4_gas719Filler.json │ │ │ ├── CallRipemd160_5Filler.json │ │ │ ├── CallSha256_0Filler.json │ │ │ ├── CallSha256_1Filler.json │ │ │ ├── CallSha256_1_nonzeroValueFiller.json │ │ │ ├── CallSha256_2Filler.json │ │ │ ├── CallSha256_3Filler.json │ │ │ ├── CallSha256_3_postfix0Filler.json │ │ │ ├── CallSha256_3_prefix0Filler.json │ │ │ ├── CallSha256_4Filler.json │ │ │ ├── CallSha256_4_gas99Filler.json │ │ │ ├── CallSha256_5Filler.json │ │ │ ├── __init__.py │ │ │ ├── ecrecoverShortBuffFiller.yml │ │ │ ├── ecrecoverWeirdVFiller.yml │ │ │ ├── modexpRandomInputFiller.json │ │ │ ├── modexp_0_0_0_20500Filler.json │ │ │ ├── modexp_0_0_0_22000Filler.json │ │ │ ├── modexp_0_0_0_25000Filler.json │ │ │ └── modexp_0_0_0_35000Filler.json │ │ ├── stQuadraticComplexityTest/ │ │ │ ├── Call1MB1024CalldepthFiller.json │ │ │ ├── Call20KbytesContract50_1Filler.json │ │ │ ├── Call20KbytesContract50_2Filler.json │ │ │ ├── Call20KbytesContract50_3Filler.json │ │ │ ├── Call50000Filler.json │ │ │ ├── Call50000_ecrecFiller.json │ │ │ ├── Call50000_identity2Filler.json │ │ │ ├── Call50000_identityFiller.json │ │ │ ├── Call50000_rip160Filler.json │ │ │ ├── Call50000_sha256Filler.json │ │ │ ├── Callcode50000Filler.json │ │ │ ├── Create1000ByzantiumFiller.json │ │ │ ├── Create1000Filler.json │ │ │ ├── Create1000ShnghaiFiller.json │ │ │ ├── QuadraticComplexitySolidity_CallDataCopyFiller.json │ │ │ ├── Return50000Filler.json │ │ │ ├── Return50000_2Filler.json │ │ │ └── __init__.py │ │ ├── stRandom/ │ │ │ ├── __init__.py │ │ │ ├── randomStatetest0Filler.json │ │ │ ├── randomStatetest100Filler.json │ │ │ ├── randomStatetest102Filler.json │ │ │ ├── randomStatetest103Filler.json │ │ │ ├── randomStatetest104Filler.json │ │ │ ├── randomStatetest105Filler.json │ │ │ ├── randomStatetest106Filler.json │ │ │ ├── randomStatetest107Filler.json │ │ │ ├── randomStatetest108Filler.json │ │ │ ├── randomStatetest10Filler.json │ │ │ ├── randomStatetest110Filler.json │ │ │ ├── randomStatetest111Filler.json │ │ │ ├── randomStatetest112Filler.json │ │ │ ├── randomStatetest114Filler.json │ │ │ ├── randomStatetest115Filler.json │ │ │ ├── randomStatetest116Filler.json │ │ │ ├── randomStatetest117Filler.json │ │ │ ├── randomStatetest118Filler.json │ │ │ ├── randomStatetest119Filler.json │ │ │ ├── randomStatetest11Filler.json │ │ │ ├── randomStatetest120Filler.json │ │ │ ├── randomStatetest121Filler.json │ │ │ ├── randomStatetest122Filler.json │ │ │ ├── randomStatetest124Filler.json │ │ │ ├── randomStatetest125Filler.json │ │ │ ├── randomStatetest126Filler.json │ │ │ ├── randomStatetest129Filler.json │ │ │ ├── randomStatetest12Filler.json │ │ │ ├── randomStatetest130Filler.json │ │ │ ├── randomStatetest131Filler.json │ │ │ ├── randomStatetest133Filler.json │ │ │ ├── randomStatetest134Filler.json │ │ │ ├── randomStatetest135Filler.json │ │ │ ├── randomStatetest137Filler.json │ │ │ ├── randomStatetest138Filler.json │ │ │ ├── randomStatetest139Filler.json │ │ │ ├── randomStatetest13Filler.json │ │ │ ├── randomStatetest142Filler.json │ │ │ ├── randomStatetest143Filler.json │ │ │ ├── randomStatetest144Filler.json │ │ │ ├── randomStatetest145Filler.json │ │ │ ├── randomStatetest146Filler.json │ │ │ ├── randomStatetest147Filler.json │ │ │ ├── randomStatetest148Filler.json │ │ │ ├── randomStatetest149Filler.json │ │ │ ├── randomStatetest14Filler.json │ │ │ ├── randomStatetest150Filler.json │ │ │ ├── randomStatetest151Filler.json │ │ │ ├── randomStatetest153Filler.json │ │ │ ├── randomStatetest154Filler.json │ │ │ ├── randomStatetest155Filler.json │ │ │ ├── randomStatetest156Filler.json │ │ │ ├── randomStatetest157Filler.json │ │ │ ├── randomStatetest158Filler.json │ │ │ ├── randomStatetest159Filler.json │ │ │ ├── randomStatetest15Filler.json │ │ │ ├── randomStatetest161Filler.json │ │ │ ├── randomStatetest162Filler.json │ │ │ ├── randomStatetest163Filler.json │ │ │ ├── randomStatetest164Filler.json │ │ │ ├── randomStatetest166Filler.json │ │ │ ├── randomStatetest167Filler.json │ │ │ ├── randomStatetest169Filler.json │ │ │ ├── randomStatetest16Filler.json │ │ │ ├── randomStatetest171Filler.json │ │ │ ├── randomStatetest172Filler.json │ │ │ ├── randomStatetest173Filler.json │ │ │ ├── randomStatetest174Filler.json │ │ │ ├── randomStatetest175Filler.json │ │ │ ├── randomStatetest176Filler.json │ │ │ ├── randomStatetest177Filler.json │ │ │ ├── randomStatetest178Filler.json │ │ │ ├── randomStatetest179Filler.json │ │ │ ├── randomStatetest17Filler.json │ │ │ ├── randomStatetest180Filler.json │ │ │ ├── randomStatetest183Filler.json │ │ │ ├── randomStatetest184Filler.json │ │ │ ├── randomStatetest185Filler.json │ │ │ ├── randomStatetest187Filler.json │ │ │ ├── randomStatetest188Filler.json │ │ │ ├── randomStatetest189Filler.json │ │ │ ├── randomStatetest18Filler.json │ │ │ ├── randomStatetest190Filler.json │ │ │ ├── randomStatetest191Filler.json │ │ │ ├── randomStatetest192Filler.json │ │ │ ├── randomStatetest194Filler.json │ │ │ ├── randomStatetest195Filler.json │ │ │ ├── randomStatetest196Filler.json │ │ │ ├── randomStatetest197Filler.json │ │ │ ├── randomStatetest198Filler.json │ │ │ ├── randomStatetest199Filler.json │ │ │ ├── randomStatetest19Filler.json │ │ │ ├── randomStatetest1Filler.json │ │ │ ├── randomStatetest200Filler.json │ │ │ ├── randomStatetest201Filler.json │ │ │ ├── randomStatetest202Filler.json │ │ │ ├── randomStatetest204Filler.json │ │ │ ├── randomStatetest205Filler.json │ │ │ ├── randomStatetest206Filler.json │ │ │ ├── randomStatetest207Filler.json │ │ │ ├── randomStatetest208Filler.json │ │ │ ├── randomStatetest209Filler.json │ │ │ ├── randomStatetest20Filler.json │ │ │ ├── randomStatetest210Filler.json │ │ │ ├── randomStatetest211Filler.json │ │ │ ├── randomStatetest212Filler.json │ │ │ ├── randomStatetest214Filler.json │ │ │ ├── randomStatetest215Filler.json │ │ │ ├── randomStatetest216Filler.json │ │ │ ├── randomStatetest217Filler.json │ │ │ ├── randomStatetest219Filler.json │ │ │ ├── randomStatetest220Filler.json │ │ │ ├── randomStatetest221Filler.json │ │ │ ├── randomStatetest222Filler.json │ │ │ ├── randomStatetest225Filler.json │ │ │ ├── randomStatetest226Filler.json │ │ │ ├── randomStatetest227Filler.json │ │ │ ├── randomStatetest228Filler.json │ │ │ ├── randomStatetest22Filler.json │ │ │ ├── randomStatetest230Filler.json │ │ │ ├── randomStatetest231Filler.json │ │ │ ├── randomStatetest232Filler.json │ │ │ ├── randomStatetest233Filler.json │ │ │ ├── randomStatetest236Filler.json │ │ │ ├── randomStatetest237Filler.json │ │ │ ├── randomStatetest238Filler.json │ │ │ ├── randomStatetest23Filler.json │ │ │ ├── randomStatetest242Filler.json │ │ │ ├── randomStatetest243Filler.json │ │ │ ├── randomStatetest244Filler.json │ │ │ ├── randomStatetest245Filler.json │ │ │ ├── randomStatetest246Filler.json │ │ │ ├── randomStatetest247Filler.json │ │ │ ├── randomStatetest248Filler.json │ │ │ ├── randomStatetest249Filler.json │ │ │ ├── randomStatetest24Filler.json │ │ │ ├── randomStatetest250Filler.json │ │ │ ├── randomStatetest251Filler.json │ │ │ ├── randomStatetest252Filler.json │ │ │ ├── randomStatetest254Filler.json │ │ │ ├── randomStatetest257Filler.json │ │ │ ├── randomStatetest259Filler.json │ │ │ ├── randomStatetest25Filler.json │ │ │ ├── randomStatetest260Filler.json │ │ │ ├── randomStatetest261Filler.json │ │ │ ├── randomStatetest263Filler.json │ │ │ ├── randomStatetest264Filler.json │ │ │ ├── randomStatetest265Filler.json │ │ │ ├── randomStatetest266Filler.json │ │ │ ├── randomStatetest267Filler.json │ │ │ ├── randomStatetest268Filler.json │ │ │ ├── randomStatetest269Filler.json │ │ │ ├── randomStatetest26Filler.json │ │ │ ├── randomStatetest270Filler.json │ │ │ ├── randomStatetest271Filler.json │ │ │ ├── randomStatetest273Filler.json │ │ │ ├── randomStatetest274Filler.json │ │ │ ├── randomStatetest275Filler.json │ │ │ ├── randomStatetest276Filler.json │ │ │ ├── randomStatetest278Filler.json │ │ │ ├── randomStatetest279Filler.json │ │ │ ├── randomStatetest27Filler.json │ │ │ ├── randomStatetest280Filler.json │ │ │ ├── randomStatetest281Filler.json │ │ │ ├── randomStatetest282Filler.json │ │ │ ├── randomStatetest283Filler.json │ │ │ ├── randomStatetest285Filler.json │ │ │ ├── randomStatetest286Filler.json │ │ │ ├── randomStatetest287Filler.json │ │ │ ├── randomStatetest288Filler.json │ │ │ ├── randomStatetest28Filler.json │ │ │ ├── randomStatetest290Filler.json │ │ │ ├── randomStatetest291Filler.json │ │ │ ├── randomStatetest292Filler.json │ │ │ ├── randomStatetest293Filler.json │ │ │ ├── randomStatetest294Filler.json │ │ │ ├── randomStatetest295Filler.json │ │ │ ├── randomStatetest296Filler.json │ │ │ ├── randomStatetest297Filler.json │ │ │ ├── randomStatetest298Filler.json │ │ │ ├── randomStatetest299Filler.json │ │ │ ├── randomStatetest29Filler.json │ │ │ ├── randomStatetest2Filler.json │ │ │ ├── randomStatetest300Filler.json │ │ │ ├── randomStatetest301Filler.json │ │ │ ├── randomStatetest302Filler.json │ │ │ ├── randomStatetest303Filler.json │ │ │ ├── randomStatetest304Filler.json │ │ │ ├── randomStatetest305Filler.json │ │ │ ├── randomStatetest306Filler.json │ │ │ ├── randomStatetest307Filler.json │ │ │ ├── randomStatetest308Filler.json │ │ │ ├── randomStatetest309Filler.json │ │ │ ├── randomStatetest30Filler.json │ │ │ ├── randomStatetest310Filler.json │ │ │ ├── randomStatetest311Filler.json │ │ │ ├── randomStatetest312Filler.json │ │ │ ├── randomStatetest313Filler.json │ │ │ ├── randomStatetest315Filler.json │ │ │ ├── randomStatetest316Filler.json │ │ │ ├── randomStatetest318Filler.json │ │ │ ├── randomStatetest31Filler.json │ │ │ ├── randomStatetest320Filler.json │ │ │ ├── randomStatetest321Filler.json │ │ │ ├── randomStatetest322Filler.json │ │ │ ├── randomStatetest323Filler.json │ │ │ ├── randomStatetest325Filler.json │ │ │ ├── randomStatetest326Filler.json │ │ │ ├── randomStatetest327Filler.json │ │ │ ├── randomStatetest329Filler.json │ │ │ ├── randomStatetest332Filler.json │ │ │ ├── randomStatetest333Filler.json │ │ │ ├── randomStatetest334Filler.json │ │ │ ├── randomStatetest335Filler.json │ │ │ ├── randomStatetest336Filler.json │ │ │ ├── randomStatetest337Filler.json │ │ │ ├── randomStatetest338Filler.json │ │ │ ├── randomStatetest339Filler.json │ │ │ ├── randomStatetest33Filler.json │ │ │ ├── randomStatetest340Filler.json │ │ │ ├── randomStatetest341Filler.json │ │ │ ├── randomStatetest342Filler.json │ │ │ ├── randomStatetest343Filler.json │ │ │ ├── randomStatetest345Filler.json │ │ │ ├── randomStatetest346Filler.json │ │ │ ├── randomStatetest347Filler.json │ │ │ ├── randomStatetest348Filler.json │ │ │ ├── randomStatetest349Filler.json │ │ │ ├── randomStatetest350Filler.json │ │ │ ├── randomStatetest351Filler.json │ │ │ ├── randomStatetest352Filler.json │ │ │ ├── randomStatetest353Filler.json │ │ │ ├── randomStatetest354Filler.json │ │ │ ├── randomStatetest355Filler.json │ │ │ ├── randomStatetest356Filler.json │ │ │ ├── randomStatetest357Filler.json │ │ │ ├── randomStatetest358Filler.json │ │ │ ├── randomStatetest359Filler.json │ │ │ ├── randomStatetest360Filler.json │ │ │ ├── randomStatetest361Filler.json │ │ │ ├── randomStatetest362Filler.json │ │ │ ├── randomStatetest363Filler.json │ │ │ ├── randomStatetest364Filler.json │ │ │ ├── randomStatetest365Filler.json │ │ │ ├── randomStatetest366Filler.json │ │ │ ├── randomStatetest367Filler.json │ │ │ ├── randomStatetest368Filler.json │ │ │ ├── randomStatetest369Filler.json │ │ │ ├── randomStatetest36Filler.json │ │ │ ├── randomStatetest370Filler.json │ │ │ ├── randomStatetest371Filler.json │ │ │ ├── randomStatetest372Filler.json │ │ │ ├── randomStatetest376Filler.json │ │ │ ├── randomStatetest378Filler.json │ │ │ ├── randomStatetest379Filler.json │ │ │ ├── randomStatetest37Filler.json │ │ │ ├── randomStatetest380Filler.json │ │ │ ├── randomStatetest381Filler.json │ │ │ ├── randomStatetest382Filler.json │ │ │ ├── randomStatetest383Filler.json │ │ │ ├── randomStatetest384Filler.yml │ │ │ ├── randomStatetest39Filler.json │ │ │ ├── randomStatetest3Filler.json │ │ │ ├── randomStatetest41Filler.json │ │ │ ├── randomStatetest42Filler.json │ │ │ ├── randomStatetest43Filler.json │ │ │ ├── randomStatetest45Filler.json │ │ │ ├── randomStatetest47Filler.json │ │ │ ├── randomStatetest48Filler.json │ │ │ ├── randomStatetest49Filler.json │ │ │ ├── randomStatetest4Filler.json │ │ │ ├── randomStatetest51Filler.json │ │ │ ├── randomStatetest52Filler.json │ │ │ ├── randomStatetest53Filler.json │ │ │ ├── randomStatetest54Filler.json │ │ │ ├── randomStatetest55Filler.json │ │ │ ├── randomStatetest57Filler.json │ │ │ ├── randomStatetest58Filler.json │ │ │ ├── randomStatetest59Filler.json │ │ │ ├── randomStatetest5Filler.json │ │ │ ├── randomStatetest60Filler.json │ │ │ ├── randomStatetest62Filler.json │ │ │ ├── randomStatetest63Filler.json │ │ │ ├── randomStatetest64Filler.json │ │ │ ├── randomStatetest66Filler.json │ │ │ ├── randomStatetest67Filler.json │ │ │ ├── randomStatetest69Filler.json │ │ │ ├── randomStatetest6Filler.json │ │ │ ├── randomStatetest72Filler.json │ │ │ ├── randomStatetest73Filler.json │ │ │ ├── randomStatetest74Filler.json │ │ │ ├── randomStatetest75Filler.json │ │ │ ├── randomStatetest77Filler.json │ │ │ ├── randomStatetest78Filler.json │ │ │ ├── randomStatetest80Filler.json │ │ │ ├── randomStatetest81Filler.json │ │ │ ├── randomStatetest82Filler.json │ │ │ ├── randomStatetest83Filler.json │ │ │ ├── randomStatetest84Filler.json │ │ │ ├── randomStatetest85Filler.json │ │ │ ├── randomStatetest87Filler.json │ │ │ ├── randomStatetest88Filler.json │ │ │ ├── randomStatetest89Filler.json │ │ │ ├── randomStatetest90Filler.json │ │ │ ├── randomStatetest92Filler.json │ │ │ ├── randomStatetest95Filler.json │ │ │ ├── randomStatetest96Filler.json │ │ │ ├── randomStatetest97Filler.json │ │ │ ├── randomStatetest98Filler.json │ │ │ └── randomStatetest9Filler.json │ │ ├── stRandom2/ │ │ │ ├── __init__.py │ │ │ ├── randomStatetest384Filler.json │ │ │ ├── randomStatetest385Filler.json │ │ │ ├── randomStatetest386Filler.json │ │ │ ├── randomStatetest387Filler.json │ │ │ ├── randomStatetest388Filler.json │ │ │ ├── randomStatetest389Filler.json │ │ │ ├── randomStatetest393Filler.json │ │ │ ├── randomStatetest395Filler.json │ │ │ ├── randomStatetest396Filler.json │ │ │ ├── randomStatetest397Filler.json │ │ │ ├── randomStatetest398Filler.json │ │ │ ├── randomStatetest399Filler.json │ │ │ ├── randomStatetest401Filler.json │ │ │ ├── randomStatetest402Filler.json │ │ │ ├── randomStatetest404Filler.json │ │ │ ├── randomStatetest405Filler.json │ │ │ ├── randomStatetest406Filler.json │ │ │ ├── randomStatetest407Filler.json │ │ │ ├── randomStatetest408Filler.json │ │ │ ├── randomStatetest409Filler.json │ │ │ ├── randomStatetest410Filler.json │ │ │ ├── randomStatetest411Filler.json │ │ │ ├── randomStatetest412Filler.json │ │ │ ├── randomStatetest413Filler.json │ │ │ ├── randomStatetest414Filler.json │ │ │ ├── randomStatetest415Filler.json │ │ │ ├── randomStatetest416Filler.json │ │ │ ├── randomStatetest417Filler.json │ │ │ ├── randomStatetest418Filler.json │ │ │ ├── randomStatetest419Filler.json │ │ │ ├── randomStatetest420Filler.json │ │ │ ├── randomStatetest421Filler.json │ │ │ ├── randomStatetest422Filler.json │ │ │ ├── randomStatetest424Filler.json │ │ │ ├── randomStatetest425Filler.json │ │ │ ├── randomStatetest426Filler.json │ │ │ ├── randomStatetest428Filler.json │ │ │ ├── randomStatetest429Filler.json │ │ │ ├── randomStatetest430Filler.json │ │ │ ├── randomStatetest433Filler.json │ │ │ ├── randomStatetest435Filler.json │ │ │ ├── randomStatetest436Filler.json │ │ │ ├── randomStatetest437Filler.json │ │ │ ├── randomStatetest438Filler.json │ │ │ ├── randomStatetest439Filler.json │ │ │ ├── randomStatetest440Filler.json │ │ │ ├── randomStatetest442Filler.json │ │ │ ├── randomStatetest443Filler.json │ │ │ ├── randomStatetest444Filler.json │ │ │ ├── randomStatetest445Filler.json │ │ │ ├── randomStatetest446Filler.json │ │ │ ├── randomStatetest447Filler.json │ │ │ ├── randomStatetest448Filler.json │ │ │ ├── randomStatetest449Filler.json │ │ │ ├── randomStatetest450Filler.json │ │ │ ├── randomStatetest451Filler.json │ │ │ ├── randomStatetest452Filler.json │ │ │ ├── randomStatetest454Filler.json │ │ │ ├── randomStatetest455Filler.json │ │ │ ├── randomStatetest456Filler.json │ │ │ ├── randomStatetest457Filler.json │ │ │ ├── randomStatetest458Filler.json │ │ │ ├── randomStatetest460Filler.json │ │ │ ├── randomStatetest461Filler.json │ │ │ ├── randomStatetest462Filler.json │ │ │ ├── randomStatetest464Filler.json │ │ │ ├── randomStatetest465Filler.json │ │ │ ├── randomStatetest466Filler.json │ │ │ ├── randomStatetest467Filler.json │ │ │ ├── randomStatetest469Filler.json │ │ │ ├── randomStatetest470Filler.json │ │ │ ├── randomStatetest471Filler.json │ │ │ ├── randomStatetest472Filler.json │ │ │ ├── randomStatetest473Filler.json │ │ │ ├── randomStatetest474Filler.json │ │ │ ├── randomStatetest475Filler.json │ │ │ ├── randomStatetest476Filler.json │ │ │ ├── randomStatetest477Filler.json │ │ │ ├── randomStatetest478Filler.json │ │ │ ├── randomStatetest480Filler.json │ │ │ ├── randomStatetest481Filler.json │ │ │ ├── randomStatetest482Filler.json │ │ │ ├── randomStatetest483Filler.json │ │ │ ├── randomStatetest484Filler.json │ │ │ ├── randomStatetest485Filler.json │ │ │ ├── randomStatetest487Filler.json │ │ │ ├── randomStatetest488Filler.json │ │ │ ├── randomStatetest489Filler.json │ │ │ ├── randomStatetest491Filler.json │ │ │ ├── randomStatetest493Filler.json │ │ │ ├── randomStatetest494Filler.json │ │ │ ├── randomStatetest495Filler.json │ │ │ ├── randomStatetest496Filler.json │ │ │ ├── randomStatetest497Filler.json │ │ │ ├── randomStatetest498Filler.json │ │ │ ├── randomStatetest499Filler.json │ │ │ ├── randomStatetest500Filler.json │ │ │ ├── randomStatetest501Filler.json │ │ │ ├── randomStatetest502Filler.json │ │ │ ├── randomStatetest503Filler.json │ │ │ ├── randomStatetest504Filler.json │ │ │ ├── randomStatetest505Filler.json │ │ │ ├── randomStatetest506Filler.json │ │ │ ├── randomStatetest507Filler.json │ │ │ ├── randomStatetest508Filler.json │ │ │ ├── randomStatetest509Filler.json │ │ │ ├── randomStatetest510Filler.json │ │ │ ├── randomStatetest511Filler.json │ │ │ ├── randomStatetest512Filler.json │ │ │ ├── randomStatetest513Filler.json │ │ │ ├── randomStatetest514Filler.json │ │ │ ├── randomStatetest516Filler.json │ │ │ ├── randomStatetest517Filler.json │ │ │ ├── randomStatetest518Filler.json │ │ │ ├── randomStatetest519Filler.json │ │ │ ├── randomStatetest520Filler.json │ │ │ ├── randomStatetest521Filler.json │ │ │ ├── randomStatetest523Filler.json │ │ │ ├── randomStatetest524Filler.json │ │ │ ├── randomStatetest525Filler.json │ │ │ ├── randomStatetest526Filler.json │ │ │ ├── randomStatetest527Filler.json │ │ │ ├── randomStatetest528Filler.json │ │ │ ├── randomStatetest531Filler.json │ │ │ ├── randomStatetest532Filler.json │ │ │ ├── randomStatetest533Filler.json │ │ │ ├── randomStatetest534Filler.json │ │ │ ├── randomStatetest535Filler.json │ │ │ ├── randomStatetest536Filler.json │ │ │ ├── randomStatetest537Filler.json │ │ │ ├── randomStatetest539Filler.json │ │ │ ├── randomStatetest541Filler.json │ │ │ ├── randomStatetest542Filler.json │ │ │ ├── randomStatetest543Filler.json │ │ │ ├── randomStatetest544Filler.json │ │ │ ├── randomStatetest545Filler.json │ │ │ ├── randomStatetest546Filler.json │ │ │ ├── randomStatetest547Filler.json │ │ │ ├── randomStatetest548Filler.json │ │ │ ├── randomStatetest550Filler.json │ │ │ ├── randomStatetest552Filler.json │ │ │ ├── randomStatetest553Filler.json │ │ │ ├── randomStatetest554Filler.json │ │ │ ├── randomStatetest555Filler.json │ │ │ ├── randomStatetest556Filler.json │ │ │ ├── randomStatetest558Filler.json │ │ │ ├── randomStatetest559Filler.json │ │ │ ├── randomStatetest560Filler.json │ │ │ ├── randomStatetest562Filler.json │ │ │ ├── randomStatetest563Filler.json │ │ │ ├── randomStatetest564Filler.json │ │ │ ├── randomStatetest565Filler.json │ │ │ ├── randomStatetest566Filler.json │ │ │ ├── randomStatetest567Filler.json │ │ │ ├── randomStatetest569Filler.json │ │ │ ├── randomStatetest571Filler.json │ │ │ ├── randomStatetest572Filler.json │ │ │ ├── randomStatetest574Filler.json │ │ │ ├── randomStatetest575Filler.json │ │ │ ├── randomStatetest576Filler.json │ │ │ ├── randomStatetest577Filler.json │ │ │ ├── randomStatetest578Filler.json │ │ │ ├── randomStatetest579Filler.json │ │ │ ├── randomStatetest580Filler.json │ │ │ ├── randomStatetest581Filler.json │ │ │ ├── randomStatetest582Filler.json │ │ │ ├── randomStatetest583Filler.json │ │ │ ├── randomStatetest584Filler.json │ │ │ ├── randomStatetest585Filler.json │ │ │ ├── randomStatetest586Filler.json │ │ │ ├── randomStatetest587Filler.json │ │ │ ├── randomStatetest588Filler.json │ │ │ ├── randomStatetest589Filler.json │ │ │ ├── randomStatetest592Filler.json │ │ │ ├── randomStatetest596Filler.json │ │ │ ├── randomStatetest597Filler.json │ │ │ ├── randomStatetest599Filler.json │ │ │ ├── randomStatetest600Filler.json │ │ │ ├── randomStatetest601Filler.json │ │ │ ├── randomStatetest602Filler.json │ │ │ ├── randomStatetest603Filler.json │ │ │ ├── randomStatetest604Filler.json │ │ │ ├── randomStatetest605Filler.json │ │ │ ├── randomStatetest607Filler.json │ │ │ ├── randomStatetest608Filler.json │ │ │ ├── randomStatetest609Filler.json │ │ │ ├── randomStatetest610Filler.json │ │ │ ├── randomStatetest611Filler.json │ │ │ ├── randomStatetest612Filler.json │ │ │ ├── randomStatetest615Filler.json │ │ │ ├── randomStatetest616Filler.json │ │ │ ├── randomStatetest618Filler.json │ │ │ ├── randomStatetest620Filler.json │ │ │ ├── randomStatetest621Filler.json │ │ │ ├── randomStatetest624Filler.json │ │ │ ├── randomStatetest625Filler.json │ │ │ ├── randomStatetest626Filler.json │ │ │ ├── randomStatetest627Filler.json │ │ │ ├── randomStatetest628Filler.json │ │ │ ├── randomStatetest629Filler.json │ │ │ ├── randomStatetest630Filler.json │ │ │ ├── randomStatetest632Filler.json │ │ │ ├── randomStatetest633Filler.json │ │ │ ├── randomStatetest635Filler.json │ │ │ ├── randomStatetest636Filler.json │ │ │ ├── randomStatetest637Filler.json │ │ │ ├── randomStatetest638Filler.json │ │ │ ├── randomStatetest639Filler.json │ │ │ ├── randomStatetest640Filler.json │ │ │ ├── randomStatetest641Filler.json │ │ │ ├── randomStatetest642Filler.json │ │ │ ├── randomStatetest643Filler.json │ │ │ ├── randomStatetest644Filler.json │ │ │ ├── randomStatetest645Filler.json │ │ │ ├── randomStatetest646Filler.json │ │ │ ├── randomStatetest647Filler.json │ │ │ ├── randomStatetest648Filler.json │ │ │ ├── randomStatetest649Filler.json │ │ │ ├── randomStatetest650Filler.json │ │ │ └── randomStatetestFiller.json │ │ ├── stRecursiveCreate/ │ │ │ ├── __init__.py │ │ │ ├── recursiveCreateFiller.json │ │ │ └── recursiveCreateReturnValueFiller.json │ │ ├── stRefundTest/ │ │ │ ├── __init__.py │ │ │ ├── refund50_1Filler.json │ │ │ ├── refund50_2Filler.json │ │ │ ├── refund50percentCapFiller.json │ │ │ ├── refund600Filler.json │ │ │ ├── refundFFFiller.yml │ │ │ ├── refundMaxFiller.yml │ │ │ ├── refundSSTOREFiller.yml │ │ │ ├── refundSuicide50procentCapFiller.json │ │ │ ├── refund_CallAFiller.json │ │ │ ├── refund_CallA_OOGFiller.json │ │ │ ├── refund_CallA_notEnoughGasInCallFiller.json │ │ │ ├── refund_CallToSuicideNoStorageFiller.json │ │ │ ├── refund_CallToSuicideStorageFiller.json │ │ │ ├── refund_CallToSuicideTwiceFiller.json │ │ │ ├── refund_NoOOG_1Filler.json │ │ │ ├── refund_OOGFiller.json │ │ │ ├── refund_TxToSuicideFiller.json │ │ │ ├── refund_TxToSuicideOOGFiller.json │ │ │ ├── refund_changeNonZeroStorageFiller.json │ │ │ ├── refund_getEtherBackFiller.json │ │ │ ├── refund_multimpleSuicideFiller.json │ │ │ └── refund_singleSuicideFiller.json │ │ ├── stReturnDataTest/ │ │ │ ├── __init__.py │ │ │ ├── call_ecrec_success_empty_then_returndatasizeFiller.json │ │ │ ├── call_outsize_then_create_successful_then_returndatasizeFiller.json │ │ │ ├── call_then_call_value_fail_then_returndatasizeFiller.json │ │ │ ├── call_then_create_successful_then_returndatasizeFiller.json │ │ │ ├── clearReturnBufferFiller.yml │ │ │ ├── create_callprecompile_returndatasizeFiller.json │ │ │ ├── modexp_modsize0_returndatasizeFiller.json │ │ │ ├── returndatacopy_0_0_following_successful_createFiller.json │ │ │ ├── returndatacopy_afterFailing_createFiller.json │ │ │ ├── returndatacopy_after_failing_callcodeFiller.json │ │ │ ├── returndatacopy_after_failing_delegatecallFiller.json │ │ │ ├── returndatacopy_after_failing_staticcallFiller.json │ │ │ ├── returndatacopy_after_revert_in_staticcallFiller.json │ │ │ ├── returndatacopy_after_successful_callcodeFiller.json │ │ │ ├── returndatacopy_after_successful_delegatecallFiller.json │ │ │ ├── returndatacopy_after_successful_staticcallFiller.json │ │ │ ├── returndatacopy_following_callFiller.json │ │ │ ├── returndatacopy_following_createFiller.json │ │ │ ├── returndatacopy_following_failing_callFiller.json │ │ │ ├── returndatacopy_following_revertFiller.json │ │ │ ├── returndatacopy_following_revert_in_createFiller.json │ │ │ ├── returndatacopy_following_successful_createFiller.json │ │ │ ├── returndatacopy_following_too_big_transferFiller.json │ │ │ ├── returndatacopy_initialFiller.json │ │ │ ├── returndatacopy_initial_256Filler.json │ │ │ ├── returndatacopy_initial_big_sumFiller.json │ │ │ ├── returndatacopy_overrunFiller.json │ │ │ ├── returndatasize_after_failing_callcodeFiller.json │ │ │ ├── returndatasize_after_failing_delegatecallFiller.json │ │ │ ├── returndatasize_after_failing_staticcallFiller.json │ │ │ ├── returndatasize_after_oog_after_deeperFiller.json │ │ │ ├── returndatasize_after_successful_callcodeFiller.json │ │ │ ├── returndatasize_after_successful_delegatecallFiller.json │ │ │ ├── returndatasize_after_successful_staticcallFiller.json │ │ │ ├── returndatasize_bugFiller.json │ │ │ ├── returndatasize_following_successful_createFiller.json │ │ │ ├── returndatasize_initialFiller.json │ │ │ ├── returndatasize_initial_zero_readFiller.json │ │ │ ├── revertRetDataSizeFiller.yml │ │ │ ├── subcallReturnMoreThenExpectedFiller.yml │ │ │ └── tooLongReturnDataCopyFiller.yml │ │ ├── stRevertTest/ │ │ │ ├── LoopCallsDepthThenRevert2Filler.json │ │ │ ├── LoopCallsDepthThenRevert3Filler.json │ │ │ ├── LoopCallsDepthThenRevertFiller.json │ │ │ ├── LoopCallsThenRevertFiller.json │ │ │ ├── LoopDelegateCallsDepthThenRevertFiller.json │ │ │ ├── NashatyrevSuicideRevertFiller.json │ │ │ ├── PythonRevertTestTue201814-1430Filler.json │ │ │ ├── RevertDepth2Filler.json │ │ │ ├── RevertDepthCreateAddressCollisionFiller.json │ │ │ ├── RevertDepthCreateOOGFiller.json │ │ │ ├── RevertInCallCodeFiller.json │ │ │ ├── RevertInCreateInInit_ParisFiller.json │ │ │ ├── RevertInDelegateCallFiller.json │ │ │ ├── RevertInStaticCallFiller.json │ │ │ ├── RevertOnEmptyStackFiller.json │ │ │ ├── RevertOpcodeCallsFiller.json │ │ │ ├── RevertOpcodeCreateFiller.json │ │ │ ├── RevertOpcodeDirectCallFiller.json │ │ │ ├── RevertOpcodeFiller.json │ │ │ ├── RevertOpcodeInCallsOnNonEmptyReturnDataFiller.json │ │ │ ├── RevertOpcodeInCreateReturnsFiller.json │ │ │ ├── RevertOpcodeInInitFiller.json │ │ │ ├── RevertOpcodeMultipleSubCallsFiller.json │ │ │ ├── RevertOpcodeReturnFiller.json │ │ │ ├── RevertOpcodeWithBigOutputInInitFiller.json │ │ │ ├── RevertPrecompiledTouchExactOOG_ParisFiller.json │ │ │ ├── RevertPrecompiledTouch_ParisFiller.json │ │ │ ├── RevertPrecompiledTouch_nonceFiller.json │ │ │ ├── RevertPrecompiledTouch_noncestorageFiller.json │ │ │ ├── RevertPrecompiledTouch_storage_ParisFiller.json │ │ │ ├── RevertPrefoundCallFiller.json │ │ │ ├── RevertPrefoundCallOOGFiller.json │ │ │ ├── RevertPrefoundEmptyCallOOG_ParisFiller.json │ │ │ ├── RevertPrefoundEmptyCall_ParisFiller.json │ │ │ ├── RevertPrefoundEmptyOOG_ParisFiller.json │ │ │ ├── RevertPrefoundEmpty_ParisFiller.json │ │ │ ├── RevertPrefoundFiller.json │ │ │ ├── RevertPrefoundOOGFiller.json │ │ │ ├── RevertSubCallStorageOOG2Filler.json │ │ │ ├── RevertSubCallStorageOOGFiller.json │ │ │ ├── TouchToEmptyAccountRevert2_ParisFiller.json │ │ │ ├── TouchToEmptyAccountRevert3_ParisFiller.json │ │ │ ├── TouchToEmptyAccountRevert_ParisFiller.json │ │ │ ├── __init__.py │ │ │ ├── costRevertFiller.yml │ │ │ └── stateRevertFiller.yml │ │ ├── stSLoadTest/ │ │ │ ├── __init__.py │ │ │ └── sloadGasCostFiller.json │ │ ├── stSStoreTest/ │ │ │ ├── SstoreCallToSelfSubRefundBelowZeroFiller.json │ │ │ ├── __init__.py │ │ │ ├── sstoreGasFiller.yml │ │ │ ├── sstore_0to0Filler.json │ │ │ ├── sstore_0to0to0Filler.json │ │ │ ├── sstore_0to0toXFiller.json │ │ │ ├── sstore_0toXFiller.json │ │ │ ├── sstore_0toXto0Filler.json │ │ │ ├── sstore_0toXto0toXFiller.json │ │ │ ├── sstore_0toXtoXFiller.json │ │ │ ├── sstore_0toXtoYFiller.json │ │ │ ├── sstore_Xto0Filler.json │ │ │ ├── sstore_Xto0to0Filler.json │ │ │ ├── sstore_Xto0toXFiller.json │ │ │ ├── sstore_Xto0toXto0Filler.json │ │ │ ├── sstore_Xto0toYFiller.json │ │ │ ├── sstore_XtoXFiller.json │ │ │ ├── sstore_XtoXto0Filler.json │ │ │ ├── sstore_XtoXtoXFiller.json │ │ │ ├── sstore_XtoXtoYFiller.json │ │ │ ├── sstore_XtoYFiller.json │ │ │ ├── sstore_XtoYto0Filler.json │ │ │ ├── sstore_XtoYtoXFiller.json │ │ │ ├── sstore_XtoYtoYFiller.json │ │ │ ├── sstore_XtoYtoZFiller.json │ │ │ ├── sstore_changeFromExternalCallInInitCodeFiller.json │ │ │ └── sstore_gasLeftFiller.json │ │ ├── stSelfBalance/ │ │ │ ├── __init__.py │ │ │ ├── selfBalanceCallTypesFiller.json │ │ │ ├── selfBalanceEqualsBalanceFiller.json │ │ │ ├── selfBalanceFiller.json │ │ │ ├── selfBalanceGasCostFiller.json │ │ │ └── selfBalanceUpdateFiller.json │ │ ├── stShift/ │ │ │ ├── .stub │ │ │ ├── __init__.py │ │ │ ├── sar00Filler.json │ │ │ ├── sar01Filler.json │ │ │ ├── sar10Filler.json │ │ │ ├── sar11Filler.json │ │ │ ├── sar_0_256-1Filler.json │ │ │ ├── sar_2^254_254Filler.json │ │ │ ├── sar_2^255-1_248Filler.json │ │ │ ├── sar_2^255-1_254Filler.json │ │ │ ├── sar_2^255-1_255Filler.json │ │ │ ├── sar_2^255-1_256Filler.json │ │ │ ├── sar_2^255_1Filler.json │ │ │ ├── sar_2^255_255Filler.json │ │ │ ├── sar_2^255_256Filler.json │ │ │ ├── sar_2^255_257Filler.json │ │ │ ├── sar_2^256-1_0Filler.json │ │ │ ├── sar_2^256-1_1Filler.json │ │ │ ├── sar_2^256-1_255Filler.json │ │ │ ├── sar_2^256-1_256Filler.json │ │ │ ├── shiftSignedCombinationsFiller.yml │ │ │ ├── shl01-0100Filler.json │ │ │ ├── shl01-0101Filler.json │ │ │ ├── shl01-ffFiller.json │ │ │ ├── shl01Filler.json │ │ │ ├── shl10Filler.json │ │ │ ├── shl11Filler.json │ │ │ ├── shl_-1_0Filler.json │ │ │ ├── shl_-1_1Filler.json │ │ │ ├── shl_-1_255Filler.json │ │ │ ├── shl_-1_256Filler.json │ │ │ ├── shl_2^255-1_1Filler.json │ │ │ ├── shr01Filler.json │ │ │ ├── shr10Filler.json │ │ │ ├── shr11Filler.json │ │ │ ├── shr_-1_0Filler.json │ │ │ ├── shr_-1_1Filler.json │ │ │ ├── shr_-1_255Filler.json │ │ │ ├── shr_-1_256Filler.json │ │ │ ├── shr_2^255_1Filler.json │ │ │ ├── shr_2^255_255Filler.json │ │ │ ├── shr_2^255_256Filler.json │ │ │ └── shr_2^255_257Filler.json │ │ ├── stSolidityTest/ │ │ │ ├── AmbiguousMethodFiller.json │ │ │ ├── ByZeroFiller.json │ │ │ ├── CallInfiniteLoopFiller.json │ │ │ ├── CallLowLevelCreatesSolidityFiller.json │ │ │ ├── CallRecursiveMethodsFiller.json │ │ │ ├── ContractInheritanceFiller.json │ │ │ ├── CreateContractFromMethodFiller.json │ │ │ ├── RecursiveCreateContractsCreate4ContractsFiller.json │ │ │ ├── RecursiveCreateContractsFiller.json │ │ │ ├── TestBlockAndTransactionPropertiesFiller.json │ │ │ ├── TestContractInteractionFiller.json │ │ │ ├── TestContractSuicideFiller.json │ │ │ ├── TestCryptographicFunctionsFiller.json │ │ │ ├── TestKeywordsFiller.json │ │ │ ├── TestOverflowFiller.json │ │ │ ├── TestStoreGasPricesFiller.json │ │ │ ├── TestStructuresAndVariablessFiller.json │ │ │ └── __init__.py │ │ ├── stSpecialTest/ │ │ │ ├── FailedCreateRevertsDeletionParisFiller.json │ │ │ ├── JUMPDEST_AttackFiller.json │ │ │ ├── JUMPDEST_AttackwithJumpFiller.json │ │ │ ├── OverflowGasMakeMoneyFiller.json │ │ │ ├── StackDepthLimitSECFiller.json │ │ │ ├── __init__.py │ │ │ ├── block504980Filler.json │ │ │ ├── deploymentErrorFiller.json │ │ │ ├── eoaEmptyParisFiller.yml │ │ │ ├── failed_tx_xcf416c53_ParisFiller.json │ │ │ ├── gasPrice0Filler.json │ │ │ ├── makeMoneyFiller.json │ │ │ ├── push32withoutByteFiller.json │ │ │ ├── selfdestructEIP2929Filler.json │ │ │ ├── sha3_dejaFiller.json │ │ │ └── tx_e1c174e2Filler.json │ │ ├── stStackTests/ │ │ │ ├── __init__.py │ │ │ ├── shallowStackFiller.json │ │ │ ├── stackOverflowDUPFiller.json │ │ │ ├── stackOverflowFiller.json │ │ │ ├── stackOverflowM1DUPFiller.json │ │ │ ├── stackOverflowM1Filler.json │ │ │ ├── stackOverflowM1PUSHFiller.json │ │ │ ├── stackOverflowPUSHFiller.json │ │ │ ├── stackOverflowSWAPFiller.json │ │ │ ├── stacksanitySWAPFiller.json │ │ │ ├── underflowTestFiller.yml │ │ │ └── underflowTestGen.js │ │ ├── stStaticCall/ │ │ │ ├── StaticcallToPrecompileFromCalledContractFiller.yml │ │ │ ├── StaticcallToPrecompileFromContractInitializationFiller.yml │ │ │ ├── StaticcallToPrecompileFromTransactionFiller.yml │ │ │ ├── __init__.py │ │ │ ├── static_ABAcalls0Filler.json │ │ │ ├── static_ABAcalls1Filler.json │ │ │ ├── static_ABAcalls2Filler.json │ │ │ ├── static_ABAcalls3Filler.json │ │ │ ├── static_ABAcallsSuicide0Filler.json │ │ │ ├── static_ABAcallsSuicide1Filler.json │ │ │ ├── static_CALL_OneVCallSuicideFiller.json │ │ │ ├── static_CALL_ZeroVCallSuicideFiller.json │ │ │ ├── static_CREATE_ContractSuicideDuringInitFiller.json │ │ │ ├── static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json │ │ │ ├── static_CREATE_ContractSuicideDuringInit_WithValueFiller.json │ │ │ ├── static_CREATE_EmptyContractAndCallIt_0weiFiller.json │ │ │ ├── static_CREATE_EmptyContractWithStorageAndCallIt_0weiFiller.json │ │ │ ├── static_Call1024BalanceTooLow2Filler.json │ │ │ ├── static_Call1024BalanceTooLowFiller.json │ │ │ ├── static_Call1024OOGFiller.json │ │ │ ├── static_Call1024PreCalls2Filler.json │ │ │ ├── static_Call1024PreCalls3Filler.json │ │ │ ├── static_Call1024PreCallsFiller.json │ │ │ ├── static_Call10Filler.json │ │ │ ├── static_Call1MB1024CalldepthFiller.json │ │ │ ├── static_Call50000Filler.json │ │ │ ├── static_Call50000_ecrecFiller.json │ │ │ ├── static_Call50000_identity2Filler.json │ │ │ ├── static_Call50000_identityFiller.json │ │ │ ├── static_Call50000_rip160Filler.json │ │ │ ├── static_Call50000bytesContract50_1Filler.json │ │ │ ├── static_Call50000bytesContract50_2Filler.json │ │ │ ├── static_Call50000bytesContract50_3Filler.json │ │ │ ├── static_CallAndCallcodeConsumeMoreGasThenTransactionHasFiller.json │ │ │ ├── static_CallAskMoreGasOnDepth2ThenTransactionHasFiller.json │ │ │ ├── static_CallContractToCreateContractAndCallItOOGFiller.json │ │ │ ├── static_CallContractToCreateContractOOGBonusGasFiller.json │ │ │ ├── static_CallContractToCreateContractOOGFiller.json │ │ │ ├── static_CallContractToCreateContractWhichWouldCreateContractIfCalledFiller.json │ │ │ ├── static_CallEcrecover0Filler.json │ │ │ ├── static_CallEcrecover0_0inputFiller.json │ │ │ ├── static_CallEcrecover0_Gas2999Filler.json │ │ │ ├── static_CallEcrecover0_NoGasFiller.json │ │ │ ├── static_CallEcrecover0_completeReturnValueFiller.json │ │ │ ├── static_CallEcrecover0_gas3000Filler.json │ │ │ ├── static_CallEcrecover0_overlappingInputOutputFiller.json │ │ │ ├── static_CallEcrecover1Filler.json │ │ │ ├── static_CallEcrecover2Filler.json │ │ │ ├── static_CallEcrecover3Filler.json │ │ │ ├── static_CallEcrecover80Filler.json │ │ │ ├── static_CallEcrecoverCheckLengthFiller.json │ │ │ ├── static_CallEcrecoverCheckLengthWrongVFiller.json │ │ │ ├── static_CallEcrecoverH_prefixed0Filler.json │ │ │ ├── static_CallEcrecoverR_prefixed0Filler.json │ │ │ ├── static_CallEcrecoverS_prefixed0Filler.json │ │ │ ├── static_CallEcrecoverV_prefixed0Filler.json │ │ │ ├── static_CallGoesOOGOnSecondLevel2Filler.json │ │ │ ├── static_CallGoesOOGOnSecondLevelFiller.json │ │ │ ├── static_CallIdentitiy_1Filler.json │ │ │ ├── static_CallIdentity_1_nonzeroValueFiller.json │ │ │ ├── static_CallIdentity_2Filler.json │ │ │ ├── static_CallIdentity_3Filler.json │ │ │ ├── static_CallIdentity_4Filler.json │ │ │ ├── static_CallIdentity_4_gas17Filler.json │ │ │ ├── static_CallIdentity_4_gas18Filler.json │ │ │ ├── static_CallIdentity_5Filler.json │ │ │ ├── static_CallLoseGasOOGFiller.json │ │ │ ├── static_CallRecursiveBomb0Filler.json │ │ │ ├── static_CallRecursiveBomb0_OOG_atMaxCallDepthFiller.json │ │ │ ├── static_CallRecursiveBomb1Filler.json │ │ │ ├── static_CallRecursiveBomb2Filler.json │ │ │ ├── static_CallRecursiveBomb3Filler.json │ │ │ ├── static_CallRecursiveBombLog2Filler.json │ │ │ ├── static_CallRecursiveBombLogFiller.json │ │ │ ├── static_CallRecursiveBombPreCall2Filler.json │ │ │ ├── static_CallRecursiveBombPreCallFiller.json │ │ │ ├── static_CallRipemd160_1Filler.json │ │ │ ├── static_CallRipemd160_2Filler.json │ │ │ ├── static_CallRipemd160_3Filler.json │ │ │ ├── static_CallRipemd160_3_postfixed0Filler.json │ │ │ ├── static_CallRipemd160_3_prefixed0Filler.json │ │ │ ├── static_CallRipemd160_4Filler.json │ │ │ ├── static_CallRipemd160_4_gas719Filler.json │ │ │ ├── static_CallRipemd160_5Filler.json │ │ │ ├── static_CallSha256_1Filler.json │ │ │ ├── static_CallSha256_1_nonzeroValueFiller.json │ │ │ ├── static_CallSha256_2Filler.json │ │ │ ├── static_CallSha256_3Filler.json │ │ │ ├── static_CallSha256_3_postfix0Filler.json │ │ │ ├── static_CallSha256_3_prefix0Filler.json │ │ │ ├── static_CallSha256_4Filler.json │ │ │ ├── static_CallSha256_4_gas99Filler.json │ │ │ ├── static_CallSha256_5Filler.json │ │ │ ├── static_CallToNameRegistrator0Filler.json │ │ │ ├── static_CallToReturn1Filler.json │ │ │ ├── static_CalltoReturn2Filler.json │ │ │ ├── static_CheckCallCostOOGFiller.json │ │ │ ├── static_CheckOpcodes2Filler.json │ │ │ ├── static_CheckOpcodes3Filler.json │ │ │ ├── static_CheckOpcodes4Filler.json │ │ │ ├── static_CheckOpcodes5Filler.json │ │ │ ├── static_CheckOpcodesFiller.json │ │ │ ├── static_ExecuteCallThatAskForeGasThenTrabsactionHasFiller.json │ │ │ ├── static_InternalCallHittingGasLimit2Filler.json │ │ │ ├── static_InternalCallHittingGasLimitFiller.json │ │ │ ├── static_InternalCallStoreClearsOOGFiller.json │ │ │ ├── static_LoopCallsDepthThenRevert2Filler.json │ │ │ ├── static_LoopCallsDepthThenRevert3Filler.json │ │ │ ├── static_LoopCallsDepthThenRevertFiller.json │ │ │ ├── static_LoopCallsThenRevertFiller.json │ │ │ ├── static_PostToReturn1Filler.json │ │ │ ├── static_RETURN_BoundsFiller.json │ │ │ ├── static_RETURN_BoundsOOGFiller.json │ │ │ ├── static_RawCallGasAskFiller.json │ │ │ ├── static_Return50000_2Filler.json │ │ │ ├── static_ReturnTest2Filler.json │ │ │ ├── static_ReturnTestFiller.json │ │ │ ├── static_RevertDepth2Filler.json │ │ │ ├── static_RevertOpcodeCallsFiller.json │ │ │ ├── static_ZeroValue_CALL_OOGRevertFiller.json │ │ │ ├── static_ZeroValue_SUICIDE_OOGRevertFiller.json │ │ │ ├── static_callBasicFiller.json │ │ │ ├── static_callChangeRevertFiller.json │ │ │ ├── static_callCreate2Filler.json │ │ │ ├── static_callCreate3Filler.json │ │ │ ├── static_callCreateFiller.json │ │ │ ├── static_callOutput1Filler.json │ │ │ ├── static_callOutput2Filler.json │ │ │ ├── static_callOutput3FailFiller.json │ │ │ ├── static_callOutput3Filler.json │ │ │ ├── static_callOutput3partialFailFiller.json │ │ │ ├── static_callOutput3partialFiller.json │ │ │ ├── static_callToCallCodeOpCodeCheckFiller.json │ │ │ ├── static_callToCallOpCodeCheckFiller.json │ │ │ ├── static_callToDelCallOpCodeCheckFiller.json │ │ │ ├── static_callToStaticOpCodeCheckFiller.json │ │ │ ├── static_callWithHighValueAndGasOOGFiller.json │ │ │ ├── static_callWithHighValueAndOOGatTxLevelFiller.json │ │ │ ├── static_callWithHighValueFiller.json │ │ │ ├── static_callWithHighValueOOGinCallFiller.json │ │ │ ├── static_call_OOG_additionalGasCosts1Filler.json │ │ │ ├── static_call_OOG_additionalGasCosts2_ParisFiller.json │ │ │ ├── static_call_value_inheritFiller.json │ │ │ ├── static_call_value_inherit_from_callFiller.json │ │ │ ├── static_callcall_00Filler.json │ │ │ ├── static_callcall_00_OOGEFiller.json │ │ │ ├── static_callcall_00_OOGE_1Filler.json │ │ │ ├── static_callcall_00_OOGE_2Filler.json │ │ │ ├── static_callcall_00_SuicideEndFiller.json │ │ │ ├── static_callcallcall_000Filler.json │ │ │ ├── static_callcallcall_000_OOGEFiller.json │ │ │ ├── static_callcallcall_000_OOGMAfter2Filler.json │ │ │ ├── static_callcallcall_000_OOGMAfterFiller.json │ │ │ ├── static_callcallcall_000_OOGMBeforeFiller.json │ │ │ ├── static_callcallcall_000_SuicideEndFiller.json │ │ │ ├── static_callcallcall_000_SuicideMiddleFiller.json │ │ │ ├── static_callcallcall_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcallcallcode_001Filler.json │ │ │ ├── static_callcallcallcode_001_2Filler.json │ │ │ ├── static_callcallcallcode_001_OOGEFiller.json │ │ │ ├── static_callcallcallcode_001_OOGE_2Filler.json │ │ │ ├── static_callcallcallcode_001_OOGMAfter2Filler.json │ │ │ ├── static_callcallcallcode_001_OOGMAfterFiller.json │ │ │ ├── static_callcallcallcode_001_OOGMAfter_2Filler.json │ │ │ ├── static_callcallcallcode_001_OOGMAfter_3Filler.json │ │ │ ├── static_callcallcallcode_001_OOGMBefore2Filler.json │ │ │ ├── static_callcallcallcode_001_OOGMBeforeFiller.json │ │ │ ├── static_callcallcallcode_001_SuicideEnd2Filler.json │ │ │ ├── static_callcallcallcode_001_SuicideEndFiller.json │ │ │ ├── static_callcallcallcode_001_SuicideMiddle2Filler.json │ │ │ ├── static_callcallcallcode_001_SuicideMiddleFiller.json │ │ │ ├── static_callcallcallcode_ABCB_RECURSIVE2Filler.json │ │ │ ├── static_callcallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcallcode_01_2Filler.json │ │ │ ├── static_callcallcode_01_OOGE_2Filler.json │ │ │ ├── static_callcallcode_01_SuicideEnd2Filler.json │ │ │ ├── static_callcallcode_01_SuicideEndFiller.json │ │ │ ├── static_callcallcodecall_010Filler.json │ │ │ ├── static_callcallcodecall_010_2Filler.json │ │ │ ├── static_callcallcodecall_010_OOGEFiller.json │ │ │ ├── static_callcallcodecall_010_OOGE_2Filler.json │ │ │ ├── static_callcallcodecall_010_OOGMAfter2Filler.json │ │ │ ├── static_callcallcodecall_010_OOGMAfterFiller.json │ │ │ ├── static_callcallcodecall_010_OOGMAfter_2Filler.json │ │ │ ├── static_callcallcodecall_010_OOGMAfter_3Filler.json │ │ │ ├── static_callcallcodecall_010_OOGMBefore2Filler.json │ │ │ ├── static_callcallcodecall_010_OOGMBeforeFiller.json │ │ │ ├── static_callcallcodecall_010_SuicideEnd2Filler.json │ │ │ ├── static_callcallcodecall_010_SuicideEndFiller.json │ │ │ ├── static_callcallcodecall_010_SuicideMiddle2Filler.json │ │ │ ├── static_callcallcodecall_010_SuicideMiddleFiller.json │ │ │ ├── static_callcallcodecall_ABCB_RECURSIVE2Filler.json │ │ │ ├── static_callcallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcallcodecallcode_011Filler.json │ │ │ ├── static_callcallcodecallcode_011_2Filler.json │ │ │ ├── static_callcallcodecallcode_011_OOGEFiller.json │ │ │ ├── static_callcallcodecallcode_011_OOGE_2Filler.json │ │ │ ├── static_callcallcodecallcode_011_OOGMAfter2Filler.json │ │ │ ├── static_callcallcodecallcode_011_OOGMAfterFiller.json │ │ │ ├── static_callcallcodecallcode_011_OOGMAfter_1Filler.json │ │ │ ├── static_callcallcodecallcode_011_OOGMAfter_2Filler.json │ │ │ ├── static_callcallcodecallcode_011_OOGMBefore2Filler.json │ │ │ ├── static_callcallcodecallcode_011_OOGMBeforeFiller.json │ │ │ ├── static_callcallcodecallcode_011_SuicideEnd2Filler.json │ │ │ ├── static_callcallcodecallcode_011_SuicideEndFiller.json │ │ │ ├── static_callcallcodecallcode_011_SuicideMiddle2Filler.json │ │ │ ├── static_callcallcodecallcode_011_SuicideMiddleFiller.json │ │ │ ├── static_callcallcodecallcode_ABCB_RECURSIVE2Filler.json │ │ │ ├── static_callcallcodecallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcode_checkPCFiller.json │ │ │ ├── static_callcodecall_10Filler.json │ │ │ ├── static_callcodecall_10_2Filler.json │ │ │ ├── static_callcodecall_10_OOGEFiller.json │ │ │ ├── static_callcodecall_10_OOGE_2Filler.json │ │ │ ├── static_callcodecall_10_SuicideEnd2Filler.json │ │ │ ├── static_callcodecall_10_SuicideEndFiller.json │ │ │ ├── static_callcodecallcall_100Filler.json │ │ │ ├── static_callcodecallcall_100_2Filler.json │ │ │ ├── static_callcodecallcall_100_OOGE2Filler.json │ │ │ ├── static_callcodecallcall_100_OOGEFiller.json │ │ │ ├── static_callcodecallcall_100_OOGMAfter2Filler.json │ │ │ ├── static_callcodecallcall_100_OOGMAfterFiller.json │ │ │ ├── static_callcodecallcall_100_OOGMAfter_2Filler.json │ │ │ ├── static_callcodecallcall_100_OOGMAfter_3Filler.json │ │ │ ├── static_callcodecallcall_100_OOGMBefore2Filler.json │ │ │ ├── static_callcodecallcall_100_OOGMBeforeFiller.json │ │ │ ├── static_callcodecallcall_100_SuicideEnd2Filler.json │ │ │ ├── static_callcodecallcall_100_SuicideEndFiller.json │ │ │ ├── static_callcodecallcall_100_SuicideMiddle2Filler.json │ │ │ ├── static_callcodecallcall_100_SuicideMiddleFiller.json │ │ │ ├── static_callcodecallcall_ABCB_RECURSIVE2Filler.json │ │ │ ├── static_callcodecallcall_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcodecallcallcode_101Filler.json │ │ │ ├── static_callcodecallcallcode_101_2Filler.json │ │ │ ├── static_callcodecallcallcode_101_OOGEFiller.json │ │ │ ├── static_callcodecallcallcode_101_OOGE_2Filler.json │ │ │ ├── static_callcodecallcallcode_101_OOGMAfter2Filler.json │ │ │ ├── static_callcodecallcallcode_101_OOGMAfterFiller.json │ │ │ ├── static_callcodecallcallcode_101_OOGMAfter_1Filler.json │ │ │ ├── static_callcodecallcallcode_101_OOGMAfter_3Filler.json │ │ │ ├── static_callcodecallcallcode_101_OOGMBefore2Filler.json │ │ │ ├── static_callcodecallcallcode_101_OOGMBeforeFiller.json │ │ │ ├── static_callcodecallcallcode_101_SuicideEnd2Filler.json │ │ │ ├── static_callcodecallcallcode_101_SuicideEndFiller.json │ │ │ ├── static_callcodecallcallcode_101_SuicideMiddle2Filler.json │ │ │ ├── static_callcodecallcallcode_101_SuicideMiddleFiller.json │ │ │ ├── static_callcodecallcallcode_ABCB_RECURSIVE2Filler.json │ │ │ ├── static_callcodecallcallcode_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcodecallcodecall_1102Filler.json │ │ │ ├── static_callcodecallcodecall_110Filler.json │ │ │ ├── static_callcodecallcodecall_110_2Filler.json │ │ │ ├── static_callcodecallcodecall_110_OOGE2Filler.json │ │ │ ├── static_callcodecallcodecall_110_OOGEFiller.json │ │ │ ├── static_callcodecallcodecall_110_OOGMAfter2Filler.json │ │ │ ├── static_callcodecallcodecall_110_OOGMAfterFiller.json │ │ │ ├── static_callcodecallcodecall_110_OOGMAfter_2Filler.json │ │ │ ├── static_callcodecallcodecall_110_OOGMAfter_3Filler.json │ │ │ ├── static_callcodecallcodecall_110_OOGMBefore2Filler.json │ │ │ ├── static_callcodecallcodecall_110_OOGMBeforeFiller.json │ │ │ ├── static_callcodecallcodecall_110_SuicideEnd2Filler.json │ │ │ ├── static_callcodecallcodecall_110_SuicideEndFiller.json │ │ │ ├── static_callcodecallcodecall_110_SuicideMiddle2Filler.json │ │ │ ├── static_callcodecallcodecall_110_SuicideMiddleFiller.json │ │ │ ├── static_callcodecallcodecall_ABCB_RECURSIVE2Filler.json │ │ │ ├── static_callcodecallcodecall_ABCB_RECURSIVEFiller.json │ │ │ ├── static_callcodecallcodecallcode_111_SuicideEndFiller.json │ │ │ ├── static_calldelcode_01Filler.json │ │ │ ├── static_calldelcode_01_OOGEFiller.json │ │ │ ├── static_contractCreationMakeCallThatAskMoreGasThenTransactionProvidedFiller.json │ │ │ ├── static_contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json │ │ │ ├── static_log0_emptyMemFiller.json │ │ │ ├── static_log0_logMemStartTooHighFiller.json │ │ │ ├── static_log0_logMemsizeTooHighFiller.json │ │ │ ├── static_log0_logMemsizeZeroFiller.json │ │ │ ├── static_log0_nonEmptyMemFiller.json │ │ │ ├── static_log0_nonEmptyMem_logMemSize1Filler.json │ │ │ ├── static_log0_nonEmptyMem_logMemSize1_logMemStart31Filler.json │ │ │ ├── static_log1_MaxTopicFiller.json │ │ │ ├── static_log1_emptyMemFiller.json │ │ │ ├── static_log1_logMemStartTooHighFiller.json │ │ │ ├── static_log1_logMemsizeTooHighFiller.json │ │ │ ├── static_log1_logMemsizeZeroFiller.json │ │ │ ├── static_log_CallerFiller.json │ │ │ ├── static_makeMoneyFiller.json │ │ │ ├── static_refund_CallAFiller.json │ │ │ ├── static_refund_CallToSuicideNoStorageFiller.json │ │ │ └── static_refund_CallToSuicideTwiceFiller.json │ │ ├── stStaticFlagEnabled/ │ │ │ ├── CallWithNOTZeroValueToPrecompileFromCalledContractFiller.yml │ │ │ ├── CallWithNOTZeroValueToPrecompileFromContractInitializationFiller.yml │ │ │ ├── CallWithNOTZeroValueToPrecompileFromTransactionFiller.yml │ │ │ ├── CallWithZeroValueToPrecompileFromCalledContractFiller.yml │ │ │ ├── CallWithZeroValueToPrecompileFromContractInitializationFiller.yml │ │ │ ├── CallWithZeroValueToPrecompileFromTransactionFiller.yml │ │ │ ├── CallcodeToPrecompileFromCalledContractFiller.yml │ │ │ ├── CallcodeToPrecompileFromContractInitializationFiller.yml │ │ │ ├── CallcodeToPrecompileFromTransactionFiller.yml │ │ │ ├── DelegatecallToPrecompileFromCalledContractFiller.yml │ │ │ ├── DelegatecallToPrecompileFromContractInitializationFiller.yml │ │ │ ├── DelegatecallToPrecompileFromTransactionFiller.yml │ │ │ ├── StaticcallForPrecompilesIssue683Filler.yml │ │ │ └── __init__.py │ │ ├── stSystemOperationsTest/ │ │ │ ├── ABAcalls0Filler.json │ │ │ ├── ABAcalls1Filler.json │ │ │ ├── ABAcalls2Filler.json │ │ │ ├── ABAcalls3Filler.json │ │ │ ├── ABAcallsSuicide0Filler.json │ │ │ ├── ABAcallsSuicide1Filler.json │ │ │ ├── Call10Filler.json │ │ │ ├── CallRecursiveBomb0Filler.json │ │ │ ├── CallRecursiveBomb0_OOG_atMaxCallDepthFiller.json │ │ │ ├── CallRecursiveBomb1Filler.json │ │ │ ├── CallRecursiveBomb2Filler.json │ │ │ ├── CallRecursiveBomb3Filler.json │ │ │ ├── CallRecursiveBombLog2Filler.json │ │ │ ├── CallRecursiveBombLogFiller.json │ │ │ ├── CallToNameRegistrator0Filler.json │ │ │ ├── CallToNameRegistratorAddressTooBigLeftFiller.json │ │ │ ├── CallToNameRegistratorAddressTooBigRightFiller.json │ │ │ ├── CallToNameRegistratorMemOOGAndInsufficientBalanceFiller.json │ │ │ ├── CallToNameRegistratorNotMuchMemory0Filler.json │ │ │ ├── CallToNameRegistratorNotMuchMemory1Filler.json │ │ │ ├── CallToNameRegistratorOutOfGasFiller.json │ │ │ ├── CallToNameRegistratorTooMuchMemory0Filler.json │ │ │ ├── CallToNameRegistratorTooMuchMemory1Filler.json │ │ │ ├── CallToNameRegistratorTooMuchMemory2Filler.json │ │ │ ├── CallToNameRegistratorZeorSizeMemExpansionFiller.json │ │ │ ├── CallToReturn1Filler.json │ │ │ ├── CallToReturn1ForDynamicJump0Filler.json │ │ │ ├── CallToReturn1ForDynamicJump1Filler.json │ │ │ ├── CalltoReturn2Filler.json │ │ │ ├── CreateHashCollisionFiller.json │ │ │ ├── PostToReturn1Filler.json │ │ │ ├── TestNameRegistratorFiller.json │ │ │ ├── __init__.py │ │ │ ├── balanceInputAddressTooBigFiller.json │ │ │ ├── callValueFiller.json │ │ │ ├── callcodeTo0Filler.json │ │ │ ├── callcodeToNameRegistrator0Filler.json │ │ │ ├── callcodeToNameRegistratorAddresTooBigLeftFiller.json │ │ │ ├── callcodeToNameRegistratorAddresTooBigRightFiller.json │ │ │ ├── callcodeToNameRegistratorZeroMemExpanionFiller.json │ │ │ ├── callcodeToReturn1Filler.json │ │ │ ├── callerAccountBalanceFiller.json │ │ │ ├── createNameRegistratorFiller.json │ │ │ ├── createNameRegistratorOOG_MemExpansionOOVFiller.json │ │ │ ├── createNameRegistratorOutOfMemoryBonds0Filler.json │ │ │ ├── createNameRegistratorOutOfMemoryBonds1Filler.json │ │ │ ├── createNameRegistratorValueTooHighFiller.json │ │ │ ├── createNameRegistratorZeroMem2Filler.json │ │ │ ├── createNameRegistratorZeroMemExpansionFiller.json │ │ │ ├── createNameRegistratorZeroMemFiller.json │ │ │ ├── createWithInvalidOpcodeFiller.json │ │ │ ├── currentAccountBalanceFiller.json │ │ │ ├── doubleSelfdestructTestFiller.yml │ │ │ ├── doubleSelfdestructTouch_ParisFiller.yml │ │ │ ├── extcodecopyFiller.json │ │ │ ├── multiSelfdestructFiller.yml │ │ │ ├── return0Filler.json │ │ │ ├── return1Filler.json │ │ │ ├── return2Filler.json │ │ │ ├── suicideAddressFiller.json │ │ │ ├── suicideCallerAddresTooBigLeftFiller.json │ │ │ ├── suicideCallerAddresTooBigRightFiller.json │ │ │ ├── suicideCallerFiller.json │ │ │ ├── suicideNotExistingAccountFiller.json │ │ │ ├── suicideOriginFiller.json │ │ │ ├── suicideSendEtherPostDeathFiller.json │ │ │ ├── suicideSendEtherToMeFiller.json │ │ │ └── testRandomTestFiller.json │ │ ├── stTimeConsuming/ │ │ │ ├── __init__.py │ │ │ ├── sstore_combinations_initial00_2_ParisFiller.json │ │ │ ├── sstore_combinations_initial00_ParisFiller.json │ │ │ ├── sstore_combinations_initial01_2_ParisFiller.json │ │ │ ├── sstore_combinations_initial01_ParisFiller.json │ │ │ ├── sstore_combinations_initial10_2_ParisFiller.json │ │ │ ├── sstore_combinations_initial10_ParisFiller.json │ │ │ ├── sstore_combinations_initial11_2_ParisFiller.json │ │ │ ├── sstore_combinations_initial11_ParisFiller.json │ │ │ ├── sstore_combinations_initial20_2_ParisFiller.json │ │ │ ├── sstore_combinations_initial20_ParisFiller.json │ │ │ ├── sstore_combinations_initial21_2_ParisFiller.json │ │ │ └── sstore_combinations_initial21_ParisFiller.json │ │ ├── stTransactionTest/ │ │ │ ├── ContractStoreClearsOOGFiller.json │ │ │ ├── ContractStoreClearsSuccessFiller.json │ │ │ ├── CreateMessageRevertedFiller.json │ │ │ ├── CreateMessageSuccessFiller.json │ │ │ ├── CreateTransactionSuccessFiller.json │ │ │ ├── EmptyTransaction3Filler.json │ │ │ ├── HighGasLimitFiller.json │ │ │ ├── HighGasPriceParisFiller.yml │ │ │ ├── InternalCallHittingGasLimit2Filler.json │ │ │ ├── InternalCallHittingGasLimitFiller.json │ │ │ ├── InternalCallHittingGasLimitSuccessFiller.json │ │ │ ├── InternalCallStoreClearsOOGFiller.json │ │ │ ├── InternalCallStoreClearsSuccessFiller.json │ │ │ ├── NoSrcAccount1559Filler.yml │ │ │ ├── NoSrcAccountCreate1559Filler.yml │ │ │ ├── NoSrcAccountCreateFiller.yml │ │ │ ├── NoSrcAccountFiller.yml │ │ │ ├── Opcodes_TransactionInitFiller.json │ │ │ ├── OverflowGasRequire2Filler.json │ │ │ ├── PointAtInfinityECRecoverFiller.yml │ │ │ ├── StoreClearsAndInternalCallStoreClearsOOGFiller.json │ │ │ ├── StoreClearsAndInternalCallStoreClearsSuccessFiller.json │ │ │ ├── StoreGasOnCreateFiller.json │ │ │ ├── SuicidesAndInternalCallSuicidesBonusGasAtCallFailedFiller.json │ │ │ ├── SuicidesAndInternalCallSuicidesBonusGasAtCallFiller.json │ │ │ ├── SuicidesAndInternalCallSuicidesOOGFiller.json │ │ │ ├── SuicidesAndInternalCallSuicidesSuccessFiller.json │ │ │ ├── SuicidesAndSendMoneyToItselfEtherDestroyedFiller.json │ │ │ ├── SuicidesStopAfterSuicideFiller.json │ │ │ ├── TransactionDataCosts652Filler.json │ │ │ ├── TransactionSendingToEmptyFiller.json │ │ │ ├── TransactionSendingToZeroFiller.json │ │ │ ├── TransactionToAddressh160minusOneFiller.json │ │ │ ├── TransactionToItselfFiller.json │ │ │ └── __init__.py │ │ ├── stTransitionTest/ │ │ │ ├── __init__.py │ │ │ ├── createNameRegistratorPerTxsAfterFiller.json │ │ │ ├── createNameRegistratorPerTxsAtFiller.json │ │ │ ├── createNameRegistratorPerTxsBeforeFiller.json │ │ │ ├── delegatecallAfterTransitionFiller.json │ │ │ ├── delegatecallAtTransitionFiller.json │ │ │ └── delegatecallBeforeTransitionFiller.json │ │ ├── stWalletTest/ │ │ │ ├── __init__.py │ │ │ ├── dayLimitConstructionFiller.json │ │ │ ├── dayLimitConstructionOOGFiller.json │ │ │ ├── dayLimitConstructionPartialFiller.json │ │ │ ├── dayLimitResetSpentTodayFiller.json │ │ │ ├── dayLimitSetDailyLimitFiller.json │ │ │ ├── dayLimitSetDailyLimitNoDataFiller.json │ │ │ ├── multiOwnedAddOwnerAddMyselfFiller.json │ │ │ ├── multiOwnedAddOwnerFiller.json │ │ │ ├── multiOwnedChangeOwnerFiller.json │ │ │ ├── multiOwnedChangeOwnerNoArgumentFiller.json │ │ │ ├── multiOwnedChangeOwner_fromNotOwnerFiller.json │ │ │ ├── multiOwnedChangeOwner_toIsOwnerFiller.json │ │ │ ├── multiOwnedChangeRequirementTo0Filler.json │ │ │ ├── multiOwnedChangeRequirementTo1Filler.json │ │ │ ├── multiOwnedChangeRequirementTo2Filler.json │ │ │ ├── multiOwnedConstructionCorrectFiller.json │ │ │ ├── multiOwnedConstructionNotEnoughGasFiller.json │ │ │ ├── multiOwnedConstructionNotEnoughGasPartialFiller.json │ │ │ ├── multiOwnedIsOwnerFalseFiller.json │ │ │ ├── multiOwnedIsOwnerTrueFiller.json │ │ │ ├── multiOwnedRemoveOwnerByNonOwnerFiller.json │ │ │ ├── multiOwnedRemoveOwnerFiller.json │ │ │ ├── multiOwnedRemoveOwner_mySelfFiller.json │ │ │ ├── multiOwnedRemoveOwner_ownerIsNotOwnerFiller.json │ │ │ ├── multiOwnedRevokeNothingFiller.json │ │ │ ├── walletAddOwnerRemovePendingTransactionFiller.json │ │ │ ├── walletChangeOwnerRemovePendingTransactionFiller.json │ │ │ ├── walletChangeRequirementRemovePendingTransactionFiller.json │ │ │ ├── walletConfirmFiller.json │ │ │ ├── walletConstructionFiller.json │ │ │ ├── walletConstructionOOGFiller.json │ │ │ ├── walletConstructionPartialFiller.json │ │ │ ├── walletDefaultFiller.json │ │ │ ├── walletDefaultWithOutValueFiller.json │ │ │ ├── walletExecuteOverDailyLimitMultiOwnerFiller.json │ │ │ ├── walletExecuteOverDailyLimitOnlyOneOwnerFiller.json │ │ │ ├── walletExecuteOverDailyLimitOnlyOneOwnerNewFiller.json │ │ │ ├── walletExecuteUnderDailyLimitFiller.json │ │ │ ├── walletKillFiller.json │ │ │ ├── walletKillNotByOwnerFiller.json │ │ │ ├── walletKillToWalletFiller.json │ │ │ └── walletRemoveOwnerRemovePendingTransactionFiller.json │ │ ├── stZeroCallsRevert/ │ │ │ ├── ZeroValue_CALLCODE_OOGRevertFiller.json │ │ │ ├── ZeroValue_CALLCODE_ToEmpty_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevertFiller.json │ │ │ ├── ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_CALL_OOGRevertFiller.json │ │ │ ├── ZeroValue_CALL_ToEmpty_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_CALL_ToNonZeroBalance_OOGRevertFiller.json │ │ │ ├── ZeroValue_CALL_ToOneStorageKey_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_OOGRevertFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_ToEmpty_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevertFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_SUICIDE_OOGRevertFiller.json │ │ │ ├── ZeroValue_SUICIDE_ToEmpty_OOGRevert_ParisFiller.json │ │ │ ├── ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevertFiller.json │ │ │ ├── ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert_ParisFiller.json │ │ │ └── __init__.py │ │ ├── stZeroCallsTest/ │ │ │ ├── ZeroValue_CALLCODEFiller.json │ │ │ ├── ZeroValue_CALLCODE_ToEmpty_ParisFiller.json │ │ │ ├── ZeroValue_CALLCODE_ToNonZeroBalanceFiller.json │ │ │ ├── ZeroValue_CALLCODE_ToOneStorageKey_ParisFiller.json │ │ │ ├── ZeroValue_CALLFiller.json │ │ │ ├── ZeroValue_CALL_ToEmpty_ParisFiller.json │ │ │ ├── ZeroValue_CALL_ToNonZeroBalanceFiller.json │ │ │ ├── ZeroValue_CALL_ToOneStorageKey_ParisFiller.json │ │ │ ├── ZeroValue_DELEGATECALLFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_ToEmpty_ParisFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_ToNonZeroBalanceFiller.json │ │ │ ├── ZeroValue_DELEGATECALL_ToOneStorageKey_ParisFiller.json │ │ │ ├── ZeroValue_SUICIDEFiller.json │ │ │ ├── ZeroValue_SUICIDE_ToEmpty_ParisFiller.json │ │ │ ├── ZeroValue_SUICIDE_ToNonZeroBalanceFiller.json │ │ │ ├── ZeroValue_SUICIDE_ToOneStorageKey_ParisFiller.json │ │ │ ├── ZeroValue_TransactionCALLFiller.json │ │ │ ├── ZeroValue_TransactionCALL_ToEmpty_ParisFiller.json │ │ │ ├── ZeroValue_TransactionCALL_ToNonZeroBalanceFiller.json │ │ │ ├── ZeroValue_TransactionCALL_ToOneStorageKey_ParisFiller.json │ │ │ ├── ZeroValue_TransactionCALLwithDataFiller.json │ │ │ ├── ZeroValue_TransactionCALLwithData_ToEmpty_ParisFiller.json │ │ │ ├── ZeroValue_TransactionCALLwithData_ToNonZeroBalanceFiller.json │ │ │ ├── ZeroValue_TransactionCALLwithData_ToOneStorageKey_ParisFiller.json │ │ │ └── __init__.py │ │ ├── stZeroKnowledge/ │ │ │ ├── __init__.py │ │ │ ├── ecmul_1-2_2_28000_128Filler.json │ │ │ ├── ecmul_1-2_2_28000_96Filler.json │ │ │ ├── ecmul_1-2_340282366920938463463374607431768211456_21000_128Filler.json │ │ │ ├── ecmul_1-2_340282366920938463463374607431768211456_21000_80Filler.json │ │ │ ├── ecmul_1-2_340282366920938463463374607431768211456_21000_96Filler.json │ │ │ ├── ecmul_1-2_340282366920938463463374607431768211456_28000_128Filler.json │ │ │ ├── ecmul_1-2_340282366920938463463374607431768211456_28000_80Filler.json │ │ │ ├── ecmul_1-2_340282366920938463463374607431768211456_28000_96Filler.json │ │ │ ├── ecmul_1-2_5616_21000_128Filler.json │ │ │ ├── ecmul_1-2_5616_21000_96Filler.json │ │ │ ├── ecmul_1-2_5616_28000_128Filler.json │ │ │ ├── ecmul_1-2_5617_21000_128Filler.json │ │ │ ├── ecmul_1-2_5617_21000_96Filler.json │ │ │ ├── ecmul_1-2_5617_28000_128Filler.json │ │ │ ├── ecmul_1-2_5617_28000_96Filler.json │ │ │ ├── ecmul_1-2_616_28000_96Filler.json │ │ │ ├── ecmul_1-2_9935_21000_128Filler.json │ │ │ ├── ecmul_1-2_9935_21000_96Filler.json │ │ │ ├── ecmul_1-2_9935_28000_128Filler.json │ │ │ ├── ecmul_1-2_9935_28000_96Filler.json │ │ │ ├── ecmul_1-2_9_21000_128Filler.json │ │ │ ├── ecmul_1-2_9_21000_96Filler.json │ │ │ ├── ecmul_1-2_9_28000_128Filler.json │ │ │ ├── ecmul_1-2_9_28000_96Filler.json │ │ │ ├── ecmul_1-3_0_21000_128Filler.json │ │ │ ├── ecmul_1-3_0_21000_64Filler.json │ │ │ ├── ecmul_1-3_0_21000_80Filler.json │ │ │ ├── ecmul_1-3_0_21000_96Filler.json │ │ │ ├── ecmul_1-3_0_28000_128Filler.json │ │ │ ├── ecmul_1-3_0_28000_64Filler.json │ │ │ ├── ecmul_1-3_0_28000_80_ParisFiller.json │ │ │ ├── ecmul_1-3_0_28000_96Filler.json │ │ │ ├── ecmul_1-3_1_21000_128Filler.json │ │ │ ├── ecmul_1-3_1_21000_96Filler.json │ │ │ ├── ecmul_1-3_1_28000_128Filler.json │ │ │ ├── ecmul_1-3_1_28000_96Filler.json │ │ │ ├── ecmul_1-3_2_21000_128Filler.json │ │ │ ├── ecmul_1-3_2_21000_96Filler.json │ │ │ ├── ecmul_1-3_2_28000_128Filler.json │ │ │ ├── ecmul_1-3_2_28000_96Filler.json │ │ │ ├── ecmul_1-3_340282366920938463463374607431768211456_21000_128Filler.json │ │ │ ├── ecmul_1-3_340282366920938463463374607431768211456_21000_80Filler.json │ │ │ ├── ecmul_1-3_340282366920938463463374607431768211456_21000_96Filler.json │ │ │ ├── ecmul_1-3_340282366920938463463374607431768211456_28000_128Filler.json │ │ │ ├── ecmul_1-3_340282366920938463463374607431768211456_28000_80Filler.json │ │ │ ├── ecmul_1-3_340282366920938463463374607431768211456_28000_96Filler.json │ │ │ ├── ecmul_1-3_5616_21000_128Filler.json │ │ │ ├── ecmul_1-3_5616_21000_96Filler.json │ │ │ ├── ecmul_1-3_5616_28000_128Filler.json │ │ │ ├── ecmul_1-3_5616_28000_96Filler.json │ │ │ ├── ecmul_1-3_5617_21000_128Filler.json │ │ │ ├── ecmul_1-3_5617_21000_96Filler.json │ │ │ ├── ecmul_1-3_5617_28000_128Filler.json │ │ │ ├── ecmul_1-3_5617_28000_96Filler.json │ │ │ ├── ecmul_1-3_9935_21000_128Filler.json │ │ │ ├── ecmul_1-3_9935_21000_96Filler.json │ │ │ ├── ecmul_1-3_9935_28000_128Filler.json │ │ │ ├── ecmul_1-3_9935_28000_96Filler.json │ │ │ ├── ecmul_1-3_9_21000_128Filler.json │ │ │ ├── ecmul_1-3_9_21000_96Filler.json │ │ │ ├── ecmul_1-3_9_28000_128Filler.json │ │ │ ├── ecmul_1-3_9_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_0_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_0_21000_64Filler.json │ │ │ ├── ecmul_7827-6598_0_21000_80Filler.json │ │ │ ├── ecmul_7827-6598_0_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_0_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_0_28000_64Filler.json │ │ │ ├── ecmul_7827-6598_0_28000_80Filler.json │ │ │ ├── ecmul_7827-6598_0_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_1456_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_1456_21000_80Filler.json │ │ │ ├── ecmul_7827-6598_1456_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_1456_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_1456_28000_80Filler.json │ │ │ ├── ecmul_7827-6598_1456_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_1_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_1_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_1_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_1_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_2_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_2_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_2_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_2_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_5616_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_5616_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_5616_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_5616_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_5617_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_5617_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_5617_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_5617_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_9935_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_9935_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_9935_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_9935_28000_96Filler.json │ │ │ ├── ecmul_7827-6598_9_21000_128Filler.json │ │ │ ├── ecmul_7827-6598_9_21000_96Filler.json │ │ │ ├── ecmul_7827-6598_9_28000_128Filler.json │ │ │ ├── ecmul_7827-6598_9_28000_96Filler.json │ │ │ ├── ecpairing_bad_length_191Filler.json │ │ │ ├── ecpairing_bad_length_193Filler.json │ │ │ ├── ecpairing_empty_dataFiller.json │ │ │ ├── ecpairing_empty_data_insufficient_gasFiller.json │ │ │ ├── ecpairing_inputsFiller.yml │ │ │ ├── ecpairing_one_point_failFiller.json │ │ │ ├── ecpairing_one_point_insufficient_gasFiller.json │ │ │ ├── ecpairing_one_point_not_in_subgroupFiller.json │ │ │ ├── ecpairing_one_point_with_g1_zeroFiller.json │ │ │ ├── ecpairing_one_point_with_g2_zeroFiller.json │ │ │ ├── ecpairing_one_point_with_g2_zero_and_g1_invalidFiller.json │ │ │ ├── ecpairing_perturb_g2_by_curve_orderFiller.json │ │ │ ├── ecpairing_perturb_g2_by_field_modulusFiller.json │ │ │ ├── ecpairing_perturb_g2_by_field_modulus_againFiller.json │ │ │ ├── ecpairing_perturb_g2_by_oneFiller.json │ │ │ ├── ecpairing_perturb_zeropoint_by_curve_orderFiller.json │ │ │ ├── ecpairing_perturb_zeropoint_by_field_modulusFiller.json │ │ │ ├── ecpairing_perturb_zeropoint_by_oneFiller.json │ │ │ ├── ecpairing_three_point_fail_1Filler.json │ │ │ ├── ecpairing_three_point_match_1Filler.json │ │ │ ├── ecpairing_two_point_fail_1Filler.json │ │ │ ├── ecpairing_two_point_fail_2Filler.json │ │ │ ├── ecpairing_two_point_match_1Filler.json │ │ │ ├── ecpairing_two_point_match_2Filler.json │ │ │ ├── ecpairing_two_point_match_3Filler.json │ │ │ ├── ecpairing_two_point_match_4Filler.json │ │ │ ├── ecpairing_two_point_match_5Filler.json │ │ │ ├── ecpairing_two_point_oogFiller.json │ │ │ ├── ecpairing_two_points_with_one_g2_zeroFiller.json │ │ │ ├── pairingTestFiller.json │ │ │ ├── pointAddFiller.json │ │ │ ├── pointAddTruncFiller.json │ │ │ ├── pointMulAdd2Filler.json │ │ │ └── pointMulAddFiller.json │ │ └── stZeroKnowledge2/ │ │ ├── __init__.py │ │ ├── ecadd_0-0_0-0_21000_0Filler.json │ │ ├── ecadd_0-0_0-0_21000_128Filler.json │ │ ├── ecadd_0-0_0-0_21000_192Filler.json │ │ ├── ecadd_0-0_0-0_21000_64Filler.json │ │ ├── ecadd_0-0_0-0_21000_80_ParisFiller.json │ │ ├── ecadd_0-0_0-0_25000_0Filler.json │ │ ├── ecadd_0-0_0-0_25000_128Filler.json │ │ ├── ecadd_0-0_0-0_25000_192Filler.json │ │ ├── ecadd_0-0_0-0_25000_64Filler.json │ │ ├── ecadd_0-0_0-0_25000_80Filler.json │ │ ├── ecadd_0-0_1-2_21000_128Filler.json │ │ ├── ecadd_0-0_1-2_21000_192Filler.json │ │ ├── ecadd_0-0_1-2_25000_128Filler.json │ │ ├── ecadd_0-0_1-2_25000_192Filler.json │ │ ├── ecadd_0-0_1-3_21000_128Filler.json │ │ ├── ecadd_0-0_1-3_25000_128Filler.json │ │ ├── ecadd_0-3_1-2_21000_128Filler.json │ │ ├── ecadd_0-3_1-2_25000_128Filler.json │ │ ├── ecadd_1-2_0-0_21000_128Filler.json │ │ ├── ecadd_1-2_0-0_21000_192Filler.json │ │ ├── ecadd_1-2_0-0_21000_64Filler.json │ │ ├── ecadd_1-2_0-0_25000_128Filler.json │ │ ├── ecadd_1-2_0-0_25000_192Filler.json │ │ ├── ecadd_1-2_0-0_25000_64Filler.json │ │ ├── ecadd_1-2_1-2_21000_128Filler.json │ │ ├── ecadd_1-2_1-2_21000_192Filler.json │ │ ├── ecadd_1-2_1-2_25000_128Filler.json │ │ ├── ecadd_1-2_1-2_25000_192Filler.json │ │ ├── ecadd_1-3_0-0_21000_80Filler.json │ │ ├── ecadd_1-3_0-0_25000_80_ParisFiller.json │ │ ├── ecadd_1145-3932_1145-4651_21000_192Filler.json │ │ ├── ecadd_1145-3932_1145-4651_25000_192Filler.json │ │ ├── ecadd_1145-3932_2969-1336_21000_128Filler.json │ │ ├── ecadd_1145-3932_2969-1336_25000_128Filler.json │ │ ├── ecadd_6-9_19274124-124124_21000_128Filler.json │ │ ├── ecadd_6-9_19274124-124124_25000_128Filler.json │ │ ├── ecmul_0-0_0_21000_0Filler.json │ │ ├── ecmul_0-0_0_21000_128Filler.json │ │ ├── ecmul_0-0_0_21000_40Filler.json │ │ ├── ecmul_0-0_0_21000_64Filler.json │ │ ├── ecmul_0-0_0_21000_80Filler.json │ │ ├── ecmul_0-0_0_21000_96Filler.json │ │ ├── ecmul_0-0_0_28000_0Filler.json │ │ ├── ecmul_0-0_0_28000_128Filler.json │ │ ├── ecmul_0-0_0_28000_40Filler.json │ │ ├── ecmul_0-0_0_28000_64Filler.json │ │ ├── ecmul_0-0_0_28000_80Filler.json │ │ ├── ecmul_0-0_0_28000_96Filler.json │ │ ├── ecmul_0-0_1_21000_128Filler.json │ │ ├── ecmul_0-0_1_21000_96Filler.json │ │ ├── ecmul_0-0_1_28000_128Filler.json │ │ ├── ecmul_0-0_1_28000_96Filler.json │ │ ├── ecmul_0-0_2_21000_128Filler.json │ │ ├── ecmul_0-0_2_21000_96Filler.json │ │ ├── ecmul_0-0_2_28000_128Filler.json │ │ ├── ecmul_0-0_2_28000_96Filler.json │ │ ├── ecmul_0-0_340282366920938463463374607431768211456_21000_128Filler.json │ │ ├── ecmul_0-0_340282366920938463463374607431768211456_21000_80Filler.json │ │ ├── ecmul_0-0_340282366920938463463374607431768211456_21000_96Filler.json │ │ ├── ecmul_0-0_340282366920938463463374607431768211456_28000_128Filler.json │ │ ├── ecmul_0-0_340282366920938463463374607431768211456_28000_80Filler.json │ │ ├── ecmul_0-0_340282366920938463463374607431768211456_28000_96Filler.json │ │ ├── ecmul_0-0_5616_21000_128Filler.json │ │ ├── ecmul_0-0_5616_21000_96Filler.json │ │ ├── ecmul_0-0_5616_28000_128Filler.json │ │ ├── ecmul_0-0_5616_28000_96Filler.json │ │ ├── ecmul_0-0_5617_21000_128Filler.json │ │ ├── ecmul_0-0_5617_21000_96Filler.json │ │ ├── ecmul_0-0_5617_28000_128Filler.json │ │ ├── ecmul_0-0_5617_28000_96Filler.json │ │ ├── ecmul_0-0_9935_21000_128Filler.json │ │ ├── ecmul_0-0_9935_21000_96Filler.json │ │ ├── ecmul_0-0_9935_28000_128Filler.json │ │ ├── ecmul_0-0_9935_28000_96Filler.json │ │ ├── ecmul_0-0_9_21000_128Filler.json │ │ ├── ecmul_0-0_9_21000_96Filler.json │ │ ├── ecmul_0-0_9_28000_128Filler.json │ │ ├── ecmul_0-0_9_28000_96Filler.json │ │ ├── ecmul_0-3_0_21000_128Filler.json │ │ ├── ecmul_0-3_0_21000_64Filler.json │ │ ├── ecmul_0-3_0_21000_80Filler.json │ │ ├── ecmul_0-3_0_21000_96Filler.json │ │ ├── ecmul_0-3_0_28000_128Filler.json │ │ ├── ecmul_0-3_0_28000_64Filler.json │ │ ├── ecmul_0-3_0_28000_80Filler.json │ │ ├── ecmul_0-3_0_28000_96Filler.json │ │ ├── ecmul_0-3_1_21000_128Filler.json │ │ ├── ecmul_0-3_1_21000_96Filler.json │ │ ├── ecmul_0-3_1_28000_128Filler.json │ │ ├── ecmul_0-3_1_28000_96Filler.json │ │ ├── ecmul_0-3_2_21000_128Filler.json │ │ ├── ecmul_0-3_2_21000_96Filler.json │ │ ├── ecmul_0-3_2_28000_128Filler.json │ │ ├── ecmul_0-3_2_28000_96Filler.json │ │ ├── ecmul_0-3_340282366920938463463374607431768211456_21000_128Filler.json │ │ ├── ecmul_0-3_340282366920938463463374607431768211456_21000_80Filler.json │ │ ├── ecmul_0-3_340282366920938463463374607431768211456_21000_96Filler.json │ │ ├── ecmul_0-3_340282366920938463463374607431768211456_28000_128Filler.json │ │ ├── ecmul_0-3_340282366920938463463374607431768211456_28000_80Filler.json │ │ ├── ecmul_0-3_340282366920938463463374607431768211456_28000_96Filler.json │ │ ├── ecmul_0-3_5616_21000_128Filler.json │ │ ├── ecmul_0-3_5616_21000_96Filler.json │ │ ├── ecmul_0-3_5616_28000_128Filler.json │ │ ├── ecmul_0-3_5616_28000_96_ParisFiller.json │ │ ├── ecmul_0-3_5617_21000_128Filler.json │ │ ├── ecmul_0-3_5617_21000_96Filler.json │ │ ├── ecmul_0-3_5617_28000_128Filler.json │ │ ├── ecmul_0-3_5617_28000_96Filler.json │ │ ├── ecmul_0-3_9935_21000_128Filler.json │ │ ├── ecmul_0-3_9935_21000_96Filler.json │ │ ├── ecmul_0-3_9935_28000_128Filler.json │ │ ├── ecmul_0-3_9935_28000_96Filler.json │ │ ├── ecmul_0-3_9_21000_128Filler.json │ │ ├── ecmul_0-3_9_21000_96Filler.json │ │ ├── ecmul_0-3_9_28000_128Filler.json │ │ ├── ecmul_0-3_9_28000_96Filler.json │ │ ├── ecmul_1-2_0_21000_128Filler.json │ │ ├── ecmul_1-2_0_21000_64Filler.json │ │ ├── ecmul_1-2_0_21000_80Filler.json │ │ ├── ecmul_1-2_0_21000_96Filler.json │ │ ├── ecmul_1-2_0_28000_128Filler.json │ │ ├── ecmul_1-2_0_28000_64Filler.json │ │ ├── ecmul_1-2_0_28000_80Filler.json │ │ ├── ecmul_1-2_0_28000_96Filler.json │ │ ├── ecmul_1-2_1_21000_128Filler.json │ │ ├── ecmul_1-2_1_21000_96Filler.json │ │ ├── ecmul_1-2_1_28000_128Filler.json │ │ ├── ecmul_1-2_1_28000_96Filler.json │ │ ├── ecmul_1-2_2_21000_128Filler.json │ │ └── ecmul_1-2_2_21000_96Filler.json │ └── unscheduled/ │ ├── __init__.py │ └── eip7692_eof_v1/ │ ├── __init__.py │ ├── eip3540_eof_v1/ │ │ ├── __init__.py │ │ ├── opcodes.py │ │ ├── spec.py │ │ ├── test_all_opcodes_in_container.py │ │ ├── test_container_size.py │ │ ├── test_container_validation.py │ │ ├── test_eof_example.py │ │ ├── test_execution.py │ │ ├── test_execution_function.py │ │ ├── test_extcode.py │ │ ├── test_migrated_valid_invalid.py │ │ ├── test_opcodes_in_legacy.py │ │ ├── test_section_header_body_mismatch.py │ │ ├── test_section_order.py │ │ └── test_section_size.py │ ├── eip4200_relative_jumps/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── test_rjump.py │ │ ├── test_rjumpi.py │ │ └── test_rjumpv.py │ ├── eip4750_functions/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── test_callf_execution.py │ │ └── test_code_validation.py │ ├── eip5450_stack/ │ │ ├── __init__.py │ │ ├── test_code_validation.py │ │ └── test_execution.py │ ├── eip6206_jumpf/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── spec.py │ │ ├── test_jumpf_execution.py │ │ ├── test_jumpf_stack.py │ │ ├── test_jumpf_target.py │ │ ├── test_jumpf_validation.py │ │ └── test_nonreturning_validation.py │ ├── eip663_dupn_swapn_exchange/ │ │ ├── __init__.py │ │ ├── test_dupn.py │ │ ├── test_exchange.py │ │ └── test_swapn.py │ ├── eip7069_extcall/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── spec.py │ │ ├── test_address_space_extension.py │ │ ├── test_calldata.py │ │ ├── test_calls.py │ │ ├── test_gas.py │ │ ├── test_returndatacopy_memory_expansion.py │ │ └── test_returndataload.py │ ├── eip7480_data_section/ │ │ ├── __init__.py │ │ ├── spec.py │ │ ├── test_code_validation.py │ │ ├── test_data_opcodes.py │ │ └── test_datacopy_memory_expansion.py │ ├── eip7620_eof_create/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── spec.py │ │ ├── test_eofcreate.py │ │ ├── test_eofcreate_failures.py │ │ ├── test_gas.py │ │ ├── test_legacy_eof_creates.py │ │ ├── test_memory.py │ │ ├── test_returncode.py │ │ └── test_subcontainer_validation.py │ ├── eip7873_tx_create/ │ │ ├── __init__.py │ │ ├── spec.py │ │ ├── test_creation_tx.py │ │ ├── test_txcreate.py │ │ ├── test_txcreate_failures.py │ │ └── test_txcreate_validates.py │ ├── eof_tracker.md │ └── gas_test.py ├── tox.ini └── whitelist.txt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .git-blame-ignore-revs ================================================ # change max line length from 80 to 100 a3b64605a548a7a707d7b05bded506d7bef384e6 ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ ⚠️ NOTICE: All code from this repository has been migrated to https://github.com/ethereum/execution-specs. As such, this repository is no longer accepting pull requests as of 2025-11-01. Please direct any changes to https://github.com/ethereum/execution-specs instead. More information is available in the [README.md] or our blogs posts: - https://steel.ethereum.foundation/blog/2025-11-04_weld_final/ - https://steel.ethereum.foundation/blog/2025-09-11_weld-announcement/ ================================================ FILE: .github/actions/build-evm-base/action.yaml ================================================ name: 'Build EVM' description: 'Resolves and builds the requested EVM binary by name' inputs: type: description: 'Type of EVM binary to build' required: true default: 'main' outputs: impl: description: "Implementation of EVM binary to build" value: ${{ steps.config-evm-reader.outputs.impl }} repo: description: "Repository to use to build the EVM binary" value: ${{ steps.config-evm-reader.outputs.repo }} ref: description: "Reference to branch, commit, or tag to use to build the EVM binary" value: ${{ steps.config-evm-reader.outputs.ref }} evm-bin: description: "Binary name of the evm tool to use" value: ${{ steps.config-evm-impl-config-reader.outputs.evm-bin }} x-dist: description: "Binary name of the evm tool to use" value: ${{ steps.config-evm-impl-config-reader.outputs.x-dist }} runs: using: "composite" steps: - name: Get the selected EVM version from the .github/configs/evm.yaml id: config-evm-reader shell: bash run: | awk "/^${{ inputs.type }}:/{flag=1; next} /^[[:alnum:]]/{flag=0} flag" ./.github/configs/evm.yaml \ | sed 's/ //g' | sed 's/:/=/g' >> "$GITHUB_OUTPUT" - name: Get the EVM implementation configuration from .github/configs/evm-impl-config.yaml id: config-evm-impl-config-reader shell: bash run: | awk "/^${{ steps.config-evm-reader.outputs.impl }}:/{flag=1; next} /^[[:alnum:]]/{flag=0} flag" ./.github/configs/evm-impl.yaml \ | sed 's/ //g' | sed 's/:/=/g' >> "$GITHUB_OUTPUT" - name: Print Variables for the selected EVM type shell: bash run: | echo "Implementation: ${{ steps.config-evm-reader.outputs.impl }}" echo "Repository: ${{ steps.config-evm-reader.outputs.repo }}" echo "Reference: ${{ steps.config-evm-reader.outputs.ref }}" echo "EVM Binary: ${{ steps.config-evm-impl-config-reader.outputs.evm-bin }}" echo "X-Dist parameter: ${{ steps.config-evm-impl-config-reader.outputs.x-dist }}" - name: Skip building for EELS if: steps.config-evm-reader.outputs.impl == 'eels' shell: bash run: echo "Skipping build for EELS" - name: Build the EVM using Geth action if: steps.config-evm-reader.outputs.impl == 'geth' uses: ./.github/actions/build-evm-client/geth with: repo: ${{ steps.config-evm-reader.outputs.repo }} ref: ${{ steps.config-evm-reader.outputs.ref }} - name: Build the EVM using EVMONE action if: steps.config-evm-reader.outputs.impl == 'evmone' uses: ./.github/actions/build-evm-client/evmone with: repo: ${{ steps.config-evm-reader.outputs.repo }} ref: ${{ steps.config-evm-reader.outputs.ref }} # `targets` in the evm.yaml must be an inline array to not interfere with `config-evm-reader`'s parsing targets: ${{ join(fromJSON(steps.config-evm-reader.outputs.targets), ' ') }} - name: Build the EVM using Besu action if: steps.config-evm-reader.outputs.impl == 'besu' uses: ./.github/actions/build-evm-client/besu with: repo: ${{ steps.config-evm-reader.outputs.repo }} ref: ${{ steps.config-evm-reader.outputs.ref }} - name: Build the EVM using EthJS action if: steps.config-evm-reader.outputs.impl == 'ethjs' uses: ./.github/actions/build-evm-client/ethjs with: repo: ${{ steps.config-evm-reader.outputs.repo }} ref: ${{ steps.config-evm-reader.outputs.ref }} ================================================ FILE: .github/actions/build-evm-client/besu/action.yaml ================================================ name: 'Build Besu EVM' description: 'Builds the Besu EVM binary' inputs: repo: description: 'Source repository to use to build the EVM binary' required: true default: 'hyperledger/besu' ref: description: 'Reference to branch, commit, or tag to use to build the EVM binary' required: true default: 'main' java: description: 'Java version to use to build Besu' required: false default: '21' java-distro: description: 'Java distribution to use to build Besu' required: false default: 'temurin' runs: using: "composite" steps: - name: Checkout Besu uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: ${{ inputs.repo }} ref: ${{ inputs.ref }} path: besu - name: Setup Java uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 with: java-version: ${{ inputs.java }} distribution: ${{ inputs.java-distro }} cache: 'gradle' - name: Build evm cmd shell: bash run: | cd $GITHUB_WORKSPACE/besu ./gradlew installDist echo $GITHUB_WORKSPACE/besu/build/install/besu/bin/ >> $GITHUB_PATH ================================================ FILE: .github/actions/build-evm-client/ethjs/action.yml ================================================ name: 'Build EthereumJS monorepo' description: 'Builds the EthereumJS monorepo' inputs: repo: description: 'Source repository to use to build EthereumJS' required: true default: 'ethereumjs/ethereumjs-monorepo' ref: description: 'Reference to branch, commit, or tag to use to build EthereumJS' required: true default: 'master' runs: using: "composite" steps: - name: Checkout EthereumJS monorepo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: ${{ inputs.repo }} ref: ${{ inputs.ref }} path: ethereumjs - name: Setup node uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e with: node-version: 18 - name: Build monorepo shell: bash run: | cd $GITHUB_WORKSPACE/ethereumjs npm ci - name: Add t8ntool to $PATH shell: bash run: | echo $GITHUB_WORKSPACE/ethereumjs/packages/vm/test/t8n/ >> $GITHUB_PATH echo $GITHUB_WORKSPACE/ethereumjs/node_modules/.bin >> $GITHUB_PATH ================================================ FILE: .github/actions/build-evm-client/evmone/action.yaml ================================================ name: 'Build evmone EVM' description: 'Builds the evmone EVM binary' inputs: repo: description: 'Source repository to use to build the EVM binary' required: true default: 'ethereum/evmone' ref: description: 'Reference to branch, commit, or tag to use to build the EVM binary' required: true default: 'master' targets: description: 'Which targets to build from evmone repo' required: false default: 'all' runs: using: "composite" steps: - name: Checkout evmone uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: ${{ inputs.repo }} ref: ${{ inputs.ref }} path: evmone submodules: true - name: Setup cmake uses: jwlawson/actions-setup-cmake@802fa1a2c4e212495c05bf94dba2704a92a472be with: cmake-version: '3.x' - name: "Install GMP Linux" if: runner.os == 'Linux' shell: bash run: sudo apt-get -q update && sudo apt-get -qy install libgmp-dev - name: Install GMP macOS if: runner.os == 'macOS' shell: bash run: | brew update && brew install gmp - name: Build evmone binary shell: bash run: | mkdir -p $GITHUB_WORKSPACE/bin cd $GITHUB_WORKSPACE/evmone cmake -S . -B build -DEVMONE_TESTING=ON -DEVMONE_PRECOMPILES_SILKPRE=1 cmake --build build --parallel --target ${{ inputs.targets }} echo $GITHUB_WORKSPACE/evmone/build/bin/ >> $GITHUB_PATH ================================================ FILE: .github/actions/build-evm-client/geth/action.yaml ================================================ name: 'Build Go-Ethereum EVM' description: 'Builds the Go-Ethereum EVM binary' inputs: repo: description: 'Source repository to use to build the EVM binary' required: true default: 'ethereum/go-ethereum' ref: description: 'Reference to branch, commit, or tag to use to build the EVM binary' required: true default: 'master' golang: description: 'Golang version to use to build Geth' required: false default: '1.21.x' runs: using: "composite" steps: - name: Checkout go-ethereum uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: ${{ inputs.repo }} ref: ${{ inputs.ref }} path: go-ethereum - name: Setup golang uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b with: go-version: ${{ inputs.golang }} cache-dependency-path: go-ethereum/go.sum - name: Build evm cmd shell: bash run: | mkdir -p $GITHUB_WORKSPACE/bin cd $GITHUB_WORKSPACE/go-ethereum/cmd/evm go build . echo $GITHUB_WORKSPACE/go-ethereum/cmd/evm >> $GITHUB_PATH ================================================ FILE: .github/actions/build-fixtures/action.yaml ================================================ name: Build and Package Fixture Release inputs: release_name: description: "Name of the fixture release" required: true uv_version: description: "Version of UV to install" required: true python_version: description: "Version of Python to install" required: true runs: using: "composite" steps: - name: Install uv ${{ inputs.uv_version }} and python ${{ inputs.python_version }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: false version: ${{ inputs.uv_version }} python-version: ${{ inputs.python_version }} - name: Install EEST shell: bash run: uv sync --no-progress - name: Extract fixture release properties from config id: properties shell: bash run: | echo "release_name=${{ inputs.release_name }}" uv run -q .github/scripts/get_release_props.py ${{ inputs.release_name }} >> "$GITHUB_OUTPUT" - uses: ./.github/actions/build-evm-base id: evm-builder with: type: ${{ steps.properties.outputs.evm-type }} - name: Generate fixtures using fill shell: bash run: | uv run fill -n ${{ steps.evm-builder.outputs.x-dist }} --evm-bin=${{ steps.evm-builder.outputs.evm-bin }} ${{ steps.properties.outputs.fill-params }} --output=fixtures_${{ inputs.release_name }}.tar.gz --build-name ${{ inputs.release_name }} - name: Wrap ethereum/tests fixtures with eofwrap tool shell: bash if: ${{ steps.properties.outputs.eofwrap }} run: | curl -L ${tests_url}${tests_version}.tar.gz | tar -xz ls -l uv run eofwrap tests-${tests_version}/BlockchainTests/GeneralStateTests/ fixtures/${output_path} rm -rf fixtures_${{ inputs.release_name }} mkdir -p ./fixtures/.meta mv fixtures/${output_path}/metrics.json ./fixtures/.meta/eofwrap_metrics.json gunzip fixtures_${{ inputs.release_name }}.tar.gz tar rf fixtures_${{ inputs.release_name }}.tar fixtures gzip fixtures_${{ inputs.release_name }}.tar rm -rf fixtures env: tests_url: https://github.com/ethereum/tests/archive/refs/tags/v tests_version: 14.1 output_path: blockchain_tests/unscheduled/eofwrap - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: fixtures_${{ inputs.release_name }} path: fixtures_${{ inputs.release_name }}.tar.gz ================================================ FILE: .github/actions/fetch-binary/action.yaml ================================================ name: "Fetch and Install Binary" description: "Downloads a binary from a GitHub release, verifies its checksum, and installs it to PATH. Only works for Linux." inputs: version: description: "Release version (e.g., v0.8.24)" required: true repo_owner: description: "GitHub repository owner" required: true repo_name: description: "GitHub repository name" required: true remote_name: description: "Binary filename in the release" required: true binary_name: description: "Name to install the binary as" required: true expected_sha256: description: "Expected SHA256 checksum" required: true runs: using: "composite" steps: - name: Download binary shell: bash run: | curl -sSL "https://github.com/${{ inputs.repo_owner }}/${{ inputs.repo_name }}/releases/download/${{ inputs.version }}/${{ inputs.remote_name }}" -o ./${{ inputs.binary_name }} echo "${{ inputs.expected_sha256 }} ${{ inputs.binary_name }}" | sha256sum -c - sudo mv ./${{ inputs.binary_name }} /usr/local/bin/${{ inputs.binary_name }} sudo chmod +x /usr/local/bin/${{ inputs.binary_name }} ================================================ FILE: .github/configs/eels_resolutions.json ================================================ { "Frontier": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Homestead": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Byzantium": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "ConstantinopleFix": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Istanbul": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Berlin": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "London": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Merge": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Shanghai": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Cancun": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Prague": { "path": "$GITHUB_WORKSPACE/execution-specs/" }, "Osaka": { "git_url": "https://github.com/ethereum/execution-specs.git", "branch": "forks/bpos", "commit": "7aacb2c54111391af5e98c505d5010b5698a770f" }, "BPO1": { "same_as": "Osaka" }, "BPO2": { "same_as": "Osaka" }, "BPO3": { "same_as": "Osaka" }, "BPO4": { "same_as": "Osaka" }, "Amsterdam": { "git_url": "https://github.com/fselmo/execution-specs.git", "branch": "feat/amsterdam-fork-and-block-access-lists", "commit": "3496e719b515bc82f35c42f83e78d426d31283ba" } } ================================================ FILE: .github/configs/evm-impl.yaml ================================================ eels: evm-bin: ethereum-spec-evm-resolver x-dist: auto geth: evm-bin: evm x-dist: auto evmone: evm-bin: evmone-t8n x-dist: auto besu: evm-bin: evmtool x-dist: 0 ethjs: evm-bin: ethereumjs-t8ntool.sh x-dist: auto ================================================ FILE: .github/configs/evm.yaml ================================================ stable: impl: eels repo: null ref: null develop: impl: eels repo: null ref: null static: impl: evmone repo: ethereum/evmone ref: master targets: ["evmone-t8n"] benchmark: impl: evmone repo: ethereum/evmone ref: master targets: ["evmone-t8n"] ================================================ FILE: .github/configs/feature.yaml ================================================ # Unless filling for special features, all features should fill for previous forks (starting from Frontier) too stable: evm-type: stable fill-params: --until=Prague --fill-static-tests --ignore=tests/static/state_tests/stQuadraticComplexityTest develop: evm-type: develop fill-params: --until=BPO4 --fill-static-tests --ignore=tests/static/state_tests/stQuadraticComplexityTest benchmark: evm-type: benchmark # Evmone only fully supports up to Prague fill-params: --fork=Prague --gas-benchmark-values 1,10,30,45,60,100,150 -m "benchmark and not state_test" ./tests/benchmark benchmark_develop: evm-type: develop fill-params: --fork=Osaka --gas-benchmark-values 1,10,30,45,60,100,150 -m "benchmark and not state_test" ./tests/benchmark feature_only: true bal: evm-type: develop fill-params: --fork=Amsterdam ./tests/amsterdam/eip7928_block_level_access_lists feature_only: true ================================================ FILE: .github/scripts/fill_introduced_tests.sh ================================================ #!/bin/bash # Fill introduced test sources # Usage: fill_introduced_tests.sh # Exit codes: # 0 - Success # 1 - Failure to generate tests or no tests found set -e CHANGED_TEST_FILES="$1" PATCH_TEST_PATH="$2" BLOCK_GAS_LIMIT="${3:-45000000}" FILL_UNTIL="${4:-Cancun}" # Include basic evm operations into coverage by default # As when we translate from yul/solidity some dup/push opcodes could become untouched files="$CHANGED_TEST_FILES tests/homestead/coverage/test_coverage.py" uv run fill $files --clean --until=$FILL_UNTIL --evm-bin evmone-t8n --block-gas-limit $BLOCK_GAS_LIMIT -m "state_test or blockchain_test" --output $PATCH_TEST_PATH > >(tee -a filloutput.log) 2> >(tee -a filloutput.log >&2) if grep -q "FAILURES" filloutput.log; then echo "Error: failed to generate .py tests." exit 1 fi exit 0 ================================================ FILE: .github/scripts/fill_prepatched_tests.sh ================================================ #!/bin/bash # Fill pre-patched test sources from before the PR # Usage: fill_prepatched_tests.sh # Exit codes: # 0 - Success # 1 - Failure to generate tests set -e MODIFIED_DELETED_FILES="$1" BASE_TEST_PATH="$2" PATCH_TEST_PATH="$3" BLOCK_GAS_LIMIT="${4:-45000000}" FILL_UNTIL="${5:-Cancun}" echo "--------------------" echo "converted-ethereum-tests.txt seem untouched, try to fill pre-patched version of .py files:" PATCH_COMMIT=$(git rev-parse HEAD) git checkout main BASE_COMMIT=$(git rev-parse HEAD) echo "Checkout head $BASE_COMMIT" echo "Select files that were changed and exist on the main branch:" echo "$MODIFIED_DELETED_FILES" rm -rf fixtures set +e uv run fill $MODIFIED_DELETED_FILES --clean --until=$FILL_UNTIL --evm-bin evmone-t8n --block-gas-limit $BLOCK_GAS_LIMIT -m "state_test or blockchain_test" --output $BASE_TEST_PATH FILL_RETURN_CODE=$? set -e if [ $FILL_RETURN_CODE -eq 5 ]; then echo "any_modified_fixtures=false" >> "$GITHUB_OUTPUT" exit 0 elif [ $FILL_RETURN_CODE -ne 0 ]; then echo "Error: failed to generate .py tests from before the PR." exit 1 fi git checkout $PATCH_COMMIT echo "Checkout back to patch $PATCH_COMMIT" # abort-on-empty-patch is used to ensure that the patch folder is not empty after fixture removal. # If the patch folder would be empty, it means that fixtures were removed in the PR, in which case we still want to run the coverage check. uv run compare_fixtures --abort-on-empty-patch $BASE_TEST_PATH $PATCH_TEST_PATH if [ -d $BASE_TEST_PATH ]; then # If the base folder is not empty, it means there's at least one fixture that was modified in the PR, continue with the coverage check. echo "Base folder is not empty after fixture comparison, continuing with coverage check." echo "any_modified_fixtures=true" >> "$GITHUB_OUTPUT" else # If the base folder is empty, it means there were no fixtures that were modified in the PR, or fixtures were only added, so we can skip the coverage check. echo "Base folder is empty after fixture comparison, skipping coverage check." echo "any_modified_fixtures=false" >> "$GITHUB_OUTPUT" fi exit 0 ================================================ FILE: .github/scripts/generate_eip_report.py ================================================ """ Generate a markdown report of outdated EIP references from the EIP version checker output. """ import os import re import sys import textwrap from string import Template from typing import List, Tuple # Report template using textwrap.dedent for clean multiline strings REPORT_TEMPLATE = Template( textwrap.dedent("""\ # EIP Version Check Report This automated check has detected that some EIP references in test files are outdated. This means that the EIPs have been updated in the [ethereum/EIPs](https://github.com/ethereum/EIPs) repository since our tests were last updated. ## Outdated EIP References ### Summary Table | File | EIP Link | Referenced Version | Latest Version | | ---- | -------- | ------------------ | -------------- | $summary_table ### Verbatim Failures ``` $fail_messages ``` ### Verbatim Errors ``` $error_messages ``` ## Action Required 1. Please verify whether the affected tests need updating based on changes in the EIP spec. 2. Update the `REFERENCE_SPEC_VERSION` in each file with the latest version shown above. 3. For detailed instructions, see the [reference specification documentation](https://eest.ethereum.org/main/writing_tests/reference_specification/). ## Workflow Information For more details, see the [workflow run](https://github.com/ethereum/execution-spec-tests/actions/runs/$run_id). """) # noqa: E501 ) def extract_failures(output: str) -> List[Tuple[str, str, str, str, str, str]]: """Extract failure information from the output using regex.""" failures = [] for line in output.split("\n"): if not line.startswith("FAILED"): continue # Extract test file path file_match = re.search(r"FAILED (tests/[^:]+\.py)", line) if not file_match: continue file_path = file_match.group(1) # Extract EIP number eip_match = re.search(r"eip(\d+)", file_path, re.IGNORECASE) eip_num = f"EIP-{eip_match.group(1)}" if eip_match else "Unknown" # Extract full path full_path_match = re.search(r"from '([^']+)'", line) full_path = full_path_match.group(1) if full_path_match else "Unknown" # Extract EIP link eip_link_match = re.search(r"Spec: (https://[^ ]+)\.", line) eip_link = eip_link_match.group(1) if eip_link_match else "" eip_link = eip_link.replace("blob/", "commits/") if eip_link else "" # Extract versions ref_version_match = re.search(r"Referenced version: ([a-f0-9]+)", line) ref_version = ref_version_match.group(1) if ref_version_match else "Unknown" latest_version_match = re.search(r"Latest version: ([a-f0-9]+)", line) latest_version = latest_version_match.group(1) if latest_version_match else "Unknown" failures.append((file_path, eip_num, full_path, eip_link, ref_version, latest_version)) return failures def generate_summary_table(failures: List[Tuple[str, str, str, str, str, str]]) -> str: """Generate a markdown summary table from the failures.""" rows = [] for file_path, eip_num, _, eip_link, ref_version, latest_version in failures: rows.append( f"| `{file_path}` | [{eip_num}]({eip_link}) | `{ref_version}` | `{latest_version}` |" ) return "\n".join(rows) def main() -> None: """Generate the report.""" if len(sys.argv) < 2: print("Usage: uv run python generate_eip_report.py [output_file]") sys.exit(1) input_file = sys.argv[1] output_file = sys.argv[2] if len(sys.argv) > 2 else "./reports/outdated_eips.md" try: with open(input_file, "r") as f: output = f.read() except Exception as e: print(f"Error reading input file: {e}") sys.exit(1) failures = extract_failures(output) fail_messages = "\n".join(line for line in output.split("\n") if line.startswith("FAILED")) if not fail_messages: fail_messages = ( "No test failures were found in the pytest output: No lines start with 'FAILED'." ) error_messages = "\n".join(line for line in output.split("\n") if line.startswith("ERROR")) if not error_messages: error_messages = ( "No test errors were found in the pytest output: No lines start with 'ERROR'." ) report_content = REPORT_TEMPLATE.substitute( summary_table=generate_summary_table(failures), fail_messages=fail_messages, error_messages=error_messages, run_id=os.environ.get("GITHUB_RUN_ID", ""), ) try: with open(output_file, "w") as report: report.write(report_content) except Exception as e: print(f"Error writing output file: {e}") sys.exit(1) print(f"Report generated successfully: {output_file}") print(f"Found {len(failures)} outdated EIP references") if __name__ == "__main__": main() ================================================ FILE: .github/scripts/get_release_props.py ================================================ # /// script # requires-python = ">=3.12" # dependencies = [ # "pyyaml", # "click", # ] # /// """Extract the properties of a configured EEST release from a YAML file.""" import sys import click import yaml RELEASE_PROPS_FILE = "./.github/configs/feature.yaml" @click.command() @click.argument("release", required=True) def get_release_props(release: str) -> None: """Extract the properties from the YAML file for a given release.""" with open(RELEASE_PROPS_FILE) as f: data = yaml.safe_load(f) if release not in data: print(f"Error: Release {release} not found in {RELEASE_PROPS_FILE}.") sys.exit(1) print("\n".join(f"{key}={value}" for key, value in data[release].items())) if __name__ == "__main__": get_release_props() ================================================ FILE: .github/scripts/parse_ported_tests.sh ================================================ #!/bin/bash # Parse ported_from markers from introduced .py tests # Usage: parse_ported_tests.sh # Exit codes: # 0 - Found converted tests, continue processing # 1 - No converted tests found, but updates detected set -e CHANGED_TEST_FILES="$1" WORKSPACE_PATH="${2:-$GITHUB_WORKSPACE}" echo "Changed or new test files: $CHANGED_TEST_FILES" FILTERED_FILES="" for file in $CHANGED_TEST_FILES; do if git diff origin/main -- "$file" | grep -q "^+.*@pytest.mark.ported_from"; then FILTERED_FILES="$FILTERED_FILES $file" fi done if [[ -z "$FILTERED_FILES" ]]; then echo "No new ported_from markers found." echo "any_ported=false" >> "$GITHUB_OUTPUT" exit 0 fi uv run fill $FILTERED_FILES --show-ported-from --clean --quiet --links-as-filled --skip-coverage-missed-reason --ported-from-output-file ported_from_files.txt files=$(cat ported_from_files.txt) echo "Extracted converted tests:" echo "$files" if [[ -z "$files" ]]; then echo "No ported fillers found, check updates instead." echo "any_ported=false" >> "$GITHUB_OUTPUT" exit 0 fi echo "any_ported=true" >> "$GITHUB_OUTPUT" echo "----------------" echo "Discovered existing json tests that will be BASE files:" BASE_TESTS_PATH="${WORKSPACE_PATH}/evmtest_coverage/coverage/BASE_TESTS" mkdir -p "$BASE_TESTS_PATH" for file in $files; do # Make sure each file exist at least in develop or legacy tests file_found=0 if [[ "$file" == *"BlockchainTests"* ]]; then destination_path="$BASE_TESTS_PATH/blockchain_tests" elif [[ "$file" == *"GeneralStateTests"* ]]; then destination_path="$BASE_TESTS_PATH/state_tests" else echo "Error: $file is not a valid test file" exit 1 fi # Try ethereum/tests source_path="${WORKSPACE_PATH}/testpath/$file" if [ -e "$source_path" ]; then file_found=1 mkdir -p "$destination_path" cp "$source_path" "$destination_path" echo "$source_path -> $destination_path" fi # Try ethereum/legacytests source_path="${WORKSPACE_PATH}/legacytestpath/Cancun/$file" base_name=$(basename "$file") legacy_file_name="legacy_$base_name" if [ -e "$source_path" ]; then file_found=1 mkdir -p "$destination_path" cp "$source_path" "$destination_path/$legacy_file_name" echo "$source_path -> $destination_path" fi if [ $file_found -eq 0 ]; then echo "Error: Failed to find the test file $file in test repo" exit 1 fi done exit 0 ================================================ FILE: .github/workflows/check_eip_versions.yaml ================================================ name: Check EIP Versions on: repository_dispatch: workflow_dispatch: jobs: check_eip_versions: runs-on: ubuntu-latest permissions: issues: write # required for peter-evans/create-issue-from-file contents: read # needed for API access to GitHub steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ matrix.python }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ matrix.python }} - name: Run EIP Version Checker id: check-eip continue-on-error: true env: # GitHub token provides API access for EIP version checking GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | mkdir -p ./reports uv run check_eip_versions 2>&1 | tee ./reports/eip_check_output.txt # Save the exit code but don't fail the workflow exit_code=${PIPESTATUS[0]} echo "exit_code=$exit_code" >> $GITHUB_OUTPUT # Always return success to GitHub Actions exit 0 - name: Generate report file if: steps.check-eip.outputs.exit_code != 0 run: | uv run python .github/scripts/generate_eip_report.py ./reports/eip_check_output.txt ./reports/outdated_eips.md - name: Create Issue From File if: steps.check-eip.outputs.exit_code != 0 uses: peter-evans/create-issue-from-file@e8ef132d6df98ed982188e460ebb3b5d4ef3a9cd with: title: "chore(tests): eip spec references outdated" content-filepath: ./reports/outdated_eips.md labels: report, automated issue, scope:tests, type:chore - name: Upload test report as artifact if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: eip-check-report path: ./reports/ retention-days: 30 ================================================ FILE: .github/workflows/check_links.yml ================================================ name: Check Links on: repository_dispatch: workflow_dispatch: jobs: linkChecker: runs-on: ubuntu-latest permissions: issues: write # required for peter-evans/create-issue-from-file steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Link Checker id: lychee uses: lycheeverse/lychee-action@1d97d84f0bc547f7b25f4c2170d87d810dc2fb2c # We use --exclude '\.md(#.*)?$' to skip internal links in markdown like [See test](../tests/.../test_case.md) # otherwise we get false positives due to links pointing to content that gets generated during our mkdocs flow. # These links are checked during `mkdocs build --strict` with: args: > README.md src/**/*.py src/**/*.md tests/**/*.py tests/**/*.md docs/**/*.md --exclude '\.md(#.*)?$' fail: false - name: Create Issue From File if: steps.lychee.outputs.exit_code != 0 uses: peter-evans/create-issue-from-file@e8ef132d6df98ed982188e460ebb3b5d4ef3a9cd with: title: Link Checker Report content-filepath: ./lychee/out.md labels: report, automated issue ================================================ FILE: .github/workflows/coverage.yaml ================================================ name: Evmone Coverage Report on: pull_request: paths: - "tests/**" # This triggers the workflow for any changes in the tests folder - "!tests/osaka/**" # exclude changes in 'tests/osaka' - "!tests/unscheduled/**" # exclude changes in 'tests/unscheduled' jobs: evmone-coverage-diff: runs-on: ubuntu-latest env: BLOCK_GAS_LIMIT: "45000000" FILL_UNTIL: "Cancun" steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Debug GitHub context run: | echo "Git reference: ${{ github.ref }}" echo "Git head ref: ${{ github.head_ref }}" echo "Git base ref: ${{ github.base_ref }}" echo "Node Version: $(node -v)" echo "NPM Version: $(npm -v)" - name: Get all changed python files in tests/ and changes to coverted-ethereum-tests.txt id: changed-tests uses: tj-actions/changed-files@48d8f15b2aaa3d255ca5af3eba4870f807ce6b3c with: # TODO: non-test modules such as __init__.py or spec.py could effect coverage - in this case we should # fill all applicable tests (i.e., all the test_*.py files in or under the changed module's directory) include_all_old_new_renamed_files: true output_renamed_files_as_deleted_and_added: true files_yaml: | tests: - tests/**/test_*.py - '!tests/prague/**' - '!tests/unscheduled/**' - name: Exit workflow if there are no changed python files if: steps.changed-tests.outputs.tests_any_changed != 'true' run: | echo "No python files were changed in ./tests/ - no action necessary" exit 0 - name: Report changed python test modules if: steps.changed-tests.outputs.tests_any_changed == 'true' run: | echo "${{ toJson(steps.changed-tests.outputs) }}" echo "Changed python test modules: ${{ steps.changed-tests.outputs.tests_all_modified_files }}" - name: Debug GitHub context run: | echo "Git reference: ${{ github.ref }}" echo "Git head ref: ${{ github.head_ref }}" echo "Git base ref: ${{ github.base_ref }}" - name: Log in to Docker Hub if: ${{ steps.changed-tests.outputs.tests_any_changed == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 with: username: marioeth password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Install deps if: steps.changed-tests.outputs.tests_any_changed == 'true' run: | echo $(pwd) echo ${{ github.workspace }} - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} if: steps.changed-tests.outputs.tests_any_changed == 'true' uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: false version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Install EEST if: steps.changed-tests.outputs.tests_any_changed == 'true' run: | uv sync --no-progress uv run python --version # Required to fill .py tests - name: Build EVMONE EVM uses: ./.github/actions/build-evm-client/evmone if: steps.changed-tests.outputs.tests_any_changed == 'true' id: evm-builder2 with: targets: "evmone-t8n" - name: Checkout ethereum/tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 if: steps.changed-tests.outputs.tests_any_changed == 'true' with: repository: ethereum/tests path: testpath sparse-checkout: | BlockchainTests EOFTests - name: Checkout ethereum/legacytests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 if: steps.changed-tests.outputs.tests_any_changed == 'true' with: repository: ethereum/legacytests path: legacytestpath sparse-checkout: | Cancun/GeneralStateTests Cancun/BlockchainTests # This command diffs the file and filters in new lines - name: Parse ported_from markers from introduced .py tests id: ported-from if: steps.changed-tests.outputs.tests_any_changed == 'true' env: CHANGED_TEST_FILES: ${{ steps.changed-tests.outputs.tests_all_changed_files }} run: | ./.github/scripts/parse_ported_tests.sh "$CHANGED_TEST_FILES" "${{ github.workspace }}" || true # This command checks and fills python test sources introduced by a PR - name: Parse and fill introduced test sources if: steps.changed-tests.outputs.tests_any_changed == 'true' env: CHANGED_TEST_FILES: ${{ steps.changed-tests.outputs.tests_all_changed_files }} run: | ./.github/scripts/fill_introduced_tests.sh "$CHANGED_TEST_FILES" "${{ github.workspace }}/evmtest_coverage/coverage/PATCH_TESTS" "${{ env.BLOCK_GAS_LIMIT }}" "${{ env.FILL_UNTIL }}" - name: Parse and fill introduced test sources from before the PR if: ${{ (steps.changed-tests.outputs.tests_modified_files_count != '0' || steps.changed-tests.outputs.tests_deleted_files_count != '0') && steps.ported-from.outputs.any_ported == 'false' }} id: pre-patch-fill env: MODIFIED_TEST_FILES: ${{ steps.changed-tests.outputs.tests_modified_files }} DELETED_TEST_FILES: ${{ steps.changed-tests.outputs.tests_deleted_files }} run: | ./.github/scripts/fill_prepatched_tests.sh "$MODIFIED_TEST_FILES $DELETED_TEST_FILES" "${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS" "${{ github.workspace }}/evmtest_coverage/coverage/PATCH_TESTS" "${{ env.BLOCK_GAS_LIMIT }}" "${{ env.FILL_UNTIL }}" - name: Print Unique Test IDs that will be covered if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} run: | echo "=== Original BASE (main) test IDs ===" if [ -f "${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS/.meta/index.json" ]; then uv run python -c "import json; data=json.load(open('${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS/.meta/index.json')); [print(tc['id']) for tc in data['test_cases']]" else echo "No BASE_TESTS/.meta/index.json found" fi echo "=== Ported PATCH test IDs ===" if [ -f "${{ github.workspace }}/evmtest_coverage/coverage/PATCH_TESTS/.meta/index.json" ]; then uv run python -c "import json; data=json.load(open('${{ github.workspace }}/evmtest_coverage/coverage/PATCH_TESTS/.meta/index.json')); [print(tc['id']) for tc in data['test_cases']]" else echo "No PATCH_TESTS/.meta/index.json found" fi echo "=== SUMMARY ===" if [ -f "${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS/.meta/index.json" ] && [ -f "${{ github.workspace }}/evmtest_coverage/coverage/PATCH_TESTS/.meta/index.json" ]; then uv run python -c "import json; base=json.load(open('${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS/.meta/index.json')); patch=json.load(open('${{ github.workspace }}/evmtest_coverage/coverage/PATCH_TESTS/.meta/index.json')); print(f'BASE: {len(base[\"test_cases\"])} tests, PATCH: {len(patch[\"test_cases\"])} tests, Difference: {len(patch[\"test_cases\"]) - len(base[\"test_cases\"])}')" else echo "No BASE_TESTS/.meta/index.json or PATCH_TESTS/.meta/index.json found" fi - name: Run coverage of the BASE tests uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} with: image: marioeth/evmone-coverage-script:v0.0.1 options: -v ${{ github.workspace }}/evmtest_coverage/coverage:/tests run: /entrypoint.sh --mode=cover --testpath=/tests/BASE_TESTS --outputname=BASE - name: Run coverage of the PATCH tests uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} with: image: marioeth/evmone-coverage-script:v0.0.1 options: -v ${{ github.workspace }}/evmtest_coverage/coverage:/tests run: /entrypoint.sh --mode=cover --testpath=/tests/PATCH_TESTS --outputname=PATCH - name: Run coverage DIFF of the PATCH tests compared to BASE tests uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} with: image: marioeth/evmone-coverage-script:v0.0.1 options: -v ${{ github.workspace }}/evmtest_coverage/coverage:/tests run: /entrypoint.sh --mode=diff --basefile=coverage_BASE.lcov --patchfile=coverage_PATCH.lcov - name: Chmod coverage results if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} run: | user=$(whoami) sudo chown -R $user:$user ${{ github.workspace }}/evmtest_coverage/coverage - name: Upload coverage results uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} with: name: coverage-diff-native-${{ github.run_id }}-${{ github.run_attempt }} path: ${{ github.workspace }}/evmtest_coverage/coverage compression-level: 6 # Default compression level for optimal balance - name: Verify coverage results uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 if: ${{ steps.pre-patch-fill.outputs.any_modified_fixtures == 'true' || steps.ported-from.outputs.any_ported == 'true' }} with: image: marioeth/evmone-coverage-script:v0.0.1 options: -v ${{ github.workspace }}/evmtest_coverage/coverage:/tests run: /check.sh ================================================ FILE: .github/workflows/docs_deploy.yaml ================================================ name: Deploy Docs permissions: pages: write # Required for deploying to GitHub Pages with `secrets.GITHUB_TOKEN` on: push: tags: - "v[0-9]+.[0-9]+.[0-9]+*" # Push events to matching v*, i.e. v1.0, v20.15.10, v0.1.1a1 branches: - main jobs: deploy: if: github.repository_owner == 'ethereum' # don't run on forks runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 ssh-key: ${{secrets.GH_ACTIONS_DEPLOY_KEY}} - name: Build transition tool uses: ./.github/actions/build-evm-base with: id: evm-builder type: stable - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Install EEST and dependencies run: uv sync --extra=docs --no-progress - name: Setup doc deploy run: | git config --global user.name "github-actions[bot]" git config --global user.email github-actions[bot]@users.noreply.github.com - name: Build and deploy docs to gh-pages if: ${{ github.ref_type == 'branch' }} run: | uv run mike deploy --update-aliases --push --remote origin main development - name: Build and deploy docs to gh-pages if: ${{ github.ref_type == 'tag' }} run: | uv run mike deploy --push --remote origin ${{ github.ref_name }} ================================================ FILE: .github/workflows/fixtures.yaml ================================================ name: Build and Package Fixtures on: push: tags: - "v[0-9]+.[0-9]+.[0-9]+*" workflow_dispatch: jobs: features: runs-on: ubuntu-latest outputs: features: ${{ steps.parse.outputs.features }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Get names from .github/configs/feature.yaml id: parse shell: bash run: | # Get all features without `feature_only: true` grep -Po "^[0-9a-zA-Z_\-]+" ./.github/configs/feature.yaml | \ while read feature; do if ! awk "/^$feature:/{flag=1; next} /^[[:alnum:]]/{flag=0} flag && /feature_only:.*true/{exit 1}" \ ./.github/configs/feature.yaml; then continue fi echo "$feature" done | jq -R . | jq -cs . > features.json echo "features=$(cat features.json)" >> "$GITHUB_OUTPUT" build: needs: features runs-on: [self-hosted-ghr, size-gigachungus-x64] timeout-minutes: 1440 strategy: matrix: name: ${{ fromJson(needs.features.outputs.features) }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: submodules: true - name: Fetch lllc uses: ./.github/actions/fetch-binary with: version: v1.0.0 repo_owner: felix314159 repo_name: lllc-custom remote_name: lllc binary_name: lllc expected_sha256: 865a0d5379acb3b5471337b5dcf686a2dd71587c6b65b9da6c963de627e0b300 - name: Fetch Solidity uses: ./.github/actions/fetch-binary with: version: v0.8.24 repo_owner: ethereum repo_name: solidity remote_name: solc-static-linux binary_name: solc expected_sha256: fb03a29a517452b9f12bcf459ef37d0a543765bb3bbc911e70a87d6a37c30d5f - uses: ./.github/actions/build-fixtures with: release_name: ${{ matrix.name }} uv_version: ${{ vars.UV_VERSION }} python_version: ${{ vars.DEFAULT_PYTHON_VERSION }} release: runs-on: ubuntu-latest needs: build if: startsWith(github.ref, 'refs/tags/') steps: - name: Download artifacts uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e with: path: . - name: Draft Release uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda with: files: "./**" draft: true generate_release_notes: true fail_on_unmatched_files: true ================================================ FILE: .github/workflows/fixtures_feature.yaml ================================================ name: Build and Package Fixtures for a feature on: push: tags: - "*@v*" workflow_dispatch: jobs: feature-names: runs-on: ubuntu-latest outputs: names: ${{ steps.feature-name.outputs.names }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: submodules: false - name: Get feature names id: feature-name shell: bash run: | names=$(grep -Po "^${GITHUB_REF_NAME//@*/}[^:]*" .github/configs/feature.yaml | jq --raw-input . | jq -c --slurp .) echo names=${names} echo names=${names} >> "$GITHUB_OUTPUT" build: needs: feature-names runs-on: [self-hosted-ghr, size-gigachungus-x64] timeout-minutes: 1440 strategy: matrix: feature: ${{ fromJSON(needs.feature-names.outputs.names) }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: submodules: true - name: Fetch lllc uses: ./.github/actions/fetch-binary with: version: v1.0.0 repo_owner: felix314159 repo_name: lllc-custom remote_name: lllc binary_name: lllc expected_sha256: 865a0d5379acb3b5471337b5dcf686a2dd71587c6b65b9da6c963de627e0b300 - name: Fetch Solidity uses: ./.github/actions/fetch-binary with: version: v0.8.24 repo_owner: ethereum repo_name: solidity remote_name: solc-static-linux binary_name: solc expected_sha256: fb03a29a517452b9f12bcf459ef37d0a543765bb3bbc911e70a87d6a37c30d5f - uses: ./.github/actions/build-fixtures with: release_name: ${{ matrix.feature }} uv_version: ${{ vars.UV_VERSION }} python_version: ${{ vars.DEFAULT_PYTHON_VERSION }} release: runs-on: ubuntu-latest needs: build if: startsWith(github.ref, 'refs/tags/') steps: - name: Download artifacts uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e with: path: . - name: Draft Pre-release uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda with: files: "./**" draft: true prerelease: true generate_release_notes: true fail_on_unmatched_files: true ================================================ FILE: .github/workflows/tox_verify.yaml ================================================ name: Tox on: push: branches: [main] pull_request: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: lint: name: Lint python sources with ruff runs-on: ubuntu-latest steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Run ruff linter via tox run: uvx --with=tox-uv tox -e lint typecheck: name: Typecheck python sources with mypy runs-on: ubuntu-latest steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Run mypy typechecker via tox run: uvx --with=tox-uv tox -e typecheck spellcheck: name: Spellcheck sources with codespell runs-on: ubuntu-latest steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Run spellcheck with codespell via tox run: uvx --with=tox-uv tox -e spellcheck env: GITHUB_STEP_SUMMARY: ${{ env.GITHUB_STEP_SUMMARY }} changelog: name: Validate changelog entries runs-on: ubuntu-latest steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Run changelog validation via tox run: uvx --with=tox-uv tox -e changelog markdownlint: name: Lint markdown files with markdownlint runs-on: ubuntu-latest steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - uses: DavidAnson/markdownlint-cli2-action@05f32210e84442804257b2a6f20b273450ec8265 with: globs: | README.md docs/**/*.md mkdocs: name: Build html documentation with mkdocs runs-on: ubuntu-latest steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ vars.DEFAULT_PYTHON_VERSION }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ vars.DEFAULT_PYTHON_VERSION }} - name: Build html documentation with mkdocs via tox run: uvx --with=tox-uv tox -e mkdocs pytest_framework: name: Run unit tests, ${{ matrix.os }}, ${{ matrix.python }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: macos-15 python: "3.11" - os: macos-15 python: "pypy3.11" - os: ubuntu-latest python: "3.12" steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Checkout ethereum/execution-specs for local EELS implementation uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: marioevz/execution-specs ref: 3387e5f4aedfe99becfdc39b444d6371e25e0924 path: execution-specs fetch-depth: 1 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ matrix.python }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ matrix.python }} - name: Build EVMONE EVM uses: ./.github/actions/build-evm-client/evmone with: targets: "evmone-t8n" - name: Build GETH EVM uses: ./.github/actions/build-evm-client/geth - name: Update eels_resolutions.json run: | sed -i -e "s|\$GITHUB_WORKSPACE|${GITHUB_WORKSPACE}|g" .github/configs/eels_resolutions.json - name: Run tox - run framework unit tests with pytest env: EELS_RESOLUTIONS_FILE: ${{ github.workspace }}/.github/configs/eels_resolutions.json run: uvx --with=tox-uv tox -e pytest tests_deployed: name: Fill tests, deployed, ${{ matrix.name }}, ${{ matrix.python }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: [self-hosted-ghr, size-chungus-x64] name: self-hosted-ghr-chungus-x64 python: "3.11" - os: macos-15 name: macos-15 python: "3.12" steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Checkout ethereum/execution-specs for local EELS implementation uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: marioevz/execution-specs ref: 3387e5f4aedfe99becfdc39b444d6371e25e0924 path: execution-specs fetch-depth: 1 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ matrix.python }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ matrix.python }} - name: Update eels_resolutions.json run: | sed -i -e "s|\$GITHUB_WORKSPACE|${GITHUB_WORKSPACE}|g" .github/configs/eels_resolutions.json - name: Run tox - fill tests for deployed forks env: EELS_RESOLUTIONS_FILE: ${{ github.workspace }}/.github/configs/eels_resolutions.json run: uvx --with=tox-uv tox -e tests-deployed tests_deployed_benchmark: name: Fill benchmark test cases, deployed, ${{ matrix.os }}, ${{ matrix.python }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest python: "3.11" - os: macos-15 python: "3.12" - os: ubuntu-latest python: "pypy3.11" steps: - name: Checkout ethereum/execution-spec-tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install uv ${{ vars.UV_VERSION }} and python ${{ matrix.python }} uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 with: enable-cache: true cache-dependency-glob: "uv.lock" version: ${{ vars.UV_VERSION }} python-version: ${{ matrix.python }} - name: Build EVMONE EVM uses: ./.github/actions/build-evm-client/evmone with: targets: "evmone-t8n" - name: Run tox - fill tests for deployed forks env: EELS_RESOLUTIONS_FILE: ${{ github.workspace }}/.github/configs/eels_resolutions.json run: uvx --with=tox-uv tox -e tests-deployed-benchmark ================================================ FILE: .gitignore ================================================ .DS_Store .AppleDouble .LSOverride .python-version *.py[cod] *$py.class .venv/ venv/ # Artifacts created by `fill` fixtures/ fixtures-*/ logs/ /out/ # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # pycharm .idea/ *.manifest *.spec pip-log.txt pip-delete-this-directory.txt .tox/ /doc/_autosummary .coverage # misc *.code-workspace verify_kzg_proof .vscode/launch.json # docs _readthedocs site venv-docs/ .pyspelling_en.dict # cache-related cached_downloads/ .cache __pycache__/ .mypy_cache/ .pytest_cache/ .ruff_cache/ # pytest report assets *.html # Environment env.yaml .env .env.* # Framework logs logs/ *.log # node node_modules/ package-lock.json # Running github actions locally with act .act_github_vars # temporary files *.tmp *.temp # ai .claude/ ================================================ FILE: .lycheeignore ================================================ http://localhost/ http://127.0.0.1:3000/ https://github/ ttps://github.com/%7Bself.RepositoryOwner%7D/ https://api.github.com/repos/%7Bself.RepositoryOwner%7D/ https://api.github.com/repos/%7Brepo%7D/releases https://github.com/ethereum/execution-spec-tests/releases/download/ ================================================ FILE: .markdownlint.yaml ================================================ # All rules: https://github.com/DavidAnson/markdownlint#rules--aliases default: true # Default state for all rules MD013: false # line-length: We don't fill paragaraphs/limit line length MD034: false # no-bare-urls - We use pymdownx.magiclink which allows bare urls MD046: false # code-block-style - This doesn't play well with material's admonitions) MD024: false # no-duplicate-heading - We use duplicate headings in the changelog. MD033: false # no-inline-html - Too strict. ul-indent: indent: 4 start_indent: 4 ================================================ FILE: .pre-commit-config.yaml ================================================ repos: - repo: local hooks: - id: tox name: tox entry: uvx --with=tox-uv tox --parallel -e lint,typecheck,spellcheck language: system types: [python] pass_filenames: false - id: tox-docs name: tox-docs entry: uvx --with=tox-uv tox --parallel -e spellcheck,markdownlint language: system files: \.md$ pass_filenames: false - id: tox-changelog name: tox-changelog entry: uvx --with=tox-uv tox -e changelog language: system files: ^docs/CHANGELOG\.md$ pass_filenames: false ================================================ FILE: .pyspelling.yml ================================================ matrix: - name: markdown pipeline: - pyspelling.filters.markdown: - pyspelling.filters.html: comments: false attributes: - title - alt ignores: - code - pre - a aspell: lang: en d: en_US dictionary: wordlists: - whitelist.txt output: .pyspelling_en.dict sources: - 'docs/**/*.md' ================================================ FILE: .readthedocs.yaml ================================================ # .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-22.04 tools: python: "3.11" mkdocs: configuration: mkdocs.yml python: install: - requirements: docs/rtdio_requirements.txt formats: - epub - pdf ================================================ FILE: .vscode/extensions.json ================================================ { // List of extensions that MUST be used for users of the repo. "recommendations": [ "ms-python.python", "ms-python.mypy-type-checker", "ms-python.vscode-pylance", "charliermarsh.ruff", "esbenp.prettier-vscode", "njpwerner.autodocstring", "streetsidesoftware.code-spell-checker", "tamasfe.even-better-toml", "bierner.markdown-mermaid", "bpruitt-goddard.mermaid-markdown-syntax-highlighting", "DavidAnson.vscode-markdownlint", "soulcode.vscode-unwanted-extensions" ], // List of extensions that MUST NOT be used for users of the repo. "unwantedRecommendations": [ "ms-python.black-formatter", "ms-python.flake8", "ms-python.isort" ] } ================================================ FILE: .vscode/launch.recommended.json ================================================ { "_comment": [ "Main configuration for VS Code debugging", "Use IntelliSense to learn about possible attributes.", "If the VS Code 'Run and Debug' button or launch selector", "is not visible, see: https://stackoverflow.com/a/74245823" ], "version": "0.2.0", "configurations": [ { "name": "Launch consume direct", "type": "debugpy", "request": "launch", "module": "pytest", "args": [ "-c", "${workspaceFolder}/src/cli/pytest_commands/pytest_ini_files/pytest-consume.ini", "src/pytest_plugins/consume/direct/test_via_direct.py", "--bin", "${input:evmBinary}", "--input", "${input:fixturePath}" ], "cwd": "${workspaceFolder}" }, { "name": "Launch fill --until choose fork", "type": "debugpy", "request": "launch", "module": "pytest", "args": [ "-c", "${workspaceFolder}/src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini", "--until", "${input:fork}", "--evm-bin", "${input:evmBinary}", "-v" ], "cwd": "${workspaceFolder}" }, { "name": "Launch fill -k choose test path", "type": "debugpy", "request": "launch", "module": "pytest", "args": [ "-c", "${workspaceFolder}/src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini", "--until", "Cancun", "--evm-bin", "${input:evmBinary}", "-v", "-k", "${input:testPathOrId}" ], "cwd": "${workspaceFolder}" }, { "name": "Launch fill --until Cancun", "type": "debugpy", "request": "launch", "module": "pytest", "args": [ "-c", "${workspaceFolder}/src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini", "--until", "Cancun", "--evm-bin", "${input:evmBinary}", "-v" ], "cwd": "${workspaceFolder}" }, { "name": "Launch fill --until Prague", "type": "debugpy", "request": "launch", "module": "pytest", "args": [ "-c", "${workspaceFolder}/src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini", "--until", "Prague", "--evm-bin", "${input:evmBinary}", "-v" ], "cwd": "${workspaceFolder}" } ], "inputs": [ { "type": "pickString", "id": "evmBinary", "description": "Which evm binary to you want to run?", "options": [ { "label": "First evm binary in PATH", "value": "evm" }, { "label": "Geth, mario's repo", "value": "~/code/github/marioevz/go-ethereum/build/bin/evm" }, { "label": "Geth, danceratopz's repo", "value": "~/code/github/danceratopz/go-ethereum/build/bin/evm" }, { "label": "evmone", "value": "~/code/github/ethereum/evmone/build/bin/evmone-t8n" }, { "label": "besu", "value": "~/code/github/danceratopz/besu/ethereum/evmtool/build/install/evmtool/bin/evm" } ], "default": "evm" }, { "type": "pickString", "id": "fork", "description": "Which fork do you want to use?", "options": [ "Frontier", "Homestead", "Byzantium", "Constantinople", "ConstantinopleFix", "Istanbul", "Berlin", "London", "Paris", "Shanghai", "Cancun", "Prague" ], "default": "Cancun" }, { "type": "promptString", "id": "testPathOrId", "description": "Enter a test path string or id to provide to pytest -k", "default": "test_" }, { "type": "promptString", "id": "fixturePath", "description": "Enter a fixture path", "default": "${workspaceFolder}/fixtures" } ] } ================================================ FILE: .vscode/settings.json ================================================ { // Settings that users SHOULD adhere to when developing with the EEST repo. "cSpell.customDictionaries": { "project-words": { "name": "project-words", "path": "${workspaceRoot}/whitelist.txt", "description": "Words used in this project", "addWords": true }, "custom": true, "internal-terms": false }, "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[python]": { "editor.rulers": [79, 100], "editor.formatOnSave": true, "editor.defaultFormatter": "charliermarsh.ruff", "editor.codeActionsOnSave": { "source.organizeImports": "explicit", "source.fixAll.ruff": "explicit", }, }, "python.analysis.autoFormatStrings": true, "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true, "python.testing.pytestArgs": [ // The main cli tools (`fill`, `consume`, `execute`) in execution-spec-tests are based // on pytest (a very popular Python unit testing framework). As such, EEST test cases for // these tools can be explored, executed (and debugged!) via VS Code's "Testing" view // https://code.visualstudio.com/docs/editor/testing (just as for unit tests). // // vscode-python only supports single framework environments, here is the issue to track // multiple environments support: // https://github.com/microsoft/vscode-python/issues/12075 // // For now, to switch between running the EEST "framework" tests (the actual unit tests // for EEST libraries and tools) and running the EEST's EL test cases via `fill`, // `consume` and `execute`, specify the appropriate pytest*.ini file below and add // command-line options as needed. // // * Framework tests: // "-c", "pytest-framework.ini", // // * Fill, see the output of: // `fill --help` for eest specific options, or, // `fill --pytest-help` for all pytest available options, or, // https://eest.ethereum.org/main/filling_tests/filling_tests_command_line/ "-c", "pytest.ini", "--fork=Prague", // // * Consume (works, but the output of VS Code's Testing View is broken due to nested // `[]` in the generated test IDs): // "-c", "pytest-consume.ini", "--input=fixtures/", "src/pytest_plugins/consume/direct/test_via_direct.py", "--evm-bin=~/bin/evm" ], "ruff.enable": true, "ruff.lineLength": 99, "ruff.logLevel": "error", "extensions.ignoreRecommendations": false, "search.exclude": { "tests/static": true }, "files.watcherExclude": { "tests/static": true } } ================================================ FILE: CLAUDE.md ================================================ # CLAUDE.md - Ethereum Execution Spec Tests > **CRITICAL**: This repository aims to provide excellent tooling for generating JSON test vectors that test Ethereum execution layer clients. Correctness is absolute priority. The repo prioritizes a contributor-first mindset. ## 🎯 Core Purpose - `./tests/`: Python tests that **generate JSON test vectors (fixtures)** via `fill` command - `./src/pytest_plugins/filler/`: Implements `fill` command (test vector generation from Python source) - `./src/pytest_plugins/consume/`: Implements `consume` command (test vector execution) - `./src/pytest_plugins/execute/`: Implements `execute` command (live JSON-RPC testing from Python source) - `./src/ethereum_test_*`: Core framework libraries and data structures ### Key Terminology (CRITICAL) **"Fixtures" has TWO meanings:** 1. **Test Fixtures** (JSON files) - The test vectors this framework generates 2. **Pytest Fixtures** - Standard pytest setup/teardown (`pre`, `state_test`, etc.) ### Workflows ```text Fill/Consume: Python Tests → fill → JSON Fixtures → consume → Client Testing Execute: Python Tests → execute → Live JSON-RPC Testing ``` ## 🚀 Essential Commands All commands use `uv run` prefix. The `uv sync --all-extras` command (below) automatically creates and manages a virtual environment. ### Setup ```bash uv sync --all-extras uvx pre-commit install ``` ### Core Workflow ```bash # Create test uv run eest make test # Generate fixtures (PRIMARY WORKFLOW) uv run fill --fork=Prague path/to/test.py --clean -v -m "not slow" # Execute against client uv run consume direct --bin=evm fixtures/ # Framework testing uv run pytest path/to/test.py::test_function ``` ### Quality Checks ```bash # Check code style and errors uv run ruff check src tests .github/scripts # Format code uv run ruff format src tests .github/scripts # Fix auto-fixable issues uv run ruff check --fix src tests .github/scripts # Type checking uv run mypy src tests .github/scripts # Framework unit tests uv run pytest -n auto # Run specific checks (fast checks) uvx --with=tox-uv tox -e lint,typecheck,spellcheck # Local docs check (fast mode: these warnings can be ignored "WARNING - Doc file 'writing_tests/..."): export FAST_DOCS=true && export GEN_TEST_DOC_VERSION="tox" && uv run mkdocs build ``` ## 🎯 Core Framework Rules ### NEVER Use Hardcoded Addresses ```python def test_example(pre: Alloc, state_test: StateTestFiller): # ✅ Dynamic allocation sender = pre.fund_eoa() contract = pre.deploy_contract(code=Op.SSTORE(1, 1)) tx = Transaction(sender=sender, to=contract, gas_limit=5_000_000) state_test(pre=pre, tx=tx, post={contract: Account(storage={1: 1})}) ``` ### Key Methods - `pre.deploy_contract(code, **kwargs) -> Address` - `pre.fund_eoa(amount=None, **kwargs) -> EOA` - `pre.fund_address(address, amount)` ### Gas Calculation Pattern ```python intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() tx_gas_limit = intrinsic_gas_calculator( calldata=tx_data, contract_creation=False, access_list=access_lists, ) + 100_000 ``` ## 📁 Key Directories ```text src/ ├── ethereum_test_tools/ # Core framework ├── ethereum_test_types/ # Type definitions ├── ethereum_test_fixtures/ # Pydantic models for test fixtures ├── pytest_plugins/ # Plugin system tests/ # Test cases by fork fixtures/ # Generated test vectors (default output directory) ``` ## ⚠️ Critical Anti-Patterns - ❌ Hardcoded addresses (use `pre` fixture) - ❌ `TestAddress` in new tests (use `pre.fund_eoa()`) - ❌ Missing `sender` parameter in transactions - ❌ Missing `@pytest.mark.valid_from("Fork")` markers - ❌ Manual nonce management ## 🔧 Common Patterns ### Fork Compatibility ```python @pytest.mark.valid_from("Cancun") def test_example(pre: Alloc, state_test: StateTestFiller): if fork >= Fork.Cancun: # Cancun-specific logic else: # Pre-Cancun logic ``` ### Parameterized Tests ```python @pytest.mark.parametrize("value", [0, 1, 2**256-1]) def test_with_params(value: int, pre: Alloc, state_test: StateTestFiller): ``` ## 🐛 Debugging Test Filling ### Generate EVM Traces ```bash uv run fill --fork=Prague --evm-dump-dir=debug_output/ --traces path/to/test.py jq -r '.opName' debug_output/**/*.jsonl ``` ### Common Issues - **Fill failures**: Check gas limits (increase if needed, use `transaction_intrinsic_cost_calculator`) - **Address conflicts**: Always use `pre` fixture for dynamic allocation - **Test collection**: Functions must start with `test_` - **Import errors**: Check dependencies in `pyproject.toml`, run `uv sync --all-extras` ## 📝 Code Standards - **Line length**: 100 characters - **Type annotations**: Required - **Import style**: Explicit imports only, no `import *`, no local imports. - **Path handling**: Use `pathlib` - **Code**: Use idiomatic python, prioritize readability. - **Docstrings**: Always include for methods and classes. For one-liners """Use one single-line docstring with quotes on same line.""" ## Commit Format ```text (): # Types: feat, fix, docs, style, refactor, test, chore, new # Scopes: evm, forks, tools, pytest, tests, docs, ci, consume, fill, eest ``` ## 🔍 Tool Preferences - **Search**: `rg "pattern" --type python` (not grep) - **JSON**: `jq -r '.field' file.json` - **GitHub**: `gh` CLI for all operations ## 🎯 Development Workflow 1. `uv run eest make test` - Create test 2. Implement tests using `pre` fixture patterns 3. `uv run fill --fork=Fork test.py --clean -v tests/path/to/module` - Generate fixtures 4. `uv run ruff check --fix` - Fix linting 5. Commit with semantic format **Critical**: Always run linting and type checking. Use `--clean` when filling. Never use hardcoded addresses. ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing Contributions are welcome from anyone, regardless of whether you are just starting your Python journey, a web developer or a seasoned Execution Layer developer! We appreciate your help and appreciate your contributions! ## Code of Conduct All contributors are expected to be excellent to each other; other behavior is not tolerated. ## Communication We encourage questions and discussions about the project. If you need help with the codebase or have questions about implementation details, please don't hesitate to reach out in the `#el-testing` channel in the [Ethereum R&D Discord Server](https://discord.com/invite/qGpsxSA). For detailed information on how to get help, please see the [Getting Help](https://eest.ethereum.org/main/getting_started/getting_help) page in our documentation, which includes communication channels and contact information for project maintainers. ## Contributions We Welcome As mentioned in the README's [Contributing section](https://github.com/ethereum/execution-spec-tests#contributing), we welcome earnest contributions that have reasonable substance or resolve existing repository issues. ## Contributions We Don't Accept We do not accept: - Contributions that only fix spelling or grammatical errors in documentation, code, or elsewhere. - Drive-by or vibe code contributions without proper engagement or context. - Pull requests from airdrop farmers. I.e., pull requests should have reasonable substance and context. ## Reporting Bugs We use GitHub Issues to track bugs. To report a bug, please follow these guidelines: ### Before Reporting 1. **Check existing issues**: Search [open issues](https://github.com/ethereum/execution-spec-tests/issues) to see if your problem has already been reported. 2. **Try to reproduce**: Confirm you can reproduce the issue consistently. 3. **Consider security implications**: For security vulnerabilities, please do NOT create a public issue (or PR). Instead, refer to our [Security Policy](SECURITY.md) for responsible disclosure guidelines. ### Creating a Bug Report When creating a new issue: 1. **Use a clear, descriptive title** that identifies the problem, (see [Commit Messages, Issues and PR Titles](#commit-messages-issue-and-pr-titles)). 2. **Provide detailed reproduction steps**: - Include the exact commands you ran. - Share relevant console output. - Specify your environment (OS, Python version, if relevant, `uv` version from `uv --version`). 3. **Include relevant information and versions**: - Run `eest info` to get repo and tool versions and copy the information to the issue: ```console uv run eest info ``` - Branch of execution-spec-tests you're using, if applicable. - For test failures, include the test case and failure details. - Screenshots if applicable. ## Pull Requests We welcome contributions via pull requests! This section will guide you through the process. ### For First-Time Contributors 1. **Fork the repository** by clicking the "Fork" button on the top right of the [GitHub repository page](https://github.com/ethereum/execution-spec-tests). 2. **Clone your fork** to your local machine: ```bash git clone https://github.com/YOUR-USERNAME/execution-spec-tests.git cd execution-spec-tests ``` 3. **Install `uv`**: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` 4. **Set up your environment**: ```bash uv python install 3.12 uv python pin 3.12 uv sync --all-extras ``` See [installation troubleshooting](https://eest.ethereum.org/main/getting_started/installation_troubleshooting) if you encounter issues. 5. **Create a branch** for your changes: ```bash git checkout -b your-branch-name ``` 6. **Make your changes** according to our [code standards](https://eest.ethereum.org/main/getting_started/code_standards). 7. **For EVM Tests**: Review the cases in the [EIP checklist template](./docs/writing_tests/checklist_templates/eip_testing_checklist_template.md). 8. **For Porting Tests**: If you're porting tests from ethereum/tests, see the [porting guide](https://eest.ethereum.org/main/writing_tests/porting_legacy_tests) for coverage analysis and using `--skip-coverage-missed-reason` when needed. 9. **Verify your changes** by running the appropriate checks: ```bash uvx --with=tox-uv tox -e lint,typecheck ``` 10. **Commit your changes** with meaningful commit messages (see [Commit Messages, Issues and PR Titles](#commit-messages-issue-and-pr-titles)). 11. **Push your branch** to your GitHub fork: ```bash git push -u origin your-branch-name ``` 12. **Create a pull request** by navigating to your fork on GitHub and clicking the "New Pull Request" button. ### Branch Naming Conventions Branch names should follow this format: ```text / ``` Where `` matches the [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) types: - `feat/` - For new features. - `fix/` - For bug fixes. - `docs/` - For documentation changes. - `test/` - For adding or modifying tests. - `refactor/` - For code refactoring. - `chore/` - For maintenance tasks. Examples: ```text feat/add-cancun-blob-tests fix/prague-consume-genesis docs/improve-installation-guide ``` ### PR Review Process 1. **Initial checks**: When you submit a PR, automated CI checks will run. Make sure all checks pass before requesting a review. 2. **Requesting review**: Feel free to tag a maintainer or ask for review in a PR comment. 3. **Review feedback**: Maintainers will review your code and may suggest changes. Please address all comments and engage in discussion if needed. 4. **Iteration**: Make requested changes, push to your branch, and the PR will update automatically. No need to create a new PR. 5. **Approval**: Once your changes are approved, a maintainer will merge your PR. ### PR Expectations To increase the chances of your PR being merged quickly: - **Scope**: Keep PRs focused on a _single issue or feature_. - **CI checks**: Ensure all CI checks pass before requesting review; but do ask for help if you don't understand the fail! - **Clean history**: Use meaningful, atomic commits that can be easily understood. - **Tests**: Include tests for new functionality. - **Documentation**: Update documentation for new features or changes. - **Responsiveness**: Try to respond to review feedback within a reasonable time. ### Code Standards and Enforced CI Checks We enforce lint, code formatting and unit test checks in our CI - for detailed code standards and enforcement checks, see our [Code Standards documentation](https://eest.ethereum.org/main/getting_started/code_standards). ### Commits It's recommended to keep changes logically grouped into smaller, individual commits to make changes easier to review. ### Commit Messages, Issue and PR Titles We use [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) messages and PR titles following the format: ```console (): ``` #### Rules - The format should be lowercase except for object names, which should be back-ticked (e.g., `FixtureCollector`). - The description should be clear and concise. - No period at the end of the title/message. - Use the imperative ("add" not "added" or "adds"). - A breaking change should be indicated by appending `!` directly after the type/scope. #### Types The following commit types are used in this repository: | `` | Repo Label | Description | | -------------- | --------------- | ------------------------------------------------------------ | | `feat` | `type:feat` | A new feature | | `bug` or `fix` | `type:bug` | A bug/bug fix (`bug` in issue; `fix` in commit/PR) | | `docs` | `type:docs` | Documentation changes | | `style` | - | Formatting changes that don't affect code functionality | | `refactor` | `type:refactor` | Code changes that neither fix bugs nor add features | | `test` | `type:test` | Add, refactor, modify an EEST library or framework unit test | | `chore` | `type:chore` | Routine tasks, dependency updates, etc. | #### Scopes The following scopes are used in this repository: | `` | Repo Label | Description | | --------- | ------------------ | ---------------------------------------------- | | `fill` | `scope:fill` | Changes to `fill` command | | `execute` | `scope:execute` | Changes to the `execute` command | | `consume` | `scope:consume` | Changes to `consume` command suite | | `pytest` | `scope:pytest` | Changes that effect all EEST pytest plugins | | `evm` | `scope:evm` | Changes to the `evm_transition_tool` package | | `forks` | `scope:forks` | Changes to `ethereum_test_forks` package | | `tools` | `scope:tools` | Changes to `ethereum_test_tools` package | | `fw` | `scope:fw` | Framework changes (evm\|tools\|forks\|pytest) | | `tests` | `scope:tests` | Changes to EL client test cases in `./tests` | | `docs` | `scope:docs` | Documentation flow changes | | `ci` | `scope:ci` | Continuous Integration changes | | `gentest` | `scope:gentest` | Changes to `gentest` CLI command | | `eest` | `scope:eest` | Changes to `eest` CLI command | | `make` | `scope:make` | Changes to `eest make` command | | `tooling` | `scope:tooling` | Python tools changes (`uv`, `ruff`, `tox`,...) | | `deps` | `scope:deps` | Updates package dependencies | #### Examples This repository's main focus are the EL client tests in `./tests/` (`scope:tests`), but it contains many unit/module tests (`type:tests`) for the test generation frameworks and libraries in this repository. This can be a bit confusing, these examples demonstrate how we apply these labels and terms: ```console # adds new EVM tests to tests/prague/eip7702_set_code_tx/ feat(tests): add test cases for EIP-7702 # a pure EVM test code refactor; no changes to test fixture JSON (at least not to fixture hashes, IDs might change if it's too difficult to preserve them). refactor(tests): split test setup across several fixtures # improve EVM test docstrings (these are included in HTML documentation): docs(tests): improve EIP-7623 docstrings # fix an EVM test fix(tests): EIP-7702 test authorization list nonce/gas # add unit tests for the `execute` command test(execute): add tests for output dir arguments # fix a broken unit test test(fill): fix broken unit test ``` Examples of messages and titles for other types and scopes: ```console feat(eest): add new test generator command fix(forks): resolve `Cancun` initialization issue docs(fill): describe new command-line args refactor(tools): improve code organization in bytecode helpers test(pytest): add tests for logging plugin chore(deps): update dependency versions ``` ## Merging PRs We maintain high standards for our repository history to ensure it's clean, understandable, and properly documented. Maintainers should follow these guidelines when merging PRs: ### Pre-Merge Checklist 1. **Review the PR template checklist** - Ensure all applicable items are checked. - Items that aren't relevant can be deleted or marked as N/A. 2. **Verify changelog entry** - Every PR that impacts functionality should have a changelog entry. - The entry should clearly but concisely describe the change. - It must include a link to the PR in brackets (e.g., `([#1234](https://github.com/ethereum/execution-spec-tests/pull/1234))`). - Add any breaking changes at the top of the upcoming release section. - Changelog entries are automatically validated in CI to ensure proper formatting. 3. **Check PR title format** - The PR title must follow the [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) format: `(): `. - This title will be used (suggested automatically by Github) as the squash commit message, so it's essential it's correct. - Follow the same rules as commit messages (imperative tense, no period at end, etc.). - Example: `feat(tests): add tests for EIP-7702 blob gas calculation` 4. **Review PR description**: - Ensure the PR description is accurate and up-to-date. 5. **Add appropriate labels**: - Ensure the PR has the appropriate labels matching its type and scope. 6. **Consider other contributors/stakeholders**: - Verify the PR has been reviewed and approved by any interested contributors and/or stakeholders. ### Merge Strategy We **strongly prefer squash merging** over other strategies. Exceptions to the squash merge policy may include: - Large PRs with logically separate commits that should be preserved. - Work that spans multiple distinct features or fixes. ### Squash Commit Details When performing a squash merge: 1. **Include PR number in the commit title** - Leave, respectively add, the PR number in parentheses at the end of the title. - Example: `feat(tests): add tests for EIP-7702 gas calculation (#1234)` 2. **Clean up the extended commit message** - Delete all content in the extended message section EXCEPT: - Any `Co-authored-by:` lines, which must be preserved to properly attribute work. - The format should be `Co-authored-by: Full Name ` ================================================ FILE: HUMANS.md ================================================ # HUMANS.md - Working with Claude and LLMs in Ethereum Execution Spec Tests This guide helps human developers understand the dependencies and get the most out of Claude and other LLMs when working with this codebase. ## 🤖 Why This Repository Has LLM Support Humans are faster when they use LLMs correctly. ## 📋 Required Dependencies for LLM-Assisted Development ### Requirements #### LLM Context File - **CLAUDE.md** - Primary LLM guidance (keep up-to-date). Use `#memorize` in Claude to update with new info. ### Recommended Available Tooling (for use with Claude) 1. **GitHub CLI**: `gh` for PR and issue management. 2. **ripgrep**: `rg` for fast code searching. 3. **jq**: For JSON analysis and EVM trace debugging. 4. **markdownlint-cli**: To verify markdown files (CI enforced). 5. **VS Code**: With recommended extensions (see [setup guide](docs/getting_started/setup_vs_code.md)). Run `claude` in VS Code for the best results. ## 🎯 Getting the Best Results from Claude ### 1. Provide Relevant Context **Always mention:** - What you're trying to accomplish. - Which part of the codebase you're working on (`tests/`, `src/`, `docs/`). - Any error messages or specific issues you're encountering. **Example - Good Context**: > "I'm writing a new test for EIP-7702 in `tests/prague/eip7702_set_code_tx/`. The test should verify that delegation target validation works correctly. The test fails to fill when running `uv run fill --fork=Prague path/to/test.py`" **Example - Poor Context**: > "My test isn't working" ### 2. Reference Key Documentation When asking Claude for help, mention which documentation you've already checked: - "I've read the test patterns in CLAUDE.md but...". - "According to the debugging section in CLAUDE.md...". - "The CONTRIBUTING.md mentions X, but I need help with Y...". ### 3. Share Specific Commands and Output Claude works best with concrete information: ```bash # Share the exact command you ran uv run fill --fork=Prague tests/cancun/eip4844_blobs/test_blob_txs.py --clean -v # Include relevant error output ERROR: Failed to compile Yul source: ... ``` ### 4. Ask for Complete Solutions Request end-to-end guidance rather than partial answers: - "Show me the complete test function with proper imports.". - "What's the full workflow from creating the test to verifying it works?". - "Include the commands I need to run to validate this change.". ## 🚀 Optimizing LLM Workflows ### Quick Start Template When starting a new (and complicated) task, provide Claude with something similar to template. ```console I'm working on [describe task] in the Ethereum execution-spec-tests repository. **Context**: - Working directory: [tests/shanghai/, src/ethereum_test_tools/, etc.] - Trying to: [specific goal] - Current status: [what you've tried, any errors] **References**: - Checked CLAUDE.md section: [which sections you've read] - Related documentation: [any other docs you've reviewed] **Specific question**: [exactly what you need help with] ``` ### Debugging Template For troubleshooting issues: ```console I'm encountering [specific error] when [doing what]. **Command run**: ```bash [exact command that failed] ```console **Error output**: ``` [full error message] ```console **What I've tried**: - [list previous attempts]. **Environment details**: ```bash uv run eest info ```console **Request**: Please help me understand what's wrong and provide the fix. ``` ### Code Review Template When asking Claude to review code: ```console Please review this [test/function/module] for: - Compliance with project standards (CLAUDE.md, code_standards.md). - Correct usage of the `pre` fixture. - Proper error handling and type annotations. - Performance considerations. **Code**: ```python [your code here] ```console **Specific concerns**: [any particular areas you're unsure about] ## 🧠 Understanding LLM Limitations ### What Claude Excels At - ✅ **Code patterns and structure**. - ✅ **Following established conventions**. - ✅ **Debugging common issues**. - ✅ **Explaining complex concepts**. - ✅ **Generating boilerplate code**. - ✅ **Reviewing code for standards compliance**. ### What to Verify Independently - ⚠️ **Latest dependency versions** (always check official docs). - ⚠️ **New EIP specifications** (verify against ethereum/EIPs). - ⚠️ **Breaking changes** in recent updates. - ⚠️ **Environment-specific issues** (OS, architecture). - ⚠️ **Security implications** of suggestions. ### For Effective LLM Collaboration - Provide clear, specific prompts. - Break complex tasks into smaller pieces. - Always validate LLM output against standards. - Use the codebase's existing patterns as examples. Remember: **LLMs are powerful tools that work best when given good context and clear objectives.** The better you understand this codebase, the better you can guide Claude to help you effectively. ================================================ FILE: LICENSE ================================================ Copyright 2025 Ethereum Community 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. ================================================ FILE: README.md ================================================ # ⚠️ NOTICE: All code from this repository has been migrated to ethereum/execution-specs As such, this repository is no longer accepting pull requests as of 2025-11-01. Please direct any changes to https://github.com/ethereum/execution-specs instead. ## What This Means for You - **Client Teams:** No changes. Test fixture releases will continue to be published in this repository, [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests). - **Test Contributors:** - Please direct PRs to [ethereum/execution-specs](https://github.com/ethereum/execution-specs). - Read more about the changes effecting test development in our [blog announcement](https://steel.ethereum.foundation/blog/2025-11-04_weld_final/). ### Questions or Feedback About the Migration? Please reach out to the STEEL team by writing to the `#el-testing` channel in the [Ethereum R&D Discord Server](https://discord.com/invite/qGpsxSA) or contacting any STEEL team member directly. --- ## Execution Spec Tests [![latest version](https://img.shields.io/github/v/release/ethereum/execution-spec-tests)](https://github.com/ethereum/execution-spec-tests/releases/latest) ![Python Versions](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv) [![License](https://img.shields.io/github/license/ethereum/execution-spec-tests)](https://github.com/ethereum/execution-spec-tests/blob/main/LICENSE) ## About The full execution-spec-tests documentation can be found [here](https://eest.ethereum.org/main/). **Note:** All of [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests) functionality (i.e., the spec tests, test frameworks and tooling) will move to [ethereum/execution-specs](https://github.com/ethereum/execution-specs) in Q4 2025 to streamline spec and test development. For more information please see our [blog post](https://steel.ethereum.foundation/blog/2025-09-11_weld-announcement/). For now, please continue contributing to both [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests) and [ethereum/execution-specs](https://github.com/ethereum/execution-specs) as you previously have - we will reach out to you if and when need be! [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests) is both a collection of test cases and a framework implemented in Python to generate tests for Ethereum execution clients. The framework collects and executes the test cases in order to generate _test fixtures_ (JSON) which can be consumed by any execution client to verify their implementation of [ethereum/execution-specs](https://github.com/ethereum/execution-specs). The fixtures, which define state transition and block tests, are generated by the framework using one of the `t8n` command-line tools that are provided by most execution clients, see below for an overview of the supported `t8n` tools. ```mermaid --- title: Test Fixture Generation with execution-spec-tests --- flowchart LR style C stroke:#333,stroke-width:2px style D stroke:#333,stroke-width:2px style G stroke:#F9A825,stroke-width:2px style H stroke:#F9A825,stroke-width:2px subgraph "ethereum/go-ethereum, ..." C[evm t8n
external executable] end subgraph ethereum/solidity D[solc
external executable] end subgraph ethereum/EIPs E(EIPS/EIP-*.md
SHA digest via Github API) end subgraph "ethereum/execution-spec-tests" A(./tests/**/*.py
Python Test Cases) B([$ fill ./tests/
Python Framework]) end subgraph Test Fixture Consumers subgraph ethereum/hive G([$ hive ...
Go Test Framework]) end H([Client executables]) end C <-.-> B D <-.-> B A --> B E <-.-> |retrieve latest spec version\ncheck tested spec version| B B -->|output| F(./fixtures/**/*.json\nJSON Test Fixtures) F -->|input| G F -->|input| H ``` The generated test fixtures can be used: 1. Directly by client teams' test frameworks, and, 2. In the integration tests executed in the [ethereum/hive](https://github.com/ethereum/hive) framework. ## Transition Tool Support The following transition tools are supported by the framework: | Client | "t8n" Tool | Tracing Support | | -------| ---------- | --------------- | | [ethereum/evmone](https://github.com/ethereum/evmone) | `evmone-t8n` | Yes | | [ethereum/execution-specs](https://github.com/ethereum/execution-specs) | `ethereum-spec-evm` | Yes | | [ethereum/go-ethereum](https://github.com/ethereum/go-ethereum) | [`evm t8n`](https://github.com/ethereum/go-ethereum/tree/master/cmd/evm) | Yes | | [ethereumjs](https://github.com/ethereumjs/ethereumjs-monorepo) | [`ethereumjs-t8ntool.sh`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/vm/test/t8n) | No | | [hyperledger/besu](https://github.com/hyperledger/besu/tree/main/ethereum/evmtool) | [`evm t8n-server`](https://github.com/hyperledger/besu/tree/main/ethereum/evmtool) | Yes | | [status-im/nimbus-eth1](https://github.com/status-im/nimbus-eth1) | [`t8n`](https://github.com/status-im/nimbus-eth1/blob/master/tools/t8n/readme.md) | Yes | ### Upcoming EIP Development Generally, specific `t8n` implementations and branches must be used when developing tests for upcoming EIPs. We use named reference tags to point to the specific version of the `t8n` implementation that needs to be used fill the tests. All current tags, their t8n implementation and branch they point to, are listed in [.github/configs/evm.yaml](.github/configs/evm.yaml). ## Getting Started ### Prerequisites The tools provided by ethereum/execution-spec-tests use `uv` ([docs.astral.sh/uv](https://docs.astral.sh/uv/)) to manage their dependencies and virtual environment. `uv` downloads Python for your target platform if one of the required versions (Python 3.11 or 3.12) is not available natively. `uv` can be installed via curl (recommended; can self-update): ```console curl -LsSf https://astral.sh/uv/install.sh | sh ``` or pip (requires Python, can't self-update): ```console pip install uv ``` ### Installation Clone [execution-spec-tests](https://github.com/ethereum/execution-spec-tests) and install its dependencies: ```console git clone --depth 1 https://github.com/ethereum/execution-spec-tests cd execution-spec-tests uv python install 3.12 uv python pin 3.12 uv sync --all-extras ``` See [Installation Troubleshooting](https://eest.ethereum.org/main/getting_started/installation_troubleshooting/) in the online docs if you encounter issues. ### Exploring and Filling Test Cases By default, JSON test fixtures are generated from this repository's Python test cases using the [Ethereum Execution Layer Specification](https://github.com/ethereum/execution-specs) (EELS) reference implementation. The resulting JSON fixtures can be executed against execution clients to verify consensus. The process of generating fixtures is often referred to as "filling". 1. Explore test cases via `--collect-only` and search for test cases that combine `PUSH0` and `DELEGATECALL` in the EVM functionality introduced in the Shanghai hard fork: ```console uv run fill --collect-only -k "push0 and delegatecall" tests/shanghai/ ``` The `fill` command is based on [`pytest`](https://docs.pytest.org/en/stable/). The above command uses the [optional pytest arguments](https://docs.pytest.org/en/stable/how-to/usage.html): - `--collect-only` only collect test cases; don't execute them. - `-k ` filter test cases by their test case ID based on the given expression. - `tests/shanghai` the directory containing the test cases (tells `fill` to only discover test cases in this directory; default: `tests/`). Expected console output: ![Screenshot of pytest test collection console output](./docs/filling_tests/img/pytest_collect_only.png) 2. Fill `state_test` fixtures for these test cases: ```console uv run fill -k "push0 and delegatecall" tests/shanghai/ -m state_test -v ``` where: - `-m state_test` only fills test cases marked as a `state_test` (see all available markers via `uv run fill --markers`). - `-v` enables verbose output. Expected console output: ![Screenshot of fill test collection console output](./docs/filling_tests/img/pytest_run_example.png) 3. Verify the generated fixtures: a. Check the corresponding fixture file has been generated: ```console head fixtures/state_tests/shanghai/eip3855_push0/push0/push0_contract_during_call_contexts.json ``` b. Open the generated HTML test using the link provided at the bottom of the console output. This is written to the output directory at: ```console ./fixtures/.meta/report_fill.html ``` ## Usage More information on how to obtain and consume the [released test fixtures](https://github.com/ethereum/execution-spec-tests/releases) can be found in the [documentation](https://eest.ethereum.org/main/running_tests/). For further help with working with this codebase, see the [online documentation](https://eest.ethereum.org/main/): 1. Learn [useful command-line flags](https://eest.ethereum.org/main/filling_tests/filling_tests_command_line/). 2. [Execute tests for features under development](https://eest.ethereum.org/main/filling_tests/filling_tests_dev_fork/) via the `--from=FORK1` and `--until=FORK2` flags. 3. _Optional:_ [Configure VS Code](https://eest.ethereum.org/main/getting_started/setup_vs_code/) to auto-format Python code and [execute tests within VS Code](https://eest.ethereum.org/main/filling_tests/filling_tests_vs_code/). 4. Implement a new test case, see [Writing Tests](https://eest.ethereum.org/main/writing_tests/). ## Coverage The available test cases can be browsed in the [Test Case Reference doc](https://eest.ethereum.org/main/tests/). ## Installation Troubleshooting If you encounter issues during the installation process, please refer to the [Installation Troubleshooting](https://eest.ethereum.org/main/getting_started/installation_troubleshooting/) page. ## Contributing Contributions and feedback are welcome. Please see our [Contributing Guidelines](CONTRIBUTING.md) for detailed information on how to contribute, and the [online documentation](https://eest.ethereum.org/main/writing_tests/) for this repository's coding standards and help on implementing new tests. We welcome earnest newcomers, no matter how small the contribution! However, we do not accept: - Contributions that only fix spelling or grammatical errors in documentation, code or elsewhere - Pull requests from obvious airdrop farmers - Drive-by or vibe code contributions without proper engagement or context Pull requests should have reasonable substance or resolve an existing repository open issue. Care is required when adding PRs or issues for functionality that is live on Ethereum mainnet, please refer to the [Security Policy](SECURITY.md) for more information about reporting vulnerabilities and eligibility for the [bug bounty program](https://bounty.ethereum.org). ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ================================================ FILE: SECURITY.md ================================================ # Security Policy ## Reporting a Vulnerability - **Please do not create a PR with a vulnerability visible.** - **Please do not file a public ticket mentioning the vulnerability.** To find out how to disclose a vulnerability in Ethereum visit [https://bounty.ethereum.org](https://bounty.ethereum.org) or email bounty@ethereum.org. ================================================ FILE: docs/CHANGELOG.md ================================================ # Changelog Test fixtures for use by clients are available for each release on the [Github releases page](https://github.com/ethereum/execution-spec-tests/releases). **Key:** ✨ = New, 🐞 = Fixed, 🔀 = Changed. 💥 = Breaking ## 🔜 [Unreleased] ### 💥 Breaking Change ### 🛠️ Framework #### `fill` #### `consume` ### 📋 Misc ### 🧪 Test Cases - 🐞Fix BALs opcode OOG test vectors by updating the Amsterdam commit hash in specs and validating appropriately on the testing side ([#2293](https://github.com/ethereum/execution-spec-tests/pull/2293)). - ✨Fix test vector for BALs SSTORE with OOG by pointing to updated specs; add new boundary conditions cases for SSTORE w/ OOG ([#2297](https://github.com/ethereum/execution-spec-tests/pull/2297)). ## [v5.3.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v5.3.0) - 2025-10-09 ## 🇯🇵 Summary EEST v5.3.0 is a follow-up from our main v5.0.0 [release](https://github.com/ethereum/execution-spec-tests/releases/tag/v5.0.0), with updated BPO1 and BPO2 values aligning with the testnet parameters. This release additionally includes fixes for tests in hive, as well as new test cases for EIP-7883, EIP-7934 and critical cases for EIP-7951 (added to EEST by @chfast following a coverage review of the test suite). ## 🔑 Key Changes ### 🛠️ Framework - ✨ Add benchmark-specific test wrapper (`benchmark_test`) that supports **EIP-7825** and create a benchmark code generator for common test pattern ([#1945](https://github.com/ethereum/execution-spec-tests/pull/1945)). #### `fill` - ✨ Added `--optimize-gas`, `--optimize-gas-output` and `--optimize-gas-post-processing` flags that allow to binary search the minimum gas limit value for a transaction in a test that still yields the same test result ([#1979](https://github.com/ethereum/execution-spec-tests/pull/1979)). - ✨ Added `--watch` flag that monitors test files for changes and automatically re-runs the fill command when developing tests ([#2173](https://github.com/ethereum/execution-spec-tests/pull/2173)). - 🔀 Upgraded ckzg version to 2.1.3 or newer for correct handling of points at infinity ([#2171](https://github.com/ethereum/execution-spec-tests/pull/2171)). - 🔀 Move pytest marker registration for `fill` and `execute-*` from their respective ini files to the shared `pytest_plugins.shared.execute_fill` pytest plugin ([#2110](https://github.com/ethereum/execution-spec-tests/pull/2110)). - ✨ Added an `--input.blobParams` CLI argument to the transition tool (`t8n`) invocation ([#2264](https://github.com/ethereum/execution-spec-tests/pull/2264)). #### `consume` - ✨ Add retry logic to RPC requests to fix flaky connection issues in Hive ([#2205](https://github.com/ethereum/execution-spec-tests/pull/2205)). - 🛠️ Mark `consume sync` tests as `flaky` with 3 retires due to client sync inconsistencies ([#2252](https://github.com/ethereum/execution-spec-tests/pull/2252)). - ✨ Add `consume direct` using `evmone-statetest` and `evmone-blockchaintest` ([#2243](https://github.com/ethereum/execution-spec-tests/pull/2243)). ### 📋 Misc - ✨ Add tighter validation for EIP-7928 model coming from t8n when filling ([#2138](https://github.com/ethereum/execution-spec-tests/pull/2138)). - ✨ Add flexible API for absence checks for EIP-7928 (BAL) tests ([#2124](https://github.com/ethereum/execution-spec-tests/pull/2124)). - 🐞 Use `engine_newPayloadV5` for `>=Amsterdam` forks in `consume engine` ([#2170](https://github.com/ethereum/execution-spec-tests/pull/2170)). - 🔀 Refactor EIP-7928 (BAL) absence checks into a friendlier class-based DevEx ([#2175](https://github.com/ethereum/execution-spec-tests/pull/2175)). - 🐞 Tighten up validation for empty lists on Block-Level Access List tests ([#2118](https://github.com/ethereum/execution-spec-tests/pull/2118)). - ✨ Added the `MemoryVariable` EVM abstraction to generate more readable bytecode when there's heavy use of variables that are stored in memory ([#1609](https://github.com/ethereum/execution-spec-tests/pull/1609)). - 🐞 Fix an issue with `test_bal_block_rewards` where the block base fee was wrongfully overridden ([#2262](https://github.com/ethereum/execution-spec-tests/pull/2262)). - ✨ Complete EIP checklist for EIP-7934 and update the checklist template to include block-level constraint checks ([#2282](https://github.com/ethereum/execution-spec-tests/pull/2282)). ### 🧪 Test Cases - ✨ Add safe EIP-6110 workaround to allow Geth/Reth to pass invalid deposit request tests even thought they are out of spec ([#2177](https://github.com/ethereum/execution-spec-tests/pull/2177), [#2233](https://github.com/ethereum/execution-spec-tests/pull/2233)). - ✨ Add an EIP-7928 test case targeting the `SELFDESTRUCT` opcode. ([#2159](https://github.com/ethereum/execution-spec-tests/pull/2159)). - ✨ Add essential tests for coverage gaps in EIP-7951 (`p256verify` precompile) ([#2179](https://github.com/ethereum/execution-spec-tests/pull/2159), [#2203](https://github.com/ethereum/execution-spec-tests/pull/2203), [#2215](https://github.com/ethereum/execution-spec-tests/pull/2215), [#2216](https://github.com/ethereum/execution-spec-tests/pull/2216), [#2217](https://github.com/ethereum/execution-spec-tests/pull/2217), [#2218](https://github.com/ethereum/execution-spec-tests/pull/2218), [#2221](https://github.com/ethereum/execution-spec-tests/pull/2221), [#2229](https://github.com/ethereum/execution-spec-tests/pull/2229), [#2230](https://github.com/ethereum/execution-spec-tests/pull/2230), [#2237](https://github.com/ethereum/execution-spec-tests/pull/2237), [#2238](https://github.com/ethereum/execution-spec-tests/pull/2238)). - ✨ Add EIP-7928 successful and OOG single-opcode tests ([#2118](https://github.com/ethereum/execution-spec-tests/pull/2118)). - ✨ Add EIP-7928 tests for EIP-2930 interactions ([#2167](https://github.com/ethereum/execution-spec-tests/pull/2167)). - ✨ Add EIP-7928 tests for NOOP operations ([#2178](https://github.com/ethereum/execution-spec-tests/pull/2178)). - ✨ Add EIP-7928 tests for net-zero balance transfers ([#2280](https://github.com/ethereum/execution-spec-tests/pull/2280)). - ✨ Add fork transition test cases for EIP-7934 ([#2282](https://github.com/ethereum/execution-spec-tests/pull/2282)). ## [v5.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v5.0.0) - 2025-09-05 ## 🇯🇵 Summary EEST Fujisan is our first full release for Osaka, the first full release since Pectra! In addition to the latest Osaka specific test cases, it includes re-filled `GeneralStateTests` from `ethereum/tests` (now fully maintained within EEST under `tests/static`) for Osaka adhering to the transaction gas limit cap from [EIP-7825](https://eips.ethereum.org/EIPS/eip-7825). Further framework changes include new simulators, test formats and test types. ## ⚔️ Future Weld with EELS EEST will merge with [EELS](https://github.com/ethereum/execution-specs) during **Q4 2025**, after which EEST becomes read-only for external contributors. **What this means?** - All EEST code moves to the EELS repository. - New EEST framework location: `execution-specs/src/ethereum_spec_tests/`. - New EEST tests location: `execution-specs/tests/eest/`. - Future PRs go to EELS instead of EEST. **Important Notes:** - All PRs for tests and framework changes should still be directed at EEST until further notice. - There will be a brief freeze on EEST contributions during Q4 "The Switch", after which contributors can continue as before, but in EELS. - Test releases will continue from EEST as normal before, during, and after this transition. More information will be communicated accordingly through the normal communication channels. ## ❗Current Status Quo ### Test Fixtures Overview - `fixtures_static.tar.gz` has been deprecated. - `fixtures_stable.tar.gz` & `fixtures_develop.tar.gz` now both contain re-filled static tests, `GeneralStateTests` from `ethereum/tests`, filled **from Cancun**. - `fixtures_stable.tar.gz` contains tests filled for forks until Prague. - `fixtures_develop.tar.gz` contains tests filled for forks until Osaka. - `fixtures_benchmark.tar.gz` contains benchmark tests filled for only Prague. ### EL Client Test Requirements **Prague Coverage (Mainnet):** - Run all `state_test`'s & `blockchain_test`'s from `fixtures_stable.tar.gz`. - Run only `BlockchainTests` from the latest `ethereum/tests` [release](https://github.com/ethereum/tests/releases/tag/v17.2), filled **until Prague**. **Fusaka Coverage (Including Mainnet):** - Run all `state_test`'s & `blockchain_test`'s from `fixtures_develop.tar.gz`. - Run only `BlockchainTests` from the latest `ethereum/tests` [release](https://github.com/ethereum/tests/releases/tag/v17.2), filled **until Prague**. **Note**: If you require `GeneralStateTests` from `ethereum/tests` **filled for forks before Cancun** then you must get these from the latest `ethereum/tests` [release](https://github.com/ethereum/tests/releases/tag/v17.2). ### Benchmark Tests For the most up-to-date benchmark tests, use `fixtures_benchmark.tar.gz`. > **Note**: Benchmark tests for Osaka (compliant with EIP-7825 transaction gas limit cap) will be added in a future feature release. ### Test Fixture Formats This release includes 2 new test formats designed primarily for [Hive](https://github.com/ethereum/hive) simulators: - [**`blockchain_tests_engine_x`**](https://eest.ethereum.org/v5.0.0/running_tests/test_formats/blockchain_test_engine_x/?h=#blockchain-engine-x-tests): An optimized version of `blockchain_tests_engine` where multiple tests share the same genesis state, allowing multiple tests to run on a single client instantiation within Hive's `consume-engine`. The standard format requires a fresh client startup for each test. Due its combined genesis state, this is additionally the primary format used by the Nethermind team for benchmarking. - [**`blockchain_tests_sync`**](https://eest.ethereum.org/main/running_tests/test_formats/blockchain_test_sync/?h=sync#blockchain-engine-sync-tests): A new format adjacent to the existing `blockchain_tests_engine` format. Used specifically for the upcoming `consume-sync` simulator, which delivers engine payloads from test fixtures to the client under test, then sync's a separate client to it. This test fixture is only marked to be filled for the [EIP-7934](https://eips.ethereum.org/EIPS/eip-7934) block RLP limit tests in Osaka. ### Tooling & Simulators Improved tooling and new Hive simulators are additionally included in this release: - [**`execute remote`**](https://eest.ethereum.org/main/running_tests/execute/remote/#running-test-on-a-live-remote-network): this command now supports optional [Engine RPC endpoints](https://eest.ethereum.org/main/running_tests/execute/remote/#engine-rpc-endpoint-optional) (`--engine-endpoint`) with JWT authentication #2070. - This allows manual control over block creation and transaction inclusion for more deterministic test execution on live networks. Previously, `execute remote` could only submit transactions and rely on the network's automatic block production, but now it can actively drive chain progression by creating blocks on-demand via the Engine API. - [**`consume sync`**](https://eest.ethereum.org/main/running_tests/running/#sync): Adjacent to `consume-engine`, designed to work with the `blockchain_tests_sync` format for testing client sync scenarios. - [**`execute blobs`**](https://eest.ethereum.org/main/running_tests/execute/hive/#the-eestexecute-blobs-simulator): A new Hive specific simulator that uses the EEST execute pytest plugin. Sends blob transactions to the client under test and verifies its `engine_getBlobsVX` endpoint. Requires tests to be written with a new python test format `blob_transaction_test`. Primarily used to test PeerDAS from the EL perspective. - [**`execute eth config`**](https://eest.ethereum.org/main/running_tests/execute/eth_config/): A command used to test the `eth_config` endpoint from [EIP-7910](https://eips.ethereum.org/EIPS/eip-7910). Can be ran [remotely](https://github.com/ethereum/execution-spec-tests/issues/2049) or within Hive. ### Filling For Stateless Clients A `witness-filler` extension is included in this release, allowing for tests to be filled that include an `executionWitness` for each fixture #2066. This essentially calls an external executable written in rust, and hence must be installed for usage within `fill` using the `--witness` flag. The current approach is below: ```sh cargo install --git https://github.com/kevaundray/reth.git --branch jsign-witness-filler witness-filler uv run fill ... --output=fixtures-witness --witness --clean ``` > **Note**: The `witness-filler` executable is not maintained by EEST so we cannot help with any issues. ## 💥 Breaking Changes ### Important changes for EEST superusers - EEST now requires `uv>=0.7.0` ([#1904](https://github.com/ethereum/execution-spec-tests/pull/1904)). If your version of `uv` is too old. - When filling fixtures transition forks are included within there respective "to" fork, where `--fork Osaka` will now include `PragueToOsakaAtTime15k`. Previously transitions fork would only be included when filling with `--from Prague --until Osaka` flags. - Python 3.10 support was removed in this release ([#1808](https://github.com/ethereum/execution-spec-tests/pull/1808)). - EEST no longer allows usage of Yul code in Python tests. From now on, please make use of our opcode wrapper. Yul code is now only allowed in the "static tests" located in `./tests/static/` (these are test cases defined by JSON and YAML files instead of Python test functions that were originally maintained in [ethereum/tests](https://github.com/ethereum/tests)). - In order to fill the static tests (which is not the case by default), please ensure that `solc` is located in your `PATH`. - The output behavior of `fill` has changed ([#1608](https://github.com/ethereum/execution-spec-tests/pull/1608)): - Before: `fill` wrote fixtures into the directory specified by the `--output` flag (default: `fixtures`). This could have many unintended consequences, including unexpected errors if old or invalid fixtures existed in the directory (for details see [#1030](https://github.com/ethereum/execution-spec-tests/issues/1030)). - Now: `fill` will exit without filling any tests if the specified directory exists and is not-empty. This may be overridden by adding the `--clean` flag, which will first remove the specified directory. - Writing debugging information to the EVM "dump directory" by default has been disabled. To obtain debug output, the `--evm-dump-dir` flag must now be explicitly set. As a consequence, the now redundant `--skip-evm-dump` option was removed ([#1874](https://github.com/ethereum/execution-spec-tests/pull/1874)). This undoes functionality originally introduced in [#999](https://github.com/ethereum/execution-spec-tests/pull/999) and [#1150](https://github.com/ethereum/execution-spec-tests/pull/1150). ### Feature `zkevm` updated to `benchmark` Due to the crossover between `zkevm` and `benchmark` tests, all instances of the former have been replaced with the latter nomenclature. Repository PR labels and titles are additionally updated to reflect this change. This update renames the `zkevm` feature release to `benchmark` and further expands the latter for 1M, 10M, 30M, 45M, 60M, 90M, and 120M block gas limits in `fixtures_benchmark.tar.gz`. To select a test for a given gas limit, the IDs of the tests have been expanded to contain `benchmark-gas-value_XM`, where `X` can be any of the aforementioned values. The benchmark release also now includes BlockchainEngineX format that combines most of the tests into a minimal amount of genesis files. For more info see [Blockchain Engine X Tests](https://eest.ethereum.org/main/running_tests/test_formats/blockchain_test_engine_x/) in the EEST documentation. Users can select any of the artifacts depending on their benchmarking or testing needs for their provers. ## 🔑 Other Key Changes ### 🛠️ Framework #### 🔀 Refactoring - 🔀 Move `TransactionType` enum from test file to proper module location in `ethereum_test_types.transaction_types` for better code organization and reusability. - ✨ Opcode classes now validate keyword arguments and raise `ValueError` with clear error messages. - 🔀 This PR removes the `solc` requirement to fill Python test cases. Regular test contributors no longer need to concern themselves with `solc` and, as such, the `solc-select` dependency has been removed. The remaining tests that used Yul have been ported to the EEST opcode wrapper mini-lang and the use of Yul in Python tests is no longer supported. Maintainers only: To fill the "static" JSON and YAML tests (`./tests/static/`) locally, `solc` (ideally v0.8.24) must be available in your PATH. - 🔀 Updated default block gas limit from 36M to 45M to match mainnet environment. - 🔀 Refactor fork logic to include transition forks within there "to" fork ([#2051](https://github.com/ethereum/execution-spec-tests/pull/2051)). #### `fill` - ✨ Add the `ported_from` test marker to track Python test cases that were converted from static fillers in [ethereum/tests](https://github.com/ethereum/tests) repository ([#1590](https://github.com/ethereum/execution-spec-tests/pull/1590)). - ✨ Add a new pytest plugin, `ported_tests`, that lists the static fillers and PRs from `ported_from` markers for use in the coverage Github Workflow ([#1634](https://github.com/ethereum/execution-spec-tests/pull/1634)). - ✨ Enable two-phase filling of fixtures with pre-allocation groups and add a `BlockchainEngineXFixture` format ([#1706](https://github.com/ethereum/execution-spec-tests/pull/1706), [#1760](https://github.com/ethereum/execution-spec-tests/pull/1760)). - ✨ Add `--generate-all-formats` flag to enable generation of all fixture formats including `BlockchainEngineXFixture` in a single command; enable `--generate-all-formats` automatically for tarball output, `--output=fixtures.tar.gz`, [#1855](https://github.com/ethereum/execution-spec-tests/pull/1855). - 🔀 Refactor: Encapsulate `fill`'s fixture output options (`--output`, `--flat-output`, `--single-fixture-per-file`) into a `FixtureOutput` class ([#1471](https://github.com/ethereum/execution-spec-tests/pull/1471),[#1612](https://github.com/ethereum/execution-spec-tests/pull/1612)). - ✨ Don't warn about a "high Transaction gas_limit" for `zkevm` tests ([#1598](https://github.com/ethereum/execution-spec-tests/pull/1598)). - 🐞 `fill` no longer writes generated fixtures into an existing, non-empty output directory; it must now be empty or `--clean` must be used to delete it first ([#1608](https://github.com/ethereum/execution-spec-tests/pull/1608)). - 🐞 `zkevm` marked tests have been removed from `tests-deployed` tox environment into its own separate workflow `tests-deployed-zkevm` and are filled by `evmone-t8n` ([#1617](https://github.com/ethereum/execution-spec-tests/pull/1617)). - ✨ Field `postStateHash` is now added to all `blockchain_test` and `blockchain_test_engine` tests that use `exclude_full_post_state_in_output` in place of `postState`. Fixes `evmone-blockchaintest` test consumption and indirectly fixes coverage runs for these tests ([#1667](https://github.com/ethereum/execution-spec-tests/pull/1667)). - 🔀 Changed INVALID_DEPOSIT_EVENT_LAYOUT to a BlockException instead of a TransactionException ([#1773](https://github.com/ethereum/execution-spec-tests/pull/1773)). - 🔀 Disabled writing debugging information to the EVM "dump directory" to improve performance. To obtain debug output, the `--evm-dump-dir` flag must now be explicitly set. As a consequence, the now redundant `--skip-evm-dump` option was removed ([#1874](https://github.com/ethereum/execution-spec-tests/pull/1874)). - ✨ Generate unique addresses with Python for compatible static tests, instead of using hard-coded addresses from legacy static test fillers ([#1781](https://github.com/ethereum/execution-spec-tests/pull/1781)). - ✨ Added support for the `--benchmark-gas-values` flag in the `fill` command, allowing a single genesis file to be used across different gas limit settings when generating fixtures. ([#1895](https://github.com/ethereum/execution-spec-tests/pull/1895)). - ✨ Static tests can now specify a maximum fork where they should be filled for ([#1977](https://github.com/ethereum/execution-spec-tests/pull/1977)). - ✨ Static tests can now be filled in every format using `--generate-all-formats` ([#2006](https://github.com/ethereum/execution-spec-tests/pull/2006)). - 💥 Flag `--flat-output` has been removed due to having been unneeded for an extended period of time ([#2018](https://github.com/ethereum/execution-spec-tests/pull/2018)). - ✨ Add support for `BlockchainEngineSyncFixture` format for tests marked with `pytest.mark.verify_sync` to enable client synchronization testing via `consume sync` command ([#2007](https://github.com/ethereum/execution-spec-tests/pull/2007)). - ✨ Framework is updated to include BPO ([EIP-7892](https://eips.ethereum.org/EIPS/eip-7892)) fork markers to enable the filling of BPO tests ([#2050](https://github.com/ethereum/execution-spec-tests/pull/2050)). - ✨ Generate and include execution witness data in blockchain fixtures if `--witness` is specified ([#2066](https://github.com/ethereum/execution-spec-tests/pull/2066)). #### `consume` - ✨ Add `--extract-to` parameter to `consume cache` command for direct fixture extraction to specified directory, replacing the need for separate download scripts. ([#1861](https://github.com/ethereum/execution-spec-tests/pull/1861)). - 🐞 Fix `consume cache --cache-folder` parameter being ignored, now properly caches fixtures in the specified directory instead of always using the default system cache location. - 🐞 Fix the `consume_direct.sh` script generated by `consume` in the `--evm-dump` dir by quoting test IDs [#1987](https://github.com/ethereum/execution-spec-tests/pull/1987). - 🔀 `consume` now automatically avoids GitHub API calls when using direct release URLs (better for CI environments), while release specifiers like `stable@latest` continue to use the API for version resolution ([#1788](https://github.com/ethereum/execution-spec-tests/pull/1788)). - 🔀 Refactor consume simulator architecture to use explicit pytest plugin structure with forward-looking architecture ([#1801](https://github.com/ethereum/execution-spec-tests/pull/1801)). - 🔀 Add exponential retry logic to initial fcu within consume engine ([#1815](https://github.com/ethereum/execution-spec-tests/pull/1815)). - ✨ Add `consume sync` command to test client synchronization capabilities by having one client sync from another via Engine API and P2P networking ([#2007](https://github.com/ethereum/execution-spec-tests/pull/2007)). - 💥 Removed the `consume hive` command, this was a convenience command that ran `consume rlp` and `consume engine` in one pytest session; the individual commands should now be used instead ([#2008](https://github.com/ethereum/execution-spec-tests/pull/2008)). - ✨ Update the hive ruleset to include BPO ([EIP-7892](https://eips.ethereum.org/EIPS/eip-7892)) forks ([#2050](https://github.com/ethereum/execution-spec-tests/pull/2050)). #### `execute` - ✨ Added new `Blob` class which can use the ckzg library to generate valid blobs at runtime ([#1614](https://github.com/ethereum/execution-spec-tests/pull/1614)). - ✨ Added `blob_transaction_test` execute test spec, which allows tests that send blob transactions to a running client and verifying its `engine_getBlobsVX` endpoint behavior ([#1644](https://github.com/ethereum/execution-spec-tests/pull/1644)). - ✨ Added `execute eth-config` command to test the `eth_config` RPC endpoint of a client, and includes configurations by default for Mainnet, Sepolia, Holesky, and Hoodi ([#1863](https://github.com/ethereum/execution-spec-tests/pull/1863)). - ✨ Command `execute remote` now allows specification of an Engine API endpoint to drive the chain via `--engine-endpoint` and either `--engine-jwt-secret` or `--engine-jwt-secret-file`. This mode is useful when there's no consensus client connected to the execution client so `execute` will automatically request blocks via the Engine API when it sends transactions ([#2070](https://github.com/ethereum/execution-spec-tests/pull/2070)). - ✨ Added `--address-stubs` flag to the `execute` command which allows to specify a JSON-formatted string, JSON file or YAML file which contains label-to-address of specific pre-deployed contracts already existing in the network where the tests are executed ([#2073](https://github.com/ethereum/execution-spec-tests/pull/2073)). ### 📋 Misc - ✨ Add pypy3.11 support ([#1854](https://github.com/ethereum/execution-spec-tests/pull/1854)). - 🔀 Use only relative imports in `tests/` directory ([#1848](https://github.com/ethereum/execution-spec-tests/pull/1848)). - 🔀 Convert absolute imports to relative imports in `src/` directory for better code maintainability ([#1907](https://github.com/ethereum/execution-spec-tests/pull/1907)). - 🔀 Misc. doc updates, including a navigation footer ([#1846](https://github.com/ethereum/execution-spec-tests/pull/1846)). - 🔀 Remove Python 3.10 support ([#1808](https://github.com/ethereum/execution-spec-tests/pull/1808)). - 🔀 Modernize codebase with Python 3.11 language features ([#1812](https://github.com/ethereum/execution-spec-tests/pull/1812)). - ✨ Add changelog formatting validation to CI to ensure consistent punctuation in bullet points [#1691](https://github.com/ethereum/execution-spec-tests/pull/1691). - ✨ Added the [EIP checklist template](https://eest.ethereum.org/main/writing_tests/checklist_templates/eip_testing_checklist_template/) that serves as a reference to achieve better coverage when implementing tests for new EIPs ([#1327](https://github.com/ethereum/execution-spec-tests/pull/1327)). - ✨ Added [Post-Mortems of Missed Test Scenarios](https://eest.ethereum.org/main/writing_tests/post_mortems/) to the documentation that serves as a reference list of all cases that were missed during the test implementation phase of a new EIP, and includes the steps taken in order to prevent similar test cases to be missed in the future ([#1327](https://github.com/ethereum/execution-spec-tests/pull/1327)). - ✨ Add documentation "Running Tests" that explains the different methods available to run EEST tests and reference guides for running `consume` and `hive`: ([#1172](https://github.com/ethereum/execution-spec-tests/pull/1172)). - ✨ Added a new `eest` sub-command, `eest info`, to easily print a cloned EEST repository's version and the versions of relevant tools, e.g., `python`, `uv` ([#1621](https://github.com/ethereum/execution-spec-tests/pull/1621)). - ✨ Add `CONTRIBUTING.md` for execution-spec-tests and improve coding standards documentation ([#1604](https://github.com/ethereum/execution-spec-tests/pull/1604)). - ✨ Add `CLAUDE.md` to help working in @ethereum/execution-spec-tests with [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) ([#1749](https://github.com/ethereum/execution-spec-tests/pull/1749)). - ✨ Use `codespell` instead of `pyspelling` to spell-check python and markdown sources ([#1715](https://github.com/ethereum/execution-spec-tests/pull/1715)). - 🔀 Updated from pytest 7 to [pytest 8](https://docs.pytest.org/en/stable/changelog.html#features-and-improvements), benefits include improved type hinting and hook typing, stricter mark handling, and clearer error messages for plugin and metadata development ([#1433](https://github.com/ethereum/execution-spec-tests/pull/1433)). - 🐞 Fix bug in ported-from plugin and coverage script that made PRs fail with modified tests that contained no ported tests ([#1661](https://github.com/ethereum/execution-spec-tests/pull/1661)). - 🔀 Refactor the `click`-based CLI interface used for pytest-based commands (`fill`, `execute`, `consume`) to make them more extensible ([#1654](https://github.com/ethereum/execution-spec-tests/pull/1654)). - 🔀 Split `src/ethereum_test_types/types.py` into several files to improve code organization ([#1665](https://github.com/ethereum/execution-spec-tests/pull/1665)). - ✨ Added `extract_config` command to extract genesis files used to launch clients in hive ([#1740](https://github.com/ethereum/execution-spec-tests/pull/1740)). - ✨ Added automatic checklist generation for every EIP inside of the `tests` folder. The checklist is appended to each EIP in the documentation in the "Test Case Reference" section ([#1679](https://github.com/ethereum/execution-spec-tests/pull/1679), [#1718](https://github.com/ethereum/execution-spec-tests/pull/1718)). - 🔀 Add macOS hive development mode workaround to the docs [#1786](https://github.com/ethereum/execution-spec-tests/pull/1786). - 🔀 Refactor and clean up of exceptions including EOF exceptions within client specific mappers [#1803](https://github.com/ethereum/execution-spec-tests/pull/1803). - 🔀 Rename `tests/zkevm/` to `tests/benchmark/` and replace the `zkevm` pytest mark with `benchmark` [#1804](https://github.com/ethereum/execution-spec-tests/pull/1804). - 🔀 Add fixture comparison check to optimize coverage workflow in CI ([#1833](https://github.com/ethereum/execution-spec-tests/pull/1833)). - 🔀 Move `TransactionType` enum from test file to proper module location in `ethereum_test_types.transaction_types` for better code organization and reusability ([#1763](https://github.com/ethereum/execution-spec-tests/pull/1673)). - ✨ Opcode classes now validate keyword arguments and raise `ValueError` with clear error messages ([#1739](https://github.com/ethereum/execution-spec-tests/pull/1739), [#1856](https://github.com/ethereum/execution-spec-tests/pull/1856)). - ✨ All commands (`fill`, `consume`, `execute`) now work without having to clone the repository, e.g. `uv run --with git+https://github.com/ethereum/execution-spec-tests.git consume` now works from any folder ([#1863](https://github.com/ethereum/execution-spec-tests/pull/1863)). - 🔀 Move Prague to stable and Osaka to develop ([#1573](https://github.com/ethereum/execution-spec-tests/pull/1573)). - ✨ Add a `pytest.mark.with_all_typed_transactions` marker that creates default typed transactions for each `tx_type` supported by the current `fork` ([#1890](https://github.com/ethereum/execution-spec-tests/pull/1890)). - ✨ Add basic support for ``Amsterdam`` fork in order to begin testing Glamsterdam ([#2069](https://github.com/ethereum/execution-spec-tests/pull/2069)). - ✨ [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928): Add initial framework support for `Block Level Access Lists (BAL)` testing for Amsterdam ([#2067](https://github.com/ethereum/execution-spec-tests/pull/2067)). ### 🧪 Test Cases - ✨ [BloatNet](https://bloatnet.info)/Multidimensional Metering: Add benchmarks to be used as part of the BloatNet project and also for Multidimensional Metering. - ✨ [EIP-7951](https://eips.ethereum.org/EIPS/eip-7951): Add additional test cases for modular comparison. - 🔀 Refactored `BLOBHASH` opcode context tests to use the `pre_alloc` plugin in order to avoid contract and EOA address collisions ([#1637](https://github.com/ethereum/execution-spec-tests/pull/1637)). - 🔀 Refactored `SELFDESTRUCT` opcode collision tests to use the `pre_alloc` plugin in order to avoid contract and EOA address collisions ([#1643](https://github.com/ethereum/execution-spec-tests/pull/1643)). - ✨ EIP-7594: Sanity test cases to send blob transactions and verify `engine_getBlobsVX` using the `execute` command ([#1644](https://github.com/ethereum/execution-spec-tests/pull/1644),[#1884](https://github.com/ethereum/execution-spec-tests/pull/1884)). - 🔀 Refactored EIP-145 static tests into python ([#1683](https://github.com/ethereum/execution-spec-tests/pull/1683)). - ✨ EIP-7823, EIP-7883: Add test cases for ModExp precompile gas-cost updates and input limits on Osaka ([#1579](https://github.com/ethereum/execution-spec-tests/pull/1579), [#1729](https://github.com/ethereum/execution-spec-tests/pull/1729), [#1881](https://github.com/ethereum/execution-spec-tests/pull/1881)). - ✨ [EIP-7825](https://eips.ethereum.org/EIPS/eip-7825): Add test cases for the transaction gas limit of 2^24 gas ([#1711](https://github.com/ethereum/execution-spec-tests/pull/1711), [#1882](https://github.com/ethereum/execution-spec-tests/pull/1882)). - ✨ [EIP-7951](https://eips.ethereum.org/EIPS/eip-7951): add test cases for `P256VERIFY` precompile to support secp256r1 curve [#1670](https://github.com/ethereum/execution-spec-tests/pull/1670). - ✨ Introduce blockchain tests for benchmark to cover the scenario of pure ether transfers [#1742](https://github.com/ethereum/execution-spec-tests/pull/1742). - ✨ [EIP-7934](https://eips.ethereum.org/EIPS/eip-7934): Add test cases for the block RLP max limit of 10MiB ([#1730](https://github.com/ethereum/execution-spec-tests/pull/1730)). - ✨ [EIP-7939](https://eips.ethereum.org/EIPS/eip-7939): Add count leading zeros (CLZ) opcode tests for Osaka ([#1733](https://github.com/ethereum/execution-spec-tests/pull/1733)). - ✨ [EIP-7934](https://eips.ethereum.org/EIPS/eip-7934): Add additional test cases for block RLP max limit with all typed transactions and for a log-creating transactions ([#1890](https://github.com/ethereum/execution-spec-tests/pull/1890)). - ✨ [EIP-7825](https://eips.ethereum.org/EIPS/eip-7825): Pre-Osaka tests have been updated to either (1) dynamically adapt to the transaction gas limit cap, or (2) reduce overall gas consumption to fit the new limit ([#1924](https://github.com/ethereum/EIPs/pull/1924), [#1928](https://github.com/ethereum/EIPs/pull/1928), [#1980](https://github.com/ethereum/EIPs/pull/1980)). - ✨ [EIP-7918](https://eips.ethereum.org/EIPS/eip-7918): Blob base fee bounded by execution cost test cases (initial), includes some adjustments to [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) tests ([#1685](https://github.com/ethereum/execution-spec-tests/pull/1685)). - 🔀 Adds the max blob transaction limit to the tests including updates to [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) for Osaka ([#1884](https://github.com/ethereum/execution-spec-tests/pull/1884)). - 🐞 Fix issues when filling block rlp size limit tests with ``--generate-pre-alloc-groups`` ([#1989](https://github.com/ethereum/execution-spec-tests/pull/1989)). - ✨ [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928): Add test cases for `Block Level Access Lists (BAL)` to Amsterdam ([#2067](https://github.com/ethereum/execution-spec-tests/pull/2067)). - 🐞 Fix issues with `Block Level Access Lists (BAL)` tests for Amsterdam ([#2121](https://github.com/ethereum/execution-spec-tests/pull/2121)). ## [v4.5.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v4.5.0) - 2025-05-14 ### 💥 Breaking Change #### EOF removed from Osaka Following ["Interop Testing Call 34"](https://github.com/ethereum/pm/issues/1499) and the procedural EIPs [PR](https://github.com/ethereum/EIPs/pull/9703) the decision to remove EOF from Osaka was made. To accommodate EOF testing for the interim within EEST, its tests have migrated to a new `tests/unscheduled` folder. This folder will now contain tests for features that are not yet CFI'd in any fork. When EOF is CFI'd for a fork in the future, all tests will be moved from unscheduled to the respective future fork folder. A new fork `EOFv1` has additionally been created to fill and consume EOF related fixtures. Client tests fillers such as `evmone` (and client consumers) will now need to use this fork name. ### 🛠️ Framework - ✨ Add an empty account function for usage within fill and execute ([#1482](https://github.com/ethereum/execution-spec-tests/pull/1482)). - ✨ Added `TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST` exception to specifically catch the case where the intrinsic gas cost is insufficient due to the data floor gas cost ([#1582](https://github.com/ethereum/execution-spec-tests/pull/1582)). ### 📋 Misc - ✨ Engine API updates for Osaka, add `get_blobs` rpc method ([#1510](https://github.com/ethereum/execution-spec-tests/pull/1510)). - ✨ The EIP Version checker has been moved from `fill` and `execute` to it's own command-line tool `check_eip_versions` that gets ran daily as a Github Action ([#1537](https://github.com/ethereum/execution-spec-tests/pull/1537)). - 🔀 Add new `tests/unscheduled` folder, move EOF from Osaka to unscheduled, add `EOFv1` fork name for EOF tests ([#1507](https://github.com/ethereum/execution-spec-tests/pull/1507)). - ✨ CI features now contain an optional field to skip them from EEST full releases, `benchmark` and EOF features are now feature only ([#1596](https://github.com/ethereum/execution-spec-tests/pull/1596)). - 🐞 Don't attempt to install `solc` via `solc-select` on ARM (official Linux ARM builds of `solc` are not available at the time of writing, cf [ethereum/solidity#11351](https://github.com/ethereum/solidity/issues/11351)) and add a version sanity check ([#1556](https://github.com/ethereum/execution-spec-tests/pull/1556)). ### 🧪 Test Cases - 🔀 Automatically apply the `benchmark` marker to all tests under `./tests/benchmark/` and `./tests/prague/eip2537_bls_12_381_precompiles/` via conftest configuration ([#1534](https://github.com/ethereum/execution-spec-tests/pull/1534)). - ✨ Port [calldataload](https://github.com/ethereum/tests/blob/ae4791077e8fcf716136e70fe8392f1a1f1495fb/src/GeneralStateTestsFiller/VMTests/vmTests/calldatacopyFiller.yml) and [calldatasize](https://github.com/ethereum/tests/blob/81862e4848585a438d64f911a19b3825f0f4cd95/src/GeneralStateTestsFiller/VMTests/vmTests/calldatasizeFiller.yml) tests ([#1236](https://github.com/ethereum/execution-spec-tests/pull/1236)). ## [v4.4.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v4.4.0) - 2025-04-29 ### 💥 Breaking Change #### `fixtures_static` A new fixture tarball has been included in this release: `fixtures_static.tar.gz`. This tarball contains all tests inside of [`./tests/static`](https://github.com/ethereum/execution-spec-tests/tree/main/tests/static), which at this point only contains all tests copied from [`GeneralStateTests` in `ethereum/tests@7dc757ec132e372b6178a016b91f4c639f366c02`](https://github.com/ethereum/tests/tree/7dc757ec132e372b6178a016b91f4c639f366c02/src/GeneralStateTestsFiller). The tests have been filled using the new static test filler introduced in [#1336](https://github.com/ethereum/execution-spec-tests/pull/1336), and enhanced in [#1362](https://github.com/ethereum/execution-spec-tests/pull/1362) and [#1439](https://github.com/ethereum/execution-spec-tests/pull/1439). Users can expect that all tests currently living in [ethereum/tests](https://github.com/ethereum/tests/tree/develop/src) should eventually make its way into [`./tests/static`](https://github.com/ethereum/execution-spec-tests/tree/main/tests/static) and can rely that these tests, filled for new forks even, will be included in `fixtures_static.tar.gz`. #### `fixtures_benchmark` Another new fixture tarball has been included in this release: `fixtures_benchmark.tar.gz`. Includes tests that are tailored specifically to test the execution layer proof generators. ### 🛠️ Framework #### `fill` - 🐞 Fix the reported fixture source URLs for the case of auto-generated tests ([#1488](https://github.com/ethereum/execution-spec-tests/pull/1488)). #### `consume` - 🐞 Fix the Hive commands used to reproduce test executions that are displayed in test descriptions in the Hive UI ([#1494](https://github.com/ethereum/execution-spec-tests/pull/1494)). - 🐞 Fix consume direct fails for geth blockchain tests ([#1502](https://github.com/ethereum/execution-spec-tests/pull/1502)). ### 📋 Misc ### 🧪 Test Cases - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702): Test that DELEGATECALL to a 7702 target works as intended ([#1485](https://github.com/ethereum/execution-spec-tests/pull/1485)). - ✨ [EIP-2573](https://eips.ethereum.org/EIPS/eip-2537): Includes a BLS12 point generator, alongside additional coverage many of the precompiles ([#1350](https://github.com/ethereum/execution-spec-tests/pull/1350)), ([#1505](https://github.com/ethereum/execution-spec-tests/pull/1505)). - ✨ Add all [`GeneralStateTests` from `ethereum/tests`](https://github.com/ethereum/tests/tree/7dc757ec132e372b6178a016b91f4c639f366c02/src/GeneralStateTestsFiller) to `execution-spec-tests` located now at [tests/static/state_tests](https://github.com/ethereum/execution-spec-tests/tree/main/tests/static/state_tests) ([#1442](https://github.com/ethereum/execution-spec-tests/pull/1442)). - ✨ [EIP-2929](https://eips.ethereum.org/EIPS/eip-2929): Test that precompile addresses are cold/warm depending on the fork they are activated ([#1495](https://github.com/ethereum/execution-spec-tests/pull/1495)). ## [v4.3.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v4.3.0) - 2025-04-18 ### 💥 Breaking Change #### Consume engine strict exception checking `consume engine` now checks exceptions returned by the execution clients in their Engine API responses, specifically in the `validationError`field of the `engine_newPayloadVX` method. While not strictly a breaking change since tests will continue to run normally, failures are expected if a client modifies their exception messages. This feature can be disabled by using `--disable-strict-exception-matching` for specific clients or forks. ### 🛠️ Framework #### `fill` - ✨ The `static_filler` plug-in now has support for static state tests (from [GeneralStateTests](https://github.com/ethereum/tests/tree/develop/src/GeneralStateTestsFiller)) ([#1362](https://github.com/ethereum/execution-spec-tests/pull/1362)). - ✨ Introduce `pytest.mark.exception_test` to mark tests that contain an invalid transaction or block ([#1436](https://github.com/ethereum/execution-spec-tests/pull/1436)). - 🐞 Fix `DeprecationWarning: Pickle, copy, and deepcopy support will be removed from itertools in Python 3.14.` by avoiding use `itertools` object in the spec `BaseTest` pydantic model ([#1414](https://github.com/ethereum/execution-spec-tests/pull/1414)). - ✨ An optional configuration flag to override the maximum gas limit in the environment for filling or executing tests is now available. The `--block-gas-limit` flag overrides the default block gas limit during filling. The `--transaction-gas-limit` flag overrides the maximum for transactions during execution. ([#1470](https://github.com/ethereum/execution-spec-tests/pull/1470)). #### `consume` - 🐞 Fix fixture tarball downloading with regular, non-Github release URLS and with numerical versions in regular release specs, e.g., `stable@v4.2.0` ([#1437](https://github.com/ethereum/execution-spec-tests/pull/1437)). - ✨ `consume engine` now has strict exception mapping enabled by default ([#1416](https://github.com/ethereum/execution-spec-tests/pull/1416)). #### Tools - 🔀 `generate_system_contract_deploy_test` test generator has been updated to handle system contracts that are not allowed to be absent when the fork happens ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). - ✨ Add `generate_system_contract_error_test` to generate tests on system contracts that invalidate a block in case of error ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). #### Exceptions - ✨ `BlockException.SYSTEM_CONTRACT_EMPTY`: Raised when a required system contract was not found in the state by the time it was due to execution with a system transaction call ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). - ✨ `BlockException.SYSTEM_CONTRACT_CALL_FAILED`: Raised when a system contract call made by a system transaction fails ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). - ✨ `BlockException.INVALID_BLOCK_HASH`: Raised when the calculated block hash does not match the expectation (Currently only during Engine API calls) ([#1416](https://github.com/ethereum/execution-spec-tests/pull/1416)). - ✨ `BlockException.INVALID_VERSIONED_HASHES`: Raised when a discrepancy is found between versioned hashes in the payload and the ones found in the transactions ([#1416](https://github.com/ethereum/execution-spec-tests/pull/1416)). ### 🧪 Test Cases - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702): Test precompile case in same transaction as delegation without extra gas in case of precompile code execution; parametrize all call opcodes in existing precompile test ([#1431](https://github.com/ethereum/execution-spec-tests/pull/1431)). - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702): Add invalid nonce authorizations tests for the case of multiple signers when the sender's nonce gets increased ([#1441](https://github.com/ethereum/execution-spec-tests/pull/1441)). - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702): Add a test that verifies that set code transactions are correctly rejected before Prague activation ([#1463](https://github.com/ethereum/execution-spec-tests/pull/1463)). - ✨ [EIP-7623](https://eips.ethereum.org/EIPS/eip-7623): Additionally parametrize transaction validity tests with the `to` set to an EOA account (previously only contracts) ([#1422](https://github.com/ethereum/execution-spec-tests/pull/1422)). - ✨ [EIP-7251](https://eips.ethereum.org/EIPS/eip-7251): Add EIP-7251 test cases for modified consolidations contract that allows more consolidations ([#1465](https://github.com/ethereum/execution-spec-tests/pull/1465)). - ✨ [EIP-6110](https://eips.ethereum.org/EIPS/eip-6110): Add extra deposit request edge cases, sending eth to the deposit contract while sending a deposit request ([#1467](https://github.com/ethereum/execution-spec-tests/pull/1467)). - ✨ [EIP-6110](https://eips.ethereum.org/EIPS/eip-6110): Add cases for deposit log layout and other topics (ERC-20) transfer ([#1371](https://github.com/ethereum/execution-spec-tests/pull/1371)). - ✨ [EIP-7251](https://eips.ethereum.org/EIPS/eip-7251): Remove pytest skips for consolidation request cases ([#1449](https://github.com/ethereum/execution-spec-tests/pull/1449)). - ✨ [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002), [EIP-7251](https://eips.ethereum.org/EIPS/eip-7251): Add cases to verify behavior of contracts missing at fork ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). - ✨ [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002), [EIP-7251](https://eips.ethereum.org/EIPS/eip-7251): Add cases to verify behavior of system contract errors invalidating a block ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). - 🔀 Remove [EIP-7698](https://eips.ethereum.org/EIPS/eip-7698): EIP has been removed and the tests related to it have also been removed, while preserving a subset of the tests to verify that functionality is removed in clients ([#1451](https://github.com/ethereum/execution-spec-tests/pull/1451)). ### 📋 Misc - 🐞 Configure `markdownlint` to expect an indent of 4 with unordered lists (otherwise HTML documentation is rendered incorrectly, [#1460](https://github.com/ethereum/execution-spec-tests/pull/1460)). - 🔀 Update `eels_resolutions.json` to point to temporary commit `bb0eb750d643ced0ebf5dec732cdd23558d0b7f2`, which is based on `forks/prague` branch, commit `d9a7ee24db359aacecd636349b4f3ac95a4a6e71`, with PRs , and merged ([#1394](https://github.com/ethereum/execution-spec-tests/pull/1394)). ## [v4.2.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v4.2.0) - 2025-04-08 **Note**: Although not a breaking change, `consume` users should delete the cache directory (typically located at `~/.cache/ethereum-execution-spec-tests`) used to store downloaded fixture release tarballs. This release adds support for [ethereum/tests](https://github.com/ethereum/tests) and [ethereum/legacytests](https://github.com/ethereum/legacytests) fixture release downloads and the structure of the cache directory has been updated to accommodate this change. To try this feature: ```shell consume direct --input=https://github.com/ethereum/tests/releases/download/v17.0/fixtures_blockchain_tests.tgz ``` To determine the cache directory location, see the `--cache-folder` entry from the command: ```shell consume cache --help ``` ### 💥 Breaking Change ### 🛠️ Framework #### `consume` - ✨ Add support for [ethereum/tests](https://github.com/ethereum/tests) and [ethereum/legacytests](https://github.com/ethereum/legacytests) release tarball download via URL to the `--input` flag of `consume` commands ([#1306](https://github.com/ethereum/execution-spec-tests/pull/1306)). - ✨ Add support for Nethermind's `nethtest` command to `consume direct` ([#1250](https://github.com/ethereum/execution-spec-tests/pull/1250)). - ✨ Allow filtering of test cases by fork via pytest marks (e.g., `-m "Cancun or Prague"`) ([#1304](https://github.com/ethereum/execution-spec-tests/pull/1304), [#1318](https://github.com/ethereum/execution-spec-tests/pull/1318)). - ✨ Allow filtering of test cases by fixture format via pytest marks (e.g., `-m blockchain_test`) ([#1314](https://github.com/ethereum/execution-spec-tests/pull/1314)). - ✨ Add top-level entries `forks` and `fixture_formats` to the index file that list all the forks and fixture formats used in the indexed fixtures ([#1318](https://github.com/ethereum/execution-spec-tests/pull/1318)). - ✨ Enable logging from `consume` commands ([#1361](https://github.com/ethereum/execution-spec-tests/pull/1361)). - ✨ Propagate stdout and stderr (including logs) captured during test execution to the Hive test result ([#1361](https://github.com/ethereum/execution-spec-tests/pull/1361)). - 🐞 Don't parametrize tests for unsupported fixture formats; improve `consume` test collection ([#1315](https://github.com/ethereum/execution-spec-tests/pull/1315)). - 🐞 Fix the the hive command printed in test reports to reproduce tests in isolation by prefixing the `--sim.limit` flag value with `id:` ([#1333](https://github.com/ethereum/execution-spec-tests/pull/1333)). - 🐞 Improve index generation of [ethereum/tests](https://github.com/ethereum/tests) fixtures: Allow generation at any directory level and include `generatedTestHash` in the index file for the `fixture_hash` ([#1303](https://github.com/ethereum/execution-spec-tests/pull/1303)). - 🐞 Fix loading of [ethereum/tests](https://github.com/ethereum/tests) and [ethereum/legacytests](https://github.com/ethereum/legacytests) fixtures for the case of mixed `0x0` and `0x1` transaction types in multi-index (`data`, `gas`, `value`) state test fixtures ([#1330](https://github.com/ethereum/execution-spec-tests/pull/1330)). - ✨ Add Osaka to the hive ruleset, includes a small ruleset refactor ([#1355](https://github.com/ethereum/execution-spec-tests/pull/1355)). #### `fill` - 🐞 Fix `--fork/from/until` for transition forks when using `fill` [#1311](https://github.com/ethereum/execution-spec-tests/pull/1311). - 🐞 Fix the node id for state tests marked by transition forks ([#1313](https://github.com/ethereum/execution-spec-tests/pull/1313)). - ✨ Add `static_filler` plug-in which allows to fill static YAML and JSON tests (from [ethereum/tests](https://github.com/ethereum/tests)) by adding flag `--fill-static-tests` to `uv run fill` ([#1336](https://github.com/ethereum/execution-spec-tests/pull/1336)). #### `execute` - 🔀 Test IDs have changed to include the name of the test spec where the test came from (e.g. `state_test`, `blockchain_test`, etc) ([#1367](https://github.com/ethereum/execution-spec-tests/pull/1367)). - ✨ Markers can now be used to execute only tests from a specific test spec type (e.g. `-m state_test`, `-m blockchain_test`, etc) ([#1367](https://github.com/ethereum/execution-spec-tests/pull/1367)). ### 📋 Misc - 🔀 Bump the version of `execution-specs` used by the framework to the package [`ethereum-execution==1.17.0rc6.dev1`](https://pypi.org/project/ethereum-execution/1.17.0rc6.dev1/); bump the version used for test fixture generation for forks < Prague to current `execution-specs` master, [fa847a0](https://github.com/ethereum/execution-specs/commit/fa847a0e48309debee8edc510ceddb2fd5db2f2e) ([#1310](https://github.com/ethereum/execution-spec-tests/pull/1310)). - 🐞 Init `TransitionTool` in `GethTransitionTool` ([#1276](https://github.com/ethereum/execution-spec-tests/pull/1276)). - 🔀 Refactored RLP encoding of test objects to allow automatic generation of tests ([#1359](https://github.com/ethereum/execution-spec-tests/pull/1359)). - ✨ Document how to manage `execution-spec-tests` package dependencies ([#1388](https://github.com/ethereum/execution-spec-tests/pull/1388)). #### Packaging - 🐞 Fix `eest make test` when `ethereum-execution-spec-tests` is installed as a package ([#1342](https://github.com/ethereum/execution-spec-tests/pull/1342)). - 🔀 Pin `setuptools` and `wheel` in `[build-system]`, bump `trie>=3.1` and remove `setuptools` from package dependencies ([#1345](https://github.com/ethereum/execution-spec-tests/pull/1345), [#1351](https://github.com/ethereum/execution-spec-tests/pull/1351)). ### 🧪 Test Cases - ✨ Add additional test coverage for EIP-152 Blake2 precompiles ([#1244](https://github.com/ethereum/execution-spec-tests/pull/1244)). Refactor to add variables for spec constants and common fixture code. ([#1395](https://github.com/ethereum/execution-spec-tests/pull/1395)), ([#1405](https://github.com/ethereum/execution-spec-tests/pull/1405)). - ✨ Add EIP-7702 incorrect-rlp-encoding tests ([#1347](https://github.com/ethereum/execution-spec-tests/pull/1347)). - ✨ Add EIP-2935 tests for all call opcodes ([#1379](https://github.com/ethereum/execution-spec-tests/pull/1379)). - ✨ Add more tests for EIP-7702: max-fee-per-gas verification, delegation-designation as initcode tests ([#1372](https://github.com/ethereum/execution-spec-tests/pull/1372)). - ✨ Add converted Identity precompile tests ([#1344](https://github.com/ethereum/execution-spec-tests/pull/1344)). ## [v4.1.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v4.1.0) - 2025-03-11 ### 💥 Breaking Changes The following changes may be potentially breaking (all clients were tested with these changes with the state test format, but not the blockchain test format): - 💥 Add a `yParity` field (that duplicates `v`) to transaction authorization tuples in fixture formats to have fields that conform to EIP-7702 spec, resolves [erigontech/erigon#14073](https://github.com/erigontech/erigon/issues/14073) ([#1286](https://github.com/ethereum/execution-spec-tests/pull/1286)). - 💥 Rename the recently introduced `_info` field `fixture_format` to `fixture-format` for consistency [#1295](https://github.com/ethereum/execution-spec-tests/pull/1295). ### 🛠️ Framework - 🔀 Make `BaseFixture` able to parse any fixture format such as `BlockchainFixture` ([#1210](https://github.com/ethereum/execution-spec-tests/pull/1210)). - ✨ Blockchain and Blockchain-Engine tests now have a marker to specify that they were generated from a state test, which can be used with `-m blockchain_test_from_state_test` and `-m blockchain_test_engine_from_state_test` respectively ([#1220](https://github.com/ethereum/execution-spec-tests/pull/1220)). - ✨ Blockchain and Blockchain-Engine tests that were generated from a state test now have `blockchain_test_from_state_test` or `blockchain_test_engine_from_state_test` as part of their test IDs ([#1220](https://github.com/ethereum/execution-spec-tests/pull/1220)). - 🔀 Refactor `ethereum_test_fixtures` and `ethereum_clis` to create `FixtureConsumer` and `FixtureConsumerTool` classes which abstract away the consumption process used by `consume direct` ([#935](https://github.com/ethereum/execution-spec-tests/pull/935)). - ✨ Allow `consume direct --collect-only` without specifying a fixture consumer binary on the command-line ([#1237](https://github.com/ethereum/execution-spec-tests/pull/1237)). - ✨ Allow `fill --collect-only` without the need for existence of the folder `./fixtures`. - ✨ Report the (resolved) fixture tarball URL and local fixture cache directory when `consume`'s `--input` flag is a release spec or URL ([#1239](https://github.com/ethereum/execution-spec-tests/pull/1239)). - ✨ EOF Container validation tests (`eof_test`) now generate container deployment state tests, by wrapping the EOF container in an init-container and sending a deploy transaction ([#783](https://github.com/ethereum/execution-spec-tests/pull/783), [#1233](https://github.com/ethereum/execution-spec-tests/pull/1233)). - ✨ Use regexes for Hive's `--sim.limit` argument and don't use xdist if `--sim.parallelism==1` in the `eest/consume-rlp` and `eest/consume-rlp` simulators ([#1220](https://github.com/ethereum/execution-spec-tests/pull/1220)). - 🐞 Register generated test markers, e.g., `blockchain_test_from_state_test`, to prevent test session warnings ([#1238](https://github.com/ethereum/execution-spec-tests/pull/1238), [#1245](https://github.com/ethereum/execution-spec-tests/pull/1245)). - 🐞 Zero-pad `Environment` fields passed to `t8n` tools as required by `evmone-t8n` ([#1268](https://github.com/ethereum/execution-spec-tests/pull/1268)). ### 📋 Misc - ✨ Add a guide to the docs for porting tests from `ethereum/tests` to EEST ([#1165](https://github.com/ethereum/execution-spec-tests/pull/1165)). - ✨ Improve the `uv run eest make test` interactive CLI to enable creation of new test modules within existing test sub-folders ([#1241](https://github.com/ethereum/execution-spec-tests/pull/1241)). - ✨ Update `mypy` to latest release `>=1.15.0,<1.16` ([#1209](https://github.com/ethereum/execution-spec-tests/pull/1209)). - 🐞 Bug fix for filling with EELS for certain Python versions due to an issue with CPython ([#1231](https://github.com/ethereum/execution-spec-tests/pull/1231)). - 🐞 Fix HTML site deployment due to the site's index file exceeding Github's max file size limit ([#1292](https://github.com/ethereum/execution-spec-tests/pull/1292)). - ✨ Update the build fixtures workflow to use multiple self-hosted runners, remove `pectra-devnet-6` feature build ([#1296](https://github.com/ethereum/execution-spec-tests/pull/1296)). ### 🧪 Test Cases - ✨ Add gas cost of delegation access in CALL opcode ([#1208](https://github.com/ethereum/execution-spec-tests/pull/1208)). - ✨ Add EIP-7698 failed nonce and short data tests ([#1211](https://github.com/ethereum/execution-spec-tests/pull/1211)). - ✨ Add EIP-2537 additional pairing precompile tests cases, and then update all BLS12 test vectors ([#1275](https://github.com/ethereum/execution-spec-tests/pull/1275), [#1289](https://github.com/ethereum/execution-spec-tests/pull/1289)). - ✨ Add EIP-7685 and EIP-7002 test cases for additional request type combinations and modified withdrawal contract that allows more withdrawals ([#1340](https://github.com/ethereum/execution-spec-tests/pull/1340)). - ✨ Add test cases for EIP-152 Blake2 and Identity precompiles ([#1244](https://github.com/ethereum/execution-spec-tests/pull/1244)). ## [v4.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v4.0.0) - 2025-02-14 - 💕 ### 📁 Fixture Releases - 🔀 Initially we moved old fork configured tests within stable and develop fixture releases to a separate legacy release ([#788](https://github.com/ethereum/execution-spec-tests/pull/788)). - 🔀 This was later reverted after some client teams preferred to keep them in all in the same releases ([#1053](https://github.com/ethereum/execution-spec-tests/pull/1053)). ### 💥 Breaking Change - ✨ Use uv for package management replacing pip ([#777](https://github.com/ethereum/execution-spec-tests/pull/777)). - ✨ Ruff now replaces Flake8, Isort and Black resulting in significant changes to the entire code base including its usage ([#922](https://github.com/ethereum/execution-spec-tests/pull/922)). - 🔀 Fill test fixtures using EELS by default. EEST now uses the [`ethereum-specs-evm-resolver`](https://github.com/petertdavies/ethereum-spec-evm-resolver) with the EELS daemon ([#792](https://github.com/ethereum/execution-spec-tests/pull/792)). - 🔀 The EOF fixture format contained in `eof_tests` may now contain multiple exceptions in the `"exception"` field in the form of a pipe (`|`) separated string ([#759](https://github.com/ethereum/execution-spec-tests/pull/759)). - 🔀 `state_test`, `blockchain_test` and `blockchain_test_engine` fixtures now contain a `config` field, which contains an object that contains a `blobSchedule` field. On the `blockchain_test` and `blockchain_test_engine` fixtures, the object also contains a duplicate of the `network` root field. The root's `network` field will be eventually deprecated ([#1040](https://github.com/ethereum/execution-spec-tests/pull/1040)). - 🔀 `latest-stable-release` and `latest-develop-release` keywords for the `--input` flag in consume commands have been replaced with `stable@latest` and `develop@latest` respectively ([#1044](https://github.com/ethereum/execution-spec-tests/pull/1044)). ### 🛠️ Framework - ✨ Execute command added to run existing tests in live networks ([#](https://github.com/ethereum/execution-spec-tests/pull/1157)). - 🐞 Fixed consume hive commands from spawning different hive test suites during the same test execution when using xdist ([#712](https://github.com/ethereum/execution-spec-tests/pull/712)). - ✨ `consume hive` command is now available to run all types of hive tests ([#712](https://github.com/ethereum/execution-spec-tests/pull/712)). - ✨ Generated fixtures now contain the test index `index.json` by default ([#716](https://github.com/ethereum/execution-spec-tests/pull/716)). - ✨ A metadata folder `.meta/` now stores all fixture metadata files by default ([#721](https://github.com/ethereum/execution-spec-tests/pull/721)). - 🐞 Fixed `fill` command index generation issue due to concurrency ([#725](https://github.com/ethereum/execution-spec-tests/pull/725)). - ✨ Added `with_all_evm_code_types`, `with_all_call_opcodes` and `with_all_create_opcodes` markers, which allow automatic parametrization of tests to EOF ([#610](https://github.com/ethereum/execution-spec-tests/pull/610), [#739](https://github.com/ethereum/execution-spec-tests/pull/739)). - ✨ Added `with_all_system_contracts` marker, which helps parametrize tests with all contracts that affect the chain on a system level ([#739](https://github.com/ethereum/execution-spec-tests/pull/739)). - ✨ Code generators `Conditional` and `Switch` now support EOF by adding parameter `evm_code_type` ([#610](https://github.com/ethereum/execution-spec-tests/pull/610)). - ✨ `fill` command now supports parameter `--evm-code-type` that can be (currently) set to `legacy` or `eof_v1` to force all test smart contracts to deployed in normal or in EOF containers ([#610](https://github.com/ethereum/execution-spec-tests/pull/610)). - 🐞 Fixed fixture index generation on EOF tests ([#728](https://github.com/ethereum/execution-spec-tests/pull/728)). - 🐞 Fixes consume genesis mismatch exception for hive based simulators ([#734](https://github.com/ethereum/execution-spec-tests/pull/734)). - ✨ Adds reproducible consume commands to hiveview ([#717](https://github.com/ethereum/execution-spec-tests/pull/717)). - 💥 Added multiple exceptions to the EOF fixture format ([#759](https://github.com/ethereum/execution-spec-tests/pull/759)). - ✨ Added optional parameter to all `with_all_*` markers to specify a lambda function that filters the parametrized values ([#739](https://github.com/ethereum/execution-spec-tests/pull/739)). - ✨ Added [`extend_with_defaults` utility function](https://eest.ethereum.org/main/writing_tests/writing_a_new_test/#ethereum_test_tools.utility.pytest.extend_with_defaults), which helps extend test case parameter sets with default values. `@pytest.mark.parametrize` ([#739](https://github.com/ethereum/execution-spec-tests/pull/739)). - ✨ Added `Container.Init` to `ethereum_test_types.EOF.V1` package, which allows generation of an EOF init container more easily ([#739](https://github.com/ethereum/execution-spec-tests/pull/739)). - ✨ Introduce method valid_opcodes() to the fork class ([#748](https://github.com/ethereum/execution-spec-tests/pull/748)). - 🐞 Fixed `consume` exit code return values, ensuring that pytest's return value is correctly propagated to the shell. This allows the shell to accurately reflect the test results (e.g., failures) based on the pytest exit code ([#765](https://github.com/ethereum/execution-spec-tests/pull/765)). - ✨ Added a new flag `--solc-version` to the `fill` command, which allows the user to specify the version of the Solidity compiler to use when compiling Yul source code; this version will now be automatically downloaded by `fill` via [`solc-select`](https://github.com/crytic/solc-select) ([#772](https://github.com/ethereum/execution-spec-tests/pull/772)). - 🐞 Fix usage of multiple `@pytest.mark.with_all*` markers which shared parameters, such as `with_all_call_opcodes` and `with_all_create_opcodes` which shared `evm_code_type`, and now only parametrize compatible values ([#762](https://github.com/ethereum/execution-spec-tests/pull/762)). - ✨ Added `selector` and `marks` fields to all `@pytest.mark.with_all*` markers, which allows passing lambda functions to select or mark specific parametrized values (see [documentation](https://eest.ethereum.org/main/writing_tests/test_markers/#covariant-marker-keyword-arguments) for more information) ([#762](https://github.com/ethereum/execution-spec-tests/pull/762)). - ✨ Improves consume input flags for develop and stable fixture releases, fixes `--help` flag for consume ([#745](https://github.com/ethereum/execution-spec-tests/pull/745)). - 🔀 Return exit-code from `consume` commands ([#766](https://github.com/ethereum/execution-spec-tests/pull/766)). - 🔀 Remove duplicate EOF container tests, automatically check for duplicates ([#800](https://github.com/ethereum/execution-spec-tests/pull/800)). - 🔀 Fix DATALOAD `pushed_stack_items` calculation ([#784](https://github.com/ethereum/execution-spec-tests/pull/784)). - ✨ Add `evm_bytes` rename and print asm ([#844](https://github.com/ethereum/execution-spec-tests/pull/844)). - 🔀 Use the `session_temp_folder` introduced in #824 ([#845](https://github.com/ethereum/execution-spec-tests/pull/845)). - 🐞 Don't treat eels resolutions as a fixture ([#878](https://github.com/ethereum/execution-spec-tests/pull/878)). - ✨ Emphasize that no tests were executed during a fill pytest session ([#887](https://github.com/ethereum/execution-spec-tests/pull/887)). - 🔀 Move generic code from TransitionTool to a new generic base class EthereumCLI ([#894](https://github.com/ethereum/execution-spec-tests/pull/894)). - 🐞 Fix erroneous fork mes- 🔀 Fix max stack height calculation ([#810](https://github.com/ethereum/execution-spec-tests/pull/810)). - ✨ Add storage key hint in Storage class ([#917](https://github.com/ethereum/execution-spec-tests/pull/917)). - ✨ Add system to verify exception strings ([#795](https://github.com/ethereum/execution-spec-tests/pull/795)). - 🔀 Fix `FixedBytes` assignment rules ([#1010](https://github.com/ethereum/execution-spec-tests/pull/1010)). - 🔀 Fix `Address` padding options ([#1113](https://github.com/ethereum/execution-spec-tests/pull/1113)). - 🔀 Add `Container.expected_bytecode` optional parameter ([#737](https://github.com/ethereum/execution-spec-tests/pull/737)). - ✨ Add support for `initcode_prefix` on EOF `Container.Init` ([#819](https://github.com/ethereum/execution-spec-tests/pull/819)).sage in pytest session header with development forks ([#806](https://github.com/ethereum/execution-spec-tests/pull/806)). - 🐞 Fix `Conditional` code generator in EOF mode ([#821](https://github.com/ethereum/execution-spec-tests/pull/821)). - 🔀 Ensure that `Block` objects keep track of their `fork`, for example, when the block's `rlp_modifier` is not `None` ([#854](https://github.com/ethereum/execution-spec-tests/pull/854)). - 🔀 `ethereum_test_rpc` library has been created with what was previously `ethereum_test_tools.rpc` ([#822](https://github.com/ethereum/execution-spec-tests/pull/822)). - ✨ Add `Wei` type to `ethereum_test_base_types` which allows parsing wei amounts from strings like "1 ether", "1000 wei", "10**2 gwei", etc ([#825](https://github.com/ethereum/execution-spec-tests/pull/825)). - ✨ Pin EELS versions in `eels_resolutions.json` and include this file in fixture releases ([#872](https://github.com/ethereum/execution-spec-tests/pull/872)). - 🔀 Replace `ethereum.base_types` with `ethereum-types` ([#850](https://github.com/ethereum/execution-spec-tests/pull/850)). - 💥 Rename the `PragueEIP7692` fork to `Osaka` ([#869](https://github.com/ethereum/execution-spec-tests/pull/869)). - ✨ Improve `fill` terminal output to emphasize that filling tests is not actually testing a client ([#807](https://github.com/ethereum/execution-spec-tests/pull/887)). - ✨ Add the `BlockchainTestEngine` test spec type that only generates a fixture in the `EngineFixture` (`blockchain_test_engine`) format ([#888](https://github.com/ethereum/execution-spec-tests/pull/888)). - 🔀 Move the `evm_transition_tool` package to `ethereum_clis` and derive the transition tool CL interfaces from a shared `EthereumCLI` class that can be reused for other sub-commands ([#894](https://github.com/ethereum/execution-spec-tests/pull/894)). - ✨ Pass `state_test` property to T8N tools that support it (Only EELS at the time of merge) ([#943](https://github.com/ethereum/execution-spec-tests/pull/943)). - ✨ Add the `eofwrap` cli used to wrap tests from `ethereum/tests` in an EOF container ([#896](https://github.com/ethereum/execution-spec-tests/pull/896)). - 🔀 Improve gentest architecture with `EthereumTestBaseModel` and `EthereumTestRootModel` ([#901](https://github.com/ethereum/execution-spec-tests/pull/901)). - 🔀 Migrate transaction test to `state_test` for `gentest` ([#903](https://github.com/ethereum/execution-spec-tests/pull/903)). - 🔀 `ethereum_test_forks` forks now contain gas-calculating functions, which return the appropriate function to calculate the gas used by a transaction or memory function for the given fork ([#779](https://github.com/ethereum/execution-spec-tests/pull/779)). - 🐞 Fix `Bytecode` class `__eq__` method ([#939](https://github.com/ethereum/execution-spec-tests/pull/939)). - 🔀 Update `pydantic` from 2.8.2 to 2.9.2 ([#960](https://github.com/ethereum/execution-spec-tests/pull/960)). - ✨ Add the `eest make test` command, an interactive CLI that helps users create a new test module and function ([#950](https://github.com/ethereum/execution-spec-tests/pull/950)). - ✨ Add the `eest clean` command that helps delete generated files and directories from the repository ([#980](https://github.com/ethereum/execution-spec-tests/pull/980)). - ✨ Add framework changes for EIP-7742, required for Prague devnet-5 ([#931](https://github.com/ethereum/execution-spec-tests/pull/931)). - ✨ Add the `eest make env` command that generates a default env file (`env.yaml`)([#996](https://github.com/ethereum/execution-spec-tests/pull/996)). - ✨ Generate Transaction Test type ([#933](https://github.com/ethereum/execution-spec-tests/pull/933)). - ✨ Add a default location for evm logs (`--evm-dump-dir`) when filling tests ([#999](https://github.com/ethereum/execution-spec-tests/pull/999)). - ✨ Slow tests now have greater timeout when making a request to the T8N server ([#1037](https://github.com/ethereum/execution-spec-tests/pull/1037)). - ✨ Introduce [`pytest.mark.parametrize_by_fork`](https://eest.ethereum.org/main/writing_tests/test_markers/#pytestmarkfork_parametrize) helper marker ([#1019](https://github.com/ethereum/execution-spec-tests/pull/1019), [#1057](https://github.com/ethereum/execution-spec-tests/pull/1057)). - 🐞 fix(consume): allow absolute paths with `--evm-bin` ([#1052](https://github.com/ethereum/execution-spec-tests/pull/1052)). - ✨ Disable EIP-7742 framework changes for Prague ([#1023](https://github.com/ethereum/execution-spec-tests/pull/1023)). - ✨ Allow verification of the transaction receipt on executed test transactions ([#1068](https://github.com/ethereum/execution-spec-tests/pull/1068)). - ✨ Modify `valid_at_transition_to` marker to add keyword arguments `subsequent_transitions` and `until` to fill a test using multiple transition forks ([#1081](https://github.com/ethereum/execution-spec-tests/pull/1081)). - 🐞 fix(consume): use `"HIVE_CHECK_LIVE_PORT"` to signal hive to wait for port 8551 (Engine API port) instead of the 8545 port when running `consume engine` ([#1095](https://github.com/ethereum/execution-spec-tests/pull/1095)). - ✨ `state_test`, `blockchain_test` and `blockchain_test_engine` fixtures now contain the `blobSchedule` from [EIP-7840](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7840.md), only for tests filled for Cancun and Prague forks ([#1040](https://github.com/ethereum/execution-spec-tests/pull/1040)). - 🔀 Change `--dist` flag to the default value, `load`, for better parallelism handling during test filling ([#1118](https://github.com/ethereum/execution-spec-tests/pull/1118)). - 🔀 Refactor framework code to use the [`ethereum-rlp`](https://pypi.org/project/ethereum-rlp/) package instead of `ethereum.rlp`, previously available in ethereum/execution-specs ([#1180](https://github.com/ethereum/execution-spec-tests/pull/1180)). - 🔀 Update EELS / execution-specs EEST dependency to [99238233](https://github.com/ethereum/execution-specs/commit/9923823367b5586228e590537d47aa9cc4c6a206) for EEST framework libraries and test case generation ([#1181](https://github.com/ethereum/execution-spec-tests/pull/1181)). - ✨ Add the `consume cache` command to cache fixtures before running consume commands ([#1044](https://github.com/ethereum/execution-spec-tests/pull/1044)). - ✨ The `--input` flag of the consume commands now supports parsing of tagged release names in the format `@` ([#1044](https://github.com/ethereum/execution-spec-tests/pull/1044)). - 🐞 Fix stdout output when using the `fill` command ([#1188](https://github.com/ethereum/execution-spec-tests/pull/1188)). - ✨ Add tests for blockchain intermediate state verification ([#1075](https://github.com/ethereum/execution-spec-tests/pull/1075)). - ✨ Add Interactive CLI input functionality ([#947](https://github.com/ethereum/execution-spec-tests/pull/947)). - 🔀 Rename `EOFTest.data` to `EOFTest.container` with rebase of `EOFStateTest` ([#1145](https://github.com/ethereum/execution-spec-tests/pull/1145)). - ✨ Turn on `--traces` for EELS + `ethereum-specs-evm-resolver` ([#1174](https://github.com/ethereum/execution-spec-tests/pull/1174)). ### 📋 Misc - ✨ Feature releases can now include multiple types of fixture tarball files from different releases that start with the same prefix ([#736](https://github.com/ethereum/execution-spec-tests/pull/736)). - ✨ Releases for feature eip7692 now include both Cancun and Prague based tests in the same release, in files `fixtures_eip7692.tar.gz` and `fixtures_eip7692-prague.tar.gz` respectively ([#743](https://github.com/ethereum/execution-spec-tests/pull/743)). ✨ Re-write the test case reference doc flow as a pytest plugin and add pages for test functions with a table providing an overview of their parametrized test cases ([#801](https://github.com/ethereum/execution-spec-tests/pull/801), [#842](https://github.com/ethereum/execution-spec-tests/pull/842)). - 🔀 Simplify Python project configuration and consolidate it into `pyproject.toml` ([#764](https://github.com/ethereum/execution-spec-tests/pull/764)). - ✨ Add dev docs to help using nectos/act ([#776](https://github.com/ethereum/execution-spec-tests/pull/776)). - 🔀 Update `uv.lock` for updated solc deps ([#782](https://github.com/ethereum/execution-spec-tests/pull/782)). - ✨ Enable coverage on any test change ([#790](https://github.com/ethereum/execution-spec-tests/pull/790)). - 🔀 Created `pytest_plugins.concurrency` plugin to sync multiple `xdist` processes without using a command flag to specify the temporary working folder ([#824](https://github.com/ethereum/execution-spec-tests/pull/824)). - 🔀 Move pytest plugin `pytest_plugins.filler.solc` to `pytest_plugins.solc.solc` ([#823](https://github.com/ethereum/execution-spec-tests/pull/823)). - 🔀 Remove `formats.py`, embed properties as class vars ([#826](https://github.com/ethereum/execution-spec-tests/pull/826)). - ✨ Add `build-evm-base` to docs deploy workflows ([#829](https://github.com/ethereum/execution-spec-tests/pull/829)). - 🔀 Add links to the online test case docs in the EOF tracker ([#838](https://github.com/ethereum/execution-spec-tests/pull/838)). - 🔀 Fix miscellaneous improvements to troubleshooting, navigation, styling ([#840](https://github.com/ethereum/execution-spec-tests/pull/840)). - ✨ Include all parameters in test parameter datatables ([#842](https://github.com/ethereum/execution-spec-tests/pull/842)). - ✨ Add info about ripemd160 & update running actions locally ([#847](https://github.com/ethereum/execution-spec-tests/pull/847)). - ✨ Add `SECURITY.md` describing how to report vulnerabilities ([#848](https://github.com/ethereum/execution-spec-tests/pull/848)). - 🔀 Change image from ubuntu-24.04 to ubuntu-latest in CI ([#855](https://github.com/ethereum/execution-spec-tests/pull/855)). - 🐞 Asserts that the deploy docs tags workflow is only triggered for full releases ([#857](https://github.com/ethereum/execution-spec-tests/pull/857)). - 🐞 Fix deploy docs tags workflow trigger ([#858](https://github.com/ethereum/execution-spec-tests/pull/858)). - ✨ A new application-wide configuration manager provides access to environment and application configurations. ([#892](https://github.com/ethereum/execution-spec-tests/pull/892)). - 🔀 Update the developer docs navigation ([#898](https://github.com/ethereum/execution-spec-tests/pull/898)). - 🔀 Use jinja2 templating in `gentest` ([#900](https://github.com/ethereum/execution-spec-tests/pull/900)). - ✨ Fix/add test github actions locally page ([#909](https://github.com/ethereum/execution-spec-tests/pull/909)). - 🐞 Fix print fill output in coverage workflow on errors ([#919](https://github.com/ethereum/execution-spec-tests/pull/919)). - 🐞 Use a local version of ethereum/execution-specs (EELS) when running the framework tests in CI ([#997](https://github.com/ethereum/execution-spec-tests/pull/997)). - ✨ Use self-hosted runners for fixture building in CI ([#1051](https://github.com/ethereum/execution-spec-tests/pull/1051)). - ✨ Release tarballs now contain fixtures filled for all forks, not only the fork under active development and the fork currently deployed on mainnet ([#1053](https://github.com/ethereum/execution-spec-tests/pull/1053)). - ✨ `StateTest` fixture format now contains `state` field in each network post result, containing the decoded post allocation that results from the transaction execution ([#1064](https://github.com/ethereum/execution-spec-tests/pull/1064)). - ✨ Include EELS fork resolution information in filled json test fixtures ([#1123](https://github.com/ethereum/execution-spec-tests/pull/1123)). - 🔀 Updates ruff from version 0.8.2 to 0.9.4 ([#1168](https://github.com/ethereum/execution-spec-tests/pull/1168)). - 🔀 Update `uv.lock` to be compatible with `uv>=0.5.22` ([#1178](https://github.com/ethereum/execution-spec-tests/pull/1178)). - 🔀 Update `mypy` from version `0.991` to `1.15` ([#1209](https://github.com/ethereum/execution-spec-tests/pull/1209)). ### 🧪 Test Cases - ✨ Migrate validation tests `EIP3540/validInvalidFiller.yml` ([#598](https://github.com/ethereum/execution-spec-tests/pull/598)). - ✨ EIP-4844 test `tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py` includes an EOF test case ([#610](https://github.com/ethereum/execution-spec-tests/pull/610)). - ✨ Example test `tests/frontier/opcodes/test_dup.py` now includes EOF parametrization ([#610](https://github.com/ethereum/execution-spec-tests/pull/610)). - ✨ Add EOFv1 function test - Call simple contract test ([#695](https://github.com/ethereum/execution-spec-tests/pull/695)). - ✨ Add section size validation tests ([#705](https://github.com/ethereum/execution-spec-tests/pull/705)). - ✨ Add deep and wide EOF subcontainers tests ([#718](https://github.com/ethereum/execution-spec-tests/pull/718)). - ✨ Update [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) tests for Devnet-3 ([#733](https://github.com/ethereum/execution-spec-tests/pull/733)). - ✨ Migrate "valid" EOFCREATE validation ([#738](https://github.com/ethereum/execution-spec-tests/pull/738)). - ✨ Migrate tests for truncated sections ([#740](https://github.com/ethereum/execution-spec-tests/pull/740)). - ✨ Add out of order container section test ([#741](https://github.com/ethereum/execution-spec-tests/pull/741)). - ✨ Convert all opcodes validation test `tests/frontier/opcodes/test_all_opcodes.py` ([#748](https://github.com/ethereum/execution-spec-tests/pull/748)). - 🔀 Add Test types with 128 inputs ([#749](https://github.com/ethereum/execution-spec-tests/pull/749)). - 🔀 Use new marker to EOF-ize MCOPY test ([#754](https://github.com/ethereum/execution-spec-tests/pull/754)). - ✨ Add EOF Tests from Fuzzing ([#756](https://github.com/ethereum/execution-spec-tests/pull/756)). - ✨ Add embedded container tests ([#763](https://github.com/ethereum/execution-spec-tests/pull/763)). - ✨ Validate EOF only opcodes are invalid in legacy ([#768](https://github.com/ethereum/execution-spec-tests/pull/768)). - ✨ Update EOF tracker, add unimplemented tests ([#773](https://github.com/ethereum/execution-spec-tests/pull/773)). - ✨ Add EIP-7620 EOFCREATE gas tests ([#785](https://github.com/ethereum/execution-spec-tests/pull/785)). - ✨ Add more fuzzing discovered EOF tests ([#789](https://github.com/ethereum/execution-spec-tests/pull/789)). - ✨ Add EOF tests for invalid non-returning sections ([#794](https://github.com/ethereum/execution-spec-tests/pull/794)). - ✨ Test to ensure transient storage is cleared after transactions ([#798](https://github.com/ethereum/execution-spec-tests/pull/798)). - ✨ Test that transient storage stays at correct address ([#799](https://github.com/ethereum/execution-spec-tests/pull/799)). - ✨ Add EOFCREATE referencing the same subcontainer twice test ([#809](https://github.com/ethereum/execution-spec-tests/pull/809)). - ✨ Add dangling data in subcontainer test ([#812](https://github.com/ethereum/execution-spec-tests/pull/812)). - 🐞 Fix [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702)+EOF tests due to incorrect test expectations and faulty `Conditional` test generator in EOF mode ([#821](https://github.com/ethereum/execution-spec-tests/pull/821)). - 🐞 Fix TSTORE EOF variant test ([#831](https://github.com/ethereum/execution-spec-tests/pull/831)). - 🔀 Unify EOF return code constants ([#834](https://github.com/ethereum/execution-spec-tests/pull/834)). - ✨ Add RJUMP* vs CALLF tests ([#833](https://github.com/ethereum/execution-spec-tests/pull/833)). - ✨ Add tests to clarify "non-returning instruction" ([#837](https://github.com/ethereum/execution-spec-tests/pull/837)). - ✨ Add double RJUMPI stack validation tests ([#851](https://github.com/ethereum/execution-spec-tests/pull/851)). - ✨ Add unreachable code sections tests ([#856](https://github.com/ethereum/execution-spec-tests/pull/856)). - 💥 `PragueEIP7692` fork in tests has been updated to `Osaka` ([#869](https://github.com/ethereum/execution-spec-tests/pull/869)). - ✨ Update [EIP-6110](https://eips.ethereum.org/EIPS/eip-6110), [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002), [EIP-7251](https://eips.ethereum.org/EIPS/eip-7251), [EIP-7685](https://eips.ethereum.org/EIPS/eip-7685), and [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) tests for Devnet-4 ([#832](https://github.com/ethereum/execution-spec-tests/pull/832)). - ✨ Add EIP-7069 and EIP-7620 failures and context vars tests ([#836](https://github.com/ethereum/execution-spec-tests/pull/836)). - ✨ Add EOF EIP-4750 Stack validation in CALLF test ([#889](https://github.com/ethereum/execution-spec-tests/pull/889)). - ✨ Add stack overflow by rule check to JUMPF tests ([#902](https://github.com/ethereum/execution-spec-tests/pull/902)). - 🐞 Fix erroneous test with`CALLF` rule bug ([#907](https://github.com/ethereum/execution-spec-tests/pull/907)). - ✨ Add test for EXTDELEGATECALL value cost ([#911](https://github.com/ethereum/execution-spec-tests/pull/911)). - ✨ Add basic EOF execution tests ([#912](https://github.com/ethereum/execution-spec-tests/pull/912)). - ✨ Add parametrized CALLF execution tests ([#913](https://github.com/ethereum/execution-spec-tests/pull/913)). - ✨ Add CALLF execution tests ([#914](https://github.com/ethereum/execution-spec-tests/pull/914)). - ✨ Add fibonacci and factorial CALLF tests ([#915](https://github.com/ethereum/execution-spec-tests/pull/915)). - ✨ Add RJUMP* execution tests ([#916](https://github.com/ethereum/execution-spec-tests/pull/916)). - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) many delegations test ([#923](https://github.com/ethereum/execution-spec-tests/pull/923)). - ✨ Add opcode validation tests ([#932](https://github.com/ethereum/execution-spec-tests/pull/932)). - ✨ Add RJUMPI with JUMPF tests ([#928](https://github.com/ethereum/execution-spec-tests/pull/928)). - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) set code of non-empty-storage account test ([#948](https://github.com/ethereum/execution-spec-tests/pull/948)). - ✨ Add PUSH* opcode tests ([#975](https://github.com/ethereum/execution-spec-tests/pull/975)). - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) implement 7702 test ideas ([#981](https://github.com/ethereum/execution-spec-tests/pull/981)). - ✨ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Remove delegation behavior of EXTCODE* ([#984](https://github.com/ethereum/execution-spec-tests/pull/984)). - ✨ Add EIP-7620 RETURNCONTRACT behavior verification test ([#1109](https://github.com/ethereum/execution-spec-tests/pull/1109)). - ✨ Add EIP-7069 p256verify EOF calls tests ([#1021](https://github.com/ethereum/execution-spec-tests/pull/1021)). - ✨ Add EIP-7480 DATACOPY edge cases tests ([#1020](https://github.com/ethereum/execution-spec-tests/pull/1020)). - ✨ Add EIP-7069 EXTCALL creation gas charge tests ([#1025](https://github.com/ethereum/execution-spec-tests/pull/1025)). - ✨ Add generic precompile-absence test ([#1036](https://github.com/ethereum/execution-spec-tests/pull/1036)). - ✨ Add test for [EIP-2537](https://eips.ethereum.org/EIPS/eip-2537) which uses the full discount table of G2 MSM ([#1038](https://github.com/ethereum/execution-spec-tests/pull/1038)). - ✨ [EIP-7691](https://eips.ethereum.org/EIPS/eip-7691) Blob throughput increase tests by parametrization of existing EIP-4844 tests ([#1023](https://github.com/ethereum/execution-spec-tests/pull/1023), [#1082](https://github.com/ethereum/execution-spec-tests/pull/1082)). - ✨ Port [calldatacopy test](https://github.com/ethereum/tests/blob/ae4791077e8fcf716136e70fe8392f1a1f1495fb/src/GeneralStateTestsFiller/VMTests/vmTests/calldatacopyFiller.yml) ([#1056](https://github.com/ethereum/execution-spec-tests/pull/1056)). - ✨ [EIP-7623](https://eips.ethereum.org/EIPS/eip-7623) Increase calldata cost ([#1004](https://github.com/ethereum/execution-spec-tests/pull/1004), [#1071](https://github.com/ethereum/execution-spec-tests/pull/1071)). - ✨ Add CALLF invalid section index tests ([#1111](https://github.com/ethereum/execution-spec-tests/pull/1111)). - ✨ Add JUMPF invalid section index tests ([#1112](https://github.com/ethereum/execution-spec-tests/pull/1112)). - ✨ Add CALLF truncated immediate bytes tests ([#1114](https://github.com/ethereum/execution-spec-tests/pull/1114)). - ✨ [EIP-152](https://eips.ethereum.org/EIPS/eip-152) Add tests for Blake2 compression function `F` precompile ([#1067](https://github.com/ethereum/execution-spec-tests/pull/1067)). - ✨ Add CALLF non-returning section tests ([#1126](https://github.com/ethereum/execution-spec-tests/pull/1126)). - ✨ Add DATALOADN truncated immediate bytes tests ([#1127](https://github.com/ethereum/execution-spec-tests/pull/1127)). - 🔀 Update EIP-7702 test expectations according to [spec updates](https://github.com/ethereum/EIPs/pull/9248) ([#1129](https://github.com/ethereum/execution-spec-tests/pull/1129)). - ✨ Add tests for CALLF and non-returning ([#1140](https://github.com/ethereum/execution-spec-tests/pull/1140)). - 🔀 Update EIP-7251 according to spec updates [#9127](https://github.com/ethereum/EIPs/pull/9127), [#9289](https://github.com/ethereum/EIPs/pull/9289) ([#1024](https://github.com/ethereum/execution-spec-tests/pull/1024), [#1155](https://github.com/ethereum/execution-spec-tests/pull/1155)). - 🔀 Update EIP-7002 according to spec updates [#9119](https://github.com/ethereum/EIPs/pull/9119), [#9288](https://github.com/ethereum/EIPs/pull/9288) ([#1024](https://github.com/ethereum/execution-spec-tests/pull/1024), [#1155](https://github.com/ethereum/execution-spec-tests/pull/1155)). - 🔀 Update EIP-2935 according to spec updates [#9144](https://github.com/ethereum/EIPs/pull/9144), [#9287](https://github.com/ethereum/EIPs/pull/9287) ([#1046](https://github.com/ethereum/execution-spec-tests/pull/1046), [#1155](https://github.com/ethereum/execution-spec-tests/pull/1155)). - ✨ Add DATALOADN validation and execution tests ([#1162](https://github.com/ethereum/execution-spec-tests/pull/1162)). - ✨ Add EOF prefix tests ([#1187](https://github.com/ethereum/execution-spec-tests/pull/1187)). - ✨ Add tests for EOF code header missing ([#1193](https://github.com/ethereum/execution-spec-tests/pull/1193)). - ✨ Add tests for empty EOF type section ([#1194](https://github.com/ethereum/execution-spec-tests/pull/1194)). - ✨ Add tests for multiple EOF type sections ([#1195](https://github.com/ethereum/execution-spec-tests/pull/1195)). - ✨ Add EIP-7698 legacy EOF creation prevention tests ([#1206](https://github.com/ethereum/execution-spec-tests/pull/1206)). ## [v3.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v3.0.0) - 2024-07-22 ### 🧪 Test Cases - ✨ Port create2 return data test ([#497](https://github.com/ethereum/execution-spec-tests/pull/497)). - ✨ Add tests for eof container's section bytes position smart fuzzing ([#592](https://github.com/ethereum/execution-spec-tests/pull/592)). - ✨ Add `test_create_selfdestruct_same_tx_increased_nonce` which tests self-destructing a contract with a nonce > 1 ([#478](https://github.com/ethereum/execution-spec-tests/pull/478)). - ✨ Add `test_double_kill` and `test_recreate` which test resurrection of accounts killed with `SELFDESTRUCT` ([#488](https://github.com/ethereum/execution-spec-tests/pull/488)). - ✨ Add eof example valid invalid tests from ori, fetch EOF Container implementation ([#535](https://github.com/ethereum/execution-spec-tests/pull/535)). - ✨ Add tests for [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537) ([#499](https://github.com/ethereum/execution-spec-tests/pull/499)). - ✨ [EIP-663](https://eips.ethereum.org/EIPS/eip-663): Add `test_dupn.py` and `test_swapn.py` ([#502](https://github.com/ethereum/execution-spec-tests/pull/502)). - ✨ Add tests for [EIP-6110: Supply validator deposits on chain](https://eips.ethereum.org/EIPS/eip-6110) ([#530](https://github.com/ethereum/execution-spec-tests/pull/530)). - ✨ Add tests for [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002) ([#530](https://github.com/ethereum/execution-spec-tests/pull/530)). - ✨ Add tests for [EIP-7685: General purpose execution layer requests](https://eips.ethereum.org/EIPS/eip-7685) ([#530](https://github.com/ethereum/execution-spec-tests/pull/530)). - ✨ Add tests for [EIP-2935: Serve historical block hashes from state](https://eips.ethereum.org/EIPS/eip-2935) ([#564](https://github.com/ethereum/execution-spec-tests/pull/564), [#585](https://github.com/ethereum/execution-spec-tests/pull/585)). - ✨ Add tests for [EIP-4200: EOF - Static relative jumps](https://eips.ethereum.org/EIPS/eip-4200) ([#581](https://github.com/ethereum/execution-spec-tests/pull/581), [#666](https://github.com/ethereum/execution-spec-tests/pull/666)). - ✨ Add tests for [EIP-7069: EOF - Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069) ([#595](https://github.com/ethereum/execution-spec-tests/pull/595)). - 🐞 Fix typos in self-destruct collision test from erroneous pytest parametrization ([#608](https://github.com/ethereum/execution-spec-tests/pull/608)). - ✨ Add tests for [EIP-3540: EOF - EVM Object Format v1](https://eips.ethereum.org/EIPS/eip-3540) ([#634](https://github.com/ethereum/execution-spec-tests/pull/634), [#668](https://github.com/ethereum/execution-spec-tests/pull/668)). - 🔀 Update EIP-7002 tests to match spec changes in [ethereum/execution-apis#549](https://github.com/ethereum/execution-apis/pull/549) ([#600](https://github.com/ethereum/execution-spec-tests/pull/600)). - ✨ Convert a few eip1153 tests from ethereum/tests repo into .py ([#440](https://github.com/ethereum/execution-spec-tests/pull/440)). - ✨ Add tests for [EIP-7480: EOF - Data section access instructions](https://eips.ethereum.org/EIPS/eip-7480) ([#518](https://github.com/ethereum/execution-spec-tests/pull/518), [#664](https://github.com/ethereum/execution-spec-tests/pull/664)). - ✨ Add tests for subcontainer kind validation from [EIP-7620: EOF Contract Creation](https://eips.ethereum.org/EIPS/eip-7620) for the cases with deeply nested containers and non-first code sections ([#676](https://github.com/ethereum/execution-spec-tests/pull/676)). - ✨ Add tests for runtime stack overflow at CALLF instruction from [EIP-4750: EOF - Functions](https://eips.ethereum.org/EIPS/eip-4750) ([#678](https://github.com/ethereum/execution-spec-tests/pull/678)). - ✨ Add tests for runtime stack overflow at JUMPF instruction from [EIP-6206: EOF - JUMPF and non-returning functions](https://eips.ethereum.org/EIPS/eip-6206) ([#690](https://github.com/ethereum/execution-spec-tests/pull/690)). - ✨ Add tests for Devnet-1 version of [EIP-7702: Set EOA account code](https://eips.ethereum.org/EIPS/eip-7702) ([#621](https://github.com/ethereum/execution-spec-tests/pull/621)). ### 🛠️ Framework - 🐞 Fix incorrect `!=` operator for `FixedSizeBytes` ([#477](https://github.com/ethereum/execution-spec-tests/pull/477)). - ✨ Add Macro enum that represents byte sequence of Op instructions ([#457](https://github.com/ethereum/execution-spec-tests/pull/457)). - ✨ Number of parameters used to call opcodes (to generate bytecode) is now checked ([#492](https://github.com/ethereum/execution-spec-tests/pull/492)). - ✨ Libraries have been refactored to use `pydantic` for type checking in most test types ([#486](https://github.com/ethereum/execution-spec-tests/pull/486), [#501](https://github.com/ethereum/execution-spec-tests/pull/501), [#508](https://github.com/ethereum/execution-spec-tests/pull/508)). - ✨ Opcodes are now subscriptable and it's used to define the data portion of the opcode: `Op.PUSH1(1) == Op.PUSH1[1] == b"\x60\x01"` ([#513](https://github.com/ethereum/execution-spec-tests/pull/513)). - ✨ Added EOF fixture format ([#512](https://github.com/ethereum/execution-spec-tests/pull/512)). - ✨ Verify filled EOF fixtures using `evmone-eofparse` during `fill` execution ([#519](https://github.com/ethereum/execution-spec-tests/pull/519)). - ✨ Added `--traces` support when running with Hyperledger Besu ([#511](https://github.com/ethereum/execution-spec-tests/pull/511)). - ✨ Use pytest's "short" traceback style (`--tb=short`) for failure summaries in the test report for more compact terminal output ([#542](https://github.com/ethereum/execution-spec-tests/pull/542)). - ✨ The `fill` command now generates HTML test reports with links to the JSON fixtures and debug information ([#537](https://github.com/ethereum/execution-spec-tests/pull/537)). - ✨ Add an Ethereum RPC client class for use with consume commands ([#556](https://github.com/ethereum/execution-spec-tests/pull/556)). - ✨ Add a "slow" pytest marker, in order to be able to limit the filled tests until release ([#562](https://github.com/ethereum/execution-spec-tests/pull/562)). - ✨ Add a CLI tool that generates blockchain tests as Python from a transaction hash ([#470](https://github.com/ethereum/execution-spec-tests/pull/470), [#576](https://github.com/ethereum/execution-spec-tests/pull/576)). - ✨ Add more Transaction and Block exceptions from existing ethereum/tests repo ([#572](https://github.com/ethereum/execution-spec-tests/pull/572)). - ✨ Add "description" and "url" fields containing test case documentation and a source code permalink to fixtures during `fill` and use them in `consume`-generated Hive test reports ([#579](https://github.com/ethereum/execution-spec-tests/pull/579)). - ✨ Add git workflow evmone coverage script for any new lines mentioned in converted_ethereum_tests.txt ([#503](https://github.com/ethereum/execution-spec-tests/pull/503)). - ✨ Add a new covariant marker `with_all_contract_creating_tx_types` that allows automatic parametrization of a test with all contract-creating transaction types at the current executing fork ([#602](https://github.com/ethereum/execution-spec-tests/pull/602)). - ✨ Tests are now encouraged to declare a `pre: Alloc` parameter to get the pre-allocation object for the test, and use `pre.deploy_contract` and `pre.fund_eoa` to deploy contracts and fund accounts respectively, instead of declaring the `pre` as a dictionary or modifying its contents directly (see the [state test tutorial](https://eest.ethereum.org/v4.1.0/writing_tests/tutorials/state_transition/) for an updated example) ([#584](https://github.com/ethereum/execution-spec-tests/pull/584)). - ✨ Enable loading of [ethereum/tests/BlockchainTests](https://github.com/ethereum/tests/tree/develop/BlockchainTests) ([#596](https://github.com/ethereum/execution-spec-tests/pull/596)). - 🔀 Refactor `gentest` to use `ethereum_test_tools.rpc.rpc` by adding to `get_transaction_by_hash`, `debug_trace_call` to `EthRPC` ([#568](https://github.com/ethereum/execution-spec-tests/pull/568)). - ✨ Write a properties file to the output directory and enable direct generation of a fixture tarball from `fill` via `--output=fixtures.tgz`([#627](https://github.com/ethereum/execution-spec-tests/pull/627)). - 🔀 `ethereum_test_tools` library has been split into multiple libraries ([#645](https://github.com/ethereum/execution-spec-tests/pull/645)). - ✨ Add the consume engine simulator and refactor the consume simulator suite ([#691](https://github.com/ethereum/execution-spec-tests/pull/691)). - 🐞 Prevents forcing consume to use stdin as an input when running from hive ([#701](https://github.com/ethereum/execution-spec-tests/pull/701)). ### 📋 Misc - 🐞 Fix CI by using Golang 1.21 in Github Actions to build geth ([#484](https://github.com/ethereum/execution-spec-tests/pull/484)). - 💥 "Merge" has been renamed to "Paris" in the "network" field of the Blockchain tests, and in the "post" field of the State tests ([#480](https://github.com/ethereum/execution-spec-tests/pull/480)). - ✨ Port entry point scripts to use [click](https://click.palletsprojects.com) and add tests ([#483](https://github.com/ethereum/execution-spec-tests/pull/483)). - 💥 As part of the pydantic conversion, the fixtures have the following (possibly breaking) changes ([#486](https://github.com/ethereum/execution-spec-tests/pull/486)): - State test field `transaction` now uses the proper zero-padded hex number format for fields `maxPriorityFeePerGas`, `maxFeePerGas`, and `maxFeePerBlobGas`. - Fixtures' hashes (in the `_info` field) are now calculated by removing the "_info" field entirely instead of it being set to an empty dict. - 🐞 Relax minor and patch dependency requirements to avoid conflicting package dependencies ([#510](https://github.com/ethereum/execution-spec-tests/pull/510)). - 🔀 Update all CI actions to use their respective Node.js 20 versions, ahead of their Node.js 16 version deprecations ([#527](https://github.com/ethereum/execution-spec-tests/pull/527)). - ✨ Releases now contain a `fixtures_eip7692.tar.gz` which contains all EOF fixtures ([#573](https://github.com/ethereum/execution-spec-tests/pull/573)). - ✨ Use `solc-select` for tox when running locally and within CI ([#604](https://github.com/ethereum/execution-spec-tests/pull/604)). ### 💥 Breaking Change - Cancun is now the latest deployed fork, and the development fork is now Prague ([#489](https://github.com/ethereum/execution-spec-tests/pull/489)). - Stable fixtures artifact `fixtures.tar.gz` has been renamed to `fixtures_stable.tar.gz` ([#573](https://github.com/ethereum/execution-spec-tests/pull/573)). - The "Blockchain Test Hive" fixture format has been renamed to "Blockchain Test Engine" and updated to more closely resemble the `engine_newPayload` format in the `execution-apis` specification () and now contains a single `"params"` field instead of multiple fields for each parameter ([#687](https://github.com/ethereum/execution-spec-tests/pull/687)). - Output folder for fixtures has been renamed from "blockchain_tests_hive" to "blockchain_tests_engine" ([#687](https://github.com/ethereum/execution-spec-tests/pull/687)). ## [v2.1.1](https://github.com/ethereum/execution-spec-tests/releases/tag/v2.1.1) - 2024-03-09 ### 🧪 Test Cases - 🐞 Dynamic create2 collision from different transactions same block ([#430](https://github.com/ethereum/execution-spec-tests/pull/430)). - 🐞 Fix beacon root contract deployment tests so the account in the pre-alloc is not empty ([#425](https://github.com/ethereum/execution-spec-tests/pull/425)). - 🔀 All beacon root contract tests are now contained in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py, and all state tests have been converted back to blockchain tests format ([#449](https://github.com/ethereum/execution-spec-tests/pull/449)). ### 🛠️ Framework - ✨ Adds two `consume` commands [#339](https://github.com/ethereum/execution-spec-tests/pull/339): 1. `consume direct` - Execute a test fixture directly against a client using a `blocktest`-like command (currently only geth supported). 2. `consume rlp` - Execute a test fixture in a hive simulator against a client that imports the test's genesis config and blocks as RLP upon startup. This is a re-write of the [ethereum/consensus](https://github.com/ethereum/hive/tree/master/simulators/ethereum/consensus) Golang simulator. - ✨ Add Prague to forks ([#419](https://github.com/ethereum/execution-spec-tests/pull/419)). - ✨ Improve handling of the argument passed to `solc --evm-version` when compiling Yul code ([#418](https://github.com/ethereum/execution-spec-tests/pull/418)). - 🐞 Fix `fill -m yul_test` which failed to filter tests that are (dynamically) marked as a yul test ([#418](https://github.com/ethereum/execution-spec-tests/pull/418)). - 🔀 Helper methods `to_address`, `to_hash` and `to_hash_bytes` have been deprecated in favor of `Address` and `Hash`, which are automatically detected as opcode parameters and pushed to the stack in the resulting bytecode ([#422](https://github.com/ethereum/execution-spec-tests/pull/422)). - ✨ `Opcodes` enum now contains docstrings with each opcode description, including parameters and return values, which show up in many development environments ([#424](https://github.com/ethereum/execution-spec-tests/pull/424)) @ThreeHrSleep. - 🔀 Locally calculate state root for the genesis blocks in the blockchain tests instead of calling t8n ([#450](https://github.com/ethereum/execution-spec-tests/pull/450)). - 🐞 Fix bug that causes an exception during test collection because the fork parameter contains `None` ([#452](https://github.com/ethereum/execution-spec-tests/pull/452)). - ✨ The `_info` field in the test fixtures now contains a `hash` field, which is the hash of the test fixture, and a `hasher` script has been added which prints and performs calculations on top of the hashes of all fixtures (see `hasher -h`) ([#454](https://github.com/ethereum/execution-spec-tests/pull/454)). - ✨ Adds an optional `verify_sync` field to hive blockchain tests (EngineAPI). When set to true a second client attempts to sync to the first client that executed the tests ([#431](https://github.com/ethereum/execution-spec-tests/pull/431)). - 🐞 Fix manually setting the gas limit in the genesis test env for post genesis blocks in blockchain tests ([#472](https://github.com/ethereum/execution-spec-tests/pull/472)). ### 📋 Misc - 🐞 Fix deprecation warnings due to outdated config in recommended VS Code project settings ([#420](https://github.com/ethereum/execution-spec-tests/pull/420)). - 🐞 Fix typo in the selfdestruct revert tests module ([#421](https://github.com/ethereum/execution-spec-tests/pull/421)). ## [v2.1.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v2.1.0) - 2024-01-29: 🐍🏖️ Cancun Release [v2.1.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v2.1.0) primarily fixes a small bug introduced within the previous release where transition forks are used within the new `StateTest` format. This was highlighted by @chfast within #405 (), where the fork name `ShanghaiToCancunAtTime15k` was found within state tests. ### 🧪 Test Cases - ✨ [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Adds `test_blob_gas_subtraction_tx()` verifying the blob gas fee is subtracted from the sender before executing the blob tx ([#407](https://github.com/ethereum/execution-spec-tests/pull/407)). ### 🛠️ Framework - 🐞 State tests generated with transition forks no longer use the transition fork name in the fixture output, instead they use the actual enabled fork according to the state test's block number and timestamp ([#406](https://github.com/ethereum/execution-spec-tests/pull/406)). ### 📋 Misc - ✨ Use `run-parallel` and shared wheel packages for `tox` ([#408](https://github.com/ethereum/execution-spec-tests/pull/408)). ## [v2.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v2.0.0) - 2024-01-25: 🐍🏖️ Cancun Release [v2.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v2.0.0) contains many important framework changes, including introduction of the `StateTest` format, and some additional Cancun and other test coverage. Due to changes in the framework, there is a breaking change in the directory structure in the release tarball, please see the dedicated "💥 Breaking Changes" section below for more information. ### 🧪 Test Cases - ✨ [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Add `test_sufficient_balance_blob_tx()` and `test_sufficient_balance_blob_tx_pre_fund_tx()` ([#379](https://github.com/ethereum/execution-spec-tests/pull/379)). - ✨ [EIP-6780](https://eips.ethereum.org/EIPS/eip-6780): Add a reentrancy suicide revert test ([#372](https://github.com/ethereum/execution-spec-tests/pull/372)). - ✨ [EIP-1153](https://eips.ethereum.org/EIPS/eip-1153): Add `test_run_until_out_of_gas()` for transient storage opcodes ([#401](https://github.com/ethereum/execution-spec-tests/pull/401)). - ✨ [EIP-198](https://eips.ethereum.org/EIPS/eip-198): Add tests for the MODEXP precompile ([#364](https://github.com/ethereum/execution-spec-tests/pull/364)). - ✨ Tests for nested `CALL` and `CALLCODE` gas consumption with a positive value transfer (previously lacking coverage) ([#371](https://github.com/ethereum/execution-spec-tests/pull/371)). - 🐞 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Fixed `test_invalid_tx_max_fee_per_blob_gas()` to account for extra gas required in the case where the account is incorrectly deduced the balance as if it had the correct block blob gas fee ([#370](https://github.com/ethereum/execution-spec-tests/pull/370)). - 🐞 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Fixed `test_insufficient_balance_blob_tx()` to correctly calculate the minimum balance required for the accounts ([#379](https://github.com/ethereum/execution-spec-tests/pull/379)). - 🐞 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Fix and enable `test_invalid_blob_tx_contract_creation` ([#379](https://github.com/ethereum/execution-spec-tests/pull/379)). - 🔀 Convert all eligible `BlockchainTest`s to `StateTest`s (and additionally generate corresponding `BlockchainTest`s) ([#368](https://github.com/ethereum/execution-spec-tests/pull/368), [#370](https://github.com/ethereum/execution-spec-tests/pull/370)). ### 🛠️ Framework - ✨ Add `StateTest` fixture format generation; `StateTests` now generate a `StateTest` and a corresponding `BlockchainTest` test fixture, previously only `BlockchainTest` fixtures were generated ([#368](https://github.com/ethereum/execution-spec-tests/pull/368)). - ✨ Add `StateTestOnly` fixture format is now available and its only difference with `StateTest` is that it does not produce a `BlockchainTest` ([#368](https://github.com/ethereum/execution-spec-tests/pull/368)). - ✨ Add `evm_bytes_to_python` command-line utility which converts EVM bytecode to Python Opcodes ([#357](https://github.com/ethereum/execution-spec-tests/pull/357)). - ✨ Fork objects used to write tests can now be compared using the `>`, `>=`, `<`, `<=` operators, to check for a fork being newer than, newer than or equal, older than, older than or equal, respectively when compared against other fork ([#367](https://github.com/ethereum/execution-spec-tests/pull/367)). - ✨ Add [solc 0.8.23](https://github.com/ethereum/solidity/releases/tag/v0.8.23) support ([#373](https://github.com/ethereum/execution-spec-tests/pull/373)). - ✨ Add framework unit tests for post state exception verification ([#350](https://github.com/ethereum/execution-spec-tests/pull/350)). - ✨ Add a helper class `ethereum_test_tools.TestParameterGroup` to define test parameters as dataclasses and auto-generate test IDs ([#364](https://github.com/ethereum/execution-spec-tests/pull/364)). - ✨ Add a `--single-fixture-per-file` flag to generate one fixture JSON file per test case ([#331](https://github.com/ethereum/execution-spec-tests/pull/331)). - 🐞 Storage type iterator is now fixed ([#369](https://github.com/ethereum/execution-spec-tests/pull/369)). - 🐞 Fix type coercion in `FixtureHeader.join()` ([#398](https://github.com/ethereum/execution-spec-tests/pull/398)). - 🔀 Locally calculate the transactions list's root instead of using the one returned by t8n when producing BlockchainTests ([#353](https://github.com/ethereum/execution-spec-tests/pull/353)). - 🔀 Change custom exception classes to dataclasses to improve testability ([#386](https://github.com/ethereum/execution-spec-tests/pull/386)). - 🔀 Update fork name from "Merge" to "Paris" used within the framework and tests ([#363](https://github.com/ethereum/execution-spec-tests/pull/363)). - 💥 Replace `=` with `_` in pytest node ids and test fixture names ([#342](https://github.com/ethereum/execution-spec-tests/pull/342)). - 💥 The `StateTest`, spec format used to write tests, is now limited to a single transaction per test ([#361](https://github.com/ethereum/execution-spec-tests/pull/361)). - 💥 Tests must now use `BlockException` and `TransactionException` to define the expected exception of a given test, which can be used to test whether the client is hitting the proper exception when processing the block or transaction ([#384](https://github.com/ethereum/execution-spec-tests/pull/384)). - 💥 `fill`: Remove the `--enable-hive` flag; now all test types are generated by default ([#358](https://github.com/ethereum/execution-spec-tests/pull/358)). - 💥 Rename test fixtures names to match the corresponding pytest node ID as generated using `fill` ([#342](https://github.com/ethereum/execution-spec-tests/pull/342)). ### 📋 Misc - ✨ Docs: Add a ["Consuming Tests"](https://eest.ethereum.org/main/consuming_tests/) section to the docs, where each test fixture format is described, along with the steps to consume them, and the description of the structures used in each format ([#375](https://github.com/ethereum/execution-spec-tests/pull/375)). - 🔀 Docs: Update `t8n` tool branch to fill tests for development features in the [readme](https://github.com/ethereum/execution-spec-tests) ([#338](https://github.com/ethereum/execution-spec-tests/pull/338)). - 🔀 Filling tool: Updated the default filling tool (`t8n`) to go-ethereum@master ([#368](https://github.com/ethereum/execution-spec-tests/pull/368)). - 🐞 Docs: Fix error banner in online docs due to mermaid syntax error ([#398](https://github.com/ethereum/execution-spec-tests/pull/398)). - 🐞 Docs: Fix incorrectly formatted nested lists in online doc ([#403](https://github.com/ethereum/execution-spec-tests/pull/403)). - 🔀 CLI: `evm_bytes_to_python` is renamed to `evm_bytes` and now accepts flag `--assembly` to output the code in assembly format ([#844](https://github.com/ethereum/execution-spec-tests/pull/844)). ### 💥 Breaking Changes A concrete example of the test name renaming and change in directory structure is provided below. 1. Fixture output, including release tarballs, now contain subdirectories for different test types: 1. `blockchain_tests`: Contains `BlockchainTest` formatted tests 2. `blockchain_tests_hive`: Contains `BlockchainTest` with Engine API call directives for use in hive 3. `state_tests`: Contains `StateTest` formatted tests 2. `StateTest`, spec format used to write tests, is now limited to a single transaction per test. 3. In this release the pytest node ID is now used for fixture names (previously only the test parameters were used), this should not be breaking. However, `=` in both node IDs (and therefore fixture names) have been replaced with `_`, which may break tooling that depends on the `=` character. 4. Produced `blockchain_tests` fixtures and their corresponding `blockchain_tests_hive` fixtures now contain the named exceptions `BlockException` and `TransactionException` as strings in the `expectException` and `validationError` fields, respectively. These exceptions can be used to test whether the client is hitting the proper exception when processing an invalid block. Blockchain test: ```json "blocks": [ { ... "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", ... } ... ] ``` Blockchain hive test: ```json "engineNewPayloads": [ { ... "validationError": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", ... } ... ] ``` #### Renaming and Release Tarball Directory Structure Change Example The fixture renaming provides a more consistent naming scheme between the pytest node ID and fixture name and allows the fixture name to be provided directly to pytest 5on the command line to execute individual tests in isolation, e.g. `pytest tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]`. 1. Pytest node ID example: 1. Previous node ID: `tests/frontier/opcodes/test_dup.py::test_dup[fork=Frontier]`. 2. New node ID: `tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]`. 2. Fixture name example: 1. Previous fixture name: `000-fork=Frontier` 2. New fixture name: `tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]` (now the same as the pytest node ID). 3. Fixture JSON file name example (within the release tarball): 1. Previous fixture file name: `fixtures/frontier/opcodes/dup/dup.json` (`BlockChainTest` format). 2. New fixture file names (all present within the release tarball): - `fixtures/state_tests/frontier/opcodes/dup/dup.json` (`StateTest` format). - `fixtures/blockchain_tests/frontier/opcodes/dup/dup.json` (`BlockChainTest` format). - `fixtures/blockchain_tests_hive/frontier/opcodes/dup/dup.json` (a blockchain test in `HiveFixture` format). ## [v1.0.6](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.6) - 2023-10-19: 🐍🏖️ Cancun Devnet 10 ### 🧪 Test Cases - 🔀 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Update KZG point evaluation test vectors to use data from the official KZG setup and Mainnet Trusted Setup ([#336](https://github.com/ethereum/execution-spec-tests/pull/336)). ### 🛠️ Framework - 🔀 Fixtures: Add a non-RLP format field (`rlp_decoded`) to invalid blocks ([#322](https://github.com/ethereum/execution-spec-tests/pull/322)). - 🔀 Spec: Refactor state and blockchain spec ([#307](https://github.com/ethereum/execution-spec-tests/pull/307)). ### 🔧 EVM Tools - ✨ Run geth's `evm blocktest` command to verify JSON fixtures after test case execution (`--verify-fixtures`) ([#325](https://github.com/ethereum/execution-spec-tests/pull/325)). - ✨ Enable tracing support for `ethereum-spec-evm` ([#289](https://github.com/ethereum/execution-spec-tests/pull/289)). ### 📋 Misc - ✨ Tooling: Add Python 3.12 support ([#309](https://github.com/ethereum/execution-spec-tests/pull/309)). - ✨ Process: Added a Github pull request template ([#308](https://github.com/ethereum/execution-spec-tests/pull/308)). - ✨ Docs: Changelog updated post release ([#321](https://github.com/ethereum/execution-spec-tests/pull/321)). - ✨ Docs: Add [a section explaining execution-spec-tests release artifacts](https://eest.ethereum.org/v4.1.0/consuming_tests/) ([#334](https://github.com/ethereum/execution-spec-tests/pull/334)). - 🔀 T8N Tool: Branch used to generate the tests for Cancun is now [lightclient/go-ethereum@devnet-10](https://github.com/lightclient/go-ethereum/tree/devnet-10) ([#336](https://github.com/ethereum/execution-spec-tests/pull/336)). ### 💥 Breaking Change - Fixtures now use the Mainnet Trusted Setup merged on [consensus-specs#3521](https://github.com/ethereum/consensus-specs/pull/3521) ([#336](https://github.com/ethereum/execution-spec-tests/pull/336)). ## [v1.0.5](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.5) - 2023-09-26: 🐍🏖️ Cancun Devnet 9 Release 3 This release mainly serves to update the EIP-4788 beacon roots address to `0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02`, as updated in [ethereum/EIPs/pull/7672](https://github.com/ethereum/EIPs/pull/7672). ### 🧪 Test Cases - 🐞 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Fix invalid blob txs pre-Cancun engine response ([#306](https://github.com/ethereum/execution-spec-tests/pull/306)). - ✨ [EIP-4788](https://eips.ethereum.org/EIPS/eip-4788): Final update to the beacon root address ([#312](https://github.com/ethereum/execution-spec-tests/pull/312)). ### 📋 Misc - ✨ Docs: Changelog added ([#305](https://github.com/ethereum/execution-spec-tests/pull/305)). - ✨ CI/CD: Run development fork tests in Github Actions ([#302](https://github.com/ethereum/execution-spec-tests/pull/302)). - ✨ CI/CD: Generate test JSON fixtures on push ([#303](https://github.com/ethereum/execution-spec-tests/pull/303)). ### 💥 Breaking Change Please use development fixtures from now on when testing Cancun. These refer to changes that are currently under development within clients: - fixtures: All tests until the last stable fork (Shanghai). - fixtures_develop: All tests until the last development fork (Cancun). - fixtures_hive: All tests until the last stable fork (Shanghai) in hive format (Engine API directives instead of the usual BlockchainTest format). - fixtures_develop_hive: All tests until the last development fork (Cancun) in hive format. ## [v1.0.4](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.4) - 2023-09-21: 🐍 Cancun Devnet 9 Release 2 This release adds additional coverage to the current set of Cancun tests, up to the [Devnet-9 Cancun specification](https://notes.ethereum.org/@ethpandaops/dencun-devnet-9). **Note:** Additional EIP-4788 updates from [ethereum/EIPs/pull/7672](https://github.com/ethereum/EIPs/pull/7672) will be included in the next release. ### 🧪 Test Cases - ✨ [EIP-7516: BLOBBASEFEE opcode](https://eips.ethereum.org/EIPS/eip-7516): Add first and comprehensive tests (@marioevz in [#294](https://github.com/ethereum/execution-spec-tests/pull/294)). - ✨ [EIP-4788: Beacon block root in the EVM](https://eips.ethereum.org/EIPS/eip-4788): Increase coverage (@spencer-tb in [#297](https://github.com/ethereum/execution-spec-tests/pull/297)). - 🐞 [EIP-1153: Transient storage opcodes](https://eips.ethereum.org/EIPS/eip-1153): Remove conftest '+1153' in network field (@spencer-tb in [#299](https://github.com/ethereum/execution-spec-tests/pull/299)). ### 🛠️ Framework - 🔀 [EIP-4788](https://eips.ethereum.org/EIPS/eip-4788): Beacon root contract is pre-deployed at `0xbEAC020008aFF7331c0A389CB2AAb67597567d7a` (@spencer-tb in [#297](https://github.com/ethereum/execution-spec-tests/pull/297)). - ✨ Deprecate empty accounts within framework (@spencer-tb in [#300](https://github.com/ethereum/execution-spec-tests/pull/300)). - ✨ Fixture generation split based on hive specificity (@spencer-tb in [#301](https://github.com/ethereum/execution-spec-tests/pull/301)). - 💥 `fill`: `--disable-hive` flag removed; replaced by `--enable-hive` (@spencer-tb in [#301](https://github.com/ethereum/execution-spec-tests/pull/301)). - ✨ Add engine API forkchoice updated information in fixtures (@spencer-tb in [#256](https://github.com/ethereum/execution-spec-tests/pull/256)). ## [v1.0.3](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.3) - 2023-09-14: 🐍 Cancun Devnet 9 Release See [v1.0.3](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.3). ## [v1.0.2](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.2) - 2023-08-11: 🐍 Cancun Devnet 8 + 4788 v2 Pre-Release See [v1.0.2](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.2). ## [v1.0.1](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.1) - 2023-08-03: 🐍 Cancun Devnet-8 Pre-Release See [v1.0.1](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.1). ## [v1.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.0) - 2023-06-27: 🧪 Welcome to the Pytest Era See [v1.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.0). Older releases can be found on [the releases page](https://github.com/ethereum/execution-spec-tests/releases). ================================================ FILE: docs/changelog_section_template.md ================================================ # Changelog Section Template The following can be copy-pasted into the `CHANGELOG.md` file for a new release. ## 🔜 [Unreleased] ### 💥 Breaking Change ### 🛠️ Framework #### `fill` #### `consume` ### 📋 Misc ### 🧪 Test Cases ================================================ FILE: docs/dev/coding_style.md ================================================ # Coding Style !!! warning "Documentation Moved" This documentation has been relocated to [Getting Started -> Code Standards](../getting_started/code_standards.md). Please use the new location for the most up-to-date information. ================================================ FILE: docs/dev/configurations.md ================================================ # Managing Configurations Configurations are managed by the `config` package. It provides both environment and application configurations. ```console . ├── src │ └── 📁 config [Application wide environment and configurations] │ ├── 📄 __init__.py │ ├── 📄 app.py [Configurations for application framework] │ ├── 📄 docs.py [Configurations for documentation] │ └── 📄 env.py [Exposes `env.yaml` to the application] └── 📄 env.yaml [Environment file (git ignored)] ``` ## Environment Configurations Application-wide [environment configuration](https://www.12factor.net/config), which varies across staging, production, and development environments are read from `env.yaml` in the project root. This file will not be tracked by git, making it safe for storing local secrets. To get started, run the command [eest make env](../library/cli/eest.md) cli to initialize your environment configuration. ### Usage #### 1. Generate env file Run the [`eest make env`](../library/cli/eest.md) cli tool. ```console uv run eest make env 🎉 Success! Config file created at: /env.yaml ``` which should generate an `env.yaml` in the project root. ```yaml remote_nodes: - name: mainnet_archive # Replace with your Ethereum RPC node URL node_url: http://example.com # Optional: Headers for RPC requests rpc_headers: client-secret: ``` #### 2. Import `EnvConfig` ```console from config import EnvConfig EnvConfig().remote_nodes[0].name 'mainnet_archive' ``` ## Application configuration Application configuration are pydantic classes. ```console from config import DocsConfig DocsConfig().TARGET_FORK 'Prague' ``` ================================================ FILE: docs/dev/deps_and_packaging.md ================================================ # EEST Dependency Management and Packaging EEST uses [`uv`](https://docs.astral.sh/uv/) to manage and pin its dependencies. A minimum version of `uv>=0.7.0` is required to ensure `uv` writes `uv.lock` files with consistent fields and formatting (see [ethereum/execution-spec-tests#1597](https://github.com/ethereum/execution-spec-tests/pull/1597)). ## Managing Dependencies We aim to provide specific [version specifiers](https://peps.python.org/pep-0440/#version-specifiers) for each of our direct and extra dependencies. !!! note "Packages should be managed via `uv`" Dependencies should be managed using `uv` on the command-line to ensure that version compatibility is ensured across all dependencies and that `uv.lock` is updated as required. The docs below cover common operations, see the `uv` [documentation on managing dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/#multiple-sources) for more information. !!! info "Separate PRs are preferred when managing dependencies" An upgrade of all pinned dependencies in `uv.lock` must be performed in a dedicated PR! For other dependency changes, they can be included in the PR that removed use of the library, for example. But if a version bump is made, without related source code changes, it should be done in a dedicated PR. This makes the change: - Easier to track. - Trivial to revert. ### Adding/modifying direct dependencies These are packages listed in the project's direct dependencies, i.e., in `pyproject.toml` `[project]` section: ```toml [project] ... dependencies = [ "click>=8.1.0,<9", ... "pytest-regex>=0.2.0,<0.3", ] ``` or, for source package dependencies (directly installed via a `git+` specifier from Github), in the `[tool.uv.sources]` section: ```toml [tool.uv.sources] ethereum-spec-evm-resolver = { git = "https://github.com/petertdavies/ethereum-spec-evm-resolver", rev = \ ... ``` !!! example "Example: Updating direct dependencies" Example of a package dependency update: ```console uv add "requests>=2.31,<2.33" ``` Example of a source dependency update: ```console uv add "ethereum-spec-evm-resolver @ git+https://github.com/petertdavies/ethereum-spec-evm-resolver@623ac4565025e72b65f45b926da2a3552041b469" ``` ### Adding/modifying optional dependencies The package versions in the optional "extra" groups should also be managed via uv on the command-line These are the: `lint`, `docs`, `test` optional groups defined in the `pyproject.toml`: ```toml [project.optional-dependencies] test = ["pytest-cov>=4.1.0,<5"] lint = [ "ruff==0.9.4", "mypy>=1.15.0,<1.16", "types-requests>=2.31,<2.33", ] docs = [ ... ] ``` !!! example "Example: Updating an optional dependency" ``` uv add --optional lint "types-requests>=2.31,<2.33" ``` ## Upgrading Pinned Dependencies in `uv.lock` To upgrade all pinned dependencies in `uv.lock` to the latest version permitted by EEST's `project.toml` version specifiers run: ```console uv lock --upgrade ``` Project-wide dependency upgrades must be made via a dedicated PR! To upgrade a single package run: ```console uv lock --upgrade-package ``` See [Locking and Syncing](https://docs.astral.sh/uv/concepts/projects/sync/#upgrading-locked-package-versions) in the `uv` docs for more information. ================================================ FILE: docs/dev/docs.md ================================================ # Documentation The `execution-spec-tests` documentation is generated via [`mkdocs`](https://www.mkdocs.org/) and hosted remotely on Github Pages at [eest.ethereum.org](https://eest.ethereum.org/). ## Prerequisites ```console uv sync --all-extras ``` ## Build and Verify the Documentation One time build in strict mode: ```console uv run mkdocs build --strict ``` Perform all docs related checks via `tox` in parallel: ```console uvx --with=tox-uv tox -e spellcheck,markdownlint,mkdocs --parallel ``` ### Local Deployment and Test This runs continually: Deploys the site locally and re-generates the site upon modifications to `docs/**/*.md` or `tests/**/*.py`: ```console uv run mkdocs serve ``` For more help (including ensuring a clean build), see the `gen_test_doc` pytest plugin's documentation: ::: src.pytest_plugins.filler.gen_test_doc.gen_test_doc options: members: no ## Remote Deployment and Versioning The execution-specs-test docs are hosted using Github pages at [eest.ethereum.org](https://eest.ethereum.org/). Versions are updated/deployed automatically as part of Github Actions, but this can also be performed on the command-line. Our mkdocs configuration uses [mike](https://github.com/jimporter/mike) as a version provider. All deployments should be made via `mike` (whether as part of CI/CD or executed locally). The deployed versions of the docs managed via `mike` are kept in the [gh-pages](https://github.com/ethereum/execution-spec-tests/tree/gh-pages) branch. When you run `mike` it commits to this branch and optionally pushes the changes directly to remote. ### Aliases We currently have two aliases (which both point to `main` as of [#998](https://github.com/ethereum/execution-spec-tests/pull/998)): - [`latest`](https://eest.ethereum.org/latest): the current state of the main branch. - [`development`](https://eest.ethereum.org/development): the current state of the main branch. These aliases point to specific versions, as configured below. It's possible to share links containing either of these aliases or to specific versions, i.e, the following are all valid links: - https://eest.ethereum.org/ (redirects to latest/main) - https://eest.ethereum.org/latest (redirects to main) - https://eest.ethereum.org/development (redirects main) - https://eest.ethereum.org/main - https://eest.ethereum.org/v1.0.0 ### CI/CD: Doc Deployment via Github Actions There are two workflows that automatically deploy updated/new versions of the docs: | Workflow `yaml` File | What | When | |----------------------|------|------| | `docs_main.yaml` | Update "main" version of docs | Push to 'main' branch, (e.g., on PR merge) | | `docs_tags.yaml` | Deploy new version of docs; tag is used as version name | Upon creating a tag matching `v*` | ### Build and Deployment (without alias update) Build a new version and deploy it to remote (this version will then show up in the version selector list): ```console uv run mike deploy -rebase --push v1.2.3 ``` !!! note "Local deployment" If you deploy locally, the documentation will be built with any changes made in your local repository. Check out the tag to deploy tagged versions. ### Build, Deploy and Update the Alias Build, deploy and update the version an alias points to with: ```console uv run mike deploy --rebase --push --update-aliases v1.2.3 latest ``` where `v1.2.3` indicates the version's name and `development` is the alias. This will overwrite the version if it already exists. !!! note "Updating the 'main' version locally" "main" is just a version name (intended to reflect that it is build from the main branch). However, `mike` will build the docs site from the current local repository state (including local modifications). Therefore, make sure you're on the HEAD of the main branch before executing (unless you know what you're doing :wink:)! ```console uv run mike deploy --rebase --push main ``` If the alias accidentally go change: ```console uv run mike deploy --rebase --push --update-aliases main development ``` ### Viewing and Deleting Versions List versions: ```console uv run mike list ``` Delete a version: ```console uv run mike delete v1.2.3a1-eof ``` ### Set Default Version Set the default version of the docs to open upon loading the page: ```console uv run mike set-default --push latest ``` Typically, this must only be executed once for a repo. ## Implementation ### Plugins The documentation flow uses `mkdocs` and the following additional plugins: - [mkdocs](https://www.mkdocs.org/): The main doc generation tool. - [mkdocs-material](https://squidfunk.github.io/mkdocs-material): Provides many additional features and styling for mkdocs. - [mkdocstrings](https://mkdocstrings.github.io/) and [mkdocstrings-python](https://mkdocstrings.github.io/python/): To generate documentation from Python docstrings. - [mkdocs-gen-files](https://oprypin.github.io/mkdocs-gen-files): To generate markdown files automatically for each test case Python module. See [this page](https://mkdocstrings.github.io/crystal/quickstart/migrate.html) for example usage. This plugin is used to [programmatically generate the nav section](https://oprypin.github.io/mkdocs-gen-files/extras.html) for the generated test case reference documentation. - [mkdocs-literate-nav](https://oprypin.github.io/mkdocs-literate-nav/index.html): Is used to define the navigation layout for non-generated content and was created to work well with `mkdocs-gen-files` to add nav content for generated content. - @blueswen/mkdocs-glightbox - for improved image and inline content display. ### The "Test Case Reference" Section This section is auto-generated via a combination of: 1. [mkdocstrings](https://mkdocstrings.github.io/) and [mkdocstrings-python](https://mkdocstrings.github.io/python/), 2. [mkdocs-gen-files](https://oprypin.github.io/mkdocs-gen-files), 3. [mkdocs-literate-nav](https://oprypin.github.io/mkdocs-literate-nav/index.html). It auto-generates a sequence of nested pages (with nav entries) of all python modules detected under `./tests`. Each page contains a stub to the doc generated by mkdocstrings from the module's docstrings and source code. The mkdocs-gen-files and mkdocs-literate-nav plugins were created exactly for [this purpose](https://mkdocstrings.github.io/crystal/quickstart/migrate.html). No action is necessary if a new test directory or module is added to `./tests`, it will be picked up automatically. !!! info "Working with generated content" The files in the `./tests` directory are watched by `mkdocs serve`. Run `mkdocs serve` and edit the source docstrings: The browser will reload with the new content automatically. ### Navigation All pages that are to be included in the documentation and the navigation bar must be included in `navigation.md`, except "Test Case Reference" entries. This is enabled by [mkdocs-literate-nav](https://oprypin.github.io/mkdocs-literate-nav/index.html). The nav entries for the automatically generated "Test Case Reference" section are generated in [mkdocs-gen-files](https://oprypin.github.io/mkdocs-gen-files) and appended to `navigation.md`. !!! info "Current nav ordering limitations" The "Test Case Reference" section must currently be the last section in the nav. This is because our mkdocs flow: 1. Reads `navigation.md`. 2. Generates the Test Case Reference documentation and appends the Test Case Reference entries to `navigation.md` 3. Generates the nav. If necessary, we could probably split `navigation.md` into two files - `navigation-pre-test-case-reference.md`, - `navigation-post-test-case-reference.md`, and create an arbitrary ordering in the Test Case Reference doc gen script. But this is untested. ## Read the Docs Originally, before June 2023, documentation was hosted at readthedocs.io. Currently, this page no longer exists (execution-spec-tests.readthedocs.io). ================================================ FILE: docs/dev/documenting_clis.md ================================================ # Documenting CLIs EEST command line interfaces (CLIs) are documented using the [`click`](https://click.palletsprojects.com) library's built-in help system and the [`mkdocs-click`](https://github.com/mkdocs/mkdocs-click) extension for mkdocs. This allows generation of CLI documentation directly from the (click) source code, ensuring that the documentation is always up-to-date with the code. Current limitations: 1. `mkdocs serve` does not automatically update the CLI documentation when the source code changes. You must restart the server to see the changes. 2. `mkdocs-click` does not automatically generate a short help string from sub-command docstrings. You must provide a short help string for each sub-command in the source code with `@click.command(short_help="...")`. See the [markdown](https://github.com/ethereum/execution-spec-tests/blob/main/docs/library/cli/evm_bytes.md) and corresponding [Python docstrings](https://github.com/ethereum/execution-spec-tests/blob/main/src/cli/evm_bytes.py) for the [`evm_bytes` CLI documentation](../library/cli/evm_bytes.md) as an example of how to document a CLI using `mkdocs-click`. ================================================ FILE: docs/dev/index.md ================================================ # Developer Documentation This documentation is aimed at `execution-spec-tests` developers: - [Managing configurations](./configurations.md): Instructions for setting up and modifying test configurations. - [Interactive usage](./interactive_usage.md): Guide on interactive use of EEST packages using `ipython`. - [Documenting CLI commands](./documenting_clis.md): Instructions for documenting command line interfaces (CLIs). - [Coding style](./coding_style.md): Standards and best practices for code formatting and to maintain consistency across the repository. - [Logging](./logging.md): Documentation on using the custom logging system with enhanced features. - [Enabling pre-commit checks](./precommit.md): A guide for setting up pre-commit hooks to enforce code quality before commits. - [Running github actions locally](./test_actions_locally.md): Instructions for testing GitHub Actions workflows on your local machine to streamline development and debugging. These sections are primarily aimed at `execution-spec-tests` maintainers: - [Generating documentation](./docs.md): Steps to create and build documentation and manage documentation versions. - [Managing dependencies and packaging](./deps_and_packaging.md): How to update EEST dependencies. ================================================ FILE: docs/dev/interactive_usage.md ================================================ # Working with EEST Libraries Interactively You can work with EEST Python packages interactively with `ipython` using: ```console uvx --with-editable . ipython ``` This command will create a virtual environment, install EEST's packages in "[editable mode](https://setuptools.pypa.io/en/latest/userguide/development_mode.html)" (source changes get reflected in the interactive shell), and start an `ipython` shell. You can then import any of the packages and experiment with them interactively. !!! example "Example: Working with `ethereum_test_forks`" See which defined forks are "ignored" by default: ```python from ethereum_test_forks import forks, get_forks forks = set([fork for fork in get_forks() if fork.ignore()]) print(forks) # -> {MuirGlacier, ArrowGlacier, GrayGlacier} ``` ## Required `ipython` Configuration To enable [autoreload](https://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html) of changed modules in the current `ipython` session, type: ```python %load_ext autoreload %autoreload 2 ``` To make this configuration persistent, add/uncomment the following lines to `~/.ipython/profile_default/ipython_config.py`: ```python c.InteractiveShellApp.exec_lines = ["%autoreload 2"] c.InteractiveShellApp.extensions = ["autoreload"] ``` ================================================ FILE: docs/dev/logging.md ================================================ # Logging This document describes the logging system used in the Ethereum Execution Spec Tests project. Currently, logging is only supported for `consume` commands. ## Overview The project uses Python's standard logging module with custom extensions to provide enhanced logging capabilities. Our logging system is implemented in the `src/pytest_plugins/logging.py` module and provides the following features: - Custom log levels between the standard Python log levels - Timestamps with millisecond precision in UTC - Color-coded log output (when not running in Docker) - File logging with a consistent naming pattern - Integration with pytest's output capture - Support for distributed test execution with pytest-xdist ## Custom Log Levels In addition to the standard Python log levels (DEBUG, INFO, WARNING, ERROR, CRITICAL), we've added the following custom levels: | Level | Numeric Value | Purpose | |-------|--------------|---------| | VERBOSE | 15 | For messages more detailed than INFO but less verbose than DEBUG | | FAIL | 35 | For test failures and related issues (between WARNING and ERROR) | ## Using the Logger ### Getting a Logger To use the custom logger in your code, import the `get_logger` function from the logging module: ```python from pytest_plugins.logging import get_logger # Create a logger with your module's name logger = get_logger(__name__) ``` ### Logging at Different Levels You can use all standard Python log methods plus our custom methods: ```python # Standard log levels logger.debug("Detailed debug information") logger.info("General information") logger.warning("Warning message") logger.error("Error message") logger.critical("Critical failure") # Custom log levels logger.verbose("More detailed than INFO, less than DEBUG") logger.fail("Test failure or similar issue") ``` ### When to Use Each Level - **DEBUG (10)**: For very detailed diagnostic information useful for debugging - **VERBOSE (15)**: For information that's useful during development but more detailed than INFO - **INFO (20)**: For general information about program operation - **WARNING (30)**: For potential issues that don't prevent program execution - **FAIL (35)**: For test failures and related issues - **ERROR (40)**: For errors that prevent an operation from completing - **CRITICAL (50)**: For critical errors that may prevent the program from continuing ## Configuration ### Setting Log Level on the Command Line You can adjust the log level when running pytest with the `--eest-log-level` option: ```bash consume engine --input=latest@stable --eest-log-level=VERBOSE -s --sim.limit=".*chainid.*" ``` The argument accepts both log level names (e.g., "DEBUG", "VERBOSE", "INFO") and numeric values. Adding pytest's `-s` flag writes the logging messages to the terminal; otherwise output will be written to the log file that is reported in the test session header at the end of the test session. ### Log File Output Log files are automatically created in the `logs/` directory with a naming pattern that includes: - The command name, e.g. `consume`, - An optional subcommand (e.g., `engine`), - A timestamp in UTC, - The worker ID (when using pytest-xdist). Example: `consume-engine-20240101-123456-main.log` The log file path is displayed in the pytest header and summary. ### Using the Standalone Configuration in Non-Pytest Projects The logging module can also be used in non-pytest projects by using the `configure_logging` function: ```python from pytest_plugins.logging import configure_logging, get_logger # Configure logging with custom settings configure_logging( log_level="VERBOSE", log_file="my_application.log", log_to_stdout=True, log_format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", use_color=True ) # Get a logger and use it logger = get_logger(__name__) logger.verbose("Logging configured in standalone application!") ``` The `configure_logging` function accepts the following parameters: - `log_level`: A string or numeric log level (default: "INFO") - `log_file`: Path to a log file, or None to disable file logging (default: None) - `log_to_stdout`: Whether to log to stdout (default: True) - `log_format`: The format string for log messages (default: "%(asctime)s [%(levelname)s] %(name)s: %(message)s") - `use_color`: Whether to use colors in stdout output, or None to auto-detect (default: None) ## Implementation Details ### The EESTLogger Class The `EESTLogger` class extends Python's `Logger` class to add the custom log methods. The main module logger is automatically configured to use this class. ### Formatters Two formatter classes are available: - `UTCFormatter`: Formats timestamps with millisecond precision in UTC - `ColorFormatter`: Extends `UTCFormatter` to add ANSI colors to log level names in terminal output ### Pytest and Hive Integration The logging module includes several pytest hooks to: - Configure logging at the start of a test session - Record logs during test execution - Display the log file path in the test report - Ensure logs are captured properly during fixture teardown The `hive_pytest` plugin has been extended to propagate the logs to the `hiveview` UI via the test case's `details` ("description" in `hiveview`). ## Example Usage A complete example of using the logging system in a `consume` test (or plugin): ```python from pytest_plugins.logging import get_logger # Get a properly typed logger for your module logger = get_logger(__name__) def test_something(): # Use standard log levels logger.debug("Setting up test variables") logger.info("Starting test") # Use custom log levels logger.verbose("Additional details about test execution") # Log warnings or errors as needed if something_concerning: logger.warning("Something looks suspicious") if something_failed: logger.fail("Test condition not met") assert False, "Test failed" # Log successful completion logger.info("Test completed successfully") ``` All log messages will be displayed according to the configured log level and captured in the log file. ================================================ FILE: docs/dev/precommit.md ================================================ # Enabling Pre-Commit Checks There's a [pre-commit](https://pre-commit.com/) config file available in the repository root (`.pre-commit-config.yaml`) that can be used to enable automatic checks upon commit - the commit will not go through if the checks don't pass. To enable pre-commit, the following must be run once: ```console uvx pre-commit install ``` !!! note "Bypassing pre-commit checks" Enabling of pre-commit checks is not mandatory (it cannot be enforced) and even if it is enabled, it can always be bypassed with: ```console git commit --no-verify ``` ================================================ FILE: docs/dev/test_actions_locally.md ================================================ # Running Github Actions Locally The Github Actions workflows can be tested locally using [nektos/act](https://github.com/nektos/act) without pushing changes to the remote. The local repository state will be used in the executed workflow. ## Prerequisites 1. A docker installation without `sudo` prefix requirement ([see also dockerdocs](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)): ```bash sudo usermod -aG docker $USER ``` 2. Install the Github CLI (`gh`): [linux](https://github.com/cli/cli/blob/trunk/docs/install_linux.md), [macos](https://github.com/cli/cli/tree/trunk?tab=readme-ov-file#macos). 3. Authenticate your Github account with the Github CLI: ```bash gh auth login ``` This is required to set `GITHUB_TOKEN` to the output of `gh auth token` when running the workflows. 4. Install the `act` tool as a Github extension ([nektos/act docs](https://nektosact.com/installation/gh.html)): ```bash gh extension install https://github.com/nektos/gh-act ``` or use one of the [other available methods](https://nektosact.com/installation/index.html). !!! note "Updating nektos/act to the latest version via the Github CLI" The `act` tool can be updated via the Github CLI: ```bash gh extension upgrade nektos/act ``` ## Listing the Available Workflows ```bash gh act --list ``` will output something similar to: ```bash INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock' Stage Job ID Job name Workflow name Workflow file Events 0 evmone-coverage-diff evmone-coverage-diff Evmone Coverage Report coverage.yaml pull_request 0 deploy deploy Deploy Docs Main docs_main.yaml push 0 deploy deploy Deploy Docs Tags docs_tags.yaml push 0 features features Build and Package Fixtures fixtures.yaml push,workflow_dispatch 0 feature-names feature-names Build and Package Fixtures for a feature fixtures_feature.yaml push,workflow_dispatch 0 lint Lint python sources with ruff Tox tox_verify.yaml push,pull_request,workflow_dispatch 0 typecheck Typecheck python sources with mypy Tox tox_verify.yaml push,pull_request,workflow_dispatch 0 spellcheck Spellcheck sources with pyspelling Tox tox_verify.yaml push,pull_request,workflow_dispatch 0 markdownlint Lint markdown files with markdownlint Tox tox_verify.yaml push,pull_request,workflow_dispatch 0 mkdocs Build html documentation with mkdocs Tox tox_verify.yaml push,pull_request,workflow_dispatch 0 pytest_framework Run unit tests, ${{ matrix.os }}, ${{ matrix.python }} Tox tox_verify.yaml push,pull_request,workflow_dispatch 0 tests_deployed Fill tests, deployed, ${{ matrix.os }}, ${{ matrix.python }} Tox tox_verify.yaml push,pull_request,workflow_dispatch 1 build build Build and Package Fixtures fixtures.yaml push,workflow_dispatch 1 build build Build and Package Fixtures for a feature fixtures_feature.yaml push,workflow_dispatch 2 release release Build and Package Fixtures fixtures.yaml push,workflow_dispatch 2 release release Build and Package Fixtures for a feature fixtures_feature.yaml push,workflow_dispatch ``` The `Job ID` is required to run a specific workflow and is provided to the `-j` option of `gh act`. ### Running Workflows that require Github Vars Create a text file containing the required variables and variables, e.g., `.act_github_vars` (this is in `.gitignore`): ```text UV_VERSION=0.5.15 DEFAULT_PYTHON_VERSION=3.12 ``` and use the `--var-file` option to specify the file: ```bash gh act --workflows .github/workflows/tox_verify.yaml -s GITHUB_TOKEN=$(gh auth token) --var-file=gh_vars.txt -j lint ``` ### Running Workflows that use a Matrix Strategy This is optional, recent versions will automatically detect the matrix strategy and run supported values. To run a specific matrix value, use the `--matrix` option: ```bash gh act --workflows .github/workflows/tox_verify.yaml -s GITHUB_TOKEN=$(gh auth token) --matrix python:3.12 -j pytest_framework ``` ### Running Release Workflows Release builds require the `ref` input to be specified. To test a release build locally: 1. Create a JSON file specifying the input data required for a release build (the release tag), e.g, `event.json`: ```json { "ref": "refs/tags/stable@v4.2.0" } ``` 2. Run `act` and specify the workflow file, the Github token, and the event file: ```bash gh act -j build --workflows .github/workflows/fixtures_feature.yaml -s GITHUB_TOKEN=$(gh auth token) -e event.json ``` ### Manually Specifying the Docker Image It's possible to specify the Docker image used by the `act` tool for a specific platform defined in a workflow using the `-P` (`--platform`) option. For example, use map `ubuntu-latest` in the workflow to use `ubuntu-24.04`: ```bash -P ubuntu-latest=ubuntu:24.04 ``` This can be added to any `gh act` command. ================================================ FILE: docs/filling_tests/debugging_t8n_tools.md ================================================ # Debugging Transition Tools There are two flags that can help debugging `t8n` tools or the execution-spec-tests framework: 1. `--evm-dump-dir`: Write debug information from `t8n` tool calls to the specified directory. 2. `--traces`: Collect traces of the execution from the transition tool. 3. `--verify-fixtures`: Run go-ethereum's `evm blocktest` command to verify the generated test fixtures. ## EVM Dump Directory The `--evm-dump-dir` flag tells the framework to write the inputs and outputs of every call made to the `t8n` command to the specified output directory. The aim is to help debugging or simply understand how a test is interacting with the EVM. Debug output is only generated when this flag is explicitly specified. Each test case receives its own sub-directory under the `--evm-dump-dir` that contains these files which can be easily accessed from the HTML test report generated by `fill` (located by default in the root of the `--output` directory).
![HTML Report Summary](./img/evm_dump_dir_in_html_report.png){width=auto align=center}
In particular, a script `t8n.sh` is generated for each call to the `t8n` command which can be used to reproduce the call to trigger errors or attach a debugger without the need to execute Python. For example, running: ```console fill tests/berlin/eip2930_access_list/ --fork Berlin -m blockchain_test \ --evm-dump-dir=/tmp/evm-dump --traces ``` will produce the directory structure: ```text 📂 /tmp/evm-dump └── 📂 berlin__eip2930_access_list__test_acl__test_access_list └── 📂 fork_Berlin_blockchain_test └── 📂 0    ├── 📄 args.py    ├── 📂 input    │   ├── 📄 alloc.json    │   ├── 📄 env.json    │   └── 📄 txs.json    ├── 📂 output    │   ├── 📄 alloc.json    │   ├── 📄 result.json    │   └── 📄 txs.rlp    ├── 📄 returncode.txt    ├── 📄 stderr.txt    ├── 📄 stdin.txt    ├── 📄 stdout.txt    ├── 📄 t8n.sh └── 📄 trace-0-0x5c4f07ce52f0a276a06aabdfff16cc693b5e007c018f9a42431e68200e2da515.jsonl ``` where the directory `0` is the starting index of the different calls made to the `t8n` tool executed during the test, and since the test only contains one block, there is only one directory present. Note, there may be more directories present `1`, `2`, `3`,... if the test executes more blocks. Each directory contains files containing information corresponding to the call, for example, the `args.py` file contains the arguments passed to the `t8n` command and the `output/alloc.json` file contains the output of the `t8n` command's `--output-alloc` flag. ### The `t8n.sh` Script The `t8n.sh` script written to the debug directory can be used to reproduce a specific call made to the `t8n` command during the test session. For example, if a Besu `t8n-server` has been started on port `3001`, the request made by the test for first block can be reproduced as: ```console /tmp/besu/test_access_list_fork_Berlin/0/t8n.sh 3001 ``` which writes the response the from the `t8n-server` to the console output: ```json { "alloc" : { "0x000000000000000000000000000000000000aaaa" : { "code" : "0x5854505854", "balance" : "0x4", "nonce" : "0x1" }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "balance" : "0x1bc16d674ecb26ce" }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x2cd931", "nonce" : "0x1" } }, "body" : "0xf8a0b89e01f89b0180078304ef0094000000000000000000000000000000000000aaaa0180f838f7940000000000000000000000000000000000000000e1a0000000000000000000000000000000000000000000000000000000000000000001a02e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4a03be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3", "result" : { "stateRoot" : "0x51799508f764047aee6606bc6a00863856f83ee5b91555f00c8a3cbdfbec5acb", ... ... } } ``` The `t8n.sh` is written to the debug directory for all [supported t8n tools](./transition_tool_support.md). ## Verifying Test Fixtures via `evm blocktest` The `--verify-fixtures` flag can be used to run go-ethereum's `evm blocktest` command in order to verify the generated JSON test fixtures. For example, running: ```console fill tests/berlin/eip2930_access_list/ --fork Berlin -m blockchain_test \ --evm-dump-dir==/tmp/evm-dump \ --evm-bin=../evmone/build/bin/evmone-t8n \ --verify-fixtures-bin=../go-ethereum/build/bin/evm \ --verify-fixtures ``` will additionally run the `evm blocktest` command on every JSON fixture file and write its output to the EVM dump directory: ```text 📂 /tmp/evm-dump └── 📂 berlin__eip2930_access_list__test_acl__test_access_list ├── 📄 fixtures.json ├── 📂 fork_Berlin_blockchain_test │   ├── 📂 0 │   │   ├── 📄 args.py │   │   ├── 📂 input │   │   │   ├── 📄 alloc.json │   │   │   ├── 📄 env.json │   │   │   └── 📄 txs.json │   │   ├── 📂 output │   │   │   ├── 📄 alloc.json │ ... ... ... │ ├── 📄 verify_fixtures_args.py ├── 📄 verify_fixtures_returncode.txt ├── 📄 verify_fixtures.sh ├── 📄 verify_fixtures_stderr.txt └── 📄 verify_fixtures_stdout.txt ``` where the `verify_fixtures.sh` script can be used to reproduce the `evm blocktest` command. ### Further `--verify-fixtures` Examples 1. No fixture verification performed: ```console fill ``` 2. Verify fixtures: Use the first `evm` binary in the `PATH` to execute both the `t8n` and `blocktest` commands (i.e., same binary used; this must be a geth binary): ```console fill --verify-fixtures ``` 3. Explicitly specify the evm binary to execute the `blocktest` command (the first evm binary in the `PATH` is used for `t8n` commands; `--verify-fixtures` is not necessary): ```console fill --verify-fixtures-bin=../go-ethereum/build/bin/evm ``` 4. Explicitly set two different `evm` binaries to execute the `t8n` and `blocktest` commands; write debug data to the specified `--evm-dump-dir`: ```console fill --evm-bin=../evmone/build/bin/evmone-t8n \ --verify-fixtures-bin=../go-ethereum/build/bin/evm \ --evm-dump-dir=/tmp/evm-dump ``` 5. Additionally use `--single-fixture-per-file` to improve the granularity of the reporting of the `evm blocktest` command by writing the fixture generated by each parametrized test case to its own file. ```console fill --evm-bin=../evmone/build/bin/evmone-t8n \ --verify-fixtures-bin=../go-ethereum/build/bin/evm \ --evm-dump-dir=/tmp/evm-dump \ --single-fixture-per-file ``` !!! note "Execution scope of `evm blocktest`" Note, by default, that `evm blocktest` is not executed per parametrized test case, but rather per test function. This is because each fixture JSON file contains fixtures for all the parametrized test cases for one test function. This means only one error will be reported, even if multiple fixtures fail within one fixture file. Additionally, it is only executed after all the test cases in the module have been executed[^1] and will only report the first failing test fixture in all files, even if there are multiple failing fixture files. This means, by default, that the feedback is not as granular as for test case execution. To improve granularity, and get feedback per parametrized test case use `--single-fixture-per-file`. [^1]: This limitation is required to enable support of the [`pytest-xdist` plugin](https://github.com/pytest-dev/pytest-xdist) for concurrent test execution across multiple CPUs. To achieve this we use the we apply the `--dist loadscope` xdist flag in our `pytest-fill.ini`. ================================================ FILE: docs/filling_tests/filling_tests_command_line.md ================================================ # Filling Tests at a Prompt The execution-spec-tests test framework uses the [pytest framework](https://docs.pytest.org/en/latest/) for test case collection and execution. The `fill` command is essentially an alias for `pytest`, which uses several [custom pytest plugins](../library/pytest_plugins/index.md) to run transition tools against test cases and generate JSON fixtures. !!! note "Options specific to execution-spec-tests" The command-line options specific to filling tests can be listed via: ```console uv run fill --help ``` See [Custom `fill` Command-Line Options](#custom-fill-command-line-options) for all options. ## Collection - Test Exploration The test cases implemented in the `./tests` sub-directory can be listed in the console using: ```console uv run fill --collect-only ``` and can be filtered (by test path, function and parameter substring): ```console uv run fill --collect-only -k warm_coinbase ``` Docstrings are additionally displayed when ran verbosely: ```console uv run fill --collect-only -k warm_coinbase -vv ``` ## Execution By default, test cases are filled for all forks already deployed to mainnet, but not for forks still under active development, i.e., as of time of writing, Q2 2023: ```console uv run fill ``` will generate fixtures for test cases from Frontier to Shanghai. To generate all the test fixtures defined in the `./tests/shanghai` sub-directory and write them to the `./fixtures-shanghai` directory, run `fill` in the top-level directory as: ```console uv run fill ./tests/shanghai --output="fixtures-shanghai" ``` !!! note "Test case verification" Note, that the (limited set of) test `post` conditions are tested against the output of the `evm t8n` command during test generation. To generate all the test fixtures in the `tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py` module, for example, run: ```console uv run fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py ``` To generate specific test fixtures from a specific test function or even test function and parameter set, obtain the corresponding test ID using: ```console uv run fill --collect-only -q -k test_warm_coinbase ``` This filters the tests by `test_warm_coinbase`. Then find the relevant test ID in the console output and provide it to fill, for example, for a test function: ```console uv run fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage ``` or, for a test function and specific parameter combination: ```console uv run fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-DELEGATECALL] ``` ## Execution for Development Forks !!! note "" By default, test cases are not filled for upcoming Ethereum forks so that they can be readily filled using the `evm` tool from the latest `geth` release. In order to fill test cases for an upcoming fork, ensure that the `evm` tool used supports that fork and features under test and use the `--until` or `--fork` flag. For example, as of Q2 2023, the current fork under active development is `Cancun`: ```console uv run fill --until Cancun ``` See: [Filling Tests for Features under Development](./filling_tests_dev_fork.md). ## Generating All Fixture Formats The `--generate-all-formats` flag enables generation of all fixture formats including the optimized `BlockchainEngineXFixture` in a single command: ```console uv run fill --generate-all-formats tests/shanghai/ ``` This flag automatically performs a two-phase execution: 1. **Phase 1**: Generates pre-allocation groups for optimization. 2. **Phase 2**: Generates all supported fixture formats (`StateFixture`, `BlockchainFixture`, `BlockchainEngineFixture`, `BlockchainEngineXFixture`, etc.). !!! tip "Automatic enabling with tarball output" When using tarball output (`.tar.gz` files), the `--generate-all-formats` flag is automatically enabled: ```console # Automatically enables --generate-all-formats due to .tar.gz output uv run fill --output=fixtures.tar.gz tests/shanghai/ # Equivalent to: uv run fill --generate-all-formats --output=fixtures.tar.gz tests/shanghai/ ``` !!! note "Alternative approach" You can still use the legacy approach, but this will only generate the `BlockchainEngineXFixture` format: ```console # Single command that automatically does 2-phase execution # but only generates BlockchainEngineXFixture uv run fill --generate-pre-alloc-groups tests/shanghai/ ``` ## Debugging the `t8n` Command The `--evm-dump-dir` flag can be used to dump the inputs and outputs of every call made to the `t8n` command for debugging purposes, see [Debugging Transition Tools](./debugging_t8n_tools.md). ## Watch Mode for Development !!! tip "Development workflow" Use `--watch` or `--watcherfall` during test development to get immediate feedback on your changes without manually re-running the fill command. ### Standard Watch Mode (`--watch`) This will: 1. Run the initial fill command. 2. Monitor all Python files in the `tests/` and `src/` directories for changes. 3. Automatically re-run the fill command when changes are detected. 4. Clear the screen and show which files changed. ```console uv run fill tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists.py --clean --until Amsterdam --watch ✓ Fill completed Watching for changes... ``` ### Watcherfall Watch Mode (`--watcherfall`) !!! info "Watcherfall mode" A verbose mode; like watch but the logs keep flowing - perfect when you want to see the full history of runs without clearing the terminal. Same as `--watch` but without clearing the terminal between runs, so you can see the full output history: ```console uv run fill tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists.py --clean --until Amsterdam --watcherfall Starting watcherfall mode (verbose)... ✓ Fill completed Watching for changes... File changes detected, re-running... ✓ Fill completed Watching for changes... ``` Exit either watch mode with Ctrl+C ## Other Useful Pytest Command-Line Options ```console uv run fill -vv # More verbose output uv run fill -x # Exit instantly on first error or failed test case uv run fill --pdb -nauto # Drop into the debugger upon error in a test case uv run fill -s # Print stdout from tests to the console during execution ``` ## Custom `fill` Command-Line Options To see all the options available to fill, including pytest and pytest plugin options, use `--pytest-help`. To list the options that only specific to fill, use: ```console uv run fill --help ``` For a complete, up-to-date list of all command-line options, see the [Fill Command-Line Options](filling_tests_command_line_options.md) page, which is automatically generated from the current `uv run fill --help` output. ================================================ FILE: docs/filling_tests/filling_tests_dev_fork.md ================================================ # Filling Tests for Features under Development ## Requirements By default, execution-spec-tests only generates fixtures for forks that have been deployed to mainnet. In order to generate fixtures for evm features that are actively under development: 1. A version of the `evm` and `solc` tools that implement the feature must be available (although, typically only a developer version of the `evm` tool is required, usually the latest stable release of `solc` is adequate), and, 2. The development fork to test must be explicitly specified on the command-line: === "via the `--fork` flag" ```console uv run fill -k 4844 --fork=Cancun -v ``` === "via the `--from` flag" ```console uv run fill -k 4844 --from=Cancun -v ``` === "via the `--until` flag" ```console uv run fill -k 4844 --until=Cancun -v ``` !!! note "Specifying the `evm` binary via `evm-bin`" It is possible to explicitly specify the `evm` binary used to generate fixtures via the `--evm-bin` flag, for example, ```console uv run fill --fork=Cancun --evm-bin=/opt/bin/evm -v ``` ## Further Help 1. [`geth`/`evm` build documentation](https://geth.ethereum.org/docs/getting-started/installing-geth#build-from-source). 2. [`solc` build documentation](https://docs.soliditylang.org/en/v0.8.20/installing-solidity.html#building-from-source). !!! note "Verifying `evm` and `solc` versions used" The versions used to generate fixtures are displayed in the console output:
![Screenshot of pytest test collection console output](./img/pytest_run_example.png){align=center}
## VS Code Setup By default, VS Code's Testing View will only show tests for stable forks. To show tests for development forks, uncomment the relevant line in the `python.testing.pytestArgs` configuration section of included settings file (`.vscode/settings.json`) to enable the `--until=FORK` flag. See [VS Code Setup](../getting_started/setup_vs_code.md) for help finding the settings files. ================================================ FILE: docs/filling_tests/filling_tests_vs_code.md ================================================ # Filling Tests in VS Code Prerequisite: [VS Code Setup](../getting_started/setup_vs_code.md). ## Exploring Test Cases Implemented test cases can be explored in VS Code's "Testing" View; click on the conical flask highlighted in the screenshot below.
![VS Code Testing Tab](./img/vs_code_exploring_tests.png){ width=auto align=center}
!!! note "Testing EVM Features Under Active Development" See [the VS Code section](./filling_tests_dev_fork.md#vs-code-setup) in [Filling Tests for Features under Development](./filling_tests_dev_fork.md) to explore tests targeting EVM features under development. ## Filling and Debugging Test Cases
![VS Code Testing Tab](./img/vs_code_executing_tests.png){ width=auto align=center}
================================================ FILE: docs/filling_tests/getting_started.md ================================================ # Getting Started: Filling Tests This guide describes how to get started with `fill` and commonly-used command-line options. 1. Explore test cases via `--collect-only` and search for test cases that combine `PUSH0` and `DELEGATECALL` in the EVM functionality introduced in the Shanghai hard fork: ```console uv run fill --collect-only -k "push0 and delegatecall" tests/shanghai/ ``` The `fill` command is based on [`pytest`](https://docs.pytest.org/en/stable/). The above command uses the [optional pytest arguments](https://docs.pytest.org/en/stable/how-to/usage.html): - `--collect-only` only collect test cases; don't execute them. - `-k ` filter test cases by their test case ID based on the given expression. - `tests/shanghai` the directory containing the test cases (tells `fill` to only discover test cases in this directory; default: `tests/`). Expected console output:
![Screenshot of pytest test collection console output](./img/pytest_collect_only.png){align=center}
2. Fill `state_test` fixtures for these test cases: ```console uv run fill -k "push0 and delegatecall" tests/shanghai/ -m state_test -v ``` where: - `-m state_test` only fills test cases marked as a `state_test` (see all available markers via `uv run fill --markers`). - `-v` enables verbose output. Expected console output:
![Screenshot of fill test collection console output](./img/pytest_run_example.png){align=center}
3. Verify the generated fixtures: a. Check the corresponding fixture file has been generated: ```console head fixtures/state_tests/shanghai/eip3855_push0/push0/push0_contract_during_call_contexts.json ``` b. Open the generated HTML test using the link provided at the bottom of the console output. This is written to the output directory at: ```console ./fixtures/.meta/report_fill.html ``` ## Next Steps 1. Learn [useful command-line flags](./filling_tests_command_line.md). 2. [Execute tests for features under development](./filling_tests_dev_fork.md) via the `--fork` flag. 3. _Optional:_ [Configure VS Code](../getting_started/setup_vs_code.md) to auto-format Python code and [execute tests within VS Code](./filling_tests_vs_code.md#filling-and-debugging-test-cases). 4. Implement a new test case, see [Writing Tests](../writing_tests/index.md). ================================================ FILE: docs/filling_tests/index.md ================================================ # Filling Tests Execution of test cases against clients is a two-step process: 1. JSON test fixtures are generated from the Python test cases found in `./tests` using `fill` and an EVM transition tool (`t8n`) implementation. 2. Clients "consume" the JSON fixtures via either a dedicated, client-specific interface or a testing environment such as Hive. The process of generating fixtures is often referred to as "filling" the tests. !!! note "The `execute` command" The `execute` command directly executes Python test cases against a client via its RPC without using generated JSON fixtures. For all other methods of testing clients, the JSON fixtures are required. For more information, see [Executing Tests](../running_tests/execute/index.md). ## Transition Tools (`t8n`) The `fill` command requires an EVM `t8n` tool provided by most clients in order to generate the JSON fixtures. The `t8n` tool is mainly responsible for calculating the post-state of the EVM after executing a transaction, most relevantly, it calculates the updated state root. ## Ethereum Execution Layer Specification (EELS) By default, the [Ethereum Execution Layer Specification](https://github.com/ethereum/execution-specs) (EELS) reference implementation of the `t8n` tool is used to generate test fixtures for all forks that have been deployed to Ethereum mainnet. We strong encourage EIP authors to provide a reference implementation of their EIP in EELS, so that it can be used to generate test fixtures for features under active development. ## Limitations of Filling The "fill-consume" method follows a differential testing approach: A reference implementation is used to generate JSON test fixtures, which can then be executed against other EVM clients. However: !!! warning "Successfully filling does not guarantee correctness" Some tests cases, particularly those without straightforward post-checks, such as certain gas calculations, may allow subtle inconsistencies to slip through during filling. **Consequently, filling the tests does not ensure the client’s correctness. Clients must consume the tests to be considered correctly tested, even if that client was used to fill the tests.** ## Filling Static Tests from [ethereum/tests](https://github.com/ethereum/tests) Filling static test fillers in YAML or JSON formats from [ethereum/tests](https://github.com/ethereum/tests/tree/develop/src) is possible by adding the `--fill-static-tests` to the `fill` command. This functionality is only available for backwards compatibility and copying legacy tests from the [ethereum/tests](https://github.com/ethereum/tests) repository into this one. Adding new static test fillers is otherwise not allowed. ================================================ FILE: docs/filling_tests/test_ids.md ================================================ # An explanation of test IDs generated by `fill` ## Test Case Organization Test cases are implemented in Python "modules", which are organized by folder, named after the fork where the feature-under-test was introduced, for example: - `tests/cancun/` contains tests for features added in the Cancun hardfork. - `tests/prague/` contains tests for features added in the Prague hardfork. ## Test ID generation A test ID is a string, generated by the test framework, that uniquely identifies a test case. It's format is: ```text ::[-...-` - the Python "module" (file) where the test is implemented `tests/istanbul/eip1344_chainid/test_chainid.py`, - `` - the Python test function: `test_chainid`, - `[-...-` parameter used to generate the test case in the test ID, e.g., `test_Cancun`. #### Transition Forks The test framework can also generate blockchain tests containing blocks that span a fork boundary, these test cases receive a special fork parameter name which contain both fork names and the timestamp at which the transition was made, e.g., `fork_CancunToPragueAtTime15k`. ### Parametrization by Test Type Each Python test case is also typically parametrized by test type, respectively fixture format. For example, if the test is implemented as a `state_test`, the test framework will additionally generate the following blockchain test fixtures (consisting of a single block with a single transaction): - a `blockchain_test` which can be tested via the Hive `eest/consume-rlp` simulator (or directly via a dedicated client interface). - a `blockchain_engine_test` (for post-merge forks) which can be tested via the Hive `eest/consume-engine` simulator. ### Example: The Test IDs generated for `test_chainid` To see all the test cases and their IDs that get generated from London until Shanghai for `test_chainid`, we can execute `fill` with the `--collect-only -q` flags: ```bash fill tests/istanbul/eip1344_chainid/test_chainid.py --from London --until Shanghai --collect-only -q ``` which lists the following test IDs: ```text tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_London-blockchain_test] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_London-state_test] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Paris-blockchain_test] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Paris-blockchain_test_engine] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Paris-state_test] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Shanghai-blockchain_test] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Shanghai-blockchain_test_engine] tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Shanghai-state_test] ``` ### Additional Parametrization The test function `tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_type_tx_pre_fork` is additionally parametrized: ```text tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blob_tx] tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-one_blob_tx] ``` The strings `no_blob_tx` and `one_blob_tx` are additional descriptive parameter IDs that indicate the focus of the test. ================================================ FILE: docs/filling_tests/transition_tool_support.md ================================================ # Transition Tool Support The following transition tools are supported by the framework: | Client | `t8n` Tool | Tracing Support | | -------| ---------- | --------------- | | [ethereum/evmone](https://github.com/ethereum/evmone) | `evmone-t8n` | Yes | | [ethereum/execution-specs](https://github.com/ethereum/execution-specs) | [`ethereum-spec-evm-resolver`](https://github.com/petertdavies/ethereum-spec-evm-resolver) | Yes | | [ethereumjs](https://github.com/ethereumjs/ethereumjs-monorepo) | [`ethereumjs-t8ntool.sh`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/vm/test/t8n) | No | | [ethereum/go-ethereum](https://github.com/ethereum/go-ethereum) | [`evm t8n`](https://github.com/ethereum/go-ethereum/tree/master/cmd/evm) | Yes | | [hyperledger/besu](https://github.com/hyperledger/besu/tree/main/ethereum/evmtool) | [`evmtool t8n-server`](https://github.com/hyperledger/besu/tree/main/ethereum/evmtool) | Yes | | [status-im/nimbus-eth1](https://github.com/status-im/nimbus-eth1) | [`t8n`](https://github.com/status-im/nimbus-eth1/blob/master/tools/t8n/readme.md) | Yes | ================================================ FILE: docs/getting_started/code_standards.md ================================================ # Code Standards This document outlines the coding standards and practices used in the @ethereum/execution-spec-tests repository. ## Code and CI Requirements Code pushed to @ethereum/execution-spec-tests must fulfill the following checks in [CI](https://github.com/ethereum/execution-spec-tests/actions/workflows/tox_verify.yaml): | Type | Tox Command | Explanation | | ---------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | Lint & code formatting | `uvx --with=tox-uv tox -e lint` | Python lint, format and module import check via `ruff` | | Typecheck | `uvx --with=tox-uv tox -e typecheck` | Objects that provide typehints pass type-checking via `mypy`. | | Framework unit tests | `uvx --with=tox-uv tox -e pytest` | All framework unit tests must execute correctly. | | EL Client test cases | `uvx --with=tox-uv tox -e tests-deployed` | All client test cases for deployed forks can be generated. | | Benchmark EL Test cases | `uvx --with=tox-uv tox -e tests-deployed-benchmark` | All client test cases specific to benchmarks for deployed forks can be generated. | | HTML doc build | `uvx --with=tox-uv tox -e mkdocs` | Documentation generated without warnings. | | Spellcheck | `uvx --with=tox-uv tox -e spellcheck` | Code and documentation spell-check using codespell. | | Markdown lint | `uvx --with=tox-uv tox -e markdownlint` | Markdown lint (requires [additional dependency](code_standards_details.md#additional-dependencies)). | | Changelog validation | `uvx --with=tox-uv tox -e changelog` | Validates changelog entries format and structure in `docs/CHANGELOG.md`. | !!! important "Avoid CI surprises - Use pre-commit hooks!" **We strongly encourage all contributors to install and use pre-commit hooks!** This will run fast checks (lint, typecheck, spellcheck) automatically before each commit, helping you catch issues early and avoid frustrating CI failures after pushing your changes. Install with one simple command: ```console uvx pre-commit install ``` This saves you time by catching formatting issues, type errors, and spelling mistakes before they reach CI. !!! tip "Running checks easily" Add an alias: ```console alias tox="uvx --with=tox-uv tox" ``` Run all checks in parallel: ```console uvx --with=tox-uv tox run-parallel ``` Run sequentially: ```console uvx --with=tox-uv tox ``` Run specific, faster checks: ```console uvx --with=tox-uv tox -e lint,typecheck ``` !!! tip "Lint & code formatting: Using `ruff` and VS Code to help autoformat and fix module imports" On the command-line, solve fixable issues with: ```console uv run ruff check --fix ``` Use VS Code, see [VS Code Setup](../getting_started/setup_vs_code.md), to autoformat code, automatically organize Python module imports and highlight typechecking and spelling issues. !!! hint "Typechecking" Adding the correct typehints can sometimes be tricky and there are exceptions that require manually disabling typechecking on a per-line basis. Please reach out to the maintainers if you need help, either [directly](../getting_started/getting_help.md) or in a PR. ## Python Coding Preferences - **Line Length**: 100 characters maximum. - **Formatting**: Enforced by `ruff` (similar to `black`). - **Documentation**: All public functions and classes should have docstrings - Docstrings should have a good one-line summary which uses the imperative ("Return" not "Returns"). - Add a blank line after the summary for multi-line docstrings. - Single-line docstrings should have triple quotes on the same line. - **Imports**: Use explicit imports (no `from module import *`). - **Relative Imports**: Use relative imports within the same package - **Error Handling**: Use explicit exception types and meaningful error messages. - **Type Hints**: All functions should include type annotations. - **Unused Function Arguments**: When unavoidable, use `del`, e.g., `del unused_var`, at function start to avoid flagging linter errors. - **Variable Naming**: - Use `snake_case` for variables, functions, and modules. - Use `PascalCase` for classes. - Use `UPPER_CASE` for constants. - **File Paths**: Strongly prefer `pathlib` over `os.path` for file system operations. - **Retry Logic**: Use [`tenacity`](https://github.com/jd/tenacity) library for handling flaky network connections and transient failures. ## Editor Setup A correctly configured editor will automatically handle most formatting requirements. See [VS Code Setup](./setup_vs_code.md) for recommended settings. ## Detailed Information See the [Detailed Code Standards](code_standards_details.md) page for more information on: - [Running tox environments](code_standards_details.md#running-tox-environments). - Additional required [dependencies for markdownlint and spellchecking](code_standards_details.md#additional-dependencies). - [Pre-commit hooks setup](code_standards_details.md#pre-commit-hooks). - [Verifying test fixture changes](code_standards_details.md#verifying-fixture-changes). - [Ignoring bulk change commits](code_standards_details.md#ignoring-bulk-change-commits) in `git blame`. ================================================ FILE: docs/getting_started/code_standards_details.md ================================================ # Detailed Code Standards This page provides in-depth information about the code standards and verification processes in @ethereum/execution-spec-tests. ## Running Tox Environments ### Execution Options Run all `tox` environments in parallel: ```console uvx --with=tox-uv tox run-parallel ``` Run environments sequentially with verbose output: ```console uvx --with=tox-uv tox -v ``` List all available environments: ```console uvx --with=tox-uv tox -av ``` ### Specific Environment Commands Run specific environments using the `-e` flag: ```console uvx --with=tox-uv tox -e lint,typecheck,spellcheck ``` #### For Test Case Changes (`./tests/`) ```console uvx --with=tox-uv tox -e lint,typecheck,spellcheck,tests-deployed ``` #### For Framework and Library Changes (`./src/`) ```console uvx --with=tox-uv tox -e lint,typecheck,spellcheck,pytest ``` #### For Documentation Changes (`./docs/`) ```console uvx --with=tox-uv tox -e spellcheck,markdownlint,mkdocs,changelog ``` !!! note "Tox Virtual Environment" Checks performed by `tox` are sandboxed in their own virtual environments (created automatically in the `.tox/` subdirectory). These can be used to debug errors encountered during `tox` execution. ### Additional Dependencies Some checks require external (non-Python) packages: #### For `spellcheck` The spellcheck environment uses **codespell**, which is automatically installed via Python dependencies and checks for common spelling mistakes in code and documentation. To fix spelling errors found by codespell: ```console uv run codespell *.md *.ini .github/ src/ tests/ docs/ --write-changes ``` !!! note "VS Code Integration" The `whitelist.txt` file is still maintained for the VS Code cSpell extension, which provides real-time spell checking in the editor. #### For `markdownlint` ```console sudo apt install nodejs sudo npm install -g markdownlint-cli2@0.17.2 # the version used in ci ``` Or use a specific node version using `nvm`. ## Pre-commit Hooks Certain `tox` environments can be run automatically as git pre-commit hooks to ensure that your changes meet the project's standards before committing. ### Installation ```console uvx pre-commit install ``` For more information, see [Pre-commit Hooks Documentation](../dev/precommit.md). ## Formatting and Line Length The Python code in @ethereum/execution-spec-tests is formatted with `ruff` with a line length of 100 characters. ### Ignoring Bulk Change Commits The maximum line length was changed from 80 to 100 in Q2 2023. To ignore this bulk change commit in git blame output, use the `.git-blame-ignore-revs` file: ```console git blame --ignore-revs-file .git-blame-ignore-revs docs/gen_test_case_reference.py ``` To use the revs file persistently with `git blame`: ```console git config blame.ignoreRevsFile .git-blame-ignore-revs ``` ## Building and Verifying Docs Locally To quickly build and browse the HTML documentation locally run: === "bash" ```console export FAST_DOCS=True uv run mkdocs serve ``` === "fish" ```console set -x FAST_DOCS True uv run mkdocs serve ``` Setting `FAST_DOCS` to `False` additionally builds the "[Test Case Reference](https://eest.ethereum.org/main/tests/)" Section. ## Verifying Fixture Changes When writing a PR that modifies either the framework or test cases, verify that changes don't cause issues with existing test cases. All filled fixtures contain a `hash` field in the `_info` object, which is used to verify that the fixture hasn't changed. ### Using the Hasher Tool The `hasher` command can be used to bulk-verify the hashes of fixtures in a directory. | Flag | Description | | ---------------- | ----------------------------------------------------------------- | | `--files` / `-f` | Prints a combined hash per JSON fixture file. | | `--tests` / `-t` | Prints the hash of every test vector in JSON fixture files. | | `--root` / `-r` | Prints a combined hash for all JSON fixture files in a directory. | For a quick comparison between two fixture directories: ```console hasher --root fixtures/ hasher --root fixtures_new/ ``` To identify which files are different: ```console diff <(hasher --files fixtures/) <(hasher --files fixtures_new/) ``` For a granular comparison: ```console diff <(hasher --tests fixtures/) <(hasher --tests fixtures_new/) ``` ================================================ FILE: docs/getting_started/getting_help.md ================================================ # Getting Help The tests in this repository are a community effort to help improve the development cycle of all Ethereum execution clients. We encourage contributions and recognize that Python is not everyone's primary language - if you stumble over issues or need help, please reach out to one of the execution-spec-tests maintainers either directly or in the `#el-testing` channel in the [Ethereum R&D Discord Server](https://discord.com/invite/qGpsxSA). ## Contact the Maintainers Write to: - Dan on [Discord](https://discordapp.com/users/danceratopz) or [Telegram](https://t.me/danceratopz) (`danceratopz`). - Spencer on [Discord](https://discordapp.com/users/spencertaylorbrown) or [Telegram](https://t.me/spencertb) (`spencertaylorbrown`/`@techbro_ccoli`). - Mario on [Discord](https://discordapp.com/users/marioevz) or [Telegram](https://t.me/marioevz) (`marioevz`/`@marioevz`).
![ukiyo-e style design of 3 furry happy pandas playfully doing experiments on ethereum in a laboratory](img/testing_pandas.png){width="400"}
================================================ FILE: docs/getting_started/installation.md ================================================ # Installation ## Prerequisites The tools provided by [execution-spec-tests](https://github.com/ethereum/execution-spec-tests) use `uv` ([docs.astral.sh/uv](https://docs.astral.sh/uv/)) to manage their dependencies and virtual environment. It's typically recommended to use the latest version of `uv`, currently `uv>=0.7.0` is required. The latest version of `uv` can be installed via `curl` (recommended; can self-update via `uv self update`) or pip (requires Python, can't self-update): === "curl" ```console curl -LsSf https://astral.sh/uv/install.sh | sh ``` === "pip" ```console pip install uv ``` If installed via `curl`, `uv` will download Python for your target platform if one of the required versions (Python 3.11 or 3.12) is not available natively. ## Installation Commands Clone [execution-spec-tests](https://github.com/ethereum/execution-spec-tests) and install its dependencies. We recommend using Python 3.12, the following uses `uv` to download and configures 3.12 to be the Python version used in execution-spec-tests: === "All platforms" ```console git clone --depth 1 https://github.com/ethereum/execution-spec-tests cd execution-spec-tests uv python install 3.12 uv python pin 3.12 uv sync --all-extras ``` Static tests/maintainers only: To learn how to build the `solc` binary from source (optional) follow [this guide](./installation_troubleshooting.md#problem-exception-failed-to-compile-yul-source). ## Installation Troubleshooting If you encounter issues during installation, see the [Installation Troubleshooting](./installation_troubleshooting.md) guide. ================================================ FILE: docs/getting_started/installation_troubleshooting.md ================================================ # Installation Troubleshooting This page provides guidance on how to troubleshoot common issues that may arise when installing [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests). ## Problem: `Failed building wheel for coincurve` !!! danger "Problem: `Failed building wheel for coincurve`" Installing EEST and its dependencies via `uv sync --all-extras` fails with: ```bash Stored in directory: /tmp/... Building wheel for coincurve (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for coincurve (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [27 lines of output] ... 571 | #include | ^~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. error: command '/usr/bin/gcc' failed with exit code 1 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for coincurve ``` !!! success "Solution: Install the `libsecp256k1` library" On Ubuntu, you can install this library with: ```bash sudo apt update sudo apt-get install libsecp256k1-dev ``` ## Problem: `solc` Installation issues ### Problem: `CERTIFICATE_VERIFY_FAILED` !!! danger "Problem: `Failed to ... CERTIFICATE_VERIFY_FAILED`" When running `fill` you might encounter the following error: ```bash Exit: Failed to ...: ``` === "Ubuntu" !!! success "Solution: Update your system’s CA certificates" On Ubuntu, run the following commands: ```bash sudo apt-get update sudo apt-get install ca-certificates ``` === "macOS" !!! success "Solution: Update your system’s CA certificates" On macOS, Python provides a built-in script to install the required certificates: ```bash /Applications/Python\ 3.11/Install\ Certificates.command ``` ### Problem: `Exception: failed to compile yul source` !!! danger "Problem: `Running fill on static_tests fails with tests that contain yul source code` on ARM platforms" To resolve the issue you must acquire the `solc` binary e.g. by building solidity from source. The guide below installs v0.8.28 but you might prefer to choose a different version. !!! success "Solution: Build solc from source" The following steps have been tested on Ubuntu 24.04.2 LTS ARM64: ```bash git clone --branch v0.8.28 --depth 1 https://github.com/ethereum/solidity.git cd solidity && mkdir build && cd build sudo apt install build-essential libboost-all-dev z3 cmake .. make mv $HOME/Documents/execution-spec-tests/.venv/bin/solc $HOME/Documents/execution-spec-tests/.venv/bin/solc-x86-64 cp ./solc/solc $HOME/Documents/execution-spec-tests/.venv/bin/ chmod +x $HOME/Documents/execution-spec-tests/.venv/bin/solc ``` Running `uv run solc --version` should now return the expected version. ## Problem: `ValueError: unsupported hash type ripemd160` !!! danger "Problem: `Running fill fails with tests that use the RIPEMD160 precompile (0x03)`" When running `fill`, you encounter the following error: ```python ValueError: unsupported hash type ripemd160 # or ValueError: [digital envelope routines] unsupported ``` This is due to the removal of certain cryptographic primitives in OpenSSL 3. These were re-introduced in [OpenSSL v3.0.7](https://github.com/openssl/openssl/blob/master/CHANGES.md#changes-between-306-and-307-1-nov-2022). !!! success "Solution: Modify OpenSSL configuration" On platforms where OpenSSL v3.0.7 is unavailable (e.g., Ubuntu 22.04), modify your OpenSSL configuration to enable RIPEMD160. Make the following changes in the OpenSSL config file: ```ini [openssl_init] providers = provider_sect # List of providers to load [provider_sect] default = default_sect legacy = legacy_sect [default_sect] activate = 1 [legacy_sect] activate = 1 ``` This will enable the legacy cryptographic algorithms, including RIPEMD160. See [ethereum/execution-specs#506](https://github.com/ethereum/execution-specs/issues/506) for more information. ## Problem: VS Code "Autoformat on Save" with Ruff Not Working !!! danger "Problem: 'Autoformat on Save' with Ruff not working as expected in VS Code" If you are using VS Code and "autoformat on save" is not working as expected, or if it produces different formatting than the official `tox -e lint` command, you may have a version mismatch with the `ruff` formatter. This problem can be confirmed if `git diff` shows changes to an otherwise unmodified file after you have saved it. This issue often occurs when VS Code is not configured to use the project's virtual environment (`.venv`) or if the linting dependencies have not been installed. In this case, VS Code's Ruff extension falls back to a bundled version of `ruff`, which may not match the version pinned in the project's `pyproject.toml` file. !!! success "Solution: Install all required dependencies and select the correct interpreter" 1. Ensure all dependencies are installed, including the `lint` extras. ```bash uv sync --all-extras ``` 2. In VS Code, open the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P`) and select `Python: Select Interpreter`. 3. Choose the interpreter located in the project's `.venv` directory. This ensures VS Code uses the correct `ruff` version from your project's environment. ## Other Issues Not Listed? If you're facing an issue that's not listed here, you can easily report it on GitHub for resolution. [Click here to report a documentation issue related to installation](https://github.com/ethereum/execution-spec-tests/issues/new?title=docs(bug):%20unable%20to%20install%20eest%20with%20error%20...&labels=scope:docs,type:bug&body=%3Ccopy-paste%20command%20that%20triggered%20the%20issue%20here%3E%0A%3Ccopy-paste%20output%20or%20attach%20screenshot%20here%3E) Please include the following details in your report: 1. The command that triggered the issue. 2. Any relevant error messages or screenshots. 3. Relevant version information from the output of `uv run eest info` (if running consume from within `eest`). ================================================ FILE: docs/getting_started/repository_overview.md ================================================ # Repository Overview The most relevant folders and files in the repo are: ```text 📁 execution-test-specs/ ├─╴📁 tests/ # test cases │ ├── 📁 eips/ │ ├── 📁 vm/ │ └── 📁 ... ├─╴📁 fixtures/ # default fixture output dir │ ├── 📁 blockchain_tests/ │ ├── 📁 blockchain_tests_engine/ │ ├── 📁 state_tests/ │ └── 📁 ... ├─╴📁 src/ # library & framework packages │ ├── 📁 ethereum_test_fork/ │ ├── 📁 ethereum_test_tools/ │ └── 📁 ... ├─╴📁 docs/ # markdown documentation │ ├── 📁 getting_started │ ├── 📁 dev │ └── 📁 ... ├─╴📁 .vscode/ # visual studio code config │ ├── 📄 settings.recommended.json # copy to settings.json │ ├── 📄 launch.recommended.json │ └── 📄 extensions.json └── 📄 whitelist.txt # spellcheck dictionary ``` #### `tests/` Contains the implementation of the Ethereum consensus tests available in this repository. #### `src/` Contains various packages that help to define test cases and to interface with the `evm t8n` command. Additionally, it contains some packages that enable test case execution by customizing pytest which acts as the test framework. #### `docs/` Contains documentation configuration and source files. #### `.vscode/` See [VS Code Setup](./setup_vs_code.md). ================================================ FILE: docs/getting_started/setup_vs_code.md ================================================ # VS Code Setup VS Code setup is optional, but does offer the following advantages: - Auto-format your Python code to conform to the repository's [code standards](../writing_tests/code_standards.md) ([ruff](https://docs.astral.sh/ruff/)). - Inline linting and auto-completion (thanks to Python type hints). - Spell-check your code and docs. - Graphical exploration of test cases and easy test execution/debug. ## Installation Please refer to the [Visual Studio Code docs](https://code.visualstudio.com/docs/setup/setup-overview) for help with installation. ## VS Code Settings file The [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests) repo includes configuration files for VS Code in the `.vscode/` sub-directory: ```text 📁 execution-test-specs/ └──📁 .vscode/ ├── 📄 settings.json ├── 📄 extensions.json └── 📄 launch.recommended.json ``` By default, the repository settings are applied via `.vscode/settings.json`. To enable the recommended launch configurations (that include some useful debugging configurations), copy the recommended launch configuration file to `.vscode/launch.json`: ```console cp .vscode/launch.recommended.json .vscode/launch.json ``` ## VS Code Extension Configuration The extensions listed in `.vscode/extensions.json` are required for a smooth developer experience. 1. Open the root folder of your local `execution-spec-tests` clone in VS Code, it will prompt you to install the repository's required extensions (from `.vscode/extensions.json` - you will be required to trust the `executions-spec-tests` repository first). These extensions are used to format, lint, type check and run tests on the codebase. After all the required extensions are installed a VS Code reload will be required. 2. If previously installed, ensure that the following `ms-python` extensions are disabled for the `execution-spec-tests` workspace to ensure there are no conflicts with the `ruff` formatter. In the VS Code Extensions tab, search for the each of the extensions below, and if installed and enabled, open the "Disabled" menu and select "Disable (Workspace)". This ensures that the extensions will be available with other workspaces that may need them. - [`ms-python.isort`](https://marketplace.visualstudio.com/items?itemName=ms-python.isort) - [`ms-python.flake8`](https://marketplace.visualstudio.com/items?itemName=ms-python.flake8) - [`ms-python.black-formatter`](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter)
![Disabling extensions for the current workspace](./img/vscode_extension_disable_for_workspace.png){width=auto align=center}
## Configuration for Testing EVM Features Under Active Development An additional step is required to enable fixture generations for features from forks that are under active development and have not been deployed to mainnet, see [Filling Tests for Features under Development](../filling_tests/filling_tests_dev_fork.md#vs-code-setup). ================================================ FILE: docs/index.md ================================================ # Execution Spec Tests
![Execution Spec Tests Logo](img/execution_spec_tests.jpg)
@ethereum/execution-spec-tests is both a collection of test cases and a framework in Python to generate tests for Ethereum execution clients. The framework collects and executes the test cases in order to generate _test fixtures_ (JSON) which can be consumed by any execution client to verify their implementation of [ethereum/execution-specs](https://github.com/ethereum/execution-specs). The fixtures, which define state transition and block tests, are generated by the framework using one of the `t8n` command-line tools that are provided by most execution clients, see below for an overview of the supported `t8n` tools. ```mermaid --- title: Test Fixture Generation with execution-spec-tests --- flowchart LR style C stroke:#333,stroke-width:2px style D stroke:#333,stroke-width:2px style G stroke:#F9A825,stroke-width:2px style H stroke:#F9A825,stroke-width:2px subgraph ethereum/go-ethereum C[evm t8n
external executable] end subgraph ethereum/solidity D[solc
external executable] end subgraph ethereum/EIPs E(EIPS/EIP-*.md
SHA digest via Github API) end subgraph "ethereum/execution-spec-tests" A(./tests/**/*.py
Python Test Cases) B([$ fill ./tests/
Python Framework]) end subgraph Test Fixture Consumers subgraph ethereum/hive G([$ hive ...
Go Test Framework]) end H([Client executables]) end C <-.-> B D <-.-> B A --> B E <-.-> |retrieve latest spec version\ncheck tested spec version| B B -->|output| F(./fixtures/**/*.json\nJSON Test Fixtures) F -->|input| G F -->|input| H ``` The generated test fixtures can be used: 1. Directly by client teams' test frameworks, and, 2. In the integration tests executed in the @ethereum/hive framework. More information on how to use and download the [released test fixtures](https://github.com/ethereum/execution-spec-tests/releases) can be found [here](running_tests/index.md). ## Relationship to ethereum/tests This collection of tests is relatively new (test case development started Q4, 2022) and mainly targets recent and upcoming Ethereum specification changes. It does not replace, but rather complements the existing tests in [ethereum/tests](https://github.com/ethereum/tests). ## Motivation The motivation to implement test cases in [ethereum/execution-spec-tests](https://github.com/ethereum/execution-spec-tests) is: 1. To implement test cases as code and ensure that changes, due to spec changes, for example, can be easily made. Moreover, changes are easily understandable and available in version control. 2. To avoid the 2-step approach often used in [ethereum/tests](https://github.com/ethereum/tests): 1. Code (often unavailable) -> Test case (YAML). 2. Test case (YAML) -> Fixtures (JSON). !!! success "Contributing" Contributions via [PR](https://github.com/ethereum/execution-spec-tests/pulls) are welcome! !!! bug "Reporting a Vulnerability" Care is required when adding PRs or issues for functionality that is live on Ethereum mainnet. Please report vulnerabilities and verify bounty eligibility via the [bug bounty program](https://bounty.ethereum.org). - **Please do not create a PR with a vulnerability visible.** - **Please do not file a public ticket mentioning the vulnerability.** ================================================ FILE: docs/javascripts/site.js ================================================ // Config const FILTER_INPUT_SELECTOR = ".custom_dt_filter"; const FILTER_SEARCH_SELECTOR = "#custom_dt_search"; let table; const ICON_COLUMN_FILTER = ''; // This script is used both within mkdocs and in standalone html files. // As such, a uniform listener to page load event is required. // The snippet below uses mkdocs subscription if present otherwise jquery is used // as a fallback. // see: https://github.com/squidfunk/mkdocs-material/issues/5816#issuecomment-1667654560 if (typeof document$ == "undefined") { document$ = {}; document$.subscribe = $(document).ready; } document$.subscribe(() => { initDataTable(); if (table) { // Listen for changes to filters $(FILTER_INPUT_SELECTOR).on("change", filterRows); $(FILTER_SEARCH_SELECTOR).on("input", filterRows); // Apply preselected filters (if present) on page load filterRows(); // Listen for copy event listenForClipboardCopy(); // Style native dataTable buttons $(".dt-buttons").detach().appendTo(".panel_row.filters"); $(".buttons-collection").prepend(ICON_COLUMN_FILTER); } // Setup up select 2 $(`select${FILTER_INPUT_SELECTOR}`).select2(); }); const initDataTable = () => { // Only pages where a table is present. if (!$("#test_table").length) return false; // Setup DataTable plugin // https://datatables.net/reference/api/ table = new DataTable("#test_table", { pageLength: -1, scrollX: true, autoWidth: false, layout: { topStart: { buttons: ["colvis"], }, }, }); }; // A custom DataTable filter is implemented using a // // The value of the `data-criteria' attribute must match the corresponding data attribute in the elements. // For instance, rows containing will be filtered based on this selection. const filterRows = () => { table .rows() .search(function (rowContent, b, index) { const row = $(table.row(index).node()); let match = true; const searchKeyword = $(FILTER_SEARCH_SELECTOR).val(); const searchHit = rowContent.includes(searchKeyword); for (let filter of $(FILTER_INPUT_SELECTOR)) { // Filter is ignored if set to all if ($(filter).val() == "all") continue; // Otherwise, the result of this filter applied to the previous match. match = match && row.data($(filter).data("criteria")) === $(filter).val(); } return searchKeyword.length ? match && searchHit : match; }) .draw(); }; const listenForClipboardCopy = () => { // Event delegation for copy-to-clipboard functionality document.addEventListener("click", function (event) { if (event.target && event.target.classList.contains("copy-id")) { const fullId = event.target.getAttribute("data-full-id"); // Copy to clipboard navigator.clipboard .writeText(fullId) .then(() => { const originalContent = event.target.innerHTML; // Set the sliding message with animation event.target.innerHTML = '...full test id copied!'; // Delay the hiding of the slide-out message setTimeout(() => { const slideElement = event.target.querySelector(".slide"); if (slideElement) { slideElement.classList.add("hide"); } }, 1000); // Restore the original content after the animation setTimeout(() => { event.target.innerHTML = originalContent; }, 1500); // Total duration before restoring original content }) .catch((err) => { console.error("Failed to copy text: ", err); }); } }); }; ================================================ FILE: docs/library/cli/eest.md ================================================ # The `eest` CLI ::: mkdocs-click :module: cli.eest.cli :command: eest :depth: 1 :list_subcommands: true ================================================ FILE: docs/library/cli/evm_bytes.md ================================================ # The `evm_bytes` CLI ::: mkdocs-click :module: cli.evm_bytes :command: evm_bytes :depth: 1 :list_subcommands: true ================================================ FILE: docs/library/cli/extract_config.md ================================================ # `extract_config` - Extract Client Configuration Files The `extract_config` command extracts configuration files from Ethereum clients by spawning them via Hive and retrieving the generated files from the Docker container. ## Purpose When Ethereum clients start up with a genesis configuration, they generate various configuration files such as: - `/chainspec/test.json` - Chain specification file - `/configs/test.cfg` - Configuration file - `/genesis.json` - Genesis block configuration This tool automates the process of extracting these files from the client containers for analysis or debugging purposes. ## Usage ```bash uv run extract_config --fixture [OPTIONS] ``` ### Options - `--fixture, -f` (required): Path to a fixture JSON file or directory containing fixture files - `--client, -c`: Specific client name to extract from (e.g., go-ethereum, besu, nethermind). If not specified, extracts from all available clients - `--output, -o`: Output directory for extracted files (default: ./extracted_configs) - `--hive-url`: Hive server URL (default: http://127.0.0.1:3000) - `--list-files, -l`: List files in the container root before extraction - `--help`: Show help message ### Examples Extract configuration from all clients using a specific fixture: ```bash uv run extract_config --fixture fixtures/blockchain_tests/paris/security/test_selfdestruct_balance_bug.json ``` Extract configuration from a specific client: ```bash uv run extract_config --fixture fixtures/blockchain_tests/paris/security/test_selfdestruct_balance_bug.json --client besu ``` Extract configurations from all fixtures in a directory: ```bash uv run extract_config --fixture fixtures/blockchain_tests/paris/security/ ``` Extract to a specific directory and list container files: ```bash uv run extract_config --fixture my_fixture.json --output ./my_configs --list-files ``` ## Prerequisites 1. Hive must be running in the background: ```bash ./hive --dev ``` 2. Docker must be installed and accessible ## Output The tool creates a hierarchical directory structure: ```console / / / chainspec.json config.cfg genesis.json ``` For example: ```console extracted_configs/ test_selfdestruct_balance_bug/ go-ethereum/ genesis.json besu/ genesis.json chainspec.json nethermind/ chainspec.json config.cfg ``` Only files that exist in the client container will be extracted. ## How It Works 1. Loads the fixture file(s) to extract genesis configuration 2. Starts a Hive simulation 3. For each fixture and each client: - Captures the list of Docker containers before starting the client - Spawns the client with the genesis configuration - Compares Docker containers to identify the newly created container - Uses Docker exec commands to check for and extract configuration files - Saves the extracted files to the organized output directory - Stops the client container 4. Ends the Hive simulation ## Container ID Detection Since Hive doesn't directly expose container IDs, the tool uses a detection mechanism: 1. Lists all Docker container IDs before starting the client 2. Starts the client through Hive 3. Lists all Docker container IDs after starting the client 4. The difference should be exactly one container - the client's container ## Supported Fixture Formats The tool supports: - Individual fixture JSON files (BlockchainFixture format) - PreAllocGroup JSON files - Directories containing multiple fixture files ## Troubleshooting - If no files are extracted, use the `--list-files` flag to see what files are available in the container root - Ensure Hive is running before executing the command - Check that Docker is installed and the current user has permissions to run Docker commands - If the tool fails to detect the container ID, ensure no other containers are being created simultaneously - Some clients may not generate all configuration file types - this is normal ================================================ FILE: docs/library/cli/index.md ================================================ # EEST CLI Tools - [`check_eip_versions`](../../writing_tests/reference_specification.md) - A CLI tool to check the SHA values specified in EIP tests match the latest version from ethereum/EIPs. - [`eest`](eest.md) - A CLI tool that helps with routine tasks in ethereum/execution-spec-tests. - [`evm_bytes`](evm_bytes.md) - Convert the given EVM bytes from a binary file or a hex string to EEST's python opcodes. - [`extract_config`](extract_config.md) - Extract client configuration files (chainspec/genesis.json) from Ethereum clients via Hive. ================================================ FILE: docs/library/ethereum_clis.md ================================================ # Ethereum CLIs Package ::: ethereum_clis ================================================ FILE: docs/library/ethereum_test_base_types.md ================================================ # Ethereum Test Base Types package ::: ethereum_test_base_types ================================================ FILE: docs/library/ethereum_test_exceptions.md ================================================ # Ethereum Test Exceptions package ::: ethereum_test_exceptions ================================================ FILE: docs/library/ethereum_test_fixtures.md ================================================ # Ethereum Test Fixtures package ::: ethereum_test_fixtures ================================================ FILE: docs/library/ethereum_test_forks.md ================================================ # Ethereum Test Forks package ::: ethereum_test_forks ================================================ FILE: docs/library/ethereum_test_specs.md ================================================ # Ethereum Test Specs package ::: ethereum_test_specs ================================================ FILE: docs/library/ethereum_test_tools.md ================================================ # Ethereum Test Tools Package ::: ethereum_test_tools ================================================ FILE: docs/library/ethereum_test_types.md ================================================ # Ethereum Test Types package ::: ethereum_test_types ================================================ FILE: docs/library/ethereum_test_vm.md ================================================ # Ethereum Test VM package ::: ethereum_test_vm ================================================ FILE: docs/library/index.md ================================================ # Library (Tools) Reference Documentation Execution spec tests consists of several packages that implement helper classes and tools that enable and simplify test case implementation. This section contains their reference documentation: - [`ethereum_test_base_types`](./ethereum_test_base_types.md) - provides the basic types on top of which other testing libraries are built. - [`ethereum_test_exceptions`](./ethereum_test_exceptions.md) - provides definitions for exceptions used in all tests. - [`ethereum_test_fixtures`](./ethereum_test_fixtures.md) - provides definitions of all test fixture types that are produced in this repository and can be consumed by clients. - [`ethereum_test_forks`](./ethereum_test_forks.md) - provides definitions for supported forks used in tests. - [`ethereum_test_specs`](./ethereum_test_specs.md) - provides definitions for all spec types used to define test cases, and generate different kinds of test fixtures. - [`ethereum_test_tools`](./ethereum_test_tools.md) - provides primitives and helpers to test Ethereum execution clients. - [`ethereum_test_types`](./ethereum_test_types.md) - provides Ethereum types built on top of the base types which are used to define test cases and interact with other libraries. - [`ethereum_test_vm`](./ethereum_test_vm.md) - provides definitions for the Ethereum Virtual Machine (EVM) as used to define bytecode in test cases. - [`ethereum_clis`](./ethereum_clis.md) - a wrapper for the transition (`t8n`) tool. - [`pytest_plugins`](./pytest_plugins/index.md) - contains pytest customizations that provide additional functionality for generating test fixtures. ================================================ FILE: docs/library/pytest_plugins/filler.md ================================================ # Filler Plugin ::: pytest_plugins.filler ::: pytest_plugins.filler.filler ::: pytest_plugins.filler.pre_alloc ================================================ FILE: docs/library/pytest_plugins/forks.md ================================================ # Forks Plugin ::: pytest_plugins.forks ::: pytest_plugins.forks.forks ================================================ FILE: docs/library/pytest_plugins/index.md ================================================ # Pytest Framework and Customizations ::: pytest_plugins - [Filler Plugin](./filler.md). - [Forks Plugin](./forks.md). - [Spec Version Checker Plugin](./spec_version_checker.md). ================================================ FILE: docs/library/pytest_plugins/spec_version_checker.md ================================================ # Spec Version Checker Plugin ::: pytest_plugins.spec_version_checker ::: pytest_plugins.spec_version_checker.spec_version_checker ================================================ FILE: docs/navigation.md ================================================ * [Home](index.md) * Getting Started * [Installation](getting_started/installation.md) * [Installation Troubleshooting](getting_started/installation_troubleshooting.md) * [Contributing](getting_started/contributing.md) * [Security Policy](getting_started/security.md) * [Code Standards](getting_started/code_standards.md) * [Detailed Code Standards](getting_started/code_standards_details.md) * [VS Code Setup](getting_started/setup_vs_code.md) * [Repository Overview](getting_started/repository_overview.md) * [Getting Help](getting_started/getting_help.md) * [Writing Tests](writing_tests/index.md) * [Adding a New Test](writing_tests/adding_a_new_test.md) * [Types of Test](writing_tests/types_of_tests.md) * [Writing a New Test](writing_tests/writing_a_new_test.md) * [Benchmarks](writing_tests/benchmarks.md) * [Test Markers](writing_tests/test_markers.md) * [Verifying Changes Locally](writing_tests/verifying_changes.md) * [Code Standards](writing_tests/code_standards.md) * [Exception Tests](writing_tests/exception_tests.md) * [Using and Extending Fork Methods](writing_tests/fork_methods.md) * [Gas Optimization](writing_tests/gas_optimization.md) * [Referencing an EIP Spec Version](writing_tests/reference_specification.md) * [EIP Checklist Generation](writing_tests/eip_checklist.md) * [Testing Checklist Templates](writing_tests/checklist_templates/index.md) * [EIP Execution Layer Testing Checklist Template](writing_tests/checklist_templates/eip_testing_checklist_template.md) * [Post-mortems](writing_tests/post_mortems.md) * [Tutorial: Adding a State Test](writing_tests/tutorials/state_transition.md) * [Porting Legacy Tests](writing_tests/porting_legacy_tests.md) * [Filling Tests](filling_tests/index.md) * [Getting Started](filling_tests/getting_started.md) * [Filling Tests at a Prompt](filling_tests/filling_tests_command_line.md) * [Fill Command-Line Options](filling_tests/filling_tests_command_line_options.md) * [Filling Tests in VS Code](filling_tests/filling_tests_vs_code.md) * [Filling Tests for Features Under Development](filling_tests/filling_tests_dev_fork.md) * [An Explanation of Test IDs](filling_tests/test_ids.md) * [Transition Tool Support](filling_tests/transition_tool_support.md) * [Debugging Transition Tools](filling_tests/debugging_t8n_tools.md) * [Running Tests](running_tests/index.md) * [Methods of Running Tests](running_tests/running.md) * [EEST Fixture Releases](running_tests/releases.md) * [Fuzzer Bridge](writing_tests/fuzzer_bridge.md) * [Test Fixture Specifications](running_tests/test_formats/index.md) * [State Tests](running_tests/test_formats/state_test.md) * [Blockchain Tests](running_tests/test_formats/blockchain_test.md) * [Blockchain Engine Tests](running_tests/test_formats/blockchain_test_engine.md) * [Blockchain Engine X Tests](running_tests/test_formats/blockchain_test_engine_x.md) * [Transaction Tests](running_tests/test_formats/transaction_test.md) * [Common Types](running_tests/test_formats/common_types.md) * [Exceptions](running_tests/test_formats/exceptions.md) * [Hive](running_tests/hive/index.md) * [Client Configuration](running_tests/hive/client_config.md) * [Common Options](running_tests/hive/common_options.md) * [Development Mode](running_tests/hive/dev_mode.md) * [Viewing Results](running_tests/hive/hiveview.md) * [CI Integration](running_tests/hive/ci_integration.md) * [Consume Commands](running_tests/consume/index.md) * [Consume Cache & Fixture Inputs](running_tests/consume/cache.md) * [Consume Direct](running_tests/consume/direct.md) * [Consume Simulators](running_tests/consume/simulators.md) * [Exception Tests](running_tests/consume/exceptions.md) * [Execute Commands](./running_tests/execute/index.md) * [Execute Hive](./running_tests/execute/hive.md) * [Execute Remote](./running_tests/execute/remote.md) * [Execute Eth Config](./running_tests/execute/eth_config.md) * [Useful Pytest Options](running_tests/useful_pytest_options.md) * [Developer Doc](dev/index.md) * [Managing Configurations](dev/configurations.md) * [Interactive Library Usage](dev/interactive_usage.md) * [Generating Documentation](dev/docs.md) * [Documenting CLI Commands](dev/documenting_clis.md) * [Coding Style](dev/coding_style.md) * [Logging](dev/logging.md) * [Enabling Precommit Checks](dev/precommit.md) * [Running Github Actions Locally](dev/test_actions_locally.md) * [Changelog](CHANGELOG.md) * [Library Reference](library/index.md) * [EEST CLI Tools](library/cli/index.md) * [Ethereum Test Base Types Package](library/ethereum_test_base_types.md) * [Ethereum Test Exceptions Package](library/ethereum_test_exceptions.md) * [Ethereum Test Fixtures Package](library/ethereum_test_fixtures.md) * [Ethereum Test Forks Package](library/ethereum_test_forks.md) * [Ethereum Test Specs Package](library/ethereum_test_specs.md) * [Ethereum Test Tools Package](library/ethereum_test_tools.md) * [Ethereum Test Types Package](library/ethereum_test_types.md) * [Ethereum Test VM Package](library/ethereum_test_vm.md) * [Ethereum CLIs Package](library/ethereum_clis.md) * [Pytest Plugins](library/pytest_plugins/index.md) ================================================ FILE: docs/running_tests/consume/cache.md ================================================ # Consume Cache and Fixture Inputs The `consume cache` command can be used to resolve, download and cache fixture releases: ```console consume cache --input=stable@v4.5.0 ``` All `consume` subcommands have an `--input` argument, which implements the same functionality as `consume cache` to download and cache fixtures, respectively obtain downloaded fixtures from the cache. ## Example: Two-liner to Download the Latest Fixture Release Releases can be downloaded using EEST tooling without (manually) cloning and installing the @ethereum/execution-spec-tests tools as following: 1. Install `uv` (a fast, rust-based Python package manager): ```console curl -LsSf https://astral.sh/uv/install.sh | sh ``` 2. Run EEST's `consume cache` command via `uv` and request the latest ["stable" fixture release](../releases.md): ```console uvx --from git+https://github.com/ethereum/execution-spec-tests \ consume cache --input=stable@latest ``` Expected output, as of `v4.5.0`: ```console Updated https://github.com/ethereum/execution-spec-tests (8c3cbd7a4eef3967abd78db32ee45ef8f7cf8271) Updated https://github.com/petertdavies/ethereum-spec-evm-resolver (623ac4565025e72b65f45b926da2a3552041b469) Built ethereum-execution-spec-tests @ git+https://github.com/ethereum/execution-spec-tests@8c3cbd7a4eef3967abd78db32ee45ef8f7cf8271 Installed 69 packages in 10ms Exit: Fixtures downloaded and cached. Path: /home/dtopz/.cache/ethereum-execution-spec-tests/cached_downloads/ethereum/execution-spec-tests/v4.5.0/fixtures_stable/fixtures Input: https://github.com/ethereum/execution-spec-tests/releases/download/v4.5.0/fixtures_stable.tar.gz Release page: https://github.com/ethereum/execution-spec-tests/releases/tag/v4.5.0 ``` **Note:** Use direct URLs to avoid GitHub API calls (better for CI environments). Version specifiers like `stable@latest` will always use the GitHub API to resolve versions. More details on the arguments to `--input` are provided below. **Explanation:** `uv` creates a local Python virtual environment in `~/.cache/uv/`, installs EEST and executes the `consume cache` command to resolve and download the release, which gets cached at `~/.cache/ethereum-execution-spec-tests`. Subsequent commands will use the cached version of the fixtures. ## The `--input` Flag to Specify Fixtures All `consume` sub-commands take an `--input=||` flag to specify which fixtures should be used for the command, `` may be: 1. **A local directory**: Fixtures from your local file system. 2. **A release specification**: An EEST release tag or "release specification" `stable@latest`, `fusaka-devnet-1@v1.0.0`, etc. 3. **A URLs**: A full URL to a custom hosted release or a Github release. ### Release Specifications A release specification has the format `@`. **Supported release names:** - `stable`: Latest stable fork release. - `develop`: Latest development fork release. - Custom release names: e.g., `pectra-devnet-4`, `eip7692`. **Supported version formats:** - `latest`: Most recent release for the specified name. - `v1.2.3`: Specific semantic version. ### Examples Examples using a release specification: ```bash # Latest standard, full stable release (all forks up to and including the latest deployed mainnet fork) uv run consume engine --input stable@latest # Latest standard, full development release (all forks up to and including the latest development fork) uv run consume rlp --input develop@latest # Standard, full releases by tag uv run consume engine --input stable@v4.1.0 uv run consume rlp --input develop@v4.2.1 # Pre-release tags uv run consume cache --input pectra-devnet-6@v1.0.0 uv run consume direct --input eip7692@latest --bin ../go-ethereum/build/bin/evm ``` Examples using a URL, the target must be a `.tar.gz`: ```bash # GitHub release URL uv run consume engine --input https://github.com/ethereum/execution-spec-tests/releases/download/v4.1.0/fixtures_develop.tar.gz # Direct archive URL uv run consume rlp --input https://example.com/custom-fixtures.tar.gz ``` ## Caching System ### Automatic Caching All remote fixture sources are automatically cached to avoid repeated downloads: **Default cache location:** ```text ~/.cache/ethereum-execution-spec-tests/cached_downloads/ ``` You can override this location with the `--cache-folder` flag: ```bash uv run consume cache --input stable@latest --cache-folder /path/to/custom/cache ``` Or extract directly to a specific directory (bypasses cache structure): ```bash uv run consume cache --input fusaka-devnet-2@v1.1.0 --extract-to ./benchmark-fixtures ``` **Cache structure:** ```text ❯ tree ~/.cache/ethereum-execution-spec-tests/ -L 5 /home/dtopz/.cache/ethereum-execution-spec-tests/ ├── cached_downloads │   ├── ethereum │   │   └── execution-spec-tests │   │   ├── pectra-devnet-5%40v1.0.0 │   │   │   └── fixtures_pectra-devnet-5 │   │   ├── pectra-devnet-6%40v1.0.0 │   │   │   └── fixtures_pectra-devnet-6 │   │   ├── v4.0.0 │   │   │   └── fixtures_develop │   │   ├── v4.1.0 │   │   │   └── fixtures_develop │   │   ├── v4.2.0 │   │   │   ├── fixtures_develop │   │   │   ├── fixtures_eip7692 │   │   │   └── fixtures_stable │   │   ├── v4.3.0 │   │   │   └── fixtures_develop │   │   └── v4.5.0 │   │   └── fixtures_stable │   └── other └── release_information.json ``` ## The Fixture Index File The [`fill` command](../../filling_tests/index.md) generates a JSON file `/.meta/index.json` that indexes the fixtures its generated. This index file is used by `consume` commands to allow fast collection of test subsets specified on the command-line, for example, via the `--sim.limit` flag. For help with `--sim.limit` when running `./hive`, see [Hive Common Options](../hive/common_options.md), for an overview of other available test selection flags when running `consume` directly, see [Useful Pytest Options](../useful_pytest_options.md). ## CI-Friendly Behavior for Direct URLs When using direct GitHub release URLs (instead of version specifiers), the consume command automatically avoids unnecessary GitHub API calls to prevent rate limiting in CI environments: ```console consume cache --input=https://github.com/ethereum/execution-spec-tests/releases/download/v4.5.0/fixtures_stable.tar.gz ``` **API Call Behavior:** - ✅ **Direct URLs**: No API calls made, cleaner output (no "Release page:" line). - ℹ️ **Version specifiers**: API calls required to resolve versions, includes release page info. Examples: ```console # No API calls - direct download consume cache --input=https://github.com/ethereum/execution-spec-tests/releases/download/v4.5.0/fixtures_stable.tar.gz # API calls required - version resolution consume cache --input=stable@latest ``` ================================================ FILE: docs/running_tests/consume/direct.md ================================================ # The `consume direct` Command The `direct` method provides the fastest way to test EVM functionality by executing tests directly through a client's dedicated test interface (e.g. [`statetest`](https://github.com/ethereum/go-ethereum/blob/4bb097b7ffc32256791e55ff16ca50ef83c4609b/cmd/evm/staterunner.go) or [`blocktest`](https://github.com/ethereum/go-ethereum/blob/35dd84ce2999ecf5ca8ace50a4d1a6abc231c370/cmd/evm/blockrunner.go)). ```bash uv run consume direct --bin= [OPTIONS] ``` - `--bin EVM_BIN`: Path to an evm executable that can process `StateTestFixture` and/or `BlockTestFixture` formats. - `--traces`: Collect execution traces from the evm executable. !!! warning "Limited Client Support" Currently, only the following clients can be used with `consume direct`: - go-ethereum `statetest` and `blocktest` - Nethermind `nethtest` - evmone `evmone-statetest` and `evmone-blockchaintest` ## Advantages - **Speed**: Fastest test execution method. - **Simplicity**: No container or network overhead. - **Debugging**: Easy access to traces and logs. ## Limitations - **Limited client support**: Only go-ethereum, Nethermind and evmone - **Module scope**: Tests EVM, respectively block import, in isolation, not full client behavior. - **Interface dependency**: Requires client-specific test interfaces. ## Example Usage Only run state tests (by using a mark filter, `-m`) from a local `fixtures` folder with go-ethereum: ```bash uv run consume direct --input ./fixtures -m state_test --bin=evm ``` or Nethermind: ```bash uv run consume direct --input ./fixtures -m state_test --bin=nethtest ``` or evmone: ```bash uv run consume direct --input ./fixtures --bin=evmone-statetest --bin=evmone-blockchaintest ``` Run fixtures in the blockchain test format for the Prague fork: ```bash uv run consume direct --input ./fixtures -m "blockchain_test and Prague" --bin=evm ``` Test selection via a regular expression match on collected fixture IDs: ```bash uv run consume direct --input ./fixtures --sim.limit ".*push0.*" ``` Test selection via [pytest keyword expression match](https://docs.pytest.org/en/8.3.x/how-to/usage.html): ```bash uv run consume direct --input ./fixtures -k "eip3855 or Prague" ``` Use `--collect-only -q` to get a list of available test fixture IDs: ```bash uv run consume direct --input ./fixtures -k "eip3855 or Prague" --collect-only -q ``` ================================================ FILE: docs/running_tests/consume/exceptions.md ================================================ # Exception Tests ## Overview Exception tests validate that clients correctly reject invalid blocks and transactions with appropriate error messages. The Engine simulator provides advanced exception verification using client-specific mappers to handle varying error message formats across different clients. ## How Exception Testing Works 1. **Test fixtures specify expected exceptions** - Each test defines what error should occur 2. **Clients reject invalid payloads** - Via Engine API or block import 3. **Exception mappers translate errors** - Client-specific error messages are normalized 4. **Test framework validates** - Ensures the correct exception type was raised ## Client Exception Mappers Each client has unique error message formats. EEST maintains exception mappers that translate client-specific errors to standardized exception types. ### Mapper Location Exception mappers are defined in the EEST codebase: - `src/ethereum_clis/clis/.py` (e.g., `geth.py`, `besu.py`, `nethermind.py`) ### Example Mapper Structure ```python # Simplified example GETH_EXCEPTIONS = { "invalid block: gas limit reached": ExceptionType.GAS_LIMIT_EXCEEDED, "block gas cost exceeds gas limit": ExceptionType.GAS_LIMIT_EXCEEDED, "insufficient balance for transfer": ExceptionType.INSUFFICIENT_BALANCE, } ``` ## Updating Client Exception Messages When clients change their error messages or you encounter unmapped exceptions: ### 1. Identify the Unmapped Exception Run the test and observe the actual error message: ```bash uv run consume engine -k "test_invalid_gas_limit" -v ``` Look for output like: ```text Unmapped exception from client 'go-ethereum': "block gas cost exceeds limit: have 30000001, limit 30000000" ``` ### 2. Update the Exception Mapper Edit the client's exception mapper in `src/ethereum_clis/clis/.py`: ```python # In src/ethereum_clis/clis/geth.py class GethCLI(TransitionTool): exception_map = { # Existing mappings... "block gas cost exceeds limit": ExceptionType.GAS_LIMIT_EXCEEDED, # New mapping } ``` ### 3. Test the Update Re-run the test to verify the exception is now properly mapped: ```bash uv run consume engine -k "test_invalid_gas_limit" --disable-strict-exception-matching=false ``` ### 4. Submit Changes Create a pull request with: - Updated exception mappings - Test results showing the fix - Any relevant client version information ## Disabling Strict Exception Matching For development or when exception mappings are incomplete: ```bash # Disable for specific clients uv run consume engine --disable-strict-exception-matching=nimbus-el ``` !!! warning "Production Testing" Always enable strict exception matching for production test runs to ensure clients properly validate consensus rules. ## Debugging Exception Test Failures ### Check Client Logs Enable verbose client output: ```bash ./hive --sim ethereum/eest/consume-engine \ --docker.output \ --sim.loglevel 5 ``` ### Verify Exception Type Ensure the test expects the correct exception: ```python # In test file post = { address: Account( balance=0, storage={}, exception=TransactionException.INSUFFICIENT_BALANCE # Expected exception ) } ``` ### Test Without Exceptions Temporarily modify the test to see what happens without the invalid condition: ```bash # Run specific test in isolation uv run consume engine -k "test_name_without_invalid" ``` ## Contributing Exception Mappings When contributing new exception mappings: 1. **Document the client version** - Exception messages may change between versions 2. **Use regex patterns** - For flexible matching: `r"gas limit.*exceeded"` 3. **Test multiple scenarios** - Ensure the pattern doesn't over-match 4. **Add comments** - Explain non-obvious mappings Example contribution: ```python # Besu v24.1.0+ changed gas limit error format BESU_EXCEPTIONS = { # Old format (pre-24.1.0) "Transaction gas limit exceeds block gas limit": ExceptionType.GAS_LIMIT_EXCEEDED, # New format (24.1.0+) r"block gas limit \(\d+\) exceeded by transaction": ExceptionType.GAS_LIMIT_EXCEEDED, } ``` ================================================ FILE: docs/running_tests/consume/index.md ================================================ # The `consume` Command The EEST `consume` command implements different methods to run EEST-generated test fixtures against clients: ```bash uv run consume [OPTIONS] SUBCOMMAND [ARGS]... ``` For help with installation, see [Installation](../../getting_started/installation.md). This section provides help for running the EEST commands directly (as opposed to running as a `./hive` [standalone command](../hive/index.md), where applicable) see: 1. [Consume Cache & Fixture Inputs](./cache.md) for how to specify `consume` fixture input. 2. [Consume Direct](./direct.md) to run test fixtures against direct client interfaces. 3. [Consume Simulators](./simulators.md) for help with Hive Simulators. ================================================ FILE: docs/running_tests/consume/simulators.md ================================================ # Consume Simulators The `engine` and `rlp` simulators test clients by importing blocks through different interfaces. These simulators run within the Hive testing framework to provide containerized, isolated testing environments. ## Command Syntax ```bash uv run consume [OPTIONS] ``` ## Relevant Information - To install the `consume` command, see [Installation](../../getting_started/installation.md). - Help [setting up](../hive/index.md) and [starting Hive in dev mode](../hive/dev_mode.md). - For an explanation of how the `consume` simulators work, see the [Engine](../running.md#engine) and [RLP](../running.md#rlp) sections in [Running Tests](../running.md). - Help for relevant options can be found in [Consume Cache and Fixture Inputs](./cache.md) and [Useful Pytest Options](../useful_pytest_options.md). ================================================ FILE: docs/running_tests/execute/eth_config.md ================================================ # Execute eth-config Command The `execute eth-config` command is a specialized testing tool that validates an Ethereum client's configuration against expected network parameters using the `eth_config` RPC endpoint as specified by [EIP-7910](https://eips.ethereum.org/EIPS/eip-7910). The goal is to test baked-in configurations primarily but it can be used to test that genesis and config files were successfully parsed, in devnets for example. ## Overview This command verifies that a client is correctly configured for a specific network by checking: - Current fork configuration. - Fork activation times. - Chain ID. - Precompile addresses. - System contract addresses. ## Usage ### Standalone, Direct Usage The `eth-config` sub-command can be ran directly, without cloning @ethereum/execution-spec-tests, by [installing uv](https://docs.astral.sh/uv/getting-started/installation/) and running: ```bash uv run --with git+https://github.com/ethereum/execution-spec-tests.git execute eth-config --network Mainnet --rpc-endpoint http:// ``` ### From within the EEST Repository ```bash uv run execute eth-config --network --rpc-endpoint [OPTIONS] ``` ### Required Arguments - `--rpc-endpoint`: RPC endpoint URL of the execution client to test ### Optional Arguments - `--network`: Name of the network to verify (e.g., `Mainnet`, `Sepolia`, `Holesky`, `Hoodi`) - required when not using genesis config flags - `--network-config-file`: Path to a custom YAML file containing network configurations (defaults to `src/pytest_plugins/execute/eth_config/networks.yml`) - `--genesis-config-file`: Path to a genesis JSON file from which a custom network configuration must be derived - `--genesis-config-url`: URL to a genesis JSON file from which a custom network configuration must be derived **Note**: You cannot specify both `--network` and genesis config flags (`--genesis-config-file` or `--genesis-config-url`) at the same time. You also cannot specify both `--genesis-config-file` and `--genesis-config-url` simultaneously. ## Examples ### Testing a Mainnet Client ```bash uv run execute eth-config --network Mainnet --rpc-endpoint http://localhost:8545 ``` ### Testing a Sepolia Client ```bash uv run execute eth-config --network Sepolia --rpc-endpoint http://localhost:8545 ``` ### Using a Custom Network Configuration ```bash uv run execute eth-config --network MyCustomNet --rpc-endpoint http://localhost:8545 --network-config-file ./my-networks.yml ``` ### Using a Genesis JSON File ```bash uv run execute eth-config --genesis-config-file ./genesis.json --rpc-endpoint http://localhost:8545 ``` ### Using a Genesis JSON URL ```bash uv run execute eth-config --genesis-config-url https://example.com/genesis.json --rpc-endpoint http://localhost:8545 ``` ## Network Configuration File Format The network configuration file is a YAML file that defines the parameters for each network. Here's the structure: ```yaml MyCustomNet: chainId: 0xabcd # Chain ID in hex genesisHash: 0xd4e5674... # Genesis block hash forkActivationTimes: # Fork activation block numbers/times 0: Cancun # Genesis fork, it must be the latest fork activated in the genesis 1742999832: Prague 1742999833: Osaka bpoForkActivationTimes: # Optional: Blob parameter only fork definitions 1742999834: target: 9 max: 12 base_fee_update_fraction: 5007716 1742999835: target: 12 max: 15 base_fee_update_fraction: 5007716 addressOverrides: # Optional: Override addresses for precompiles/contracts 0x00000000219ab540...: 0x7f02c3e3c98b133... ``` ### Supported Networks The default configuration file includes: - **Mainnet**: Ethereum mainnet. - **Sepolia**: Public testnet. - **Hoodi**: Public testnet. - **Holesky**: Public testnet. ## How It Works 1. **Configuration Loading**: The command loads the network configuration from the YAML file. 2. **RPC Connection**: Connects to the specified client RPC endpoint. 3. **eth_config Call**: Calls the `eth_config` RPC method to get the client's current configuration. 4. **Validation**: Compares the client's response against the expected configuration based on: - Current system timestamp. - Fork activation schedule. - Address overrides (if any). ## `eth_config` Expected Response Details See [EIP-7910](https://eips.ethereum.org/EIPS/eip-7910) for the expected response description. ================================================ FILE: docs/running_tests/execute/hive.md ================================================ # Executing Tests on a Hive Local Network Tests can be executed on a local hive-controlled single-client network by running the `execute hive` command. ## The `eest/execute-blobs` Simulator The `blob_transaction_test` execute test spec sends blob transactions to a running client in order to verify its `engine_getBlobsVX` endpoint behavior. These tests can be run using: ```bash ./hive --client besu --client-file ./configs/osaka.yaml --sim ethereum/eest/execute-blobs ``` See [Hive](../hive/index.md) for help installing and configuring Hive. ## Running `execute` tests with Hive in Dev Mode This command requires hive to be running in `--dev` mode: ```bash ./hive --dev --client go-ethereum ``` This will start hive in dev mode with the single go-ethereum client available for launching tests. Then the tests can be executed by setting the `HIVE_SIMULATOR` environment variable ```bash export HIVE_SIMULATOR=http://127.0.0.1:3000 ``` and running: ```bash uv run execute hive --fork=Cancun ``` If the command above leads to errors such as `ImportError: Error importing plugin "pytest_plugins.execute.rpc.hive": No module named 'hive.client'` run the following to fix it: `uv run eest clean --all`. This will execute all available tests in the `tests` directory on the `Cancun` fork by connecting to the hive server running on `http://127.0.0.1:3000` and launching a single client with the appropriate genesis file. The genesis file is passed to the client with the appropriate configuration for the fork schedule, system contracts and pre-allocated seed account. All tests will be executed in the same network, in the same client, and serially, but when the `-n auto` parameter is passed to the command, the tests can also be executed in parallel. One important feature of the `execute hive` command is that, since there is no consensus client running in the network, the command drives the chain by the use of the Engine API to prompt the execution client to generate new blocks and include the transactions in them. ================================================ FILE: docs/running_tests/execute/index.md ================================================ # Executing Tests on Local Networks or Hive @ethereum/execution-spec-tests is capable of running tests on local networks or on Hive with a few considerations. The `execute` command runs test cases directly from the Python source (without the use of JSON fixtures). See: - [Execute Hive](./hive.md) for help with the `execute` simulator in order to run tests on a single-client local network. - [Execute Remote](./remote.md) for help with executing tests on a remote network such as a devnet, or even mainnet. - [Execute Eth Config](./eth_config.md) for help verifying client configurations on a remote network such as a devnet, or even mainnet. - [Transaction Metadata](./transaction_metadata.md) for detailed information about transaction metadata tracking in execute mode. The rest of this page describes how `execute` works and explains its architecture. ## The `execute` command and `pytest` plugin The `execute` command is capable of parsing and executing all tests in the `./tests` directory, collect the transactions it requires, send them to a client connected to a network, wait for the network to include them in a block and, finally, check the resulting state of the involved smart-contracts against the expected state to validate the behavior of the clients. It will not check for the state of the network itself, only the state of the smart-contracts, accounts and transactions involved in the tests, so it is possible that the network becomes unstable or forks during the execution of the tests, but this will not be detected by the command. The way this is achieved is by using a pytest plugin that will collect all the tests the same way as the fill plugin does, but instead of compiling the transactions and sending them as a batch to the transition tool, they are prepared and sent to the client one by one. Before sending the actual test transactions to the client, the plugin uses a special pre-allocation object that collects the contracts and EOAs that are used by the tests and, instead of pre-allocating them in a dictionary as the fill plugin does, it sends transactions to deploy contracts or fund the accounts for them to be available in the network. The pre-allocation object requires a seed account with funds available in the network to be able to deploy contracts and fund accounts. In the case of a live remote network, the seed account needs to be provided via a command-line parameter, but in the case of a local hive network, the seed account is automatically created and funded by the plugin via the genesis file. At the end of each test, the plugin will also check the remaining balance of all accounts and will attempt to automatically recover the funds back to the seed account in order to execute the following tests. ## Differences between the `fill` and `execute` plugins The test execution with the `execute` plugin is different from the `fill` plugin in a few ways: ### EOA and Contract Addresses The `fill` plugin will pre-allocate all the accounts and contracts that are used in the tests, so the addresses of the accounts and contracts will be known before the tests are executed, Further more, the test contracts will start from the same address on different tests, so there are collisions on the account addresses used across different tests. This is not the case with the `execute` plugin, as the accounts and contracts are deployed on the fly, from sender keys that are randomly generated and therefore are different in each execution. Reasoning behind the random generation of the sender keys is that one can execute the same test multiple times in the same network and the plugin will not fail because the accounts and contracts are already deployed. ### Transactions Gas Price The `fill` plugin will use a fixed and minimum gas price for all the transactions it uses for testing, but this is not possible with the `execute` plugin, as the gas price is determined by the current state of the network. At the moment, the `execute` plugin does not query the client for the current gas price, but instead uses a fixed increment to the gas price in order to avoid the transactions to be stuck in the mempool. ================================================ FILE: docs/running_tests/execute/remote.md ================================================ # Running Test on a Live Remote Network Tests can be executed on a live remote network by running the `execute remote` command. The command requires the `--fork` flag which must match the fork that is currently active in the network (fork transition tests are not supported yet). The `execute remote` command requires to be pointed to an RPC endpoint of a client that is connected to the network, which can be specified by using the `--rpc-endpoint` flag: ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io ``` Another requirement is that the command is provided with a seed account that has funds available in the network to deploy contracts and fund accounts. This can be done by setting the `--rpc-seed-key` flag: ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f ``` The value needs to be a private key that is used to sign the transactions that deploy the contracts and fund the accounts. One last requirement is that the `--rpc-chain-id` flag is set to the chain id of the network that is being tested: ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 ``` ## Engine RPC Endpoint (Optional) By default, the `execute remote` command assumes that the execution client is connected to a beacon node and the chain progresses automatically. However, you can optionally specify an Engine RPC endpoint to drive the chain manually when new transactions are submitted. To use this feature, you need to provide both the `--engine-endpoint` and JWT authentication: ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 --engine-endpoint=https://engine.endpoint.io --engine-jwt-secret "your-jwt-secret-here" ``` Alternatively, you can provide the JWT secret from a file: ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 --engine-endpoint=https://engine.endpoint.io --engine-jwt-secret-file /path/to/jwt-secret.txt ``` The JWT secret file must contain only the JWT secret as a hex string. When an engine endpoint is provided, the test execution will use the Engine API to create new blocks and include transactions, giving you full control over the chain progression. The `execute remote` command will connect to the client via the RPC endpoint and will start executing every test in the `./tests` folder in the same way as the `execute hive` command, but instead of using the Engine API to generate blocks, it will send the transactions to the client via the RPC endpoint. It is recommended to only run a subset of the tests when executing on a live network. To do so, a path to a specific test can be provided to the command: ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 ./tests/prague/eip7702_set_code_tx/test_set_code_txs.py::test_set_code_to_sstore ``` ## Address Stubs for Pre-deployed Contracts When running tests on networks that already have specific contracts deployed (such as mainnet or testnets with pre-deployed contracts), you can use the `--address-stubs` flag to specify these contracts instead of deploying new ones. Address stubs allow you to map contract labels used in tests to actual addresses where those contracts are already deployed on the network. This is particularly useful for: - Testing against mainnet with existing contracts (e.g., Uniswap, Compound) - Using pre-deployed contracts on testnets - Testing on bloat-net, a network containing pre-existing contracts with extensive storage history - Avoiding redeployment of large contracts to save gas and time ### Using Address Stubs You can provide address stubs in several formats: **JSON string:** ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 --address-stubs '{"DEPOSIT_CONTRACT": "0x00000000219ab540356cbb839cbe05303d7705fa", "UNISWAP_V3_FACTORY": "0x1F98431c8aD98523631AE4a59f267346ea31F984"}' ``` **JSON file:** ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 --address-stubs ./contracts.json ``` **YAML file:** ```bash uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --rpc-chain-id 12345 --address-stubs ./contracts.yaml ``` ### Address Stubs File Format **JSON format (contracts.json):** ```json { "DEPOSIT_CONTRACT": "0x00000000219ab540356cbb839cbe05303d7705fa", "UNISWAP_V3_FACTORY": "0x1F98431c8aD98523631AE4a59f267346ea31F984", "COMPOUND_COMPTROLLER": "0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B" } ``` **YAML format (contracts.yaml):** ```yaml DEPOSIT_CONTRACT: 0x00000000219ab540356cbb839cbe05303d7705fa UNISWAP_V3_FACTORY: 0x1F98431c8aD98523631AE4a59f267346ea31F984 COMPOUND_COMPTROLLER: 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B ``` ### How Address Stubs Work When a test deploys a contract using `pre.deploy_contract(..., stub="NAME")` and the stub name matches a key in the address stubs, the test framework will: 1. Use the pre-deployed contract at the specified address instead of deploying a new contract 2. Skip the contract deployment transaction, saving gas and time 3. Use the existing contract's code and state for the test This is particularly useful when testing interactions with well-known contracts that are expensive to deploy or when you want to test against the actual deployed versions of contracts. If the address is _not_ present in the stubbed addresses list, the test will fail to execute. If the address contained in the stubbed addresses list does not contain code on the remote chain, the test will fail. The pre-alloc will be populated with live information from the chain, so the following lines will result in up-to-date information: ```python my_stubbed_contract = pre.deploy_contract(code, stub="uniswap") pre[my_stubbed_contract].nonce # Actual nonce of the contract on chain pre[my_stubbed_contract].balance # Actual balance of the contract on chain ``` ### Bloat-net Testing Address stubs are especially valuable when testing on **bloat-net**, a specialized network that contains pre-existing contracts with extensive storage history. On bloat-net: - Contracts have been deployed and used extensively, accumulating large amounts of storage data - The storage state represents real-world usage patterns with complex data structures - Redeploying these contracts would lose the valuable historical state and storage bloat Using address stubs on bloat-net allows you to: - Test against contracts with realistic storage bloat patterns - Preserve the complex state that has been built up over time - Avoid the computational and storage costs of recreating this state - Test edge cases that only emerge with large, real-world storage datasets ## Transaction Metadata on Remote Networks When executing tests on remote networks, all transactions include metadata that helps with debugging and monitoring. This metadata is embedded in the RPC request ID and includes: - **Test identification**: Each transaction is tagged with the specific test being executed - **Execution phase**: Transactions are categorized as setup, testing, or cleanup - **Action tracking**: Specific actions like contract deployment, funding, or refunding are tracked - **Target identification**: The account or contract being targeted is labeled This metadata is particularly useful when debugging test failures on live networks, as it allows you to correlate blockchain transactions with specific test operations and phases. See [Transaction Metadata](./transaction_metadata.md) for details. ## `execute` Command Test Execution The `execute remote` and `execute hive` commands first creates a random sender account from which all required test accounts will be deployed and funded, and this account is funded by sweeping (by default) this "seed" account. The sweep amount can be configured by setting the `--seed-account-sweep-amount` flag: ```bash --seed-account-sweep-amount "1000 ether" ``` Once the sender account is funded, the command will start executing tests one by one by sending the transactions from this account to the network. Test transactions are not sent from the main sender account though, they are sent from a different unique account that is created for each test (accounts returned by `pre.fund_eoa`). ### Use with Parallel Execution If the `execute` is run using the `-n=N` flag (respectively `--sim-parallelism=N`), n>1, the tests will be executed in parallel, and each process will have its own separate sender account, so the amount that is swept from the seed account is divided by the number of processes, and this has to be taken into account when setting the sweep amount and also when funding the seed account. After finishing each test the command will check the remaining balance of all accounts and will attempt to recover the funds back to the sender account, and at the end of all tests, the remaining balance of the sender account will be swept back to the seed account. There are instances where it will be impossible to recover the funds back from a test, for example, funds that are sent to a contract that has no built-in way to send them back, the funds will be stuck in the contract and they will not be recoverable. ================================================ FILE: docs/running_tests/execute/transaction_metadata.md ================================================ # Transaction Metadata in Execute Mode The `execute` plugin automatically adds metadata to all transactions it sends to the network. This feature was introduced to improve debugging, monitoring, and transaction tracking capabilities. ## Overview Transaction metadata provides context about each transaction sent during test execution, making it easier to: - Debug test failures by correlating blockchain transactions with test operations - Monitor test execution patterns and performance - Track transaction flow across different phases of test execution - Identify which transactions belong to which tests and phases ## Metadata Structure Each transaction includes a `TransactionTestMetadata` object with the following fields: | Field | Type | Description | |-------|------|-------------| | `testId` | `str` | The unique identifier of the test being executed (pytest node ID) | | `phase` | `str` | The execution phase: `setup`, `testing`, or `cleanup` | | `action` | `str` | The specific action being performed (e.g., `deploy_contract`, `fund_eoa`) | | `target` | `str` | The label of the account or contract being targeted | | `txIndex` | `int` | The index of the transaction within its phase | ## Transaction Phases ### Setup Phase (`setup`) Transactions that prepare the test environment: - **`deploy_contract`**: Contract deployment transactions - **`fund_eoa`**: Funding EOAs with initial balances - **`eoa_storage_set`**: Setting storage values for EOAs - **`fund_address`**: Funding specific addresses ### Testing Phase (`testing`) The actual test transactions defined by the test: - User-defined test transactions - Blob testing transactions ### Cleanup Phase (`cleanup`) Transactions that clean up after the test: - **`refund_from_eoa`**: Refunding EOAs back to the sender account ## Example Metadata ```json { "testId": "tests/example_test.py::test_example", "phase": "setup", "action": "deploy_contract", "target": "contract_label", "txIndex": 0 } ``` ## Debugging Test Failures When a test fails on a remote network, you can use the transaction metadata to: 1. Identify which transactions belong to the failing test 2. Determine which phase of execution failed 3. Correlate blockchain transactions with specific test operations The ID will normally be printed in the client logs when execute is running tests against the client, but the logging level might need to be increased for some of the clients (`--sim.loglevel` when running with hive). ## Technical Notes - Metadata is automatically handled by the execute plugin - No additional configuration is required - Metadata is embedded in RPC requests without affecting transaction execution - The feature is backward compatible and doesn't change test behavior ================================================ FILE: docs/running_tests/hive/ci_integration.md ================================================ # Continuous Integration and Automated Testing The Ethereum Foundation maintains continuous testing infrastructure: - **Production results**: [hive.ethpandaops.io](https://hive.ethpandaops.io) - **GitHub Actions**: [ethpandaops/hive-github-action](https://github.com/ethpandaops/hive-github-action) ================================================ FILE: docs/running_tests/hive/client_config.md ================================================ # Client Configuration Guide Clients ran in Hive are configured via the following `./hive` options: 1. `--client-file=client_config.yaml`: Specifies a YAML file defining which and how clients are built. 2. `--client=client1,client2`: Selects a subset of clients to run from the YAML via `nametag`. ## Client YAML File Format Multiple client configurations can be defined as a list in a client YAML file with the following structure: ```yaml - client: nametag: dockerfile: build_args: : ... - client: ... ``` ## Client Build Variants Hive runs client images in Docker containers. There are three different ways to specify how a client image should be built: | Dockerfile | Purpose | Example Usage | |------------|---------|---------------| | `Dockerfile` | Default production build | `dockerfile: ""` (default) | | `Dockerfile.git` | Clone from Github and build from source | `dockerfile: git` | | `Dockerfile.local` | Build from local source | `dockerfile: local` | These Dockerfiles are maintained for each supported client in @ethereum/hive in the [`./clients/`](https://github.com/ethereum/hive/tree/master/clients) subfolder. ### Production Image A pre-built image can be specified, for example, for Besu with: ```yaml - client: besu nametag: pectra build_args: baseimage: hyperledger/besu tag: 25.4.1 ``` ### Git Dockerfile "Git Dockerfiles" clone a branch of the client from Github and build it from source, for example: ```yaml - client: go-ethereum nametag: experimental dockerfile: git build_args: github: your-username/go-ethereum tag: experimental-branch ``` ### Using A "Local Dockerfile" "Local Dockerfiles" can be used to build a client from local source for testing local modifications: ```yaml - client: go-ethereum nametag: local-dev dockerfile: local build_args: local_path: ./clients/go-ethereum/go-ethereum-local ``` This requires copying the local client source code to the Hive directory: ```bash cp -r /path/to/your/go-ethereum ./clients/go-ethereum/go-ethereum-local ``` ### Required Fields - **`client`**: Must match a directory name in `clients/` within the Hive repository - **`nametag`**: Unique identifier for this client configuration ### Optional Fields - **`dockerfile`**: Alternative Dockerfile to use (default: `Dockerfile`) - **`build_args`**: Docker build arguments passed to the Dockerfile ## Build Arguments ### Common Build Arguments | Argument | Description | Example | |----------|-------------|---------| | `tag` | Git commit/tag/branch or Docker tag | `master`, `v1.13.8`, `latest` | | `github` | GitHub repository for source builds | `ethereum/go-ethereum` | | `baseimage` | Docker Hub image for binary builds | `ethereum/client-go` | ## Troubleshooting ### Build Issues Force rebuild base images: ```bash ./hive --docker.pull --sim ethereum/eest/consume-engine ``` Force rebuild specific client: ```bash ./hive --docker.nocache "clients/go-ethereum" --sim ethereum/eest/consume-engine ``` Show the docker container build output: ```bash ./hive --docker.buildoutput --sim ethereum/eest/consume-engine ``` ================================================ FILE: docs/running_tests/hive/common_options.md ================================================ # Common Simulator Options All EEST Hive simulators share common command-line options and patterns. ## Basic Usage While they may be omitted, it's recommended to specify the `fixtures` and `branch` simulator build arguments when running EEST simulators. For example, this runs "stable" fixtures from the v4.3.0 [latest stable release](../releases.md#standard-releases) and builds the simulator at the v4.3.0 tag: ```bash ./hive --sim ethereum/eest/consume-engine \ --sim.buildarg fixtures=stable@v4.3.0 \ --sim.buildarg branch=v4.3.0 \ --client go-ethereum ``` ## Test Selection Run a subset of tests by filtering tests using `--sim.limit=` to perform a regular expression match against test IDs: ```bash ./hive --sim ethereum/eest/consume-engine --sim.limit ".*eip4844.*" ``` ### Collect Only/Dry-Run The `collectonly:` prefix can be used to inspect which tests would match an expression (dry-run), `--docker.output` must be specified to see the simulator's collection result: ```bash ./hive --sim ethereum/eest/consume-engine \ --sim.buildarg fixtures=stable@v4.3.0 \ --sim.buildarg branch=v4.3.0 \ --docker.output \ --sim.limit="collectonly:.*eip4844.*" ``` ### Exact test ID Match The `id:` prefix can be used to select a single test via its ID (this will automatically escape any special characters in the test case ID): ```console ./hive --sim ethereum/eest/consume-engine \ --sim.buildarg fixtures=stable@v4.3.0 \ --sim.buildarg branch=v4.3.0 \ --docker.output \ --sim.limit "id:tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx" ``` ### Parallelism To run multiple tests in parallel, use `--sim.parallelism`: ```bash ./hive --sim ethereum/eest/consume-rlp --sim.parallelism 4 ``` ### Output Options See hive log output in the console: ```bash ./hive --sim ethereum/eest/consume-engine --sim.loglevel 5 ``` ### Container Issues Increase client timeout: ```bash ./hive --client.checktimelimit=180s --sim ethereum/eest/consume-engine ``` ================================================ FILE: docs/running_tests/hive/dev_mode.md ================================================ # Hive Development Mode This section explains how to run EEST simulators using their EEST commands, e.g., `uv run consume engine`, against a Hive "development" server as apposed to using the standalone `./hive` command. This avoids running the simulator in a dockerized environment and has several advantages: 1. A local directory containing fixtures can be specified (`--input=./fixtures/`). 2. Allows dropping into a Python debugger (via `--pdb`) upon test failure to inspect the response or ssh to the client container. 3. Provides access to a larger set of the simulator's command-line options, 4. Runs are faster; there are no docker image rebuilds in between runs. In particular, modifications to the simulator do not require a an image rebuild. ## Platform Support - Linux: Direct development mode supported. - macOS: Must be ran from a Linux environment or use a Docker-based workaround (see macOS Setup). ## Quick Start ### Prerequisites - EEST is installed, see [Installation](../../getting_started/installation.md) - Hive is built, see [Hive](../hive/index.md#quick-start). ## Hive Dev Setup on Linux 1. Start Hive in development mode, e.g.: ```bash ./hive --dev --client go-ethereum --client-file clients.yaml --docker.output ``` 2. In a separate shell, configure environment for EEST: === "bash/zsh" ```bash export HIVE_SIMULATOR=http://127.0.0.1:3000 ``` === "fish" ```console set -x HIVE_SIMULATOR http://127.0.0.1:3000 ``` 3. Run EEST consume commands ```bash uv run consume engine --input ./fixtures -k "test_chainid" uv run consume rlp --input stable@latest ``` ## Hive Dev Setup on macOS Due to Docker running within a VM on macOS, the host machine and Docker containers don't share the same network namespace, preventing direct communication with Hive's development server. To run development mode on macOS, you have the following options: 1. Linux VM: Run a Linux virtual machine on your macOS and execute the standard development workflow above from within the VM. 2. Remote Linux: SSH into a remote Linux environment (server or cloud instance) and run development mode there. 3. **Docker Development Image**: Create a containerized EEST environment that runs within Docker's network namespace (recommended). The following section details the setup and usage of option 3. ### EEST Docker Development Image Within the [`eest/`](https://github.com/ethereum/hive/tree/master/simulators/ethereum/eest) directory of hive, a new dockerfile must be created: `Dockerfile.dev`, with the following contents: ```docker FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim ARG branch=main ENV GIT_REF=${branch} RUN apt-get update && apt-get install -y git RUN git init execution-spec-tests && \ cd execution-spec-tests && \ git remote add origin https://github.com/ethereum/execution-spec-tests.git && \ git fetch --depth 1 origin $GIT_REF && \ git checkout FETCH_HEAD; WORKDIR /execution-spec-tests RUN uv sync ENTRYPOINT ["/bin/bash"] ``` This dockerfile will be our entry point for running EEST commands. ### `eest/` Hive Directory Structure ```tree ├── eest │ ├── Dockerfile.dev │ ├── consume-block-rlp │ │ └── Dockerfile │ └── consume-engine │ └── Dockerfile ``` ### Running Consume 1. Get your local IP address: ```bash ipconfig getifaddr en0 ``` 2. Start Hive in development mode with your local IP: ```bash ./hive --dev --dev.addr :3000 --client go-ethereum --client-file clients.yaml ``` 3. In a separate terminal session, build the EEST development image: ```bash cd simulators/ethereum/eest/ docker build -t macos-consume-dev -f Dockerfile.dev . ``` 4. Run the container with the Hive simulator environment: ```bash docker run -it -e HIVE_SIMULATOR=http://:3000 macos-consume-dev ``` 5. Inside the Docker container, run consume commands: ```bash uv run consume engine -v ``` ## How Development Mode Works When Hive runs in dev mode: 1. Starts the Hive API server (default: `http://127.0.0.1:3000`). 2. Builds and maintains client containers. 3. Keeps the Hive Proxy container running between test executions. 4. Waits for external simulator connections via the API. This allows EEST's consume commands to connect to the running Hive instance and execute tests interactively. ## More Options Available There are many useful native pytest options available in dev mode, see [Useful Options](../useful_pytest_options.md). ### Custom API Endpoint Specify a custom address and port via `--dev.addr`: ```bash ./hive --dev \ --dev.addr 127.0.0.1:5000 \ --client reth \ --client-file clients.yaml ``` Then connect with: ```bash export HIVE_SIMULATOR=http://127.0.0.1:5000 ``` ================================================ FILE: docs/running_tests/hive/hiveview.md ================================================ # Viewing Results Build the result viewer `hiveview`: ```bash go build ./cmd/hiveview ``` Start the server: ```bash ./hiveview --serve ``` ================================================ FILE: docs/running_tests/hive/index.md ================================================ # Hive @ethereum/hive is a containerized testing framework that helps orchestrate test execution against Ethereum clients. Hive is incredibly extensible; new test suites can be implemented in a module manner as "simulators" that interact with clients to test certain aspects of their behavior. EEST implements several simulators, see [Running Tests](../running.md) for an overview. ## Quick Start ### Prerequisites 1. Docker: . 2. Golang 1.22+: . ### Installation Clone @ethereum/hive and build the `./hive` command: ```bash git clone https://github.com/ethereum/hive cd hive go build . ``` ================================================ FILE: docs/running_tests/index.md ================================================ # Running Tests This section documents how EL clients can run EEST tests to verify their implementations. The information is organized as follows: 1. **[Methods of Running Tests](./running.md):** A detailed overview and comparison. 2. **[EEST Fixture Releases](./releases.md):** The available release types; release versioning. 3. **[Test Fixture Specifications](./test_formats/index.md)** and guides to implement direct consumer interfaces. 4. **[Hive](./hive/index.md):** Help running EEST Hive simulators. 5. **[Consume](./consume/index.md):** Commands that help clients run tests by consuming test fixtures. 6. **[Execute](./execute/index.md):** Commands that help clients run tests by executing test source. ================================================ FILE: docs/running_tests/releases.md ================================================ # EEST Fixture Releases ## Formats and Release Layout @ethereum/execution-spec-tests releases contain JSON test fixtures in various formats. Note that transaction type tests are executed directly from Python source using the [`execute`](./execute/index.md) command. | Format | Consumed by the client | Location in `.tar.gz` release | | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | | [State Tests](./test_formats/state_test.md) | - directly via a `statetest`-like command
(e.g., [go-ethereum/cmd/evm/staterunner.go](https://github.com/ethereum/go-ethereum/blob/4bb097b7ffc32256791e55ff16ca50ef83c4609b/cmd/evm/staterunner.go)) | `./fixtures/state_tests/` | | [Blockchain Tests](./test_formats/blockchain_test.md) | - directly via a `blocktest`-like command
(e.g., [go-ethereum/cmd/evm/blockrunner.go](https://github.com/ethereum/go-ethereum/blob/4bb097b7ffc32256791e55ff16ca50ef83c4609b/cmd/evm/blockrunner.go))
- using the [RLPeest/consume-rlp Simulator](./running.md#rlp) via block import | `./fixtures/blockchain_tests/` | | [Blockchain Engine Tests](./test_formats/blockchain_test_engine.md) | - using the [eest/consume-engine Simulator](./running.md#engine) and the Engine API | `./fixtures/blockchain_tests_engine/` | | [Transaction Tests](./test_formats/transaction_test.md) | - using a new simulator coming soon | None; executed directly from Python source,
using a release tag | | Blob Transaction Tests | - using the [eest/execute-blobs Simulator](./execute/hive.md#the-eestexecute-blobs-simulator) and | None; executed directly from Python source,
using a release tag | ## Release URLs and Tarballs ### Versioning Scheme EEST framework and test sources and fixture releases are tagged use a semantic versioning scheme, `>v..` as following: - ``: An existing fixture format has changed (potentially breaking change). Action must be taken by client teams to ensure smooth upgrade to the new format. - ``: Additional coverage (new tests, or a new format) have been added to the release. - ``: A bug-fix release; an error in the tests or framework has been patched. Please see below for an explanation of the optional `` that is used in pre-releases. ### Standard Releases Releases are published on the @ethereum/execution-spec-tests [releases](https://github.com/ethereum/execution-spec-tests/releases) page. Standard releases are tagged using the format `vX.Y.Z` (they don't have a ``). For standard releases, two tarballs are available: | Release Artifact | Fork/feature scope | | ------------------------- | ----------------------------------------------------------------------- | | `fixtures_stable.tar.gz` | Tests for all forks up to and including the last deployed ("stable") mainnet fork ("must pass") | | `fixtures_develop.tar.gz` | Tests for all forks up to and including the last development fork | I.e., `fixtures_develop` are a superset of `fixtures_stable`. !!! tip "Generating tarballs directly via `--output` includes all fixture formats" When generating fixtures for release, specifying tarball output automatically enables all fixture formats: ```console # Automatically enables --generate-all-formats due to .tar.gz output uv run fill --output=fixtures_stable.tar.gz tests/ ``` This ensures that all fixture formats are included in the tarball release. ### Pre-Release and Devnet Releases Intermediate releases that target specific subsets of features or tests under active development are published at @ethereum/execution-spec-tests [releases](https://github.com/ethereum/execution-spec-tests/releases). These releases are tagged using the format `@vX.Y.Z`. Examples: - [`fusaka-devnet-1@v1.0.0`](https://github.com/ethereum/execution-spec-tests/releases/tag/fusaka-devnet-1%40v1.0.0) - this fixture release contains tests adhering to the [Fusaka Devnet 1 spec](https://notes.ethereum.org/@ethpandaops/fusaka-devnet-1). - [`benchmark@v0.0.3`](https://github.com/ethereum/execution-spec-tests/releases/tag/benchmark%40v0.0.3) - this fixture release contains tests specifically aimed at benchmarking EVMs. Devnet releases should be treated as WIP and may not yet contain full test coverage (or even coverage for all EIPs). The coverage provided by these releases is detailed in the corresponding release notes. ### Help Downloading Releases The [`consume cache`](./consume/cache.md) command can be used to resolve EEST release and pre-release tags to release URLs and download them. ================================================ FILE: docs/running_tests/running.md ================================================ # Methods of Running Tests EEST has two commands, `consume` and `execute`, that run test cases against EL clients: 1. `consume` runs JSON test fixtures against a client - the client is said to "consume" the test case fixture. 2. `execute` runs test cases from Python source against a client - the test case is "executed" against the client. ## Top-Level Comparison Both `consume` and `execute` provide sub-commands which correspond to different methods of testing EL clients using EEST test cases: | Command | Description | Components tested | Environment | Scope | | --------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------- | --------------------------------- | | [`consume direct`](#direct) | Client consume tests via a `statetest` interface | EVM | None | Module test | | [`consume direct`](#direct) | Client consume tests via a `blocktest` interface | EVM, block processing | None | Module test,
Integration test | | [`consume engine`](#engine) | Client imports blocks via Engine API `EngineNewPayload` in Hive | EVM, block processing, Engine API | Staging, Hive | System test | | [`consume sync`](#sync) | Client syncs from another client using Engine API in Hive | EVM, block processing, Engine API, P2P sync | Staging, Hive | System test | | [`consume rlp`](#rlp) | Client imports RLP-encoded blocks upon start-up in Hive | EVM, block processing, RLP import (sync\*) | Staging, Hive | System test | | [`execute hive`](./execute/hive.md) | Tests executed against a client via JSON RPC `eth_sendRawTransaction` in Hive | EVM, JSON RPC, mempool | Staging, Hive | System test | | [`execute remote`](./execute/remote.md) | Tests executed against a client via JSON RPC `eth_sendRawTransaction` on a live network | EVM, JSON RPC, mempool, EL-EL/EL-CL interaction (indirectly) | Production | System Test | \*sync: Depending on code paths used in the client implementation, see the [RLP vs Engine Simulator section below](#engine-vs-rlp-simulator). The following sections describe the different methods in more detail. !!! note "`./hive --sim=eest/consume-engine` vs `consume engine`" EEST simulators can be ran either standalone using the `./hive` command or via an EEST command against a `./hive --dev` backend, more details are [provided below](#two-methods-to-run-eest-simulators). ## Direct | Nomenclature | | | --------------- | ----------------------------------- | | Command | `consume direct` | | Simulator | `None` | | Fixture Formats | `state_test`,
`blockchain_test` | The direct method provides the fastest way to test EVM functionality by executing tests directly through a client's dedicated test interface (e.g. [`statetest`](https://github.com/ethereum/go-ethereum/blob/4bb097b7ffc32256791e55ff16ca50ef83c4609b/cmd/evm/staterunner.go) or [`blocktest`](https://github.com/ethereum/go-ethereum/blob/35dd84ce2999ecf5ca8ace50a4d1a6abc231c370/cmd/evm/blockrunner.go)). This method requires clients to implement a custom interface to read tests and pass their inputs through appropriate code paths; implementation guides available for [state tests](./test_formats/state_test.md#consumption) and [blockchain tests](./test_formats/blockchain_test.md#consumption). The EEST `consume direct` command is a small wrapper around client direct interfaces that allows fast and easy selection of test subsets to execute via [test ID](../filling_tests/test_ids.md) regex match (thanks to [an index file](./consume/cache.md#the-fixture-index-file)). See [Consume Direct](./consume/direct.md) and the [Cache and Fixture Inputs](./consume/cache.md) and [Useful Pytest Options](./useful_pytest_options.md) pages for help with options. !!! tip "Rapid EVM development" The [`direct` method](./consume/direct.md) with the [`StateTest` format](./test_formats/state_test.md) should be used for the fastest EVM development feedback loop. Additionally, EVM traces can be readily generated and compared to other implementations. ## Engine | Nomenclature | | | -------------- | ------------------------ | | Command | `consume engine` | | Simulator | `eest/consume-engine` | | Fixture format | `blockchain_test_engine` | The consume engine method tests execution clients via the Engine API by sending block payloads and verifying the response (post-merge forks only). This method provides the most realistic testing environment for production Ethereum client behavior, covering consensus integration, payload validation, and state synchronization. The `consume engine` command: 1. **Initializes the execution client** with genesis state. 2. **Connects via Engine API** (port 8551), primitively mocking a consensus client. 3. **Sends a forkchoice update** to establish the chain head. 4. **Submits payloads** using `engine_newPayload` calls. 5. **Validates responses** against expected results. 6. **Tests error conditions** and exception handling. ## RLP | Nomenclature | | | -------------- | ------------------ | | Command | `consume rlp` | | Simulator | `eest/consume-rlp` | | Fixture format | `blockchain_test` | The RLP consumption method tests execution clients by providing them with RLP-encoded blocks to load upon startup, similar to the block import process during historical synchronization. This method tests the client's core block processing logic without the overhead of network protocols. The `consume rlp` command: 1. **Reads blockchain test fixtures** from the specified input source. 2. **Extracts RLP-encoded blocks** from the fixture files. 3. **Copies blocks to the client's container** via files in the `/blocks/` directory. 4. **Starts the client** with the genesis state and block files. 5. **Validates the client's final `blockHash`** via JSON RPC against the test's expectations. This method simulates how clients import blocks during historical sync, testing the complete block validation and state transition pipeline, see below for more details and a comparison to consumption via the Engine API. ## Sync | Nomenclature | | | -------------- |------------------------| | Command | `consume sync` | | Simulator | None | | Fixture format | `blockchain_test_sync` | The consume sync method tests execution client synchronization capabilities by having one client sync from another via the Engine API and P2P networking. This method validates that clients can correctly synchronize state and blocks from peers, testing both the Engine API, sync triggering, and P2P block propagation mechanisms. The `consume sync` command: 1. **Initializes the client under test** with genesis state and executes all test payloads. 2. **Spins up a sync client** with the same genesis state. 3. **Establishes P2P connection** between the two clients, utilizing ``admin_addPeer`` with enode url. 4. **Triggers synchronization** by sending the target block to the sync client via `engine_newPayload` followed by `engine_forkchoiceUpdated` requests. 5. **Monitors sync progress** and validates that the sync client reaches the same state. 6. **Verifies final state** matches between both clients. ## Engine vs RLP Simulator The RLP Simulator (`eest/consume-rlp`) and the Engine Simulator (`eest/consume-engine`) should be seen as complimentary to one another. Although they execute the same underlying EVM test cases, the block validation logic is executed via different client code paths (using different [fixture formats](./test_formats/index.md)). Therefore, ideally, **both simulators should be executed for full coverage**. ### Code Path Choices Clients consume fixtures in the `eest/consume-engine` simulator via the Engine API's `EngineNewPayloadv*` endpoint; a natural way to validate, respectively invalidate, block payloads. In this case, there is no flexibility in the choice of code path - it directly harnesses mainnet client functionality. The `eest/consume-rlp` Simulator, however, allows clients more freedom, as the rlp-encoded blocks are imported upon client startup. Clients are recommended to try and hook the block import into the code path used for historical syncing. ### Differences | | `eest/consume-rlp` | `eest/consume-engine` | | ----------------------- | ----------------------------------------------------- | ------------------------------------------------------------------ | | **Fixture Format Used** | [`BlockchainTest`](./test_formats/blockchain_test.md) | [`BlockchainTestEngine`](./test_formats/blockchain_test_engine.md) | | **Fork support** | All forks (including pre-merge) | Post-merge forks only (Paris+) | | **Client code path** | Historical sync / block import pipeline | Engine API / consensus integration | | **Real-world analogy** | Blocks received during sync | Blocks received from consensus client | | **Interface** | Block import upon start-up via RLP files | Engine API calls (`newPayload`, `forkchoiceUpdated`) | | **Exception testing** | Basic exception handling | Advanced exception verification with client-specific mappers | !!! hint "Running both simulators adds some redundancy that can assist test debugging" If Engine tests fail but RLP tests pass, the issue is likely in your Engine API implementation rather than core EVM logic. ## Execute See [Execute Command](./execute/index.md). ## Two Methods to Run EEST Simulators Many of the methods use the Hive Testing Environment to interact with clients and run tests against them. These methods are also called Hive simulators. While Hive is always necessary to run simulators, they can be called in two different ways. Both of these commands execute the same simulator code, but in different environments, we take the example of the `eest/consume-engine` simulator: 1. `./hive --sim=eest/consume-engine` is a standalone command that installs EEST and the `consume` command in a dockerized container managed by Hive. This is the standard method to execute EEST [fixture releases](./releases.md) against clients in CI environments and is the method to generate the results at [hive.ethpandaops.io](https://hive.ethpandaops.io). See [Hive](./hive/index.md) and its [Common Options](./hive/common_options.md) for help with this method. 2. `uv run consume engine` requires the user to clone and [install EEST](../getting_started/installation.md) and start a Hive server in [development mode](./hive/dev_mode.md). In this case, the simulator runs on the native system and communicate to the client via the Hive API. This is particularly useful during test development as fixtures on the local disk can be specified via `--input=fixtures/`. As the simulator runs natively, it is easy to drop into a debugger and inspect the simulator or client container state. See [Hive Developer Mode](./hive/dev_mode.md) for help with this method. ================================================ FILE: docs/running_tests/test_formats/blockchain_test.md ================================================ # Blockchain Tests The Blockchain Test fixture format tests are included in the fixtures subdirectory `blockchain_tests`. These are produced by the `StateTest` and `BlockchainTest` test specs. ## Description The blockchain test fixture format is used to test block validation and the consensus rules of the Ethereum blockchain. It does so by defining a pre-execution state, a series of blocks, and a post-execution state, verifying that, after all the blocks have been processed, appended if valid or rejected if invalid, the result is the expected post-execution state. A single JSON fixture file is composed of a JSON object where each key-value pair is a different [`Fixture`](#fixture) test object, with the key string representing the test name. The JSON file path plus the test name are used as the unique test identifier. ## Consumption For each [`Fixture`](#fixture) test object in the JSON fixture file, perform the following steps: 1. Use [`network`](#-network-fork) to configure the execution fork schedule according to the [`Fork`](./common_types.md#fork) type definition. 2. Use [`pre`](#-pre-alloc) as the starting state allocation of the execution environment for the test and calculate the genesis state root. 3. Decode [`genesisRLP`](#-genesisrlp-bytes) to obtain the genesis block header, if the block cannot be decoded, fail the test. 4. Compare the genesis block header with [`genesisBlockHeader`](#-genesisblockheader-fixtureheader), if any field does not match, fail the test. 5. Compare the state root calculated on step 2 with the state root in the genesis block header, if they do not match, fail the test. 6. Set the genesis block as the current head of the chain. 7. If [`blocks`](#-blocks-listfixtureblockinvalidfixtureblock) contains at least one block, perform the following steps for each [`FixtureBlock`](#fixtureblock) or [`InvalidFixtureBlock`](#invalidfixtureblock): 1. Determine whether the current block is valid or invalid: 1. If the [`expectException`](#-expectexception-transactionexceptionblockexception) field is not present, it is valid, and object must be decoded as a [`FixtureBlock`](#fixtureblock). 2. If the [`expectException`](#-expectexception-transactionexceptionblockexception) field is present, it is invalid, and object must be decoded as a [`InvalidFixtureBlock`](#invalidfixtureblock). 2. Attempt to decode field [`rlp`](#-rlp-bytes) as the current block 1. If the block cannot be decoded: - If an rlp decoding exception is not expected for the current block, fail the test. - If an rlp decoding error is expected, pass the test (Note: A block with an expected exception will be the last block in the fixture). 2. If the block can be decoded, proceed to the next step. 3. Attempt to apply the current decoded block on top of the current head of the chain 1. If the block cannot be applied: - If an exception is expected on the current block and it matches the exception obtained upon execution, pass the test. (Note: A block with an expected exception will be the last block in the fixture) - If an exception is not expected on the current block, fail the test 2. If the block can be applied: - If an exception is expected on the current block, fail the test - If an exception is not expected on the current block, set the decoded block as the current head of the chain and proceed to the next block until you reach the last block in the fixture. 8. Compare the hash of the current head of the chain against [`lastblockhash`](#-lastblockhash-hash), if they do not match, fail the test. 9. Compare all accounts and the fields described in [`post`](#-post-alloc) against the current state, if any do not match, fail the test. ## Structures ### `Fixture` #### - `network`: [`Fork`](./common_types.md#fork) ##### TO BE DEPRECATED Fork configuration for the test. This field is going to be replaced by the value contained in `config.network`. #### - `pre`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block. #### - `genesisRLP`: [`Bytes`](./common_types.md#bytes) RLP serialized version of the genesis block. #### - `genesisBlockHeader`: [`FixtureHeader`](#fixtureheader) Genesis block header. #### - `blocks`: [`List`](./common_types.md#list)`[`[`FixtureBlock`](#fixtureblock)` | `[`InvalidFixtureBlock`](#invalidfixtureblock)`]` List of blocks to be processed after the genesis block. #### - `lastblockhash`: [`Hash`](./common_types.md#hash) Hash of the last valid block, or the genesis block hash if the list of blocks is empty, or contains a single invalid block. #### - `post`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Account allocation for verification after all the blocks have been processed. #### - `sealEngine`: `str` Deprecated: Seal engine used to mine the blocks. #### - `config`: [`FixtureConfig`](#fixtureconfig) Chain configuration object to be applied to the client running the blockchain test. ### `FixtureConfig` #### - `network`: [`Fork`](./common_types.md#fork) Fork configuration for the test. It is guaranteed that this field contains the same value as the root field `network`. #### - `blobSchedule`: [`BlobSchedule`](./common_types.md#blobschedule-mappingforkforkblobschedule) Optional; present from Cancun on. Maps forks to their blob schedule configurations as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840). ### `FixtureHeader` #### - `parentHash`: [`Hash`](./common_types.md#hash) Hash of the parent block. #### - `uncleHash`: [`Hash`](./common_types.md#hash) Hash of the uncle block list. #### - `coinbase`: [`Address`](./common_types.md#address) Address of the account that will receive the rewards for building the block. #### - `stateRoot`: [`Hash`](./common_types.md#hash) Root hash of the state trie. #### - `transactionsTrie`: [`Hash`](./common_types.md#hash) Root hash of the transactions trie. #### - `receiptTrie`: [`Hash`](./common_types.md#hash) Root hash of the receipts trie. #### - `bloom`: [`Bloom`](./common_types.md#bloom) Bloom filter composed of the logs of all the transactions in the block. #### - `difficulty`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Difficulty of the block. #### - `number`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Number of the block. #### - `gasLimit`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Total gas limit of the block. #### - `gasUsed`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Total gas used by all the transactions in the block. #### - `timestamp`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Timestamp of the block. #### - `extraData`: [`Bytes`](./common_types.md#bytes) Extra data of the block. #### - `mixHash`: [`Hash`](./common_types.md#hash) Mix hash or PrevRandao of the block. #### - `nonce`: [`HeaderNonce`](./common_types.md#headernonce) Nonce of the block. #### - `hash`: [`Hash`](./common_types.md#hash) Hash of the block. #### - `baseFeePerGas`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) `(fork: London)` Base fee per gas of the block. #### - `withdrawalsRoot`: [`Hash`](./common_types.md#hash) `(fork: Shanghai)` Root hash of the withdrawals trie. #### - `blobGasUsed`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) `(fork: Cancun)` Total blob gas used by all the transactions in the block. #### - `excessBlobGas`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) `(fork: Cancun)` Excess blob gas of the block used to calculate the blob fee per gas for this block. #### - `parentBeaconBlockRoot`: [`Hash`](./common_types.md#hash) `(fork: Cancun)` Root hash of the parent beacon block. ### `FixtureBlock` #### - `rlp`: [`Bytes`](./common_types.md#bytes) RLP serialized version of the block. Field is only optional when embedded in a [`InvalidFixtureBlock`](#invalidfixtureblock) as the [`rlp_decoded`](#-rlp_decoded-optionalfixtureblock) field. #### - `blockHeader`: [`FixtureHeader`](#fixtureheader) Decoded block header fields included in the block RLP. #### - `blocknumber`: [`Number`](./common_types.md#number) Block number. #### - `transactions`: [`List`](./common_types.md#list)`[`[`FixtureTransaction`](#fixturetransaction)`]` List of decoded transactions included in the block RLP. #### - `uncleHeaders`: [`List`](./common_types.md#list)`[`[`FixtureHeader`](#fixturetransaction)`]` List of uncle headers included in the block RLP. An empty list post merge. #### - `withdrawals`: [`Optional`](./common_types.md#optional)`[`[`List`](./common_types.md#list)`[`[`FixtureWithdrawal`](#fixturewithdrawal)`]]` `(fork: Shanghai)` Optional list of withdrawals included in the block RLP. ### `InvalidFixtureBlock` #### - `expectException`: [`TransactionException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException)` | `[`BlockException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.BlockException) Expected exception that invalidates the block. #### - `rlp`: [`Bytes`](./common_types.md#bytes) RLP serialized version of the block. #### - `rlp_decoded`: [`Optional`](./common_types.md#optional)`[`[`FixtureBlock`](#fixtureblock)`]` Decoded block attributes included in the block RLP. ### `FixtureTransaction` #### - `type`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Transaction type. #### - `chainId`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Chain ID of the transaction. #### - `nonce`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Nonce of the account that sends the transaction #### - `gasPrice`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Gas price for the transaction (Transaction types 0 & 1) #### - `maxPriorityFeePerGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: London)` Max priority fee per gas to pay (Transaction types 2 & 3) #### - `maxFeePerGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: London)` Max base fee per gas to pay (Transaction types 2 & 3) #### - `gasLimit`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Gas limit of the transaction #### - `to`: [`Address`](./common_types.md#address)`| null` Destination address of the transaction, or `null` to create a contract #### - `value`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Value of the transaction #### - `data`: [`Bytes`](./common_types.md#bytes) Data bytes of the transaction #### - `accessList`: [`List`](./common_types.md#list)`[`[`Mapping`](./common_types.md#mapping)`[`[`Address`](./common_types.md#address)`,`[`List`](./common_types.md#list)`[`[`Hash`](./common_types.md#hash)`]]]` `(fork: Berlin)` Account access lists (Transaction types 1, 2 & 3) #### - `maxFeePerBlobGas`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) `(fork: Cancun)` Max fee per blob gas to pay (Transaction type 3) #### - `blobVersionedHashes`: [`List`](./common_types.md#list)`[`[`Hash`](./common_types.md#hash)`]` `(fork: Cancun)` Max fee per blob gas to pay (Transaction type 3) #### - `v`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) V value of the transaction signature #### - `r`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) R value of the transaction signature #### - `s`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) S value of the transaction signature #### - `sender`: [`Address`](./common_types.md#address) Sender address of the transaction #### - `secretKey`: [`Hash`](./common_types.md#hash) Private key that must be used to sign the transaction ### `FixtureWithdrawal` #### - `index`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Index of the withdrawal #### - `validatorIndex`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Withdrawing validator index #### - `address`: [`Address`](./common_types.md#address) Address to withdraw to #### - `amount`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Amount of the withdrawal ================================================ FILE: docs/running_tests/test_formats/blockchain_test_engine.md ================================================ # Blockchain Engine Tests The Blockchain Engine Test fixture format tests are included in the fixtures subdirectory `blockchain_tests_engine`, and use Engine API directives instead of the usual BlockchainTest format. These are produced by the `StateTest` and `BlockchainTest` test specs. ## Description The Blockchain Engine Test fixture format is used to test block validation and the consensus rules of the Ethereum blockchain, when a block is delivered through the Engine API as a `engine_newPayloadVX` directive. It does so by defining a pre-execution state, a series of blocks as `engine_newPayloadVX` directives, and a post-execution state, verifying that, after all the blocks have been processed, appended if valid or rejected if invalid, the result is the expected post-execution state. A single JSON fixture file is composed of a JSON object where each key-value pair is a different [`HiveFixture`](#hivefixture) test object, with the key string representing the test name. The JSON file path plus the test name are used as the unique test identifier. ## Consumption For each [`HiveFixture`](#hivefixture) test object in the JSON fixture file, perform the following steps: 1. Start a full node using: - [`network`](#-network-fork) to configure the execution fork schedule according to the [`Fork`](./common_types.md#fork) type definition. - [`pre`](#-pre-alloc) as the starting state allocation of the execution environment for the test and calculate the genesis state root. - [`genesisBlockHeader`](#-genesisblockheader-fixtureheader) as the genesis block header. 2. Verify the head of the chain is the genesis block, and the state root matches the one calculated on step 1, otherwise fail the test. 3. For each [`FixtureEngineNewPayload`](#fixtureenginenewpayload) in [`engineNewPayloads`](#-enginenewpayloads-listfixtureenginenewpayload): 1. Deliver the payload using the `engine_newPayloadVX` directive, using: - [`version`](#-version-number) as the version of the directive. - [`executionPayload`](#-executionpayload-fixtureexecutionpayload) as the payload. - [`blob_versioned_hashes`](#-blob_versioned_hashes-optionallisthash-fork-cancun), if present, as the list of hashes of the versioned blobs that are part of the execution payload. - [`parentBeaconBlockRoot`](#-parentbeaconblockroot-optionalhash-fork-cancun), if present, as the hash of the parent beacon block root. 2. If [`errorCode`](#-errorcode-optionalnumber) is present: - Verify the directive returns an error, and the error code matches the one in [`errorCode`](#-errorcode-optionalnumber), otherwise fail the test. - Proceed to the next payload. 3. If `valid` is `false`, verify that the directive returns `status` field of [PayloadStatusV1](https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#payloadstatusv1) as `INVALID`, otherwise fail the test. 4. If `valid` is `true`, verify that the directive returns `status` field of [PayloadStatusV1](https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#payloadstatusv1) as `VALID`, otherwise fail the test. ## Structures ### `HiveFixture` #### - `network`: [`Fork`](./common_types.md#fork) ##### TO BE DEPRECATED Fork configuration for the test. This field is going to be replaced by the value contained in `config.network`. #### - `genesisBlockHeader`: [`FixtureHeader`](./blockchain_test.md#fixtureheader) Genesis block header. #### - `engineNewPayloads`: [`List`](./common_types.md#list)`[`[`FixtureEngineNewPayload`](#fixtureenginenewpayload)`]` List of `engine_newPayloadVX` directives to be processed after the genesis block. #### - `engineFcuVersion`: [`Number`](./common_types.md#number) Version of the `engine_forkchoiceUpdatedVX` directive to use to set the head of the chain. #### - `pre`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block. #### - `lastblockhash`: [`Hash`](./common_types.md#hash) Hash of the last valid block, or the genesis block hash if the list of blocks is empty, or contains a single invalid block. #### - `post`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Account allocation for verification after all the blocks have been processed. #### - `config`: [`FixtureConfig`](#fixtureconfig) Chain configuration object to be applied to the client running the blockchain engine test. ### `FixtureConfig` #### - `network`: [`Fork`](./common_types.md#fork) Fork configuration for the test. It is guaranteed that this field contains the same value as the root field `network`. #### - `blobSchedule`: [`BlobSchedule`](./common_types.md#blobschedule-mappingforkforkblobschedule) Optional; present from Cancun on. Maps forks to their blob schedule configurations as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840). ### `FixtureEngineNewPayload` #### - `executionPayload`: [`FixtureExecutionPayload`](#fixtureexecutionpayload) Execution payload. #### - `blob_versioned_hashes`: [`Optional`](./common_types.md#optional)`[`[`List`](./common_types.md#list)`[`[`Hash`](./common_types.md#hash)`]]` `(fork: Cancun)` List of hashes of the versioned blobs that are part of the execution payload. They can mismatch the hashes of the versioned blobs in the execution payload, for negative-testing reasons. #### - `parentBeaconBlockRoot`: [`Optional`](./common_types.md#optional)`[`[`Hash`](./common_types.md#hash)`]` `(fork: Cancun)` Hash of the parent beacon block root. #### - `validationError`: [`TransactionException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException)` | `[`BlockException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.BlockException) Validation error expected when executing the payload. When the payload is valid, this field is not present, and a `VALID` status is expected in the `status` field of [PayloadStatusV1](https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#payloadstatusv1). If this field is present, the `status` field of [PayloadStatusV1](https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#payloadstatusv1) is expected to be `INVALID`. #### - `version`: [`Number`](./common_types.md#number) Version of the `engine_newPayloadVX` directive to use to deliver the payload. #### - `errorCode`: [`Optional`](./common_types.md#optional)`[`[`Number`](./common_types.md#number)`]` Error code to be returned by the `engine_newPayloadVX` directive. ### `FixtureExecutionPayload` #### - `parentHash`: [`Hash`](./common_types.md#hash) Hash of the parent block. #### - `feeRecipient`: [`Address`](./common_types.md#address) Address of the account that will receive the rewards for building the block. #### - `stateRoot`: [`Hash`](./common_types.md#hash) Root hash of the state trie. #### - `receiptsRoot`: [`Hash`](./common_types.md#hash) Root hash of the receipts trie. #### - `logsBloom`: [`Bloom`](./common_types.md#bloom) Bloom filter composed of the logs of all the transactions in the block. #### - `blockNumber`: [`HexNumber`](./common_types.md#hexnumber) Number of the block. #### - `gasLimit`: [`HexNumber`](./common_types.md#hexnumber) Total gas limit of the block. #### - `gasUsed`: [`HexNumber`](./common_types.md#hexnumber) Total gas used by all the transactions in the block. #### - `timestamp`: [`HexNumber`](./common_types.md#hexnumber) Timestamp of the block. #### - `extraData`: [`Bytes`](./common_types.md#bytes) Extra data of the block. #### - `prevRandao`: [`Hash`](./common_types.md#hash) PrevRandao of the block. #### - `blockHash`: [`Hash`](./common_types.md#hash) Hash of the block. #### - `transactions`: [`List`](./common_types.md#list)`[`[`Bytes`](./common_types.md#bytes)`]` List of transactions in the block, in serialized format. #### - `withdrawals`: [`List`](./common_types.md#list)`[`[`FixtureWithdrawal`](#fixturewithdrawal)`]` List of withdrawals in the block. #### - `baseFeePerGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: London)` Base fee per gas of the block. #### - `blobGasUsed`: [`HexNumber`](./common_types.md#hexnumber) `(fork: Cancun)` Total blob gas used by all the transactions in the block. #### - `excessBlobGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: Cancun)` Excess blob gas of the block used to calculate the blob fee per gas for this block. ### `FixtureWithdrawal` #### - `index`: [`HexNumber`](./common_types.md#hexnumber) Index of the withdrawal #### - `validatorIndex`: [`HexNumber`](./common_types.md#hexnumber) Withdrawing validator index #### - `address`: [`Address`](./common_types.md#address) Address to withdraw to #### - `amount`: [`HexNumber`](./common_types.md#hexnumber) Amount of the withdrawal ================================================ FILE: docs/running_tests/test_formats/blockchain_test_engine_x.md ================================================ # Blockchain Engine X Tests The Blockchain Engine X Test fixture format tests are included in the fixtures subdirectory `blockchain_tests_engine_x`, and use Engine API directives with optimized pre-allocation groups for improved execution performance. These are produced by the `StateTest` and `BlockchainTest` test specs when using the `--generate-pre-alloc-groups` and `--use-pre-alloc-groups` flags, or by using the `--generate-all-formats` flag which generates all fixture formats including `BlockchainEngineXFixture` in a single command. ## Description The Blockchain Engine X Test fixture format is an optimized variant of the [Blockchain Engine Test](./blockchain_test_engine.md) format designed for large-scale test execution with performance optimizations. It uses the Engine API to test block validation and consensus rules while leveraging **pre-allocation groups** to significantly reduce test execution time and resource usage. Tests are grouped by their initial state (fork + environment + pre-allocation). Each group is executed against the same client instance using a common genesis state. The key optimization is that **clients need only be started once per group** instead of once per test (as in the original engine fixture format), dramatically improving execution performance for large test suites. Instead of including large pre-allocation state in each test fixture, this format references a pre-allocation groups folder (`pre_alloc`) which contains all different pre-allocation combinations organized by group. A single JSON fixture file is composed of a JSON object where each key-value pair is a different [`BlockchainTestEngineXFixture`](#blockchaintestenginexfixture) test object, with the key string representing the test name. The JSON file path plus the test name are used as the unique test identifier. ## Pre-Allocation Groups Folder The `blockchain_tests_engine_x` directory contains a special directory `pre_alloc` that stores pre-allocation group files used by all tests in this format, one per pre-allocation group with the name of the pre-alloc hash. This folder is essential for test execution and must be present alongside the test fixtures. ### Pre-Allocation Group File Structure Each file in the `pre_alloc` folder corresponds to a pre-allocation group identified by a hash: ```json { "test_count": 88, "pre_account_count": 174, "testIds": ["test1", "test2", ...], "network": "Prague", "environment": { ... }, "pre": { ... } } ``` #### Pre-Allocation Group Fields - **`test_count`**: Number of tests in this pre-allocation group - **`pre_account_count`**: Number of accounts in the pre-allocation group - **`testIds`**: Array of test identifiers that belong to this group - **`network`**: Fork name (e.g., "Prague", "Cancun") - **`environment`**: Complete [`Environment`](./common_types.md#environment) object with execution context - **`pre`**: Pre-allocation group [`Alloc`](./common_types.md#alloc-mappingaddressaccount) object containing initial account states ## Consumption For each [`BlockchainTestEngineXFixture`](#blockchaintestenginexfixture) test object in the JSON fixture file, perform the following steps: 1. **Load Pre-Allocation Group**: - Read the appropriate file from the `pre_alloc` folder in the same directory - Locate the pre-allocation group using [`preHash`](#-prehash-string) - Extract the `pre` allocation and `environment` from the group 2. **Initialize Client**: - Use [`network`](#-network-fork) to configure the execution fork schedule - Use the pre-allocation group's `pre` allocation as the starting state - Use the pre-allocation group's `environment` as the execution context - Use [`genesisBlockHeader`](#-genesisblockheader-fixtureheader) as the genesis block header 3. **Execute Engine API Sequence**: - For each [`FixtureEngineNewPayload`](#fixtureenginenewpayload) in [`engineNewPayloads`](#-enginenewpayloads-listfixtureenginenewpayload): 1. Deliver the payload using `engine_newPayloadVX` 2. Validate the response according to the payload's expected status - If [`syncPayload`](#-syncpayload-optionalfixtureenginenewpayload) is present, execute it for chain synchronization 4. **Verify Final State**: - Compare the final chain head against [`lastblockhash`](#-lastblockhash-hash) - If [`postStateDiff`](#-poststatediff-optionalalloc) is present: - Apply the state differences to the pre-allocation group - Verify the resulting state matches the client's final state - If `post` field were present (not typical), verify it directly ## Structures ### `BlockchainTestEngineXFixture` #### - `network`: [`Fork`](./common_types.md#fork) ##### TO BE DEPRECATED Fork configuration for the test. This field is going to be replaced by the value contained in `config.network`. #### - `preHash`: `string` Hash identifier referencing a pre-allocation group in the `pre_alloc` folder. This hash uniquely identifies the combination of fork, environment, and pre-allocation state that defines the group. #### - `genesisBlockHeader`: [`FixtureHeader`](./blockchain_test.md#fixtureheader) Genesis block header. The state root in this header must match the state root calculated from the pre-allocation group referenced by [`preHash`](#-prehash-string). #### - `engineNewPayloads`: [`List`](./common_types.md#list)`[`[`FixtureEngineNewPayload`](#fixtureenginenewpayload)`]` List of `engine_newPayloadVX` directives to be processed after the genesis block. These define the sequence of blocks to be executed via the Engine API. #### - `syncPayload`: [`Optional`](./common_types.md#optional)`[`[`FixtureEngineNewPayload`](#fixtureenginenewpayload)`]` Optional synchronization payload. When present, this payload is typically used to sync the chain to a specific state before or after the main payload sequence. #### - `lastblockhash`: [`Hash`](./common_types.md#hash) Hash of the last valid block after all payloads have been processed, or the genesis block hash if all payloads are invalid. #### - `postStateDiff`: [`Optional`](./common_types.md#optional)`[`[`Alloc`](./common_types.md#alloc-mappingaddressaccount)`]` State differences from the pre-allocation group after test execution. This optimization stores only the accounts that changed, were created, or were deleted during test execution, rather than the complete final state. To reconstruct the final state: 1. Start with the pre-allocation group from the `pre_alloc` folder 2. Apply the changes in `postStateDiff`: - **Modified accounts**: Replace existing accounts with new values - **New accounts**: Add accounts not present in pre-allocation - **Deleted accounts**: Remove accounts (represented as `null` values) #### - `config`: [`FixtureConfig`](#fixtureconfig) Chain configuration object to be applied to the client running the blockchain engine x test. ### `FixtureConfig` #### - `network`: [`Fork`](./common_types.md#fork) Fork configuration for the test. It is guaranteed that this field contains the same value as the root field `network`. #### - `blobSchedule`: [`BlobSchedule`](./common_types.md#blobschedule-mappingforkforkblobschedule) Optional; present from Cancun on. Maps forks to their blob schedule configurations as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840). ### `FixtureEngineNewPayload` Engine API payload structure identical to the one defined in [Blockchain Engine Tests](./blockchain_test_engine.md#fixtureenginenewpayload). Includes execution payload, versioned hashes, parent beacon block root, validation errors, version, and error codes. ## Usage Notes - This format is generated when using: - `--generate-pre-alloc-groups` flag (automatically triggers 2-phase execution, generates only `BlockchainEngineXFixture`) - `--generate-all-formats` flag (automatically triggers 2-phase execution, generates all fixture formats) - The `pre_alloc` folder is essential and must be distributed with the test fixtures - Tests are grouped by identical (fork + environment + pre-allocation) combinations - The format is optimized for Engine API testing (post-Paris forks) ================================================ FILE: docs/running_tests/test_formats/blockchain_test_sync.md ================================================ # Blockchain Engine Sync Tests The Blockchain Engine Sync Test fixture format tests are included in the fixtures subdirectory `blockchain_tests_sync`, and use Engine API directives to test client synchronization capabilities after fixtures are executed with valid payloads. These are produced by the `BlockchainTest` test spec when `pytest.mark.verify_sync` is used as a test marker. ## Description The Blockchain Engine Sync Test fixture format is used to test execution client synchronization between peers. It validates that clients can correctly sync state and blocks from another client using the Engine API and P2P networking. The test works by: 1. Setting up a client under test, defining a pre-execution state, a series of `engine_newPayloadVX` directives, and a post-execution state, as in Blockchain Engine Test fixture formats. 2. Starting a sync client with the same genesis and pre-execution state. 3. Having the sync client synchronize from the client under test. 4. Verifying that both clients reach the same final state. A single JSON fixture file is composed of a JSON object where each key-value pair is a different [`HiveFixture`](#hivefixture) test object, with the key string representing the test name. The JSON file path plus the test name are used as the unique test identifier, as well as a `{client under test}::sync_{sync client}` identifier. ## Consumption For each [`HiveFixture`](#hivefixture) test object in the JSON fixture file, perform the following steps: ### Client Under Test Setup 1. Start the client under test using: - [`network`](#-network-fork) to configure the execution fork schedule according to the [`Fork`](./common_types.md#fork) type definition. - [`pre`](#-pre-alloc) as the starting state allocation of the execution environment for the test and calculate the genesis state root. - [`genesisBlockHeader`](#-genesisblockheader-fixtureheader) as the genesis block header. 2. Verify the head of the chain is the genesis block, and the state root matches the one calculated on step 1, otherwise fail the test. 3. Process all [`FixtureEngineNewPayload`](#fixtureenginenewpayload) objects in [`engineNewPayloads`](#-enginenewpayloads-listfixtureenginenewpayload) to build the complete chain on the client under test. ### Sync Client Setup and Synchronization 1. Start a sync client using the same genesis configuration: - Use the same [`network`](#-network-fork), [`pre`](#-pre-alloc), and [`genesisBlockHeader`](#-genesisblockheader-fixtureheader). 2. Establish P2P connection between the clients: - Get the enode URL from the client under test - Use `admin_addPeer` to connect the sync client to the client under test 3. Trigger synchronization on the sync client: - Send the [`syncPayload`](#-syncpayload-fixtureenginenewpayload) using `engine_newPayloadVX` - Send `engine_forkchoiceUpdatedVX` pointing to the last block hash 4. Monitor and verify synchronization: - Wait for the sync client to reach the [`lastblockhash`](#-lastblockhash-hash) - Verify the final state root matches between both clients - If [`post`](#-post-alloc) is provided, verify the final state matches ## Structures ### `HiveFixture` #### - `network`: [`Fork`](./common_types.md#fork) ##### TO BE DEPRECATED Fork configuration for the test. This field is going to be replaced by the value contained in `config.network`. #### - `genesisBlockHeader`: [`FixtureHeader`](./blockchain_test.md#fixtureheader) Genesis block header. #### - `engineNewPayloads`: [`List`](./common_types.md#list)`[`[`FixtureEngineNewPayload`](#fixtureenginenewpayload)`]` List of `engine_newPayloadVX` directives to be processed by the client under test to build the complete chain. #### - `syncPayload`: [`FixtureEngineNewPayload`](#fixtureenginenewpayload) The final payload to be sent to the sync client to trigger synchronization. This is typically an empty block built on top of the last test block. #### - `engineFcuVersion`: [`Number`](./common_types.md#number) Version of the `engine_forkchoiceUpdatedVX` directive to use to set the head of the chain. #### - `pre`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block. #### - `lastblockhash`: [`Hash`](./common_types.md#hash) Hash of the last valid block that the sync client should reach after successful synchronization. #### - `post`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Account allocation for verification after synchronization is complete. #### - `postStateHash`: [`Optional`](./common_types.md#optional)`[`[`Hash`](./common_types.md#hash)`]` Optional state root hash for verification after synchronization is complete. Used when full post-state is not included. #### - `config`: [`FixtureConfig`](#fixtureconfig) Chain configuration object to be applied to both clients running the blockchain sync test. ### `FixtureConfig` #### - `network`: [`Fork`](./common_types.md#fork) Fork configuration for the test. It is guaranteed that this field contains the same value as the root field `network`. #### - `chainId`: [`Number`](./common_types.md#number) Chain ID configuration for the test network. #### - `blobSchedule`: [`BlobSchedule`](./common_types.md#blobschedule-mappingforkforkblobschedule) Optional; present from Cancun on. Maps forks to their blob schedule configurations as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840). ### `FixtureEngineNewPayload` #### - `executionPayload`: [`FixtureExecutionPayload`](#fixtureexecutionpayload) Execution payload. #### - `blob_versioned_hashes`: [`Optional`](./common_types.md#optional)`[`[`List`](./common_types.md#list)`[`[`Hash`](./common_types.md#hash)`]]` `(fork: Cancun)` List of hashes of the versioned blobs that are part of the execution payload. #### - `parentBeaconBlockRoot`: [`Optional`](./common_types.md#optional)`[`[`Hash`](./common_types.md#hash)`]` `(fork: Cancun)` Hash of the parent beacon block root. #### - `validationError`: [`Optional`](./common_types.md#optional)`[`[`TransactionException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException)` | `[`BlockException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.BlockException)`]` For sync tests, this field should not be present as sync tests only work with valid chains. Invalid blocks cannot be synced. #### - `version`: [`Number`](./common_types.md#number) Version of the `engine_newPayloadVX` directive to use to deliver the payload. ### `FixtureExecutionPayload` #### - `parentHash`: [`Hash`](./common_types.md#hash) Hash of the parent block. #### - `feeRecipient`: [`Address`](./common_types.md#address) Address of the account that will receive the rewards for building the block. #### - `stateRoot`: [`Hash`](./common_types.md#hash) Root hash of the state trie. #### - `receiptsRoot`: [`Hash`](./common_types.md#hash) Root hash of the receipts trie. #### - `logsBloom`: [`Bloom`](./common_types.md#bloom) Bloom filter composed of the logs of all the transactions in the block. #### - `blockNumber`: [`HexNumber`](./common_types.md#hexnumber) Number of the block. #### - `gasLimit`: [`HexNumber`](./common_types.md#hexnumber) Total gas limit of the block. #### - `gasUsed`: [`HexNumber`](./common_types.md#hexnumber) Total gas used by all the transactions in the block. #### - `timestamp`: [`HexNumber`](./common_types.md#hexnumber) Timestamp of the block. #### - `extraData`: [`Bytes`](./common_types.md#bytes) Extra data of the block. #### - `prevRandao`: [`Hash`](./common_types.md#hash) PrevRandao of the block. #### - `blockHash`: [`Hash`](./common_types.md#hash) Hash of the block. #### - `transactions`: [`List`](./common_types.md#list)`[`[`Bytes`](./common_types.md#bytes)`]` List of transactions in the block, in serialized format. #### - `withdrawals`: [`List`](./common_types.md#list)`[`[`FixtureWithdrawal`](#fixturewithdrawal)`]` List of withdrawals in the block. #### - `baseFeePerGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: London)` Base fee per gas of the block. #### - `blobGasUsed`: [`HexNumber`](./common_types.md#hexnumber) `(fork: Cancun)` Total blob gas used by all the transactions in the block. #### - `excessBlobGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: Cancun)` Excess blob gas of the block used to calculate the blob fee per gas for this block. ### `FixtureWithdrawal` #### - `index`: [`HexNumber`](./common_types.md#hexnumber) Index of the withdrawal #### - `validatorIndex`: [`HexNumber`](./common_types.md#hexnumber) Withdrawing validator index #### - `address`: [`Address`](./common_types.md#address) Address to withdraw to #### - `amount`: [`HexNumber`](./common_types.md#hexnumber) Amount of the withdrawal ## Differences from Blockchain Engine Tests While the Blockchain Sync Test format is similar to the Blockchain Engine Test format, there are key differences: 1. **`syncPayload` field**: Contains the final block used to trigger synchronization on the sync client. 2. **Multi-client testing**: Tests involve two clients (client under test and sync client) rather than a single client. 3. **P2P networking**: Tests require P2P connection establishment between clients. 4. **No invalid blocks**: Sync tests only work with valid chains as invalid blocks cannot be synced. 5. **`postStateHash` field**: Optional field for state verification when full post-state is not included. ## Fork Support Blockchain Sync Tests are only supported for post-merge forks (Paris and later) as they rely on the Engine API for synchronization triggering. ================================================ FILE: docs/running_tests/test_formats/common_types.md ================================================ # Common Types ## Basic Types ### `Address` [Bytes](#bytes) of a 20-byte fixed length. ### `Bloom` [Bytes](#bytes) of a 256-byte fixed length. ### `Bytes` Hexadecimal representation of binary data of any length encoded as a JSON string, with a "0x" prefix. ### `EmptyAddress` An empty JSON string `""`, used to represent an empty address. E.g. in the `to` field of a transaction when it is a contract creation. ### `Hash` [Bytes](#bytes) of a 32-byte fixed length. ### `HeaderNonce` [Bytes](#bytes) of a 8-byte fixed length. ### `HexNumber` Hexadecimal number with "0x" prefix encoded as a JSON string. ### `List` A JSON array where each element is a specific type, also defined in this document. E.g. `List[Address]` is a JSON array where each element is an Ethereum address. ### `Mapping` A JSON object where the keys and values are specific types, also defined in this document. E.g. `Mapping[Address, Account]` is a JSON object where the keys are Ethereum addresses, and the values are Ethereum accounts. ### `Number` Decimal number encoded as a JSON string. ### `Optional` Marks a field as optional, meaning that the field can be missing from the JSON object. ### `ZeroPaddedHexNumber` Hexadecimal number with "0x" prefix encoded as a JSON string, with a single zero used to pad odd number of digits, and zero represented as "0x00". ## Composite Types ### `Storage`: [`Mapping`](#mapping)`[`[`Hash`](#hash)`,`[`Hash`](#hash)`]` Storage represented as a JSON object, where the keys and values are represented with the [`Hash`](#hash) type. ### `Account` An Ethereum account represented as a JSON object with the following fields: #### - `balance`: [`ZeroPaddedHexNumber`](#zeropaddedhexnumber) Balance of the account. #### - `nonce`: [`ZeroPaddedHexNumber`](#zeropaddedhexnumber) Nonce of the account. #### - `code`: [`Bytes`](#bytes) Code of the account. #### - `storage`: [`Storage`](#storage-mappinghashhash) Storage of the account. ### `Alloc`: [`Mapping`](#mapping)`[`[`Address`](#address)`,`[`Account`](#account)`]` State allocation represented as a JSON object, where the keys are the addresses of the accounts, and the values are the accounts. ### `BlobSchedule`: [`Mapping`](#mapping)`[`[`Fork`](#fork)`,`[`ForkBlobSchedule`](#forkblobschedule)`]` Maps forks to blob schedule configurations as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840). ### `Environment` Contains blockchain-related configuration that provides the context in which a test is run. ### `ForkBlobSchedule` A fork blob schedule as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840) as a JSON dictionary with the following entries: #### - `target`: [`ZeroPaddedHexNumber`](#zeropaddedhexnumber) The target blob count for a block. #### - `max`: [`ZeroPaddedHexNumber`](#zeropaddedhexnumber) The maximum possible blob count for a block. #### - `base_fee_update_fraction`: [`ZeroPaddedHexNumber`](#zeropaddedhexnumber) The blob base fee update fraction (adjusts the responsiveness of blob gas pricing per fork). ## Fork Fork type is represented as a JSON string that can be set to one of the following values: ### `"Frontier"` - Chain ID: `0x00` ### `"Homestead"` - Chain ID: `0x01` - Homestead Block: `0x00` ### `"Byzantium"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` ### `"Constantinople"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` ### `"ConstantinopleFix"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` ### `"Istanbul"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` ### `"MuirGlacier"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` ### `"Berlin"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` ### `"BerlinToLondonAt5"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x05` ### `"London"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` ### `"ArrowGlacier"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` ### `"GrayGlacier"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` - Gray Glacier Block: `0x00` ### `"Merge"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` - Gray Glacier Block: `0x00` - Terminal Total Difficulty: `0x00` ### `"MergeToShanghaiAtTime15k"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` - Gray Glacier Block: `0x00` - Terminal Total Difficulty: `0x00` - Shanghai Time: `0x3a98` ### `"Shanghai"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` - Gray Glacier Block: `0x00` - Terminal Total Difficulty: `0x00` - Shanghai Time: `0x00` ### `"ShanghaiToCancunAtTime15k"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` - Gray Glacier Block: `0x00` - Terminal Total Difficulty: `0x00` - Shanghai Time: `0x0` - Cancun Time: `0x3a98` ### `"Cancun"` - Chain ID: `0x01` - Homestead Block: `0x00` - EIP150 Block: `0x00` - EIP155 Block: `0x00` - EIP158 Block: `0x00` - DAO Fork Block: `0x00` - Byzantium Block: `0x00` - Constantinople Block: `0x00` - Constantinople Fix Block: `0x00` - Istanbul Block: `0x00` - Muir Glacier Block: `0x00` - Berlin Block: `0x00` - London Block: `0x00` - Arrow Glacier Block: `0x00` - Gray Glacier Block: `0x00` - Terminal Total Difficulty: `0x00` - Shanghai Time: `0x00` - Cancun Time: `0x00` ================================================ FILE: docs/running_tests/test_formats/exceptions.md ================================================ # Exceptions Exception types are represented as a JSON string in the test fixtures. The exception converted into a string is composed of the exception type name, followed by a period, followed by the specific exception name. For example, the exception `INSUFFICIENT_ACCOUNT_FUNDS` of type `TransactionException` is represented as `"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS"`. The JSON string can contain multiple exception types, separated by the `|` character, denoting that the transaction or block can throw either one of the exceptions. For a list of all defined exceptions look at [Ethereum Test Exceptions Package](../../library/ethereum_test_exceptions.md). ================================================ FILE: docs/running_tests/test_formats/index.md ================================================ # Test Fixture Specifications The following sub-sections provide: - Specifications for each test fixture format with an explanation of each field and its type. - Guides on how to consume each format. ================================================ FILE: docs/running_tests/test_formats/state_test.md ================================================ # State Tests The State Test fixture format tests are included in the fixtures subdirectory `state_tests`. These are produced by the `StateTest` and `StateTestOnly` test specs. ## Description The state test fixture format is used to test the state transition function of the Ethereum Virtual Machine (EVM). It does so by defining a transaction, a pre-execution state, and a post-execution state, and verifying that the transaction execution results in the expected post-execution state. A single JSON fixture file is composed of a JSON object where each key-value pair is a different [`Fixture`](#fixture) test object, with the key string representing the test name. The JSON file path plus the test name are used as the unique test identifier. As opposed to other fixture formats, the state test fixture format could contain multiple test vectors per test object, each represented by an element in the mapping of lists of the `post` field. However tests generated by the `execution-spec-tests` repository do **not** use this feature, as every single test object contains only a single test vector. ## Consumption For each [`Fixture`](#fixture) test object in the JSON fixture file, perform the following steps: 1. Use [`pre`](#-pre-alloc) as the starting state allocation of the execution environment for the test. 2. Use [`env`](#-env-fixtureenvironment) to configure the current execution environment. 3. For each [`Fork`](./common_types.md#fork) key of [`post`](#-post-mappingforklist-fixtureforkpost) in the test, and for each of the elements of the list of [`FixtureForkPost`](#fixtureforkpost) values: 1. Configure the execution fork schedule according to the current [`Fork`](./common_types.md#fork) key. 2. Using the [`indexes`](#-indexes-fixtureforkpostindexes) values, and the [`transaction`](#-transaction-fixturetransaction) object, decode the transaction to be executed. 3. If the serialized version of the decoded transaction does not match [`txbytes`](#-txbytes-bytes), fail the test. 4. Attempt to apply the transaction using the current execution environment: 1. If the transaction could not be applied to the current execution context: - If [`expectException`](#-expectexception-transactionexception) is empty, fail the test. - If [`expectException`](#-expectexception-transactionexception) is not empty, revert the state to the pre-state. 2. If the transaction could be applied to the current execution context: - If [`expectException`](#-expectexception-transactionexception) is not empty, fail the test. 5. Compare the resulting post-state root with the expected post-state root contained in the [`hash`](#-hash-hash) field of the current [`FixtureForkPost`](#fixtureforkpost), and fail the test if they do not match. 6. Compare the resulting logs hash with the expected logs contained in the [`logs`](#-logs-hash) field of the current [`FixtureForkPost`](#fixtureforkpost), and fail the test if they do not match. ## Structures ### `Fixture` #### - `env`: [`FixtureEnvironment`](#fixtureenvironment) Execution environment description for the test. #### - `pre`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Starting account allocation for the test. #### - `transaction`: [`FixtureTransaction`](#fixturetransaction) Transaction to be executed. #### - `post`: [`Mapping`](./common_types.md#mapping)`(`[`Fork`](./common_types.md#fork)`,`[`List`](./common_types.md#list)`[` [`FixtureForkPost`](#fixtureforkpost) `])` Mapping of lists of post for verification per fork, where each element represents a single possible outcome of the transaction execution after being applied to the `pre`. #### - `config`: [`FixtureConfig`](#fixtureconfig) Chain configuration object. ### `FixtureConfig` At the moment this object can contain only the `blobSchedule` that is necessary to apply the correct cap to the maximum amount of blobs that a transaction can have. Otherwise, in forks prior to Cancun for example, it will be an empty JSON object. #### - `blobSchedule`: [`BlobSchedule`](./common_types.md#blobschedule-mappingforkforkblobschedule) Optional; present from Cancun on. Maps forks to their blob schedule configurations as defined by [EIP-7840](https://eips.ethereum.org/EIPS/eip-7840). ### `FixtureEnvironment` #### - `currentCoinbase`: [`Address`](./common_types.md#address) The address of the account that will receive the rewards for building the block. #### - `currentGasLimit`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Total gas limit of the block where the transaction is executed. #### - `currentNumber`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Number of the block where the transaction is executed. #### - `currentDifficulty`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Difficulty of the block where the transaction is executed. #### - `currentTimestamp`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Timestamp of the block where the transaction is executed. #### - `currentBaseFee`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) `(fork: London)` Base fee of the block where the transaction is executed. #### - `currentRandom`: [`Hash`](./common_types.md#hash) `(fork: Paris)` Randao value of the block where the transaction is executed. #### - `currentExcessBlobGas`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) `(fork: Cancun)` Excess blob gas of the block where the transaction is executed. ### `FixtureTransaction` #### - `nonce`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Nonce of the account that sends the transaction #### - `gasPrice`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Gas price for the transaction (Transaction types 0 & 1) #### - `maxPriorityFeePerGas`: [`HexNumber`](./common_types.md#hexnumber) Max priority fee per gas to pay (Transaction types 2 & 3) #### - `maxFeePerGas`: [`HexNumber`](./common_types.md#hexnumber) Max base fee per gas to pay (Transaction types 2 & 3) #### - `gasLimit`: [`List`](./common_types.md#list)`[`[`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber)`]` List of gas limits used on each indexed test combination #### - `to`: [`Address`](./common_types.md#address)` | `[`EmptyAddress`](./common_types.md#emptyaddress) Destination address of the transaction, or an empty string to create a contract #### - `value`: [`List`](./common_types.md#list)`[`[`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber)`]` List of values used on each indexed test combination #### - `data`: [`List`](./common_types.md#list)`[`[`Bytes`](./common_types.md#bytes)`]` List of data bytes used on each indexed test combination #### - `accessLists`: [`List`](./common_types.md#list)`[`[`List`](./common_types.md#list)`[`[`Mapping`](./common_types.md#mapping)`[`[`Address`](./common_types.md#address)`,`[`List`](./common_types.md#list)`[`[`Hash`](./common_types.md#hash)`]]]]` `(fork: Berlin)` List of account access lists used on each indexed test combination (Transaction types 1, 2 & 3) #### - `maxFeePerBlobGas`: [`HexNumber`](./common_types.md#hexnumber) `(fork: Cancun)` Max fee per blob gas to pay (Transaction type 3) #### - `blobVersionedHashes`: [`List`](./common_types.md#list)`[`[`Hash`](./common_types.md#hash)`]` `(fork: Cancun)` List of blob versioned hashes the transaction includes (Transaction type 3) #### - `sender`: [`Address`](./common_types.md#address) Sender address of the transaction #### - `secretKey`: [`Hash`](./common_types.md#hash) Private key that must be used to sign the transaction ### `FixtureForkPost` #### - `indexes`: [`FixtureForkPostIndexes`](#fixtureforkpostindexes) Transaction field indexes that must be used to obtain the transaction to be executed #### - `txbytes`: [`Bytes`](./common_types.md#bytes) Serialized bytes version of the [`FixtureTransaction`](#fixturetransaction) that was executed to produce this post-state #### - `hash`: [`Hash`](./common_types.md#hash) Expected state root value that results of applying the transaction to the pre-state #### - `logs`: [`Hash`](./common_types.md#hash) Hash of the RLP representation of the state logs result of applying the transaction to the pre-state (TODO: double-check this.) #### - `expectException`: [`TransactionException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException) Exception that is expected to be thrown by the transaction execution (Field is missing if the transaction is expected to succeed) #### - `state`: [`Alloc`](./common_types.md#alloc-mappingaddressaccount) Dictionary that represents the allocation after execution of the transaction. ### `FixtureForkPostIndexes` #### - `data`: `int` Index of the data field in the transaction #### - `gas`: `int` Index of the gas limit field in the transaction #### - `value`: `int` Index of the value field in the transaction ================================================ FILE: docs/running_tests/test_formats/transaction_test.md ================================================ # Transaction Tests The Transaction Test fixture format tests are included in the fixtures subdirectory `transaction_tests`. These are produced by the `TransactionTest` test spec. ## Description The transaction test fixture format is used to test client's transaction RLP parsing without executing the transaction on the EVM. It does so by defining a transaction binary RLP representation, and whether the transaction should be accepted or rejected by the client in each fork. A single JSON fixture file is composed of a JSON object where each key-value pair is a different [`Fixture`](#fixture) test object, with the key string representing the test name. The JSON file path plus the test name are used as the unique test identifier. The transaction test fixture format could contain multiple test vectors per test object, each represented by an element in the mapping of lists of the `result` field. However tests generated by the `execution-spec-tests` repository do **not** use this feature, as every single test object contains only a single test vector. ## Consumption For each [`Fixture`](#fixture) test object in the JSON fixture file, perform the following steps: 1. Obtain the [`txbytes`](#-txbytes-bytes) serialized bytes of the transaction to be parsed. 2. For each [`Fork`](./common_types.md#fork) key of [`result`](#-result-mappingforkfixtureresult) in the test: 1. Assume the fork schedule according to the current [`Fork`](./common_types.md#fork) key. 2. Using the [`txbytes`](#-txbytes-bytes), attempt to decode the transaction. 3. If the transaction could not be decoded: - If the [`hash`](#-hash-hash-none) field is present, fail the test. - Compare the exception thrown with the expected exception contained in the [`exception`](#-exception-transactionexception) field, and fail the test if they do not match. - Proceed to the next fork. 4. If the transaction could be decoded: - Compare the calculated hash with the expected hash contained in the [`hash`](#-hash-hash-none) field, and fail the test if they do not match. - Compare the calculated intrinsic gas with the expected intrinsic gas contained in the [`intrinsicGas`](#-intrinsicgas-zeropaddedhexnumber) field, and fail the test if they do not match. - Compare the calculated sender with the expected sender contained in the [`sender`](#-sender-address) field, and fail the test if they do not match. ## Structures ### `Fixture` #### - `txbytes`: [`Bytes`](./common_types.md#bytes) Serialized bytes of the transaction under test. #### - `result`: [`Mapping`](./common_types.md#mapping)`[`[`Fork`](./common_types.md#fork)`,`[`FixtureResult`](#fixtureresult) `]` Mapping of results for verification per fork, where each key-value represents a single possible outcome of the transaction parsed in the given fork. ### `FixtureResult` #### - `hash`: [`Hash`](./common_types.md#hash) `| None` Calculated hash of the transaction (Field is missing if the transaction is expected to fail). #### - `intrinsicGas`: [`ZeroPaddedHexNumber`](./common_types.md#zeropaddedhexnumber) Total intrinsic gas cost of the transaction (Field is missing if the transaction is expected to fail). #### - `sender`: [`Address`](./common_types.md#address) Sender address of the transaction (Field is missing if the transaction is expected to fail). #### - `exception`: [`TransactionException`](../../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException) Exception that is expected to be thrown by the transaction parsing (Field is missing if the transaction is expected to succeed). ================================================ FILE: docs/running_tests/useful_pytest_options.md ================================================ # Useful Pytest Options The EEST commands to run tests are customizations to the pytest framework, which provides many helpful options for test selection, parallel execution, report output and debugging. This section provides the most relevant options, a full overview is available in the [pytest docs](https://docs.pytest.org/en/8.3.x/). ## Fixture Inputs (Consume Commands) See [Consume Cache and Fixture Inputs](./consume/cache.md). ## Dry-Run List collected tests, `-q` restricts output to [test IDs](../filling_tests/test_ids.md) only: ```bash uv run consume engine --input= --collect-only -q ``` In `./hive` [standalone mode](./hive/index.md), this can be achieved via EEST's [`--sim.limit` "collectonly" prefix](./hive/common_options.md#collect-onlydry-run). ## Output Control - `-v` - verbose output. - `-vv` - more verbose output. - `-s` - print stdout to the terminal during execution (don't capture it). - `--eest-log-level=` - write logs during test (helpful in combination with `-s`). ## Report Generation JSON, HTML and XML reports can be generated with: ```bash --json-report \ --json-report-file=report.json \ --html=report.html \ --junitxml=report.xml ``` ## Test Case Selection Using Test IDs In addition to Hive's regex-based `--sim.limit` option, running in dev mode supports pytest's `-k` syntax: ```bash uv run consume rlp -k "test_chainid and fork_London" uv run consume engine -k "eip1559 or eip4844" -m cancun ``` Use `--collect-only -q` to see which tests would run without executing them: ```bash uv run consume engine --collect-only -q -k "fork_Prague" ``` ## Test Case Selection using Marks Select tests based on pytest [marks](../writing_tests/test_markers.md). Run only state tests: ```bash uv run consume direct --input= -m state_test ``` Run blockchain tests for specific fork: ```bash uv run consume engine --input= -m "blockchain_test and cancun" ``` Combine marks with keyword filtering: ```bash uv run consume engine --input= -m "blockchain_test" -k "eip4844 or blob" ``` !!! note "Mark Availability" Not all test marks are available with consume commands. Fork and test type marks work reliably. ## Parallel Execution Speed up test execution by running tests in parallel using pytest-xdist. Auto-detect CPU count: ```bash uv run consume engine --input= -n auto ``` Specify worker count: ```bash uv run consume direct --input= -n 4 ``` ## Dropping in the Python Debugger Dropping into the Python debugger can be helpful to inspect EEST simulator state or ssh to a client container. Adding the `--pdb` option will drop into Python debugger upon test failure, `-x` tells pytest to exit after the first fail: ```bash uv run consume engine --pdb -x ... ``` ### PDB Cheatsheet - u → up the stack - d → down the stack - l → list lines around current position - ll → list entire function body - p → print expression - pp → pretty-print expression Sometimes `pp` is not enough and it's worth importing rich (`import rich`) in pdb and doing a `rich.print(obj)`. ## Early Exit Options Stop after first failure: ```bash uv run consume engine --input= -x ``` Stop after N failures: ```bash uv run consume rlp --input= --maxfail=3 ``` ## Performance and Timing Show slowest tests: ```bash uv run consume engine --input= --durations=10 ``` Show all test durations: ```bash uv run consume rlp --input= --durations=0 ``` Timeout control (per test): ```bash uv run consume direct --input= --timeout=30 ``` Print relevant test stage timings such as client start-up, payload response time (`consume` only): ```bash uv run consume engine --input= --timing-data ``` ================================================ FILE: docs/scripts/copy_repo_docs_to_mkdocs.py ================================================ """Include EEST's CONTRIBUTING.md and SECURITY.md in the HTML documentation.""" import logging import re from pathlib import Path import mkdocs_gen_files logger = logging.getLogger("mkdocs") def copy_markdown_file(source_path, destination_path, fix_links=True): """Copy a markdown file to the destination, fixing links if requested.""" source_file = Path(source_path) destination_file = Path(destination_path) if not source_file.is_file(): raise FileNotFoundError( f"Error: Source file '{source_file}' not found in current directory." ) try: with mkdocs_gen_files.open(destination_file, "w") as destination: with open(source_file, "r") as f: for line in f.readlines(): if fix_links: # Fix absolute website links to relative docs links line = re.sub( r"https://eest\.ethereum\.org/main/([^)\s]+)", r"../\1.md", line ) # Fix SECURITY.md link line = re.sub( r"\[Security Policy\]\(SECURITY\.md\)", r"[Security Policy](security.md)", line, ) # Fix EIP checklist template link line = re.sub( r"\[EIP checklist template\]\(./docs/writing_tests/checklist_templates/eip_testing_checklist_template.md\)", # noqa: E501 r"[EIP checklist template](../writing_tests/checklist_templates/eip_testing_checklist_template.md)", # noqa: E501 line, ) destination.write(line) except Exception as e: raise Exception(f"Error copying file {source_file} to {destination_file}") from e logger.info(f"Copied {source_file} to {destination_file}.") def include_contributing_in_docs(): """Copy CONTRIBUTING.md to ./docs/ to include in HTML docs.""" copy_markdown_file("CONTRIBUTING.md", "getting_started/contributing.md") def include_security_in_docs(): """Copy SECURITY.md to ./docs/getting_started/ to include in HTML docs.""" copy_markdown_file("SECURITY.md", "getting_started/security.md") include_contributing_in_docs() include_security_in_docs() ================================================ FILE: docs/scripts/gen_test_case_reference.py ================================================ """ Script called during mkdocs build|serve to create the "Test Case Reference". Called via the mkdocs-gen-files plugin; it's specified in mkdocs.yaml and can't take command-line arguments. The main logic is implemented in src/pytest_plugins/filler/gen_test_doc.py. """ import importlib import logging import sys from os import getenv import pytest from click.testing import CliRunner import pytest_plugins.filler.gen_test_doc.gen_test_doc as gen_test_doc from cli.pytest_commands.fill import fill from config import DocsConfig importlib.reload(gen_test_doc) # get changes in plugin to trigger an update for `mkdocs serve` TARGET_FORK = DocsConfig().TARGET_FORK GENERATE_UNTIL_FORK = DocsConfig().GENERATE_UNTIL_FORK logger = logging.getLogger("mkdocs") # if docs are generated while FAST_DOCS is true, then use "tests/frontier" otherwise use "tests" # USAGE 1 (use fast mode): # export FAST_DOCS=true && uv run mkdocs serve # USAGE 2 (use fast mode + hide side-effect warnings): # export FAST_DOCS=true && uv run mkdocs serve 2>&1 | sed '/is not found among documentation files/d' # noqa: E501 test_arg = "tests" fast_mode = getenv("FAST_DOCS") if fast_mode is not None: if fast_mode.lower() == "true": print("-" * 40, "\nWill generate docs using FAST_DOCS mode.\n" + "-" * 40) test_arg = "tests/frontier" args = [ "--override-ini", "filterwarnings=ignore::pytest.PytestAssertRewriteWarning", # suppress warnings due to reload "-p", "pytest_plugins.filler.gen_test_doc.gen_test_doc", "-p", "pytest_plugins.filler.eip_checklist", "--gen-docs", f"--gen-docs-target-fork={TARGET_FORK}", f"--until={GENERATE_UNTIL_FORK}", "--checklist-doc-gen", "--skip-index", "-m", "not blockchain_test_engine", "-s", test_arg, ] runner = CliRunner() logger.info( f"Generating documentation for test cases until {GENERATE_UNTIL_FORK} as fill {' '.join(args)}" ) result = runner.invoke(fill, args) for line in result.output.split("\n"): if "===" in line: logger.info(line.replace("===", "==")) continue logger.info(line) if result.exit_code in [pytest.ExitCode.OK, pytest.ExitCode.NO_TESTS_COLLECTED]: logger.info("Documentation generation successful.") sys.exit(0) logger.error( f"Documentation generation failed (exit: {pytest.ExitCode(result.exit_code)}, " f"{pytest.ExitCode(result.exit_code).name})." ) sys.exit(result.exit_code) ================================================ FILE: docs/scripts/generate_fill_help.py ================================================ #!/usr/bin/env python3 """ Generate the fill command help output for documentation. This script captures the output of 'fill --help' and generates a complete documentation page that includes both static content and the auto-generated help output. The generated page replaces the manual help output with current command-line options. """ import logging import subprocess import sys import textwrap import mkdocs_gen_files logger = logging.getLogger("mkdocs") def get_fill_help_output() -> str: """Run 'fill --help' and capture its output.""" try: result = subprocess.run( ["uv", "run", "fill", "--help"], capture_output=True, text=True, check=True, ) return result.stdout except subprocess.CalledProcessError as e: logger.error(f"Error running 'fill --help': {e}") logger.error(f"stderr: {e.stderr}") sys.exit(1) def format_help_output(help_text: str, max_width: int = 88) -> str: """ Format the help output with proper line wrapping. Args: help_text: The raw help output max_width: Maximum line width (default 88 to match existing docs) Returns: Formatted help text suitable for documentation """ lines = help_text.splitlines() formatted_lines = [] for line in lines: # Don't wrap lines that are part of the usage section or are empty if not line.strip() or line.startswith("usage:") or line.startswith(" ") and "--" in line: formatted_lines.append(line) else: # Wrap long lines while preserving indentation indent = len(line) - len(line.lstrip()) if len(line) > max_width and indent == 0: wrapped = textwrap.fill( line, width=max_width, subsequent_indent=" ", break_long_words=False, break_on_hyphens=False, ) formatted_lines.append(wrapped) else: formatted_lines.append(line) return "\n".join(formatted_lines) def generate_command_line_options_docs(): """Generate a standalone page with just the fill command-line options.""" # Get and format the help output help_output = get_fill_help_output() formatted_output = format_help_output(help_output) # Create the complete page content page_content = f"""# Fill Command-Line Options Fill is a [pytest](https://docs.pytest.org/en/stable/)-based command. This page lists custom options that the `fill` command provides. To see the full list of options that is available to fill (including the standard pytest and plugin command-line options) use `fill --pytest-help`. *This page is automatically generated from the current `fill --help` output.* ## Command Help Output ```text {formatted_output} ``` --- *This page was automatically generated from `fill --help` output.* """ # Write the generated content to a virtual file with mkdocs_gen_files.open("filling_tests/filling_tests_command_line_options.md", "w") as f: f.write(page_content) logger.info("Generated filling_tests_command_line_options.md with current fill --help output") # Run the generation generate_command_line_options_docs() ================================================ FILE: docs/stylesheets/custom.css ================================================ .slide { display: inline-block; position: relative; opacity: 0; left: 20px; transition: all 0.5s ease; } .slide.show { opacity: 1; left: 0; } .slide.hide { opacity: 0; left: 20px; } /* Data table control panel */ .control_panel .search_wrapper input { border: 1px solid #9e9e9e; border-radius: 4px; padding: 8px 15px; font-size: 18px; display: block; width: 100%; } .control_panel .filters { display: flex; } .control_panel .filters .filter_wrapper { margin-right: 15px; padding: 8px 14px; border-radius: 4px; vertical-align: middle; border: 1px solid #9e9e9e; margin-bottom: 10px; } .control_panel .filters .filter_wrapper label { color: #8f8f8f; font-weight: bold; font-size: 14px; } .control_panel .select2-container--default .select2-selection--single { border: none; } #test_table_wrapper .dt-search { display: none; } .twemoji { --md-icon-size: 1.125em; display: inline-flex; height: var(--md-icon-size); vertical-align: text-top; } .twemoji svg { fill: currentcolor; max-height: 100%; width: var(--md-icon-size); } .stand_alone_container { margin: 10px 15px; } .control_panel .filters .buttons-collection, .control_panel .filters .buttons-collection:hover { background: transparent; padding: 10px 15px; vertical-align: middle; border: 1px solid #9e9e9e; margin-bottom: 10px; } .control_panel div.dt-buttons > .dt-button:hover:not(.disabled), div.dt-buttons > div.dt-button-split .dt-button:hover:not(.disabled) { background: transparent; border: 1px solid #9e9e9e; } .buttons-collection .twemoji { color: #8f8f8f; margin-right: 4px; } ================================================ FILE: docs/templates/base.md.j2 ================================================ {% block title %} # {{ title }} {# templates inheriting from this base template can re-define the title block #} {% endblock %} Documentation for [`{{ pytest_node_id }}@{{ short_git_ref }}`]({{ source_code_url }}). {% if title != "Spec" %} !!! example "Generate fixtures for these test cases for {{ target_or_valid_fork }} with:" ```console {% if is_benchmark %} fill -v {{ pytest_node_id }} -m benchmark {% elif is_stateful %} fill -v {{ pytest_node_id }} -m stateful {% else %} fill -v {{ pytest_node_id }} --fork {{ target_or_valid_fork }} {% endif %} ``` {% endif %} {% block additional_content %} {# templates that inherit from base can add an additional_content block here #} {% endblock %} ================================================ FILE: docs/templates/directory.md.j2 ================================================ {% extends "base.md.j2" %} {% block title %} # {{ title }} {% endblock %} {% block additional_content %} ::: {{ package_name }} options: members: no {% endblock %} ================================================ FILE: docs/templates/function.html.j2 ================================================ {{ title }}()
{% block title %}

Test Function: {{ title }}()

{% endblock %}

{{ docstring_one_liner }}

Back to {{ title }}().

{% if cases %}

Parametrized Test Cases

{% include 'function_parameter_datatable.html.j2' %} {% endif %}
================================================ FILE: docs/templates/function.md.j2 ================================================ {% extends "base.md.j2" %} {% block title %} --- search: exclude: true --- {# don't include function pages in the mkdocs-material site search index see https://github.com/ethereum/execution-spec-tests/issues/1291 #} # `{{ title }}()` {% endblock %} {% block additional_content %} ::: {{ package_name }} options: filters: ["^[tT]est*|^Spec*"] ## Parametrized Test Cases {% if test_case_count > 1 %} The interactive table below is also available as a [standalone page]({{ html_static_page_target }}). {% elif fixture_formats | length > 1 %} This test case is only parametrized by fork and fixture format. {% else %} This test case is only parametrized by fork. {% endif %} {% include 'function_parameter_datatable.html.j2' %} {% endblock %} ================================================ FILE: docs/templates/function_parameter_datatable.html.j2 ================================================
{% for header in cases[0].params.keys() %} {% endfor %} {% for case in cases %} {% for value in case.params.values() %} {% endfor %} {% endfor %}
Test ID (Abbreviated){{ header }}
...{{ case.abbreviated_id }} {{ value }}
================================================ FILE: docs/templates/markdown_header.md.j2 ================================================ !!! note "Markdown Content" Below is the verbatim markdown content from [`{{ pytest_node_id }}@{{ short_git_ref }}`]({{ source_code_url }}). {# intentional additional newlines to force md file header/content to a newline #} ================================================ FILE: docs/templates/module.md.j2 ================================================ {% extends "base.md.j2" %} {% block title %} # {{ title }} {% endblock %} {% block additional_content %} ::: {{ package_name }} {% if "Spec" in title %} options: filters: ["^Spec*"] {% else %} options: members: no {% endif %} {% if test_functions %} ## Test Functions Overview | Name | Type | Cases ({{ target_or_valid_fork }}) | Description | |------|------|-------------------------------|-------------| {% for test_function in test_functions %} | [`{{ test_function.name }}`](./{{ test_function.name }}.md) | {{ test_function.test_type }} | {{ test_function.test_case_count }} | {{ test_function.docstring_one_liner }} | {% endfor %} {% endif %} {% endblock %} ================================================ FILE: docs/writing_tests/adding_a_new_test.md ================================================ # Adding a New Test All test cases are located underneath the `tests` directory, which are then organized by fork. Each fork contains sub-directories containing test sub-categories. ```text 📁 execution-test-specs/ ├─╴📁 tests/ | ├── 📄 __init__.py │ ├── 📁 cancun/ | | ├── 📄 __init__.py │ | └── 📁 eip4844_blobs/ | | ├── 📄 __init__.py | | ├── 📄 test_blobhash_opcode.py | | ├── 📄 test_excess_blob_gas.py | | └── 📄 ... | ├── 📁 shanghai | | ├── 📁 eip3651_warm_coinbase | | | ├── 📄 __init__.py | | | └── 📄 test_warm_coinbase.py | | ├── 📁 eip3855_push0 | | | ├── 📄 __init__.py | | | └── 📄 test_push0.py | | ├── 📁... | | ... │ └── 📁 ... ``` Each category/sub-directory may have multiple Python test modules (`*.py`) which in turn may contain many test functions. The test functions themselves are always parametrized by fork (by the framework). A new test can be added by either: - Adding a new `test_` python function to an existing file in any of the existing category subdirectories within `tests`. - Creating a new source file in an existing category, and populating it with the new test function(s). - Creating an entirely new category by adding a subdirectory in `tests` with the appropriate source files and test functions. ================================================ FILE: docs/writing_tests/benchmarks.md ================================================ # Benchmark Test Cases Benchmark tests aim to maximize the usage of a specific opcode, precompile, or operation within a transaction or block. They are located in the `./tests/benchmarks` folder and the available test cases are documented in [test case reference](../tests/benchmark/index.md). To fill a benchmark test, in addition to the usual test flags, you must include the `-m benchmark` flag. This is necessary because benchmark tests are ignored by default; they must be manually selected via the `benchmark` pytest marker (="tag"). This marker is applied to all tests under `./tests/benchmark/` automatically by the framework. **Note:** Benchmark tests are now only available starting from the `Prague` fork. Tests targeting earlier forks (`Cancun` or prior) are not supported in benchmark mode. ## Setting the Gas Limit for Benchmarking To consume the full benchmark gas limit, use the `gas_benchmark_value` fixture as the gas limit: ```py def test_benchmark( blockchain_test: BlockchainTestFiller, pre: Alloc, gas_benchmark_value: int ): ... ``` You can specify the block gas limit used in benchmark tests by setting the `--gas-benchmark-values` flag. This flag accepts a comma-separated list of values (in millions of gas), e.g. `--gas-benchmark-values 1,10,45,60`. This example would run the test 4 times, using a `gas_benchmark_value` of 1M, 10M, 45M, and 60M respectively. Do not configure the transaction/block gas limit to `env.gas_limit`. When running in benchmark mode, the test framework sets this value to a very large number (e.g., `1_000_000_000_000`), this setup allows the framework to reuse a single genesis file for all specified gas limits. I.e., the example below is invalid: ```py def test_benchmark( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment ): ... tx = Transaction( to=opcode_address, gas_limit=env.gas_limit, # Do not set the gas_limit manually. sender=pre.fund_eoa(), ) ... ``` ## Expected Gas Usage In benchmark mode, the developer should set the expected gas consumption using the `expected_benchmark_gas_used` field. Benchmark tests do not need to consume the full gas limit, instead, you could calculate and specify the expected usage. If `expected_benchmark_gas_used` is not set, the test will fall back to using `gas_benchmark_value` as the expected value. ```py @pytest.mark.valid_from("Prague") def test_empty_block( blockchain_test: BlockchainTestFiller, pre: Alloc, ): """Test running an empty block as a baseline for fixed proving costs.""" blockchain_test( pre=pre, post={}, blocks=[Block(txs=[])], expected_benchmark_gas_used=0, ) ``` This is a safety check to make sure the benchmark works as expected. For example, if a test uses the `JUMP` instruction but the jump destination is invalid, each transaction will stop early. That means it won't use as much gas as we expected. This check helps catch such issues. As a result, the post-storage comparison method via `SSTORE` is no longer needed, thereby reducing the additional storage cost. However, in cases where it is difficult to determine the total gas usage, or if an alternative verification method is used, developers may set `skip_gas_used_validation` to `True` to disable the gas usage check. ================================================ FILE: docs/writing_tests/checklist_templates/eip_testing_checklist_template.md ================================================ # EIP Execution Layer Testing Checklist Template Depending on the changes introduced by an EIP, the following template is the minimum baseline to guarantee test coverage of the Execution Layer features. ## Checklist Progress Tracker | Total Checklist Items | Covered Checklist Items | Percentage | | --------------------- | ----------------------- | ---------- | | TOTAL_CHECKLIST_ITEMS | COVERED_CHECKLIST_ITEMS | PERCENTAGE | ## General #### Code coverage | ID | Description | Status | Tests | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----- | | `general/code_coverage/eels` | Run produced tests against [EELS](https://github.com/ethereum/execution-specs) and verify that line code coverage of new added lines for the EIP is 100%, with only exceptions being unreachable code lines. | | | | `general/code_coverage/test_coverage` | Run coverage on the test code itself (as a basic logic sanity check), i.e., `uv run fill --cov tests`. | | | | `general/code_coverage/second_client` | Optional - Run against a second client and verify sufficient code coverage over new code added for the EIP. | | | #### Fuzzing Fuzzing is recommended to be performed on EIPs that introduce new cryptography primitives. See [holiman/goevmlab](https://github.com/holiman/goevmlab) for an example of a fuzzing framework for the EVM. ## New Opcode The EIP introduces one or more new opcodes to the EVM. ### Test Vectors #### Memory expansion If the opcode execution can expand the memory size, either by writing to memory or reading from an offset that exceeds current memory, or interaction of both parameters (size of zero should never result in memory expansion, regardless of offset value). | ID | Description | Status | Tests | | ------------------------------------------------ | ---------------------------------------------------------------- | ------ | ----- | | `opcode/test/mem_exp/zero_bytes_zero_offset` | Zero bytes expansion with zero-offset. | | | | `opcode/test/mem_exp/zero_bytes_max_offset` | Zero bytes expansion with 2\*\*256-1 offset. | | | | `opcode/test/mem_exp/single_byte` | Single byte expansion. | | | | `opcode/test/mem_exp/31_bytes` | 31 bytes expansion. | | | | `opcode/test/mem_exp/32_bytes` | 32 bytes expansion. | | | | `opcode/test/mem_exp/33_bytes` | 33 bytes expansion. | | | | `opcode/test/mem_exp/64_bytes` | 64 bytes expansion. | | | | `opcode/test/mem_exp/2_32_minus_one_bytes` | `2**32-1` bytes expansion. | | | | `opcode/test/mem_exp/2_32_bytes` | 2\*\*32 bytes expansion. | | | | `opcode/test/mem_exp/2_64_minus_one_bytes` | 2\*\*64-1 bytes expansion. | | | | `opcode/test/mem_exp/2_64_bytes` | 2\*\*64 bytes expansion. | | | | `opcode/test/mem_exp/2_256_minus_one_bytes` | 2\*\*256-1 bytes expansion (Should always result in Out-of-gas). | | | #### Stack ##### Stack Overflow If the opcode pushes one or more items to the stack, and the opcode pushes more elements than it pops, verify that the opcode execution results in exceptional abort when pushing elements to the stack would result in the stack having more than 1024 elements. | ID | Description | Status | Tests | | -------------------------------- | --------------- | ------ | ----- | | `opcode/test/stack_overflow` | Stack Overflow. | | | ##### Stack Underflow If the opcode pops one or more items to the stack, or it has a minimum stack height of one or more (e.g. `DUPN` requires a minimum amount of elements in the stack even when it does not pop any element from it), verify that the opcode execution results in exceptional abort then stack has 1 less item than the minimum stack height expected. | ID | Description | Status | Tests | | --------------------------------- | ---------------- | ------ | ----- | | `opcode/test/stack_underflow` | Stack Underflow. | | | ##### Stack Complex Operations If opcode performs stack operations more complex than simple pop/push (e.g. the opcode has a data portion that specifies a variable to access a specific stack element), perform the following test combinations. | ID | Description | Status | Tests | | ------------------------------------------------------------- | -------------------------------------------------------- | ------ | ----- | | `opcode/test/stack_complex_operations/stack_heights/zero` | Operation on an empty stack (Potential stack-underflow). | | | | `opcode/test/stack_complex_operations/stack_heights/odd` | Operation on a stack with an odd height. | | | | `opcode/test/stack_complex_operations/stack_heights/even` | Operation on a stack with an even height. | | | ##### Stack Manipulation With Data Portion Variables If the opcode contains variables in its data portion, for each variable `n` of the opcode that accesses the nth stack item, test `n` being. | ID | Description | Status | Tests | | ------------------------------------------------------------ | ------------------ | ------ | ----- | | `opcode/test/stack_complex_operations/data_portion_variables/top` | Top stack item. | | | | `opcode/test/stack_complex_operations/data_portion_variables/bottom` | Bottom stack item. | | | | `opcode/test/stack_complex_operations/data_portion_variables/middle` | Middle stack item. | | | #### Execution context Evaluate opcode's behavior in different execution contexts. ##### `CALL` Verify opcode operation in a subcall frame originated from a `CALL` opcode. | ID | Description | Status | Tests | | ---------------------------------------- | ----------- | ------ | ----- | | `opcode/test/execution_context/call` | `CALL`. | | | ##### `STATICCALL` Verify opcode operation in a subcall frame originated from a `STATICCALL` opcode. | ID | Description | Status | Tests | | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----- | | `opcode/test/execution_context/staticcall` | `STATICCALL`. | | | | `opcode/test/execution_context/staticcall/ban_check` | Verify exceptional abort if the opcode attempts to modify the code, storage or balance of an account. | | | | `opcode/test/execution_context/staticcall/ban_no_modification` | If the opcode is completely banned from static contexts, verify that even when its inputs would not cause any account modification, the opcode still results in exceptional abort of the execution (e.g. `PAY` with zero value, or `SSTORE` to the value it already has in the storage). | | | | `opcode/test/execution_context/staticcall/sub_calls` | Verify sub-calls using other opcodes (e.g. `CALL`, `DELEGATECALL`, etc) also results in the same exceptional abort behavior. | | | ##### `DELEGATECALL` Verify opcode operation in a subcall frame originated from a `DELEGATECALL` opcode. | ID | Description | Status | Tests | | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `opcode/test/execution_context/delegatecall` | `DELEGATECALL`. | | | | `opcode/test/execution_context/delegatecall/storage` | If the opcode modifies the storage of the account currently executing it, verify that only the account that is delegating execution is the one that has its storage modified. | | | | `opcode/test/execution_context/delegatecall/balance` | If the opcode modifies the balance of the account currently executing it, verify that only the account that is delegating execution is the one that has its balance modified. | | | | `opcode/test/execution_context/delegatecall/code` | If the opcode modifies the code of the account currently executing it, verify that only the account that is delegating execution is the one that has its code modified. | | | ##### `CALLCODE` Verify opcode operation in a subcall frame originated from a `CALLCODE` opcode. | ID | Description | Status | Tests | | -------------------------------------------- | ----------- | ------ | ----- | | `opcode/test/execution_context/callcode` | `CALLCODE`. | | | ##### Initcode Verify opcode behaves as expected when running during the initcode phase of contract creation. | ID | Description | Status | Tests | | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | ------ | ----- | | `opcode/test/execution_context/initcode/behavior` | Initcode operation. | | | | `opcode/test/execution_context/initcode/behavior/tx` | Initcode of a contract creating transaction. | | | | `opcode/test/execution_context/initcode/behavior/opcode` | Initcode of a contract creating opcode (including itself if opcode creates a contract). | | | | `opcode/test/execution_context/initcode/reentry` | Initcode re-entry: using the same initcode and same address (e.g. CREATE2->REVERT->CREATE2). | | | ##### Set-code Delegated Account Verify opcode operations are applied to the set-code account and do not affect the address that is the target of the delegation. | ID | Description | Status | Tests | | -------------------------------------------- | --------------------------- | ------ | ----- | | `opcode/test/execution_context/set_code` | Set-code delegated account. | | | ##### Transaction Context If opcode changes behavior depending on particular transaction properties, test using multiple values for each property. | ID | Description | Status | Tests | | ---------------------------------------------- | ------------------------------------- | ------ | ----- | | `opcode/test/execution_context/tx_context` | Transaction-context dependent opcode. | | | ##### Block Context If opcode changes behavior depending on particular block properties, test using multiple values for each property. | ID | Description | Status | Tests | | ------------------------------------------------- | ------------------------------- | ------ | ----- | | `opcode/test/execution_context/block_context` | Block-context dependent opcode. | | | #### Return data Verify proper return data buffer overwriting if the opcode is meant to interact with it, otherwise verify that the return data buffer is unaffected. | ID | Description | Status | Tests | | -------------------------------------------- | -------------------------------------- | ------ | ----- | | `opcode/test/return_data/buffer/current` | Return buffer at current call context. | | | | `opcode/test/return_data/buffer/parent` | Return buffer at parent call context. | | | #### Gas Usage ##### Normal Operation Verify gas usage affectation of each stack argument or memory input consumed by the opcode. | ID | Description | Status | Tests | | ---------------------------------- | --------------------------- | ------ | ----- | | `opcode/test/gas_usage/normal` | Normal operation gas usage. | | | ##### Memory Expansion Verify that the memory expansion correctly follows the gas calculation. | ID | Description | Status | Tests | | -------------------------------------------- | ----------------- | ------ | ----- | | `opcode/test/gas_usage/memory_expansion` | Memory expansion. | | | ##### Extra Gas Verify that attempting to execute the opcode when gas available is 1 more than the required gas results in exceptional abort. | ID | Description | Status | Tests | | ------------------------------------------------ | ----------------------------------- | ------ | ----- | | `opcode/test/gas_usage/extra_gas` | extra gas should not fail the execution | | | ##### Out-Of-Gas Verify that attempting to execute the opcode when gas available is 1 less than the required gas results in exceptional abort. | ID | Description | Status | Tests | | ------------------------------------------------ | ----------------------------------- | ------ | ----- | | `opcode/test/gas_usage/out_of_gas_execution` | Out-of-gas due to opcode inputs. | | | | `opcode/test/gas_usage/out_of_gas_memory` | Out-of-gas due to memory expansion. | | | ##### Order-of-operations If the opcode requires different gas stipends for other operations (e.g. contract creation, cold/warm account access), create one case for each operation (ideally independent of each other) and the listed cases for each. | ID | Description | Status | Tests | | ----------------------------------------------------- | ------------------------------------------------------------------ | ------ | ----- | | `opcode/test/gas_usage/order_of_operations/exact` | Success using the exact amount of gas required for the stipend. | | | | `opcode/test/gas_usage/order_of_operations/oog` | OOG with a 1-gas-difference from the gas required for the stipend. | | | #### Terminating opcode If an opcode is terminating, meaning it results in the current call context to end execution. | ID | Description | Status | Tests | | ------------------------------------------------- | --------------------------- | ------ | ----- | | `opcode/test/terminating/scenarios/top_level` | Top-level call termination. | | | | `opcode/test/terminating/scenarios/sub_level` | Sub-level call termination. | | | | `opcode/test/terminating/scenarios/initcode` | Initcode termination. | | | #### Aborting/Reverting opcode If the terminating opcode is meant to rollback the executing call frame, verify the listed events are properly rolled back. | ID | Description | Status | Tests | | ------------------------------------------------ | ------------------- | ------ | ----- | | `opcode/test/terminating/rollback/balance` | Balance changes. | | | | `opcode/test/terminating/rollback/storage` | Storage changes. | | | | `opcode/test/terminating/rollback/contracts` | Contract creations. | | | | `opcode/test/terminating/rollback/nonce` | Nonce increments. | | | | `opcode/test/terminating/rollback/logs` | Log events. | | | #### Out-of-bounds checks If the opcode has out-of-bounds conditions in its parameters/inputs. | ID | Description | Status | Tests | | --------------------------------------------------- | --------------------------------- | ------ | ----- | | `opcode/test/out_of_bounds/verify/max` | Max value for each parameter. | | | | `opcode/test/out_of_bounds/verify/max_plus_one` | Max value + 1 for each parameter. | | | #### Exceptional Abort If the opcode has conditions, either inputs or execution context states, that should cause exceptional abort and are different than out-of-gas or stack overflow or underflow. | ID | Description | Status | Tests | | ----------------------------------- | ----------------------------- | ------ | ----- | | `opcode/test/exceptional_abort` | Exceptional abort conditions. | | | #### Data portion If an opcode has a data portion, meaning the `N` bytes following the opcode in the contract bytecode are skipped from execution. | ID | Description | Status | Tests | | ---------------------------------------- | -------------------------------------------------------------------------------- | ------ | ----- | | `opcode/test/data_portion/all_zeros` | All zeros data portion. | | | | `opcode/test/data_portion/max_value` | Max value data portion (`2**N-1` where `N` is the bit size of the data portion). | | | | `opcode/test/data_portion/jump` | Jump into the data portion. | | | #### Contract creation If the opcode execution results in the creation of a new contract in the state. ##### Correct Creation Verify contract is created at the expected address given multiple inputs. | ID | Description | Status | Tests | | ------------------------------------------- | -------------------- | ------ | ----- | | `opcode/test/contract_creation/address` | Address calculation. | | | ##### Creation Failure The contract creation fails given the listed conditions. | ID | Description | Status | Tests | | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------ | ----- | | `opcode/test/contract_creation/failure/oog` | Out-of-gas when available gas is less than minimum contract creation stipend. | | | | `opcode/test/contract_creation/failure/insufficient_value` | Opcode has a value parameter and the caller does not have enough funds. | | | | `opcode/test/contract_creation/failure/collision` | Creation would result in an address collision with an existing contract or EOA-delegated address. | | | ##### Recursive Contract Creation Opcode is used to attempt to recreate a contract that is currently mid-creation by a previous call of the same opcode. | ID | Description | Status | Tests | | --------------------------------------------- | --------------------------------------------- | ------ | ----- | | `opcode/test/contract_creation/recursive` | Recursive contract creation using the opcode. | | | #### Fork transition | ID | Description | Status | Tests | | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `opcode/test/fork_transition/invalid` | Exceptional abort if executed before its activation fork/after its deactivation fork. | | | | `opcode/test/fork_transition/at` | Verify correct opcode behavior at transition block, in the case of opcodes which behavior depends on current or parent block information. | | | ### Framework Changes - Add opcode to `src/ethereum_test_vm/opcode.py` - Add opcode to relevant methods in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` ## New Precompile The EIP introduces one or more new precompiles. ### Test Vectors #### Call contexts Evaluate precompile behavior when called using different call opcodes or called from different execution contexts. ##### `CALL` Verify precompile operation when called using the `CALL` opcode. | ID | Description | Status | Tests | | ------------------------------------------ | ----------- | ------ | ----- | | `precompile/test/call_contexts/normal` | `CALL`. | | | ##### `DELEGATECALL` Verify precompile operation when called using the `DELEGATECALL` opcode. | ID | Description | Status | Tests | | -------------------------------------------- | --------------- | ------ | ----- | | `precompile/test/call_contexts/delegate` | `DELEGATECALL`. | | | ##### `STATICCALL` Verify precompile operation when called using the `STATICCALL` opcode. If the precompile is stateful, meaning calling it affects its storage, this call must result in exceptional abort. | ID | Description | Status | Tests | | ------------------------------------------ | ------------- | ------ | ----- | | `precompile/test/call_contexts/static` | `STATICCALL`. | | | ##### `CALLCODE` Verify precompile operation when called using the `CALLCODE` opcode. | ID | Description | Status | Tests | | -------------------------------------------- | ----------- | ------ | ----- | | `precompile/test/call_contexts/callcode` | `CALLCODE`. | | | ##### Transaction Entry-point Verify precompile behavior when it's used as `tx.to`. | ID | Description | Status | Tests | | -------------------------------------------- | -------------------------------------- | ------ | ----- | | `precompile/test/call_contexts/tx_entry` | Precompile as transaction entry-point. | | | ##### Initcode call Verify calling the opcode during initcode execution of a new contract. | ID | Description | Status | Tests | | --------------------------------------------------- | ---------------------------------------------------------------------------------- | ------ | ----- | | `precompile/test/call_contexts/initcode/CREATE` | Call from Initcode initiated from a CREATE/CREATE2 opcode. | | | | `precompile/test/call_contexts/initcode/tx` | Call from Initcode initiated from a contract-creating transaction (`tx.to==None`). | | | ##### Precompile as Set-code Delegated Address Test setting the precompile as a set-code delegated address, and verify no precompile logic is executed. | ID | Description | Status | Tests | | -------------------------------------------- | --------------------------- | ------ | ----- | | `precompile/test/call_contexts/set_code` | Set code delegated address. | | | #### Inputs | ID | Description | Status | Tests | | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `precompile/test/inputs/valid` | Verify combinations of valid inputs to the precompile. | | | | `precompile/test/inputs/valid/boundary` | Verify all boundary values given the precompile functionality. | | | | `precompile/test/inputs/valid/crypto` | If precompile performs cryptographic operations, verify behavior on all inputs that have special cryptographic properties (e.g. infinity points as inputs, or input values that result in infinity points returned). | | | | `precompile/test/inputs/all_zeros` | Verify all zeros input. | | | | `precompile/test/inputs/max_values` | Verify 2^N-1 where N is a single or multiple valid bit-lengths. | | | | `precompile/test/inputs/invalid` | Verify combinations of invalid inputs to the precompile. | | | | `precompile/test/inputs/invalid/crypto` | Inputs that fail specific mathematical or cryptographic validity checks. | | | | `precompile/test/inputs/invalid/corrupted` | Inputs that are malformed/corrupted. | | | #### Value Transfer ##### Minimum Fee Precompile If the precompile requires a minimum value (fee) to execute, either constant or depending on a formula. | ID | Description | Status | Tests | | ---------------------------------------------- | ---------------------------------------------------------------- | ------ | ----- | | `precompile/test/value_transfer/fee/under` | Calls with the required value amount minus one, expect failure. | | | | `precompile/test/value_transfer/fee/exact` | Calls with the exact required amount, expect success. | | | | `precompile/test/value_transfer/fee/over` | Calls with extra value than the required amount, expect success. | | | ##### No-Fee Precompile If the precompile does not require any minimum value (fee) to execute. | ID | Description | Status | Tests | | ---------------------------------------------- | ---------------------------------------------------------------- | ------ | ----- | | `precompile/test/value_transfer/no_fee` | Sending non-zero value does not cause an exception (unless otherwise specified by the EIP). | | | #### Out-of-bounds checks If the precompile has out-of-bounds conditions in its inputs. | ID | Description | Status | Tests | | ------------------------------------------------ | ----------------------------- | ------ | ----- | | `precompile/test/out_of_bounds/max` | Max value for each input. | | | | `precompile/test/out_of_bounds/max_plus_one` | Max value + 1 for each input. | | | #### Input Lengths Verify different combinations of input lengths to the precompile, ensuring the correct minimum fee (if any) is provided. ##### Zero-length Input Regardless of the input requirements for the precompile. | ID | Description | Status | Tests | | ---------------------------------------- | --------------------- | ------ | ----- | | `precompile/test/input_lengths/zero` | Zero-length calldata. | | | ##### Static Required Input Length If the precompile has a static required input length. | ID | Description | Status | Tests | | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------ | ----- | | `precompile/test/input_lengths/static/correct` | Correct static-length calldata. | | | | `precompile/test/input_lengths/static/too_short` | Calldata too short, where the value represents a correct but truncated input to the precompile. | | | | `precompile/test/input_lengths/static/too_long` | Calldata too long, where the value represents a correct input to the precompile with padded zeros. | | | ##### Dynamic Required Input Length If the precompile has a variable required input-length based on a formula, test all listed scenarios given different input lengths. | ID | Description | Status | Tests | | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------ | ----- | | `precompile/test/input_lengths/dynamic/valid` | Verify correct precompile execution for valid lengths. | | | | `precompile/test/input_lengths/dynamic/too_short` | Calldata too short, where the value represents a correct but truncated input to the precompile. | | | | `precompile/test/input_lengths/dynamic/too_long` | Calldata too long, where the value represents a correct input to the precompile with padded zeros. | | | #### Gas usage ##### Constant Gas Cost If the precompile always charges the same gas cost regardless of input conditions. | ID | Description | Status | Tests | | ---------------------------------------------- | ------------------------------------------------------------------- | ------ | ----- | | `precompile/test/gas_usage/constant/exact` | Verify exact gas consumption. | | | | `precompile/test/gas_usage/constant/oog` | Verify exact gas consumption minus one results in out-of-gas error. | | | ##### Variable Gas Cost If the precompile charges variable gas cost given input conditions, test all listed scenarios using multiple different valid inputs. | ID | Description | Status | Tests | | --------------------------------------------- | ------------------------------------------------------------------- | ------ | ----- | | `precompile/test/gas_usage/dynamic/exact` | Verify exact gas consumption. | | | | `precompile/test/gas_usage/dynamic/oog` | Verify exact gas consumption minus one results in out-of-gas error. | | | ##### Excessive Gas Verify spending all block gas in calls to the precompile (Use `Environment().gas_limit` as reference max amount). | ID | Description | Status | Tests | | ----------------------------------------- | -------------------- | ------ | ----- | | `precompile/test/excessive_gas_usage` | Excessive gas usage. | | | #### Fork transition ##### Pre-fork Block Call Verify that calling the precompile before its activation fork results in a valid call, even for inputs that are expected to be invalid for the precompile, or a zero-gas call. | ID | Description | Status | Tests | | ---------------------------------------------------------- | ------------------- | ------ | ----- | | `precompile/test/fork_transition/before/invalid_input` | Invalid input call. | | | | `precompile/test/fork_transition/before/zero_gas` | Zero-gas call. | | | ##### Cold/Warm Precompile Address State Verify the cold/warm state of the precompile address depending on the fork activation. | ID | Description | Status | Tests | | ------------------------------------------------- | ----------------------------------------------------------------- | ------ | ----- | | `precompile/test/fork_transition/before/cold` | Precompile address is cold by default before the fork activation. | | | | `precompile/test/fork_transition/after/warm` | Precompile address is warm by default after the fork activation. | | | ### Framework Changes - Add precompile address to relevant methods in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` ## Removed Precompile The EIP removes one or more precompiles from the existing list of precompiles. ### Test Vectors #### Fork transition ##### Precompile Operation Verify that the precompile remains operational up until the last block before the fork is active, and behaves as an account with empty code afterwards. | ID | Description | Status | Tests | | ----------------------------------------------------- | ---------------------------------------- | ------ | ----- | | `removed_precompile/test/fork_transition/operational` | Precompile operation on fork activation. | | | ##### Cold/Warm Precompile Address State Verify the cold/warm state of the precompile address depending on the fork activation. | ID | Description | Status | Tests | | ----------------------------------------------------- | ----------------------------------------------------------------- | ------ | ----- | | `removed_precompile/test/fork_transition/before/warm` | Precompile address is warm by default before the fork activation. | | | | `removed_precompile/test/fork_transition/after/cold` | Precompile address is cold by default after the fork activation. | | | ### Framework Changes - Remove the precompile address from relevant methods in the fork where the EIP is removed in `src/ethereum_test_forks/forks/forks.py` ## New System Contract ### Test Vectors #### Call contexts Evaluate precompile behavior when called using different call opcodes or called from different execution contexts. ##### `CALL` Verify system contract operation when called using the `CALL` opcode. | ID | Description | Status | Tests | | ----------------------------------------------- | ----------- | ------ | ----- | | `system_contract/test/call_contexts/normal` | `CALL`. | | | ##### `DELEGATECALL` Verify system contract operation when called using the `DELEGATECALL` opcode. | ID | Description | Status | Tests | | ------------------------------------------------- | --------------- | ------ | ----- | | `system_contract/test/call_contexts/delegate` | `DELEGATECALL`. | | | ##### `STATICCALL` Verify system contract operation when called using the `STATICCALL` opcode. If the system contract is stateful, meaning calling it affects its storage, this call must result in exceptional abort. | ID | Description | Status | Tests | | ----------------------------------------------- | ------------- | ------ | ----- | | `system_contract/test/call_contexts/static` | `STATICCALL`. | | | ##### `CALLCODE` Verify system contract operation when called using the `CALLCODE` opcode. | ID | Description | Status | Tests | | ------------------------------------------------- | ----------- | ------ | ----- | | `system_contract/test/call_contexts/callcode` | `CALLCODE`. | | | ##### Transaction Entry-point Verify system contract behavior when it's used as `tx.to`. | ID | Description | Status | Tests | | ------------------------------------------------- | ------------------------------------------- | ------ | ----- | | `system_contract/test/call_contexts/tx_entry` | System Contract as transaction entry-point. | | | ##### Initcode call Verify calling the opcode during initcode execution of a new contract. | ID | Description | Status | Tests | | -------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------ | ----- | | `system_contract/test/call_contexts/initcode/CREATE` | Call from Initcode initiated from a CREATE/CREATE2 opcode. | | | | `system_contract/test/call_contexts/initcode/tx` | Call from Initcode initiated from a contract-creating transaction (`tx.to==None`). | | | ##### System Contract as Set-code Delegated Address Test setting the system contract as a set-code delegated address, and verify no system contract side-effects are triggered, even if the actual system contract logic is executed. If the system contract requires specific storage pre-conditions to be set for proper execution (e.g. if the contract contains a safety mechanism that prevents it from executing prior to the fork activation), ensure the delegated account has the proper values in the storage to guarantee the correct logic is executed. | ID | Description | Status | Tests | | ------------------------------------------------- | --------------------------- | ------ | ----- | | `system_contract/test/call_contexts/set_code` | Set code delegated address. | | | #### Inputs | ID | Description | Status | Tests | | --------------------------------------------------- | ------------------------------------------------------------------------ | ------ | ----- | | `system_contract/test/inputs/valid` | Verify combinations of valid inputs to the system contract. | | | | `system_contract/test/inputs/boundary` | Verify all boundary values given the system contract functionality. | | | | `system_contract/test/inputs/all_zeros` | Verify all zeros input. | | | | `system_contract/test/inputs/max_values` | Verify 2^N-1 where N is a single or multiple valid bit-lengths. | | | | `system_contract/test/inputs/invalid` | Verify combinations of invalid inputs to the precompile. | | | | `system_contract/test/inputs/invalid/checks` | Inputs that fail validity checks. | | | | `system_contract/test/inputs/invalid/crypto` | Inputs that fail specific mathematical or cryptographic validity checks. | | | | `system_contract/test/inputs/invalid/corrupted` | Inputs that are malformed/corrupted. | | | #### Value Transfer ##### Minimum Fee System Contract If the system contract requires a minimum value (fee) to execute, either constant or depending on a formula. | ID | Description | Status | Tests | | --------------------------------------------------- | ---------------------------------------------------------------- | ------ | ----- | | `system_contract/test/value_transfer/fee/under` | Calls with the required value amount minus one, expect failure. | | | | `system_contract/test/value_transfer/fee/exact` | Calls with the exact required amount, expect success. | | | | `system_contract/test/value_transfer/fee/over` | Calls with extra value than the required amount, expect success. | | | ##### No-Fee System Contract If the system contract does not require any minimum value (fee) to execute. | ID | Description | Status | Tests | | ------------------------------------------------ | ------------------------------------------------------------------------------------------- | ------ | ----- | | `system_contract/test/value_transfer/no_fee` | Sending non-zero value does not cause an exception (unless otherwise specified by the EIP). | | | #### Out-of-bounds checks If the system contract has out-of-bounds conditions in its inputs. | ID | Description | Status | Tests | | ----------------------------------------------------- | ----------------------------- | ------ | ----- | | `system_contract/test/out_of_bounds/max` | Max value for each input. | | | | `system_contract/test/out_of_bounds/max_plus_one` | Max value + 1 for each input. | | | #### Input Lengths Verify different combinations of input lengths to the system contract, ensuring the correct minimum fee (if any) is provided. ##### Zero-length Input Regardless of the input requirements for the system contract. | ID | Description | Status | Tests | | --------------------------------------------- | --------------------- | ------ | ----- | | `system_contract/test/input_lengths/zero` | Zero-length calldata. | | | ##### Static Required Input Length If the system contract has a static required input length. | ID | Description | Status | Tests | | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------ | ----- | | `system_contract/test/input_lengths/static/correct` | Correct static-length calldata. | | | | `system_contract/test/input_lengths/static/too_short` | Calldata too short, where the value represents a correct but truncated input to the contract. | | | | `system_contract/test/input_lengths/static/too_long` | Calldata too long, where the value represents a correct input to the contract with padded zeros. | | | ##### Dynamic Required Input Length If the system contract has a variable required input-length based on a formula, test all listed scenarios given different input lengths. | ID | Description | Status | Tests | | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------ | ----- | | `system_contract/test/input_lengths/dynamic/valid` | Verify correct system contract execution for valid lengths. | | | | `system_contract/test/input_lengths/dynamic/too_short` | Calldata too short, where the value represents a correct but truncated input to the contract. | | | | `system_contract/test/input_lengths/dynamic/too_long` | Calldata too long, where the value represents a correct input to the contract with padded zeros. | | | #### Gas usage ##### Constant Gas Cost If the system contract always charges the same gas cost regardless of input conditions. | ID | Description | Status | Tests | | --------------------------------------------------- | ------------------------------------------------------------------- | ------ | ----- | | `system_contract/test/gas_usage/constant/exact` | Verify exact gas consumption. | | | | `system_contract/test/gas_usage/constant/oog` | Verify exact gas consumption minus one results in out-of-gas error. | | | ##### Variable Gas Cost If the system contract charges variable gas cost given input conditions, test all listed scenarios using multiple different valid inputs. | ID | Description | Status | Tests | | -------------------------------------------------- | ------------------------------------------------------------------- | ------ | ----- | | `system_contract/test/gas_usage/dynamic/exact` | Verify exact gas consumption. | | | | `system_contract/test/gas_usage/dynamic/oog` | Verify exact gas consumption minus one results in out-of-gas error. | | | #### Excessive Gas Cases ##### Excessive Gas Usage During Block Execution Verify spending all block gas in calls to system contract (Use `Environment().gas_limit` as reference max amount). | ID | Description | Status | Tests | | -------------------------------------------------- | ------------------------ | ------ | ----- | | `system_contract/test/excessive_gas/block_gas` | Exhaust block gas limit. | | | ##### Excessive Gas Usage During System Call If possible, produce a scenario where, given all transactions executed within the block result in the execution of the contract by the system address would result in excessive gas usage. | ID | Description | Status | Tests | | ---------------------------------------------------- | ----------------------------- | ------ | ----- | | `system_contract/test/excessive_gas/system_call` | Excessive gas on system call. | | | #### System Contract Deployment | ID | Description | Status | Tests | | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `system_contract/test/deployment/missing` | Verify block execution behavior after fork activation if the system contract has not been deployed (Depending on the EIP, block could be invalid). | | | | `system_contract/test/deployment/address` | Verify deployment transaction results in the system contract being deployed to the expected address. | | | #### Contract Variations Verify execution of the different variations of the contract for different networks (if any) results in the expected behavior. | ID | Description | Status | Tests | | ------------------------------------------------------- | -------------------------------------- | ------ | ----- | | `system_contract/test/contract_variations/networks` | Different network contract variations. | | | #### Contract Substitution Substitute the default system contract with a mock contract to modify its behavior when called by the system address (at the end of the block execution). | ID | Description | Status | Tests | | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------ | ----- | | `system_contract/test/contract_substitution/return_lengths` | Modified return value lengths. | | | | `system_contract/test/contract_substitution/logs` | Modified to emit logs or modified logs. | | | | `system_contract/test/contract_substitution/exception` | Modified to cause an exception (e.g. invalid opcode). | | | | `system_contract/test/contract_substitution/gas_limit_success` | Modified to consume 30,000,000 million gas exactly, execution should be successful. | | | | `system_contract/test/contract_substitution/gas_limit_failure` | Modified to consume 30,000,001 million gas exactly, execution should fail. | | | #### Fork transition Verify calling the system contract before its activation fork results in correct behavior (depends on the system contract implementation). | ID | Description | Status | Tests | | ----------------------------------------------------------- | --------------------------------- | ------ | ----- | | `system_contract/test/fork_transition/call_before_fork` | Call system contract before fork. | | | ### Framework Changes - Add system contract address to relevant methods in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` - Add system contract bytecode to the returned value of `pre_allocation_blockchain` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` ## New Transaction Type ### Test Vectors #### Intrinsic Validity Verify the transaction (and the block it is included in) is valid or invalid given the intrinsic validity of the new transaction type, depending on each test scenario. For each new field that affects the intrinsic gas cost of the transaction verify all listed scenarios. ##### Gas Limit Note: Data floor gas cost affects the intrinsic validity of all transaction types, so it must be taken into account when designing all test scenarios. | ID | Description | Status | Tests | | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/gas_limit/exact` | Provide the exact intrinsic gas as `gas_limit` value to the transaction. | | | | `transaction_type/test/intrinsic_validity/gas_limit/insufficient` | Provide the exact intrinsic gas minus one as `gas_limit` value to the transaction. | | | ##### Gas Fee | ID | Description | Status | Tests | | -------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/max_fee/max_priority_lower_than_max_fee` | Invalid if `tx.max_priority_fee_per_gas < tx.max_fee_per_gas`. | | | | `transaction_type/test/intrinsic_validity/max_fee/max_priority_equal_to_max_fee` | Valid if `tx.max_priority_fee_per_gas == tx.max_fee_per_gas`. | | | | `transaction_type/test/intrinsic_validity/max_fee/base_lower` | Invalid if `tx.max_fee_per_gas < block.base_fee_per_gas`. | | | | `transaction_type/test/intrinsic_validity/max_fee/base_equal` | Valid if `tx.max_fee_per_gas < block.base_fee_per_gas`. | | | ##### Chain ID | ID | Description | Status | Tests | | ------------------------------------------------------- | --------------------------------------------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/chain_id` | Invalid if `tx.chain_id != network.chain_id`. | | | ##### Nonce | ID | Description | Status | Tests | | -------------------------------------------------------------- | ------------------------------------------ | ------ | ----- | | `transaction_type/test/intrinsic_validity/nonce_minus_one` | Invalid if `tx.nonce == sender.nonce - 1`. | | | | `transaction_type/test/intrinsic_validity/nonce_plus_one` | Invalid if `tx.nonce == sender.nonce + 1`. | | | | `transaction_type/test/intrinsic_validity/nonce_exact` | Valid if `tx.nonce == sender.nonce`. | | | ##### To | ID | Description | Status | Tests | | ------------------------------------------------- | ------------------------------------------------------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/to` | Valid/Invalid if `tx.to == None`, depending on the EIP. | | | ##### Value | ID | Description | Status | Tests | | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/value_non_zero_insufficient_balance` | Invalid if `tx.value == 1` and `account.balance == (tx.max_fee_per_gas * tx.gas_price)`. | | | | `transaction_type/test/intrinsic_validity/value_non_zero_sufficient_balance` | Valid if `tx.value == 1` and `account.balance == (tx.max_fee_per_gas * tx.gas_price) + 1`. | | | | `transaction_type/test/intrinsic_validity/value_zero_insufficient_balance` | Invalid if `tx.value == 0` and `account.balance == (tx.max_fee_per_gas * tx.gas_price) - 1`. | | | | `transaction_type/test/intrinsic_validity/value_zero_sufficient_balance` | Valid if `tx.value == 0` and `account.balance == (tx.max_fee_per_gas * tx.gas_price)`. | | | ##### Data | ID | Description | Status | Tests | | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/data_floor_above_intrinsic_gas_cost` | Invalid if `data_floor_cost(len(tx.data)) > tx.intrinsic_gas_cost` and `tx.gas_limit == tx.intrinsic_gas_cost`. | | | | `transaction_type/test/intrinsic_validity/data_floor_above_intrinsic_gas_cost` | Valid if `data_floor_cost(len(tx.data)) > tx.intrinsic_gas_cost` and `tx.gas_limit == data_floor_cost(len(tx.data))`. | | | #### Signature Verify the transaction is correctly rejected if it contains an invalid signature. | ID | Description | Status | Tests | | ----------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/signature/invalid/field_outside_curve` | V, R, S represent a value that is inside of the field but outside of the curve. | | | ##### V | ID | Description | Status | Tests | | --------------------------------------------------- | ---------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/signature/invalid/v/2` | `2`. | | | | `transaction_type/test/signature/invalid/v/27` | `27` (Type-0 transaction valid value). | | | | `transaction_type/test/signature/invalid/v/28` | `28` (Type-0 transaction valid value). | | | | `transaction_type/test/signature/invalid/v/35` | `35` (Type-0 replay-protected transaction valid value for chain id 1). | | | | `transaction_type/test/signature/invalid/v/36` | `36` (Type-0 replay-protected transaction valid value for chain id 1). | | | | `transaction_type/test/signature/invalid/v/max` | `2**8-1`. | | | ##### R | ID | Description | Status | Tests | | -------------------------------------------------------------------- | --------------- | ------ | ----- | | `transaction_type/test/signature/invalid/r/0` | `0`. | | | | `transaction_type/test/signature/invalid/r/secp256k1n_minus_one` | `SECP256K1N-1`. | | | | `transaction_type/test/signature/invalid/r/secp256k1n` | `SECP256K1N`. | | | | `transaction_type/test/signature/invalid/r/secp256k1n_plus_one` | `SECP256K1N+1`. | | | | `transaction_type/test/signature/invalid/r/max_minus_one` | `2**256-1`. | | | | `transaction_type/test/signature/invalid/r/max` | `2**256`. | | | ##### S | ID | Description | Status | Tests | | ------------------------------------------------------------------------- | -------------------------------------- | ------ | ----- | | `transaction_type/test/signature/invalid/s/0` | `0`. | | | | `transaction_type/test/signature/invalid/s/secp256k1n_half_minus_one` | `SECP256K1N//2-1`. | | | | `transaction_type/test/signature/invalid/s/secp256k1n_half` | `SECP256K1N//2`. | | | | `transaction_type/test/signature/invalid/s/secp256k1n_half_plus_one` | `SECP256K1N//2+1`. | | | | `transaction_type/test/signature/invalid/s/secp256k1n_minus_one` | `SECP256K1N-1`. | | | | `transaction_type/test/signature/invalid/s/secp256k1n` | `SECP256K1N`. | | | | `transaction_type/test/signature/invalid/s/secp256k1n_plus_one` | `SECP256K1N+1`. | | | | `transaction_type/test/signature/invalid/s/max_minus_one` | `2**256-1`. | | | | `transaction_type/test/signature/invalid/s/max` | `2**256`. | | | | `transaction_type/test/signature/invalid/s/complement` | `SECP256K1N - S` of a valid signature. | | | #### Transaction Attributes Readable From EVM | ID | Description | Status | Tests | | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/tx_scoped_attributes/read` | Verify attributes that can be read in the EVM from transaction fields. | | | | `transaction_type/test/tx_scoped_attributes/older_tx_types` | Verify attributes specific to the new transaction type that can be read in the EVM behave correctly on older transaction types. | | | #### Transaction-Scoped Persistent Values Verify values or variables that are persistent through the execution of the transaction (e.g. transient storage, warm/cold accounts). | ID | Description | Status | Tests | | --------------------------------------------------------------------- | ----------------------------------------------| ------ | ----- | | `transaction_type/test/tx_scoped_attributes/persistent/throughout` | Persist throughout the entire transaction. | | | | `transaction_type/test/tx_scoped_attributes/persistent/reset` | Reset on subsequent transactions in the same block. | | | #### Encoding (RLP, SSZ) Verify correct transaction rejection in all listed scenarios. ##### Field Sizes Verify all listed scenarios for each transaction field. | ID | Description | Status | Tests | | ------------------------------------------------------------- | ------------------------------------------------- | ------ | ----- | | `transaction_type/test/encoding/field_sizes/leading_zero` | Add leading zero byte. | | | | `transaction_type/test/encoding/field_sizes/remove_byte` | Remove single byte from fixed-byte-length fields. | | | ##### Fields of List Type Verify for each transaction field that is of type list. | ID | Description | Status | Tests | | ------------------------------------------------------------ | --------------------------------------------- | ------ | ----- | | `transaction_type/test/encoding/list_field/zero` | Zero-element list (Failure depending on EIP). | | | | `transaction_type/test/encoding/list_field/max` | Max count list. | | | | `transaction_type/test/encoding/list_field/max_plus_one` | Max count plus one list. | | | ##### Extra/Missing Fields | ID | Description | Status | Tests | | --------------------------------------------------- | --------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/encoding/missing_fields` | Any fields particular to the new transaction types are missing. | | | | `transaction_type/test/encoding/extra_fields` | Transaction contains extra fields. | | | ##### Serialization Corruption | ID | Description | Status | Tests | | ------------------------------------------------ | ------------------------------------------------- | ------ | ----- | | `transaction_type/test/encoding/truncated` | Serialized bytes object is truncated by one byte. | | | | `transaction_type/test/encoding/extra_bytes` | Serialized bytes object has one extra byte. | | | ##### Serializable Fields Verify for each serializable field, all previous tests plus following listed scenario. | ID | Description | Status | Tests | | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------ | ----- | | `transaction_type/test/encoding/new_types/incorrect_encoding` | Serializable field is encoded as bytes instead of using the correct encoding (e.g. list in the case of RLP). | | | #### Out-of-bounds checks Verify if the transaction has out-of-bounds conditions in its fields and verify. | ID | Description | Status | Tests | | ------------------------------------------------------ | ----------------------------- | ------ | ----- | | `transaction_type/test/out_of_bounds/max` | Max value for each field. | | | | `transaction_type/test/out_of_bounds/max_plus_one` | Max value + 1 for each field. | | | #### Contract creation Verify that the transaction can create new contracts if the transaction type supports it. | ID | Description | Status | Tests | | --------------------------------------------- | -------------------------------------------- | ------ | ----- | | `transaction_type/test/contract_creation` | Create contracts using new transaction type. | | | #### Sender account modifications | ID | Description | Status | Tests | | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/sender_account/nonce` | Sender account has its nonce incremented at least by one after the transaction is included in a block (or more if the transaction type introduces a new mechanism that bumps the nonce by more than one). | | | | `transaction_type/test/sender_account/balance` | Sender account has its balance reduced by the correct amount (gas consumed and value) at the start of execution (e.g. using `BALANCE`). | | | #### Block Level Interactions ##### Single Transaction In Block Verify a block where the new transaction type is the sole transaction contained in the block. | ID | Description | Status | Tests | | ---------------------------------------------------------------- | ------------------------------------------------- | ------ | ----- | | `transaction_type/test/block_interactions/single_tx/invalid` | Invalid if `tx.gas_limit == block.gas_limit + 1`. | | | | `transaction_type/test/block_interactions/single_tx/valid` | Valid if `tx.gas_limit == block.gas_limit`. | | | ##### Two Transactions In Block Verify a block where the new transaction type is the last transaction contained in a block with two transactions. | ID | Description | Status | Tests | | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `transaction_type/test/block_interactions/last_tx/valid` | Valid if `block.txs[0].gas_used + block.txs[1].gas_limit == block.gas_limit`. | | | | `transaction_type/test/block_interactions/last_tx/invalid` | Invalid if `(block.txs[0].gas_used + block.txs[1].gas_limit == block.gas_limit + 1) and (block.txs[0].gas_used < block.gas_limit)`. | | | ##### EIP-7825 Verify a transaction of the new type is rejected if its gas limit exceeds the [EIP-7825](https://eips.ethereum.org/EIPS/eip-7825) gas limit for the current fork. | ID | Description | Status | Tests | | -------------------------------------------------------------- | -------------------------------------------- | ------ | ----- | | `transaction_type/test/block_interactions/eip7825/invalid` | Exceeds EIP-7825 gas limit by one. | | | | `transaction_type/test/block_interactions/eip7825/valid` | Gas limit is exactly the EIP-7825 gas limit. | | | ##### Mixed transactions Verify a block with all transactions types including the new type is executed correctly. | ID | Description | Status | Tests | | -------------------------------------------------------- | ------------------- | ------ | ----- | | `transaction_type/test/block_interactions/mixed_txs` | Mixed transactions. | | | #### Fork transition Verify that a block prior to fork activation where the new transaction type is introduced and containing the new transaction type is invalid. | ID | Description | Status | Tests | | -------------------------------------------------- | ----------------------------------------------------------- | ------ | ----- | | `transaction_type/test/fork_transition/before` | New transaction type included before fork activation block. | | | #### RPC Tests - \*Verify `eth_estimateGas` behavior for different valid combinations of the new transaction type. - `transaction_type/test/rpc/send_raw` | Verify `eth_sendRawTransaction` using `execute`. \*Tests must be added to [`execution-apis`](https://github.com/ethereum/execution-apis) repository. ### Framework Changes - Modify `transaction_intrinsic_cost_calculator` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py`, adding the appropriate new fields that the transaction introduced and the logic to the intrinsic gas cost calculation, if any. - Add the transaction type number to `tx_types` response in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` (If applicable add also to `contract_creating_tx_types`). ## New Block Header Field ### Test Vectors #### Genesis value Verify, if possible, that the value can be set at genesis if the network starting fork is the activation fork, and that clients can consume such genesis. | ID | Description | Status | Tests | | ------------------------------------- | ---------------------------------- | ------ | ----- | | `block_header_field/test/genesis` | New block header field at genesis. | | | #### Value behavior Verify, given multiple initial values, that a block is accepted or rejected depending on the correct expected value for the current block. | ID | Description | Status | Tests | | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----- | | `block_header_field/test/value_behavior/accept` | Block is accepted if the value is the correct expected for the current block, depending on the circumstances that affect the value as defined in the EIP. | | | | `block_header_field/test/value_behavior/reject` | Block is rejected if the value is modified (using `block.rlp_modifier`) to an incorrect value for the current block, depending on the circumstances that affect the value as defined in the EIP. | | | #### Fork transition | ID | Description | Status | Tests | | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------ | ----- | | `block_header_field/test/fork_transition/initial` | Verify initial value of the field at the first block of the activation fork. | | | | `block_header_field/test/fork_transition/before` | Verify that a block containing the new header field before the activation of the fork is invalid. | | | | `block_header_field/test/fork_transition/after` | Verify that a block lacking the new header field at the activation of the fork is invalid. | | | ### Framework Changes - Add the new header field to the relevant objects: - `ethereum_test_fixtures.FixtureHeader`. - `ethereum_test_fixtures.FixtureExecutionPayload`. - `ethereum_test_specs.Header`. - Add the appropriate `header_*_required` fork method to `BaseFork` in `ethereum_test_forks`. ## New Block Body Field ### Test Vectors #### Value behavior Verify, given multiple initial values, that a block is accepted or rejected depending on the correct expected value for the current block. | ID | Description | Status | Tests | | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `block_body_field/test/value_behavior/accept` | Block is accepted if the value is the correct expected for the current block, depending on the circumstances that affect the value as defined in the EIP. | | | | `block_body_field/test/value_behavior/reject` | Block is rejected if the value is modified (using appropriate `block`) to an incorrect value for the current block, depending on the circumstances that affect the value as defined in the EIP. | | | #### Fork transition | ID | Description | Status | Tests | | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------ | ----- | | `block_body_field/test/fork_transition/before` | Verify that a block containing the new block body field before the activation of the fork is invalid. | | | | `block_body_field/test/fork_transition/after` | Verify that a block lacking the new block field at the activation of the fork is invalid. | | | ### Framework Changes - Add the new body field to the relevant objects. - `ethereum_test_fixtures.FixtureBlockBase`. - `ethereum_test_fixtures.FixtureEngineNewPayload`. - `ethereum_test_specs.Block`. - Modify `ethereum_test_specs.BlockchainTest` filling behavior to account for the new block field. ## Gas Cost Changes ### Test Vectors #### Gas Usage Measure and store the gas usage during the operations affected by the gas cost changes and verify the updated behavior. | ID | Description | Status | Tests | | ----------------------------------------------- | -------------------------- | ------ | ----- | | `gas_cost_changes/test/gas_updates_measurement` | Measure updated gas costs. | | | #### Out-of-gas Verify the operations affected by the gas cost changes can run out-of-gas with the updated limits. | ID | Description | Status | Tests | | ---------------------------------- | ------------------------------- | ------ | ----- | | `gas_cost_changes/test/out_of_gas` | Out-Of-Gas with new gas prices. | | | #### Fork transition Verify gas costs are updated at the fork transition boundary. | ID | Description | Status | Tests | | ---------------------------------------------- | ----------------------------------------------------- | ------ | ----- | | `gas_cost_changes/test/fork_transition/before` | Costs unaffected before the fork activation block. | | | | `gas_cost_changes/test/fork_transition/after` | Costs are updated on and after fork activation block. | | | ### Framework Changes - Modify `transaction_intrinsic_cost_calculator` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` if the EIP affects intrinsic gas cost calculation. - Modify `transaction_data_floor_cost_calculator` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` if the EIP affects calldata floor cost. - Modify `memory_expansion_gas_calculator` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` if the EIP affects memory expansion gas cost calculation. - Modify `gas_costs` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` if the EIP affects specific opcode gas costs. ## Gas Refunds Changes ### Test Vectors #### Refund calculation Verify that the refund does not exceed `gas_used // MAX_REFUND_QUOTIENT` (`MAX_REFUND_QUOTIENT==5` in [EIP-3529](https://eips.ethereum.org/EIPS/eip-3529)) in the following scenarios. | ID | Description | Status | Tests | | --------------------------------------------------- | ------------------------------------------------ | ------ | ----- | | `gas_refunds_changes/test/refund_calculation/over` | `refund == gas_used // MAX_REFUND_QUOTIENT + 1`. | | | | `gas_refunds_changes/test/refund_calculation/exact` | `refund == gas_used // MAX_REFUND_QUOTIENT`. | | | | `gas_refunds_changes/test/refund_calculation/under` | `refund == gas_used // MAX_REFUND_QUOTIENT - 1`. | | | #### Exceptional Abort | ID | Description | Status | Tests | | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `gas_refunds_changes/test/exceptional_abort/revertable` | If the operation causing the refund can be reverted, verify the refund is not applied if the following cases:. | | | | `gas_refunds_changes/test/exceptional_abort/revertable/revert` | `REVERT`. | | | | `gas_refunds_changes/test/exceptional_abort/revertable/out_of_gas` | Out-of-gas. | | | | `gas_refunds_changes/test/exceptional_abort/revertable/invalid_opcode` | Invalid opcode. | | | | `gas_refunds_changes/test/exceptional_abort/revertable/upper_revert` | `REVERT` of an upper call frame. | | | | `gas_refunds_changes/test/exceptional_abort/non_revertable` | If the operation causing the refund cannot be reverted (e.g. in the case of a transaction-scoped operation such as authorization refunds in EIP-7702), verify the refund is still applied even in the following cases:. | | | | `gas_refunds_changes/test/exceptional_abort/non_revertable/revert` | `REVERT` at the top call frame. | | | | `gas_refunds_changes/test/exceptional_abort/non_revertable/out_of_gas` | Out-of-gas at the top call frame. | | | | `gas_refunds_changes/test/exceptional_abort/non_revertable/invalid_opcode` | Invalid opcode at the top call frame. | | | #### Cross-Functional Test Verify the following tests are updated to support the new type of refunds. | ID | Description | Status | Tests | | --------------------------------------------------------- | -------------------------------------------------------------- | ------ | ----- | | `gas_refunds_changes/test/cross_functional/calldata_cost` | `tests/prague/eip7623_increase_calldata_cost/test_refunds.py`. | | | ### Framework Changes N/A ## Blob Count Changes ### Test Vectors #### Existing Test Updates Verify tests in `tests/cancun/eip4844_blobs` were correctly and automatically updated to take into account the new blob count values at the new fork activation block. | ID | Description | Status | Tests | | ----------------------------------------------- | --------------------------------------------------------------- | ------ | ----- | | `blob_count_changes/test/eip4844_blobs_changes` | Updates to `tests/cancun/eip4844_blobs` were applied correctly. | | | ### Framework Changes - Modify `blob_base_fee_update_fraction`, `target_blobs_per_block`, `max_blobs_per_block` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` if the EIP affects any of the values returned by each function. ## New Execution Layer Request ### Test Vectors #### Cross-Request-Type Interaction | ID | Description | Status | Tests | | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `execution_layer_request/test/cross_request_type/update` | Update `tests/prague/eip7685_general_purpose_el_requests` tests to include the new request type in the tests combinations. | | | ### Framework Changes - Increment `max_request_type` in the fork where the EIP is introduced in `src/ethereum_test_forks/forks/forks.py` to the new maximum request type number after the EIP is activated. ## New Transaction-Validity Constraint ### Test Vectors #### Fork transition | ID | Description | Status | Tests | | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `new_transaction_validity_constraint/test/fork_transition/accepted_before_fork` | Verify that a block before the activation fork is accepted even when the new constraint is not met. | | | | `new_transaction_validity_constraint/test/fork_transition/accepted_after_fork` | Verify that a block after the activation fork is accepted when the new validity constraint is met. | | | | `new_transaction_validity_constraint/test/fork_transition/rejected_after_fork` | Verify that a block after the activation fork is rejected when the new validity constraint is not met. | | | Note: All test cases must use off-by-one values to ensure proper boundary condition verification. ### Framework Changes - Introduce the validity constraint as a fork method that returns: - `None` for forks before its activation. - A non-`None` value starting from the fork where the constraint becomes active. ## Modified Transaction-Validity Constraint ### Test Vectors #### Fork transition | ID | Description | Status | Tests | | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `modified_transaction_validity_constraint/test/fork_transition/accepted_before_fork` | Verify that a block before the activation fork is accepted when the existing constraint is met and, ideally, the new constraint is not met. | | | | `modified_transaction_validity_constraint/test/fork_transition/rejected_before_fork` | Verify that a block before the activation fork is rejected when the existing constraint is not met and, ideally, the new constraint is met. | | | | `modified_transaction_validity_constraint/test/fork_transition/accepted_after_fork` | Verify that a block after the activation fork is accepted when the new validity constraint is met. | | | | `modified_transaction_validity_constraint/test/fork_transition/rejected_after_fork` | Verify that a block after the activation fork is rejected when the new validity constraint is not met. | | | Note: All test cases must use off-by-one values to ensure proper boundary condition verification. ### Framework Changes - Update the validity constraint as a fork method that returns the updated value starting from the fork where the constraint changes. ## Block-Level Validation Constraint The EIP introduces a new constraint that applies at the block level (e.g., block RLP size limits, block validation rules). ### Test Vectors #### Boundary Conditions Verify block acceptance/rejection at constraint boundaries using off-by-one values. | ID | Description | Status | Tests | | ----------------------------------------- |---------------------------------------------------------------------------------------------| ------ | ----- | | `block_level_constraint/test/boundary/under` | Verify that a block with constraint value at limit minus one is accepted (expect success). | | | | `block_level_constraint/test/boundary/exact` | Verify that a block with constraint value exactly at limit is accepted (expect success). | | | | `block_level_constraint/test/boundary/over` | Verify that a block with constraint value at limit plus one is rejected (expect exception). | | | #### Content Variations Verify the constraint behaves correctly with different block contents that may affect the constraint calculation. | ID | Description | Status | Tests | | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `block_level_constraint/test/content/transaction_types` | Verify constraint behavior with all supported transaction types in the block. | | | | `block_level_constraint/test/content/logs` | Verify constraint behavior when transactions emit logs. | | | | `block_level_constraint/test/content/receipts` | Verify constraint behavior with varying receipt sizes. | | | | `block_level_constraint/test/content/withdrawals` | Verify constraint behavior with non-empty withdrawals list. | | | #### Fork Transition | ID | Description | Status | Tests | | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | | `block_level_constraint/test/fork_transition/accepted_before_fork` | Verify that a block before the activation fork is accepted even when the new constraint is not met. | | | | `block_level_constraint/test/fork_transition/accepted_after_fork` | Verify that a block after the activation fork is accepted when the new constraint is met. | | | | `block_level_constraint/test/fork_transition/rejected_after_fork` | Verify that a block after the activation fork is rejected when the new constraint is not met. | | | Note: All test cases must use off-by-one values to ensure proper boundary condition verification. ### Framework Changes - Introduce the constraint as a fork method that returns: - `None` for forks before its activation. - A non-`None` value starting from the fork where the constraint becomes active. ================================================ FILE: docs/writing_tests/checklist_templates/index.md ================================================ # Testing Checklist Templates This page includes checklist templates that must be followed to guarantee a minimum base testing coverage of new EIP feature. ================================================ FILE: docs/writing_tests/code_standards.md ================================================ # Code Standards !!! warning "Documentation Moved" This documentation has been relocated to [Code Standards](../getting_started/code_standards.md). Please use the new location for the most up-to-date information. ================================================ FILE: docs/writing_tests/eip_checklist.md ================================================ # EIP Checklist Generation The EIP checklist feature helps track test coverage for EIP implementations by automatically generating filled checklists based on test markers. ## Overview When implementing tests for an EIP, you can mark specific tests as covering checklist items from the [EIP testing checklist template](../writing_tests/checklist_templates/eip_testing_checklist_template.md). The framework will then generate a filled checklist showing which items have been implemented. ## Marking Tests as implementing EIP Checklist Items To mark a test as implementing a specific checklist item, use the structured `EIPChecklist` class: ### The `EIPChecklist` Class ```python import pytest from ethereum_test_tools import StateTestFiller from ethereum_test_checklists import EIPChecklist @EIPChecklist.TransactionType.Test.IntrinsicValidity.GasLimit.Exact() def test_exact_intrinsic_gas(state_test: StateTestFiller): """Test transaction with exact intrinsic gas limit.""" # Test implementation pass # You can also use the marker without parentheses @EIPChecklist.TransactionType.Test.IntrinsicValidity.GasLimit.Insufficient def test_insufficient_intrinsic_gas(state_test: StateTestFiller): """Test transaction with insufficient intrinsic gas limit.""" # Test implementation pass ``` The `EIPChecklist` class provides type safety and IDE autocompletion, making it easier to find and reference checklist items correctly. ### Marker Parameters - **First positional parameter** (required): The checklist item ID (`EIPChecklist` reference) - **`eip` keyword parameter** (optional): List of additional EIPs covered by the test Example with multiple EIPs covered by the same test: ```python @EIPChecklist.TransactionType.Test.Signature.Invalid.V.Two( eip=[7702, 2930] ) def test_invalid_signature(state_test: StateTestFiller): """Test invalid signature that affects multiple EIPs.""" pass ``` ### Partial ID Matching You can use partial IDs that will match all checklist items starting with that prefix: ```python @EIPChecklist.TransactionType.Test.Signature.Invalid() def test_all_invalid_signatures(state_test: StateTestFiller): """Test covering all invalid signature scenarios.""" pass ``` ## Generating Checklists ### Using the Dedicated `checklist` Command To generate only checklists without filling fixtures: ```bash # Generate checklists for all EIPs uv run checklist # Generate checklist for specific EIP uv run checklist --eip 7702 # Specify output directory uv run checklist --output ./my-checklists # Multiple EIPs uv run checklist --eip 7702 --eip 2930 ``` ### Automatic Generation in Documentation When building the documentation with `mkdocs`, checklists are automatically generated for all EIPs that have tests with checklist markers. The checklists appear in the test documentation alongside the test modules. ## External Coverage and Not Applicable Items ### External Coverage For checklist items that are covered by external tests, procedures, or tools (e.g., EELS coverage), create a file named `eip_checklist_external_coverage.txt` in the EIP test directory: ```text # tests/prague/eip7702_set_code_tx/eip_checklist_external_coverage.txt general/code_coverage/eels = Covered by EELS test suite general/code_coverage/second_client = Covered by Nethermind tests ``` Format: `checklist_item_id = reason` ### Not Applicable Items For checklist items that are not applicable to a specific EIP, create a file named `eip_checklist_not_applicable.txt` in the EIP test directory: ```text # tests/prague/eip7702_set_code_tx/eip_checklist_not_applicable.txt system_contract = EIP-7702 does not introduce a system contract precompile = EIP-7702 does not introduce a precompile ``` Format: `checklist_item_id = reason` Both files support partial ID matching, so you can mark entire sections as not applicable: ## MyPy Type Checking Support The `EIPChecklist` classes are made callable through a companion `.pyi` stub file that provides proper type hints for mypy. This allows you to use both decorator patterns without type checking errors: ```python # Both of these work with proper mypy support @EIPChecklist.Opcode.Test.StackComplexOperations() # With parentheses @EIPChecklist.Opcode.Test.StackComplexOperations # Without parentheses ``` ### Regenerating Type Stubs If you modify the `EIPChecklist` class structure in `src/ethereum_test_checklists/eip_checklist.py`, you need to regenerate the type stub file: ```bash # Generate the stub file (for maintainers): uv run generate_checklist_stubs # Preview what would be generated without writing the file uv run generate_checklist_stubs --dry-run # Generate to a custom location uv run generate_checklist_stubs --output path/to/custom/stubs.pyi ``` The generated stub file (`eip_checklist.pyi`) should be committed to the repository to ensure proper type checking for all developers. ```text # Mark all system contract items as not applicable system_contract/ = EIP does not introduce system contracts ``` ## Output Format The generated checklist will show: - ✅ for completed items (either by tests or external coverage) - N/A for not applicable items - Test names that implement each item - External coverage reasons where applicable - A percentage of covered checklist items (excluding N/A items) - Color-coded completion status: 🟢 (100%), 🟡 (>50%), 🔴 (≤50%) Example output snippet: ```markdown # EIP-7702 Test Checklist ## Checklist Progress Tracker | Total Checklist Items | Covered Checklist Items | Percentage | | --------------------- | ----------------------- | ---------- | | 45 | 32 | 🟡 71.11% | ## General #### Code coverage | ID | Description | Status | Tests | | -- | ----------- | ------ | ----- | | `general/code_coverage/eels` | Run produced tests against EELS... | ✅ | Covered by EELS test suite | | `general/code_coverage/test_coverage` | Run coverage on the test code itself... | ✅ | `tests/prague/eip7702_set_code_tx/test_set_code_txs.py::test_set_code_txs` | ## Transaction Type | ID | Description | Status | Tests | | -- | ----------- | ------ | ----- | | `transaction_type/test/intrinsic_validity/gas_limit/exact` | Provide the exact intrinsic gas... | ✅ | `tests/prague/eip7702_set_code_tx/test_checklist_example.py::test_exact_intrinsic_gas` | | `transaction_type/test/intrinsic_validity/gas_limit/insufficient` | Provide the exact intrinsic gas minus one... | | | ## System Contract | ID | Description | Status | Tests | | -- | ----------- | ------ | ----- | | `system_contract/test/deployment/missing` | Verify block execution behavior... | N/A | EIP-7702 does not introduce a system contract | ``` ## Best Practices 1. **Start with the checklist**: Review the checklist template before writing tests to ensure comprehensive coverage 2. **Use the `EIPChecklist` class**: Use `EIPChecklist.Opcode.Test.GasUsage.Normal` for type safety and IDE autocompletion 3. **Use descriptive test names**: The test name will appear in the checklist, so make it clear what the test covers 4. **Mark items as you go**: Add `eip_checklist` markers while writing tests, not as an afterthought 5. **Document external coverage**: If items are covered by external tools/tests, document this in `eip_checklist_external_coverage.txt` 6. **Be explicit about N/A items**: Document why items are not applicable in `eip_checklist_not_applicable.txt` 7. **Use partial IDs wisely**: When a test covers multiple related items, use partial IDs to mark them all 8. **Verify IDs before using**: Use `str(EIPChecklist.Section.Subsection)` to verify the exact string ID when needed ## Workflow Example 1. **Create test directory structure**: ```bash tests/prague/eip9999_new_feature/ ├── __init__.py ├── spec.py ├── test_basic.py ├── eip_checklist_external_coverage.txt └── eip_checklist_not_applicable.txt ``` 2. **Mark tests as you implement them**: ```python from ethereum_test_checklists import EIPChecklist @EIPChecklist.Opcode.Test.GasUsage.Normal() def test_opcode_gas_consumption(state_test: StateTestFiller): """Test normal gas consumption of the new opcode.""" pass ``` 3. **Document external coverage**: ```text # eip_checklist_external_coverage.txt general/code_coverage/eels = Covered by ethereum/execution-specs PR #1234 ``` You can verify the correct ID using: ```python # str(EIPChecklist.General.CodeCoverage.Eels) = "general/code_coverage/eels" ``` 4. **Mark non-applicable items**: ```text # eip_checklist_not_applicable.txt precompile/ = EIP-9999 introduces an opcode, not a precompile ``` You can verify the correct ID using: ```python # str(EIPChecklist.Precompile) = "precompile" ``` 5. **Generate and review checklist**: ```bash checklist --eip 9999 # Review the generated checklist for completeness ``` ## See Also - [EIP Testing Checklist Template](./checklist_templates/eip_testing_checklist_template.md) - The full checklist template ================================================ FILE: docs/writing_tests/exception_tests.md ================================================ # Exception Tests Exception tests are a special type of test which verify that an invalid transaction or an invalid block are correctly rejected with the expected error. ## Creating an Exception Test To test for an exception, the test can use either of the following types from `ethereum_test_exceptions` library: 1. [`TransactionException`](../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException): To be added to the `error` field of the `Transaction` object, and to the `exception` field of the `Block` object that includes the transaction; this exception type is used when a transaction is invalid, and therefore when included in a block, the block is expected to be invalid too. This is different from valid transactions where an exception during EVM execution is expected (e.g. a revert, or out-of-gas), which can be included in valid blocks. For an example, see [`eip3860_initcode.test_initcode.test_contract_creating_tx`](../tests/shanghai/eip3860_initcode/test_initcode/test_contract_creating_tx.md) which raises `TransactionException.INITCODE_SIZE_EXCEEDED` in the case that the initcode size exceeds the maximum allowed size. 2. [`BlockException`](../library/ethereum_test_exceptions.md#ethereum_test_exceptions.BlockException): To be added to the `exception` field of the `Block` object; this exception type is used when a block is expected to be invalid, but the exception is related to a block property, e.g. an invalid value of the block header. For an example, see [`eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas`](../tests/cancun/eip4844_blobs/test_excess_blob_gas/test_invalid_static_excess_blob_gas.md) which raises `BlockException.INCORRECT_EXCESS_BLOB_GAS` in the case that the `excessBlobGas` remains unchanged but the parent blobs included are not `TARGET_BLOBS_PER_BLOCK`. Although exceptions can be combined with the `|` operator to indicate that a test vector can throw either one of multiple exceptions, ideally the tester should aim to use only one exception per test vector, and only use multiple exceptions on the rare instance when it is not possible to know which exception will be thrown because it depends on client implementation. ## Adding a new exception If a test requires a new exception, because none of the existing ones is suitable for the test, a new exception can be added to either [`TransactionException`](../library/ethereum_test_exceptions.md#ethereum_test_exceptions.TransactionException) or [`BlockException`](../library/ethereum_test_exceptions.md#ethereum_test_exceptions.BlockException) classes. The new exception should be added as a new enum value, and the docstring of the attribute should be a string that describes the exception. The name of the exception should be unique, and should not be used by any other exception. ## Test runner behavior on exception tests When an exception is added to a test vector, the test runner must check that the transaction or block is rejected with the expected exception. The test runner must map the exception key to the corresponding error string that is expected to be returned by the client. Exception mapping are particularly important in blockchain tests because the block can be invalid for multiple reasons, and the client returning a different error can mean that a verification in the client is faulty. ================================================ FILE: docs/writing_tests/fork_methods.md ================================================ # Using and Extending Fork Methods This document describes the Fork class in the Ethereum execution spec tests framework, which provides a standardized way to define properties of Ethereum forks. Understanding how to use and extend these fork methods is essential for writing flexible tests that can automatically adapt to different forks. ## Overview The `BaseFork` class is an abstract base class that defines the interface for all Ethereum forks. Each implemented fork (like Frontier, Homestead, etc.) extends this class and implements its abstract methods to provide fork-specific behavior. The fork system allows: 1. Defining fork-specific behaviors and parameters 2. Comparing forks chronologically (`Paris < Shanghai`) 3. Supporting automatic fork transitions 4. Writing tests that automatically adapt to different forks ## Using Fork Methods in Tests Fork methods are powerful tools that allow your tests to adapt to different Ethereum forks automatically. Here are common patterns for using them: ### 1. Check Fork Support for Features ```python def test_some_feature(fork): if fork.supports_blobs(block_number=0, timestamp=0): # Test blob-related functionality ... else: # Test alternative or skip pytest.skip("Fork does not support blobs") ``` ### 2. Get Fork-Specific Parameters ```python def test_transaction_gas(fork, state_test): gas_cost = fork.gas_costs(block_number=0, timestamp=0).G_TRANSACTION # Create a transaction with the correct gas parameters for this fork tx = Transaction( gas_limit=gas_cost + 10000, # ... ) state_test( env=Environment(), pre=pre, tx=tx, # ... ) ``` ### 3. Determine Valid Transaction Types ```python def test_transaction_types(fork, state_test): for tx_type in fork.tx_types(block_number=0, timestamp=0): # Test each transaction type supported by this fork # ... ``` ### 4. Determine Valid Opcodes ```python def test_opcodes(fork, state_test): # Create bytecode using only opcodes valid for this fork valid_opcodes = fork.valid_opcodes() # Use these opcodes to create test bytecode # ... ``` ### 5. Test Fork Transitions ```python def test_fork_transition(transition_fork, blockchain_test): # The transition_fork is a special fork type that changes behavior # based on block number or timestamp fork_before = transition_fork.fork_at(block_number=4, timestamp=0) fork_after = transition_fork.fork_at(block_number=5, timestamp=0) # Test behavior before and after transition # ... ``` ## Important Fork Methods ### Header Information These methods determine what fields are required in block headers for a given fork: ```python fork.header_base_fee_required(block_number=0, timestamp=0) # Added in London fork.header_prev_randao_required(block_number=0, timestamp=0) # Added in Paris fork.header_withdrawals_required(block_number=0, timestamp=0) # Added in Shanghai fork.header_excess_blob_gas_required(block_number=0, timestamp=0) # Added in Cancun fork.header_blob_gas_used_required(block_number=0, timestamp=0) # Added in Cancun fork.header_beacon_root_required(block_number=0, timestamp=0) # Added in Cancun fork.header_requests_required(block_number=0, timestamp=0) # Added in Prague ``` ### Gas Parameters Methods for determining gas costs and calculations: ```python fork.gas_costs(block_number=0, timestamp=0) # Returns a GasCosts dataclass fork.memory_expansion_gas_calculator(block_number=0, timestamp=0) # Returns a callable fork.transaction_intrinsic_cost_calculator(block_number=0, timestamp=0) # Returns a callable ``` ### Transaction Types Methods for determining valid transaction types: ```python fork.tx_types(block_number=0, timestamp=0) # Returns list of supported transaction types fork.contract_creating_tx_types(block_number=0, timestamp=0) # Returns list of tx types that can create contracts fork.precompiles(block_number=0, timestamp=0) # Returns list of precompile addresses fork.system_contracts(block_number=0, timestamp=0) # Returns list of system contract addresses ``` ### EVM Features Methods for determining EVM features and valid opcodes: ```python fork.evm_code_types(block_number=0, timestamp=0) # Returns list of supported code types (e.g., Legacy, EOF) fork.valid_opcodes() # Returns list of valid opcodes for this fork fork.call_opcodes(block_number=0, timestamp=0) # Returns list of call opcodes with their code types fork.create_opcodes(block_number=0, timestamp=0) # Returns list of create opcodes with their code types ``` ### Blob-related Methods (Cancun+) Methods for blob transaction support: ```python fork.supports_blobs(block_number=0, timestamp=0) # Returns whether blobs are supported fork.blob_gas_price_calculator(block_number=0, timestamp=0) # Returns a callable fork.excess_blob_gas_calculator(block_number=0, timestamp=0) # Returns a callable fork.min_base_fee_per_blob_gas(block_number=0, timestamp=0) # Returns minimum base fee per blob gas fork.blob_gas_per_blob(block_number=0, timestamp=0) # Returns blob gas per blob fork.target_blobs_per_block(block_number=0, timestamp=0) # Returns target blobs per block fork.max_blobs_per_block(block_number=0, timestamp=0) # Returns max blobs per block ``` ### Meta Information Methods for fork identification and comparison: ```python fork.name() # Returns the name of the fork fork.transition_tool_name(block_number=0, timestamp=0) # Returns name for transition tools fork.is_deployed() # Returns whether the fork is deployed to mainnet ``` ## Fork Transitions The framework supports creating transition forks that change behavior at specific block numbers or timestamps: ```python @transition_fork(to_fork=Shanghai, at_timestamp=15_000) class ParisToShanghaiAtTime15k(Paris): """Paris to Shanghai transition at Timestamp 15k.""" pass ``` With transition forks, you can test how behavior changes across fork boundaries: ```python # Behavior changes at block 5 fork = BerlinToLondonAt5 assert not fork.header_base_fee_required(block_number=4) # Berlin doesn't require base fee assert fork.header_base_fee_required(block_number=5) # London requires base fee ``` ## Adding New Fork Methods When adding new fork methods, follow these guidelines: 1. **Abstract Method Definition**: Add the new abstract method to `BaseFork` in `base_fork.py` 2. **Consistent Parameter Pattern**: Use `block_number` and `timestamp` parameters with default values 3. **Method Documentation**: Add docstrings explaining the purpose and behavior 4. **Implementation in Subsequent Forks**: Implement the method in every subsequent fork class **only** if the fork updates the value from previous forks. Example of adding a new method: ```python @classmethod @abstractmethod def supports_new_feature(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return whether the given fork supports the new feature.""" pass ``` Implementation in a fork class: ```python @classmethod def supports_new_feature(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return whether the given fork supports the new feature.""" return False # Frontier doesn't support this feature ``` Implementation in a newer fork class: ```python @classmethod def supports_new_feature(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return whether the given fork supports the new feature.""" return True # This fork does support the feature ``` ## When to Add a New Fork Method Add a new fork method when: 1. **A New EIP Introduces a Feature**: Add methods describing the new feature's behavior 2. **Tests Need to Behave Differently**: When tests need to adapt to different fork behaviors 3. **Common Fork Information is Needed**: When multiple tests need the same fork-specific information 4. **Intrinsic Fork Properties Change**: When gas costs, opcodes, or other intrinsic properties change Do not add a new fork method when: 1. The information is only needed for one specific test 2. The information is not directly related to fork behavior 3. The information can be calculated using existing methods ## Best Practices 1. **Use Existing Methods**: Check if there's already a method that provides the information you need 2. **Name Methods Clearly**: Method names should clearly describe what they return 3. **Document Behavior**: Include clear docstrings explaining the method's purpose and return value 4. **Avoid Hard-coding**: Use fork methods in tests instead of hard-coding fork-specific behavior 5. **Test Transitions**: Ensure your method works correctly with transition forks ## Example: Complete Test Using Fork Methods Here's an example of a test that fully utilizes fork methods to adapt its behavior: ```python def test_transaction_with_fork_adaptability(fork, state_test): # Prepare pre-state pre = Alloc() sender = pre.fund_eoa() # Define transaction based on fork capabilities tx_params = { "gas_limit": 1_000_000, "sender": sender, } # Add appropriate transaction type based on fork tx_types = fork.tx_types(block_number=0, timestamp=0) if 3 in tx_types and fork.supports_blobs(block_number=0, timestamp=0): # EIP-4844 blob transaction (type 3) tx_params["blob_versioned_hashes"] = [Hash.generate_zero_hashes(1)[0]] elif 2 in tx_types: # EIP-1559 transaction (type 2) tx_params["max_fee_per_gas"] = 10 tx_params["max_priority_fee_per_gas"] = 1 elif 1 in tx_types: # EIP-2930 transaction (type 1) tx_params["access_list"] = [] # Create and run the test tx = Transaction(**tx_params) state_test( env=Environment(), pre=pre, tx=tx, post={ sender: Account(nonce=1), }, ) ``` ## Conclusion The Fork class is a powerful abstraction that allows tests to adapt to different Ethereum forks. By using fork methods consistently, you can write tests that automatically handle fork-specific behavior, making your tests more maintainable and future-proof. When adding new fork methods, keep them focused, well-documented, and implement them across all forks. This will ensure that all tests can benefit from the information and that transitions between forks are handled correctly. ================================================ FILE: docs/writing_tests/fuzzer_bridge.md ================================================ # Fuzzer Bridge The fuzzer bridge provides a seamless integration between blocktest fuzzers and the Ethereum execution-spec-tests framework, enabling automatic generation of valid blockchain test fixtures from fuzzer output. ## Overview Fuzzers are excellent at generating test inputs to discover edge cases and bugs in Ethereum client implementations. However, creating valid blockchain tests from fuzzer-generated data requires complex calculations including: - State root computations - RLP encoding of blocks and transactions - Proper block header generation - System contract interactions - Genesis block derivation The fuzzer bridge handles all these complexities automatically by leveraging the execution-spec-tests framework. ## Architecture ```mermaid graph LR A[Blocktest
Fuzzer] -->|JSON
v2 format| B[Fuzzer
Bridge] B -->|Blockchain Test
Fixtures| C[Ethereum
Clients] ``` ## Installation The fuzzer bridge is included with the execution-spec-tests framework. Follow the [installation guide](../getting_started/installation.md) to set up EEST. Once installed, the `fuzzer_bridge` command will be available through `uv run`. ## Fuzzer Output Format (v2) The fuzzer must output JSON in the v2 format. Here's the structure: ```json { "version": "2.0", "fork": "Prague", "chainId": 1, "accounts": { "0x7e5f4552091a69125d5dfcb7b8c2659029395bdf": { "balance": "0x1000000000000000000", "nonce": "0x0", "code": "", "storage": {}, "privateKey": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, "transactions": [ { "from": "0x7e5f4552091a69125d5dfcb7b8c2659029395bdf", "to": "0x2b5ad5c4795c026514f8317c7a215e218dccd6cf", "value": "0x100", "gas": "0x5208", "gasPrice": "0x7", "nonce": "0x0", "data": "0x" } ], "env": { "currentCoinbase": "0xc014ba5e00000000000000000000000000000000", "currentDifficulty": "0x0", "currentGasLimit": "0x1000000", "currentNumber": "0x1", "currentTimestamp": "0x1000", "currentBaseFee": "0x7", "currentRandom": "0x0000000000000000000000000000000000000000000000000000000000000000" } } ``` ### Key Requirements 1. **Private Keys**: Any account that sends transactions MUST include a `privateKey` field. 2. **Address-Key Match**: Private keys must generate the corresponding addresses. 3. **Environment**: Describes the environment for block 1 (genesis is automatically derived). 4. **Version**: Must be "2.0" for this format. 5. **Fork Name**: Use the standard fork name (e.g., "Prague", "Shanghai", "Cancun"). ## Usage ### Command Line Interface Convert fuzzer output to blockchain test fixtures: ```bash # Basic conversion uv run fuzzer_bridge --input fuzzer_output.json --output blocktest.json # Specify a different fork uv run fuzzer_bridge --input fuzzer_output.json --output blocktest.json --fork Shanghai # Pretty print output uv run fuzzer_bridge --input fuzzer_output.json --output blocktest.json --pretty # Process multiple files in parallel uv run fuzzer_bridge --input fuzzer_outputs/ --output fixtures/ --parallel # Merge multiple outputs into a single fixture file uv run fuzzer_bridge --input fuzzer_outputs/ --output fixtures/ --merge ``` ### Python API You can also use the fuzzer bridge programmatically in your Python code: ```python from cli.fuzzer_bridge import FuzzerBridge import json # Load fuzzer output with open("fuzzer_output.json") as f: fuzzer_data = json.load(f) # Create bridge and convert bridge = FuzzerBridge() blocktest = bridge.convert(fuzzer_data) # Save to file bridge.save(blocktest, "output.json") # Verify with a client result = bridge.verify_with_geth(blocktest, geth_path="../go-ethereum/build/bin/evm") print(f"Test passed: {result['pass']}") ``` ### Integration with pytest Generate tests dynamically from fuzzer output: ```python import pytest from cli.fuzzer_bridge import create_test_from_fuzzer def test_fuzzer_generated(blockchain_test): """Test generated from fuzzer output.""" test = create_test_from_fuzzer("fuzzer_output.json") blockchain_test(**test) ``` ## How It Works ### Genesis Block Derivation The fuzzer describes the environment for block 1 (the block containing the transactions). The genesis block (block 0) environment is automatically derived: - `number` = 0 - `timestamp` = block1_timestamp - 12 (assuming 12-second block time) - `baseFee` = calculated based on block 1's base fee - Other values are inherited or set to defaults ### System Contracts The framework automatically includes system contracts required by the fork: - Deposit contract (for proof-of-stake) - Withdrawal contract - Beacon roots contract - Other fork-specific contracts These are included in the state root calculation without requiring fuzzer specification. ### Transaction Signing All transactions are automatically signed using the provided private keys. The fuzzer bridge: 1. Validates that each sender has a corresponding private key 2. Signs transactions with the appropriate signature type for the fork 3. Handles EIP-1559 transactions when base fee is present 4. Properly encodes legacy and typed transactions ## Troubleshooting ### Common Issues #### "Genesis block hash doesn't match" - **Cause**: Environment parameters are incorrect - **Solution**: Ensure the fuzzer output follows the v2 format exactly #### "No private key for sender" - **Cause**: Account sends transaction but no privateKey field provided - **Solution**: Add privateKey to the account in the accounts section #### "Private key doesn't match address" - **Cause**: The provided private key doesn't generate the specified address - **Solution**: Use correct private key or generate address from private key #### "Transaction type not supported in fork" - **Cause**: Using EIP-1559 transactions in pre-London forks - **Solution**: Ensure transaction types match the specified fork ## Testing with Clients Once you've generated blockchain test fixtures, verify them with Ethereum clients: ### Go-Ethereum (geth) ```bash ../go-ethereum/build/bin/evm blocktest generated_test.json ``` ### Besu ```bash ../besu/ethereum/evmtool/build/install/evmtool/bin/evmtool block-test generated_test.json ``` ### Nethermind ```bash ../nethermind/src/artifacts/bin/nethermind.test.runner test -b generated_test.json ``` ## Advanced Features ### Batch Processing Process multiple fuzzer outputs efficiently: ```python from cli.fuzzer_bridge.cli import process_directory_parallel # Process all JSON files in a directory process_directory_parallel( input_dir="fuzzer_outputs/", output_dir="fixtures/", fork="Prague", workers=8 ) ``` ### Custom Fork Configuration Override default fork parameters: ```python from cli.fuzzer_bridge import BlocktestBuilder builder = BlocktestBuilder(fork="Prague") # Custom configuration builder.env_overrides = { "currentRandom": "0x1234...", "currentExcessBlobGas": "0x0" } ``` ## Best Practices 1. **Validate Fuzzer Output**: Always validate that your fuzzer generates valid v2 format JSON 2. **Test with Multiple Clients**: Verify generated fixtures with multiple client implementations 3. **Use Parallel Processing**: For large batches, use `--parallel` flag for better performance 4. **Version Control**: Track generated fixtures in version control for regression testing 5. **Continuous Integration**: Integrate fuzzer bridge into CI pipelines for automated testing ## Further Resources - [Blocktest Fuzzer Documentation](https://github.com/ethereum/blocktest-fuzzer) - [EEST Framework Documentation](../index.md) - [Ethereum Test Format Specifications](./reference_specification.md) ================================================ FILE: docs/writing_tests/gas_optimization.md ================================================ # Gas Optimization The `--optimize-gas` feature helps find the minimum gas limit required for transactions to execute correctly while maintaining the same execution trace and post-state. This is useful for creating more efficient test cases and understanding the exact gas requirements of specific operations. ## Basic Usage Enable gas optimization for all tests: ```bash uv run fill --optimize-gas ``` ## Output Configuration Specify a custom output file for gas optimization results: ```bash uv run fill --optimize-gas --optimize-gas-output=my_gas_results.json path/to/some/test/to/optimize ``` ## Post-Processing Mode Enable post-processing to handle opcodes that put the current gas in the stack (like `GAS` opcode): ```bash uv run fill --optimize-gas --optimize-gas-post-processing ``` ### What Post-Processing Does Post-processing mode is essential when your test transactions use the `GAS` opcode or other operations that push the current gas value onto the execution stack. Without post-processing, gas optimization would fail because: 1. **Gas Value in Stack**: The `GAS` opcode pushes the current gas value onto the stack 2. **Different Gas Limits**: When optimizing gas, different gas limits result in different values being pushed by `GAS` 3. **Trace Comparison Failure**: The execution traces would differ due to these different gas values in the stack, causing optimization to fail ### How Post-Processing Works When `enable_post_processing=True` is passed to the `verify_modified_gas_limit` function: 1. **Gas Removal**: The system identifies traces where the previous operation was `GAS` and removes the gas value from the stack (`trace.stack[-1] = None`) 2. **Trace Normalization**: This allows trace comparison to succeed even when different gas limits produce different gas values in the stack 3. **Equivalent Execution**: The optimization can proceed because the traces are considered equivalent after removing gas-dependent stack values ### When to Use Post-Processing Use `--optimize-gas-post-processing` when your tests: - Use the `GAS` opcode to read current gas - Have contracts that push gas values onto the stack - Would otherwise fail gas optimization due to gas-dependent stack operations Without post-processing, such tests would be considered "impossible to compare" and gas optimization would fail with an error. ### Safety Considerations **⚠️ Important**: Post-processing mode is **not the default** for good reasons: - **Guaranteed Equivalence**: Without post-processing, the test execution is guaranteed to be exactly the same as the original, ensuring complete behavioral equivalence - **Extra Care Required**: When using `--optimize-gas-post-processing`, extra care must be taken to verify that the optimized test still behaves correctly, as the post-processing modifies trace comparison logic - **Potential Risks**: The gas value removal from traces could potentially mask subtle differences in execution that might be important for test correctness - **Verification Needed**: Always thoroughly test the optimized results to ensure they maintain the intended behavior, especially for contracts that rely on gas values for logic **Recommendation**: Only use post-processing mode when absolutely necessary (i.e., when tests fail without it due to `GAS` opcode usage), and always verify the optimized test results carefully. ## How It Works The gas optimization algorithm uses a binary search approach: 1. **Initial Validation**: First tries reducing the gas limit by 1 to verify when even minimal changes affect the execution trace 2. **Binary Search**: Uses binary search between 0 and the original gas limit to find the minimum viable gas limit 3. **Verification**: For each candidate gas limit, it verifies: - Execution traces are equivalent (with optional post-processing) - Post-state allocation matches the expected result - Transaction validation passes - Account states remain consistent 4. **Result**: Outputs the minimum gas limit that still produces correct execution ## Output Format The optimization results are saved to a JSON file (default: `optimize-gas-output.json`) containing: - Test identifiers as keys of the JSON object - Optimized gas limits in each value or `null` if the optimization failed. ## Use Cases - **Test Efficiency**: Create tests with minimal gas requirements - **Gas Analysis**: Understand exact gas costs for specific operations - **Regression Testing**: Ensure gas optimizations don't break test correctness - **Performance Testing**: Benchmark gas usage across different scenarios ## Limitations - Only works with state tests (not blockchain tests) - Requires trace collection to be enabled - May significantly increase test execution time due to multiple trial runs - Some tests may not be optimizable if they require the exact original gas limit ## Integration with Test Writing When writing tests, you can use gas optimization to: 1. **Optimize Existing Tests**: Run `--optimize-gas` on your test suite to find more efficient gas limits 2. **Validate Gas Requirements**: Ensure your tests use the minimum necessary gas 3. **Create Efficient Test Cases**: Use the optimized gas limits in your test specifications 4. **Benchmark Changes**: Compare gas usage before and after modifications ## Example Workflow ```bash # 1. Write your test # 2. Run with gas optimization uv run fill --optimize-gas --optimize-gas-output=optimization_results.json # 3. Review the results cat optimization_results.json # 4. Update your test with optimized gas limits if desired # 5. Re-run to verify correctness uv run fill ``` ## Best Practices ### Leave a Buffer for Future Forks When using the optimized gas limits in your tests, it's recommended to add a small buffer (typically 5-10%) above the exact value outputted by the gas optimization. This accounts for potential gas cost changes in future Ethereum forks that might increase the gas requirements for the same operations. For example, if the optimization outputs a gas limit of 100,000, consider using 105,000 or 110,000 in your test specification to ensure compatibility with future protocol changes. ================================================ FILE: docs/writing_tests/index.md ================================================ # Writing Tests The easiest way to get started is to use the interactive CLI: ```console uv run eest make test ``` and modify the generated test module to suit your needs.
For help deciding which test format to select, see [Types of Tests](./types_of_tests.md), in particular [Deciding on a Test Type](./types_of_tests.md#deciding-on-a-test-type). Otherwise, some simple test case examples to get started with are: - [tests.berlin.eip2930_access_list.test_acl.test_account_storage_warm_cold_state](../tests/berlin/eip2930_access_list/test_acl/test_account_storage_warm_cold_state.md). - [tests.istanbul.eip1344_chainid.test_chainid.test_chainid](../tests/istanbul/eip1344_chainid/test_chainid/test_chainid.md). ## Key Resources - [Coding Standards](./code_standards.md) - Code style and standards for this repository - [Adding a New Test](./adding_a_new_test.md) - Step-by-step guide to adding new tests - [Writing a New Test](./writing_a_new_test.md) - Detailed guide on writing different test types - [Using and Extending Fork Methods](./fork_methods.md) - How to use fork methods to write fork-adaptive tests - [Gas Optimization](./gas_optimization.md) - Optimize gas limits in your tests for efficiency and compatibility with future forks. - [Porting tests](./porting_legacy_tests.md): A guide to porting @ethereum/tests to EEST. Please check that your code adheres to the repo's coding standards and read the other pages in this section for more background and an explanation of how to implement state transition and blockchain tests. ================================================ FILE: docs/writing_tests/porting_legacy_tests.md ================================================ # A Guide to Porting Original Ethereum Tests to EEST ## Background EEST is the successor to [ethereum/tests](https://github.com/ethereum/tests) (aka "original tests"), a repository that defined EVM test cases from the [Frontier](https://ethereum.org/en/history/#frontier) phase up to and including [The Merge](https://ethereum.org/en/history/#paris). These test cases are specified as YAML (and occasionally JSON) files in the [`./src/`](https://github.com/ethereum/tests/tree/develop/src) sub-directory. JSON test fixtures, which are fully-populated tests that can be executed against clients, are generated using [ethereum/retesteth](https://github.com/ethereum/retesteth). These JSON artifacts are regenerated when needed and added to the repository, typically in the [`tests/static/state_tests`](https://github.com/ethereum/execution-spec-tests/tree/main/tests/static/state_tests) sub-directory. From [Shanghai](https://ethereum.org/en/history/#shapella) onward, new test cases — especially for new features introduced in hard forks—are defined in Python within EEST. While the existing test cases remain important for client testing, porting ethereum/tests to EEST will help maintain and generate tests for newer forks. This also ensures feature parity, as client teams will only need to obtain test fixture releases from one source. While automating the conversion of the remaining YAML (or JSON) test cases to Python is possible, manually porting individual test cases offers several benefits: - Reducing the number of test cases by combining multiple YAML (or JSON) cases into a single Python test function using parametrization. - Potentially improving coverage by parametrizing the Python version. - Producing higher quality code and documentation, which are typically clearer than an automated conversion. - Ensuring better organization of tests within the `./tests` folder of execution-spec-tests by fork and EIP. ## Porting an original test 1. Select one or more test cases from `./tests/static/state_tests/` to port and create an issue in this repository AND comment on [this tracker issue.](https://github.com/ethereum/execution-spec-tests/issues/972) 2. [Add a new test](../writing_tests/index.md) in the appropriate fork folder, following the guidelines for [choosing a test type.](../writing_tests/types_of_tests.md#deciding-on-a-test-type) 3. Submit a PR with the ported tests: 1. Add the list of ported files using python marker to the head of your python test. Example: ```python @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1871"], # coverage_missed_reason="Converting solidity code result in following opcode not being used:", ``` Replace test names with your chosen tests and PR number. Uncomment coverage_missed_reason when all the missed coverage lines are approved, usually some opcodes end up not used after translating test logic from lllc, yul. But sometimes missed coverage line could hint that you forgot to account important test logic. If no coverage is missed, you are good! 2. Remove the ported files from .tests/static/state_tests in your PR > See also: 📄 [Getting started with EEST.](../getting_started/repository_overview.md) ## Filling tests EEST uses pytest to run tests against [EELS (an EVM implementation for testing)](https://github.com/ethereum/execution-specs). This process is known as "filling" and verifies the assertions in your tests. You can use the fill CLI for this. For example, see how to fill the `PUSH` opcode. ```shell uv run fill tests/frontier/opcodes/test_push.py ``` See also: 📄 [Documentation for the `fill` command.](../filling_tests/filling_tests_command_line.md) > If the tests can't currently be filled, please explain the issue (feel free to also [open a Discussion](https://github.com/ethereum/execution-spec-tests/discussions/new?category=general)). ## Debugging tests By default, EVM logs are stored in the `logs` folder at the repository root. You can check the `output` folder to review transaction results. If needed, review a previous PR that ported tests (e.g., [the PR porting the `PUSH` opcode](https://github.com/ethereum/execution-spec-tests/pull/975), and [other port PRs](https://github.com/ethereum/execution-spec-tests/pulls?q=is%3Apr+label%3Aport)). ## Test coverage It's crucial that ported tests maintain coverage parity with _original tests_. This ensures that no critical functions are left untested and prevents the introduction of bugs. A CI workflow automatically checks for coverage. If coverage action fails (See: 📄 [An example of a failing test coverage](https://github.com/ethereum/execution-spec-tests/actions/runs/13037332959/job/36370897481)), it's recommended to run the coverage action locally (see: 📄 [How to run GitHub actions locally](../dev/test_actions_locally.md)), which should generate a `evmtest_coverage` directory: ```console ❯ tree evmtest_coverage -L 2 evmtest_coverage └── coverage ├── BASE ├── BASE_TESTS ├── coverage_BASE.lcov ├── coverage_PATCH.lcov ├── DIFF ├── difflog.txt ├── PATCH └── PATCH_TESTS ``` Here `BASE`is _original tests_, `PATCH` is the ported test, and `DIFF` is the coverage difference on EVMONE. Open `evmtest_coverage/coverage/DIFF/index.html` in browser: ![Annotated coverage](../img/annotated-coverage.jpg) | Label | Description | | ----- | :-----------------------------------------------------------------------------: | | `LBC` | **Lost base coverage:** Code that was tested before, but is untested now. | | `UBC` | **Uncovered baseline code:** Code that was untested before and untested now. | | `GBC` | **Gained baseline coverage:** Code that was untested before, but is tested now. | | `CBC` | **Covered baseline code:** Code that was tested before and is tested now. | Follow the hyperlinks for lost base coverage (`LBC`) to address coverage gaps. Here is an example coverage loss: ![Missing original coverage](../img/original-coverage-loss.png) > Lost line coverage from a coverage report. In this case, caused by a missing invocation of `CALLDATALOAD`. !!! note "Expected coverage loss" EEST uses [pytest](https://docs.pytest.org/en/stable/), a popular Python testing framework, to help orchestrate testing Ethereum specifications, while _original tests_ relied on large, static contracts and the EVM to handle much of the execution. This difference can lead to coverage gaps. EEST favors dynamic contract creation for each test vector, while _original tests_ preferred a single static contract with multiple test vectors determined by transaction input data. It's important to note that coverage helps identify missing test paths. If you believe the coverage loss is due to differences in "setup" code between frameworks and doesn't impact the feature you're testing, explain this in your PR. A team member can help with the review. For example, review the [discussion in this PR] to see an example of why and how coverage loss can occur.(https://github.com/ethereum/execution-spec-tests/pull/975#issuecomment-2528792289) ## Resolving Coverage Gaps from Yul Compilation When porting tests from ethereum/tests, you may encounter coverage gaps that are false positives. This commonly occurs because: - **Original tests** often used Yul to define smart contracts, and solc compilation introduces additional opcodes that aren't specifically under test - **EEST ports** use the explicit EEST Opcode mini-language, which is more precise in opcode definition If coverage analysis shows missing opcodes that were only present due to Yul compilation artifacts (not the actual feature being tested), this can be resolved during PR review by adding the `coverage_missed_reason` parameter: ```python @pytest.mark.ported_from( ["path/to/original_test.json"], coverage_missed_reason="Missing opcodes are Yul compilation artifacts, not part of tested feature" ) ``` !!! note "Add coverage_missed_reason only after PR review" Only add `coverage_missed_reason` after PR review determines the coverage gap is acceptable, never preemptively. This helps maintain test coverage integrity while accounting for legitimate differences between Yul-based and EEST opcode-based implementations. ================================================ FILE: docs/writing_tests/post_mortems.md ================================================ # Post-Mortems of Missed Test Scenarios This page contains a collection of post-mortem analyses for test cases that were not initially identified by the testing process. The objective is to document and learn from missed scenarios — including those that were caught on the client side due to consensus issue, client developer raised issues, external reviewers, or external bug bounties — in order to improve test coverage and reduce the likelihood of similar omissions in the future. Each entry must include an explanation of why the test case was missed plus the changes that were implemented in documentation or framework to improve the testing process. ## List ## TEMPLATE ## Date - Title - Fork ### Description Provide a concise summary of the issue, how it was discovered, emphasizing the how it relates to the specifications and testing. *Example:* > A consensus-breaking issue was found during the bug-bounty phase of the Pectra fork specifically in the EIP-2537, which involved calling the BLS pairing precompile using two special points: the infinity point and a point that is outside of the BLS12-381 curve. > The specification correctly specified the behavior of the precompile when one of these inputs was used, but it did not specify the behavior of the combined input. ### Root Cause Analysis Explain why this scenario was not covered by the test suite. Consider whether it was due to ambiguous specification wording, gaps in test generation logic, overlooked edge cases, or incorrect assumptions about expected behavior. *Consider prompting questions:* - Was the behavior implied but not explicitly stated in the specification? - Was the area considered low-risk or assumed covered elsewhere? - Were there limitations in the current test generation tools or processes? - Was there any different type of testing that could have caught the issue at an earlier stage? (Fuzzing, property based testing) ### Steps Taken To Avoid Recurrence List the actions taken to reduce the chance of this type of miss happening again. E.g. procedure changes, checklist updates, review practices, framework improvements. ### Implemented Test Case IDs of the tests added that now cover the missed scenario and link to the documentation page where they are included. *Example:* - [`tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py::test_invalid\[fork_Prague-state_test---bls_g1_truncated_input-\]`](https://eest.ethereum.org/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/test_invalid/) ### Framework/Documentation Changes Note any modifications that were introduced in the framework and/or documentation to prevent similar misses. *Example:* - Updated EIP checklist to include testing combinations of interesting points related to the elliptic-curve under test, and all combinations between them. ================================================ FILE: docs/writing_tests/reference_specification.md ================================================ # Referencing an EIP Spec Version Tests that implement features from an Ethereum Improvement Proposal ([ethereum/EIPs](https://github.com/ethereum/EIPs/tree/master/EIPS)) must define the EIP's markdown SHA digest within the test's Python module. This ensures our tests stay up-to-date with any changes to the EIP specifications. The `check_eip_versions` command-line utility automatically verifies that all EIP references in the codebase are current. It works by comparing the SHA specified in the test against the latest version in the ethereum/EIPs repository. This utility uses pytest to generate test cases for every module that includes "eip" in its path.
![Test framework summary for a failing EIP spec version test](./img/eip_reference_spec_console_output.png){ width=auto align=center}
!!! note "The SHA digest value is provided in the failure message of the corresponding test"
![EIP spec version test fail](./img/eip_reference_spec_console_output_fail.png){ width=auto align=center}
!!! info "Understanding and Retrieving the EIP Markdown's SHA Digest" The SHA value is the output from git's `hash-object` command, for example: ```console git clone git@github.com:ethereum/EIPs git hash-object EIPS/EIPS/eip-3651.md # output: d94c694c6f12291bb6626669c3e8587eef3adff1 ``` and can be retrieved from the remote repo via the Github API on the command-line as following: ```console sudo apt install jq curl -s -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-3651.md |\ jq -r '.sha' # output: d94c694c6f12291bb6626669c3e8587eef3adff1 ``` ## How to Add a Spec Version Check This check accomplished by adding the following two global variables anywhere in the Python source file: | Variable Name | Explanation | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REFERENCE_SPEC_GIT_PATH` | The relative path of the EIP markdown file in the [ethereum/EIPs](https://github.com/ethereum/EIPs/) repository, e.g. "`EIPS/eip-1234.md`" | | `REFERENCE_SPEC_VERSION` | The SHA hash of the latest version of the file retrieved from the Github API:
`https://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-.md` | ## Running the `check_eip_versions` Command Locally A Github Personal Access Token (PAT) is required to avoid rate-limiting issues when using the Github API. The token can be specified via an environment variable or via the command-line. For example, the Github CLI can be used to obtain a token: ```bash uv run check_eip_versions --github-token=$(gh auth token) ``` or a PAT can be created at: https://github.com/settings/personal-access-tokens/new. By default, only tests up to and including the current fork under development will be checked. This is controlled by the `UNTIL_FORK` setting in the `src/config/check_eip_versions.py` configuration file. You can also pass a specific test path to limit the scope: ```shell uv run check_eip_versions --github-token=$(gh auth token) tests/shanghai/eip3651_warm_coinbase/ ``` This would only check EIP versions for the EIP-3651 tests in the `shanghai/eip3651_warm_coinbase` sub-directory. ## Automated Checks via GitHub Actions The repository includes a [GitHub Actions workflow](https://github.com/ethereum/execution-spec-tests/actions/workflows/check_eip_versions.yaml) that automatically runs `check_eip_versions` on a daily schedule. If any outdated EIP references are detected, the workflow creates an issue in the repository with details about which references need to be updated. This workflow uses GitHub's built-in token for authentication, so there's no need to configure personal access tokens for the automated checks. The issue will include links to the relevant workflow run and details about which tests need updating. ## Example Here is an example from [./tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py](../tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index.md): ```python REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3651.md" REFERENCE_SPEC_VERSION = "d94c694c6f12291bb6626669c3e8587eef3adff1" ``` The SHA digest was retrieved [from here](https://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-3651.md). ================================================ FILE: docs/writing_tests/test_markers.md ================================================ # Test Markers Test markers are used to categorize tests and to run specific subsets of tests. They are defined in the test files using the `pytest.mark` decorator. The examples below use `StateTestFiller` tests, but the same markers can also be applied to `BlockchainTestFiller` tests. ## Fork Markers These markers are used to specify the forks for which a test is valid. ### `@pytest.mark.valid_from("FORK_NAME")` :::pytest_plugins.forks.forks.ValidFrom ### `@pytest.mark.valid_until("FORK_NAME")` :::pytest_plugins.forks.forks.ValidUntil ### `@pytest.mark.valid_at("FORK_NAME_1", "FORK_NAME_2", ...)` :::pytest_plugins.forks.forks.ValidAt ### `@pytest.mark.valid_at_transition_to("FORK_NAME")` :::pytest_plugins.forks.forks.ValidAtTransitionTo ## Fork Covariant Markers These markers are used in conjunction with the fork validity markers to automatically parameterize tests with values that are valid for the fork being tested. ### `@pytest.mark.with_all_tx_types` This marker is used to automatically parameterize a test with all transaction types that are valid for the fork being tested. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.with_all_tx_types @pytest.mark.valid_from("Berlin") def test_something_with_all_tx_types( state_test: StateTestFiller, pre: Alloc, tx_type: int ): pass ``` In this example, the test will be parameterized for parameter `tx_type` with values `[0, 1]` for fork Berlin, but with values `[0, 1, 2]` for fork London (because of EIP-1559). ### `@pytest.mark.with_all_contract_creating_tx_types` This marker is used to automatically parameterize a test with all contract creating transaction types that are valid for the fork being tested. This marker only differs from `pytest.mark.with_all_tx_types` in that it does not include transaction type 3 (Blob Transaction type) on fork Cancun and after. ### `@pytest.mark.with_all_typed_transactions` This marker is used to automatically parameterize a test with all typed transactions, including `type=0` (legacy transaction), that are valid for the fork being tested. This marker is an indirect marker that utilizes the `tx_type` values from the `pytest.mark.with_all_tx_types` marker to build default typed transactions for each `tx_type`. Optional: Default typed transactions used as values for `typed_transaction` exist in `src/pytest_plugins/shared/transaction_fixtures.py` and can be overridden for the scope of the test by re-defining the appropriate `pytest.fixture` for that transaction type. ```python import pytest from ethereum_test_tools import Account, Alloc, StateTestFiller from ethereum_test_types import Transaction # Optional override for type 2 transaction @pytest.fixture def type_2_default_transaction(sender: Account): return Transaction( ty=2, sender=sender, max_fee_per_gas=0x1337, max_priority_fee_per_gas=0x1337, ... ) # Optional override for type 4 transaction @pytest.fixture def type_4_default_transaction(sender: Account, pre: Alloc): return Transaction( ty=4, sender=sender, ..., authorization_list=[ AuthorizationTuple( address=Address(1234), nonce=0, chain_id=1, signer=pre.fund_eoa(), ) ] ) @pytest.mark.with_all_typed_transactions @pytest.mark.valid_from("Prague") def test_something_with_all_tx_types( state_test: StateTestFiller, pre: Alloc, typed_transaction: Transaction ): pass ``` ### `@pytest.mark.with_all_precompiles` This marker is used to automatically parameterize a test with all precompiles that are valid for the fork being tested. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.with_all_precompiles @pytest.mark.valid_from("Shanghai") def test_something_with_all_precompiles( state_test: StateTestFiller, pre: Alloc, precompile: int, ): pass ``` In this example, the test will be parameterized for parameter `precompile` with values `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]` for fork Shanghai, but with values `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` for fork Cancun which introduced the [point evaluation precompile](https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile) defined in EIP-4844. ### `@pytest.mark.with_all_evm_code_types` This marker is used to automatically parameterize a test with all EVM code types that are valid for the fork being tested. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.with_all_evm_code_types @pytest.mark.valid_from("Frontier") def test_something_with_all_evm_code_types( state_test: StateTestFiller, pre: Alloc, ): pass ``` In this example, the test will be parameterized for parameter `evm_code_type` only with value `[EVMCodeType.LEGACY]` starting on fork Frontier, and eventually it will be parametrized with with values `[EVMCodeType.LEGACY, EVMCodeType.EOF_V1]` on the EOF activation fork. In all calls to `pre.deploy_contract`, if the code parameter is `Bytecode` type, and `evm_code_type==EVMCodeType.EOF_V1`, the bytecode will be automatically wrapped in an EOF V1 container. Code wrapping might fail in the following circumstances: - The code contains invalid EOF V1 opcodes. - The code does not end with a valid EOF V1 terminating opcode (such as `Op.STOP` or `Op.REVERT` or `Op.RETURN`). In the case where the code wrapping fails, `evm_code_type` can be added as a parameter to the test and the bytecode can be dynamically modified to be compatible with the EOF V1 container. One thing to note is that `evm_code_type` is not necessary to be added as a parameter to the test because the `pre: Alloc` fixture automatically consumes this fixture, and therefore it only needs to be added to the test signature if the test's logic needs it. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller from ethereum_test_vm import EVMCodeType from ethereum_test_vm import Opcodes as Op @pytest.mark.with_all_evm_code_types @pytest.mark.valid_from("Frontier") def test_something_with_all_evm_code_types( state_test: StateTestFiller, pre: Alloc, evm_code_type: EVMCodeType ): code = Op.SSTORE(1, 1) if evm_code_type == EVMCodeType.EOF_V1: # Modify the bytecode to be compatible with EOF V1 container code += Op.STOP pre.deploy_contract(code) ... ``` ### `@pytest.mark.with_all_call_opcodes` This marker is used to automatically parameterize a test with all EVM call opcodes that are valid for the fork being tested. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller from ethereum_test_vm import Opcodes as Op @pytest.mark.with_all_call_opcodes @pytest.mark.valid_from("Frontier") def test_something_with_all_call_opcodes( state_test: StateTestFiller, pre: Alloc, call_opcode: Op ): pass ``` In this example, the test will be parametrized for parameter `call_opcode` with values `[Op.CALL, Op.CALLCODE]` starting on fork Frontier, `[Op.CALL, Op.CALLCODE, Op.DELEGATECALL]` on fork Homestead, `[Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL]` on fork Byzantium, and eventually it will be parametrized with with values `[Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, Op.EXTCALL, Op.EXTSTATICCALL, Op.EXTDELEGATECALL]` on the EOF activation fork. Parameter `evm_code_type` will also be parametrized with the correct EVM code type for the opcode under test. ### `@pytest.mark.with_all_create_opcodes` This marker is used to automatically parameterize a test with all EVM create opcodes that are valid for the fork being tested. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller from ethereum_test_vm import Opcodes as Op @pytest.mark.with_all_create_opcodes @pytest.mark.valid_from("Frontier") def test_something_with_all_create_opcodes( state_test: StateTestFiller, pre: Alloc, create_opcode: Op ): pass ``` In this example, the test will be parametrized for parameter `create_opcode` with values `[Op.CREATE]` starting on fork Frontier, `[Op.CREATE, Op.CREATE2]` starting on fork Constantinople, and eventually it will be parametrized with with values `[Op.CREATE, Op.CREATE2, Op.EOFCREATE]` on the EOF activation fork. Parameter `evm_code_type` will also be parametrized with the correct EVM code type for the opcode under test. ### `@pytest.mark.with_all_system_contracts` This marker is used to automatically parameterize a test with all system contracts that are valid for the fork being tested. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller from ethereum_test_base_types import Address @pytest.mark.with_all_system_contracts @pytest.mark.valid_from("Cancun") def test_something_with_all_system_contracts( state_test: StateTestFiller, pre: Alloc, system_contract: Address, ): pass ``` In this example, the test will be parameterized for parameter `system_contract` with value `[0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02]` for fork Cancun. ### Covariant Marker Keyword Arguments All fork covariant markers accept the following keyword arguments: #### `selector` A lambda function that can be used to filter the fork covariant values that are valid for this specific test. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type != 2) @pytest.mark.valid_from("London") def test_something_with_all_tx_types( state_test: StateTestFiller, pre: Alloc, tx_type: int ): pass ``` Ideally, the lambda function should be used to explicitly filter out values that are not compatible with the test (exclusive filter), rather than explicitly selecting values (inclusive filter), as the parametrized values might change with future forks. #### `marks` A marker, list of markers, or a lambda function that can be used to add additional markers to the test. ```python import pytest @pytest.mark.with_all_tx_types( marks=lambda tx_type: pytest.mark.skip("incompatible") if tx_type == 1 else None, ) @pytest.mark.valid_from("London") def test_something_with_all_tx_types_but_skip_type_1(state_test_only, tx_type): assert tx_type != 1 ... ``` In this example, the test will be skipped if `tx_type` is equal to 1 by returning a `pytest.mark.skip` marker, and return `None` otherwise. ## `@pytest.mark.parametrize_by_fork` A test can be dynamically parametrized based on the fork using the `parametrize_by_fork` marker. This marker takes two positional arguments: - `argnames`: A list of parameter names that will be parametrized using the custom function. - `fn`: A function that takes the fork as parameter and returns a list of values that will be used to parametrize the test at that specific fork. And one keyword argument: - `marks` (optional): A marker, list of markers, or a lambda function that can be used to add additional markers to the generated tests. The marked test function will be parametrized by the values returned by the `fn` function for each fork. If the parameters that are being parametrized is only a single parameter, the return value of `fn` should be a list of values for that parameter. If the parameters that are being parametrized are multiple, the return value of `fn` should be a list of tuples/lists, where each tuple contains the values for each parameter. ```python import pytest def covariant_function(fork): return [[1, 2], [3, 4]] if fork.name() == "Paris" else [[4, 5], [5, 6], [6, 7]] @pytest.mark.parametrize_by_fork("test_parameter,test_parameter_2", covariant_function) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") def test_case(state_test_only, test_parameter, test_parameter_2): pass ``` In this example, the test will be parametrized with the values `[1, 2]` and `[3, 4]` for the Paris fork, with values `1` and `3` being assigned to `test_parameter` and `2` and `4` being assigned to `test_parameter_2`. For the Shanghai fork, the test will be parametrized with the values `[4, 5]`, `[5, 6]`, and `[6, 7]`. Therefore, more test cases will be generated for the Shanghai fork. If the parameters that are being parametrized is only a single parameter, the return value of `fn` should be a list of values for that parameter. If the parameters that are being parametrized are multiple, the return value of `fn` should be a list of tuples/lists, where each tuple contains the values for each parameter. The function can also return a list of `pytest.param` objects, which allows for additional markers and test IDs to be added to the test. ## Fill/Execute Markers These markers are used to apply different markers to a test depending on whether it is being filled or executed. ### `@pytest.mark.fill` This marker is used to apply markers to a test when it is being filled. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.fill(pytest.mark.skip(reason="Only for execution")) def test_something( state_test: StateTestFiller, pre: Alloc ): pass ``` In this example, the test will be skipped when it is being filled. ### `@pytest.mark.execute` This marker is used to apply markers to a test when it is being executed. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.execute(pytest.mark.xfail(reason="Depends on block context")) def test_something( state_test: StateTestFiller, pre: Alloc ): pass ``` In this example, the test will be marked as expected to fail when it is being executed, which is particularly useful so that the test is still executed but does not fail the test run. ## Other Markers ### `@pytest.mark.slow` This marker is used to mark tests that are slow to run. These tests are not run during [`tox` checks](./verifying_changes.md), and are only run when a release is being prepared. ### `@pytest.mark.pre_alloc_modify` This marker is used to mark tests that modify the pre-alloc in a way that would be impractical to reproduce in a real-world scenario. Examples of this include: - Modifying the pre-alloc to have a balance of 2^256 - 1. - Address collisions that would require hash collisions. ### `@pytest.mark.skip()` This marker can be used to skip a test. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.skip(reason="Not implemented") def test_something(state_test: StateTestFiller, pre: Alloc): pass ``` ### `@pytest.mark.xfail()` This marker can be used to mark a test as expected to fail. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.xfail(reason="EVM binary doesn't support this opcode") def test_something(state_test: StateTestFiller, pre: Alloc): pass ``` ================================================ FILE: docs/writing_tests/tutorials/blockchain.md ================================================ # Blockchain Tests This tutorial teaches you to create a blockchain execution specification test. These tests verify that a blockchain, starting from a defined pre-state, will process given blocks and arrive at a defined post-state. ## Pre-requisites Before proceeding with this tutorial, it is assumed that you have prior knowledge and experience with the following: - Repository set-up, see [installation](../../getting_started/installation.md).and run an execution specification test as outlined in the . - Able to run `fill`, see [Getting Started: Filling Tests](../../filling_tests/getting_started.md). - Understand how to read a [blockchain test](https://ethereum-tests.readthedocs.io/en/latest/test_filler/blockchain_filler.html). - Familiarity with [Python](https://docs.python.org/3/tutorial/). - Understand how to write an execution spec [state transition test](./state_transition.md). ## Example Tests In this tutorial we will go over [test_block_number] in `test_block_example.py`. It is assumed you have already gone through the state transition test tutorial. Only new concepts will be discussed. ### Smart Contract A smart contract is defined that is called by each transaction in the test. It stores a pointer to storage at `storage[0]`. When it is called storage cell `0` gets the current block [number](https://www.evm.codes/#43?fork=merge), and the pointer is incremented to the next value. ```python contract_addr: Account( balance=1000000000000000000000, code=code, storage={ 0x00: 0x01, }, ), ``` ### Transaction Generator The transactions used in this test are nearly identical. Their only difference is the `nonce` value which needs to be incremented. ```python def tx_generator(): nonce = 0 # Initial value while True: tx = Transaction( ty=0x0, chain_id=0x0, nonce=nonce, to=contractAddr, gas_limit=500000, gas_price=10, ) nonce = nonce + 1 yield tx tx_generator = tx_generator() ``` This looks like an infinite loop but it isn't because this is a [generator function](https://wiki.python.org/moin/Generators). When generator encounters the `yield` keyword it returns the value and stops execution, keeping a copy of all the local variables, until it is called again. Hence infinite loops inside a generator are not a problem as long as they include `yield`. This code section is responsible for creating the `Transaction` object and incrementing the `nonce`. Every time the function `tx_generator()` is called, it returns a new generator with a `nonce` of zero. To increment the `nonce` we need to use the *same* generator. We assign this generator to `tx_generator`. ### Blocks Each integer in the `tx_per_block` array is the number of transactions in a block. The genesis block is block 0 (no transactions). It follows that we have 2 transactions in block 1, 0 in block two, 4 in block 3, ..., and 50 in block 9. ```python tx_per_block = [2, 0, 4, 8, 0, 0, 20, 1, 50] ``` The code section that creates the blocks is a bit complex in this test. For some simpler definitions of Block creation you can browse tests within [`test_withdrawals.py`](https://github.com/ethereum/execution-spec-tests/blob/main/tests/shanghai/eip4895_withdrawals/test_withdrawals.py). ```python blocks = map( lambda len: Block( txs=list(map(lambda x: next(tx_generator), range(len))) ), tx_per_block, ) ``` We use [`lambda` notation](https://www.w3schools.com/python/python_lambda.asp) to specify short functions. In this case, the function doesn't actually care about its input, it just returns the next transaction from the generator. ```python lambda x: next(tx_generator) ``` Python uses [`range(n)`](https://www.w3schools.com/python/ref_func_range.asp) to create a list of numbers from `0` to `n-1`. Among other things, it's a simple way to create a list of `n` values. ```python range(len) ``` The [`map` function](https://www.w3schools.com/python/ref_func_map.asp) runs the function (the first parameter) on every element of the list (the second parameter). Putting together what we know, it means that it runs `next(tx_generator)` `len` times, giving us `len` transactions. We then use [`list`](https://www.w3schools.com/python/python_lists.asp) to turn the transactions into a list that we can provide as the `txs` parameter to the `Block` constructor. ```python list(map(lambda x: next(tx_generator), range(len))) ``` The outer `lambda` function takes an integer, `len`, and creates a `Block` object with `len` transactions. This function is then run on every value of `tx_per_block` to generate the blocks. ```python blocks = map( lambda len: Block( txs=list of len transactions ), tx_per_block, ) ``` For example, if we had `tx_per_block = [0,2,4]`, we'd get this result: ```python blocks = [ Blocks(txs=[]), Blocks(txs=[next(tx_generator), next(tx_generator)]), Blocks(txs=[next(tx_generator), next(tx_generator), next(tx_generator), next(tx_generator)]) ] ``` ### Post State Recall that storage slot 0 retains the value of the next slot that the block number is written into. It starts at one and is incremented after each transaction. Hence it's the total number of transactions plus 1. ```python storage = {0: sum(tx_per_block) + 1} ``` For every block and transaction within the block, we write the block number and increment the next slot number in storage slot 0. As Python lists are 0 indexed, we must increment the block number by 1. ```python next_slot = 1 for blocknum in range(len(tx_per_block)): for _ in range(tx_per_block[blocknum]): storage[next_slot] = blocknum + 1 next_slot = next_slot + 1 ``` Now that the expected storage values are calculated, the post state can be defined and yielded within the `BlockchainTest`, synonymous to the state test example. ```python post = {contract_addr: Account(storage=storage)} yield BlockchainTest( genesis_environment=env, pre=pre, blocks=blocks, post=post, ) ``` Note that because of the `yield` we could have multiple tests under the same name. ## Conclusion At this point you should be able to write blockchain tests. ================================================ FILE: docs/writing_tests/tutorials/state_transition.md ================================================ # State Transition Tests This tutorial teaches you to create a state transition execution specification test using the Python Opcodes minilang for writing EVM bytecode. These tests verify that a starting pre-state will reach a specified post-state after executing a single transaction. In this example, we'll create a simple contract using bytecode and then interact with it through a transaction to verify the expected state changes. For an overview of different test types available, see [Types of Tests](../../writing_tests/types_of_tests.md). ## Pre-requisites This tutorial will require some prior knowledge and experience with the following: - Repository set-up, see [installation](../../getting_started/installation.md). - Ability to run `fill`, see [Getting Started: Filling Tests](../../filling_tests/getting_started.md). - Basic familiarity with [Python](https://docs.python.org/3/tutorial/). ## Building a State Test The most effective method of learning how to write tests is to study a straightforward example. In this tutorial we will build a simple state test that deploys a contract with bytecode and verifies its execution. ### Complete Test Example We'll examine a simple test that uses the Python Opcodes minilang to write EVM bytecode. This example is based on the CHAINID opcode test from `tests/istanbul/eip1344_chainid/test_chainid.py`. Let's examine each section. ```python """State test tutorial demonstrating contract deployment and interaction.""" ``` In Python, multi-line strings are denoted using `"""`. As a convention, a file's purpose is often described in the opening string of the file. ```python import pytest from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_vm import Opcodes as Op ``` In this snippet the required constants, types and helper functions are imported from `ethereum_test_tools`. The `Opcodes` class (aliased as `Op`) provides the Python minilang for writing EVM bytecode. We will go over these as we come across them. ```python @pytest.mark.valid_from("Istanbul") ``` In Python this kind of definition is called a [*decorator*](https://docs.python.org/3/search.html?q=decorator). It modifies the action of the function after it. In this case, the decorator is a custom [pytest mark](https://docs.pytest.org/en/latest/how-to/mark.html) defined by the execution-specs-test framework that specifies that the test is valid for the [Istanbul fork](https://ethereum.org/en/history/#istanbul) and all forks after it. The framework will then fill this test case for all forks in the fork range specified by the command-line arguments. For more information about test markers and fork validity, see [Test Markers](../../writing_tests/test_markers.md). !!! info "Filling the test" To fill this test for all the specified forks, we can specify pytest's `-k` flag that [filters test cases by keyword expression](https://docs.pytest.org/en/latest/how-to/usage.html#specifying-tests-selecting-tests): ```console fill -k test_state_test_example ``` and to fill it for a specific fork range, we can provide the `--from` and `--until` command-line arguments: ```console fill -k test_state_test_example --from London --until Paris ``` ```python def test_state_test_example(state_test: StateTestFiller, pre: Alloc): """Test state transition using Opcodes minilang bytecode.""" ``` This is the format of a [Python function](https://docs.python.org/3/tutorial/controlflow.html#defining-functions). It starts with `def ():`, and then has indented code for the function. The function definition ends when there is a line that is no longer indented. As with files, by convention functions start with a string that explains what the function does. The function parameters (`state_test` and `pre`) are [pytest fixtures](https://docs.pytest.org/en/latest/explanation/fixtures.html) provided by the execution-spec-tests framework. Pytest fixtures are a powerful dependency injection mechanism that automatically provide objects to your test functions. **The `state_test` fixture** is a callable that you *must* include in *state test* function arguments. When called at the end of your test function with the environment, pre-state, transaction, and expected post-state, it generates the actual test fixtures. This callable is a wrapper around the `StateTest` class. **The `pre` fixture** provides an `Alloc` object that manages the pre-state allocation for your test. It offers methods like `fund_eoa()` and `deploy_contract()` that automatically generate unique addresses and add accounts to the blockchain state that will exist before your transaction executes. The fixture handles address generation and ensures no conflicts occur. ```python env = Environment(number=1) ``` This line specifies that `env` is an [`Environment`][ethereum_test_types.Environment] object. In this example, we only override the block `number` to 1, leaving all other values at their defaults. It's recommended to use default values whenever possible and only specify custom values when required for your specific test scenario. (For all available fields, see the pydantic model fields in the source code of [`Environment`][ethereum_test_types.Environment] and [`EnvironmentGeneric`](https://github.com/ethereum/execution-spec-tests/blob/b4d7826bec631574a6fb95d0c58d2c8c4d6e02ca/src/ethereum_test_types/block_types.py#L76) from which `Environment` inherits.) #### Pre State For every test we need to define the pre-state requirements, so we are certain of what is on the "blockchain" before the transaction is executed. The `pre` fixture provides an `Alloc` object with methods to create accounts that are automatically added to the pre-state. In this example we are using the `deploy_contract` method to deploy a contract to some address available in the pre-state. ```python contract_address = pre.deploy_contract( code=Op.PUSH1(0x03) + Op.PUSH1(0x00) + Op.SSTORE + Op.STOP ) ``` Specifically we deploy a contract written with Opcodes minilang code that stores the value `0x03` at storage slot `0x00`. The code consists of: - `PUSH1(0x03)`: Push the value 3 onto the stack. - `PUSH1(0x00)`: Push the storage key 0 onto the stack. - `SSTORE`: Store the value at the specified key. - `STOP`: End execution. As the return value of the `deploy_contract` method, we get the address where the contract was deployed. This address is stored in the `contract_address` variable, which will later be used as the target of our transaction. You can also specify additional parameters for the contract if needed: - `balance` parameter to set the contract's initial balance (though often not necessary for state test contracts) - `storage` parameter to set initial storage values (though in this example we don't need initial storage since our contract will set it through the `SSTORE` opcode) You can combine opcodes using the `+` operator to create more complex bytecode sequences. Generally for execution spec tests the `SSTORE` instruction acts as a high-level assertion method to check pre to post-state changes. The test filler achieves this by verifying that the correct value is held within post-state storage, hence we can validate that the bytecode has run successfully. Next, we need to create an account that will send the transaction to our contract: ```python sender = pre.fund_eoa() ``` This line creates a single externally owned account (EOA) with a default balance. You can specify a custom amount with `amount=0x0BA1A9CE0BA1A9CE` if needed. The returned object, which includes a private key, an address, and a nonce, is stored in the `sender` variable and will later be used as the sender of the transaction. #### Transactions ```python tx = Transaction( ty=0x2, sender=sender, to=contract_address, gas_limit=100_000, ) ``` With the pre-state built, we can now create the transaction that will call our contract. Let's examine the key components of this [`Transaction`][ethereum_test_types.Transaction] (for all available fields, see the source code of [`Transaction`][ethereum_test_types.Transaction] and [`TransactionGeneric`](https://github.com/ethereum/execution-spec-tests/blob/b4d7826bec631574a6fb95d0c58d2c8c4d6e02ca/src/ethereum_test_types/transaction_types.py#L163) from which `Transaction` inherits). - **`sender=sender`**: We use the EOA we created earlier, which already has the necessary information to sign the transaction and contains the correct `nonce`. The `nonce` is a protection mechanism to prevent replay attacks - it must equal the number of transactions sent from the sender's address, starting from zero. The framework automatically manages nonce incrementing for us. - **`to=contract_address`**: This specifies the address of the contract we want to call, which is the contract we deployed earlier. - **`gas_limit=100_000`**: This sets a high enough gas limit to ensure our simple contract execution doesn't run out of gas. - **`ty=0x2`**: This specifies the transaction type (EIP-1559). #### Post State Now we need to define what we expect the blockchain state to look like after our transaction executes: ```python post = { contract_address: Account( storage={ 0x00: 0x03, }, ), } ``` This is the post-state which is equivalent to [`expect`](https://ethereum-tests.readthedocs.io/en/latest/test_filler/state_filler.html#expect) in static tests, but without the indexes. It is similar to the pre-state, except that we do not need to specify everything, only those accounts and fields we wish to test. In this case, we look at the storage of the contract we called and add to it what we expect to see. In this example storage cell `0x00` should be `0x03` as we stored this value using the `SSTORE` opcode in our contract bytecode. #### Running the State Test Finally, we execute the test by calling the state test wrapper with all our defined components: ```python state_test(env=env, pre=pre, post=post, tx=tx) ``` This line calls the wrapper to the `StateTest` object that provides all the objects required in order to fill the test, generate the test fixtures and write them to file (by default, `./fixtures/_tests/example/state_test_example/test_state_test_example.json`). Note that even though we defined a `StateTest`, the `fill` command will also generate other derivative test fixtures: `BlockchainTest`, `BlockchainTestEngine`, and `BlockchainTestEngineX`. For more information about test types and when to use each, see [Test Types: Prefer StateTest for Single Transactions](../types_of_tests.md#prefer-state_test-for-single-transactions). ## Conclusion At this point you should be able to write state transition tests within a single block. ## Next Steps - Learn about [Adding a New Test](../../writing_tests/adding_a_new_test.md) to understand test organization and structure. - Explore [Fork Methods](../../writing_tests/fork_methods.md) for writing tests that adapt to different Ethereum forks. ================================================ FILE: docs/writing_tests/types_of_tests.md ================================================ # Types of tests There are currently three types of tests that can be produced by a test spec: 1. State Tests 2. Blockchain Tests 3. Transaction Tests ## State Tests ### Purpose Tests the effects of individual transactions (ideally a single one) that span a single block in a controlled environment. ### Use cases - Test a single opcode behavior. - Verify opcode gas costs. - Test interactions between multiple smart contracts. - Test creation of smart contracts. !!! info The fill function will automatically generate a `blockchain_test` fixture from `state_tests`, consisting of one block and one transaction. ## Blockchain Tests ### Purpose Blockchain tests span multiple blocks which may or may not contain transactions and mainly focus on the block to block effects to the Ethereum state. ### Use cases - Verify system-level operations such as coinbase balance updates or withdrawals. - Verify fork transitions. - Verify blocks with invalid transactions/properties are rejected. ### Fork Transition Tests There is a special type of blockchain test that is used to test a fork transition. It's not executed for all possible forks, rather it targets exactly the blocks at the point of transition from one evm implementation to the next. This type of test must be marked with the `valid_at_transition_to` marker, for example: ```python @pytest.mark.valid_at_transition_to("Cancun") def test_blob_type_tx_pre_fork( blockchain_test: BlockchainTestFiller, pre: Dict, env: Environment, blocks: List[Block], ): """ Reject blocks with blobs before blobs fork """ ``` ## Transaction Tests ### Purpose Test correct transaction rejection/acceptance of a serialized transaction (currently RLP only). ### Use cases - Verify that a badly formatted transaction is correctly rejected by the client. - Verify that a transaction with an invalid value in one of its fields is correctly rejected by the client. !!! info Using the `execute` command, transaction tests can be sent to clients in a live network using the `eth_sendRawTransaction` endpoint. ## Deciding on a test type ### Prefer `state_test` for single transactions Whenever possible, use `state_test` to examine individual transactions. This method is more straightforward and less prone to external influences that can occur during block building. This provides more targeted testing since it does not invoke the client's block-building machinery. This reduces the risk of encountering false positives, particularly in exception scenarios (e.g., see issue [#343: "Zero max_fee_per_blob_gas test is ineffective"](https://github.com/ethereum/execution-spec-tests/issues/343)). Moreover, the `fill` command automatically additionally generates a `blockchain_test` for every `state_test` by wrapping the `state_test`'s transaction in a block. ================================================ FILE: docs/writing_tests/verifying_changes.md ================================================ # Verifying Changes !!! warning "Documentation Moved" This documentation has been relocated to [Detailed Code Standards](../getting_started/code_standards_details.md). Please use the new location for the most up-to-date information. ================================================ FILE: docs/writing_tests/writing_a_new_test.md ================================================ # Writing a New Test ## Test Functions Every test case is defined as a Python function that implements a single `StateTest` or `BlockchainTest` using the `state_test` or `blockchain_test` objects made available by the framework ([learn how to decide on a test type](./types_of_tests.md#deciding-on-a-test-type)). Test cases, and the respective test modules, must fulfill the following requirements: | Requirement | When | | -----------------------------------------------------------------------|---------------------------------------------| | Be [decorated with validity markers](#specifying-which-forks-tests-are-valid-for) | If the test case is not valid for all forks | | Use one of `state_test` or `blockchain_test` [in its function arguments](#the-state_test-and-blockchain_test-test-function-arguments) | Always | | Call the `state_test` or `blockchain_test` in its test body | Always | | Add a [reference version of the EIP spec](./reference_specification.md) under test | Test path contains `eip` | ### Specifying which Forks Tests are Valid For Test cases can (and it most cases should) be decorated with one or more "validity markers" that define which the forks the test is valid for. This is achieved by applying: - `pytest.mark.valid_from(FORK)` and/or `pytest.mark.valid_until(FORK)` or - `pytest.mark.valid_at_transition_to(FORK)` markers on either the test function, test class or test module level: === "Function" ```python import pytest @pytest.mark.valid_from("Berlin") @pytest.mark.valid_until("London") def test_access_list(state_test: StateTestFiller, fork: Fork): ``` === "Class" ```python import pytest @pytest.mark.valid_from("Shanghai") class TestMultipleWithdrawalsSameAddress: ``` === "Module" ```python import pytest pytestmark = pytest.mark.valid_from("Shanghai") ``` The [`ethereum_test_forks`](../library/ethereum_test_forks.md) package defines the available forks and provides the following helpers that return all forks within the specified range: - [forks_from](../library/ethereum_test_forks.md#ethereum_test_forks.forks_from) - [forks_from_until](../library/ethereum_test_forks.md#ethereum_test_forks.forks_from_until) ### The `state_test` and `blockchain_test` Test Function Arguments The test function's signature _must_ contain exactly one of either a `state_test` or `blockchain_test` argument. For example, for state tests: ```python def test_access_list(state_test: StateTestFiller): ``` and for blockchain tests: ```python def test_contract_creating_tx( blockchain_test: BlockchainTestFiller, fork: Fork, initcode: Initcode ): ``` The `state_test` and `blockchain_test` objects are actually wrapper classes to the `StateTest`, respectively `BlockchainTest` objects, that once called actually instantiate a new instance of these objects and fill the test case using the `evm` tool according to the pre and post states and the transactions defined within the test. If a blockchain-type test should only generate a test fixture in the Engine format (`EngineFixture`), the `blockchain_test_engine` object can be specified. This object is a wrapper for the `BlockchainTestEngine` class. ## `StateTest` Object The `StateTest` object represents a single test vector, and contains the following attributes: - `env`: Environment object which describes the global state of the blockchain before the test starts. - `pre`: Pre-State containing the information of all Ethereum accounts that exist before any transaction is executed. - `post`: Post-State containing the information of all Ethereum accounts that are created or modified after all transactions are executed. - `txs`: All transactions to be executed during test execution. ## `BlockchainTest` Object The `BlockchainTest` object represents a single test vector that evaluates the Ethereum VM by attempting to append multiple blocks to the chain: - `pre`: Pre-State containing the information of all Ethereum accounts that exist before any block is executed. - `post`: Post-State containing the information of all Ethereum accounts that are created or modified after all blocks are executed. - `blocks`: All blocks to be appended to the blockchain during the test. ## `BlockchainTestEngine` Object The `BlockchainTestEngine` object has the same properties as the `BlockchainTest` but it's used to only generate a blockchain test in the Engine format. ## Pre/Post State of the Test The `pre` and `post` states are elemental to setup and then verify the outcome of the state test. Both `pre` and `post` are mappings of account addresses to `account` structures (see [more info](#the-account-object)). A single test vector can contain as many accounts in the `pre` and `post` states as required, and they can be also filled dynamically. `storage` of an account is a key/value dictionary, and its values are integers within range of `[0, 2**256 - 1]`. `txs` are the steps which transform the pre-state into the post-state and must perform specific actions within the accounts (smart contracts) that result in verifiable changes to the balance, nonce, and/or storage in each of them. `post` is compared against the outcome of the client after the execution of each transaction, and any differences are considered a failure When designing a test, all the changes must be ideally saved into the contract's storage to be able to verify them in the post-state. ## Test Transactions Transactions can be crafted by sending them with specific `data` or to a specific account, which contains the code to be executed. Transactions can also create more accounts, by setting the `to` field to an empty string. Transactions can be designed to fail, and a verification must be made that the transaction fails with the specific error that matches what is expected by the test. They can also contain a `TransactionReceipt` object in field `expected_receipt` which allows checking for an exact `gas_used` value. ## Writing code for the accounts in the test Account bytecode can be "deployed" in a test's pre-state using the `pre` pytest fixture. The @ethereum/execution-spec-tests Python [`Opcodes`][ethereum_test_vm.Opcodes] minilang can be used to help write the bytecode in a readable form. ### Using the Python Opcode Minilang EVM bytecode for tests should be written using the Python-based minilang provided by the [`Opcodes`][ethereum_test_vm.Opcodes] class. This allows you to construct bytecode using symbolic opcodes as Python objects. #### Example: Simple Addition Contract ```python from ethereum_test_vm.opcode import Opcodes code = ( Opcodes.PUSH1(0x02) + Opcodes.PUSH1(0x03) + Opcodes.ADD() + Opcodes.PUSH1(0x00) + Opcodes.SSTORE() + Opcodes.STOP() ) # within a test function, using the "pre" fixture contract_address = pre.deploy_contract(code=code) ``` You add this contract to the test's pre-state using the `pre` fixture or assign this `code` to the `code` field of an account in your test's `post` state. See the [state test tutorial](./tutorials/state_transition.md) for more help. For a full list of available opcodes and their usage, see [`Opcodes`][ethereum_test_vm.Opcodes]. #### Higher-Level Constructs For more complex control flow, you can use constructs like [`Switch`][ethereum_test_tools.tools_code.generators.Switch] and [`Case`][ethereum_test_tools.tools_code.generators.Case] from the `ethereum_test_tools.tools_code.generators` module: ```python from ethereum_test_tools.tools_code.generators import Switch, Case from ethereum_test_vm.opcode import Opcodes as Op code = Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.PUSH1(0x01) + Op.STOP()), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.PUSH1(0x02) + Op.STOP()), ], default_action=Op.PUSH1(0x00) + Op.STOP(), ) ``` The `ethereum_test_tools.tools_code.generators` module also defines other high-level constructs like [`While`][ethereum_test_tools.tools_code.generators.While] and [`Conditional`][ethereum_test_tools.tools_code.generators.Conditional]. #### Converting Bytecode to Minilang If you have EVM bytecode (as hex or binary), you can use the [`evm_bytes` CLI tool](../library/cli/evm_bytes.md) to convert it to the EEST Python opcode minilang automatically, for example: ```console uv run evm_bytes hex-string 0x604260005260206000F3 # -> # Op.PUSH1[0x42] + Op.PUSH1[0x0] + Op.MSTORE + Op.PUSH1[0x20] + Op.PUSH1[0x0] + Op.RETURN ``` #### Restrictions: No Yul in Python Test Cases As of [PR #1779](https://github.com/ethereum/execution-spec-tests/pull/1779), the use of Yul source in Python test cases is forbidden. All new tests must use the Python opcode minilang as shown above. ## Verifying the Accounts' Post States The state of the accounts after all blocks/transactions have been executed is the way of verifying that the execution client actually behaves like the test expects. During their filling process, all tests automatically verify that the accounts specified in their `post` property actually match what was returned by the transition tool. Within the `post` dictionary object, an account address can be: - `None`: The account will not be checked for absence or existence in the result returned by the transition tool. - `Account` object: The test expects that this account exists and also has properties equal to the properties specified by the `Account` object. - `Account.NONEXISTENT`: The test expects that this account does not exist in the result returned by the transition tool, and if the account exists, it results in error. E.g. when the transaction creating a contract is expected to fail and the test wants to verify that the address where the contract was supposed to be created is indeed empty. ## The `Account` object The `Account` object is used to specify the properties of an account to be verified in the post state. The python representation can be found in [src/ethereum_test_types/account_types.py](https://github.com/ethereum/execution-spec-tests/blob/main/src/ethereum_test_types/account_types.py). It can verify the following properties of an account: - `nonce`: the scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract. - `balance`: the amount of Wei (10-18 Eth) the account has. - `code`: Bytecode contained by the account. To verify that an account contains no code, this property needs to be set to "0x" or "". - `storage`: Storage within the account represented as a `dict` object. All storage keys that are expected to be set must be specified, and if a key is skipped, it is implied that its expected value is zero. Setting this property to `{}` (empty `dict`), means that all the keys in the account must be unset (equal to zero). All account's properties are optional, and they can be skipped or set to `None`, which means that no check will be performed on that specific account property. ## Verifying correctness of the new test A well written test performs a single verification output at a time. A verification output can be a single storage slot, the balance of an account, or a newly created contract. It is not recommended to use balance changes to verify test correctness, as it can be easily affected by gas cost changes in future EIPs. The best way to verify a transaction/block execution outcome is to check its storage. A test can be written as a negative verification. E.g. a contract is not created, or a transaction fails to execute or runs out of gas. This kind of verification must be carefully crafted because it is possible to end up having a false positive result, which means that the test passed but the intended verification was never made. To avoid these scenarios, it is important to have a separate verification to check that test is effective. E.g. when a transaction is supposed to fail, it is necessary to check that the failure error is actually the one expected by the test. ## Failing or invalid transactions Transactions included in a StateTest are expected to be intrinsically valid, i.e. the account sending the transaction must have enough funds to cover the gas costs, the max fee of the transaction must be equal or higher than the base fee of the block, etc. An intrinsically valid transaction can still revert during its execution. Blocks in a BlockchainTest can contain intrinsically invalid transactions but in this case the block is expected to be completely rejected, along with all transactions in it, including other valid transactions. ## Parametrizing tests Tests can be parametrized by using the `@pytest.mark.parametrize` decorator. Example: ```python import pytest @pytest.mark.parametrize( "tx_value,expected_balance", [ pytest.param(0, 0, id="zero-value"), pytest.param(100, 100, id="non-zero-value"), ], ) def test_contract_creating_tx( blockchain_test: BlockchainTestFiller, fork: Fork, tx_value: int, expected_balance: int ): ``` This will run the test twice, once with `tx_value` set to `0` and `expected_balance` set to `0`, and once with `tx_value` set to `100` and `expected_balance` set to `100`. The `fork` fixture is automatically provided by the framework and contains the current fork under test, and does not need to be parametrized. Tests can also be automatically parametrized with appropriate fork covariant values using the `with_all_*` markers listed in the [Test Markers](./test_markers.md#fork-covariant-markers) page. ### The `extend_with_defaults` Utility ::: ethereum_test_tools.utility.pytest.extend_with_defaults ================================================ FILE: mkdocs.yml ================================================ site_name: Ethereum Execution Spec Tests site_description: A collection of test cases implemented in Python for Ethereum execution clients site_url: https://eest.ethereum.org/ repo_url: https://github.com/ethereum/execution-spec-tests repo_name: execution-spec-tests edit_uri: edit/main/docs/ copyright: "Copyright: 2024, Ethereum Community" plugins: - git-authors: exclude: - tests/* - navigation.md - getting_started/contributing.md - getting_started/security.md - filling_tests/filling_tests_command_line_options.md - glightbox - mkdocstrings: handlers: python: options: docstring_style: google members_order: source group_by_category: false - search - social - gen-files: scripts: - docs/scripts/copy_repo_docs_to_mkdocs.py - docs/scripts/gen_test_case_reference.py - docs/scripts/generate_fill_help.py - literate-nav: nav_file: navigation.md watch: - CONTRIBUTING.md - SECURITY.md - src/ - tests/ theme: name: material logo: img/Ethereum-logo-600px.png favicon: img/ETH-logo-icon.svg language: en features: - content.code.copy - search.suggest - search.highlight - content.tabs.link - navigation.indexes - navigation.instant - navigation.tabs - navigation.footer # disabled due to https://github.com/ethereum/execution-spec-tests/issues/816 # palette: # # Palette toggle for automatic mode # - media: "(prefers-color-scheme)" # toggle: # icon: material/brightness-auto # name: Switch to light mode # Palette toggle for light mode # - media: "(prefers-color-scheme: light)" # scheme: default # toggle: # icon: material/brightness-7 # name: Switch to dark mode # # Palette toggle for dark mode # - media: "(prefers-color-scheme: dark)" # scheme: slate # toggle: # icon: material/brightness-4 # name: Switch to system preference markdown_extensions: - abbr - admonition - attr_list - def_list - footnotes - md_in_html - mkdocs-click - toc: permalink: true toc_depth: 4 # Python Markdown Extensions - pymdownx.arithmatex: generic: true - pymdownx.betterem: smart_enable: all - pymdownx.caret - pymdownx.details - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.highlight - pymdownx.inlinehilite - pymdownx.keys - pymdownx.magiclink: repo_url_shortener: true repo_url_shorthand: true social_url_shorthand: true social_url_shortener: true user: ethereum repo: execution-spec-tests normalize_issue_symbols: true - pymdownx.mark: - pymdownx.smartsymbols - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tabbed: alternate_style: true - pymdownx.tasklist: custom_checkbox: true - pymdownx.tilde extra: version: provider: mike extra_javascript: - https://code.jquery.com/jquery-3.7.1.min.js - https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js - https://cdn.datatables.net/2.1.7/js/dataTables.min.js - https://cdn.datatables.net/buttons/3.1.2/js/dataTables.buttons.js - https://cdn.datatables.net/buttons/3.1.2/js/buttons.dataTables.js - https://cdn.datatables.net/buttons/3.1.2/js/buttons.colVis.min.js - javascripts/site.js extra_css: - https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css - https://cdn.datatables.net/2.1.7/css/dataTables.dataTables.min.css - https://cdn.datatables.net/buttons/3.1.2/css/buttons.dataTables.css - stylesheets/custom.css ================================================ FILE: pyproject.toml ================================================ [build-system] requires = [ "setuptools==78.0.2", "wheel==0.45.1", ] # the setuptools version here should match that of setuptools below in docs in optional-dependencies build-backend = "setuptools.build_meta" [project] name = "ethereum-execution-spec-tests" version = "1.0.0" description = "Ethereum execution client test authoring framework" readme = "README.md" requires-python = ">=3.11" license = { file = "LICENSE" } keywords = ["ethereum", "testing", "blockchain"] classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] dependencies = [ "click>=8.1.0,<9", "ethereum-hive>=0.1.0a1,<1.0.0", "ethereum-spec-evm-resolver", "gitpython>=3.1.31,<4", "PyJWT>=2.3.0,<3", "requests>=2.31.0,<3", "requests_unixsocket2>=0.4.0", "colorlog>=6.7.0,<7", "pytest>=8,<9", "pytest-custom-report>=1.0.1,<2", "pytest-html>=4.1.0,<5", "pytest-metadata>=3,<4", "pytest-xdist>=3.3.1,<4", "coincurve>=20.0.0,<21", "trie>=3.1.0,<4", "semver>=3.0.1,<4", "pydantic>=2.11.0,<3", "rich>=13.7.0,<14", "filelock>=3.15.1,<4", "ethereum-types>=0.2.1,<0.3", "pyyaml>=6.0.2,<7", "types-pyyaml>=6.0.12.20240917,<7", "pytest-json-report>=1.5.0,<2", "typing-extensions>=4.12.2,<5", "questionary>=2.1.0,<3", "ethereum-rlp>=0.1.3,<0.2", "pytest-regex>=0.2.0,<0.3", "pytest-rerunfailures>=16.0,<17", "eth-abi>=5.2.0", "joblib>=1.4.2", "ckzg>=2.1.3,<3", "tenacity>=9.0.0,<10", ] [project.urls] Homepage = "https://github.com/ethereum/execution-spec-tests" Documentation = "https://eest.ethereum.org" Repository = "https://github.com/ethereum/execution-spec-tests" Issues = "https://github.com/ethereum/execution-spec-tests/issues" Changelog = "https://eest.ethereum.org/main/CHANGELOG/" [project.optional-dependencies] test = ["pytest-cov>=4.1.0,<5"] lint = [ "ruff==0.13.2", "mypy>=1.15.0,<1.16", "types-requests>=2.31,<2.33", ] docs = [ "cairosvg>=2.7.0,<3", "codespell>=2.4.1,<3", "markdown==3.8", "mike>=1.1.2,<2", "mkdocs>=1.4.3,<2", "mkdocs-click>=0.8,<1", "mkdocs-gen-files>=0.5.0,<1", "mkdocs-git-authors-plugin>=0.7.1,<1", "mkdocs-glightbox>=0.3.4,<1", "mkdocs-literate-nav>=0.6.0,<1", "mkdocs-material>=9.1.14,<10", "mkdocs-material-extensions>=1.1.1,<2", "mkdocstrings>=0.21.2,<1", "mkdocstrings-python>=1.0.0,<2", "pillow>=10.0.1,<11", "pyspelling>=2.8.2,<3", "lxml>=6.0.0,<7", # needs to be >= 6.0 for pypy "setuptools==78.0.2", ] [project.scripts] fill = "cli.pytest_commands.fill:fill" phil = "cli.pytest_commands.fill:phil" execute = "cli.pytest_commands.execute:execute" attac = "cli.pytest_commands.execute:execute" checkfixtures = "cli.check_fixtures:check_fixtures" check_eip_versions = "cli.pytest_commands.check_eip_versions:check_eip_versions" consume = "cli.pytest_commands.consume:consume" protec = "cli.pytest_commands.consume:consume" checklist = "cli.pytest_commands.checklist:checklist" generate_checklist_stubs = "cli.generate_checklist_stubs:generate_checklist_stubs" genindex = "cli.gen_index:generate_fixtures_index_cli" gentest = "cli.gentest:generate" eofwrap = "cli.eofwrap:eof_wrap" pyspelling_soft_fail = "cli.tox_helpers:pyspelling" markdownlintcli2_soft_fail = "cli.tox_helpers:markdownlint" order_fixtures = "cli.order_fixtures:order_fixtures" evm_bytes = "cli.evm_bytes:evm_bytes" hasher = "cli.hasher:main" eest = "cli.eest.cli:eest" fillerconvert = "cli.fillerconvert.fillerconvert:main" fuzzer_bridge = "cli.fuzzer_bridge.cli:main" groupstats = "cli.show_pre_alloc_group_stats:main" extract_config = "cli.extract_config:extract_config" compare_fixtures = "cli.compare_fixtures:main" modify_static_test_gas_limits = "cli.modify_static_test_gas_limits:main" diff_opcode_counts = "cli.diff_opcode_counts:main" [tool.setuptools.packages.find] where = ["src"] exclude = ["*tests*"] [tool.pyright] exclude = ["tests/static/**"] [tool.setuptools.package-data] ethereum_test_forks = ["forks/contracts/*.bin"] "pytest_plugins.execute" = ["eth_config/networks.yml"] "pytest_plugins" = ["eels_resolutions.json"] "cli.eest.make" = ["templates/*.j2"] "cli.pytest_commands" = ["pytest_ini_files/*.ini"] "ethereum_test_types" = ["kzg_trusted_setup.txt"] [tool.ruff] line-length = 99 [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # Pyflakes "B", # flake8-bugbear "W", # pycodestyle warnings "I", # isort "A", # flake8-builtins "N", # pep8-naming "D", # pydocstyle "C4", # flake8-comprehensions "ARG", # flake8-unused-arguments ] fixable = [ "E", # pycodestyle errors "F", # Pyflakes "B", # flake8-bugbear "W", # pycodestyle warnings "I", # isort "D", # pydocstyle ] ignore = [ "C401", # Unnecessary generator set "C408", # Unnecessary collection call "D107", # Missing docstring in __init__ "D200", # One-line docstring should fit on one line with quotes "D203", # 1 blank line required before class docstring "D205", # Missing blank line after summary "D212", # Multi-line docstring summary should start at the first line "D401", # First line should be in imperative mood ("Do", not "Does") ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["ARG001"] # TODO: ethereum/execution-spec-tests#2188 [tool.mypy] mypy_path = ["src", "$MYPY_CONFIG_FILE_DIR/stubs"] files = ["src", "tests"] exclude = [ '^\.cache/', '^\.git/', '^\.pytest_cache/', '^\.ruff_cache/', '^\.tox/', '^\.venv/', '^\.vscode/', '^fixtures/', '^logs/', '^site/', ] plugins = ["pydantic.mypy"] namespace_packages = true strict_optional = true disallow_incomplete_defs = true disallow_untyped_defs = true strict_bytes = true warn_unused_ignores = true warn_unused_configs = true warn_redundant_casts = true ignore_missing_imports = false [tool.codespell] skip = ".venv,__pycache__,.git,build,dist,*.pyc,*.lock" check-filenames = true ignore-words-list = "ingenuous" [tool.pytest.ini_options] console_output_style = "count" minversion = "7.0" python_files = [ "test_*.py" ] testpaths = [ "src" ] addopts = [ "-p", "pytester", "-p", "pytest_plugins.eels_resolver", "--ignore=src/pytest_plugins/consume/test_cache.py", "--ignore=src/pytest_plugins/consume/direct/", "--ignore=src/pytest_plugins/consume/simulators/", ] [tool.uv] required-version = ">=0.7.0" [tool.uv.sources] ethereum-spec-evm-resolver = { git = "https://github.com/spencer-tb/ethereum-spec-evm-resolver", rev = "aec6a628b8d0f1c791a8378c5417a089566135ac" } ================================================ FILE: pyrightconfig.json ================================================ { "include":[ "src", "tests", "docs", ], "exclude": [ "logs", "fixtures", ], "typeCheckingMode": "off", } ================================================ FILE: scripts/convert_addresses.py ================================================ #!/usr/bin/env python3 """ Simple address converter for static test fillers. Two-pass approach: 1. Collect all addresses and create mappings 2. Replace all occurrences with tags. """ import argparse import re from enum import Enum, auto from pathlib import Path from typing import Dict, List, Optional, Set from ethereum_test_forks import Prague class Section(Enum): """Represents the current section being parsed.""" NONE = auto() PRE = auto() ENV = auto() TRANSACTION = auto() RESULT = auto() EXPECT = auto() class Context(Enum): """Represents the current context within a section.""" NORMAL = auto() CODE = auto() STORAGE = auto() # Known secret key that maps to sender address KNOWN_SECRET_KEY = "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" KNOWN_SENDER_ADDRESS = "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" # don't convert default coinbase since this is the same used in python tests # TODO: check if coinbase is affected in `result` section. If so, we need to tag it # to generate a dynamic address for it in both the `result` and `currentCoinbase` sections CONVERT_COINBASE = False PRECOMPILE_ADDRESSES = {pre.hex() for pre in Prague.precompiles()} # TODO: check these manually for false positives # callToSuicideThenExtcodehashFiller.json -- hard-coded 000...00025 FALSE_POSITIVE_TESTS = { # possible false positives to check "staticcall_createfailsFiller.json", "createInitFail_OOGduringInit2Filler.json", "createInitFail_OOGduringInitFiller.json", "createNameRegistratorPreStore1NotEnoughGasFiller.json", # definite false positives "codesizeOOGInvalidSizeFiller.json", # "contractCreationOOGdontLeaveEmptyContractFiller.json", # Temporarily enabling for testing "contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json", "createContractViaContractFiller.json", "createContractViaContractOOGInitCodeFiller.json", "createContractViaTransactionCost53000Filler.json", } # Path patterns for incompatible tests - can include full filenames or directory patterns INCOMPATIBLE_PATH_PATTERNS = { # Exact filenames (existing) "push0Filler.yml", "push0Gas2Filler.yml", "ContractCreationSpamFiller.json", "create2InitCodeSizeLimitFiller.yml", "createInitCodeSizeLimitFiller.yml", "creationTxInitCodeSizeLimitFiller.yml", "suicideNonConstFiller.yml", "createNonConstFiller.yml", "CrashingTransactionFiller.json", "measureGasFiller.yml", "operationDiffGasFiller.yml", "callcodeDynamicCodeFiller.json", "callcodeDynamicCode2SelfCallFiller.json", "callcodeInInitcodeToEmptyContractFiller.json", "callcodeInInitcodeToExistingContractFiller.json", "callcodeInInitcodeToExisContractWithVTransferNEMoneyFiller.json", "callcodeInInitcodeToExistingContractWithValueTransferFiller.json", "contractCreationMakeCallThatAskMoreGasThenTransactionProvidedFiller.json", "codesizeInitFiller.json", "codesizeValidFiller.json", "create2CodeSizeLimitFiller.yml", "createCodeSizeLimitFiller.yml", "createFailBalanceTooLowFiller.json", "createInitOOGforCREATEFiller.json", "createJS_NoCollisionFiller.json", "createNameRegistratorPerTxsFiller.json", "createNameRegistratorPerTxsNotEnoughGasFiller.json", "undefinedOpcodeFirstByteFiller.yml", "block504980Filler.json", "static_CallEcrecover0Filler.json", "static_CallEcrecover0_completeReturnValueFiller.json", "static_CallEcrecover0_gas3000Filler.json", "static_CallEcrecover0_overlappingInputOutputFiller.json", "static_CallEcrecoverCheckLengthFiller.json", "static_CallEcrecover0_prefixed0Filler.json", "static_contractCreationMakeCallThatAskMoreGasThenTransactionProvidedFiller.json", "static_contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json", "callcodecallcallcode_101_SuicideMiddleFiller.json", "static_callcodecallcallcode_101_OOGMAfter2Filler.json", "delegatecallInInitcodeToEmptyContractFiller.json", "delegatecallInInitcodeToExistingContractFiller.json", "delegatecallInInitcodeToExistingContractOOGFiller.json", "delegatecodeDynamicCode2SelfCallFiller.json", "delegatecodeDynamicCodeFiller.json", "RawCreateFailGasValueTransferFiller.json", "RawCreateFailGasValueTransfer2Filler.json", "ExtCodeCopyTestsParisFiller.json", "EXTCODESIZE_toNonExistentFiller.json", "CreateAndGasInsideCreateFiller.json", "RawCreateGasFiller.json", "RawCreateGasMemoryFiller.json", "RawCreateGasValueTransferFiller.json", "RawCreateGasValueTransferMemoryFiller.json", "Transaction64Rule_integerBoundariesFiller.yml", "addressOpcodesFiller.yml", "baseFeeDiffPlacesFiller.yml", "eip2929-ffFiller.yml", "eip2929Filler.yml", "eip2929OOGFiller.yml", "gasCostJumpFiller.yml", "gasCostMemoryFiller.yml", "gasPriceDiffPlacesFiller.yml", "initCollidingWithNonEmptyAccountFiller.yml", "manualCreateFiller.yml", "storageCostsFiller.yml", "variedContextFiller.yml", "vitalikTransactionTestParisFiller.json", # stExample "add11_ymlFiller.yml", "add11Filler.json", # stExtCodeHash "extcodehashEmpty_ParisFiller.yml", "extCodeHashSelfInInitFiller.json", "extCodeHashSubcallSuicideCancunFiller.yml", "extCodeHashNewAccountFiller.json", "extCodeHashDeletedAccount1CancunFiller.yml", "extCodeHashDeletedAccount2CancunFiller.yml", "extCodeHashDeletedAccount3Filler.yml", "extCodeHashDeletedAccount4Filler.yml", "extCodeHashCreatedAndDeletedAccountStaticCallFiller.json", "extCodeHashCreatedAndDeletedAccountRecheckInOuterCallFiller.json", "dynamicAccountOverwriteEmpty_ParisFiller.yml", "extCodeHashDeletedAccountCancunFiller.yml", "extCodeHashDeletedAccountFiller.yml", "extCodeHashSubcallSuicideFiller.yml", "CreateAndGasInsideCreateWithMemExpandingCallsFiller.json", "codeCopyZero_ParisFiller.yml", "extCodeHashInInitCodeFiller.json", "extCodeHashSelfFiller.json", "extCodeHashNonExistingAccountFiller.yml", "extCodeHashSubcallOOGFiller.yml", "extCodeHashPrecompilesFiller.yml", "contractCreationOOGdontLeaveEmptyContractFiller.json", "extCodeHashCreatedAndDeletedAccountCallFiller.json", "createEmptyThenExtcodehashFiller.json", "contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json", # Really only `ReturnTestFiller` and `ReturnTest2Filler` are compatible inside `stInitCodeTest` "CallContractToCreateContractAndCallItOOGFiller.json", "CallContractToCreateContractOOGBonusGasFiller.json", "CallContractToCreateContractWhichWouldCreateContractIfCalledFiller.json", "CallContractToCreateContractWhichWouldCreateContractInInitCodeFiller.json", "CallRecursiveContractFiller.json", "StackUnderFlowContractCreationFiller.json", "TransactionCreateRandomInitCodeFiller.json", "TransactionCreateAutoSuicideContractFiller.json", "TransactionCreateSuicideInInitcodeFiller.json", "CallTheContractToCreateEmptyContractFiller.json", "OutOfGasContractCreationFiller.json", "OutOfGasPrefundedContractCreationFiller.json", "TransactionCreateStopInInitcodeFiller.json", # stInitCodeTest "ReturnTestFiller.json", "ReturnTest2Filler.json", "CREATE_Bounds2Filler.json", "CREATE_Bounds3Filler.json", "CREATE_BoundsFiller.json", "NonZeroValue_CALLCODEFiller.json", "NonZeroValue_DELEGATECALLFiller.json", "bufferFiller.yml", "bufferSrcOffsetFiller.yml", "callDataCopyOffsetFiller.json", "oogFiller.yml", "CALLCODEEcrecover0Filler.json", "CALLCODEEcrecoverV_prefixed0Filler.json", "CALLCODEEcrecover0_completeReturnValueFiller.json", "CALLCODEEcrecover0_overlappingInputOutputFiller.json", "CALLCODEEcrecover0_gas3000Filler.json", "CallEcrecover0_completeReturnValueFiller.json", "CallEcrecoverCheckLengthFiller.json", "CallEcrecover0_gas3000Filler.json", "CallEcrecover0Filler.json", "CallEcrecover0_overlappingInputOutputFiller.json", "CallEcrecoverV_prefixed0Filler.json", "ecrecoverShortBuffFiller.yml", "modexp_0_0_0_20500Filler.json", "modexp_0_0_0_22000Filler.json", "modexp_0_0_0_25000Filler.json", "modexp_0_0_0_35000Filler.json", "Create1000ShnghaiFiller.json", "QuadraticComplexitySolidity_CallDataCopyFiller.json", "testRandomTestFiller.json", # uses coinbase address (0x41) as integer memory offsets. TODO: is this necessary for the test? # we could end up changing this for compatibility instead. "randomStatetest1Filler.json", "randomStatetest173Filler.json", "randomStatetest107Filler.json", "randomStatetest137Filler.json", "randomStatetest246Filler.json", "randomStatetest263Filler.json", "randomStatetest267Filler.json", "randomStatetest308Filler.json", "randomStatetest367Filler.json", "randomStatetest41Filler.json", "randomStatetest372Filler.json", "randomStatetest64Filler.json", "randomStatetest368Filler.json", "randomStatetest362Filler.json", "randomStatetest80Filler.json", "randomStatetest73Filler.json", "randomStatetest66Filler.json", "randomStatetest406Filler.json", "randomStatetest388Filler.json", "randomStatetest437Filler.json", "randomStatetest473Filler.json", "randomStatetest502Filler.json", "randomStatetest526Filler.json", "randomStatetest545Filler.json", "randomStatetest537Filler.json", "randomStatetest564Filler.json", "randomStatetest307Filler.json", "randomStatetest646Filler.json", "Call50000_sha256Filler.json", "Create1000ByzantiumFiller.json", "Create1000Filler.json", # stRecursiveCreate "RecursiveCreateContractsCreate4ContractsFiller.json", "RecursiveCreateContractsFiller.json", # stStackTests "shallowStackFiller.json", "stackOverflowFiller.json", "stackOverflowDUPFiller.json", "stackOverflowPUSHFiller.json", "revertRetDataSizeFiller.yml", "returndatacopy_0_0_following_successful_createFiller.json", "RevertPrefoundFiller.json", "RevertPrefoundEmpty_ParisFiller.json", "RevertDepthCreateOOGFiller.json", "costRevertFiller.yml", "LoopCallsDepthThenRevert2Filler.json", "LoopCallsDepthThenRevert3Filler.json", "CreateContractFromMethodFiller.json", "RevertOpcodeCreateFiller.json", "RevertOpcodeInInitFiller.json", "RevertOpcodeWithBigOutputInInitFiller.json", "ByZeroFiller.json", "TestCryptographicFunctionsFiller.json", "StackDepthLimitSECFiller.json", "eoaEmptyParisFiller.yml", "deploymentErrorFiller.json", "sstore_0to", # Note: many tests match this pattern "sstore_Xto", # Note: many tests match this pattern "sstore_changeFromExternalCallInInitCodeFiller.json", "stackOverflowM1DUPFiller.json", "stackOverflowM1Filler.json", "stackOverflowM1PUSHFiller.json", "stackOverflowSWAPFiller.json", "stacksanitySWAPFiller.json", # TODO: See if any of these can be turned on with fine tuning "static_ABAcallsSuicide1Filler.json", "static_CREATE_ContractSuicideDuringInitFiller.json", "static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json", "static_CREATE_ContractSuicideDuringInit_WithValueFiller.json", "static_ZeroValue_CALL_OOGRevertFiller.json", "static_CREATE_EmptyContractAndCallIt_0weiFiller.json", "static_CREATE_EmptyContractWithStorageAndCallIt_0weiFiller.json", "static_RawCallGasAskFiller.json", "static_InternalCallStoreClearsOOGFiller.json", "StaticcallToPrecompileFromCalledContractFiller.yml", "static_callCreate2Filler.json", "static_callCreate3Filler.json", "static_CallContractToCreateContractOOGFiller.json", "StaticcallToPrecompileFromContractInitializationFiller.yml", "StaticcallToPrecompileFromTransactionFiller.yml", "CallWithNOTZeroValueToPrecompileFromContractInitializationFiller.yml", "CallWithZeroValueToPrecompileFromContractInitializationFiller.yml", "CallWithZeroValueToPrecompileFromTransactionFiller.yml", "CallWithZeroValueToPrecompileFromCalledContractFiller.yml", "DelegatecallToPrecompileFromCalledContractFiller.yml", "CallcodeToPrecompileFromContractInitializationFiller.yml", "CallcodeToPrecompileFromCalledContractFiller.yml", "CallcodeToPrecompileFromTransactionFiller.yml", "DelegatecallToPrecompileFromContractInitializationFiller.yml", "DelegatecallToPrecompileFromTransactionFiller.yml", "CreateHashCollisionFiller.json", "createNameRegistratorZeroMem2Filler.json", "createNameRegistratorZeroMemFiller.json", "doubleSelfdestructTestFiller.yml", "createNameRegistratorZeroMemExpansionFiller.json", "createNameRegistratorFiller.json", "multiSelfdestructFiller.yml", "suicideCallerAddresTooBigRightFiller.json", "createNameRegistratorPerTxs", # Note: many tests match this pattern "addmodFiller.yml", "addFiller.yml", "divFiller.yml", "expFiller.yml", "modFiller.yml", "mulmodFiller.yml", "sdivFiller.yml", "signextendFiller.yml", "mulFiller.yml", "notFiller.yml", "subFiller.yml", "smodFiller.yml", "byteFiller.yml", "iszeroFiller.yml", "eqFiller.yml", "ltFiller.yml", "sgtFiller.yml", "sltFiller.yml", "gtFiller.yml", "xorFiller.yml", "orFiller.yml", "andFiller.yml", "codecopyFiller.yml", "jumpFiller.yml", "gasFiller.yml", "jumpToPushFiller.yml", "jumpiFiller.yml", "loopsConditionalsFiller.yml", "msizeFiller.yml", "mstoreFiller.yml", "mstore8Filler.yml", "mloadFiller.yml", "sstore_sloadFiller.yml", "returnFiller.yml", "pcFiller.yml", "popFiller.yml", "log0Filler.yml", "log1Filler.yml", "log2Filler.yml", "log3Filler.yml", "log4Filler.yml", "blockInfoFiller.yml", "envInfoFiller.yml", "sha3Filler.yml", "suicideFiller.yml", "swapFiller.yml", "Opcodes_TransactionInitFiller.json", "CreateMessageSuccessFiller.json", "CreateTransactionSuccessFiller.json", "EmptyTransaction3Filler.json", "SuicidesAndInternalCallSuicidesBonusGasAtCallFiller.json", "SuicidesStopAfterSuicideFiller.json", "SuicidesAndInternalCallSuicidesBonusGasAtCallFailedFiller.json", "SuicidesAndInternalCallSuicidesSuccessFiller.json", "StoreGasOnCreateFiller.json", "TransactionSendingToEmptyFiller.json", "ZeroValue_DELEGATECALLFiller.json", "ZeroValue_SUICIDEFiller.json", "ZeroValue_TransactionCALLFiller.json", "ZeroValue_CALLCODE_OOGRevertFiller.json", "ZeroValue_TransactionCALLwithDataFiller.json", "ZeroValue_CALL_OOGRevertFiller.json", "ZeroValue_DELEGATECALL_OOGRevertFiller.json", "ZeroValue_CALLCODEFiller.json", "ZeroValue_CALLFiller.json", "createNameRegistratorValueTooHighFiller.json", "suicideCallerAddresTooBigLeftFiller.json", "ABAcallsSuicide1Filler.json", "/stCreate2/", "/stCreateTest/", "/stRecursiveCreate/", "/stWalletTest/", "/stZeroKnowledge/", "/stZeroKnowledge2/", # TODO: See if these can be turned on with fine tuning "/stTimeConsuming/", } def is_incompatible_file(file_path: Path) -> bool: """Check if a file should be skipped based on filename or path patterns.""" file_path_str = str(file_path) filename = file_path.name # Check if filename is in FALSE_POSITIVE_TESTS if filename in FALSE_POSITIVE_TESTS: return True # Check against all incompatible path patterns for pattern in INCOMPATIBLE_PATH_PATTERNS: # If pattern ends with '/', it's a directory pattern if pattern.endswith("/"): if pattern in file_path_str: return True # Otherwise, check if pattern matches filename or is in path elif pattern == filename or pattern in file_path_str: return True return False DO_NOT_TAG_ADDRESSES = { "transStorageResetFiller.yml": {"000000000000000000000000000000003f8390d5"}, "transStorageOKFiller.yml": { "000000000000000000000000000000005d7935df", "00000000000000000000000000000000000057a7", "00000000000000000000000000000000c54b5829", "000000000000000000000000000000007f9317bd", "000000000000000000000000000000000000add1", "000000000000000000000000000000007074a486", "00000000000000000000000000000000264bb86a", "000000000000000000000000000000005114e2c8", "00000000000000000000000000000000ca11bacc", "00000000000000000000000000000000c1c922f1", "000000000000000000000000000000006e3a7204", "00000000000000000000000000000000ebd141d5", }, "invalidAddrFiller.yml": { "0000000000000000000000000000000000dead01", "0000000000000000000000000000000000dead02", }, "OOGinReturnFiller.yml": { "ccccccccccccccccccccccccccccccccccccccc1", "ccccccccccccccccccccccccccccccccccccccc2", }, "callToSuicideThenExtcodehashFiller.json": {"0000000000000000000000000000000000000025"}, "doubleSelfdestructTouch_ParisFiller.yml": { "0000000000000000000000000000000000e49701", "0000000000000000000000000000000000e49702", }, } SHORT_NAME_FILLERS = { "transStorageResetFiller.yml", "invalidAddrFiller.yml", "precompsEIP2929CancunFiller.yml", "addressOpcodesFiller.yml", "coinbaseT01Filler.yml", "coinbaseT2Filler.yml", "doubleSelfdestructTouch_ParisFiller.yml", "tooLongReturnDataCopyFiller.yml", "coinbaseWarmAccountCallGasFailFiller.yml", } # Fillers that should have precompile check disabled # These tests intentionally use addresses that map to precompiles DISABLE_PRECOMPILE_CHECK_FILLERS = { # type: ignore[var-annotated] # "block504980Filler.json", } # Fillers where addresses are tagged in pre/result sections only # No address replacement in code or storage values NO_TAGS_IN_CODE = { # Add fillers here that should not have addresses replaced in code/storage "modexpFiller.json", "returndatacopyPythonBug_Tue_03_48_41-1432Filler.json", "/stZeroKnowledge", "modexp_modsize0_returndatasizeFiller.json", "RevertPrecompiledTouchExactOOG_ParisFiller.json", "randomStatetest51Filler.json", # address is used as integer value "randomStatetest565Filler.json", # address is used as integer value "randomStatetest601Filler.json", # address is used as integer value } # Fillers that should skip entropy validation entirely # These tests are deemed safe to convert addresses even if they don't pass entropy check VALIDATE_ADDR_ENTROPY_IN_CODE = { # type: ignore[var-annotated] # Add more fillers here that should skip entropy validation # "static_log_CallerFiller.json", # "OOGMAfterFiller.json", # "OOGMAfter2Filler.json", # "OOGMAfter_2Filler.json", # "OOGMAfter_3Filler.json", # "OOGMAfterFiller.json", # "OOGMAfter2Filler.json", # "OOGMBeforeFiller.json", # "SuicideEndFiller.json", # "SuicideEnd2Filler.json", # "SuicideMiddleFiller.json", # "OOGEFiller.json", # "static_CheckOpcodesFiller.json", # "static_CheckOpcodes2Filler.json", # "static_CheckOpcodes3Filler.json", # "static_CheckOpcodes4Filler.json", # "static_CheckOpcodes5Filler.json", } # Fillers that should convert addresses with shouldnotexist in result section # These tests use CREATE/CREATE2 and need shouldnotexist addresses to be converted SHOULDNOTEXIST_NO_CONVERSION_FILLERS = { # Add more fillers here as needed "callToSuicideThenExtcodehashFiller.json", } # Fillers where addresses in storage keys should be replaced with tags # By default, storage keys are not replaced to avoid issues DONT_REPLACE_TAGS_IN_STORAGE_KEYS = { # type: ignore[var-annotated] # Add fillers here that should have addresses replaced in storage keys # Example: tests that use addresses as storage keys intentionally # "randomStatetest383Filler.json", } def normalize_address(addr: str) -> str: """Normalize address to lowercase without 0x prefix.""" if not addr: return addr addr = addr.strip().strip("\"'") if addr.startswith("0x") or addr.startswith("0X"): addr = addr[2:] return addr.lower() def calculate_entropy(addr: str) -> float: """Calculate address entropy (0-1) to determine if it's too simple/mathematical.""" if not addr or len(addr) != 40: return 0.0 # Count unique characters unique_chars = len(set(addr)) zero_count = addr.count("0") # Very simple addresses like 0x1000... or 0x2000... if unique_chars <= 3 and zero_count >= 35: return 0.1 # Too simple # Numerical patterns like 0x0000..., 0x1111..., 0x2222... (single digit repeated) if len(set(addr)) == 1 and addr[0] in "0123456789": return 0.1 # Too simple - numerical value # Test pattern addresses like 0xcccc... or 0xaaaa... (letters repeated) if len(set(addr)) == 1: return 0.8 # Clearly a test address return 0.5 # Default: replace it class SimpleAddressConverter: """Simple two-pass converter.""" def __init__(self, filename: str = ""): # noqa: D107 self.filename = filename self.address_mappings: Dict[str, str] = {} # addr -> tag self.pre_addresses: Set[str] = set() # addresses from pre section self.addresses_with_code: Set[str] = set() self.creation_addresses: Set[str] = ( set() ) # addresses from result section with shouldnotexist self.coinbase_addr: Optional[str] = None self.target_addr: Optional[str] = None self.is_json = filename.lower().endswith(".json") self.skip_precompile_check = any(kw in filename for kw in DISABLE_PRECOMPILE_CHECK_FILLERS) self.no_tags_in_code = any(kw in filename for kw in NO_TAGS_IN_CODE) self.validate_addr_entropy_in_code = any( kw in filename for kw in VALIDATE_ADDR_ENTROPY_IN_CODE ) self.dont_convert_shouldnotexist = any( kw in filename for kw in SHOULDNOTEXIST_NO_CONVERSION_FILLERS ) self.dont_replace_tags_in_storage_keys = any( kw in filename for kw in DONT_REPLACE_TAGS_IN_STORAGE_KEYS ) # Get addresses that should not be tagged for this specific test file self.do_not_tag_addresses: Set[str] = set() if filename in DO_NOT_TAG_ADDRESSES: self.do_not_tag_addresses = DO_NOT_TAG_ADDRESSES[filename] # Check if this is a short name filler self.is_short_name_filler = any(kw in filename for kw in SHORT_NAME_FILLERS) self.short_name_mappings: Dict[str, str] = {} # short_name -> tag def detect_section(self, line: str) -> Optional[Section]: """Detect which section a line indicates.""" stripped = line.strip().replace('"', "").replace("'", "").replace(" ", "") if "pre:" in stripped: return Section.PRE elif "env:" in stripped: return Section.ENV elif "transaction:" in stripped: return Section.TRANSACTION elif "result:" in stripped: return Section.RESULT elif "expect:" in stripped or "_info:" in stripped: return Section.EXPECT return None def detect_context_change(self, line: str) -> Optional[Context]: """Detect if line changes the context.""" stripped = line.strip().replace('"', "").replace("'", "").replace(" ", "") # Check for context-changing keywords if any(kw in stripped for kw in {"code:", "data:", "raw:"}): return Context.CODE elif "storage:" in stripped: # If storage is followed by {}, it's an empty storage and context should stay NORMAL if "storage:{}" in stripped or re.search(r"storage:\s*\{\s*\}", line): return None # Don't change context for empty storage return Context.STORAGE # Known fields that indicate we're back in NORMAL context elif any( kw in stripped for kw in { "balance:", "nonce:", "secretKey:", "gasLimit:", "gasPrice:", "value:", "to:", "from:", "address:", "shouldnotexist:", "indexes:", "network:", "result:", } ): return Context.NORMAL return None def create_short_name(self, addr: str) -> Optional[str]: """ Create a short name from an address by stripping leading/trailing zeros. Args: addr: Normalized address (40 chars, lowercase, no 0x prefix) Returns: Short name with 0x prefix, or None if the address is all zeros or too short """ if not addr or len(addr) != 40: return None # Strip leading zeros lstripped = addr.lstrip("0") # If nothing left after stripping leading zeros, it's all zeros if not lstripped: return None # Strip trailing zeros stripped = lstripped.rstrip("0") # If nothing left after stripping trailing zeros, or too short, return None if not stripped or len(stripped) < 2: if len(lstripped) >= 2: return f"0x{lstripped}" return None return f"0x{stripped}" def collect_addresses(self, lines: List[str]) -> None: """First pass: collect all addresses from the file (unified for JSON and YAML).""" current_section = Section.NONE current_context = Context.NORMAL current_address = None current_result_address = None looking_for_shouldnotexist = False for _, line in enumerate(lines, 1): stripped = line.strip() stripped_no_spaces_or_quotes = ( stripped.replace('"', "").replace("'", "").replace(" ", "").replace(",", "") ) # Check for section changes new_section = self.detect_section(line) if new_section: current_section = new_section current_context = Context.NORMAL current_address = None current_result_address = None looking_for_shouldnotexist = False # Reset context when we see a new address key in pre/result sections # This handles YAML structure where addresses are top-level keys # Do this FIRST before any other context checks if current_section in [Section.PRE, Section.RESULT]: # Check if this line is an address key (40 hex chars followed by colon) # Also check for quoted addresses in JSON format if re.match(r"^\s*(?:0x)?[a-fA-F0-9]{40}\s*:", line, re.IGNORECASE) or re.match( r'^\s*"(?:0x)?[a-fA-F0-9]{40}"\s*:', line, re.IGNORECASE ): current_context = Context.NORMAL # Don't reset context on closing braces - let field names determine context # Only collect addresses from pre section if current_section == Section.PRE: # Look for address patterns (with or without quotes, with or without 0x prefix) # Matches: "address":, "0xaddress":, address:, 0xaddress:, : addr_match = None # Plain address pattern (40 hex chars followed by colon) # Handle both JSON format ("address":) and YAML format (address:) # Use word boundaries to ensure we match exactly 40 hex chars, # not part of a longer string match = re.search( r'["\']?(?:0x)?(?\s*:", line, ) if match: addr_match = match if addr_match: addr = normalize_address(addr_match.group(1)) if addr not in self.do_not_tag_addresses: self.address_mappings[addr] = None # type: ignore[assignment] self.pre_addresses.add(addr) current_address = addr continue # Check for addresses in result section only for shouldnotexist logic if current_section == Section.RESULT and current_context != Context.CODE: # Look for address keys in result section match = re.search( r'["\']?(?:0x)?(?"] or len(code_content) > 2) ): self.addresses_with_code.add(current_address) # Also check during CODE context for multi-line code elif current_context == Context.CODE: # Don't add if this line should change context back to NORMAL if not any( kw in stripped_no_spaces_or_quotes for kw in {"balance:", "nonce:", "storage:"} ): if stripped and not stripped.startswith("#") and "{" not in stripped: # Any non-empty, non-comment, non-brace line in code section # indicates there's code self.addresses_with_code.add(current_address) # For JSON files, check code lines directly elif self.is_json and ('"code":' in line or '"code" :' in line): # Extract content after the colon if ":" in line: code_content = line.split(":", 1)[1].strip() # Remove quotes and check if there's actual content code_content = code_content.strip("'\"").strip(",") if ( code_content and code_content not in ["", "0x", "{}", "[]"] and (not code_content.startswith("0x") or len(code_content) > 3) ): # More than just "0x" self.addresses_with_code.add(current_address) if current_section == Section.ENV: coinbase_match = re.search( r'currentCoinbase:\s*["\']?[^"\']*?([a-fA-F0-9]{40})', stripped_no_spaces_or_quotes, ) if coinbase_match: addr = normalize_address(coinbase_match.group(1)) if addr not in self.do_not_tag_addresses: self.coinbase_addr = addr if CONVERT_COINBASE and not self.address_mappings.get(addr): self.address_mappings[addr] = None # type: ignore[assignment] if current_section == Section.TRANSACTION: if "to:" in stripped_no_spaces_or_quotes: to_match = re.search( r'to:\s*["\']?[^"\']*?([a-fA-F0-9]{40})', stripped_no_spaces_or_quotes, ) if to_match: addr = normalize_address(to_match.group(1)) if addr not in self.do_not_tag_addresses: self.target_addr = addr # Check for context changes AFTER processing for the next iteration new_context = self.detect_context_change(line) if new_context: current_context = new_context def build_tags(self) -> None: """Build appropriate tags for each address.""" for addr in self.address_mappings: # Skip coinbase if we're not converting it if ( addr == self.coinbase_addr and not CONVERT_COINBASE and addr not in self.pre_addresses ): continue if addr == KNOWN_SENDER_ADDRESS: # Always use eoa tag for sender - the pre-state will add code if needed self.address_mappings[addr] = f"" elif addr in self.creation_addresses: self.address_mappings[addr] = f"" elif addr == self.coinbase_addr and addr not in self.pre_addresses: self.address_mappings[addr] = f"" elif addr == self.target_addr and addr in self.addresses_with_code: self.address_mappings[addr] = f"" elif addr in self.addresses_with_code: self.address_mappings[addr] = f"" else: self.address_mappings[addr] = f"" # Build short name mappings for SHORT_NAME_FILLERS if self.is_short_name_filler: for addr, tag in self.address_mappings.items(): if tag: # Only if tag was assigned short_name = self.create_short_name(addr) if short_name: self.short_name_mappings[short_name] = tag def convert_line(self, line: str, section: Section, context: Context) -> str: """ Second pass: convert addresses to tags. IMPORTANT: This method should ONLY replace raw addresses with their tags. It should NEVER re-tag already tagged addresses to prevent double-tagging like >. The first pass identifies addresses and assigns tags. This second pass finds those raw addresses in the content and replaces them with their assigned tags. """ # Special handling for CALL to address 0 when we have 0x0000...0000 in pre-state if context == Context.CODE: zero_addr = "0" * 40 if zero_addr in self.address_mappings and self.address_mappings[zero_addr]: # Simple pattern: CALL[spaces/comma]FIRST_VALUE[spaces/comma]0 # This captures CALL followed by any amount of space/comma, then a numeric value, # then space/comma, then 0 # We ensure FIRST_VALUE and the address (0) are numeric to avoid double-tagging call_pattern = re.compile( r"(call)([,\s]+)(\d+)([,\s]+)0(?=[,\s\)])", re.IGNORECASE ) # Find all matches matches = list(call_pattern.finditer(line)) # Replace from end to start to preserve indices for match in reversed(matches): # Replace keeping the original separators line = ( line[: match.start()] + match.group(1) # CALL + match.group(2) # separator after CALL + match.group(3) # first value (gas) + match.group(4) # separator after first value + self.address_mappings[zero_addr] # replace 0 with tag + line[match.end() :] ) # Check if this line contains an address as a key in pre/result sections # JSON Pattern: "address" : { or "0xaddress" : { # YAML Pattern: address: or 0xaddress: is_address_key = False for addr in self.address_mappings: # JSON format if f'"{addr}" : {{' in line or f'"0x{addr}" : {{' in line: is_address_key = True break # YAML format - check if line contains address followed by colon (handles indentation) if f"{addr}:" in line or f"0x{addr}:" in line: # Make sure it's actually a key (followed by colon and not part of a longer string) # Check that there's whitespace or start of line before the address if re.search(rf"(?:^|\s){re.escape(addr)}:", line) or re.search( rf"(?:^|\s)0x{re.escape(addr)}:", line ): is_address_key = True break # Check if this is a transaction "to" field is_transaction_to = '"to"' in line and ":" in line # Handle secretKey specially (works for both YAML and JSON) if "secretKey" in line and KNOWN_SECRET_KEY.lower() in line.lower(): # Only replace if not already tagged if f"" not in line: # Replace with tag, preserving quotes if f'"0x{KNOWN_SECRET_KEY}"' in line: line = line.replace( f'"0x{KNOWN_SECRET_KEY}"', f'""', ) elif f'"{KNOWN_SECRET_KEY}"' in line: line = line.replace( f'"{KNOWN_SECRET_KEY}"', f'""' ) elif f"'0x{KNOWN_SECRET_KEY}'" in line: line = line.replace( f"'0x{KNOWN_SECRET_KEY}'", f"''", ) elif f"'{KNOWN_SECRET_KEY}'" in line: line = line.replace( f"'{KNOWN_SECRET_KEY}'", f"''" ) elif KNOWN_SECRET_KEY in line: line = line.replace(KNOWN_SECRET_KEY, f'""') return line # Sort addresses by length (longest first) to avoid partial replacements sorted_addresses = sorted( self.address_mappings.items(), key=lambda x: len(x[0]), reverse=True ) # Replace addresses with tags - simplified pattern matching for addr, tag in sorted_addresses: if not tag: # Safety check continue if ( not is_address_key and not is_transaction_to and section not in [Section.PRE, Section.RESULT] and self.validate_addr_entropy_in_code and calculate_entropy(addr) < 0.5 ): continue # Skip replacements in code/storage if no_tags_in_code is set # EXCEPT for address keys which should always be replaced if ( self.no_tags_in_code and context in [Context.CODE, Context.STORAGE] and not is_address_key ): continue # Use regex to find and replace addresses (case-insensitive) # Pattern 1: Address followed by colon (as a key) - with or without 0x prefix pattern_key = re.compile(rf'(^|\s|"|\')(?:0x)?{re.escape(addr)}(?=:)', re.IGNORECASE) if pattern_key.search(line): # Skip replacement if we're in storage context, depending on # dont_replace_tags_in_storage_keys if context != Context.STORAGE and not self.dont_replace_tags_in_storage_keys: # Replace while preserving the prefix (whitespace, quote, etc) line = pattern_key.sub(r"\1" + tag, line) # Pattern 2: Address in other contexts (not already in a tag) # Replace all occurrences that aren't already part of a tag # Use a simple approach: temporarily replace already-tagged addresses to avoid # double-tagging # First, find and temporarily replace all existing tags to protect them tag_pattern = re.compile(r"<[^>]+>") protected_tags = [] # type: ignore[var-annotated] def protect_tag(match): placeholder = f"__TAG_PLACEHOLDER_{len(protected_tags)}__" # noqa: B023 protected_tags.append(match.group(0)) # noqa: B023 return placeholder # Protect existing tags line_with_placeholders = tag_pattern.sub(protect_tag, line) # Now replace all occurrences of the address if context == Context.STORAGE: # In storage context, handle keys and values separately if not self.dont_replace_tags_in_storage_keys: # Replace addresses everywhere in storage, including keys pattern_general = re.compile(rf"(?:0x)?{re.escape(addr)}", re.IGNORECASE) line_with_placeholders = pattern_general.sub(tag, line_with_placeholders) else: # Default behavior: only replace in values, not keys # Split by colon and only replace in values parts = line_with_placeholders.split(":") for i in range(1, len(parts)): # Skip first part (the key) # Replace address in this part pattern_general = re.compile(rf"(?:0x)?{re.escape(addr)}", re.IGNORECASE) parts[i] = pattern_general.sub(tag, parts[i]) line_with_placeholders = ":".join(parts) else: # Not in storage context - replace all occurrences pattern_general = re.compile(rf"(?:0x)?{re.escape(addr)}", re.IGNORECASE) line_with_placeholders = pattern_general.sub(tag, line_with_placeholders) # Restore protected tags for i, protected_tag in enumerate(protected_tags): placeholder = f"__TAG_PLACEHOLDER_{i}__" line_with_placeholders = line_with_placeholders.replace(placeholder, protected_tag) line = line_with_placeholders # Replace short names with tags for SHORT_NAME_FILLERS if self.is_short_name_filler and self.short_name_mappings and context == Context.CODE: # Sort short names by length (longest first) to avoid partial replacements sorted_short_names = sorted( self.short_name_mappings.items(), key=lambda x: len(x[0]), reverse=True ) for short_name, tag in sorted_short_names: # Skip if line already contains this exact tag to prevent double-tagging if tag in line: continue # Only replace short names in code/storage values, not in address keys if not is_address_key: # Extract the hex part without 0x prefix from short_name hex_part = short_name[2:] if short_name.startswith("0x") else short_name # Create a pattern that matches the hex part with any number of # leading/trailing zeros # Pattern: optional 0x prefix, any number of zeros, the hex part, # any number of zeros # Must be bounded by non-hex characters to avoid partial matches pattern = re.compile( rf"(?:0x)?0*{re.escape(hex_part)}0*(?![a-fA-F0-9])", re.IGNORECASE, ) # Find all matches and replace them matches = list(pattern.finditer(line)) if matches: # Replace from end to start to preserve indices for match in reversed(matches): # Only replace if it's a valid hex number # (starts with 0x or is all hex) match_text = match.group(0) if match_text.startswith("0x") or match_text.startswith("0X"): line = line[: match.start()] + tag + line[match.end() :] elif all(c in "0123456789abcdefABCDEF" for c in match_text): # Pure hex without 0x prefix - check context to ensure it's # meant as an address # Look for indicators like quotes, colons, or being a # standalone value before = line[: match.start()].rstrip() after = line[match.end() :].lstrip() if ( before.endswith(('"', "'", ":", " ", "(", "[", ",")) or after.startswith(('"', "'", " ", ")", "]", ",", "\n")) or not before ): # Start of line line = line[: match.start()] + tag + line[match.end() :] return line def convert_file(file_path: str) -> bool: """Convert a single JSON or YAML file using line-by-line processing.""" try: with open(file_path, "r") as f: lines = f.readlines() filename = Path(file_path).name converter = SimpleAddressConverter(filename=filename) converter.collect_addresses(lines) converter.build_tags() if not converter.address_mappings: return False new_lines = [] current_section = Section.NONE current_context = Context.NORMAL for line in lines: stripped = line.strip() stripped_no_spaces_or_quotes = ( stripped.replace('"', "").replace("'", "").replace(" ", "") ) # Check for section changes new_section = converter.detect_section(line) if new_section: current_section = new_section current_context = Context.NORMAL # Reset context on various keywords BEFORE converting the line if any( kw in stripped_no_spaces_or_quotes for kw in { "env:", "transaction:", "expect:", "indexes:", "network:", "result:", "secretKey:", "to:", "value:", "address:", "from:", } ): current_context = Context.NORMAL # Reset context when we see a new address key in pre/result sections # This handles YAML structure where addresses are top-level keys if current_section in [Section.PRE, Section.RESULT]: # Check if this line is an address key (40 hex chars followed by colon) if re.match(r"^\s*(?:0x)?[a-fA-F0-9]{40}\s*:", line, re.IGNORECASE): current_context = Context.NORMAL # Check for context changes BEFORE processing the line new_context = converter.detect_context_change(line) if new_context: current_context = new_context # Convert the line with the current context new_line = converter.convert_line(line, current_section, current_context) new_lines.append(new_line) # Write back with open(file_path, "w") as f: f.writelines(new_lines) return True except Exception as e: print(f"Error converting {file_path}: {e}") return False def main(): """Main conversion function.""" # noqa: D401 parser = argparse.ArgumentParser( description="Convert addresses to tags in static test fillers" ) parser.add_argument( "path", nargs="?", default="tests/static", help="Path to search for filler files", ) args = parser.parse_args() # Check if path is a single file or directory path = Path(args.path) yaml_files = [] json_files = [] if path.is_file(): if path.name.endswith("Filler.yml") and not is_incompatible_file(path): yaml_files = [path] elif path.name.endswith("Filler.json") and not is_incompatible_file(path): json_files = [path] else: yaml_files = list(path.rglob("*Filler.yml")) json_files = list(path.rglob("*Filler.json")) yaml_files = [file for file in yaml_files if not is_incompatible_file(file)] json_files = [file for file in json_files if not is_incompatible_file(file)] print(f"Found {len(yaml_files)} YAML filler files") print(f"Found {len(json_files)} JSON filler files") # Convert files converted_yaml = 0 converted_json = 0 # Convert YAML files for file_path in yaml_files: if convert_file(str(file_path)): converted_yaml += 1 print(f"Converted YAML: {file_path}") # Convert JSON files for file_path in json_files: if convert_file(str(file_path)): converted_json += 1 print(f"Converted JSON: {file_path}") print(f"\nSummary: Converted {converted_yaml} YAML files and {converted_json} JSON files") if __name__ == "__main__": main() ================================================ FILE: src/cli/__init__.py ================================================ """Ethereum execution spec tests command-line tools.""" ================================================ FILE: src/cli/check_fixtures.py ================================================ """ Perform sanity checks on the framework's pydantic serialization and deserialization using generated json fixtures files. """ from pathlib import Path from typing import Generator import click from rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn from ethereum_test_base_types import to_json from ethereum_test_fixtures.file import Fixtures from ethereum_test_specs.base import HashMismatchExceptionError def count_json_files_exclude_index(start_path: Path) -> int: """ Return the number of json files in the specified directory, excluding index.json files. """ json_file_count = sum(1 for file in start_path.rglob("*.json") if file.name != "index.json") return json_file_count def check_json(json_file_path: Path) -> None: """ Check all fixtures in the specified json file: 1. Load the json file into a pydantic model. This checks there are no Validation errors when loading fixtures into EEST models. 2. Serialize the loaded pydantic model to "json" (actually python data structures, ready to written as json). 3. Load the serialized data back into a pydantic model (to get an updated hash) from step 2. 4. Compare hashes: a. Compare the newly calculated hashes from step 2. and 3. and b. If present, compare info["hash"] with the calculated hash from step 2. """ fixtures: Fixtures = Fixtures.model_validate_json(json_file_path.read_text()) fixtures_json = to_json(fixtures) fixtures_deserialized: Fixtures = Fixtures.model_validate(fixtures_json) for fixture_name, fixture in fixtures.items(): new_hash = fixtures_deserialized[fixture_name].hash if (original_hash := fixture.hash) != new_hash: raise HashMismatchExceptionError( original_hash, new_hash, message=f"Fixture hash attributes do not match for {fixture_name}", ) if "hash" in fixture.info and fixture.info["hash"] != original_hash: info_hash = fixture.info["hash"] info_hash_str = str(info_hash) if not isinstance(info_hash, str) else info_hash raise HashMismatchExceptionError( original_hash, info_hash_str, message=( f"Fixture info['hash'] does not match calculated " f"hash for {fixture_name}: '{info_hash}' != " f"'{original_hash}'" ), ) @click.command() @click.option( "--input", "-i", "input_str", type=click.Path(exists=True, file_okay=True, dir_okay=True, readable=True), required=True, help="The input json file or directory containing json fixture files", ) @click.option( "--quiet", "-q", "quiet_mode", is_flag=True, default=False, expose_value=True, help="Don't show the progress bar while processing fixture files.", ) @click.option( "--stop-on-error", "--raise-on-error", "-s", "stop_on_error", is_flag=True, default=False, expose_value=True, help="Stop and raise any exceptions encountered while checking fixtures.", ) def check_fixtures(input_str: str, quiet_mode: bool, stop_on_error: bool) -> bool: """ Perform checks on fixtures in the specified directory. """ input_path = Path(input_str) success = True file_count = 0 filename_display_width = 25 if input_path.is_file(): file_count = 1 elif not quiet_mode: file_count = count_json_files_exclude_index(input_path) def get_input_files() -> Generator[Path, None, None]: if input_path.is_file(): yield input_path else: yield from input_path.rglob("*.json") with Progress( TextColumn( f"[bold cyan]{{task.fields[filename]:<{filename_display_width}}}[/]", justify="left" ), BarColumn(bar_width=None, complete_style="green3", finished_style="bold green3"), TaskProgressColumn(), TimeElapsedColumn(), expand=True, disable=quiet_mode, ) as progress: # type: Progress task_id = progress.add_task("Checking fixtures", total=file_count, filename="...") for json_file_path in get_input_files(): if json_file_path.name == "index.json": continue display_filename = json_file_path.name if len(display_filename) > filename_display_width: display_filename = display_filename[: filename_display_width - 3] + "..." else: display_filename = display_filename.ljust(filename_display_width) try: progress.update(task_id, advance=1, filename=f"Checking {display_filename}") check_json(json_file_path) except Exception as e: success = False if stop_on_error: raise e else: progress.console.print(f"\nError checking {json_file_path}:") progress.console.print(f" {e}") reward_string = "🦄" if success else "🐢" progress.update( task_id, completed=file_count, filename=f"Completed checking all files {reward_string}" ) return success if __name__ == "__main__": check_fixtures() ================================================ FILE: src/cli/compare_fixtures.py ================================================ """ Compare two fixture folders and remove duplicates based on fixture hashes. This tool reads the .meta/index.json files from two fixture directories and identifies fixtures with identical hashes on a test case basis, then removes the duplicates from both of the folders. Used within the coverage workflow. """ import json import shutil import sys from collections import defaultdict from pathlib import Path from typing import List, Set import click from ethereum_test_base_types import HexNumber from ethereum_test_fixtures.consume import IndexFile, TestCaseIndexFile def get_index_path(folder: Path) -> Path: """Get the path to an index in a given folder.""" return folder / ".meta" / "index.json" def load_index(folder: Path) -> IndexFile: """Load the index.json file from a fixture folder.""" index_path = get_index_path(folder) if not index_path.exists(): raise FileNotFoundError(f"Index file not found: {index_path}") return IndexFile.model_validate_json(index_path.read_text()) def get_fixture_hashes(index: IndexFile) -> Set[HexNumber]: """Extract fixture hashes and their corresponding file paths from index.""" hash_set = set() for test_case in index.test_cases: if test_case.fixture_hash is None: continue hash_set.add(test_case.fixture_hash) return hash_set def find_duplicates(base_hashes: Set[HexNumber], patch_hashes: Set[HexNumber]) -> Set[HexNumber]: """Find fixture hashes that exist in both base and patch.""" return base_hashes & patch_hashes def pop_all_by_hash(index: IndexFile, fixture_hash: HexNumber) -> List[TestCaseIndexFile]: """Pops all test cases from an index file by their hash.""" test_cases = [] remaining_cases = [] for test_case in index.test_cases: if test_case.fixture_hash == fixture_hash: test_cases.append(test_case) else: remaining_cases.append(test_case) if not test_cases: raise Exception(f"Hash {fixture_hash} not found in index.") index.test_cases = remaining_cases return test_cases def remove_fixture_from_file(file: Path, test_case_id: str) -> None: """Remove a single fixture by its ID from a generic fixture file.""" try: # Load from json to a dict full_file = json.loads(file.read_text()) full_file.pop(test_case_id) file.write_text(json.dumps(full_file, indent=2)) except FileNotFoundError: raise FileNotFoundError(f"Fixture file not found: {file}") from None except KeyError: raise KeyError(f"Test case {test_case_id} not found in {file}") from None def batch_remove_fixtures_from_files(removals_by_file: dict[Path, list[str]]) -> None: """Batch process file removals to minimize I/O.""" for file_path, test_case_ids in removals_by_file.items(): try: full_file = json.loads(file_path.read_text()) for test_case_id in test_case_ids: full_file.pop(test_case_id, None) if len(full_file) > 0: file_path.write_text(json.dumps(full_file, indent=2)) else: file_path.unlink() except Exception as e: print(f"Error processing {file_path}: {e}") def rewrite_index(folder: Path, index: IndexFile, dry_run: bool) -> None: """ Rewrite index to file, or if test count is zero, delete directory. """ if len(index.test_cases) > 0: # Just rewrite the index if not dry_run: with open(get_index_path(folder), "w") as f: f.write(index.model_dump_json(exclude_none=False, indent=2)) else: print(f"Would rewrite index for {folder}") else: # Delete the folder if not dry_run: shutil.rmtree(folder) else: print(f"Would delete {folder}") @click.command() @click.argument("base", type=click.Path(exists=True, file_okay=False, path_type=Path)) @click.argument("patch", type=click.Path(exists=True, file_okay=False, path_type=Path)) @click.option( "--dry-run", is_flag=True, help="Show what would be removed without actually removing" ) @click.option( "--abort-on-empty-patch", is_flag=True, help="Abort if the patch folder would be empty after fixture removal.", ) def main( base: Path, patch: Path, dry_run: bool, abort_on_empty_patch: bool, ) -> None: """ Compare two folders and remove duplicates based on fixture hashes. """ try: # Load indices base_index = load_index(base) base_hashes = get_fixture_hashes(base_index) patch_index = load_index(patch) patch_hashes = get_fixture_hashes(patch_index) # Find duplicates duplicate_hashes = find_duplicates(base_hashes, patch_hashes) if not duplicate_hashes: click.echo("No duplicates found.") sys.exit(0) else: click.echo(f"Found {len(duplicate_hashes)} duplicates.") if abort_on_empty_patch and duplicate_hashes == patch_hashes: click.echo("Patch folder would be empty after fixture removal.") sys.exit(0) # Collect removals by file for batching base_removals_by_file = defaultdict(list) patch_removals_by_file = defaultdict(list) for duplicate_hash in duplicate_hashes: base_test_cases = pop_all_by_hash(base_index, duplicate_hash) patch_test_cases = pop_all_by_hash(patch_index, duplicate_hash) for base_test_case in base_test_cases: base_file = base / base_test_case.json_path if dry_run: print(f"Remove {base_test_case.id} from {base_file}") else: base_removals_by_file[base_file].append(base_test_case.id) for patch_test_case in patch_test_cases: patch_file = patch / patch_test_case.json_path if dry_run: print(f"Remove {patch_test_case.id} from {patch_file}") else: patch_removals_by_file[patch_file].append(patch_test_case.id) # Batch process file operations if not dry_run: batch_remove_fixtures_from_files(base_removals_by_file) batch_remove_fixtures_from_files(patch_removals_by_file) # Rewrite indices if necessary rewrite_index(base, base_index, dry_run) rewrite_index(patch, patch_index, dry_run) except Exception as e: click.echo(f"Error: {e}", err=True) sys.exit(1) if __name__ == "__main__": main() ================================================ FILE: src/cli/diff_opcode_counts.py ================================================ #!/usr/bin/env python """ Compare opcode counts between two folders of JSON fixtures. This script crawls two folders for JSON files, parses them using the Fixtures model, and compares the opcode_count field from the info section between fixtures with the same name. """ import sys from pathlib import Path from typing import Dict, List, Optional import click from ethereum_clis.cli_types import OpcodeCount from ethereum_test_fixtures.file import Fixtures def find_json_files(directory: Path) -> List[Path]: """Find all JSON files in a directory, excluding index.json files.""" json_files = [] if directory.is_dir(): for file_path in directory.rglob("*.json"): if file_path.name != "index.json": json_files.append(file_path) return json_files def load_fixtures_from_file( file_path: Path, remove_from_fixture_names: List[str] ) -> Optional[Fixtures]: """Load fixtures from a JSON file using the Fixtures model.""" try: fixtures = Fixtures.model_validate_json(file_path.read_text()) renames = [] for k in fixtures.root: new_name = None for s in remove_from_fixture_names: if s in k: if new_name is None: new_name = k.replace(s, "") else: new_name = new_name.replace(s, "") if new_name is not None: renames.append((k, new_name)) for old_name, new_name in renames: fixtures.root[new_name] = fixtures.root.pop(old_name) return fixtures except Exception as e: print(f"Error loading {file_path}: {e}", file=sys.stderr) return None def extract_opcode_counts_from_fixtures(fixtures: Fixtures) -> Dict[str, OpcodeCount]: """Extract opcode_count from info field for each fixture.""" opcode_counts = {} for fixture_name, fixture in fixtures.items(): if hasattr(fixture, "info") and fixture.info and "opcode_count" in fixture.info: try: opcode_count = OpcodeCount.model_validate(fixture.info["opcode_count"]) opcode_counts[fixture_name] = opcode_count except Exception as e: print(f"Error parsing opcode_count for {fixture_name}: {e}", file=sys.stderr) return opcode_counts def load_all_opcode_counts( directory: Path, remove_from_fixture_names: List[str] ) -> Dict[str, OpcodeCount]: """Load all opcode counts from all JSON files in a directory.""" all_opcode_counts = {} json_files = find_json_files(directory) for json_file in json_files: fixtures = load_fixtures_from_file( json_file, remove_from_fixture_names=remove_from_fixture_names ) if fixtures: file_opcode_counts = extract_opcode_counts_from_fixtures(fixtures) # Use fixture name as key, if there are conflicts, choose the last all_opcode_counts.update(file_opcode_counts) return all_opcode_counts def compare_opcode_counts(count1: OpcodeCount, count2: OpcodeCount) -> Dict[str, int]: """Compare two opcode counts and return the differences.""" differences = {} # Get all unique opcodes from both counts all_opcodes = set(count1.root.keys()) | set(count2.root.keys()) for opcode in all_opcodes: val1 = count1.root.get(opcode, 0) val2 = count2.root.get(opcode, 0) diff = val2 - val1 if diff != 0: differences[str(opcode)] = diff return differences @click.command() @click.argument("base", type=click.Path(exists=True, file_okay=False, path_type=Path)) @click.argument("patch", type=click.Path(exists=True, file_okay=False, path_type=Path)) @click.option( "--show-common", is_flag=True, help="Print fixtures that contain identical opcode counts.", ) @click.option( "--show-missing", is_flag=True, help="Print fixtures only found in one of the folders.", ) @click.option( "--remove-from-fixture-names", "-r", multiple=True, help="String to be removed from the fixture name, in case the fixture names have changed, " "in order to make the comparison easier. " "Can be specified multiple times.", ) def main( base: Path, patch: Path, show_common: bool, show_missing: bool, remove_from_fixture_names: List[str], ) -> None: """Crawl two folders, compare and print opcode count diffs.""" print(f"Loading opcode counts from {base}...") opcode_counts1 = load_all_opcode_counts(base, remove_from_fixture_names) print(f"Found {len(opcode_counts1)} fixtures with opcode counts") print(f"Loading opcode counts from {patch}...") opcode_counts2 = load_all_opcode_counts(patch, remove_from_fixture_names) print(f"Found {len(opcode_counts2)} fixtures with opcode counts") # Find common fixture names common_names = set(opcode_counts1.keys()) & set(opcode_counts2.keys()) only_in_1 = set(opcode_counts1.keys()) - set(opcode_counts2.keys()) only_in_2 = set(opcode_counts2.keys()) - set(opcode_counts1.keys()) print("\nSummary:") print(f" Common fixtures: {len(common_names)}") print(f" Only in {base.name}: {len(only_in_1)}") print(f" Only in {patch.name}: {len(only_in_2)}") # Show missing fixtures if requested if show_missing: if only_in_1: print(f"\nFixtures only in {base.name}:") for name in sorted(only_in_1): print(f" {name}") if only_in_2: print(f"\nFixtures only in {patch.name}:") for name in sorted(only_in_2): print(f" {name}") # Compare common fixtures differences_found = False common_with_same_counts = 0 for fixture_name in sorted(common_names): count1 = opcode_counts1[fixture_name] count2 = opcode_counts2[fixture_name] differences = compare_opcode_counts(count1, count2) if differences: differences_found = True print(f"\n{fixture_name}:") for opcode, diff in sorted(differences.items()): if diff > 0: print(f" +{diff} {opcode}") else: print(f" {diff} {opcode}") elif show_common: print(f"\n{fixture_name}: No differences") common_with_same_counts += 1 if not differences_found: print("\nNo differences found in opcode counts between common fixtures!") elif show_common: print(f"\n{common_with_same_counts} fixtures have identical opcode counts") if __name__ == "__main__": main() ================================================ FILE: src/cli/eest/__init__.py ================================================ """Entry point for the `eest` command line interface.""" ================================================ FILE: src/cli/eest/cli.py ================================================ """ `eest` is a CLI tool that helps with routine tasks. Invoke using `uv run eest`. """ import click from .commands import clean, info from .make.cli import make @click.group( context_settings={ "help_option_names": ["-h", "--help"], "max_content_width": 120, } ) def eest() -> None: """`eest` is a CLI tool that helps with routine tasks.""" pass """ ################################ || || || Command Registration || || || ################################ Register nested commands here. For more information, see Click documentation: https://click.palletsprojects.com/en/8.0.x/commands/#nested-handling-and-contexts """ eest.add_command(make) eest.add_command(clean) eest.add_command(info) ================================================ FILE: src/cli/eest/commands/__init__.py ================================================ """ A collection of commands supported by `eest` CLI. Run `uv run eest` for complete list. """ from .clean import clean from .info import info __all__ = ["clean", "info"] ================================================ FILE: src/cli/eest/commands/clean.py ================================================ """Clean CLI command removes generated files and directories.""" import glob import os import shutil import click @click.command(short_help="Remove all generated files and directories.") @click.option( "--all", "all_files", is_flag=True, help="Remove the virtual environment and .tox directory as well.", ) @click.option("--dry-run", is_flag=True, help="Simulate the cleanup without removing files.") @click.option("-v", "--verbose", is_flag=True, help="Show verbose output.") def clean(all_files: bool, dry_run: bool, verbose: bool) -> None: """ Remove all generated files and directories from the repository. If `--all` is specified, the virtual environment and .tox directory will also be removed. Args: all_files (bool): Remove the virtual environment and .tox directory as well. dry_run (bool): Simulate the cleanup without removing files. verbose (bool): Show verbose output. Note: The virtual environment and .tox directory are not removed by default. Example: Cleaning all generated files and directories and show the deleted items. uv run eest clean --all -v Output: \b 🗑️ Deleted: .tox 🗑️ Deleted: .venv 🗑️ Deleted: src/cli/et/__pycache__ 🗑️ Deleted: src/cli/et/commands/__pycache__ 🗑️ Deleted: src/cli/et/make/__pycache__ 🗑️ Deleted: src/cli/et/make/commands/__pycache__ ... 🧹 Cleanup complete! """ # noqa: D417, D301 # List of items to remove can contain files and directories. items_to_remove = [ ".pytest_cache", ".mypy_cache", "fixtures", "build", "site", "cached_downloads", ".pyspelling_en.dict", ] # glob patterns to remove. patterns_to_remove = ["src/**/__pycache__", "tests/**/__pycache__"] for pattern in patterns_to_remove: matching_files = glob.glob(pattern, recursive=True) items_to_remove.extend(matching_files) if all_files: items_to_remove.extend([".tox", ".venv"]) # Perform dry run or actual deletion for item in items_to_remove: if os.path.exists(item): if dry_run: click.echo(f"[🧐 Dry run] File would be deleted: {item}") else: try: if os.path.isdir(item): shutil.rmtree(item, ignore_errors=False) else: os.remove(item) # Verbose flag: Output the name of the deleted item if verbose: click.echo(f"🗑️ Deleted: {item}") except PermissionError: click.echo(f"❌ Permission denied to remove {item}.") except Exception as e: click.echo(f"❌ Failed to remove {item}: {e}") if not dry_run: click.echo("🧹 Cleanup complete!") ================================================ FILE: src/cli/eest/commands/info.py ================================================ """Command to display EEST and system information.""" import platform import subprocess import sys import click from config.app import AppConfig from ethereum_test_tools.utility.versioning import get_current_commit_hash_or_tag def run_command(command: list[str]) -> str: """Run a CLI command and return its output.""" try: result = subprocess.run( command, capture_output=True, text=True, check=True, ) return result.stdout.strip() except (subprocess.SubprocessError, FileNotFoundError): return "unknown" def get_uv_version() -> str: """Get the installed uv package manager version.""" return run_command(["uv", "--version"]) @click.command(name="info") def info() -> None: """Display EEST and system information.""" # Format headers title = click.style("EEST", fg="green", bold=True) version = AppConfig().version info_text = f""" {title} {click.style(f"v{version}", fg="blue", bold=True)} {"─" * 50} Git commit: {click.style(get_current_commit_hash_or_tag(shorten_hash=True), fg="yellow")} Python: {click.style(platform.python_version(), fg="blue")} uv: {click.style(get_uv_version(), fg="magenta")} OS: {click.style(f"{platform.system()} {platform.release()}", fg="cyan")} Platform: {click.style(platform.machine(), fg="cyan")} Python Path: {click.style(sys.executable, dim=True)} """ click.echo(info_text) ================================================ FILE: src/cli/eest/make/__init__.py ================================================ """ Make CLI. This module provides the `make` CLI command that helps you quickly scaffold files. """ from .cli import test __all__ = ["test"] ================================================ FILE: src/cli/eest/make/cli.py ================================================ """ The `make` CLI streamlines the process of scaffolding tasks, such as generating new test files, enabling developers to concentrate on the core aspects of specification testing. The module calls the appropriate function for the subcommand. If an invalid subcommand is chosen, it throws an error and shows a list of valid subcommands. If no subcommand is present, it shows a list of valid subcommands to choose from. """ import click from .commands import create_default_env, test @click.group(short_help="Generate project files.") def make() -> None: """Generate project files.""" pass """ ################################ || || || Command Registration || || || ################################ Register nested commands here. For more information, see Click documentation: https://click.palletsprojects.com/en/8.0.x/commands/#nested-handling-and-contexts """ make.add_command(test) make.add_command(create_default_env) ================================================ FILE: src/cli/eest/make/commands/__init__.py ================================================ """ Holds subcommands for the make command. New subcommands must be created as modules and exported from this package, then registered under the make command in `cli.py`. """ from .env import create_default_env from .test import test __all__ = ["test", "create_default_env"] ================================================ FILE: src/cli/eest/make/commands/env.py ================================================ """CLI commands for managing the environment file.""" import click from jinja2 import Environment, PackageLoader from config.env import ENV_PATH, Config from ...quotes import get_quote @click.command( short_help="Generate the default environment file (env.yaml).", name="env", ) def create_default_env() -> None: """ CLI command to generate the default environment file (env.yaml). If an `env.yaml` already exists, this command will NOT override it. In that case, it is recommended to manually make changes. _Easter egg: Shows a random quote after creating the environment file._ Example: uv run eest make env Output: 🎉 Success! Environment file created at: /env.yaml 🚀 Well begun is half done. - Aristotle """ # Check if the env file already exists if ENV_PATH.exists(): click.echo( click.style( f"🚧 The env file '{ENV_PATH}' already exists. " "Please update it manually if needed.", fg="red", ) ) exit(1) template_environment = Environment( loader=PackageLoader("config"), trim_blocks=True, lstrip_blocks=True ) template = template_environment.get_template("env.yaml.j2") env_yaml = template.render(config=Config()) with ENV_PATH.open("w") as file: file.write(env_yaml) click.echo(click.style(f"🎉 Success! Environment file created at: {ENV_PATH}", fg="green")) click.echo(get_quote()) ================================================ FILE: src/cli/eest/make/commands/test.py ================================================ """ Provides a CLI command to scaffold a test file. The `test` command guides the user through a series of prompts to generate a test file based on the selected test type, fork, EIP number, and EIP name. The generated test file is saved in the appropriate directory with a rendered template using Jinja2. """ import os import sys from pathlib import Path import click import jinja2 from config.docs import DocsConfig from ethereum_test_forks import get_development_forks, get_forks from ....input import input_select, input_text template_loader = jinja2.PackageLoader("cli.eest.make") template_env = jinja2.Environment( loader=template_loader, keep_trailing_newline=True, trim_blocks=True, lstrip_blocks=True ) def exit_now() -> None: """Interrupt execution instantly via ctrl+C.""" print("Ctrl+C detected, exiting..") exit(0) @click.command( short_help="Generate a new test file for an EIP.", epilog=f"Further help: {DocsConfig().DOCS_URL__WRITING_TESTS}", ) def test() -> None: """ Generate a new test file for an EIP. This function guides the user through a series of prompts to generate a test file for Ethereum execution specifications. The user is prompted to select the type of test, the fork to use, and to provide the EIP number and name. Based on the inputs, a test file is created in the appropriate directory with a rendered template. Example: uv run eest make test \f
""" # noqa: D301 test_type = input_select( "Choose the type of test to generate", choices=["State", "Blockchain"] ) if test_type is None: exit_now() fork_choices = [str(fork) for fork in get_forks()] fork = input_select("Select the fork", choices=fork_choices) if fork is None: exit_now() base_path = Path("tests") / fork.lower() base_path.mkdir(parents=True, exist_ok=True) existing_dirs = [d.name for d in base_path.iterdir() if d.is_dir() and d.name != "__pycache__"] location_choice = input_select( "Select test directory", choices=[ {"name": "Use current location", "value": "current"}, *existing_dirs, {"name": "** Create new sub-directory **", "value": "new"}, ], ) if location_choice is None: exit_now() if location_choice == "new": eip_number = input_text("Enter the EIP number (int)").strip() eip_name = input_text("Enter the EIP name (spaces ok, only used in docstrings)").strip() directory_name = input_text( "Enter directory name (snake_case, part after eipXXXX_)" ).strip() dir_name = f"eip{eip_number}_{directory_name}" directory_path = base_path / dir_name raw_module = input_text("Enter module name (snake_case)").strip() module_name = raw_module if raw_module.startswith("test_") else f"test_{raw_module}" elif location_choice == "current": eip_number = input_text("Enter the EIP number (int)").strip() eip_name = input_text("Enter the EIP name (spaces ok, only used in docstrings)").strip() raw_module = input_text("Enter module name (snake_case)").strip() module_name = raw_module if raw_module.startswith("test_") else f"test_{raw_module}" directory_path = base_path else: dir_parts = location_choice.split("_") eip_number = dir_parts[0][3:] eip_name = " ".join(dir_parts[1:]).title() raw_module = input_text("Enter module name (snake_case)").strip() module_name = raw_module if raw_module.startswith("test_") else f"test_{raw_module}" directory_path = base_path / location_choice file_name = f"{module_name}.py" module_path = directory_path / file_name if module_path.exists(): click.echo( click.style( f"\n 🛑 The target test module {module_path} already exists!", fg="red", ), err=True, ) sys.exit(1) os.makedirs(directory_path, exist_ok=True) template = template_env.get_template(f"{test_type.lower()}_test.py.j2") rendered_template = template.render( fork=fork, eip_number=eip_number, eip_name=eip_name, module_name=module_name, ) with open(module_path, "w") as file: file.write(rendered_template) click.echo( click.style( f"\n 🎉 Success! Test file created at: {module_path}", fg="green", ) ) fork_option = "" if fork in [dev_fork.name() for dev_fork in get_development_forks()]: fork_option = f" --until={fork}" click.echo( click.style( f"\n 📝 Get started with tests: {DocsConfig().DOCS_URL__WRITING_TESTS}" f"\n ⛽ To fill this test, run: `uv run fill {module_path}{fork_option}`", fg="cyan", ) ) ================================================ FILE: src/cli/eest/make/templates/blockchain_test.py.j2 ================================================ """ abstract: Tests [EIP-{{eip_number}} {{eip_name}}](https://eips.ethereum.org/EIPS/eip-{{eip_number}}) Test cases for [EIP-{{eip_number}} {{eip_name}}](https://eips.ethereum.org/EIPS/eip-{{eip_number}})]. """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Environment, Transaction, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "DUMMY/eip-DUMMY.md" REFERENCE_SPEC_VERSION = "DUMMY_VERSION" @pytest.mark.valid_from("{{fork}}") def {{module_name}}( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, env: Environment ): """ TODO: Enter a one-line test summary here. TODO: (Optional) Enter a more detailed test function description here. """ # TODO: Delete this explanation. # In this demo test, the pre-state contains one EOA and one very simple # smart contract. The EOA, `sender`, executes the smart contract, which # simply sets the value of the contract's storage slot. # The (non-exhaustive) post-state verifies that the storage slot was set # correctly - this is checked when filling the test. # # One gotcha is ensuring that the transaction `gas_limit` is set high # enough to cover the gas cost of the contract execution. storage_slot: int = 1 # TODO: Modify pre-state allocations here. sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(storage_slot, 0x2) + Op.STOP, storage={storage_slot: 0x1}, ) tx = Transaction( to=contract_address, gas_limit=fork.transaction_gas_limit_cap() or env.gas_limit, data=b"", value=0, sender=sender, {% if fork in ["Frontier", "Homestead"] %} protected=False, {% endif %} ) # TODO: Modify post-state allocations here. post = {contract_address: Account(storage={storage_slot: 0x2})} blockchain_test(pre=pre, blocks=[Block(txs=[tx])], post=post) ================================================ FILE: src/cli/eest/make/templates/state_test.py.j2 ================================================ """ abstract: Tests [EIP-{{eip_number}} {{eip_name}}](https://eips.ethereum.org/EIPS/eip-{{eip_number}}) Test cases for [EIP-{{eip_number}} {{eip_name}}](https://eips.ethereum.org/EIPS/eip-{{eip_number}})]. """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "DUMMY/eip-DUMMY.md" REFERENCE_SPEC_VERSION = "DUMMY_VERSION" @pytest.mark.valid_from("{{fork}}") def {{module_name}}(state_test: StateTestFiller, pre: Alloc, fork: Fork, env: Environment): """ TODO: Enter a one-line test summary here. TODO: (Optional) Enter a more detailed test function description here. """ env = Environment() # TODO: Delete this explanation. # In this demo test, the pre-state contains one EOA and one very simple # smart contract. The EOA, `sender`, executes the smart contract, which # simply sets the value of the contract's storage slot. # The (non-exhaustive) post-state verifies that the storage slot was set # correctly - this is checked when filling the test. # # One gotcha is ensuring that the transaction `gas_limit` is set high # enough to cover the gas cost of the contract execution. storage_slot: int = 1 # TODO: Modify pre-state allocations here. sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(storage_slot, 0x2) + Op.STOP, storage={storage_slot: 0x1}, ) tx = Transaction( to=contract_address, gas_limit=fork.transaction_gas_limit_cap() or env.gas_limit, data=b"", value=0, sender=sender, {% if fork in ["Frontier", "Homestead"] %} protected=False, {% endif %} ) # TODO: Modify post-state allocations here. post = {contract_address: Account(storage={storage_slot: 0x2})} state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: src/cli/eest/quotes.py ================================================ """List of quotes related to system design.""" import random import textwrap make_something_great = [ "🎨 Simplicity is the ultimate sophistication. - Leonardo D.", "🖌️ Simplicity is an acquired taste. - Katharine G.", "💡 To create a memorable design you need to start with a thought that’s worth remembering." " - Thomas M.", "🚀 Well begun is half done. - Aristotle", "🖌️ Designers are crazy and yet sane enough to know where to draw the line. - Benjamin W.", "🌟 Creativity is piercing the mundane to find the marvelous. - Bill M.", "🔍 Mistakes are the portals of discovery. - James J.", "🧠 It’s extremely difficult to be simultaneously concerned with the end-user experience of" " whatever it is that you’re building and the architecture of the program that delivers that" "experience. - James H.", "🧠 Good design is a lot like clear thinking made visual. - Edward T.", "🚀 Innovation leads one to see the new in the old and distinguishes the ingenious from the" " ingenuous. - Paul R.", "🔮 The best way to predict the future is to invent it. - Alan K.", "🌟 Perfection is achieved, not when there is nothing more to add, but when there is nothing" " left to take away. - Antoine d.", "📏 You can’t improve what you don’t measure. - Tom D.", ] def wrap_quote(quote: str, width: int = 80) -> str: """Wrap quote text to the given width.""" return textwrap.fill(quote, width=width) def box_quote(quote: str) -> str: """Return quote wrapped in a box with borders.""" # Wrap the quote first wrapped_quote = wrap_quote(quote) # Calculate the width of the box box_width = max(len(line) for line in wrapped_quote.split("\n")) + 2 # +2 for side borders # Create top and bottom border top_bottom_border = "+" + "-" * (box_width) + "+" # Create the sides of the box lines = wrapped_quote.split("\n") boxed_lines = [f"{line.ljust(box_width - 2)}" for line in lines] # Return the full boxed quote quote = "\n".join([top_bottom_border] + boxed_lines + [top_bottom_border]) return f"\n {quote} \n" def get_quote() -> str: """ Return random inspirational quote formatted in a box. """ return box_quote(random.choice(make_something_great)) ================================================ FILE: src/cli/eofwrap.py ================================================ """ Generate a JSON blockchain test from an existing JSON blockchain test by wrapping its pre-state code in EOF wherever possible. Example Usage: 1. Wrap tests ```console eofwrap ``` """ import json import os import sys from pathlib import Path from typing import Any, Dict, cast, no_type_check import click from ethereum_clis import CLINotFoundInPathError from ethereum_clis.clis.evmone import EvmOneTransitionTool from ethereum_test_base_types import Bytes, EthereumTestRootModel from ethereum_test_base_types.conversions import to_hex from ethereum_test_fixtures.blockchain import FixtureBlock, InvalidFixtureBlock from ethereum_test_fixtures.file import Fixtures from ethereum_test_forks.forks.forks import EOFv1 from ethereum_test_specs.blockchain import Block, BlockchainFixture, BlockchainTest from ethereum_test_specs.debugging import print_traces from ethereum_test_specs.eof import EOFParse from ethereum_test_tools import Opcodes as Op from ethereum_test_types import Transaction from ethereum_test_types.block_types import Environment from ethereum_test_types.eof.v1 import Container from ethereum_test_vm import Bytecode from .evm_bytes import OpcodeWithOperands, process_evm_bytes @click.command() @click.argument("input_path", type=click.Path(exists=True, dir_okay=True, file_okay=True)) @click.argument("output_dir", type=click.Path(dir_okay=True, file_okay=False)) @click.option("--traces", is_flag=True, type=bool) def eof_wrap(input_path: str, output_dir: str, traces: bool) -> None: """ Wrap JSON blockchain test file(s) found at `input_path`, output to `output_dir`. """ eof_wrapper = EofWrapper() try: EvmOneTransitionTool() except CLINotFoundInPathError: print(f"Error: {EvmOneTransitionTool.default_binary} must be in the PATH.") sys.exit(1) except Exception as e: raise Exception(f"Unexpected exception: {e}") from e if os.path.isfile(input_path): file = os.path.basename(input_path) out_file = "eof_wrapped_" + file out_path = os.path.join(output_dir, out_file) eof_wrapper.wrap_file(input_path, out_path, traces) else: for subdir, _, files in os.walk(input_path): for file in files: rel_dir = Path(subdir).relative_to(input_path) out_file = "eof_wrapped_" + file out_path = os.path.join(output_dir, rel_dir, out_file) in_path = os.path.join(subdir, file) eof_wrapper.wrap_file(in_path, out_path, traces) os.makedirs(output_dir, exist_ok=True) with open(os.path.join(output_dir, "metrics.json"), "w") as f: json.dump(eof_wrapper.metrics, f, indent=4) class BlockchainFixtures(EthereumTestRootModel): """ Class needed due to some of the `ethereum/tests` fixtures not having the `_info.fixture_format` field in the JSON files. """ root: Dict[str, BlockchainFixture] class EofWrapper: """EOF wrapping of blockchain tests with some simple metrics tracking.""" # JSON files had at least one fixture generated successfully with EOF FILES_GENERATED = "files_generated" # JSON files skipped explicitly or didn't have a fixture with EOF FILES_SKIPPED = "files_skipped" # Test fixtures with at least one EOF code and generated successfully FIXTURES_GENERATED = "fixtures_generated" # Test fixtures with no code able to be EOF-wrapped FIXTURES_CANT_WRAP = "fixtures_cant_wrap" # Test fixtures with EOF code but test doesn't pass and generation fails FIXTURES_CANT_GENERATE = "fixtures_cant_generate" # Invalid blocks in fixtures skipped INVALID_BLOCKS_SKIPPED = "invalid_blocks_skipped" # State accounts with code wrapped into valid EOF ACCOUNTS_WRAPPED = "accounts_wrapped" # State accounts with code wrapped into valid unique EOF UNIQUE_ACCOUNTS_WRAPPED = "unique_accounts_wrapped" # State accounts wrapped but the code is not valid EOF ACCOUNTS_INVALID_EOF = "accounts_invalid_eof" # State accounts wrapped into valid EOF but in a fixture of a failing test ACCOUNTS_CANT_GENERATE = "accounts_cant_generate" # Breakdown of EOF validation errors summing up to `accounts_invalid_eof` VALIDATION_ERRORS = "validation_errors" # Breakdown of runtime test failures summing up to `fixtures_cant_generate` GENERATION_ERRORS = "generation_errors" def __init__(self) -> None: """ Initialize EofWrapper with metrics tracking and unique EOF set. """ self.metrics = { self.FILES_GENERATED: 0, self.FILES_SKIPPED: 0, self.FIXTURES_GENERATED: 0, self.FIXTURES_CANT_WRAP: 0, self.FIXTURES_CANT_GENERATE: 0, self.INVALID_BLOCKS_SKIPPED: 0, self.ACCOUNTS_WRAPPED: 0, self.UNIQUE_ACCOUNTS_WRAPPED: 0, self.ACCOUNTS_INVALID_EOF: 0, self.ACCOUNTS_CANT_GENERATE: 0, self.VALIDATION_ERRORS: {}, self.GENERATION_ERRORS: {}, } self.unique_eof: set[str] = set() file_skip_list = [ "Pyspecs", # EXTCODE* opcodes return different results for EOF targets and that is # tested elsewhere "stExtCodeHash", # bigint syntax "ValueOverflowParis", "bc4895-withdrawals", # EOF opcodes at diff places - tests obsolete "opcD0DiffPlaces", "opcD1DiffPlaces", "opcD2DiffPlaces", "opcD3DiffPlaces", "opcE0DiffPlaces", "opcE1DiffPlaces", "opcE2DiffPlaces", "opcE3DiffPlaces", "opcE4DiffPlaces", "opcE5DiffPlaces", "opcE6DiffPlaces", "opcE7DiffPlaces", "opcE8DiffPlaces", "opcECDiffPlaces", "opcEEDiffPlaces", "opcF7DiffPlaces", "opcF8DiffPlaces", "opcF9DiffPlaces", "opcFBDiffPlaces", # stack overflow always (limit of `max_stack_height` is 1023!) "push0_fill_stack", "push0_stack_overflow", "blobbasefee_stack_overflow", ] def wrap_file(self, in_path: str, out_path: str, traces: bool) -> None: """ Wrap code from blockchain test JSON file from `in_path` into EOF containers. Tracks in metrics. """ for skip in self.file_skip_list: if skip in in_path: self.metrics[self.FILES_SKIPPED] = cast(int, self.metrics[self.FILES_SKIPPED]) + 1 return fixtures: BlockchainFixtures = BlockchainFixtures.model_validate_json( Path(in_path).read_text() ) out_fixtures = Fixtures({}) fixture: BlockchainFixture for fixture_id, fixture in fixtures.root.items(): fixture_eof_codes = [] wrapped_at_least_one_account = False if fixture.pre: for address, account in fixture.pre.root.items(): if account is None or account.code is None or len(account.code) == 0: continue try: wrapped = wrap_code(account.code) except ValueError as e: self.metrics[self.ACCOUNTS_INVALID_EOF] = ( cast(int, self.metrics[self.ACCOUNTS_INVALID_EOF]) + 1 ) _inc_counter( cast( dict[Any, Any], self.metrics[self.VALIDATION_ERRORS], ), self._short_exception_msg(e), ) continue if self._validate_eof(wrapped): account.code = Bytes(wrapped) wrapped_at_least_one_account = True self.metrics[self.ACCOUNTS_WRAPPED] = ( cast(int, self.metrics[self.ACCOUNTS_WRAPPED]) + 1 ) fixture_eof_codes.append(to_hex(account.code)) # wrap the same account in post state the same way if fixture.post_state and fixture.post_state.root[address]: fixture.post_state.root[address].code = Bytes(wrapped) # type: ignore else: self.metrics[self.ACCOUNTS_INVALID_EOF] = ( cast(int, self.metrics[self.ACCOUNTS_INVALID_EOF]) + 1 ) if not wrapped_at_least_one_account: self.metrics[self.FIXTURES_CANT_WRAP] = ( cast(int, self.metrics[self.FIXTURES_CANT_WRAP]) + 1 ) continue try: out_fixture = self._wrap_fixture(fixture, traces) out_fixtures[fixture_id] = out_fixture self.metrics[self.FIXTURES_GENERATED] = ( cast(int, self.metrics[self.FIXTURES_GENERATED]) + 1 ) self.unique_eof.update(fixture_eof_codes) self.metrics[self.UNIQUE_ACCOUNTS_WRAPPED] = len(self.unique_eof) except Exception as e: _inc_counter( cast( dict[Any, Any], self.metrics[self.GENERATION_ERRORS], ), self._short_exception_msg(e), ) self.metrics[self.FIXTURES_CANT_GENERATE] = ( cast(int, self.metrics[self.FIXTURES_CANT_GENERATE]) + 1 ) self.metrics[self.ACCOUNTS_CANT_GENERATE] = cast( int, self.metrics[self.ACCOUNTS_CANT_GENERATE] ) + len(fixture_eof_codes) print(f"Exception {e} occurred during generation of {in_path}: {fixture_id}") if len(out_fixtures) == 0: self.metrics[self.FILES_SKIPPED] = cast(int, self.metrics[self.FILES_SKIPPED]) + 1 return os.makedirs(os.path.dirname(out_path), exist_ok=True) out_fixtures.collect_into_file(Path(out_path)) self.metrics[self.FILES_GENERATED] = cast(int, self.metrics[self.FILES_GENERATED]) + 1 def _short_exception_msg(self, e: Exception) -> str: """Shorten exception message for display.""" threshold = 30 short = str(e) if len(short) > threshold: short = short[:threshold] + "..." return short def _wrap_fixture(self, fixture: BlockchainFixture, traces: bool) -> BlockchainFixture: env = Environment( difficulty=fixture.genesis.difficulty, gas_limit=fixture.genesis.gas_limit, base_fee_per_gas=fixture.genesis.base_fee_per_gas, blob_gas_used=fixture.genesis.blob_gas_used, excess_blob_gas=fixture.genesis.excess_blob_gas, parent_beacon_block_root=fixture.genesis.parent_beacon_block_root, ) pre = fixture.pre t8n = EvmOneTransitionTool(trace=traces) test = BlockchainTest( genesis_environment=env, pre=pre.root, post=fixture.post_state.root if fixture.post_state else {}, blocks=[], tag="wrapped test", ) for fixture_block in fixture.blocks: if isinstance(fixture_block, FixtureBlock): header = fixture_block.header block = Block( ommers_hash=header.ommers_hash, fee_recipient=header.fee_recipient, difficulty=header.difficulty, number=header.number, gas_limit=header.gas_limit, timestamp=header.timestamp, extra_data=header.extra_data, prev_randao=header.prev_randao, nonce=header.nonce, base_fee_per_gas=header.base_fee_per_gas, withdrawals_root=header.withdrawals_root, parent_beacon_block_root=header.parent_beacon_block_root, ) assert not fixture_block.ommers assert not fixture_block.withdrawals for fixture_tx in fixture_block.txs: fixture_tx_dump = fixture_tx.model_dump() fixture_tx_dump.pop("ty") fixture_tx_dump.pop("data") tx = Transaction( type=fixture_tx.ty, input=fixture_tx.data, **fixture_tx_dump, ) block.txs.append(tx) test.blocks.append(block) elif isinstance(fixture_block, InvalidFixtureBlock): # Skip - invalid blocks are not supported. Reason: # FixtureTransaction doesn't support expected exception. But we # can continue and test the remaining blocks. self.metrics[self.INVALID_BLOCKS_SKIPPED] = ( cast(int, self.metrics[self.INVALID_BLOCKS_SKIPPED]) + 1 ) else: raise TypeError("not a FixtureBlock") result = test.generate( t8n=t8n, fork=EOFv1, fixture_format=BlockchainFixture, ) assert isinstance(result, BlockchainFixture) result.info["fixture-format"] = "blockchain_test" if traces: print_traces(t8n.get_traces()) return result def _validate_eof(self, container: Container, metrics: bool = True) -> bool: eof_parse = EOFParse() result = eof_parse.run(input_value=to_hex(container)) actual_message = result.stdout.strip() if "OK" not in actual_message: if metrics: _inc_counter( cast( dict[Any, Any], self.metrics[self.VALIDATION_ERRORS], ), actual_message, ) return False return True # `no_type_check` required because OpcodeWithOperand.opcode can be `None` when # formatting as a string, but here it can never be `None`. @no_type_check def wrap_code(account_code: Bytes) -> Container: """ Wrap `account_code` into a simplest EOF container, applying some simple heuristics in order to obtain a valid code section termination. """ assert len(account_code) > 0 opcodes = process_evm_bytes(account_code) if not opcodes[-1].terminating: opcodes.append(OpcodeWithOperands(opcode=Op.STOP)) while len(opcodes) > 1 and opcodes[-2].terminating and opcodes[-1].terminating: opcodes.pop() bytecode = Bytecode() for opcode in opcodes: bytecode += opcode.bytecode return Container.Code(bytecode) def _inc_counter(d: dict, key: Any) -> None: if key in d: d[key] += 1 else: d[key] = 1 ================================================ FILE: src/cli/evm_bytes.py ================================================ """Define an entry point wrapper for pytest.""" from dataclasses import dataclass, field from typing import Any, List import click from ethereum_test_base_types import ZeroPaddedHexNumber from ethereum_test_vm import Bytecode, Macro from ethereum_test_vm import Opcodes as Op OPCODES_WITH_EMPTY_LINES_AFTER = { Op.STOP, Op.REVERT, Op.INVALID, Op.JUMP, Op.JUMPI, } OPCODES_WITH_EMPTY_LINES_BEFORE = { Op.JUMPDEST, } @dataclass(kw_only=True) class OpcodeWithOperands: """Simple opcode with its operands.""" opcode: Op | None operands: List[int] = field(default_factory=list) def format(self, assembly: bool) -> str: """Format the opcode with its operands.""" if self.opcode is None: return "" if assembly: return self.format_assembly() if self.operands: operands = ", ".join(hex(operand) for operand in self.operands) return f"Op.{self.opcode._name_}[{operands}]" return f"Op.{self.opcode._name_}" def format_assembly(self) -> str: """Format the opcode with its operands as assembly.""" if self.opcode is None: return "" opcode_name = self.opcode._name_.lower() if self.opcode.data_portion_length == 0: return f"{opcode_name}" elif self.opcode == Op.RJUMPV: operands = ", ".join(str(ZeroPaddedHexNumber(operand)) for operand in self.operands) return f"{opcode_name} {operands}" else: operands = ", ".join(str(ZeroPaddedHexNumber(operand)) for operand in self.operands) return f"{opcode_name} {operands}" @property def terminating(self) -> bool: """Terminating opcode boolean.""" return self.opcode.terminating if self.opcode else False @property def bytecode(self) -> Bytecode: """Opcode as bytecode with its operands if any.""" # opcode.opcode[*opcode.operands] crashes `black` formatter and doesn't # work. if self.opcode: return self.opcode.__getitem__(*self.operands) if self.operands else self.opcode else: return Bytecode() def process_evm_bytes(evm_bytes: bytes) -> List[OpcodeWithOperands]: # noqa: D103 evm_bytes_array = bytearray(evm_bytes) opcodes: List[OpcodeWithOperands] = [] while evm_bytes_array: opcode_byte = evm_bytes_array.pop(0) opcode: Op for op in Op: if not isinstance(op, Macro) and op.int() == opcode_byte: opcode = op break else: raise ValueError(f"Unknown opcode: {opcode_byte}") if opcode.data_portion_length > 0: signed = opcode in [Op.RJUMP, Op.RJUMPI] opcodes.append( OpcodeWithOperands( opcode=opcode, operands=[ int.from_bytes( evm_bytes_array[: opcode.data_portion_length], "big", signed=signed ) ], ) ) evm_bytes_array = evm_bytes_array[opcode.data_portion_length :] elif opcode == Op.RJUMPV: if len(evm_bytes_array) == 0: opcodes.append(OpcodeWithOperands(opcode=opcode)) else: max_index = evm_bytes_array.pop(0) operands: List[int] = [] for _ in range(max_index + 1): operands.append(int.from_bytes(evm_bytes_array[:2], "big", signed=True)) evm_bytes_array = evm_bytes_array[2:] opcodes.append(OpcodeWithOperands(opcode=opcode, operands=operands)) else: opcodes.append(OpcodeWithOperands(opcode=opcode)) return opcodes def format_opcodes(opcodes: List[OpcodeWithOperands], assembly: bool = False) -> str: # noqa: D103 if assembly: opcodes_with_empty_lines: List[OpcodeWithOperands] = [] for i, op_with_operands in enumerate(opcodes): if ( op_with_operands.opcode in OPCODES_WITH_EMPTY_LINES_BEFORE and len(opcodes_with_empty_lines) > 0 and opcodes_with_empty_lines[-1].opcode is not None ): opcodes_with_empty_lines.append(OpcodeWithOperands(opcode=None)) opcodes_with_empty_lines.append(op_with_operands) if op_with_operands.opcode in OPCODES_WITH_EMPTY_LINES_AFTER and i < len(opcodes) - 1: opcodes_with_empty_lines.append(OpcodeWithOperands(opcode=None)) return "\n".join(op.format(assembly) for op in opcodes_with_empty_lines) return " + ".join(op.format(assembly) for op in opcodes) def process_evm_bytes_string(evm_bytes_hex_string: str, assembly: bool = False) -> str: """Process the given EVM bytes hex string.""" if evm_bytes_hex_string.startswith("0x"): evm_bytes_hex_string = evm_bytes_hex_string[2:] evm_bytes = bytes.fromhex(evm_bytes_hex_string) return format_opcodes(process_evm_bytes(evm_bytes), assembly=assembly) assembly_option = click.option( "-a", "--assembly", default=False, is_flag=True, help="Output the code as assembly instead of Python Opcodes.", ) @click.group( "evm_bytes", context_settings={ "help_option_names": ["-h", "--help"], }, ) def evm_bytes() -> None: """ Convert EVM bytecode to EEST's Python Opcodes or an assembly string. The input can be either a hex string or a binary file. """ pass @evm_bytes.command(short_help="Convert a hex string to Python Opcodes or assembly.") @assembly_option @click.argument("hex_string") def hex_string(hex_string: str, assembly: bool) -> None: """ Convert the HEX_STRING representing EVM bytes to EEST Python Opcodes. HEX_STRING is a string containing EVM bytecode. Returns: (str): The processed EVM opcodes in Python or assembly format. Example 1: Convert a hex string to EEST Python `Opcodes` uv run evm_bytes hex-string 604260005260206000F3 Output 1: \b Op.PUSH1[0x42] + Op.PUSH1[0x0] + Op.MSTORE + Op.PUSH1[0x20] + Op.PUSH1[0x0] + Op.RETURN Example 2: Convert a hex string to assembly uv run evm_bytes hex-string --assembly 604260005260206000F3 Output 2: \b push1 0x42 push1 0x00 mstore push1 0x20 push1 0x00 return """ # noqa: D301 processed_output = process_evm_bytes_string(hex_string, assembly=assembly) click.echo(processed_output) @evm_bytes.command(short_help="Convert a binary file to Python Opcodes or assembly.") @assembly_option @click.argument("binary_file", type=click.File("rb")) def binary_file(binary_file: Any, assembly: bool) -> None: """ Convert the BINARY_FILE containing EVM bytes to Python Opcodes or assembly. BINARY_FILE is a binary file containing EVM bytes, use `-` to read from stdin. Returns: (str): The processed EVM opcodes in Python or assembly format. Example: Convert the Withdrawal Request contract to assembly \b uv run evm_bytes binary-file ./src/ethereum_test_forks/forks/ contracts/withdrawal_request.bin --assembly Output: \b caller push20 0xfffffffffffffffffffffffffffffffffffffffe eq push1 0x90 jumpi ... """ # noqa: D301 processed_output = format_opcodes(process_evm_bytes(binary_file.read()), assembly=assembly) click.echo(processed_output) ================================================ FILE: src/cli/extract_config.py ================================================ #!/usr/bin/env python """ CLI tool to extract client configuration files (chainspec/genesis.json) from Ethereum clients. This tool spawns an Ethereum client using Hive and extracts the generated configuration files such as /chainspec/test.json, /configs/test.cfg, or /genesis.json from the Docker container. """ import io import json import subprocess import sys from pathlib import Path from typing import Dict, Optional, Tuple, cast import click from hive.simulation import Simulation from hive.testing import HiveTestResult from ethereum_test_base_types import Alloc, to_json from ethereum_test_fixtures import BlockchainFixtureCommon from ethereum_test_fixtures.blockchain import FixtureHeader from ethereum_test_fixtures.file import Fixtures from ethereum_test_fixtures.pre_alloc_groups import PreAllocGroup from ethereum_test_forks import Fork from pytest_plugins.consume.simulators.helpers.ruleset import ruleset def get_docker_containers() -> set[str]: """Get the current list of Docker container IDs.""" result = subprocess.run(["docker", "ps", "-q"], capture_output=True, text=True, check=True) return set(result.stdout.strip().split("\n")) if result.stdout.strip() else set() def extract_client_files( container_id: str, output_dir: Path, fixture_name: str, client_name: str, ) -> Dict[str, Path]: """ Extract configuration files from a running client container. Returns a dictionary mapping file type to extracted file path. """ extracted_files = {} # List of files to try to extract files_to_extract = [ ("/chainspec/test.json", "chainspec.json"), ("/configs/test.cfg", "config.cfg"), ("/genesis.json", "genesis.json"), ] for container_path, output_filename in files_to_extract: try: # Use docker exec to read the file from the container # First check if file exists check_cmd = ["docker", "exec", container_id, "test", "-f", container_path] check_result = subprocess.run(check_cmd, capture_output=True) if check_result.returncode == 0: # File exists, now read it read_cmd = ["docker", "exec", container_id, "cat", container_path] result = subprocess.run(read_cmd, capture_output=True, text=True) if result.returncode == 0 and result.stdout: output_folder = output_dir / fixture_name / client_name if not output_folder.exists(): output_folder.mkdir(parents=True) output_path = output_folder / output_filename output = result.stdout if output_filename == "genesis.json": # Indent the json output = json.dumps(json.loads(output), indent=4) output_path.write_text(output) extracted_files[container_path] = output_path click.echo(f"✓ Extracted {container_path} to {output_path}") else: click.echo(f"✗ Failed to read {container_path}: {result.stderr}", err=True) else: click.echo(f"- File {container_path} does not exist in container") except Exception as e: click.echo(f"✗ Error extracting {container_path}: {e}", err=True) return extracted_files def create_genesis_from_fixture(fixture_path: Path) -> Tuple[FixtureHeader, Alloc, int]: """Create a client genesis state from a fixture file.""" genesis: FixtureHeader alloc: Alloc chain_id: int = 1 with open(fixture_path, "r") as f: fixture_json = json.load(f) if "_info" in fixture_json: # Load the fixture fixtures = Fixtures.model_validate_json(fixture_path.read_text()) # Get the first fixture (assuming single fixture file) fixture_id = list(fixtures.keys())[0] base_fixture = fixtures[fixture_id] if not isinstance(base_fixture, BlockchainFixtureCommon): raise ValueError(f"Fixture {fixture_id} is not a blockchain fixture") genesis = base_fixture.genesis alloc = base_fixture.pre chain_id = int(base_fixture.config.chain_id) else: pre_alloc_group = PreAllocGroup.model_validate(fixture_json) genesis = pre_alloc_group.genesis alloc = pre_alloc_group.pre return genesis, alloc, chain_id def get_client_environment_for_fixture(fork: Fork, chain_id: int) -> dict: """ Get the environment variables for starting a client with the given fixture. """ if fork not in ruleset: raise ValueError(f"Fork '{fork}' not found in hive ruleset") return { "HIVE_CHAIN_ID": str(chain_id), "HIVE_FORK_DAO_VOTE": "1", "HIVE_NODETYPE": "full", "HIVE_CHECK_LIVE_PORT": "8545", # Using RPC port for liveness check **{k: f"{v:d}" for k, v in ruleset[fork].items()}, } @click.command() @click.option( "--client", "-c", required=False, default=None, help="Client name (e.g., go-ethereum, besu, nethermind)", ) @click.option( "--fixture", "-f", type=click.Path(exists=True, path_type=Path), help="Path to a fixture JSON file to use for genesis", default=None, ) @click.option( "--output", "-o", type=click.Path(path_type=Path), default="./extracted_configs", help="Output directory for extracted files", ) @click.option( "--hive-url", default="http://127.0.0.1:3000", help="Hive server URL", ) @click.option( "--list-files", "-l", is_flag=True, help="List files in the container root before extraction", ) def extract_config( client: str, fixture: Optional[Path], output: Path, hive_url: str, list_files: bool, ) -> None: """ Extract client configuration files from Ethereum clients. This tool spawns an Ethereum client using Hive and extracts the generated configuration files such as /chainspec/test.json, /configs/test.cfg, or /genesis.json from the Docker container. """ if not fixture: raise click.UsageError("No fixture provided, use --fixture to specify a fixture") if fixture.is_dir(): fixture_files = list(fixture.glob("*.json")) elif fixture.is_file(): fixture_files = [fixture] else: raise click.UsageError(f"Invalid fixture path: {fixture}") # Create output directory output.mkdir(parents=True, exist_ok=True) # Initialize Hive test simulation = Simulation(url=hive_url) suite = simulation.start_suite( name="extract-config", description="Extract client configuration files", ) hive_test = suite.start_test( name="extract-config", description="Extract client configuration files", ) client_types = [] for client_type in simulation.client_types(): if client and client not in client_type.name: continue client_types.append(client_type) if not client_types: raise click.UsageError(f"No client types found for {client}") for fixture_path in fixture_files: # Prepare client files and environment click.echo(f"Using fixture: {fixture_path}") # Load fixture and create genesis genesis, alloc, chain_id = create_genesis_from_fixture(fixture_path) fork = genesis.fork assert fork is not None client_environment = get_client_environment_for_fixture(fork, chain_id) genesis_json = to_json(genesis) alloc_json = to_json(alloc) genesis_json["alloc"] = {k.replace("0x", ""): v for k, v in alloc_json.items()} genesis_json_str = json.dumps(genesis_json) genesis_bytes = genesis_json_str.encode("utf-8") for client_type in client_types: client_files = {} client_files["/genesis.json"] = io.BufferedReader( cast(io.RawIOBase, io.BytesIO(genesis_bytes)) ) # Get containers before starting client containers_before = get_docker_containers() # Start the client click.echo(f"Starting client: {client_type.name}") client_instance = hive_test.start_client( client_type=client_type, environment=client_environment, files=client_files, ) if not client_instance: click.echo("Failed to start client", err=True) sys.exit(1) try: # Get containers after starting client containers_after = get_docker_containers() new_containers = containers_after - containers_before if len(new_containers) != 1: click.echo( f"Expected exactly 1 new container, found {len(new_containers)}", err=True ) sys.exit(1) container_id = new_containers.pop() click.echo(f"Client started successfully (Container ID: {container_id})") # Optionally list files in container if list_files: click.echo("\nListing files in container root:") list_cmd = ["docker", "exec", container_id, "ls", "-la", "/"] result = subprocess.run(list_cmd, capture_output=True, text=True) if result.returncode == 0: click.echo(result.stdout) else: click.echo(f"Failed to list files: {result.stderr}", err=True) # Extract files click.echo("\nExtracting configuration files...") extract_client_files(container_id, output, fixture_path.stem, client_type.name) except Exception as e: click.echo(f"Error: {e}", err=True) import traceback traceback.print_exc() sys.exit(1) finally: # Clean up click.echo("\nStopping client...") client_instance.stop() click.echo() hive_test.end(result=HiveTestResult(test_pass=True, details="")) suite.end() if __name__ == "__main__": extract_config() ================================================ FILE: src/cli/fillerconvert/fillerconvert.py ================================================ """Simple CLI tool that reads filler files in the `ethereum/tests` format.""" import argparse from glob import glob from pathlib import Path from .verify_filled import verify_refilled def main() -> None: """Run the main function.""" parser = argparse.ArgumentParser(description="Filler parser.") parser.add_argument( "mode", type=str, help="The type of filler we are trying to parse: blockchain/state." ) parser.add_argument("folder_path", type=Path, help="The path to the JSON/YML filler directory") parser.add_argument("legacy_path", type=Path, help="The path to the legacy tests directory") args = parser.parse_args() args.folder_path = Path(str(args.folder_path).split("=")[-1]) args.mode = str(args.mode).split("=")[-1] print("Scanning: " + str(args.folder_path)) files = glob(str(args.folder_path / "**" / "*.json"), recursive=True) + glob( str(args.folder_path / "**" / "*.yml"), recursive=True ) if args.mode == "blockchain": raise NotImplementedError("Blockchain filler not implemented yet.") if args.mode == "verify": verified_vectors = 0 for file in files: print("Verify: " + file) refilled_file = file relative_file = file.removeprefix(str(args.folder_path))[1:] original_file = args.legacy_path / "GeneralStateTests" / relative_file verified_vectors += verify_refilled(Path(refilled_file), original_file) print(f"Total vectors verified: {verified_vectors}") # Solidity skipped tests # or file.endswith("stExample/solidityExampleFiller.yml") # or file.endswith("vmPerformance/performanceTesterFiller.yml") # or file.endswith("vmPerformance/loopExpFiller.yml") # or file.endswith("vmPerformance/loopMulFiller.yml") # or # file.endswith("stRevertTest/RevertRemoteSubCallStorageOOGFiller.yml") # or file.endswith("stSolidityTest/SelfDestructFiller.yml") ================================================ FILE: src/cli/fillerconvert/verify_filled.py ================================================ """Verify refilled test vs original generated test.""" import re from pathlib import Path from pydantic import BaseModel, RootModel # Define only relevant data we need to read from the files class Indexes(BaseModel): """Post Section Indexes.""" data: int gas: int value: int class PostRecord(BaseModel): """Post results record.""" hash: str indexes: Indexes class StateTest(BaseModel): """StateTest in filled file.""" post: dict[str, list[PostRecord]] class FilledStateTest(RootModel[dict[str, StateTest]]): """State Test Wrapper.""" def verify_refilled(refilled: Path, original: Path) -> int: """ Verify post hash of the refilled test against original: Regex the original d,g,v from the refilled test name. Find the post record for this d,g,v and the fork of refilled test. Compare the post hash. """ verified_vectors = 0 json_str = refilled.read_text(encoding="utf-8") refilled_test_wrapper = FilledStateTest.model_validate_json(json_str) json_str = original.read_text(encoding="utf-8") original_test_wrapper = FilledStateTest.model_validate_json(json_str) # Each original test has only 1 test with many posts for each fork and many # txs original_test_name, test_original = list(original_test_wrapper.root.items())[0] for refilled_test_name, refilled_test in refilled_test_wrapper.root.items(): # Each refilled test has only 1 post for 1 fork and 1 transaction refilled_fork, refilled_result = list(refilled_test.post.items())[0] pattern = r"v=(\d+)-g=(\d+)-d=(\d+)" match = re.search(pattern, refilled_test_name) if match: v, g, d = match.groups() v, g, d = int(v), int(g), int(d) found = False original_result = test_original.post[refilled_fork] for res in original_result: if res.indexes.data == d and res.indexes.gas == g and res.indexes.value == v: print(f"check: {refilled_fork}, d:{d}, g:{g}, v:{v}") if res.hash != refilled_result[0].hash: raise Exception( "\nRefilled test post hash mismatch: \n" f"test_name: {refilled_test_name}\n" f"original_name: {original}\n" f"refilled_hash: {refilled_result[0].hash}\n" f"original_hash: {res.hash} f: {refilled_fork}, d: {d}, g: {g}, v: {v}" ) found = True verified_vectors += 1 break if not found: raise Exception( "\nRefilled test not found in original: \n" f"test_name: {refilled_test_name}\n" f"original_name: {original}\n" ) else: raise Exception("Could not regex match d.g.v indexes from refilled test name!") return verified_vectors ================================================ FILE: src/cli/fuzzer_bridge/README.md ================================================ # Fuzzer Bridge for Execution Spec Tests This module provides a bridge between blocktest fuzzers (like `blocktest-fuzzer`) and the Ethereum execution-spec-tests framework, enabling automatic generation of valid blockchain test fixtures from fuzzer output. ## Overview The fuzzer bridge solves a critical problem: fuzzers can generate transactions and pre-state, but creating valid blockchain tests requires complex calculations (state roots, RLP encoding, block headers, etc.). This bridge leverages the execution-spec-tests framework to handle all these complexities. ## Architecture ```mermaid graph LR A[Blocktest
Fuzzer] -->|JSON
v2 format| B[Fuzzer
Bridge] B -->|Blockchain Test
Fixtures| C[Ethereum
Clients] ``` ## Fuzzer Output Format (v2) The fuzzer must output JSON in the following format: ```json { "version": "2.0", "fork": "Prague", "chainId": 1, "accounts": { "0x7e5f4552091a69125d5dfcb7b8c2659029395bdf": { "balance": "0x1000000000000000000", "nonce": "0x0", "code": "", "storage": {}, "privateKey": "0x0000000000000000000000000000000000000000000000000000000000000001" }, "0x2b5ad5c4795c026514f8317c7a215e218dccd6cf": { "balance": "0x100000000000000000", "nonce": "0x0", "code": "0x600160005260206000f3", "storage": {} } }, "transactions": [ { "from": "0x7e5f4552091a69125d5dfcb7b8c2659029395bdf", "to": "0x2b5ad5c4795c026514f8317c7a215e218dccd6cf", "value": "0x100", "gas": "0x5208", "gasPrice": "0x7", "nonce": "0x0", "data": "0x" } ], "env": { "currentCoinbase": "0xc014ba5e00000000000000000000000000000000", "currentDifficulty": "0x0", "currentGasLimit": "0x1000000", "currentNumber": "0x1", "currentTimestamp": "0x1000", "currentBaseFee": "0x7", "currentRandom": "0x0000000000000000000000000000000000000000000000000000000000000000" } } ``` ### Key Requirements 1. **Private Keys**: Any account that sends transactions MUST include a `privateKey` field. 2. **Address-Key Match**: Private keys must generate the corresponding addresses. 3. **Environment**: Describes the environment for block 1 (genesis is automatically derived). 4. **Version**: Use "2.0" for this format. ## Architecture: DTO Pattern The fuzzer bridge uses a **Data Transfer Object (DTO) pattern** for clean separation between external data format and internal domain logic. ### Design Flow ```mermaid graph TD A["Fuzzer JSON Output
(JSON-RPC Format v2.0)"] B["DTOs (Pydantic Models)
models.py"] B1["FuzzerAccountInput
Raw account JSON"] B2["FuzzerTransactionInput
Raw transaction JSON (uses 'gas')"] B3["FuzzerAuthorizationInput
Raw auth tuple (EIP-7702)"] B4["FuzzerOutput
Complete fuzzer output"] C["EEST Domain Models
converter.py"] C1["Account
With validation & defaults"] C2["Transaction
With gas_limit, EOA sender"] C3["AuthorizationTuple
EIP-7702 support"] C4["EOA
Created from private keys"] D["BlockchainTest"] E["Blockchain Fixture"] A -->|parse| B B -.-> B1 B -.-> B2 B -.-> B3 B -.-> B4 B -->|convert| C C -.-> C1 C -.-> C2 C -.-> C3 C -.-> C4 C -->|generate| D D --> E style A fill:#e1f5ff style B fill:#fff4e1 style C fill:#e8f5e9 style D fill:#f3e5f5 style E fill:#fce4ec ``` ### Why DTOs? 1. **Separation of Concerns** - External JSON-RPC format ≠ EEST internal representation - Fuzzer format can change without affecting EEST domain models 2. **No Side Effects During Parsing** - DTOs don't trigger `model_post_init` validation logic - Parsing is purely data extraction, no business logic 3. **Explicit Field Mapping** - Clear visibility: `gas` → `gas_limit`, `from` → `sender` (EOA) - Type-safe conversions at boundary 4. **Prevents TestAddress Pollution** - EOA created in converter BEFORE Transaction instantiation - Transaction.model_post_init never injects TestAddress ### Key Field Mappings | Fuzzer Field (JSON-RPC) | DTO Field | EEST Domain Field | Notes | |-------------------------|----------------------|----------------------|--------------------------------| | `from` | `from_` | `sender` (EOA) | Creates EOA from private key | | `gas` | `gas` | `gas_limit` | JSON-RPC vs internal naming | | `data` | `data` | `data` | Same field, explicit mapping | | `gasPrice` | `gas_price` | `gas_price` | CamelCase → snake_case | | `authorizationList` | `authorization_list` | `authorization_list` | EIP-7702 support | | `privateKey` | `private_key` | (used to create EOA) | Not stored in Account model | ### Module Responsibilities #### `models.py` - Data Transfer Objects - Pure Pydantic models for fuzzer JSON format - No business logic, only data validation - Accepts JSON-RPC naming conventions (camelCase) - ~119 lines #### `converter.py` - Transformation Logic - Pure functions: DTO → EEST domain models - All field mapping logic centralized here - Creates EOA objects from private keys - Builds BlockchainTest from validated data - ~305 lines #### `blocktest_builder.py` - CLI Integration - Orchestrates conversion workflow - Handles file I/O and CLI options - Calls converter functions - ~90 lines ### Benefits ✅ **Maintainability**: Changes to Account/Transaction propagate automatically ✅ **Testability**: Each layer tested independently ✅ **Type Safety**: Full type checking at DTO and domain layers ✅ **Clarity**: Field mappings are explicit and documented ✅ **No Circular Dependencies**: Clean module boundaries ### Alternative Design: Why Not Inheritance? **Could have done**: ```python class FuzzerAccount(Account): private_key: Hash | None = None ``` **Why DTOs are better**: - Inheritance couples external format to domain model - model_post_init triggers during parsing (side effects) - Field name mismatches require complex aliasing - Harder to test layers independently The DTO pattern provides cleaner separation and explicit control. ## Installation See the [EEST installation guide](https://eest.ethereum.org/main/getting_started/installation/) for setting up the execution-spec-tests framework. Once EEST is installed, the fuzzer bridge will be available as a command-line tool. ## Usage ### 1. Command Line Interface ```bash # Convert fuzzer output to blockchain test uv run fuzzer_bridge --input fuzzer_output.json --output blocktest.json # With custom fork uv run fuzzer_bridge --input fuzzer_output.json --output blocktest.json --fork Shanghai # Pretty print output uv run fuzzer_bridge --input fuzzer_output.json --output blocktest.json --pretty ``` ### 2. Python API ```python from fuzzer_bridge import FuzzerBridge # Load fuzzer output with open("fuzzer_output.json") as f: fuzzer_data = json.load(f) # Create bridge and convert bridge = FuzzerBridge() blocktest = bridge.convert(fuzzer_data) # Save to file bridge.save(blocktest, "output.json") # Or verify with geth directly result = bridge.verify_with_geth(blocktest, geth_path="../go-ethereum/build/bin/evm") print(f"Test passed: {result['pass']}") ``` ### 3. Integration with pytest ```python import pytest from fuzzer_bridge import create_test_from_fuzzer def test_fuzzer_generated(blockchain_test): """Test generated from fuzzer output.""" test = create_test_from_fuzzer("fuzzer_output.json") blockchain_test(**test) ``` ## Key Insights ### Genesis Block Handling - The fuzzer describes the environment for block 1 (the block being tested) - Genesis (block 0) environment is automatically derived: - `number` = 0 - `timestamp` = block1_timestamp - 12 - Other values inherited or set to defaults ### System Contracts - The framework automatically adds system contracts (deposit, withdrawal, etc.) - These are included in the state root calculation - The fuzzer doesn't need to specify them ### Private Key Requirements - Every account that sends transactions needs a private key - The private key must generate the exact address specified - Without matching private keys, transactions cannot be signed ## Troubleshooting ### "Genesis block hash doesn't match" **Cause**: Usually means the environment is set incorrectly (e.g., block number = 1 instead of 0 for genesis) **Solution**: Ensure the fuzzer output follows the v2 format exactly ### "No private key for sender" **Cause**: Account sends transaction but no privateKey field provided **Solution**: Add privateKey to the account in the accounts section ### "Private key doesn't match address" **Cause**: The provided private key doesn't generate the specified address **Solution**: Use correct private key or generate address from private key ## Testing with Ethereum Clients ### Go-Ethereum (geth) ```bash ../go-ethereum/build/bin/evm blocktest generated_test.json ``` ### Besu ```bash ../besu/ethereum/evmtool/build/install/evmtool/bin/evmtool block-test generated_test.json ``` ### Nethermind ```bash ../nethermind/src/Nethermind/artifacts/bin/Nethermind.Test.Runner/release_linux-x64/nethtest -b -i generated_test.json ``` ## Contributing When modifying the fuzzer bridge: 1. Add tests for new features. 2. Update this README. 3. Ensure compatibility with latest execution-spec-tests. ================================================ FILE: src/cli/fuzzer_bridge/__init__.py ================================================ """Fuzzer bridge for converting blocktest-fuzzer output to blocktests.""" from .blocktest_builder import BlocktestBuilder, build_blocktest_from_fuzzer __all__ = ["BlocktestBuilder", "build_blocktest_from_fuzzer"] ================================================ FILE: src/cli/fuzzer_bridge/blocktest_builder.py ================================================ """Build valid blocktests from fuzzer-generated transactions and pre-state.""" import json import random from pathlib import Path from typing import Any, Dict, Optional from ethereum_clis import GethTransitionTool, TransitionTool from ethereum_test_fixtures import BlockchainFixture from .converter import blockchain_test_from_fuzzer from .models import FuzzerOutput def choose_random_num_blocks(num_txs: int, max_blocks: int = 10) -> int: """ Choose random number of blocks for given transaction count. Selects a random number between 1 and min(num_txs, max_blocks) to enable testing of various block configurations. Args: num_txs: Number of transactions to distribute max_blocks: Maximum number of blocks (default: 10) Returns: Random integer between 1 and min(num_txs, max_blocks) """ if num_txs == 0: return 1 # Allow empty block testing return random.randint(1, min(num_txs, max_blocks)) class BlocktestBuilder: """Build valid blocktests from fuzzer-generated transactions.""" def __init__(self, transition_tool: Optional[TransitionTool] = None): """Initialize the builder with optional transition tool.""" self.t8n = transition_tool or GethTransitionTool() def build_blocktest( self, fuzzer_output: Dict[str, Any], num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, ) -> Dict[str, Any]: """Build a valid blocktest from fuzzer output.""" # Parse and validate using Pydantic model fuzzer_data = FuzzerOutput(**fuzzer_output) # Get fork fork = fuzzer_data.fork # Create BlockchainTest using converter test = blockchain_test_from_fuzzer( fuzzer_data, fork, num_blocks=num_blocks, block_strategy=block_strategy, block_time=block_time, ) # Generate fixture fixture = test.generate( t8n=self.t8n, fork=fork, fixture_format=BlockchainFixture, ) return fixture.model_dump(exclude_none=True, by_alias=True, mode="json") def build_and_save(self, fuzzer_output: Dict[str, Any], output_path: Path) -> Path: """Build blocktest and save to file.""" blocktest = self.build_blocktest(fuzzer_output) fixtures = {"fuzzer_generated_test": blocktest} with open(output_path, "w") as f: json.dump(fixtures, f, indent=2) return output_path def build_blocktest_from_fuzzer( fuzzer_data: Dict[str, Any], t8n: Optional[TransitionTool] = None ) -> Dict[str, Any]: """Build blocktest from fuzzer output.""" builder = BlocktestBuilder(t8n) return builder.build_blocktest(fuzzer_data) ================================================ FILE: src/cli/fuzzer_bridge/cli.py ================================================ """Command-line interface for the fuzzer bridge.""" import json import multiprocessing as mp from concurrent.futures import ProcessPoolExecutor, as_completed from functools import partial from pathlib import Path from typing import Any, Dict, Generator, Optional, Tuple import click from rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn from ethereum_clis import GethTransitionTool, TransitionTool from .blocktest_builder import BlocktestBuilder def count_json_files(start_path: Path) -> int: """Count JSON files in directory.""" return sum(1 for _ in start_path.rglob("*.json")) def get_input_files(input_path: Path) -> Generator[Path, None, None]: """Generate input file paths.""" if input_path.is_file(): yield input_path else: yield from input_path.rglob("*.json") def generate_test_name(file_path: Path, index: int = 0) -> str: """Generate unique test name from file path.""" stem = file_path.stem if index > 0: return f"fuzzer_{stem}_{index}" return f"fuzzer_{stem}" def process_single_file( input_file: Path, output_path: Path, builder: BlocktestBuilder, fork: Optional[str], pretty: bool, quiet: bool, num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, random_blocks: bool = False, ) -> Dict[str, Any]: """Process a single fuzzer output file.""" with open(input_file) as f: fuzzer_data = json.load(f) # Override fork if specified if fork: fuzzer_data["fork"] = fork # Determine number of blocks if random_blocks: from .blocktest_builder import choose_random_num_blocks actual_num_blocks = choose_random_num_blocks(len(fuzzer_data.get("transactions", []))) else: actual_num_blocks = num_blocks # Build blocktest blocktest = builder.build_blocktest( fuzzer_data, num_blocks=actual_num_blocks, block_strategy=block_strategy, block_time=block_time, ) test_name = generate_test_name(input_file) fixtures = {test_name: blocktest} # Write output output_file = output_path / f"{input_file.stem}.json" with open(output_file, "w") as f: if pretty: json.dump(fixtures, f, indent=2) else: json.dump(fixtures, f) if not quiet: click.echo(f"Generated: {output_file}", err=True) return fixtures def process_single_file_worker( file_info: Tuple[Path, Path], fork: Optional[str], pretty: bool, merge: bool, evm_bin: Optional[Path], num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, random_blocks: bool = False, ) -> Tuple[Optional[Tuple[Path, Dict[str, Any]]], Optional[Tuple[Path, Exception]]]: """Process a single file in a worker process.""" json_file_path, output_file = file_info # Create transition tool and builder for this worker t8n = GethTransitionTool(binary=evm_bin) if evm_bin else GethTransitionTool() builder = BlocktestBuilder(t8n) try: with open(json_file_path) as f: fuzzer_data = json.load(f) # Override fork if specified if fork: fuzzer_data["fork"] = fork # Determine number of blocks if random_blocks: from .blocktest_builder import choose_random_num_blocks actual_num_blocks = choose_random_num_blocks(len(fuzzer_data.get("transactions", []))) else: actual_num_blocks = num_blocks # Build blocktest blocktest = builder.build_blocktest( fuzzer_data, num_blocks=actual_num_blocks, block_strategy=block_strategy, block_time=block_time, ) test_name = generate_test_name(json_file_path) fixtures = {test_name: blocktest} if not merge: # Write individual file preserving structure output_file.parent.mkdir(parents=True, exist_ok=True) with open(output_file, "w") as f: if pretty: json.dump(fixtures, f, indent=2) else: json.dump(fixtures, f) return (json_file_path, fixtures), None except Exception as e: return None, (json_file_path, e) def process_file_batch( file_batch: list[Tuple[Path, Path]], fork: Optional[str], pretty: bool, merge: bool, evm_bin: Optional[Path], num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, random_blocks: bool = False, ) -> Tuple[list[Tuple[Path, Dict[str, Any]]], list[Tuple[Path, Exception]]]: """Process a batch of files in a worker process.""" # Create transition tool per worker t8n = GethTransitionTool(binary=evm_bin) if evm_bin else GethTransitionTool() builder = BlocktestBuilder(t8n) results = [] errors = [] for json_file_path, rel_path in file_batch: try: with open(json_file_path) as f: fuzzer_data = json.load(f) # Override fork if specified if fork: fuzzer_data["fork"] = fork # Determine number of blocks if random_blocks: from .blocktest_builder import choose_random_num_blocks actual_num_blocks = choose_random_num_blocks( len(fuzzer_data.get("transactions", [])) ) else: actual_num_blocks = num_blocks # Build blocktest blocktest = builder.build_blocktest( fuzzer_data, num_blocks=actual_num_blocks, block_strategy=block_strategy, block_time=block_time, ) test_name = generate_test_name(json_file_path) fixtures = {test_name: blocktest} if not merge: # Write individual file preserving structure output_file = rel_path.with_suffix(".json") output_file.parent.mkdir(parents=True, exist_ok=True) with open(output_file, "w") as f: if pretty: json.dump(fixtures, f, indent=2) else: json.dump(fixtures, f) results.append((json_file_path, fixtures)) except Exception as e: errors.append((json_file_path, e)) return results, errors def process_directory_parallel( input_dir: Path, output_dir: Path, fork: Optional[str], pretty: bool, merge: bool, quiet: bool, evm_bin: Optional[Path], num_workers: Optional[int] = None, num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, random_blocks: bool = False, ) -> None: """Process directory of fuzzer output files with parallel processing.""" all_fixtures = {} # Collect all files to process files_to_process = [] for json_file_path in get_input_files(input_dir): rel_path = json_file_path.relative_to(input_dir) output_file = output_dir / rel_path files_to_process.append((json_file_path, output_file)) file_count = len(files_to_process) if file_count == 0: if not quiet: click.echo("No JSON files found to process.", err=True) return # Determine optimal number of workers if num_workers is None: num_workers = min(mp.cpu_count(), max(1, file_count // 10)) success_count = 0 error_count = 0 with Progress( TextColumn("[bold cyan]{task.fields[filename]}", justify="left"), BarColumn(bar_width=None, complete_style="green3", finished_style="bold green3"), TaskProgressColumn(), TextColumn("[dim]({task.fields[workers]} workers)[/dim]"), TimeElapsedColumn(), expand=True, disable=quiet, ) as progress: task_id = progress.add_task( "Processing", total=file_count, filename="Starting...", workers=num_workers ) # Process files individually in parallel (better progress tracking) process_func = partial( process_single_file_worker, fork=fork, pretty=pretty, merge=merge, evm_bin=evm_bin, num_blocks=num_blocks, block_strategy=block_strategy, block_time=block_time, random_blocks=random_blocks, ) with ProcessPoolExecutor(max_workers=num_workers) as executor: # Submit all files to the pool futures_to_files = { executor.submit(process_func, file_info): file_info[0] for file_info in files_to_process } # Process completions as they happen for real-time progress for future in as_completed(futures_to_files): file_path = futures_to_files[future] # Update progress with current file rel_path = file_path.relative_to(input_dir) display_name = str(rel_path) if len(display_name) > 40: display_name = "..." + display_name[-37:] try: result, error = future.result() if result: success_count += 1 _, fixtures = result if merge: all_fixtures.update(fixtures) elif error: error_count += 1 error_file, exception = error if not quiet: progress.console.print( f"[red]Error processing {error_file}: {exception}[/red]" ) # Update progress bar progress.update(task_id, advance=1, filename=display_name, workers=num_workers) except Exception as e: error_count += 1 if not quiet: progress.console.print(f"[red]Worker error for {file_path}: {e}[/red]") progress.update(task_id, advance=1, filename=display_name) # Write merged file if requested if merge and all_fixtures: merged_file = output_dir / "merged_fixtures.json" with open(merged_file, "w") as f: if pretty: json.dump(all_fixtures, f, indent=2) else: json.dump(all_fixtures, f) if not quiet: progress.console.print(f"[green]Merged fixtures written to: {merged_file}[/green]") # Final status if not quiet: emoji = "✅" if error_count == 0 else "⚠️" progress.update( task_id, completed=file_count, filename=f"Done! {success_count} succeeded, {error_count} failed {emoji}", workers=num_workers, ) def process_directory( input_dir: Path, output_dir: Path, builder: BlocktestBuilder, fork: Optional[str], pretty: bool, merge: bool, quiet: bool, num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, random_blocks: bool = False, ) -> None: """Process directory of fuzzer output files.""" all_fixtures = {} file_count = count_json_files(input_dir) if not quiet else 0 success_count = 0 error_count = 0 with Progress( TextColumn("[bold cyan]{task.fields[filename]}", justify="left"), BarColumn(bar_width=None, complete_style="green3", finished_style="bold green3"), TaskProgressColumn(), TimeElapsedColumn(), expand=True, disable=quiet, ) as progress: task_id = progress.add_task("Processing", total=file_count, filename="...") for json_file_path in get_input_files(input_dir): # Preserve directory structure rel_path = json_file_path.relative_to(input_dir) display_name = str(rel_path) if len(display_name) > 40: display_name = "..." + display_name[-37:] progress.update(task_id, advance=1, filename=display_name) try: with open(json_file_path) as f: fuzzer_data = json.load(f) # Override fork if specified if fork: fuzzer_data["fork"] = fork # Determine number of blocks if random_blocks: from .blocktest_builder import choose_random_num_blocks actual_num_blocks = choose_random_num_blocks( len(fuzzer_data.get("transactions", [])) ) else: actual_num_blocks = num_blocks # Build blocktest blocktest = builder.build_blocktest( fuzzer_data, num_blocks=actual_num_blocks, block_strategy=block_strategy, block_time=block_time, ) test_name = generate_test_name(json_file_path) if merge: # Add to merged fixtures all_fixtures[test_name] = blocktest else: # Write individual file preserving structure output_file = output_dir / rel_path.with_suffix(".json") output_file.parent.mkdir(parents=True, exist_ok=True) fixtures = {test_name: blocktest} with open(output_file, "w") as f: if pretty: json.dump(fixtures, f, indent=2) else: json.dump(fixtures, f) success_count += 1 except Exception as e: error_count += 1 if not quiet: progress.console.print(f"[red]Error processing {json_file_path}: {e}[/red]") # Write merged file if requested if merge and all_fixtures: merged_file = output_dir / "merged_fixtures.json" with open(merged_file, "w") as f: if pretty: json.dump(all_fixtures, f, indent=2) else: json.dump(all_fixtures, f) if not quiet: progress.console.print(f"[green]Merged fixtures written to: {merged_file}[/green]") # Final status if not quiet: emoji = "✅" if error_count == 0 else "⚠️" progress.update( task_id, completed=file_count, filename=f"Done! {success_count} succeeded, {error_count} failed {emoji}", ) def batch_mode( fork: Optional[str], evm_bin: Optional[Path], pretty: bool, num_blocks: int, block_strategy: str, block_time: int, random_blocks: bool, ) -> None: """ Persistent batch processing mode. Reads input/output pairs from stdin, processes each, and outputs status to stdout. Protocol: - INPUT (stdin): - OUTPUT (stdout): DONE or ERROR """ import sys import traceback # Pre-initialize transition tool and builder once for performance t8n: TransitionTool if evm_bin: t8n = GethTransitionTool(binary=evm_bin) else: t8n = GethTransitionTool() builder = BlocktestBuilder(t8n) # Write ready signal to stderr for debugging print("Batch mode initialized. Ready to process files.", file=sys.stderr, flush=True) while True: try: # Read line from stdin line = sys.stdin.readline() if not line: # EOF break line = line.strip() if not line: continue # Parse input/output paths parts = line.split() if len(parts) != 2: print(f"ERROR: invalid input format: {line}", flush=True) continue input_path_str, output_dir_str = parts input_path = Path(input_path_str) output_dir = Path(output_dir_str) # Process the file try: # Read fuzzer input if not input_path.exists(): print(f"ERROR: file not found: {input_path}", flush=True) continue with open(input_path) as f: fuzzer_data = json.load(f) # Override fork if specified if fork: fuzzer_data["fork"] = fork # Determine number of blocks if random_blocks: from .blocktest_builder import choose_random_num_blocks actual_num_blocks = choose_random_num_blocks( len(fuzzer_data.get("transactions", [])) ) else: actual_num_blocks = num_blocks # Build blocktest (existing logic) blocktest = builder.build_blocktest( fuzzer_data, num_blocks=actual_num_blocks, block_strategy=block_strategy, block_time=block_time, ) # Generate test name test_name = generate_test_name(input_path) fixtures = {test_name: blocktest} # Write output output_dir.mkdir(parents=True, exist_ok=True) input_stem = input_path.stem output_file = output_dir / f"{input_stem}.json" with open(output_file, "w") as f: if pretty: json.dump(fixtures, f, indent=2) else: json.dump(fixtures, f) # Report success (CRITICAL: must flush) print(f"DONE {output_file}", flush=True) except FileNotFoundError: print(f"ERROR: file not found: {input_path}", flush=True) except json.JSONDecodeError as e: print(f"ERROR: invalid JSON in {input_path}: {e}", flush=True) # Log full traceback to stderr for debugging traceback.print_exc(file=sys.stderr) except Exception as e: print(f"ERROR: conversion failed for {input_path}: {e}", flush=True) # Log full traceback to stderr for debugging traceback.print_exc(file=sys.stderr) except KeyboardInterrupt: break except Exception as e: # Catch-all for unexpected errors in the main loop print(f"ERROR: unexpected error in batch loop: {e}", flush=True) traceback.print_exc(file=sys.stderr) @click.command() @click.argument( "input_path", type=click.Path(exists=True, dir_okay=True, file_okay=True, path_type=Path), required=False, ) @click.argument( "output_path", type=click.Path(dir_okay=True, file_okay=False, path_type=Path), required=False, ) @click.option( "--fork", default=None, help="Override fork specified in fuzzer output", ) @click.option( "--evm-bin", type=click.Path(exists=True, path_type=Path), help="Path to evm binary for transition tool", ) @click.option( "--pretty", is_flag=True, help="Pretty-print JSON output", ) @click.option( "--merge", is_flag=True, help="Merge all tests into a single output file", ) @click.option( "--quiet", is_flag=True, help="Suppress progress output", ) @click.option( "--parallel/--no-parallel", default=True, help="Enable/disable parallel processing (default: enabled)", ) @click.option( "-n", "--workers", type=int, default=None, help="Number of parallel workers (default: auto-detect based on CPU count)", ) @click.option( "-b", "--num-blocks", type=int, default=1, help="Number of blocks to generate from fuzzer input (default: 1)", ) @click.option( "--block-strategy", type=click.Choice(["distribute", "first-block"]), default="distribute", help="Transaction distribution strategy: 'distribute' splits txs evenly, " "'first-block' puts all txs in first block (default: distribute)", ) @click.option( "--block-time", type=int, default=12, help="Seconds between blocks (default: 12)", ) @click.option( "--random-blocks", is_flag=True, help="Randomly choose number of blocks (1 to min(num_txs, 10))", ) @click.option( "--batch", is_flag=True, help="Persistent batch mode: read file paths from stdin, output to stdout", ) def main( input_path: Optional[Path], output_path: Optional[Path], fork: Optional[str], evm_bin: Optional[Path], pretty: bool, merge: bool, quiet: bool, parallel: bool, workers: Optional[int], num_blocks: int, block_strategy: str, block_time: int, random_blocks: bool, batch: bool, ) -> None: """ Convert fuzzer output to valid blocktest fixtures. INPUT_PATH: Input JSON file or directory (not required in --batch mode) OUTPUT_PATH: Output directory for fixtures (not required in --batch mode) In batch mode (--batch), reads input/output pairs from stdin. """ # Batch mode: persistent stdin/stdout processing if batch: batch_mode( fork=fork, evm_bin=evm_bin, pretty=pretty, num_blocks=num_blocks, block_strategy=block_strategy, block_time=block_time, random_blocks=random_blocks, ) return # Standard mode: require input_path and output_path if input_path is None or output_path is None: raise click.UsageError( "INPUT_PATH and OUTPUT_PATH are required when not using --batch mode" ) # Create transition tool t8n: TransitionTool if evm_bin: t8n = GethTransitionTool(binary=evm_bin) else: t8n = GethTransitionTool() # Create builder builder = BlocktestBuilder(t8n) # Ensure output directory exists output_path.mkdir(parents=True, exist_ok=True) # Process input if input_path.is_file(): # Single file processing process_single_file( input_path, output_path, builder, fork, pretty, quiet, num_blocks, block_strategy, block_time, random_blocks, ) else: # Directory processing with optional parallel mode if parallel: process_directory_parallel( input_path, output_path, fork, pretty, merge, quiet, evm_bin, workers, num_blocks, block_strategy, block_time, random_blocks, ) else: process_directory( input_path, output_path, builder, fork, pretty, merge, quiet, num_blocks, block_strategy, block_time, random_blocks, ) if __name__ == "__main__": main() ================================================ FILE: src/cli/fuzzer_bridge/converter.py ================================================ """ Converter module for transforming fuzzer DTOs to EEST domain models. This module performs explicit transformation from fuzzer's JSON-RPC format (captured in DTOs) to EEST's internal domain models (Transaction, Account, etc.). Key Responsibilities: 1. Field mapping (gas → gas_limit, from → sender, etc.) 2. Creating EOA objects from private keys 3. Building proper EEST domain models with all required context 4. Preventing TestAddress pollution by setting sender BEFORE model_post_init """ from typing import Dict from ethereum_test_base_types import Address, Hash, HexNumber from ethereum_test_forks import Fork from ethereum_test_specs import BlockchainTest from ethereum_test_tools import Account, AuthorizationTuple, Block, Transaction from ethereum_test_types import Alloc, Environment from ethereum_test_types.account_types import EOA from .models import ( FuzzerAccountInput, FuzzerAuthorizationInput, FuzzerOutput, FuzzerTransactionInput, ) def fuzzer_account_to_eest_account(fuzzer_account: FuzzerAccountInput) -> Account: """ Convert fuzzer account DTO to EEST Account domain model. Args: fuzzer_account: Raw account data from fuzzer Returns: EEST Account ready for pre-state """ return Account( balance=fuzzer_account.balance, nonce=fuzzer_account.nonce, code=fuzzer_account.code, storage=fuzzer_account.storage, ) def fuzzer_authorization_to_eest( fuzzer_auth: FuzzerAuthorizationInput, ) -> AuthorizationTuple: """ Convert fuzzer authorization DTO to EEST AuthorizationTuple. Args: fuzzer_auth: Raw authorization data from fuzzer Returns: EEST AuthorizationTuple for EIP-7702 transactions """ return AuthorizationTuple( chain_id=fuzzer_auth.chain_id, address=fuzzer_auth.address, nonce=fuzzer_auth.nonce, v=fuzzer_auth.v, r=fuzzer_auth.r, s=fuzzer_auth.s, ) def fuzzer_transaction_to_eest_transaction( fuzzer_tx: FuzzerTransactionInput, sender_eoa: EOA, ) -> Transaction: """ Convert fuzzer transaction DTO to EEST Transaction domain model. This function performs explicit field mapping and MUST set sender BEFORE calling Transaction constructor to prevent TestAddress injection. Key Mappings: - fuzzer_tx.gas → transaction.gas_limit (JSON-RPC → EEST naming) - fuzzer_tx.from_ → sender_eoa (Address → EOA with private key) - fuzzer_tx.data → transaction.data (same field, explicit for clarity) Args: fuzzer_tx: Raw transaction data from fuzzer sender_eoa: EOA object created from private key (prevents TestAddress) Returns: EEST Transaction ready for block generation """ # Build authorization list if present auth_list = None if fuzzer_tx.authorization_list: auth_list = [fuzzer_authorization_to_eest(auth) for auth in fuzzer_tx.authorization_list] # Create Transaction with sender set BEFORE model_post_init runs # This prevents Transaction.model_post_init from injecting TestAddress return Transaction( sender=sender_eoa, # ✓ Set explicitly to prevent TestAddress to=fuzzer_tx.to, gas_limit=fuzzer_tx.gas, # ✓ Explicit mapping: gas → gas_limit gas_price=fuzzer_tx.gas_price, max_fee_per_gas=fuzzer_tx.max_fee_per_gas, max_priority_fee_per_gas=fuzzer_tx.max_priority_fee_per_gas, nonce=fuzzer_tx.nonce, data=fuzzer_tx.data, value=fuzzer_tx.value, access_list=fuzzer_tx.access_list, blob_versioned_hashes=fuzzer_tx.blob_versioned_hashes, max_fee_per_blob_gas=fuzzer_tx.max_fee_per_blob_gas, authorization_list=auth_list, ) def create_sender_eoa_map(accounts: Dict[Address, FuzzerAccountInput]) -> Dict[Address, EOA]: """ Create map of addresses to EOA objects from accounts with private keys. Args: accounts: Dictionary of address to fuzzer account data Returns: Dictionary mapping addresses to EOA objects for transaction signing Raises: AssertionError: If private key doesn't match the account address """ senders: Dict[Address, EOA] = {} for addr, account in accounts.items(): if account.private_key is None: continue # Create EOA from private key sender = EOA(key=account.private_key) # Verify private key matches address (safety check) assert Address(sender) == addr, ( f"Private key for account {addr} does not match derived address {sender}" ) senders[addr] = sender return senders def blockchain_test_from_fuzzer( fuzzer_output: FuzzerOutput, fork: Fork, num_blocks: int = 1, block_strategy: str = "distribute", block_time: int = 12, ) -> BlockchainTest: """ Convert fuzzer output to BlockchainTest instance. This is the main entry point for fuzzer-to-EEST conversion. It orchestrates: 1. Parsing and validation (already done by FuzzerOutput DTO) 2. Creating EOA objects from private keys 3. Converting DTOs to domain models 4. Building blocks and test structure Args: fuzzer_output: Parsed and validated fuzzer output (DTO) fork: Fork to use for the test num_blocks: Number of blocks to generate block_strategy: How to distribute transactions across blocks - "distribute": Split evenly maintaining nonce order - "first-block": All transactions in first block block_time: Seconds between block timestamps Returns: BlockchainTest instance ready for fixture generation Raises: AssertionError: If invariants are violated (sender validation, etc.) """ # Step 1: Convert accounts to EEST Account domain models pre_dict: Dict[Address, Account | None] = {} for addr, fuzzer_account in fuzzer_output.accounts.items(): pre_dict[addr] = fuzzer_account_to_eest_account(fuzzer_account) pre = Alloc(pre_dict) # Step 2: Create EOA map for transaction signing sender_eoa_map = create_sender_eoa_map(fuzzer_output.accounts) # Step 3: Convert transactions to EEST Transaction domain models eest_transactions: list[Transaction] = [] for fuzzer_tx in fuzzer_output.transactions: # Verify sender has private key assert fuzzer_tx.from_ in sender_eoa_map, ( f"Sender {fuzzer_tx.from_} not found in accounts with private keys" ) # Convert with explicit sender (prevents TestAddress injection) eest_tx = fuzzer_transaction_to_eest_transaction( fuzzer_tx, sender_eoa=sender_eoa_map[fuzzer_tx.from_], ) eest_transactions.append(eest_tx) # Step 4: Build genesis environment env = fuzzer_output.env genesis_env = Environment( fee_recipient=env.fee_recipient, difficulty=0, # Post-merge gas_limit=int(env.gas_limit), number=0, timestamp=HexNumber(int(env.timestamp) - 12), prev_randao=env.prev_randao or Hash(0), base_fee_per_gas=env.base_fee_per_gas if env.base_fee_per_gas else None, excess_blob_gas=env.excess_blob_gas if env.excess_blob_gas else None, blob_gas_used=env.blob_gas_used if env.blob_gas_used else None, ).set_fork_requirements(fork) # Step 5: Distribute transactions across blocks blocks = _distribute_transactions_to_blocks( eest_transactions, num_blocks, block_strategy, block_time, env, fuzzer_output.parent_beacon_block_root, ) return BlockchainTest( pre=pre, blocks=blocks, post={}, # Post-state verification can be added later genesis_environment=genesis_env, chain_id=fuzzer_output.chain_id, ) def _distribute_transactions_to_blocks( transactions: list[Transaction], num_blocks: int, strategy: str, block_time: int, base_env: Environment, parent_beacon_block_root: Hash | None, ) -> list[Block]: """ Distribute transactions across multiple blocks. Args: transactions: List of EEST Transaction objects (ready for execution) num_blocks: Number of blocks to create strategy: Distribution strategy ("distribute" or "first-block") block_time: Seconds between blocks base_env: Base environment for first block parent_beacon_block_root: Beacon root (only for first block) Returns: List of Block objects """ if strategy == "first-block": # All transactions in first block, rest empty tx_distribution = [transactions] + [[] for _ in range(num_blocks - 1)] elif strategy == "distribute": # Split transactions evenly maintaining nonce order if not transactions: tx_distribution = [[] for _ in range(num_blocks)] else: result = [] chunk_size = len(transactions) // num_blocks remainder = len(transactions) % num_blocks start = 0 for i in range(num_blocks): # Distribute remainder across first blocks current_chunk_size = chunk_size + (1 if i < remainder else 0) end = start + current_chunk_size result.append(transactions[start:end]) start = end tx_distribution = result else: raise ValueError(f"Unknown block strategy: {strategy}") # Create blocks with incrementing timestamps base_timestamp = int(base_env.timestamp) blocks = [] for i, block_txs in enumerate(tx_distribution): blocks.append( Block( txs=block_txs, timestamp=base_timestamp + (i * block_time), fee_recipient=base_env.fee_recipient, parent_beacon_block_root=parent_beacon_block_root if i == 0 else None, ) ) return blocks ================================================ FILE: src/cli/fuzzer_bridge/examples/README.md ================================================ # Fuzzer Bridge Examples This directory contains example fuzzer outputs in the v2.0 JSON format. These examples demonstrate the comprehensive transaction coverage generated by the fuzzer and serve as test cases for the fuzzer bridge implementation. ## Format Overview All examples use fuzzer output format v2.0 with the following structure: ```json { "version": "2.0", "fork": "Osaka", "chainId": "0x01", "accounts": { ... }, "transactions": [ ... ], "env": { ... }, "parentBeaconBlockRoot": "0x..." } ``` ## Example Files ### comprehensive_smallest.json (56K) - **Size**: Smallest example (56K) - **Transactions**: 17 transactions - **Accounts**: 25-26 accounts with private keys - **Transaction Types**: Legacy, EIP-1559, EIP-4844 (blobs), EIP-7702 (authorization lists) - **Features**: Parent beacon block root (EIP-4788) - **Use Case**: Minimal comprehensive example for quick testing ### comprehensive_medium_1.json (62K) - **Size**: Medium-sized example (62K) - **Transactions**: 17 transactions - **Accounts**: 25-26 accounts - **Transaction Types**: Full spectrum including blob transactions (6 blob hashes per tx) - **Authorization Lists**: 5 authorization tuples per EIP-7702 transaction - **Use Case**: Balanced example with typical transaction data sizes ### comprehensive_medium_2.json (66K) - **Size**: Medium-sized example (66K) - **Transactions**: 17 transactions - **Accounts**: 25-26 accounts - **Transaction Types**: All major transaction types - **Features**: Variety of calldata sizes (2-400 bytes) - **Use Case**: Testing different data payload sizes ### comprehensive_large.json (70K) - **Size**: Large example (70K) - **Transactions**: 17 transactions - **Accounts**: 25-26 accounts - **Transaction Types**: Complete coverage - **Features**: Larger calldata payloads (up to 600 bytes) - **Use Case**: Testing with substantial transaction data ### comprehensive_largest.json (74K) - **Size**: Largest example (74K) - **Transactions**: 17 transactions - **Accounts**: 25-26 accounts - **Transaction Types**: All types including largest blob transactions - **Features**: Maximum calldata sizes (up to 690 bytes) - **Use Case**: Stress testing with largest transaction payloads ## Common Features Across All Examples All examples include: 1. **EIP-1559 Transactions**: Dynamic fee transactions with `maxFeePerGas` and `maxPriorityFeePerGas` 2. **EIP-4844 Blob Transactions**: Transactions with `blobVersionedHashes` and `maxFeePerBlobGas` 3. **EIP-7702 Set-Code Transactions**: Transactions with `authorizationList` containing signed authorization tuples 4. **Legacy Transactions**: Traditional transactions with `gasPrice` 5. **EIP-4788 Support**: `parentBeaconBlockRoot` set in environment 6. **Private Keys**: All sender accounts include `privateKey` field for transaction signing 7. **Storage**: Accounts with non-empty storage mappings 8. **Code**: Accounts with deployed bytecode ## Field Mappings (Fuzzer JSON-RPC → EEST) The fuzzer uses standard Ethereum JSON-RPC transaction format: | Fuzzer Field | EEST Field | Description | |-------------|-----------|-------------| | `gas` | `gas_limit` | Gas limit for transaction | | `data` | `data` | Transaction calldata | | `from` | `sender` | Transaction sender (mapped to EOA) | | `gasPrice` | `gas_price` | Gas price (legacy transactions) | | `maxFeePerGas` | `max_fee_per_gas` | Max fee per gas (EIP-1559) | | `maxPriorityFeePerGas` | `max_priority_fee_per_gas` | Max priority fee (EIP-1559) | | `blobVersionedHashes` | `blob_versioned_hashes` | Blob hashes (EIP-4844) | | `maxFeePerBlobGas` | `max_fee_per_blob_gas` | Max blob fee (EIP-4844) | | `authorizationList` | `authorization_list` | Authorization tuples (EIP-7702) | ## Usage These examples can be used with the fuzzer bridge CLI: ```bash # Convert a single example to blockchain test uv run python -m cli.fuzzer_bridge.cli \ --input src/cli/fuzzer_bridge/examples/comprehensive_medium_1.json \ --output /tmp/blocktest_output # Batch convert all examples for example in src/cli/fuzzer_bridge/examples/*.json; do uv run python -m cli.fuzzer_bridge.cli \ --input "$example" \ --output "/tmp/$(basename "$example" .json)" done ``` ## Old Examples Previous examples (before format evolution and bug fixes) are preserved in the `old_examples/` subdirectory for reference. ## Generation These examples were generated using the fuzzer with comprehensive transaction coverage enabled. The fuzzer automatically generates: - Multiple transaction types per test - Accounts with various states (empty, funded, with code, with storage) - Realistic transaction ordering and nonce sequences - Private keys for all sender accounts - Post-merge environment (PoS consensus) ## Testing Coverage Each example provides test coverage for: - ✅ Transaction parsing (all field types) - ✅ Account state initialization - ✅ EOA creation from private keys - ✅ Gas limit calculations - ✅ Blob transaction handling - ✅ Authorization list processing - ✅ Environment setup (including beacon root) - ✅ Multi-transaction block generation ## Notes - All examples use Osaka fork - All examples use chain ID 1 (mainnet) - All transactions have sufficient gas (16,000,000 gas limit) - All sender accounts have private keys for signing - Environment includes realistic post-merge values (difficulty=0, prevRandao set) ================================================ FILE: src/cli/fuzzer_bridge/examples/comprehensive_large.json ================================================ { "accounts": { "0x000000000000000000000000000000000000000d": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x6517fa85aafd83a02f88fe864d93249c357cce975bd1f35d0b0430a901613f76", "storage": {} }, "0x18665208d71eAF07c959cB6d2b263aCE3eF24042": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xaf09231cd0ab58828b41ee0ba14866d944b955fbc80243a5bf0bc8c86c664552", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f19fa3b5cbcf160be11cbc1ccfa69a3a86000527f9f374ddd4b02789440d795b6a2fcfda039b83d18945750af9cee8ebacc1c27716020526f014a651f7ac467a9f4f1041275a058386040527f03088f4d23e2585886dd9918f916bd25f3a9f62b6bff62fc04a5770726fdfea16060526f19f7092f2954ea173b6f38c95f4ab8f96080527f871c73b32e1e1c5da7ba9025c14e5ba83e0c6762b66e433f8f9046629488f2b860a0526f0c1303e46eb6b78c665ea65f470ac64660c0527fa6f6149c0b9505c50046c6de2883a22579de92b151f5ab7938e9c5c269a09e3960e0526080600061010060006046600b7ffe95b06b0f681723791f4161b4947e090dbfd8783baf00b3a24bc8853dcf0196f26000556000516001556020516002556040516003556060516004556f0fb6f07b2eab53e6d95b3eea7c5f15256000527f9ff4e6b8f9784adec046dea1be26fd44754d6a27c6a2b1a1d9e44930cbd311306020526f03c0d62e127d7ca9f051646a2c401ede6040527ff683bbc13510e88c04488ced8f6b688a79584ba6dbe3debed06ec8de8a23f54c6060527f85594d4af90ecf8adb547e8c0e1f2022770dbab52d41e5d7209033a36c7b9f8d6080526f158333a1f76f866236773aa642362ad060a0527e5c4adc636c7f0ef15a9de64bbde05b7dc19d3d71c1828c7c56480a761d207c60c0526f102eaee88ca53422c1d961278654cd0360e0527f0798cc38d9234d1ab9645b653fa58fef75b9bbb4fad130010abcdf8a99900f7a610100527f713197f47d0b27493f5b80e43abe59e6052e876076598c449fd315801a093b59610120526f0bb2d551f91290b5b9fce1e398dbc4cb610140527ff6cca7cc4e69b5da29f4fa52c6581aed6fc44bb1f3c0536eb504b7d221a06447610160526f061d80c19532c14099c7c684e2ccb174610180527f57228c4901d5528ebbf0c4f47dae28c3d280068e31c107be7b4e6eda8f4ddc586101a0527f1affd06170d301f6ebafc685f05a67ba51aa136ef86f6146ea179898a8dabd546101c052608060006101e06000600c7ffd0e4ef71bd81883826cfc6172ac1a2331705d36e13ad54044fbbd2f7509d1f7f46005556000516006556020516007556040516008556060516009556f08ba8a0468fb1e41a77dc4760a4973ee6000527fe6f8dd14f7ffe63b258b76ba3945fc3212dd597342360542875ef842e0b0b2196020526f0fd65a1aed9d10788788f8c8116f56af6040527f3e4297c9aeb8329e8f90cb0afef8148320439f16ebdf6680516f5d27928a1a086060526f145d501508e98e9fdc70d4076213d6146080527f14d82b1819adbaed7aa9a6ed3877d698e515829d121b61a40d224480af7a667b60a0526f1460669ebf2d0c5804bfc4ea1e662a3a60c0527fa675412270d299cdcc4fb1af786e51bde0f9c7f2fa5a48dcd7770aa3086ca85660e0526f0bd37d392b9da52284890146de3e897d610100527f9b414b75b7fbb851dfbba872378f09666e83e15c4039cb9dd41a65ecf610234c610120526f07f750deef22c9b32314fcfd4d541929610140527f2a89d9e69169ce89d55caae0d5bfb34bae1bfdd51fdead179761953c3d68488d610160526f1d1becb9ed60428375c9cba1b1e5deda610180527f6694879571ee1b0ac9e12d815b34f005639cd4214d10865159dd2a14459ea1c56101a0526f0fff5920c6dca137b60970bb9c2cbbca6101c0527fab9d343b23a24d09491af51286c567ea4e0d802d0d17da14605dd0629ef3d11c6101e05261010060006102006000600d7f8ec3983a330a1d6443ba3a96ad13eb742da259f98b422751e4d83c507eb9a495fa600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f19da63d9ed7d5028bc4ec2241e0f64d66000527f9c2a418eca251abceb9c6ceea156ab119fa41c5d817c64b5d27e378b3666fe616020526f02b6cfb26b2a957b6cea0ced22f7da976040527fbd85f4f1cf860c6b0a4cd896da77568cb92265cb47653c0d42fa17de27204b9b6060526f134e239014bc00715daa075776787a4c6080527fc3f6e58a7ccc8761817397ee792a6a5c06ac2b8c0532465909312c3f73a0411460a0526f08015e9f29388301d30ec2275593144160c0527fe781b11a8189a11b6ca94a5a75320893f20a6d24a9a5d89f403aa9e7b2b1082460e0527f3c6c108f25654670f797333386644dc2266da7009d2379ae6b1a713b1d4f1f5e610100526f0f1f81e63fb80a8c424825c4c63fecd7610120527fa9e2c7a00edb5595ac51369c4e06cb0d327c4a2bcb9540bbc071f89d5afd930e610140526f15f887c809744b267d34ea14996f9c19610160527f4a6e3e76a9560eac9ab9302f09ae45ba8390f505f9b76aa7e095d4c06731c6da610180526e781d148227c64e9e6171737a9f90676101a0527f4da46bda7b6fc8735861079c8c5190fe2452068274e77d646be4efd9824c084f6101c0526f08709c66878c65bf4b6fe916c2994c1d6101e0527fc7ada675b682bb217386e5f3e271a9afddb98dc41ac2e620c4bfcf7cd386a80c610200527f08ee20e405693fd12009d735195f7a9f0151f0073f16c63cde49582d2ee6da7961022052610100600061024060006036600e7f89e0e03253b5683c3350f95eeea40ab73353141f0d329060d6b4bb2b67b6d5f5f260135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f0f1ff58cafe856bb0c96b8cc8e84a15f6000527f4aa828579e886669fe73006f7e0eeffb46e8774f0fc9476fe9ef7eb45ee87bb96020526f0ca2fcfc114a285353488f60b0cb27be6040527f096dc37d10d6178f1acb136e37937d67acdfcfcc479ac055f69a9d3127abffb46060526f0d334f79d96f58a39b36cb539250a5516080527f6f3fb98e2e86cfe69a80955b99fbd5159bd75b68a1170ed2a2f4d39d9f54897060a0526f19b11403a23f5806db3da4e23c11898d60c0527f7e89c85d9c5951eacc54b878539d49603b85611512db65364053e9105282505860e0526f140342b31fd4daf8752074a17957a58c610100527f03a5d0d261b7693c3c3b9465bb7580ac64ab687520c5a0a792ac014ddc760458610120526f0e1834c2250017d2a88333e20b0a51dc610140527f5ea2cd2d856b17c7a1d4f5f148d4ec0a2089219d520b672e32b439c14ea1b85f610160526f1316f2bff6c70b109dad2d28a6404881610180527f3151789d6ca1019ea82ccfe4c806673dff2d9332637b20c4e6a9cb44faa2c28e6101a0526f128e3988a581fb6fe92de2e1c48f14986101c0527f4155e4151df5492a44ae4ec360c675705b8f2aea0a2831d7e9f664aa009b4dd06101e0526f024aa2b2f08f0a91260805272dc51051610200527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610220526f13e02b6052719f607dacd3a088274f65610240527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610260526f0ce5d527727d6e118cc9cdc6da2e351a610280527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016102a0526f0606c4a02ea734cc32acd2b02bc28b996102c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6102e05260206000610300600060b5600f7f26e0179e1ab64336316965140721c1c91b4c6311479bfb37b4049e57d689e429f1601c55600051601d557e40000000000000000000000000000005368347f453af419c09e3c17d5a07b16000527fcec1b822de11b01fe0b30cc1f6e431c7d6aa6297592bb9a08255062903a43a19602052608060006040600060107f75031a4a93d2ee1164a2f48228e140897995ea0e845683c90a60af8d03ac65defa601e55600051601f556020516020556040516021556060516022556f0fd5ef3e0dc0490f4dbff5e349456cc76000527fc0a883554216d95059f28016c8d8c4880eafaac915ae37e0daa01ded35c024c16020526f0392768dd75f8e50ad0c7a67d9c819fa6040527fe551075a654737e08d0f021eb117eb6b68267334b9110a1fe2e2edb67572cc9b606052610100600060806000601160f2f460235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x607660db600b602360e6604260bd1d8164a1f4329a161d8c31f11568550b5546591c4348526c53313f04452087315456197882415f647a72956540556f94460507891a053a600036306b1858421005179170995100928d5c153f92071977a137095258425e5a0a7114005e554a086e75135b0120203c15798f157837f5807e3145197d186e09161a77705c17526f37130286621945183e3e783030080616703b1e9978348a0388121879327d546079785b7c561d5e69947c927e611016347a1b6ea0358065186c7f8476507239180619137643491d72107b59186c8b8d79009909736bfe087b5f596534169d3ea4160a555f5134676890346a5c583f5bfd66598075983267519b10468e794664653f7c9f155b77047f0a721b921914067d7218868f7079781b1104173a437275f37948383f6f8e387fa2611c74455a99fa448b65460b5f1153f335143e07717e348f3173639819686c51789204386b82721a1394975a08597876618310176d30575e0168564962842097793f796d7e00953b465c410a3c775e1e79673f167448307088777057960257519752757a5e6a313e585dfe081dfd0361055cf58d8230725d5a5831891a36701842f5015b6511125b32373015f470871c465118093a59634302396447395252398603694af4185360180033141620845647391a11347a463df410779d7b030b0170163b1a15529e563f48590a420a14067f793e8f699d8f8c5780119c587a4291127a0167783d6f576012a354f21c7874315714384578346c9b7e5569961d55566f6bfd0b1851307e013899166f1683208c615c206b48076e7503fa3344a04955f5577209046d92a48474069b516b6135209146701e886e7c7b5f7796325a40848d6b519d609e1b03110b695a8b14399c6494a4361b163b3284667c8e743a023f1a7494021b9efd01fa09075912829f729f6402021a6f311740113b3c7a811808170519763d7405570953a00406ff1020536d09a0396095a17b5a456742353d10565969761439165d63101bf1598865958d375239046630516f6a1863903a497a3e6b07129a4758571d7d56051a80675914793295793f5d131a37149b5a6e3ba20b1e5341578b6571a494022065556798115648745f550398719f696d79f03e20ff429b34f3780a5e5c5077a35a6c433f77951a4059905f96371468a4025455713251591a3014fe1a557e6549395d165467915d9b63481b03531449521979068461533758f05839733205538d5e304109079c4a036d9d42f03565376418323697066b755c02a3fff1545711798d71490462101a3344591512187298565c058e1a0377f1853ff2fa095f5655466399483e69477f6e10465c3840f3413b7275906174a17c0348341d321153355563543f9d5b12fd806a20093d6100a109107e78656fa243025b067ef515", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000006" } }, "0x2837fE6BCdADEa40e14E73df3101847267659772": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2bc9eb16f330b5d3764d1e508af3bcbb84786071e249bad6f91ac38553464bf4", "storage": {} }, "0x35F694E45962Ab9eD665971FdF51A45A3b109c62": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2ac7d0629b3a39ccca4afd80b787edeccd0f9ceb5a83595c0f6a0e1cff0ebc7e", "storage": {} }, "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xd5b187a1488a0211288f3d420de324151455a6fa819850303f62bd25582b7cf6", "storage": {} }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x863419417b6000600055fa6de18a449c010a7f8e9660d84a21b87dbc056763006df3b8e66035a6f5fa4f42111ec56669067f796000527f9c2a7f3804dce503d7dff8e8801825fcdbd42a90e3f308ba21073ded827269296020527ff1b14bba86f2a6dd52b5d305e67bce80b579773ed881c8b9d8ce642f5638e1176040527f5e84ef7b9dc7e340641494d24498f08e7e37c9a6b3c8c03d09233a8e4af955dc6060527fce75d7e5d40ae69e572cbc0acdf3ef1eda7986dae8c69c09ab0c6f147b39268b6080527f7102b83fa59b8625e1cf6135605774b5f0a4d1bf373ac442b586a734ea8d21a560a0527fd4734a6bf23aa02d6286e928ed2edb7de8f5cedf05ecd2414ae0b4b9b11f6ab660c0527f7aee11b5432ab2a83f63841375a8f0ae8793233f2ede14d8f438f0dbb071534360e0527fb6a898321c875fee9103f3e25ab43d83cdf69aa1272812df955436426dda111e610100527f9ef2f7a07ef9168eef5eb78e995ea5792ec9b54d26c84c2b3b293f2c75e7989b610120527fb927e00951b4d24c112987f39916cee2300c7b8daca535a96ec9ae5cfaad7945610140527f78bb0fbfc44d5382300475f28e1f1f2e18708879ea8782b491d347901fe53e23610160527f7c6d85c86a9519a7852b269fa8f73f567731325f725a7286e6c01dbfd830397b610180527fcb9090f9a3bf1b0f3eb6dc9b03d0f339b6485d5b238ed7f9d0f1d4495d7b979a6101a052604060006101c0600060017f7735e2b1ad3cdfeae4afb25583920b30da69c9092974cdea990241f743cb3a5bfa600155600051600255602051600355", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x000000000000000000000000000000000000000000000000000000000000000c" } }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7fa4fc4c261945511eb0a7f9289ce44ddf8c9a5f4f7945a874976ea999c00f203c6000527f848fd24256f25171129d300596cdb3b87acac92dd320fd135b469ffb3649b0e86020527f47c102713e24fc4063948a1ada6d8df826b84b4737456cb9299ee0ddd772b8436040527fa839afcab7c931f82fc7153e8c264aba55b8a32448b9ad7568d4ca274cf0f6066060527f1addfa3a484743f66c64ca09ff38394128a899b80ecaff420a4d4a24bf44ff0e6080527f152e8f081e35367b5111bf26d890c6411c2fad393021ec60f6245c542193ffd960a0527f2f6f851250f72062da28ca7528fd1ecdac47295206aee44bb04ae8c1569d159560c0527f63616e5e3b3f1a7a4de50bae2b9628d600dc21fe02e8b000d48b229dc81959a360e0527faa2d809b67023928be7c23a9e3a6436258d51a8ee50e34c95a144cf9cf2d9e31610100527f4dbb9f316420b4b6f0a903f88704b734ee1c9b08a84949ca3c8f8c1701da909761012052608060006101406000601a600b7f0bce7192ca8c2cee8f6a4969de315bf7818617316247de5551ee9bca9f98a5b1f1600055600051600155602051600255604051600355606051600455", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x60d4600053600560006102403960ff610245526008600061026582819290913920600c5560196019610100376080600060a082819290913e20600d5560ed610320536102455161ffff60808091905251600e556005610240fd", "nonce": "0x0", "storage": {} }, "0x66bBEf07B980c8b5de6F3DB0d5CA7A0389C7f386": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x6888bf43c6b0a7bd72d3d4f360efc2fcf781b746e6de54a559882e71c4ac43a2", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x60f5ff91600aff60066000557f6133b9711c679b508736ed2f2a68fca7d4b1b912835742fb9dd74077c69c99ee6000527f2a08abae5a77926728c6ab0cbc4f81597dbf381b9162c36917ef9f42c63b99fc6020527f9abc7b34abd5117c02c1608a0397c757b19dd8644719be525176d7c9611db13f6040527f4e274ca06f8679a44b6c7d66f165c0c86aa94c5ea5653d359509dc6e8a4805bd6060527f4070778074d300ac50e862e4fc06c4149396762f44c15b6fd90917391f88e2996080527f881b5e6a55ab149fbe5a0ddfdd2cb487b9de8a1d29a61575afdcd2eb5a92345f60a0527f5c2e6bf54da29f38a89da143ea0c4e91d6c801eef8d9c0e267838ac85f71f0be60c0526040600060e06000600f7f67fcb88c6827df95a5c4a5f2547e65254ecb1b4d9a7ac77cf40b820e999e1f7ffa600155600051600255602051600355", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000011" } }, "0x7564105E977516C53bE337314c7E53838967bDaC": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7d059b496042f5250099eca0bd057a7162d05a02ce37330a5b536cd2e4c0186000527fee48cb9ff2f9b10445a8becfeb58e5119a8a83e7dd43b101bf6e1f5dd6b3a9af6020527f476d2cfa61f20f534739aa9c1f89023a4f1fae316859138a038cdebb87a7fe066040527f6b7a7ac05061f5e8cc20a76eaafddbdb811bca541786813629824f602b88562b6060527f36dd661024742f2d3fac855c9a98a06846a1b08f9f7d281167f79f77cdc773f06080527f0566af2715eb131035e0565b67e03096d6356e168932be528a6d62a6d65c12c360a052609d60c053607160c153603160c253608460c353605860c45360b760c55360ea60c653603860c753606c60c853603360c95360ad60ca53607560cb5360b860cc5360b060cd53600960ce53602e60cf53607c60d053606160d15360a660d253604060d353600060d4536040600060d56000607f60097f2c1ed359cc60aec22438443f3489dfc9b14ff971652c6f37440f4994122fb85ff2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x87f2957b7228EC6a0dd4F2fCc669BD2ED2B14E11": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xbc501cdb0096cc68817e5b2aa2eb7e97fcf45a56dbd22b6e2de2b234b51f12d5", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x7bc9700000000000000000023f00c00014ff002c0000000000002231081967d0212626262626266d01000000000000000000000000009010067e40000000fd000000db0000000000000000000040000000fd000000db0000017176767676767676767600000076767676767690061a7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06900b19717676767676767676760000007676767676767a010900000000000000000000000000000000000000000000000000901d6000551569100000000000000000007a010900000000000000000000000000000000000000000000000000900690159014671fffffffffffffff6f8000000000000000000000000000000090077f7effffff800000000000000000000000000200004400000000000000000000017e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10006847839214543589705209600155021960025560006b10000000000000000000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b00900919600355671fffffffffffffff15680100000000000000006780000000000000000719147702ffffffffffffffffffffffffffffffffff0000000300007ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000005901a7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a006fdac7fff9ffd9e13226262626262626000515900b7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7702ffffffffffffffffffffffffffffffffff200000000000651ce97e1ab91a900860045567800000000000000067b368d219438b7f3f68210000000000000022900990076005557cc9700000000000000000023f00c00014ff00000000000000002230080568010000000000000000901c637fffffff717676767676767676760000007676767676769002127f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe760fffc000000000000767676240000000000002b0576047900390136006557ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a006a0100000000000000000000036007556101111960085560006b0100000000000000000000007d76767676767600000000007600000000000000560000000000000000000090087e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0063800000011690166f121212121212121212121212121212126780000000000000019013057f82000000000000000000000000000000000000000000000000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200000363800000017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10009008900b6009557e40000000fd000000db0000000000000000000040000000fd000000db0000016a0100000000000000000000900413600a557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f121212121212121212121212121212120a600b557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f7effffff80000000000000000000000000020000440000000000000000000001901460006000f3", "nonce": "0x0", "storage": {} }, "0x97511db90b0e141ea4cb42e3b73fe3C24c3D5676": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xe0f8e02e171a2ef7eae37783ecfa6acb82cbacaaff229a4a403134ff420cb4c4", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fda62acddc27903598f1ddb505079f75a053a7fef4ccc0226f329a17de2b9b07f6060527fc2dec62772a59ab41d9b18a2c73337eaa9aa3fe8fc601987b1255f567d9d38d66080526020600060a06000610100611b04f46000556000516001557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611b2ef26002556000516003557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a060006001610100611956f16004556000516005557f57f8a6f7c3f645443cfb67321cd9c90976533d2cf4694275284018e7d00502fe6000527fc542900c2dc5f9792d3b72ff6102bd1e91f6085de62264ae37160378bcfe1b126020527f602b4b4f830c525256827f91011797701b9a95cd91a6b479634c0d8b7da6193d6040527f646afb1b2d301d0d563a1a041858c646ca0f5ad9c88933d039ca8054ae8e9fe76060527f1c805336320e07d97255daa4f56aa8f70067f661fd58e36f86bf37dceb52f4bc6080526020600060a060006000610100611c63f16006556000516007557f535cb327ee8076e255306a99e24004dc0fe803cdda5fc1b1c80cff2b2be4b4566000527f928b94b18ace4fe3705e3be1552c001258a8453a5c390ae9edc7667e6cee6e746020527fbd807c3b3183046f09199d87d5164eee161b6b65e77cd48d9e252f14fc278eb86040527f8c9b92eaa05719ff02813758277a97b44bee954d63c0baee1ed0d93a3e9aa03e6060527f342b583e2ce51c261daca46acaa8c051224903898e638c9d1ca2719c1d8d6def6080526020600060a06000610100611c1ffa6008556000516009557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c7760005265200000000000602052652000000000006040527f1e7b39a3889ab016e0104c5ab9a8ce088bb14bf824070d6927aa876a820f6f376060527fd40f3c998bbe847441d310bcf4853d094ba76414809556342a231e2fe65c63b86080526020600060a060006000610100611a8af1600a55600051600b557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f06567b1f15418bf2a6c5acd78e62159b8b682f2ef0b6f58a7fbe158943fc74d16060527fff848424bfdccf985cc7e451014000366747e559808a302682b81e678988fab86080526020600060a06000610100611a9cfa600c55600051600d557f7e47794e17a1bf02718dfec57b82b103e96d7e6f953e52385b498a5712cb7df56000527f64239ad45dc382b3eefeea8f23911594d78ca076317e9f9b7960b4f8151be81c6020527fb218b903bd81401bbf734d5a2315922f0c406ec792fab423aff997bffc0bcf526040527fe41441ed659010822b187ecb4eef5d733776c9c9526d20ad3560c87afb3d07756060527fe11cdcb149b52e6547ecacf066c0a92fbc349c3cc21d7e47eda1467ca3c1dafe6080526020600060a060006001610100611a33f1600e55600051600f557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080526020600060a06000610100611bd0fa6010556000516011557f4230ac0ce5216e094ef085206a48af255d3bfb7f11f1154fe86e93cc01c0540e6000527f7d6fb2a29ba4243be0d466cf073f0c91f381af4aabea1c1ab16255c03a79fb9b6020527f06e6dca6036bed2bbdd06d85cd1c256e5262d952a96d0aa5696e8cbc6fb86d486040527fe4f47823ae5cd8f8e881941248e114c9d191868f51c6ff8d4a520c2b1e619b486060527fd0be45345ec0957cc0a7ca0402c3bbadb04a8973ed59064a43342929d75167ac6080526020600060a06000610100611955f46012556000516013557fe6d744e8c84673f3796ca2ab4cac4e32ece670c0e4707639e18549b4e9dc57426000527ffccafa6cdef92ae5f09ee8dd0b500474a4363e074b1b7c1e6aa9eecc96f5c00d6020527fd4bfa61ec6a1f984eef74fcdf6e9f4baba748ac2a645492b4b9ad71045bdba466040527f58042d82f7404f2ce84e49ad7188d2ee525fe17a2d0c225521963800573d75406060527f32fbbbdd801c61ad130150f74e7b98a4ddc2f40bce85aa7e0e50de48de7eb39d6080526020600060a060006101006119d1f46014556000516015557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f02fffffffd00000002ffffffffffffffff36b4f008f546db8edb2d6048f529706020527f02fffffffd00000002ffffffffffffffff36b4f008f546db8edb2d6048f529706040527fcfe9cd9e3865d36eb93ec8c8aefe537dcefa079e55a50799d03da8403f839ae56060527f84e5ab7dc40b1bfcdb5cf45020e9f98a6557442d5792722e71d6580b5324b7256080526020600060a06000610100611c12f46016556000516017557f4ce6a314bf39f6a13a2d79f56120c5ddc884ea3dd630b091501f462b1fb1ec956000527ff74b8bf1750c490c32e2b06d4aaa7a9cf52ca9a6174b528968ec5934239d00ae6020527f8b8f147f6325c4e4bf531d0d7452f1d64102fcb5fd74338cdffee1f27dc64a9b6040527f01060c697a1b1145fe7f273366539189a56770f32f68259080022da2d03fdcf06060527f1eb393010971afde7c33346378f4ed9876480c0493093869c10e6998d5e4ade06080526020600060a06000610100611bd9f46018556000516019557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f55555555555555555555555555555555555555555555555555555555555555556020527f55555555555555555555555555555555555555555555555555555555555555556040527fcadaeb5d0685aab38931aa408da708e1fc2240cfd3e692405ea590fae72a42a96060527f2fde0a17840d08b2ddd90567fb3eb219a4498af7312edabca8381bbc053f544c6080526020600060a0600061010061195cfa601a55600051601b557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080526020600060a060006001610100611bb6f1601c55600051601d557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f55aaaa55aaaa555555aa5555aaaaaa55aaaa5555555555aaaa5555aa5555aa556020527f55aaaa55aaaa555555aa5555aaaaaa55aaaa5555555555aaaa5555aa5555aa556040527fc9d7038f7046df28b1c52ab47bbd9e743b96259dc6c1a5aa37bd0f61859ea3996060527f7789d6c41415f62a7c6d42c4c03efbdd920a5687f062ddeb8903830b9ba59fc96080526020600060a06000610100611b81fa601e55600051601f557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527010008000000000000000400000000400006020527010008000000000000000400000000400006040526f120040000000000000001000000000006060526f120040000000000000001000000000006080526020600060a06000610100611b87f46020556000516021557f88ef4ac1bd71522fb119c27ada9a3565c4c59b719ef1c5ff605d3ceb939b00c16000527f8e3123731ccaa2d15712f5427352e4f292fb6de2e48205c36b521d47903130006020527f360d418db19e848c902f3e9b0687f936a878b8aec3fc44898fcc8bed476f90886040527f8bd66669232a7307e3af41ba9e98e1c9bcc6c2cb1bcd19290d2c6d530b3806b36060527faff058330b9cd98a00323167cb85d0db1f61479c03acf5ccf081186c8913d9796080526020600060a060006000610100611916f2602255600051602355600060005260006020526000604052600060605260006080526020600060a060006000610100611bc9f16024556000516025557fca849b4c9a4205b12124c817ddcbf4847c033e130b3a0d20ed69f6b23c950bb76000527f3dca9dac712d28e081bfc4baa2adf4f8682ae2f4f4b9da7c003ac5ae8a358e646020527f55da3ebc3e6253f26fff786271effe89802c3880bbffc899f96014ca5ab0cb686040527f2f8101fcbb1bb9df8d89b1cf4d9b16cf539d2be4af0b3b593f3c3b64f15200476060527fd21c42acb6c9d34469fe759113a847175edfa8a629b9f818566f46dbbb4c38246080526020600060a060006000610100611c47f16026556000516027557f99ac9dde4f6675ca1d36afbfacf04bc463c2cfbaec70ea51c9da4de693cc2b926000527fc4796c56cf05874d9dca8ad22e242367c4eb946ef1403e0f0b31aa8a82d3462a6020527fe29fdbe9aad9dcd0bdd43f8631bafb406bfeee1928c5c95b840831d19e5672db6040527f35643c199d007509e9adb05724cac3f6375bff7be0cb8809f18432a666850cf86060527f8d623be41859ad127e15e5c841d8be44e9f745d8110b2aada89e60ceae897b876080526020600060a060006001610100611c5cf16028556000516029557fefbbd6857db26ab2faa74a46e8075a2ea1950720cb94fb676e7ca9a5ec90def76000527f9b64ec29fc397751d4baa368bf4833e82a85a6b315280fa27d1b948022547ee26020527fc4a2746dce7b72a9094289836387233b097720ad3a65622b259e71a6f28b2aa66040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611b82fa602a55600051602b557feae17c0e1411fa0aed7bdfd3afc1e59f85b60e19a8f8e2fcf912481ce42c6ec86000527fb7f329f0fa26b456c94dd7728a9c795655d39144dd37fa5ab2d16badb39a9a0e6020527fc6b3b1f287e23277cb1d27608a95a428207a8ae1721a4a004653815f43e252896040527f61d358f21da2aa3a593bc15aafe7a88217556401d687cc10bdf5ee5deac2a2456060527f44bdc7b569afbecc115de3aa4f2b2b692b38c3095c830ea4b9f8a21b1cc1dc7e6080526020600060a0600060016101006119b2f1602c55600051602d557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fe6631f1c321035ee89178482078ce3428d97ef91de4f2c9fba2dfdf296eaaff86060527ff374e4cfbda2da61927aefdf99f3d38d4aedf1ea9e99b3d37505a29858a26d906080526020600060a06000610100611952fa602e55600051602f557f9fc62f83fb8c9dd1b9bd9346fa459174294f44b2aa3f6bcafe23d61ae5e1b9126000527f6133ac5a4a5a4732b24e25d0947ba4c399039d326cd81fca87102d6114a2f3f16020527f1838fa42b4ce50f86fe545cd9998b4fa08926d3fb98b1a75eab0a0c850488e1f6040527f97fb30d0bd03dfbbe22bde034b631e6c4b44981d7efff205ec83ed80c8a244886060527fd5a8987fcd6bb092b26871d3b3d7214682783e412e2d247a6ab735a59bd692046080526020600060a06000610100611b52fa6030556000516031557f2b0d74c8ad94bf9168305e77b930d7e66b1467439fcfcae9ae160cb4681abd396000527f08180ce104c5ffd56ab782f4b7a2df4255eefc0b4239f5f84335127f744fea0e6020527fa0c8527c9cc5c2221dc644e7479db9444533d56d6da5d9dc33bd8d86e2ffb99d60405260026060527f46fe64157cc965de86c8479aed407caf925052267ed6cabd25e110bdf45ecdc96080526020600060a060006101006119d1f46032556000516033557fb5bf3fda78cf36ef7037905d5210611ca0de5a749cffaceef0f98a37752c03886000527f41ba296bc996785e233b10dd0566adaeffdb62aff99637bf86b15b4dec6ebbb46020527fcbba6c16b4894b5e67d4e9a73d33a5820c94347b14db0f6c0db20b20d654a87b6040527f2a95275f9d50e9c9758b1768b718224106a7bf810d5085f7ce468ed680088e436060527f0a1a0509b915ed3d0d216cabc9617eab026dcb8c0bfc879deca2d66107020dd66080526020600060a06000610100611964fa6034556000516035557feeaceed8e997346864eb79cecb3de252aa8af678da0add3727718b7cabd681e96000527fed12432d2e8e8e5ddd5e754e444a6703503c77cb78b07ff9fcebdc8d607fd3fe6020527faff8368c4d1b501184a9f72d061237b2e80a616b88868fb16af22dfa1681dfb56040527fd01988930efebb541269070bfb6fd062aae89208ffdd7b3dc72401094bdfe39a6060527f32eb46ca28cfc45005fbd8dc3cb6ad45fa747510279a672045c4055bab2cf83c6080526020600060a060006000610100611bd3f2603655600051603755600060005260006020526000604052600060605260006080526020600060a060006000610100611c98f16038556000516039557f484f37e54c5295cf36fe10f6aff8c229bd9aa65603a5219b46c6129f33d83a906000527f789a4669c419bd471741f57ecea4239aa11fdd902e04af9e29f13ed3ec9c796c6020527f918a4029a6b2b0b14ced5c0c3038378041dc9ed86b2b62c2db603c3a381ca1136040527f966eade76bca84cb2ce407de7a840f6d19190cf918c12d9e3a99ffcf4566a2f86060527f75fa0692a5caafb1bf87d436f99e88f5c6c28a176807517f6e64e0a34b23e63c6080526020600060a06000610100611a90f4603a55600051603b557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527a0200000000000000000000000000200200000000000000000000006020527a020000000000000000000000000020020000000000000000000000604052788000002000000000000000020000000000000000000000000060605278800000200000000000000002000000000000000000000000006080526020600060a06000610100611ae9f4603c55600051603d557f6b56c62902da512a9f2f6a1258155ed595a09172d2f5f45b04be21552e910f986000527fbc305a51d5165a978c2d6464030685c2d381e622c87d2ae925788ea762cda08d6020527fe2d02b525f2d094366031877ebeedd2c6016bedab9b0616283f4b86756c02c916040527f10d424688c564c78fffbf8100adea4e5df2b26b81e2d34f36b12a6debedb4a656060527f4321dc8003645b904eaaf90a5a8065693f063d8590901c68b501e6ba3bf358e96080526020600060a06000610100611b44fa603e55600051603f557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a060006000610100611a76f16040556000516041557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f55555555555555555555555555555555555555555555555555555555555555556020527f55555555555555555555555555555555555555555555555555555555555555556040527f625bb93891671304e13ac8dfccd4810b590321cc0d59f12879c0dec48bdda6566060527f57a412e8fb34f5ce3705734c4bd3ef4bde25e0afa47b9da61bdf1f6cd39a00766080526020600060a060006101006119e9fa6042556000516043557f2bc778e01d771a8a4d88e33c2aebfbefe484eaf86af48a14ead2133545084a2c6000527f095960ba6bdea4f7c1f23832b6b18d34d47c06b4a6b2b71a5cf78c0cc016fe3f6020527f7cbf2333cd08c279b26b7ef66d46f671f0d80fbe95dfe456b9a81eb12bc754396040527f8a292b9ce0dd42d054f219d841a85ead3b314c92f4bc5fc2a14c2894a82723596060527f09b415cbdda55d538a4f1d4a7424727e00a03c1acc229a67a6942180503fa2106080526020600060a06000610100611c4afa6044556000516045557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527620000000000000000000000000000000000000000000006020527620000000000000000000000000000000000000000000006040527fde78cb7d6ca1833eca52dd642e9e385a572d0a13a82cfb801eb93accac19f5c06060527f2b8c37f2bf887ca80a8ba691631b072b925c5cee29092de8f0ab088c334b5e8a6080526020600060a06000610100611c3ef46046556000516047557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611bf8f1604855600051604955600060005260006020526000604052600060605260006080526020600060a0600061010061191efa604a55600051604b557f927dfee61e50c7421808524a7a90f8501e0ae985faf4ad0feda06cc7ab3ba0376000527fc911cb77f5fbcc18d1fa9a2473e882ce34eaaeb259e2e3576aa121f3ceec5a716020527f78760ebce4be5905ea0b78337e1eddd627d8a997e121c691395697b909af4b676040527f3fa97b02bdb27aa7403c6dfc2692e25923d4c079e9226030c846ed22dd4f986d6060527ff565e832ba9e1d1285b75c6eecfadbe08a5164384d40a6d42c44e9b921116f746080526020600060a060006000610100611c40f2604c55600051604d557f17d331b36f45839e05e4672575bbfdd5ce3de9ad758c5956d3c91c9f723658006000527f9e0eaefb650f77c7c2f1612e42149b83d25d130026c2990fadfd7f5f2ec321616020527f3186b54dae60571d2ee512b7083864c201a9f729a1c93e530cef6cd6dfe5743a6040527f921f646ea25327d75882e7d17671b87bfb904fb78d1c5819e4a1c582ec0e309c6060527f2d3b43bcfdeda5ed8ea601d767c7831136856a80af463726d9185b3a026e0c6c6080526020600060a06000610100611a5afa604e55600051604f55", "nonce": "0x0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f0dd9ccf5a133f80f284d8119e5766fdc78abed0168e6bc910b5e0176c951e4436000527f0628c4db9f1f4f2178752223a627a0cb465ed2518827a95123c2ece65f44b4316020527f0499075786280ef4bc72e7855ff33456d8c6f125b7d1d9baaad011ea2ab9e6986040527e97cdd77deef597a2bc16d88539d254cdaa55b105a027c6ab4b83b1868370fc6060527f082be0895fb2a2e368b460cd15b64c844c38b5dc16a4b1c92e5e2798975c56926080527f1ebcfe5a688616de67316604ecdea93879b25612a3432ab4e14a26ffb53d128760a0527f1bd248bdf180ee660835d6b590c4fe6c50ccd0a060555ed2c8f37629165753a360c0527f038ba6f6510fae553b2b3ad7ed616f923858382c71b8054054746de16bf76c6060e0527f0afe62b544bd5e08f5a4d990f3989a0352495686a22f480a183823c5c0b6c3c1610100527f166f65225783504282adece0b7a23103c45a60be1b8035718589cfa007dd5bd4610120527f0636a7022c573e3bb500450a6a6781193917487a4ced2aff1a54f329a257953e610140527f1e1b2efa9cab213ae4dbff879a0610251c40ac9a41dfea3113eb5c8318c44fe3610160527f0919d4b775568b4448a2598e2aa74143d4cd29f5f94c6993cc4858c9d490b9cf610180527f2ce72450da563b7b4d652c83f0442b76d557e4eabc5519fd14d1fae51dbd10f76101a0527f0c5ddd9a6ddf253c840f29e6f1f5589039a3d31d8969dd70bc7786f7c14992fd6101c0527f0464740f9667555139ab1d405612f072c81773fa2df80237f0f30d4dd8c92c846101e0527f2c984c8a12450a4f78d13b602226bbbd93dde861fcc37f6a60ec69721d880195610200527f1356ee4dfb103fde3ed6d9a430fa55187814fb6f1688f5e5f73be48bac31d74561022052602060006102406000608660087f823050ef163d7d484e8a5a18e75335c1b282c3e3296a1e348ef6be914ec253c6f2600055600051600155", "nonce": "0x0", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f014578955e56f6b52f72afe95be88f8080692a1af480fc571addbbca08d5e1b26000527f6b65fe58c31529e42775db26d33a3b91d21952719de31b77b4c57f84c71e69276020527f4a78953ce832910d03e29be38626662621d587622aa95bc1aa396eb65c0fc9de6040527f9278fe0e25e1b7c612b89b3219bbe81f9a558637ee40ad3e6b4c23f00be36cd86060527f28a2e51b0fa05f2973fcedb329994bc6975e405a52336c9c1d6d7f65a3f041726080527fc4cb93a0c12afab3cf3fc961123f659e89386c086b8f8c03d651ba549d34411260a0526040600060c06000600a7f61824de34891d5dd5d68d637e3889f76a90b610e42c8d6340cad9ed9ac966da8f4600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x6000600052600060205260006040526000606052602060006080600060016119fff46000556000516001557f5635d69609767cc55df05457febb80b0042d87e81eb1d22f226de79a76c708d56000527f7738ef82f2a4e2832f532706eec1556d2f325c8d5cd7930f9b3b4a409c85a71d6020527fe23a41f46cdbc28e002d9f6cc7b11c4e259671f69e9d03f4f4e45b86c9d6c5cd6040527f2531f0ec7f10dbbfff9f4b7a5d94a4f4d49ad9ef6a3de8f38ab1e6372d1e5e32606052602060006080600060006001616727f16002556000516003557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fb3bf27de565ff9a8d996e8c6f4229b90d3d785882396fc871a67df2777390a456040527f4e6497845945c0d9d7b5686784825970f0e17404398ccd269eecbd3cde93adef6060526020600060806000600161d628fa6004556000516005557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f90cfb0a7e935f0e0e195c789fbb8fd85981430909cf043ddd784e13765fea44e6040527f4788f359d9f79d7e1c54ca4d982556c9b1760282a44c6344edf82108ea60b27b6060526020600060806000600161dfdef46006556000516007557fc5c3f0ed9812b3fb0cefc109617fffd894091214ef719cb57933b24c3ff7ea166000527f34f0eb248c0ad3ce9f7420c2fc2ad0ed06cf7fb6a63a679e89e7f63806706b086020527fca6f9a3c432db550d8a783c7a39e13aa23a7ed46695c52666c858c6a85c0743d6040527f568ca38fda9afebc390205b01ffe0b32479e93802e56121bc36986b476c5bb2a606052602060006080600060016201318df46008556000516009557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f5182ddea0d6c800d464f74dd82bbae46b370e73745a2ef5be0d1cd78e8b63bcd6040527f4d8aa48e8e4aa324d6b5b0568413627f3088650584f26f7d9d230dd18bef7220606052602060006080600060016001615f50f2600a55600051600b556000600052601b602052600160405260016060526020600060806000600161323dfa600c55600051600d5560006000526000602052600060405260006060526020600060806000600161e876f4600e55600051600f557f9cd1c9e669f25ff0d75358a68b742c499dd507b1929e69211f9dcebed088d2396000527f3197fe1803571e9dcc547d0914727e57a04f413c7fe0e80df6178ba721e7391d6020527ff6f60e0b8b56deb4215aa5a8791e67cccbf67bcbf28a00ddc01aa9e2834bcba56040527f5d82dc04d961c9baa8607de329bbfc5c0fda7606fa685b8f637c96cff204986e6060526020600060806000600162015414fa6010556000516011557f48e61e67c212051774e251f4694009e70b0c8cd3e53f546bd571a89cbd5d77866000527f482558bb150d8505183572baaf7a364052737fe23c1ef7883320a2cb0353921b60205260006040527f2048679e6e96fbd4128e4da15a24443d8118cde5a019a700164135e810bd0a4a60605260206000608060006000600161e2bbf26012556000516013557f36acd9425393d15e3eb4812d51043df238ef8864cf7e0d11b59e4fabdb18cf8b6000527fb65dd238c5703c5cf7eec9884f723f689330e90cf77801118035141dd442c01c6020527f8d4eceda1b4fa1f96eafc840d34ff01e2a1dec56c33838a8141d1f9b1d4811f56040527fffff8ec6cc8d5304fff1733341f73d0448e8de858f72fe1afaa8cdcdd894416c606052602060006080600060006001615e79f26014556000516015557f16cf9ac0524c5cdee7ba74b3dd710d75cccfc885ce042fe1e95668866a1bc05d6000527f7d3dbde81de980b22866b25af9b31ad7a8f45bce7feb7bb3327b91edc5536c336020527fd28c824dcb997cdfe976e7f9e4f62c09ebf1d53e969e66f045e2cd686f3996e76040527f11e5c0bfbd64e28a8078a0d9ee926aecad8bc52d65cbcb89892a169afab5142e60605260206000608060006001600161e126f26016556000516017557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f2f63ff12ae5e48349a3cd273ecf7a16bfd325fb80c1b3601bb1c3b6958fa76416040527f4641561778dd3463d0124b1fd9432a9cf49d4e22c761e6ca5f2a88bda1bfc05b60605260206000608060006001600162018551f26018556000516019556000600052601b6020526001604052600160605260206000608060006000600162014e9bf1601a55600051601b55600060005260006020526000604052600060605260206000608060006000600161446cf1601c55600051601d557f8bf2abb1d2d1ded3bc18adf47c552ddb500f5e4936d62c2a4bbd8604e1b89b086000527f69c2dcb690ba7704bef53049a822ac4911a7eda430bf3f1919e1ccc46e05171d6020527f5ad9fc0129eccf96c24be1edbb6d90b2baff6286288c52b86544c944d778aef56040527fee6b147e5aa16966cc768773eeba18d4ca5ad8e7b1fed292547c35ada4548eb760605260206000608060006001615edef4601e55600051601f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fb3882d7cddbfb1aeb96ea275eeba65cafd3c057d53a4650c8a623dc5d90552176040527eff0997551623a79a5bc1c2e0285120219d911b571006d7178d7b70be8506ae60605260206000608060006000600161c05ef26020556000516021557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f0535a453701693dde78ff230e8ec5482f5a1087b3519b6e27f47fc871ea52c236040527f46e1c6e229537c9c25a2197a51d331418065a8a749b8c2caecfeb4138ddc661b606052602060006080600060006001620149d4f16022556000516023557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f6fc20df9f44aef7af01c979f835f67e0d1426f0802d6c4697844fdb5928d46716040527f4a8986d60152dbe79028c9854f61f3bb229d465ed2296e191a59caf1e8f8196860605260206000608060006000600162011d1ef26024556000516025557f4d11001caf9bbe5571fc607b41905d585f8f1156c87c3b2a1402fc525802790c6000527fe90b1362fcba1f8347e103984f99ccfec324a2f9f4635c4776259f29f60b4a1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f1454f2b26fbdfb65f37eded4dec22e9cab0feadbd60b34913691b1d08c7b008f60605260206000608060006001600161bfbef26026556000516027556000600052601b6020526001604052600160605260206000608060006001615a0cf4602855600051602955600060005260006020526000604052600060605260206000608060006000600161f2fef1602a55600051602b557f091972bef5bee21dba19e42b89499d24001da47956025c9acdaa32f2caf1aceb6000527fce3ffe160fbd50f0c627da01036b788e8423201346a6e7ec67b8e81f69d6b41d6020527eeef5f26b4d5201c901905fca0a0a3c1f53156962becd64ce499aeac07b85086040527f024974992117a12a2c64e1b3a8e547e45418b905b5b644bca78eafefc2582ce06060526020600060806000600162018411f4602c55600051602d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f19ccd9280715e451937d27a22990dd8c7f2528581c8d0f55dd3e0c04a68adf2b6040527f3ab9a559dbac4213538275eb6df877b42992eb9f36cc3786c62684ceddb0cdbc60605260206000608060006001612800f4602e55600051602f557ff40546baf9aea56fe68bc14aaaa1e9d21509e81f21af4987b84fa5baa893cf046000527fdfd0c846d634ef20cc13379a6382995d388806421855e2c64310a6c719bea91c6020527fa5ba6c38881bf21b5a7dcfdf690975abd5e5cc39bef2af15d7f5d0d9e5e400dd6040527fffff424734ae111844e2ba4fb368be44abb4ae3505608497f5d12526ec74f8cd60605260206000608060006001600162014526f1603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a900a637fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0407682100000000000000227ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0901a191a7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a0067800000000000000114901d60bf55778200000000000000fe000004000000ffff000000fffff7006f800000000000000000000000000000000560c055760fffc000000000000767676240000000000002b05760477e40000000fd000000db0000000000000000000040000000fd000000db0000d37e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000096a1000000000000000000000684783921454358970521b901a60c1557f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000017f77676767676760000000000000001002e000000000000040000000e000000000901c682323232323232323237f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd901d90037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6005900760c25567b368d219438b7f3f600190140660c3556c0100000000000000000000000060051b637fffffff67b368d219438b7f3f90131c6f121212121212121212121212121212127f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9011900a60c4556000637fffffff167bc9700000000000000000023f00c00014ff002c0000000000002231086f121212121212121212121212121212129014191d7e40000000fd000000db0000000000000000000040000000fd000000db0000d37f8000000000000000000000000000000000000000000000000000000000000002900b900b7e40000000fd000000db0000000000000000000040000000fd000000db0000d36f121212121212121212121212121212129002077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7effffff8000000000000000000000000000000000000000d9000000000000010760c5557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6a1000000000000000000000901d136b1000000000000000000000006c01000000000000000000000000900a900360c65576013590cab83b779e708b533b0eef3561483ddeefc841f56005177e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a006a10000000000000000000000a901c60c7557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007a010900000000000000000000000000000000000000000000000000106c10000000000000000000000000677fffffffffffffff1a901a60c8557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd197e40000000fd000000db0000000000000000000040000000fd000000db000001677fffffffffffffff1b0b7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9901660c9551969010000000000000000007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee900190066a100000000000000000000076013590cab83b779e708b533b0eef3561483ddeefc841f59011067cc9700000000000000000023f00c00014ff0000000000000000223008057e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10001090126801fffffffffffffffe6f800000000000000000000000000000001b900360ca557780000000000000008000000000000000800000000000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b0090047ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90107d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97a010900000000000000000000000000000000000000000000000000678000000000000001900890191619901501717676767676767676760000007676767676766c01000000000000000000000000901d900a7f7effffff800000000000000000000000000200004400000000000000000000017f82000000000000000000000000000000000000000000000000000000000000000790141560cb55717676767676767676760000007676767676767d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9077702ffffffffffffffffffffffffffffffffff000000030000651ce97e1ab91a06107e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007f800000000000000000000000000000000000000000000000000000000000000190131760cc5567ffffffffffffffff760100000000ffffffffffffffff0000000000002e0000006d010000000000000000000000000090081567fffffffffffffffe777effffff80000000000000000000000000000000000080019001900560cd55717676767676760000000000760000007600007a010900000000000000000000000000000000000000000000000000901d600767800000000000000106901b6101117bc9700000000000000000023f00c00014ff002c0000000000002231089005067fffffffffffffffff7effffff800000007effffff800000008000ff0000010000678000000000000001901d901c681000000000000000007bc9700000000000000000023f00c00014ff002c000000000000223108900290187806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a762900760076761e000200767600000000767676760000001401760fffc000000000000767676240000000000002b0576047677000000000000000117f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a57a01090000000000000000000000000000000000000000000000000068066aa0a5319bcf5cb408901960ce550a7ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0610111900b60cf557cc9700000000000000000023f00c00014ff0000000000000000223008057e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000111c7bc9700000000000000000023f00c00014ff002c00000000000022310863800000000a90016847839214543589705263800000000560d0556101117f77676767676760000000000000001002e000000000000040000000e00000000090051c777effffff80000000000000000000000000000000000080016c10000000000000000000000000900760d15567d021262626262626677fffffffffffffff137f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f12121212121212121212121212121212651ce97e1ab91a900990071463800000017d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf99017027ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff6380000000901860d2557f77676767676760000000000000001002e000000000000040000000e0000000007f40000000fd000000db0000000000000000000000000000000000000000000001901790067702ffffffffffffffffffffffffffffffffff0000000300007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0790016801fffffffffffffffe7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00181502778000000000000000800000000000000080000000000000007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb01419166823232323232323232368478392145435897052180a651ce97e1ab91a7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200000a60d3557f7effffff8000000000000000000000000000000000000000d900000000000001774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a06016a01000000000000000000007e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a001290031567b368d219438b7f3f6b010000000000000000000000079014651ce97e1ab91a7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9007760fffc000000000000767676240000000000002b05760477702ffffffffffffffffffffffffffffffffff000000030000638000000008181b7f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a56801fffffffffffffffe9001191a7e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007176767676767676767600000076767676767690139002686d5adef08547abf7eb6910000000000000000000020a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f40000000fd000000db00000000000000000000000000000000000000000000011160d455151960d5556780000000000000017ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb090187ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff6f80000000000000010000000000000000901460d6557f7effffff800000000000000000000000000200004400000000000000000000017f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a5901a90077e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00680100000000000000001715901d7d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9760100000000ffffffffffffffff0000000000002e0000001714712000110000000d0a300e750a000000090a0a6770000000000000007f8000000000000000000000000000000000000000000000000000000000000000900990057e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100076fffff716b61616160b0b0b2b0b230b000008010d0a2b00900490126f800000000000000000000000000000006801fffffffffffffffe9001686d5adef08547abf7eb76fffff716b61616160b0b0b2b0b230b000008010d0a2b00600190089010146a10000000000000000000006b100000000000000000000000901360d7557ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000610111149010712000110000000d0a300e750a000000090a0a63800000019007177f40000000fd000000db00000000000000000000000000000000000000000000017f7effffff8000000000000000000000000000000000000000d900000000000001141b7ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb06823232323232323232306147f77676767676760000000000000001002e000000000000040000000e00000000060000b197f7effffff8000000000000000000000000000000000000000d9000000000000017f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff0000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9009901a04760fffc000000000000767676240000000000002b05760477ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9018901160d85568210000000000000022671fffffffffffffff017f8000000000000000000000000000000000000000000000000000000000000002778200000000000000fe000004000000ffff000000fffff700900b90167f8000000000000000000000000000000000000000000000000000000000000001774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a900590056a01000000000000000000007ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a00031667fffffffffffffffe7f800000000000000000000000000000000000000000000000000000000000000017900a197ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000068478392145435897052901060d955682100000000000000227702ffffffffffffffffffffffffffffffffff2000000000000390150a684783921454358970527e40000000fd000000db0000000000000000000040000000fd000000db000001901a900760da557806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a7f7effffff8000000000000000000000000000000000000000d90000000000000190187e40000000fd000000db0000000000000000000040000000fd000000db0000d37f820000000000000000000000000000000000000000000000000000000000000090117f7effffff80000000000000000000000000020000440000000000000000000001760fffc000000000000767676240000000000002b05760476f800000000000000100000000000000000960db55901760dc5560006000f3", "nonce": "0x0", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000dd": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x00000000000000000000000000000000000000000000000000000000000000de": "0x000000000000000000000000000000000000000000000000000000000000000e" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556002496002556003496003556004496004556005496005556007496006554a6007556006600855", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x6101296000526101296020526101296040527f69e81e3e7395914bd7a174171c2abb5872a3f74bad925e171848173397d0f4ce6060527f305d0a55de9a15923e02507df70929ce7a6e0475b4153dfda8d31734ca31a7296080527f6f40e534fd50742c50dc37c0434cd6336a9a5eb9a2e45ed8d975dbddbce661eb60a0527f1221005f45cd8a15ead74d3531129fd35a822daf4255b9cfea9dc0a2e5bef40160c0527f326aeabec0290bd67bc8c0835c9b899e66dc95ed43ce31d3580fa75ceefdc43160e0527f897c7d3a7fc2e9db1eae97afdb1cbfdae405d6093612313eb18b23781d21ec6b610100527f398f99408e87f8f74c7b2df6c46c35547884c8a3d4e9578775b11d452ed8f615610120527f7c6d97d68312ab514050a3ce3beb54356639efac32d6945047635cbe25448f74610140527f1ec847857382073929b34276a0e24b618cacc3f231dc32bc7f0e6599459c1ff6610160527fcb3707198b19ed5a4bd071c3a57a194e48a9a63c4b7de8e6954512bb6ab2cb55610180527f9cd5eb4f6f1430634f33e3d0cc775581dffc61ba1d1e3d188c9574d3e01576936101a0527f467247bd7ad3a43bd64bba6815bb51953d11ffcc1d26572d43c48e478e8c5e996101c0527f397c09d19c92b79ff9e7eff33d517220dc0ae525cc76b8bbf0407189aadbec236101e0527ffcf0525acc205a9b2f0cb0a353e5b82c0da2b68c042b8a4212682f22a1aec7c2610200527fc3d4186bf05e8a8785e0c129a5a0d951f82d409eccd3d89237fb46b530f1de4e610220527f25f22b01d268d08f7793386bcdd8a84426761cc3c231cd1eabe8eb6af296e082610240527f2efeda8ce18279934df1c2f78981298c2b1982e1460fd2d12a2cab72134f6ef1610260527ffcbeb4de92c1037e3aff1bd001b5c9d763fec0ba3c782adf56d278f055d6c67c610280527f49aef127fb8b37b2bcc87b5201325b5c5b6bccbb5a9da51b00942fa86dc143f56102a0527fdd86c4c44ef5fbca928a90b54ae77be694ea2ea2b601356817c81882979e281f6102c0527ff8e07e025ebd4a65c76f68bc9a6e50c83ead6ab102aa166d0d7a687d3590c44b6102e0527f78b0a61e9d2fcd1813363be2cf16957ce8cb1285f90b91aa32ec305a1233ce2b610300527fc69de814bd478ba07ae5167dc1686cc2dda01fbcdce97d09c16cfc6a6cab4ee5610320527f2c34769a8e26508f6d287cd1a95d355928cc5dbe0580707db6d3ac4dc31d150f610340527f49b59eb4f467447d0cc6113ab1b63ab67d27f7ae398d1d432582c2e8f6a4dff7610360527f550e23fdfa28e38ecc6b28ae82e8a26e0d8cca9e625bcf0897816de7fb8bb827610380527f6a3614910a6314bb3b7f081a174054536b82bf225bb41570f6bd385558a5c8156103a05260546103c053603d6103c153605b6103c253609b6103c35360ad6103c45360df6103c55360226103c653604f6103c75360996103c85360226103c95360156103ca5360396103cb5360326103cc53609e6103cd5360466103ce53605d6103cf5360cf6103d05360ce6103d15360fa6103d253603a6103d35360be6103d45360436103d55360ef6103d653602a6103d75360df6103d85360de6103d95360086103da5361012960006103db6000600060056301174bfff25a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e0516008556101005160095561012051600a55604260005260036020526101006040527fdf5f74a61ecca030138e6021dae95a5b368cae98b66c171812d2338bb86483e66060527fa5d7c8cfa18cda53cf98f7826fd3867d8fe9dd095e50d065de4d34d1cf88d48f6080527f0f9bdecc79c974a38d471073780296aad41362c1fda9885d9e789cab4b1ae54e60a0527f5aae2d5ef85a4d57afe48ec9d966da9ba744d517f8fad9f5502824033f94699360c0527fd55b0e001ee8a9e537e3761885d8cc05eaea065308f785bcce96f071b0853c5f60e0527f6c86b21c7df065ab5e94f5b1f69ce88c2e87fd50a9207bc9e29b2242194604ee610100527feee7d72b553031c54b89a8db874fb6946d115fae9037b30e77b8c0e39b50f4df610120527f4baa678533b3b484496b3321f1a53313d85cebada6ce98cfa7545e9b378cf193610140527f2032fd1ac0270d38f02e8432ec8d494921d7b7c706d5d5b0d7e0925ac818aeb3610160527f2835e066a94d1150ca5dd1af7b36b3105c9999b8229295830d1eee70dd73ad396101805260666101a05360fe6101a15360976101a25360c96101a353602a6101a45361010060006101a56000600561f68ffa5a01600b55600051600c55602051600d55604051600e55606051600f5560805160105560a05160115560c05160125560e051601355603a6000526103e4602052603a6040527f59cb660c0826be7706b5e062b238ad17fbf96d2eae2d89bc93e9881aea0495486060527f0339ed057e9aa557c676b245344845451ecac965862814cb13ad6a1d45e82ae26080527f4d1fd92e4000935a20b6909034d34b01b4e7ff6814f649ac3bc3dbe71eac3cad60a0527f69f3390bd3ce4afee1890e88d0e541c58019a9df73a2cd66964c2d034cfc5e5360c0527fc82d4950773b57d44e7161528597236e3614cfa5e54cafd8352a5abe115f44a460e0527f31760e86321b4347bb7823deea70704ea503067ecf4683f0ba5093d200ca45ce610100527f522e9393efbb864ffce417d0120084c0eba76f2fd2769e8cd5e71e0c927d5390610120527f030ab22e0ebc72b408291052cacc5ca32c1786a5888a527d74a72a6368a71a98610140527fe1fae46ccda64d1b1d588bc1ce80ee638626562b201e1fc23370f2b986af0f70610160527f9835a67ea548cbdd5cbc61a66a6feedf57f514d8216cfbdabc34e5fe985851c1610180527f0fd4604ceb36c7c98a58e1e3dbe176da1f0b92a858cbf7b66545cf28162057286101a0527fb8078e2a9b7fe21cc4bd3a6581c33056ed4b3031442d3c6ed9ef165634b3a15b6101c0527f29d8b959e94d587e725e5f73a69157ab9a9a60470488bbea5cb6d005066c9d726101e0527fcbf1d991de7de7a45b29f5408a8779319a21ab4f7ed873578ea84fb2f5c3a9f4610200527fcf72073db33f80ac63e9a12c825ccf52658f098e6f30a7a2398cc20519979cd3610220527f7f55da0405738fc69a98caf7a59ea205d4fa84efe99748effd6e763cc34f85fc610240527fb2aa10c82c9b0bb4bb6d916a57e70fd97d8c099af760268d684bcdec58b71417610260527f85008a08c9978857a3e7e055e7e9c86b7db8871d440806ad37bebab67b78d60d610280527f3958000361b187c50526765c4900a44261023f4c418b3e592da5e6b77f240c026102a0527f5340288abc1ad5421fc94f5e9be342f2bec6333017b1becd1912b45c4f19087c6102c0527f941d62ffbfbb047fd7b2a050757e246b197bc86e67a1ccdd85598f86e6ae6afb6102e0527f646fec060cfbc4f77e5be17fe7dd4a4082aea0a46b122a7058ea9492d96e8698610300527f4d7a189ca41c61843c598a8f197a2910a26c595be275ba67c28cf3c1c9e62fd2610320527ff287a0f088b71a6aab79a535d31111aa98a7fafa10d1ad802f6c1437a042cc36610340527fc39e979b0fdec7b5ccab8636ae3a1bf8e30b9ab564b51acc5fd767cd2cea4bde610360527f69a8f89674885b22757dd55d89dd2b5d7d72121bd318bfed01ffe7fb9fd5c351610380527fae7515a9426791b78ba37c231e6630ecdcbdfa73c9b0c293738d205bf883869f6103a0527fccc57c6c698c8a0de47c487da0244e367183967c4b3b65226ff11b6b8eeb777e6103c0527fbea49780f5480fb6ae0df0693c39b7a102df9268e4e011ca61b6dc7b51baecd56103e0527f8e9c5217aa66333950b594a2dec37f423a67bf65b9cb80a2f4d1b45c5c7dd7db610400527fbdb29ede3683d3904d533ee4df89d7db61ecfdb9b313377f1fabb76cc4955a38610420527fb10396556870f949e6c1ed83a081e425a4e5915beefd6d0d85f0643516089567610440527f1f348949c6143fceab9423d11f05656442bd666d73308e900d43ebef7bd7be0b610460527f489a7d036dabcb10f159d06a3aa2e326ca7976c5f5bc87e6f4b6d88bc9c310806104805260e26104a05360b26104a15360c66104a25360fd6104a35360aa6104a45360e26104a553603b6104a653602d6104a75360ca6104a85360056104a953602c6104aa5360156104ab5360386104ac53600d6104ad5360416104ae5360286104af5360f46104b05360af6104b15360b06104b253600a6104b353609a6104b453606c6104b55360f06104b65360886104b753603a60006104b86000600060056229a50af25a01601455600051601555602051601655", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x20000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x0", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0x18665208d71eAF07c959cB6d2b263aCE3eF24042", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x52" }, { "blobVersionedHashes": [ "0x0132d6deb603df6639cddb11a72c84d811c0893563607dbfbdbccd7a1473f846", "0x018e95a083430036a83e06d44d20e48c449c73887210b4fdb1754c8203e0638b", "0x0117b08385e646dbfce1bf4e12453f47418f94c9210bd326a75c1e5f6ba466c7", "0x010cd0225eb0ac60dcc3ea4ef75ab6bd7bffcc1a76bb55a714e12d56844e8d4e", "0x01124668b9854fe4ecb676c9eb81b1bf469fd6e8e3bf726d1e996961958a2943", "0x0132e4d95f2db408e3fe5a1e034a2f4782430712edbcfc1438ab49a7fc10003c" ], "data": "0x80e805", "from": "0x35F694E45962Ab9eD665971FdF51A45A3b109c62", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 0, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x25e79e54e8c02652f2565713d311d5cb168192a4d71d9a9aee1f946cdbd6e3eaa7", "from": "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x806742" }, { "data": "0xc1a00893a8130b2ca38989576113d35462b45eecc786193b898d3eb239b6e712bb6968ed9aa996786e", "from": "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x56b" }, { "data": "0xcda935393d196ed654f80a8b358db56e6f03ef47b2c7cbd02f981b1942af", "from": "0x2837fE6BCdADEa40e14E73df3101847267659772", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0x0" }, { "data": "0x2ccc98abf7db01f4304e4590fd15868ccac4894b3e147950631ff47f5365e672b74b86bc4c34d454e28ab37da11eb194acc4957216d4f77ea6279804fea86abf0be0e98ff69c0b03df2bb4f889624ebc00d2b90dec25f6b27aa4625d29cbb5fa954dfd422dcf505eee5edc3d315ddfd4fbf1f1605fac0f2e4debf9f0c45d49b44bc6902663d567f91bd01e7a8bf300368d037c90a56a155a477262a01d2bd558dbdc", "from": "0x18665208d71eAF07c959cB6d2b263aCE3eF24042", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0x0" }, { "data": "0x19a13a072bb4", "from": "0x35F694E45962Ab9eD665971FdF51A45A3b109c62", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x402522" }, { "data": "0xe2", "from": "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x5" }, { "data": "0x", "from": "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x0" }, { "data": "0x34a9132814758b59273daa94386285ca6ec120a9d4481a23039b58152a8da551ea7308a94e7419cf89b239da0e569207cac855b71fab651a7b1738fc07791f901401b802befdd5aa04587a35", "from": "0x2837fE6BCdADEa40e14E73df3101847267659772", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0x2adf47" }, { "data": "0xc16453d9244731365126c88036a7d21dc4e74b5e", "from": "0x18665208d71eAF07c959cB6d2b263aCE3eF24042", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0x21" }, { "data": "0x8d80c554a0fbda8217a176413301cc3c60b0cf745f87ec393c2bff96faabf209afe5ff379b58c1a2150efd2f8ddea5668e528eb86081400aa5105ac67aed06755a5a4b5d45b83079a2fdaf7e9d90aa29756605b68d94", "from": "0x35F694E45962Ab9eD665971FdF51A45A3b109c62", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x3213ff" }, { "data": "0x50af4d2b0584036576383afba79c69f64fc2b71db10682ff80d5653cfdd52981f124f31baae8d20fff7e6aec48bf547e8c08651cad37205e8320a156f61f53f38acab75a", "from": "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x7b" }, { "data": "0xfef68089f91a694f575e07f3f58904aafac957", "from": "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0x4d" }, { "authorizationList": [ { "address": "0x7564105e977516c53be337314c7e53838967bdac", "chainId": "0x0", "nonce": "0x0", "r": "0x36b7ac42eec8f5237477a6169e8c357399393f59bb26761056bbff43903482a6", "s": "0x460efc6055f2d148029adb295d71d6df3e226d673bb716b5bf4b2521a77ccc4c", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000001", "chainId": "0x0", "nonce": "0x0", "r": "0xe6a79d6fca48ba50006d0503ccdc43c19f9f07ecaec4c496110ce6701d9789ee", "s": "0x482ba8d2c8c39595672302abc39a714ff67de25ce1c4ce76d25e09ab86f8394d", "v": "0x1" } ], "data": "0xbfdc6d5fdd81ba0f593ea74a4a2e16aade24b578c028b7d34d5528ab79", "from": "0x87f2957b7228EC6a0dd4F2fCc669BD2ED2B14E11", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x000000000000000000000000000000000000000d", "type": "0x4", "value": "0x3919" }, { "data": "0x00", "from": "0x66bBEf07B980c8b5de6F3DB0d5CA7A0389C7f386", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x7564105E977516C53bE337314c7E53838967bDaC", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xb69e5f919d0b7c265606ddcc668583ef819323ff6b65b9f0485cbadb495e5bae", "s": "0x7296df3d02e403899fbe72a1676027a5216c5bf1f0891d945a992eaaf8b9b614", "v": "0x0" } ], "data": "0xbfdc6d5fdd81ba0f593ea74a4a2e16aade24b578c028b7d34d5528ab79", "from": "0x97511db90b0e141ea4cb42e3b73fe3C24c3D5676", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x000000000000000000000000000000000000000d", "type": "0x4", "value": "0x3919" } ], "version": "2.0" } ================================================ FILE: src/cli/fuzzer_bridge/examples/comprehensive_largest.json ================================================ { "accounts": { "0x000000000000000000000000000000000000000d": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f0a87ed7222327c89e32c494655ab7ab56000527f9edd68e08f46df176f43ab43e5cef82a0ec1e3b507236e9e1d29ee4865c3172c6020526f0407e673e011e005623138422425e3f76040527f33e8019de96821fd513cd74317d3759644eac2366ec002ff30599f23893d01a96060526f0c8ed51666fa89cc3b565d4debb1613f6080527f1b05e40e0f001cf0fd1708ed5ec0cf0848395141fad4e63c1906ef6826eb59cd60a0526f09ded88a18337c0914c78872d01d415560c0527f0968b8eb01921ab81aadf28a9d3184bca0490cbd0c34ba4bd4967f21af512ada60e052608060006101006000600b7fa4252a9216f3d0e78298c2b7c114a064716eddd0911583de04b66582d8ea311df46000556000516001556020516002556040516003556060516004556f1a419a917fc94f5634495deedf4a24016000527f048cc6b4caf2a633a5e8f2da8c0143c06d8c1936c890bdb2598545541f70d11d6020526f18e47fc371d0406e1d4db090510a8adc6040527fde2c75ec145e1c8c0c463746e7094ba17943d2c86a2bf2c6ef95c2fb431910486060527f2e2b2003141ba627ad513d8a983c48396ffad9321a55c93c2604bbfa2308a97c608052762000000000000003ea3ae275df42189c22df81e214368360a0527f8780adce6237aa9f065ec90a90954ea710e653548c7299c4530795fa29ee9d5560c0526f010cee41653204615b11ff580614bde160e0527f2b421b606c9ece327f85b1eb9cf1c824a346f190ca67c2f51a2457820cbc7b15610100527ff2c9a103bda905ed7b8b699659b9323f48a5c7bcc39089b56bdc479432ba3368610120526080600061014060007fb07bfea156dd2c6da61259f98c6acd1940635b34f57488f007f182e1c924e6e4600c7fcf18af1150328aff200c2fd8f999bcc0d5ee9391b1cba27c9881fe5df5887bc4f26005556000516006556020516007556040516008556060516009556f09b04f3d8e653b62c7982bd62d551ef46000527fa637f50de8135135d5d4fa0789fc81ff1aca0f5580ffa0aae9d3320b46eb43616020526f10f5d64a37c8c7af6fa86c43e7b04e246040527f50df08be2d64e37307e120865ddb737d40df135bf781af0cf34e643bda22fe206060526f141d734530e56cdb3b167ae3ac8df0a46080527fa4400211fd2cf3454a25257d075e59d3ba197c8840955c9a1354c2182eb04a3f60a0526f0e9be6e0e15cdb0b5bf6fbb5212abe3960c0527f87491a0cde1687660f12853fc9be9c16f6f82114c4874c4748328beec87f289860e0526f07d9ba7a0a45506cc5ce37f24472fe0b610100527ff428a69ea59c554de9cfc53f27a38281f1c264c784a645fa2d35289ce405de2c610120526f0762254fb0459e7df8563bee37c4d2f3610140527f491f360f159d69cb14c672d79d4feb00f024c4bfb3f40ae716b113faf88a9a13610160527a01000000010000000000000717a86a35e59903c132908dc7f52f62610180527f8a5cf0cf8a71f5664b402fb7810716888ecebc361881eba0ee7b505d7f16b1886101a0526e5a50ba7862cc7cda96c5dc5adf8f4c6101c0527f4331955a3d1e519f7274d3fb7d0462f1002580dee6f242c634c0089195186d3e6101e05261010060006102006000600d7fcef0c189c7d9456aaccdde7e801f01a3432106d9dcfe0446321931372442b159f4600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f024aa2b2f08f0a91260805272dc510516000527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb86020526f13e02b6052719f607dacd3a088274f656040527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e6060526f0ce5d527727d6e118cc9cdc6da2e351a6080527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b8280160a0526f0606c4a02ea734cc32acd2b02bc28b9960c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be60e0527ffee06aacd23d0a6c86c34dc19c60536cf9a6ea877a9e9eb2f6a4df3e9a353dd2610100526f1fc25c7508e84dbd1daf7961d33bfb2f610120527fe53a40dbaf0ecd8c7eb3bd54bf2168a6d7a055ec92130ba37052b423447b0a9a610140526f05e99862765b9bcd6f7cb63826fcd392610160527f848915d53314781e8877d55caf9c4f8d34c7a8b89cb8bacc90de4a29921a44a8610180526f11af9ffe6238b2de3f7dfbe19e4e0a586101a0527f4e47686ba041f9dedf748c8d126b85c8c8edb4b2797e15dbf67683b1a73a8c446101c0526f17b6657a667d398b8f13565befc2a7e56101e0527fbb993fd6c1c8a6d8b87870d5c321b47156188f585546bfbf9033a4c86be66c4f610200527f18997f86a0ce7dabec3e81f963d5481ec93f972adc070ee52a4b1e9828a1cdb1610220526f10a4258f7530a05c9baf43860413914a610240527f525ff884a38adba5cbcdb1fa8b7ed37ff38a369a0bda3f8ce5eba0a9fd23e3a4610260526f02e67a246248652e404608af51e9ebc3610280527fe9cef9e3bd785b9348c6ac8d58796c4606539f4fbf49004c85bbe2be3801b42c6102a0526f05c8bf03e4cc59c61fe7127ec8467cae6102c0527f01153b2e813177d106fce95671a92f34680a68d71a819a47a2bd88a8c1d065306102e0526f19dfecff4a83dd53c417d38d59bd3f1a610300527fecb84b85caa8935a60b706781e85e4748de3a187062175cd88589c4e1cc33d55610320527fb985b5b035764a8b63042b39ef405bc5b863eb556ac92ee9b81220fb9ec662a16103405261010060006103606000600e7f9f28453243c7169466e0d7b52d3d089cb3a5027dfe9b6346ccd3744baddef837f460135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f165c50dbe8c0a0208acb5b4f32f320906000527f17ce7e71e958a64abf31e2fc571ddddc5f47046db222374332e6e6ed6c60725d6020526f05c327bb284a00dc257c47fdee750c9c6040527fae824af6cede547411e87562748ed6dba06e401a2092e49108a1513ac54604326060526f01e753ef84d2a5461a45b2d30b0721dd6080527f911ed29cf977b2d50d92d7085099386efb72f28aaadaa7509d47ba49e2d5576660a0526f01c9507484cfc3afac23df3f40edd4e760c0527f5153fee58f641ff7ef30da0e856bb7207d5e49b0a7d803778ba2187277878b2860e0526f034eb4d81eeb63c3e0c0df223b4e7fdb610100527f676f8c98a87583947e51d405c7102382e163fb63ebe7ad836dbe58b7af5123c3610120526f09cf32bd5a983e5edf7439888f49a36c610140527f4d51e8b926c13dc5edc5bb582946bc58a3269bb45f61b3f3c8d7d1b78bf68f5b610160526f12786c6a204b05a66b3b0ec1628fa1b0610180527f1298d31fefc9c859bff378565c1f83a3ee8bf0f7ea2ef66612ba98cc908217cf6101a0526f12f75b00d7ac4480219fc66b5e4cee686101c0527f8b6820eb8cc47694ce0d910281222a281db5431258217f13b19ee22df398813d6101e0526f053a3ec469166e07e50fe90261be6c03610200527f8bfdeebc739636d4d569083c14a1dca3d1a32a736c900150dc8e231494738086610220526f0540a51dd44fb6a1bf12d3cfec1debc1610240527f50ccd16b2499c78cd00a1ef4b1cc0df6a76f7448791912fe67ec17bc38fbd0d9610260526f1792de16e20a71f569cb872f24967936610280527fd0e86308f745cca7665e2d9da1925e7b40b1c75d377d049fd0130dbb91f8d2a76102a0526f10584eb9a95dfcf214640f20dc1720626102c0527fb1ce1e2122df67c1f67cb471c1975ef95c7f3bb7ff9a0beac9a353e8a1956f036102e0526f021eff5f0e36e91a2bb867207f6be50f610300527f69c76b34f3d7519ddaf5229586a6dcb8b7916aa8c8252027408ccf6c0293b4cc610320526f06ba87408441d868c3955895247b0cc4610340527f40ae49a43bf2e94e34f7bf730588c6387d197cd1dcf8612fa896498146a54a85610360526f024aa2b2f08f0a91260805272dc51051610380527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb86103a0526f13e02b6052719f607dacd3a088274f656103c0527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e6103e0526f0ce5d527727d6e118cc9cdc6da2e351a610400527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801610420526f0606c4a02ea734cc32acd2b02bc28b99610440527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be61046052602060006104806000600f7f9a3408e92b715e6b9045c4dd6fdde08ee1a07f82f2016d98ea8017dc731ae804fa601c55600051601d556f0e66dd45ed28b50efa47ef1d4e12e1646000527f17af6eb4654a2af672d9e65ef93e7937047309dd5391b617d8c629a282008c1f6020526080600060406000607160107f08836f296e06695e07ca75a2fccb39630286f5f12e73c080324df9665ae10d32f1601e55600051601f556020516020556040516021556060516022556f12bcd39d65a32144dca96ef057a1cb2f6000527f8d9f73ba8de3281fe17b080c9ec0f08dccdfb2075f0d73d05055ccbb200296a56020526f0f8af18272344255ba2fb976696e056a6040527f4175c7145eed931d03737deb73d25c3bcb8d880ed85e03ac9a9c2c74e0bab59460605261010060006080600060117ff4f2cfddbcff68a12ebf445f82c77d68d99f8b6d8eb46723ed3ef6ed2507a37bfa60235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x608b6085604660fa600260e660c95b1870335733826958400667a041477d7f56425744fd3741659f7e12a48f835a650667f1066d7777106337fd676f7d3603521a7b418e8f62055f3f025d1d41928b75643933a4153e32a1446470013d92343c1a5c368879f5f1067b0b1b5ef4755911333e570b0a52403d647c069d97104309395a31704841655e68338f96131a473a18a01432170b1d90076e31077d78f34339653e3534481c9d771881550889a4675f376c6c135c35063863336f9e0283505059721c526d03337d467362ff8650713f123e5f89079f361d143f80587d061e5d0a52786708055a4379f188505045ff1d4138100b0b6369996a425639881c469d7a9f8838075847067865833e791537656f3f77006ba11148598e1e7f3a426a8e358d4a667808079837528009761d6c079c83754642f0333e3a0b1e7557f31ef56da45d926f1b38fa77056601699a45816b118c74a092077268451a0b9e427b9852f2639f49145501fe103a79201351598bf2406783475e80636a795165816e1c7687986e3e10753c718052997c3e16530a3d7846111e871e358a457d70537d17556215351608516a7b09328174825c79095b6cfa31183f507861621bf16e1b0bf07d368769501c8f691e1a998410191e04747f049e886a6686189757735d6f8e3769040477f5591276167c77575e9f3a57418b1e666c1a60f18187417f004750093c43583f3e56129314201b769c7f1b0a6e09075e006e63711a81547c686d6a88508e873461fe20317882fa69495f893a4637447c617a9837fa65fe1c6f061786595b925d028d085439144979187a60603e896a0a60758752796a855b73808f7b5a68803d06120a3d6875665c39105e4501a15d02940673443947824654fa4019679b05f3668b4164803c1e028e10791e5a43169744019954680688691c72855e337480339c407cf05b8a5d51641d7b056a540031419233893a7e5730053b9c098a31076efe3e41113f123d54766045677a778a7533535f757ff21814647c9b056c55163f673130a18173349252079e7742378a329f1d0b62471a51207d6a988c446c48139738770302076f3e196b11006e30839e405a167d797e1497f2141136116f886741977b5a4571597b3181207776a1976b3f3e50431ba43684151401555b421505186f588a206d1b305079f3757b5c17615b1d8a7459513d3960506c8b5619a0f533083a7859703f7a39a08f3ea3611d1c1e36621287823a204245046a1a736f7a9f3b5c727e64007c50179f3552a0201e390a7c19637e731d527978004812373379433e4702567448fd77f5139c485b483504548e4030761678395f9b1ef1761c17424aa005001b30093d8d81519f116c336e6e9765696957806c696f955c6e9d094859111a45117b48433f143c408400796894175e3a180b6218", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000000c", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0xea60206000fd", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000010" } }, "0x3F7d91B63d840CC7e9601d30DAd1870aE5749C1d": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x3befd359c3582c3946a564263ee77fd86f740a7c55622506c5591d61737dbda6", "storage": {} }, "0x3f8A30c4E084500855A3A35b7B9Ef39cB7B90F36": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x3a650354fd40b9460e6e99f8a73f92de7aa435859e7866bdbf33c15c28575a36", "storage": {} }, "0x472C5AD2732c1CFB6B4bC190Aa174656Fe3c34C5": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2944b92eeb6bcc8a67ae9ec10064b6148bb3f7a48a383559902b5c9576e70bd4", "storage": {} }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7f5d403d91784bc5a01d145ca2b3bc1126aa736b49d5b64f563dfe7aff0f5f6fa86000527f8326efe73bdcac81a56385db8739ae0dbc5e0a85a79350f9062e79f863e06cfc602052608060006040600060b460107f3533a47707127be60396663b421c89eb8b30e456501fd24af1f191416c02e125f2600055600051600155602051600255604051600355606051600455", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x600060002060cf3560206101f26103c0630ec7c0de3c60406102d061030082819290913720600455607d60fd6103e082819290915e20600555600061045d5261010061040061018082819290915e2060065560fd61034053606b6051610100630ec7c0de8382919092909193913c2060075560016066608039600160556102203961045d51607c60e05361032d3560085560326101e06103a05e60016080f3", "nonce": "0x0", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x600860005560f5ff600160015d60206000fd", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000003" } }, "0x7564105E977516C53bE337314c7E53838967bDaC": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7d0f1aca5f5617ba53a2964ce753903184ef3ddede5412b9d553a12b5e57076000527ffbb3be712806b233cb60c29db989d7ae5349630986cf360c21342ef0b4afd1586020527fa9c802a9e71442f14ee3df13a9c3835763425701b2e669defa0f9c30e902c4816040527f0ac85b8a752a7ca64e1e784236db571b228436cf99406f9420ff8b85e1cb180d6060527f782965ec2fde9394550b911b4dc2fde13170e3af8881782cc1f400d31112dd946080527ffdbca9e214ccfaad7f648f2a211cbdd3d557f26261a34da40a9b167bff12d11a60a052602060c053601060c15360ce60c253603260c353607360c453605760c55360af60c653606660c75360e960c853602c60c95360d160ca53602e60cb53601f60cc53604760cd53603960ce53603f60cf5360b460d05360fe60d153604160d253602560d353600060d4536040600060d5600060c660097f66b9f2049709614c2523935d617f2576cecdf6d4cd80e850e0a6fa189bd9c3d6f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x837C90dc7009df3399617a7BE4f8a0cC0ED7C350": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x71a42ea3bbd6b96a66b6411dd45c75ba29bc7183fc3c007b544405b333857d17", "storage": {} }, "0x872509c90c2E045B795423F9bEc01a53d6D8Cd7B": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xbb3f3eb75c641dcbe1001b459c59b97fdff8938be21771df376053aada5547e7", "storage": {} }, "0x8c91B5232f6C15d412e35F7A1e10827145bdD6d4": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xba3b3739da5efe370bef502ac45ea51e77c216910dfaa0de0562c6c92a95c71c", "storage": {} }, "0x918c2E9fa4fBEdf538659e6DBbcaa9cE90AAe2B9": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x876a3a4177c591bcd7c7838ab58503507cc953a049d095958fe26dc308b25059", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000007f8000000000000001800000000000000080000000000000008000000000000000901b7d7676767676760000000000760000000000000056000000000000000000007f80000000000000000000000000000000000000000000000000000000000000011a9006157f7effffff8000000000000000000000000002000044000000000000000000000167fffffffffffffffe1d90056a10000000000000000000007f7effffff800000000000000000000000000200004400000000000000000000010490037a0109000000000000000000000000000000000000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a02901b7bc9700000000000000000023f00c00014ff002c00000000000022310868010000000000000000900b90027f77676767676760000000000000001002e000000000000040000000e0000000007e40000000fd000000db0000000000000000000040000000fd000000db0000d390186000557fffffffffffffffff7effffff800000007effffff800000008000ff00000100006fdac7fff9ffd9e1322626262626262600901d90167ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb09004901476fffff716b61616160b0b0b2b0b230b000008010d0a2b006b010000000000000000000000901b6001556c100000000000000000000000007fffffffffffffffff7effffff800000007effffff800000008000ff0000010000026002556101117f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd10901b600355777effffff800000007effffff800000008000ff0000010000777effffff800000007effffff800000008000ff0000010000056821000000000000002271767676767676767676000000767676767676900660045567fffffffffffffffe600103176005557feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee762900760076761e000200767600000000767676760000007e40000000fd000000db0000000000000000000040000000fd000000db00000190096006557fffffffffffffffff7effffff800000007effffff800000008000ff000001000067b368d219438b7f3f90037f77676767676760000000000000001002e000000000000040000000e0000000007f7effffff8000000000000000000000000000000000000000d90000000000000111901b6007557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff156008557ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a006f8000000000000000000000000000000190046009557f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a57cc9700000000000000000023f00c00014ff00000000000000002230080560009009600a557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6b1000000000000000000000001b7702ffffffffffffffffffffffffffffffffff0000000300007e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100090167f82000000000000000000000000000000000000000000000000000000000000006f800000000000000100000000000000006f121212121212121212121212121212129008901d600b55677fffffffffffffff637fffffff9003600c551971767676767676767676000000767676767676671fffffffffffffff9007900360017f7effffff8000000000000000000000000000000000000000d900000000000001900617682323232323232323237e40000000fd000000db0000000000000000000040000000fd000000db0000d3712000110000000d0a300e750a000000090a0a9008901c7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0076fffff716b61616160b0b0b2b0b230b000008010d0a2b00900b900b7a01090000000000000000000000000000000000000000000000000071767676767676000000000076000000760000900b600d556101117e1f0000000000000000000000000000002000000001000000000000000000001b1b67fffffffffffffffe6c100000000000000000000000001190147bc9700000000000000000023f00c00014ff002c0000000000002231087f7effffff800000000000000000000000000200004400000000000000000000010b600e557e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a007f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff00000112600f55156101116b0100000000000000000000001d60105563800000017f80000000000000000000000000000000000000000000000000000000000000021b9019136011557e1f0000000000000000000000000000002000000001000000000000000000007e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100090177f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000017a010900000000000000000000000000000000000000000000000000116012557feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7f80000000000000000000000000000000000000000000000000000000000000019018077ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff7e1f0000000000000000000000000000002000000001000000000000000000006f8000000000000001000000000000000009900b7f7effffff80000000000000000000000000020000440000000000000000000001760fffc000000000000767676240000000000002b057604702076770000000000000006823232323232323232390071a6013557f77676767676760000000000000001002e000000000000040000000e000000000671fffffffffffffff900260145569010000000000000000006005774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a900963800000007f77676767676760000000000000001002e000000000000040000000e0000000001d90147e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100068066aa0a5319bcf5cb490029004717676767676760000000000760000007600007f7effffff800000000000000000000000000200004400000000000000000000010b027702ffffffffffffffffffffffffffffffffff000000030000760fffc000000000000767676240000000000002b0576047900390026fdac7fff9ffd9e132262626262626260067ffffffffffffffff900a9001717676767676767676760000007676767676766f800000000000000000000000000000017f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff00000190099010681000000000000000006005901c1b7f7effffff8000000000000000000000000000000000000000d900000000000001677fffffffffffffff9017037f80000000000000000000000000000000000000000000000000000000000000007e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0006901a6015557ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a5901d6016557ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000156f1212121212121212121212121212121268210000000000000022161668210000000000000022760100000000ffffffffffffffff0000000000002e00000010901c7f7effffff8000000000000000000000000000000000000000d90000000000000176013590cab83b779e708b533b0eef3561483ddeefc841f5900390126017557feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000901867fffffffffffffffe6847839214543589705290149019017f40000000fd000000db00000000000000000000000000000000000000000000016007900110600067ffffffffffffffff1160185569010000000000000000007fffffffffffffffff7effffff800000007effffff800000008000ff000001000090039017157f77676767676760000000000000001002e000000000000040000000e000000000678000000000000001056901000000000000000000774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a7f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff00000109901860195519717676767676767676760000007676767676767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9010106780000000000000007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90179013601a556f8000000000000000000000000000000069100000000000000000009017600768010000000000000000901a90150471767676767676767676000000767676767676717676767676760000000000760000007600000590197f7effffff800000000000000000000000000200004400000000000000000000017f8200000000000000000000000000000000000000000000000000000000000000600790089014601b55157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb7a01090000000000000000000000000000000000000000000000000018900b778200000000000000fe000004000000ffff000000fffff700684783921454358970527f80000000000000000000000000000000000000000000000000000000000000029008900567700000000000000068010000000000000000901a10610111651ce97e1ab91a900a07601c557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e40000000fd000000db0000000000000000000040000000fd000000db0000d3901a601d557702ffffffffffffffffffffffffffffffffff0000000300006d010000000000000000000000000011601e55682100000000000000227e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10009016760100000000ffffffffffffffff0000000000002e00000067700000000000000010901d7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f62d8fffffffffffffffffffffffffffffc18000000000000000000ca00000001901c9019601f55712000110000000d0a300e750a000000090a0a7702ffffffffffffffffffffffffffffffffff00000003000090166c010000000000000000000000007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6770000000000000000890097fffffffffffffffff7effffff800000007effffff800000008000ff00000100007ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a0090059014682323232323232323237f8000000000000000000000000000000000000000000000000000000000000001901a90127fffffffffffffffff7effffff800000007effffff800000008000ff0000010000777effffff800000007effffff800000008000ff0000010000901d901468066aa0a5319bcf5cb47f77676767676760000000000000001002e000000000000040000000e000000000900690027f8000000000000000000000000000000000000000000000000000000000000002774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a901d900767d021262626262626677fffffffffffffff900590181960056b01000000000000000000000090167f62d8fffffffffffffffffffffffffffffc18000000000000000000ca00000001777effffff80000000000000000000000000000000000080016f12121212121212121212121212121212900990056005671fffffffffffffff7f80000000000000000000000000000000000000000000000000000000000000009009901790126020557f80000000000000000000000000000000000000000000000000000000000000017702ffffffffffffffffffffffffffffffffff2000000000000b7fffffffffffffffff7effffff800000007effffff800000008000ff00000100006780000000000000011a1b6770000000000000007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee109003777effffff800000007effffff800000008000ff0000010000637fffffff10027f80000000000000000000000000000000000000000000000000000000000000026c1000000000000000000000000006901c6a10000000000000000000006c10000000000000000000000000161169010000000000000000006b01000000000000000000000090141b682100000000000000227bc9700000000000000000023f00c00014ff002c00000000000022310890050576013590cab83b779e708b533b0eef3561483ddeefc841f563800000011d6021557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10006f80000000000000000000000000000001901390117f7effffff8000000000000000000000000000000000000000d9000000000000016801000000000000000090179004760100000000ffffffffffffffff0000000000002e000000760100000000ffffffffffffffff0000000000002e0000001290057f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0090187f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a56770000000000000006c010000000000000000000000000990076022557f80000000000000000000000000000000000000000000000000000000000000016f80000000000000000000000000000000900460235563800000016801000000000000000010900b7806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a7f40000000fd000000db000000000000000000000000000000000000000000000107602455762900760076761e000200767600000000767676760000006801fffffffffffffffe1c60006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f2fe97199e8ba5d65d5949760aba55780db6d3e27337c12a9e2584c1aea6389366000527fc9c7815cd20d7a1591df55b3df8377d64505c5ca90911be70570f7cde3de19f56020527feb1c52cc5d5b95babc9859d69614a696a7754df4ec4513bc9af9fbd9d0944b0d6040527fb658d58f26c2302e35030999f40650e0466ee0af3b918849c2eda1d6c4fefcaf6060527fe4bd2ef5d6c1341b8e475c74757076268d6f1c5916d5bb01e70d7886019c23bd6080526020600060a060006000610100611acff26000556000516001557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffefffffffffffffffefffffffffffffffefffffffffffffffeffffffffffffff6020527ffefffffffffffffffefffffffffffffffefffffffffffffffeffffffffffffff6040527f6e28fbcffd7c03caccdd22d240b8b9ff026419e2adcdf236a36b46f43e555d0e6060527f2849144bcceeceecf83553762c7ceb27864c9f34852287bd738ec484b6f00cad6080526020600060a060006101006119b3fa6002556000516003557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fc53d059ebba0080bbcbd061e6524771ea0dc308b40f3c4ede4c8716a1eb1ec5a6060527f49237f19d71e7aaeff794817dc9f70d8a7c729a6fa39a391b5b3701d22566d586080526020600060a06000610100611935f46004556000516005557fb0c8b094b0f86fac6669fc617a9ae78274d176f28afd4133b0ff77d0f997ce966000527ffe317cbb4baf276d4432ced23f42d8c5f7d55b784db1e93057ee0fc2ea1e17786020527f4b440553855a357802be0278f1931e2e08f09691d5bea6d151656218e393092a6040527f5a91dfa926c3153f152dc0b41f6d123e4399e570bda33656750b0ffc6a7d99256060527f0b2978263b93e015de980fe4a2e55e118cf2d6c5d591977af6cf89d15631d3c86080526020600060a060006000610100611a32f26006556000516007557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a060006101006119abf46008556000516009557f7f895cb6c94965dae08dceddc4aefdeb4f7cc31e951d89545b74675c9fc8e6036000527fd34fbc0141a54ba0519984c5194ca9df72fd36885e115b38d896115fcad844116020527f55a221cabf682a678d6d7bd6cc1c9d49900274d396e26ce619d02b49a7b83e666040527fed0684f310b426c5b27d7218a0083cf6ff1beacd1156c21d6c2cd04ee12f13b96060527f3ff4da44d7964d7de1e66c4f90e7ff39f78f4cdf4f3a5270c1d722126abd91e06080526020600060a06000610100611a5bf4600a55600051600b55600060005260006020526000604052600060605260006080526020600060a060006001610100611b08f2600c55600051600d557f1e681d3a95c766757b88486b0afd7a08a6fa770a33d3701a22e430baf948b8ad6000527f99244a30ea26d6976d18c2b999724f354cf0437c6914f905b229d6456abace266020527f02de2f85c227c376b51fbeb7f912c93de8b3b8d1b719f96e3394c780fe92819d6040527f8362b3f221591571872637755ba29fccf0be8f3663fcd159c5b11acca7b83dae6060527f88e7544e2c3ce0d17afe0f1c5003d61d4a15ce6d121c9753999e920d526b61a96080526020600060a060006000610100611956f1600e55600051600f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611b04f16010556000516011557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f4556070d69d9150dde4c0c405471e1e9d6f7b187c8a48db23e436e1bf0c5a2836060527fb27460818d4e6617c7c52296366cd6160ca2141e845656c7af89e748f55051e76080526020600060a06000600061010061191bf26012556000516013557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f555555aa55aaaa55aa55aa555555aa55aaaa55aaaaaaaaaa5555aaaaaaaa55aa6020527f555555aa55aaaa55aa55aa555555aa55aaaa55aaaaaaaaaa5555aaaaaaaa55aa6040527f0691a74c0334d2c5d5f65473a379ea6f3927dfe754c742a08d391ae9e4c3a1276060527fa4c383fcbe83cce6eb2b850160756c9b9567b080d70e343074b8398346c799356080526020600060a060006000610100611c84f16014556000516015557f7514614ff040dd84409ddfc302b297d29ca8714619a4dc560aa3d4608ce954db6000527fb0c02afef69e2f48ed8f894c883394d4122f4317d1e964db799bf5da52329e7b6020527f6f65d0cbf027c882dc76923072c5d7295b43905e974ddcca2b9f18af37ccfb8c6040527f6beef3c7b6f4b8c44fd071921967d0f9be21ee44928355184ec42b1a8229edc26060527f249d6d365176c805e3d4e3c72bac6c02100a90d811311ef70ccdc495e09e6bd76080526020600060a0600060006101006119d0f16016556000516017557f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2605d6000526003602052600660405260036060527f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2605e6080526020600060a060006000610100611c2ff2601855600051601955600060005260006020526000604052600060605260006080526020600060a06000610100611aa5f4601a55600051601b557fd2d4f8d1fa6b35538f27aae222a56776a7eff0effbfd431936715b436ff451a66000527f61f79af730ffdfc7e4e96f985821c0a9dd7b5651b7b2ad75296cadf5ef8e59cf6020527fc45866c4591a45de590699e2457094b9b000856f7149ec94f8abf4670afdd7d86040527f88c77f3feeffd14bd137ff4bb3ec5b876e05180b532f10b77c0657e563c8db0c6060527fc6e572badfb5159adf1acd6d9ad3ed81da9eec85ef888e94bc6542fa2dbd08d76080526020600060a06000610100611ae5f4601c55600051601d557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6020527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6040527f393b58bcd98fe79fc2233c31884afb05d2b359bac1d264d41268621e013390036060527e70250670d4de9ed0b37629f80990116dd8270afc189249655a041d526494536080526020600060a0600060016101006119d9f2601e55600051601f557f60c6915f999a8a80a3a861f015cd24eecb142408854d05cde1b2ad1ecea053f26000527fac7f8594b93f7916770e6e5126f31801ae95ff40ae5bd478b4a1b797a17b71a06020527febc1fead5d1bedcb5bf6a7e631d9d1ff361385d8885430a71c33115ac3278b456040527f0ff45f5f73f9e822bec06a5ae4c5141d6eadfd0d5690bea74bd0b8fe1f7285976060527f41919529738f4f6232c5840ab04e3a2bd2ceb0e1e92ebafa6c28af53c57cd5106080526020600060a06000610100611cacfa6020556000516021557fcff94bfd0dc6ee2296752d48a0e6c896215b383550c60fd0f737252e86a3012a6000527f93581041febfd49fba501e7b67693d9dc64c73df8a4af587231037e4264f2bfb6020527f93581041febfd49fba501e7b67693d9dc64c73df8a4af587231037e4264f6bfb6040527f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2966060527f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f56080526020600060a060006000610100611b3df26022556000516023557f893506f03e0a80f79c48203ec81f871afda5fba19e1b5c85d8e9899f7f30ed156000527f59afbf58daa9d21e3a594d20165037571f0dbd2efee0cc099417cecdd4983f726020527f8322d130c68921c15265c8505cf39f26f51cfc6c814b95980cbced5b35aaa6126040527fe8fc8871cdcd283f1422e9f99c0075eb8061fa82c8a1df63af6c0a584c4f8e826060527f18bb7ed6399701c762f5cd56095bc0e0fb6207e8f6c82a6ad257a420b2cfad4d6080526020600060a06000610100611ac2f46024556000516025557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fbf93dfebd62c76ad15f114f950b3881bed08dc9fd561953cbc16b6bbbe5e567360205260006040527fa5c3b4cf9cbd67295dbcb27c699c6574e3d2ea63c15e9f8c8a2516c29d38b7cd6060527feba90b54b8208ef83b22016a18ba2a1a2594e6e5d238be0aa979a546909e95e66080526020600060a0600061010061192af46026556000516027557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fe2c5856908d15331d57ce42f6985fa476d70deea26c9eb600cd9941ba45846ec60205260006040527fe5b8f6469372d68b77c90e8d7dcac4c91de8b8240c24931e88ead9d567a6b6236060527f87d09aad6d64667247299bd593b3b188d5fbca5b23f07ad81dce3d152263e2b96080526020600060a06000610100611a59f46028556000516029557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f03fffffffc00000003fffffffffffffffef39beab69c5e7a13cee72b0bf18c956020527f03fffffffc00000003fffffffffffffffef39beab69c5e7a13cee72b0bf18c956040527fe99e6153b13f1459ce318e9294faa5e39366ad606aa919d8124168755b0fc98a6060527faff78ababea86849c7171ee1ac52c4630b75ab736bbf602387a7453e16eccc136080526020600060a06000610100611a71fa602a55600051602b557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527f417241b507b3a838299ce7825419fd5e77e3184e5630ed3e96b7fda7d6ae34ea60205260006040527f89f7c09aa4986bd3818ccbaf22fbf3c0a9ca814e50a5c68c86a9c2d68067a4eb6060527f0a1ac1cd8c5e4aba96b63b5b13f1cb0672c73ebd014d6a96821133fe200817136080526020600060a060006000610100611c56f1602c55600051602d557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080526020600060a060006101006119b2fa602e55600051602f557f1f5056964e229e6d298fb8c47ac9527e6f4b8c9f3a8533227854b892233e6d976000527f481bf80e44001b0ece48327892479534e208843b2ad69314f3ceb0dc305858716020527f7384080df121c720d275226b1a11e2314c860faa7d84bffcd6a040b39d5203106040527fc41a4b5b018d1deecb157b623dbedffe1843922d0dfa9c7e62e0c69f6af3c2206060527f303d1191101730a74720bd3bd36ca47ad40d49321263bc1a4319fd289e5d97516080526020600060a060006101006119a1fa6030556000516031557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f0c3569d6f79a64e80516f0c1baa003c0dbd85f2d942104588bc05febecda34b86060527f78373f0ff62818343d05fbf9db4552cc0e3d3bc3b3080a811748c05088c4721f6080526020600060a060006000610100611940f16032556000516033557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611971f16034556000516035557f52c7f111411b6c31c4ea5148ed1404ee72dad2c4a63b5d9c07be2d57811dd9bc6000527f6045297350c3b2df194a8f520641552563b5aa981e044bcda6a33249f524f1a86020527fbff75552493d6b56fc7a65d64b61c429fc75420946bbf7f342728f45931da0456040527f335756c6c2442feb7baab1b4c00709f5f211e95276a51cdc179a1523815642856060527fad39878e95395f34586fa5c13cb8892da3d8e793c2986720c5c6d629dd895ed96080526020600060a06000610100611c67f46036556000516037557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527fffffffffffdffffdffffffffffffffffffffffdffffffffffffffffbfffdffff6020527fffffffffffdffffdffffffffffffffffffffffdffffffffffffffffbfffdffff6040527f13045e933830966b2db4c6a0cf39f06aadca0c74937af29ff7b3c6f0450bcf2e6060527f70725c9c6c35517926279c911828164c6ddc7e97081db8fe0dd4a729b803bd5b6080526020600060a060006001610100611c77f26038556000516039557f7c2a6630a079ee1363d056bda39ae134b585af806cd9727f90fe91abd5013bc96000527f539a2d2e57a51bd8f3f70003d2236d12a9d9c728934914f19adc0b325ee3bb5e6020527fafca78e072b71496c06d81e71bd6b60b754584416e5355676f03dcb617379d776040527ff1d328d7c09978884c803174445eb275c0d6fb998b98e95df4b08d840f89aec46060527ff3bbe41941839aee29d8237388953d7e3a3dd621fb3b594c2cbf0987eeff62266080526020600060a06000610100611b66fa603a55600051603b557f975f4af54c367ce00dd0dcb9c093bc6ca66db8c689e7a75c00b2a74c923e3cd26000527f7cb05b03626922246b24bc2f58eb57afd4a0318b2d326dfc15b6ba63e827e3356020527f4a0854303660569da11ea1cf19e24b5f6a8c61a2682b315c0ddb3d4f34af483a6040527fa37a086a86b4c63de4f608623a3b109bf839637e0c4adb7688d01784ab93052a6060527f99c32c7cd905550ae9f5025b8e9c96f8f1b79739ef5a7da917c3af8d57254fd36080526020600060a06000610100611a7efa603c55600051603d557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f469c3645957f81734edc5e79b5ee76faf692f010c502999fc3cfac6faebee0836060527f61c66083fc6c790d224dd7b2dcf78ae5ae6d9de7ea518daa10cce651e7fded706080526020600060a060006000610100611b23f2603e55600051603f557f183086ef5ab74e16dd3b9a9a662e247e1355399b33ad8b3e382fd7f90118128f6000527f1699eee7ae150a1333b791f118070e10b320096d9537337a6e6ab699df96250d6020527f4aa30c18c471b32295ba528c5f1913a779014f6be1366c3e096a64fc535e79516040527fa45e8ffa296f8b29cba6d3571041d76938d6e7048866a2c439aef5fe697c924f6060527f0ecddb7ec3a49789115126ebc8cebefa0f7cd0578541580c7e003aaf9df4c9db6080526020600060a06000610100611bf7f4604055600051604155600060005260006020526000604052600060605260006080526020600060a06000610100611aabfa6042556000516043557fadc5098eacdf58d42c946547737a616e805f2733b11e8217133530de1060ce086000527f3fdd1d9e9ee2a8a319768ff76ed2566a7d618b623031ee2b640b5b49e9fca4826020527f8cd2bb580fd635c34c694bcbb59895ec15efc61eb4154921973d31d47528a6df6040527f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2966060527f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f56080526020600060a06000610100611bd4f46044556000516045557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fa44b3f5d409dd6e3d25c670a74257af25a31645e5d34cf4e3a5d0da07e3efb746060527fe293774a13af9c848b513a08c0fc6f6e7cf52207895ca1463f3ebb1bc57c91c26080526020600060a060006001610100611957f26046556000516047557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527fc98a56c8e90bb85ab2c47b157a062b43ec365388a7d754ca2bbb60385f8f9d286020527fc98a56c8e90bb85ab2c47b157a062b43ec365388a7d754ca2bbb60385f8f9d286040527f02fffffffd0000000300000000000000000000000300000000000000000000006060527f02fffffffd0000000300000000000000000000000300000000000000000000006080526020600060a060006001610100611a4bf16048556000516049557f0967b7041d5609bb5e799ab23aba07f6b2b91ff4555434b4268d3e9d5d222c876000527f7c14247677c6f4001db4cd3ee38341d2ca131a61eb822dcce09287c4837674a46020527f1a7e956dcb2c7f6efee5292e863ecc2203c0b874b8b35860dbc52c8b70132dc66040527f86f2d864f73f34c4db6172f7a5a6701bec0feb97250b6e5da8140cb3c6f4da9a6060527f7c77d48ea9dcf0ab8f305ed9e04481c71327dbfad9b8f8cb6753d3881c24e1676080526020600060a060006001610100611917f1604a55600051604b557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a0860005260006020527f0efe03759e8d9dc917ffe841070ed6c4fe8de83ca95db79cc73a13bb317db20c6040527ff4ba61410a012a8b7255777cab86b2896c38c36afbf2379df99524a891c928c86060527fd98510a92c7f01cc181034406ef8fc5ccdf7a03761c2c5c7d169304063f0a9e36080526020600060a06000610100611b34fa604c55600051604d557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000526fffffffff80000000600000002fffffff6020526fffffffff80000000600000002fffffff6040526fffffffff8000000060000000300000006060526fffffffff8000000060000000300000006080526020600060a06000610100611a84f4604e55600051604f557f0fdf6115fdff593042a35352f203f84032e8ad490fb30d88ec80c27eeb59b2706000527fad3ba7a4ff393909bc4defb600d0c8941acca5ed88cf0fad0f0ddbaca4b5a0df6020527f2ccf7b3616e76306b829d32655858a5ba425c5a186c46d36d508764f9925bcbb6040527fb3acfe28d877e38a1e317ed39d64f0cc25503d7aeac467413a5e85ce947ad0206060527f76e5e1f3adf56e0ba28ef3b39d373bad671a66adf6d8636a168ad35ff8d1ac6c6080526020600060a060006101006119e3f46050556000516051557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527010000000000000000000000000000000006020527010000000000000000000000000000000006040527fe8c3ff17a1805a8186e1a9badc25b6d8a3f210f3c69f5fea1459f0abd81a48f36060527fb6751428f32b4bc303330c6b4f799a8250ee508d35084592698c1c2da48fc1546080526020600060a06000610100611c0bfa6052556000516053557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000526fffffffff80000000600000002fffffff6020526fffffffff80000000600000002fffffff6040526fffffffff8000000060000000300000006060526fffffffff8000000060000000300000006080526020600060a060006001610100611995f2605455600051605555", "nonce": "0x0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f17a0e4d33fd0936c0c618d7e4b2b3c438d916a4b17d8beb84e6ac1c30c6526d96000527f0c04a87cfd4e8a1cd8a0cabb4654ecab7ac166d50758dc912bb7b0dd930251546020527f244e8bf5bd7bad6b3667d5c9e9e249b7828031e28ac02c709889a98fcc7458ae6040527f2296710c03a3206898c112df72d48e56e53313999c3a5d92586f825ec14541206060526040600060806000607760067f0ca10b062ab2a64f6d1d99bb1517e3ddf0c6fdbcff0db2921dd54f73fccb193bf2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f01d82c69e8410b07c01ca9a882e46bf6daf024e4823d135695134901bbbd39496000527f49a70da2a6c8ac6c15b1698c13769f0bfc32955f226afb8e3adbd8fbb68119756020527f329ebbf77d0d3a915ad4d379945d05c9dce64bb851465d4ef63857614dfa9bd46040527fb5e0b4106beae532d5f5b6bf1d01a3ca43eaa4867d08c13fd77ffee2055d48ad6060527f7bf13d131f09815beb049cea332adcafb8e5ffebffa0d96ce28e37868811aebc6080527f6bb554b6ef4e9071617515950d9d0a988220280a2e6fc619c6171978769cb7a860a0526040600060c060006048600a7f8b755582dbe465616c420fb4ee69487e1469b805eacb028605cff157401affa3f1600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x600060005260006020526000604052600060605260206000608060006001600162013d63f16000556000516001557ff7a7fe9e23dae84e7cf812dc695686b887ee16429b445ab6f639d00ba0f0e7216000527f637def65659e99a5b407f48fdc2539b585ba2d8f6e146f0dcd04b123e174b31d6020527fa8dd002f88937f4a4f794328b660cbb69efb2ee973b7ee99ceead3246562a6616040527feed05028ad90c4cc59e5b972063b803ff0d4b37b86914edc4f781382f46811b060605260206000608060006001616a4bf46002556000516003557fa8815f75827baf28b5644e9596bceec1afa6bd4f8b32b2719949895e4abd356f6000527f881529671c00a8c400e61d1adaac433cf1571e3067ee7db7f2cbe94089e1a21b60205260006040527fe463ab2d0df8d12bd29ec5dacc16bd6e5d7ab6a157f8ccd62d907720d31ffbe46060526020600060806000600162011adafa6004556000516005557faca9c4cba9b9c955f0c7093e000eef2860e1a26cb732db37dc0b4fe883296a486000527f140e3f090a86b98839b500e4db02f9018d7f52864a511aaeffd7a1a63903bc1c6020527f397c19feea180e19aabb56a00a3ae6e9320d882b18a9d347a9eeca5de4b6f1866040527fffff93df204a54ee623369e52cfb52683e1c054ecaf04944a112512084e62c946060526020600060806000600161777efa6006556000516007557f6e39c9b393bd2ebe4956c47cff4461d0e635da55baa39496348e1afeb933b5666000527f57afb64fe0b204ae8c5e4a815b9b4c01010954da2215d6f0d8a40309911357956020527f5d17dd5498fe5460245482e0a3f402a76c9e46088f8dc789ca9af50a513dcc396040527f637d21d68bb042f7dc33061a1c4ce6ebfd237cfb1814b76ab6dfb8d25d5ea0c360605260206000608060006000600162015b7af16008556000516009557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f5f8eb30faaeab04c609babdccbaf477edd8db97db8e55ceeceb1bb493e4426f96040527f11f2cdc4b9300b15b4d525b65182b14c4403637c6bd09bc0a2bab3761a42994e606052602060006080600060016167d1fa600a55600051600b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f71298fd701c45b7c99c45bd59f5116ba047f3a4395625d5585ff1ee798a9c4966040527f1402bbae0fb1f0a7efd300077f319fdaee635704bbd83feea8e49b8b8f8f53b26060526020600060806000600060016201711af1600c55600051600d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fef4c53c19751307dfdd763c9eba37267498210df36acb7f5a1cd12c53ebb85356040527f1c1927f218f94017780fb1aa67ea63feede4fe536e045ab71780bccb672c91aa60605260206000608060006001612330f4600e55600051600f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fe7caa87d70f4898c2911be0d6be2779c4dc9c434b67253933c86bc67ce9377e16040527f47930e2e24a75680d3856231e44ff8769b3cb6d1337b1254a0db4b87a904c73c6060526020600060806000600161dae3fa6010556000516011557f76f66c98fb4388763e1a351d25cb29ba0c680057382b3b11f77b17adb3cc8e1b6000527f2cb34eb253be8115f8d7b8d7fb54fde77d53321c0bd2e8332f07b0c0ee45f31b60205260006040527f0ffe730bb67588130d639bd1116df90328063f88254f6ba2ba9b1ba800aecc8a60605260206000608060006001600161191af26012556000516013557f8f2e7197264574f3342f322f67212913ad475ad738c17dea8375dbfcf3a6b96e6000527f36ebd50703c77fb901f8889db2e34e8756673f19874eba2520ed9a5c8218211c6020527f6f6513104b24e8956fa1f70d1aac9b5a7fe120e5a1c6126f89645bbda8435f416040527fffff27ab007ff6fc61d422ff2e5bbca31b384d5151682bc86dcd2d0f1f986e4c6060526020600060806000600161ee23f46014556000516015557f84defe2b984135c45e723c479dac5e6b89dd55d2acd6b7c60e47af4b58356ea86000527fa5e43cafd9b28c27e2892fa9fba78c493f773d541780d6f7f4208e237a992bea6020527f270819b760296108387de76395ad21bf976accaeea1587e28ee61a5cc458552b6040527f844b530b95507450de77b39b53625832ef337d0c16a5a4098a8ce9d7a0919bf860605260206000608060006001600162017481f26016556000516017557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f202f2b49fb9fa11ed602c1b85523c3d4a032730f598d258c9a8d9680690f02ce6040527f69a7c03b1b3720d0942861c62a0a3ba66646c5ff81d4812d33eb31b012aaa8e3606052602060006080600060016001620165c1f26018556000516019556000600052601b6020526001604052600160605260206000608060006001600162015bdff1601a55600051601b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fa18a04b28cf2058bdea13c327a857e9ea55184e20513c211f8634983862d6d426040527f09d86ca930e8f4af7258d4f018bb98a0064b7a04f8c9ce34014691164c650aaa6060526020600060806000600160016201443df1601c55600051601d557f977ebf64ddef39826bf3d737ce78d9b294f1f66bc0ae5de74941b5831d5570ad6000527f63d9d89fad7549937d74776969c34f744f7e879671791c47fc65fb549915c91d6020527f5e4123666a8d8c0bfa1721dc336ddd74892fef4e23113f17772b9560a19132cc6040527fdbcc5dc4802b0a60678b70b372de8488b82989c0ae119bf4ee54dcab710b359d6060526020600060806000600060016201629ef2601e55600051601f557f62e5e98b83df356490e80276d4f393f8d11c69b0f083adf5e4eab0a1c7c921616000527f0a74d423eaaa5027e4b37cff43c906c556403ae1c53a4dc71e02192026681d1b60205260006040527f312288e39895e53d633a2fd4b0b29f721c61c4486021fa897fc95593f96a120a606052602060006080600060016001614e1df26020556000516021557fc5719f87fdec204204aa70ad285629dbc2143db1dd617cd7943fe3ec7d3216326000527facab3633bdf64a7a9c546cb5d210502386ec46069c281ab81b441d74f915c11c6020527f17a20abd30262472cfacb8968a4d5760ffc0ae44d627eeaa018c97769d197af86040527fffffa3306ea6bba29fca6ba4028aa9431910e521898e1679fd49c01e3430c6ef60605260206000608060006000600162016d9af26022556000516023557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f381bcc91ef1376de335677460515c3629f70d6576ff02e1fb35fd85e007301116040527f28eb299972b3a82dd3f7c947ee00db9d790800d48283f1aca4a6b0f9a81b0966606052602060006080600060016135ccf46024556000516025557fd57bf1e77bbed8ac7b2263924719b52528499babf7091eb7d0e0079df3f37bb06000527f25f64135eb85769efc877a35d80df7917f45138abc81bf61861c1519924c161b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fb8c3d79a0302038b1f61125145d15e4518c1e7079f997a76450720ae5077be70606052602060006080600060016001615feaf26026556000516027556000600052601b60205260016040526001606052602060006080600060016001613290f160285560005160295560006000526000602052600060405260006060526020600060806000600162018590f4602a55600051602b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fcd24a8bf0c46d83f99232640d3e8a1482888c9e65fbefacdb7bb70614087e8236040527f79cce5ee40684d76f67ba83918858707f28b4369441431e7851c6f131044ed4e6060526020600060806000600161cedefa602c55600051602d557fddbc53839af0650083dc792a3fa55ad4c85ee036b0bf5b6345a2a1eaf05a81e66000527fbd94388160d91b09b1d77c7b4963d6bd8c27768d040be765948ffbd68623881b60205260006040527fdf1f93c3f6e3568a40f29dfa769721bb0d56ecae7db187e2a2ed59bbeeee18c76060526020600060806000600161e295fa602e55600051602f557fcbda3bd6f960de2e77dc399318b20c310387489d7ad65d4b4a5c08a849ab1a2e6000527f2f5397a52ea58822ae9ace7a80e87d6064d0b72fa202fb5c9963479d137a9f1c6020527f29f7f8a130e56c85bff30453c7f6bb6ff0c3a2329aa96f881568aff7d5db57d76040527fffff356a0b0cb79c6057fdd64104f634042cebafbae748b06b976969f8240b1160605260206000608060006001620146c6f4603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x6770000000000000006b10000000000000000000000090107e40000000fd000000db0000000000000000000040000000fd000000db0000d37176767676767676767600000076767676767614677000000000000000778000000000000000800000000000000080000000000000007e40000000fd000000db0000000000000000000040000000fd000000db0000d308603a5590076b1000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000290049011777effffff80000000000000000000000000000000000080016801fffffffffffffffe06901a6c010000000000000000000000007f7effffff800000000000000000000000000200004400000000000000000000010690177e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00677fffffffffffffff189007603b55774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a7f80000000000000000000000000000000000000000000000000000000000000029001760100000000ffffffffffffffff0000000000002e00000071767676767676767676000000767676767676901d13603c55686d5adef08547abf7eb197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff76fffff716b61616160b0b0b2b0b230b000008010d0a2b00901a901d67ffffffffffffffff67b368d219438b7f3f901a901460016810000000000000000005717676767676760000000000760000007600007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a69010000000000000000009009087f80000000000000018000000000000000800000000000000080000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9003603d55760100000000ffffffffffffffff0000000000002e000000690100000000000000000003151c603e556a01000000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a9005603f556b100000000000000000000000717676767676760000000000760000007600009013637fffffff7f8000000000000000000000000000000000000000000000000000000000000000116040556f80000000000000000000000000000001774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a04136d010000000000000000000000000063800000001b6041557ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07f40000000fd000000db0000000000000000000000000000000000000000000001029019604255682323232323232323236f12121212121212121212121212121212900690147ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07702ffffffffffffffffffffffffffffffffff200000000000020115760100000000ffffffffffffffff0000000000002e00000063800000001c60435567ffffffffffffffff6780000000000000011c901b7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee69010000000000000000007cc9700000000000000000023f00c00014ff0000000000000000223008050802760100000000ffffffffffffffff0000000000002e0000006b1000000000000000000000009011901c6044557a0109000000000000000000000000000000000000000000000000007f7effffff8000000000000000000000000000000000000000d9000000000000011a7f8000000000000000000000000000000000000000000000000000000000000000760fffc000000000000767676240000000000002b057604790146045551960006000f3", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000046": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x0000000000000000000000000000000000000000000000000000000000000047": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000048": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000049": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x000000000000000000000000000000000000000000000000000000000000004a": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x000000000000000000000000000000000000000000000000000000000000004b": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000000000000000000000000000000000000000004c": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x000000000000000000000000000000000000000000000000000000000000004d": "0x0000000000000000000000000000000000000000000000000000000000000004" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xaf36d8c7408Ce8FAa1AF90AD03aF91F2Dd5cE2C8": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x824a1eeb2eb1cd2fed5f418cf700665ed57ec1f7852554a64e53ab714c96d76d", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556003496002554a6003556002600455", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x61012c60005261012c60205261012c6040527f28988182b9f8a7c79a0b95aed2466f87f9f425a457cc11ee4bf55852380a8a466060527fa5bfcb9e4a1d70b38662b6d44f23c7c4bddbdd1f28d2844f936fe9ed4bb118606080527fb03fcf95770df98315ef2b51af23285549d05625d6cfd5cffe0736904113e70e60a0527f1616db5b415312adbd59e505af5e855ca1d210196879519ae8b207e69088514260c0527f71b3c39a48356625db6957b969775a17925d33cf8280de4f7a561f27a5bfddf460e0527fe5e6216adc6e477b29568a1969d8507ae5cb6e381067759dcc20ddfe14aeb7fa610100527f71a707817752b9c6e171b6f3ada234115aeb6af498c33b5db0dc4fdd490ec997610120527f32d738512b4c2f00c4f6b9b485813c2cf29677cd20c6935cd86747935eae847f610140527ffb999b3053067e11a0741eeb60e87c0371dbb48b7d40b623e85bedfd98fa70e5610160527f268991f22889e661e3fabd207129abbf56759f2832345854e43ad1a71a339136610180527f430b14ab247e0bdb47276cedf11b5e44248e9727f7045fa7df2d545ce6f58cce6101a0527f4fd19c751096cdfa4be443726c53ee5b3d319dcafce4f195675294d476858aa26101c0527f530b2ab949778410a7c78814f61e9f6bb8321676533927a838b47ac5e28349ab6101e0527f31107fd6f10782792ddd849fa35c8fe7c90f02353ddde73098aa5247bb90689a610200527f5ffa1a6195456df5baa48f52ddffbfa7eda47f06593503c6f0ff0fd2e1e9c3ea610220527ffac10670adaae2b42169cfbb800bc8d0668b269be87b3ec21ec103a9a516fccf610240527fcc6d0629b07aa417a6c12ef714cd46fb61934d8b85342c17a39576d5f496c841610260527f2f92b102511e7127d6a76609f7ccefe157b66b938ec02b68f7e9607ca0f27a11610280527f66b91c44fdd498be0d4363e110425122affcf7593cb924a2b9df5de945c5671a6102a0527f61a97414718ff52dbcf0d9b09935a2af4fd3f7dca4990d4b607c96fb3bd8fb036102c0527f328b13a0d4892902e98820ee7471f1b7e9e97783de8ac12e9f41b0620b12b1046102e0527f7f785e3d855e1cefd16d05cd9e55a230e2f89bab26f074373defa8a9357f95eb610300527f25b8a44212fadb021ee1bd6087f2ab0696ded7219ac526c5f8c152d415cfdc39610320527f829314c23dfe811e13a3a0e993f8b4c21b3694992ada7a7e90c327da7e5a54c7610340527feccf6eea7aa9e48a96e428cc03418bc08655cb1afff348bcba819a905b88391c610360527f4ca4cb61f0e479eb14ee59a774d44edcc35ee195bf13eefeb0986f60842a7e99610380527fcc0882223f5772c358abe73bac7813da1e453b4691e26a7670c016afaca3e4686103a0527f8d5bc1107a4cd44ea32617ce6f7920fe1feaa11f278fee50c41083c271816ea56103c05260a56103e05360f76103e15360bc6103e253606c6103e35361012c60006103e46000600562e22c90f45a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e0516008556101005160095561012051600a556020600052600660205260306040527f398d623257e5b0f89ca25e2b0abdc45be46019a8aaa3038a92a8a4a7b493535060605279e55480c0374b2d5f8a9067f6474d5f004633d8a76ab315800e8a608052609f60a053601960a153606460a253603460a353600060a453607e60a553607b60a65360d360a75360c860a853600760a95360a560aa53608460ab53609060ac5360f360ad53604860ae53602560af53603c60b053601260b153600e60b253603e60b353607d60b453601960b5536030600060b66000600060056102adf25a01600b55600051600c55602051600d55609a600052610419602052609a6040527fa83059b5378e329797c8727a21bbaa4a5ce17616f92d360efd0b8e0e6e87da806060527face2068e180b2f589c8ec8af18afa9106ecb77dfe8804391f5ee3ba4020ed90f6080527f48498669d1d8ea97639424edc481d8c779fe88b743b65192d555d1a56ee2eb3460a0527f57e7b79db0d94440ef273372c7400f22ee2f7e5c56ac7c1b3683103753d339ed60c0527f25d0d57ff2c195bea93ad7561a1a0b28cf532746a1ea906bcde94065471b3a1960e0527facd81708c93aaec13cf93bd961a6655812acf22bc174610fd3013c119f746857610100527fc2d637609f89fe5238e89ad03e91eacdffd4c4ba4e8fbbec05d43a8aa31cff5a610120527f5dd8c032bb02bda9842e1bf592a37715a80c94f49089b7e476ba0c3c9cf555e1610140527ff794461fd019e9c9bd830afb7945a2e31d3e43c46648ba01571bb07c355b7c42610160527ff76e0318c95a675bc8455a5aa36412381ea06763e59fd7af71602a00829fa277610180527f627eecc12d38720d86e42e31af2361907e5390197b9a17392f3185579db856d86101a0527ffde9a84b91bdc18e8af1d06f3a1b37f88103369ec05b537c3be1e74b2b69ead76101c0527fb5a148b63a962d9afb9efb48937b9d60548bfa8985671a96d6829c275c976e766101e0527f70aca763727564c42fa1b898230dad822f1bfe4ac0fc0aa22e45fbded1e90b15610200527f3628fe917cf9b6b1c72d5beacf57357ed37d6887ce82d6ad51154df4951f9a0b610220527f9566f4496b2c485b22ab07c45d87d88107f97962d46b7b8fab58cc6eebb3e7ba610240527f8660583056107961d535ec1fccc43187e7208aeb9d778e52738ab27bfaf90c29610260527f13e3acd00673b6da72efd4190c969c7d34d37c2dc895139ba54eba590b7e61de610280527f40c8c5631d46295d36fc4ddb137c5a229c8d730ea78cc08547eb942183db3c726102a0527f48227b3cb22012ab7aec285f48125ea2ee143f0a39920b30cc124f8d9bbddb576102c0527fb8accb85a3c731ca0dd92f31b72f48ac7b2a21234f87a36f478736c23c8dd8776102e0527f7df9cecf0a726cd6493942ccb6c869e5236cd60c582e5370bfafb4c59783c444610300527f9534a9669973fad1b977d22e506cf8f07efb01005d3e548f547e49adfe6fef4c610320527f9aeb73e0a20b87a4c110da952b7f6daabff42479d0fb7729a5fce5949929183a610340527fb9dd655b4599faa4e8fefa7883c8200d745e59974181f3fb9710f397252c9796610360527fff8bde752a500bcd4d15351d2fa44a2058f90404372b9ffbaee1b48176e42f0c610380527f890ac58c630a8ba9338a7cd7c322f878490274a9f3c442f7e87710c489265e136103a0527f5379258d55b4f87ab59b4a3ef618c1c21d774075858c79fcf6eacc9d12b1fb716103c0527fc26d9972d19a97de02a6c6eae49f2fda2203aed2ea8f01de1423dad42db458036103e0527f773e0597bc7c984bfec573c1a4b0e5a1b4ba6d267d65c06e2a10788f1eb06dce610400527fed85e0645d6bb0809737e9f14f46a46a383632bfc938b3d12862e9617fef2d79610420527f978069fb6b915db110abf0dd59b0406f0c091dc0144af5b9fd7a231e786cf206610440527e3c49ea6db3b5abe1ca9559078cfdbc7220be3b418e7e5157c23a3cd862c311610460527f9069ea202ab2bc6277c9d2ee25effb54df9f88779051622ad91308ae29338cbe610480527f6fff93a59978e4211222679994b72b4cd102f6c5d77643daa26b9921fc0f61ed6104a0527fee3d02cc840f56adeafd7d90f916174f9db5dd0112b56d33157d9bf127007db26104c0527f8ef41eaf79c426da513126ea7431d843dbd71f318f910a2866cd706a7a013bbe6104e0527f08a9baea223276746eaffefda11d474184de3fcc2df0503febe747a6d013f919610500527fae5a022c5755ded3cbb7367e9e2ee18518d7388f538b6810afbd1cab813ea4d8610520527fe024627e8afb95775cce17a3d68fe738ba6c62b1dcfbae57a8e41c007bad09af610540527ff0827934b93c8f6043c7cbeb9feccd06a1e7949dfe85f431e41fc7bd69292f60610560527fb1cfaa94696a3cf0b151680ff0f298c4c568af8b0b4df97d835f0fc06cbc41bb61058052601f6105a05360226105a15360466105a253603b6105a353607f6105a453601d6105a55360ac6105a65360e56105a75360ad6105a85360946105a953602d6105aa5360fb6105ab5360476105ac53609a60006105ad6000600060056301288c50f25a01600e55600051600f55602051601055604051601155606051601255608051601355", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x40000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x40000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0x3F7d91B63d840CC7e9601d30DAd1870aE5749C1d", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x95" }, { "blobVersionedHashes": [ "0x010bcc1bacc0b4efe2fd6c8ebcb059554b7dbfec2743cb76df3b8a7ee740a14e", "0x01c55f079e191202edc506f42463ec1ea104100252f606cce0626b18b381665b", "0x014931ab9bd64716f12bcc820c5dd5162932205c534f4894bd6a3b622fb34375", "0x01cbeb6ed0b278d5f17532cbcd6ef9549122ddc71647fe02b76102e661c2a866", "0x0154f2b83c83440d2a051a27367e291a206afc88a25d7b5370e4c30c198b3893", "0x0110029229592fd387075d3095d47f54b3be6ca3250185fd3c6b1819a77d7436" ], "data": "0x5c24", "from": "0x872509c90c2E045B795423F9bEc01a53d6D8Cd7B", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 0, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x2356de7a2eb61efa51548f", "from": "0xaf36d8c7408Ce8FAa1AF90AD03aF91F2Dd5cE2C8", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0xa9" }, { "data": "0x196ac241c0af75099e4daac205ef967b8661f7d0ee55e80169888446cab389dd646c65e29814547a1f2bfb158ce0ae9e8ae5d568801098283650a8845d9c", "from": "0x918c2E9fa4fBEdf538659e6DBbcaa9cE90AAe2B9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x24" }, { "data": "0x", "from": "0x837C90dc7009df3399617a7BE4f8a0cC0ED7C350", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0x7bf9" }, { "data": "0xd6fc5421add1021ba7b3d0f87504500eb4567461d1602ef1ae47a2d245dd2cdee34746967a5147422e229a5c5c8778c4afefd07ef4180c00b3f0222bd94a12e8ae979dbd710ddc260addc6fbd1bce04c17c29aedea75e54333969278f780bc76498305159f3a8a078e56b5406c184d01ea", "from": "0x3F7d91B63d840CC7e9601d30DAd1870aE5749C1d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0x1f" }, { "data": "0x2ad0cd932856858872f48a3bfbca9954e1fbfdb23c2772e59f87706e1a3456030d23d542de2ebaca6fda3fcc9993b7d72a2f921318de9a21cab1ec8ce7e45465eac10df67fe16990a1550ec62a69fd5775d49d88", "from": "0x872509c90c2E045B795423F9bEc01a53d6D8Cd7B", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x0" }, { "data": "0x", "from": "0xaf36d8c7408Ce8FAa1AF90AD03aF91F2Dd5cE2C8", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x0" }, { "data": "0xaa", "from": "0x918c2E9fa4fBEdf538659e6DBbcaa9cE90AAe2B9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x9a" }, { "data": "0xeee0c1280086fdb7ac532c720e1515670341d2636959bd199c4b1100ee2e922c000ade375037f79ef80f2ae56d7abf944e", "from": "0x837C90dc7009df3399617a7BE4f8a0cC0ED7C350", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0x0" }, { "data": "0x4de106835d8cfd34aaa51c34b8", "from": "0x3F7d91B63d840CC7e9601d30DAd1870aE5749C1d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0xd2f0c0" }, { "data": "0x568a42c9ada39ea4fc63eca5d076638b268135716755154cce04fa66d1c83d3b8b79a782b93c2c580acfc5f492b0a5249ef931b043ed75a2577ed64d09c01e73e7a2f27f9773f18025cbcb3a61944e558cc07e2f0cf01f38acd08b33", "from": "0x872509c90c2E045B795423F9bEc01a53d6D8Cd7B", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0xa1e8c8" }, { "data": "0xba2c8f11c8a564895afd28829a476c8d367bfbb098d49098520b29a75f8f12e5bf408cce8b63124f011d4aa443dcbf2d970664c0553dc1dadf390b54da", "from": "0xaf36d8c7408Ce8FAa1AF90AD03aF91F2Dd5cE2C8", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0xa0" }, { "data": "0x45b9bac971d9e365607e39211bc22ae777703c2d", "from": "0x918c2E9fa4fBEdf538659e6DBbcaa9cE90AAe2B9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0x0" }, { "authorizationList": [ { "address": "0x7564105e977516c53be337314c7e53838967bdac", "chainId": "0x0", "nonce": "0x0", "r": "0xb145569777677df0dd96c73eb6b4418c570eef418e7a4ba712917dd45a56411e", "s": "0x29b42229e878d8946805d9067ed114210ae44977c12662476ff31ce3eda375b5", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000010", "chainId": "0x0", "nonce": "0x0", "r": "0x9531cc185abbefee3e6814a5cf10ce99a1e688f1d21b0740d1489dad208fb93f", "s": "0x1f022a01dab73cddf08cee545dc2d66a1666887cc68547019f6afef79df9ba00", "v": "0x1" }, { "address": "0x000000000000000000000000000000000000000e", "chainId": "0x0", "nonce": "0x0", "r": "0x724e5fd54b886e8a3fbcbd6fa5064a01713b695653c4d95a5814a0caffaeb5f7", "s": "0xe18af166931b4e7dd222c91430328dda46067572ea741a9d91271852ed19e4e", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f9", "chainId": "0x0", "nonce": "0x0", "r": "0x18e2ec7135e23b538e1c0c5136cbe0c768feb1079fb10e6042a56253dff3d092", "s": "0x29b40d8e0ff87562883833c3c9f219344eb40ad2ca43572c915c69ec77f1446d", "v": "0x0" }, { "address": "0x000000000000000000000000000000000000000c", "chainId": "0x0", "nonce": "0x1", "r": "0xd0d81ee59ae8e357dc890bbabbb05fd44eedb7be353fcc1037727be613747c5", "s": "0x4806ecb33111550cb6cccd9e1d33a06001e0a9f5a79eb23763b1a45ff5f60e5c", "v": "0x1" }, { "address": "0x00000000000000000000000000000000000000f5", "chainId": "0xd3efce7597e30565b0dbf75a5d11130000000000000000000000000000000000", "nonce": "0x0", "r": "0xe51906a3e0b553c35a8ca3b27cc79430e643ca8a21b696bc475c18a37a23c32a", "s": "0x73fcdc525e9f628eb502b6036a651ab1915a60fac9310a35ae6a517f0d433e81", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000007", "chainId": "0x0", "nonce": "0x0", "r": "0xd3ad68f14f52131b81dd73d61dc10ac1ab6ea5d66282204c1308cfee4292cc14", "s": "0x7b02caed5b8df68d1f9864528dbdafb21532fd927d5f52caaf06c29e2358014c", "v": "0x1" }, { "address": "0x000000000000000000000000000000000000000a", "chainId": "0x0", "nonce": "0x1", "r": "0x7c5495691ec38d78992b52233530e09c309e030d3364e603055192500512897f", "s": "0xf6f846316d3b89c1c5b4594a72b6473e6879e507eb263c90b658636a2f5b7db", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000010", "chainId": "0x0", "nonce": "0x1", "r": "0x7952eccadf9af9becda1646f83c0a72e6bff17969a41f9683dc9278eeae91008", "s": "0x6731468363caa79b27a77b8fbb84f92e4518c6ab5bc2a8ecd97c2c73820c1d0d", "v": "0x0" } ], "data": "0x78d6d46b41cef61362953d9890efb78f2d2956fff5e2977bd0a513dd50b99575278878e77f89d447ab43ca0e061caff5f8193095e119d15b73da", "from": "0x3f8A30c4E084500855A3A35b7B9Ef39cB7B90F36", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x000000000000000000000000000000000000000d", "type": "0x4", "value": "0xb4ca89" }, { "data": "0x00", "from": "0x8c91B5232f6C15d412e35F7A1e10827145bdD6d4", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x7564105E977516C53bE337314c7E53838967bDaC", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xb89760b96f0766e01403def425f9625a3e0c56f23562e28d17a395c05a152eee", "s": "0x1dae2e82b53f07c9f38c7dbb123c7d1c2e01b10ca10abcc079bda42d65e0823c", "v": "0x0" } ], "data": "0x78d6d46b41cef61362953d9890efb78f2d2956fff5e2977bd0a513dd50b99575278878e77f89d447ab43ca0e061caff5f8193095e119d15b73da", "from": "0x472C5AD2732c1CFB6B4bC190Aa174656Fe3c34C5", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x000000000000000000000000000000000000000d", "type": "0x4", "value": "0xb4ca89" } ], "version": "2.0" } ================================================ FILE: src/cli/fuzzer_bridge/examples/comprehensive_medium_1.json ================================================ { "accounts": { "0x0000000000000000000000000000000000000006": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x0233362c058b2fCc8093841B1073A90D673E7F12": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x7f2c75141e16bea0fceec67f673a0a3578e66fe55a9b6405d1ce109be7593206", "storage": {} }, "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2825c17712cd3e7e5240fb76fe09ec612d0337b643e5c605c3cfea77e44d0b73", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f18d7e183350155e55a2059b6789e979c6000527f162a8843ab70a8eba655a2bb8d0607fa3746aad9927277b28d670f772ba0e42a6020526f0e0bbb27942303ba4643e6cc17b4e6e56040527f6d5ae618f9d71a50f10169b293f4377c461a1d03b52ec7af7b1ce02652e5cb1c6060526f0a6bdca5027d9caded893298277e37f76080527f56dee841072651c9146559bd2ae432e412014e577ac59e545c1b4ea3c3a7d20f60a0526f1edef94468137f636c21ec9b2c7d7cfa60c0527fc372437bac86e5773f2345daf41fd6677d2641dbeb85498c04a207e386d0dad760e0526080600061010060006000600b7fba950d3f783ad5c861b063c1611aab1788e41cf024c88bb16fbc34ddfb498ae1f16000556000516001556020516002556040516003556060516004556f1c12fa0ddd78a26322918fa47ee576e16000527fc52e67586447920d913c04cc3aa9d9b0cf74557abbceb64301f95290b5d98f5f6020526f1ace28b99aa546b60b40fc32cf4813ea6040527f8e261fb3e6584b44626b98af977134d78c268065600faeea62ceea235a1a4d4c6060527f7647a4aa67aa19fb376ac9862fa6bc2035a85ca785a46d13d99b2c8f68c04c986080526f07fb32d7910ec39a1559394484b8781d60a0527f217642f110a5e1af97908450f518e2b4c003babdada7c62b54933972248a836b60c0526f0b07856ee7b4a57aada15dee619726a260e0527fc03d008bc1a8657dba9292c41e0bc41dddab3c9d414d78c0b301ec95fa5aec7a610100527f185175042845c315ec8ddb2cc50b71a3e9597bce1d1528ba953af14071a6122861012052608060006101406000600c7f39438fb3e5ac23fa07111ed42f89ef3ef4a321915113e48407290248efa9839ef46005556000516006556020516007556040516008556060516009556f1819f4adb9c9197bc1b246c466357e3a6000527fa6cb0c9b4a375e66ae200da6e1635b6c498d9519be4d7e3434a75a714cab81c76020526f0215c8a410e3730f02d2607dfa1777bc6040527f435377896f04799a1096429c072af1bb7d067a82ba8ca5beefe153edfdb7e0dc6060526f0977d8785df7bdfedd6c96eb5d1b0ce66080527f902a5e36b6ba48e9b37ec7f392a20c6b6d30fe5598efa1458c16db0c1d8905de60a0526f03ad642aba1c3eb74fa9405b1c29574660c0527ff680cffdfa8abc14d05b8536bcaa9383b5a6a5395e7b3bec29149ccc3ac9afb260e0526f125e9092cebeebd9044a547721c723b3610100527faf64a6d1001edec3b9d0cbfc26a855568fcd0c7dd02eaa54654fc5cf8a41a17e610120526f1105acf307fd6b74c24fd0c91895d5d2610140527fd8870ad51fff134093ae274fbf80ed5092376bc3ee833ea1b3888f67551a28e4610160526f179592fdeba49a7c7c87d09d397c232e610180527f37ddeb4a4b52207dc0353cac7aef37e565e40aaf6315a7bb7047122a369ce97e6101a0526f0f9ba6e9332a408733d57c979b89dac56101c0527ffd7757808b6b5376955b1fab01964fffb149b470b18218402a7b5e9e06c040636101e052610100600061020060006000600d7fb79b32d94d9f9728fb0abaa92d188782899a631d43adff1e43fbf36017e0f5e6f1600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f12d4d9ac9d612b2e89094982ebb0dd056000527f6cb5f28780f25fcf5a7e00e969e5d39b059e7324dacfe868af3c2c6d97264efe6020526f0659b6b1f675dcff737d026a6275c6be6040527f1de5fac6d9157fcbd9f19472a9e9ab8c065856416f67960f6e41feb126c28d9c6060526f12a7858f7ff99c7ab499c2f4d52a63476080527fcd6fb54a854ece55f28a30d56cdd82e8eeb5d6068b163220cc23a48c2a6f27df60a0526f104ec55ef915b40a3b1fa5ef40871a1f60c0527fcf8911004ad329aeb9afaa479edb2484a7fb3f827175c20e7765adba071d2b5760e0527f2d6fd0a73fb22e08b7ee9928b2e629fdb39bae99d1ad9642a0dd33bec8c83a51610100526f1311944a5123ff0763dd92602c7ef4ee610120527f0f34546993528db770a0a08416a527c31f6ccf4ae2ed0fc3d42cdbf0da43f438610140526f08ac51bdd67f319fdcebf06fd3ad221d610160527f09c3f3379b1ef6438f3e93ec5d9a710c7f9a824888e6c7dd2235d161116fd8e6610180526f0ed139544b80307edf4541fd24bc72df6101a0527fefa9064b09bc16f538449338cc4f1a8cd82f7fd07c2a832ff533c191415c88f96101c0526f0f3ebc407dbad0cd2286d86b561b9a626101e0527fcdf55653f05e8ee2c2f5ccc6ad8f3eb2b8f33ff1bfb2ec9008c94003c3066a8c610200527faa0cd89a761006c7929e760d77864b7b9b38802e99b8f3ada864c205136afdfa61022052610100600061024060006048600e7fedc10d2f09c80b115e84dbb1b3e73ee442644855390baac1085016b748c56b13f260135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f0f36c4ee91f493823c45fcb1835c3c806000527fea7b2b2ea22b4de446fb739a72febc2a7a99156d212d97d1a13136f06689d5266020526f0210b2e54d4c413ea259b9b7f29a51336040527f28af4fc715a4c05bef9c30d07b263b98b3a6fd072b4f6dd16f4abc3f26df2d936060526f0eb656a6cbd02959e34fe5e93fc698b76080527f1ca37a22a5fffac75aae9fc0704858edd83a46264428769dd541255d9ed8dcde60a0526f0e55065268cdbdfc6f89c1f3a452c7f260c0527f68b9709ca49c9af06c27934493e952cb7d854cc37ea6df8558c06c77fad0bf4f60e0526f08b02b9db5015bf4965e874d7d21ee7e610100527fe2c3d5dcd2bcecc4de0cbf46726cd46408768e174930670ae1d91e4e2a9b9512610120526f12623863c9afac9aed09eb3dc12d1360610140527fe19cab5ea99227983aa3d4269a460b422fb68588cd95426896c86bf055279549610160526f1764827fb27b8401fd698170d88ffcd7610180527feb8f62fa7f06757a4066319ab99686efdd6a8dad8623c0dbc5bc1237bd593aa96101a0526f0187efd101687306a301cf3e33d8baa86101c0527f97a874fe3b03f271a832b0c9a5fde81b9d6418ea17af8fb91d424c57bbdb91286101e0526f024aa2b2f08f0a91260805272dc51051610200527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610220526f13e02b6052719f607dacd3a088274f65610240527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610260526f0ce5d527727d6e118cc9cdc6da2e351a610280527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016102a0526f0606c4a02ea734cc32acd2b02bc28b996102c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6102e0526020600061030060006034600f609cf1601c55600051601d556f02f499ae499faedcd82c997714c7d5a46000527f2a5fd4153be6e4c28059f4321a1049ae8a457737265470fe86c63b4726dcc3c6602052608060006040600060107f8a49f51ce511219504f9cc6a36aa91dc00fa02a2c0a3bd8131f89c6177d8fda6f4601e55600051601f556020516020556040516021556060516022556f14464c85b84b5df1762b9874fbaaf88e6000527f5f36783755beb33a13b2d48bd63aac0e0f5e9341e6850bea6aed77127dfd6df96020526eb6cca1087d6fb29d9cb9b48be39b616040527f6626c90fd491649070034b958a8fa2b0e21fc8bc073fc83871727d09f6e19ef260605261010060006080600060117f204423d923e464bf4026ba530dc24a2c11827699ce253883d0048d330f49e236fa60235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x6009602960256095604a609260bd54155833303b8415735142a344987d3b99958c454796335e7d3c41951c19805d1337509a12496a589a7739a2689b833e3407513d3b00031b4971a39ca24143915657f51d645b494407589af2a05076137f567d3f780a07676c4a786f7a48460930308f6b6c6c843830fa975d65a431346ff51a7c5954345e74301b3e9b3a33fe053619195d9e17661e151d515f41f306858a7a6e183e74006b68033478f2156244719262160443025f316e1e3b78008606a14647ff7c201a6f6c3070864a3008185a0a03185d04a33af508337b353ca23b3515563d7e8646803ba0751c9d480613765216187371097af43a436a53633bf5460052599c123f3c06086b0b75785c72700a0b1b8a33158a9d3b6f60476255656c370402336b03068d05037f79536d619c966d4a171b17991a6e56091c55146d5b53643d51741d399f7f62485887745a908f57766a50111cff0b6d687c80ff770a60fe6f423437407d543c325a89125a3a57315b0a6a7034fd5a58201c5341653f919c72fe633c6f147a30375f8e30486c141210773a6609130a601a799c503847171d37175e17011646765d0bf51c95188b74314316150076707049610a1080fa8d680a53204275905091175f6e516a5a67063698fd8a5f3b610237696f41466d7f331aa39d09f101897a4132916d9b1b015674885a4a55065a5770335bf58808f1a47f9288133e445671453481048e7956345a364072866b024613100ba45c321e983258058974106e69998d1b611a0b38306c156e7c683e593a7d3a3a5f91635a02453a7f6264966d40985e883d720359823a57063e6c340b5f5e10351890ff003a66755215373073097d4a97610a124566687853015d165c8f50690017197e917a523f77390b6712611df5f157657368369646160702746579033a1e6b6f5d104979609a72035d975436779b067705775880048d6f1d3e7c387052f43a9a580a006c6b63f3ffa1171892ff8a79553f406c4a046614a0638c465b58407574309e05597b5d573b05031135423c9d195262010008113d6e5e92353a4643029b9a736b8a76877a0a050a457a3541a111617b1a3e8643205e4aa4086c8a9c3a5d1a5217489b10a37d77040608651e3a343e1890406b7e8e7443349e377e57196e7478076151313e08879d19583697928989900b447a31653a040b51356962760268057b8d3136035b37585001f20776195d71a085556ef4736c338f6cfe995a7d5d12f03a5d9b681a6457053c7795761283109a81771cf24a3e71174833f253866d0b6c0138f17e7b461a441bff7f9c43376b480a45367a62193c1b581e5816327f473670f402473f1348663b9e517b0100820b56fe7e7e9b386e04f5935a8a4738090307649419173a3188ff601076511d6f473d519152323b703af0f31c016157", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000000000000c" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x6000ff7f1f4eaf54315c8fae4e6d3a941db177e3868769ee85c9e234085f7093ff2440626000527f9d7af2156eaac085792d574cbf73ac0b224620fba31f374ec0d4531cd6f4f7386020527f1950b494d7aeb286ce51c460d4c512946c26af7b169c969e7da114ce7adc8d766040527f909210f7f694e2ca6c1d60f6dced44d9c18e9093e026d102f8d5339046e0c1d16060527fe368c0e9c5cb0492305455ab0a1c0f37501c901b404a1c027eff554fe35a07296080527f6ad5803c0a0838d2da46ec60842496d768b7075d698cc666480038ff29e05ad760a0527ff7f742ea0d73c844228ee63b620810759f3bc275f790c8e0bfda754479b5f0e460c0527f9ee360a58a352ebb2853bc95a9181e6da00f0bd105993384d12533e7abfd46b060e0527ffa992bb9e68c423a8a3c834bb541d8986e66b1bf2eac3281420bfc1d08434219610100527f6c5b212321f86af0ac903c35f370673f0d3ca1994da43a6bad6439b610260319610120527faa3378aced9bbf492423e078b82103d33f3ae4caebe93e76a342e745fcdc9726610140527f05014092cefffeac2583a70145acf06b8d379f9a6c4eb1e2663da51a3ed400fc6101605260406000610180600060af60067f6e26585d5fd0a6ddee33d39117e99f8ae9f67d8185c13f8fed674ae80c121c74f2600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000006" } }, "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xaa07ea6d7ebb90738862bff26aa53633e9a6a4c2732f31c270f5a02687a06eb2", "storage": {} }, "0x535863dA03bc1834eeA10eeab8FF498565F33f2d": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xb214f8d7a564be547e6de1404f829b88b9c5f1bfc42a708554e97423e49a9def", "storage": {} }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7f96e27046ed622a1ac747d68654f22e78d72ebd5dde5cfe5244e8a04d8c59307f6000527f0cdf327d2d3b444f88d3e2dd89f5def6e143135120384cd4cda73cdfe8cfb6556020527f73c2af4f9cff559dc5e76c1c8c1074891ff284df755d54c990bcfd89410efa8d6040527f7d870f436757bec47394f2c6fd4ebca744cb39659dc9759dd20a0934b93449a66060527f254171faae8c94052703883b5cc818dc8d4f0a182583388abcda9d7d3b98885a6080527f0298db5babc9b6915fd16c9d77e9a9b0d5698dcd7c6798d4406082516ff92f6460a0527fdd3fd1b61ab3f616b967192b48d6846d5eb669b8191ab24030bc5c322016ee5a60c0527f6f9f9a9dd0f96c49b9a1dd4ec33c20556baee81ee0a6dbac1027bbcbd2d78ecc60e0527f35c2c76473ef7fab214d4094ccc9fb10be83173276dddf1769cfbf1fa4fa0869610100527f084b1303321eb6708e861622f0e697a6f7bb6b28924cbff65561dc68c4d70789610120527fb38665a80c68ec7c4c5926675b598c8e2c559664f2de200ee44fe4c79c691a8b610140527fe35f61a689d051e2ef0e84c0d36c1a7deb4fec99447762591c6f6096530bbc66610160527f24589df6f317949386b8986b6a659899bb0c0b0ef1fd412a0b885921ad867201610180527f419906d725ad3628677528d9735308ef7b51c8aff282640658ee31f1e0ea04836101a052608060006101c0600060ae60107fdec1d9215e7dca700a09dcb57f9076e9d92bf98b71253c9f8aa0c2f7bf0e8c58f1600055600051600155602051600255604051600355606051600455", "nonce": "0x0", "storage": {} }, "0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x6102e051608060006103c082819290913e20606d5560606103206102f05e600c3560606102f0fd", "nonce": "0x0", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x600bff286001600055600660045d7f6001600155600060005d7f600054507fe4014fdbc93a0c052fd4d7fe3b1827156000527f906b6af91af7e5189c91966000527f5d9f7c1dd36000526040600060206000606020527ffa7f115422365081605f82110ba02d6020527f8f3f386c56309ddfcc0d9555be6040527f0ff1eb52b5a7f46002556000516003556020516040526060606053600460615360605260606080536055608153606060825360626083536053608453606060855360636086536060608753600060885360f36089537f1a2488a7583830e08a2d3d95491bc5cc8a8bd4324a308e2ae656ab355a6a7cee60a0527f202459f3ea19d89fdf452056ecb75bbedbf440c26cab6fc613700b334ce193d560c0527feb871f1876b0658470874f9ff9209b1d958f9002365e0aba7e9acbea7e98632960e0527f5d88dde4a225dadc9eb6444cfc690c047831a9d0d65d4f73a4432b8749ced7fb610100527f45b0ebf658bcae7bc00f675b825aa5749016393917c06e56554f646f20e0528c610120527f87e743b4b23c3a75cf536ed88c258677a578cc76b164b77955e5cab4bb0e3e8d610140527f37d9a1d4409d48965ceaf0bdf64f54f49194aeef28c06bbe1f1e7c0054248147610160527f039deaacdf4659d9d892b472b67a4642a5a605326275bdf953aaa76d4950706961018052608a60006000f06040600061010060a06000855af1600555600051600655602051600755600855", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x0000000000000000000000000000000000000000000000000000000000000010": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x0000000000000000000000000000000000000000000000000000000000000011": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000012": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000014": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x0000000000000000000000000000000000000000000000000000000000000015": "0x0000000000000000000000000000000000000000000000000000000000000012" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7c1810006947494e06de82ec6c913c636d201144aabea6c44cdd285c84106000527f833f564ca3bf6dc32bd8ac866434694f71293812e07d12849bc05213c23691646020527f6d33a0b53d3df1a6de97147b5157cae198686cf1533f6bb9833007bc7fb3e61e6040527f6c91e941fdb2af7b0b19db801767c3e87460dac3906a9075367654892b622a426060527f52769125e5c0d9dc254d06af85a9a45919df1ac386697f81f5c4ca9b3d0eaab96080527fa6d3cf4af84dec80aa879b35bcdbf309d777663fc6b92942e34191503b3ad03260a05260cc60c053606b60c15360f260c253609f60c353603a60c453603e60c55360cc60c65360cb60c753606860c85360e560c953601a60ca53607a60cb53602460cc53608a60cd53609060ce5360e460cf5360ff60d053609060d15360c760d253608660d353600160d4536040600060d56000603260096008f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x79cca006f0792Bf40a6d4E011c2884eD862A52DF": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xada9e915b45b3f9f3f335fe00a484308905ec68a78d49750e1a47ec4f9c17d23", "storage": {} }, "0x862B38c425EF5544d0127449A12c89C46dd3E050": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x35c0e7a818e7367e6218647e77752b4b0d92f50362a7eff324915762586509ba", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a056c100000000000000000000000007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb005900b6f800000000000000000000000000000007e40000000fd000000db0000000000000000000040000000fd000000db0000d305901363800000007f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff000001712000110000000d0a300e750a000000090a0a9009901a6b0100000000000000000000006d01000000000000000000000000001d177f80000000000000018000000000000000800000000000000080000000000000007d76767676767600000000007600000000000000560000000000000000000090036000556f800000000000000100000000000000006c10000000000000000000000000126001557d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97f7effffff80000000000000000000000000020000440000000000000000000001016002557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd637fffffff1d7f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff00000167800000000000000168210000000000000022099011151c6a01000000000000000000006380000001901d186b1000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1d6003557e40000000fd000000db0000000000000000000040000000fd000000db0000d36fdac7fff9ffd9e132262626262626260006600455762900760076761e000200767600000000767676760000006901000000000000000000900717197ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb7f8000000000000000000000000000000000000000000000000000000000000002901d6005556780000000000000016f8000000000000000000000000000000016056006557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6a0100000000000000000000900760075567b368d219438b7f3f7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00901768066aa0a5319bcf5cb47f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c100000000000000000000000000805684783921454358970526f8000000000000000000000000000000190071b6008557d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf967fffffffffffffffe1b60095567b368d219438b7f3f778200000000000000fe000004000000ffff000000fffff7007702ffffffffffffffffffffffffffffffffff20000000000009686d5adef08547abf7eb686d5adef08547abf7eb1d600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff677fffffffffffffff05901015600b556f121212121212121212121212121212127702ffffffffffffffffffffffffffffffffff20000000000090136fdac7fff9ffd9e1322626262626262600777effffff800000007effffff800000008000ff000001000012600c55680100000000000000007e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a009006600d557feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee681000000000000000009001137e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000651ce97e1ab91a02600e557e1f0000000000000000000000000000002000000001000000000000000000006a01000000000000000000007f77676767676760000000000000001002e000000000000040000000e0000000009009712000110000000d0a300e750a000000090a0a63800000006c10000000000000000000000000090760006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffffffffefffffffffedffffffffffffffffffffffffffffffffffbfeffffffff6020527ffffffffefffffffffedffffffffffffffffffffffffffffffffffbfeffffffff6040527ffc3a2f02de65712b945c08d0980ad749b92bd7d38f1b3e470deed91662736a1a6060527f3da9b83f28fb59f39d695d836c4595213f2e68b3b8a5bb83a114df3734f673d96080526020600060a060006000610100611bb0f16000556000516001557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527faaeec1df015b2c79efd02a48950975617f8513d1f23dd02cb37cef70a1a76e9660205260006040527f6b25db539f5946185cbe132e22ad09e1c01fab7afcc9c52d5b940d7c87a9ebab6060527fd5a90ce8b987b05942d0d6cefa2a5c864bb377c4e876dd42453992055b4a50c56080526020600060a060006001610100611ca3f16002556000516003557fbe490cd43a8c01bf6a07ed9ffc82d88dc8661980f11412e953a32768132ef2366000527f7b952eeb664746755c081599cf42620b39a630439719b17a0dfd8beed77ccb2e6020527f01c1e19eec67f278e72a7c65b8a304172eb1290a81324a8921ae362f3a20068b6040527fff9c58a91b2e2d65525c7cc313c4d9e806efebe2b25f94e970f253fa14b78d016060527f5361d075c7705e054d8aaaf2e2bae692828827eecb21697a0e50f594dc6ec8bc6080526020600060a0600060006101006119fcf16004556000516005557f4ad81e14a688ea777d58214ecb6214763735abbd317e3ae7f789254666a873766000527fb5979f0161380baf7720bf616da397578eb9f5c54750a8bdd7b06de7d549e0f26020527f765171a147b702a79decb6174bbc322f9a5faa5737d08efa04d8ef8b2c7e355d6040527f41b63405d22ee996112005b48fe252bd767d60147a83a579003db8c80e88f4726060527fd8eadb1ad524deafd2791cba205e43ae1416040133e84075639184b180e7ae4f6080526020600060a060006001610100611ce4f26006556000516007557f95454173cfdc225fb21debd06f84ed70994e98e634852bc59122192795a562706000527f7097bc46cc19a70bea1e2122383ef1dd87ede22020e8c90232b086923d624b1b6020527f5248d32f23121577145b806de74c030e2e26052f8024092d6b7ffdf08529f6836040527f3a471768c788e80a9e0c79c6514e91e244544d18d91c5e6d647d8dbf469b13926060527fab397df44745e87f5cb6fd5c279c4456bdae8d5ab21cd0b476c802047be6aebf6080526020600060a060006000610100611b1ff26008556000516009557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a06000610100611cd4fa600a55600051600b557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f0985caae0f3ee3530d6ac3e401171f1dcdd87cd77137192312c65c16a0e230e56060527fbc539f7392385647f381799037936d0f8460d9aa16928f192f085d32ca60fac26080526020600060a060006000610100611b2af1600c55600051600d557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611caaf4600e55600051600f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611bb2f26010556000516011557fd95a8a726d8b94500f2b1da117e9b1720c4f0f4ffacab4ef82ce69e5bf0f837e6000527f18ca11386098e3bbb69f2295e67a3d92c225402224f32926597894fb0a1c338d6020527ffeafe36c9b3c6426c2f5cccb21b765f489f7a549f1b94d0fba5c5f2150a53f5f6040527f97dbd752f38179710604ba60b84b2b43c8360dcfb58a7f99bc2e4d73aaf2c0d26060527f1a6d57f85b6654b3d246f7399fc0491529acf9baf253229e1cfea1f652d56aa26080526020600060a06000610100611a58f46012556000516013557fc9423f1212150d2f42d3d65735ec98a59f0fa7cfee9851efa0da6477383f84106000527fb3f71f3eb2437c230de62fce1f175b724c23adfc6fdff1863b73e71b17a0a3416020527f47341a2c30078fc15c2d9ff0fe33dc54a2f79ec53367d6e1bab8d48fbf265bbb6040527ff9459daf8d64f0765c546c4ee8099fab2bbfa31fd8cb21df9780c31a7ed7a2f26060527faa0a9a0f8a06c5385411f2efb5791de6750fc711805044550e2883846b817d9b6080526020600060a060006001610100611afbf16014556000516015557f8ac0f7691fb4629af96eb4b962e7e557b3928b47a38f452a1cf24df0c0ce2b1a6000527f97c6bddb1a11e1e223c3008c4b5bdc48c998b30c151734a5e48acb62f7041e096020527f9ac61545dcf4cb6a47cd983e9538919611d8228a028962787ea750505cc323b76040527fcee4c729d8bf46d0e1aa5c2924b70a2e1458ac9b082a21c7fa5c8c91000a1d326060527f669d02080b01b70b086bd2a25d204c7cfdecc5a68e8aae5eeecc24df23f7d4316080526020600060a060006001610100611c4df16016556000516017557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080526020600060a06000610100611b30fa6018556000516019557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527bffffffff00000000000000004319055258e8617b0c46353d039cdaaf6020527bffffffff00000000000000004319055258e8617b0c46353d039cdaaf6040527f37cec76d1f3bbfec96d5feb30a095d8bccaf8e3b3fd246563d44876c7e023a816060527f2a5a699c56efb1b8cce8066db3ea053eca2f92fdf27d978e9d043b296dad7a376080526020600060a06000610100611c1df4601a55600051601b557fc598d1bc7b8deaad833597c6065bf2c5e39c14fbf6857d24017a9a52a783be5c6000527f1e52f24e498515f78270588cb3cdc1dad2256baf7b4350223143a9696a36574c6020527f3bbfae4facdffbb18c8f3d5df6fecda9339decc06c8d43652c73b2ba43f5773a6040527fb6a9068ce72b7e6724d70493a8e28c656aa8058a47ea010a95d73905b25bdd716060527fb674f6b897dfed1e24cd7825b4d7c25396a4b84840fe9d99201c5c5e833d96946080526020600060a060006001610100611b2cf1601c55600051601d557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f7421a12359bf7f411da04037c4168a24aebdf951546d203d7f52c1d9a083086a6060527f844fa38b8e9588a8a8a6a8ecc77de074e4b104edd2ce74d0cdadd2674ba28cca6080526020600060a06000610100611a39fa601e55600051601f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006101006119fcfa6020556000516021557f9d121cc301f8aa0b6c410c09755c16006410ef563790acd435ef44521f31444b6000527f6018d9327b3eb5c170a4b5ce7177734f914c0d42d6b8706ff4cf775ed56bfe5c6020527f1216f7a990c04237f0e44a6705030d84cae4ec8d797b9373cb8afe7771824f2f6040527f83b03bf29b9090a15ce7a7cbddc2b937b10bbb71c988cefda85a0fbbe31bdf376060527f220cb57b3bae8643a825a585ffd2982ec3e5227784ff9dbd113e3c71faf998d06080526020600060a06000610100611924f46022556000516023557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611955f26024556000516025557f911aa27b36f7d952dfa15589fa0acdd4353d802f9e646a27cf515b3b0c6ad9f26000527f9870e87a88d959d124a98b897a79732bd613d9363888769490327ccfbc8c85606020527f85bf05a8f523b212d5a38da5f7494760ea94f79717fb401cc31c0b52012d89c56040527f151cdc310d1c0fb068193dd9995cf6d33e21f4c543b1420b28b60e264cf438366060527fc02016e4f0a388500dda3f644c0a0a8369243df9efb5db3d08ac8d1911eb149a6080526020600060a0600060006101006119f3f16026556000516027557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006101006119bcf46028556000516029557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527f99ee9c85744518a641fb86485494690139f717ae93817a0f56ae938040e2064f60205260006040527fffc0f614ee1e3eb711183f058772b9b99f3d17ff31a7de44ea279b86e659ce506060527ffa558b6d6b4b9fb6fb28c55bce8acb4d4f437d3615dcbbc0a5cbfd8807833bce6080526020600060a060006001610100611a12f2602a55600051602b557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f37b7a14518d8e8c2c425b7a5fcb2e377296874a15dd38945013a81877a07c8946020527f37b7a14518d8e8c2c425b7a5fcb2e377296874a15dd38945013a81877a07c8946040527f04fffffffb0000000500000000000000000000000500000000000000000000006060527f04fffffffb0000000500000000000000000000000500000000000000000000006080526020600060a060006001610100611909f2602c55600051602d557f9add50aecb2590beabb40a73e52cb7d25eee639a881c53aec8229c3c89b147c56000527f22773d54fd753a32afb62abe1bc9edfa1bd447242925928b498311022a4088046020527fb4be5a59e02f6c6fdb331753e275322d60b3b6ae41886cecb24b6a0fa38b482b6040527ff9195e00fff88c599a6b5616733f28fabb45c11a93092c035562396e523a7fbc6060527ff338d766aa5b91918b6e29c80eeb8d6b912a0961e2974ec5e3d86a75e06218556080526020600060a06000610100611c62fa602e55600051602f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611c83fa6030556000516031557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611b9afa6032556000516033557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fc37c841d078259954317bfdcfa432ecfb86253f87270028f023bafa2dd25924f6060527f0bb4264610afcd1aaa8c08467a307f396f8de2b77a0ebdab2b2870563909da5a6080526020600060a060006000610100611aeef16034556000516035557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f02fffffffd00000002ffffffffffffffff36b4f008f546db8edb2d6048f529706020527f02fffffffd00000002ffffffffffffffff36b4f008f546db8edb2d6048f529706040527f7c6f7895747231ac77d562339b36a17666dac663ed5e15f8ae40cadf411cee2b6060527f5dde658d2a1b8ec9ae16d52ba9d04e5c0387810a562775dced140eeb21b29e926080526020600060a06000610100611b38f46036556000516037557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f20385e628215070814ecf86812295e71fcd8a943aa03877f57f7868979eb6c6c6020527f20385e628215070814ecf86812295e71fcd8a943aa03877f57f7868979eb6c6c6040527f03fffffffc0000000400000000000000000000000400000000000000000000006060527f03fffffffc0000000400000000000000000000000400000000000000000000006080526020600060a060006000610100611a13f16038556000516039557f0d387666d4a50b0794b35a1e676f95921ab4a9a0418d6d90dd7dc279bfaf05c16000527f85053f55f125a5458f9ec4dbd99392a5e913eddfa113b37a8c6fb531e07d36726020527f93a478228437246e849746a0cf48fcd25bd8ba790ea446217d227ed1fde8b8276040527feaea26fbd043f12db289b0745b8c77395a68a6c96cbe4ad6137bbe1a7e5edc546060527f7c5406ac087ca551dad122d9088dd93360a7ad33c3c7b92d7e56887e0f61f3946080526020600060a06000600161010061199cf2603a55600051603b557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611b0bf4603c55600051603d557f75a4be67ccbf899fbde0dd16b3c3f6ac6278bfe397ccff21857d15da866bcc4b6000527f1256f1fb4828792144fbf30fd0f9bd3315e64786bee2fd21f264bc2dcde845516020527f2c5723112c82d6c1f80000ce4a6ffa343377307ae58c5f2f704133bdaa9ae3c76040527fa574345be4ff67553c7bc71701665077ee4b6e3e11a15eac13770fde5b233ca46060527f3572978e4e046c9fd18ca0b5582f2a7ad14d7838aa452a18680ae3a429bc510f6080526020600060a0600060016101006119e2f1603e55600051603f557f2dd2fc34631156074982459867a4a96ed1b1e8f752e7b7a49a11780986d2d02b6000527fff057f2ddea4367d67200ac15efabad425bd7e5ee028854c6ec3b19bc8895ea36020527ff060d2a1739e51e785ef0ee757cd97560d7fc13501cb4e1c39d762a309fb841e6040527f0379e4cd9a4824cbde4686ebd16df416fba39fae4b714c5d0d24625d084469666060527fbc3e9f5e3e90c98795007800d6c0ca9cc3d7560c89c36068332792cbe4e0357f6080526020600060a060006000610100611b73f26040556000516041557f10021ad946641eef1055d665d7030c60dcf39a4b5b4eb19a18037c0097afdb246000527faee82d13e528762e433dfd89373588f00f5a3ab03acbbfaad357fb33a5fcd5b06020527f571d96ac94c21a38f85de4546e48ab2e4a579cc366def7eaf03fa803b0d0d9b66040527f2f02d0377759d89eb38a99b761a7b796495493acfe161d4634608210c551575e6060527f769332a3b848b8bd69b4129911d2d5a8d3b9548cbdf6bbb6d4b285e4fd8357d56080526020600060a06000610100611bdcf46042556000516043557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a06000610100611a76f46044556000516045557fc3df4030e15dc0d030692656dfa055d2b3ab7d1f1f157db691597fa809dcb3376000527f66234c39bc3363275b52c3fd44c90f98897803ec12458bd84c26d005391f3fbf6020527f9c942bc9c73cf249f3764587e3aa0f5d3f292bb38ccd0c9b4cc8f08ee0cb7c956040527fd97dce720557d57791a7aab11f659d3c3cc27f3212add2c8434faeb04e8340bb6060527f46ed59c543d1f37e8612a2e11f99882f5b5ded8ed733465b63059e7c394f47f86080526020600060a0600060016101006119aef2604655600051604755", "nonce": "0x0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x6030600053600e600153603f600253609160035360056004536071600553609e60065360cf600753602060085360e0600953607a600a5360c5600b536053600c5360fe600d536044600e53608b600f5360c56010536061601153608e601253609e601353603760145360c3601553606960165360876017536083601853605460195360e6601a5360f4601b5360e8601c53608c601d5360ea601e5360406000601f600060077f9f914c6b08e682a081d2d8fd682c8093f8ed74ebb3ec8711598863921e79de7afa600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xC192f888ADA47142Ef2c856FC2C35197eea9E718": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xc14a8497cfed2168f05952f5437042184f962496ae2ad8f389cf588ae6ae5426", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f01de0d4bedf35144d5022ea8f807f68bc79f19abe604e3c4f9774f21517e0e886000527f2e91565c9e29fd6b1406b4dd148bfe805723651567cd013e1a5ff05553f1fc266020527f28d05f9ee49d9caf10a86175605981e86d9c9ae128158dcac272a1df69f7dc516040527fafad4e9799b8ab2e1f7d598ba9ab82cdef410a3f560a2f4fb300081766e9969a6060527ff4e68ee6102e13059303259b7d880ec183869e0aa85c187c3264cb3f297920d26080527fb5623bd151376ae749a02af6b642819f64a5a8d7abe46052adcfb3b44c8431af60a0526040600060c0600060e7600a7fb915f367d70f2d7ed301673fc7f9d93dc9e7df385991376505ecfd946d36de30f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x600060005260006020526000604052600060605260206000608060006001600161a321f16000556000516001557fa5621ec461df934885df87c577f28066b8c6bf7ae936471ac0ac7d1e37d176786000527fe08ef3afe4073e521f5a89f4a9188ba00a226983ccf1e46a2ebbb8109f88ea1d6020527f85f5fa439c5a885b49aa392774f346e618393818225f34cad265fac1e54563036040527fff3c4d8ff92c311289a7e7ebdb4f3be590344eba725d97f59cd048aa33828b93606052602060006080600060016201081ef46002556000516003557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fda1398e40e42e008964af3aa5f0a343e6cfcbe5305d3660334b2bbc383f262ca6040527f1d7be1825822fd58a48cb43a9760ad86a468321d843ded67848e3980fa2a79366060526020600060806000600161480df46004556000516005557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527ffdae382eaa2470305db5d4fda8d1179a5183f034a042b46f19f63c933b33619a6040527f3add5cd52644881226f6d3e255d611f39ac802730d9da8b7fd8e2ef695463bb0606052602060006080600060016133f3f46006556000516007557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fa68af8eefb8844f05b0fa80aca01755e35fe788d83a7630aa0982af5e171ce1d6040527f2e7232c272df81f99c4cfb13daec393a6f68152fb69515b92b3658f2be928454606052602060006080600060016001610c89f26008556000516009557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f335075861c51f15a8180e465e33a79393b322bfd54649f1d09feb50eb18153476040527f78f516fb6cd1b8b03c91b15103321b4678a8a06e5c4767cb4fa8236116fe8a5d6060526020600060806000600161c761f4600a55600051600b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f304cf9115472b9acbe808ea11428ae5c6048a5573aa3e719b6c196922128a99b6040527f4bbae5da7b7fdcecb397082b83653a63763935c3bf619d9bf3ea978c8e0a47b860605260206000608060006001600161d3c5f1600c55600051600d556000600052600060205260006040526000606052602060006080600060016140a4f4600e55600051600f557ff32eec09a93567be48ce35b712a1b16539a8f3e797ab55cdea5bb1ef90dff3956000527fa827922f078f505525baacb818b6a15ad6b9c506a09018c68999e28a4d426a1d6020527f87a26e26ca9dd9735d1022cde00bf777924bb4f9128df846b469cab30db65c866040527f4e2c1908e8a6519aa6e9a482a1d7b45f587462bd15c06321e23dafe8c05289236060526020600060806000600161a12af46010556000516011557faab0530c99524dcafa571c784f17a37638e4c40b02df4f097a599b1ce3daf2f06000527f367819afeffb4d5e691be1a305d95e090811c8de47e3e2179b5a0880f874e81b60205260006040527fc629d9b24dc66c52fd1adfd9de1e7e5e867cc153d34e622cea630d02d24ac93b6060526020600060806000600161d41ff46012556000516013557f1275e3f62fe4f663581b8f1920a2056ef61ef6d24d3cf93b6b9300d5d1da3b0c6000527fc38af617f098d9bbf3179194a8d6536261f71ce5247d4b179de050139e25ad1c6020527fb045db9878135c9e2253636b40c2bfdd218563082adb35d1c6aa68a2666ebdc96040527fffffeb93395e132a2546d82a9bc9ec8ed63e7cc62da9f537b386ceadbbba02896060526020600060806000600162013ed8f46014556000516015557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f1bfc3594d3ea16195343c7959726c0e90a5aafc0e307e8199324a24b6d85796b6040527f7372342c5e04794a0d434073d73e0d86acba73476cfd417e32212619344983a76060526020600060806000600161589ef46016556000516017557fdfa21b05ce02e03b7f42f3385eecf8614701e057154f04b75c4edec10b0ce7cc6000527f7b01e6b04bf4f7e9f5e19592b60217fe14ab8978c0795fabec8cae297fe6591b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fc11e69a1e07329747f6042217206556668a8fbe73cd46a1552ad20cb31d7e3a0606052602060006080600060016177b7f46018556000516019557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fe99324cdaaa32e6994bc8accfc797329b8a3031fb424da18bdbe7ae1ce5432cd6040527f5578556da337789cf53638e58da42301606dfe2db467cc482f282f70ee25494060605260206000608060006001600161a881f1601a55600051601b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f71d3f0efa306fe4a489287be4bf731ba59008b5578a0575e86df979c01fa2d136040527f010fa20e9b9b26ab399bd34a5caafd8210d2c3d5b20a084287932272622fd3ac60605260206000608060006001600162014694f1601c55600051601d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f47ef410eef537ae6685e76a65fafbd768707f22cd7a3208e92e75553b64afc246040527f4633d74dc13137a982ad969e99f3e34ddf4043b7f71d17768d1e5d44917afdd060605260206000608060006001600161fb0df2601e55600051601f557fdd7795cb9181c1840841e9f7c35aca534a161267ca048cf99b9bde4141adda576000527f23a510455929c3747acfdbc10ef5b5a1ad79266004ee1c2e0e9726c4e172dd1b60205260006040527f714e3836b80a7055dace8298885f24695d369e7a39f528f4a3910be50d174f436060526020600060806000600161d02ffa6020556000516021557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f0efe8fa94ff50316b3ec97b5f23e9a03a24f422a379860076c44d31b3a2fc2336040527f421dddebe35bb7bee2ffa96ab41122596fd92c8775123eaa7fdad753825c696b60605260206000608060006001615faffa6022556000516023557f2d013c5e51d0be3dcb6f506d18a69bc4747be02d00b4184194926067291c796f6000527f361f0ed0ac73e41bc6bfdaf5abb874da420e3eed9e2e74b35de46d271a9717596020527f651cd1bd399e2b59860ec16f3a9280a7d35f97e3490d7829e1085dd809f77e636040527faf4abbbc5ea9968b423dbb69dde46adb9388f463e97063aedefba0b60e7082a16060526020600060806000600162010951f46024556000516025557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fe9b95a12c340897c063ac3cfd1b7acbe4a0da0bfc81ec062f09675b048ef2ccd6040527f52807eb804a4fc3e794e24d1808a4f809a55a5c6c8a23b89c34f833726e2d92a606052602060006080600060016001620157baf16026556000516027556000600052601b6020526001604052600160605260206000608060006000600161f380f160285560005160295560006000526000602052600060405260006060526020600060806000600161e86cfa602a55600051602b557f73eccdeff1a8150ef8d9cf7157b51d12c07b0494ef7ae4568cac21c33bfa92c46000527f892abad06cd4a2e33e363309fc1ece4d12c3a4553617680ceeeae747a9cea81d6020527f5b7b5dc85b34de6ca00bfc58341126c699bf992b7a1ca7a6faed21ccd9ebd04d6040527fe63beea996e785a07b35f7cac66899fdb4746fe3803751fe66ee99a6bb2cae49606052602060006080600060016201793dfa602c55600051602d557f2a50c17a6e67a09ffed7c20e9d938cae76db03fc54a6547862700f1f3c146ceb6000527f4635b8a742eb226c4310ba261bfc3dd4971517130e37c539c5b948fbb7e55f1b60205260006040527fb898935f3b968fbec7fcd5efe9e2f63b1b876b0b3fb76cabaf1ed606051b288e6060526020600060806000600162013ac9f4602e55600051602f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527ff509be065ef1b1b177524ae119671796044d4b45cc30c9f36f71e737ae96c6f26040527f6b198d17a16c8f7bc38af6549c4b0f597d39c558045393137989fd22a653d8ed60605260206000608060006001600161b3d4f1603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x6b0100000000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a0267d0212626262626266f121212121212121212121212121212126380000001900960005519778200000000000000fe000004000000ffff000000fffff700600501600155778000000000000000800000000000000080000000000000006a01000000000000000000001c6002557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6a1000000000000000000000901a1590147ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6c10000000000000000000000000900569010000000000000000007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7e40000000fd000000db0000000000000000000040000000fd000000db000001900960035590027a0109000000000000000000000000000000000000000000000000007f80000000000000018000000000000000800000000000000080000000000000009007600455677fffffffffffffff7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a001c0519760fffc000000000000767676240000000000002b057604768210000000000000022109018777effffff80000000000000000000000000000000000080017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1b1b6005778000000000000000800000000000000080000000000000009011901d6005557f7effffff800000000000000000000000000200004400000000000000000000017cc9700000000000000000023f00c00014ff000000000000000022300805026006557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b6007557176767676767676767600000076767676767667800000000000000090187f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a576fffff716b61616160b0b0b2b0b230b000008010d0a2b00901c60085515157e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b6009557e40000000fd000000db0000000000000000000040000000fd000000db0000017f8000000000000000000000000000000000000000000000000000000000000001651ce97e1ab91a0890047e40000000fd000000db0000000000000000000040000000fd000000db0000017f800000000000000000000000000000000000000000000000000000000000000012137702ffffffffffffffffffffffffffffffffff00000003000060011a9003600a557f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a56f1212121212121212121212121212121201600b55637fffffff600190177f82000000000000000000000000000000000000000000000000000000000000007f7effffff800000000000000000000000000200004400000000000000000000011d15900260017f7effffff8000000000000000000000000000000000000000d90000000000000190110219600c55638000000163800000010a197176767676767676767600000076767676767667fffffffffffffffe90039019127ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a59014147f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff0000017f8000000000000000000000000000000000000000000000000000000000000001901d600d5560006000f3", "nonce": "0x0", "storage": { "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000010": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000011": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000012": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000014": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000015": "0x000000000000000000000000000000000000000000000000000000000000000e" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xd5A8353a487e0749707fee138b741aeb2061C14C": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x4b5f705c5993deaa35a6d4e991c09c52f1d54151048b241126aa7c780cd2723d", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556002496001554a6002556001600355", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x60e360005261020060205260e36040527f17064e08aafc17bc922849c8372926c6a434f083594f6a07a8a45c764d5f32746060527f1f6959a22ac38f4842df68feb8894add1446f1f2b5eee105a531d9bab03dfdd96080527f95ec80853752d76fd53b9f3b5ee9028646da199627e7229bb1fdf4cce004c90760a0527f3b646cde24009c8a34bbd09080385a9aa6faa3c56360cdd8f1f6981dab2876b960c0527fbbc5ad8a8ef7dc0af7260ba09ecaa44972667a2995b572460c55e5a6bc5a54fe60e0527fd0b9e187dc2a1423bd2c32ffc276266366f4b8c23f6d9db52a800f7075e8ad7e610100527f9d0d8bc9c71ef1815e1f247afe1ddfde106adffd054ff9d0e1aa05a421d70db4610120527f4b6d6fb048e531dcfaa8d04551c0e9477487e1f42dfe6b078683edce88d707a4610140527f636d013bde3777c7d61819db32eb615638a717cd059f2b8ad9954706c98770cb610160527fa219a4f1ef80c84ba5f49f32398f3f92d2d325856dd70dba5a85b32f96cdbd96610180527f467edabf6a79713c6f62fdb7680ff03452a41bc91c2abcecc72e736e62c59d3f6101a0527fd8c7a5b6d35332bb32716638e5afc3dc11e15fdf251f301fc0b30c64e2accdd86101c0527fb65b83a80c856b89e597084abcc78eabb3a1c77561ca466f62ee699e334571c36101e0527f8e90fcd0ff032e05e75b51d9dec47825830251dc35616413af21313736dda353610200527f6fe1d91e54ab0713be14458c91ba5d750d4496890c25452adbff6d154efe2253610220527f6a50e684a75187e31a5866370cfb737ff50cd49b2303a43f466b6eb621193c21610240527f6c4b5f56d956912d88f44fb605dab278667f51189d4e3375d89b02ee40ff0efa610260527fc3503a6dbec74bdcdb811e1c648183980f4efb71f6ab7f632b416a5c8d2e7c9c610280527f02b2f7383198636bcab2bd027039c66ccec0d1bc0a9b066e4bdc871c22e527c26102a0527fae9a79a076c724db7dbf49a2d6610673568da9af9d551bba1a0c36944d1554626102c0527fe0d0ff83459d9d4a1401b8684f532643ce5d5c85e6c7194ec4726be2f3e9aa9f6102e0527f654e210bbc2793c4ceada7c42c8cdc784ff08014c941dd5123f5edd5ccedaab6610300527f0eb0abfb04c0bfefc6903c8eff6834a397b347248a5b8f09d6b053b4929cb7d2610320527fe77c26e53f9d388aeddedd75a91aec3694862f4a2bc2c704afbf0824c5997359610340527f5a6382f831c09b9ea1713902fcd17e9238e374c2a9fa49b55e344a21ab2ad0e6610360527fffc47ec16d2055eced751b3cd2ba7f4370247dbcf13a1ca513ffc09dcded5539610380527f6424b6fabee6424573a0f47c8b29c0a32bc810e559f8eab0cbb48453bb2322806103a0527f4dacfafe68f1a203c122ac379232368b3c44e6c3ea571c9690eea2288726d1d86103c0527f81dcb18b456fb670e67b800f82718896d03244459dab3fa9d6e963f4e6b0d2906103e0527f98c2300ecce35fdf2d465fb2bd595934fd16de5d0b4250dde3807d3d39d62b8061040052602d6104205360e06104215360be61042253607061042353606e61042453606c6104255360e3600061042660006005630121304ffa5a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e051600855602960005261039360205260296040527f5b18ef532970f673409e96991eedb6c6c5ebd58355c4bf48036cd4965402df856060527fb22b05c1af879b519c134bcd9cd1717c8174c23fd50323cb498d984d87e644c16080527fecfb996069bbe4b810cb2003cb46d20298de618dded8b126a207c12b8fce9a2c60a0527f431df67d39976f0e0ec3e4d34dc258b9b8ca8a0ac73bb1ae76999f3508336c5b60c0527ff83d846bb720d6a7309b5a8c66bda94fd71dfcee1071ce91829dfc7371cf45ca60e0527fecf245a33c7b2542a013ba70d04038f3a6b38444b4891098f1db09f22811244d610100527fd7240d71eefbfad870c0178707c0e73ec010aab35cefc6167b170a1fc9a03c83610120527f3b5b9e03ab8ec164160cb7e4088a16282e543d717bdfe9460d4b8e4df73ce26d610140527f802318619d643531c4b6600f4f8bd35736b0efc13b38ee9462388bdc678aa142610160527f0ae40df6f91a2a88ccf46be9638cc3703db018bfa34e93ba8fee0503c0faf437610180527f9e7ffc5727f562e636d6929bbdc801b60747e7d40a29b02d184e334983a1c2926101a0527f9e76a473cd4152669e3870d79f78c171609be04a54d52caffb6e2ff3d2c637c16101c0527fce59ed6693397cf2665136b7c2f62db543dcff91cb5871e2bbfbc0e7ff8768e96101e0527f63c2c85e54a93f234a35662c4eeb6e3cc00f3cb656bf221fcc2433fb89424dc4610200527f961f4318b87886e6a097045ff77802be19c5e730a91f6c1f5f668f71d91fde6f610220527fd74dc4216664b0a8e343a7cbc4f2f1318d1adce27cad161029d9d24ab2dc0fb3610240527f0bf743c02e0288c9c5a5a46fd92f2d3b149872c242a14ccc061269791944252f610260527f2826cb8d035823fb79638057ab32227859186d9775d1586f629de389e4be131b610280527fb766eea382e8630072c0d97b83afff7ac79f9bb44e83e00dd033659e261aca6a6102a0527fb9258ec4494918bc425e0ce55939d831a06fdd54306a316aab3555d0e14e43276102c0527fb74725c4e0a5b5f57bc966f0b8bcd19aa40b0e49fb9bf71a1469dbe07a81022c6102e0527f129dafdeb706c0f01aabda2eab3571596b70760ad4f3c96c1fa67605505b2bf0610300527f87cf9a097aa5e2d615ae37cbc44d21b5ef4a912e0872e47fd2dbc8082b3e0c24610320527fb1d99403f8e1ac532376dcdf630f8ed09ee0409771253f8a92bdd758b2f38889610340527fcfa1012d22ed9230e688fbb1ac059b3aba749813862407b76334d94ab0931c6d610360527fe5f8768375e384107bcce47c4191446b201783e221cca47c115ed6371067d8a0610380527f2197cdd8f09a558bed2656b42d4187681c870aa404f2b82422a0eca0c70f89a96103a0527fd5d0f60e764c43053ad591aad788e11d8f3d19fff798c40c9ec20830b3c37e856103c0527f1eea42a3a5b9fa7a3a67d41779badeabe3fdc1ed55a08109311d9331cf1386e86103e0527f2d10ff66d8a0dccc13b738acaa5857f9edca207c55857e0d80ac7494a125ffec610400527f629ceecf5e664b489500bfee7effd6ee1be437f9e92966e206399c92446b04906104205260c46104405360bd61044153606661044253609161044353600761044453602960006104456000600562150304fa5a01600955600051600a55602051600b55", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x40000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x20000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0xd5A8353a487e0749707fee138b741aeb2061C14C", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x0" }, { "blobVersionedHashes": [ "0x0163265b8324a04c9ed8d0edb85a0d7a2007818cade0ac8688c74a99044cbc33", "0x01bfc2990aab016818a9020657c03a92ad639bfe0fb95e25e62399bcbdcb2053", "0x010c5d0a87a926c9f5a527b6d21ac1f3b93f47b3e0b391c5bdb0bf305d786a54", "0x0147ff69e28cdd0e51fd8ae75bf49cb1c6ec900462fa181d7f3ebf63040b5013", "0x018526f9e485f72923a91721812baa0527c6b93be7d5ee22a0ea78fb5b401ef0", "0x0158a07bc9b0d275edb3bcdf3fb9e36830662edecd32ee1fe9839f2ea7e87527" ], "data": "0x8c", "from": "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 0, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x82", "from": "0x535863dA03bc1834eeA10eeab8FF498565F33f2d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x83" }, { "data": "0x946ce4e9e90aab59992f710210704de54caacbb3f144f6341c47f79f9be9dd9cb3d57b7d2fa3e26835c614f015952f0e8e079170f6ee3fad", "from": "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x2a" }, { "data": "0xd16fec5d8628da397d96ce91dcf8f35ed0971782f4a9f0cdaa464464eaea86", "from": "0xC192f888ADA47142Ef2c856FC2C35197eea9E718", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0x903b4b" }, { "data": "0x49cf894cc9899f782fa6ced5aa78a40f5d1f25115ac517de3a6dc1e439fc28d40f87b47b98e8da27413d69c86ab9243cd5bb0a5667e8c024effa2e012ea2290e48722b8003f1d55f2fe170de82328b58e0715d8d1ffefc5a3708200066a2cbc13145cda01e89853d78a5385f4f71aef7ce3690a81fa9e5200302a94c517022654f4d3fae178b211256dd479d34facd5352491ef61c72dda752f2b78c9330b63dd90326c1cf41cad9955d7f575d56d275f4f2aa3a365e23aaa8f3caefed894b6a", "from": "0xd5A8353a487e0749707fee138b741aeb2061C14C", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0xdc" }, { "data": "0x473883564bf6baab586b369a707020adb4dd9002da0da251a44de3c83d9478379bde8cc6cf20fc05e703883d561055cff8f1eb68e74a918e58af54e82b3c96fbcc9fd100e69dc06dc035ee8d1731", "from": "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0xd8" }, { "data": "0x57", "from": "0x535863dA03bc1834eeA10eeab8FF498565F33f2d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x0" }, { "data": "0xdf", "from": "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x59" }, { "data": "0x6663067150ece19358b8213b58", "from": "0xC192f888ADA47142Ef2c856FC2C35197eea9E718", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0x0" }, { "data": "0xca644bc4782a166a7f1414746cdf88f780576ffb77c1a1a81d80", "from": "0xd5A8353a487e0749707fee138b741aeb2061C14C", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0x0" }, { "data": "0xe1a8835b8666127d66b8b00bc97db84e33a19c6e7b7e57b4b00aebd3d883384b6ff6aab51feedf2fa847e8f67a26e5935fc857a1", "from": "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0xf706f7" }, { "data": "0x3bf30a40cdcc2baef21d17c6a32a4cef206f6f3c508696fc6980689f018f3ddf38c4b2", "from": "0x535863dA03bc1834eeA10eeab8FF498565F33f2d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0xce36f1" }, { "data": "0xccf3fe51190f8fb88f69ac18da750c2e5e43f2205ba3288b7593f9dca020331e1602184dff78216b6752124c2b7ae740d0a98a98d0c85876a9419f75ad86361d48371fc59154a3836b3ed9899bbc", "from": "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0xc9" }, { "authorizationList": [ { "address": "0x5cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb", "chainId": "0x0", "nonce": "0x0", "r": "0x3ed20ae1548d1fd9d90a1eca4f987f64219a8b416ad20454a5cf43825750cae8", "s": "0x2cf38759a4ca00d224a711398e8dbd8844596dc29e14601fef012659d6207fc0", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f3", "chainId": "0x0", "nonce": "0x0", "r": "0x6d2226c5a987fd92af6e5041ab9aedc1c14cfa4b8729945d3e2658ef82618a54", "s": "0x568ea8ee65ce67292e114515be368d64f76e6f32502031aab4852c127928d57e", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f8", "chainId": "0x0", "nonce": "0x0", "r": "0x93b6d4c7f0b540e53a042a79ec312616116c2597cb52feb27b77668793b8e5a0", "s": "0x209057b5fa3c5387592c33993e4ada764dce62b97e6a9303f819019772ec6df6", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000004", "chainId": "0x0", "nonce": "0x0", "r": "0x431784db736d7a7b32afa2a06f9b2dd9b7947510fcfe270ea15c2ae08af9c7fc", "s": "0x780ae64313ba535e023075c4b6ba0b292377005a380b83e0483cb71d70cdf9d1", "v": "0x1" }, { "address": "0xdb2430b4e9ac14be6554d3942822be74811a1af9", "chainId": "0x0", "nonce": "0x0", "r": "0xd7b62ccc7a7a187ab2a16675f305830774b4d337043a2a0419e1e87fc30a5157", "s": "0xa46b6d701549aef8b29ba9a6ef7c3c6366b748ea1294b88df5a8cd91edecb40", "v": "0x0" } ], "data": "0x08d056a6464dfaa052593f5547603f5143d1fc601858fc8e45aecea245c1a56cbcf28f73", "from": "0x862B38c425EF5544d0127449A12c89C46dd3E050", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x0000000000000000000000000000000000000006", "type": "0x4", "value": "0x3e" }, { "data": "0x00", "from": "0x0233362c058b2fCc8093841B1073A90D673E7F12", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xdd95902a4746dbf0cb38778983b6a5061c9784572e18492bab91b69a04315a29", "s": "0x115d234e528f56cac392831ef418acb2db384b9b92749f4174e4e2ca2b2878a3", "v": "0x0" } ], "data": "0x08d056a6464dfaa052593f5547603f5143d1fc601858fc8e45aecea245c1a56cbcf28f73", "from": "0x79cca006f0792Bf40a6d4E011c2884eD862A52DF", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x0000000000000000000000000000000000000006", "type": "0x4", "value": "0x3e" } ], "version": "2.0" } ================================================ FILE: src/cli/fuzzer_bridge/examples/comprehensive_medium_2.json ================================================ { "accounts": { "0x000000000000000000000000000000000000000d": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x1028f1F4b946800E1b6D7528C4699Cc3df844fBf": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xffe5a49189ac8e319cbc7e1e0e1a40f1fd261f8706e9f8d4529fa55a2dc2d4f3", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x600060005260006020526f12da46b729d5fe99597845a4964902366040527f7bdb3a71550f71fa7f7942107297241e78338eb3604c21c1b885c35c48acd88c6060526f16de46d5414dffad552eb6f59ecfbb586080527f34fc0621617564ee4c92ac95929675eb9835e334e4976df845359c5f73e8dd5360a0526f12c09fa734e3f0289e4ed0ebfed3f86d60c0527f8baf34656290909d3369d5ee4b87ca47eafa338e78286cbc013e8cef8bda961e60e05260806000610100600060aa600b7feac041227fcee37f9758d873e36bc136c2c92a797ef826edfba231397c53359cf16000556000516001556020516002556040516003556060516004556f04556c12c0112472d3ad7764fcc242526000527f700a4b4c7c60a9e0d4a17ed4f5d0910687cd3bdcddc93caf65cd75aca3467c236020526f17838af83584d739cd9d3bfb9e7c96e06040527facf7eeaf93a5b5b862cd741e66deaab818c5bbc0e133c12a7023ec5984181fdd6060527f624abd858aabcca57ec88d91cfdadb3653c8ef629561e03091cee41549f9c35c6080526f05a13e7604c27d4f5a6f9ddc508f3ec760a0527f17b3f77520bc5dd88f7c56fadede2f6dd5fb773f97a39e4d7d86ac2b899ce16860c0526f0528b78253febdead3d353d2cf4b691560e0527fcf4ce6b18f44bd19ceaccde8ca10ac15bf5d89cc89740d4a5e96ddc380638e2d610100527f3d1708e4b25fddd12bf6c5e2b5c07dfbd20983bac930289e6996c910bc0130f7610120526f1c9a01fa112f6d22a27d3fe125ade109610140527f0242653dda65fdca5b1e80f28e2360fb3195ad1cb6d914e1c9a5342485c21dec610160526f1fabe90a7d6da23a062c0d63bc0e6c80610180527fa5afbb640e2530dc5c7db4f21e2c1d1ef3fcbf8ce5fbdc8c8fc019ffbc2bcdd46101a0527f35aa1c2ad23c66d610a5374c259610eaa6669cde15e79354b9bedca1bddedca86101c052608060006101e060006041600c7fc7264066f1cabf74058d2ced3ace5e80281c49a3c498eb80d085ad1c9703c7edf26005556000516006556020516007556040516008556060516009556f15043153691079ff8b800801a519a8996000527f49e6674f1209d211ceda5f887a519cfb173344e8638e7cb1695e83bbfb4020076020526f1592374a4fdaaab67b883dbfad398ddb6040527fe8cb651ef24f0055e31a0aaed60027f66cc7e39291c2e99c58b8f370b667496e6060526f16723a2fd291491fa598d675d7732f8f6080527fae239956720f09bc7812c2cb24341f74e93f278d7b9cf1669a0c09d444b527d260a0526f0a6bd72d6e614e15c74478c1c738feab60c0527f2aded243d43c944e4fc1a76346d4f8ca7690109b066acf4925879a8b0a1333a960e0526f018bce8a78cd8f3b7030358875f5ae27610100527f99a85cae15e756f5f4d05ffb400670ae7176229dd7ac5303c9a1c534d1ca5557610120526f11e8395922b79ac4e7e1c8a861bcc225610140527fa62c2d8665daebbbf41d4efa4ac8c5b50f1f1328f7486bead3691d18090d06b5610160526f199c667464a2b2ce3bf8804917adce69610180527f866f6a894a6b280753a2f8160b9f96835f7d531c7d7f18eb3db6e72df005bed16101a0526f120c518d3494cded818bd7059d008b146101c0527f9529f3df954cb1b0707022156b934a5bcfea7ea17a49c493162fa22b1f9688396101e05261010060006102006000600d7fefb999ff2151cd3b487bdc950acff68275a427314d465b97c59157af861690a1f4600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f14cec51b5b967401b0a49786056323826000527fd1605a4f4dbb0327cf158208972c7297c7a480af8f57418db26fb9d8a57ec42a6020526f0a308a73497553ea2558f44c64a4da396040527fffcfac4fd59b6d58bc20165648d211fea03cf367a9335f567406b64dd29a6d756060526f04b58fc3f267e4e6b60dd110ba61a05e6080527f7e23fa9b3538858c2563347ca5ae3dc8345fb24b57d27bd7a1d9f101dbcecf8260a0526f19811cf90edb6826a4402bf55576069860c0527f1a8266b64e9927d372eb06284402e65f05fd750dbf62fdf9c575737ba8b695a460e0527f420e4630658c2419983969c302e1cba7496a1565cad4194ea35eb92ea6671d65610100526f10c51b3ecb9cdd339c30853998639902610120527f7640d27ccbf15be36a1b1edf9a7badab3d0b843d897d86e4f11d15b2d859a226610140526f058f95d8cd109abd3cebb68a4b5028f3610160527f581903e67af5ffb33bd524e96b5ea825d7015eb997d6d5ca7bbd29d489cfe741610180526f04da4aaa0bce3c2cf00ae6041613c62f6101a0527f261103d196247d4933d641a4fccebf58454037c1555012471ea6b0f2cddfedc66101c0526f1d901f3512c8641e3bd1e6c7cf23a0a66101e0527f3c5b40381b8cf73c39ddf391caed85641eb08ae5dcdf326d3554d72103fe0741610200527fc98ba1c875128d3c1407895a214423daa888cc29623d7df67e50f9acc52bb0446102205261010060006102406000600e7f730b6b0a81e1c498a48c1b55a7f30f4e2acc5ec19392edcb81b9037ee5d4a1e1fa60135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f087e790c45fa839f3fd183f65550ae906000527fd2d71dc1cf38b5ae688434dd6992ef5f2dd0d49660b7f365272e095439c6e3126020526f11b1426059eceed225f12fede8a7437c6040527f7bce7fa6d834ce84a657d64a968640121cc492bec9c8399a2073dbbfadffcd2f6060526f130a9b9736cadec87b5f67b649ab56786080527f7ffac8dc16b072f277a3a2248b955fa63d8a8bc68cb08bce0c0097e0f44880fe60a0526f14696e3c6e19d213e52ce80486f4361b60c0527f6a68cf37a154f56b8512cd1148d78eaf1d81d4079548c73d1b41bea2202ae13560e0526e5f79ecbbafb9cebcd604ae004523f5610100527fed2e2ada166d6bd877079b525144dec82e05b65d9424e5ff7d8cbc553360f23d610120526f0f901a221e5deb6d9b439fe259c0f290610140527f9f25ef61f83f8ce4f8766da70ab62ed53e46ddafb36acf280fd692e67f55440c610160526f099260ba4a9a5a3fac51565b1fcbd380610180527fe76af01600cbc075cac5d4fe75c305d2a70414f5b7b9539d91b05bef357b00f26101a0526f0647d541df6837c0047e390106df15926101c0527f525a15bf78542328efc960cfc5d5aa6e13d7a94d0e02a18d5dd3072b3fece0326101e0526ed9a2d531ecb0273ab936749bf2389c610200527f555945ce7ed1820f168148bf98e19e80b4624c37ea3ad3430b9fa7f7289d1888610220526f07c4ba9468409af2a87e772f8c2a7e2c610240527f738e75af54c95a4af93aaa720d5ca5e63b0dc683a45f2e6049793c906dbe58b4610260526f0da82f6193a31129fd1db9a1a86954fd610280527f64c98561cc043565c7dd8ccae5afc2901bc161c42b198763427fb568f9a77be66102a0526f0ced91c8bf442cdc34bf8713070b2e1f6102c0527ff5cf7367396ad1d06abb1bf3f05169024c882cedef70ae1d24628999dbfa85f16102e0526f0a4185c9e4d0baaa2a0e1498605414e9610300527fb2db2d033e084ee25b27dc5686c2b4fed9915481f4a8c6aba3e56199611bf19d610320526f022c32176f46809429aa7a6e94b0a541610340527f8b89c2eca6ad64a1d08f9e56aaf1879f1287a781bd38e944ce7de7fb2aa224b5610360526f0e29ef6ebe99e7f4f12b94b147294b10610380527f33eb7d7314e330b5c75d0e40b1faaffe5dffef1818414c15f47c372ff6fd53306103a0526f0992e8892988a7e207d03807b96495f76103c0527fe0c118af357b36cc6de661f4c3cffb8123fed50bf39926482279de5446075c586103e0526f15a1a4fe36d43d536fd227be3de90662610400527f882c8d76f346af89f2897e47fb03e1cff01f154376ba731fd67a0c5e004ea5f5610420526f0544ff26b18dbdba97e63b5e83b0639d610440527f32091000f391c2dfbf525518d4b2e4313702d936c9a365b2176629b3573d18fa610460526f03787c467ee560d77adc1e5c51a2008c610480527f01407eb311f4eddf4b89d697b5a9085c746931ffb4415e2bb11588db88edfc966104a0526f05b37347124fe87949be342f69fe0d3d6104c0527fb6c98ea7386b0666e55dd7c69ff494462a22b380edc524c220d7a19edf48bf776104e0526f024aa2b2f08f0a91260805272dc51051610500527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610520526f13e02b6052719f607dacd3a088274f65610540527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610560526f0ce5d527727d6e118cc9cdc6da2e351a610580527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016105a0526f0606c4a02ea734cc32acd2b02bc28b996105c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6105e05260206000610600600060de600f7f42fe45fa84e8928ada6733b78e40be4e28a744ea3bf60c69eb808fd2b6b00f65f1601c55600051601d556f19f0ff5cf765f8191a92dd7333f115636000527fd41f77c7b6ad482a8a42dceab06c0cc2d518223fb5ca70d288410bbc931a3147602052608060006040600060fd60107fa10d7d88e8e6ceb23cb75c8268d2abee7e2f4f843ea76f5cbb4cdc17cae5133df1601e55600051601f556020516020556040516021556060516022556f0bb44118f452e8d6256a535940c2f83f6000527febf8909f76ab23b0fe6972a6f41d32316d3483c2ba33e550d5c325f0fb1c1d776020526f01acf293ca3d4b46d36596ebc63a46246040527f6bc9d5064757af806470c48d23afa99bde4a2a31715e1b2117783f7ffa06044360605261010060006080600060e160117fe6589a52f39e3deaaed3749e845bfc9549711b79a7903754446e251342879f54f160235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x60a160eb60ad60ff60cb606160aa1a0778385a5c5e3298ff9cf0004477401c360b411c8d8dff123196f05f97556d153f18f09b6e125b4973559c097b1518381b738b5707575f53f34430139f4a1078396a6e10f11e13f4014165173c017a657a188118693e303efd1972111a5a3bf1636d026e0003514a699a315c1b60417e110805f23913626f12744a7a3e671973415f1b3820f4674754083e531ca4f05c6687915077097e90a10a36137f5c3f47466904470a7e5f0b1076067c1b0b55583c13094a7685171d59177602487f1a209f7e445c903e95476f349f8f5a124a3511723c15415b704660440803151c75761c495841626b496c3e9f898a021155205bfe9753f4068356845e44503a3b409c4a62370078586254159453673551055f5889655613fd437504866e5f163065339e1c3112347a190630323e500147543e121a6140434363440a8579747b475b576b15465c19784a90031e390805106c365519699f6b8576801b1c03436c8ba260335b535c0071000507336d49a390423d7dfe773c7a14601d5554208164016a81f2f5615a42fe35337739081e983c361d65516a136f189e958e1a6f181d97ff0a566e8208f197691e776d8964a274323c80ff001c657b474475705cf47954945b73855a1633699d3c62a41e321c9a487652406a596e876b59085e7e0b511449646d70468f3307067e567e1c4a367831619c51726f8898697e621972045e3035798e13f41c493d514941185a7a109b909a3001905072313613935c6857314545517a855a8e0a15523d95a2424a557418539a6e45646e676a6442f3fef31b307d77514912fe70331141317c495f58406e3c624866a46b11735b078e44ff77f24691863e707f5268743e675233551e04f55454486719446191687c876e48051357fe55681231073f34671e586358736d5f8c57834756087e748f415213663e5a6d2034195d786063685a495a9d6c6f09336b5173396b345d6c7561653948470509908d1d9b8255678b4389081a357749778d3943569f9299145e1733376c33041c7f02091d8148fd170612127a06771979fd7c617c7d00458d1e7f6144f19a534a8136160865616c77703e326303fd656c8042163219fe4534333a4055f1366b0506541e7549699d5f1a3a9f70081c347d0b7b7b3e5f3b5a679b3e405a7b9043475751a188167677938a5e53673f6a867b8933fd7e6c5938509a02446ba455616744424a711477356618035e8b313a7dff4a47a47311496e5a48609d137b1e691488915b54397f43343580455220a15394766c823f02727b7f356d611b69373e96741950a380150609181d5c8314011e3820323b388699039e84375c68521b725b3787448c743b1e3c5a76817f736856721bff1006f59d597a5c0918836b0382104072146d9b016061f1463c857d368981583c", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000002" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x7fac24561d9f5035ce04d964a68037cd14dbff7091ef59d77299bedb0b38c6ad556000527f2a0169a823df60688109dfb0d02ceb695fd6299c0c7df33756f060e3499a097e6020527f84adb74ea377c7cf23bb8d05ec376b6955da1dffdb831726512dc92c71ad5f436040527f6dcd32102f6a81d419ccd009b5d3a4b266dc1049edbc5e307525a2b2bda040bd6060527fc6995d1048cec095a29569af28b61a5f38dc61586062eeb401efeecf1151d7316080527f70e2858125805f578d2deb5a6d9c20170e352c20417a194c6e5035403963772660a0527f801b6949c072d646a2caf58f33ff5f8e69728a830da82da55a43a6e43c39013c60c0527f1cf0dfa518395721c04b8c6b368370acec11e662342c7c356a59255de4dee03860e0527fba75a6bb2de967e948458ce598f13431acb43b082926b3a2a330e0960b9bd2b0610100527ffa67efe960985744944789e237312835d725acf28b21557d4e6673428e36b86a610120527fe0d4c9b0112dab6624a912a175b89297731e9dd9a59112519ca0087f5bea30c5610140527f85384aa36ec17a29241fa8a2870634d2cbabf3cb0e959a607073bf591e5d733e61016052604060006101806000608760f960e7f1600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000007" } }, "0x3fD261193d23d8a73a4fdfe7735892c6Ebb4f2Ac": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xe32520991692770350e0a6c3acde9b20b7ccf11ddd1d1e86cbf91ed98e2d8451", "storage": {} }, "0x48Ed5D2f29e6CF27031A62C9e4826d56B4536a36": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xcf9e2e355349971fa5c9c1774fb5ea58f30310b283b6b14d6dc779faa5499770", "storage": {} }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7faabb9137e7492c9f26c298cd433b7e0318c3876d2f5ec0a905a1ca164efd28a16000527f70b020e11c1bc897b7c2b210d69a0adc3684f818c739cbf9680a11f4c7f75b186020527fff98638a49a81dd7fbb111626efcc4428a2567adcef3aa2f321381c030625f1760405260c560605360436061536068606253605f60635360266064536099606553606460665360dc606753605c606853604f606953603d606a536089606b5360ea606c5360206000606d600060087f7a615e760c7a1993a13a60cbd25477ce8f96290789500f791bbd997d0086e6f5f4600055600051600155", "nonce": "0x0", "storage": {} }, "0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x60406103602061010061034960a05e608b60a0f3", "nonce": "0x0", "storage": {} }, "0x677B3ccc29f7c2293364fEec7F51907756f0124E": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x83011199ca2c83c9f2275cc32037543a5c54321011ec6e342bf9e00710e5c20f", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x7fd861f3a6d05dc0b79ac2bc4d2f6ba1d52f11ad2817ab5db8af0c48ceab5773b06000527f1e0a1dd7b3b806ac4bc3fea18a4a4bc66071ae29ea60cfe9bffd7f39bec4e9506020527f3155c44ae2cb923a1f9664fa462c7c71975c57706987231a8b3ee5d04b5fe5306040527fad7d2f50e5a57baf9916e251cdcb680035a9d37f08ae7ee52b9026af284639416060527f17d5aa5a02e8859b7d7fba8338a1d07d8beabbb32c02effc5e475be4e7c3daa66080527f505c30ab6738d740e6a0fb2dc2ac162a219d72ec70fdedd81ff86150d7a067f360a0527f85712bd79e2937184e738b74b26a7f486b37903d9aae6c99a203896117d757c960c0527fbe6ee428ff22d6bfcb5832852cba8c9ab765df85938186f67b3d3400da3a3f9c60e0527f3939dc2b739558813adf772aa4b15c7eb7a7bf1409dfa479cba20297fc43ca5c610100527f6b35a7cfb1a6534523db9eb3242394caae95bf9bc31dc008342b761ad30de09f610120527f854144dc711fe375a7c065a2cd136956440e1adf2705de37bf972223c4f003ad610140527f91bc4ee89625507337e9aab34ea2cde3f18b96f18b0a27cc5e8ad661f0123021610160527f664faf22c3e905bae00c2d54a010aefafc10d74c1a000decd3467859105f114661018052604060006101a06000602460087f9b83a54ae8b5af5197c75d7a815c8bb11e81161cb04d4f7aa59b9aa578f4ef1ef2600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000e" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7c9a60c23b9313f62b01b29e4eb8d423b58410678d89810ba3fcbf9b86766000527f33484703223612690945d74b3b595973ede4fdfbd022c31967190f52f9710d9d6020527f4e50abf59452e7caec6f35757bd59dddf76032ef813ebe914034c6a6515f8b1c6040527fc61f52d194f07d882f72a998cd4bd51b8857cd0a2e8663e0a665917ad2b53b686060527f5ebf56e91c6fd2c8db25b04dba00ca3457181a104af1b15f5fa560c2f388477e6080527f788179f76e7f546578d5b889305cb7fbe18e406b9979a6129fca8c7487cb3e5a60a052604f60c05360f760c15360cc60c253605460c353609760c453609a60c553608f60c65360e860c75360d160c853607e60c95360a960ca53602160cb53600160cc5360ed60cd5360c660ce53604e60cf5360bb60d05360de60d153608760d253606160d353600160d4536040600060d5600060097fe61ef44776e880511e5e8b7872c121ad30beb910665e6be4ef98603a772cc0a7fa600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x91C6Dd1A685cAE33B044370252727B57f688e5c7": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x89032b3329df88503c25a42c79eb3d5628c802530d8ee347881aeeebaf5ffdfd", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x6380000000197ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb067d02126262626262604077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f7effffff8000000000000000000000000000000000000000d900000000000001146000556a01000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9018901a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6801fffffffffffffffe901a600155156002556c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a7bc9700000000000000000023f00c00014ff002c0000000000002231087bc9700000000000000000023f00c00014ff002c0000000000002231080590166b1000000000000000000000007ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a001c90147f80000000000000000000000000000000000000000000000000000000000000007f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901818157cc9700000000000000000023f00c00014ff0000000000000000223008056823232323232323232390180a600768066aa0a5319bcf5cb4181c60035568232323232323232323712000110000000d0a300e750a000000090a0a90056a0100000000000000000000686d5adef08547abf7eb139007678000000000000001600790067f77676767676760000000000000001002e000000000000040000000e0000000006b1000000000000000000000006a0100000000000000000000080867b368d219438b7f3f7f7effffff8000000000000000000000000000000000000000d900000000000001140460045571767676767676000000000076000000760000197702ffffffffffffffffffffffffffffffffff000000030000638000000090111d6005557f40000000fd000000db00000000000000000000000000000000000000000000017ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200001d7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6b01000000000000000000000090046006557f80000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9001686d5adef08547abf7eb7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a00677fffffffffffffff089011600755638000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b00901d136008557d7676767676760000000000760000000000000056000000000000000000007d767676767676000000000076000000000000005600000000000000000000017f82000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90136009556f8000000000000000000000000000000168478392145435897052762900760076761e0002007676000000007676767600000009600a55777effffff800000000000000000000000000000000000800168066aa0a5319bcf5cb41314600b5567d02126262626262668478392145435897052067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff760fffc000000000000767676240000000000002b05760471c9012777effffff800000000000000000000000000000000000800167ffffffffffffffff90039010600c557f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff760100000000ffffffffffffffff0000000000002e0000001c678000000000000001778200000000000000fe000004000000ffff000000fffff70017901b60017e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10006a01000000000000000000009008600d557f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a567ffffffffffffffff9004600e557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd67b368d219438b7f3f1b037e1f0000000000000000000000000000002000000001000000000000000000006a0100000000000000000000901d7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a00600090089008600f557d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97f8200000000000000000000000000000000000000000000000000000000000000901c7f7effffff8000000000000000000000000002000044000000000000000000000168010000000000000000901790137ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a0071767676767676767676000000767676767676900511777effffff8000000000000000000000000000000000008001760fffc000000000000767676240000000000002b0576047610111900817774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a7176767676767676767600000076767676767603900a6f800000000000000100000000000000007f80000000000000018000000000000000800000000000000080000000000000006f800000000000000000000000000000000890159010601055600515196011556f8000000000000000000000000000000167fffffffffffffffe901871767676767676767676000000767676767676762900760076761e000200767600000000767676760000000b1869100000000000000000007cc9700000000000000000023f00c00014ff000000000000000022300805026012557f800000000000000180000000000000008000000000000000800000000000000063800000011a601355157f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a567d02126262626262676013590cab83b779e708b533b0eef3561483ddeefc841f59008151415601455760100000000ffffffffffffffff0000000000002e0000007a01090000000000000000000000000000000000000000000000000014637fffffff67ffffffffffffffff03067f77676767676760000000000000001002e000000000000040000000e0000000006fdac7fff9ffd9e13226262626262626009007900519637fffffff7f7effffff8000000000000000000000000000000000000000d9000000000000017d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9086015556780000000000000016801000000000000000090116f800000000000000000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200006a010000000000000000000008601655901060057176767676767676767600000076767676767601901590076017557cc9700000000000000000023f00c00014ff00000000000000002230080567ffffffffffffffff1b7f8000000000000000000000000000000000000000000000000000000000000001760100000000ffffffffffffffff0000000000002e000000901260185563800000016007900260195577800000000000000080000000000000008000000000000000680100000000000000007e40000000fd000000db0000000000000000000040000000fd000000db0000019009900a7e40000000fd000000db0000000000000000000040000000fd000000db0000017ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a00900b601a557ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff6780000000000000010b90047ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff0000019018026f80000000000000000000000000000000637fffffff189004712000110000000d0a300e750a000000090a0a7f80000000000000000000000000000000000000000000000000000000000000029011901a7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101119011601b557e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a006f8000000000000000000000000000000005900b651ce97e1ab91a71767676767676000000000076000000760000900b9010157e40000000fd000000db0000000000000000000040000000fd000000db0000d3638000000002037f77676767676760000000000000001002e000000000000040000000e00000000068010000000000000000129011156770000000000000007e40000000fd000000db0000000000000000000040000000fd000000db00000190131019678000000000000001712000110000000d0a300e750a000000090a0a9018036c010000000000000000000000007e40000000fd000000db0000000000000000000040000000fd000000db000001141590127f40000000fd000000db00000000000000000000000000000000000000000000017bc9700000000000000000023f00c00014ff002c00000000000022310890121667b368d219438b7f3f6fdac7fff9ffd9e13226262626262626007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a091b762900760076761e00020076760000000076767676000000774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a0603601c55777effffff800000007effffff800000008000ff00000100006780000000000000011167d0212626262626267806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a1067800000000000000167fffffffffffffffe7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd900890086f800000000000000000000000000000017f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1b601d55677000000000000000778200000000000000fe000004000000ffff000000fffff70010017f7effffff800000000000000000000000000200004400000000000000000000016910000000000000000000901112601e557ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07f77676767676760000000000000001002e000000000000040000000e000000000901c6801fffffffffffffffe774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a1d90047e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100069010000000000000000000505601f557ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb067b368d219438b7f3f9010197f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000016801fffffffffffffffe06901c68478392145435897052717676767676760000000000760000007600007702ffffffffffffffffffffffffffffffffff20000000000090086020557702ffffffffffffffffffffffffffffffffff200000000000600116177d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff90116021557feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7e1f000000000000000000000000000000200000000100000000000000000000901390126022556d0100000000000000000000000000686d5adef08547abf7eb03686d5adef08547abf7eb6910000000000000000000900690076023556f8000000000000000000000000000000067700000000000000090167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0090116024556b1000000000000000000000007f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0218602555690100000000000000000015760fffc000000000000767676240000000000002b05760477a01090000000000000000000000000000000000000000000000000001116026557f7effffff8000000000000000000000000000000000000000d9000000000000016f800000000000000100000000000000001d67d0212626262626267f80000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb900890046027557f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff000001157f7effffff800000000000000000000000000200004400000000000000000000016f800000000000000000000000000000010a19191763800000007cc9700000000000000000023f00c00014ff0000000000000000223008059001017f8000000000000000000000000000000000000000000000000000000000000000760fffc000000000000767676240000000000002b05760476d010000000000000000000000000090081768210000000000000022684783921454358970520a167f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd717676767676760000000000760000007600001b90187e1f0000000000000000000000000000002000000001000000000000000000007f7effffff8000000000000000000000000002000044000000000000000000000112900b196028557ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07e40000000fd000000db0000000000000000000040000000fd000000db00000111671fffffffffffffff7e1f000000000000000000000000000000200000000100000000000000000000901c7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6770000000000000007f82000000000000000000000000000000000000000000000000000000000000000990086780000000000000007e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00901c1b60007f820000000000000000000000000000000000000000000000000000000000000002900b7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000017ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a0008901660295560006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f2d48fef6d6dbc72cbd48b0915fa033ffa7d4a361118c537ed2d7edd66d78e7c96000527ffcdd0f1f8c09b3d29c80926527694e969a9ba25d383e3ba54aef34d24bd497cb6020527fe1d7cf96007291dd8c1eb2d1081963c991a1d6dea4658779516c6a7274017c806040527f66bdafcf782baea58cc2eb1141b2632df0d2f55926d787efa5412396958e25fb6060527fdf352be9237b127f7d05d548b7407b9c30207ade11fbd720718c9c5ee9d0fd376080526020600060a06000610100611916f4600055600051600155600060005260006020526000604052600060605260006080526020600060a060006001610100611c58f26002556000516003557f460591a824574b95cc69076bb607cef8d40a0c0b4c847c7dd99f0dbcb69615056000527f742e579fe0f7e725f6fdaed587cf572f5cb07e738dcb5c980e0e96bad4dda3536020527f5e824e64a8a098aead190a98c096eee9468efd48a851080108b8393dd5fe3c726040527f278fb56ae5fe76e5eb5a8a478d378e8eb6fc0a149ce9300f322cd7b91a6d4f1a6060527ff141171951bf218ff95ff9d70c99355db248dfc52db1d551a0a93b2b78c4df276080526020600060a060006001610100611989f26004556000516005557f48ec01c0e1871403bb3ca3a08fbcddadcc99a469e4a7305b81f23bc7b53193896000527f9925d5cf12ca591180ab2e8461dc882ef7e83de5b155e09a986576c23b2900de6020527f94b0e6be6afe4521f65b0d946074f1f23d5393ef2dd7da2978b0f2086a76ff2f6040527f78b4f1c71ad536b3d04db6fe5b6000e437359573fff6f11a3be9baeacba2cdfe6060527fd0859ce0e95ca9c4d981a67d181b08ada3884ae5cf6ec584d93d21c27ea2d8496080526020600060a060006001610100611c24f16006556000516007557f7e7405fe9def216c90e9e92b81e64defe43995d088898179e64c81573501ffc96000527f5feb47f2139e0858713da463e2d6e8e50248633757004714cd7720b3d7fe45bd6020527f604a2ffa598e68971c856cefd048c75305de2ad9549e9802830b4c0786e836906040527f7f57c80bc07f2580f08c7d1d69cfaed1c294761d9338c6f2ddb41fd86428ae266060527f129c44035429199b8f6e1d71295ab48df4b41f9bf0e566080908d293ce3d28736080526020600060a06000610100611cc0f46008556000516009557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fa8f7dbc25e8c7cca554fcf1f8d2ab12eb45bbc4fa90d51971281f4b413bcb9776060527f8dc09b13292575a077fb4629b0c3a3ba5fe7557de3c70246662d7be1fa768f3c6080526020600060a06000610100611c66f4600a55600051600b557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a0860005260006020527fd72bb6e19026029599b5f099d83684d02890bc6fc0cf8ac7ed234498516a43f86040527faace2731c2f9766302293f90947e01c4739475ed7f6e72f5ba57627c805423de6060527fb676d1036dab813d9fa8172cdd0b522309cac452e775f65bd7c10e3565bc1f9b6080526020600060a06000610100611a49fa600c55600051600d557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a0860005260006020527f5809acbfb7d1d265d77fad581f331327df9e2e1b8e09be2c60ffe6e1bd9ae7526040527f795acf93e6d163e6d1ffadd6cacd3744af8758c8142b2ef2b06a491cb517b3486060527f31c0407c043a0d3579017bdacf960b1be3d95235253045518f02b6afa9a4b0d56080526020600060a06000610100611b08f4600e55600051600f557f1f578153149420497e676cd6d5eced6ad7043396f1b476698d8982d5f82d51156000527f47a758179ab51312779d4529b0c4d24c59cd3c082ed5fa0024a52a2ee26ee8a46020527f068c672385b1a7d8730ccad44ea08f9bae8b8c48b15636ee8d218b2ef9a202db6040527f9823ae0e11e65fabb51477fc42c46bd9a8026bca26fe815a67a3c2f2133da64b6060527f16e38ad5ce001771fe1ee92e2ea2c17e158e8d26faf1967ba6b9726d93190f7b6080526020600060a060006000610100611b9df16010556000516011557fadd5246b8fe95262b5c92e34b66460e9fe6846fc80c0d0143ad0a7b36e6b71826000527f1f01817d03674644755b5302064fb4d951ead6492a12d1194ddda94d859fee836020527fd796ec850f4397801b66dbe752a4ec9d3cdc06c63f384b8db9cb393400dfa79c6040527f53bb06fb0a450f211e84d0d65a1bdaf5404dc24923bbab3874a17f833cdc31c66060527fd1db726c8e0dfa245af9fa7d9516999e05bfe7405e12b9c4d4b80f6278ba65006080526020600060a060006001610100611cb4f26012556000516013557f7e5f992155422239ce99f246ef28398cd19efd4945bdbcfd0906cf295f0acf9a6000527f23486150ca3798a368f956840331487ee7aae2b4c41bb3c5d06dde0bd5a8319d6020527f7262fc33081844bc6fe1324f77d816fab0596e0aa4a80911d5de1ec1065c3a966040527ff60b76f958d30c87f1f4cea06a0511e14cdcfff27f9ef7300380843e70f69a156060527fb5a22958693bdd0453d5c4c7dc392ba265a81b1a6ec356c7a0d71a2f1733933e6080526020600060a060006000610100611910f16014556000516015557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611c99fa6016556000516017557f3dd166a0d3b1651ed856c109b45cc195a240a2fab23183accf87757b64d3b30f6000527f7c96ef833b5e75bd4d69819a6a13377ed249b800798e1f58fb48a3a47f0d04376020527f0285012e51e1ccd423b89be32135bc22bd266a3c66aa8e2a6d375a0a3edd93d56040527fddb9a2c3c25ff7fc7438521df5159d379cf4242e9d72c126a24deeace97d01406060527f0bd8aa57cadb8ec6ad4c294ac9fd5f2033f876b305b70da837a2e47759a83daa6080526020600060a06000610100611c70fa6018556000516019557fe723ca68f12a5176750652de172ea07516f031fc69df3e4d3f4db7991ec7f4956000527f1ea11655451f9fa1a6ebee3cf000d22d6feb8c82718cbb8ddb12dab77d1fe2256020527f5545cbac5769033d164c67144735e7fb4e5f5b778b89659318cbb40cce98fb366040527f9a8d1e5e35392b97f14359da3e744bcd711f673ffd7a101711876fcc329b4bfb6060527f8eb0802a3a39bd992fc1919de73ca1a41e627bd9d448ddd43df1a1ed9e13a3dd6080526020600060a06000610100611b0ef4601a55600051601b557f781f41bce25afe583069c7570abf9f17a52c59c73276dec66742b55a91a22c316000527f5276b48e3889087f1d05c469fcebb4b6acb88da49c7718fa3fe678a8e420627e6020527fa026f5b97a918119b4ef452550ec36faa0f2757c922c13e3aec9a82373219bcb6040527fca070f9cb46904d7e3cbf6dd138653fe8f1a1756d472d82ec6d5f7bb813a71226060527f8dac32f60ea0d00b8c67638175086178d77232c404736267b3021b5db6e72ba76080526020600060a0600060016101006119dcf2601c55600051601d557f28ecc5cfc546424311627c988e9cbe9c434fc5e2ceb5182ff18bb8485da8457d6000527f394f722770e2b9a2631399cc5916c8d1b6c87bf5a6f3138da5ec52137167a53f6020527f4fe27e8baffc4c94f1a803b14262c24588a41035455ef46ca2f68cbda15a32b96040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fa9a1d51ba3df24dbc7c9afb53437ca15d46d6dece751957fe2b24f87204a23bd6080526020600060a06000610100611bbcf4601e55600051601f557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb5600052600960205260096040527f2f1a6ce97909c9947e8b05e181f97c0a0a4b142b7eec35215ba499d057ea23b96060527f157a3a06678067b0697843853539281f9caf2c41ec378bbaca088500748194db6080526020600060a0600060016101006119c3f16020556000516021557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000526fffffffff80000000600000002fffffff6020526fffffffff80000000600000002fffffff6040526fffffffff8000000060000000300000006060526fffffffff8000000060000000300000006080526020600060a060006001610100611a37f16022556000516023557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ff7ffffffffbfffffffffffffffffefffffffffffffffffffffffffffffffffff6020527ff7ffffffffbfffffffffffffffffefffffffffffffffffffffffffffffffffff6040527f559d4c984a71993ba2299eedf7dbf226f692c1c329b899b4a29490e31f55cf326060527febf7a5aff69e762b1e871db04864e65e35e75995c68adca0154d1d925e93703e6080526020600060a060006000610100611931f16024556000516025557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6020527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6040527f8f7bbf81d570991c1dc5a300654032769d4a6dba81ee23e470bd7b6749b048d26060527f6fba636686ecf2906bb10decf2ea18ede20a5313a6bd2755b68e1c8eaba91c826080526020600060a06000610100611a5bf46026556000516027557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611c13fa6028556000516029557f92dcf6a29fe268ccbfad7d1241b0d570b0490e793a871cbe3993d65f8c7631956000527fa69ce0f86c885b497070631c6763d1cc9b5a288b2c2a436f79e2816fb4b9526a6020527f7f125a6da806dd90960fec9d3a916e6b5b1e16fe518e5ce7fcae454b649dcf6a6040527f3f3c52730247cfb14ff4045b32ec699ca52cc02586a3b3db47f012772e7b53516060527fac7a5635ad3c1eb29393792efcb90c1908ce7ab9d80459a42dda216e912d65306080526020600060a060006001610100611a16f2602a55600051602b557fd0a6aae6c767f393aa8969e191293a4c502f4a7d9865373463dc8eaea20ae8866000527ff20b041a964c5e6a8a54e64e3a83e6c194317a88e88d5f0c99d03d4ed586e0b16020527f4e8f68a34e68a36828a90e7f7021495a5fd5555cc38e3cc394c1dca6b59017a66040527f2a6fa2088e0d26db96dc6ab441c3a60048ab953bd53a52c4fdf17e5239f2fe3b6060527faa09203b7edd9840fe7bfc098dfca22fb18aeffcce0179a252dc3528172e1fe26080526020600060a060006101006119f9fa602c55600051602d55600060005260006020526000604052600060605260006080526020600060a060006000610100611cc6f1602e55600051602f557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f01000000000000000100000000000000010000000000000001000000000000006020527f01000000000000000100000000000000010000000000000001000000000000006040527f65c1110c0be74cb76965d2672cfaab66768f6273153b48499ab92620291661c96060527f28244fdb476e78a0ecb14370154db3a3cf0eab01383dd5996c52775760d448e46080526020600060a06000610100611c1afa603055600051603155600060005260006020526000604052600060605260006080526020600060a060006101006119a5fa603255600051603355", "nonce": "0x0", "storage": {} }, "0xA9A42c08023d1a23a61dA0cAEd0106A7C48b7120": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xfade6018c180bd1cd998447d92b262af3473cfdbbd4c3b901b6f1b189c53e7fe", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x602f6000536038600153606f60025360e5600353607e600453608560055360cb6006536072600753608b600853604060006009600060bb60067f3e1f7155c0651aec04b04c5c8bc70f2c07a70c9372276c8b438cff34ea5b6e60f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xC4AA0D75736f14fb4971bBDe8CE49Fa1E25217bd": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x9327cce81f1cac3ff6a060f8ccd3b81f543fb0332849fa43c6c26683cadd52fd", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f0193f3b4d1bd34cc620b76788c1b0b7efa494a6a3b9b30afe63dcc0add0bf1286000527f7030eb85fc3a20e4208718167e80e0d80be0b29311eace6c92f4fb8466ddeefb6020527f52830b627d58510f8f2672ea2b9ac2b2deaadfc7a476774581844b2e6aa5c4a06040527fadc18db5ec80ce6f7ac02e7e823aca5ce50c0b6d80edf88cc50eb6ada1273b046060527fb5b6bbd639bc86335d476a042fe0760ab6a944f65e1c716602aeefb17f6329fd6080527f317ddc040b0dbe36d428cd49f9be1cb0e35527fef9bafb63f0604ac6fcdc5f6e60a0526040600060c06000600a7f9c2fc66c6fb11903613fd8b83c51568eb684932cae21637977215ab21c31f001f4600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x6000600052600060205260006040526000606052602060006080600060016194e3f46000556000516001557fcc931ae91d1ae57ee1ae991be2dc667e43cd1dc8ff19fc5ccec78bd4ebab19df6000527f9783a52c81da9f990d466b3a1e3f67197145f4c8a3696bb62611a66384fdf51d6020527f43c4bfa434bd3b91f5e79a1815c15fe2ac602508e4998fa6b283c280a415db926040527fd96c2b30519212ae3b0d24d7e96f2b1dccc96e5e928d6c62622534da108219b960605260206000608060006001600162014147f26002556000516003557fe0617947124e86583d06ccd8e934e8195ef7c763f8e784e16dbc8ee0bcb086666000527fa6d80bb7f4815e2722b9ca09e6f4512fa46ee459f5a28781f330dd12cff3961b60205260006040527fa4d8b749791a8539cb4af58f9b5243fed693d8e31d82da71abf56f6165c6b7f560605260206000608060006000600162017d5bf16004556000516005557f526a7959323beb89149c76522f91558f16cbcee030ddc8fa0b22f43a237eb2596000527f959e49aed0281ac6522e27bbc28d41281dcd3716d823e7c8cfbdf748730d271c6020527f4470f60814b8689866b44fe346006f0884e1f7c7f3a32a7d94ebd08d78d32ad16040527fffffa08a0b7881fd72c1693c3dae3852a0011d8af63aff4ddd92437a3b7a4b50606052602060006080600060016201488dfa6006556000516007557fcf96f626e87a60a687ea394b316955428eb10d42e1e4f4239698fd6c00d08cb36000527f5c1757376584c0674f7709621fa64a2078ea08000a18403b11664b70ca52d6026020527f21cce01d37a32278d253ca812f41c4c5c44e99eab20167aefade6a82ff28aa346040527f3499e9f20a655e68ff6aac3baf378aef196dfcf602498704643ebf1e17da55c6606052602060006080600060016110fdfa6008556000516009557fc2180a992da54ed7bcc3b66cc7ab15181a1986294c9675692459164f15cae08a6000527f65b49bc2356d42810531fa25681d2e5cddf2a23830f2721935ee942a794d601b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f90fa6156adc938830646bf56550d29a7ab6c07808d4c917fb907e327098e12e8606052602060006080600060016151f6f4600a55600051600b556000600052601b6020526001604052600160605260206000608060006001618beffa600c55600051600d5560006000526000602052600060405260006060526020600060806000600162015743fa600e55600051600f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f2286250ac79bbf13291e28d79da99adb427d9dcc5d9d210305cb8db7bc9e61fc6040527f7e22a7f0e2a324800b0cd4025aa51e3c32a13a6c60b468a214e9845a9b0527256060526020600060806000600161ec65f46010556000516011557f707c2c24eebf2dec569acbb9360b6059f29fdb785678db078d525d68197b41e96000527f872ba55696a0dfdd467dd9bb428da400c8a35ef846e497cb2b3427df6a304d1b60205260006040527f8936a997dcaae3ca6613577406824f2d9afc2b78599fc062df4198c02f14a103606052602060006080600060016121f5fa6012556000516013557f1741794b464ca914bfe3d72ab2166a284bab4512f1cf1ac5fa7585dbefa0d6d46000527f064a505fc85000dd0e064c7d38e3b3fcd61bdf4f5d44802afd3ff17ca78b101c6020527f6768b2f44970599cdc4d42de36d5ff39a10f1cd4fa0894f54bd06611aa24bf8a6040527fffff19f3d2af03a26a93a71940e0e74db00f903040c25e5b15519eac6fcd0f986060526020600060806000600162015b40fa6014556000516015557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fffd93fd2822906f26edbeba1bff10ed9aaaaa2d78eaa224433446639d341d13d6040527f422c26054c09af7cc00fcacd0bc46071b3c21726043dca5334fa9647288c7fba6060526020600060806000600162011c24fa6016556000516017557fa90ffaa963c65a3c654bf00cf6ac34f86c3a17f8029c05c5244b23d96b2916976000527fdfa7100ab09a5db4abcccbf45e6aa4a0be1d2dbc129cdc930280b985609c111b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f5a153b43cf49358856de90daf0d33fad42a42c6e5ab8a6c8cced6438af664a7f60605260206000608060006000600162013aa6f16018556000516019557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f2ab58abb36d14f8bc721eac991a26b8eb73efa3baddc31647d7da807ea3f6b146040527f5c66b60ffe1f3aae3f62a9c12a205d6b7d6c5ffe631d53a766b4bfea67f5573560605260206000608060006001600161e558f2601a55600051601b556000600052600060205260006040526000606052602060006080600060006001620184adf1601c55600051601d557fb908e0e234371730aeeb6793a86770a3e13390f5c8354db1d08c5a14c381aab06000527f724b9d656c076ecf5ccce4090b19986980e01c61fb74cd5f0a00f183f9772b1d6020527f61c243042f4c03a0292b98fda438efb44f6316d818b31e8821f09c5909474dee6040527fee36d3a720ff6f90c2ef947b206516a085da82674bd935afd7c6160c7d51c70960605260206000608060006001600161be54f1601e55600051601f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527ff2e8bf9a85882292bde75beda7bac92bc8a1325b9e28697699a7af4f415e913d6040527f560737dad06caf1302db510e5182e3986a6ab0798c04b7c55a1e88ad8b41f36e6060526020600060806000600160016133b7f26020556000516021557fc6212c3f5648d0e9a77343ccc80ce36daa100704ed7282871c2ccc629342a3826000527f549e53ba450f964ed2cb30b7eb094d3da8b53b9cef467661f81a0ffc4e5a3a1c6020527ff05e25052bab68bdb535c86e03a2fab5c8f8549c4b954551cfec37a7978f366d6040527fffff4f207c79659b7c1fda0afc2b8b775837677495a1c09bdf82620a5b35aeeb60605260206000608060006000600162013816f16022556000516023557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fc311f0f33ab412d1f6c16c80b672109e2f6f67add81efae206c3c7113a6144826040527f7d21de99c9ff97207312a5fdc060506fd6a1b5b01a3a404d77e4ac0314a5db576060526020600060806000600160016118c2f26024556000516025557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fceb2f025bf374596293fc0b0b5f4b8454cdf8ed8c69f00a5f1205c0b9c21a1f26040527f23dbf65535a35a8a20e5596fa4eb0672389c7f9679da632cbb6afa0ee049aa7860605260206000608060006001617c71fa6026556000516027556000600052601b6020526001604052600160605260206000608060006001617692fa60285560005160295560006000526000602052600060405260006060526020600060806000600161e2f6f4602a55600051602b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f52b1f8b72565696f923a2a3c1c02884cf7715739d62da47be768787c5f6e4ea26040527f5ac903ceb935cdfb43b0456e4caea9ee634a7bdb7553a85d3f2d0673cc32fbf860605260206000608060006001613f13fa602c55600051602d557fcd3ab31c082129f8094b149405055f73cf34becb36f8dbb1a483ef9350a546d36000527fdc35f0f8f80bd27f84ce0f46ce2eda49694fe87e60398584a313db6ecbef5c1b60205260006040527f5decf45ca977b833255baa1326af0258c91ed3eb8e9d47b5fae45a9c19fdbba060605260206000608060006001600162015542f1602e55600051602f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fe0f55acbcebbfaffeea778fbd1f0651b2329d467759a5a20b528c940a7744f256040527f320b92b20a863ca1648ae7ed73f3b5a9350c78a5acba2bc82f9de2e6a6caa4716060526020600060806000600161c172fa603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x7f800000000000000000000000000000000000000000000000000000000000000069010000000000000000009007197ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe67ffffffffffffffff021660077f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a59003166036557d7676767676760000000000760000000000000056000000000000000000007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90116770000000000000006001677000000000000000087feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe68100000000000000000081d6037557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb90057e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10006fdac7fff9ffd9e13226262626262626006f121212121212121212121212121212129009603855901c7d7676767676760000000000760000000000000056000000000000000000007f8000000000000000000000000000000000000000000000000000000000000002900360395563800000016000901b901d6f800000000000000000000000000000016f8000000000000000000000000000000090059014712000110000000d0a300e750a000000090a0a677000000000000000120163800000017fffffffffffffffff7effffff800000007effffff800000008000ff00000100000590176f121212121212121212121212121212127f8200000000000000000000000000000000000000000000000000000000000000110b677000000000000000684783921454358970527f80000000000000000000000000000000000000000000000000000000000000009009774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a7f80000000000000000000000000000000000000000000000000000000000000026901000000000000000000900990087fffffffffffffffff7effffff800000007effffff800000008000ff0000010000686d5adef08547abf7eb1c603a557ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000067b368d219438b7f3f059012603b556a01000000000000000000007f40000000fd000000db00000000000000000000000000000000000000000000011760057f80000000000000000000000000000000000000000000000000000000000000029011126823232323232323232367ffffffffffffffff0a9017778000000000000000800000000000000080000000000000007702ffffffffffffffffffffffffffffffffff0000000300000505603c5567d02126262626262669010000000000000000009012603d556a10000000000000000000007d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf990167f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff000001777effffff800000007effffff800000008000ff0000010000901c603e557f80000000000000000000000000000000000000000000000000000000000000026801fffffffffffffffe1c7f80000000000000000000000000000000000000000000000000000000000000017f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe900816077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb7a01090000000000000000000000000000000000000000000000000007603f55671fffffffffffffff6a10000000000000000000009013901d7f82000000000000000000000000000000000000000000000000000000000000006b0100000000000000000000001760006000f3", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000040": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000041": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000043": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000044": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000045": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000046": "0x000000000000000000000000000000000000000000000000000000000000000b" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xeBcdc7CF9233a11AFCD5B8283E89D951d41283cc": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2cc060ba5fe78470210f46455ffac3d00df319717eaa79d4593afa9062a57837", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556003496002554a6003556002600455", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x61018060005260206020526101806040527fc88bc00e3537574b69732b2a238d0126e3184313f737d07192139a447f56d7846060527fff6785753ee39984ecb7c9b84dc11b47fb781b88da28b6000d1b90235325fa606080527f616ff98d7ec4ff8502c4a86f709ed1a33b93c96da73d7a86be20636c3c75bee960a0527f7c7ca862cf1136b0f0171218255509196e9b8ddcc25109cb94602a88ddd46ea960c0527f8dcba5aefb18ed2c3e7cf3be3f39d83570fd524e00ab3d6cde1814ae51a4619260e0527f6bb3d76c05f73ba8cec9fd7ab35f6b5ddac7543ec6499dd66e5ce46ebf400811610100527f72699a293323eedcb8aed63f7c2d0c3c52ff40d9e806fa8570a5c9b988e35a5e610120527f3b3a032e24a3a4698ac5e059494b7e743a0e2bef3be48dd09d9bf9d77333235d610140527f54875e49a40d0ae2b81ffce06b2d68ade92272e9a21c94a5e8216c7203e1ee4c610160527fff3ecb58315b139cb07c5d93f439b2dfe4507c726a2c73c8c2234884f6b43262610180527f282ae62f4fefaf921b85b6f53bb4dada949167b3204e1673f6571046d7a6ab2a6101a0527f5d91178ce041f76cffeba58ba5a066ce9241e5d057819c097bedbf0fe2ff65606101c0527f8682ace22d5cafe24a2f58aa0eb97d825d40c0ac7c1887db376d161f582e95716101e0527fa90692dea0fcbd11600c0ded9ae428e70002b856db4baa70c981e521fa1cc536610200527ffdac109928200fa9e36aef37a751ee48870ca924f31263ae10005a79602c409a610220527f3e376542b55a21ab18a68af8a667360675b2151f12f5e3c99e8a752cfe8789aa610240527fd9900f9479d8d4e3f89dff1b4dba1ac05832d950dcd766873c9161220fbf8f21610260527fbbcaf4cf7f9c67a0705c5ea2c90c6a5dfb87fcab41cca51811966ceb30e3f76d610280527f7c71ae2db271bffe3fade5bc7111976f871bc5746a0b2f303b91ab2f9c1f651a6102a0527f582d401c25f461c28c30c79527b0091fecc7827c0614be2c554764138604e75b6102c0527fce97c8bac4249c6a637508446ba207b88aebc045620d3c9dbae6f0915bd865c26102e0527fe52c3e61df670e390fccf242c0cdd51e72c5c0410b8a1f5e73d69bca2c23627f610300527f7748ceee680bc41377a5692e7de9cc4867407fa4573faa8238fba994a3f42f12610320527fe0e1f522a003a43de6797d3f94ffef6919865113a9419e409290f38c6281e7c6610340527f97ee141220dcbb5fb338f60dba3eec7dc475c6e119333adc7a4afd1a386952e0610360526101806000610380600060056216c54cfa5a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e0516008556101005160095561012051600a5561014051600b5561016051600c5560916000526103e160205260916040527f4b41fcf56e9c946f221b309933258452445555591de517a9d26f0d2a1b7c64016060527f808ea269768820a6dadabe52e6133f5bd510e1f70b00a53b9031774cc05af46b6080527f2ed65039bf4d7065e580fcb6a194637e2a8d07d938348bf4578df9844e1d146660a0527f5a67614ca53c1c119320c25af763316f78d9e6688946ee0784b00b8a803bb65460c0527fc6a8d6003b582da6bd7b1c84a15e8c43a4a75d1c151d36ebe3cb78139859c31260e0527fc1989579155f746b12ab9e4b483b4bc29866d83e683d65045e97e858957751a8610100527f23cf01a1b3b3bcf7ead3ec22e3b11c57e0936834f52474e889877ce3472506aa610120527fdf326bb9973addd5d70d7e40b3eb3e5118dba8ca848e08f9f55a84d6e7191a95610140527f64f0c5f152f6091ae72a50ca260323f5bf2b749e62ddcc6509663f0da5e6ea90610160527fcc7357dbde438cfb92eb3743bbb037da16aa7f44e14c6323b182c5de3f4ff188610180527f723a5d4e993d6f86a7c571e66adac53fa4bbc2dcd39947a29529dd2abfd9c75c6101a0527ff77cb4a60d4f5077f47d5cc2a99ed7cb8aeeee6d833de8cb9315ebcdd8bb32a86101c0527f759f01af36d502525fadb44f95066c7d115300a821d5c0db18f240f39f8c6eb26101e0527f6159732f3661df236710bfe60dd52e537b2703be72e05968781c7ec03ccabeb7610200527f5c9b851808d0b3849215278846a0a842bf2371cd003fe4d234713560dc2dcbc5610220527fd0210caaee72c4cafeac5ac7a9755c7cf0e62949c7bb69f2dd0def8dba3fec6e610240527ff5eb49654493600bc393b6b6f385b9513e4a0cd31412b08fa823d4401b9c55c6610260527f47c14f97fc0441f35445a943311fea3df2078b948229ff9a5d148e4558020e3f610280527fbe9d6d2a17318753f8adb7a6f7cac1ca07a456c835387cbf9cc3323bd0f83de26102a0527ff0575265a924887002e2e529ac61047909bcf3c576b83ee31bff3bf51d7adc956102c0527f9b080bcdb51091fa112a4b91064192330d9f7147acf8714da54cfeefbf82773b6102e0527fcc314277713bd0973ccef3db913dd38d1c0e6161d153c18a4afc9bf4d030502e610300527f154f005cf084d1aaedf71ea3e4df05d8b05b79a9e151071ceb50c39d84da78b8610320527f732b512522d4ca4f24f28e10872426408958a1c377356e3252364ec0488d36e7610340527f3c3090846254680cc9b483192b2c4870b3ab1776f50edfa98ce6ac9b04db7d3f610360527f83543676a190cad63ace2543b3063db4d7d865d81c155b77abba99cc9fa7215c610380527f7f3fe9056fc7c7d0f15f3f3c104535f6c4fc8933924160657f61646a5b7951c76103a0527fba17efe8c8ac88c63c9d12deac81dba0e3bf6663423ac7efa9f8da4c026d1bc06103c0527ff076d0cc7876097233b55072853059c5ff9776e862c9aa122346d2eaa182c3266103e0527f1fab28f57939024c7fc5e577fa2df7c34c60160fe9682bf64ad00f6e09a8daf0610400527fe6b9006b8be0626c3dceb0b5b319c14fc2d82be90cae680512995edcec093d30610420527f1da09d7671dd174e33437697541d05cb1cc29820ad59fa9b77ebe3d43f277fd3610440527f5e2c68b3ebca51422679c03e0bc3931a94ce4ca83bfe472d3661179b1a14b5d5610460527f1b011af773258ed38942bfc665962c227ea111ebbee3f7fb3d2cecdb82f3bd41610480527f303546afd8d878903066fff3419493884ff13cef00810dd261738ed9830f809a6104a0527ff298a2147d740c127c77726f4c7c32c073c7f1adc5ae6a25440a5fd0f740aeff6104c0527fee789daa860dca3e563238995adbf06c55064d6aa91ef3d721334cc272554f0e6104e0527fdbf41f32e8cdedc0930deb033f3d792bf0c0e4856c48f322c1a905e1022a1735610500527f5ca4f685f726f478922a225ffb97c3c52ccd2765b82552e56eeb73b5b081dc32610520527f87ab723d86e1167b5944ec34e727413f9cdab9783fdc856dc8ca2ecdcf1b5efc6105405260ec61056053608461056153600261056253609160006105636000600562c97aa2f45a01600d55600051600e55602051600f55604051601055606051601155608051601255605560005260ef60205260556040527fc794b2d8e2eaf072f7fef7d41ccd9915d7489b568d0aec5b331c5033092b5f5d6060527f6cf56ab9dfefcb156c3d2d3b2d98e82e5bcdfb49ed92e4489fa3717f709feb4b6080527f2b1cef471d90b89a969ba196bf62a9b0eaa02fb93b000000000000000000000060a0526b02000000000000000000000060c052600060e0526000610100526000610120526000610140526000610160526000610180527be1744d1fa7b3eb20d74c603d45de1a77e200b9368bbc81dcfba262a56101a0527f71ab2b1d08ea3e6be5a5c4ff7f294621e1f38fe76c2642fc6ae03ca909b5db406101c05260b66101e05360f96101e15360796101e25360326101e35360c16101e453604e6101e55360da6101e653606a6101e75360916101e85360c96101e95360ec6101ea5360de6101eb5360246101ec5360a36101ed5360f76101ee53607d6101ef5360896101f05360a06101f153604e6101f25360596101f35360b86101f45360db6101f55360d16101f653605d6101f75360e36101f853605560006101f96000600060056210c298f25a01601355600051601455602051601555604051601655", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x60000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0xe0000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0x677B3ccc29f7c2293364fEec7F51907756f0124E", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x0" }, { "blobVersionedHashes": [ "0x01d389829e7c0e709e1989ec5305e8e731df7d9881b56e8a74b0a3ff6257c139", "0x01ad0d7a10bd7f499e177998ee602ed0f57bffa973614c8412f178db3af2cab8", "0x01400983c44bac7d4d6f52d98ce77eb2ea6935ad5938dc3cffbf3ebe5d7ad2c9", "0x01fbccc493401424e414b91cec5d6c4bebdf8be74a8f818597a0ea97f9a69347", "0x01bb6fff1f1c2f113286a6ca12c99baed80fc252499beacf63cab5e4d0dc0dfe", "0x015369aaeb26bfdfb0eeecbdd298cc41ed5202adf8b0c997aba93a6d6d5f971c" ], "data": "0xb28f", "from": "0xeBcdc7CF9233a11AFCD5B8283E89D951d41283cc", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 0, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x3df575b295e707c07dc1df", "from": "0x91C6Dd1A685cAE33B044370252727B57f688e5c7", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x8b" }, { "data": "0xd4ce11f99d2bc3795165375c1c08364f5bfdc5f051857969990d67468d55ec7df0f8937ce6f8024a0e9c4a44a957eeefe0f5382fa9f30b0f567236f67a9db10e671c2758c3731c91a72261", "from": "0xA9A42c08023d1a23a61dA0cAEd0106A7C48b7120", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x50" }, { "data": "0xa30735fdab09bb096ff451ad3d528f3307732d98c9874070c1a606c846fbcd8d8334532b56d8ba63234af9dd6c1f8f514395241fa19ecda6e195a24b3ad55e689e5ad800b0ac7406ae428d", "from": "0x3fD261193d23d8a73a4fdfe7735892c6Ebb4f2Ac", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0xa4e5" }, { "data": "0x58b0f9739971e35ce10fee000eda2c1ed6ee9c0d253988fc965825e5935919840cf3fdbaa3f2274310d0006a3cd03514e790bc849f6f02467a08026835d916c636deb68b7ff2cf49295cfafa02a2b2bf743dceacd8a070070f0444d9ebc35151b4566a5239f2ef577d9fdaf29e951d5b3eac10282df33d7e6d1198ed63e5e1070480d045313411021984807664507f9eb29710e354a96f167ed5234de54d0250be5bedfe38182d3348c48d9c57d6681ce5c68875bbd9de06baeb369b0efec41164cfc2ab8bc2220fdba8f29c5ece41648a537466166e411352d5cf02428852026e8e64ea60605467fd463ff4346872cfee0300083f5cfcdb50a93a33396fb4895bd6bac23656dbab2ad22fcd3754730913dbfb7e8f828c72d21bcd05245117c69519275804de80667cde09f0b2cb4ef6e7cfe7076efc78734c08336016fd36d04e79ca6f0a8e7f0dc486557b883092203358e76999a92e83", "from": "0x677B3ccc29f7c2293364fEec7F51907756f0124E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0x263651" }, { "data": "0x4a99b4", "from": "0xeBcdc7CF9233a11AFCD5B8283E89D951d41283cc", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0xc" }, { "data": "0x", "from": "0x91C6Dd1A685cAE33B044370252727B57f688e5c7", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x0" }, { "data": "0x3e", "from": "0xA9A42c08023d1a23a61dA0cAEd0106A7C48b7120", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x0" }, { "data": "0xcaf367a2c043521580bf2ded9a8e1b0b8ff4c77e9109ad4a78b35e6df5ec8a93af16705a1ff1740b05bf2b2d08eefcbf53b54ec3b6bfe1cb842f0f0e249d6cb6bcfd6fafd83b55ec40b1bdf17f62917ea408fcc4a3800a2e", "from": "0x3fD261193d23d8a73a4fdfe7735892c6Ebb4f2Ac", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0xfb285d" }, { "data": "0xbe89f155f782357bf7038a34b224dd184c0045a929d8edd5fea33ffb3131a832686096521b6bce6d74d53fd9e907c442975a094a7cca03f2c9f4fc6af7724a80e7", "from": "0x677B3ccc29f7c2293364fEec7F51907756f0124E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0xb6918e" }, { "data": "0x2c9c0082bbe5e68dfc726e41fab672674cb60b19ec0aaacd2efe958cb1c08b8ede492c702a99ef5acd704e55ace7aca4f209c59f9151e04405d4a396fc05e50c97d125878775dee202f269a9e038ceee92aa5ed607a8b0462afe", "from": "0xeBcdc7CF9233a11AFCD5B8283E89D951d41283cc", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x9ca7e9" }, { "data": "0x5d3a30b3be577899e7e228d7ae0561981cd3e887", "from": "0x91C6Dd1A685cAE33B044370252727B57f688e5c7", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x0" }, { "data": "0x44cf53c635525fc3", "from": "0xA9A42c08023d1a23a61dA0cAEd0106A7C48b7120", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0x0" }, { "authorizationList": [ { "address": "0x000000000000000000000000000000000000000d", "chainId": "0x0", "nonce": "0x0", "r": "0xbfe7211c0c349339a3e3634ad737c2d33e232f89fb39d664d328afd5ea2603d4", "s": "0x6b1d940a4be6b4b75d4b285ebfc1f63b599d780ea66348d3210522d155cc7716", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f2", "chainId": "0x0", "nonce": "0x0", "r": "0x44aef284b3b8fb0360a3550efdf9e4876503da8a3f0b14f56d27ff1d2f1e6a72", "s": "0x2ce2b6ff7121d90053f7f56595f335d6e5bcd1e55b075ec10e0bc04e97650ccb", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000007", "chainId": "0x0", "nonce": "0x0", "r": "0xeef59efbbb9cc6b8bcca0384ddaf3ae96bc7e761ed0ff13d48ed531251a32a56", "s": "0x1d270521363ccd1bbb726f908d863acfde6dcff0347885d3e6df7dc786415d39", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000007", "chainId": "0x0", "nonce": "0x0", "r": "0xe8c243c5128186444a344b011d78b24cbe52e9bffb3bf4959b986834d93214d3", "s": "0x3c629a82eebf4be563712ec562627be11e9d50b2cf1e6dab4aa4dde638e29ce8", "v": "0x1" } ], "data": "0x3115c7839ee8f609514b277b51b9f9f190d191513422a143d5186d5c4dea9bda8b4f13a9592dfc025773fc03ca013c", "from": "0xC4AA0D75736f14fb4971bBDe8CE49Fa1E25217bd", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB", "type": "0x4", "value": "0x0" }, { "data": "0x00", "from": "0x48Ed5D2f29e6CF27031A62C9e4826d56B4536a36", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x000000000000000000000000000000000000000d", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xdafdcae05424d2ae0fa456ad45e0707710e5e4e3c7b1af8f5997f8a464477a5e", "s": "0x20eb4f7e18471a0060ebcc24066b256591e6f5a6d5b5b9adff14d3c9fe41ae96", "v": "0x1" } ], "data": "0x3115c7839ee8f609514b277b51b9f9f190d191513422a143d5186d5c4dea9bda8b4f13a9592dfc025773fc03ca013c", "from": "0x1028f1F4b946800E1b6D7528C4699Cc3df844fBf", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB", "type": "0x4", "value": "0x0" } ], "version": "2.0" } ================================================ FILE: src/cli/fuzzer_bridge/examples/comprehensive_smallest.json ================================================ { "accounts": { "0x0000000000000000000000000000000000000010": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x00000000000000000000000000000000000000f6": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f06fcff69196a393d4ca702feba344df26000527fe442438ab1b839640ec7742d77053df806abed423ae6a498dc093103382749206020526f022f0c5673eddb443409f509edcab2aa6040527f9abe26305ddce240cddb9d26556bd4b9555e14d029eb88a867702b43c75375e46060526f151a683af814b7b843ef0914d5b656966080527fc6f0e3c21eacda1ed058c181dea5c54edecefe3c22d09f1b70fc504ccee0270760a0526f10fe871f92678911745d6a5791dd721460c0527fb0cf887504450cbe272528c86a6fcc368b036f7627f2b503147e788dd92fb2d860e05260806000610100600060e5600b7fad00de6676d949b2879235fbfb19b0f975c79dde8b90f395b4b322156e4b0a76f26000556000516001556020516002556040516003556060516004556f1430217071dcf4a05f9b69af6dedba006000527f47092bf14ec9d7f19ff07c710fd652c2bf72945a93b820b4d80b594801db4cec6020526f169208513a417a1e8e61bec2838a72a36040527f950dc6303e7d9b6735f1883b2d10a7219bd467187bfcbb6da18eafb8f78d3ab76060527fb2d7154982a36a940a4a09c6533e417af13231e08b223f9f07c3e7a537fa0a7c6080526080600060a0600060ff600c7f6be1e0cef74f639ff740aa84eb986d22098505fac3c26e495d8bb5e4388908fff16005556000516006556020516007556040516008556060516009556f02780635f54e105d88e2940d22d4d2f36000527fd8e8a4208f388a09b5dcd814920701343f527374169559101e60fcd4f636b0416020526f0de0e61d06d1a9cd1a6033acecd196516040527fbbf9aa91fe99f07b86314ce0c4773f41664bf03ceff26a5b3bbc11046b7426336060526f0ce031599c822d4cda00bba3b0621fd76080527fe9c08c8aecc9facb8d88e18dab0335adca4950d09292316b3c375540100d49d360a0526f104fbff0ad9fc644bb6bd13b6ace02e460c0527f96d62ee342495614596f56fe5ddc10a5bb1f162797396b9d75f1d840c8a79ad960e0526f07007d1fe6363f7bad8fe120e3c68a44610100527f7c92ee323f405f938e2e02484c62f2facbfc43cb0d28ff3f16178bd0fcaec335610120526f13768ffdcdf366e9ee63cc23475e8595610140527f26a575e5544f22c3e064dac3d495eb6b2b594fe846073026db1695ffed066018610160526f147ce84581777751a3704f7d43b119ae610180527f6aa4376abd93d8112f31876e7b337350b6a17946adc9616877967cee76d974a76101a0526f1198913a5b19ba3457b36d25d593fbf56101c0527f752b3ed53a63bb73c4ddefe4082933e93a0103780b21db8980c117f10637e9c66101e05261010060006102006000600d7f4a1b51e507433a9bd45b51429637710682598c3a5087b26ea136ee017aa52e44fa600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556e4f08014da76e7b1aa3302e2241f8736000527f8d10abc569925647915ebb5ab88486679288a9dbbf5f481f182da264ab34a4bd6020526f06d5881b1e939fc02875eae54bd32f2e6040527faaea60b13abe552a5d5350d84df14cbff41bc4bfac9e9e503df34f79993387fc6060526f0216413b0addfbb5ca4ae26c9bf45ebf6080527f86fb951e8d918cd399777392ae695a393f9411394a71295409713785105fdc9460a0526f126cdd8c9ebc88a54fa5539c5902074060c0527f6fc52da24a2337cf2fca7d6e2fee1a27a029a0ab80479d64152789fdc1465f4260e0527faa80d757ada2ee24f6fbe189479805f7061b1186cb063a550bb96d88fa418b11610100526f0c243dfde08ddddfa8949c2ecee26f14610120527f0cf1870266b91b5dad84ae43af0c6c02fa3f81f8245e5074af73afb381e48d2a610140526f124d3efb3d621c83c682e1759fbeff13610160527f87ac0dce1bd0ef742565c79c2d84f58a99ce3c1334dbdf1adbb87d9b317add3a610180526f1549d53c5544278fef820b936a0b9da56101a0527f1f765ca450e5cf7f5e1ea309d3db585d9f1fc47ec6fbceea63e9c31ae58bcfab6101c0526f0ac911e323fddc70e0dd973ec59da7526101e0527f66b33b62e4769dcc3f2173d8b4e6c207a1511c40b9e337f8b04dbf08c7e68df5610200527fa94a87066f4ae7ceca92defa2fb336767cf1ee575035d3a3a462b8adddd262056102205261010060006102406000600e7f93d23edbd187f33f27c1739cac18e93f6cd1bfc5c81828a1b3cb4814a00285bafa60135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f0745441fdbad4dc5a236412bf6ea07b26000527f207d89aea5a9a925d32b8007ea0c44c6e88a06fe3dc88ef32801cb9873b65b2e6020526f13402186bb791b3ee693abcbe0dee89c6040527f36e4ef4ad8c6abea65d3fd94f43fee9d40d65edf597dd2de64a8fd647f1e0ede6060526f043d2a388ccf087d3ca888a2d72d51466080527f0e1c0926a3e74772c807ed86d32169540c7de35b90db097f020ec825f81a5e9f60a0526f0d3bd03f6ec3dceed892b4cbed1a047160c0527fb8ea4b0f0e3c14bc6540f327571a1dc7245387434c6260ea8545c3a3f43f52ae60e0526f053e1e81dc8a4f0d68d0a0c23e2603c8610100527f65a9b0a2444d15e77339587e109f20caa38c7352304baadb57925cb4713e760e610120526f02abce8b992a833ecafddd3218eae49c610140527ff73bb4507c7fd63d1eaa6c29887203b04d95ea0b44c7d13c6b4ecb8533234bb0610160526e3aa8288491bd367dea58c58c500c9d610180527fc213d583c73602aa92808cb213aed86247865a978709cc5371970b15b9ad527c6101a0526f0fcd23237589ff2f23073c8417f31be16101c0527fa1634d060e1bcf6efe039ef5a11a41d90bbb05c22a595ce63103fe08960464d66101e0526f0711b1af2d891054dd6f374d2465e7e1610200527fa2c46d4e6b6235f105cd0ebfbd0293057ed0c38a4fe43d86d90eac8adcbd6b58610220526f16253bf3d1b7aba9a88abff5fd797e42610240527facd45ad966cae5da033fba84d2b954b265f9aabfcdde8ff90242beadccf09a2c610260526f19b6a239f990178d2a5f5ec618d1bb40610280527f53280e61e0bd7199af0108355ea94099ab1b61b3616d70d87c5e8c5c720ddc886102a0526f0c7f8411a266d2c99fd03f900fa0a8906102c0527f70f9b3c407c52fe2dd8965b56db2381a7d10ce2e93f52cc51d420fbd11ee13e76102e0526f10fc7f5161a560db1d3167f858f43bff610300527ff474f46440009367463cb9b447e03db4fa8e1c79a414e79e6270e6637f116d80610320526f07bc163101bc29f18e42064275adec4c610340527f5e7bfd20d8eb12d3e5d1cbfbfc15bce7a24f1eff82f8206979980ac56b0fbad0610360526f024aa2b2f08f0a91260805272dc51051610380527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb86103a0526f13e02b6052719f607dacd3a088274f656103c0527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e6103e0526f0ce5d527727d6e118cc9cdc6da2e351a610400527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801610420526f0606c4a02ea734cc32acd2b02bc28b99610440527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be61046052602060006104806000600f7f25e0a9449d9aa98ab896355983bd0dca54badbfe493862625ea8cabf7caf79d2f4601c55600051601d556f0dee3561b6f871f4550f22e15c3768796000527f2921b8637f9982d39db18d2d3999a8f6067fe7e48f56f3ea4e21def7679afd226020526080600060406000603060107f9d94c372e3e4486685ee8485a7486537efef6ef03d31f110b4d9756aa40fe142f2601e55600051601f556020516020556040516021556060516022556f0916c557668c9c2db6a6b6869d92d80a6000527f53efcc2a81d2672df3b335817985c423e104ef4e228c5402823930a8ffab490b6020526f12793c650781ed6cf7c127628edf18eb6040527f50ae0145e33bdddd7150b6834b309712248a3e91d2b629ed7955af38864c3a2560605261010060006080600060117f66602b2002036afe8d1f22e7a4028da230c39328019419cc67bef352f4e833adfa60235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x609d606660e560af60d3602560b3690b483c7050464a301c02315b3da461503a6e569c5f7d756717647d711c73303974760817747057567d035548030342816c7e35587f9c5e59f15a620a8d684805768f58909e6b107f716c167e454407688974805245698d12415e420b7c563d95876a161b74479355685451706c50165a748917324117306c156d7314048c6350731837f3fa44167f597873f46d527e7a403d01068407019f13019b191c34891004701604128c590b907309656319817e7d343d47860318677a5f68a47457151a543781faa170751d395779fef06e37193e5d11045b3e4a63618085845b547a1d1a365d615a613210f5835c5f7a915258630b345d806a9c821bf1339651755d201384f04136348604395a575f786141683d7755137b5b6612645d63883dfe6658fe14937f5d147a656f706554021e6ef38b855a44484a947a99417333053d67753b6e67a03494193f19483362503f4443783920075a5381010404a2611e349f39321335763f9a6e983670f0785c9776517558805f419914086d5c09545b80f43b439535803d515c95376d058b86f41a334530746135025f3942f187869e6a035250006f07117a8c1d399895165849fd569337a25263f05c51a06b0430771e8317881a8f5d9c0631603537588066774537017e98646b9781a07c5bfe695180f15c469e511a4451486e107d030a6a3d60593c633736f16d3867666577471d430b32063864648186165f16f533516c0407077f61711c389d9c681ea480574045367967841b41075a76636e1a484908311112176a8a3b841a66496168755c027b6888050af58933f015895e1375340143567f37743b5085904a6277474a19337b33816a3b7441411392435783497f423d10816f797253729c6a085a05803051f5324109855e108c5a3a736537618a7a7f7b755c3b3d1e517cf37105708b806b143e686e7c6755416a9f778044542055406605766b018e731e6f5d603116303b466c78753e40127a846a731783a16c3e177b545b096d0359450b9a171e31525bf0447502776c9e5566108803973a805b5c41436570840a587cf1867e3d7f1e3b31713f775c917858951b4a5b6c669e75737665736460867c6a421a16060341f05b6c5254075d793e090a05891e493068388b94677605016d5d9f5e0b3a080a891c6d187cfd1483988f953779f5569169f47a3c528156189d41138f605238037d6c796a65789f5133f36e1a828b615975929979626da0757030911581858d11143a3b6a4066095257a4453c0795fe6d6d5a6662125c601091553c4613390b0614656f9a6bf20b65435705041773fe446761876e5a5219431d333e5544f08f19453e9808455735a17252019377073e613f52587a5640387a9541127b0219368c539061630a684a77f4543035611e9c17863b54305a", "nonce": "0x0", "storage": {} }, "0x23957dB27fD43F125fee8eB0a2Be85F1FC39Fa74": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2d16ef33a23df66bb3a4c85e596df85ef7c524808ae7eeea57475353676882fb", "storage": {} }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x600054507f1bc37322bd8795aa5c0d765bb9d786a2c2ef34a695ec27232ea0ed8509cba6986000527fa18a0ad7e91a1cba90a04235dfbda77cf0549c58790669e09f88b509d33815096020527f63b6f74c4a5c6cb40ae6de0408689fcbc400291b3da160ed5a4e975415305f8e6040527f8108b2ecdb883a794c1152e92632e0a64f6a8a5d55bd29b90f7d51b3a4953f976060527f581e32c2704f32e72cd7e6ad7cb1071b92f237895e588adc7ab993aedfe2afd36080527f5aa1c972ecb9eb74528c16d451c9aa9ca317df0a4450636b4034468d39d36bb960a0527fde65e94ef04338d6ce09ac96d0ff2ec58982a6d1bf305ae6c855276fcceaf0b460c0527f8d43c21ac3785bb7cca350d44fdbe19966227e30c6b16bae02fc147c57ef402460e0527f8437286b7c84a04fdabf6afe1e0875d72be8d4fde1a3d4051478b1b20b3206ac610100527fb1a464581de2466781a0c72f1dcc93b941760f217e5a88aff6763dd525ea59f3610120527f8309b7732f9ccb14f135e34091a095196abc4dd8c3dc7bf32aa78b67afce944b610140527f52ed661a19b5c516db7c24a0782956e725fa01b61f9c8fdf9d92d0bb258d98b0610160527f92aa99ffdb4a178eb0f265d347b9358d0c2fb2fc72e0ffe189275942c409343b610180527f887bf88b7bf9d2f1da02e89e11790f03fc3a6f45cef57aedfba36a79273322906101a0527fada6af26406987cf79280e837f83cb9cdd89d26806ae700e62fd603e30283f366101c0527f2ddfb3f5e3bafa1910e8e57c7c3d45fef5024c8d298309640fdd6d771eedb7586101e052604060006102006000606a60077fd2a2dc91b7adfff42174a98e0770f27dbde9545997a551e20b2824a74bcf7708f1600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000a" } }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7f063b9d3462f2d80599492ec1750090cfb49edd47f3bef1a1d5957a77033f9d3d6000527ff849a2ffa8a3461a482f3a22613ed0bf62a0ffb9bd07ae10c23eccb926f837cd6020527e684149fb4557de661e5a06f306db0ef1a74ea674d299798a296735cbeeaeb96040527f585531de2fe977bf410e4b688e209d146281c4e3462321851ed413b2a0686f306060527f5f1b5a92ce191927ef8a99675520ad450f127080f9b344ab13bb64eb1f92c83e6080527fb42fb286f11a883b5b335e5ef2d5477569aa8a4d8430496d2d5109c40d6436ce60a0527f075e55f44883857cac5e60f122e4d3c635b99507a3a06941c0cab3564984bd8660c0527f4d35d25f52d6ca0bc2f7ab9b9b39b14e646e9e45e333bab86231e6d3dd923c8260e0527f337fc2b6a185f66f133b7f02d43de1c294e96db2bd41b446d367c9cd93f888b0610100527f65aa838654bb90480d83fa2e3077ff6054cdc5f35e5758c74769f5cd642cd643610120527fe852da9bae2aba92623982d69a62052d0de78a796ee1f0079fdf3eef27645b87610140527f583309beb4dece1ca64314d7119a948bd0bd9250a16aa2a367a080aa5c96ec3d610160527f742878009f403251a96de70c5813de6710ee4036b04b589ea5354778cd843650610180527f1cb588dae2ed495d5025e814a1cfe05f629abf0a7e89ffd6f70158219a42c04f6101a0527f1aaea7750e284228ac6dd044545a90ab4f063bb266721afb0503d980a4762ee16101c052602060006101e0600060886101007f47d7e060bd3dd5829e781863df7b5ac9b170d37543f1740059c8e0d89eaa5a4ef2600055600051600155", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x60005160016060f3", "nonce": "0x0", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x7f0ba0370907b7d6bcf961e381f77377af06df0572990c889c82b7c74f1e90f8de6000527f9826a8d0a9e3d00cb36c029caffaac161013bada23a90db9e8c9094de47cfa3c6020527f3c377edc4581270e7bfe23963fde77a95dce4e1958f673e76ecd1002488df8cc6040527f92ab51e33a39f0d13d88d8289ab18894b3ac7c2ea89a5bff9def6250dea461106060527f93c199a032e468ec45dd11b7827ea994289c6ac47c45f3dfb3f54c987255c3bf6080527f4d562b0308a2434ff7868a0702561923970abad32ac03f5a58ca902b7ded758160a0527fc584e1ac59d9d6416adc32d759f72e78ce7cdfad0128b477f96924147f66cb4b60c0527ffbb8d840baf881780dad88f8243aa46ca65214725bb4da5dd82242513fca909560e0527fb7f9b70fc4f2a0809a524d3fe329bd25015b1b5bff94225815eff18acc2ab46e610100527f5a3ce6d41a8eaeebab2d0fb1c78741ec5749b1fb23fdbfd2ee37d9e3a115527c610120527f28171e9dfa097d3e025060a1a7dce9eeeccb0562450a5f0fbbc8637302ca40e9610140527fb35e30b4c8f5070eb1120979c1a82336118624c8138e2ca026a0dd0ecd531b32610160527feaf23bed9d70590d96e25b2f9c1dcccb04e0cb94221e6728bb8c1f250ec744af610180527f1c2e979f28cdc255c646859306139ea4111fce459c056b760439ce2cf68b18a26101a0527f463df923aadb23509b5a813bccee78cc68873d42ed8712225341f89f4972b3ae6101c052604060006101e06000600e7f51c346e9c8ee8b23f64efc42ce303b46b7a555d3ec49a8f2922c3bc20740a256f4600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000000c", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000012" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7d02886c65c9baacdc167c99d8d4b203ca59c9c5eaac2647906bb8c5619ba96000527f7d653106964d182963c381adc6ef7caa35be72a76cf8837e854e28ebc20b67f06020527f5844d18a6ce56f0d2e63c6cdcc1f27f51e936bf6190ca2ad94718d29e5f0db1d6040527f44d2715a6b6e3a3df172f36ce09cdca3a48a1b5e5ff40de302f3895fd32a734a6060527fbbec99a8077daa3775d4e1e47a920a5a9035f1bde0378b33b70becb47af43c8a6080527f956302c42f2686070942a30c4a27d37d7fab7a1dc94194d2b8fe80ac7fc0b70d60a052606a60c05360c860c153600060c253601960c35360dd60c45360b060c553602760c653600060c753601b60c853604a60c953605360ca5360f660cb53602460cc5360cc60cd53609060ce5360f760cf53604860d053602960d15360f160d253604f60d353600060d4536040600060d5600060097f2c798e304e82a8acba8a9b9936ffa652a6ef6a118272cd1f71c32c61d15ce085fa600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x8b632B705a6Ab4ee30e08eD21A0AEE1C3b6583B8": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x45d548a69d16dbb51608188756e9b4e2125431bfc7c8900afd1cd15a45df5689", "storage": {} }, "0x91D1D8f382B0EE7F1c8E2a19934487D80A469695": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x3af15a0aa381091abf31af1f4363ccda85c9e17ea76d6743a55cb18ef1aca326", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x60017f77676767676760000000000000001002e000000000000040000000e0000000009007197e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a007e1f00000000000000000000000000000020000000010000000000000000000004900763800000007e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10001b90186fdac7fff9ffd9e13226262626262626007176767676767676767600000076767676767602077f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7effffff8000000000000000000000000000000000000000d900000000000001901b177ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000777effffff800000007effffff800000008000ff0000010000901d106b010000000000000000000000712000110000000d0a300e750a000000090a0a901c076f800000000000000100000000000000007e40000000fd000000db0000000000000000000040000000fd000000db0000d310116101117f62d8fffffffffffffffffffffffffffffc18000000000000000000ca0000000110901c760fffc000000000000767676240000000000002b05760477e1f0000000000000000000000000000002000000001000000000000000000000b901867800000000000000060051d90066a10000000000000000000007ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a0004901d7e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007e40000000fd000000db0000000000000000000040000000fd000000db000001901a6000557f7effffff8000000000000000000000000000000000000000d9000000000000016b100000000000000000000000186001556005600103600255712000110000000d0a300e750a000000090a0a6000901214197f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a56b10000000000000000000000012600355637fffffff6801fffffffffffffffe9017187f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7f40000000fd000000db0000000000000000000000000000000000000000000001111476013590cab83b779e708b533b0eef3561483ddeefc841f5678000000000000000901390117f80000000000000000000000000000000000000000000000000000000000000027f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0081590126004557f40000000fd000000db0000000000000000000000000000000000000000000001157f7effffff8000000000000000000000000000000000000000d9000000000000017d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9901c900267800000000000000076013590cab83b779e708b533b0eef3561483ddeefc841f590057e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007e1f00000000000000000000000000000020000000010000000000000000000067b368d219438b7f3f0902901367fffffffffffffffe6b010000000000000000000000046005557fffffffffffffffff7effffff800000007effffff800000008000ff0000010000682323232323232323239013901460006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f1ad252f41f24a4e47e3b30cd077e62ec5e97a21593b08ecf63ad797c845aa7b86000527f6fbc7de1246b5c82e32038eef1c50b793f80ff9ffd5d94ba0201758921e895756020527fe96280d9bf66a984d8429554eeee5d66f13b77754eea60b5914cb1c70d88da1c6040527f8aaf6944e59f427beb0d6335a9403e372a2a8db59ee99e352b7db426f88ba8c46060527ffdd5139e421a516cc016174ae8fe299812e0afcd0dea30757f1f68d1d5b3b7396080526020600060a060006000610100611ce3f1600055600051600155600060005260006020526000604052600060605260006080526020600060a06000610100611b56f46002556000516003557f03c5e492839c5c2a6b19faa426486d273e5df7df0532a9f9d383c91cd9bbf7936000527f20e0282db9e31ae6b468087fcf52aa711f00a9dbf73b175409070c9ae273822c6020527fe447e297c6692bf0e8e2cb8d719eeb6f9f5ea25df880fc9905033106d25d318e6040527f09815f1b92071b6bb2fd09dbca9fa959781493ac972d9589fab850a11a088ae26060527f4ad5492f2514adec949add6efa491707a9e123aad36c8765c6ffa0e2cb17d27c6080526020600060a060006001610100611aabf26004556000516005557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f61ed34369e8bae5efec15bc2180448deb0300cf1b070a5a26a46011a920110216020527f61ed34369e8bae5efec15bc2180448deb0300cf1b070a5a26a46011a920110216040527fffffffff000000010000000000000000000000010000000000000000000000546060527fffffffff000000010000000000000000000000010000000000000000000000546080526020600060a060006001610100611ac0f2600655600051600755600060005260006020526000604052600060605260006080526020600060a060006001610100611ce5f26008556000516009557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527f55555555555555555555555555555555555555555555555555555555555555556020527f55555555555555555555555555555555555555555555555555555555555555556040527f73a36436fa98c0fc51a987b95addff4fc9c75bb81bebe4de704dff46e505fb576060527f38e1d909e72e3aa17fbaae010c05f983cf22bc32e8185e753dfaea1ad1ab90ef6080526020600060a06000600161010061197af2600a55600051600b557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527f01fffffffe00000002000000000000000000000001ffffffffffffffffffffff6020527f01fffffffe00000002000000000000000000000001ffffffffffffffffffffff6040527f33564af2e42df9370e250b21edd1008473a5b1949296e746d3748b2bc41003c06060527f5b9c6cf0c4700189db47f7b04d8797e0e081455ddc17dc4a138bfe67932356186080526020600060a0600061010061197ffa600c55600051600d557f8d4159e7e3803d936acee7d4612c733ac930b2fb51f6174ac35de8f39ee534036000527f9f6469e303a270c1cf5086bdb94ffa1302bdcba38e064aa3ec68172b6cdd81a66020527fe5370d64927b00b5108dd7dca14a43ba347ef449ddb21817a3c11a8bed8088436040527f45522722aa893c41562916d31cc615d400da709ef10584642286833ce28ef7cb6060527ff2ffbe167212bf8d3259f185ace7398c2ac93afef5afb18d6b54adfcbc6f42116080526020600060a06000610100611c0efa600e55600051600f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611c52f26010556000516011557f1171c00fee29e1938e2a6b6f34e9197442dd80d7199a6c10d35237168f36c3506000527fc2402ac2e231e03da69f462f2e5e6be072787a8991672df9ff14679bdd0700ec6020527f63a862c6560c083a6d23336744366d42c66ca9a4b4190cc5d71eb3b666ebdbad6040527fd05f4d1319607b3d6b7a3312a68dd20f137cde4cae15d980c17633597984ef086060527fc325a6b95842461aa3b5c3498d64193ed54e02f57f0be0537242a66a68b5ab646080526020600060a060006000610100611a4bf16012556000516013557fbda6b6b71c43a35a2143ed305ef881ff6517885a2b2bdb3f552af2367f692a846000527f76db0519ff4b38d2dc0d66547b4108b9048cf323d4dd0eb0abcd6fb83e21b56f6020527f204ca45c158b1eccdb890e200e477755770d4b8f1e3b8a36cb8a7357befb64f36040527f457db2bda9a5ca9b5593e485b1f4bfd82dd3a951c4b63b517151fe491589afa16060527f7b14407d90693d5b3e7b7b7cb0b64d372190d7a66ae8b0b513355c330717923f6080526020600060a06000610100611a12f46014556000516015557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000526fffffffff80000000600000002fffffff6020526fffffffff80000000600000002fffffff6040526fffffffff8000000060000000300000006060526fffffffff8000000060000000300000006080526020600060a060006000610100611cdef26016556000516017557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fcd3fc77ee4012b5c4a1b53c5505eb714ee8ed5cd87dd8b73eb6f0d49dcaf4e7c6060527fbc3dc47c6bd4ef0ef3884db62acd5869593b03b899a242f1c6d7cb9735da242d6080526020600060a060006101006119b2f46018556000516019557ffc4aa970a0e7b17c095b40b850ceded317761a1a16147e214ccaa96d9ee14f266000527fcb00f4ebd745a67a7c4a55a4bef1454967bd2de0d81c83c834c6731e8e317b126020527f972603641d77617c5b93acf08c51db4c7b4422d0819ff38df9cc3d0c21e949636040527f882de2caeb49647cab0bcc63f06360c7f8b0ebb146e7cf9d6eaf103f65c825c56060527ff286e0e711e69166f764ddc113afa12d7161be84a40f80c0e6089b96c606f3526080526020600060a06000610100611c87f4601a55600051601b557f6d6682250096f33214278016bb1b507795293e4e0dd283f3ab83b795c4a9bd396000527fe100ec27eb368f3463b3a786e77984d1acf9840e4e092fac95b0a34a588a55de6020527f770fe499ff9ece0cd34a38b1b0689749b64e3f5cac291131ac7da89609b182b76040527f4bb791d72d7eb44f291d53f70d52231fd15f5bb4870e21b0c4f6b67c314ea2716060527f0960e09df623eaf10d78118c9a145cf266d44c838c02fbf28b223593b9c7baba6080526020600060a060006101006119c1fa601c55600051601d55600060005260006020526000604052600060605260006080526020600060a0600061010061196ffa601e55600051601f557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080526020600060a06000610100611bd2f46020556000516021557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fd2afb235f5597e2aee0408594b854a67f0e4975710114a3f5496ef4d96f9b5006060527f75c614dd29c2c3803c76e5a6de4c63139668f8e380a4ffb98fe2e1a6654a9e786080526020600060a06000610100611ce0f46022556000516023557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611b91fa6024556000516025557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f89c6d5fdbbaa7c407fa80fb9cdac80a029fcb4f8ee2304f1312ecccdbb1e41ea6060527fca4ecc2889086480a754452c08cec711cd805c63200655f021bc418da89eb71b6080526020600060a06000610100611b48fa6026556000516027557f8e9dc16c462acf426681e70f761fea49dfef131264f9b0669577fcfdd70f2ba76000527f751dfbc62bd426e8511df1a12bbac73d5de7dedea04fd75cac1a59e948b323ae6020527f5414ab14f228830c07a2c7ce94922fa4c78a43bd7a45d74f15fee7d8836211536040527f175d1de0e00e6f26f7b487d3ffaf8fff9fc6df7839dae9e6e70c708fb692bbf76060527f86c7248ef0667b8977a8bd67594ae4dcd371541d2091567f7d84a7d4bb99b9266080526020600060a06000600061010061197af16028556000516029557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f0f4ba6ac4a0370f9c52d177f52e5fed8f8e0732b342b804596904879dc2220946060527f58ecd351bc27ca231233fb4412e1cf7023886e2b97e1e983459f3ff6da79479e6080526020600060a06000610100611b4bf4602a55600051602b557fbda369cd0602201df26b907dcb52b6a024645f509dd784cc175defdf009ee2936000527f9e5f40b672050788563557bb58931bdd7144f959a52ee1b58d36934825c50e5f6020527ffc4dbd3dee137e5e000cee5fa85efaa40a924b04465d0cdd0c289b472df6502d6040527feb63f70b39bb575552c38831324f4b8694b9b2d3340e39eb3136e12b94d251e16060527f4d3d300f9b1904f1482fcce852285fd861108b67d5eca18993a2c009e08e98fa6080526020600060a060006001610100611ba9f2602c55600051602d557f9094a45689e1f3cfd0bc968b521cd96d091f0d224e0a5fbae7bdab98c16c65276000527f932998a71fbe19159a57f33ab2d599721cb95deab14045707752698d700631156020527f6aabdd3f95e53a8066b3ece600ca962e57c12da74850196abc0ef9eeda6d11e26040527f1a6f7d6c7fb2ffb638b0d851de935c20cd472fef92327ff6205c903b426592186060527f0fb87b1c13bb67755816f4b4b02a7a39137878dc92b9ee676df9e13da2e853fd6080526020600060a06000610100611c84f4602e55600051602f557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f0537ccb278355352e685946c9163e32ac76c72dce7ea05da8e4078dc6589393d6020527f0537ccb278355352e685946c9163e32ac76c72dce7ea05da8e4078dc6589393d6040527f01fffffffe0000000200000000000000000000000200000000000000000000006060527f01fffffffe0000000200000000000000000000000200000000000000000000006080526020600060a060006000610100611a32f2603055600051603155", "nonce": "0x0", "storage": {} }, "0xAC364Fe8a53B3B06E4ffc43a61e6b6aE111F8B60": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x1a99c1ffc59d50b72111e84f5d61d63204cd7d7e8b6ce298d4a90852322615e2", "storage": {} }, "0xB02727BF3c9593eb8eDF26697507d3d02ADf188d": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xabe2b602ab377c7797019f012a0e5eac45892762493a745125435d1f1969fc8d", "storage": {} }, "0xB9f155f6BD269F51899d0fd3Fc7457195caAC6d4": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xd8202e39fbc64c17d1fdd7dfde35c6ac6a6048407cca837f85cf3a92a054b6ee", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f1e3ec63b030c7721b195943c9e930fd54a2243b19a6b8f02ccb4d36de4f51cfa6000527f0846ca5cee09fdaa635a885d1bfbdb0fbb95c8ea3b5cc13a480c18459f58ea466020527f07ed8d82547c81a477a07ce6e3c2ab2f2fe9e4722f5605a1dd11b1d9decc37586040527f0c171f4c23860fcf50b25e53dac759e220cf16285be0f41d823131f2d0cc59f9606052604060006080600060067f1deffa299c37fcd9de705bd75c6ae69fd020d9a1b71ffca3a342363f85644ef7f4600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xD57b4cd1835F4e135762235a065aA1F4EEE18fB2": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xbe7e199e4f874aec32866370704d58651fd0b7254c5df2d0cd5e3482475a47c0", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f011d81e0f48f2e0a4ec52fbd74772f1d3ffd13e39941dc2be3734bc8120495646000527f09328d03a44d267cbd550663d7ef3ebd8e8eba55e9e08165066890393d6b7aa86020527f13a01bed25f2ebc06b2cbdc4ccbebaf1f8baf4eeb7dc09a92ff5a4bbe25b29a76040527f90cb218380878d54b59a327fba1dc57c9554fa98a51a67c00acd773b2a7aa3aa6060527fce7c256d67b551be7e15626d7c2b8af5b40a61ecafbdce9a1ac030e5ce7c4d0f6080527fef6e10a89e0b4a03ac19f1f3dfaed522841d37e427e7478d598bb60a7ac53f0a60a0526040600060c060006000600a7fb72daca576fbf03d76c0b31da23b0686ca502ef473f7257e68b9612642f56eb1f1600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x60006000526000602052600060405260006060526020600060806000600161cd15f46000556000516001557f43d1c02f84f79ae1492e9d2b89ab0fc9c103b392014bc60e1f173dc2a0d1fcd16000527fd414fa0aa72304bb922aa543cad14c25d2e4628cc5dd8d4cf81654e930c1551d6020527f6a3e96376126e8d3213e473f976810ff99a400fb7dced848459d5819a2ee6c3d6040527f1b3d6f19413e4bdef71bf5e03f0f25f47e6a7cf4fed7c2e89c4e5c01b486530160605260206000608060006000600162013eabf16002556000516003557f9906fc552d3ec01e0b96f107dd7dbcc884d10916865d2b483dbc35bb38fe0e996000527fd0b61eabc3c8fdfb793f5637eda97b84fad76f65dfdb26fdecefef2b65c5241b60205260006040527f1bc98b07747845577aea1c943af100df8b2d6917ecb9a1900d366713e6dc21fb6060526020600060806000600161ce70f46004556000516005557f180bf3f60fbc13743779da4dbee67b9fb0a63a819247264d1e961c12072f883a6000527fbb7b0b8c1ba91b810339f399b0740d77465bedeb824ab54f3fc47c579960ba1c6020527f64bf56ba321a655d7303c3cd42f07d3690bb7f70fe3fe04da89e4a617314dbe16040527fffff5f62bbe5ce1a329e700125d900cc88904616ec42ed8c92402ac49a7e97ae6060526020600060806000600161b052f46006556000516007557f8e19a52298f25ab5e498d779c824d5e5f9a82349543ae1775f3f19cd9e7dddaa6000527fb1336383b66a81ccf29284e94cd334f2d2af7c15295f540d2b3179178c05bde86020527f13444f6f7c48837047f68dfde90b784979d5c6a48e811f99552df2cc59f5d29c6040527f704cec5b3329e7229764e23af1de861f1a21e9c7a7aa1f4d79061a05d36a0c4160605260206000608060006001619dd4f46008556000516009557f5ea7f56c36e9e4c0522b1f5a2431991a21e4bbb6b577e907304a3d2391fef00c6000527f6ca40332b424d7bb466b25be0125685eecccad4fc76a32f36177e52a94f7741b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f12e8c58a0d25d7d3b8e54a1d2351692154176fb53aa675696145892159127671606052602060006080600060016132f8f4600a55600051600b556000600052601b6020526001604052600160605260206000608060006000600162013010f1600c55600051600d55600060005260006020526000604052600060605260206000608060006001600161c800f1600e55600051600f557f5eed20e4b3ced00fddb6ae28295dd9f327c822b92d48c8317ab258f7354890ea6000527fba5b5f2f20638cc0ed85c2bf7d5dbef69c7ad41fc63fa2dd95d055133d59631d6020527ff1aa8fe91f95559c861bb9f62234f1f730eee73ad5e5b9414eaec78e4b0911406040527fc33d84f13d192b77c8a6c072207b9a3e212100df63f56cdbbb28e3b8548c870660605260206000608060006000600161b0e2f26010556000516011557f0370ec4cd113a16faa25fb1be5ad2ebb4953a67250f780e0412495c039f004e46000527f5963b02c2c91e0247518a1941341b22e70a27e252ea45dccc4b8c0eb407b581b60205260006040527f33938ddbb7182f02f24dfd6745b0c329cd20da3212b2e3bdac7921a49bc55481606052602060006080600060016170edfa6012556000516013557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f85c283986bc3d889d40819dc1d1b54cd73407be4818d72e52a104b738fdb91fc6040527f7fa53c21bc99e7af078dc6f035377ea7bbdc87559f5940189979693b16822676606052602060006080600060006001611736f16014556000516015557fc56302c5e8354a195485e3071c0fd415eae836ea0b31a43b7a92f20446d8f5b46000527fe4aaabc67a48efd62a65b3bfaa602d36ae5be5bfd89975b00f6e543c81a8a92d6020527fa0fdc4680e1a90dabd5dedde26d1abc0f0682ae7d009b7ff897d5e4022ff6f866040527fcdcc7fb3739c6c85bef9d8ccc82a4d121a3cee7ac43ae9e760f3fa9e8b9583fb606052602060006080600060006001613b6cf16016556000516017557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f4ec33bf7c871488fdce24f7ecf0a8fc010b739ec785fcd3638dca6a377219c5d6040527f14da99b4e79b4645e98051cc3146991dc08a4ae3eaac621a1e40208cf6df710860605260206000608060006000600161c5e4f26018556000516019557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fab21f62421bb4acf9d252d6da285819ce6bb336f395872f89ebf744435f0c7f56040527f4aa5fa48a4f383446987fbdc957f643e384894228b080d54c1a7cb5c045749856060526020600060806000600161a3dcf4601a55600051601b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f912066e90ec6d7677e6fd8649cbdec3d4055d45dc3dd902745d835200f2a5f826040527f321aeb012e43ef288403416873ce3ded971cdf34df79e96f736b8cf03cbe83b860605260206000608060006000600161ae9af1601c55600051601d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f0d25e1b503d26804d6f732c050c961dbdc7ecc983905a76d583f470f579286186040527f5b73f2b518477c7afe6c5a119b42ead82b47f6e9f3b1de85fde3ad0a1486f8fd6060526020600060806000600161702efa601e55600051601f557f191fee423fb7f9a733c422df7c994b5477d27864589dba7a7fc28e48b8c2b2366000527f997fef11a8a4d589d2bd5a16a377af25e5cbbe813d65809db1e7bff336dcc61b60205260006040527f0b9e657c2b3bc2373a59b95a2bf3cf2306a2cab40b1845a7b33ba8f243ce7c8760605260206000608060006001620146e8fa6020556000516021557f73fc5af59dcce95b2824cf40e1c7e9f977da9f39d54bd4a6de5e69f05eb1aa9d6000527f2c4bf0413d4ce2f0658575771d3285e9f6e3282d6555d8bc86cccdcf86fb681c6020527f07dfbd7899eee43c9c7b0845b36528cc21febe6545aed949b08de39679cae3126040527fffff1f7a9c047f143904f54fc68101d4e35b6c61d1d29b47df3b23c2c51e3eba60605260206000608060006001600161dad5f16022556000516023557f6dce7564da0f627bb73184c062700c46b5fa40e038a26c6a09eee7992e7e77046000527ffae46ed9f1946468fc654e3169a858414c39f3231022971b08a6b9dc9d6024116020527f84e739bef13197615698bdfabfc1b886287b2209d526e0b88b8f55ba85686fcd6040527f2492d934f166e91909ab699d514a7c8945a3c1b2fdfe76a00ed909de0dbc4ccc6060526020600060806000600162016754fa6024556000516025557f25dcd8208d704c68a2751182346d2332b924bfb5f43ff4bb095c84343eed888f6000527f6fe4fd7dbf2d88c709f0e59813a6f58c27e01a1897848daec12d81bc1eefae1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f8fa1ab083edbcf3b8a7de09fd4044ff3e9a11fe374d4b15c65a950e2973acc5460605260206000608060006001600161b1a3f16026556000516027557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f6caa89f589fb21ffb2b20bc89cb3d36db7d98733cc9308d9d2366bf43090091d6040527f6eb4c20a32f3ddeafec7a5bf91ec6c400addc6532ab4af4473433035465cd2b36060526020600060806000600160016139f3f2602855600051602955600060005260006020526000604052600060605260206000608060006000600162014a19f2602a55600051602b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fc2572296cd1fcd3374840b60d4ff9eb33c3298e4e0086147e1e5e58a5cfe504a6040527f544c1008f7d5d111dd146db87a85232dbdc8c77bad357000653fdc2861a35b0360605260206000608060006000600161a5f1f2602c55600051602d557f08fc53f403c7cd48139e619636d480ff67993d8d59b986ca81622b913e224cdc6000527ff5e0393483b02dbe4abdd1121437ea1890c8ce44770700c775411594fece3c1b60205260006040527f0e06d11efa9fc8e458187396b1e1cbcc0b5a29af8755ad270262a9d68f0606d5606052602060006080600060016001611154f2602e55600051602f557f2f8c6555338a6deb90638b65fa8d38a23ac9b5a29c3c0de86607ea580f2dc8406000527fd13d5b86d6e628e20f07808e3d8d3ea9bc09b2b87135f84a5050eba6a71c9c1c6020527f67e38b6c13a0ee8fe9df12ca0e010dab052985ac852d1f107bddf86a78e7e47e6040527fffff4145f42083b2c92ccabe7f2b3b18c183a1d89758ac508242806f53d1807160605260206000608060006001620122dcfa603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x717676767676760000000000760000007600006f121212121212121212121212121212127806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a90097176767676767676767600000076767676767668210000000000000022901411717676767676767676760000007676767676767f7effffff8000000000000000000000000000000000000000d900000000000001901390186085557f82000000000000000000000000000000000000000000000000000000000000007f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe027f7effffff8000000000000000000000000000000000000000d900000000000001717676767676767676760000007676767676769011046086556fdac7fff9ffd9e13226262626262626006823232323232323232390147f82000000000000000000000000000000000000000000000000000000000000007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0901090136fdac7fff9ffd9e1322626262626262600671fffffffffffffff900402682323232323232323237ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200001c1c608755681000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a9016157f40000000fd000000db00000000000000000000000000000000000000000000017f8200000000000000000000000000000000000000000000000000000000000000901b6088557702ffffffffffffffffffffffffffffffffff0000000300007a010900000000000000000000000000000000000000000000000000111868010000000000000000651ce97e1ab91a9001901b7f80000000000000000000000000000000000000000000000000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a0260895567800000000000000169010000000000000000000b901c608a557176767676767600000000007600000076000060011767ffffffffffffffff67800000000000000090020360056c0100000000000000000000000007901d7f80000000000000000000000000000000000000000000000000000000000000007ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a00059006717676767676760000000000760000007600006000017e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007f7effffff800000000000000000000000000200004400000000000000000000017e40000000fd000000db0000000000000000000040000000fd000000db0000d309901b7f80000000000000000000000000000000000000000000000000000000000000027cc9700000000000000000023f00c00014ff00000000000000002230080560070890181a6380000001777effffff80000000000000000000000000000000000080017f80000000000000000000000000000000000000000000000000000000000000000805608b557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe76fffff716b61616160b0b0b2b0b230b000008010d0a2b000663800000016380000000901190066f8000000000000000000000000000000068232323232323232323901c608c557e40000000fd000000db0000000000000000000040000000fd000000db0000d37ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000090056380000000600068100000000000000000089019901c11608d5560006000f3", "nonce": "0x0", "storage": { "0x000000000000000000000000000000000000000000000000000000000000008e": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x000000000000000000000000000000000000000000000000000000000000008f": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000090": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000091": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000092": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000093": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x0000000000000000000000000000000000000000000000000000000000000094": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x0000000000000000000000000000000000000000000000000000000000000095": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000096": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000097": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000098": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000099": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x000000000000000000000000000000000000000000000000000000000000009a": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x000000000000000000000000000000000000000000000000000000000000009b": "0x000000000000000000000000000000000000000000000000000000000000000e" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xd8C19eFeDe5AC667bcaC98d9E23A7ecDf49174Ab": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xa5d82b3ed5a4c81ecb208ed654c3afe5ff5a47f79737c75b2ca157448e545334", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556002496002556003496003556004496004556005496005556007496006554a6007556006600855", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x60e360005261020060205260e36040527f68ba69fd3d79033c88699f723b3ce8fc174e29617c0fdf5ca331345cfc88b3956060527f685a1289529ff6e4b8b0484285ab55b3f76dac15363842ec9b2d336b992ea10f6080527f36353ceec362a372703a5cbd12668f037d544cd7c5264f4b268658d99c9db80960a0527f67f2d2ba771a9e1d252660d4152e6b8c1ce1a15ffdc8cd107f44c9c0a7d3f31f60c0527f71a1fc485056395faeb3e337098b3eb579ecd77697bd38b7556d8c634f682e0760e0527f344453774915ee11d19d67019c1ab1cbf96284ebefdce23024b39297c3c86809610100527f0f3fc9fef99f49e7bbcb69512cb677dd0086b428baf1e45e86549109856b1f4a610120527f322173301aa0eb293c7a1a3cf35632d3e42be43b6f8a36b91810ae73fbfea52b610140527fea8823493f7e5e580c92ddd9f0b79a23cf39bb08378429ba4ff8c1c750e59dd8610160527fd83b25754b08bb09b9dad3f96e50bbaa26c21a516c7940b5a8d078e6dab85a9b610180527fceabfd9310faf929caa07eb2c16a5cf3220ad4ba347ce0fe46085d20ba75071c6101a0527f24f6d0eebee5563dbe1e9dbe7e5689c9327c1789ded8138a4be72594f913513d6101c0527fd17fb4869234da5ad1b1cfb239de0786236d865ed2cc386c97cb7fe2a692cf136101e0527f43b98da2bf7162f8e98dd6ee834e94d31db5b2a76894cc91c6f58a5143bb0036610200527f2774108405df680dce4dba7259b45a6db14c441d7804509ea5ede9dddc75223d610220527f96e7ea97d826d2439804598fc7876496be861a6ca50fda1429ee97f3c50aeae0610240527f431d4329971916f7e101455383ead34fb5abe5248acae9647a371fa6bf738cf9610260527ffe3bd91f70c14502003b140401804b9d89802c6a9fed066381650106babb9c3a610280527facccc13cdad040f47b674e9069c1626fade6322831db3e26bee1f4440770ef6e6102a0527f12d04d5e92ab3ba2bf08df17cd2e5b13e4ebfca850d995fae5b365342c16e7796102c0527f0748435c74300793195d4019c4e460346070e707a450ef6eb46c0cdaabacecd96102e0527fafb4c5e73d81081a0ed8969d16ddf0d93b2894302081351f20f428748609b85c610300527fa1136e7dca75863f6344598ba67ea78be7eede3fd603cc272682d41c55b54981610320527f77790a8dadad8b64cf67b4d1c698b3d17abc404e51ffcf26949e3708d03349af610340527f7616852f1e0314560baa48f0f80956faa938efab1743869fa0c40ed1fc187703610360527f0411af79acdc67e00252f798319ceb984f7f938fa5c477e5000deb9c87cdf7a3610380527fdfd48a4eed3f2c68bbe464b128a5692bcbe8404e85cc77067428633fe3ce77fc6103a0527fa923a6709345117ef6665b922f87b32bbddaff432fd51f1aea04c789d495a7636103c0527fbcf7aea7ffc385cf2e2694a1e44181a7106c4bd667959c6e8d3d40eca5c3d7e76103e0527ff55e9dd571ba1201b63ca49bab9e270b451bb49fc5fb30dcfd7c8d55426701636104005260396104205360526104215360556104225360d16104235360e66104245360446104255360e360006104266000600060056301253018f15a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e05160085561012c60005261012c60205261012c6040527f4c13aa7bd89ec1d2c97320c06de11439a3ef9f76f35cbef4a26bdaa531facb886060527fe936ad5a1ff2ae08e306e0675c45b5897bc54bd20ebb7401b8d0bbf7c8d740006080527f6e89c3b9088a0adc7f74bf8d5b78bebb6a608cd96c3d3ff56a2aca44cffb859760a0527f5ef8d2a654c19fd41f23d7154e6d4d39e1f7f83f350b3eeaee406db1cf882fdb60c0527f10582dc1df5ff7a13a5c4da82250077d56b4f3431de716f4140bd06a5f75e8d260e0527fad66636358287940d2e94232ea2849556b2ec8a990e15bcaf0be81232ec49ea1610100527ffdb224be211341222db5e820df4c160a3463e297f9c5dd460b4d0e0212bf25c2610120527f1de01c72fada90d9d23a7b8a3f34a01e3c5ea262f1be04457af21bebbc1b197a610140527f256e0ed7425a4a0ddcf8daabd1ee80e3a9a2b591233b7472521bb4e762e81e3c610160527fc02e02687247389cd723176ff321a468b17b0a9935ddff9fc995864eae74e129610180527f5d1c6e53c08315d8ca820b2da313676a3f607630be87d188154c529b5d98483d6101a0527f8f01e5b864f6406c46d2e6236303538d60a6326bbcd34b27736baf670e5e64906101c0527fbd11741f29b8112c2fd1bfacb8f381818b6b84c3fcc47e228dafe7622fdf5a266101e0527f0ec1be3cb9dbb1aa2ddafbd6839456c0b93ad959d9f032cc072cc4a7f67cf523610200527f7cde68df5a162da4f59c6d125fe25659a3d284949cde9f03e76142cccde98745610220527fcfb60777ffebf9e64be81d40180bea6dc4a5f6336b2b8a13c21df333baf7a2ce610240527f0226d7361c97d87324984f784e53b3494567d268d709630d595ca42f8753125d610260527f831f7f613cc4940a56d74a282a2f158f4ad6eec1b3a540cc4f2e70649eeb2ee6610280527f3f1db47e40ae8bdb42dac89e92e946d18c8dc4762e3d112d9a806f47e5749be16102a0527f30dbc5d2c3454b56123f0cefb0b8409e97d661959987129440081d476b6f6dbd6102c0527f9f959d6ed8f803e00cada84448dd3afa609dfff3b0536748ca0ec3b14be0ad936102e0527f04f126df3fe3b3f230519fce73d16706e0941891db3281f3859bc57f18c55f0e610300527fafdb95645eb77981cd68bd03e9fdb3bbb9edcb8e7995a1ab87c55c17dc7110e8610320527f38f6bc0d087f7348be687868f26e7c2ce8063f1e1785a1e8522959a21855b799610340527ff498e688264e826b3e2d34f0778b61afd62977d5e711976224a9ee3bb0cae3d9610360527f90e914d74e9d5366ef98fe6ad24437b59e9f026b8c098fbf61413149cd501b60610380527fd12b58e018d6c64acf92bcbd311784ff44446d651bd1ff78f5193da46abaa62d6103a0527fd7183b49e5f51ac4cb8d35b0bb50d90bbadbc0a91c98998fb1ad5a2b2b0a3bf96103c05260326103e05360f46103e15360826103e25360026103e35361012c60006103e460006000600563010a4374f15a01600955600051600a55602051600b55604051600c55606051600d55608051600e5560a051600f5560c05160105560e0516011556101005160125561012051601355", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x20000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x80000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0xD57b4cd1835F4e135762235a065aA1F4EEE18fB2", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0xeb4e32" }, { "blobVersionedHashes": [ "0x0151232cf675c935ef391b8fd558a10e093eb25d5e78fe6170c1f8ce23b06e17", "0x01bfc9c4e99a03f3708fd387e97733f3c5b2a65e459587674598eda695b354b0", "0x015a37c0077673cf8aeaa690fefed9714b00490c5c45dc43ad4990256f744250", "0x017effe0e39459c4c2c9e96b0e1ccc963179783ba07f37e28c9ea3588c24b80a", "0x015051974a4f040fa74fde7e1f10a3caa0958210540822e965dca0cc089421de", "0x0136aab88a6300af782af468b9dbd33a5e7f09dd88c940c7e8bc9696351a2396" ], "data": "0xb8a1", "from": "0x91D1D8f382B0EE7F1c8E2a19934487D80A469695", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 0, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x979ef803f86d8da0b051f1c1978a54f1f249e777afe349bde7784af3af3736a1cf6427992bf070b8b3237445a46c46c0", "from": "0xB9f155f6BD269F51899d0fd3Fc7457195caAC6d4", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0xf6d8" }, { "data": "0x234f36b00b899acd82ee47db9ee3eacb23dfa61b9692c8fa886079a4cc27a4ec89c56555cdcbb295e6aaf676bb35a74e2660bca16010", "from": "0xB02727BF3c9593eb8eDF26697507d3d02ADf188d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x57" }, { "data": "0xa16b5f3897ee5da10daf1d2482cd3d61f3acd4e947b01f8e646aecd279", "from": "0x8b632B705a6Ab4ee30e08eD21A0AEE1C3b6583B8", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0x9993" }, { "data": "0x5c1f04f49b87fba351403d18f62492f20fa63c360685451c204c39496b48757ccd9e4b286bf9150936c0107298861c5f87343a0c638efcfd30d06b69906fa2a572d9fb3b019659ddc85daa806cd5f9a9bde5889720800a7d1ad910c9d5c08be332af0816a2f03512f0e4af7338eea9409a415c9a92a310cd70dbdebc32bc590642bc5437f9bed555c5afa58252ef0433", "from": "0xD57b4cd1835F4e135762235a065aA1F4EEE18fB2", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0xe4" }, { "data": "0x02a401377e008d7264913d4b8f133df0bf2fe023635467aff9b5b2b7fb87ee092248f6e94051377206c0ac69fb01ea0662e1f8642d017a58d0", "from": "0x91D1D8f382B0EE7F1c8E2a19934487D80A469695", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x6e6593" }, { "data": "0x6c", "from": "0xB9f155f6BD269F51899d0fd3Fc7457195caAC6d4", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x0" }, { "data": "0x", "from": "0xB02727BF3c9593eb8eDF26697507d3d02ADf188d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x0" }, { "data": "0x8c8c7d9be0d21bb7e20e11cdf09d9bab1f7afb0acbe01c2c7208d5d61975c330918b75aa79b0bd7ada434555a16755e14cbcf4bae04220c84caf7a01cad4856a", "from": "0x8b632B705a6Ab4ee30e08eD21A0AEE1C3b6583B8", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0x34" }, { "data": "0xa1a576ba71d1586c137ffbf26a64a0f08839c904930a3ccdd5fb49a22bfdeae09fd83fe4205d3d81f6d5347a416e9dbe1a01845aaebf4bfd54f441d02d1245", "from": "0xD57b4cd1835F4e135762235a065aA1F4EEE18fB2", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0xb6" }, { "data": "0xeb4d46c8676782f9a0e27952006dade15be39bfcd5e93b473bec8286c82129e97a95df024b8ac429c3a12675fa5d33f5bd0368ee51954e118f45bbe0d5c75e0f14511626e3cec36f8a0fea34debb42f4ad3b", "from": "0x91D1D8f382B0EE7F1c8E2a19934487D80A469695", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x2586" }, { "data": "0x37fbd9d422a2d3b07bdd02651e16a09771aed6a8afadded3fe3554b8e93812ee89bc1934160eb425798dfb23a67a07d6253bf4ef552a8047a43e6c0afcfc0d59611e445f59284029ea0185197b1b68c34695af3ae1596bb7260ab1f9ffcbda973774c9", "from": "0xB9f155f6BD269F51899d0fd3Fc7457195caAC6d4", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x0" }, { "data": "0xf079043fb1e333119c9f37c0da1e7c37afaa7bd4f0a48cc4c13dfa7b0f1fdad73b5b9e0693640d461ef391412d33458c44b23b59ebf9209b43fe85fdbedb04e99fa64b", "from": "0xB02727BF3c9593eb8eDF26697507d3d02ADf188d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0x2a25" }, { "authorizationList": [ { "address": "0x00000000000000000000000000000000000000f6", "chainId": "0x0", "nonce": "0x0", "r": "0x7c48536e23d335550aeafe4c1a83a723d065f2e5b3a5ee92a511407047864475", "s": "0x205759410d303ec597e2dc6393fd16b9fdc3822b291964ffc8ce0b38d37443ff", "v": "0x1" }, { "address": "0x00000000000000000000000000000000000000f4", "chainId": "0x0", "nonce": "0x0", "r": "0x54c674400688f718ee9e00c2c3a55d381086f0b5c02a1c4f858a7163fe894f00", "s": "0x4cfd634ceaa675a52cb1d7ca3ad14ca67c6655e807fb31b4a4594ba92878a697", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000008", "chainId": "0x0", "nonce": "0x1", "r": "0xc6956404e7cf31ffbeeb302279839736467b40fb83017c2b2541dac5e31f691a", "s": "0x4d92016e2691de9b91edb8b4164b729d285e88d1189b9fb7cac1a100464a4d94", "v": "0x0" }, { "address": "0x1563915e194d8cfba1943570603f7606a3115508", "chainId": "0x0", "nonce": "0x0", "r": "0x9f7853fc3910422af738e43f0cdfca99e563e26c8191674ff73e451bdb76f920", "s": "0x74296c8652d2063bdc5babf2f29d407eecbd33cbbc64039487c464d48b0be33a", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000002", "chainId": "0x0", "nonce": "0x2", "r": "0x661803e8303b235dd6c107384ea9de0b00bc66c64ebce4eb656a4f5b2c9d18f1", "s": "0x2b034a6129d8e3a6e719bd58cc085c355e8cb14ce9c77566bd430c4fa56b6877", "v": "0x0" }, { "address": "0x8fd379246834eac74b8419ffda202cf8051f7a03", "chainId": "0x0", "nonce": "0x0", "r": "0x66dccffe43cd270b38a7e7f384e73e48f305ff9eb08795b67b0a98760321116a", "s": "0x6a55044bdaea2aa0b6231b536dff7844907538f69cebaa0fd94c50702f883c58", "v": "0x0" } ], "data": "0xc159", "from": "0xd8C19eFeDe5AC667bcaC98d9E23A7ecDf49174Ab", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x0000000000000000000000000000000000000010", "type": "0x4", "value": "0x8e" }, { "data": "0x00", "from": "0x23957dB27fD43F125fee8eB0a2Be85F1FC39Fa74", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x00000000000000000000000000000000000000f6", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xb8ddf540ae2c650211ff9615477d69061db710b2b73a527a8f5d3e9cebfee5e7", "s": "0x77a01c72961d20542f9ebfb2169fd30fb798f730e95636dd0d904cc62b93de80", "v": "0x0" } ], "data": "0xc159", "from": "0xAC364Fe8a53B3B06E4ffc43a61e6b6aE111F8B60", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x0000000000000000000000000000000000000010", "type": "0x4", "value": "0x8e" } ], "version": "2.0" } ================================================ FILE: src/cli/fuzzer_bridge/models.py ================================================ """ Pydantic models for fuzzer output format v2. This module defines Data Transfer Objects (DTOs) for parsing fuzzer output. These DTOs are intentionally separate from EEST domain models (Transaction, Account) to maintain clean separation between external data format and internal representation. Design Principle: - DTOs (this file): Parse external JSON-RPC standard format - Domain Models (EEST): Internal test generation logic - Converter (converter.py): Explicit transformation between the two """ from typing import Dict, List from pydantic import BaseModel, Field from ethereum_test_base_types import AccessList, Address, Bytes, CamelModel, Hash, HexNumber from ethereum_test_forks import Fork from ethereum_test_types import Environment class FuzzerAccountInput(BaseModel): """ Raw account data from fuzzer output. This is a DTO that accepts fuzzer's JSON format without triggering EEST's Account validation logic or defaults. """ balance: HexNumber nonce: HexNumber = HexNumber(0) code: Bytes = Bytes(b"") storage: Dict[HexNumber, HexNumber] = Field(default_factory=dict) private_key: Hash | None = Field(None, alias="privateKey") class Config: """Pydantic configuration.""" populate_by_name = True class FuzzerAuthorizationInput(BaseModel): """ Raw authorization tuple from fuzzer output (EIP-7702). Accepts fuzzer's camelCase JSON format. """ chain_id: HexNumber = Field(..., alias="chainId") address: Address nonce: HexNumber v: HexNumber # yParity r: HexNumber s: HexNumber class Config: """Pydantic configuration.""" populate_by_name = True class FuzzerTransactionInput(BaseModel): """ Raw transaction data from fuzzer output. This is a DTO that accepts standard Ethereum JSON-RPC transaction format without triggering EEST's Transaction.model_post_init logic. Key differences from EEST Transaction: - Uses "gas" not "gas_limit" (JSON-RPC standard) - Uses "data" not "input" (JSON-RPC standard) - Uses "from" not "sender" (JSON-RPC standard) - No automatic TestAddress injection - No automatic transaction type detection - No automatic signature handling """ from_: Address = Field(..., alias="from") to: Address | None = None gas: HexNumber # Will be mapped to gas_limit in converter gas_price: HexNumber | None = Field(None, alias="gasPrice") max_fee_per_gas: HexNumber | None = Field(None, alias="maxFeePerGas") max_priority_fee_per_gas: HexNumber | None = Field(None, alias="maxPriorityFeePerGas") nonce: HexNumber data: Bytes = Bytes(b"") # Will be mapped to data/input in converter value: HexNumber = HexNumber(0) access_list: List[AccessList] | None = Field(None, alias="accessList") blob_versioned_hashes: List[Hash] | None = Field(None, alias="blobVersionedHashes") max_fee_per_blob_gas: HexNumber | None = Field(None, alias="maxFeePerBlobGas") authorization_list: List[FuzzerAuthorizationInput] | None = Field( None, alias="authorizationList" ) class Config: """Pydantic configuration.""" populate_by_name = True class FuzzerOutput(CamelModel): """ Main fuzzer output format v2. This is the top-level DTO that parses the complete fuzzer output JSON. It uses pure DTOs (FuzzerAccountInput, FuzzerTransactionInput) to avoid triggering EEST domain model logic during parsing. After parsing, the converter will transform these DTOs into EEST domain models. """ version: str = Field(..., pattern="^2\\.0$") fork: Fork chain_id: HexNumber = Field(HexNumber(1)) accounts: Dict[Address, FuzzerAccountInput] transactions: List[FuzzerTransactionInput] env: Environment parent_beacon_block_root: Hash | None = None ================================================ FILE: src/cli/fuzzer_bridge/performance_utils.py ================================================ """Performance utilities for fuzzer bridge processing.""" import json import mmap import os from functools import lru_cache from pathlib import Path from typing import Any, Dict, List, Optional try: import orjson # type: ignore # Fast JSON library (optional dependency) HAS_ORJSON = True except ImportError: HAS_ORJSON = False class FastJSONHandler: """Fast JSON operations using memory-mapped files and optimized parsing.""" @staticmethod def load_json_mmap(file_path: Path) -> Dict[str, Any]: """Load JSON using memory-mapped file for better I/O performance.""" with open(file_path, "r+b") as f: # Memory-map the file with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mmapped_file: # Read the entire content at once content = mmapped_file.read() if HAS_ORJSON: return orjson.loads(content) else: # Fallback to standard json return json.loads(content.decode("utf-8")) @staticmethod def dump_json_fast(data: Dict[str, Any], file_path: Path, pretty: bool = False) -> None: """Dump JSON using optimized serialization.""" if HAS_ORJSON: # Use orjson for faster serialization if pretty: content = orjson.dumps(data, option=orjson.OPT_INDENT_2) else: content = orjson.dumps(data) with open(file_path, "wb") as f: f.write(content) else: # Fallback to standard json with open(file_path, "w") as f: if pretty: json.dump(data, f, indent=2) else: json.dump(data, f) class BatchProcessor: """Optimized batch processing utilities.""" @staticmethod def calculate_optimal_batch_size(file_count: int, num_workers: int) -> int: """Calculate optimal batch size based on file count and workers.""" # Aim for at least 4 batches per worker for better load balancing # But not too small to avoid overhead min_batch_size = 5 ideal_batches_per_worker = 4 ideal_batch_size = max( min_batch_size, file_count // (num_workers * ideal_batches_per_worker) ) # Adjust for very large file counts if file_count > 10000: # Larger batches for many files to reduce overhead ideal_batch_size = max(50, ideal_batch_size) elif file_count < 100: # Smaller batches for few files to maximize parallelism ideal_batch_size = max(1, file_count // (num_workers * 2)) return ideal_batch_size @staticmethod def calculate_optimal_workers(file_count: int) -> int: """Calculate optimal number of workers for processing.""" cpu_count = os.cpu_count() or 4 # Scale workers based on file count if file_count < 10: return 1 # Sequential for very small workloads elif file_count < 50: return min(2, cpu_count) elif file_count < 200: return min(4, cpu_count) elif file_count < 1000: return min(cpu_count, 8) else: # For large file counts, use all available CPUs but cap at 16 return min(cpu_count, 16) @lru_cache(maxsize=128) def cached_fork_lookup(fork_name: str) -> Optional[Any]: """Cache fork lookups to avoid repeated module imports.""" try: import ethereum_test_forks return getattr(ethereum_test_forks, fork_name, None) except (ImportError, AttributeError): return None class ParallelProgressTracker: """Thread-safe progress tracking for parallel processing.""" def __init__(self, total: int): """Initialize progress tracker.""" from threading import Lock self.total = total self.completed = 0 self.errors = 0 self.lock = Lock() def update(self, success: int = 0, error: int = 0) -> tuple[int, int]: """Update progress counters thread-safely.""" with self.lock: self.completed += success self.errors += error return self.completed, self.errors def get_stats(self) -> tuple[int, int, int]: """Get current statistics.""" with self.lock: return self.completed, self.errors, self.total # Memory pool for reusing buffers class BufferPool: """Reusable buffer pool to reduce memory allocations.""" def __init__(self, buffer_size: int = 1024 * 1024): # 1MB default """Initialize buffer pool.""" self.buffer_size = buffer_size self.buffers: List[bytearray] = [] def get_buffer(self) -> bytearray: """Get a buffer from pool or create new one.""" if self.buffers: return self.buffers.pop() return bytearray(self.buffer_size) def return_buffer(self, buffer: bytearray) -> None: """Return buffer to pool for reuse.""" if len(buffer) == self.buffer_size: self.buffers.append(buffer) ================================================ FILE: src/cli/fuzzer_bridge/production_test.py ================================================ #!/usr/bin/env python """ Production-ready test suite for fuzzer bridge with geth verification. This script: 1. Loads fuzzer output 2. Converts to blockchain test 3. Generates fixtures 4. Verifies with go-ethereum 5. Reports comprehensive results """ import argparse import json import subprocess import sys import tempfile import time from pathlib import Path from typing import Any, Dict, List, Optional # Add parent directory to path for imports sys.path.insert(0, str(Path(__file__).parent.parent.parent)) from ethereum_clis import GethTransitionTool from ethereum_test_fixtures.blockchain import BlockchainFixture from ethereum_test_specs.blockchain import BlockchainTest from ethereum_test_tools import ( Account, Address, Alloc, Block, Environment, Transaction, ) class FuzzerBridge: """Production-ready fuzzer bridge with validation and verification.""" def __init__( self, t8n_path: Optional[str] = None, verbose: bool = False, keep_fixtures: bool = False ): """Initialize bridge with optional transition tool path.""" self.t8n = GethTransitionTool(binary=Path(t8n_path) if t8n_path else None) self.verbose = verbose self.keep_fixtures = keep_fixtures self.stats: Dict[str, Any] = { "tests_generated": 0, "tests_passed": 0, "tests_failed": 0, "validation_errors": [], } def validate_fuzzer_output(self, data: Dict[str, Any]) -> List[str]: """Validate fuzzer output format and return list of errors.""" errors = [] # Check version version = data.get("version", "1.0") if version != "2.0": errors.append(f"Unsupported version {version}, expected 2.0") # Check required fields required_fields = ["accounts", "transactions", "env", "fork", "chainId"] for field in required_fields: if field not in data: errors.append(f"Missing required field: {field}") # Validate accounts with transactions have private keys if "accounts" in data and "transactions" in data: senders = set() for tx in data["transactions"]: sender = tx.get("from") or tx.get("sender") if sender: senders.add(sender) for sender in senders: if sender not in data["accounts"]: errors.append(f"Sender {sender} not in accounts") elif "privateKey" not in data["accounts"][sender]: errors.append(f"No private key for sender {sender}") else: # Validate private key matches address if not self._validate_key_address( data["accounts"][sender]["privateKey"], sender ): errors.append(f"Private key doesn't match address {sender}") return errors def _validate_key_address(self, private_key: str, expected_address: str) -> bool: """Validate that private key generates expected address.""" try: from ethereum_test_types import EOA eoa = EOA(key=private_key) # EOA class returns the address directly via str() return str(eoa).lower() == expected_address.lower() except Exception: return False def convert_to_test(self, fuzzer_data: Dict[str, Any]) -> Dict[str, Any]: """Convert fuzzer output to test parameters.""" # Validate first errors = self.validate_fuzzer_output(fuzzer_data) if errors: raise ValueError("Validation failed:\n" + "\n".join(errors)) # Build pre-state pre_state = Alloc() private_keys = {} for addr_str, account_data in fuzzer_data["accounts"].items(): addr = Address(addr_str) if "privateKey" in account_data: private_keys[addr_str] = account_data["privateKey"] pre_state[addr] = Account( balance=int(account_data.get("balance", "0x0"), 16), nonce=int(account_data.get("nonce", "0x0"), 16), code=account_data.get("code", ""), storage=account_data.get("storage", {}), ) # Create genesis environment (block 0) env_data = fuzzer_data["env"] genesis_env = Environment( fee_recipient=Address(env_data.get("currentCoinbase")), difficulty=0, # Post-merge gas_limit=int(env_data.get("currentGasLimit", "0x1000000"), 16), number=0, # Genesis is block 0 timestamp=int(env_data.get("currentTimestamp", "0x1000"), 16) - 12, base_fee_per_gas=int(env_data.get("currentBaseFee", "0x7"), 16), ) # Block 1 environment overrides block1_env = { "timestamp": int(env_data.get("currentTimestamp", "0x1000"), 16), "fee_recipient": Address(env_data.get("currentCoinbase")), } # Create transactions txs = [] for tx_data in fuzzer_data["transactions"]: sender_addr = tx_data.get("from") or tx_data.get("sender") secret_key = private_keys[sender_addr] txs.append( Transaction( to=Address(tx_data["to"]) if tx_data.get("to") else None, value=int(tx_data.get("value", "0x0"), 16), gas_limit=int(tx_data.get("gas", "0x5208"), 16), gas_price=int(tx_data.get("gasPrice", "0x1"), 16), nonce=int(tx_data.get("nonce", "0x0"), 16), data=bytes.fromhex(tx_data.get("data", "0x")[2:]) if tx_data.get("data", "0x") != "0x" else b"", secret_key=secret_key, ) ) # Create block block = Block(txs=txs, **block1_env) return { "genesis_environment": genesis_env, "pre": pre_state, "post": {}, "blocks": [block], "chain_id": fuzzer_data.get("chainId", 1), "fork": fuzzer_data.get("fork", "Prague"), } def generate_fixture(self, test_params: Dict[str, Any]) -> Dict[str, Any]: """Generate blockchain test fixture.""" # Get fork from ethereum_test_forks import Cancun, Osaka, Prague, Shanghai fork_map = {"Osaka": Osaka, "Prague": Prague, "Shanghai": Shanghai, "Cancun": Cancun} fork = fork_map.get(test_params["fork"], Prague) # Create test test = BlockchainTest( genesis_environment=test_params["genesis_environment"], pre=test_params["pre"], post=test_params["post"], blocks=test_params["blocks"], chain_id=test_params["chain_id"], ) # Generate fixture fixture = test.generate( t8n=self.t8n, fork=fork, fixture_format=BlockchainFixture, ) self.stats["tests_generated"] += 1 return fixture.model_dump(exclude_none=True, by_alias=True) def verify_with_geth( self, fixture: Dict[str, Any], geth_path: str, test_name: str = "test" ) -> Dict[str, Any]: """Verify fixture with go-ethereum evm tool.""" # Write fixture to temp file with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f: json.dump({test_name: fixture}, f, indent=2) fixture_path = f.name try: # Run geth blocktest result = subprocess.run( [geth_path, "blocktest", fixture_path], capture_output=True, text=True, timeout=30 ) # Parse output output = result.stdout + result.stderr # Check if test passed if result.returncode == 0 and '"pass": true' in output: self.stats["tests_passed"] += 1 return {"pass": True, "output": output, "fixture_path": fixture_path} else: self.stats["tests_failed"] += 1 # Extract error message error = "Unknown error" if '"error":' in output: import re match = re.search(r'"error":\s*"([^"]+)"', output) if match: error = match.group(1) return { "pass": False, "error": error, "output": output, "fixture_path": fixture_path, } except subprocess.TimeoutExpired: self.stats["tests_failed"] += 1 return {"pass": False, "error": "Timeout", "fixture_path": fixture_path} except Exception as e: self.stats["tests_failed"] += 1 return {"pass": False, "error": str(e), "fixture_path": fixture_path} finally: # Optionally clean up # Note: args is not defined here - should be passed as parameter pass def run_full_test(self, fuzzer_file: str, geth_path: str) -> bool: """Run full test pipeline from fuzzer output to geth verification.""" print(f"🔧 Loading fuzzer output from {fuzzer_file}") with open(fuzzer_file) as f: fuzzer_data = json.load(f) print("📋 Fuzzer Output Summary:") print(f" Version: {fuzzer_data.get('version', 'unknown')}") print(f" Fork: {fuzzer_data.get('fork', 'unknown')}") print(f" Accounts: {len(fuzzer_data.get('accounts', {}))}") print(f" Transactions: {len(fuzzer_data.get('transactions', []))}") # Validate print("\n✓ Validating fuzzer output...") errors = self.validate_fuzzer_output(fuzzer_data) if errors: print("❌ Validation failed:") for error in errors: print(f" - {error}") return False # Convert print("✓ Converting to test parameters...") try: test_params = self.convert_to_test(fuzzer_data) except Exception as e: print(f"❌ Conversion failed: {e}") return False # Generate fixture print("✓ Generating blockchain test fixture...") try: fixture = self.generate_fixture(test_params) except Exception as e: print(f"❌ Fixture generation failed: {e}") import traceback traceback.print_exc() return False # Extract test info genesis_hash = fixture.get("genesisBlockHeader", {}).get("hash", "unknown") pre_count = len(fixture.get("pre", {})) print(f" Genesis hash: {genesis_hash[:16]}...") print(f" Pre-state accounts: {pre_count}") # Verify with geth print("\n🔍 Verifying with go-ethereum...") result = self.verify_with_geth(fixture, geth_path, "fuzzer_test") if result["pass"]: print("✅ Test PASSED!") if self.verbose: print(f" Fixture: {result.get('fixture_path', 'N/A')}") else: print("❌ Test FAILED!") print(f" Error: {result.get('error', 'Unknown')}") if self.verbose: print(f" Output:\n{result.get('output', '')}") if self.keep_fixtures: print(f" Fixture saved: {result.get('fixture_path', 'N/A')}") # Print statistics print("\n📊 Statistics:") print(f" Tests generated: {self.stats['tests_generated']}") print(f" Tests passed: {self.stats['tests_passed']}") print(f" Tests failed: {self.stats['tests_failed']}") return result["pass"] def main() -> int: """Main entry point for production test.""" parser = argparse.ArgumentParser( description="Production test for fuzzer bridge with geth verification" ) parser.add_argument( "--fuzzer-output", required=True, help="Path to fuzzer output JSON file", ) parser.add_argument("--geth-path", required=True, help="Path to go-ethereum evm binary") parser.add_argument("--t8n-path", help="Path to transition tool binary (optional)") parser.add_argument( "--keep-fixtures", action="store_true", help="Keep generated fixture files for debugging", ) parser.add_argument("--verbose", action="store_true", help="Verbose output") args = parser.parse_args() # Check paths exist if not Path(args.fuzzer_output).exists(): print(f"❌ Fuzzer output not found: {args.fuzzer_output}") return 1 if not Path(args.geth_path).exists(): print(f"❌ Geth binary not found: {args.geth_path}") return 1 # Run test bridge = FuzzerBridge(t8n_path=args.t8n_path) start_time = time.time() success = bridge.run_full_test(args.fuzzer_output, args.geth_path) elapsed = time.time() - start_time print(f"\n⏱️ Completed in {elapsed:.2f} seconds") return 0 if success else 1 if __name__ == "__main__": sys.exit(main()) ================================================ FILE: src/cli/gen_index.py ================================================ """ Generate an index file of all the json fixtures in the specified directory. """ import datetime import json import os from pathlib import Path from typing import List import click import rich from rich.progress import ( BarColumn, Column, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn, ) from ethereum_test_base_types import HexNumber from ethereum_test_fixtures.consume import IndexFile, TestCaseIndexFile from ethereum_test_fixtures.file import Fixtures from .hasher import HashableItem # Files and directories to exclude from index generation INDEX_EXCLUDED_FILES = frozenset({"index.json"}) INDEX_EXCLUDED_PATH_PARTS = frozenset({".meta", "pre_alloc"}) def count_json_files_exclude_index(start_path: Path) -> int: """Return the number of fixture json files in the specified directory.""" json_file_count = sum( 1 for file in start_path.rglob("*.json") if file.name not in INDEX_EXCLUDED_FILES and not any(part in INDEX_EXCLUDED_PATH_PARTS for part in file.parts) ) return json_file_count @click.command( help=( "Generate an index file of all the json fixtures in the specified directory." "The index file is saved as 'index.json' in the specified directory." ) ) @click.option( "--input", "-i", "input_dir", type=click.Path(exists=True, file_okay=False, dir_okay=True, readable=True), required=True, help="The input directory", ) @click.option( "--quiet", "-q", "quiet_mode", is_flag=True, default=False, expose_value=True, help="Don't show the progress bar while processing fixture files.", ) @click.option( "--force", "-f", "force_flag", is_flag=True, default=False, expose_value=True, help="Force re-generation of the index file, even if it already exists.", ) def generate_fixtures_index_cli(input_dir: str, quiet_mode: bool, force_flag: bool) -> None: """ CLI wrapper to an index of all the fixtures in the specified directory. """ generate_fixtures_index( Path(input_dir), quiet_mode=quiet_mode, force_flag=force_flag, ) def generate_fixtures_index( input_path: Path, quiet_mode: bool = False, force_flag: bool = False, ) -> None: """ Generate an index file (index.json) of all the fixtures in specified dir. """ total_files = 0 if not os.path.isdir(input_path): # caught by click if using via cli raise FileNotFoundError(f"The directory {input_path} does not exist.") if not quiet_mode: total_files = count_json_files_exclude_index(input_path) output_file = Path(f"{input_path}/.meta/index.json") output_file.parent.mkdir(parents=True, exist_ok=True) # no meta dir in <=v3.0.0 try: root_hash = HashableItem.from_folder(folder_path=input_path).hash() except (KeyError, TypeError): root_hash = b"" # just regenerate a new index file if not force_flag and output_file.exists(): index_data: IndexFile try: with open(output_file, "r") as f: index_data = IndexFile(**json.load(f)) if index_data.root_hash and index_data.root_hash == HexNumber(root_hash): if not quiet_mode: rich.print(f"Index file [bold cyan]{output_file}[/] is up-to-date.") return except Exception as e: rich.print(f"Ignoring exception {e}") rich.print(f"...generating a new index file [bold cyan]{output_file}[/]") filename_display_width = 25 with Progress( TextColumn( f"[bold cyan]{{task.fields[filename]:<{filename_display_width}}}[/]", justify="left", table_column=Column(ratio=1), ), BarColumn( complete_style="green3", finished_style="bold green3", table_column=Column(ratio=2), ), TaskProgressColumn(), TimeElapsedColumn(), expand=False, disable=quiet_mode, ) as progress: # type: Progress task_id = progress.add_task("[cyan]Processing files...", total=total_files, filename="...") forks = set() fixture_formats = set() test_cases: List[TestCaseIndexFile] = [] for file in input_path.rglob("*.json"): if file.name in INDEX_EXCLUDED_FILES or any( part in INDEX_EXCLUDED_PATH_PARTS for part in file.parts ): continue try: fixtures: Fixtures = Fixtures.model_validate_json(file.read_text()) except Exception as e: rich.print(f"[red]Error loading fixtures from {file}[/red]") raise e relative_file_path = Path(file).absolute().relative_to(Path(input_path).absolute()) for fixture_name, fixture in fixtures.items(): fixture_fork = fixture.get_fork() test_cases.append( TestCaseIndexFile( id=fixture_name, json_path=relative_file_path, # eest uses hash; ethereum/tests uses generatedTestHash fixture_hash=fixture.info.get("hash") or f"0x{fixture.info.get('generatedTestHash')}", fork=fixture_fork, format=fixture.__class__, pre_hash=getattr(fixture, "pre_hash", None), ) ) if fixture_fork: forks.add(fixture_fork) fixture_formats.add(fixture.format_name) display_filename = file.name if len(display_filename) > filename_display_width: display_filename = display_filename[: filename_display_width - 3] + "..." else: display_filename = display_filename.ljust(filename_display_width) progress.update(task_id, advance=1, filename=display_filename) progress.update( task_id, completed=total_files, filename="Indexing complete 🦄".ljust(filename_display_width), ) index = IndexFile( test_cases=test_cases, root_hash=root_hash, created_at=datetime.datetime.now(), test_count=len(test_cases), forks=list(forks), fixture_formats=list(fixture_formats), ) with open(output_file, "w") as f: f.write(index.model_dump_json(exclude_none=False, indent=2)) if __name__ == "__main__": generate_fixtures_index_cli() ================================================ FILE: src/cli/generate_checklist_stubs.py ================================================ """CLI tool to generate mypy stub files for EIPChecklist classes.""" import sys from pathlib import Path import click def has_nested_classes(obj: type) -> bool: """Check if an object has nested classes with _path attribute.""" for attr_name in dir(obj): if attr_name.startswith("_"): continue attr = getattr(obj, attr_name) if isinstance(attr, type) and hasattr(attr, "_path"): return True return False def generate_class_stub(obj: type, class_name: str, indent: int = 0) -> list[str]: """Generate stub for a class and its nested classes.""" lines = [] spaces = " " * indent # Get all attributes that are classes with _path nested_classes = [] leaf_classes = [] for attr_name in dir(obj): if attr_name.startswith("_"): continue attr = getattr(obj, attr_name) if isinstance(attr, type) and hasattr(attr, "_path"): if has_nested_classes(attr): nested_classes.append((attr_name, attr)) else: leaf_classes.append(attr_name) # Determine if this class itself should be callable is_callable = class_name != "EIPChecklist" # All classes except the root are callable # Generate class declaration if is_callable: lines.append(f"{spaces}class {class_name}(_CallableChecklistItem):") else: lines.append(f"{spaces}class {class_name}:") # If no nested content, add pass if not nested_classes and not leaf_classes: lines.append(f"{spaces} pass") return lines # Generate leaf classes (final callable items) for attr_name in sorted(leaf_classes): lines.append(f"{spaces} {attr_name}: _CallableChecklistItem") # Add blank line if we have both leaf classes and nested classes if leaf_classes and nested_classes: lines.append("") # Generate nested classes for i, (attr_name, attr_obj) in enumerate(sorted(nested_classes)): if i > 0: # Add blank line between nested classes lines.append("") nested_lines = generate_class_stub(attr_obj, attr_name, indent + 1) lines.extend(nested_lines) return lines @click.command() @click.option( "--output", "-o", type=click.Path(), help="Output path for the stub file (default: auto-detect)", ) @click.option( "--dry-run", is_flag=True, help="Print the generated stub content instead of writing to file", ) def generate_checklist_stubs(output: str | None, dry_run: bool) -> None: """ Generate mypy stub files for EIPChecklist classes. This is a development tool that generates .pyi stub files to help mypy understand that EIPChecklist classes are callable, fixing type checking issues. Examples: Generate stub files (auto-detect location): uv run generate_checklist_stubs Generate to specific location: uv run generate_checklist_stubs --output /path/to/stubs.pyi Preview content without writing: uv run generate_checklist_stubs --dry-run """ try: # Add src to path so we can import the module src_path = Path(__file__).parent.parent sys.path.insert(0, str(src_path)) from ethereum_test_checklists.eip_checklist import EIPChecklist stub_content = '''""" Type stubs for EIP checklist - auto-generated. DO NOT EDIT MANUALLY - This file is generated by running `uv run generate_checklist_stubs` """ from typing import Any, Callable, TypeVar, overload import pytest F = TypeVar("F", bound=Callable[..., Any]) class _CallableChecklistItem: """Base type for all callable checklist items.""" @overload def __call__(self, func: F) -> F: ... @overload def __call__(self, *, eip: Any = ..., **kwargs: Any) -> pytest.MarkDecorator: ... def __str__(self) -> str: ... ''' # Generate the main EIPChecklist structure lines = generate_class_stub(EIPChecklist, "EIPChecklist", indent=0) stub_content += "\n".join(lines) + "\n" if dry_run: click.echo("Generated stub content:") click.echo("=" * 50) click.echo(stub_content) return # Determine output path if output: stub_path = Path(output) else: stub_path = src_path / "ethereum_test_checklists" / "eip_checklist.pyi" # Write to the stub file stub_path.parent.mkdir(parents=True, exist_ok=True) stub_path.write_text(stub_content) click.echo(f"✅ Generated stub file: {stub_path}") click.echo(f"📊 Total lines: {len(stub_content.splitlines())}") # Count classes for verification class_count = stub_content.count("class ") callable_count = stub_content.count(": _CallableChecklistItem") click.echo(f"🏗️ Classes: {class_count}, Callable items: {callable_count}") click.echo( "\n💡 This stub file helps mypy understand that EIPChecklist classes are callable." ) click.echo( " You can now use @EIPChecklist.Opcode.Test.StackComplexOperations() " "without type errors!" ) except ImportError as e: click.echo(f"❌ Error importing EIPChecklist: {e}", err=True) click.echo("💡 Make sure you're running this from the project root", err=True) sys.exit(1) except Exception as e: click.echo(f"❌ Error generating stubs: {e}", err=True) sys.exit(1) if __name__ == "__main__": generate_checklist_stubs() ================================================ FILE: src/cli/gentest/__init__.py ================================================ """ Generate a Python blockchain test from a transaction hash. This script can be used to generate Python source for a blockchain test case that replays a mainnet or testnet transaction from its transaction hash. Requirements: 1. Access to an archive node for the network where the transaction originates. A provider may be used. 2. The transaction hash of a type 0 transaction (currently only legacy transactions are supported). Example Usage: 1. Generate a test for a transaction with hash ```console uv run gentest \ 0xa41f343be7a150b740e5c939fa4d89f3a2850dbe21715df96b612fc20d1906be \ tests/paris/test_0xa41f.py ``` 2. Fill the test: ```console fill --fork=Paris tests/paris/test_0xa41f.py ``` Limitations: 1. Only legacy transaction types (type 0) are currently supported. """ from .cli import generate __all__ = ["generate"] ================================================ FILE: src/cli/gentest/cli.py ================================================ """ CLI interface for generating blockchain test scripts. It extracts a specified transaction and its required state from a blockchain network using the transaction hash and generates a Python test script based on that information. """ from sys import stderr from typing import TextIO import click from ethereum_test_base_types import Hash from .source_code_generator import get_test_source from .test_context_providers import StateTestProvider @click.command() @click.argument("transaction_hash") @click.argument("output_file", type=click.File("w", lazy=True)) def generate(transaction_hash: str, output_file: TextIO) -> None: """ Extract a transaction and state from network to make blockchain test. TRANSACTION_HASH is the hash of the transaction to be used. OUTPUT_FILE is the path to the output python script. """ provider = StateTestProvider(transaction_hash=Hash(transaction_hash)) source = get_test_source(provider=provider, template_path="blockchain_test/transaction.py.j2") output_file.write(source) print("Finished", file=stderr) ================================================ FILE: src/cli/gentest/request_manager.py ================================================ """ A request manager Ethereum RPC calls. The RequestManager handles transactions and block data retrieval from a remote Ethereum node, utilizing Pydantic models to define the structure of transactions and blocks. Classes: RequestManager: The main class for managing RPC requests and responses. RemoteTransaction: A Pydantic model representing a transaction retrieved from the node. RemoteBlock: A Pydantic model representing a block retrieved from the node. """ from typing import Any, Dict from config import EnvConfig from ethereum_test_base_types import Hash from ethereum_test_rpc import BlockNumberType, DebugRPC, EthRPC from ethereum_test_rpc.rpc_types import TransactionByHashResponse from ethereum_test_types import Environment class RPCRequest: """Interface for the RPC interaction with remote node.""" node_url: str headers: dict[str, str] def __init__(self) -> None: """Initialize RequestManager with specific client config.""" node_config = EnvConfig().remote_nodes[0] self.node_url = str(node_config.node_url) headers = node_config.rpc_headers self.rpc = EthRPC(node_config.node_url, extra_headers=headers) self.debug_rpc = DebugRPC(node_config.node_url, extra_headers=headers) def eth_get_transaction_by_hash(self, transaction_hash: Hash) -> TransactionByHashResponse: """Get transaction data.""" res = self.rpc.get_transaction_by_hash(transaction_hash) assert res is not None, "Transaction not found" block_number = res.block_number assert block_number is not None, "Transaction does not seem to be included in any block" return res def eth_get_block_by_number(self, block_number: BlockNumberType) -> Environment: """Get block by number.""" res = self.rpc.get_block_by_number(block_number) assert res is not None, "Block not found" return Environment( fee_recipient=res["miner"], number=res["number"], difficulty=res["difficulty"], gas_limit=res["gasLimit"], timestamp=res["timestamp"], ) def debug_trace_call( self, transaction: TransactionByHashResponse ) -> Dict[str, Dict[Any, Any]]: """Get pre-state required for transaction.""" assert transaction.sender is not None assert transaction.to is not None result = self.debug_rpc.trace_call( { "from": transaction.sender.hex(), "to": transaction.to.hex(), "data": transaction.data.hex(), }, f"{transaction.block_number}", ) assert result is not None, "trace_call returned None" return result ================================================ FILE: src/cli/gentest/source_code_generator.py ================================================ """ Pytest source code generator. This module maps a test provider instance to pytest source code. """ import subprocess import sys import tempfile from pathlib import Path import jinja2 from config import AppConfig from .test_context_providers import Provider template_loader = jinja2.PackageLoader("cli.gentest") template_env = jinja2.Environment(loader=template_loader, keep_trailing_newline=True) # This filter maps python objects to string template_env.filters["stringify"] = lambda value: repr(value) # generates a formatted pytest source code by writing provided data on a given # template. def get_test_source(provider: Provider, template_path: str) -> str: """ Generate formatted pytest source code by rendering a template with provided data. This function uses the given template path to create a pytest-compatible source code string. It retrieves context data from the specified provider and applies it to the template. Args: provider: An object that provides the necessary context for rendering the template. template_path (str): The path to the Jinja2 template file used to generate tests. Returns: str: The formatted pytest source code. """ template = template_env.get_template(template_path) rendered_template = template.render(provider.get_context()) # return rendered_template return format_code(rendered_template) def format_code(code: str) -> str: """ Format the provided Python code using the Black code formatter. This function writes the given code to a temporary Python file, formats it using the Black formatter, and returns the formatted code as a string. Args: code (str): The Python code to be formatted. Returns: str: The formatted Python code. """ # Create a temporary python file with tempfile.NamedTemporaryFile(suffix=".py") as temp_file: # Write the code to the temporary file temp_file.write(code.encode("utf-8")) # Ensure the file is written temp_file.flush() # Create a Path object for the input file input_file_path = Path(temp_file.name) # Get the path to the formatter executable in the virtual environment if sys.platform.startswith("win"): formatter_path = Path(sys.prefix) / "Scripts" / "ruff.exe" else: formatter_path = Path(sys.prefix) / "bin" / "ruff" # Call ruff to format the file config_path = AppConfig().ROOT_DIR / "pyproject.toml" try: subprocess.run( [ str(formatter_path), "format", str(input_file_path), "--quiet", "--config", str(config_path), ], check=True, ) except subprocess.CalledProcessError as e: raise Exception(f"Error formatting code using formatter '{formatter_path}'") from e # Return the formatted source code return input_file_path.read_text() ================================================ FILE: src/cli/gentest/templates/blockchain_test/transaction.py.j2 ================================================ """ Gentest autogenerated test from `tx.hash`: {{ tx_hash }} https://etherscan.io/tx/{{tx_hash}}. """ from typing import Dict import pytest from ethereum_test_tools import Account, Environment, StateTestFiller, Storage, Transaction REFERENCE_SPEC_GIT_PATH = "N/A" REFERENCE_SPEC_VERSION = "N/A" @pytest.fixture def env(): # noqa: D103 return {{ environment | stringify }} @pytest.mark.valid_from("Paris") def test_transaction_{{ tx_hash }}( env: Environment, state_test: StateTestFiller, ): """ Gentest autogenerated test for tx.hash: {{ tx_hash }}. """ pre = {{ pre_state | stringify }} post: Dict = {} tx = {{ transaction | stringify }} state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: src/cli/gentest/test_context_providers.py ================================================ """ Various providers which generate contexts required to create test scripts. Classes: Provider: An provider generates required context for creating a test. BlockchainTestProvider: The BlockchainTestProvider takes a transaction hash and creates required context to create a test. Example: provider = BlockchainTestContextProvider(transaction=transaction) context = provider.get_context() """ from abc import ABC, abstractmethod from sys import stderr from typing import Any, Dict, Optional from pydantic import BaseModel from ethereum_test_base_types import Account, Hash from ethereum_test_rpc.rpc_types import TransactionByHashResponse from ethereum_test_tools import Environment, Transaction from .request_manager import RPCRequest class Provider(ABC, BaseModel): """An provider generates required context for creating a test.""" @abstractmethod def get_context(self) -> Dict: """Get the context for generating a test.""" pass class StateTestProvider(Provider): """Provides context required to generate a `state_test` using pytest.""" transaction_hash: Hash block: Optional[Environment] = None transaction_response: Optional[TransactionByHashResponse] = None state: Optional[Dict[str, Dict]] = None def _make_rpc_calls(self) -> None: """Make RPC calls to fetch transaction and block data.""" request = RPCRequest() print( f"Perform tx request: eth_get_transaction_by_hash({self.transaction_hash})", file=stderr, ) self.transaction_response = request.eth_get_transaction_by_hash(self.transaction_hash) print("Perform debug_trace_call", file=stderr) self.state = request.debug_trace_call(self.transaction_response) print("Perform eth_get_block_by_number", file=stderr) assert self.transaction_response.block_number is not None self.block = request.eth_get_block_by_number(int(self.transaction_response.block_number)) print("Generate py test", file=stderr) def _get_environment(self) -> Environment: assert self.block is not None return self.block def _get_pre_state(self) -> Dict[str, Account]: assert self.state is not None assert self.transaction_response is not None pre_state: Dict[str, Account] = {} for address, account_data in self.state.items(): # TODO: Check if this is required. Ideally, # the pre-state tracer should have the correct # values without requiring any additional modifications. if address == self.transaction_response.sender: account_data["nonce"] = self.transaction_response.nonce pre_state[address] = Account(**account_data) return pre_state def _get_transaction(self) -> Transaction: assert self.transaction_response is not None # Validate the RPC TransactionHashResponse and convert it to a # Transaction instance. return Transaction.model_validate(self.transaction_response.model_dump()) def get_context(self) -> Dict[str, Any]: """ Get the context for generating a blockchain test. Returns: Dict[str, Any]: A dictionary containing environment, pre-state, a transaction and its hash. """ self._make_rpc_calls() return { "environment": self._get_environment(), "pre_state": self._get_pre_state(), "transaction": self._get_transaction(), "tx_hash": self.transaction_hash, } ================================================ FILE: src/cli/gentest/test_providers.py ================================================ """ Contains various providers which generates context required to create test scripts. Classes: BlockchainTestProvider: The BlockchainTestProvider class takes information about a block, a transaction, and the associated state, and provides methods to generate various elements needed for testing, such as module docstrings, test names, and pre-state items. Example: provider = BlockchainTestProvider( block=block, transaction=transaction, state=state ) context = provider.get_context() """ from typing import Any, Dict from pydantic import BaseModel from ethereum_test_base_types import Account, Address, ZeroPaddedHexNumber from ethereum_test_rpc.rpc_types import TransactionByHashResponse from ethereum_test_types import Environment class BlockchainTestProvider(BaseModel): """ Provides context required to generate a `blockchain_test` using pytest. """ block: Environment transaction: TransactionByHashResponse state: Dict[Address, Account] def _get_environment_kwargs(self) -> str: env_str = "" pad = " " for field, value in self.block.dict().items(): env_str += ( f'{pad}{field}="{value}",\n' if field == "coinbase" else f"{pad}{field}={value},\n" ) return env_str # TODO: Output should be dict. Formatting should happen in the template. def _get_pre_state_items(self) -> str: # Print a nice .py storage pre pad = " " state_str = "" for address, account_obj in self.state.items(): state_str += f' "{address}": Account(\n' state_str += f"{pad}balance={str(account_obj.balance)},\n" if address == self.transaction.sender: state_str += f"{pad}nonce={self.transaction.nonce},\n" else: state_str += f"{pad}nonce={str(account_obj.nonce)},\n" if account_obj.code is None: state_str += f'{pad}code="0x",\n' else: state_str += f'{pad}code="{str(account_obj.code)}",\n' state_str += pad + "storage={\n" if account_obj.storage is not None: for record, value in account_obj.storage.root.items(): pad_record = ZeroPaddedHexNumber(record) pad_value = ZeroPaddedHexNumber(value) state_str += f'{pad} "{pad_record}" : "{pad_value}",\n' state_str += pad + "}\n" state_str += " ),\n" return state_str # TODO: Output should be dict. Formatting should happen in the template. def _get_transaction_items(self) -> str: """Print legacy transaction in .py.""" pad = " " tr_str = "" quoted_fields_array = ["data", "to"] hex_fields_array = ["v", "r", "s"] legacy_fields_array = [ "ty", "chain_id", "nonce", "gas_price", "protected", "gas_limit", "value", ] for field, value in iter(self.transaction): if value is None: continue if field in legacy_fields_array: tr_str += f"{pad}{field}={value},\n" if field in quoted_fields_array: tr_str += f'{pad}{field}="{value}",\n' if field in hex_fields_array: tr_str += f"{pad}{field}={hex(value)},\n" return tr_str def get_context(self) -> Dict[str, Any]: """ Get the context for generating a blockchain test. Returns: Dict[str, Any]: A dictionary containing module docstring, test name, test docstring, environment kwargs, pre-state items, and transaction items. """ return { "environment_kwargs": self._get_environment_kwargs(), "pre_state_items": self._get_pre_state_items(), "transaction_items": self._get_transaction_items(), "tx_hash": self.transaction.hash, } ================================================ FILE: src/cli/gentest/tests/__init__.py ================================================ """Test cases for the `generate` CLI.""" ================================================ FILE: src/cli/gentest/tests/test_cli.py ================================================ """Tests for the gentest CLI command.""" from pathlib import Path from typing import Any import pytest from click.testing import CliRunner from ethereum_test_base_types import Account from ethereum_test_tools import Environment, Storage, Transaction from ..cli import generate from ..test_context_providers import StateTestProvider transactions_by_type = { 0: { "environment": Environment( fee_recipient="0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", gas_limit=9916577, number=9974504, timestamp=1588257377, difficulty=2315196811272822, parent_ommers_hash="0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", extra_data=b"\x00", ), "pre_state": { "0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c": Account( nonce=6038603, balance=23760714652307793035, code=b"", storage=Storage(root={}) ), "0x8a4a4d396a06cba2a7a4a73245991de40cdec289": Account( nonce=2, balance=816540000000000000, code=b"", storage=Storage(root={}) ), "0xc6d96786477f82491bfead8f00b8294688f77abc": Account( nonce=25, balance=29020266497911578313, code=b"", storage=Storage(root={}) ), }, "transaction": Transaction( ty=0, chain_id=1, nonce=2, gas_price=10000000000, gas_limit=21000, to="0xc6d96786477f82491bfead8f00b8294688f77abc", value=668250000000000000, data=b"", v=38, r=57233334052658009540326312124836763247359579695589124499839562829147086216092, s=49687643984819828983661675232336138386174947240467726918882054280625462464348, sender="0x8a4a4d396a06cba2a7a4a73245991de40cdec289", ), }, 2: { "environment": Environment( fee_recipient="0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", gas_limit=30172625, number=21758000, timestamp=1738489319, parent_ommers_hash="0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", extra_data=b"\x00", ), "pre_state": { "0x24d6c74d811cfde65995ed26fd08af445f8aab06": Account( nonce=1011, balance=139840767390685635650, code=b"", storage=Storage(root={}) ), "0xd5fbda4c79f38920159fe5f22df9655fde292d47": Account( nonce=553563, balance=162510989019530720334, code=b"", storage=Storage(root={}) ), "0xe2e29f9a85cfecb9cdaa83a81c7aa2792f24d93f": Account( nonce=104, balance=553317651330968100, code=b"", storage=Storage(root={}) ), }, "transaction": Transaction( ty=2, chain_id=1, nonce=553563, max_priority_fee_per_gas=1900000, max_fee_per_gas=3992652948, gas_limit=63000, to="0xe2e29f9a85cfecb9cdaa83a81c7aa2792f24d93f", value=221305417266040400, v=1, r=23565967349511399087318407428036702220029523660288023156323795583373026415631, s=9175853102116430015855393834807954374677057556696757715994220939907579927771, sender="0xd5fbda4c79f38920159fe5f22df9655fde292d47", ), }, } @pytest.fixture def transaction_hash(tx_type: int) -> str: # noqa: D103 return str(transactions_by_type[tx_type]["transaction"].hash) # type: ignore @pytest.mark.parametrize("tx_type", list(transactions_by_type.keys())) def test_tx_type( pytester: pytest.Pytester, tmp_path: Path, monkeypatch: Any, tx_type: int, transaction_hash: str, default_t8n: Any, ) -> None: """Generates a test case for any transaction type.""" # This test is run in a CI environment, where connection to a # node could be unreliable. Therefore, we mock the RPC request to avoid any # network issues. This is done by patching the `get_context` method of the # `StateTestProvider`. runner = CliRunner() tmp_path_tests = tmp_path / "tests" tmp_path_tests.mkdir() tmp_path_output = tmp_path / "output" tmp_path_output.mkdir() generated_py_file = str(tmp_path_tests / f"gentest_type_{tx_type}.py") tx = transactions_by_type[tx_type] def get_mock_context(self: StateTestProvider) -> dict: del self return tx monkeypatch.setattr(StateTestProvider, "get_context", get_mock_context) ## Generate ## gentest_result = runner.invoke(generate, [transaction_hash, generated_py_file]) assert gentest_result.exit_code == 0 ## Fill ## with open(generated_py_file, "r") as f: pytester.makepyfile(f.read()) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") args = [ "-c", "pytest-fill.ini", "-m", "state_test", "--fork", "Cancun", "--t8n-server-url", default_t8n.server_url, ] result = pytester.runpytest("-v", *args) assert result.ret == pytest.ExitCode.OK, f"Fill command failed:\n{result}" ================================================ FILE: src/cli/hasher.py ================================================ """Simple CLI tool to hash a directory of JSON fixtures.""" import hashlib import json from dataclasses import dataclass, field from enum import IntEnum, auto from pathlib import Path from typing import Dict, List, Optional import click class HashableItemType(IntEnum): """Represents the type of a hashable item.""" FOLDER = 0 FILE = auto() TEST = auto() @dataclass(kw_only=True) class HashableItem: """ Represents an item that can be hashed containing other items that can be hashed as well. """ type: HashableItemType parents: List[str] = field(default_factory=list) root: Optional[bytes] = None items: Optional[Dict[str, "HashableItem"]] = None def hash(self) -> bytes: """Return the hash of the item.""" if self.root is not None: return self.root if self.items is None: raise ValueError("No items to hash") all_hash_bytes = b"" for _, item in sorted(self.items.items()): item_hash_bytes = item.hash() all_hash_bytes += item_hash_bytes return hashlib.sha256(all_hash_bytes).digest() def print( self, *, name: str, level: int = 0, print_type: Optional[HashableItemType] = None ) -> None: """Print the hash of the item and sub-items.""" next_level = level print_name = name if level == 0 and self.parents: separator = "::" if self.type == HashableItemType.TEST else "/" print_name = f"{'/'.join(self.parents)}{separator}{name}" if print_type is None or self.type >= print_type: next_level += 1 print(f"{' ' * level}{print_name}: 0x{self.hash().hex()}") if self.items is not None: for key, item in sorted(self.items.items()): item.print(name=key, level=next_level, print_type=print_type) @classmethod def from_json_file(cls, *, file_path: Path, parents: List[str]) -> "HashableItem": """Create a hashable item from a JSON file.""" items = {} with file_path.open("r") as f: data = json.load(f) for key, item in sorted(data.items()): if not isinstance(item, dict): raise TypeError(f"Expected dict, got {type(item)} for {key}") if "_info" not in item: raise KeyError(f"Expected '_info' in {key}, json file: {file_path.name}") # EEST uses 'hash'; ethereum/tests use 'generatedTestHash' hash_value = item["_info"].get("hash") or item["_info"].get("generatedTestHash") if hash_value is None: raise KeyError(f"Expected 'hash' or 'generatedTestHash' in {key}") if not isinstance(hash_value, str): raise TypeError(f"Expected hash to be a string in {key}, got {type(hash_value)}") item_hash_bytes = bytes.fromhex(hash_value[2:]) items[key] = cls( type=HashableItemType.TEST, root=item_hash_bytes, parents=parents + [file_path.name], ) return cls(type=HashableItemType.FILE, items=items, parents=parents) @classmethod def from_folder( cls, *, folder_path: Path, parents: Optional[List[str]] = None ) -> "HashableItem": """Create a hashable item from a folder.""" if parents is None: parents = [] items = {} for file_path in sorted(folder_path.iterdir()): if ".meta" in file_path.parts: continue if file_path.is_file() and file_path.suffix == ".json": item = cls.from_json_file( file_path=file_path, parents=parents + [folder_path.name] ) items[file_path.name] = item elif file_path.is_dir(): item = cls.from_folder(folder_path=file_path, parents=parents + [folder_path.name]) items[file_path.name] = item return cls(type=HashableItemType.FOLDER, items=items, parents=parents) @click.command() @click.argument( "folder_path_str", type=click.Path(exists=True, file_okay=False, dir_okay=True, readable=True) ) @click.option("--files", "-f", is_flag=True, help="Print hash of files") @click.option("--tests", "-t", is_flag=True, help="Print hash of tests") @click.option("--root", "-r", is_flag=True, help="Only print hash of root folder") def main(folder_path_str: str, files: bool, tests: bool, root: bool) -> None: """Hash folders of JSON fixtures and print their hashes.""" folder_path: Path = Path(folder_path_str) item = HashableItem.from_folder(folder_path=folder_path) if root: print(f"0x{item.hash().hex()}") return print_type: Optional[HashableItemType] = None if files: print_type = HashableItemType.FILE elif tests: print_type = HashableItemType.TEST item.print(name=folder_path.name, print_type=print_type) if __name__ == "__main__": main() ================================================ FILE: src/cli/input/__init__.py ================================================ """A standard interface for interactive CLI inputs.""" from .questionary_input_repository import QuestionaryInputRepository # Instantiate the input repository input_repository = QuestionaryInputRepository() def input_text(question: str) -> str: """ Ask a simple text input question. Args: question (str): The question to ask. Returns: str: The user's response. """ return input_repository.input_text(question) def input_password(question: str) -> str: """ Ask a password input question (hidden text). Args: question (str): The question to ask. Returns: str: The user's response (password). """ return input_repository.input_password(question) def input_select(question: str, choices: list) -> str: """ Ask a single-choice question from a list of options. Args: question (str): The question to ask. choices (list): A list of options for the user to choose from. Returns: str: The selected choice. """ return input_repository.input_select(question, choices) def input_checkbox(question: str, choices: list) -> list: """ Ask a multi-choice question and return a list of selected choices. Args: question (str): The question to ask. choices (list): A list of options for the user to choose from. Returns: list: The list of selected choices. """ return input_repository.input_checkbox(question, choices) def input_confirm(question: str) -> bool: """ Ask a yes/no confirmation question. Args: question (str): The question to ask. Returns: bool: True for 'yes', False for 'no'. """ return input_repository.input_confirm(question) ================================================ FILE: src/cli/input/input_repository.py ================================================ """An abstract base class for handling interactive CLI inputs.""" from abc import ABC, abstractmethod from typing import List class InputRepository(ABC): """ Abstract base class for input handling. This class defines the interface for different input types that can be swapped out. """ @abstractmethod def input_text(self, question: str) -> str: """Ask a text input question.""" pass @abstractmethod def input_password(self, question: str) -> str: """Ask a password input question (hidden).""" pass @abstractmethod def input_select(self, question: str, choices: List[str]) -> str: """Ask a single-choice selection question.""" pass @abstractmethod def input_checkbox(self, question: str, choices: List[str]) -> List[str]: """Ask a multi-choice question.""" pass @abstractmethod def input_confirm(self, question: str) -> bool: """Ask a yes/no confirmation question.""" pass ================================================ FILE: src/cli/input/questionary_input_repository.py ================================================ """ Interactive CLI inputs using questionary library. See: https://questionary.readthedocs.io/. """ from questionary import checkbox, confirm, password, select, text from .input_repository import InputRepository class QuestionaryInputRepository(InputRepository): """ Repository for handling various types of user inputs using the Questionary library. """ def input_text(self, question: str) -> str: """Ask a text input question.""" return text(message=question).ask() def input_password(self, question: str) -> str: """Ask a password input question (hidden).""" return password(message=question).ask() def input_select(self, question: str, choices: list) -> str: """Ask a single-choice selection question.""" return select(message=question, choices=choices).ask() def input_checkbox(self, question: str, choices: list) -> list: """Ask a multi-choice question.""" return checkbox(message=question, choices=choices).ask() def input_confirm(self, question: str) -> bool: """Ask a yes/no confirmation question.""" return confirm(message=question).ask() ================================================ FILE: src/cli/modify_static_test_gas_limits.py ================================================ """ Command to scan and overwrite the static tests' gas limits to new optimized value given in the input file. """ import json import re from pathlib import Path from typing import Dict, List, Set import click import yaml from ethereum_test_base_types import EthereumTestRootModel, HexNumber, ZeroPaddedHexNumber from ethereum_test_specs import StateStaticTest from pytest_plugins.filler.static_filler import NoIntResolver class GasLimitDict(EthereumTestRootModel): """Formatted JSON file with new gas limits in each test.""" root: Dict[str, int | None] def unique_files(self) -> Set[Path]: """Return a list of unique test files.""" files = set() for test in self.root: filename, _ = test.split("::") files.add(Path(filename)) return files def get_tests_by_file_path(self, file: Path | str) -> Set[str]: """Return a list of all tests that belong to a given file path.""" tests = set() for test in self.root: current_file, _ = test.split("::") if current_file == str(file): tests.add(test) return tests class StaticTestFile(EthereumTestRootModel): """A static test file.""" root: Dict[str, StateStaticTest] def _check_fixtures( *, input_path: Path, max_gas_limit: int | None, dry_run: bool, verbose: bool, ) -> None: """ Perform checks on fixtures in the specified directory. """ # Load the test dictionary from the input JSON file test_dict = GasLimitDict.model_validate_json(input_path.read_text()) # Iterate through each unique test file that needs modification for test_file in test_dict.unique_files(): tests = test_dict.get_tests_by_file_path(test_file) test_file_contents = test_file.read_text() # Parse the test file based on its format (YAML or JSON) if test_file.suffix == ".yml" or test_file.suffix == ".yaml": loaded_yaml = yaml.load(test_file.read_text(), Loader=NoIntResolver) try: parsed_test_file = StaticTestFile.model_validate(loaded_yaml) except Exception as e: raise Exception( f"Unable to parse file {test_file}: {json.dumps(loaded_yaml, indent=2)}" ) from e else: parsed_test_file = StaticTestFile.model_validate_json(test_file_contents) # Validate that the file contains exactly one test assert len(parsed_test_file.root) == 1, f"File {test_file} contains more than one test." _, parsed_test = parsed_test_file.root.popitem() # Skip files with multiple gas limit values if len(parsed_test.transaction.gas_limit) != 1: if dry_run or verbose: print( f"Test file {test_file} contains more than one test (after parsing), skipping." ) continue # Get the current gas limit and check if modification is needed current_gas_limit = int(parsed_test.transaction.gas_limit[0]) if max_gas_limit is not None and current_gas_limit <= max_gas_limit: # Nothing to do, finished for test in tests: test_dict.root.pop(test) continue # Collect valid gas values for this test file gas_values: List[int] = [] for gas_value in [test_dict.root[test] for test in tests]: if gas_value is None: if dry_run or verbose: print( f"Test file {test_file} contains at least one test that cannot " "be updated, skipping." ) continue else: gas_values.append(gas_value) # Calculate the new gas limit (rounded up to nearest 100,000) new_gas_limit = max(gas_values) modified_new_gas_limit = ((new_gas_limit // 100000) + 1) * 100000 if verbose: print( f"Changing exact new gas limit ({new_gas_limit}) to " f"rounded ({modified_new_gas_limit})" ) new_gas_limit = modified_new_gas_limit # Check if the new gas limit exceeds the maximum allowed if max_gas_limit is not None and new_gas_limit > max_gas_limit: if dry_run or verbose: print(f"New gas limit ({new_gas_limit}) exceeds max ({max_gas_limit})") continue if dry_run or verbose: print(f"Test file {test_file} requires modification ({new_gas_limit})") # Find the appropriate pattern to replace the current gas limit potential_types = [int, HexNumber, ZeroPaddedHexNumber] substitute_pattern = None substitute_string = None attempted_patterns = [] for current_type in potential_types: potential_substitute_pattern = rf"\b{current_type(current_gas_limit)}\b" potential_substitute_string = f"{current_type(new_gas_limit)}" if ( re.search( potential_substitute_pattern, test_file_contents, flags=re.RegexFlag.MULTILINE ) is not None ): substitute_pattern = potential_substitute_pattern substitute_string = potential_substitute_string break attempted_patterns.append(potential_substitute_pattern) # Validate that a replacement pattern was found assert substitute_pattern is not None, ( f"Current gas limit ({attempted_patterns}) not found in {test_file}" ) assert substitute_string is not None # Perform the replacement in the test file content new_test_file_contents = re.sub(substitute_pattern, substitute_string, test_file_contents) assert test_file_contents != new_test_file_contents, "Could not modify test file" # Skip writing changes if this is a dry run if dry_run: continue # Write the modified content back to the test file test_file.write_text(new_test_file_contents) for test in tests: test_dict.root.pop(test) if dry_run: return # Write changes to the input file input_path.write_text(test_dict.model_dump_json(indent=2)) MAX_GAS_LIMIT = 16_777_216 @click.command() @click.option( "--input", "-i", "input_str", type=click.Path(exists=True, file_okay=True, dir_okay=False, readable=True), required=True, help="The input json file or directory containing json listing the new gas limits for the " "static test files files.", ) @click.option( "--max-gas-limit", default=MAX_GAS_LIMIT, expose_value=True, help="Gas limit that triggers a test modification, and also the maximum value that a test " "should have after modification.", ) @click.option( "--dry-run", "-d", "dry_run", is_flag=True, default=False, expose_value=True, help="Don't modify any files, simply print operations to be performed.", ) @click.option( "--verbose", "-v", "verbose", is_flag=True, default=False, expose_value=True, help="Print extra information.", ) def main(input_str: str, max_gas_limit: int | None, dry_run: bool, verbose: bool) -> None: """ Perform checks on fixtures in the specified directory. """ input_path = Path(input_str) if not dry_run: # Always dry-run first before actually modifying _check_fixtures( input_path=input_path, max_gas_limit=max_gas_limit, dry_run=True, verbose=False, ) _check_fixtures( input_path=input_path, max_gas_limit=max_gas_limit, dry_run=dry_run, verbose=verbose, ) ================================================ FILE: src/cli/order_fixtures.py ================================================ """ Functions and CLI interface for recursively ordering and sorting .json files. Usage Example: ```console order_fixtures -i input_dir -o output_dir ``` The CLI interface takes the paths of an input directory and an output directory. It recursively processes each .json file in the input directory and its subdirectories, and sorts lists and dictionaries alphabetically and writes the sorted output to .json files to the corresponding locations in the output directory. """ import json from pathlib import Path from typing import Any, Dict, List, cast import click def recursive_sort(item: Dict[str, Any] | List[Any]) -> Dict[str, Any] | List[Any]: """ Recursively sorts an item. If the item is a dictionary, it returns a new dictionary that is a sorted version of the input dictionary. If the item is a list, it returns a new list that is a sorted version of the input list. The elements of the list are also sorted if they are lists or dictionaries. Args: item: The item to be sorted. This can be a list or a dictionary. Returns: The sorted item. """ if isinstance(item, dict): return dict(sorted((k, recursive_sort(v)) for k, v in item.items())) elif isinstance(item, list): try: return sorted(cast(List[Any], [recursive_sort(x) for x in item])) # type: ignore[redundant-cast] except TypeError: # If a TypeError is raised, we might be dealing with a list of # dictionaries Sort them based on their string representation return sorted((recursive_sort(x) for x in item), key=str) else: return item def order_fixture(input_path: Path, output_path: Path) -> None: """ Sorts a .json fixture. Reads a .json file from the input path, sorts the .json data and writes it to the output path. Args: input_path: The Path object of the input .json file. output_path: The Path object of the output .json file. Returns: None. """ with input_path.open("r") as f: data = json.load(f) data = recursive_sort(data) with output_path.open("w") as f: json.dump(data, f, indent=4) def process_directory(input_dir: Path, output_dir: Path) -> None: """ Process a directory. Processes each .json file in the input directory and its subdirectories, and writes the sorted .json files to the corresponding locations in the output directory. Args: input_dir: The Path object of the input directory. output_dir: The Path object of the output directory. Returns: None. """ if not output_dir.exists(): output_dir.mkdir(parents=True) for child in input_dir.iterdir(): if child.is_dir(): process_directory(child, output_dir / child.name) elif child.suffix == ".json": order_fixture(child, output_dir / child.name) @click.command() @click.option( "--input", "-i", "input_dir", type=click.Path(exists=True, file_okay=False, dir_okay=True, readable=True), required=True, help="input directory", ) @click.option( "--output", "-o", "output_dir", type=click.Path(writable=True, file_okay=False, dir_okay=True), required=True, help="The output directory", ) def order_fixtures(input_dir: str, output_dir: str) -> None: """Order json fixture by key recursively from the input directory.""" input_dir_path = Path(input_dir) output_dir_path = Path(output_dir) process_directory(input_dir_path, output_dir_path) if __name__ == "__main__": order_fixtures() ================================================ FILE: src/cli/pytest_commands/__init__.py ================================================ """ CLI entry points for the main pytest-based commands provided by execution-spec-tests. These can be directly accessed in a prompt if the user has directly installed the package via: ``` python -m venv venv source venv/bin/activate pip install -e . # or pip install -e .[docs,lint,test] ``` Then, the entry points can be executed via: ``` fill --help # for example, or consume engine # or checklist --help ``` They can also be executed (and debugged) directly in an interactive python shell: ``` from src.cli.pytest_commands.fill import fill from click.testing import CliRunner runner = CliRunner() result = runner.invoke(fill, ["--help"]) print(result.output) ``` """ ================================================ FILE: src/cli/pytest_commands/base.py ================================================ """Base classes and utilities for pytest-based CLI commands.""" import sys from abc import ABC, abstractmethod from dataclasses import dataclass, field from os.path import realpath from pathlib import Path from typing import Any, Callable, List, Optional import click import pytest from rich.console import Console CURRENT_FOLDER = Path(realpath(__file__)).parent PACKAGE_INSTALL_FOLDER = CURRENT_FOLDER.parent.parent PYTEST_INI_FOLDER = CURRENT_FOLDER / "pytest_ini_files" @dataclass class PytestExecution: """Configuration for a single pytest execution.""" config_file: Path """Path to the pytest configuration file (e.g., 'pytest-fill.ini').""" command_logic_test_paths: List[str] = field(default_factory=list) """ List of tests that have to be appended to the start of pytest command arguments. """ args: List[str] = field(default_factory=list) """Arguments to pass to pytest.""" description: Optional[str] = None """Optional description for this execution phase.""" class ArgumentProcessor(ABC): """Base class for processing command-line arguments.""" @abstractmethod def process_args(self, args: List[str]) -> List[str]: """Process the given arguments and return modified arguments.""" pass @dataclass(kw_only=True) class PytestRunner: """Handles execution of pytest commands.""" console: Console = field(default_factory=lambda: Console(highlight=False)) """Console to use for output.""" def run_single(self, execution: PytestExecution) -> int: """Run pytest once with the given configuration and arguments.""" root_dir_arg = ["--rootdir", "."] pytest_args = ( ["-c", str(execution.config_file)] + root_dir_arg + [ str(PACKAGE_INSTALL_FOLDER / test_path) for test_path in execution.command_logic_test_paths ] + execution.args ) if execution.command_logic_test_paths: pytest_args += [ "-p", "pytest_plugins.fix_package_test_path", ] if self._is_verbose(execution.args): pytest_cmd = f"pytest {' '.join(pytest_args)}" self.console.print(f"Executing: [bold]{pytest_cmd}[/bold]") return pytest.main(pytest_args) def _is_verbose(self, args: List[str]) -> bool: """Check if verbose output is requested.""" return any(arg in ["-v", "--verbose", "-vv", "-vvv"] for arg in args) def run_multiple(self, executions: List[PytestExecution]) -> int: """ Run multiple pytest executions in sequence. Returns the exit code of the final execution, or the first non-zero exit code. """ for i, execution in enumerate(executions): if execution.description and len(executions) > 1: phase_text = ( f"[bold blue]phase {i + 1}/{len(executions)}: " f"{execution.description}[/bold blue]" ) self.console.rule(phase_text, style="bold blue") result = self.run_single(execution) if result != 0: return result return 0 @dataclass(kw_only=True) class PytestCommand: """ Base class for pytest-based CLI commands. Provides a standard structure for commands that execute pytest with specific configurations and argument processing. """ config_file: str """File name of the pytest configuration file (e.g., 'pytest-fill.ini').""" argument_processors: List[ArgumentProcessor] = field(default_factory=list) """Processors to apply to the pytest arguments.""" runner: PytestRunner = field(default_factory=PytestRunner) """Runner to execute the pytest command.""" plugins: List[str] = field(default_factory=list) """Plugins to load for the pytest command.""" command_logic_test_paths: List[Path] | None = None """Path to test files that contain the command logic.""" pytest_ini_folder: Path = PYTEST_INI_FOLDER """Folder where the pytest configuration files are located.""" @property def config_path(self) -> Path: """Path to the pytest configuration file.""" return self.pytest_ini_folder / self.config_file def execute(self, pytest_args: List[str]) -> None: """Execute the command with the given pytest arguments.""" executions = self.create_executions(pytest_args) result = self.runner.run_multiple(executions) sys.exit(result) @property def test_args(self) -> List[str]: """ Return the test-path arguments that have to be appended to all PytestExecution instances. """ if self.command_logic_test_paths: return [str(path) for path in self.command_logic_test_paths] return [] def create_executions(self, pytest_args: List[str]) -> List[PytestExecution]: """ Create the list of pytest executions for this command. This method can be overridden by subclasses to implement multi-phase execution (e.g., for future fill command). """ processed_args = self.process_arguments(pytest_args) return [ PytestExecution( config_file=self.config_path, command_logic_test_paths=self.test_args, args=processed_args, ) ] def process_arguments(self, args: List[str]) -> List[str]: """Apply all argument processors to the given arguments.""" processed_args = args[:] for processor in self.argument_processors: processed_args = processor.process_args(processed_args) for plugin in self.plugins: processed_args.extend(["-p", plugin]) return processed_args def common_pytest_options(func: Callable[..., Any]) -> Callable[..., Any]: """ Apply common Click options for pytest-based commands. This decorator adds the standard help options that all pytest commands use. """ func = click.option( "-h", "--help", "help_flag", is_flag=True, default=False, expose_value=True, help="Show help message.", )(func) func = click.option( "--pytest-help", "pytest_help_flag", is_flag=True, default=False, expose_value=True, help="Show pytest's help message.", )(func) return click.argument("pytest_args", nargs=-1, type=click.UNPROCESSED)(func) ================================================ FILE: src/cli/pytest_commands/check_eip_versions.py ================================================ """CLI entry point for the EIP version checker pytest-based command.""" from typing import Any, List import click from config.check_eip_versions import CheckEipVersionsConfig from .base import PytestCommand, common_pytest_options from .processors import HelpFlagsProcessor @click.command(context_settings={"ignore_unknown_options": True}) @common_pytest_options def check_eip_versions(pytest_args: List[str], **kwargs: Any) -> None: """Run pytest with the `spec_version_checker` plugin.""" del kwargs command = PytestCommand( config_file="pytest-check-eip-versions.ini", argument_processors=[HelpFlagsProcessor("check-eip-versions")], ) args_with_until = [ "--until", CheckEipVersionsConfig().UNTIL_FORK, ] + list(pytest_args) command.execute(args_with_until) ================================================ FILE: src/cli/pytest_commands/checklist.py ================================================ """CLI entry point for the `checklist` pytest-based command.""" from typing import Any import click from .fill import FillCommand @click.command() @click.option( "--output", "-o", type=click.Path(file_okay=False, dir_okay=True, writable=True), default="./checklists", help="Directory to output the generated checklists (default: ./checklists)", ) @click.option( "--eip", "-e", type=int, multiple=True, help="Generate checklist only for specific EIP(s)", ) def checklist(output: str, eip: tuple[int, ...], **kwargs: Any) -> None: """ Generate EIP test checklists based on pytest.mark.eip_checklist markers. This command scans test files for eip_checklist markers and generates filled checklists showing which checklist items have been implemented. Examples: # Generate checklists for all EIPs uv run checklist # Generate checklist for specific EIP uv run checklist --eip 7702 # Generate checklists for specific test path uv run checklist tests/prague/eip7702* # Specify output directory uv run checklist --output ./my-checklists """ del kwargs # Add output directory to pytest args args = ["--checklist-output", output] # Add EIP filter if specified for eip_num in eip: args.extend(["--checklist-eip", str(eip_num)]) command = FillCommand( plugins=["pytest_plugins.filler.eip_checklist"], ) command.execute(args) if __name__ == "__main__": checklist() ================================================ FILE: src/cli/pytest_commands/consume.py ================================================ """CLI entry point for the `consume` pytest-based command.""" import functools from pathlib import Path from typing import Any, Callable, List import click from .base import ArgumentProcessor, PytestCommand, common_pytest_options from .processors import ConsumeCommandProcessor, HelpFlagsProcessor, HiveEnvironmentProcessor def create_consume_command( *, command_logic_test_paths: List[Path], is_hive: bool = False, command_name: str = "", ) -> PytestCommand: """Initialize consume command with paths and processors.""" processors: List[ArgumentProcessor] = [HelpFlagsProcessor("consume")] if is_hive: processors.extend( [ HiveEnvironmentProcessor(command_name=command_name), ConsumeCommandProcessor(is_hive=True), ] ) else: processors.append(ConsumeCommandProcessor(is_hive=False)) return PytestCommand( config_file="pytest-consume.ini", argument_processors=processors, command_logic_test_paths=command_logic_test_paths, ) def get_command_logic_test_paths(command_name: str) -> List[Path]: """Determine the command paths based on the command name and hive flag.""" base_path = Path("pytest_plugins/consume") if command_name in ["engine", "rlp"]: command_logic_test_paths = [ base_path / "simulators" / "simulator_logic" / f"test_via_{command_name}.py" ] elif command_name == "sync": command_logic_test_paths = [ base_path / "simulators" / "simulator_logic" / "test_via_sync.py" ] elif command_name == "direct": command_logic_test_paths = [base_path / "direct" / "test_via_direct.py"] else: raise ValueError(f"Unexpected command: {command_name}.") return command_logic_test_paths @click.group(context_settings={"help_option_names": ["-h", "--help"]}) def consume() -> None: """Consume command to aid client consumption of test fixtures.""" pass def consume_command( is_hive: bool = False, ) -> Callable[[Callable[..., Any]], click.Command]: """Generate a consume sub-command.""" def decorator(func: Callable[..., Any]) -> click.Command: command_name = func.__name__ command_help = func.__doc__ command_logic_test_paths = get_command_logic_test_paths(command_name) @consume.command( name=command_name, help=command_help, context_settings={"ignore_unknown_options": True}, ) @common_pytest_options @functools.wraps(func) def command(pytest_args: List[str], **kwargs: Any) -> None: del kwargs consume_cmd = create_consume_command( command_logic_test_paths=command_logic_test_paths, is_hive=is_hive, command_name=command_name, ) consume_cmd.execute(list(pytest_args)) return command return decorator @consume_command(is_hive=False) def direct() -> None: """Clients consume directly via the `blocktest` interface.""" pass @consume_command(is_hive=True) def rlp() -> None: """Client consumes RLP-encoded blocks on startup.""" pass @consume_command(is_hive=True) def engine() -> None: """Client consumes via the Engine API.""" pass @consume_command(is_hive=True) def sync() -> None: """Client consumes via the Engine API with sync testing.""" pass @consume.command( context_settings={"ignore_unknown_options": True}, ) @common_pytest_options def cache(pytest_args: List[str], **kwargs: Any) -> None: """Consume command to cache test fixtures.""" del kwargs cache_cmd = create_consume_command(command_logic_test_paths=[], is_hive=False) cache_cmd.execute(list(pytest_args)) ================================================ FILE: src/cli/pytest_commands/execute.py ================================================ """CLI entry point for the `execute` pytest-based command.""" from pathlib import Path from typing import Any, List import click from .base import PytestCommand, common_pytest_options from .processors import HelpFlagsProcessor @click.group( context_settings={ "help_option_names": ["-h", "--help"], } ) def execute() -> None: """Execute command to run tests in hive or live networks.""" pass def _create_execute_subcommand( command_name: str, config_file: str, help_text: str, required_args: List[str] | None = None, command_logic_test_paths: List[Path] | None = None, ) -> click.Command: """Create an execute subcommand with standardized structure.""" pytest_command = PytestCommand( config_file=config_file, argument_processors=[HelpFlagsProcessor(f"execute-{command_name}", required_args)], command_logic_test_paths=command_logic_test_paths, ) @execute.command( name=command_name, help=help_text, context_settings={"ignore_unknown_options": True}, ) @common_pytest_options def command(pytest_args: List[str], **_kwargs: Any) -> None: pytest_command.execute(list(pytest_args)) command.__doc__ = help_text return command # Create the subcommands hive = _create_execute_subcommand( "hive", "pytest-execute-hive.ini", "Execute tests using hive as a backend (`./hive --dev`).", ) remote = _create_execute_subcommand( "remote", "pytest-execute.ini", "Execute tests using a remote RPC endpoint.", required_args=[ "--rpc-endpoint=http://localhost:8545", "--rpc-chain-id=1", "--rpc-seed-key=1", ], ) eth_config = _create_execute_subcommand( "eth-config", "pytest-execute-eth-config.ini", "Test a client's configuration using the `eth_config` RPC endpoint.", required_args=["--network=Mainnet", "--rpc-endpoint=http://localhost:8545"], command_logic_test_paths=[Path("pytest_plugins/execute/eth_config/execute_eth_config.py")], ) recover = _create_execute_subcommand( "recover", "pytest-execute-recover.ini", "Recover funds from test executions using a remote RPC endpoint.", required_args=[ "--rpc-endpoint=http://localhost:8545", "--rpc-chain-id=1", "--start-eoa-index=1", "--destination=0x0000000000000000000000000000000000000000", ], command_logic_test_paths=[Path("pytest_plugins/execute/execute_recover.py")], ) ================================================ FILE: src/cli/pytest_commands/fill.py ================================================ """CLI entry point for the `fill` pytest-based command.""" from typing import Any, List import click from .base import PytestCommand, PytestExecution, common_pytest_options from .processors import HelpFlagsProcessor, StdoutFlagsProcessor, WatchFlagsProcessor from .watcher import FileWatcher class FillCommand(PytestCommand): """Pytest command for the fill operation.""" def __init__(self, **kwargs: Any) -> None: """Initialize fill command with processors.""" super().__init__( config_file="pytest-fill.ini", argument_processors=[ HelpFlagsProcessor("fill"), StdoutFlagsProcessor(), WatchFlagsProcessor(), ], **kwargs, ) def create_executions(self, pytest_args: List[str]) -> List[PytestExecution]: """ Create execution plan that supports two-phase pre-allocation group generation. Returns single execution for normal filling, or two-phase execution when --generate-pre-alloc-groups or --generate-all-formats is specified. """ processed_args = self.process_arguments(pytest_args) # Check if we need two-phase execution if self._should_use_two_phase_execution(processed_args): processed_args = self._ensure_generate_all_formats_for_tarball(processed_args) return self._create_two_phase_executions(processed_args) elif "--use-pre-alloc-groups" in processed_args: # Only phase 2: using existing pre-allocation groups return self._create_single_phase_with_pre_alloc_groups(processed_args) else: # Normal single-phase execution return [ PytestExecution( config_file=self.config_path, args=processed_args, ) ] def _create_two_phase_executions(self, args: List[str]) -> List[PytestExecution]: """ Create two-phase execution: pre-allocation group generation + fixture filling. """ # Phase 1: Pre-allocation group generation (clean and minimal output) phase1_args = self._create_phase1_args(args) # Phase 2: Main fixture generation (full user options) phase2_args = self._create_phase2_args(args) return [ PytestExecution( config_file=self.config_path, args=phase1_args, description="generating pre-allocation groups", ), PytestExecution( config_file=self.config_path, args=phase2_args, description="filling test fixtures", ), ] def _create_single_phase_with_pre_alloc_groups(self, args: List[str]) -> List[PytestExecution]: """Create single execution using existing pre-allocation groups.""" return [ PytestExecution( config_file=self.config_path, args=args, ) ] def _create_phase1_args(self, args: List[str]) -> List[str]: """Create arguments for phase 1 (pre-allocation group generation).""" # Start with all args, then remove what we don't want for phase 1 filtered_args = self._remove_unwanted_phase1_args(args) # Add required phase 1 flags (with quiet output by default) phase1_args = [ "--generate-pre-alloc-groups", "-qq", # Quiet pytest output by default (user -v/-vv/-vvv can # override) ] + filtered_args return phase1_args def _create_phase2_args(self, args: List[str]) -> List[str]: """Create arguments for phase 2 (fixture filling).""" # Remove --generate-pre-alloc-groups and --clean, then add --use-pre- # alloc-groups phase2_args = self._remove_generate_pre_alloc_groups_flag(args) phase2_args = self._remove_clean_flag(phase2_args) phase2_args = self._add_use_pre_alloc_groups_flag(phase2_args) return phase2_args def _remove_unwanted_phase1_args(self, args: List[str]) -> List[str]: """Remove arguments we don't want in phase 1 (pre-state generation).""" unwanted_flags = { # Output format flags "--html", # Report flags (we'll add our own -qq) "-q", "--quiet", "-qq", "--tb", # Pre-allocation group flags (we'll add our own) "--generate-pre-alloc-groups", "--use-pre-alloc-groups", "--generate-all-formats", } filtered_args = [] i = 0 while i < len(args): arg = args[i] # Skip unwanted flags if arg in unwanted_flags: # Skip flag and its value if it takes one if arg in ["--html", "--tb", "-n"] and i + 1 < len(args): i += 2 # Skip flag and value else: i += 1 # Skip just the flag # Skip unwanted flags with = format elif any(arg.startswith(f"{flag}=") for flag in unwanted_flags): i += 1 else: filtered_args.append(arg) i += 1 return filtered_args def _remove_generate_pre_alloc_groups_flag(self, args: List[str]) -> List[str]: """ Remove --generate-pre-alloc-groups flag but keep --generate-all-formats for phase 2. """ return [arg for arg in args if arg != "--generate-pre-alloc-groups"] def _remove_clean_flag(self, args: List[str]) -> List[str]: """Remove --clean flag from argument list.""" return [arg for arg in args if arg != "--clean"] def _add_use_pre_alloc_groups_flag(self, args: List[str]) -> List[str]: """Add --use-pre-alloc-groups flag to argument list.""" return args + ["--use-pre-alloc-groups"] def _should_use_two_phase_execution(self, args: List[str]) -> bool: """Determine if two-phase execution is needed.""" return ( "--generate-pre-alloc-groups" in args or "--generate-all-formats" in args or self._is_tarball_output(args) ) def _ensure_generate_all_formats_for_tarball(self, args: List[str]) -> List[str]: """Auto-add --generate-all-formats for tarball output.""" if self._is_tarball_output(args) and "--generate-all-formats" not in args: return args + ["--generate-all-formats"] return args def _is_tarball_output(self, args: List[str]) -> bool: """Check if output argument specifies a tarball (.tar.gz) path.""" from pathlib import Path for i, arg in enumerate(args): if arg.startswith("--output="): output_path = Path(arg.split("=", 1)[1]) return str(output_path).endswith(".tar.gz") elif arg == "--output" and i + 1 < len(args): output_path = Path(args[i + 1]) return str(output_path).endswith(".tar.gz") return False def _is_watch_mode(self, args: List[str]) -> bool: """Check if any watch flag is present in arguments.""" return any(flag in args for flag in ["--watch", "--watcherfall"]) def _is_verbose_watch_mode(self, args: List[str]) -> bool: """ Check if verbose watch flag (--watcherfall) is present in arguments. """ return "--watcherfall" in args def execute(self, pytest_args: List[str]) -> None: """Execute the command with optional watch mode support.""" if self._is_watch_mode(pytest_args): self._execute_with_watch(pytest_args) else: super().execute(pytest_args) def _execute_with_watch(self, pytest_args: List[str]) -> None: """Execute fill command in watch mode.""" verbose = self._is_verbose_watch_mode(pytest_args) watcher = FileWatcher(console=self.runner.console, verbose=verbose) watcher.run_with_watch(pytest_args) class PhilCommand(FillCommand): """Friendly fill command with emoji reporting.""" def create_executions(self, pytest_args: List[str]) -> List[PytestExecution]: """Create execution with emoji report options.""" processed_args = self.process_arguments(pytest_args) emoji_args = processed_args + [ "-o", "report_passed=🦄", "-o", "report_xpassed=🌈", "-o", "report_failed=👾", "-o", "report_xfailed=🦺", "-o", "report_skipped=🦘", "-o", "report_error=🚨", ] return [ PytestExecution( config_file=self.config_path, args=emoji_args, ) ] @click.command( context_settings={ "ignore_unknown_options": True, } ) @common_pytest_options def fill(pytest_args: List[str], **kwargs: Any) -> None: """Entry point for the fill command.""" del kwargs command = FillCommand() command.execute(list(pytest_args)) @click.command( context_settings={ "ignore_unknown_options": True, } ) @common_pytest_options def phil(pytest_args: List[str], **kwargs: Any) -> None: """Friendly alias for the fill command.""" del kwargs command = PhilCommand() command.execute(list(pytest_args)) if __name__ == "__main__": # to allow debugging in vscode: in launch config, set "module": # "cli.pytest_commands.fill" fill(prog_name="fill") ================================================ FILE: src/cli/pytest_commands/processors.py ================================================ """Argument processors for different pytest command types.""" import os import sys import warnings from typing import List import click from .base import ArgumentProcessor class HelpFlagsProcessor(ArgumentProcessor): """Processes help-related flags to provide cleaner help output.""" def __init__(self, command_type: str, required_args: List[str] | None = None): """ Initialize the help processor. Args: command_type: The type of command (e.g., "fill", "consume", "execute") required_args: The arguments that are required for the command to run """ self.command_type = command_type self.required_args = required_args or [] def process_args(self, args: List[str]) -> List[str]: """ Modify help arguments to provide cleaner help output. This makes `--help` more useful because `pytest --help` is extremely verbose and lists all flags from pytest and pytest plugins. """ ctx = click.get_current_context() if ctx.params.get("help_flag"): # And also add the required arguments to the help output return [f"--{self.command_type}-help"] + self.required_args elif ctx.params.get("pytest_help_flag"): return ["--help"] return args class StdoutFlagsProcessor(ArgumentProcessor): """Processes stdout-related flags for the fill command.""" def process_args(self, args: List[str]) -> List[str]: """ If the user has requested to write to stdout, add pytest arguments to suppress pytest's test session header and summary output. """ if not self._is_writing_to_stdout(args): return args # Check for incompatible xdist plugin if any(arg == "-n" or arg.startswith("-n=") for arg in args): sys.exit("error: xdist-plugin not supported with --output=stdout (remove -n args).") # Add flags to suppress pytest output when writing to stdout return args + ["-qq", "-s", "--no-html"] def _is_writing_to_stdout(self, args: List[str]) -> bool: """Check if the command is configured to write to stdout.""" if any(arg == "--output=stdout" for arg in args): return True if "--output" in args: output_index = args.index("--output") if output_index + 1 < len(args) and args[output_index + 1] == "stdout": return True return False class HiveEnvironmentProcessor(ArgumentProcessor): """Processes Hive environment variables for consume commands.""" def __init__(self, command_name: str): """Initialize the processor with command name to determine plugin.""" self.command_name = command_name def process_args(self, args: List[str]) -> List[str]: """Convert hive environment variables into pytest flags.""" modified_args = args[:] hive_test_pattern = os.getenv("HIVE_TEST_PATTERN") if hive_test_pattern and not self._has_regex_or_sim_limit(args): modified_args.extend(["--sim.limit", hive_test_pattern]) hive_parallelism = os.getenv("HIVE_PARALLELISM") if hive_parallelism not in [None, "", "1"] and not self._has_parallelism_flag(args): modified_args.extend(["-n", str(hive_parallelism)]) if os.getenv("HIVE_RANDOM_SEED") is not None: warnings.warn("HIVE_RANDOM_SEED is not yet supported.", stacklevel=2) if os.getenv("HIVE_LOGLEVEL") is not None: warnings.warn("HIVE_LOG_LEVEL is not yet supported.", stacklevel=2) if self.command_name == "engine": modified_args.extend(["-p", "pytest_plugins.consume.simulators.engine.conftest"]) elif self.command_name == "sync": modified_args.extend(["-p", "pytest_plugins.consume.simulators.sync.conftest"]) elif self.command_name == "rlp": modified_args.extend(["-p", "pytest_plugins.consume.simulators.rlp.conftest"]) else: raise ValueError(f"Unknown command name: {self.command_name}") return modified_args def _has_regex_or_sim_limit(self, args: List[str]) -> bool: """Check if args already contain --regex or --sim.limit.""" return "--regex" in args or "--sim.limit" in args def _has_parallelism_flag(self, args: List[str]) -> bool: """Check if args already contain parallelism flag.""" return "-n" in args class WatchFlagsProcessor(ArgumentProcessor): """ Processes --watch and --watcherfall flags for file watching functionality. """ def process_args(self, args: List[str]) -> List[str]: """ Remove --watch and --watcherfall flags from args passed to pytest. """ return [arg for arg in args if arg not in ["--watch", "--watcherfall"]] class ConsumeCommandProcessor(ArgumentProcessor): """Processes consume-specific command arguments.""" def __init__(self, is_hive: bool = False): """ Initialize the consume processor. Args: is_hive: Whether this is a hive-based consume command """ self.is_hive = is_hive def process_args(self, args: List[str]) -> List[str]: """Process consume-specific arguments.""" if self.is_hive: return self._handle_timing_data_stdout(args) return args def _handle_timing_data_stdout(self, args: List[str]) -> List[str]: """Ensure stdout is captured when timing data is enabled.""" if "--timing-data" in args and "-s" not in args: return args + ["-s"] return args ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-check-eip-versions.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = *.py # Note: register new markers via src/pytest_plugins/shared/execute_fill.py or # src/pytest_plugins/spec_version_checker/spec_version_checker.py testpaths = tests/ addopts = -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.concurrency -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.filler -p pytest_plugins.shared.execute_fill -p pytest_plugins.shared.transaction_fixtures -p pytest_plugins.forks.forks -p pytest_plugins.help.help -m eip_version_check --tb short ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-consume.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = test_* addopts = -rxXs --tb short -p pytest_plugins.concurrency # disable pytest built-in logging entirely `-p no:logging` -p no:logging -p pytest_plugins.custom_logging.plugin_logging -p pytest_plugins.consume.consume -p pytest_plugins.help.help ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-execute-eth-config.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = *.py # Note: register new markers via src/pytest_plugins/shared/execute_fill.py addopts = -p pytest_plugins.execute.eth_config.eth_config -p pytest_plugins.help.help -p pytest_plugins.custom_logging.plugin_logging -m "not eip_version_check" --tb short --dist loadscope ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-execute-hive.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = *.py testpaths = tests/ # Note: register new markers via src/pytest_plugins/shared/execute_fill.py addopts = -p pytest_plugins.concurrency -p pytest_plugins.execute.sender -p pytest_plugins.execute.pre_alloc -p pytest_plugins.execute.rpc.hive -p pytest_plugins.execute.execute -p pytest_plugins.shared.execute_fill -p pytest_plugins.shared.benchmarking -p pytest_plugins.shared.transaction_fixtures -p pytest_plugins.forks.forks -p pytest_plugins.pytest_hive.pytest_hive -p pytest_plugins.help.help --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-execute-recover.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = *.py addopts = -p pytest_plugins.execute.rpc.remote -p pytest_plugins.execute.recover -p pytest_plugins.help.help -m "not eip_version_check" --tb short --dist loadscope ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-execute.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = *.py testpaths = tests/ # Note: register new markers via src/pytest_plugins/shared/execute_fill.py addopts = -p pytest_plugins.concurrency -p pytest_plugins.execute.sender -p pytest_plugins.execute.pre_alloc -p pytest_plugins.execute.execute -p pytest_plugins.shared.execute_fill -p pytest_plugins.shared.benchmarking -p pytest_plugins.shared.transaction_fixtures -p pytest_plugins.execute.rpc.remote_seed_sender -p pytest_plugins.execute.rpc.remote -p pytest_plugins.forks.forks -p pytest_plugins.help.help -p pytest_plugins.custom_logging.plugin_logging --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ ================================================ FILE: src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini ================================================ [pytest] console_output_style = count minversion = 7.0 python_files = *.py testpaths = tests/ # Note: register new markers via src/pytest_plugins/shared/execute_fill.py addopts = -p pytest_plugins.concurrency -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.filler -p pytest_plugins.filler.witness -p pytest_plugins.shared.execute_fill -p pytest_plugins.filler.ported_tests -p pytest_plugins.filler.static_filler -p pytest_plugins.shared.benchmarking -p pytest_plugins.shared.transaction_fixtures -p pytest_plugins.forks.forks -p pytest_plugins.eels_resolver -p pytest_plugins.help.help -p pytest_plugins.custom_logging.plugin_logging --tb short --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ # these customizations require the pytest-custom-report plugin report_passed_verbose = FILLED report_xpassed_verbose = XFILLED ================================================ FILE: src/cli/pytest_commands/watcher.py ================================================ """File watcher implementation for --watch flag functionality.""" import os import subprocess import time from pathlib import Path from typing import Dict, List from rich.console import Console class FileWatcher: """Simple file watcher that re-runs the fill command on changes.""" def __init__(self, console: Console | None = None, verbose: bool = False) -> None: """Initialize the file watcher.""" self.console = console or Console(highlight=False) self.verbose = verbose def run_with_watch(self, args: List[str]) -> None: """Watch for file changes and re-run fill command.""" file_mtimes: Dict[Path, float] = {} def get_file_mtimes() -> Dict[Path, float]: """Get current modification times of all test and source files.""" mtimes = {} # Watch tests directory tests_dir = Path("tests") if tests_dir.exists(): for py_file in tests_dir.rglob("*.py"): try: mtimes[py_file] = py_file.stat().st_mtime except (OSError, FileNotFoundError): pass # Watch src directory src_dir = Path("src") if src_dir.exists(): for py_file in src_dir.rglob("*.py"): try: mtimes[py_file] = py_file.stat().st_mtime except (OSError, FileNotFoundError): pass return mtimes def run_fill() -> None: """Run fill command without --watch / --watcherfall flag.""" clean_args = [arg for arg in args if arg not in ["--watch", "--watcherfall"]] cmd = ["uv", "run", "fill"] + clean_args result = subprocess.run(cmd) if result.returncode == 0: self.console.print("[green]✓ Fill completed[/green]") else: self.console.print(f"[red]✗ Fill failed (exit {result.returncode})[/red]") # Setup mode_desc = "watcherfall mode (verbose)" if self.verbose else "watch mode" self.console.print(f"[blue]Starting {mode_desc}...[/blue]") file_mtimes = get_file_mtimes() # Initial run self.console.print("[green]Running initial fill...[/green]") run_fill() file_count = len(file_mtimes) self.console.print( f"[blue]Watching {file_count} files in tests/ and src/ directories." "\n Press Ctrl+C to stop.[/blue]" ) # Watch loop try: while True: time.sleep(0.5) current_mtimes = get_file_mtimes() if current_mtimes != file_mtimes: if not self.verbose: os.system("clear" if os.name != "nt" else "cls") self.console.print("[yellow]File changes detected, re-running...[/yellow]\n") run_fill() file_mtimes = current_mtimes self.console.print("\n[blue]Watching for changes...[/blue]") except KeyboardInterrupt: self.console.print("\n[yellow]Watch mode stopped.[/yellow]") ================================================ FILE: src/cli/show_pre_alloc_group_stats.py ================================================ """Script to display statistics about pre-allocation groups.""" from collections import defaultdict from pathlib import Path from typing import Dict, List, Set, Tuple import click from pydantic import Field from rich.console import Console from rich.table import Table from ethereum_test_base_types import CamelModel from ethereum_test_fixtures import PreAllocGroups def extract_test_module(test_id: str) -> str: """Extract test module path from test ID.""" # Example: # tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:: # test_beacon_root_contract_calls[fork_Cancun] if "::" in test_id: return test_id.split("::")[0] return "unknown" def extract_test_function(test_id: str) -> str: """Extract test function name from test ID (without parameters).""" # Example: # tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:: # test_beacon_root_contract_calls[fork_Cancun] # Returns: # tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:: # test_beacon_root_contract_calls if "::" in test_id: parts = test_id.split("::") if len(parts) >= 2: function_part = parts[1] # Remove parameter brackets if present if "[" in function_part: function_part = function_part.split("[")[0] return f"{parts[0]}::{function_part}" return test_id def calculate_size_distribution( test_counts: List[int], ) -> Tuple[List[Tuple[str, int]], List[Tuple[str, int, int, int]]]: """ Calculate frequency distribution of group sizes with appropriate binning. Returns: Group count distribution: [(range_label, group_count), ...] Test count distribution: [(range_label, test_count, cumulative_remaining, group_count), ...] """ if not test_counts: return [], [] # Define bins based on the data characteristics # Using logarithmic-style bins for better distribution visibility bins = [ (1, 1, "1"), (2, 5, "2-5"), (6, 10, "6-10"), (11, 20, "11-20"), (21, 50, "21-50"), (51, 100, "51-100"), (101, 200, "101-200"), (201, 500, "201-500"), (501, 1000, "501-1000"), (1001, float("inf"), "1000+"), ] # Calculate both distributions group_distribution = [] test_distribution = [] for min_val, max_val, label in bins: # Group count distribution groups_in_bin = [tc for tc in test_counts if min_val <= tc <= max_val] group_count = len(groups_in_bin) if group_count > 0: group_distribution.append((label, group_count)) # Test count distribution with group count tests_in_bin = sum(groups_in_bin) # Added group_count test_distribution.append((label, tests_in_bin, 0, group_count)) # Calculate cumulative values For the table sorted from largest to # smallest: # Row N shows: if we exclude groups of size N and smaller, what # percent of tests remain? # Row N shows: if we include groups of size N and # larger, how many groups is that? cumulative_remaining_tests = 0 cumulative_groups = 0 # Process from bottom to top for i in range(len(test_distribution) - 1, -1, -1): label, tests_in_bin, _, group_count = test_distribution[i] test_distribution[i] = (label, tests_in_bin, cumulative_remaining_tests, cumulative_groups) cumulative_remaining_tests += tests_in_bin cumulative_groups += group_count return group_distribution, test_distribution def analyze_pre_alloc_folder(folder: Path) -> Dict: """Analyze pre-allocation folder and return statistics.""" pre_alloc_groups = PreAllocGroups.from_folder(folder, lazy_load=False) # Basic stats total_groups = len(pre_alloc_groups) total_tests = sum(group.test_count for group in pre_alloc_groups.values()) total_accounts = sum(group.pre_account_count for group in pre_alloc_groups.values()) # Group by fork fork_stats: Dict[str, Dict] = defaultdict(lambda: {"groups": 0, "tests": 0}) for group in pre_alloc_groups.values(): fork_stats[group.fork.name()]["groups"] += 1 fork_stats[group.fork.name()]["tests"] += group.test_count # Group by test module module_stats: Dict[str, Dict] = defaultdict(lambda: {"groups": set(), "tests": 0}) for hash_key, group in pre_alloc_groups.items(): # Count tests per module in this group module_test_count: defaultdict = defaultdict(int) for test_id in group.test_ids: module = extract_test_module(test_id) module_test_count[module] += 1 # Add to module stats for module, test_count in module_test_count.items(): module_stats[module]["groups"].add(hash_key) module_stats[module]["tests"] += test_count # Convert sets to counts for module in module_stats: module_stats[module]["groups"] = len(module_stats[module]["groups"]) # Per-group details group_details = [] for hash_key, group in pre_alloc_groups.items(): group_details.append( { "hash": hash_key[:8] + "...", # Shortened hash for display "tests": group.test_count, "accounts": group.pre_account_count, "fork": group.fork.name(), } ) # Calculate frequency distribution of group sizes group_distribution, test_distribution = calculate_size_distribution( [g["tests"] for g in group_details] # type: ignore ) # Analyze test functions split across multiple size-1 groups class SplitTestFunction(CamelModel): groups: int = 0 forks: Set[str] = Field(default_factory=set) split_test_functions: Dict[str, SplitTestFunction] = defaultdict(lambda: SplitTestFunction()) # Process all size-1 groups directly from pre_state for _hash_key, group_data in pre_alloc_groups.items(): if group_data.test_count == 1: # Size-1 group test_id = group_data.test_ids[0] test_function = extract_test_function(test_id) fork = group_data.fork.name() split_test_functions[test_function].groups += 1 split_test_functions[test_function].forks.add(fork) # Filter to only test functions with multiple size-1 groups and calculate # ratios split_functions = {} for func, split_test_function in split_test_functions.items(): if split_test_function.groups > 1: fork_count = len(split_test_function.forks) groups_per_fork = ( split_test_function.groups / fork_count if fork_count > 0 else split_test_function.groups ) split_functions[func] = { "total_groups": split_test_function.groups, "fork_count": fork_count, "groups_per_fork": groups_per_fork, } return { "total_groups": total_groups, "total_tests": total_tests, "total_accounts": total_accounts, "fork_stats": dict(fork_stats), "module_stats": dict(module_stats), "group_details": group_details, "group_distribution": group_distribution, "test_distribution": test_distribution, "split_functions": split_functions, } def display_stats(stats: Dict, console: Console, verbose: int = 0) -> None: """Display statistics in a formatted way.""" # Overall summary console.print("\n[bold cyan]Pre-Allocation Statistics Summary[/bold cyan]") console.print(f"Total groups: [green]{stats['total_groups']}[/green]") console.print(f"Total tests: [green]{stats['total_tests']}[/green]") console.print(f"Total accounts: [green]{stats['total_accounts']}[/green]") if stats.get("skipped_count", 0) > 0: console.print( f"Skipped groups: [yellow]{stats['skipped_count']}[/yellow] " "(use --verbose to see details)" ) # Per-group details table (only with -v or -vv) if verbose >= 1: console.print("\n[bold yellow]Tests and Accounts per Group[/bold yellow]") group_table = Table(show_header=True, header_style="bold magenta") group_table.add_column("Group Hash", style="dim") group_table.add_column("Fork", style="cyan") group_table.add_column("Tests", justify="right") group_table.add_column("Accounts", justify="right") # Sort by test count (descending) sorted_groups = sorted(stats["group_details"], key=lambda x: -x["tests"]) # Show all groups if -vv, otherwise top 20 groups_to_show = sorted_groups if verbose >= 2 else sorted_groups[:20] for group in groups_to_show: group_table.add_row( group["hash"], group["fork"], str(group["tests"]), str(group["accounts"]), ) if verbose < 2 and len(stats["group_details"]) > 20: group_table.add_row( "...", "...", "...", "...", ) console.print(group_table) # Fork statistics table console.print("\n[bold yellow]Groups and Tests per Fork[/bold yellow]") fork_table = Table(show_header=True, header_style="bold magenta") fork_table.add_column("Fork", style="cyan") fork_table.add_column("Groups", justify="right") fork_table.add_column("Tests", justify="right") fork_table.add_column("Avg Tests/Group", justify="right") # Sort forks by name sorted_forks = sorted(stats["fork_stats"].items()) for fork, fork_data in sorted_forks: avg_tests = fork_data["tests"] / fork_data["groups"] if fork_data["groups"] > 0 else 0 fork_table.add_row( fork, str(fork_data["groups"]), str(fork_data["tests"]), f"{avg_tests:.1f}", ) console.print(fork_table) # Group size frequency distribution table console.print("\n[bold yellow]Group Size Distribution[/bold yellow]") dist_table = Table(show_header=True, header_style="bold magenta") dist_table.add_column("Test Count Range", style="cyan") dist_table.add_column("Number of Groups", justify="right") dist_table.add_column("Percentage", justify="right") total_groups_in_dist = sum(count for _, count in stats.get("group_distribution", [])) for size_range, count in stats.get("group_distribution", []): percentage = (count / total_groups_in_dist * 100) if total_groups_in_dist > 0 else 0 dist_table.add_row( size_range, str(count), f"{percentage:.1f}%", ) console.print(dist_table) # Test coverage distribution table console.print("\n[bold yellow]Test Coverage by Group Size[/bold yellow]") coverage_table = Table(show_header=True, header_style="bold magenta") coverage_table.add_column("Test Count Range", style="cyan") coverage_table.add_column("Tests in Range", justify="right") coverage_table.add_column("Coverage if Excluded (%)", justify="right") coverage_table.add_column("Cumulative Groups", justify="right") total_tests = stats.get("total_tests", 0) total_groups = stats.get("total_groups", 0) # Define bin order from largest to smallest for proper sorting bin_order = [ "1000+", "501-1000", "201-500", "101-200", "51-100", "21-50", "11-20", "6-10", "2-5", "1", ] # Create a mapping for easy lookup test_dist_map = {item[0]: item for item in stats.get("test_distribution", [])} # Display in the defined order test_dist_sorted = [ test_dist_map[bin_range] for bin_range in bin_order if bin_range in test_dist_map ] # Need to recalculate cumulative groups from top for display cumulative_groups_display = 0 for _i, (size_range, tests_in_range, cumulative_remaining_tests, _) in enumerate( test_dist_sorted ): coverage_percentage = ( (cumulative_remaining_tests / total_tests * 100) if total_tests > 0 else 0 ) # Find how many groups in this bin groups_in_bin = next( (count for label, count in stats.get("group_distribution", []) if label == size_range), 0, ) cumulative_groups_display += groups_in_bin coverage_table.add_row( size_range, str(tests_in_range), f"{coverage_percentage:.1f}%", f"{cumulative_groups_display} ({cumulative_groups_display / total_groups * 100:.1f}%)" if total_groups > 0 else "0", ) console.print(coverage_table) # Module statistics table (only with -v or -vv) if verbose >= 1: console.print("\n[bold yellow]Groups and Tests per Test Module[/bold yellow]") module_table = Table(show_header=True, header_style="bold magenta") module_table.add_column("Test Module", style="dim") module_table.add_column("Groups", justify="right") module_table.add_column("Tests", justify="right") module_table.add_column("Avg Tests/Group", justify="right") # Sort modules by group count (descending) - shows execution complexity sorted_modules = sorted( stats["module_stats"].items(), # Secondary sort by tests key=lambda x: (-x[1]["groups"], -x[1]["tests"]), ) # Show all modules if -vv, otherwise top 15 modules_to_show = sorted_modules if verbose >= 2 else sorted_modules[:15] for module, module_data in modules_to_show: # Shorten module path for display if module.startswith("tests/"): module_display = module[6:] # Remove "tests/" prefix else: module_display = module avg_tests = ( module_data["tests"] / module_data["groups"] if module_data["groups"] > 0 else 0 ) module_table.add_row( module_display, str(module_data["groups"]), str(module_data["tests"]), f"{avg_tests:.1f}", ) if verbose < 2 and len(stats["module_stats"]) > 15: module_table.add_row( "...", "...", "...", "...", ) console.print(module_table) # Split test functions analysis (only show if there are any) if stats.get("split_functions"): console.print("\n[bold yellow]Test Functions Split Across Multiple Groups[/bold yellow]") console.print( "[dim]These test functions create multiple size-1 groups (due to different " "forks/parameters), preventing pre-allocation group optimization:[/dim]", highlight=False, ) split_table = Table(show_header=True, header_style="bold magenta") split_table.add_column("Test Function", style="dim") split_table.add_column("Total Groups", justify="right") split_table.add_column("Fork Count", justify="right") split_table.add_column("Groups/Fork", justify="right", style="yellow") # Sort by groups per fork (descending) to show worst offenders first sorted_split = sorted( stats["split_functions"].items(), key=lambda x: x[1]["groups_per_fork"], reverse=True ) for test_function, data in sorted_split: # Shorten function path for display display_function = test_function if display_function.startswith("tests/"): display_function = display_function[6:] # Remove "tests/" # prefix split_table.add_row( display_function, str(data["total_groups"]), str(data["fork_count"]), f"{data['groups_per_fork']:.1f}", ) console.print(split_table) # Summary of optimization potential total_split_groups = sum( data["total_groups"] for data in stats["split_functions"].values() ) total_split_functions = len(stats["split_functions"]) console.print( f"\n[yellow]Optimization Potential:[/yellow] Excluding these {total_split_functions} " f"split functions would save {total_split_groups} groups" ) # Verbosity hint console.print() if verbose == 0: console.print( "[dim]Hint: Use -v to see detailed group and module statistics, or -vv to see all " "groups and modules[/dim]" ) elif verbose == 1: console.print( "[dim]Hint: Use -vv to see all groups and modules (currently showing top entries " "only)[/dim]" ) @click.command() @click.argument( "pre_alloc_folder", type=click.Path(exists=True, path_type=Path), default="fixtures/blockchain_tests_engine_x/pre_alloc", ) @click.option( "--verbose", "-v", count=True, help="Show verbose output (-v for warnings, -vv for all groups)", ) def main(pre_alloc_folder: Path, verbose: int) -> None: """ Display statistics about pre-allocation groups. This script analyzes a pre_alloc folder generated by the test framework's pre-allocation group optimization feature and displays: - Total number of groups, tests, and accounts - Number of tests and accounts per group (tabulated) - Number of groups and tests per fork (tabulated) - Number of groups and tests per test module (tabulated) The pre_alloc file is generated when running tests with the --generate-pre-alloc-groups and --use-pre-alloc-groups flags to optimize test execution by grouping tests with identical pre-allocation state. """ console = Console() try: stats = analyze_pre_alloc_folder(pre_alloc_folder) display_stats(stats, console, verbose=verbose) except FileNotFoundError: console.print(f"[red]Error: Folder not found: {pre_alloc_folder}[/red]") raise click.Abort() from None except Exception as e: console.print(f"[red]Error: {e}[/red]") raise click.Abort() from None if __name__ == "__main__": main() ================================================ FILE: src/cli/tests/__init__.py ================================================ """Tests for scripts and apps in `cli` .""" ================================================ FILE: src/cli/tests/test_eofwrap.py ================================================ """Tests for the eofwrap module and click CLI.""" from typing import Any import pytest from ethereum_test_base_types.conversions import to_hex from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container from ..eofwrap import wrap_code @pytest.mark.parametrize( "code,result", [ [Op.STOP, Container.Code(Op.STOP)], [Op.RETURN(0, 0), Container.Code(Op.RETURN(0, 0))], [Op.REVERT(0, 0), Container.Code(Op.REVERT(0, 0))], [Op.INVALID, Container.Code(Op.INVALID)], [Op.PUSH1, Container.Code(Op.PUSH1[0] + Op.STOP)], [Op.PUSH1[0], Container.Code(Op.PUSH1[0] + Op.STOP)], [Op.PUSH1[0] + Op.STOP, Container.Code(Op.PUSH1[0] + Op.STOP)], [Op.STOP + Op.STOP, Container.Code(Op.STOP)], [Op.RETURN(0, 0) + Op.STOP, Container.Code(Op.RETURN(0, 0))], [Op.REVERT(0, 0) + Op.STOP, Container.Code(Op.REVERT(0, 0))], [Op.INVALID + Op.STOP, Container.Code(Op.INVALID)], [Op.ADDRESS, Container.Code(Op.ADDRESS + Op.STOP)], [Op.ADDRESS + Op.STOP, Container.Code(Op.ADDRESS + Op.STOP)], [Op.ADDRESS + Op.RETURN(0, 0), Container.Code(Op.ADDRESS + Op.RETURN(0, 0))], [Op.ADDRESS + Op.REVERT(0, 0), Container.Code(Op.ADDRESS + Op.REVERT(0, 0))], [Op.ADDRESS + Op.INVALID, Container.Code(Op.ADDRESS + Op.INVALID)], [Op.ADDRESS + Op.STOP + Op.STOP, Container.Code(Op.ADDRESS + Op.STOP)], [Op.ADDRESS + Op.RETURN(0, 0) + Op.STOP, Container.Code(Op.ADDRESS + Op.RETURN(0, 0))], [Op.ADDRESS + Op.REVERT(0, 0) + Op.STOP, Container.Code(Op.ADDRESS + Op.REVERT(0, 0))], [Op.ADDRESS + Op.INVALID + Op.STOP, Container.Code(Op.ADDRESS + Op.INVALID)], [Op.GAS + Op.STOP, Container.Code(Op.GAS + Op.STOP)], [Op.GAS + Op.RETURN(0, 0), Container.Code(Op.GAS + Op.RETURN(0, 0))], [Op.GAS + Op.REVERT(0, 0), Container.Code(Op.GAS + Op.REVERT(0, 0))], [Op.GAS + Op.INVALID, Container.Code(Op.GAS + Op.INVALID)], [Op.RJUMPV[1, 2, 3], Container.Code(Op.RJUMPV[1, 2, 3] + Op.STOP)], [Op.RJUMPV, Container.Code(Op.RJUMPV + Op.STOP)], [ Op.RJUMPV[-1, 0x7FFF, -0x7FFF], Container.Code(Op.RJUMPV[-1, 0x7FFF, -0x7FFF] + Op.STOP), ], ], ids=lambda param: to_hex(param), ) def test_wrap_code(code: Any, result: Any) -> None: """Tests for the EOF wrapping logic and heuristics.""" assert wrap_code(bytes(code)) == result ================================================ FILE: src/cli/tests/test_evm_bytes.py ================================================ """Test suite for `cli.evm_bytes` module.""" import pytest from ethereum_test_tools import Opcodes as Op from ..evm_bytes import process_evm_bytes_string basic_vector = [ "0x60008080808061AAAA612d5ff1600055", "Op.PUSH1[0x0] + Op.DUP1 + Op.DUP1 + Op.DUP1 + Op.DUP1 + " "Op.PUSH2[0xaaaa] + Op.PUSH2[0x2d5f] + Op.CALL + Op.PUSH1[0x0] + " "Op.SSTORE", ] complex_vector = [ "0x7fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf5f527fc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf6020527fe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff60405260786040356020355f35608a565b5f515f55602051600155604051600255005b5e56", # noqa: E501 "Op.PUSH32[0xa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf] + Op.PUSH0 + Op.MSTORE + Op.PUSH32[0xc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf] + Op.PUSH1[0x20] + Op.MSTORE + Op.PUSH32[0xe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff] + Op.PUSH1[0x40] + Op.MSTORE + Op.PUSH1[0x78] + Op.PUSH1[0x40] + Op.CALLDATALOAD + Op.PUSH1[0x20] + Op.CALLDATALOAD + Op.PUSH0 + Op.CALLDATALOAD + Op.PUSH1[0x8a] + Op.JUMP + Op.JUMPDEST + Op.PUSH0 + Op.MLOAD + Op.PUSH0 + Op.SSTORE + Op.PUSH1[0x20] + Op.MLOAD + Op.PUSH1[0x1] + Op.SSTORE + Op.PUSH1[0x40] + Op.MLOAD + Op.PUSH1[0x2] + Op.SSTORE + Op.STOP + Op.JUMPDEST + Op.MCOPY + Op.JUMP", # noqa: E501 ] rjump_vector = [ "0xe0fffe", "Op.RJUMP[-0x2]", ] rjumpi_vector = [ "0xe1fffe", "Op.RJUMPI[-0x2]", ] rjumpv_vector = [ "0xe213b1465aef60276095472e3250cf64736f6c63430008150033a26469706673582212206eab0a7969fe", "Op.RJUMPV[-0x4eba, 0x5aef, 0x6027, 0x6095, 0x472e, 0x3250, -0x309c, " "0x736f, 0x6c63, 0x4300," + " 0x815, 0x33, -0x5d9c, 0x6970, 0x6673, 0x5822, 0x1220, 0x6eab, " "0xa79, 0x69fe]", ] @pytest.mark.parametrize( "evm_bytes, python_opcodes", [ (basic_vector[0], basic_vector[1]), (basic_vector[0][2:], basic_vector[1]), # no "0x" prefix (complex_vector[0], complex_vector[1]), (complex_vector[0][2:], complex_vector[1]), # no "0x" prefix (rjump_vector[0], rjump_vector[1]), (rjump_vector[0][2:], rjump_vector[1]), # no "0x" prefix (rjumpi_vector[0], rjumpi_vector[1]), (rjumpi_vector[0][2:], rjumpi_vector[1]), # no "0x" prefix (rjumpv_vector[0], rjumpv_vector[1]), (rjumpv_vector[0][2:], rjumpv_vector[1]), # no "0x" prefix ], ) def test_evm_bytes(evm_bytes: str, python_opcodes: str) -> None: """Test evm_bytes using the basic and complex vectors.""" assert process_evm_bytes_string(evm_bytes) == python_opcodes DUPLICATES = [Op.NOOP] @pytest.mark.parametrize( "opcode", [op for op in Op if op not in DUPLICATES], ids=lambda op: op._name_, ) def test_individual_opcodes(opcode: Op) -> None: """Test each opcode individually.""" data_portion = b"" if opcode.data_portion_length > 0: expected_output = f"Op.{opcode._name_}[0x0]" data_portion = b"\x00" * opcode.data_portion_length elif opcode == Op.RJUMPV: expected_output = f"Op.{opcode._name_}[0x0]" data_portion = b"\0\0\0" else: expected_output = f"Op.{opcode._name_}" bytecode = opcode.int().to_bytes(1, byteorder="big") + data_portion assert process_evm_bytes_string("0x" + bytecode.hex()) == expected_output def test_invalid_opcode() -> None: """Invalid hex string.""" with pytest.raises(ValueError): process_evm_bytes_string("0xZZ") def test_unknown_opcode() -> None: """Opcode not defined in Op.""" with pytest.raises(ValueError): process_evm_bytes_string("0x0F") process_evm_bytes_string("0x0F") ================================================ FILE: src/cli/tests/test_fuzzer_bridge.py ================================================ """Test suite for fuzzer bridge DTO parsing and conversion.""" import json from pathlib import Path from typing import Any, Dict import pytest from pydantic import ValidationError from ethereum_test_base_types import Address, HexNumber from ethereum_test_forks import Osaka from ethereum_test_tools import Account, AuthorizationTuple, Transaction from ethereum_test_types import Alloc, Environment from ..fuzzer_bridge.converter import ( blockchain_test_from_fuzzer, create_sender_eoa_map, fuzzer_account_to_eest_account, fuzzer_authorization_to_eest, fuzzer_transaction_to_eest_transaction, ) from ..fuzzer_bridge.models import ( FuzzerAccountInput, FuzzerAuthorizationInput, FuzzerOutput, FuzzerTransactionInput, ) def load_fuzzer_vector(filename: str) -> Dict[str, Any]: """ Load fuzzer test vector from vectors/ directory. Follows the pattern from tests/prague/eip2537_bls_12_381_precompiles/helpers.py """ vector_path = Path(__file__).parent / "vectors" / filename with open(vector_path) as f: return json.load(f) class TestFuzzerOutputParsing: """Test parsing of fuzzer output JSON into DTOs.""" @pytest.fixture def fuzzer_data(self) -> Dict[str, Any]: """Load test vector.""" return load_fuzzer_vector("fuzzer_test_0.json") def test_parse_fuzzer_output(self, fuzzer_data: Dict[str, Any]) -> None: """Test parsing complete fuzzer output.""" fuzzer_output = FuzzerOutput(**fuzzer_data) assert fuzzer_output.version == "2.0" assert fuzzer_output.fork == Osaka assert fuzzer_output.chain_id == HexNumber(1) assert len(fuzzer_output.transactions) == 17 assert len(fuzzer_output.accounts) > 0 assert fuzzer_output.parent_beacon_block_root is not None # EIP-4788 def test_parse_account_with_private_key(self, fuzzer_data: Dict[str, Any]) -> None: """Test parsing account with private key.""" account_data = next(acc for acc in fuzzer_data["accounts"].values() if "privateKey" in acc) account = FuzzerAccountInput(**account_data) assert account.private_key is not None assert isinstance(account.balance, HexNumber) assert isinstance(account.nonce, HexNumber) def test_parse_account_without_private_key(self, fuzzer_data: Dict[str, Any]) -> None: """Test parsing contract account (no private key).""" account_data = next( (acc for acc in fuzzer_data["accounts"].values() if "privateKey" not in acc), None, ) if account_data: account = FuzzerAccountInput(**account_data) assert account.private_key is None def test_parse_transaction_with_authorization_list(self, fuzzer_data: Dict[str, Any]) -> None: """Test parsing EIP-7702 transaction with authorization list.""" tx_data = next( ( tx for tx in fuzzer_data["transactions"] if "authorizationList" in tx and tx["authorizationList"] ), None, ) if tx_data: tx = FuzzerTransactionInput(**tx_data) assert tx.authorization_list is not None assert len(tx.authorization_list) > 0 assert isinstance(tx.authorization_list[0], FuzzerAuthorizationInput) # Verify authorization fields auth = tx.authorization_list[0] assert isinstance(auth.chain_id, HexNumber) assert isinstance(auth.address, Address) assert isinstance(auth.nonce, HexNumber) def test_parse_authorization_tuple(self, fuzzer_data: Dict[str, Any]) -> None: """Test parsing individual authorization tuple.""" tx_with_auth = next( ( tx for tx in fuzzer_data["transactions"] if "authorizationList" in tx and tx["authorizationList"] ), None, ) if tx_with_auth: auth_data = tx_with_auth["authorizationList"][0] auth = FuzzerAuthorizationInput(**auth_data) assert auth.chain_id is not None assert auth.address is not None assert auth.v is not None assert auth.r is not None assert auth.s is not None def test_parse_environment(self, fuzzer_data: Dict[str, Any]) -> None: """Test Environment parsing (using EEST Environment directly).""" env = Environment(**fuzzer_data["env"]) assert env.fee_recipient is not None assert env.gas_limit is not None assert env.number is not None assert env.timestamp is not None class TestDTOConversion: """Test conversion from DTOs to EEST domain models.""" @pytest.fixture def fuzzer_output(self) -> FuzzerOutput: """Parsed fuzzer output.""" data = load_fuzzer_vector("fuzzer_test_0.json") return FuzzerOutput(**data) def test_fuzzer_account_to_eest_account(self, fuzzer_output: FuzzerOutput) -> None: """Test account DTO to EEST Account conversion.""" fuzzer_account = next(iter(fuzzer_output.accounts.values())) eest_account = fuzzer_account_to_eest_account(fuzzer_account) assert isinstance(eest_account, Account) assert eest_account.balance == fuzzer_account.balance assert eest_account.nonce == fuzzer_account.nonce assert eest_account.code == fuzzer_account.code def test_fuzzer_authorization_to_eest(self, fuzzer_output: FuzzerOutput) -> None: """Test authorization DTO to EEST AuthorizationTuple conversion.""" tx_with_auth = next( (tx for tx in fuzzer_output.transactions if tx.authorization_list), None ) if tx_with_auth and tx_with_auth.authorization_list: fuzzer_auth = tx_with_auth.authorization_list[0] eest_auth = fuzzer_authorization_to_eest(fuzzer_auth) assert isinstance(eest_auth, AuthorizationTuple) assert eest_auth.chain_id == fuzzer_auth.chain_id assert eest_auth.address == fuzzer_auth.address assert eest_auth.nonce == fuzzer_auth.nonce def test_create_sender_eoa_map(self, fuzzer_output: FuzzerOutput) -> None: """Test EOA map creation from accounts.""" sender_map = create_sender_eoa_map(fuzzer_output.accounts) # Verify all senders are valid assert len(sender_map) > 0 for addr, eoa in sender_map.items(): # Verify private key matches address assert Address(eoa) == addr def test_sender_eoa_map_validates_address(self, fuzzer_output: FuzzerOutput) -> None: """Test that EOA map validates private key matches address.""" # This test verifies the assertion in create_sender_eoa_map sender_map = create_sender_eoa_map(fuzzer_output.accounts) # All created EOAs should pass validation assert all(Address(eoa) == addr for addr, eoa in sender_map.items()) def test_fuzzer_transaction_to_eest_transaction(self, fuzzer_output: FuzzerOutput) -> None: """Test transaction DTO to EEST Transaction conversion.""" fuzzer_tx = fuzzer_output.transactions[0] sender_map = create_sender_eoa_map(fuzzer_output.accounts) sender_eoa = sender_map[fuzzer_tx.from_] eest_tx = fuzzer_transaction_to_eest_transaction(fuzzer_tx, sender_eoa) assert isinstance(eest_tx, Transaction) assert eest_tx.sender == sender_eoa assert eest_tx.to == fuzzer_tx.to assert eest_tx.gas_limit == fuzzer_tx.gas # Key mapping! assert eest_tx.data == fuzzer_tx.data def test_transaction_gas_field_mapping(self, fuzzer_output: FuzzerOutput) -> None: """Test critical field mapping: gas → gas_limit.""" fuzzer_tx = fuzzer_output.transactions[0] sender_map = create_sender_eoa_map(fuzzer_output.accounts) sender_eoa = sender_map[fuzzer_tx.from_] eest_tx = fuzzer_transaction_to_eest_transaction(fuzzer_tx, sender_eoa) # Fuzzer uses 'gas' (JSON-RPC), EEST uses 'gas_limit' assert eest_tx.gas_limit == fuzzer_tx.gas def test_transaction_authorization_list_conversion(self, fuzzer_output: FuzzerOutput) -> None: """Test authorization list conversion in transaction.""" tx_with_auth = next( (tx for tx in fuzzer_output.transactions if tx.authorization_list), None ) if tx_with_auth and tx_with_auth.authorization_list: sender_map = create_sender_eoa_map(fuzzer_output.accounts) sender_eoa = sender_map[tx_with_auth.from_] eest_tx = fuzzer_transaction_to_eest_transaction(tx_with_auth, sender_eoa) assert eest_tx.authorization_list is not None assert len(eest_tx.authorization_list) == len(tx_with_auth.authorization_list) assert all(isinstance(auth, AuthorizationTuple) for auth in eest_tx.authorization_list) class TestBlockchainTestGeneration: """Test end-to-end conversion to BlockchainTest.""" @pytest.fixture def fuzzer_output(self) -> FuzzerOutput: """Parsed fuzzer output.""" data = load_fuzzer_vector("fuzzer_test_0.json") return FuzzerOutput(**data) def test_blockchain_test_from_fuzzer_single_block(self, fuzzer_output: FuzzerOutput) -> None: """Test single-block blockchain test generation.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, num_blocks=1, ) assert blockchain_test.pre is not None assert len(blockchain_test.blocks) == 1 assert len(blockchain_test.blocks[0].txs) == 17 assert blockchain_test.genesis_environment is not None def test_blockchain_test_multi_block_distribute(self, fuzzer_output: FuzzerOutput) -> None: """Test multi-block generation with distribute strategy.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, num_blocks=3, block_strategy="distribute", ) assert len(blockchain_test.blocks) == 3 # Verify all transactions distributed total_txs = sum(len(block.txs) for block in blockchain_test.blocks) assert total_txs == 17 # Verify transactions maintain nonce order assert len(blockchain_test.blocks[0].txs) > 0 def test_blockchain_test_multi_block_first_block(self, fuzzer_output: FuzzerOutput) -> None: """Test multi-block generation with first-block strategy.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, num_blocks=3, block_strategy="first-block", ) assert len(blockchain_test.blocks) == 3 assert len(blockchain_test.blocks[0].txs) == 17 assert len(blockchain_test.blocks[1].txs) == 0 assert len(blockchain_test.blocks[2].txs) == 0 def test_blockchain_test_pre_state(self, fuzzer_output: FuzzerOutput) -> None: """Test pre-state (Alloc) generation.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, ) assert isinstance(blockchain_test.pre, Alloc) # Verify all accounts are in pre-state for addr in fuzzer_output.accounts: assert addr in blockchain_test.pre def test_blockchain_test_genesis_environment(self, fuzzer_output: FuzzerOutput) -> None: """Test genesis environment derivation.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, ) genesis_env = blockchain_test.genesis_environment assert genesis_env.number == 0 # Genesis timestamp should be 12 seconds before block 1 assert int(genesis_env.timestamp) == int(fuzzer_output.env.timestamp) - 12 def test_blockchain_test_block_timestamps(self, fuzzer_output: FuzzerOutput) -> None: """Test block timestamp incrementing.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, num_blocks=3, block_time=12, ) # Check timestamps increment correctly base_ts = int(fuzzer_output.env.timestamp) assert blockchain_test.blocks[0].timestamp == base_ts assert blockchain_test.blocks[1].timestamp == base_ts + 12 assert blockchain_test.blocks[2].timestamp == base_ts + 24 def test_blockchain_test_beacon_root_first_block_only( self, fuzzer_output: FuzzerOutput ) -> None: """Test parent beacon block root only in first block (EIP-4788).""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, num_blocks=3, ) # First block should have beacon root assert blockchain_test.blocks[0].parent_beacon_block_root is not None # Subsequent blocks should NOT have beacon root assert blockchain_test.blocks[1].parent_beacon_block_root is None assert blockchain_test.blocks[2].parent_beacon_block_root is None class TestEIPFeatures: """Test EIP-specific feature handling.""" @pytest.fixture def fuzzer_output(self) -> FuzzerOutput: """Parsed fuzzer output.""" data = load_fuzzer_vector("fuzzer_test_0.json") return FuzzerOutput(**data) def test_eip7702_authorization_lists(self, fuzzer_output: FuzzerOutput) -> None: """Test EIP-7702 authorization list handling.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, ) # Find transactions with authorization lists txs_with_auth = [ tx for block in blockchain_test.blocks for tx in block.txs if tx.authorization_list ] assert len(txs_with_auth) > 0 for tx in txs_with_auth: if tx.authorization_list: assert all(isinstance(auth, AuthorizationTuple) for auth in tx.authorization_list) def test_eip4788_parent_beacon_block_root(self, fuzzer_output: FuzzerOutput) -> None: """Test EIP-4788 parent beacon block root handling.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, ) # Beacon root should match fuzzer output assert ( blockchain_test.blocks[0].parent_beacon_block_root == fuzzer_output.parent_beacon_block_root ) def test_sender_is_eoa_not_test_address(self, fuzzer_output: FuzzerOutput) -> None: """Test that transaction senders are EOAs, not TestAddress.""" blockchain_test = blockchain_test_from_fuzzer( fuzzer_output, fork=Osaka, ) for block in blockchain_test.blocks: for tx in block.txs: # Verify sender is EOA with private key assert hasattr(tx.sender, "key") if tx.sender: assert tx.sender.key is not None class TestErrorHandling: """Test error handling and validation.""" def test_invalid_version_fails(self) -> None: """Test that invalid version is rejected.""" data = load_fuzzer_vector("fuzzer_test_0.json") data["version"] = "1.0" # Invalid version with pytest.raises(ValidationError): FuzzerOutput(**data) def test_missing_private_key_fails(self) -> None: """Test that transaction without sender private key fails.""" data = load_fuzzer_vector("fuzzer_test_0.json") # Remove all private keys for account in data["accounts"].values(): if "privateKey" in account: del account["privateKey"] fuzzer_output = FuzzerOutput(**data) # Conversion should fail due to missing sender keys with pytest.raises(AssertionError): blockchain_test_from_fuzzer(fuzzer_output, fork=Osaka) ================================================ FILE: src/cli/tests/test_generate_all_formats.py ================================================ """Test the --generate-all-formats CLI flag functionality.""" from unittest.mock import patch from cli.pytest_commands.fill import FillCommand def test_generate_all_formats_creates_two_phase_execution() -> None: """Test that --generate-all-formats triggers two-phase execution.""" command = FillCommand() # Mock the argument processing to bypass click context requirements with patch.object(command, "process_arguments", side_effect=lambda x: x): # Test that --generate-all-formats triggers two-phase execution pytest_args = ["--generate-all-formats", "tests/somedir/"] executions = command.create_executions(pytest_args) assert len(executions) == 2, "Expected two-phase execution" # Phase 1: Should have --generate-pre-alloc-groups phase1_args = executions[0].args assert "--generate-pre-alloc-groups" in phase1_args assert "--generate-all-formats" not in phase1_args # Phase 2: Should have --use-pre-alloc-groups and --generate-all-formats phase2_args = executions[1].args assert "--use-pre-alloc-groups" in phase2_args assert "--generate-all-formats" in phase2_args assert "--generate-pre-alloc-groups" not in phase2_args def test_generate_all_formats_preserves_other_args() -> None: """ Test that --generate-all-formats preserves other command line arguments. """ command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = [ "--generate-all-formats", "--output=custom-output", "--fork=Paris", "-v", "tests/somedir/", ] executions = command.create_executions(pytest_args) assert len(executions) == 2 # Both phases should preserve most args for execution in executions: assert "--output=custom-output" in execution.args assert "--fork=Paris" in execution.args assert "-v" in execution.args assert "tests/somedir/" in execution.args def test_generate_all_formats_removes_clean_from_phase2() -> None: """Test that --clean is removed from phase 2.""" command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = ["--generate-all-formats", "--clean", "tests/somedir/"] executions = command.create_executions(pytest_args) assert len(executions) == 2 # Phase 1: Actually keeps --clean (it's needed for cleaning before phase 1) # Note: --clean actually remains in phase 1 args but gets filtered out # in _remove_unwanted_phase1_args # Phase 2: Should not have --clean (gets removed) phase2_args = executions[1].args assert "--clean" not in phase2_args def test_legacy_generate_pre_alloc_groups_still_works() -> None: """Test that the legacy --generate-pre-alloc-groups flag still works.""" command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = ["--generate-pre-alloc-groups", "tests/somedir/"] executions = command.create_executions(pytest_args) assert len(executions) == 2 # Phase 1: Should have --generate-pre-alloc-groups phase1_args = executions[0].args assert "--generate-pre-alloc-groups" in phase1_args # Phase 2: Should have --use-pre-alloc-groups but NOT --generate-all- # formats phase2_args = executions[1].args assert "--use-pre-alloc-groups" in phase2_args assert "--generate-all-formats" not in phase2_args assert "--generate-pre-alloc-groups" not in phase2_args def test_single_phase_without_flags() -> None: """Test that normal execution without flags creates single phase.""" command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = ["tests/somedir/"] executions = command.create_executions(pytest_args) assert len(executions) == 1 execution = executions[0] assert "--generate-pre-alloc-groups" not in execution.args assert "--use-pre-alloc-groups" not in execution.args assert "--generate-all-formats" not in execution.args def test_tarball_output_auto_enables_generate_all_formats() -> None: """ Test that tarball output automatically enables --generate-all-formats. """ command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = ["--output=fixtures.tar.gz", "tests/somedir/"] executions = command.create_executions(pytest_args) # Should trigger two-phase execution due to tarball output assert len(executions) == 2 # Phase 1: Should have --generate-pre-alloc-groups phase1_args = executions[0].args assert "--generate-pre-alloc-groups" in phase1_args # Phase 2: Should have --generate-all-formats (auto-added) and --use-pre- # alloc-groups phase2_args = executions[1].args assert "--generate-all-formats" in phase2_args assert "--use-pre-alloc-groups" in phase2_args assert "--output=fixtures.tar.gz" in phase2_args def test_tarball_output_with_explicit_generate_all_formats() -> None: """ Test that explicit --generate-all-formats with tarball output works correctly. """ command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = ["--output=fixtures.tar.gz", "--generate-all-formats", "tests/somedir/"] executions = command.create_executions(pytest_args) # Should trigger two-phase execution assert len(executions) == 2 # Phase 2: Should have --generate-all-formats (explicit, not duplicated) phase2_args = executions[1].args assert "--generate-all-formats" in phase2_args # Ensure no duplicate flags assert phase2_args.count("--generate-all-formats") == 1 def test_regular_output_does_not_auto_trigger_two_phase() -> None: """ Test that regular directory output doesn't auto-trigger two-phase execution. """ command = FillCommand() with patch.object(command, "process_arguments", side_effect=lambda x: x): pytest_args = ["--output=fixtures/", "tests/somedir/"] executions = command.create_executions(pytest_args) # Should remain single-phase execution assert len(executions) == 1 execution = executions[0] assert "--generate-pre-alloc-groups" not in execution.args assert "--use-pre-alloc-groups" not in execution.args assert "--generate-all-formats" not in execution.args def test_tarball_output_detection_various_formats() -> None: """Test tarball output detection with various argument formats.""" command = FillCommand() # Test --output=file.tar.gz format args1 = ["--output=test.tar.gz", "tests/somedir/"] assert command._is_tarball_output(args1) is True # Test --output file.tar.gz format args2 = ["--output", "test.tar.gz", "tests/somedir/"] assert command._is_tarball_output(args2) is True # Test regular directory args3 = ["--output=test/", "tests/somedir/"] assert command._is_tarball_output(args3) is False # Test no output argument args4 = ["tests/somedir/"] assert command._is_tarball_output(args4) is False ================================================ FILE: src/cli/tests/test_order_fixtures.py ================================================ """Tests for the order_fixtures module and click CLI.""" import json from pathlib import Path from tempfile import TemporaryDirectory from typing import Any, Generator import pytest from click.testing import CliRunner from ..order_fixtures import order_fixtures, process_directory def create_temp_json_file(directory: Path, name: str, content: dict[str, Any]) -> Path: """Create a temporary JSON file with specified content.""" file_path = directory / name with file_path.open("w") as f: json.dump(content, f) return file_path @pytest.fixture def input_output_dirs() -> Generator[tuple[Path, Path], None, None]: """Create temporary input and output directories.""" with TemporaryDirectory() as input_dir, TemporaryDirectory() as output_dir: yield Path(input_dir), Path(output_dir) def test_order_fixture(input_output_dirs: tuple[Path, Path]) -> None: """Test sorting a single JSON fixture.""" input_dir, output_dir = input_output_dirs create_temp_json_file(input_dir, "test.json", {"z": 0, "a": [3, 2, 1]}) expected_output = {"a": [1, 2, 3], "z": 0} process_directory(input_dir, output_dir) output_file = output_dir / "test.json" assert output_file.exists() with output_file.open("r") as f: output_content = json.load(f) assert output_content == expected_output def test_cli_invocation(input_output_dirs: tuple[Path, Path]) -> None: """Test the CLI interface.""" runner = CliRunner() input_dir, output_dir = input_output_dirs create_temp_json_file(input_dir, "test.json", {"c": 2, "b": [4, 3, 5]}) result = runner.invoke( order_fixtures, ["--input", str(input_dir), "--output", str(output_dir)] ) assert result.exit_code == 0 assert (output_dir / "test.json").exists() def test_input_is_file_instead_of_directory() -> None: """ Test the CLI interface when the input path is a file, not a directory. """ runner = CliRunner() with TemporaryDirectory() as temp_dir: temp_file = Path(temp_dir) / "temp_file.txt" temp_file.touch() result = runner.invoke(order_fixtures, ["--input", str(temp_file), "--output", temp_dir]) assert result.exit_code != 0 assert "Error: Invalid value for '--input'" in result.output def test_input_directory_does_not_exist() -> None: """Test the CLI interface when the input directory does not exist.""" runner = CliRunner() with TemporaryDirectory() as temp_dir: non_existent_dir = Path(temp_dir) / "nonexistent" result = runner.invoke( order_fixtures, ["--input", str(non_existent_dir), "--output", temp_dir] ) assert result.exit_code != 0 assert "Error: Invalid value for '--input'" in result.output ================================================ FILE: src/cli/tests/test_pytest_execute_command.py ================================================ """Tests for execute command click CLI.""" import pytest from click.testing import CliRunner from ..pytest_commands.execute import execute @pytest.fixture def runner() -> CliRunner: """Provide a Click CliRunner for invoking command-line interfaces.""" return CliRunner() def test_execute_help_shows_subcommand_docstrings(runner: CliRunner) -> None: """Test that execute --help shows sub-command docstrings.""" result = runner.invoke(execute, ["--help"]) assert result.exit_code == 0 # Check that all sub-commands are shown with their help text assert "hive" in result.output assert "Execute tests using hive as a backend" in result.output assert "remote" in result.output assert "Execute tests using a remote RPC endpoint" in result.output assert "recover" in result.output assert "Recover funds from test executions" in result.output def test_execute_subcommands_have_help_text() -> None: """Test that execute sub-commands have proper help text defined.""" from ..pytest_commands.execute import hive, recover, remote # Test that each sub-command has a docstring assert hive.__doc__ is not None assert "hive" in hive.__doc__.lower() assert remote.__doc__ is not None assert "remote" in remote.__doc__.lower() assert recover.__doc__ is not None assert "recover" in recover.__doc__.lower() ================================================ FILE: src/cli/tests/test_pytest_fill_command.py ================================================ """Tests for pytest commands (e.g., fill) click CLI.""" from pathlib import Path from tempfile import TemporaryDirectory from typing import Any, Generator import pytest from click.testing import CliRunner from pytest import MonkeyPatch import pytest_plugins.filler.filler from ..pytest_commands.fill import fill @pytest.fixture def runner() -> CliRunner: """Provide a Click CliRunner for invoking command-line interfaces.""" return CliRunner() def test_fill_help(runner: CliRunner) -> None: """Test the `--help` option of the `fill` command.""" result = runner.invoke(fill, ["--help"]) assert result.exit_code == pytest.ExitCode.OK assert "[--evm-bin EVM_BIN]" in result.output assert "[--traces]" in result.output assert "[--evm-code-type EVM_CODE_TYPE]" in result.output assert "--help" in result.output assert "Arguments defining evm executable behavior:" in result.output def test_fill_pytest_help(runner: CliRunner) -> None: """Test the `--pytest-help` option of the `fill` command.""" result = runner.invoke(fill, ["--pytest-help"]) assert result.exit_code == pytest.ExitCode.OK assert "[options] [file_or_dir] [file_or_dir] [...]" in result.output assert "-k EXPRESSION" in result.output def test_fill_with_invalid_option(runner: CliRunner) -> None: """Test invoking `fill` with an invalid option.""" result = runner.invoke(fill, ["--invalid-option"]) assert result.exit_code != 0 assert "unrecognized arguments" in result.output class TestHtmlReportFlags: """Test html report generation and output options.""" @pytest.fixture def fill_args(self, default_t8n: Any) -> list[str]: """ Provide default arguments for the `fill` command when testing html report generation. Specifies a single existing example test case for faster fill execution, and to allow for tests to check for the fixture generation location. """ return [ "-k", "test_dup and state_test-DUP16", "--fork", "Frontier", f"--t8n-server-url={default_t8n.server_url}", ] @pytest.fixture() def default_html_report_file_path(self) -> str: """File path for fill's pytest html report.""" return pytest_plugins.filler.filler.default_html_report_file_path() @pytest.fixture(scope="function") def temp_dir(self) -> Generator[Path, None, None]: """Provide a temporary directory as a pytest fixture.""" temp_dir = TemporaryDirectory() yield Path(temp_dir.name) temp_dir.cleanup() @pytest.fixture(scope="function", autouse=True) def monkeypatch_default_output_directory( self, monkeypatch: MonkeyPatch, temp_dir: Path ) -> None: """ Monkeypatch default output directory for the pytest commands. This avoids using the local directory in user space for the output of pytest commands and uses the a temporary directory instead. """ def mock_default_output_directory() -> Path: return temp_dir monkeypatch.setattr( pytest_plugins.filler.filler, "default_output_directory", mock_default_output_directory, ) def test_fill_default_output_options( self, runner: CliRunner, temp_dir: Path, fill_args: list[str], default_html_report_file_path: str, ) -> None: """ Test default pytest html behavior: Neither `--html` or `--output` is specified. """ default_html_path = temp_dir / default_html_report_file_path result = runner.invoke(fill, fill_args) assert result.exit_code == pytest.ExitCode.OK assert default_html_path.exists() def test_fill_no_html_option( self, runner: CliRunner, temp_dir: Path, fill_args: list[str], default_html_report_file_path: str, ) -> None: """Test pytest html report is disabled with the `--no-html` flag.""" default_html_path = temp_dir / default_html_report_file_path fill_args += ["--no-html"] result = runner.invoke(fill, fill_args) assert result.exit_code == pytest.ExitCode.OK assert not default_html_path.exists() def test_fill_html_option( self, runner: CliRunner, temp_dir: Path, fill_args: list[str], ) -> None: """Tests pytest html report generation with only the `--html` flag.""" non_default_html_path = temp_dir / "non_default_output_dir" / "report.html" fill_args += ["--html", str(non_default_html_path)] result = runner.invoke(fill, fill_args) assert result.exit_code == pytest.ExitCode.OK assert non_default_html_path.exists() def test_fill_output_option( self, runner: CliRunner, temp_dir: Path, fill_args: list[str], default_html_report_file_path: str, ) -> None: """ Tests pytest html report generation with only the `--output` flag. """ output_dir = temp_dir / "non_default_output_dir" non_default_html_path = output_dir / default_html_report_file_path fill_args += ["--output", str(output_dir)] result = runner.invoke(fill, fill_args) assert result.exit_code == pytest.ExitCode.OK assert non_default_html_path.exists() assert (output_dir / "state_tests").exists(), "No fixtures in output directory" def test_fill_html_and_output_options( self, runner: CliRunner, temp_dir: Path, fill_args: list[str], ) -> None: """ Tests pytest html report generation with both `--output` and `--html` flags. """ output_dir = temp_dir / "non_default_output_dir_fixtures" html_path = temp_dir / "non_default_output_dir_html" / "non_default.html" fill_args += ["--output", str(output_dir), "--html", str(html_path)] result = runner.invoke(fill, fill_args) assert result.exit_code == pytest.ExitCode.OK assert html_path.exists() assert (output_dir / "state_tests").exists(), "No fixtures in output directory" ================================================ FILE: src/cli/tests/vectors/fuzzer_test_0.json ================================================ { "accounts": { "0x000000000000000000000000000000000000000F": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x0233362c058b2fCc8093841B1073A90D673E7F12": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x7f2c75141e16bea0fceec67f673a0a3578e66fe55a9b6405d1ce109be7593206", "storage": {} }, "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2825c17712cd3e7e5240fb76fe09ec612d0337b643e5c605c3cfea77e44d0b73", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f0304bb487cf38ca47fa3bdb2fcd17f446000527fbce853b19c5e1fa4e21a75f5c633b19093d16e4225a1e18f93e6b0280d553f456020526f12907f8e8e33612bb1cd28222515089f6040527ff9ccd6deac82230464c9a0b6b46ae6cdd7488cbcb2701e4ae34128fbc7278be66060526f0f648013c07e63d91b12e235737d86626080527f152b1247f61c53a7c05b6282599a5a565624a120e3884ee2cf02e267fe10be1e60a0526f0ca29f1d84c20b8318dfc76159fa754560c0527f8730ae6c1b52728688bb33a14d5e57c18fe660ff55431c5fcc749dfbfd027a2060e052608060006101006000608c600b7fb2a9d981edef956e7c15a8f00819612f341891f265ea91e2d1bf0c9ddf17706bf16000556000516001556020516002556040516003556060516004556f0a1d7979d389cc17fa6234b538473d336000527fabda0c5fb1790d0da3b62020c61a9e0d09bf34d7299d048a86be80fd34ecc4a86020526f0560d9b5c15fec8dff6be987c92016df6040527fa66b5477a91ae92db1582bd62fffc0a3b6bafc39ad9636987f953f1acd6011036060527f6eb221e467bd443a6fd33fcac3eec22e63e51613f05df0310c0ecab2124210386080526f089358667ca389db7562f52f881de51e60a0527fa3b281e831d4286f5cdaebb3161f352f9f5cbed6b20674ad02b7606c56d675a860c0526f17f1263e3a15d93c02a8f6557c73bc0160e0527faeda0be01631b7b34d0fed1325f69b428679a30b79321b4ee50a7a382da092b5610100527f8f53d4aa5331cb3dad00de83c80191ebccf46fb3f1527416ebb22311d8cdf5ca61012052608060006101406000600c7fd4fc806c73fce35b7910639bcd5e440f3240dbba1f1db35ffd40ac39bd9ed326fa6005556000516006556020516007556040516008556060516009556f0e98e9c5a0ce1800ea000f728c792ebd6000527fc62c5196c7362c18572f8150745dbd193236def47b700cfd019f6a63c232e7726020526f17305bfbf895a75a1b4e0374fe26d8f96040527fb6dfed3e090fc8b5952d6ed6d4722f9d0d12419a9dac52386160f712bbcaf1fb6060526f03cd0052fd56e53a9904f76c29b4f6e76080527f62c168176691eb3f0c43f3263ebbfae78287a9110f2e7210f8615b4c0deedc9560a0526f0d99d442b87f10626da56ae4efc4557660c0527f5b87b2d664e585438fc0e5c2529f960b8421293bc9e64cf73c3681315c67cceb60e05278100000000000000000142f2b61de3fd9f5fae7f30f9a200465610100527f69a2fa1a70f398346b86baf9a1caf04c81261ce8120d073e480c017d1072ea86610120526f16367e551460bdf8b55514e5fbc98336610140527f4e41aa34f39059f6b645f11adc22a135c4cac0f8073c4a48dc3e326dd64570da610160526f1559a897fe4d9101750cf0c50d759307610180527fc6f2b0bbf73d7f6e7397777e2839216f0636957d997b14fa1dc9183d10ef4d806101a0526f10d05bbe32b66859d000015085fc6fb36101c0527ffd839495def4a7a0217ae1194b79e4e4a929cec96eea279ca635aa528718c5e16101e052610100600061020060006087600d7f4997fb8662809f846cccb8072b5a665549bced5ba0babf36c900744358ed4715f2600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f0a80f16dec66305836d93b07b6a14b746000527fd694453efa14cf142cc5b48cd8e49e5fa6d52f6b904f3c51a1e99be6ebeebc626020526f17ec12f7a83252673a562e934ae83c7d6040527fd980e2a6787fe55b5d6250b8c8c909f4c5fa906b7ae1e359fa84225966b4585e6060526f0201c07465f5a818868d265f2b9d3a5a6080527f4382a23b79074ccec8e1ad21c580fc1fe95213d4798af4aaa22855bd021050c360a0526f170d94a3398fd8fe44b7ff548fe6d93160c0527f726ae0d035252f5ec681388307703619e6198ba67ce8e3380cb576edb1a871f160e0527f1f4158e9331a61d7f6666fa0bbfea04cf804c27cc8b8ac749176fd7ea110a2016101005261010060006101206000600e7f903dbfde19bbf5a150cce310c94c5fde73f13db285135e8fa471e112a500dbb2fa60135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f060500d8f2788f675515321a657ec91d6000527f2f68c11e9812c09c2d1ea3667837f81666de01b7136237cd59d0e4fdd23f03496020526f1029733bf268a8dfa83ebd6870b9c5b36040527f8f3731515fdfb60678ef7e109ad680738e1c20e6e7ac6c1daa02e3fbca9ff4526060526000608052600060a052600060c052721000000000000000000000000000000000000060e0526000610100526000610120526000610140526000610160526f0671a07ffe971a913c8e718e1f8aff72610180527fddad0b334b7407fc1fec9eb7273da17aaaff013426274ab1f61cd0f04ee188c36101a0526f123c38b43dec7cb6345624c5f8b403c06101c0527fff208bbb12cc604d5cdd3ed163805d0bae5d8c8ec7b5bacd6a0ec529327c719a6101e0526f181cce65e82fd9347b1b66b4bdcade50610200527f71ea0bbfc0be2f5d930fdb39907aac0765d1e38b4b10cc44d4e8b89bf0848a12610220526f19669ebdbfec5754e13c61595fb28b72610240527f47795a1822a6b61169b1fdf8c13a66993bc9a0a9b03b236d1ae9619f80274c7c610260526f0bee714d419295547b26ad30f3f6d265610280527f0c5cc9a7d2a9d234cfbae47ccc7b753fb83ba16ea7b8c9100fc4ab9664b34ae76102a0526f01c0c352f3bb92ccfc65ba09ce10e2bf6102c0527fff7b95a9a3502e998e571f6b14a95669015c4065160fe57862c56ba26dc223e86102e0526f0a5027e9bff89a14938cce229b6608ed610300527f0f15b6977401680f5eac13988d4d5223190b3ead586a370df633fed4e2c2fbdc610320526f05fd50e2ac95e4d5ee6f46f492485ef0610340527f11c90229dd700ca24d7560d6318ac814c8f2cf0fdcdb6734ba88088a82c78b48610360526f0a9cddc7b8e0a02a9d05efeb7135a08a610380527f1edf3ccff9518b554a7169b9664ecbbae8e1fb5712d6eb21e507e91b58e0f1726103a0526f071f0b7f899b0ecc684373f03693e3f26103c0527f0973056eab4f7cd509c36304f21d5685d7bf3adfbcae30b1543c2b360af306e66103e0526f08780fd2546a36beb1ca303e02af7b14610400527f8252ab31a0707573563e183b8cfcf36dd3b166e6303a79d9787cbeb04bad0b99610420526f055bc48aa14fb1c46c09ea909afd6bfe610440527f25acb1249e874468f4e3b73366b400bc6bfe4f542a412bc91c9c83615f3501ab610460526e6fce599f3edafd3ec2cf034379f3ed610480527fb7bc1878c6b16a4c036f54f228c5fd735c10975d62caaaf0e9624900efddd6b66104a0526f16287deaced22aeece826750d5f96d0d6104c0527f493b5d3ddb685f425f5b727a5b85a82ebeef92615ee32877afc243908bd50d2c6104e0526f024aa2b2f08f0a91260805272dc51051610500527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610520526f13e02b6052719f607dacd3a088274f65610540527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610560526f0ce5d527727d6e118cc9cdc6da2e351a610580527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016105a0526f0606c4a02ea734cc32acd2b02bc28b996105c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6105e052602060006106006000600f7fd4124f75d9f67bb9297799198175ef8987c66e6c7afad5fc75719adbe2e89dc9f4601c55600051601d556f048ecddc27cb7b231e2079d5c96adb456000527f549123f3e3c3d28ff640bc3a1adb125dad75897d889e48d44f0f77ac28f020ed602052608060006040600060107f01298de28edfc331e1c52caa4e4d9601b30e5980bd635744a17225c5168975d7fa601e55600051601f556020516020556040516021556060516022556f13eba7cc9982c91920252877d0c114016000527f7c2cd98b0a402e7d0d5d015f9412eb553a9c306edf04e6dfebb84be9fd306cff6020526f12eade4a55567c4180d389eab65e95626040527f0eaf9b6cee65d9ac1233d2143011bdde7a2a2ed1306214f985d48cd255e4166f60605261010060006080600060117f3f0844a363566ce2919046fe2ab2946fc4152e80ec32229cb032f73b21f4c162fa60235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x60d360fe60286079600f60ec60b12008326f52059b3f3d528a53656d668c36445c1899f01a4a466151845c61368ca35c8005048e95193f551d209510615502414a3c77104309044a6d45570968789058f53749193e817f5f807d9e025f793d755575028b5d3c8f9e3a91097d5f6cf39a4768798a66111c0a3979807ff37e0b31f3188f8a0856006464fa818b75140096629833556e1e59607b9c53ff5f056105f53a8a5416160b533c54317514638106616607936f3c00023716095a69437e52411d59437b751c8a46573e595f671c8af203341c6e7c741017705f126a56727ef08f515a461a5e506d18126f72506b0638434537024009074081a163f0f002135857107698446917376d506379643b07431a20ff681c3e091049410516418a0353458b5aff685c6f977114578fa47531771d5e00536e1959605e733b147e72356bfa194291556d1069007f1d811e563d12863a7b336d51093266788d74451a197916f4764801630bf11cf242f032f30217445a3d6a57900751876b4930606b483161047432743a3a333a88787548797a4206467e33955269959f1c5865556b1b51194a446f023808a27c3d475e133d686937f0656c46780a33004a503e188f5c16597d69a20517466a5e6615474769540081050606631b605b7c7a37496cf58d8207f56e085b986f6f7d467762861940f17b3f3a661d401d6d46681c050a3d3d501d49653903561a406b483b7e38679336a363505fff736120516a6934818a5b556a3a0a12ff6f9b71841184763b077c8d106809861b881c9e405e3e388672081b727a77817b7a83a26c16560770794a703a6904684800786d00198130fa32074a6b5f07881d3d5659843f3d56735d5b31a0050083381609190539a002360a424538430b3e748173433d726d83416d497f153e440231fd1384396e5a9361045795613a87991e54ff1c6a701b05540a6103718d56718a536c85a0313853569781873754413861336e72975a47503e55a25b02a336361a6542a4708736839846fd316766933d567a3e718e537d1576414694588a609b1531366d0b19080a6435703c73027a3d32591e6a723305156a1991603204380b486a619b6b83083e7390807d5d8a7f57f05a78024a511ca20b360292543f660436676f5a1b03f473667d07545300f36a96974a56358e8f653e3b38005393671a47121802583e191172461214ff87176f9f51fe99071d68065565810a03865c8857723e09618181900b3775515a51461c7249503d403403f5161b6b5e5740604a55758b6a7180fd63721c9b5801047e9e68a33176015e095b380737799a45015e6c3a8796a08f5916110978f2454a570335504a7e335c3a166d520a53627678325245745338727b7df309a1830a74374a6d325d58f3711e7f6ffe684271363b325c5d00979b8c15561e8a42", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000012" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x6000545004121e6f7f56198c1e35957e3f1771fc736167d061e5a3771e4ea7b6224c5795c0bfb9e27d6000527f073b1b146e22e2cbc33be43483ed67045cde7dfc18abfbc072e3007d1759a6436020527f25a5d983835b0a0a8ddda9e973ca774131d07a607a50fff393e8eb4cc1f26c6c6040527f9c248c3c71446e447ce71a16117be91eeb6887774ecc073bf3687f333852154c6060527fea9d67c047c8937ae33e470ae93ab841543e412d7fad66143778f8bc924fa5d46080527fd5b2f67b2063905d37d496c15a25d758c22b2b44cc1236b0ed5b7984e779d46360a0527f0a2e60472c4944e9fe2c9cb40ee4ef6d4664a0b3a11b5385c4b7e0bbff14540660c0527f2f523606c6d7ecf0fa8698a50b184183e745a9fc62ac210b2c697b0990eef9c960e0527f76eb16a60b21c1f33f72b6fba934a49df31cc33495c2a5448c52c4678fd235f4610100527f7eec64c80233121f38717239977ee9780a8bd90f8503cbafad56b1d154a42fc6610120527f7587ae46cbb70adcab17b5b0de3acb3145a7c274822643a1f60445b25869683b610140527f2b379af570b1ecd121b6a8fa57f5b95070dfc6f568bf5fcd6463325a70dfeabe610160527fcab611c6fce59eb2d48e25746327158cbe1e56043270425b912c395a481140d7610180527fb278bfc525b03b0bdc36704d4f33402e419bf94220a962778732dee8df0701af6101a0527ff31a16cecd89cbbe248c1180cbe3ab9d47f0608191ebae06c8ca65da94a6cf0e6101c0527fdab48b0443e2f74491047cb5043ec3ab52a64c3cd9207829e01c0c7db9767e4c6101e0527f48fe70c2e6614d7a443a9e349eab5d084c38b49a7915188567b9fed7bb303205610200527f4cd71e66c5664a1f0cb150d3c620b349dd38c1cc760aff91f76927665de296a6610220527f4fa12b0350149110fa8a0c12251cd216f5ef2a6933dd28cb7ab6de9f613097e2610240527f0f4c3ea9097e42038e26855e750999a40ab7f90ea69d1a2a2c1fd97fa79a0613610260527fe7faeb6bccf6487cf16aa52814ebdc29fb624527e80805b08a504d1598dd7831610280527fa445a986e95b0f4e0378e18b97819ff5f3c5c534d436d4b648c297b91568a10c6102a0527f8c4eda6372fd44629eba2c9d2dcd470136c712ab976abb3396c1da6f4ddcb6826102c0527fda48bafb7e3ff88251bb85a28ee3fbfea120a23150a8d2d725989f9c4502a5286102e0527f47a217e00683fa23ecf58f04b7663a46be40a80bdbc7910d7a7a6ea7528c24326103005260ce6103205360cd6103215360266103225360b66103235360db61032453604060006103256000609660f47f80dd5cba9287bdc9d8484da6db0c443bcf39f18dc9a3b877daa4b47b152f695af1600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000000000000000000000000000000000000c", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x000000000000000000000000000000000000000000000000000000000000000d" } }, "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xaa07ea6d7ebb90738862bff26aa53633e9a6a4c2732f31c270f5a02687a06eb2", "storage": {} }, "0x535863dA03bc1834eeA10eeab8FF498565F33f2d": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xb214f8d7a564be547e6de1404f829b88b9c5f1bfc42a708554e97423e49a9def", "storage": {} }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7fb858c07c2fb9fb447c54bdf506edb58f631476bed129929800bdb8049510aa7e6000527f3a410073dc03e299ea3618ffb2e7292ecd57563edff75605855ca16c9cb158e66020527fc3ac92c70cc33b79c43ed311142981018abce5f5cbc322fb4d4cc081031ec1ce6040527f73d594fd80189ea82db6754b27de68050a84ba50ed82afefe5b900ff19a00aac6060527ff1a8e519f5aa98550f849cff101dee44b99100c44eac7a7f2cde3610cd54656e6080527ffd7b744a4d233ee11b0b11f746f2d48a6563968ccf0b8a2f3f99d60ab16b146460a0527f756af369bcf3131ecc8d276e72b38074f3f02a253f611208f70b72661c27458f60c0527f3078b132f36721702d0b4ee6c4c30fb87f4860d76c267f1a3fc1a3e56901fbe160e0527fb903e43f3659db206c8e26d8f3276f2696926e86f82ba6cb69639480bb9e85b5610100527fa0225a93a51f5cf08e2829018fc694fc8dbfe36ee19d9c33e8f6cd0918a823076101205260206000610140600060027f3d5fcc6dc637aa0a00e46f5c03d83b8b4476d9fbaab5d9688c67e13eceaa005bf4600055600051600155", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x6008610400fd", "nonce": "0x0", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x600054506003fff87f9dfbc28738b4aa81098db57872f5db652fb31e6563a7e0444aef68ed160a85c5600052604060006020600060b660077f6b0476a7d3e48eaca4fb3595c2ad7657f4da9552ffaebcd13068b1c91fad8d6bf1600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000000000000000000000000000000000000000000f" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7d08361ee866d39c2fb444e88ff7ee2a8e023c8c049aae8a67f7f686951abb6000527f2884635f8539e311ae790c2a42ca96eb6a850235a6ab1e3de3ab9106f17f69806020527f9c3330a9d409a3128e5da585e8d90364692c33c7b156330f7a9d0466b958016c6040527fbe4b1c709bb0327f1bc07d29da9e49dbc164adef56992936f18fef5d9bea45086060527f861e3e31afb13f20925a2ef9718e14add535afc482c88a4429ddd65c050491926080527f054efe1978cffd5b49f3791f5c168bf912146245ba05b3425577697c24436d8d60a052601f60c053602a60c153601260c253602960c353609c60c453605f60c553604660c653609c60c753608d60c853601a60c95360b860ca53609260cb53601c60cc53602060cd53602660ce53602860cf53608560d053604660d153609760d253602160d353600060d4536040600060d56000604d60097f67a046b0dcdd07f5640269c0b1d159c2f87bc5cab9c9cbcbfa19613952b719d0f1600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x79cca006f0792Bf40a6d4E011c2884eD862A52DF": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xada9e915b45b3f9f3f335fe00a484308905ec68a78d49750e1a47ec4f9c17d23", "storage": {} }, "0x862B38c425EF5544d0127449A12c89C46dd3E050": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x35c0e7a818e7367e6218647e77752b4b0d92f50362a7eff324915762586509ba", "storage": {} }, "0x88f9B82462f6C4bf4a0Fb15e5c3971559a316e7f": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x777effffff80000000000000000000000000000000000080017a01090000000000000000000000000000000000000000000000000090176000557f800000000000000000000000000000000000000000000000000000000000000276013590cab83b779e708b533b0eef3561483ddeefc841f5136001556780000000000000017e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000901d7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a5901d9007678000000000000000690100000000000000000006760fffc000000000000767676240000000000002b05760476007717676767676760000000000760000007600000909760fffc000000000000767676240000000000002b05760477f800000000000000180000000000000008000000000000000800000000000000090050b197702ffffffffffffffffffffffffffffffffff2000000000006801fffffffffffffffe90109017197ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000677fffffffffffffff7e40000000fd000000db0000000000000000000040000000fd000000db0000010913682100000000000000227f80000000000000018000000000000000800000000000000080000000000000009006107ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000686d5adef08547abf7eb90066002557d767676767676000000000076000000000000005600000000000000000000637fffffff901819901b7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f800000000000000000000000000000000000000000000000000000000000000018146d010000000000000000000000000069010000000000000000001a16610111774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a1090167feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7bc9700000000000000000023f00c00014ff002c00000000000022310814177ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02901615682323232323232323237f7effffff80000000000000000000000000020000440000000000000000000001901d7a010900000000000000000000000000000000000000000000000000778200000000000000fe000004000000ffff000000fffff700637fffffff0990161b71767676767676767676000000767676767676638000000116901a682100000000000000227ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000090109005681000000000000000007f82000000000000000000000000000000000000000000000000000000000000006b100000000000000000000000080b6d0100000000000000000000000000777effffff8000000000000000000000000000000000008001051960035567d021262626262626680100000000000000001090137f80000000000000000000000000000000000000000000000000000000000000006c01000000000000000000000000774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a90081b60006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a06000610100611915fa6000556000516001557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f55555555555555555555555555555555555555555555555555555555555555556020527f55555555555555555555555555555555555555555555555555555555555555556040527f8302763a7a03204c2f880bc82f3d38d8747211f1a910880e90004c102538f3ae6060527f7d8da52b6ebd1b2c2d84b07a8d2092e09d27777575aa939ed783a54cddd2b0c66080526020600060a0600060006101006119fff26002556000516003557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffffffffdfffffffffffffffffffffdffffffffff77ffffffffffffffffffffff6020527ffffffffdfffffffffffffffffffffdffffffffff77ffffffffffffffffffffff6040527f91dbff4fb710b1e81ce14be3bd88f06cff8428403452b064321bebeabec55f7d6060527f54c975daf7c93874c068af196208eda9c8f9ced3460ef5bffcc93b3dd8f2ff8a6080526020600060a060006001610100611a1cf16004556000516005557f86f977edffd2ddaf1c5779296743fb477fe65e68d47bb0716a1ab8157207455e6000527f43c36642eaba53487655950d16ee65b9f61ee0c605a4388cffeacc12f2b01e856020527f4aa560a8b3dec45915d077759ff76a3efaa44d25c93aa98b466e59fbf502684e6040527e9047ae74c90ca58dad54af6f18f053e27deb4632fcbf5998f269e614536b826060527fdadda5824c6bcf8a00a246be87fd739d8751107ef5ce89c85d3da736c3fc69326080526020600060a060006001610100611a77f16006556000516007557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f81f541a8a3462901f68ba711ca1e3aec670f9cc713e1972a1606fbceb2ebd2886020527f81f541a8a3462901f68ba711ca1e3aec670f9cc713e1972a1606fbceb2ebd2886040527f04fffffffb0000000500000000000000000000000500000000000000000000006060527f04fffffffb0000000500000000000000000000000500000000000000000000006080526020600060a06000610100611af4f46008556000516009557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffbffffffffffffffffffffff7fffffffffffffffffffbffffffffffffffffff6020527fffbffffffffffffffffffffff7fffffffffffffffffffbffffffffffffffffff6040527fc9e005dd1af6d82d77505fbdc1b18fd3d9741240907a510e5ddc9febe80c768f6060527fc75def9510f5aba00f7917e84ea6002991ba59604d84fe1cf2b6b4cd6ea7c6746080526020600060a06000610100611c3ffa600a55600051600b557f63b53bcdd52d82e3e5ae5108ed590a8631113f6abba1624acfd0cd5be0a0d56b6000527f890c4ce6a855ff49e201e0ed48e8274c14be1cbd115364818c32fe3cedfa7c106020527f236ad4b6d7f6ef8bb45b6d45172b950216c0738bdd2be455d33a3058d34a061260405260006060527f5a824510cc45547b0a39a6b8767f15f0ac481a630dbaac91803d3bfc6b9c6ebd6080526020600060a060006001610100611cbef2600c55600051600d557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c7760005260016020526001604052600160605260016080526020600060a060006001610100611c1ef1600e55600051600f557f6ed85366d9c82e9481594355f9b55ca5408697bca7ef1d349e6d8e37e2b4c85d6000527f7bc7b5eb03d4cd86c342c7dd8f06d8e2a952439d2e8a630919d74500a4a344496020527faacc19c91c17de70c9873189d63e0d28987290f3089e5ace18d13d5ea618439e6040527f8047db8b33c977bf4d8069f8c3715097251328b395f3cfe5c475ddf3f762e5606060527fa75ed49f31331b289b30793cefa79a7e0ccece8fdc7796f909112e53d509d3746080526020600060a0600060006101006119f1f26010556000516011557fe506e35f179221d3ed2944ac1ac29b7483a73e7adbd784c5ee7bd38b345dabf26000527fab4deaff0494294b86417f8c8d2238649f97e5c45f926a183e5cd1594c4cb07e6020527f4afb0bae902a54052d1bd6b411d165669850774bb42b8ecc73cb102c48786bd66040527fa7c4a4fb78abc4a6cd32f47ce4db416c91208a04f7ae267e8151968fc3a609646060527f89d7f7cc508073e2cc8644c5154846a74315dacbdadbadda1cafd82e386dde4b6080526020600060a0600060006101006119c6f16012556000516013557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611be3fa6014556000516015557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527f8be9b57e112a8abb6ec40524a35e864b5293159b6a77f4860f8e00ceee6348d260205260006040527f48209be5e8f0e89ee1f0d4b74645ed38280f0bc6ddafec46f395720346b12e1a6060527f5512a03479460ecd88cf83565013839e24c5a84008f6edba23f0d0b9dfcceb4c6080526020600060a06000610100611bfbfa6016556000516017557f69955cf40e14f69443bf4f8ee5432aa2b843671673ccae71a51215fba3872a426000527f8ec01f4b15fe0c755482f5e90658c5a758699386c587b3657aed859e90eb69d76020527fb5eb6c9b3994887c43c6f40747ff3494f507592761d915254a01827d7f36d10a6040527fd26cfb0cd81d2a94cd7a10a5972d6d20d1f06ccdc6cbb0f578a4bcfca45f2df06060527faad80ba35b270796c9cae745b7a027b43027d54af56540fedd8c9b73114f47156080526020600060a06000610100611b01fa6018556000516019557f500b93dd1d2a593c5a87657f32a4a7c2688fc81d9696cdcbad878cf630537a9c6000527fd78d8eeffa7139961a28191e23ec8bd01da90e63007ce5f9425fc50ec264d6f96020527f0ee4e5c1a1819348b133f191aeebecfe2f27b9be698d6ffcb5fa441ddffbd9196040527ff1db2ab546530306590bae04535c1353a7f14b8e8b3a893bd88358612774b4a16060527fab214a7af0d280dfbe046277723d67cefbdb88c22aae39f752e872c257a372556080526020600060a06000610100611b16fa601a55600051601b557f5da1d3b0edc7e8bf95cb6f26d1c264d9bdf4ea04f05a9ed1e541bacb8672f675600052603d6020526059604052600060605260006080526020600060a06000610100611b8cfa601c55600051601d557f22fdb863e2df7a57588e5cc6b8b128c8ed3e88b5ad088f1b37a2f981bf41bdc56000527f69bc3329e8cb108c84c98ceea1bd99d39a2efe8517074b1a79ffb6c8fa5d163f6020527f5d80d369a9dd69d08bb0389ff4dc31d3a179aa82f61a2543e9dd3b58326f7b216040527ffdcdaac7043a1c5a4abe5883e66744659480933d3fc6d79f388d18a72a0f11076060527fa4edfe3c45411b6d8bb1aff118ca3d1a2c56beea9a2b9778a6c093d0ff22e25e6080526020600060a060006001610100611970f2601e55600051601f557ff5c112beb21695afb638f1032170f8b4af1040fe570bf6356c74082a31bd6bb36000527f399ca9ad9f8dc34b7964f8a853550a4901e3eec73fa5604131d2e7ab2d0e6f156020527fc048cf554cbffaa48220a65412e471ed20e28bdd82ffe99589e3867ee7e9069b6040527f1a8634914abb264491eb6c117d8a3c72a74965333bedfb0494bdf448da64838d6060527f57ed3625d9e134d129cfd6a7d3fe7f6c898fc9aff54c3ae2ef0890479e5e5e8e6080526020600060a06000600161010061192cf2602055600051602155600060005260006020526000604052600060605260006080526020600060a06000610100611987f46022556000516023557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a0600060016101006119e2f16024556000516025557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f22276e0d2c74bdb35707e25acac41b33490f53b461dde80d2c6114f1698391d96060527f470aab8b0fde69b11fb96c7d20a0ca75f3654fe23a02f19e7d98eefc7ccb8c8b6080526020600060a060006000610100611b93f16026556000516027557f160e6420d863db6655fa27dd50cf8e353f9ef4a20092520f63ac63f4e0eb32556000527f343c3b8c8e2ceba457169b28ae411d0a278741b36f671feac0fea97a45cf40d26020527ff6f052ffdb97a606b3ac7009313248236b4ae112d3acfa537663d4c38452de6b6040527fa25d6665169122469ad9dceff29c3e6e871360326eb49e49e0261adf89361f016060527fef7b14d9fae44f66fc4ee9b481ca0a6ac49cf8eeb913b4efac7a064ed9ffe6946080526020600060a06000610100611b93f4602855600051602955600060005260006020526000604052600060605260006080526020600060a060006001610100611928f1602a55600051602b557ffa194dba78ee8b822744bdbcb38ec187ce7e6957ba51c87d846781edc354c2de6000527f7df9c36794bc5982da95b00d072d4de68c47c54b7764b1a445bd00c418d489c16020527f6c1d819223cb31c461c96697f336c1da899f543a61d5964258167c4b874db3dc6040527f4ce7bacbcebb07f25acb5ef88add479e12c3b0d61e4c0b8bae8d909ad260f0226060527f77c9584e2c81ff7a15790f44da433b1774037cdad4197b7f5919f3c7362439a26080526020600060a06000610100611aa7f4602c55600051602d557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f01fffffffe00000001ffffffffffffffff79cdf55b4e2f3d09e7739585f8c64a6020527f01fffffffe00000001ffffffffffffffff79cdf55b4e2f3d09e7739585f8c64a6040527f615dd4a0a844dbbc1ba9dbc9caa8a519a38e98fc4b354dbc92833c2762344bb66060527f633ba1bdcc154fe6e0c3d52306e212ae81f22910d9775e2c0b7ce8a7a88b1c896080526020600060a060006001610100611940f1602e55600051602f557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f8f9cd5d78b75c2accc5121383427522b84cb4c2a8b56c1f94eb4a0576183d3c46020527f8f9cd5d78b75c2accc5121383427522b84cb4c2a8b56c1f94eb4a0576183d3c46040527f02fffffffd0000000300000000000000000000000300000000000000000000006060527f02fffffffd0000000300000000000000000000000300000000000000000000006080526020600060a06000610100611c20fa6030556000516031557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6020527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6040527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6060527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6080526020600060a06000610100611978fa603255600051603355", "nonce": "0x0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f20aef1c1f12d6a92cb52c4715a73e8c2614607f6ac041e6430cab9fe7fcdc1f66000527f1c939c4275bf050dfd34fa9b8f3f385d8aceeea459e4da4d6f5be4bf21c30c4e6020527f041d957b0f7cd04de520dbdfb6caf3b7e2c93f15dfb83ee4964259dc3a71010c6040527f1187ca1a59643ea4c84ebf358eb75f0197b94ccf1de9a611a8aacc67e98b81596060527f04c60f013196b55a72e324986492f7fb42bf9a29dc1eab9f3600576e609908386080527f01de910256aa0b0cf620ad54825cea02f2a010466e03f48525a844480ce7ca2b60a0527f12bd4e9e7da40cb226005e886d4157519c785583ee0b628a7e170afca0040a8360c0527f2af1146a5a0a77a33db10bb29c0e88c2f129f12da3e337e07207adc8fe35fd9360e0527f18d9d93d2709144afd90541edb4c76af2e1dc914e7b798802dbec728e8545e8e610100527f0f6c1fc929b35d345b04e7311bd92a7c4cb484f45a4a2de21d822b646ec56bb2610120527f197f6a2343a24edf4f5ca3b3bb758accb273d4d73665d6fa3162b3aa91641baf610140527f167a452ec75749fa735a9fbb78d97befc3f7728664c4addcb0685ab2f56ee7846101605260206000610180600060ec60087ffd27c6ba6a708c14c70af9ba56fa769590455ac5d595eb467381738bd373d77df2600055600051600155", "nonce": "0x0", "storage": {} }, "0xC192f888ADA47142Ef2c856FC2C35197eea9E718": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xc14a8497cfed2168f05952f5437042184f962496ae2ad8f389cf588ae6ae5426", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f010ecc09792089d18d4479db8993c8fcdb89a002902be5ece3271bd6659d7e0b6000527f044972c01a9d6ba28efc73430f44409753c29ddbae5bff87273015f602ab1ce46020527f05843ae5b1feef147e98cfc86520ffba73ac7d193619ecffbebcb43a646bb8ce6040527fa1b37d411bf6aef0bf6fc51999378760024b9887c33d3bb81a68d3c9b75081706060527f9560b0ce42d34e540905f397216d5c5db68e507e5f426d697153eca14de27d006080527fec577da7b3b854936beb95a33eed744afad1634bb7caf1367891d297cbc7c0ed60a0526040600060c06000600a7fb3e4b6e12f51d93384e52aedcde8fdb6b014c0a3d95f3ded6e7f0d2b57dbef4efa600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x60006000526000602052600060405260006060526020600060806000600161d14ff46000556000516001557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f7a716c6c3afadd1671084c199b249ab67cb13b24bda9e286436fa18f7864e4976040527f10fae069ce12132048de75c2026c733caaf588c455a968b3651f7c228fa44b246060526020600060806000600162010699fa6002556000516003557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f99f4746ad5cf85f771993c0fd69d90ba6aff84fd3b54bbfaf5f37452d1b728976040527f1b8f04ef96c64881c8e59ba85d32c031b8596e1d8902abdb28efa35741bdd6a960605260206000608060006000600161c852f16004556000516005557ff27665304201615ebfd77f43b648a3dcfafff868a7cdb9aeffd48ec1e264856c6000527f64bdcb002895982b9ce61851c1432eb49a3950047c2d7ffec0cbef0c1e64391c6020527f183664ca17e24e37d11872d0c0598d15bd9ef3b7795ccfac411d31c772a67cea6040527fffffbb016c07414c332e7c980d032465d78ecda7783ba73789fcf5d2d4d9c0c56060526020600060806000600162011c5ef46006556000516007557f41ba54f83d2c0d9b4f38d9d9d3ca20379b17295a7086a01b2abe79a8836e7e186000527f51b34b41f839df524328d27001af78a2278758e6ac46b9e370472fd52ae78ce26020527f0916b5e6f73c3cda7ba0fd79206f5dcaf3f2ac62da7223f3da4d316e6c31426a6040527fa7360ef9b3f7448986a48fdc1eb2f8d1739b2dbf1e02dbc629f01ddb0a8f5d0d60605260206000608060006001620185fcf46008556000516009557f4537e59187daada0452406912ad285677796e5f3343eaf3f6a8cc62d8da6092f6000527f0b256a3b254f8a868901f48311a481702c817405e994b48ddfad842d4058071b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f114edb3d78635682a891fa57035b3411904f8a3f346d440faf7534c7e6077ed2606052602060006080600060006001620162ccf1600a55600051600b556000600052601b60205260016040526001606052602060006080600060016001620160faf1600c55600051600d55600060005260006020526000604052600060605260206000608060006000600161f04af2600e55600051600f557fc6dc4bda4074f5f3b4e12522a9a0223053dab048a7d424e88ee966270a22eb4c6000527f94dc6447ffd64c131b25e7319daae0f199fa9166236b1548f969de00aa09641d6020527fa407f508e892c43f0dd3ac2cc0dddbd939d39bb6faba6e498fe6e97cef5be3196040527f5d615f63e658f52f872d2b7bbb4bcbdbae0b4c3df2a73bee519578b185d3e58e6060526020600060806000600160016153bff26010556000516011557f33d5feefc5519ec25cc0100957b7608d3665a475d3783bdb88ba5b53908dae916000527f36812bb46b76453c52d59b88b683c4c28ab62ee6a35e4433ad3a054d81d9971b60205260006040527fb1375053bcc1d5d98acd0f6ed39352aa4c0956210280d87cb01ff69e265234476060526020600060806000600060016201352df26012556000516013557fdce6a42b5553622247140cde69633c8b457fa610f13d087cd48fb82e2995b1a66000527ffdb503ac2d6d53bd6a5a40ed90c1c40c1e41a5486ec04ccd5f0ea21b3ef59c1c6020527fbef9c5fd0a2414d203c03893359266c7c0b935596670b0f03c9c2d71bc58a6376040527fffff827136bbf05cf1256f0c6dcc1d55f964e1e8dc8eac450b56370ed6b7c3e660605260206000608060006001600161bc37f26014556000516015557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f6eb702a6332e56b41cc0cd5235b32b1ff7c6cb9d486e2b3216f08a77433033f96040527f572979406e827f3ef2b31fc2678f1f6c7b89605ddea9106fa302fda7af29095c6060526020600060806000600160016201596df16016556000516017557fd2d2ddc40c9eba073cf7dc252b24d4b859faf5f4d76c484030bd7442f773dc9b6000527f42ceb9bfd0c82e953f894afeb9fa4bac618ac96fbcb6ad0ceb923912acfe281b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fcf55bdbc0e2471363b3ff29e3c95b4fb79c962bfddcdc25fd7687dc28ece8edc606052602060006080600060016201452cfa6018556000516019556000600052601b602052600160405260016060526020600060806000600060016201245ff1601a55600051601b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fd47dd3c1d041a555aca1b52f7198fb903eb030222fa613eef67ba627fa0640a76040527f7b5642d919eeed48663cc5f5af3c554069729e2cff8be177adf994f65f722fa560605260206000608060006000600162013c1ef1601c55600051601d557f563ac94508886a144c2c03279382fbd9ecbc8710b0527dedee83332fbaa1df176000527f08433182194af83c622691218fbe4760f097cb4d9bffe06d3db15b921eaf191d6020527f45dd3caa2bbdf31bc21b70e30dab5617e2062864ace8d7b2b0d783b08bd3274e6040527fb047a3a77f908c13d37b2763331b7a52fdbc0780d8e3b53cfa1b7df03c4f072060605260206000608060006001611793f4601e55600051601f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f743bc6098efdaf75f878572b65040cf9459e05d875e65eb140592f6a5e82e6ab6040527f765e9112299a4b18d31198eca89311fcbabc0d5b238be6f688a496e7751ef882606052602060006080600060006001615560f26020556000516021557f2e098924832cc1e3e61f37e39c0e5865e5060ed0268aeabf381558565149cf606000527f30ca5d41c93b865e912445e13e0113cbfbc76d48a59e7ca00ea304f6c1d63e1c6020527f9cb92db99c342a7a4d550f5e732dc30201822319a7aa4ee4f599c5c648bc66d76040527fffff0164291505107e496abdb5738a5cd089195b547afb043b09909da06cb13760605260206000608060006000600162014ad8f26022556000516023557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fd61240180ee4ba2ac39064feba53f2f5655a3555f1ad982b68f24d46fb0abcd76040527f2833151b144a0411b05c2904e358f54bc7dcb1f23ccff4cfaa2913ec1c5fff376060526020600060806000600160016182ccf16024556000516025557fa8ad052dc706ed8513a5e200da416e7230339f1417edbc36810e6390887621af6000527f33184a5cf1dacc9891af332af34024f1aa98ba82751572cd1ea2a00ee2a84b1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f16a0fae6f494f63f176aab5f15d2b09c5da5fe43f6650c406d1432b5f5786ccb6060526020600060806000600162013a8af46026556000516027556000600052601b602052600160405260016060526020600060806000600160016201829ff2602855600051602955600060005260006020526000604052600060605260206000608060006000600162015b6df2602a55600051602b557e5013d7a5fe09b36373406442599663a125ad3f4a11bd9780c149f1f83827ff6000527fab11953158f950c085665e576ccba0a135e0ff7acf5b87417f0237b0a5d61c1d6020527f4480cc59fa0a1b3ade81cac1ea3e8a596b4966086e72948923348d7aacc52ce56040527f91a72e339775f3bc04cc1233063435de168690521311f42fe25ac55e9f4001ac60605260206000608060006001620156a9f4602c55600051602d557fac6eaac38cc30405f1571eefb890b4a4ec94ae45782d8107158c7b4f25ea8f726000527f2717660cf7c0a7a6d80ee4adc0158d9550deecf7744d959605c3754f9f9e191b60205260006040527f299f28af54efce351b5d16681e5bdd6e58427c9e0c031986d8828f9ec078ff8c60605260206000608060006001600161b3e5f2602e55600051602f557f7b931c95a91a9b1adfffe8d278110e6894ba93fd1e6300cffe0e37ba6952efc36000527f8ed55391f54fb886f4598d4d0ae7ed1fea86797718916b9c63c41fe0890aaa1c6020527fac275c5d8acc7f4bf159626eff9b88d082ef2cb85970ce49cc51bb25685c28f86040527fffff3e35ccf1ff364dd43fb8c80a5b24dc9233de11caf201c065570ad28934c060605260206000608060006001600162011234f2603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x6c10000000000000000000000000197f82000000000000000000000000000000000000000000000000000000000000007702ffffffffffffffffffffffffffffffffff00000003000007077702ffffffffffffffffffffffffffffffffff0000000300006780000000000000011b1a7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a006801000000000000000076013590cab83b779e708b533b0eef3561483ddeefc841f59009127cc9700000000000000000023f00c00014ff00000000000000002230080567d02126262626262616137d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007bc9700000000000000000023f00c00014ff002c0000000000002231089009677fffffffffffffff7702ffffffffffffffffffffffffffffffffff000000030000690100000000000000000090089010900b60b2557702ffffffffffffffffffffffffffffffffff2000000000006001901876013590cab83b779e708b533b0eef3561483ddeefc841f57f7effffff8000000000000000000000000000000000000000d900000000000001900b1c7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60057ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000090080460b35567d0212626262626266a100000000000000000000090167f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a5717676767676767676760000007676767676761c1160b4557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7f7effffff8000000000000000000000000002000044000000000000000000000190066c100000000000000000000000007702ffffffffffffffffffffffffffffffffff200000000000900390077f80000000000000000000000000000000000000000000000000000000000000016f800000000000000000000000000000000660b555678000000000000000774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a1d901c7f80000000000000000000000000000000000000000000000000000000000000027f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901390177ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd90186101117f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd68066aa0a5319bcf5cb4090760b65569100000000000000000006000900460b75576013590cab83b779e708b533b0eef3561483ddeefc841f5680100000000000000009010900260b855760100000000ffffffffffffffff0000000000002e0000007f820000000000000000000000000000000000000000000000000000000000000090176901000000000000000000671fffffffffffffff900160b95519691000000000000000000076013590cab83b779e708b533b0eef3561483ddeefc841f507900468066aa0a5319bcf5cb46801fffffffffffffffe1290177702ffffffffffffffffffffffffffffffffff00000003000060001c6f121212121212121212121212121212127f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a5777effffff800000007effffff800000008000ff00000100009008901260ba5571767676767676767676000000767676767676712000110000000d0a300e750a000000090a0a90101b677fffffffffffffff7f8000000000000001800000000000000080000000000000008000000000000000678000000000000000900990037f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6d010000000000000000000000000090109012671fffffffffffffff6a10000000000000000000001712651ce97e1ab91a7f7effffff8000000000000000000000000000000000000000d90000000000000190180676fffff716b61616160b0b0b2b0b230b000008010d0a2b0060070360bb557ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007176767676767600000000007600000076000090051469100000000000000000006810000000000000000010901d7f8200000000000000000000000000000000000000000000000000000000000000777effffff800000007effffff800000008000ff000001000090109016760fffc000000000000767676240000000000002b05760477f77676767676760000000000000001002e000000000000040000000e0000000001c60bc557f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff76013590cab83b779e708b533b0eef3561483ddeefc841f59001901d6f1212121212121212121212121212121276fffff716b61616160b0b0b2b0b230b000008010d0a2b001060017a01090000000000000000000000000000000000000000000000000068100000000000000000091a9015900467ffffffffffffffff68478392145435897052900a7f80000000000000000000000000000000000000000000000000000000000000027f7effffff800000000000000000000000000200004400000000000000000000016b10000000000000000000000008901690176a01000000000000000000006b01000000000000000000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b0009177e40000000fd000000db0000000000000000000040000000fd000000db0000d37702ffffffffffffffffffffffffffffffffff20000000000090079019027f77676767676760000000000000001002e000000000000040000000e00000000069100000000000000000000a901b60bd5576013590cab83b779e708b533b0eef3561483ddeefc841f5156d01000000000000000000000000006f80000000000000000000000000000001901d60be557176767676767676767600000076767676767667d021262626262626900307197176767676767676767600000076767676767667700000000000000090030415637fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9001167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f800000000000000000000000000000011d04156f800000000000000000000000000000016101111060bf5567d021262626262626637fffffff0790147ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb7e40000000fd000000db0000000000000000000040000000fd000000db0000019012901060c05568232323232323232323197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f8000000000000000000000000000000000000000000000000000000000000000900190047fffffffffffffffff7effffff800000007effffff800000008000ff0000010000690100000000000000000010900560c1556801fffffffffffffffe7f77676767676760000000000000001002e000000000000040000000e000000000901a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb760fffc000000000000767676240000000000002b0576047901360c255156101117f40000000fd000000db000000000000000000000000000000000000000000000190036d01000000000000000000000000007d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf96f8000000000000000000000000000000009060a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff7effffff800000007effffff800000008000ff0000010000677fffffffffffffff08047ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb06910000000000000000000901490187e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100063800000001613157176767676767600000000007600000076000067700000000000000090136f80000000000000000000000000000000717676767676767676760000007676767676767bc9700000000000000000023f00c00014ff002c00000000000022310890081b90137f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f8000000000000000000000000000000000000000000000000000000000000000901d900b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9007901c717676767676767676760000007676767676767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb901660c3557f80000000000000000000000000000000000000000000000000000000000000026b010000000000000000000000900a03157f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1d1460c4557ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007f62d8fffffffffffffffffffffffffffffc18000000000000000000ca0000000110671fffffffffffffff777effffff8000000000000000000000000000000000008001900216684783921454358970526c010000000000000000000000009012027f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000017e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00030b7f800000000000000000000000000000000000000000000000000000000000000068100000000000000000900160c55515760100000000ffffffffffffffff0000000000002e00000076fffff716b61616160b0b0b2b0b230b000008010d0a2b00901d90037806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901090057e40000000fd000000db0000000000000000000040000000fd000000db0000016f80000000000000010000000000000000169015017e40000000fd000000db0000000000000000000040000000fd000000db0000d37f80000000000000018000000000000000800000000000000080000000000000009016176780000000000000006801fffffffffffffffe901867fffffffffffffffe774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a6c1000000000000000000000000008900b0b7f7effffff800000000000000000000000000200004400000000000000000000017cc9700000000000000000023f00c00014ff0000000000000000223008051d9002777effffff800000000000000000000000000000000000800169100000000000000000001612156801fffffffffffffffe691000000000000000000002147f77676767676760000000000000001002e000000000000040000000e000000000691000000000000000000005017f800000000000000000000000000000000000000000000000000000000000000068478392145435897052021a67ffffffffffffffff680100000000000000000360c65560057ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb09009027f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff0000016380000001900660c755677000000000000000690100000000000000000090171760c8557f8000000000000001800000000000000080000000000000008000000000000000682323232323232323231763800000007f800000000000000000000000000000000000000000000000000000000000000090140767d021262626262626760fffc000000000000767676240000000000002b05760476823232323232323232308036101116f80000000000000010000000000000000778200000000000000fe000004000000ffff000000fffff70008901067ffffffffffffffff600090031467b368d219438b7f3f7f800000000000000000000000000000000000000000000000000000000000000090121b777effffff8000000000000000000000000000000000008001778200000000000000fe000004000000ffff000000fffff7000690017e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0068478392145435897052901260c9557f40000000fd000000db00000000000000000000000000000000000000000000017e1f0000000000000000000000000000002000000001000000000000000000001719016801fffffffffffffffe67b368d219438b7f3f0b03157d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf96770000000000000006f8000000000000000000000000000000009056f800000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe69100000000000000000000860006000f3", "nonce": "0x0", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000ca": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x00000000000000000000000000000000000000000000000000000000000000cc": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x00000000000000000000000000000000000000000000000000000000000000cd": "0x0000000000000000000000000000000000000000000000000000000000000003" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xd5A8353a487e0749707fee138b741aeb2061C14C": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x4b5f705c5993deaa35a6d4e991c09c52f1d54151048b241126aa7c780cd2723d", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556003496002554a6003556002600455", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x61026260005260246020526102626040527ff1fec7959374ce5d274bb0a066fd25d6a7a0eda5d66247e90611eea900d93dd66060527f3261bf7f4a1354ec9c06574626a9f622a4b463d8547013098dcafb926e4736a46080527f2a2f602320d89b1d7330c8afdb044737104b3c1df434e20cecdfe27fff1d1f2760a0527f1ecad556a17a8a7bd6e68d5a04868ada5e17684e3f260e2fc8142dee9b3812e660c0527ff1f6436c628b04937be67aaf3df114fba877dcf697e789ef8f3e0d65da018b6e60e0527f5134802f76d89e54193a1efd277cb40b2fef4819b6c71803b540d35a5736fa07610100527fb82884b8ee0bdd6d160bb37981688eaf2997550bd816f22d790b68f6a613f115610120527f4b0cfb396fcd8d20c873179465d91a926b35a127da6851106e93a1c95d306531610140527f2cf297554aea5d6a9c03a2397f17e3ed672af0c83dd0250acceb68e7297b7704610160527f64f27ad759e258d9021631c63ecdc8e4586ce55237f3a4107c35975cc158def1610180527f24b24b5973e1f540c0f4120009a97e64b8184beff858d50d4ad2ffad3951ddc06101a0527f819c0f43d13523fa4ff0d19e2125a05c420517eca779beaa2a7cd38184210c476101c0527fad10b5f2259319e47bd25046de0a0b2affb1610fa4b7e3750143e9aa35c44f726101e0527f9f0ec1800e9fdc12fac4dbfeb087c50e073b95c24b68419e31aade25653ba836610200527f2aa1362bdf0f50a44625a6f6cf94471ec9e37e1362f1ae6c54bd73bc48d175f1610220527f7432b4e648de16c9ff2ccd7d0c46bde6d99f0202b94ad09effb10a3e03e82c1a610240527ffc3c493d3e7658f8de59135f4183cac601e3f940b0f269625ff68a106420ff66610260527f0581e520bada0d8aea39b5df5cc1580f3743fcf4367944cc3a777f8687c3dc6b610280527ff2d859b0ae0467db1581a1825ea8f32b041b6fb47b084986f8aa7add00e69b496102a0527f8008a31bb9d8901fdc563425ed15567fa92f3f2caac4a95b4f69986861257b3e6102c0527fa6535c9d5c6eb1fd9d1af1ffa7d9a17daff3d9f390b94cdb30adf8856754b1406102e0527f7ce7a6bbb1642d6d4497b7f29914c5ce41da9915e5b1ffc8b418226d175c7478610300527f070aa85789733ac4df0330e4dc3359ce3cfd092c7ca52fb4e7329ba9478d0a49610320527fb31b0f71a8f651c80427c925f7866f5eb09570a1c0c916bd287824b01a30a76b610340527f4596e9e1d193313e1f1404d9ce3b9f0426230c24927405a48bf4adff74e76fde610360527faeb92923019d16f8790ccc7b71e92b68924f64798ef2a9208548c15e21b4086c610380527fb99ab67cd7c8af790ab5356fe5a0e28d5df8c51dc22b83ccb2711f30965f1e616103a0527f2479fc94a5451dabd9828512b8b40f67ee0b6d8e7eb1bd866992cb058930d5116103c0527f092a2183f2c6ef97cfde4785cc1c896c8bd768bc0a870ffa104345dd7a38aa216103e0527ffb91f752acdcf005d60392fce991749582688ef75179c1e5bc302e3474fa092f610400527ff01bf4a1ca9ec98b16516dd639870c7da21822e753f618566bd4116407bfa814610420527e7b1078ef968ef0d58cefb9442b9f72a949f123d74fe9cbfbeba9d1ebaa50e9610440527fadf61176f5482726f72e521273f004ff47ca791a2d36f46ad735d8c5daa7522f610460527f6a8c8353f541becd5b975007a0cedebcf07546cadb88f89c3611c4532159b0a2610480527f6fd6ca54878a97d886a2496d88a97f39a91ed2ea43b2e287949f111b94e2bf116104a0527fa52821a5b62778a1f910b7dd380e0d35f460a71b9ea7b63e4f2b751af2911e766104c0527fa8680a459d4dc3edeb3b23251632ae8a41949552e870913ce7de2ecfccde155d6104e0527ffe15c24c187667c8910e993fb1d04570b7e0d9ac330b1a0ea68beeb755e9d7ae610500527f3d2c6bb3e5ec048336342fa09dbcffd6e3bc9db43d8d273c618328d4e312dc3f6105205260eb6105405360686105415360766105425360366105435360306105445360df6105455360ab6105465360286105475361026260006105486000600060056245d72df25a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e0516008556101005160095561012051600a5561014051600b5561016051600c5561018051600d556101a051600e556101c051600f556101e05160105561020051601155610220516012556102405160135561026051601455601c6000526003602052600b6040527fae8cb809085836c6461fd847d701b558c26c51eb89ded0e4ff921ede82f27af66060526060608053600760815360456082536058608353609460845360806085536072608653606560875360c3608853602f608953600b6000608a6000600060056102bcf25a01601555600051601655609560005261046560205260956040527f51e308cca5d5ac57dbe129b458780de43b42d08aa050668a10113010a49dc6f66060527fd82d6601a2baecac57f0e1c15c28b44dabcd90369f1a2f8cd1b1c791b5e41a776080527f7b30038e72372e57653bbd08827dc52e9d409e9c3f856cf957e3aa07935efd3f60a0527f607b55147384e53c54b16ad07bb4f2a4552a5ef66aac08876aa63adcd96fd73360c0527f98ea449950d7e2b1211249ba3a5497695f288c7cfd000000000000000000000060e05260006101005260006101205260006101405260006101605260006101805260006101a05260006101c05260006101e05260006102005260006102205260006102405260006102605260006102805260006102a05260006102c05260006102e05260006103005260006103205260006103405260006103605260006103805260006103a05260006103c05260006103e05260006104005260006104205260006104405260006104605260006104805260006104a05260006104c05260006104e0526000610500526000610520526601864f62290a6d610540527f6e280af90f6c1ab0488405bda8fc417b0f391199fd48342e4336d01c8de18952610560527f5b8ad7f1b5b421f9e73ee1e6fbd2dcac4422fe7a7912ab495c50857aa41d927a610580527fd21c9732633fdfc61ce2b92bb93b1a8138c99bf822c316fdf2a767ec2f111cdd6105a0527f6841a331d9ba76ecdac0bc037be9690a436647ea5f0a066ec929d3f0d103d1596105c05260696105e053604a6105e153607d6105e25360106105e35360596105e45360886105e553605e6105e65360986105e753606b6105e85360716105e953603f6105ea5360fa6105eb5360056105ec53609e6105ed53602f6105ee53609560006105ef600060056301060193f45a01601755600051601855602051601955604051601a55606051601b55608051601c55", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x40000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x20000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x2d", "from": "0xd5A8353a487e0749707fee138b741aeb2061C14C", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x0" }, { "data": "0x", "from": "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x0" }, { "data": "0xd62ca02e7d6738996d60a387da91a74c438dff99e2e30450d66a7985d5c657d0e2", "from": "0x535863dA03bc1834eeA10eeab8FF498565F33f2d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x62f3" }, { "data": "0xa2c35d7d43a94d59ac5163860c03d7c78e1d76a7ba7c31a46b", "from": "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0xfec4" }, { "data": "0xf22e90978887563e1316e37d58f9c440c5ff3dad0958ad7a135ac3e2e9138b5341c1194761f2bd698fdc91b7058e657af5941ff7aa1b8890e51ed18677d541eca021c6efe2762bbf0ee6baf42c741a1134ea12", "from": "0xC192f888ADA47142Ef2c856FC2C35197eea9E718", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0x6c64" }, { "data": "0x8ad4c41cac6d56fbbf1d0d0bf5d6", "from": "0xd5A8353a487e0749707fee138b741aeb2061C14C", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0xe27363" }, { "data": "0x5214c25b6a7f0ecedc0b5a4aabac02ae1235d3503dfe2b50df5ec8e1dfe00b1785cf0f6c000eb9413b0e2929ee87f64c7044853eeed72caba5df53681e4e7b1344ad1f0d79801b94464afb3b080b99953ee906", "from": "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0xcf8207" }, { "blobVersionedHashes": [ "0x01247b3190ad6b61d69c66ac67a278508b7cc80b63a7d3f183965818f46d71c2", "0x012cad5172a80ba067a9836349573f8c09a6dc870eb9933ed445787556a4ea59", "0x01b7b97c0fd264b8559089187f1e9c8b736854d626379b9db34473fd96d3bce3", "0x011907322c3d5ec3b09fa61dcc48f7a0eb8750e9b3cb911a338f126f1a54d2b6", "0x0159e0a1867bb093a1ed6beb9a7e1aa843a926a8c77ee604899bbea1222ba448", "0x011eb4c2246fec736cda7b5e62a4f5eded1e6b4948632ed38b7da929c1ca83e5" ], "data": "0x87d848", "from": "0x535863dA03bc1834eeA10eeab8FF498565F33f2d", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 1, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0xd317cdd0be355269b7c5b51cd37d519950d774cb5598ffc8e74bca40d0c243a3b83a00612a30fc5faa80722094f38c6002904e1307cddc4e8f191e47191b9584c28bd7561a80b0f4c91be21f4556640d3dd85033038ec2c7a52d951b93c283e4dec10482186d3a732a269deb66abb6d8f560df063baa4ccf74baf3dd0f579b387985541ee3f0427ee3c3c3c229ccd82da43ca03e3561da96eb66c7e983d6efdfc48583998abe381e796863f666bf1a6f99e019a96ca80b8b12415b811f0201f051e6ba702173beca86251fd19b5f172e27d977a730e6986543989a58e39fae4ed6a75a59b9ae505890b2a195001704fab5a0b4af848c04862be48bdd5c82babf9e56b9adff9fa642c762f64b5536cacb260a2615d7b852dc7fc807b1d67a0e54d82557f5d39dbf3c8ef14deee959d261321fc9c7ca64dd05ef869cdfbedc19ac49fa8a92725b1b180a57d1c777e34f583f14215a57c7d33f4b3fa04c81f7cfea48c64ce135aed55b3c23ec58c8bdac489b8f38c6631cfe594b63", "from": "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0xa4" }, { "data": "0x", "from": "0xC192f888ADA47142Ef2c856FC2C35197eea9E718", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x0" }, { "data": "0x23c2eec37c11cce00a8f704284073089267e7f0bb5b5258035f584b6cd8e3dc2f8c9196e4c4194faf6d4fd4db3", "from": "0xd5A8353a487e0749707fee138b741aeb2061C14C", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0xd0" }, { "data": "0x061997d49b5528665dbc3d800ae7d897ac84137fa32000299fdb0c9777ebc080a9aed590d6", "from": "0x52439296aa999dbCF01bA02E03F5d59F0AE8Ca46", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0x85689d" }, { "data": "0xcde33a3fa310af41e8a2fc059de3fc0222e0982551d5d80fb8bc2e5f3e34b4f4fe3a8201a9d47b414357fd2db6817eca4d6b81504f6874f82ecd62e6720a0fc7b39d3a4201b024b7ba304e8e7c765fffed771999cc53fd9c93cad3", "from": "0x535863dA03bc1834eeA10eeab8FF498565F33f2d", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0xf45bc" }, { "data": "0x88a6f05cf67bbdcc10c4826a7f3dc1a835777e9b99148f860aaa0f4e3403db9d05c9824e2afad1dfff78ca58c8eb57b3570d472049fecb75495effc83061f8561fcdb6a395e35a467359fecab218", "from": "0x1DEF26E2A310e3984210Bd9d4D67E19d721043A1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x6b2d3b" }, { "authorizationList": [ { "address": "0x88f9b82462f6c4bf4a0fb15e5c3971559a316e7f", "chainId": "0x0", "nonce": "0x0", "r": "0xbcad8bdc514baf5efab74757cec1366ad303cb086e4fc286650a499aa2c51979", "s": "0x291e47131cefbca9f42434f163e1be4d6fec29160ce5f1ed716b3735e5b01e7f", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f9", "chainId": "0x0", "nonce": "0x0", "r": "0x71a82efb37c3ecda82184a469fe3095e61f879e9cd6cd5cc57c8db85623be99d", "s": "0x62b8658048dc674f566db07998c96909310096f5e90788af763e6b3034e78387", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000010", "chainId": "0x0", "nonce": "0x0", "r": "0xcabfcca10b4052db14893fc01934f4d9ce6a4a06984a8ade1fa538783c89bd7f", "s": "0x1768f53ad91b153d1340e0e9b1b2cbac0045f3de0fdfc05a108aad36c033091b", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x0", "nonce": "0x0", "r": "0x36a9141d12a6a5ac448d602b8aef8cad98744204d15197dc9f78e501e792d07e", "s": "0x32e21e07bd4dfbe1a4f009a32d9e1e69006f290993324c31787e5f110a42e115", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000002", "chainId": "0x0", "nonce": "0x1", "r": "0xd66534866f9f76bc71377f381e6a57df9e7ced92cb350241c0f48b5c776848a8", "s": "0x4c40ed83b35061e1a7c94909aff2b00ac4b936150ad4de8a3ae3b3e498be0635", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f1", "chainId": "0x0", "nonce": "0x0", "r": "0x64aa96c5157c207876e42787e9dcdb83fea43c95b3264a41a88f5e1d9d4c99ea", "s": "0x49d207f4228fd08c0b2be3fe77d341fd466ddb4b2cee0426903f608f0ff881eb", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000003", "chainId": "0x0", "nonce": "0x1", "r": "0x7b740e7556488f71d67851fa3b750ed08dc672413d8bc85a31aa10d8b3d41e14", "s": "0x508ba9c3d39cd3061ec7db5533f01342abd201dc964487baa4eba8ab4394d02c", "v": "0x0" } ], "data": "0x68f591a70cb6fefad1b2aa3c181edb3b87c7fecc8376afb6719b5c0801ed65920341fc1cab010d3695f9151974e40051a84371823d7b65f1", "from": "0x862B38c425EF5544d0127449A12c89C46dd3E050", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x000000000000000000000000000000000000000F", "type": "0x4", "value": "0x5192a0" }, { "data": "0x00", "from": "0x0233362c058b2fCc8093841B1073A90D673E7F12", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x88f9B82462f6C4bf4a0Fb15e5c3971559a316e7f", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xdd95902a4746dbf0cb38778983b6a5061c9784572e18492bab91b69a04315a29", "s": "0x115d234e528f56cac392831ef418acb2db384b9b92749f4174e4e2ca2b2878a3", "v": "0x0" } ], "data": "0x68f591a70cb6fefad1b2aa3c181edb3b87c7fecc8376afb6719b5c0801ed65920341fc1cab010d3695f9151974e40051a84371823d7b65f1", "from": "0x79cca006f0792Bf40a6d4E011c2884eD862A52DF", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x000000000000000000000000000000000000000F", "type": "0x4", "value": "0x5192a0" } ], "version": "2.0" } ================================================ FILE: src/cli/tests/vectors/fuzzer_test_1.json ================================================ { "accounts": { "0x0000000000000000000000000000000000000010": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x00000000000000000000000000000000000000f7": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x0b530C4203F212318CE214ae2F1089d2478cb56c": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x157cbf9b700eef449fabd47069fdbe505932ef1adad4838332992036780813d3", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f19caff34fc5d41317e29d5e9f4f6d82a6000527fe2e0acd91783ca4e41ad927047dd549ad45b2219aa5422dd2c26b3399e84c82e6020527101000d80549ce27f0e5d07c4d9e259b070936040527f11e50838d9b10616817a4190ff6df2638128184b156a81f8c518e6baf19227a16060527a01000000000000000000001246341896a0554751d9a2bf3af6980a6080527ff0a8a04a2ccbd323e6e2346cc2be29847a6706d90abd298ec45e7744d4ef260860a0526f03ade5bba92764a5b115252fb5cc366c60c0527f880d73ac87aa9125199460ab8cab072f8b31ac20d28109b5e243f61d880fd4f660e05260806000610100600060d9600b7f6696b9800943dc76700342da15183f39d04923e24aa510de8c23d73c99cae7dcf26000556000516001556020516002556040516003556060516004556f167215b1682993653beaeff0004b14ca6000527fb88e8f2ceae397ab24a56be8ca4b3d6e2274886602ccd162cf64e110fa4a52b760205275040000000000063cf200b79ed865de1688cdf2b3b5236040527f55f49c08a47c5915a84548a59fc200e5ba430068bb0d1935341a6e634aeb2ded6060527fa9306a65a0e604373a8cb4339d55eb0b53fdff55b9379d1133f18c62d14c6f2e6080526f07b653e774e775f620ddf0e6b50fc9dd60a0527f53953e3cfd57d6616abde936c03f1c94b8c31dae7796cb3553212f26960c012160c0526f07aeb25d937d3d5eccbba85393bac1ea60e0527f5b70af1ae11a228b368f5c67f3c038f40be90299f4118a3dbd31c82b8d909840610100527fc2b9d98f02a25efa9fa8860fa9f80a43c73460a0d20e2113bec1c1fd7bf1618d610120526f02701b17eac732f65624ea3cd8be10e4610140527f70a5c5c3a3d6c10d8e4b45dc00bdc0a5e47f1aca6dcdbfb0e121775d61aa5226610160526f042e9f71c007d9db64ebb918fab442c7610180527f1dbe92ebca595a268909659e8db809e1617398e16e62c5f27cbf81d1c5d19ce76101a0527fc55655c9c78415954c172a18aa445dec340dc63eb0e866afdb0a25bdf1244c286101c052608060006101e06000600c7fcfdafdcbe09640f2464567b36afea525ec5de9358dd848c0b53b421a24139393f460055560005160065560205160075560405160085560605160095560006000526000602052600060405260006060526000608052600060a052600060c052600060e0526f06dd8919fb14bfdfab0f526a1f5239b6610100527f0b450443de757b82dd27fd61c3cb9a71e0573f50c339192ae937a298d2fda166610120526f04eda0faed5992fbedf736c817215d2a610140527f061ab4611c80704a98232c964308c34a42eadf0376a9a6e7a3d70ed862ac5b58610160526f14abc9f2f81080bd0071687392261e83610180527f604dd562c7c618761e4853b134fab49f395d4cfdc10a7779e1ee640d1f87af366101a0526f0621325b4b3f4d5b280989cba49a40446101c0527f8cbc5e4e87ea344b0a59a59cbd6c3f485ffc4f24fc4c0358a89e08e1cffd70006101e05261010060006102006000600d7f7524c013a9951987355d80fe3ac319676bf5d5135301c343fd3d5b79d46da74df4600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f17921415f9ff8bb3fe699b6495fe9bb16000527f6a142ab1e5e402bf55aefa40069d0c51592ce1586eaac5ffc39c1b63b3d0ba7f6020526f0e0aa5850d480a3d8cd9d5fa6f1d24856040527f3d0e7f46925e64fdaf666a9e5141aafcaed131e79d8261666dc8b142122e38126060526f0da917cc0d444ff2df50086d85e9b9576080527f6535e60c11eeafa970e381f95da3ed077e0cd30753342840d2db4d489d475dbe60a0526f0f2d7f29490255daba12b39022dcb6c360c0527fc4393dcbf2c5473d49f853993a9a833a2749a590356dfa608666ccd55c0cd04160e0527f0f83fc7c6c0587c4b87d800c8ef57ce037f9a317cbc6cddd33f9c725dc0d268361010052610100600061012060006000600e7fc4895dcd70512f399cd4a6ab3b9a94e6bce2e677769bf3fc66c3287bebbd89eff260135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f16e9a53c8298651e6d39e7d5b323284c6000527f10244f68ae94dd48bc745fe049e67d70681df88b199a2a2ba8f4ed3ff9e6e1d56020526f08e10f8f043e399f7f98e3a77cf2ed3d6040527f8f4928ca60da534ea929dd155350b5ea46f3f9e561a2b4d210c71b56e3e3c8f06060526f07d50b4d03ba978330fc267892bb168d6080527f746e3109a61583a4a2af18673590c08d1209336e235c8b113f81645a1d0fb7d960a0526eda68b12ee5ae79581f8c5ecf4eee4560c0527f62e30c2043d9336045d9594171a87f85caf11cdce1d305def393e6913110095660e0526f174988222802e2e5c94a516878b8c6db610100527fa56b52a69d70336ae79118f527eb303d2bf1c73c98a839485f5c493b9e738149610120526f0ceb05b1a555e9fb31fdf86cccad49d6610140527f4ce60cd5739c269a1a32b33d0c2ced561bbd35d9f2249edb3b7eb4b788ac8f83610160526f02ac71c4092cb44485e40bb9aba9c9d3610180527f443a137d91357ac2f396c90f00c7108f07e48bea04abc4ce8d31af0f47a2fde26101a0526f0853b2e555c99f7b42203a596493b5536101c0527fbc638d3a9954816a8d1d3a248d75d45df83cdb4362d93ecc3b0ebad969f3ce076101e0526f0e47ed6095014c6bb26aebf873f578d9610200527fba610c5276428f46a65f1eea6a8e69fd917eccbb7df1a06467cf06d59a6e0024610220526f11844e132dce68e4345276947724a03b610240527fdda05c2c6a9c936a9a8775a4b2075b7a6103ce6c2f11a225d13ce265fe55394d610260526f01964a9416e284e459360fa860c89a01610280527f23d65d9a7679e4c9ce0fd8ad33fa07bd6060b60eec7fde88fd73dfca094f94e36102a0526f085b4a9ac88c960ddb422fa88b3568c46102c0527f48604784513f5221eb963855b06bce22bda53affdd70e4b98a0ff40b98beaf676102e0526f15447a27385181684a148242396311f8610300527fc2c01489c6e714f44f14c6bac555c3f09c21f3e1cb8f5a4c9cc667e76bb375a8610320526f187bdee96685d72b15768e87738ac090610340527fce1046af57eb88b9c87977253bfb3fdf10e1e8e8d5eed280766bf6fc3d7b9cd0610360526f024aa2b2f08f0a91260805272dc51051610380527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb86103a0526f13e02b6052719f607dacd3a088274f656103c0527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e6103e0526f0ce5d527727d6e118cc9cdc6da2e351a610400527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801610420527d40000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99610440527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be61046052602060006104806000600f7f7f80628a357d42b11e6fd04a25350afcb2a4ddc960c762759e0edc19d2f2d4fbf4601c55600051601d556f190b5d5db51c6a5368c6fb2aeeeed8fc6000527f55c128be3a72201564946bef2a9190c8a1956d850bf5e72ee546f4d883b6d219602052608060006040600060107f99646682ed7d62087f392cee9340a90c98295fe4038d6b5f2c3e6e457a3870baf4601e55600051601f556020516020556040516021556060516022557d080000000000000000000000000011c2b0d6fb41c389c5d3b1d07553e1896000527f63b36a67f2a0ea76ddc11609088fe22a47fca4dc88ce65fc0209c6918f8b9fd06020526f034cf4436a26bd7f98373de09ce810a36040527f6309d107ead83d7f3c1007b00d58be95a0462264196e81262fb57f47dd18c72060605261010060006080600060c160117f3516f04fd741b0b10a8c7a84cca64e82bed0c8fc4b1c16c0ba6f2fed80e74aeaf260235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x602260b960b760f2609060346021148a990397444a3a18991c5214863c4103788a8c3a3d5ef59a857b357d063e555e5d49771b4a1a476f545c9d6f53156238486c45395c465c7a32a37f72a186041785628280440668f55f7d9a315d166159657a13f35264786b7e427359017c7b5e01086f89547335046e99635b647d5c191b477e7e4830076372f2f1635f5479581a129e66a16a853afa733c58467c335f4777375e630bf0557647776d72480038a0417261f2313772561843a34011795e0588714a823e6da174119b928972a220001c444873033e9b9668a2747506997c435430575b7b889b7f7e49ff67703c8f0774441b0695325e95368971028630335b44fd1450f439808cfd73733b547d1071f51470183d6054180640425e72719177643c7981706f579c7a647a9e4a5d357431046e3d6857069105f35ca0741113415d381d064809010a11a33650644410170846557181107a5b9f815b06a450711c3217118b1268167f56757f1210967f3116f24308523a9c024370465851667f626f50746ffe386c351b3263307d133e7b413f5f1e5489790a6c438343a241017a75a0536780895c469b1379856c6a1793090a3997651e9451f147323b3539a1623d9d967d7f428c345108f157396e708972500339806088556cf33e76a0586836100730067006038354036b398059368d3063168a8c006f3c6a5744331a3539876e520a3801a0a160093d67fd093b82a474023d5a3b567a6c816f30415416475f12308e531449578fa0083b14386c5b4412953155f04a78033f6f1597379d3512607219311c6314804918666c8a138663106dfe5e76126479649c096176698330689a6334469d14611b463f73f17f3ff354f0fd301e58a2868f1c42194386760264446c586e376c6dfd75513003027f6a691a65445c8e5b33a07b93156d02707465956a647a9a61924073050a1d17040437f35b6644587d33036c3511764846a3125114531e564490101c345d4a1c8e48525e0b59756c101993413e35455b6e050b9d986d7618919d905c6f8e605f77553b8204517a3a9b80967c507f126a3e639d587a3f8ff0185b01f36e6a513f195646478d6617a3327d5991471e55983980381119856d3e7848810833348f51696c77851c06343863545c677b006681368f407a571a618d3771116f706f329676195d5940135a907000387a3597756e519109948b96799c7a98677c345e668139171a14579f3f6f43081203553a3901160a0a691643517d0889365ff03542026e795c49549288323119416020553d36805201038675197d0942633684696c7b3c3e634646897f044463093a41546777895c58138f8b427c80639406566f1d84956ff530fd6f60fd399ea23631197f31446c330271973a32a3155c41480351774263325a79178919761744335f143a6a7d50", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000000000000000000000000000000000000000000d", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000c" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x60006000557f60016001556000600255600154506001600355600160045560025450600060056000527f557f604060006000600060047f36b4f1d52647aba45de94939600358e701ebb36020527fabb1600052608a60205360bf60215360d5602253600c602353608d60245360226040527f60255360af60265360d960275360c160285360c260295360c7602a5360f4602b6060527f536060602c536006602d536055602e536060602f5360006030536051603153606080527f606032536007603353605560345360606035536020603653605160375360606060a052603860c053605360c153606060c253600860c353606060c453603960c553605360c653606060c753605560c853606060c953603a60ca53605360cb53606060cc53603b60cd53606060ce53600060cf5360f360d0537f3726516ff6afb368da0d12e86e99748428aed23ee5bf03f75aeaee14cf1bdae460e0527f2b83cb68e5ba2c412b683dd5faa66a07e182f4f59dc70d6b320d6d4181ce0ed7610100527f746be7ca124aa2bca0fe3dc55c6cc8f44a5e1e2930f84f5a822b44303e0f790c610120527f92d2f1690821e731d4cb9203421ee925f00617320c317a8671939e61666fd133610140527fc08586e712d5efc118cba245e33dc78269240ffb3b2250da12cd5a9bd4dfcac3610160527fddae063a1cd1400af8af40c2b53904fb939a812c511af8821453f2e611b782c2610180527f0eb6da4b4c07e1e290339bbe5c64f16c5e2666bc7c96910d55531ba23ac61f256101a0527ffa397670c3a25dd3500af010e3310f878ab850ab7d66ec1ce0ba296ca5f10fac6101c0527f29c5aff225053603b31d5c5418eda6d9b8b8f02daac699980d5aa18a904f62d96101e0527fb18cb29151d86fce51629e9de4ec92ddf705dfdd9e8d1208052e43b32d83bed5610200527fbdc9469bf7f3a5f394770b6c66aed956de7be64f028b96da7538d61f8c502f5e610220527ffeddd512f914664dedf2381aed820bb578fd2d56b27d78a603db69035f6ada3d610240527f305910ad13ce1288194c6761cbfaf9ecc04bbd56752ee34bd47752e247b266e1610260527fdd79a40b36434911a9631444daaec918c08d2bc9d045f336796e760045622282610280527fb7ca6111bc82161339ab1a2959e78f60bdedbe67c284558c7ebe989d80a8d8e96102a0527f0b3c1a4cbebf19e61db29be4bbdb79f49c2b3ebf94d3ac00375a12c51a495a886102c0527fff11f7e91dd2f5a922e585bf4a3ccf4caf00088d8497fdd4d0eeb03e24a07dfb6102e0527fcccb5a1b972bb15393867efc308981ef6a625bc031d835cc0120177360590534610300527f13b8f82231514ae3ea8a19a6dd7537c0808bde918b15ff1fa1b2dda28f9d1792610320527fc1e328a14eb9a03ff7eb9d65af91d83301b67a3914960b7e7963bc10a010c767610340527fbc4d45ba427d312da4c934a47dc632e6dc7c14119e16b4cd1a81dab6a5e1fc4d610360527fbcaba568741eccb9f3310a67e3b0974970dc10a337f3be9a65642293c265367f6103805260d160006000f0604060006102c060e0845af4600955600051600a55602051600b55600c55", "nonce": "0x0", "storage": { "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000010": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x0000000000000000000000000000000000000000000000000000000000000011": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x0000000000000000000000000000000000000000000000000000000000000012": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000014": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000015": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000016": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x0000000000000000000000000000000000000000000000000000000000000017": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x0000000000000000000000000000000000000000000000000000000000000018": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000019": "0x000000000000000000000000000000000000000000000000000000000000000e" } }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7fe1a31e9d6b65985c0db9b672bb6d55b454de1ca89f693b6305eab9d051e63dac6000527f9ceb3fd5b29ea165b971ea736fc32fbad18ff4464bed46f638085a1005fbf5df6020527f1ec47106d4e3c0c6bc569e045db7b6e890d1687ead46da9e515c6e3b9eef31356040527f8fd11b1d99f82e0f419eb7a9ed13736d83391798a157196fb445495b89a675926060527fc531ca15c827b1b596bd1107f362ad6afc0d426a2c951502734e346f2de8dde56080527f79ff9827b2c0534e01787a1b8dd7fe855adc62a47e55a138dab9c9e368a1ece660a0527f4b2bb32f436806c15bbdd5aa1685271167f90090b0867ed9b9f65467dd01278460c0527ffafa4918f584bd1e5540ffef9ae8737a1f99e0246b8275d48a30893cf987b0f960e0527fa4bbdc014d8d97cb917aaa73d6f9ee28abb331248b7ad35afbc2deda96f49d75610100527fd4994add7a509bf6a3ebc9653b49ef6e7f95399349aabe9d7bdb3b61bdf858d0610120527fa3da114679ef650c371fbf94125a8adce0b2826c9015a258304e0bda3c51118e610140527f27463379eeea92d94e8eba640c22d0de41bff611b1754695905841267161f30e610160527fbf90547c700258cb2d8dd93c097de8359a6599ed8d0780cb59539cc1c2638b44610180527fc3096ad3f1873283d828b50c41efc4ac41aee51cd7f2bd7d3d4f33afbcbe032e6101a0527f5aff79e915ce4ab6f25d50594f799404aceb01050e881e3db774e4d55d5978c26101c0527fba56951b64e7152bcb9194971dda9b0df5f930200b8273734682715c4e6056396101e05260406000610200600060107f2f97ddd75c0c05125fae073ccba46c5e539d71bed8ff23853bf1764460229fdaf4600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x600051600d5560ca610160818120600e55f3", "nonce": "0x0", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x401d746660008b994772f255600860005560005c5060076001557fbc8df58e6eed20da90e13f5ad2c08765cb6e81439a6da04b12de0540574684ad6000527f7159dcb73f8965ac626a129d4079b06b37f92f0421e62bba810cc8110558453f6020527f1df0080d280babd78d73e16c819f791cde947558cb175008b6491426ef95094e6040527f5c4784a311acf42f8cd893a5c489ea07c3d637d7b64e8ada04ec7c12b46fabf86060527f1d5cb4b437399e6bde518642eae21cc163175f8434d59979098c4d0dbeb50f736080527f852be8ca72f3700871dbbfa86f890081180b5551a802f20a1f5f12de55f3e2f960a0527f318dba96318f6da5462adf7e9589495080040023ef8d45f1a34672ecf71338e760c0527f23936a7f7fbec00a3880ea52fe3e86568ce44061752d5d0bc62d4c83883a57ed60e0527fc467bdb7b28d098a1f1451d9d5c4e8ea8b81e03db78fc63cabb1ca744f75e81a61010052604060006101206000603f60087fa266b49f47d3fe71da4e7a84d4e319f7affb522119f7de9f9a600a5627456b1df1600255600051600355602051600455", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000007" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7c204ca729dad386476072a674923939c221cb19c4b7b4abd0cc43fa5f776000527fd4abaed1ff03eb0617079641124fc2da5e11e3b4eed3f35a8e5a04ba046b72486020527fb2bafb6e4fcecd331fb65ddac17759c71080b15831692735583c69c439e5c7656040527f7443edd4af446493c3011fde316b91daca78c8f767dced885b3166d83feb88046060527f4f016aa7ded3858aff740a0df5c2472456f4278461ba7e89007aa3f1ef7e45236080527f81c3dd9d889bba4caad01c180160b3d402aefc9a33ef0a422dbfce85e5146bbc60a05260ab60c053607260c15360cb60c25360ce60c35360f760c453607860c553601760c653606a60c753603660c85360ef60c953605560ca5360be60cb5360b860cc53604660cd53600a60ce53602b60cf53606560d053607660d153603760d25360ce60d353600060d4536040600060d5600060f060097fe6b64d3649bed6e6bc3a97338bb4211990955bff747c3a0cb26696f5c97e8212f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x7982c0B61a97cBCf7fF7b3736023b23D159873f4": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x4d9d461b0689c4bd2e0a75f78f8fc9dde4920c554402cac511acdd600e023977", "storage": {} }, "0x79caC06f747229e9F79FA47049fb37884ec384b1": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2d7dce3ec394fd470eca53cc6fae4c8d8b38f19433d56ba6e549a98ab2bec9e9", "storage": {} }, "0x7c2C923D79B9903f29A71bFAB11B24c30C9FF962": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xb1330d826f506a345059475813d946401278a870614ea1128f04ed451d5c9aac", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x63800000017d7676767676760000000000760000000000000056000000000000000000009018156000557702ffffffffffffffffffffffffffffffffff2000000000007f800000000000000000000000000000000000000000000000000000000000000190117f7effffff800000000000000000000000000200004400000000000000000000017e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00069012760100000000ffffffffffffffff0000000000002e00000068010000000000000000901d684783921454358970527e40000000fd000000db0000000000000000000040000000fd000000db0000016801fffffffffffffffe0990161c600155760100000000ffffffffffffffff0000000000002e00000060057bc9700000000000000000023f00c00014ff002c0000000000002231089008778200000000000000fe000004000000ffff000000fffff7007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a1b901b7d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97702ffffffffffffffffffffffffffffffffff00000003000013600255682100000000000000227ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1a6003557f80000000000000000000000000000000000000000000000000000000000000016b100000000000000000000000901d901860045571767676767676767676000000767676767676651ce97e1ab91a901676013590cab83b779e708b533b0eef3561483ddeefc841f5778200000000000000fe000004000000ffff000000fffff70090036005557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff1a6006556d01000000000000000000000000006005900790116007556f121212121212121212121212121212126f1212121212121212121212121212121290056fdac7fff9ffd9e13226262626262626007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90181b15762900760076761e000200767600000000767676760000006801fffffffffffffffe1002677fffffffffffffff7f7effffff8000000000000000000000000002000044000000000000000000000190069019901160017e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a00901a6008557e1f0000000000000000000000000000002000000001000000000000000000007e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10009017901c7f77676767676760000000000000001002e000000000000040000000e0000000007fffffffffffffffff7effffff800000007effffff800000008000ff0000010000901c901c6009557e1f0000000000000000000000000000002000000001000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600a557f82000000000000000000000000000000000000000000000000000000000000006823232323232323232316600b557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007f7effffff8000000000000000000000000000000000000000d90000000000000190017702ffffffffffffffffffffffffffffffffff2000000000007cc9700000000000000000023f00c00014ff0000000000000000223008059012600c557f7effffff800000000000000000000000000200004400000000000000000000016c100000000000000000000000001790146d0100000000000000000000000000677fffffffffffffff1603684783921454358970526b0100000000000000000000009012126380000001686d5adef08547abf7eb13600d557a0109000000000000000000000000000000000000000000000000006f8000000000000000000000000000000003600e55682100000000000000226770000000000000009006901560006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7fb511be36d35b74739a85351c052fa4de58db198a76d03d145a2d33203c2c32b66000527f26ee5abbb7ea9e33fbcc013139bb00934e98d3f25e6da159a52d2e0152bfc4f56020527f6d0dff51561b32482bf7e6dd4c7c2b630ec00581ae93c8e88b02ea3ba6e3f7586040527fe6e1d60bd9c1f8c2f5ac77b0a75b1ac10d5d436517f67132ee04da57ad66c61a6060527f4089ebd6d189c7085362bb204ede3e28c7de082ea6906a192d6fe1e86cfaf16f6080526020600060a060006001610100611b1ef1600055600051600155600060005260006020526000604052600060605260006080526020600060a060006000610100611ac6f16002556000516003557f9a92cfae6639594ef5a936af7206a825039830b70121bd288099792299610c776000527f357d5942107baca8191dc32f847229ea93a7ecd634f96cf82b77603fe057a6676020527f84b09f3632409869d2fa6f36de4eee7cd0071520e71905199c75e18bcfeeef3b6040527f941d0fd4fc5d0a735c27ae11507ab5ea2a786cf14a9254c9afc3df2bd2c08be36060527f3d4798b3215eb8fe2dd88edf7b0b569bf34b9026925eea60bc315c65931ac1cc6080526020600060a06000610100611b2df46004556000516005557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f2caca4cd87938c0530ef51cd1db94e01e69b7e4b7e03df64fcc0805927fabca06060527f7887b1df3e1b05a0ee2e48b7c1165c05befb4beea8606070e12e62c12c127a1e6080526020600060a06000610100611ac8f46006556000516007557f0bbb06c7aeef3093a1a0eff5c46deb9d7d7cc7cf8d821ed636871c880b1a6a556000527f3e28ff5c73e7130c61c678d789af2a87ae9f7c290d7deb610d6ad79f113d94186020527fe671e799198805f8189928646d971703d44cdf97409ddcaf27223f93f54fea606040527fb8122e7f2fea191d2802cb055c051aa598069afddec63d69cc994c7e900172d16060527f60c335144e54220c97209ea95244251059d0f3d442e5bb6dc51af9ae73a457e56080526020600060a06000610100611c1bf46008556000516009557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611be7fa600a55600051600b557f592c81d1677b5196e4d245929e6496a2899555bd2a946d57c23ab32ade99ca986000527f46b70fe7265f36468e64a4361f32e849dd282a0320c260735f21ac79dd1bf26a6020527f042e0e533318524d279d357a0d8e74efc9ba6d3accdf2371a11ceb55c76e59026040527f4b4525528aa2a41f53151a6f41f345989e19dc826bfb59fae30dd3b99411fc816060527f288e3f6c0d35bf78e6cfcfa5f9da83ef49e11dca41b560ce612fb573a94794546080526020600060a06000610100611947f4600c55600051600d557ffa70288e2ea04596712d5db7d2648d0fe15a93ef1361cb32193ea71208b4e1d16000527f01cc6513c119ca09301a270e2b688b54eb9cdfa4f82910ab5e9575c876fd28106020527fadfea09485c17d44738a41923ea61cccf37a76b86392f7df3e5bdeabdf91a3636040527f54bf277179e68b0be4828fb6f0abbc32c5dd04b6f94041dbbc318ca2b73c87e66060527fcce03cbdf75a6153c5f68b229d5eec99c9cd3a3b909759e052555fd3461c18f66080526020600060a06000610100611b48fa600e55600051600f55600060005260006020526000604052600060605260006080526020600060a06000610100611a18f4601055600051601155600060005260006020526000604052600060605260006080526020600060a0600060006101006119c5f16012556000516013557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611bb4f16014556000516015557fd900eed45d1776f9c7fb5481006bb7c814974494d8d64cb48ea64fc45fbb0ba46000527f69c2d7f49d906367e5162dab8ee5a7bd7823c111f921dc9f8f0067da568c7c6f6020527ffdae48e7c41220e433a48c84156e2d83ede6dd68a80e3f272632b2743eb4c7e66040527f0992f0090cad0a5a66b1abbffd6f3edf2cb6479b56e43b587d580a13ef05fbcc6060527f5c80af8232db2e0eaacdd05ff44633998ea9718b003da0288868905ee1f551c96080526020600060a06000610100611a07fa6016556000516017557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f75415288bb9affb8bce0c2c7e9e621d6a039a9eab09a1a9a3a5d948db555530a6060527f1e425924b0e734bf3e320737c8c4d93466125ec8ab3f1c6e27d874d61d8459696080526020600060a0600060016101006119e0f16018556000516019557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f24af7a688a7415dee8c9f61925d9ce1b49c6c52fbd58ca95ed6c966a68abdb626060527f7850ec2e896e2e95eeb06daf3f97f70c7c749ee9dd193cb34e92a5606c0f56ed6080526020600060a060006001610100611bb2f1601a55600051601b557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffbffff7ffffffffffffffffffffffffff7ffffffffffffffdffffffffdfffff6020527fffbffff7ffffffffffffffffffffffffff7ffffffffffffffdffffffffdfffff6040527fea73e64300f1f62cc62a21316d8c321f0d94bd46ddd81a3ccc28637e9fcc059c6060527feb47b65c82e04c8d9e2b76e469127a34cc255d65fa7e972c4a2e59b43f362c456080526020600060a06000610100611b99fa601c55600051601d557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c7760005260016020526001604052600160605260016080526020600060a060006000610100611b35f1601e55600051601f557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527f01fffffffe00000002000000000000000000000001ffffffffffffffffffffff6020527f01fffffffe00000002000000000000000000000001ffffffffffffffffffffff6040527f9f9f373679c7afa4dcabfd13c9ad7caadb7a21a1cb644f3cab82894c2fc3945d6060527f1a38fb7e2ae12442797eaf42952fe8c6e1c1905413d679d3b214a795573c66896080526020600060a06000610100611be7fa6020556000516021557ff081432cc644bc72156bf6142c4c64d2e4fc97a00b031e7cbb351d295757248b6000527f3889aeeccb261d4f724fa0f8e59e98808c196af04c6254e04ab6eb4d092450a46020527f142719b3436d45c38cb709a57c9ed6fd29275349ec7cbd8c9bd41de0889642186040527f88f4a68540ab8a1b50cabd1cf090cceeb373d82664498c439a4a32779c0d22c96060527f3e6f058623651dce23bb510f143af1a5ac880c2d37fb418c5842372d1f8c34066080526020600060a060006000610100611a70f16022556000516023557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611a65f16024556000516025557f07dde465c9a3eafef9f67182ac66f082bd13b079e6e1987a230a289731751aca6000527f818ae986aaf82a2557850c44fa8c66c08cbf773a40926c4207f4dedef7f268ff6020527f5d0f62fe7ecedb18fc0a6816290c84e1babcfc3ce7c45eaebd2b3e240590e0d66040527f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2966060527f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f56080526020600060a06000610100611c7af46026556000516027557fc80aeda6f4081e9c31cbb36b0197cc22a8efd63adcb4485f61236cfd06a71ca16000527f1ed7abd2c30eefb6d147a7d0d2f3a8131ec404d52ff52646139398d66a01f3f26020527f79c92381a2a06bfb3b1031bb1b4cdc77d639373002ab0ac314b1523a7de7f68f6040527fafbb22c18f1d6d660576338408c29a612c553e312ba6f8b29b93506aac7adce96060527f0f515ec269b4211979d43151e407cc25f6696ede802c24b68ea55f1342b96fda6080526020600060a060006001610100611b9df16028556000516029557f7c12b2191d8ef871047530a206958736d82d157a10f5f9988f3f751f7c7692426000527f2f5258e2c042a1da26a26c70833f7995b6b861a45ab2fb138f436b5b085b8fcc6020527f5737f2db6ec576ea11b9441ed36d37cfe21d49f779edd05b50fb7e9eb68a4e626040527f7d11792e312872bbb04b7aaefde5e2550098c3f3ccd932512ac1aea601fc47b16060527eba8209eac9863d2b1f4a437705c9ccf468310512b30b8bd9fe41cdfdf2ef9a6080526020600060a06000610100611c33f4602a55600051602b557fcd43b17ee6fcb602f1e29abfa2a9d5b48cdd5c092d98c32e26b1302d4960a5a86000527ff64f37e50c8f8a6ad3aa7ea6b3ccc0bfbd5c2f023a1dba33e7c26f90b72ee02b6020527f66a4bec343d4643c8dbf09232a8b5b00449cf8a99ab6f4038334dd54d6cd7f8f6040527f7db82f7ec4beba67b179c1c2a8983df79a36413992aa5a39503f1428cc4e25016060527fae00f9aece5008162b6f21c518e3ee6434941526acfe840344e9be157bd169636080526020600060a060006001610100611bf4f1602c55600051602d557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a060006000610100611aa3f1602e55600051602f557f7373927df8ebb8a5ac091c307565643314c299619e3aa81e01a2ec6e115f916a6000527f1f248c01540fa05841fcccbb52901e202faec36341b941b94f7adf285b0123446020527ff49056605d85bf9bdf7895b87aeb87d34b5aa57b60d87e53e206c9b2f6074e336040527fec54228434f47ad27d147bc0b47ea82f5c31e0f2eeb2d7aeed573a4c36fcd1d16060527f6d1cec152f3e3e8c6e0d7a4fc389ca47b94c8e34478fb0f61567663746bda2b06080526020600060a060006001610100611ba2f16030556000516031557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000526fffffffff80000000600000002fffffff6020526fffffffff80000000600000002fffffff6040526fffffffff8000000060000000300000006060526fffffffff8000000060000000300000006080526020600060a060006001610100611964f2603255600051603355600060005260006020526000604052600060605260006080526020600060a0600060006101006119aff16034556000516035557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611b07f26036556000516037557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6020527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6040527f19fca7d59f879cc12ec4bf084df587cd4d3ccbc733ec54a0147cc582b4adc0036060527f9e03dddb7ee6f0c81ba11c47ba04d3c039c85cf63f37150313a47cd4c7fd4fc76080526020600060a06000610100611c0dfa6038556000516039557fdfd58aca08532a61992566dc9b53fdb5dd609a84267fc29f28ef77fc4e3c36546000527f11576b29c809bcce8678b900952429f5d435c71987b644e1a07cb6be2fc5e87c6020527f5baf683fefa7a13120e806df4a57cfee97e9d69605b839ac94182a1cf6301e146040527fcdb9ea9af1bf1cde5b8bd83ef72b4fb5b65427b883ccf4e0ada5eec1f167b4176060527f9da601bccdebd3c0a6ad3a73dda7875df3bdba8df4367998adba9839c3aaf8486080526020600060a06000610100611ab8f4603a55600051603b557f8d91d8ef900d4b1496bd67fda046a82037bc18eec3722e72de615262aacfe02f6000527f988aea2d9c20396d364c85b705076a5505a697dc7d60c8ea91d380576745f4e06020527f3e83d58208c5353e179a2f374c2aa5a4f3101dfccd9ca8dd229fa6e801b045e76040527f32f9ae03f79f5f7dbbc96223efb8f7def32a2f7047d7de0d3980706eb8c1fec16060527f96b6a590c004c3a276de89397bdb137f5bb1724daf08e3211477535cb8ca969f6080526020600060a060006000610100611973f1603c55600051603d557f55f877a03e3e31007d8ccb0037592750fe627036579cd37987d3ef76a651dd1a6000527f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f6020527f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6040527f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f6060527f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f6080526020600060a06000600161010061190af1603e55600051603f55600060005260006020526000604052600060605260006080526020600060a06000610100611c18f46040556000516041557f6cab6c2b703f7d67afcc860f56d8437f3b9ee4c209a5acd9986d3b05ab60d9bc6000527fe7f933b46936a5004907e55c4dc53092c174ba06943bbfbf90e0802164689e816020527fc488f7fb05d3a80397b19b03318deb37babc32c05504c26a6f7d837938506f186040527fdecb3acc028e66754176866c6109a03ac60eff659b87f633ff18ce41a4f9ea616060527f9d95f2926562086975131b2402043777005a5bfb393da343f66f829b77c1969b6080526020600060a060006001610100611b18f16042556000516043557f90d223bd3b8895ad2d6820592d063af8ea6170dd2a6c6800187c545eb592a8116000527f727b03b61f5dde152e04c2ab579d839782cbb29909e54b219e895551cee9798c6020527f71e1a22cae857823d054a504ebe486c1f5edf176ebc327289a90ff07800c453d6040527f37ee2531e5c4063994edecf64d483d05316a25907afa516d9055ac86155b44f96060527f7b7108261418d866350dc293f13dab89cc9782cf00b0936264fccd768e1ba0306080526020600060a06000610100611b11fa6044556000516045557f89a43b8ca5df83cf7b97fde1b28f74c693d1afbd6fd0cb1ae1642625c718b0156000527f0bf972cce64c6fbcb27b07fd0803ff3c4fbfe3f306cd3b1375da67ed0cb725f56020527f71dff7030f06d40941d92a188072478f7387cfb411df41abe6a75efd6d9441176040527f47de18a2173098799b70d71e171fb432f7cff8592d735dab7063c246c37838c56060527f7e3fb2e586aa10db8130958294c8ca92f86746dd39313f9f044ed92ab51ebec66080526020600060a06000610100611902fa604655600051604755600060005260006020526000604052600060605260006080526020600060a06000610100611cb0fa6048556000516049557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527bffffffff00000000000000004319055258e8617b0c46353d039cdaaf6020527bffffffff00000000000000004319055258e8617b0c46353d039cdaaf6040527f95f802a4de6bd804746155b418f062143764ef2a147233201bf8495b228647466060527f9d0ef95979bbd0ab36881723e5201d79464fd2b1d4f2f4132c5bc720b4d444206080526020600060a060006001610100611bc8f2604a55600051604b557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffffffffffffffff7fffffffffffffffffdfffffffffffffffffffffffeffffff6020527ffffffffffffffff7fffffffffffffffffdfffffffffffffffffffffffeffffff6040527fe353b148a8865c34312ec4be2fd75654fd51c2a6ad9fe7c2415b99e1e88b8d626060527f6ecc2a0c493d21397f0afed91183fe3eafc4608aafbe16752fe678d72a9e2c326080526020600060a06000610100611b4afa604c55600051604d557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffefffffffffffffffefffffffffffffffefffffffffffffffeffffffffffffff6020527ffefffffffffffffffefffffffffffffffefffffffffffffffeffffffffffffff6040527f890be92aa6553fafc61f2d7bc894e0364cc05674cde976108be782fe256658346060527fd327c7ccdc52c8148e193aaa15b9198ce0ac3dfb38edb0fc3f97562ee0cff9c06080526020600060a060006001610100611c4ef2604e55600051604f557f70d493d413d0f97b38ecf03f9936de5569134743f8ebba326bcab2fce1b308bc6000527fad6b307f682762fe700f50be21df0eae15576e3310374b5286fa01f4f580dcb36020527f410597b9fa20da8d725be815a38adf9641d936b67d4e253de45aa0cd0e7531fc6040527f0c75e73b83f06dde3f187454439cec155a7f4085ddb5b0d7c0dc603521ec6a076060527fbcbe14af3e150e96451f8ac7fd46dd5e25e2d6e8877e557d47fd886d930eef996080526020600060a06000610100611900fa605055600051605155600060005260006020526000604052600060605260006080526020600060a06000610100611c38f46052556000516053557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f50adc68d1ed4bc57595c7d24187a1ce9cb7af2a28fcaa41abcc98a4de3884ebc6060527fb88ec0b67329d7fd2dd4689999ff22382c9acf7c067992ba3760f30aeacc60af6080526020600060a06000610100611b3cfa6054556000516055557feff60afe0f78740345253b3cbb65e6dbe63a68fed452790bcbc9c55bc18a70566000527fb9818c88fa8b83ed5a07f59a313424cefca5fdc64dfb8ae2ea83f7d297033c586020527fb5497fdaee7d666f38c78cdefc0050ea7cbe3b27d366332216fc2194c3e6deb36040527f6f9356e40c32cf53e6fe489c0732ab8a6efd0a5ee50c801851cdc2b292f82c006060527fd981ea59cded394ac871b2d0932db19b36121cfaa9827ab6044622b62d5ad6dd6080526020600060a060006000610100611c6ff26056556000516057557fe8a6997bc3ef18a0bfd1f976c6b3a8bbacc623adec46faa8d943dca231d7574a6000527f80795269cfdd07798be6857e606cc0accaeeffe856e6b15f9071cff36579364f6020527f9111e1ee6e26e672d97219d759b5f01d8a511065921ffd3ddadbb52b79552ead6040527f8a4ecb4101550650bfcd765d7131923ae8e507f9bf6aa4fc066f5f793ed9c4b86060527f0e0d94805b96e84096463dc843cdd27b35a31f921115128fbfb97bef4fad13836080526020600060a06000610100611c90f4605855600051605955", "nonce": "0x0", "storage": {} }, "0xAff0d1Fad46ff203C5b9FF00F10FE1134862571D": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xb20e2e99f2b7b64c0028bfaff9bdbc56f583bc930a85b190582c9f0d4033ede4", "storage": {} }, "0xB6754926EBc05d33a936ffdE524617F45429CCFC": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x9effa2a88d9a8cccb99a856d5e63c52601b8b08c69d7acd0ee942483a4b89370", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f02c2c265e04023dcffe20e4ccec637696d77c6e6fc4e369317999de4e2f22f056000527f23ce7327362b8cb7aa786d6b1df1634b880c790b63e59815801d6b8e2740ff8d6020527f0fc77f348be20708ea60d3b94d9817a096cdc59fb0cc5af2e58566764b522dd26040527f085883a36120154e32ad2690541ef9e1efb62f786b14483153b4972e5974ca216060526040600060806000606960067ffdb4e6ce5813b605ee9a363e27821972b4f64a511b4f4a1c6180eaa3f349e122f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xBbD9aa098bAF9E636FfDb6f530804Fdf44b55e47": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x80ee8021793940859903f6f4b4b5f8e54cd8d71e8343a4ff0be43248585a7ff7", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f0169f1039479a1cb9e010b1fb7af9e0040fc25c7c635eb7e0c226cbb0ce6bfbd6000527f21ccad796c904514ddd7eed89662d0c10d19c93f8f3bfd9c6654a21e6ff957806020527f5bc83896961a345b57d239af35bc308ac25f6da92e25e50b1463bc186b2346556040527fad5f2939a5f241fa3075babc85771cf9ac6e3106badf3c4531a4ed255601e8e06060527f6d2e313e0bcde117a25041cf347fd8eea303142178574eb114d747bb6e878fe26080527f9db97a5ba9d948ff02d8eabb1cea46d2c924386521f3a546124bdab654f2e36260a0526040600060c06000600a7f85e2bed24cca9c9205c7e917491240569e0469906022d7487d17577195938020fa600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x6000600052600060205260006040526000606052602060006080600060016117d0f46000556000516001557f296f78b9a90bdd931ccfbe330ac522c4bc3674011373a5c6e2a07dced217e9786000527fc9ad117b3f4d2d304b12779a3c5c7378fee4cbb1ecc43547ea778aa62c67b21d6020527ffff0880374cd8b7b114142bcd47efcfceb46ea1c8b93de691208f6310ef4ab936040527f69d62d9240644396f4d1b2714cda0f47f619aa2c009ff577308390dbe7eef4926060526020600060806000600060016201846bf16002556000516003557f9495b0aedddd62eee6febe6e895d905ef8362d3664e5be36d7a12382a42865216000527f462a3f411ac3c1e25b397435a686a08c5a8c9b4c12daf4c076ec745105b35b1b60205260006040527fbbe793cd818974373af7368a4216889be43f792fee2525b13d65bcc11fb266eb60605260206000608060006001617c77fa6004556000516005557fcd46aad27501fd036bd5103506652b0b8971130ef7fb3ad11c627ff7c48e24ee6000527f34107e6abd2d2894bd30f1dcb5261dbba40132e4ac5adadf633a11970a79131c6020527f317ef659ee0a8e855ba05d47b4ec0dbcc59d155e6763c7f8dc77735787c608a16040527fffffeb1e76363ef29bac4bc4c703ca193c1df892e5322cbbe3e9206f286c8b7b606052602060006080600060006001620146e1f26006556000516007557f7a140174c51cf25c703fee4273fcafa7ac7a2fc87b78e7eb531cedace92187f56000527f60e22f951c13b1025f4eeeac8ec7abf355c91b116b34003e0f1a7de1908cfecb6020527f377bcdf2776552334cf3407b7e20ff850eb2b5e41c6c29a8b0ec7501af4021136040527f7c1301d938bd805aa46a5d4f618e8e6d4748c20f45eb2eb9b9bbfd86b04b0879606052602060006080600060016001611471f16008556000516009557fbdb142cb033f938315b0997d0fedba0f94678ad5ba6157b65d3fbe10fc2a6dbc6000527f66e2364050b7bb9ed95fb653732ce385d4ba8c46432378b1e177a25e5e31b21b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fd1d3f61e7328a38915ae5d4fe64d90cae583c13e412367e083eeefb6241d3d8a6060526020600060806000600162013de4fa600a55600051600b556000600052601b602052600160405260016060526020600060806000600161c914f4600c55600051600d5560006000526000602052600060405260006060526020600060806000600162016e1bfa600e55600051600f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fe90dc134b5745cdf092acec96cea2bf73c870375726f8366c1fa92c9bb9ced266040527f370c68cbf48ab4a9cf9c40b8b97805bc574ef0e0dbac5171e326f8566d290d4e60605260206000608060006000600161d2d8f26010556000516011557ff264b4e7da06c72fb575c7f0a3b9c31986ba5545fa6c68eda775a4d040e264cf6000527f7fd8d2ced0fccd11e450792c18aa5502ec6e59926df193163641376539f4301b60205260006040527f6eea0915c614760dffb89669fd77b21a3c54fbec96445e381999801282c7fe6660605260206000608060006000600161980ff26012556000516013557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f1d889ad783fb93cd8b1a00fafed86ceffb9372869b387e65d0cf149c98f983a06040527f2dee9d460d8207475a3461371307d5a1c982e9e9848afb97b518a4ed17c9fcf4606052602060006080600060006001620178c4f16014556000516015557fb9fd2a1e809c3b7e7d8dfe206432a81de90fa922f4bb7f3adc6a3716abffd3806000527fc6e489e4f2d91554e568b4f959d1f390465e5b1bd23c423774d2dc84c1a9dfb76020527fc8937b5ad7058e304a4e44bbe31cc4efce5ca2dc4500f7b9c697033031f61e6f6040527fc598b13938344c0d6d244599075bd4a602ff4057b041ac5a6b56193d7973861b606052602060006080600060006001612deaf26016556000516017557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f90c2b4aafe3f6f4d25e37e5ebead359fa69060901a6938be171df655cbfe64af6040527f71f2654408880b6690fe5087cd3c7ca3c5d10131c79b7a5b1e652225060f8a806060526020600060806000600162010ac5fa6018556000516019557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f40bbb8d71baab2003b987bc5f7ccb66df8b04a5201bc89e2f23bcdb144b810506040527f4f11207e7d336d7075a95f57b4a1b5caa5cb4accc50f9de98df1c555ae05934a6060526020600060806000600161ebebfa601a55600051601b556000600052600060205260006040526000606052602060006080600060006001620170aef1601c55600051601d557f70eb8cc6aa62dee5a1e13e0267b43694aed5d5b09835791a1523c9c11634e33a6000527f52b8ce8f1dbd041192fe3c06f7d0904bd1bbe1f15f2e0d78edd625ca9dd9291d6020527f3a4060d4b707437df0d0f1dca6b6290c0fdb1c79b0846e6b8d595be2ae27d9116040527fb919a3300bcd1dcfbbf72efa726ad1313219f0883bd443411a7ccaa10447eb1c60605260206000608060006000600162017822f1601e55600051601f557f5ced1050fb51c2a94cf987d493b396d4fa3a53e46beea80831a5d7e3d6bb86106000527ffa87751775d77462b6b34be506beb70ab28352c7f8e5e39175f728181074361b60205260006040527fe1d256c5100bcad5d9bbcae86dc22ea1b3e19647919f3effbfbce66d37418ed0606052602060006080600060016001618ccaf16020556000516021557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f170d4909ec18966d3e28b7ea77e7823b32c23375110257748b80bc9e7a36dc466040527f40c2a1c302838d759b9a86ecdec3807c17f848e30adc4ad730cbf681cb2cde1860605260206000608060006001611e31fa6022556000516023557f2ba1713bcf21b729b7b5bd648fb582a944fa5c55dfeb08b91e8862e360f312ce6000527fc7a148d54f25335eb6da75e95d1604ca4dffcba41fcaeb4e8eb24681443049b36020527f02a55f450ee865c0caf6ddab1690853be92d0316977bc02de3f5dd17b18c2d136040527f25c2390881011d3dfa6c2dc5adf1e375862220f32e3b35766024ff4090122a146060526020600060806000600161904af46024556000516025557f0fb8ca4f71925cd08c671793082e4accd3050f3128ad1e9b4ab1c6d20fc4f0a76000527f1163c9bb92b221466021d2776b0b7613d47a77d9312db4e5e942930ec1ded31b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fa61767fb6b9f736b4962affdfc29347b0730878f841a7c7f78a9b70245bbc7216060526020600060806000600161f490fa6026556000516027556000600052601b602052600160405260016060526020600060806000600161ef81f46028556000516029557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fc8e6348e2c71786d2ccd1c7c967f420855cc839dc19c80f1b578b6d1c322f9096040527f3f5a8673444c55112df70fdfc64dbb5d07da30535a32c60a4d20055155cd1da76060526020600060806000600162018339f4602a55600051602b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f8abe932511c6b22f6b28bab5650dc28d63f1981103d26534e1956c84c332fc636040527f133e7abea04d45a26b9300224c462c7705feb578e48cea8b5b40c13006be7460606052602060006080600060006001620163bef2602c55600051602d557f16e1c685844a7fa1b621ef440822eb44512fc2b8bee61e62a5874f912e307e5b6000527f9e4d6d753bcb998f92c39ea58808b75ea82bb0e9089f4cfd95afb7e26087431b60205260006040527fb1ec0f8d39f445a49efab6cf246abc10d7d5477361727498d30f555c2ccc94ad60605260206000608060006001620131d5f4602e55600051602f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f7f8c30c8d71ec097a66757459c78919acca9839d99b4cdc3bb9168f5930ec3f66040527f1d33b7ca4b1d6d2f44c2b98eff781b1f0bee479bada720563ec351345feb046c6060526020600060806000600162013984f4603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x7f40000000fd000000db0000000000000000000000000000000000000000000001671fffffffffffffff901c7d7676767676760000000000760000000000000056000000000000000000007f82000000000000000000000000000000000000000000000000000000000000007cc9700000000000000000023f00c00014ff00000000000000002230080509604f557e40000000fd000000db0000000000000000000040000000fd000000db0000017d76767676767600000000007600000000000000560000000000000000000090116050556005712000110000000d0a300e750a000000090a0a901a126fdac7fff9ffd9e13226262626262626006d0100000000000000000000000000900360515569100000000000000000006f121212121212121212121212121212121d90047ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000600590057e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a006101117f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0960525515901517671fffffffffffffff7a010900000000000000000000000000000000000000000000000000901d1860077fffffffffffffffff7effffff800000007effffff800000008000ff00000100001c1a7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a006f800000000000000100000000000000009016176780000000000000016f80000000000000010000000000000000100b7f82000000000000000000000000000000000000000000000000000000000000006f12121212121212121212121212121212610111900990077f7effffff8000000000000000000000000000000000000000d900000000000001677fffffffffffffff901d901b7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff7702ffffffffffffffffffffffffffffffffff2000000000000217760100000000ffffffffffffffff0000000000002e000000600790057f77676767676760000000000000001002e000000000000040000000e0000000007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0680100000000000000009008901490187a0109000000000000000000000000000000000000000000000000007f40000000fd000000db000000000000000000000000000000000000000000000167ffffffffffffffff90089001778200000000000000fe000004000000ffff000000fffff7007e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000901d90057ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07f800000000000000000000000000000000000000000000000000000000000000017900b7d767676767676000000000076000000000000005600000000000000000000682323232323232323231c1015197a0109000000000000000000000000000000000000000000000000007702ffffffffffffffffffffffffffffffffff000000030000900b60535569100000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff061c7f7effffff8000000000000000000000000000000000000000d9000000000000017176767676767676767600000076767676767611027f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe778200000000000000fe000004000000ffff000000fffff700777effffff8000000000000000000000000000000000008001099019901b60006000f3", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000054": "0x000000000000000000000000000000000000000000000000000000000000000c", "0x0000000000000000000000000000000000000000000000000000000000000055": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000056": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000057": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000058": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000059": "0x0000000000000000000000000000000000000000000000000000000000000004" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xae7D4902083D51fB69147F97f93522A6ACde32e3": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x095113ac45e3fc3d29c686504b49b5bfa2bbb26afa0ff1b5a6e78199e3aef49a", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556002496001554a6002556001600355", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x606d6000526078602052606d6040527f06969cd3d17047a3c033d477a356eb6ebd02814ae1f49088a1a242623dbf28e66060527fa676380fb7aafe0fa248866ce2f4791be20e44bc99d3f2b8e7187fd2e7b99b196080527f7151476f0af990c48816173b5d9051376c9a7f1047d8ba71e7e79d4a704cdacc60a0527f68c95ec18334d106b3d49cb6120000000000000000000020000000000000000060c052600060e0526000610100526000610120527abc6d485cd9b7850ba153b2251675cb64a9f6a9d2a16d1749eeec42610140527f69786eef9e41fc0119f402f45634776e67372649b652bb6d55163dd4a3d2d775610160527f2558f4470a237c93666a43a4090aabd3dbcc17a8871358e6b78de5d7557491936101805260ac6101a053600a6101a15360506101a253605f6101a35360576101a453609e6101a55360a06101a65360c16101a75360296101a85360ff6101a95360616101aa53601d6101ab53606c6101ac5360146101ad53605d6101ae5360126101af5360b06101b05360ad6101b153606d60006101b260006005620b40e0f45a01600055600051600155602051600255604051600355606051600455601060005261036960205260106040527f3bff515c72d1e83825f674d33c3be5a0c3c1b25b39f7fb3760251512fcac16866060527f892e53cad071d7af40e641c2fe62a738cbc10f710f8618b294ddbc910ec2d3ad6080527faef07d5365cf2749714704088599058eaa79452af493312077db847b9dcfdce160a0527fd1d20d50f580d96730f7ed7c22946530e4ce6ca8915d8186fb9dfa5642c916c160c0527f2a95a3141956373fb3ac67da6b0db573908e66113d2ebaebf5ec12f671b7991460e0527f120b1aa07aa1b8f7b8b3c4f486e9af80aadc99d6ae43e9838f280477db763ea0610100527f70d81ce84a0260bb8ffe0d9a61f086ef701c6a74640ca583270c6592c840983a610120527fc654061c1b0f2db6f1c098f605a7f027036200ad189af26ebd01b953ac70ee76610140527f5469ce22aa99d7595f9b76007d57a086fdb3d605e3c9489d26b3b5ee56133d80610160527f809f2cb0cd4f3a325bae5509fa63f6e6f1f7f95195508f341433016f0adf1471610180527f5a7691337c0f92863f4d8629ac6b072979ad8f94606e6b836360755b98852bf96101a0527f0b3334aed8257dc6287043f97db0786cf3aa5a3ba1790bdd8d7a5c46e2a0641c6101c0527fd06e211746f8d26e83202f1b08c0b47cfc354d30e27d47437f5e5fa33eba160e6101e0527f1b33cd83dc4e3f3d25742bce25c6039dccb1f8fd75c37f12bbec7130f668f36d610200527f7627ebcea7518334fd633674da463f583484712a8b08871ad915b3fc5e844229610220527f25efb7329b1117639f9d71a6b1861b406f4818bb8a60ffa98b68c23815ad9946610240527fc6049241e09a0b4c0fc8f6fd23b145ab1f4b2e865c481d2a29897737552fcc9a610260527f6dacd1f325fd6882cecc9f9eff330bd72b1796bf36be740166dc15c20109d157610280527f3b950f339162d4a9b43f4b152ce6118b5e8d3604655a77df348ed2a59a2ad5bd6102a0527f90029bfc8992471aa9c3210ebfc84122bbea32441303367b82a46d5dc871682a6102c0527f330e3d2feaf6388e1036175258eb6a776a76c02ddffa503058abc7c8cbd93f026102e0527f8917b602885d931ebe52636c9d9372b2a11c1933efa77bb538002d9c6082439e610300527f07d1ffcdf19617d783507043df209734d791fee5715dbcfa84cf9fb516be801f610320527f25edb69cf491500089a08307910e7dffc9fbfd9c4c054220235305b6196d6f73610340527fb8a4296a8f918535cc1266917de9d04e44c874b216f981ddefb18f76ca3557d7610360527f5bf7394e83d4ab174b51e4494779e927bb2cec1158c492cf2703d8d439363081610380527f8bb776cf19fab4db9da420097ae0c01c5877361e90c514ab5ad4ec4269d838b56103a0527fd2718ca190840807337574ca501af530e322da9dbc55f02a0296675d8cadee3a6103c052609d6103e05360836103e153603c6103e25360b56103e35360396103e45360ab6103e553605c6103e65360966103e75360e46103e853601060006103e9600060056204afb6f45a016005556000516006556055600052600260205260686040527fb4033714df43444fae7e7442a9bf1e21b29fe93c31eece3ebc21e3c8096a9efe6060527ff1002242cb3925eac55c4b2206a0fe6f232074d14c559a20515d5d963049936a6080527f4540cb4fbca19aeec551174d86f8ef243035d4c11c1c0ed39c4a14bf7254ece560a0527fe2d28870c3c3c4a0de8479bc9e58460ddeed4f85f6320d356c668d5a4395a64960c0527fbce240b2454432a5860fa357e305c52b6e806d84b43a837142187b38389c21a360e05260ca6101005360e161010153603561010253604061010353604f6101045360a361010553607c61010653600e61010753607061010853601061010953608061010a53601e61010b5360dc61010c5360b461010d53605e61010e53607f61010f53603c61011053609a61011153607161011253601b61011353601c6101145360e561011553609e6101165360d96101175360496101185360a66101195360cc61011a53602361011b53605461011c5360ba61011d5360d461011e536068600061011f60006005611196f45a01600755600051600855602051600955604051600a55606051600b55", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x20000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x60000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0xae7D4902083D51fB69147F97f93522A6ACde32e3", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x0" }, { "data": "0x", "from": "0x79caC06f747229e9F79FA47049fb37884ec384b1", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x96" }, { "data": "0x8a31d9bb704c555c24f732c6883998e445e86b09be29a2310d87a2a29c1998c1ee667cf95f5686cb613523a0b4fc4025782106b0e8fc299a6054fccb89416257", "from": "0xBbD9aa098bAF9E636FfDb6f530804Fdf44b55e47", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x62" }, { "data": "0x496cc712e00f0f40037adc0b96bea9eadbb3582c856ef10b3211f59e881ef0b332e341b56fac149a8352a5cfd046d4023d4365176ca9d660ae95b5ecefe6e598d4308bc57ee84becc2e6cabf95753a3ce3d7137111f1e265c40a83282f", "from": "0x7982c0B61a97cBCf7fF7b3736023b23D159873f4", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x0" }, { "data": "0x120b3eecdb80166a105dcc8c8ad8afbccf7e6397d125c0e6e9879f2a9edb9f85f646562555777c411d6002282a46f47f3edac617", "from": "0x0b530C4203F212318CE214ae2F1089d2478cb56c", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0xcc7947" }, { "data": "0x71268733c98129c80286704a3cae048b4844232d79acac54", "from": "0xae7D4902083D51fB69147F97f93522A6ACde32e3", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0xfc1838" }, { "data": "0x2ef88d3dc71b45691876a113f3b1c2faf56158ee3b9d7ea8d047d6a516", "from": "0x79caC06f747229e9F79FA47049fb37884ec384b1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x8a7e" }, { "blobVersionedHashes": [ "0x015f55eac6e598ff65cc16149757ffff9074b952549cb8c2dc96901c0f8ff5fe", "0x01ef0c49e7504ae667b0eea1985b80598d05917f150f1f01389e77ed1465287a", "0x01fcaae78c0438d7fb1adda2dc67c3dfd5f6432c5815abeb1a44794182b0b5ef", "0x01670282b0ac787d53c024019bcbefd4765d1477d8136d19f89d3e57ace37d8b", "0x0168f561e7975219eeaab25239746c7763d4664556e226ec728f71d0ca835e5b", "0x0112cfe4c7af4e1114aab612902e7618ce92d004012b326e08e71f430eb80e95" ], "data": "0xa38f", "from": "0xBbD9aa098bAF9E636FfDb6f530804Fdf44b55e47", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 1, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x82c54de5780525f1a6604ee6fb757ef6985d536827009ade100818174b0214906875c07778068d38f75d1aa9f2c4406228317465137727de5471a1c19cf0d028b76c3b32319f8c80afbce3ffd3", "from": "0x7982c0B61a97cBCf7fF7b3736023b23D159873f4", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0xba88" }, { "data": "0x", "from": "0x0b530C4203F212318CE214ae2F1089d2478cb56c", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x0" }, { "data": "0x2e228bdfae2d5514c42bb144b04f34377ce64d701d349cafb636c2f73698c171e11d318e37c74c95ed9ba1ec8d327e2ace9b1c4ee285f95edea4cbff6b08ce7d88db009b731577f4da3eb9440315739ab72a77d9", "from": "0xae7D4902083D51fB69147F97f93522A6ACde32e3", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x663" }, { "data": "0xcb2b6ab7acaa2f0a6f60f06d4e445833b05fad7d4510a06afb5cd57d598df72d5107677f0cc8e3dde712123e6b3a558beb515edc22552315d2eaf7e0c6ad524ba23776fb1bc0c29206702b3b389f2c", "from": "0x79caC06f747229e9F79FA47049fb37884ec384b1", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0xb712a7" }, { "data": "0x536553f53b491d18ad280730198d44810c496e91e020daf71f0fc49f3d415244000b5af69206dd69db5edfb6602c20f4c75b644f16e50954833808c0f82665ded9a0df95509974b0ea4799cede017b0aca24eec4ac", "from": "0xBbD9aa098bAF9E636FfDb6f530804Fdf44b55e47", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0x30" }, { "data": "0xae5c17fd105f53464bfbad2b3c8c44f988bbc93ab17bf1a48a4320f8eb71ac1cf570fb8fb611afbb6481a1399bc8258b7d0215301229a95f2ec440200581491d48e624a2", "from": "0x7982c0B61a97cBCf7fF7b3736023b23D159873f4", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x0" }, { "authorizationList": [ { "address": "0x00000000000000000000000000000000000000f7", "chainId": "0x0", "nonce": "0x0", "r": "0x3b9d5e9a36279ed2c81761a8ed35c785cfabca68fe029b9e0462e973c352e857", "s": "0x60dc03ea63ff6c10dd5cafb63cc2e4e531f4642e7f53a805acc94d8f4e952ca9", "v": "0x1" }, { "address": "0x00000000000000000000000000000000000000f4", "chainId": "0x0", "nonce": "0x0", "r": "0x87e3b063ecfe90dad2ba6331723b4772dd08a79e918d494633ff5e332ef3e055", "s": "0x4954a1da6fc047e8ff073b4b1cd5864752a1a00745437319ab7cb91114ab9424", "v": "0x1" }, { "address": "0x00000000000000000000000000000000000000f2", "chainId": "0x0", "nonce": "0x0", "r": "0xeaaaafc5c341208dc8fa74dd76c680d4e70ff4470b5c7be410a95d4eb9063628", "s": "0x682254770ea41bc56cff1d5b47f64ceede0da45e5233ebdc9c60d5c10c7a3e15", "v": "0x0" }, { "address": "0x88f9b82462f6c4bf4a0fb15e5c3971559a316e7f", "chainId": "0x0", "nonce": "0x0", "r": "0xbcad8bdc514baf5efab74757cec1366ad303cb086e4fc286650a499aa2c51979", "s": "0x291e47131cefbca9f42434f163e1be4d6fec29160ce5f1ed716b3735e5b01e7f", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000002", "chainId": "0x0", "nonce": "0x0", "r": "0xf005537a1e36922e7a12f79716b304b6eea3c89fd0ccf0f1cb8584cfa67cfbc0", "s": "0x2d5fdfe68d1e9c26f36cf82a0b2f24402991987f75946b99ebcfe13194cfb2f9", "v": "0x1" }, { "address": "0x000000000000000000000000000000000000000a", "chainId": "0x0", "nonce": "0x1", "r": "0xffc1c76933522ee09da5d32efb9514f2fb3fe070c8c9e76ca170222e08b327a", "s": "0x817fd0bbedb965878d16800f47470195839125925937723193f530fed54f818", "v": "0x1" }, { "address": "0x00000000000000000000000000000000000000f3", "chainId": "0x0", "nonce": "0x1", "r": "0xf6995406f58d828d4dfc5930773f4ab58af7e00305a0753f61a9635684b16be0", "s": "0x1a08f1d43abaeb2604e8d21b0509d4549f468ddb60d9dcf4d5020e7b05f1d718", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f2", "chainId": "0x0", "nonce": "0x1", "r": "0xa444813984575f38fe02fb696aacae0fcd71866cb02676318f9ed9f0660d42f5", "s": "0xe6b7da27d25b3e6e65c663dfbb9eecbef56a8abd03e8b0bdc1d7c691ced3d34", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000010", "chainId": "0x0", "nonce": "0x1", "r": "0x28acb6533b497b0c51e4f38162972c9ad4a60edc90e5ce448cf3f84fa070057f", "s": "0x6bc95b9f8bfff6d47a61ec78d3cd9e5f60e6d588eb0016198aab9e09a3664f09", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f2", "chainId": "0x0", "nonce": "0x2", "r": "0x75e27043bd9be44d39a3624a9eb427ef06f12fa9748e33cba70d6aeb7707e1d", "s": "0x5c65fea04d26d8f90a00755fc2375f047922f7b5f2942d9ef13a32b360f7d2dc", "v": "0x0" } ], "data": "0x4b4ccbd62cf795a7b29973b786c3861c7ce8ea6d66b9c4031283c6c5ba16ef10a7e711aaed4d5ca5a531c786b2da665b687197288570ad7b", "from": "0x7c2C923D79B9903f29A71bFAB11B24c30C9FF962", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x0000000000000000000000000000000000000010", "type": "0x4", "value": "0xee5bdb" }, { "data": "0x00", "from": "0xAff0d1Fad46ff203C5b9FF00F10FE1134862571D", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x00000000000000000000000000000000000000f7", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xf3ff30055a5994e37ff024d18062a0107b978e80c9bebdcb138a0bd916f3396b", "s": "0x35caf50bdf31d7e5d7f1e1062ca6fe150e7c41dd3fea6bf8f8bc3b3e6b665eff", "v": "0x1" } ], "data": "0x4b4ccbd62cf795a7b29973b786c3861c7ce8ea6d66b9c4031283c6c5ba16ef10a7e711aaed4d5ca5a531c786b2da665b687197288570ad7b", "from": "0xB6754926EBc05d33a936ffdE524617F45429CCFC", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x0000000000000000000000000000000000000010", "type": "0x4", "value": "0xee5bdb" } ], "version": "2.0" } ================================================ FILE: src/cli/tests/vectors/fuzzer_test_2.json ================================================ { "accounts": { "0x000000000000000000000000000000000000000A": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x00000000000000000000000000000000000000F5": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x071b56102BcF6C36a20a3a16fE48781448B1C274": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x4957f6f5af2d9acc075b694de14765a3ee3ebadd720ffdb0c471fccdeb1999e0", "storage": {} }, "0x08d033C61e1E55bF868082cf788a3949f4ea949D": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x18c571b8d627c38e4cd2674ff9e1810ac122de605ad7e36051814279ada15f76", "storage": {} }, "0x0b90ABAC5C8F6ce035a107913ea5D7C6eA24f9f2": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xaa7060c894d60af0152633bd7fb04eec13d565d152895681af06b5aa973faebb", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f13354ab4e7cc72ca20ffac17e9c1b49e6000527fa774be197d572deb808140f315c100d2d5b447c60b80a1b74547997ab198d16f6020526f176dfa0b1b23c9b0aa1559abc0e6b3ac6040527fd5fd9911c96b4c2fb77a3083e58ca209789f9dd34748f8cc98b91778eb66d6466060526f04dec2525331e3a900d26f9872d420af6080527ff94c487bc34b1d01d00cbda233627a06fccf69c89b049796cc085f168248341f60a0526f086324d465d550c6ee843b64c6e7759060c0527f8e48c1fa02fda324d5d1cb956e0aab45de89c5276b228c54d1cb2647317614e260e052608060006101006000600b7f4f98dd185cc2f36c1bd041dd1cc98b487ef9602b0578858b7284310edc62d5d6f46000556000516001556020516002556040516003556060516004556f1a702a96876d961f14157b5ef86e16e86000527fc6a1f44881f0ba5f2b765070a0156cf5c485bcb9786e041fbb5c335aeef73b436020526f04b318655f98855db2f8e004a2aa2e276040527fc4f6237e51f0ba883191ac4eee5bdf35d3dcf8bef33156eb619e577bbb38c8416060527fe3e2461badb2e11a04503bdf8c903cfe43cce07d322703d192c3aac1559f76cb6080526f023f3c470ae026e4b8e7d1c7e7c61a0c60a0527f5e1706597302e07b4e610fb7251c52b545642b421fece660fc17206d89144b6f60c0526f1532e6055e532a60024d0fb15ca6e47960e0527f74110b8a237d86f94cd0b459143c3e0c91ef78a41d05bd52c563b7d166cb7e21610100527fc1eec215a08bb347aeb9a1f5c07361975d64957f0673f20844e48a6a14a169c2610120526f1b4b2fd8fc7e8e13a2c559b2309c6dc3610140527f747996328ddd37eb4b6f36f5730b4503d399d4472b6ee2f6a28416f76b5398ad610160526f0859289d4cdb015254ed20cff2f133e8610180527f8e6cc4b53d2df6446c0ccfee4cd91dabc25bb7bbfa44ea0e39d3c592e30d19ce6101a0527f7376a76efdd3625a9f49bede1c096bcc48ea402836db68a38620c647db77c5b36101c052608060006101e060006040600c7f28825afba0dd595ba78aa61e8b06e00e2a57be0f466af3fb2f62468750701d7cf16005556000516006556020516007556040516008556060516009556f1502253d35ec4177f1766f3b652ce1b06000527fedae07c15f0dd155f2a52e7333f76db8295fea99e31c416139a6f42e594847f36020526f0c77dce05d8c9948df79b990832cb5b96040527f6407068a6d15d290574da434bbffdeeea6bf4492942381fb5880f3cb85262be56060526f10353e65e34115652cac77cf24cf6d7e6080527f883e49eed6eae00340d35609bc807b298675006a9b56d5db1bf6fbc0bdd5c38460a0526f07fdb9d1377264bc6977b8fbf21d3c4960c0527fa65fdc065246f3142a9548b8f44b1a8582a893c180aa0e00351c6669cae7d8a160e0526f024aa2b2f08f0a91260805272dc51051610100527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610120526f13e02b6052719f607dacd3a088274f65610140527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610160526f0ce5d527727d6e118cc9cdc6da2e351a610180527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016101a0526f0606c4a02ea734cc32acd2b02bc28b996101c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6101e052610100600061020060006000600d7f41b1dc95a91c0f63475dce8b84d6a2014ca4859b79b38361bc0180aeb9575b32f1600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f09591d15ccd26715c86df27189606a306000527f1074c0108948ec88e06a37ccc58d4a496b614be8a8c061e1889a53602256c3e76020526e729efe8920b0e6554e3fd8ef3ffdc26040527f6a55705d641bee07f894ff253fd3903b18d320640ef92caca5fe8faa5869a2406060526f0d0fa369916ba32740a28c7ffa522e6e6080527f8ba14f4cbcbf26d66863188eecd54b2acda7f1a5f86bf0fe51c6941342e1000f60a0526f054e66d6c3461adcfe918548ee5f024960c0527f0d4f8ca0cebcdc8a6440b8695ca853f216620435cbad0544528c422b517c6ce760e0527fdebe899263c418bd542bc0d0888519f4c8a933074dca8822676913b20becde7a610100526101006000610120600060b0600e7f16d3ec1f09882e6a724e1115fd966740bfc5a1f97b94514b23a68d1168fb25fff160135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b5560006000526000602052600060405260006060526f0eae09f2030077ef6fb53a86b29a6a836080527ff4a91e12d6b9c378fa5d1646b59b49e685ab915672a872f0ad3878a13e90a5e060a0526f0d202a25256ea37788ce16169dc7dcc660c0527fe043c34aa9fdd992b6fd112ad6c882081b547cb181bf21e63b3a2f9a5c1dacc960e0526e7f6de3ad9f0a3810f6c7b9f1f76709610100527f2a1d06f1ff4b8fee5863ff6b0d85866a6aa55c8c5c57d4c9bb6e7ee5f00bfdf1610120526f150e8e3062f97c80ca5c93876db9080e610140527f5e1985a7e619e2b11823018135870f57db88956447a0ef30ae4442abea98d0af6101605260006101805260006101a052688000000000000000006101c05260006101e0526f024aa2b2f08f0a91260805272dc51051610200527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610220526f13e02b6052719f607dacd3a088274f65610240527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610260526f0ce5d527327d6e118cc9cdc6da2e351a610280527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016102a0526f0606c4a02ea734cc32acd2b02bc28b996102c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6102e0526020600061030060006084600f7f4e7f3f831ac0330f4a7145646b2308154f13f0d8b4bd2f4bc1aae77fc58df06ff2601c55600051601d556f164a295a5f96a09041f69ff8b879aaef6000527f1fe370f8797936043fb243918b0bda2342fdc6f8909876cdf648ac35d085a171602052608060006040600060107f543872703925f6e15c6fbf2e92b7b23be4b78a893cb54ce637e9c72526019a8bf4601e55600051601f556020516020556040516021556060516022556f0129250bc1e499805c6dad0c4fb11f786000527f2f344cd82754b3b5a9f23d6d22ae7d8ca47d620ecc6f2cce2e4c5cb4de8441606020526f1385ee97b39f8fa20cfadf1a4ce4a4c86040527f98ef7fe9a5173caa1560c95365d28545e68b8989a184193ea29aaf7855138da460605261010060006080600060117f5c4a5e0205f85cf2e772f816575e415e19d7fc5a03e0772aa7e47f0a54fe8051fa60235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x603b6082603c608660b760a260fb1c1b50171b8a7a77a04378111b39537669943377621a046c4702433e163310157615680b7e9256347b650737367662391736f29b3a696f3c779a109910ff7a7a6605355c46599e0a78534a8375767776643e7a6e765c7f1446816797437b7e91541211505a5b96115491741243397a7011196d436e5e7b97166e026a85057445a1f032099f815b936b570359570905136d626f208c9f807477fd7ffe0201523f4a5f611c996e5a683e406978651e54747e571756937f027e3aa4757c705e705c5798534548807d92414953427c195d1477796f5042175d7c678c34a4606868750380440883416e6e596b786e7c016511056104068a3613351539900473f087f45c81463b3581417b3095939852634a3f36358d7a7f657f76024800133479446c6045844403ff60393c1110716604791b086963106ba362fd047286704a63460635648ca159316176040444536a3e0802931d4a306ea2393f50384118313e53407c3d541c67054949045155455c3ff456935f3b323c1733407469f16d7978203d1c707d865753483b056f445662623b801a35fe967c536b695749787e110833709f5719483a8c80013af4a4041c10525b1b6048531d9e66526c00193e4654093b63741d1d5545715d05181e13657a5860443c8b819313124784f4454338556b3b7f407659581d6d4250385c90441290771a58385736664595338175507d72747d505042f57017805630083a7f44455fa208949e5453579c953e4549659a07520a8836206c4a59115f40977c886815a2ff661817fd6695814342918d6c917670569f983e9e150a396b673c7c717a8b5c509c6e3d8b721c3e209f1e497d47739af233175e121a796f3e496f8f3f8f61195af55a803c3219a416a46af33e0b6f1637a234337ff197361d718e7ef1fd606e786982121b886c627a4917003163325d8c5d5e67a33e620a476c7531967f5e8b18ff4719118945577b485d54145e480b636330726b613e89427745811850464966663933fd44655f3798456d1e906079208780676686068d942015663941681087118d413da19e3a5274919e410a69778d5934a018889e058e054814427674f11d84753d9e5b7c30684577701001483c8e705770328247ff6c163556373984005043143f8a766e58313f8802419e4072193e189c727a123c1d6167757e524a3b9007556f5072578111a2006b3997a079738c783605718356363b5734423e737359190047434320990532483f1b31098a476801807b977e0232436f44956a053a5e207d601b08fe79a0665b077b69413e403d9d3a687173616b50995a7a14475a575e3a4976033c757d1b73109083647a7c96175582701b1d3a76381d981d52ff3f393f57004344613b3668a1374214123034715049474291040b8077539d025f064644", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000f" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x8d257f6000545060005450600054507f7fead49cfc66cdca062385ae79f051a4390c576000527fd0d9f7f94f1cc8d2fd223482c46000527f7b6000527f5f60d6e582f439f6716f6020527f60774d948fe1acdaceefe862a6e54c11916020527f58621fd1396020527fcca36040527f9191262e95001a15c1ac5065aad0fe33e29b8430636040527f9c0b8a9954d9176060527f3db16040527fdef46cde2c90ad6b23e39f070b2bc52f0998a86060527f833a636080527f75c9f692892ad391dbcf6060527f1d53b2784812f66e0e1531e8e1fc9660805260a0527f7f74c2597d5b8d9ba46d859159d12ad0e6d96080527f337fe7f3d3873486dcf460c0527f1560a0527f911710de8b38999cab6c3cfbd9b05044dc01de196d60a0527f082360e0527fc318899bbf60c0527febd2d6571e07174702ee55c0eebf40af20ce122b5b6a16610100527f1da060c0527fdf45d760e0527fd355a93d2c44e97ddcd60f845e1dcadc66d619610120527f59d8c48fff68ccba6cc660e052610100527f7f79cc531dd20f90521804c1993c610140527f9b331c646cbac8115fa7853cc99df36716c8610120527f656101005260406000610160527f610120600060007fce44c9eaccfe6bf206096f6aa158bb610140527f80e53ca3610180527fac327874562502b099b83df12efa6000556000516001556020516002610160526101a05260606101c05360556101c15360616101c25360016101c35360806101c45360536101c55360616101c65360016101c75360816101c85360606101c95360006101ca5360f36101cb537fc83d61127eefb10b62467c07424b431e4f8ffa2374b5b952590a757fee068d086101e0527f36c5a642e314a4206a0cce31007a78b3461a7631153367453e98bf676c2a3e83610200527f1c7678339b71b6afa89bf3853f130165a3310929c58f73c998cf12d16cf9cb4f610220527f0498e16f982b920f187b7075776fa525caaf69ba2d3b8539975374d24e95864c610240527f1bcd63bc8bc2529377f7892fd3a05a974d09b4763a0db31b795f05e1cd7873e8610260527fe924913b79c49c0f25233620ee249266b4dd373db8c7b3abd7a0af61352325c7610280527fea4f3b8eaaef65564a6f7eed3d44a3b2b8a1e1338a58ca32d0f1c37bafd788e46102a0527f19ad295516b5fda6e2b0525bb1792a8c3854f9ea8b005e02bc1d93c055decad86102c0527feccd32ce7ebb6ed22eb0d8aa38649067c4ba771b38416e9197ca1885a3a6bf906102e0527f1669bb286e4d3fd981a471ef98c077899365e07cb0ae637bf5a983bcbfaaf141610300527fcc64326653b1d5d095a16fea028ee0352ae85d218e177cdf19fbbfe99d12c4dd610320527f87a0bd590fe290637473b63898b5f26aae2d07420714e0eb7b6e0c4c561fe33d6103405260006101cc60006000f5604060006101806101e06000855af2600355600051600455602051600555600655", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000000008" } }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7f4b26560b2d940791740f8b3d018c1a3deaabe12c90b03eb180940437763140ed6000527f33b5de51493a0e79ac2eda2a932d7f6bbc34084b6634d25b81144e6980dd08e06020527f80cbaad461f9baa6cc07de7dec06dcbce0affccb02c772280fbab222907284fd6040527fea90ab16040b2db45d81d72fe566035ecdccb3746ba69b0fa0dded372834089f6060527ffbdb9232445406128d083228db41c0a5b67e230e9c014b30781ecb9de3cf5d646080527ff17aa266e879f8b4f50075f700c4b8ff08c0bea32f1c1905cb9a014b410efe4960a0527f8b86bf12b97a6ef8cd94a36eeec0f11605acc64103bc508300b3e50b042d6d1260c0527fa01cd36922eb2caecc22d580c276b849d7f72116e0d157d409d0d08735b60c9660e0527fb3ef17372c4cb5e0e2f4320df85b1423272cd53ddf0a5553cda29dd4e72712a8610100527fc674b6383e153fdb3c0cbc8458196402a7a077f550f21ae53fdbf2c1820a5f7c61012052608060006101406000600c7f48fcd75d2eb0a07a402d6f458c2dc521ec8a9d47ae55aae11ff8a2d5ba81b818fa600055600051600155602051600255604051600355606051600455", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x60d2610320fd", "nonce": "0x0", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x8b7f60ff6000536060600153600060025360546003536050600453606060055360f16000527f60065360ff60075360606008536001600953605c600a536050600b536060600c6020527f536008600d536060600e536000600f536055601053604e60115360606012536060405260206060536060606153601360625360536063536060606453606060655360606066536014606753605360685360606069536000606a536060606b536015606c536053606d536060606e5360fd606f53606060705360166071536053607253606060735360176074536060607553600060765360f36077537faf893e4163047c05289d407b9a702a25aa8e1fdbcbb6e6d94f2f9274e8c305886080527fe0b62d82842386d246eb69a810abdb2809726f7cbe2fa885968c3ce805a1bf0560a0527fc2d94f6ee30e0dfe8fcf22f0144f7bcb976c742351bbbeaf48e4b52bb3ed637f60c0527fd7544f4031d7cd44745ac4b19dd3227e94241ce359463d356f8fd78c9fcf47cf60e0527fbe8dd296d74032dbf63b373f0e10f29ce12bf743a77d052c335f51d21f82349c610100527fba69a74988c5676412c71650f0d069dd1122209f7ba2d0b857b925e14f237b44610120527f8a537da9e5559e3fd686eca7ffa7da09dda8d061e093b8bbd78aaab215a0bd17610140526000607860006000f56040600060e06080845af4600155600051600255602051600355600455", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000e" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7d03c760c325f8cdc4daaae014b8e32d6408fa8ee3ec3f283b6a30d7d42ba56000527f679d181529ad318d93556d9a0101109a11bbbf2d186cec7944fbaf2dbf14d8c96020527ff86ebbcca7ef069f796ba132dd561970ab8492cf0f43f8328d0c0aa98f9655116040527f676b7bb4ea0d4899b02941302abfa653b1f05e9c35e662d65f98c5bebab42c146060527f580da6c9840e9a73a9aba2cfc092f5c4851adb6961d0871abea94ea51c0c938a6080527f908136bad625f9d78e4a032b7f8b99b6a10021a1d0f79e78e176410c918191b960a052605e60c053608060c153605160c253605160c35360a660c453608c60c55360e160c65360d560c753604e60c853606960c953601960ca53601060cb5360cd60cc53607f60cd5360f360ce53604f60cf5360da60d05360f760d153608960d253604160d353600060d4536040600060d5600060f260097fcd3346af51c7b5bac45c869077565dea47dfc7724dcfc2de6f737ef73e779518f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x89408B1DeE3283a0AE426CeCf5C49cc3073Ed356": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xd13202f0930bfa690a45b6c2831829395d15c95781714271a8054dfb2074dd1b", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x7ee8e8e8e2000100000009ea02000000000000ff3ffffff8000000100022000067800000000000000190136000556fdac7fff9ffd9e13226262626262626007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff05600155637fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11677fffffffffffffff7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff7f820000000000000000000000000000000000000000000000000000000000000009901590127d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf96f800000000000000100000000000000001d6c100000000000000000000000007f8200000000000000000000000000000000000000000000000000000000000000712000110000000d0a300e750a000000090a0a08901d90046002557ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb019777effffff800000007effffff800000008000ff00000100007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb090071d6003557fffffffffffffffff7effffff800000007effffff800000008000ff00000100007ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a009016778200000000000000fe000004000000ffff000000fffff7007f40000000fd000000db00000000000000000000000000000000000000000000011d901a6005600704600455778200000000000000fe000004000000ffff000000fffff7007feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee10777effffff80000000000000000000000000000000000080016910000000000000000000682100000000000000229009600555901c671fffffffffffffff7f800000000000000180000000000000008000000000000000800000000000000002107f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a56b10000000000000000000000090131676013590cab83b779e708b533b0eef3561483ddeefc841f56801fffffffffffffffe9010901660065563800000017cc9700000000000000000023f00c00014ff0000000000000000223008051b6007556b1000000000000000000000007f62d8fffffffffffffffffffffffffffffc18000000000000000000ca00000001901a6d01000000000000000000000000007176767676767676767600000076767676767690131990036008557f7effffff8000000000000000000000000002000044000000000000000000000168010000000000000000900b15717676767676767676760000007676767676766f800000000000000000000000000000011b1b19712000110000000d0a300e750a000000090a0a760fffc000000000000767676240000000000002b057604790131a762900760076761e0002007676000000007676767600000060059007901a6009557e40000000fd000000db0000000000000000000040000000fd000000db00000168066aa0a5319bcf5cb4678000000000000001087f8000000000000000000000000000000000000000000000000000000000000000762900760076761e000200767600000000767676760000000a901c63800000007e40000000fd000000db0000000000000000000040000000fd000000db000001901814712000110000000d0a300e750a000000090a0a7ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0901a901d600a556f80000000000000000000000000000000196c100000000000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff1b651ce97e1ab91a7f7effffff800000000000000000000000000200004400000000000000000000017f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000010860006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527f55555555555555555555555555555555555555555555555555555555555555556020527f55555555555555555555555555555555555555555555555555555555555555556040527ff1f6f7815b1d9ab2d0116ea5cfd5513777f85a9e0ea98319ed1f93327545dd596060527fe993da5edb8e12b4b9ebbbcb94b5a7a01be8606d6e04a2d69fda74e39a6877da6080526020600060a060006001610100611b15f16000556000516001557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611c5af26002556000516003557fe6a85b19d7a91a47c412085e4e7e26e410e36a13b93a9f901a4e60ba32ffbdae6000527fe8c2ec339609ac230d0366063a6ae492ac251168ba0396d62c885d068e80d3986020527f211f80b4b063ea7b9ccc5158fe4bdb99f4b7eeb5c02a953cea6bc82d1f72e4236040527f9ece146764964f6cc5179913a7ea94fc67941932299548b23330f407200a6fc96060527f4874f78b335ce37e6aaf920457ab92bec58d03030fe0dbb8e1c3dbe2fce49c376080526020600060a060006000610100611c7df26004556000516005557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffdfffffffffffffffffffeffffffefefffffffffffffffffffffffd6020527fffffffffffdfffffffffffffffffffeffffffefefffffffffffffffffffffffd6040527f929a627f76294e7041dc0d74d9c3c9ac2cc7ce336a28023405d93aa03834d0bd6060527ff3d7a84534ee20597f4dc1fc9c44744f75a880989f14d24199c6be5490fb24a86080526020600060a06000610100611ca3fa6006556000516007557f0d5d8c3c63c36344c65b288698895195d95bcdc486db6b84bdb44000077b0c776000527f55555555555555555555555555555555555555555555555555555555555555556020527f55555555555555555555555555555555555555555555555555555555555555556040527fc6ff4b3f7a863bead987f1963f6b0aaff9e4951bbc26d6176a825a3d669e30c96060527fa8e431bfa6a9a58e352038b93bd3f670a9f41d16d64391fbfcf0c53e8af119cc6080526020600060a06000600061010061197df26008556000516009557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611b97f2600a55600051600b557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb5600052634000000060205263400000006040527f06af349be1401d5693cd9897ff18f24b75c8961730a7fb42f7b8c05adb7ae4aa6060527ffd86c3aefeedf5bd733562eb1c287e20505f7257275d65a3203da7df67d2cfb06080526020600060a060006001610100611b72f1600c55600051600d557f26a77edafe02e595da4fd28a5b12e58f35631825b42942ac45f741a3cc48235d6000527fa813b95c8f745c9e8c74835e6d7294a1f18d8c0223dd9de2195f6fb80e87df1b6020527f729ac1c416279c26f6ef1880807d14fb9e5b59dd04284967b886b763ee3e531f6040527fd55891b3eae94b9d31603841e0a506f4f1ca9707f1e396a1357d03cb7d4874766060527fd5eb98bbd949f52c9202a47ec52b8fd5ffa9e407b3597ee9264794de43fe58726080526020600060a060006000610100611aecf1600e55600051600f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611b52f26010556000516011557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6020527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6040527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6060527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6080526020600060a060006000610100611c9ef2601255600051601355600060005260006020526000604052600060605260006080526020600060a06000610100611abcfa6014556000516015557f91e80dcf2d1c4a9016fb27e21dae230fcf796b906a147329d2299c61e9fd016d6000527f4ab4bf536ecf5c53a5292fdfb6f790ac1ab2fa939c88c011dc458ae9d1c314336020527fccd9f0d9daff86a998d359e6d8590640cda3fd0c02ed358dd62c67ac9a599cb06040527f4b9e55f8048a5156261d796f0735f5322225ad150751c79cd050e054baf0f9716060527fc44c1988e80d316cc9fd2f484030ff014b9009644ead59d37f7d13ac09aef2766080526020600060a060006001610100611a33f16016556000516017557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611c26f46018556000516019557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffffffffffffffffffffffffffffffffffffffffffbfffffbff7fffffffffffff6020527ffffffffffffffffffffffffffffffffffffffffffbfffffbff7fffffffffffff6040527f1ce4cc2c6c9b4ef10f826805726283048e38decfa349b69274668dd196cf20c66060527f280ae8f2a302694e423a2310d8ee05b84f6b34cbd87645bf90e8a7da9bea4f636080526020600060a06000610100611960f4601a55600051601b55600060005260006020526000604052600060605260006080526020600060a060006001610100611910f1601c55600051601d557fda7ec96c9e839e42b8502b8626c53235c48e9901e9914849d7dd107de28f7f806000527f0d654e9e3f27b46f31641cc06966bc91038240c335ee08f569b19900af4ceaf76020527fdfdb06c0fc565ca8fe717ce893796e2262cc4432fffdb3cb183cfd03b3197b696040527f8a38b7e8c499eed9961f8b9275549450ce253c0becb777723bc6cd3f37d2f8c26060527f10650f82e1b46cb015b7f392f549113a19c32649de943a7d5f36f3f71b92962e6080526020600060a06000610100611969f4601e55600051601f557f07e55549b656864ada291099acf04498baecec4ee9e5ffabe3be06ca7f2d70d36000527fc961b86e7fc4b49ed3ab2e9abb290c42b3d4937a8c61ef808daa683ec9ece2496020527f33b1bdb31c143cd58de8752b610d54f1ac4366a83d50554bd881b9fded16c1bb6040527f97a6f2dec960870eb0946d725d0952a0f856a3d049ffae0b49505a16b358f0fe6060527f0b04637614be1f3492cb13ba35138d31672126f91d4fcbc49fa9a7b897d3c9eb6080526020600060a060006001610100611ab4f26020556000516021557fda2564d83aad64c14d0d9ff48b1b1a1a4e6389abfc88b1a84699d5bb46e9a43a6000527f79a5c9ee5f65ad10c9802d3eb05326854a4c7f1daf119125e85193871c192a846020527fc9349f26cb6c3d621a4819dc7abd4552b0d40262ed60c5f4de04966d34d306966040527ff5580e84b736cac1404b9f4653d9d02d99040364e727902bdb7541d9ae3a1ee26060527fbe39d7d06a2a38e968acc2fa53fc55b5816ebed7ca643a55f01e98ac1305c5736080526020600060a060006001610100611b80f26022556000516023557f8fccb068b531ac17d393ea08148715ab1898c1221e597564e77c2c9e78a9cdef6000527f4dc2cfb84a8455b0236d18ce80926abd45467af811f56e6272415193751cdae86020527fc4dcf859a68077f23f823233bf677414fd9590e2a65a24bd19e631b2684c01456040527fa776aedfa3736ca6866a41294f89dc4782ac275121732a97aecb822ff59306586060527fcdc5b3065863cb5d3cf03470e91aafedcb274e4f5d0848f68d2567ee7a9ddfba6080526020600060a06000610100611aedf46024556000516025557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffffffdfffffffffff7fffffffffffffffffffffffffffffffffffffffffdffff6020527ffffffdfffffffffff7fffffffffffffffffffffffffffffffffffffffffdffff6040527fe6fe5af4014fae1b8838a671bfa6509acddb8d61778b223aff75fe49ae234a236060527f7d4bca4cd977976c41986214a10be7463b36bd73e7283a7b62d15d454a9ddc9e6080526020600060a060006001610100611b36f16026556000516027557fc5929fdb9b2ea2f7717901114528523cce282c9958e34dfe1dd97e8b9faefdfd6000527f90785ad69d68434f9be9d6fc656043bf9372b65357822817086c2f06ccdb10666020527fc8e51af9578a30cf291bb0cde19d503d4a75c24ad8becff0d5314c630c30906c6040527f6adac970a61bfac29951187862ce1f66f90ee923742656bd076677d87469b7f16060527f03bec49c0bf8bd2c77dcba46118716009eb49cd098c538b7a4e5db94357441cf6080526020600060a06000610100611a4af4602855600051602955", "nonce": "0x0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x600060005260006020527f0cffdcad2364bf800d4f8ecad5acedf0975a3bd851fd9571673aa9351f5e95306040527f21d1fdc3e210bbb02f211da9de4a47a662b545dce50e4aa7af30a23003201e7d6060526040600060806000604260067fc66e5fe04ae9124419d32a64cd9d5cf2b3f445692192c5fc79b7b49fc73286eaf2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f015822aed75630376d37386f3799b27ec63cb07f30e4659a3b7d9cece811d5a26000527f67c06c3a98df4007b07860fa901efbb50ff143e42809fe2041fa24c02026c1126020527f63ad3f11f2f2eb2478505506675eff6e83f3867ff066fc991f5fe25980c389816040527fb70e5bd3f9e9428c3cbbd6d663f8e3feeb70b54c9197a0de4c49f0b7438466b56060527e14d252daa3180c5e0d1de5f5669551984adcfd0e36d90e1bc29ffdf06696f66080527fe38950d11fd574dad1ad6bd2456121fba6fb6895ac76aebb386b7a98ad76570e60a0526040600060c06000600a7f5c693deea99ec3065d08bb3bbbf8992574d560bcabcbdc8781ecb8dc228efa9bf4600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x600060005260006020526000604052600060605260206000608060006001617c22f46000556000516001557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f3bee45b3eb35ba25ddf514daba65fef3f327a2ab836025e69585f1a903c7c86f6040527f4499a1a179f672d04a0b2fec1bd260ddda493c524f1b9e513592d2f476b963f560605260206000608060006001620160eef46002556000516003557fd9c84e1cff4c078bf9679ea5bf23592805f37ea1ec5fcd75c1a6e8a3fd66e44c6000527f3d0a9c3803840519f5701b12bc8ba1cf5f5bfd079dcef891120fcfbdc9c2911b60205260006040527fca06c9e53a2cbfab1d6050b4ea989e98b4fa84f2d19c7594b0073962de4e18ae60605260206000608060006001620110befa6004556000516005557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f3154834094fb37ba975716f3970bad6297c47c172e7384670a4ce1f93cd344066040527f1cdaf53e7a35ca88126674601fa2b335be2920986a3cf316840aea84dc1b4a696060526020600060806000600162014802fa6006556000516007557f63efb6cfb44bb2963a13fd5e3fdaffc6fbc619559964acf4e8614e1d15f3ed086000527f024652b7aecaba2bb5d6fd3da04180ba0ae2e2c6ef618fabc25b49581db73b766020527f4421f056c8b311d1c0461d9e241c010377ee025a6aaaa218980a1e8a03b0f4666040527fe19e0855afb14158ae4bafec2480565d839a784cf5fb30ecb1d425b74a8d4503606052602060006080600060016146e9fa6008556000516009557fce846eb15af7598f7fefd78f0efce96830f71a5fa9f360b4c32c546e82fbe9c36000527f0bb1573c8bbd32e2cf127adcbfbc0cfa59330ddd44f22eb7a18aee283001ce1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fef7a75d0b606ceb4a6a8c83052578514aabc80200cf0e965247e40869b01cb7160605260206000608060006001600161fe07f2600a55600051600b556000600052601b602052600160405260016060526020600060806000600161e8e5fa600c55600051600d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f4c23edb3269c38a2b71f2dac376ef96277b30deb4b8b5f4b0a446894fb0434e26040527f4f5320eb658715ac23b12693f7b736660643a49f7bdfc12aa58368387856f7bd606052602060006080600060016201039efa600e55600051600f557f16ec952430685ceab67971d69ba453c0f7c7ace8ced2b2ad05fdbe8855b966856000527f16e01e4b4546a40674fc3e4afa205f32a99e0e0361e1a5bdca14dcba1f4be01d6020527f58e5f30ed3f01bdf0ce96e36e0e18f0ab1f5f4dc441853b7a0a05013eb0588866040527fffda7608c1228a1efb7030695d5d5c52e8b71938f0006be285d3fd45e9548e9660605260206000608060006001600161a448f26010556000516011557f52e92aaab476abc19ccfb6001e47185d032d199e483ade94021701640b96dbd46000527f67fb34f376fa286f69b858fda0aef9dfc878cd3d45a1b4731b602dc8a423181b60205260006040527fd264e88a16f0b0b8fb3baf7a9de435ebe24a3b00d37e02a4502743901910c8ff60605260206000608060006001600161fb2df26012556000516013557f689298d3c55f4a07506ffb08203a915568fb1992f0dbe5265e8311236232b9bc6000527f85d6554f4cca60914a02671b5008cd2328a23b7a20e71f72b30e1ba3bc59071c6020527f6d0ccc79ed8dcd74c3db310a39119e23b2ed6c3352076c9b46a56b00bd9f941b6040527fffffc98dd3b5e04804879b2857f1f05896ea2569f79e81684978dfeea6b19b4060605260206000608060006001600162011fb6f26014556000516015557f1ddd145d47aa6659d09a487fc08ef28ca0370d45a533849285ba2e335ec271ef6000527fab376704c96d23f843cb7095fcb0ef36f74800a5d2f6d015c8a11cb637030d196020527f9f16a0d1950efed2986a574875a2312ee9862b0472eb497682c5f77de39c427b6040527f0de7d8686e5461ec3acb8012d977ed0b685b39152060460c6986d7b60191d5576060526020600060806000600060016201629af26016556000516017557f52c42577ba6da35a6dc6926eea25f40ce638bd287d51880e62587aef56ed476e6000527fdf8f7cac41b8d9d41c8e98eb22e2d3ba333466a3499e6c4f0e3b55c29be7461b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f2e2603f500a5f34360299f4688039a58e69f5ab3f2bf7e7c168b4fd950ab278d606052602060006080600060006001612aa1f26018556000516019556000600052601b60205260016040526001606052602060006080600060016001618b52f1601a55600051601b55600060005260006020526000604052600060605260206000608060006001619b41f4601c55600051601d557fb2b76192badb0847f3b2457590b2d44c9f96bc0abe182d87456e2767ffc40aeb6000527f2c96e9ba9df964f2b4008771c04941993e39156445d70d0f5dbe25cc9d4ffe1d6020527f305608b33c90faa5662c24c23d12e422f3cc849466213be9363d66eeea9991026040527f67c8fa634bf5d705e990f5cb32d9ef356bf4a7145cd2c740b4b1dc56d6cfb9e56060526020600060806000600161eb8efa601e55600051601f557f926d59808b2bc3e14e0fcbcc631dda2f8b3aa372cb37b1423679e598184dc3d06000527fc427b2c4b667b24ee990d36a0ac61c6e6d707f3e3e416d2005a83e3e536f961b60205260006040527f16b4650305fd17eae244c1d693639579d47c538233c2533e3e6f5b86f0089220606052602060006080600060016170f5f46020556000516021557f930e1fd7f9271151fd26823a99c889ecb4ab61546feec146368da7d21f44fb776000527f5fe6d43e7f98243463ac5569776be9e12fcbede7659966ca47a9234bc7bc8f1c6020527f4d27a9cf036879918194afbbb5f7646c0f03e28236cd38973db762b324e04ba86040527fffff287e5f9bd1b2ccf4e8b875aa7c72eb70c51b3b18e3a276736815060f85b360605260206000608060006001600161880af16022556000516023557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f8bb7ad38f2ccc549cfa98226ed03f00b3542544ff46096e94c69af6ca1ec73be6040527f22ae7721a3f4730a9f09cf0e1f575bccd94ab337cdcef1c3123e4825ba1dd4266060526020600060806000600060016174bef26024556000516025557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f45185c6e5ddd78b586155caf4751ef3969268f7d012d07be817c7cc632a983476040527f20be2543f6125e7806400f8db64d7c1c70894861c08da888f41ddb4b5dbf539f60605260206000608060006001611661fa6026556000516027557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fd8b851bfdafa7d90d5eae79c1db25287222016d88bae4b7856987cd1ab81e81e6040527f6f84238d15c5c049dae779bbef02ba59571258bda10b458cf71b95d1640c26716060526020600060806000600161d66efa60285560005160295560006000526000602052600060405260006060526020600060806000600161aa00f4602a55600051602b557f846458ba17478612f4be17db5ca7c4ee8e2397557a844b612713350a519ec8296000527f21bd55e20abce4ae2cb70e577a3cf541f028abb57b1334e4cd7f7ce8f302941d6020527f044d78e3b2dedc78e77d3faf1685dbc361495122ebcfc719b1cfe48a34c11fcb6040527fbaa38fd4409479113a08882a5d3e16007be8e1d49f5a4697fbffa9ce4b3f599160605260206000608060006000600162014c64f2602c55600051602d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f2bbcad12919eecfc432da299104a72f9ee012e14503b95473f5536f52a89e0f16040527f5b44246c8e7a5314f17fe500b90f6a99c01e8991b0a07d85a1adfd7d10d6e3876060526020600060806000600161ea1efa602e55600051602f557fb3d5b41474c8858089f3b75559e94169729a884e468b01ca05af199455c760446000527fda0114f5d7b57def6f3bfe8a9c943e56cd80622a5b4c9243f448fe62990af71c6020527f6ac9cae3220f21ad35a896c09f219bde9068fd977b67d310fd5ed2521817a6336040527fffff16473d4bb2613dad0ec379c4ad2b99fd5dc294a4978087252621228daa0460605260206000608060006001620170a8fa603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x68066aa0a5319bcf5cb47f7effffff800000000000000000000000000200004400000000000000000000019011610107557fffffffffffffffff7effffff800000007effffff800000008000ff00000100007e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a1000900b638000000067fffffffffffffffe90019002610108557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7cc9700000000000000000023f00c00014ff000000000000000022300805901b712000110000000d0a300e750a000000090a0a6fdac7fff9ffd9e1322626262626262600901a900a777effffff80000000000000000000000000000000000080017ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb090016101095567ffffffffffffffff67ffffffffffffffff9010901d6101117bc9700000000000000000023f00c00014ff002c0000000000002231081b684783921454358970526a010000000000000000000060000861010a551b677fffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff096001717676767676760000000000760000007600006c10000000000000000000000000089006901a15686d5adef08547abf7eb7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a001c7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd67d0212626262626267f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe900861010b551b61010c557bc9700000000000000000023f00c00014ff002c000000000000223108762900760076761e000200767600000000767676760000009007777effffff80000000000000000000000000000000000080016c01000000000000000000000000900114157fffffffffffffffff7effffff800000007effffff800000008000ff00000100007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1790187f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd61011190046101116901000000000000000000760fffc000000000000767676240000000000002b0576047900990137e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0712000110000000d0a300e750a000000090a0a089018901561010d557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90050b7f40000000fd000000db00000000000000000000000000000000000000000000017ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a009011901a6f8000000000000000000000000000000167b368d219438b7f3f7f8200000000000000000000000000000000000000000000000000000000000000900861010e557a010900000000000000000000000000000000000000000000000000717676767676767676760000007676767676760b9001777effffff8000000000000000000000000000000000008001682100000000000000229006901276013590cab83b779e708b533b0eef3561483ddeefc841f57f62d8fffffffffffffffffffffffffffffc18000000000000000000ca000000011611778200000000000000fe000004000000ffff000000fffff70067800000000000000102900761010f55760fffc000000000000767676240000000000002b0576047638000000116610110556007600190066c1000000000000000000000000067ffffffffffffffff677fffffffffffffff90081860006000f3", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000011": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000012": "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000000000000000000000000000000000000000000013", "0x0000000000000000000000000000000000000000000000000000000000000014": "0x000000000000000000000000000000000000000000000000000000000000000c", "0x0000000000000000000000000000000000000000000000000000000000000015": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000016": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000017": "0x0000000000000000000000000000000000000000000000000000000000000004" } }, "0xF0AB5055e5Bdac80D061b1E7f2bA766d0498b697": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2629e617faf4ae81683157df0e0b4f967666ca88b6f2e41be40c619288f76ac4", "storage": {} }, "0xFb4bfba6610Aa9869db78F7c6b8f28b166CC8674": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xce939f993ef29fe9f18cd2fa2ce7ea2d51b23c6b808b850b33226f40d4cf9a86", "storage": {} }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xabBD7eFF49254583a862901dEd2D2E9DF7542E5E": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xab20700d44a6cb18e72347969198ce9e297e3f58b62c60f9a2450c93eab96240", "storage": {} }, "0xd51fA0De3ccd210D4cCA7f9D739f305CfCAe9117": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x579dd91bd24f9287c7fd47e0eb7b407c83dcbf3217e11f245153ebe0c1136d83", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556003496002554a6003556002600455", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x60e360005261020060205260e36040527ffaae07a3a2b9fa3a20602d0e9afc484992acae594db6cdb5c5e970b01fe1d2fd6060527ff0b069f3fd126ae60edc9f8fd44e79165d533dd418f68f4df72271a1e4693cd76080527f1bf6cd9b8e4f6ea9eda97e449785f31c52a4b2d56e06a30160ed96a6feb4cd2260a0527fd593551965f337f92ad2ef16ea5fbd47af7fab77720e2b5d1f1431187bd1266960c0527f10f80389536469944c05ecb9e0e5815ecce9aaa8fba0b6df40e4e4ea824c466160e0527f7c62cd4b1aa3e55e1c53163efd4767bf340c7bcfe799823dd813c299eaa43452610100527f8f165b90caebe259b370266184e1f0cafd9d42b37a5d3e888f5ef09dfc54032c610120527f0bd6defa6b5381c9428fafda0fb74a9df34db1d8d695d8810a9622b83b75ec4b610140527fd67130e95cf510a562e00a1b65ef39fa2c8a71008af6243bc382d06bb393a2e2610160527f15184ebac4fa806cd9a59b5a5e7067552acf594b687582fb26d45cef67b04f17610180527f5ceebd64fe9bd9e8440bee276ac5342a3b8a4126fcd137f2b03911c4694e5c436101a0527fe6c897f9f07892811764a8afc441bc4ab2dd353220874dca6ba859a9cbf6bc036101c0527f28e95ae07a5eaedc49a861dd0d89e2d310589d3c1af7c21816c4090909fde9e26101e0527f1d05d29d378a36206ae4f3abae31e26899315180a1c586771cb16fe4ef257361610200527f552b6cd8377b3231d5f955e9ca0933bfe0c900d568852407088d3b3a154aa685610220527fad10605210435009fe1b0bbd13347c8d44107b90c8c8a6e71a9055b33c46e3ac610240527f4a0eb5c400a314152caafd8cb2399e459c06c26804f4a72275d8820f905dd7d5610260527f35257277817de1ec1dc26cd00ebb54e7bdcd2727a93f6ad18c1ff2a3fe058eaf610280527f26014895171a3fbc54327a922b6baa6008f188409b7a057a20f369d1a31082ba6102a0527f8b733a0ea3de93de3edfd4d6cd75704f0705fa00d25ae45d125edd24d74a983d6102c0527f1e8478e4dbc47704425a059f02d999f16d754e5830a451fbef62831e891154816102e0527fdd64f93827ed6c86190fbcdfb861b25832bc7ade533ce7b745e7f09724bc5a66610300527f2e9892e7834d12e6fdddc6f459a787bf624ff3c9491f78b87d15f687a6f1171d610320527f3f730fdc84ebaeddaca539e147900f45f6fe6e685df79cdb6ab2459d03ccbc70610340527fcca041875600703836086de20840d1183317a3fa577890ce6fe82039476a09cd610360527f75c64f3414ce2e4e9db92b2faed2c5e36cb0564e6085f6b418b6d5dabdd3304a610380527fccbd8a35b466aaa12f730b6c5fd79b506ad023e8796db42af39ab5ac6d67697b6103a0527fb01d6cecf3b1e6668744c46db1be303ed3d4efa65f5c8082406f1fda81ece65a6103c0527f978144fee5e0eb04f5a06ec8c5e05581c3d1d41b29036103f04645beec00e0316103e0527f6db832109438b66e4481c69f387825932055264bcac0880659388926223732e161040052607c6104205360846104215360866104225360716104235360236104245360526104255360e360006104266000600562ea33befa5a0160005560005160015560205160025560405160035560605160045560805160055560a05160065560c05160075560e0516008556103e2600052600f6020526103e26040527f248028ef9455230bd7f522958ecaaf82bed59d3e3eb33fa958cf0c9d2f60238b6060527f44943b2e4e40cd93d6d2ec3967500767d5ec8ee835418743f0fd6408287e85d86080527f2f8a7437b7d241a054f1be704da4945e6ee1ca560dc96ce512f583a06bf7530560a0527f36dc00a8c881ce08a5517e4993dc6cf55671ea731e281a652349c8de444a279860c0527f368250dcb2fa909e2f75221837413ff1594aca10c381d3212a0341095705c1c660e0527f45c68c9fdee5d1700940d43b61c26dbb413c7ce32a43135b5e608580f659df19610100527f6ec18e46edb7feaef4f2ef79d14eed52c1a33ce66e7d7100d3e599fa93d5a487610120527f6bf749dfc1147cfc81c360b7d9ddbf818620bc1cb69935fb1aa0968b0341d1e6610140527f7003abd30fd7aab20dc02a2cf219ee4e3370dc944614bf11fc9d7e7b5afe2b64610160527f5230dca1e5154963a38a471021d87e08c4b019a62e4a78077a49d9910aa210b9610180527f74455d43ebb593133cc60bf92750661d4466929d1e33223b808e7830144c0a8d6101a0527f4adeaf27275c0641d2bd7cd987d333c2babd0a1d6dadd4bde27bf7b9f5c756066101c0527f15f2e9a6302c609edaeb3c327366fc0ee173ac89d092cdce9938a64137b1a9096101e0527fb0c77bb621770478ba149ef8bdb5cac919eaac04ebb1b93988ea1fe2d08db09c610200527fd962c98a7b2b0fbf426a137b0c1da1ae9e26b04d9a1120cbdd75aae7d1e347b9610220527f98cc876b2e0c67b1cfc529ec6b905d8fb2c92cb667150f6cf55ad01be28e9db6610240527f0fe3ff0b7067a1584d2c13d2e0d88eaf0d92cf20ccf2069c9adeae3c1935c343610260527f0813c163bf3165486c863aba88cdda635910d0a67a6257fc797900c9d823fede610280527f996247e75b775207a98afd38a3922af9f856572d8611e3bb02881db07ec2b0386102a0527fc1c01ace26be91fb5f4f5a1f40d9d4e08e8467f04cfe3ebb27f896d5aaa295876102c0527f46f445787484e54524c9dee743ed2c7421ff13520859c9845bd48bcfeb277ef16102e0527f08e8f600d4a48ee8c71deea2f511053da84489af32e4b8909fc90f79052cc605610300527f7cd12f8c3ba6650410f01559b8bc869f70ff721ce334d8ee19e1e7bbd52258b2610320527f1a38ddc7183eac35aa6f1d444063379ec52a85c60bef447d6df20b22a35ec846610340527ffc2819284a26887c7dc9eead9ad44d4a685cb048c42bfa434286a776c898ea67610360527f01bafafac3bb3f73f6b2ec355422a65e8f453701d18e6602febc266c88a7c792610380527fa2dd5015e81fda79bb08c408f2ab994a7d30ac41eb14e2a264d9252f473c60776103a0527f31df7fa21fe0a305e3e308ed5dd4ab3707cf2c36f550eb36d06127a44e8079ab6103c0527fff9acf8767e66237a69bea82986cf67e395fedb7cc0f9b313c71e43f15b0cb996103e0527f71ee952eb352d50ca60c38c05359196881e5c92b9b255d3db87f5d049b8dd2dd610400527f9124e3c8a00153bc22ceff34179e0701f387f47ceea3bc39f395ef7bed9882c3610420527f6bd8000000000000000000000000000001f1fc721aaa4119207ef47ad8eb122f610440527ff9d42abb6e626b18641b3106800eb0533016cf48e6c16156c8709b9a715db426610460527f8acde410f5e3406e1903da96d312a40b664c7739273db7c6ed6648239e040a20610480527f2cabadd704d468f241dd904a6632fec62f396418f691553246991f86235783a36104a0527fafa27b738831fe4b18682241410d87fbe96a0e5fb9956bde3405e8f06a6ee1be6104c0527f9b811b69d55cd62936c12b36a8905681f95baa73e38c804f0dd9ce859418aec96104e0527fe6cd0e199631c5561acfdb0f4775dd26f5730c5625fe2799f96cb1d030284499610500527fa9afc4207868c6d5b86a8dcc23c4acd8ad6ab431f4780031f72f810cd7fa74d9610520527f34625a5e5161695cc029dce6569f4d787bc0fc318a8099d6dec7411e96d2ed59610540527f52174be74808d4f3bde58dc2b44ef99a1bba5b5ad5cdf5549f049fe0b184d7d8610560527fc8f06e1de0809d1ac202556892c6596f6da699d61bf9218cede09d49f402de94610580527f6ba89081a0a1e0c3b5e1d2510c1bef2c773952f1628539dc9cf83dc1b70bccbc6105a0527fe4dfa2deb3d771e6f98a8ae4138a8283092ed48bbdd7e25ae6deffe7be3bdecc6105c0527f7a7741900ef61b99f257f3f78b3c4bf782d1d386b38cb7ef1e39f0b5b094e0206105e0527fe7364d03a262655301265f05019b07c401c6a1216daa542f8b9af7063aee8012610600527f7caace2fae0bc642701a9e68679af1edaa352de7b266807cf9ed1f4183c7109f610620527f55d3fd38ba1e4615050ad6b85977898606251555166540ddebb6a2edbec026b5610640527fac02c66f1ab04dbcbfdecbe4b45b23e88b47cea22aa6f9fe54cf5566ee5c8233610660527f076dbad8993743658ec20a6b08011b7e963e84267da8c37973bd60e9575959bc610680527f425c6ab015129cc0ea6630fc7044e458aabd48b9c72f9ab49cd4bc431704395f6106a0527f9a7a1ef1ca5040473b5cbb69b5a5b1b335d56098cc4e21a66b28359a7d7a3d836106c0527f08bda3f52af64cfb832c3d5c1b6c8e6c1c30efde970c00767b0613df6bd551e46106e0527f335ab482163dbaf64f21514e2261607cf8faf45345760c9eb208c07d00605a5d610700527f20c1360ef4857065a011a48e0edf602a97ee036d03c04778c2294588259a62b8610720527f583bd4fe66b6af52f1d2ab8c694e7af74fd1756a98ef0388aa3e04004c3b888e610740527f38a6b73740b97b303554dd7ac963234b5d13c612920018e0f43540afcb50f748610760527f99b3a4b63e7c9548c08bf23821ef55a5a5a1f7a5d8b54294fba52551166c320b610780527f3476912286595061f76abfde7b82d6b37bdc511082ff700c7c0374946e87303a6107a0527fe367d1c0f8d4728b996355f936b87588f9b3119896e75dfed07fec08c7a883066107c0527fd3b5804babc1a6f9dc98f1994d8e3d0ea45c10e164df92a05dca65c1508680856107e0527fe1eecc21fd182df2d3dbf79a9e66a5f9a2117fb9b6455cca7ee8ff3dd35f958a6108005260e161082053606461082153600c6108225360af61082353600461082453600e6108255360c46108265360f361082753601e61082853605f6108295360b761082a5360b761082b53609b61082c53606161082d53604461082e5360cc61082f53603661083053608f6108315360b7610832536103e260006108336000600561927cf45a01600955600051600a55602051600b55604051600c55606051600d55608051600e5560a051600f5560c05160105560e05160115561010051601255610120516013556101405160145561016051601555610180516016556101a0516017556101c0516018556101e05160195561020051601a5561022051601b5561024051601c5561026051601d5561028051601e556102a051601f556102c0516020556102e05160215561030051602255610320516023556103405160245561036051602555610380516026556103a0516027556103c0516028556103e051602955", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x20000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0xe0000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x35", "from": "0x0b90ABAC5C8F6ce035a107913ea5D7C6eA24f9f2", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0xfe" }, { "data": "0x", "from": "0xabBD7eFF49254583a862901dEd2D2E9DF7542E5E", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0xc4" }, { "data": "0xdf92ac04706765a4e274839cf32f84312e756a6a88f9571ad2cc4b6bde369fb6e1eec69f223fb3a373b720e2c04b3cf6975cac6b07a5db676b54bef65a0542e123d14e1b2a6609d159c733c586", "from": "0x08d033C61e1E55bF868082cf788a3949f4ea949D", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x598d" }, { "data": "0x0fbede1cda5ea094f3d336e7086c33f03a60", "from": "0x89408B1DeE3283a0AE426CeCf5C49cc3073Ed356", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x0" }, { "data": "0x185adb1cbf8c55587a099e646bd7b247a0567c03924be159636e", "from": "0xd51fA0De3ccd210D4cCA7f9D739f305CfCAe9117", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0xdd" }, { "data": "0x74186378b78937c2e7cf7cd7d6404c8a4dcfc5e5d727", "from": "0x0b90ABAC5C8F6ce035a107913ea5D7C6eA24f9f2", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0x33a7" }, { "data": "0xe02e8207ba2827e4a98f8a5fca6a6a2485896b4f1e120e0990f8f1abde4f14c7d175fec00dbe69d167e0ca48333b99214cd6fd665cebaa7f1e9e6e1f16abd9", "from": "0xabBD7eFF49254583a862901dEd2D2E9DF7542E5E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x7ffb" }, { "blobVersionedHashes": [ "0x012c1fb205d2aba4cdc7b1da451737a4496f61db6a9404f086443a9ad6adc41d", "0x019f3411a7a4978373a8718d07d80152b457d6167e6b2e00eaabb75d23005fb8", "0x014d775ca00a525bdfd432f7bdcde8821b7434e7d6d041181b009c9ad14767fc", "0x012063c494734e4905ac1a882e1da4b41dac3c6f4d88165279a5ea3a4e1e65b4", "0x01d404619f4f9383cbf624a616734f4f13bd4c2e778c5c32f8b9d3205963629f", "0x01fe71124eeaa9afbcd2c70a0092c0bc8c71738e958c75d896e546304f5f665d" ], "data": "0xcae6", "from": "0x08d033C61e1E55bF868082cf788a3949f4ea949D", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 1, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x7fabc0867b153544d0a7a6917649213ea389d9fbb8d2cf1d31a4921c2d19383080dc1752efb642d761d03a87ab3e5fba43e6b5bb9d55e6c3454977c539d55e32c00c02207b00c2ba56c3d800c2716df020f56948eed77d629bb629f6812e9908d3e1e5846faa3ddb00a4eec063222bcddecb516dfd85543169209e07727b860ef2d540c3a60529b836baa37caa3253bf76cee4b2da73884961397d8208303f7aca875b83ab8f0458ad54306d435dabe741380930e4f72130433408dc99c1fdb46503e08b2afaa43fdcaf9d69cc64d45a4763464acb0cd4a8ebdc421c7c4eb55b6870b824732294d4da57b9fd93d9af41676c9ea38eb4d94305582f2ded7fa8ef6de9770a7cdc5e36c879074bed19d32057ac3afb62b016bc42ab1a8631ae96f991cec8d9b55a4078ba3e115e7f1bbe3a1a59b1d25dbca7f12d4aa49f89ba7acf15e72a210fdb6bcc820e0e51ad73169c35c91c5ec53a9d80206d2c911cf72909c56ffdd464e9cad124ddcd09624a27e49454e4240996cf05795d9c80c6de9f5057f0e693b1790e7c1241dd43c4b2171b753eb0e1ce4d03dee9533e0138b6a7ccb3bd963918fae9b528ec34f4bcd0a24766da", "from": "0x89408B1DeE3283a0AE426CeCf5C49cc3073Ed356", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0x432c" }, { "data": "0x73", "from": "0xd51fA0De3ccd210D4cCA7f9D739f305CfCAe9117", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0xbf" }, { "data": "0x8cf9e1e7ecaf9c7fdba7e4e5ce437b3475a6722752a6eda1a5f6f3f8d073f7d854b4b8043d502b0f3d560708cb912bd4d954727b06c1998c31476653936c81544b5398a43189252c1cc1d14280684fab74271fbf4e43b4cf0199d1c322", "from": "0x0b90ABAC5C8F6ce035a107913ea5D7C6eA24f9f2", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0xbc" }, { "data": "0xaed6c0af2a3b780d8f64283222061e3546f17c8f89432dd88300ad877a6f3cded23eeff09e65eda5e1d3dc07612d5a4d104957d44ddf8875f1c21cbde16f05683e0889ea62cc5614981f91006165b8298ddc6c16572aa9c4eab011880f81", "from": "0xabBD7eFF49254583a862901dEd2D2E9DF7542E5E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0x81ce" }, { "data": "0x131f100b936e782a5a", "from": "0x08d033C61e1E55bF868082cf788a3949f4ea949D", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0x7ee2" }, { "data": "0x77fd456d2b161715b9d91df9a7b38ba3a2697ec0db03ca7bbd44d4768850060e6b0f14724a7240c8f89ad2645f00eaae2846a4815c675c5af4feb83052eb5c05d0856eb1fe0631c3ca5d7295d26fa4e4ca5378c417", "from": "0x89408B1DeE3283a0AE426CeCf5C49cc3073Ed356", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x0" }, { "authorizationList": [ { "address": "0x000000000000000000000000000000000000000a", "chainId": "0x0", "nonce": "0x0", "r": "0xfcc66a95eb000258ec04458ea3e7c3fbda47d4e513fb50bd91302c17eb758f9c", "s": "0x16061ffffa1c3a815c757cb500b5989dddace00fdb3d6d90b93ae38f3b2591c7", "v": "0x0" }, { "address": "0x8fd379246834eac74b8419ffda202cf8051f7a03", "chainId": "0x0", "nonce": "0x0", "r": "0x62957cb32907e1636ea9fe81e4b5c4b343cb341b9031e0b1cfb757e581726714", "s": "0x7631afc54a3a4824e975d7817b97a58c48c4b4ee6115c092dc1b8e3902d39baa", "v": "0x0" }, { "address": "0x00000000000000000000000000000000000000f9", "chainId": "0x0", "nonce": "0x0", "r": "0xbce2fa378f0a346de227333da920658ec00165a3d868a08e24820aa5d661c66f", "s": "0x79434caa34fd81d2fd6a72e4c37328423b859ba9699db8070eb8cf6cb62ecb5f", "v": "0x1" }, { "address": "0x88f9b82462f6c4bf4a0fb15e5c3971559a316e7f", "chainId": "0x0", "nonce": "0x0", "r": "0x135760c8d007349409e2e9e91d1920717096e5c322a09fd57aec337e9d45a0f9", "s": "0x51b01163736696657476c58c28dd1c64611ba807f95d9bf08e498f0a3ff136f0", "v": "0x1" }, { "address": "0x8fd379246834eac74b8419ffda202cf8051f7a03", "chainId": "0x0", "nonce": "0x1", "r": "0x9a99690542fb5529e0939ad8f6249b224f006b5abe02d6b1266092586d9473da", "s": "0xeab54e0e8d555a5052579dc28758792ec2ab9811ad89bd74f8ead90f1d0f20a", "v": "0x0" } ], "data": "0x275bd835384724a426a222f96df619961766984861b90e", "from": "0x071b56102BcF6C36a20a3a16fE48781448B1C274", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x00000000000000000000000000000000000000F5", "type": "0x4", "value": "0x1e" }, { "data": "0x00", "from": "0xF0AB5055e5Bdac80D061b1E7f2bA766d0498b697", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x000000000000000000000000000000000000000A", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xa57450a9f1a11d34fcd9161c926b59b6a49fa5c410ba426f4653d8d5b1efc7d9", "s": "0x7f32774d49271f17179ff7fca61536e2bdba3e13c5f4935e4249b5d51a6908a3", "v": "0x1" } ], "data": "0x275bd835384724a426a222f96df619961766984861b90e", "from": "0xFb4bfba6610Aa9869db78F7c6b8f28b166CC8674", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x00000000000000000000000000000000000000F5", "type": "0x4", "value": "0x1e" } ], "version": "2.0" } ================================================ FILE: src/cli/tests/vectors/fuzzer_test_3.json ================================================ { "accounts": { "0x0000000000000000000000000000000000000003": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x00000000000000000000000000000000000000F5": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x6517fa85aafd83a02f88fe864d93249c357cce975bd1f35d0b0430a901613f76", "storage": {} }, "0x18665208d71eAF07c959cB6d2b263aCE3eF24042": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xaf09231cd0ab58828b41ee0ba14866d944b955fbc80243a5bf0bc8c86c664552", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f16e24b8def199c4faf4b0de6ce2c63e66000527fe7791b7fabc464b9917b8670c24bd789323ae58b0f592f02ed3d06e79ecbcffa6020526f1206832c56ded76311a0db4a5bc0b47a6040527f377a7b0ecaf5f702f0a97545192bdf9048a284141d8ec65c40d673bb507d61e26060526f164f4218ce14fdcca1a3917b8352c0836080527ffd2305f25eb90f9195ac522e4f6cd88e81545fb7f10562a26e1aa6d1466bbdc760a0526f144a6f62df019666d40f23c29262f4ec60c0527ffb087c5672a2296e370e37d9978dd2fbe48b2a672b2c4cdca1044065048f4cac60e0526080600061010060006030600b7f21a070d9db735f0bf7584a27bb2989cf7e5394856980d1ba9e331f287f809f76f26000556000516001556020516002556040516003556060516004557bc700000000000000000000000186661c6cb8c557683f3956179418be6000527ffee89013185ca411ac3c1d013761ece59171c177ba2b3ea4a5ba57fd23132bb56020526f1972ee1d32f075d8afbb8bcfe83ae8886040527ff1af141241fe7a10d277654ccee3d1ae5a920045671bc866bbc2fde1d7fd5bda6060527ff6806c397759dafe04362b30bb4cecee2f2c7ad27c5ca85c9a9ee5c0631b82fe6080526e6359ecffaf804508e2133f4cec6fb460a0527fc0af6115166ef142b6955aa1210eeb62ad00eb163ec6f4a136a0433055fe382b60c0526f06218d0729b50ed2c4bb39e9bdd0ef6460e0527fe76fa18f7bd8bcae67625fccaf814b691414b9ae8faab635f5f26a69a5bc39c1610100527f54aefece91198aef0f6aeff12c5bbeee9ac4b7f53e5b0b3df5d18a0b4d883b27610120526f0ea17c12bbe9b722a199f015cd765e30610140527f839f0cc89472d1544db8f1e5a7cdc6cb55a244294ce0927a8cba0bab057482b5610160526f0783e9c6f15f9a5545069dc92d2804e5610180527f49a0323eef45d535d31de25f11bfae9a2232c8ea963eed91a947ac24057774816101a0527fd6487c7c52f985b8fee0c9fe74e2d52126f0cc94bcf6d03a821ca3081e1694e56101c052608060006101e060006099600c7f4322102205f887a7635767bbf3bb40eff62346a24993b2dbd48340d613bd7c1af16005556000516006556020516007556040516008556060516009556e375c316e62646db2c8786a8b0c99f96000527f73c5d11ce498ea04903d444de4db21f1859032a2222b3a1398e989ff66038e1d6020526f02bb1e1e9aa44652a3d2f90cbadff6e26040527fdc4c58d923744044fe05eb40315de822e830e55f24b67b74c7e3fcbe85bc13846060526f169e9504cbdd505e5e011a09319dd5976080527f4c5efd999ccb14045319553f51ac1be0b40789940f1f7b060288d5ddc22f7b3f60a0526f11917a01e6cb9dfb309d424e92ad637260c0527fd7386bca15ce9cc8365ffd362adbc5126f52d6c3d3802bd05684ce68d5e344af60e0526f13cc36e82da85504b9394234ba7bc0ae610100527fd19a92d065480cc7d89463d00a86f3207b514b7e0c10b2ffd4ef7011e2752666610120526f0355c0f12e9ce247869f07f4b25e8ce5610140527fa16eb6a8fb9d1fd3bf2fd16518d276396888965053f66bf8557ca90f269cca90610160526f08ec0da76cc6750ccc460296d791ea40610180527f2284637750bea945d7ec2425afb94b3efbe4813a31be1ae9ca7ae586cdd744d26101a0526f098827f98c92126deea2d037fa4c14bf6101c0527fd26774d199c337ea4c1d1f975598147fd0f7adb7fb3e7c7769c84c44c02d1a4a6101e05261010060006102006000602c600d7fb04339addce3f2e532cf21af244ab062b26ecd058004437c40a04087afb86cb6f1600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f175f42faa24a4f636d8a463f7941f13c6000527f38b53dbe8af42d72270c1b541da8c8dac472f7ec9e9028bb34ffb68635c3567a6020526f0b60ea582837a3b6397096913eaedf266040527f85d30f905969403d9c6012f333d90bf3e8eba0a38a2e20d4775f27f6d5a7aee56060526f0e0730b9d76b6ff1207a7168f9609dcd6080527f5ce106c8a7242d425fe3b4a07db65789e0dbadcc841d04711be513d73fdbeae760a0526f133c63b3f316edf9dd452d522258b39260c0527f280dcfba6160d56f8b6d0a9bf26e733efa882535efac1f7c2c9c7d1806a33b1560e0527fa7e33087160b56e50927d53a940543fcca6ff669cb04d671cad0ee2988ab0bc8610100526e1ff24610aeaef59ecf547fe2708be7610120527f4537ce6a7678ba6967a76907697eb0c0b768f91beac5c6221e030226138b32b9610140526f0e3eba81018c856b86d941a40f26b0e1610160527f561a85f883f1dfa49f1ac2aab5925080417f16b289cccd87aa640a57c207ce61610180526f0874daaffb648d8ef8d8b1d65424d4376101a0527f802f3f60cc6b221a8454783135350b75ccce251abf1ab4e228c0958077318da16101c0526f052493beffc1839977c746f2286a8ae96101e0527f67ea09233649b696976e68f8e89c7faf312eca402b85ab9bb3a8875651457a87610200527f86e1c5c45c73587ab24a91612d97087d0cb17ca75aba181bb3933849dea20d6a6102205261010060006102406000600e7f5966d656a872091de7969b3c78cdc26b8fa86c98472016fee4b05524d116ace2fa60135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556f10c60cab79bbd0a1ca7fee24970273266000527fc50134494b67160faa9d01d31c35f964f553dfc570139af84ce9f94aada1a56c6020526f0e7c6cb18834163ab4ec76c3fac369606040527f4f07721b1bdb858d2eaeb30eba516910f4ff3f809a9d602cb037623bed28d4be6060526f070e5834f155e738b226330f1e1f234d6080527fd2606e390b318f44d0ad923604b18ccd4cebe13edc7516af7be5f4fba545aa3560a0526f1394b964d3fe51eb280a1187c1a03f7960c0527f303da872bdbb83bbf0f52691d6632d205894bd069779fb6096cfc341c208233e60e0526f0b8d5e4b35400bf719728979a7a2e7d4610100527f5c6df065931a258ebbce660eaeb09db3501f7b18756d2dda21351deeede9a097610120526f0947daa09c50d095cc7adc0ed7b362c3610140527fdada2c430295e6c4e859180f93d88a833fe623ae81da2229ea24ff2c18396b056101605270011166b9f441df607c05545f4969139c6b610180527f29a50b35c35ef7369642e91ad7fbbb322fefe41aaff8903e7b3a68a86a3c527b6101a0526f107152bc657840de46821e92d790caa06101c0527fb268c147a995053433215c2d41d31440cdce54c6ce630113d1c8fe0e4aa1a1c16101e0526f024aa2b2f08f0a91260805272dc51051610200527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610220526f13e02b6052719f607dacd3a088274f65610240527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610260526f0ce5d527727d6e118cc9cdc6da2e351a610280527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016102a0526f0606c4a02ea734cc32acd2b02bc28b996102c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6102e052602060006103006000600f7f9535deee52630252dd81819eebd7046936470694754f1b4d92dab7b1e1b1bb11f4601c55600051601d556f175bca4cccc7ffe99528de9434a6ebc36000527ffcfb65055ce6f814efdc8dd4e229be05322f80d17f96ce7d8bd95a093f4d8f3c602052608060006040600060107ff92f99086b528dbda48f43e7514a2ad225b845afd0fd0ccb91c137a3c89b847ff4601e55600051601f556020516020556040516021556060516022556f08237a9d0ac1a6af0eb791d36cb179d96000527f2cbf3a95e85134eac54bf8e4b91f809740e3880368c63d0a85bbd86007f246d06020526f16ca20640460923b84fd15033ddd83ce6040527fbb8d51f9079bad29ee8b31b1f8a8f9cce34475bb87a852916f1d9000b1122167606052610100600060806000600060117f9daaee1428029ce3842e234b0a1727116151bb0f9a60c83187ad9e3413b92621f160235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x606160d1606b6053609a609a60e44534857912774a1016438a38fd47785815431c5f10056985333736916b885974f56c7cfe063c369c5b5c363e120b826d1b83a349787b193f1a8d717075746a577d005264f06a461a3ca242087c6bf412183f5014013ca2021a0a1b5b647f449f7b10a1577a6367fe5d135140143e9e529c9686387e57766f7d533c05355a1155125a8d66068170a300704807f140687c3e793e308b0a767b0714776a16791477423159053b31433e850a5c487f1766175b1d40183a81676800981d33427f366d3d5334163a39546f550699200973367d42677e31a11d33686738020233f58805530804a415324977333e077a364217f29c321e6e6119336c90317f081e460a8058183c9404742068346315638c3291fe8d443b56310b7cf0746c3e4a6fa17f77ffff3968377345f25762755f9f6a8e8ffa57367b747264156168609c5a1d307d7b736c475b887a7f1a6143116a83407a765216093ef402450100438b385c485c3e3b7683117139a13b545b806819168a3c1b5f0184031774a20065093ef1430170123b1d4416815646413872033302783306561c5e43534016531488937e533b54495331f31d1a11378e1b86630270166e680b13030b097d7a42128657306af54219009d5e11516ea2a13967550936866a9401160a3e1432427e48994a756a1a05f21a3a511b341e3354207a04a243788b8d3ff26609904a905737854442386d8c92f456468a567304076273663e986d020a6902193b4587650615a4123e367a7915156f3438429b6d133593597c597d0b33779d5150163449206e7602555c9c6341117580f1399d3973010148958117331373151493988ca3536f663b31151714600b8344459b5d085d3e5b02470553916a496e7b7815a1755c1211621414127b08975e463d47603a38927e8f63908c47705e12193e14a3626d34376b7df2743a695f83a0541b663b345682ff343e176b6c63485d653178330a67618870161966353d8314119878418e791781015e0070635a6f424191301145547c884543964434fa6c1c357b7f57713f8017a31c001e6d4935073238546a5e9c6939a35a6b9df4083c5e7a17113e30034605330b9d89790012406175709ef062758f7c3a3a4a4200647508328042687f865f883f4543421956083f9a39841b5ea3995b0662427a15571c0367847b813115fd147b0603876a0b743c4468a120459f3f546595304a815e527a5a5a1995fe1cf105350b659e01015b4806085e0b443a40f47e377b5b5508a36d6880fd7379a48d4539108c333f3b17a05cf25b34920186a38804f1196b3b1282708a58034746771130076c496c605654319c0a3259a03206807613759d3a524634716ea170627e6d8d93fa7635183337395f1960173932545e3187301a7654a4494993949c7665563573f07b", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002" } }, "0x2837fE6BCdADEa40e14E73df3101847267659772": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2bc9eb16f330b5d3764d1e508af3bcbb84786071e249bad6f91ac38553464bf4", "storage": {} }, "0x35F694E45962Ab9eD665971FdF51A45A3b109c62": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x2ac7d0629b3a39ccca4afd80b787edeccd0f9ceb5a83595c0f6a0e1cff0ebc7e", "storage": {} }, "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xd5b187a1488a0211288f3d420de324151455a6fa819850303f62bd25582b7cf6", "storage": {} }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x3d20e47e079e7b696d7f7f600054506001600055600060015560015450319675d11a4a3d869a257f60016000527f606000527f0255600260035560026004556000600555600154506004545060016020527f60066000526020527f7f55600354507f60026007557f977910ced1e5f2611cf16040527f0fd10cca0c0c2201606040527ff26020527f5cf3c0a7bfa76000527fa09027936060527f1fe16000527ffc2e808841d1cb6060527f1011f4fc5c6040527f991d19f4c0a46080527f0aa9d8cc6020527fc56caf7348595e1e256080527f3b6020527fec9e2b08606060a0527f527f121d91ed66a56b3990e7f55479fd6040527fed60a0527f2693f7eeb9302260c0527f1a445683aff26080527f6040527f37f16d2e0764318bda8a2060c0527f172f8a60e0527f6060527f26b7d98bb236ce7cd1f260a0527f90920f631a99cc0f60605260e052610100527f7f6040600060806000600360608052609b60a05360f460c0527f60a153606060610120527fa2610100527f53600860a353605560a453606060a553600060a653605160a760610140527fe0527f536060610120527f60a853600960a953605560aa53606060ab53602060610160527fac53605160ad5360610100610140527f5260606101205360606101215360ae61610180527f01225360536101235360606101245360610160527f0a610125536060610126536101a0527f60af61012753605361012853606061012953605561610180527f012a536060616101c0527f012b5360b061012c53605361012d53606061012e5360b161012f6101a0527f536101e0527f60606101305360006101315360f3610132537f295db4d10d457703fac4a58461610200527f01c0527f5763d8ad4f7fe25d383340a63bd007f1d0fac745610140527f18503e610220527fd067c38b6101e0527f3f15a2db16b993db65b52be1c3751292ab7f726556cc6f610240527f3db861016052610133610200527f60006000f0604060006040610140845afa60610260527f0b55600051600c55602051600d5561022052606061024053600e6102415360556102805260616102a05360026102a15360426102a25360536102a35360616102a45360026102a55360436102a65360606102a75360006102a85360f36102a9537fe3ee942ad25b25369be2c1688b613d779c81839be45594d5fdf66ebe02c5884d6102c0527fc1b8cb2dec124ef66d8514616b19425f8306a7c25ec7319547379c3e2f2a3e716102e0527f676bf6ab4f90e5802f11842312f6c3105ceadcd6e9ec7ff7104e40318837c13b610300527fdd597bf102dd9bacfcb320224a9cf7d69219ebf4ca46e02ffa66876002035be1610320527f101d91264e2f2011201db863853ce65852eded02898b6c2ac970dd990634d17b610340527fe466b225771c74493685be8ca2589a6fc0874cf8930b5ff07c738b703aae0a37610360527fcb08dfbd742c633520a90d3202b758a4cb65f2980cba0d6c0cb75b9723a2cfea610380527fa490bff0e3a32a3bdb0e0858f6d25d043b8d79a6b329c8fd02df2804e4b692e06103a0527f968ce172991a8531da24600abb8747b66d8af0db1cdd002c528eb0354ffdfc166103c0527f37e4358b26718085b990b595281654dfc84ff24aaa257a641bc8be1422fe301c6103e0526102aa60006000f0604060006101406102c0845af4600f55600051601055602051601155601255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000014": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000015": "0x0000000000000000000000000000000000000000000000000000000000000007" } }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7fb8bc210a6b2898ba233c41ca9920618eea79fc8a5ace79aadeab519a3eb9189d6000527f7bd79287ffc0ffeacb8b778efd44ad58fc6a6488b608dba69d1eee3d4a9799226020527fd4d0115c7dd08822f919c6315ae2984950ef08a85b6a35418de93190b37753b26040527f656124ca0102959f7bd6da4d2d951456a260354d75b4e5c40557336af6dedd656060527f5e7c42f565141777662f033b988197a41247e27f98a46e5f89718064f2c028d76080527f2200c204b98c10e05e544c20f2ac26512806695a083f9c5363e9aaf60521fe5f60a0527fa59326cbfc0ef56563909e19e3ff88d59af8aa304da4daa68122ddfb4356549960c0527f838059777f4f4b14043f7d2938256813a4f66317e40697d62c1060f5476e513260e0527f4c4f97ec8ecbfa1c0c8d31fc2f3ece52614034e18c9c914872f0cc37c6b865fd6101005260406000610120600060fe60077f8828d27885159dda6056c70a602676114dc2ebbaa89240614ab73a567597ccd8f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x6102a051606060e0fd", "nonce": "0x0", "storage": {} }, "0x66bBEf07B980c8b5de6F3DB0d5CA7A0389C7f386": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x6888bf43c6b0a7bd72d3d4f360efc2fcf781b746e6de54a559882e71c4ac43a2", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x600560005536841b5f80ee6fee60206000fd", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000005" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7d0819c8cc03a05cd0bb060c4679208c3a385feac991407fe30f137f7abedc6000527ffa5f14bbc34be0fb36e1b8577b662d2b5528b6152cfff1e62805a23d072b964c6020527f4f4b6af3709c8fa80e946e07e0e869608fb689b23498972d172a770d2afa11b96040527ff723c9c9e48eddc4e1fcee8bb6b5df3e184634701681fe9a1fd71f1fbf15bdb26060527f2920d94fa1b64095d1ea56ef0447587309ca666fffb9cdb23ebe6f71235965046080527fa3a2f686f7eaa89c2611a8c33be8bbe053a8db8ffc762b7f3df68dd98a84d5c960a052609c60c053602260c15360ab60c25360e260c353601560c453605960c553608260c653602e60c753607260c853605560c953607460ca5360c560cb53603960cc5360dd60cd53603f60ce53607360cf53600260d05360bc60d15360c260d253600660d353600160d4536040600060d560007ff34c1f709738770ff7d63376077de9f459c1ac7cb882e82c5b41a39530ddb14960097f7742ed7e48cde6954062a5df6b187eb254afb4f65652c8529d1cbc9318db63b7f1600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x87f2957b7228EC6a0dd4F2fCc669BD2ED2B14E11": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xbc501cdb0096cc68817e5b2aa2eb7e97fcf45a56dbd22b6e2de2b234b51f12d5", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000006380000000077d7676767676760000000000760000000000000056000000000000000000006801000000000000000090051c686d5adef08547abf7eb7f800000000000000000000000000000000000000000000000000000000000000218026d01000000000000000000000000006fdac7fff9ffd9e132262626262626260018901d6000557d7676767676760000000000760000000000000056000000000000000000007176767676767600000000007600000076000090171960076f8000000000000000000000000000000007046001557cc9700000000000000000023f00c00014ff000000000000000022300805712000110000000d0a300e750a000000090a0a901d762900760076761e000200767600000000767676760000007f7effffff80000000000000000000000000020000440000000000000000000001638000000190096f800000000000000100000000000000006b010000000000000000000000778200000000000000fe000004000000ffff000000fffff70009901590156002550267ffffffffffffffff7702ffffffffffffffffffffffffffffffffff20000000000090146003557bc9700000000000000000023f00c00014ff002c0000000000002231087f8200000000000000000000000000000000000000000000000000000000000000901d600455671fffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee901390027cc9700000000000000000023f00c00014ff00000000000000002230080567b368d219438b7f3f901890167cc9700000000000000000023f00c00014ff0000000000000000223008056b010000000000000000000000901c177f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9651ce97e1ab91a0960055576fffff716b61616160b0b0b2b0b230b000008010d0a2b007f7effffff8000000000000000000000000000000000000000d9000000000000011290187a01090000000000000000000000000000000000000000000000000076013590cab83b779e708b533b0eef3561483ddeefc841f5079015901b6006557f40000000fd000000db0000000000000000000000000000000000000000000001600790037feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c901c6007557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd677fffffffffffffff1315717676767676760000000000760000007600007bc9700000000000000000023f00c00014ff002c0000000000002231081d9004196b0100000000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200009007046c100000000000000000000000006c1000000000000000000000000090141a6008556b1000000000000000000000007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a017f62d8fffffffffffffffffffffffffffffc18000000000000000000ca00000001712000110000000d0a300e750a000000090a0a0390067f7effffff8000000000000000000000000000000000000000d9000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff900b1460095577800000000000000080000000000000008000000000000000610111900260006000f3", "nonce": "0x0", "storage": {} }, "0x97511db90b0e141ea4cb42e3b73fe3C24c3D5676": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xe0f8e02e171a2ef7eae37783ecfa6acb82cbacaaff229a4a403134ff420cb4c4", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f24f22a99128cbb4069321393f9093db47175e6518c6edab11963f47871842cfa6000527fa61ad2bf4623a058055dace5152373ce44495781636acbe3ade530c5bfa9e5af6020527f7702525974eabd05751ab013a42162794531ce19b964f523964b3817d73176ff6040527f5e6fe05bbf97827bb85dcad5765d014fc49a1048dd49a38c5c129d14cceb5e5e6060527fbb34b9ba02153c30be036a074e2ee9de7c4095e3467085526207f898f43c1a3e6080526020600060a060006000610100611c35f26000556000516001557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff000000010000000000000000000000010000000000000000000000006020527fffffffff000000010000000000000000000000010000000000000000000000006040527f895720069413cf1ab863112e6e45727bb5f1c2c16cf0cba09c5d3ab527bc9f5a6060527f8aaa289b7cf77196387ce801aea3bd400dbd39fe82bbcf55a0b1539de66c51336080526020600060a060006001610100611a42f26002556000516003557f73d209ac0034eeb9d245ee28c3be7b453ba868e124cf417fa4c2a5edbc1bad0c6000527f7d615e95d2679a60eb6a42bb6936ed3e4b9c3af745c179c9cdcb397a9e0eddcb6020527f79a0d10de0e554431ff1b7a031488a932a16e97adb6dff5b846029ff4bdaf9c86040527fcf3b86e95a2b957d5fafe6d42538c850e5b289c4c840927b96bbaaa7832574a46060527f9799e25d757bf3b4b91a2031d6eaf3071f5b6740c4b286e66d35284f2bcf25a36080526020600060a0600061010061192efa6004556000516005557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611bd4f46006556000516007557fe80484665b6066eb796e789f98f98024c94a8e878a5620a2a923de0de7dd8f8d6000527fc33f0ec09eead991e48c2643432e991bf54fc9d6afb1df86b056a50d440d99576020527f7bc425d87efee0e6a7c0c00568b9422672819241248357dcaa9f50b6905282976040527f98dffe076ad2841ba6059c56b4298f096d2b86fe82e14db2537577accc27e6146060527f5617e88f40eb2d34db4f13618b14b70caf308e786bb8366754c6faa2dabd52406080526020600060a060006001610100611c6af16008556000516009557fba785b717818648aee59b3103ec60111f90bac454a0ddb0fc5aaa0f707b28da26000527fd5fbf36a78b82aa814da906c18a3e1d53105b6c1ad663321f3f37076c67d0a366020527f4773528ced0406f3fe44dc0143bd6b8d6e5064d0883a90abe3d72910c69ec1d06040527f042543aa4843fce3150c493370a49b2d0da36d8f7cc87adf82a646dc04b6133c6060527f698f88f6a07cfcae3dca22cae162e62c3207bc1c03864eeaf0c90247292c24506080526020600060a060006001610100611bd1f2600a55600051600b55600060005260006020526000604052600060605260006080526020600060a06000610100611a31fa600c55600051600d557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527e020000000000000001002000000000000000000000000000000002000000006020527e020000000000000001002000000000000000000000000000000002000000006040526d80400000004000000002000000006060526d80400000004000000002000000006080526020600060a0600061010061190ef4600e55600051600f557fb3190ee410789186a46f6acca8928b7987838124aab0cf04395162654b379ed56000527f4a848ae1352d38ce207566762aefe8bbea9bf9667ade78e72f01eca11387fba06020527fb16d9714b0ddd01921237b52ad1e735062dce5fe414f89be9098276b147320696040527f3860ec3d8c9efd14d66eb591d97c61531183a3be527c7c606ff73bf0b19faaa76060527f4984d660600f9a521431e3a2ff3009dfabaa2358e5bee9d3fc55133b0eaf58ab6080526020600060a060006001610100611bb6f16010556000516011557ffea57daec4e67954a917ca0ca921a7d64b7a7580804f8eabdfbbbc9e5db1eaea6000527f6c10fba5e186af4aea14587dc5041422cbc7c9f58cfb2468e8af8814efd6a65c6020527ff819e8802e912c907cf2812dd18523a351685e22ea1b25dbb7156d673ecc5dba6040527f3e29a7314665829e5e743c8d6823e1d1311a03704729f2082b5f16d38a19f5916060527ff1996c6f05e983b4441ecb4e3c6615c0fd538e03b4911e9169bd3ee3ba1805356080526020600060a060006101006119a4fa6012556000516013557ffa0417bc6bb9511e1eaede67a3f0cd0c23526c4fa155ae1f161365cbe7a7c5546000527f5082ad3a8e669637f9c253d0fc6154de372e5724288c6c6ba0db8b1a6ae06a8a6020527f3d7d7e02a4883006d8fde8284540b369de3dc7a908360c9ac5379430f68d3d1e6040527fb30536063c756ed27e2a7fbabc35a07eb30a617e50d1d6e92242ecaafe5de8146060527f7df7b8c33652dc5761a6faa091b947de9c364989a3388badc71b647fcb68da306080526020600060a060006000610100611929f26014556000516015557fc8fbd3a0d4db90baf77610bc0a31e949fe9356e526a918b2f82bb1f6ce61089f6000527fe902d0b4dd1630eb6e7f693e2f562bb3838e042ca9a40a825d0fc7eb5d095c6c6020527fc40851aa6c579e19e95fc3701838e91160c980e1e2bf27c4e54da3459d99dc9b6040527f5f39da4826bdfee74335689bd009e01c2605433ed6d960a1e019ad1048a85cfa6060527f1520e3d42f5e6d3922fec41e56dc4bafd302ac4c21b4c81e8afaa5de4514ed5d6080526020600060a060006001610100611b67f16016556000516017557f57e1ed957a14c920e7fb86e3355392c5b1e7abb074f8794028b65667f3776bcc6000527f72484872ce77a8fc6e2f3b7ac4ffee8ae7445ef5ed95a78f9215843048b0e8516020527f14f85bb2ce9c577d1ec44cc1fbc698b509f8cb88cf21507be3b317ba7291e44f6040527f50d89afab90ece340df275c0ddbf7f44551c0e872e962fa67727c07b904da71d6060527f5df66416387efc11bbb44a582e139ebbb7a845355ebcca8a51ffdc7c09f1d5386080526020600060a060006101006119cffa6018556000516019557f1589a7c2fb3c896ceded91944be7fddd82c9d2ea37a4caca5661d7c2cbef7f876000527f033f2a9f387a627e26801569d57fc81547cc9434efe65707ae704ac40dacdb9c6020527fe1acaa5075ab21193805eb461a0d3aa9ecf269b5575562178705dd9dffe5d9366040527fdbfc6b49c65ed133eabc6deac7c816dd9d8700d2b013e63c3c61d0b2bfbde4c66060527f1ce4cd3a3b18f7c5dc690b84a9d838cbcd78392bfc23a61e360bb09435591bb26080526020600060a06000610100611b5bfa601a55600051601b557f476936d377e6238e1e6695e302f97be55b9d7a2a3f5795413e6b0cfe7e4b9b0d6000527f3490fd4cb7e398858c30422ec621f0f5f9b4a0a1e0f59cef74e89dacd93bc67a6020527fc7cd4f1f41ebb14d6a5edd9c48d1a4ac8e9faf07e0959bb668374656a8df03626040527f6a1b0f2a71e0c54661665393aee5413d3711df2ed7c11063a47e10750b0843106060527fe389a29310062d1b2a1cee6aaa3d52c534103f82c91996a3e5302dedc5dcbfb26080526020600060a060006101006119d9fa601c55600051601d557f81909aa98db980581d2313e9537b40d40fd5bc2283327173c50d9f585890cdb76000527f41df2169692501f171a7025053b6b3394e3b7750ef97776d085642ef689bf2fb6020527f7049ab6516a6c677ab10becb220399208c891f42f4c12637fe12c5f8448b77be6040527f68147c0912a54642d919f3c546463633d4683b604d2511ec9d142721555965176060527fae65a35ea73220c5e6642676c8491dcdd2d7306e1018c3a139d9efa9eedc55736080526020600060a060006001610100611c89f1601e55600051601f557f38a54a3b9d8f4b3778c2786c9d5b46881ef409236eac1eae02d0a7af3fb5f67c6000527fddf6765e882ab5bc19cba477f16eb56cf1c6f07bf716e3fa80ee4d7cbc3124ec6020527f2b43c572d2373b0f41fbd54d4257495b9a4c6ea0868757558224fd0119f7e1fd6040527f99f5e2f02cfe6af231a6b8174da83b100f76d3b806418fbcc1bc0c773dda61846060527f02ad258ba26f93ba475b3703faa3519fa8c925d25aecba4dcf98e775ff2042446080526020600060a06000610100611c03f46020556000516021557f1d9b9559392a4601e49eaf3d2c6f2708d59befbcd026250f87f62dcd0d99c97c6000527f7772672be8d32fdaf0489d79b2f14ca620605f1861f5ab05efaf9db867cc6ccc6020527fdc414270ffb5cf3cd7d0bf86558a2276f9144dd39178538d87f98c46fca8d67c6040527f2c1da6ca558e5e84fe8a5a6ab830b35d99697af70da38e1f71cadab5d8b82be56060527fc9a8ed8582c16b0ea8762a83768f0bb9c25967717f277505025abd6d719200b26080526020600060a06000600161010061193af16022556000516023557fa266ef6b4f35ffff1ef9dadfa0c17bf9f62fe328ab99aaf9205f58883ac6ad046000527f63bb80afe81c5bde0d2bc0311fb485ad8287c0a32376d71382537518ff801aad6020527f662dd6de566229f71084d4c22ef95abec502f28e55697b08cccccf61f67d25466040527fa70c99d9c9e70aa825b4b3a1856bcb069a84df0abd2aca3d3652e5583e9a29026060527ff5e7061cd7157b7cf70218942f152a98995bb89ae95948ad7fd26472badba80b6080526020600060a06000610100611bc3f46024556000516025557f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f08cfb1ec9f681f021a9a321e1041afa50858597c6e86340ecd0fb90f27f61a4e6060527ffebba51fc691c0be204421998b1c53bf8d3165645147e40c5620574faeec2f8a6080526020600060a06000610100611cb8f4602655600051602755600060005260006020526000604052600060605260006080526020600060a060006000610100611a4bf26028556000516029557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611c3cf2602a55600051602b557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611a57f2602c55600051602d557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527bffffffff00000000000000004319055258e8617b0c46353d039cdaaf6020527bffffffff00000000000000004319055258e8617b0c46353d039cdaaf6040527f705161ba0fb15c41c92b6c48b38f1fd5e12b90733dd1c11ec0a208ff086c7b506060527f1020c461213478ad81d5eecfa1094cabc38bdf59de6af3bef80fab3ac4b08db56080526020600060a060006000610100611ac3f1602e55600051602f557f371ce4e482f494f3938fd93de481a0d4820065968e4826d6404d74e3566cf1996000527f5ce4d043ee558c86a1de059c01cd16158fc549744b61e4182f6a36beece695506020527f52d031db960e606eae783e2b27ad53cb7b5d873074740c0842394604c8abdffd6040527f0dc01fd75abb6644da18665c8c698aac22b63f217dc5491fc3cb2f627b6012706060527fdbc4fa2816249ec4667cbaba1264fde39a1107ad4afe4591a9ebdd0db08257496080526020600060a06000610100611940fa6030556000516031557faabb230926d8306560b7c62f8832294e1c0c5d209a4659fd5e5ca6333f08f3446000527f7d0690e61f42b511937ecb62af7a531b52fcc1e07615ce2a46f4469fbd68cdeb6020527f2e790ce409877cbe56126873b63dd08122b74d2a650a0d5d8bb8788eb4c409596040527fd165b6bca6885a2cbcc2ee024f79f009353b6e194e5fb7e507ea0995ac2b6f316060527fc2c0f5098f1d1250c4faafd7634d99f84032fc1ca82cadc510e33bebe31e03b86080526020600060a060006000610100611a44f26032556000516033557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6060527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6080526020600060a060006000610100611a6bf26034556000516035557f809256c854c346a04981f0a94fcaa3ae1b8b71512532ea1cc13b0d21d51dad5c6000527f65667e28754d2e803604c0d975bfd9a6d472f87e70c9c0be5128a2c4da97b32e6020527f89c17692aa4e75158d30ad930bcfbac8cc9ec0a049b937370153dc532cc54e646040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611a63f2603655600051603755600060005260006020526000604052600060605260006080526020600060a0600060006101006119d6f26038556000516039557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527ffbffffffffffffffffffffffffffbffffffffffffffff7ffffffffffffffffff6020527ffbffffffffffffffffffffffffffbffffffffffffffff7ffffffffffffffffff6040527fad576651d42159e575055dbf913fd5300fe5fe05ab7479d2c303c3941b8bb8e66060527f6c4ea7e65e464d36dce6615b4ea9ed764115aaf547ebd9a74f1b95b298de24e56080526020600060a06000610100611c7bf4603a55600051603b557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006000610100611cc0f2603c55600051603d557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f918074fe4165eb12758053d8eba7ac089d81b90c36299d6ab39b3b707a5e0fcf6060527f6d540c78a7d397143840c1f9c22dfd833eb6f7770adbff9950c607f2d0f312746080526020600060a06000610100611ad4fa603e55600051603f557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a060006001610100611afcf16040556000516041557f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2605d6000526003602052600660405260036060527f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2605e6080526020600060a06000610100611a57f46042556000516043557fc9bbf15b2b036c73bfc676544843010312bdb57034b38abc9867e5505717005e6000527f7e3ec609f4d61528ca15971fee344ba38c878bec7d8a75d820e65a931bde81676020527f47af354cd5d49248c895a78e1cef37058971d0b2793a0940054f2630347799c96040527f15bef465d01428155949805c60b1bf0d1e09f2fdfda7bc0d288f29d89bb179c86060527f5da47bf878cffb792df65ae4a2f58f165296f4ea9b955a795d951493db6c85906080526020600060a060006001610100611beaf16044556000516045557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611b00fa6046556000516047557f38bf718bdef500d5c9ae22839f7c55c17c14a0849333ac36f652c15136d91db16000527f74db2fe4a60c76266c1cfd63b78e408d94162304ca9cf24eb33d436d69e58ca26020527f844aa5b7c8ca635b15fc539d99a61639d2f75e1b100d0e0d45515b71dba25a9f6040527f7ee37e25805f4df98db6a971f1c4de08fc34a8352adefdab0a6424fa84aa60e86060527fb048966cdd28e69e7b2adb1ec3503b307ae6e69efcb14ae0d6ff186f1caf0aa16080526020600060a06000610100611c78f46048556000516049557f4f164b8627de3ff73865693b11f9d0fd85ea984f8edea3630faf222b31351c226000527f80d9020d250b0fbdf449a90bbfe680601d3a0cf7ba1e0817db7a5613813895886020527fba4c2114e9e626617daced22efa372833c2621fe45cb90829145083e6238e8686040527f9e09b68f458677a0b740474cd2f51f978f48aa23ecbd434325a0049fa48b267a6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611ad5fa604a55600051604b557fe28e01f7ab4d68377a0c8dd04a71e554936cebfa0b1a221c7f65dda575a430f06000527f18598e385d456428d422835ad545c5639c3c26bda4eefcdcca37aed404c3a4d86020527fcae8afc37833bddbd450cba85f70457da0041ff1414a2452244eea56e6c423f06040527f3758338a77ce7169edeacc42f470480579d9ce05cfeaa2a589b40d8595bfa6dc6060527f9c4763bc6f8166ee9161c90e1ca11dcdbe9d9c3f5e7cdc67ffcb671e1464348c6080526020600060a060006000610100611a7bf1604c55600051604d557f5c5752487c7f609e4c694a8255725847fb6320c4886f2bd0986648b2594b8ad46000527f5e7a594934a521e064fe3695ece89bd6dacc48781b32137710802aa2047de5d96020527f94cf7f556a6634100e5d8871937fb9ce3a44975bd68a3ad9e04b4aa862fb07196040527ffb69bab7c49313344e670f4a2dd309cbdba320299e12ab41dfa359bcf1cdbb4f6060527f03fe4c023ad93ba440a72195a294a6fb506997e23e40c3caedcdff14ba0860386080526020600060a060006001610100611ac6f2604e55600051604f55", "nonce": "0x0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f296d88c89256e71631f0d1524276ff9d231ab3be039daf0ea05a4356743dd4ce6000527f0b1e8bb4741355b5b69ef8b1da4df3a3c725a14e058d99ea50bcf0e10ebda84f6020527f039bbbba49263eb8698845477f0ccb82d126e1ae3f62d12ea6facbb93b91c5726040527ee36156f58424254b022769a1970fd4e554fc49545fa15b7470f6b45e70db1d6060526040600060806000605c60067fe9659779482f376fc6349ac9b9caf0bd66415accf29f680c0441b10e2180b935f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f0131c9766fb600722dc74563bd8ba29a43be4c5a49060e5daaebf7699b4aac476000527f3dcee1a37ddc037617ff8ea6061586a9d600e3ae87fe6b6d42298e3edda1c74d6020527f67e97fc31e12647905e772d643a356899814c796bc17dbbbaff2346b0b9b334c6040527f885d73b14042129e020ba96e83afea37742e1189efa8222db0271a16b639b5996060527f80d83e6166169d6575d6887b1a9d8578930aa2e4b5198bf1aa7a2d8981e075a36080527fff922a7c650f764f9114f76aa4879bb40c846a782e3511b782942c6a13170efe60a0526040600060c06000604a600a7f39f3690c995440fa1457ede1998ed7b63fd2bc2ab9fcd69aeb9b82d940143d45f2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x7fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f05481a72441b413311d9e023471501901968ff54670bac9177e34b92768d60236040527f506d26538692fcacdf676c86516565c93c421f674012822428e7b92e1d7608d56060526020600060806000600160016164b5f16000556000516001557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f1948af26618c1372d65b161c9ce762997b9ebf6739db422b974f29d299b9a3c86040527f5247bfcc87a7ebeb877fc32269be5d0c049d7b91dcc7f89f8ef30bc8010c366260605260206000608060006000600161e8b3f16002556000516003557f79cdac2dc9e317f476c790aebb192b2958148dc5f37d7bc9f96e69a58378243e6000527fd16ad000a3ba445815dd1bb1cefbf56c0ccb0eb66645faddff179670549b621b60205260006040527f745814686ba9a68fe557eb7604922746db8d8ec7577b71208c5470e7146ef3396060526020600060806000600161f980fa6004556000516005557f47fc344cfa7c6a8aac5db665145c55f2a0d14b2fb0e4aa79b6f5557781f504116000527fb0524ed83e0c191094263d88dbb6179a006fa408eead78668a895f953e424d1c6020527fb24e73007edb60ee591c13a4287edc95ae58ad0d0f1622cea7e99e2771ccc4986040527fffff06bf638525444daf275c7c1681da80cae3176d6a9576752929f49a4b26ea606052602060006080600060006001620130d4f26006556000516007557fec5df8eb6e576fcbc7d4d8247f95f349431beb2fab76e18e79c23d6e267c8fe36000527f43ce1e70b5fb2b68d12e2619861f204fe4c6c294e64fe0a01823e6b8eafc06316020527feb97b042568e35acb0174dc8b90faf9e286ebd5d3a6ac97113dad1d21bc254a16040527f500b416077bc121d7373eabf41ed2d1dfec2dfebfa3cb6543b52765cf164994b606052602060006080600060006001616ea6f26008556000516009557fd2af5d12a95280894d384ec024ff17dced446e7a51d9b64ad34ac76f811e17086000527f53d14f9e1df39e0bcab0dc8485ea2fc899205859e9298af772f8a6667ce0a51b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fb21c9e4123e6bfd748b695714b221218a961617cf03f2095e6b2f1a36c47a7b960605260206000608060006001600161cf23f2600a55600051600b556000600052601b602052600160405260016060526020600060806000600161ccf0fa600c55600051600d5560006000526000602052600060405260006060526020600060806000600161a413fa600e55600051600f557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f4e6da5d59214b04b4a4fb5069920a5ddbb2635283449a2bc8f9eb069cb02df706040527f2500a4266329b135c80f8510e259e9ff3c1fd0404b97a0323ab1ed89b5b6ff846060526020600060806000600060016178a2f26010556000516011557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f8340a4510c346990bc1f00b0200459dbd2f314235adfba65a5a464737edfc7296040527f328cb0a5547ad2273b55921846b72ca8b2523a34cce1cc0c9086db5fc4ee6b2b60605260206000608060006000600161f086f16012556000516013557fbf1cab3d0133c7ff1421bfae14ff400136b060a437544994e461436ce817b9ce6000527fc5c8b84ef06d2d65f6b076b7ad3f13e69a571b276542f6dd377d8713cdb5b81c6020527f70f8a8bafe48a680de156ac5df8241caaea7a27fb453ae041ec593922b84191b6040527fffff0340eb7e0dfee5b1eb7ff3b2aadd6ff3e76e0ba5fe94301736ad0dd5e2cf6060526020600060806000600161162af46014556000516015557eb4d602e526f3e38e75e652f4794a75ca60a643972d06a7d3ea46f8930edfc06000527f3250cbefada8ffebf4875231d6b24a45233e7b258ea836346578bb30aaf153366020527fcde890d5c10086ef523115dd117fdd54bdff7d83842fa8cc5abe5d1aea3f71786040527f77cce59f97949c3337b8d05ce5e994eac3bf9bb0d7d608a1f6567b83f9693a5960605260206000608060006001600162018676f16016556000516017557f1abfd23db143fbf30c2a330c89c999d3ac92ed3b0f951f2d1fedf136039f4f156000527f7fe1c1baced0905ef34741728c5b5df9193fc357db7b7bb9c13d27b5e4435d1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fc02d8d05f4336334605ea09251078997838f9e8004d71041a2e8dcf2d10e402060605260206000608060006000600161364df16018556000516019557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f0893e72dba7736bd67ab257bbe123fc06c51beb7d5aecb3631350329826596796040527f39392105de20bb1b0cb2ae0782ec9d6c780f699b978d4a91da2b4f93fe8c75f160605260206000608060006000600161e389f1601a55600051601b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fb833dddbccefb4daff2ca2a4fcaf03352bca480798cb44e76725905d4cbf631a6040527f25b3809abaf1bb899b5acb5dbc84bdda737616ea1a923f487597f717bf370a6d6060526020600060806000600060016110fdf2601c55600051601d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f2efc8a47cd06df64fae4cb6b1d379210fc5a355e5f1eb1ba3d8797d44634995e6040527f20f1f25732c41f47db7af98fa4791d3fff9e49fb3da22f5c3c8f53601852db3960605260206000608060006000600161cf50f2601e55600051601f557fad8ad8904b42bee56ed2262bbe546f80c26c1c6c74b58637561934703107ba586000527f51ae5344d1b8b53533cb4cc722b20607ae0606e0cbcdba8146cc4bfe5800c91b60205260006040527ffc6356cb022ccb259b5a91c78478968c553a2d86e90867ef5cbaa6d57beb13f86060526020600060806000600161d7d1fa6020556000516021557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fbb4a74ef35898ff872ed1bd09c5d2a25414f2678b0c841f923f012f07e6f56936040527f60c14815f38abdff046136207b551435e62faf2066ac61a7074c11669b2991dc6060526020600060806000600161dd9dfa6022556000516023557fb651d6d571f7000ec99082187b9206672cbbeeab1b7587d77c1a53be74b603de6000527f38dec10dce0dc826e580b03a7c53b12ae62131ad4ffb44d6375f4c5a6327dee16020527f97dc665ed5a9725aa3e90ca16b7979b1751ca070534574ed035713d6e1da48406040527fdf5ef8d5bff2b3738b1e617d8e9862ff6c57cb95379243f58c079db83557d648606052602060006080600060006001619a09f26024556000516025557ff15606ec5436a07d10e7992d466e0c33dab03fe98276dcf3c57489c227e184396000527fd100c67b168a79443d9777124f556c8664bb0e525c64a2cb8a01f958295f871b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fa36dbfffbf8eb96234bc9a22c8ae309618f769f422769267f086cd7dbb5779cb6060526020600060806000600161895bf46026556000516027556000600052601b602052600160405260016060526020600060806000600161e276fa60285560005160295560006000526000602052600060405260006060526020600060806000600161268df4602a55600051602b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f5fd135840c6524ee72ed6252a676bb5e0a0f7b8ba4819a449f2763cf257c7fb96040527f2c0c965e6c195010dd71ea433ee350d39257b120b9e6753be7bf6acb8a95a32160605260206000608060006001600161da5df2602c55600051602d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527f808254cd9c8636fa7c6ebb01e4c53dac6216238b5e6adfc44a764930acfc3c036040527f1c7c06b1317ca8ea1aab730112c0caa17eed03ddb3154044924b2af728696b416060526020600060806000600161c598f4602e55600051602f557efebc31529d174d3f62ddd8f7d3f28b512398b67e78161c745910eedc58fd136000527f9d8ccdfadce68c55781a69a6de9b9c7365b7af5bd23e9d7bf4221b3a95b6391c6020527fbba630c1b560bc6696a101e85f80c2dc00748170fefd572e4e5eb719b186eb5b6040527fffffbb1be56746c953840183bbb009d6a2dd218758eedb043b7e06922d10e9b660605260206000608060006001600162018420f1603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6b01000000000000000000000009760100000000ffffffffffffffff0000000000002e0000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff070763800000016fdac7fff9ffd9e13226262626262626001d760fffc000000000000767676240000000000002b05760477ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a9008900a90046051557f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a5677fffffffffffffff90026c01000000000000000000000000774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a1a1b1968066aa0a5319bcf5cb46f8000000000000000000000000000000118017f7effffff8000000000000000000000000000000000000000d90000000000000177800000000000000080000000000000008000000000000000901c6052557e40000000fd000000db0000000000000000000040000000fd000000db000001760100000000ffffffffffffffff0000000000002e0000000b6c100000000000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0915171a76fffff716b61616160b0b0b2b0b230b000008010d0a2b0068478392145435897052901b6053557f77676767676760000000000000001002e000000000000040000000e000000000681000000000000000006780000000000000009008605455157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb01611684783921454358970527ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a90086055556f800000000000000100000000000000006f121212121212121212121212121212121b774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a6f80000000000000010000000000000000691000000000000000000090086056557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f7effffff800000000000000000000000000200004400000000000000000000017f40000000fd000000db00000000000000000000000000000000000000000000019009190b6057556f80000000000000010000000000000000682323232323232323230190126b0100000000000000000000007e40000000fd000000db0000000000000000000040000000fd000000db0000017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff900803762900760076761e000200767600000000767676760000006f800000000000000100000000000000001a60585568010000000000000000681000000000000000001c056059557e1f0000000000000000000000000000002000000001000000000000000000007a010900000000000000000000000000000000000000000000000000900b680100000000000000007cc9700000000000000000023f00c00014ff00000000000000002230080590021468100000000000000000777effffff800000007effffff800000008000ff0000010000901d027f8000000000000000000000000000000000000000000000000000000000000002778200000000000000fe000004000000ffff000000fffff7001a605a55197f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a56005121a7f80000000000000000000000000000000000000000000000000000000000000027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe900103605b556101116f8000000000000000000000000000000117605c5560006000f3", "nonce": "0x0", "storage": { "0x000000000000000000000000000000000000000000000000000000000000005d": "0x0000000000000000000000000000000000000000000000000000000000000008", "0x000000000000000000000000000000000000000000000000000000000000005e": "0x0000000000000000000000000000000000000000000000000000000000000004", "0x000000000000000000000000000000000000000000000000000000000000005f": "0x000000000000000000000000000000000000000000000000000000000000000b", "0x0000000000000000000000000000000000000000000000000000000000000060": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556002496001554a6002556001600355", "nonce": "0x0", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x60a860005261037a60205260a86040527ff0b88e202b842bc58b3e815c216d48d84ffe677a97b4b392d471b92b504d42626060527f2e3e9fc17fbb4395780ccb489363f6a76b01c5626f1a0ff7dae0bea0c88160716080527f472bbafef0b8b8a2654644dd363c21b889170b91d27182d2960184d1407317f560a0527f3f66bfa4fa0df97f228c32bc0a7d4ccd9e24dc3e58bb9500450c1d253df7dfe260c0527f5d85b4513acf5957ccaec4fa3b1ca5c79c56233d41178661f2565bb4f3dfecdb60e0527f628017dd1a398d5e6081d6509bc1535415988569f6b54701c5c2e52eded4dddc610100527fca083ca4ecc78090c36a5b030c061d6fd0720c1fe5aaf9e4f7203a09abfba64f610120527fc85664ff0e0ba2b7c7203012ca0b87d26162f8d12a068d16e6de9e7472c8e0c8610140527f818be57ac614b53ac018f3b1abec6beb23aaa243703b29945db6700960d3a57d610160527f6b97cc84054092f03e46b9ce8d59529fbc61433da0c57f02a9015dd145c11239610180527f7cd50d6659f3066fe9ce05dca12dec6f44c6268c0287ef999d2f64203a7e58e76101a0527fefbb4dc4e91263c47883ce938701d055d5142f5a374d7e5abbc4f89f802c36076101c0527f0ade979482d5dd71e56717c4bb687a4bbb441903958aa9497272683c45410cd16101e0527fb8e23e6eca344102dddb6feaecdf8fb7cc61e61a98752af02b7c780cbb126cde610200527f3cf9e0f86b3126b8bf99585ca41c87a6ceb413430620b1dd907eacf1e3c81625610220527f547b197bf80a32546989e6d27686ba6c0db3333878ba2536dd2e39e15491c928610240527fb199565628b92a4296d600c8f7cede07a185f0834751d314ee0fd99285c49532610260527f20e48ccaa106397744ffc78009aceec6b8afd8e580c85b63d349e9d50398fdf9610280527f1a4c8a878e928742b5f12e185a32b9ac3ce6206ab006c6d51357643efc94b7ec6102a0527fcd3d5c364345276b855df411904b5aee514da2d7dc46550d56c42513dc6e08d36102c0527f796f00b0f45871e0c998ac55fd6d3dd3b6ff7591ffe3fecc2b72e119295dfd046102e0527fbb5f3e820145401cc6430008a54825714a6adcbd0e6d46cb5c5de250948f20b5610300527ff6f72b52677448c5f4997844b7826a265165d210bfa1da95598dd6b91c568036610320527ffa84b89fdcc08cb305c15491a494202df904bfc37b6f446b922df1c34f7d1062610340527f7a5be6a14a294e2229a304140fd9529db21972857cf9622787992e187a802ae7610360527fc8e8fe14c21926fcb10c0c839a8f4fb0293df25e8426b822587d139529692706610380527ff53f9f99ed50a968c9a3ac636d913c4c93d581a4ef3ec06fe4e30cb67d5a8fdb6103a0527f082185cdd7a608dd7f877f858586dc9e9427a5cbd1b46f38a0be135473fc8af96103c0527f545b0921bddd426e0dd05d73f14cd230fc805b0d8e1e13ac941749ca5bb6287a6103e0527f953a898d2cc35277bf0dd2baa7c5a43be4b86cce8e0d54fb1637d549c96b4eff610400527f5a17bf9dc9e9b62866dcc92aa7b74be64048d40fc82757e8bd7229a4c2a8026f610420527fee16eef5c6844ea4345fcbd8cb0fb8330e53e9e9e568b04253a0578b70cbb22b610440527f9378fb903c6f3b0de425669e7b20275b73241c415f3607018efdb79db118c75a610460527f3057e1a48556655448f0080f9394012dfedf80ea22f5c20600a9b088abb957b2610480527f952e5c01afc58257bfd0fd991075edc9a78ebc574d362372714543506ccaced76104a0527f21efc898ca581be8cf766c8cc047a3a4f1d3066a3d351fec5d0506beee85ab1f6104c0527f56f0ee109cc0a31cf55c52037d4764010284a22440a75752b22ddaecf9d7443e6104e0527fe0eed74f524258c6853312232de13c93a80fd6f5296dd4392f3e8b11579389466105005260b76105205360ab6105215360fd61052253602c61052353606a6105245360e36105255360e461052653605b6105275360b861052853601a6105295360a8600061052a6000600562fe08aff45a0160005560005160015560205160025560405160035560605160045560805160055560a051600655606160005261046560205260616040527f6d0d399beee8791c6a12d890598a300f54ffb91c84b86ac27e21c4ffb10d23436060527f61a0479c2a20f3aa130387323166dec8acfcc5be6cbd59a01690dc61a79ca5fc6080527f129b38d0b055ac4d468496a6400b7e78df076275ca6a0f9f5215b40d1994090760a0527fa0b42c23f247024472be573d76fbbd3b40a7291aaf2cf6236a94e137c263204360c0527fe5f21f3a6e26ed1ecffc39e3b4e250e001694de663a52bfd06b687e38ec3211c60e0527fc8e4569a7baada911cd0ebfb9e34982ddf119bba8b6e53b0f17172f03ac9f686610100527f3a0750db630493cb3c82cf86db5f5321072a2e60868c7bc4df77e990aacd864f610120527fe0541732d6c098cdfca0976eed34dedacc8768b4043de91670b46c2998c9ea1a610140527fab0908635f7a0a521b03f9bdd8e439c26493e073284f31a8c94931596d289495610160527f0d9d4f8228b6fb8786fd0ddc8fb9779754f0afbac231d34e0418c1ff15abda2c610180527f6aeb3c4deff9c782536072981a5f5a5f903f0e8d0919bb88988dfd8297548e316101a0527f471af342e540a99e087b966a29f07248bf746b5257a16c3ea3a6ae729199e03f6101c0527fb1ad70289609ee0de9757af4b42816ff1bb84cbfda4ec6812f14fda504936d906101e0527f0579d01de02618a658f31969293c363c88ea85d1eaa8f0173937c9ef74065ffa610200527f0b6db5e353bf88c1868df5518eb79ecb617638968c4bc7dc7aebeadfaba1af98610220527f5a1e2dc0080f4c72c3dfa0980914c7f166bbccd9611bacebc509945373d9eeeb610240527f3508e014ded76cf0547184270633449ff62c26448b77d06f76d293bcbcf0c5a2610260527fc33faa90573d5dd05b297c0e7a361d233f1787c0fc4a7efa54a8c2e21a7dbf9c610280527fee8b7c788b2c846438503d8e84336c0f61afad8843fbc52677753b5f9ccfcd1b6102a0527f566ff8c1a89def377278f892bb270509902298f7ff66090013f6aa0862666a3e6102c0527fd503bd8cda6a85fcd498e2a1f16c25b858d0ef09fe3f2e2701ee197ecca5388a6102e0527ff0c272de44e15d8be23e624e18776bf2d69a2fafd5451ae5195dccba6816ffa6610300527fb6548978b6aaf7bf9ae5f550acccfef9fd56060d29f571b16eff18633929c31f610320527f7ac51a0456b86ad28e2dc1754b3026c299b7483e0363c366409d0692b63ad89c610340527faf22c08ac2a3a0b837ad7d46b7a8410dbe0be22b87a50048ae477e2e5cd6da96610360527fde1096331201adc7cae8259ab737babfa2678f30d9c8a8ebb36a5bae9d0ae362610380527f96c2db37b400fc68d4bf4824ad0976b2ce6054a4f9cd54b0003988f4c0e5a7346103a0527fd0d1c7c23cc73ca0855106aee34299f8005bd20686eea573f58085f8881b5bd36103c0527f9e973851996421f3ab73032a59a965d2815ed45cdd437e2b2e6a109661b9c4ca6103e0527f1b90e608fb4e09ccb7a4cfa1bc2233aa5474dc16f1237ded95afb56713277dd4610400527f61029aa3589b65c7c6625b3e6cc158e9bc68367ed43ea5ea9c1a1c1cd5ad25c5610420527fb207f5644f04965dbf58c2f9da104dcb0fe657cbac9d3675cdde01c628e131c3610440527f47f1b5e3d4aaf4e45cabfa8e7426e73f49ffbc783702d717ab128812f85b0e0f610460527f2e9e786806d106d7b3548fa3880074c55f6f7b12dd5901f62487882b93ab9c70610480527f493c591847872925f5f6f1467567b46ae1b20fcc504e819aa9892824a061226c6104a0527f7ad3ba3a65506f470f57477e9da43014a6d8154367618e1c55ea7887b087c2f66104c0527f3287255cfbc00bc6da86e07aabd37fe1d03ed9b54eb3ff2d8dd73048a913b0a36104e0527fd7c9ac374404002a4d5d41fba312a8ff0d8fb258b819b9ff9e4bfefce482e068610500527fd33944395dc8cb85e9fa82211d0087cf9996de1669f3121c2342c7058e554261610520527f9529bcd34e669b11a75a78fb3d5a1451ff26542208e72d7828ca7e21ad3637be610540527f2b9cef530ca7dcaa5a469eb3c7d6ede8e79588a03d498c11ae37b71d164ef3e56105605260b76105805360916105815360436105825360f761058353609a61058453603761058553603b61058653606160006105876000600060056278cab8f25a01600755600051600855602051600955604051600a55606051600b5560626000526020602052606c6040527f6ea6afa40b5f1b4cb48214b6e6e56a074998a201aa82cdc81c35ad2910e854bb6060527f86fa21730be4ecf2263dbadc0d79eb07e2f4e198ae4aa6201b0a09b17926cabe6080527fbce1ed98b86b6bc3e0a97b3b1fcb42588f27206ca558b452731218d72a0c86a760a0527f740100000000000000000000000000000000000000000000000000000000000060c0527fe3dc8cc642df7e9cf4934a539c46233788e41b60e1f2973cce7e9bde05035cb160e0527ffe1e90f891a5cf105592e9a10b833dc27f5919384201ec73b7ce2302e421d15e610100527f3b5d135d2bce73f8c15ba3166326ab20c33f2dbd2e473aa649e6c3ee9e62d22761012052603361014053606c6101415360556101425360346101435360366101445360726101455360d16101465360706101475360b76101485360d461014953608461014a5360a761014b53606e61014c53606a61014d53606c600061014e60006005611ec7fa5a01600c55600051600d55602051600e55604051600f55606051601055", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x20000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x0", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x", "from": "0x18665208d71eAF07c959cB6d2b263aCE3eF24042", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x0" }, { "data": "0x", "from": "0x35F694E45962Ab9eD665971FdF51A45A3b109c62", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0xcc12" }, { "data": "0xe4004233f44dbea05485b3167d58bbc59a9a573470d1a4c7450ce35894a0eb4ba4a064b4c6cb7d6146a1bc57c774763287c2237c897a1f0ceab9e2fab9", "from": "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0x0" }, { "data": "0xccd57cc53461a4b792f7818d9c44db35ca7fd3edb10166e251d4b47bec0dde2c", "from": "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x2966eb" }, { "data": "0xc299908efb3fdb12835d4bff2d03ca4bcbac3e714a83", "from": "0x2837fE6BCdADEa40e14E73df3101847267659772", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0x90" }, { "data": "0xbefba71d7b677d6ba980c878f996e35911521fa11e5f0d025547ba7ef825d03dff687fd67e8fe13d4f8b1d115679b79b7bbaab18c4868ddec15c5b7c73578ca4d29b", "from": "0x18665208d71eAF07c959cB6d2b263aCE3eF24042", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0xdafb" }, { "data": "0x9b547c7fc5eb3aa918193db18544aa183ec027ec89abc23a36dcbc401c10882abb1a226c81be965e293e938c4239998475", "from": "0x35F694E45962Ab9eD665971FdF51A45A3b109c62", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x1519" }, { "blobVersionedHashes": [ "0x01abafda8405600f28850c93d20702b19b16786a43e7df7be3ca5769524f5d6c", "0x010d7a9df5c5c8a68be7cc36e1628e87af4bdb9e79bc12efe485461bc7b9baf0", "0x0134705ed50ee98f42b7c4be013bd5c99a190d95f488f6c71e4056f1db2dc9ad", "0x014f220702bf4565e1674e56b6176d45a43f946512c80c0f8a5674be0a884047", "0x012c8fc983035a94a2908a0a67e0cfe1d9ad034da6393984ea89f73c85bb3a04", "0x01be52509c6f3022057f374ceb77216c6484bad1aa601a35f3f31948cbcc1fbd" ], "data": "0x6f", "from": "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 1, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0xbdf020dc94ecf8f9a12512749beacb34358916f7bafd7d82ff8e836bd3ae5c17fadcf0992e", "from": "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0x28" }, { "data": "0x", "from": "0x2837fE6BCdADEa40e14E73df3101847267659772", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0xcf" }, { "data": "0x73c35e6653df1732e0ecd546054542f4299cdae4527f4f0c5399288d0e18644143fc6b378981c0ae2e62a9d9a57a8ca0fad3feb8e1cef68b0ffeb86504376cd0656c481753042411dfd2c4e5f2cd8526724ba4", "from": "0x18665208d71eAF07c959cB6d2b263aCE3eF24042", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x3a" }, { "data": "0xa86e7b43393bb964f0fca6abebff173b079ac1db5f651547b7a31e09267f0e5ea231dd424360a641d7315d1e31665e14895b475f5d43e10baa63e63a1dd67d66853f8777e7f41eccb134162096495d652eff05cbaab7ad7bb0", "from": "0x35F694E45962Ab9eD665971FdF51A45A3b109c62", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0xae53b5" }, { "data": "0xc102d4b975649d4af883da0f6dc25ffea3bb27906faef989181963d5a9aac717dfddfd84320087cc8b22c8f63d04e7034c856251101093eab6677a15b5b11abb439b", "from": "0x03D28A8a81F218F63CCCc11AD16b94f7f787b6d9", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0xe3ac41" }, { "data": "0x3a70fdbd", "from": "0x3AcB272cf9665ba7113b07E79F0DB094DF7E3009", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x2e" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000003", "chainId": "0x0", "nonce": "0x0", "r": "0xb5619cbffc861bbfdaa3e64f9b355f8fdabb9d799849d2dabb2f25876c145292", "s": "0x66361779b642b5632ef692bc04337f9bca791762c47ae2baeef6773fb592c46", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000005", "chainId": "0x0", "nonce": "0x0", "r": "0x138340166a399b49c1f7edde6c633a453e0ba59e46c413194fb91008e79799bd", "s": "0x39ce8b301d482b43275473f83a2fcbcbfc4c99cfdd53e96cd5b3323cfa0f6ce9", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000005", "chainId": "0xdee1f5da8e288cc6d27740ced28df1110000000000000000e2d5020464d553c5", "nonce": "0x0", "r": "0xcf969060aaa8dd8e52c23a2226e67dc4f5f97d38798bbbc038f173dea5a9c7f8", "s": "0x6ee5755aa86f2f8117d761d592bd100610f120ca66c0bacae2bc973ec88adf0a", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000010", "chainId": "0x0", "nonce": "0x0", "r": "0x9a71a0c0c44a05d8a2471cb0262241ee69c28d156d6f34ba485db33f00a42f8c", "s": "0x4945d99f7b2bc60ffd4e45936413244b2107ba059d6bb8ec9ce9f0962f8924a6", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000004", "chainId": "0x0", "nonce": "0x0", "r": "0x431784db736d7a7b32afa2a06f9b2dd9b7947510fcfe270ea15c2ae08af9c7fc", "s": "0x780ae64313ba535e023075c4b6ba0b292377005a380b83e0483cb71d70cdf9d1", "v": "0x1" }, { "address": "0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a", "chainId": "0x0", "nonce": "0x1", "r": "0x58ad4fc6a48d58600a99e258dadf774ccf993a35dca2c92822d103e988d77aae", "s": "0x69054ccea2f3364fe4ded44910d741d4ed75cde286fd5c7fab299322fc9869f0", "v": "0x1" }, { "address": "0x00000000000000000000000000000000000000f7", "chainId": "0x0", "nonce": "0x1", "r": "0xea81c59ad4c4ab86d403d72e88317f89cc3f886d5b730baec3ad01ae5f29b54f", "s": "0x4bae176e31ff39b38a35bd67cab30312129402ce912094b173cb131933f6849e", "v": "0x0" } ], "data": "0xe964b68a16dfccb7300e2a3cfe8b30", "from": "0x87f2957b7228EC6a0dd4F2fCc669BD2ED2B14E11", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x00000000000000000000000000000000000000F5", "type": "0x4", "value": "0x76" }, { "data": "0x00", "from": "0x66bBEf07B980c8b5de6F3DB0d5CA7A0389C7f386", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x0000000000000000000000000000000000000003", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0xb69e5f919d0b7c265606ddcc668583ef819323ff6b65b9f0485cbadb495e5bae", "s": "0x7296df3d02e403899fbe72a1676027a5216c5bf1f0891d945a992eaaf8b9b614", "v": "0x0" } ], "data": "0xe964b68a16dfccb7300e2a3cfe8b30", "from": "0x97511db90b0e141ea4cb42e3b73fe3C24c3D5676", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0x00000000000000000000000000000000000000F5", "type": "0x4", "value": "0x76" } ], "version": "2.0" } ================================================ FILE: src/cli/tests/vectors/fuzzer_test_4.json ================================================ { "accounts": { "0x0000000000000000000000000000000000000011": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876": { "balance": "0x989680", "code": "0x6f02ff392a51880045bd81679eaa49a4616000527f56254cd73afb65c9cabbf00635edb003b0949a8d90b534a408dd40a52b34b53a6020526f154e9920deee06460b9f0155c2178bd96040527eaf16581576839c74614c7c797feb90a61c78e9ac32794649c5ddb41e71b0376060526f165ce2d026e3030555255bc02de9e0456080527f5cbba50b5838eef82ad2c62559770709e2eec3e33fc262b93031d1e1310571e460a0526f0f1b05c33731af7afba9d1ecc2633dca60c0527fa4bd69106c11f78a81e0ed331499740a2c373f32c0d4a4267294c6eef012768560e0526080600061010060006012600b7fca8a3de5474d7684781187c350d780ba82382a44e9fb4fbf62ff85135be18d01f16000556000516001556020516002556040516003556060516004556f15b4a62d16dc800c53d56be3fe06e5316000527ffc90983d1670ea4e0a1c6734c84842961f48ba265b9d1f297db1f6e8f02dbaf06020526f08b2357993c3e46c6df5b4b2a46ac5a86040527f70ed033e5811dbc949080863278cd9ad5a82cd548c03631e9ec7399a196eb72f6060527f6770676283a7b8efb208baaa6360e7408e14ea5b7bc2f32cb27e1a7c6778b5a46080526f064e8898ba5c5a5bab9094b07da7f20960a0527f1d1afd7e9359a3f426001184ed645999406a94095f4393e1133e4ec2f6b5679660c0526f0bc360809709f9fd2972058c40fab13c60e0527f9bd8951b6b7471dccbe0badc90f293e13a0f86fa61eeb656aa287156aed92b14610100527fa7861e47dc4e8f93552ff56950ea7503df311f304aeb00d1a11ce0d96349cb32610120526f100d8556b514febe4262aae2072804ff610140527f1f56cfa643f61c69f8c51986e8526dbf4193b0ba16ebea15e9778c5f1b4bec67610160526f1091ec443cba26cff31f1414be3fc9e4610180527f974fe0473b7aa7f82dcd9c2b16fc28604ba37c5df7834fb62b89dd833fc8a16f6101a0527fe7b8359329021c4595683ceab94e844edc3620b0a5ad0d2e1910ecb9ad4131346101c052608060006101e06000600c7fd2b9d1379879bffa5e6922a3da5bab4c1a1db97b7871f9954a7c0bd550e0964cfa6005556000516006556020516007556040516008556060516009556f11b16d7904cc71ed898cc1c837e83b676000527f7df1a142b4deaa7b27e13ca689d3aa5629ef7aa71f8a535b5f05f61382fff4166020526f0d1425bf71bcdd58e3b2f9914d8203246040527fe26477573206e5cd968229b997c0eb7af9c71cf2a99ea24e76cf6c19b78f9c376060526f032e55ce5592c38376c764bc8f50fab96080527f61b56efce5109366bd037ddcc414886fae97bbf829386ff2b354139814411e0060a0526f06beaaa166ca6f8314d26c9e5220b1ff60c0527f8c0c6d18cb69ab15622a53440dc2548cdcb7161010462636ecaf0a5b7b25fc3560e0526f0c39133f125c1317b348aaa704bfddd0610100527fc158523af83cc3a8c71ce7a6477b60e1218e739286dee601ba70ae924e4bebbb610120526f172f256ab753ee1a075825541bf23515610140527fccf3abc52005fbf9f40147337ed5fd1e8183fad8fae8de4e326b8a3d34479685610160526f1342b383357d50e943731ac03588e0c7610180527f941b16c9474f96dc1f3c4aa50a19bf5aa9e537ad16feec31fddd7595bb0cc88c6101a0526f0f62618f6bccb765aac5e98264e350426101c0527f8c697823eb1f8a342b70e07ed1261be43bdb9a0954ea3195d04885ebd8205d686101e05261010060006102006000600d7f13b55944bab9533cf4f2f8d302aa5ec0ee3e3be0eca70f1520ef656175d872fef4600a55600051600b55602051600c55604051600d55606051600e55608051600f5560a05160105560c05160115560e0516012556f150f4d385f70db4c9e1b2977950b224f6000527f104d3d0064de56ce97739c57d661fe0663c04d4c8f8816a6016770b4c93b81816020526f015253a3b2d98f552647a63c85ded9686040527fc5144b738ad3405c03569364a92f376af88484d19f9fdf9ae6aaccf9180f126460605277080000000000000002bf1a30168165233e0e3bc3f108cdd36080527fe367f4d86aa54962114ebc46bc2eb9697cba0fc2a1aa62765904fea31e6ef4c660a0526f12eb730a67099dc608a80aa528055ab660c0527f7613de79580ff064e76deaa2db26900b01162044f9f17fd27916efbf36e5456c60e0527f7157e40f7328332c6e934963ef8716bb4bfb82203d7909c4d848619d33dc87d96101005261010060006101206000600e7f78dbccfa9a44f1f9e4d26170fbb1d4707811b1586c31bf00a64736db763bd820f460135560005160145560205160155560405160165560605160175560805160185560a05160195560c051601a5560e051601b556e25e6908c41d058bae0017a22c624e56000527fca389a0bd0d682c2d9523b96e2265831a615b249655b882f7327d32d6fdcb4676020526f0749a3da8fa5121b3bade706cd9e74986040527f518e511fa24c4de40f7fa3a8f369b509709d827a2b08bbfe1bdbd78d7ada85126060526f05e128d52c8948aa1e315fa887ea40126080527f89fc5c7803f60a919634a0666f433b6763c075e2a084e43ffcf9602f0c2d622160a0526f0156a0880d3a086e087f0f33c704ef5e60c0527f6154dbc43cb1b72c1d0cf6e695a89e7ef190110fb2b3d72ab3d081a70a9a9c7160e0526f19c0137ba6b2d34a3a4ddd3cfb730005610100527f893413c417397764cb18e8f851ac7e9efe0f32fc5e008af9358a1de973ae70ca610120526f0bf891fd97111ff31ec86b7ebdf60e3c610140527feec4c2cef82e2d5a06fb56d48ae79d725ce304bfe329062db6ff2822b6345c75610160526f02d7185ac827392f6f5127315c7b9b60610180527f4d5d8710dac6bf4d8654423061f924c13d4689da8a8cb6bef7aa5f8f45094ad76101a0526f0db900a3ffe0a9be8ad5edc61ceebfac6101c0527faa7a11a5a505cefe702ab37b37c43d6b1fe5ca8b9ca2012fab0a152a1160de506101e0526f0c0997f6859be162aca94558bb3ce1d4610200527fc58e587162b3f3629996decc96cc0d918a0e395f20be8e2bb1a16597fafe3fa8610220526f04dee2da3a3c4a817130ac1f22b5a05e610240527f7106c5dd497df5d7db92507eb51753e09ff6b50bc798f6a8033ac094b6fd3b57610260526f19a6e21f439afad2d66027984e4644b1610280527fb6532e8789ad68199ea946b511bd18d07a8ad353d87eb3c9f66a6864f33d2e5e6102a0526f18224c9c69a95343548571e650ca96876102c0527f0d274959a9a9b4e4f1c0720df7c3d81d5e51e9b5aa67e73acbb15d4f226aa8726102e0526f09e4e495fe4d9ccf8dbf0c1395c7c0a1610300527f6cc855f92121ea0e801b429f738bc248f336b85d2f59c1effaa5921c60adb623610320526f0f702fb07c66ec3b44e3dd9cbcb1df9d610340527fbaf5e0cf6c415ee9a88ab176719b7e4084e0959372263c7db8c6628a9f3eb81d610360526f10dbea22d2d12eb07ab7af782790af68610380527f94f388250be3c9f7de80db50891202df1daffdfdea2903b846de9d1d169e2d4d6103a0526f04f13c07b6e8530d51bf79111f7e2dcc6103c0527f85bbaf3bb101d1e24e01d687a0967188def03b25e5a01c2e14b7d0191df125456103e0526f195ff16e04a35c0e19cd8621a7d7714f610400527f2eeb11becd22c4397d009144245d468f1c68c8ea68c6570ca3b9ad65f8c7e616610420526f18601dd1f89f6e8ffaa613d4ce374221610440527fb2fc0db4e405c63a3db6f9a63b3ac72306f3231603455fe0cc93f92121439df8610460526f19e867999b3fc03c51d71fe28c5bdd00610480527f185c4e8caf0665f2cb756351e4ce123168280765cd122e935466919ae78e7c946104a0526f0b4b6e440e9a6fe52f0f6f44c72641126104c0527f5e2d9ee84a1f4fcde2a8a1fbb5e131774369605abf5aee5a8d1700297727d73c6104e0526f024aa2b2f08f0a91260805272dc51051610500527fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8610520526f13e02b6052719f607dacd3a088274f65610540527f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e610560526f0ce5d527727d6e118cc9cdc6da2e351a610580527fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828016105a0526f0606c4a02ea734cc32acd2b02bc28b996105c0527fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be6105e052602060006106006000600f7f247aa40947a72170799d532697899c366999c2aa400acb85f59c4d0f57266768f4601c55600051601d556f13570d9fd2db4959dfec409d4638602b6000527fa3f04941f45ec554899c4d0f7f53d70e03f9693ce01d037edf011b17ca8493f16020526080600060406000600060107faa336809d445eb5793ca323cca0116b6f90884cd2de24e968c4f3030b348a955f1601e55600051601f556020516020556040516021556060516022556f0e27e5e11d58e678c11a040fd27bf27f6000527f06effaa3b77f09e1fa12a5d8d26b8638a0f01afed29e75150e2b492eae4db9be6020526f0439d0327c8d1b43a20fd7bd2404a90b6040527f47a0cbda67c8dafb13c10143dd6c9c0e4dd5a91f91d57a4947d5b6076927f74f606052610100600060806000604d60117f9ebcee41df8ac99bc589009f8a7e47e4299477856793e1dc9392bcc167dacf74f260235560005160245560205160255560405160265560605160275560805160285560a05160295560c051602a5560e051602b55", "nonce": "0x0", "storage": {} }, "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3": { "balance": "0x0", "code": "0x60ef6049609660136040602a60d38a0a3e1a640b08a05400315960423c0b435609f4f0107e701d17667e534a9f037c6757f3123d399535661dfd6c159149611532178e727e57fd72491260941a1347056c885d1c5d006a1145307e82739310116e3e018b769515f373137b37461d0b193e397b7343063416301a34116657f598755a9e6413025a7356181a81623b683a55357f1967458d140a7831445c5f5f7f0a409b3e76071702fe3d55408879751c55ff6ef01e3d54193c6b75485c3a1d678e4005175d047a5d54007a8bf13e549751590b7d672091323e7d303299697a4464f03b9a89377c9d0b716e0467143720101179516509537c0a510a59f44962586873067960036a5d3f85f29c721039556c7206137b7108955a5d94fd0702867b6d65fa79456219863611705a404533430a40597b3055ff0596835d5337619a007e7a513d7866f1653115447341f44a1c6a3bf2676272333a666c7f666f445303738d3c3a8960925474586b5b5607025772568c6b1d095d368737066264663e334a7495068d097974879c6f30101699744217925d53924147625574a04049411804806e7c5c7d40505e3d7659141094736c523f7d3d02fd466134626830004a791e643b163e807a75798e817366945c5360663e5c01727b881d8e191cfd047f043e81936e5ff54a8e3f97657cfe3c49038c171e6f8b55094104202000699d497a527d1c127b7311587014f24687717d0966503f5d016f371d4000083900a36b50601c941e521a6c5fa37c54a23450063b42961e73844407327a6a06341c1d671b62111c061b694540643340a23b798961f10b627135653e123e373d3f576251675717186b71009d148e56581e1d0943097d005c408c0430951365011b8600649e7a7c673f8b718c49194047073530315a115019fa329bf0a16834fd62908536f535193579047b3a9f32184174a3ff9e03850670680810158e10470a333298674a716a769d204919065367207b53fa6843555906677f159e81797a9a9f1e417b721931a0629d1c7b3e50101690715e007f8a187716107a803d864983585b6931080246547b585b8efe599246610811573e487833507a57a28c5b676b6a353b619c7e65523514744095774060f01d06f258481eff6e940516550811633936144a377d6b11786f94817a360b093310856b98f29f18666c9e901d08a08aa07c5c5b1757425e9a12433e6548495c785d661a90710b3f619f7839047c6c1b3317806a94610862688d1007865648123241919f206e7a060773735234a4755a11149a03199d570a65a2883d6c71f27b1998957d5e75425b8f457906460b66395f395e7e0942ff436a180a20857f491537866e5b80395a6b4689803507590661651c50331a8a7e0550905d8161890637848f9c96726d061c7544ff8c593d486431980b5d19", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000c", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000005" } }, "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f": { "balance": "0x0", "code": "0x60f9ff08e55301a405600aff7f838f432b398d67edd79d315dc36a90f8b6cec82cc931e9902c1977c41d815a1f6000527f13fe905749a9fa23e5e6d19d6bc2b116647971e33108b06569f3c5102c60c73f6020527ffbebb93b018b3214b7fb132b27e4a482ef0bc3108d1e7476fa9ae8145a0d52a36040527fff9e5a128ba578caf9dfbb892ca6ff783f8dd7c48389a16d315843dd7dfc0aec6060527f615846a2a8d4ff72d120c18d25778080fafb47fd942cb8db3deb30f9225c81f06080527f16b22134b6bbea2a3fd6fc5ea7ca4ee2626ce45e18265fa072a6b0afd3209a1f60a0527fe83451f442f5180389a5f9dfc9aa2255be1c74faf6f88d95c533cf1457d2362a60c0527f53337028167932cf8acca7e83f755d4d30e80aa033d0bb8511efe8b19cf49fba60e0527fe1535d12c7bb0a7718f875d946d90792b1aa54e135e91d644933763ca1148aec610100527ff79ad2a22352e9ca9a0c445ab02dd151fb08b251275b4171b0fe073dfdce154f610120527fecfd9d2f7e17b9b598ea4fdc1a1a136bc133371fceca1c2375b10c728b75b1a4610140527ff2c027a65ba4bce87721c1e22be423e68594d156ac2ed671ee49a1a6d1810d22610160527ffdf921a8aeba249b30de81ff9b7044ae3be7067e9c15100c3825745121a0373961018052604060006101a0600060037f39a0f0e5a3034ddab629963f71f3a2c805d5de5e485f50470c4788b609891297fa600055600051600155602051600255", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000010", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000007" } }, "0x4133B3E532cC750d0a4691c8Bb0B03fba51707FC": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xdcaa7645870b9ff21dc74c437d77781b7366c4f352caa0c0f1e7acec0c780181", "storage": {} }, "0x538A8474EeaB43d5a960164c554A20400151D479": { "balance": "0x989680", "code": "0x7f5cff5e24ab538a91033a6503871ae05abcafe0d859c02f011b73a34fc3c9268d6000527f05c734d437bfc67f9c0201fc5ad0440d2160361d66a5b9e740fac13f2e8053966020527fe5261c43f657361f90396c96da8dfddf51d4e1006fcf030c38272acd6e9cd5226040527f9f354515f0fe58d09aad2b4e7533ed7ba3fedc12996bf860f5f4ba6bb743c2a96060527fd042e4df018e59bc0f575f146560fc50879d525e5bc1b7816fa66a650a6be0fe6080526020600060a0600060566101007f70ded0da3434e4d08343f854a5d5ff9af5b6f2a0a45d505487bd115d5a95dfd2f2600055600051600155", "nonce": "0x0", "storage": {} }, "0x641602bAD4A323C49629d45338d79A2bb984A3fb": { "balance": "0x989680", "code": "0x602060006103803e60056003607439602a60246103a0376080600661028039602760276103a03760006102802060c760006103203e6001610380fd", "nonce": "0x0", "storage": {} }, "0x6EB54E66856fD47bd539A986B19F0Bc9B7B4dA9F": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x38b446fe4e737b60383040233f4e9d2a40598cc6da8bcd879c52501b7bd413c9", "storage": {} }, "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190": { "balance": "0x0", "code": "0x7f60065c507f60045c507f3f4a6783e043cade83e3efd7c036b5517630586e70666000527ff745609afc6000527f26ac0c300b6000527f1ae979211aef9d5b178c50b254496020527fc94746f9c9f4bc902c6020527f748b1677bd0ef214ce6020527f0547200a26736040527f78956e009667fa7cdcbafee1fe6040527fff58301e64554c7d0f22aff66460406060527f527fc0e58badd643e78e6951c18212baac6060527f8b47d9ec7813b1b2c134086080527f698364dbe21e6060527fabd6c4319461b934544dc06080527fbe25ee574dee9260a0527f8da0cb487ef89497954aa30e26a86080526040600060a0600060a0527f60446060c0527ff67f02548193b632f42d7037186903e461b65d592b996f244819ec079f60c05260e0527f606560e053605160e153606260e25360fb60e353606760e45360f160e5536060610100527f60e653600060e753605560e853606060e953600060ea53605160eb53606060ec610120527f53600160ed53605560ee53606060ef53602060f053605160f153606060f253606101405260026101605360606101615360f36101625360536101635360606101645360556101655360606101665360f46101675360536101685360606101695360f561016a53606061016b53600061016c5360f361016d537f4176702b63bcdc4cb9c73abfc785e626a5d48ed79834c65870dc6b076df773ae610180527fe514ce5369e1515e7c76205f39dc50325f5524af55385127fb99708a160791a06101a0527f540f9745ee262948be29f7c4ff39b29f069012ca8d661cfe500180d47866523d6101c0527f3d871f52edc9e5ee936538aba6b1a574f8c6df1bfe2a4bcf7793bc0bb008b1336101e0527f848fb85541568fc4035f73bf00ab79eb687773ea0878b4b25e4f443b23673b22610200527ffb6a3205053e9cfe09d60513da475141b7102e6c775fc1afd88244e30f98216f610220527fa3a57f172d51608c8a4082a4eb4089f513d89a7916a000af45ecebd20b6b4590610240527f261600b57bee20a830b2b5dff7a02f640cb410fefe2aee2cdfd7cff007f6da3b610260527fe537919b87b961f6f0e06e0b95989a4c4c7976613994af296b67c727e9417099610280527f5cdc062258c2642c1153b1f4ec9d3ec1cf7966d3fb1874d8274863c4c0c4320a6102a0527fa1fc3931caa764bebd3c7d05743c9887f9a7371bb9ad17d5a3c117cf769b54806102c0527f282edeb064f32937da73d7ce692146aed14888fa10e4ff12a005651a41c4b07b6102e0527f91e02452a5a0f1672757344255aec5842f69a3635046e560bc1b54d606c42af8610300527f6bab911858f883ce4f4d0838210ebfd5ae7ffd75d46a9637908e78e4d1943ff4610320527f5a0ef79ffff9ff5f8bef33a8b8eda6a9189ac5eab77d636deeb93c8474a458e0610340527f5fc5680e125bfee5991675741d0e5604667a26970dd8f0ce4753a7209a0b67996103605261016e60006000f060406000610200610180845af4600355600051600455602051600555600655", "nonce": "0x0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000000000000000000000000000000000000000000e", "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10": { "balance": "0x989680", "code": "0x7c30094d9e93c6538447c7f71879ebc33171319acae4d27701c7b3fed94c6000527f28c7989c23b52e07b22635abfda126cf1a14981ede6fef9a9ef409d36ad639bf6020527f1f4dab7bac2a1d1205e2d552299144f2724e1e071a3c937dd0651aee95d859d36040527ff57bf8b81daa6cbae4959a13988b1e8fcc9bdb8be682a8a6f7fe0707d1ddeda46060527f0fc1f5ad1138e3d799bbae17dd28fcca35a3ec19c8bcd49b4b3338610d9429656080527f693bb5ee5c4320832b5134056658e570f5341a8cf1b5d6051c15367ff473fdc360a052604360c053606060c153604f60c25360d260c35360f760c45360ba60c553606f60c65360ca60c753606460c853608060c95360c160ca5360df60cb5360d260cc53608160cd53603a60ce5360cd60cf53602860d05360a360d153604260d25360bd60d353600160d4536040600060d5600060d560097f63823a27ea3a21fe353b0124ab9c852fd4ba8cb0c2dff0e45e1a17c15378f7bcf1600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0x78011f4E10a54C02296EfeB11034d561320e8949": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x8260476d5e5d66360702af75fbb09e6db415c6663c7ca092e358bfea4448f770", "storage": {} }, "0x82361b537D93C7A0079Dba1E4f367EaE7b5D5f2E": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xd8681c573cfe16cd18cac8fb006983725de8f2b9bf2044cf8d122b7c6aa02822", "storage": {} }, "0x94b690A97d429F297d32b8fED10213e759861599": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xad696fc9e254151c47bf314c3d113e3d6f61dbae1a524f30bc67772429681ff1", "storage": {} }, "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F": { "balance": "0x989680", "code": "0x760100000000ffffffffffffffff0000000000002e0000007e40000000fd000000db0000000000000000000040000000fd000000db0000d3901a7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002200006fdac7fff9ffd9e13226262626262626009005900b6c10000000000000000000000000762900760076761e00020076760000000076767676000000901a13778200000000000000fe000004000000ffff000000fffff70060071a05671fffffffffffffff7806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a117ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff7e40000000fd000000db0000000000000000000040000000fd000000db0000d368066aa0a5319bcf5cb40906901d6a01000000000000000000007f8000000000000000000000000000000000000000000000000000000000000001056000557f80000000000000000000000000000000000000000000000000000000000000017f7effffff80000000000000000000000000020000440000000000000000000001901c900b7f80000000000000000000000000000000000000000000000000000000000000026c01000000000000000000000000900290037d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf9682323232323232323230305197780000000000000008000000000000000800000000000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b0017901a6001557f40000000fd000000db00000000000000000000000000000000000000000000017806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a9012777effffff8000000000000000000000000000000000008001717676767676760000000000760000007600007806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a0990066002557806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1a678000000000000000762900760076761e00020076760000000076767676000000011b6a1000000000000000000000637fffffff1d90176003557cc9700000000000000000023f00c00014ff00000000000000002230080567ffffffffffffffff90147f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6801000000000000000010126fdac7fff9ffd9e1322626262626262600778200000000000000fe000004000000ffff000000fffff7009018166004557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd900b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101a7ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb07ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff901b037f80000000000000018000000000000000800000000000000080000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff90116005557feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6f80000000000000000000000000000000901290177f7effffff8000000000000000000000000000000000000000d90000000000000168210000000000000022774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a08196006557f80000000000000000000000000000000000000000000000000000000000000006f800000000000000100000000000000009007900760075568066aa0a5319bcf5cb467800000000000000190177f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7f800000000000000000000000000000000000000000000000000000000000000190050b7fffffffffffffffff7effffff800000007effffff800000008000ff000001000067700000000000000017901c7702ffffffffffffffffffffffffffffffffff0000000300007f82000000000000000000000000000000000000000000000000000000000000000b600855686d5adef08547abf7eb6c100000000000000000000000007f7effffff8000000000000000000000000000000000000000d90000000000000190091d7702ffffffffffffffffffffffffffffffffff200000000000677fffffffffffffff070b686d5adef08547abf7eb7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd900b600955762900760076761e00020076760000000076767676000000777effffff800000000000000000000000000000000000800190139006777effffff8000000000000000000000000000000000008001760fffc000000000000767676240000000000002b0576047181b7cc9700000000000000000023f00c00014ff0000000000000000223008057bc9700000000000000000023f00c00014ff002c0000000000002231089013057f77676767676760000000000000001002e000000000000040000000e0000000007702ffffffffffffffffffffffffffffffffff200000000000901090016a01000000000000000000006a01000000000000000000009005900a67d02126262626262661011103137ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f82000000000000000000000000000000000000000000000000000000000000000b600a556780000000000000016780000000000000016801000000000000000008901d197e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007e1f0000000000000000000000000000002000000001000000000000000000000204600b557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10006fdac7fff9ffd9e132262626262626260090137ee8e8e8e2000100000009ea02000000000000ff3ffffff80000001000220000760100000000ffffffffffffffff0000000000002e0000009004176101117f80000000000000000000000000000000000000000000000000000000000000000a06677fffffffffffffff7f77676767676760000000000000001002e000000000000040000000e000000000900390137f80000000000000000000000000000000000000000000000000000000000000016b1000000000000000000000001c151c712000110000000d0a300e750a000000090a0a774b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b0a0a9004027ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff00000190101b7806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a6000900b0468478392145435897052637fffffff109016760fffc000000000000767676240000000000002b05760477feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1890027ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff637fffffff9010900b682323232323232323237f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd68478392145435897052900904600c557f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd197d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf97f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd1d107f77676767676760000000000000001002e000000000000040000000e00000000063800000019016076823232323232323232376013590cab83b779e708b533b0eef3561483ddeefc841f5181b778000000000000000800000000000000080000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9018027f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe67ffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee900890166fdac7fff9ffd9e13226262626262626007f7effffff8000000000000000000000000000000000000000d90000000000000104901c600d557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10006b10000000000000000000000090107e40000000fd000000db0000000000000000000040000000fd000000db0000d361011190071a6b01000000000000000000000063800000011b600e556b0100000000000000000000007f7effffff800000000000000000000000000200004400000000000000000000010b1d7e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb901b901c7806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a7a0109000000000000000000000000000000000000000000000000007702ffffffffffffffffffffffffffffffffff200000000000081a7f7effffff8000000000000000000000000000000000000000d90000000000000160071b9012600f556101117f5fd8fffffffffffffffffffffffffffffc090000ce700004d0c9ffffff000001900b6010557806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a677fffffffffffffff1d601155778200000000000000fe000004000000ffff000000fffff7007d0c76f4afb041407a8ea478d65024f5c3dfe1db1a1bb10c5ea8bec314ccf90560125569100000000000000000007f7effffff8000000000000000000000000000000000000000d9000000000000019006600067700000000000000016900315601355678000000000000000677000000000000000187f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a567fffffffffffffffe90139005778000000000000000800000000000000080000000000000007176767676767676767600000076767676767690181d760100000000ffffffffffffffff0000000000002e0000007f12cbafcee8f60f9f3fa308c90fde8d298772ffea667aa6bc109d5c661e7929a57e050beb1c60141a0000dc2b0b0b0b0b0b410a0a0df4f40b090b2b0bc60a0a0009901819760100000000ffffffffffffffff0000000000002e000000638000000003057f80000000000000000000000000000000000000000000000000000000000000017f40000000fd000000db00000000000000000000000000000000000000000000011c1c76013590cab83b779e708b533b0eef3561483ddeefc841f5610111901113671fffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff137e1f000000000000000000000000000000200000000100000000000000000000777effffff80000000000000000000000000000000000080017e1f00000000000000000000000000000020000000010000000000000000000008050360016780000000000000007cc9700000000000000000023f00c00014ff00000000000000002230080509900563800000007702ffffffffffffffffffffffffffffffffff000000030000111c7e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a10007d76767676767600000000007600000000000000560000000000000000000090176014556c100000000000000000000000006847839214543589705207900b67fffffffffffffffe77800000000000000080000000000000008000000000000000901c901a19712000110000000d0a300e750a000000090a0a7fffffffffffffffff7effffff800000007effffff800000008000ff0000010000171a778200000000000000fe000004000000ffff000000fffff7006a10000000000000000000009016901a7f40000000fd000000db00000000000000000000000000000000000000000000016a010000000000000000000090121a6770000000000000006910000000000000000000131469010000000000000000006380000001777effffff800000007effffff800000008000ff00000100009008900a67fffffffffffffffe760fffc000000000000767676240000000000002b0576047901890101960056f80000000000000010000000000000000901c90190667b368d219438b7f3f7a0109000000000000000000000000000000000000000000000000009010900a7d7676767676760000000000760000000000000056000000000000000000007ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff90179007196015556a10000000000000000000006a010000000000000000000090067702ffffffffffffffffffffffffffffffffff20000000000068232323232323232323119016638000000067b368d219438b7f3f180268232323232323232323600790061c6801000000000000000067800000000000000090177f8000000000000001800000000000000080000000000000008000000000000000778000000000000000800000000000000080000000000000007a010900000000000000000000000000000000000000000000000000900990016016557f7effffff800000000000000000000000000200004400000000000000000000017a01090000000000000000000000000000000000000000000000000007116c1000000000000000000000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b000a900160006000f3", "nonce": "0x0", "storage": {} }, "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d": { "balance": "0x989680", "code": "0x7f0f0ea7c172f5a60807b88890ceef3613666c7bc8b46ab8c6ba7f9d44c7c8d9c56000527fffffffff000000010000000000000000000000010000000000000000000000006020527fffffffff000000010000000000000000000000010000000000000000000000006040527fe9d59270783f28e43ddf8f1b6a232fe86e59f3d054ae7056d7dc642d51f14a406060527f9d34ef22e83586115f72b401b9910edf0a3d4eb5ab5842d6526bab09d77e14c06080526020600060a06000610100611c68fa6000556000516001557f7b94c577a72510ad55418281ad7a8629f5b63bf1147d5268283b11beafd9ebe26000527f7810b9459c76111c880ea84e8499a26242792c36ba27d395c41b9c95359bfdea6020527f59b4f9fa4df5b677ff6e52720980987d5fba33171483e8c5cf862cabc2c24d646040527fc47f208c959f2304a9fa862623380053810c0d0ff750736436ac6d0b3fee66996060527f7905e517823b66df754c53a4f041cc1779a861eca59dad07955b10b697346eab6080526020600060a06000610100611a68fa6002556000516003557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f19f6370259c54b5fe9d70769e1d13b5cd7de9174704c0b751ae8c05c2a24ab2b6060527f4ccf54ccc3a23c5051da573be9703d9a2aa6a80862da9de38493d2ef63d024a46080526020600060a060006000610100611b8ef16004556000516005557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080526020600060a06000610100611aeef46006556000516007557f27a75fd0382a000f4435415fb07c1ebc1443135f515ea0f1fa570cff63ebbd136000527fcb22c16ad640faaf88f97a84294e8e0bcdb706d94619e821ab82353b7c42fdca6020527f1f5d30fd6961f15a5a77fe525068e0fa278a2787045863e42a69dd24ac1550e46040527f0f306538f795f5bdad7d2beee3c7e75663965997393b690b437411d0d58ce9f26060527f065cbb1784b9a5c653bcc54a914fa50fe730b23528518fc9bd2aec4b27fa2f436080526020600060a060006000610100611cd3f16008556000516009557f36c057851467b4e8f1d9f625862e82538302e0fd975d1cb4e0d516b96ca8b6626000527f4889a3454be76415ccdcce4678704e94af7a3b11985f7a5ae34bd43fb8a4e12c6020527f657224d9b3bb1f69b7c751ec64b612f9f6d5e41737b172cb0e28557eda13a0996040527f3b1e2febeff11f1197266d1574cb00e7924937cddfe0e81a9a6ab5c06abb13536060527fd6e7449ca1278aabfb488a187b82f0a2cc8696575c88932f02ac052d7891a82a6080526020600060a060006001610100611badf1600a55600051600b557f61952ed2690b680aa593a089363d056da851c37e412c53b8d4a5c900876eae886000527f5364c572df38b3eb57d39a9adedddb179a6af9903ab70e6024a8413b13aeb2746020527fc1bc39d8e0c8c05f94a2bb6e9452586003a72b77e2958d07e005d29cb50cdbf96040527f7118c768a2994569c1f71c8e428ee1ed44f13fe0941b16b118765b562713c0196060527f2585a6698c187ea3ed93f12ee13ebd03987d8cba11438973a54406babe0d49326080526020600060a060006001610100611aa3f2600c55600051600d557f9a894ef20b37c1057182fbe7e5f59a3c42f177d9d152ed9dd344d15dec691d956000527f17b51769636e3661b9b0aed1d13c16a50a9f2dfbd79812686b89c6cbd4c8d0e36020527fe66b4011bdad92cf17219c9b80d87e927c7fcc9401922e85ad16260161ed20356040527ff29286409619dc0318eed274c26b87091ec9ccfb3fcbece8a9b326d534030e716060527f31b58bc996aa65a72a9deda0cb19b05a763c26bacd130fdb58c01574d2d6445d6080526020600060a060006001610100611babf1600e55600051600f557fa2f800b0138f1ceb4099b6db46869088b058b877995906229851f3a1ed4a6c566000527fb92bf3b0ddfe9442002c2906fcda67052525a68d54dfdcd18c5697079c4b621f6020527f7d8194ac1768fa99ce3ec308ee5b6b738fde4d07efc44f391e20b8e31233d43b6040527fa35bbb2e53209d4b742d108ce5c643e2520939e5c40f41eb4b5ca6987d1efd9f6060527f0aa9f8e9bbbeacd8362f094f3c4eac043400c457e9d342d8096098542f2c1dc26080526020600060a060006001610100611c89f16010556000516011557ffd5c529bd322eebcca73bba55ad93fcf1663423e06074af41f0ca99575cb32b16000527f458837808d6a6e287bd424bff26bb52a73246b8fb8a142ef523e607e3e84d9f56020527f362b527afb3224b47e0754b3b56dcc24c34874f1936a3db1852ce6c2a717e0786040527f75a34b8ae705ac9a5d79ebd92742c1b18c71e84e3541ba8dd078faff04ba50546060527fc1bdb57d01a87b6ddcdcadd5e40b36ed2d4bafb5a59867821ff95f42b3d7069f6080526020600060a06000610100611c91fa6012556000516013557f9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a086000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527f68019add2e307b5807330d28d8577e078bcb965e9a852103a79d25185ee01a0a6060527fd9d79438bcd4e05d060c8b02c7ceba7abebe01846516257cb85e50c2c41d37746080526020600060a060006001610100611bcaf16014556000516015557f3e866a7b7a4024f8e07421be8291c5cc80bed4659564367fd2aa1e2d17a757156000527f5c1803812b8dceaf1d1aeb67107579a1586b07d8033d0772a644c89c9eecfc8960205260436040527f931c499350eb57b965618a1770ad601ee72b1d2f7534572e57bdc2a16e08d1266060527f22d032db5ab09081ca16ebddf3475c04c59a08252e57f318e87c122e64f439d36080526020600060a060006101006119bafa6016556000516017557fef02d493f62b3af6a7bfacaf888c58ae1b41d3e62bd483459f1682842ade1c726000527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f1a52172d34aa8c12e27afd17916b4a3dd4e4767bae7d5f499df89c7d0b6bd0936060527f8da714fb1068cd61fda3cf511ecde05e8345471ac198dd02cef0dbe4526c132d6080526020600060a06000610100611b06fa6018556000516019557fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6000527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6020527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6080526020600060a06000610100611b67fa601a55600051601b557f309481fc9139adcdc6f07820b3cf6426f6dcec887e1769ee0b31007ea4a28e616000527f82da988b9dae706975a53b1b941c835a17cbb087efcd65fef9888ef4002a6c3e6020527fbb0672091ddf44a9a90202fb492ecd36f7d2b00be1096d6b372de353f60825296040527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff6060527f1d4df86c05e1b0aa40f4b2bb71876cb83d620ed52c608a990bcea20ccb20a61f6080526020600060a06000610100611b47f4601c55600051601d557f60fe3ec609d65041e5ac55b70de7281992889ad1786a60708710789a275d184c6000527f6789ee5622bbe61476741d925215c89c6ec90fb1c030fe2b7fc9115c5de4c1676020527f81ed559065083889f9b510aca63d4cc839c788991a3285d66434a2a930253cb96040527f6d6625dab4ff1516dc694b2a75ca0ae67105db20b29ffb26be51727f188e0ecb6060527f831fbde00ea788aa911818c1ffe8770c231214487e24ee209f533fccbc5f8f0a6080526020600060a060006000610100611c63f2601e55600051601f557f2b4d344ca37e370e6bce4d4d1b1f362d461709d8d7c676af6e6baaedb7947f136000527f2a9fcf851669dfb57aa0da70d5ad9e172dfdf89100ce9c6a034600b81211f8e56020527f6f0c3598071c216d471205667642f6b6d92a6c67b3deed518623c24e14f29ea76040527f5492389cd1891859b4afda3b89f99f8728c4491e2c7d05ab64317008276d843e6060527f31311a9f1858beecc762365d6b5980f9aaa889f9b34759fad1e0ab0a38f4597b6080526020600060a060006001610100611a13f16020556000516021557f86f5d8b49ceba7aeaf63e9c713c820dd8ed3f6852dc6bda135eb1849be189b4e6000527f3681867bcb7d33e72ffcb95310886698ef860db22b38607ed8adf05b13b828416020527f360a8074d67de629bfa3f8b3446f858878e201c1dfa90903a4aea5eca61146c06040527f392f90a658a4cdf01da2dd1ed687654b201f922d0d02e50618376cab335427db6060527f94c0e5df352182e7a2644cb07c5e8fbfd4f3873470f134a0bb0ba8ad48a32a596080526020600060a06000610100611960f46022556000516023557f2187e0b39b0602365f1a0d76868183a38cb1fd0f2a4d730ce4f6045c2d4926756000527f16fcabc35bf48a06b56b00493dffd9509f6c383a908754774922e9bcc4a8f7a46020527fd9420df2f0b941a7d9c8fe403ff0260b7c0af26ea3eda679cdbb4349eabf8b6f6040527fe10adfc7e992b0511b40fcc442e48e8898ec157cf51935d8dce8a05bf352c63f6060527fd22d191a8791b292932694ddf0a872e5ade42ed3419e15c2019a3684d222d9dc6080526020600060a060006001610100611bbaf26024556000516025557f5b0f9dbb43cdd626807517c7312f503bbdac76dfa29cc22cdd222b22a11adaad6000527fa119ba6510ea446dd9eaaa0bfc98392e23c4ec578498f33681ab6165e634aade6020527f26c16c5fd456933738accd67d30266854cabc2c87913f739b00596f6df3b47326040527f9203ea28df657ce09a406539e155680e09ced0b0bc312920ac2cb4d9820338036060527f27476b844dd0dcd6257f8e279f5f4bd9f79af95ec1054e9e38be7e4fe95f580b6080526020600060a060006000610100611be3f26026556000516027557fd833cd561af31de9949b67669b99be4e9d1c65b71a0dc822bac620e8627909c46000527ff273e568887d5c7c232c3b5b80cbb4304e12edec490de12f8ad1be8aa058ba7c6020527f845589edc62021e0437125910ed1cea3800c60f231c82dd049e462b0e58c3f52604052600060605260006080526020600060a06000610100611ba2f4602855600051602955600060005260006020526000604052600060605260006080526020600060a06000610100611c4cf4602a55600051602b557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb56000527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506020527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506040527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6060527fffffffff00000001000000000000000000000000fffffffffffffffffffffffe6080526020600060a06000610100611a4bfa602c55600051602d557f18edc615251fb19db1799d1e0d9cc499707553d6f7e75fdef32e177a9c198ce76000527fc23b9c3d62f717841e0b1a251b772c1f286991f41bf6c2b6744c4d5db0c6c44f6020527f1642cc67c1202959cd38dca27c57aba75579fb113eb38759c4a5fcc46fb435ca6040527f445a1575344053415bed4619d4be1c958b6e61971073fc08d3830216443b02196060527ff5b127e67009d3373f5b7c9b4fcaf785eccb823da9d09f984b2d16a2fa3e05836080526020600060a06000610100611bd3f4602e55600051602f557fdc7a6a7dbd8a42cf97100cbfb5343286879ea772d7f0e486bff85bac63a41cb560005274800000000000000000000000000000000000000000602052748000000000000000000000000000000000000000006040527f9dcd2d2e205014181bcce7fa788a0ef7fa1dd6dcf1ae31bd0e6d4bee41a918cb6060527f126e9db6839b8c9f27aec5a6ac351952146ac9dc3f4b2b09f7849eb92bfe363c6080526020600060a06000600061010061199af1603055600051603155", "nonce": "0x0", "storage": {} }, "0xB9A8D444BbCDFb9a6b19f59e0024184fbe10761c": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x8ffb0595345154a7a19e50c98c725ce7ae2231b522d58776a3f4472f3d622ca0", "storage": {} }, "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6": { "balance": "0x989680", "code": "0x7f26cc064393e356f34a892dd1815dc54437b2b669f31eb4c62b4903c08aabedc86000527f25ea1cdb71917d07e3f0d2620379e0a5ba2c4061bd663b291e619e795631b07a6020527f1ba0e01f911e12cbdd641b6b387876d2c45db434f342280af8cb43c45b5afd8d6040526040600060606000608860077fc71d868d71d0d82d13bf3293e7fc8a8e17e400ed0bf8ff4ab65cebe1ad753cfbf2600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xD74CFe323387aE2fd070CD046173026716D8D649": { "balance": "0x989680", "code": "0x7f0120d0aeeaa75bcae6522020acde356d3b204cfda02419322a0b875bbe21490a6000527f1a200d4e4f07055a7de7507ea7be401aea666dae89de07142f8023e2b9ec5d966020527edc46c0113055cb6d18d48c6e1b46c188afb53373ed78cbd52ce8fa11f4e4a76040527fae9fb4d83a16077a020981dad4912dad522e8014117fa49408095016742564fd6060527ffd3879f9d9e46f2314c33e39b5cf41608395bc00161da71e3a3cbcf1c173165c6080527f437d18c6fbb60f851752e0bd2c44c8f59618faadcf06117915fbc0f0f620d60860a0526040600060c06000600a7f2c6d339c3f6418873266d0bdde127282b35741c9b47c522d30ce2ddb992b8dd6fa600055600051600155602051600255", "nonce": "0x0", "storage": {} }, "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce": { "balance": "0x989680", "code": "0x600060005260006020526000604052600060605260206000608060006000600161265ef16000556000516001557f8ffba10a0017ca5f8219909e128d511f31ba382b0d16f2df9c188d675ec691606000527f1d1f6dc7fd280f0613985080dd8712abfb86f6ab501331c2f76b1b75b41fd81d6020527f6ebbe1a2bf52d21e98477f1c849c68c5bc869cea5747e2b63272a8acdb0567866040527fd187e3992461b86080fe2d5de2844e395df602593ebb1821b20e0172daca8b7760605260206000608060006000600161d949f26002556000516003557f66b4f6e8a92f3f16280310feed70a2566d9af4d89434c564a3b6c581cfc62c7c6000527fafc59625004fd16e389059faef7927f7d6d1da75b445daa3d07c4baba821051b60205260006040527fbf941c82a54c09c167606a6efae9306aafbbe0ab3da162f92e97f389f62abc5060605260206000608060006001616c4cfa6004556000516005557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f9d2ea85682769dce1d8d837360f17bed8c18f08157e7e3c75cd02d43e22d18156040527f641af4a62533813dc42df075c1d56e12c49a0b15e76d6673984a966904c8718160605260206000608060006001600161a349f26006556000516007557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527f2281e311cea2cfa2d47a95ecc920d2fd303025a731594cb63b341fab784f7f976040527f551dca8bd75d4b9a7a70c580fe2bd64c1645051a27764a1a0be26835a0a6c35760605260206000608060006000600162016959f26008556000516009557fd11c4a1918b16339575c493b5e703a275f0c72dfa9c48ecb2a5634f8c37929a16000527fe44db503c9eb138b141d8aa54cd48df9539d966001850963446a57b1f51bdb1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f13e1f66edabdc35841c531fb7387f640116df72c4e24f7d40050819e5ed7bedc60605260206000608060006000600162011544f1600a55600051600b556000600052601b60205260016040526001606052602060006080600060016001614b65f1600c55600051600d556000600052600060205260006040526000606052602060006080600060016201687ef4600e55600051600f557f9cae8ac6460c880a4245cc665db1bec3a711ede7de8cff6b374e70395b86dd256000527f27181ce37efb15fa507728635acef6bc88447cae85aade5709d5b66ed6705a1d6020527f8e2b295c578c6c3efa1980162d62733e54afd977da407669c1599acd1fe7d25a6040527f3a4e3ec1e15a60d4031f9067a24376f9e28c6857c9718c62a89886bde764466360605260206000608060006000600162010f56f16010556000516011557fefe4130c9e6b6fe6e37733bb46c25753aac68618489ce41ae0624e14d40363976000527ff874b185f1f225860aab85b3d4963966b9171cfaa46622db6e0782b59e8d1e1b60205260006040527fc9a2d0e35763f3dbd99acb56fb534c350ee000a65f9fdca5474f1aa0f1b31ec060605260206000608060006001620160f3f46012556000516013557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fe436034a72ef7c34b9b1f2c3eac91192cb84b22d087e5884dacdd8696ff34b726040527f48803a6ed19bfc202f898a085136dd3ee4a918fdb3835663bdd96a50975e1745606052602060006080600060006001620142c7f26014556000516015557fd5042e3ec2ca8fde8b18909f94d7348e8b438a7263d2feeb2c422cb60f83bad86000527f55584a92ed548e75f6dcd3b25f48c5703fb8f0a85d772d8f587599b93f87fad46020527ffb1ced138fd8af5f88a6dcb089edafd1d2908513ef25ee480fdeadb2e83695146040527fa453d375eba08e416c4b97217f65e0b9307d4f5d3eaa7da79fdabe8e0f49bda6606052602060006080600060016001611401f26016556000516017557f82f33cf000118e725f5eed0187c8b6095a051ddbac8ded15de0d3c8928a808636000527fb8bc86053e103bb2549c3ff06a84d902e514c7e1ba1393502217d68a4aadb31b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f08011bce289447868d688b9973ae2bbe9d8ad6c143ecfdc6b9b70fe282a496b860605260206000608060006001600161e1eff16018556000516019557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fbe6d8c84796ce695fa00e4d0b0ac7132b50632ad157af5b1adc7c6702e9599d06040527f35381b299c20c4ba894596a0db9caddf538a0074684b690560e95be04a190d5e606052602060006080600060016001614ffdf1601a55600051601b556000600052600060205260006040526000606052602060006080600060016155c8f4601c55600051601d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fb0b5271225f035633edd33399f0913cbbef801313afb172c5fcd0590a94cf7b16040527f7e21e99a654ff21645693c71c11b776d4a9b61b7d9f15e5d97566f3eee5e60d3606052602060006080600060016001616deff2601e55600051601f557fb0e50afc95032ef3f21c5a95297c0d938886cb86da733009ef3d5e07193b7e1b6000527f4b48a05eb03d69aceb85b68608beebbd4bc578adf27f3b74091f5fc5df9df01b60205260006040527f2f9b55f0a732315697939e9d44523bf9b0c939ebc9a0e21edd2739a5923d0bcd60605260206000608060006001620182effa6020556000516021557fc39046a1193d18e62e84969d1a188a1c607d8ebfcef95072b96c7949676dd76f6000527f81726196fb4b59c1ba65eaefd21a431f9a3558de6d72087a82ed3563f0fc411c6020527f8f2ba33d42cb6bce63318886374c1fa956f1057cd6d529e2265874d75c5f35356040527fffffa2299df57260c1cbf85ea7379f90a3d546b6a4ad568d4935acd69a34db3c60605260206000608060006001600161af20f16022556000516023557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527ffe374920b47cf11a7b5da58393d25c34e5fe6e82b0d51d4a6e5c21b034e56ca86040527f17095694c8d8c9c8d28ac82b2f9df8f6618bacfc76c11d46b4d0c9e430f331ae606052602060006080600060006001620162acf26024556000516025557f15f24e505d16ac34cff2135dff87c71c10e11b65a33116164024b27cf27d1d006000527f536998cc03c326a9be90624f39787d5a14f9d5ebb2fd3b64823dd60f217fab1b6020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040527f28dd42754fe747224d3095cd4d4a4107df952a05789098d2eca919073b149b9d60605260206000608060006001616d36fa6026556000516027557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fd293fff8f5adb1cde1fc86abd0c24f5649eca393b7808fa635e4c0732457dd346040527f2fcb00f81dad8b140cc9cd948c7d3065911f8b07b23fdcfd558a7bfcb435cde860605260206000608060006001619593fa6028556000516029556000600052600060205260006040526000606052602060006080600060016123d8fa602a55600051602b557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601b6020527fbe7c2cdd179b62736e7d27dc41b00d66b0676aaf1416229f58f93c229be4d6d96040527f45419dc3d82bf0241483c47de0c38aea663dfb4e2fd3dd5db35155e4c582fd5f60605260206000608060006001600161897bf1602c55600051602d557fea83cdcdd06bf61e414054115a551e23133711d0507dcbc07a4bab7dc4581935600052601c6020527fbd5cd8a674673281e0ba3b891773dd48b80608999a9e6d2957f489e195854d4e6040527f1d3cb422a300a1292e963d0c85300794e42c3f57378ec436be9c331c88d600016060526020600060806000600161a560f4602e55600051602f557fdecd52e420acf17cc0d451565b7c67671329e510c8c62ad03a95cc7351c043cb6000527f8f9991901996d733ef224cedc1826d06918df3f6ed4588cb2736e2e0f50d891c6020527f3e03b0ff538af2ccc877e59141b53a07bf3942b8078713a07900276f3cd33f9f6040527fffff38e35ae5b3c57a64627f66b4e44d6f0e38a593eee27710ae85a61ab95310606052602060006080600060016192a2f4603055600051603155", "nonce": "0x0", "storage": {} }, "0xE2f4CF89C9B94178B5725B8b1fd9a7F40c4a674C": { "balance": "0x0", "code": "0x671fffffffffffffff6b10000000000000000000000090187ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f7effffff800000000000000000000000000200004400000000000000000000019014901c6000557d76767676767600000000007600000000000000560000000000000000000060006380000001097ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb0681000000000000000009006901767d02126262626262667b368d219438b7f3f187702ffffffffffffffffffffffffffffffffff000000030000638000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b009008600155901c7702ffffffffffffffffffffffffffffffffff2000000000007f77676767676760000000000000001002e000000000000040000000e000000000900a901590191871767676767676767676000000767676767676690100000000000000000060070890187ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007ff6376770abd3a36b20394c5664afef1194c801c3f05e42566f085ed24d002bb09011196002557e4b00000b41000b0b0b2b0b0b0b0b0b410a0aeff4f40b090b2b0bc60a0a100067ffffffffffffffff020b6780000000000000006fdac7fff9ffd9e1322626262626262600901a712000110000000d0a300e750a000000090a0a7f8000000000000000000000000000000000000000000000000000000000000002691000000000000000000009076003556b1000000000000000000000007bc9700000000000000000023f00c00014ff002c000000000000223108901190047cc9700000000000000000023f00c00014ff0000000000000000223008057feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9012901590046d01000000000000000000000000007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90179004681000000000000000006f80000000000000010000000000000000177d767676767676000000000076000000000000005600000000000000000000760fffc000000000000767676240000000000002b05760477ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9009901960045504762900760076761e000200767600000000767676760000007702ffffffffffffffffffffffffffffffffff2000000000009010901c156005556c1000000000000000000000000076fffff716b61616160b0b0b2b0b230b000008010d0a2b0003778200000000000000fe000004000000ffff000000fffff7006fdac7fff9ffd9e132262626262626260013027f40000000fd000000db0000000000000000000000000000000000000000000001637fffffff90106006556fdac7fff9ffd9e13226262626262626006847839214543589705216900260075577800000000000000080000000000000008000000000000000681000000000000000000a7ee8e8e8e2000100000009ea02000000000000ff3ffffff800000010002280ff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee016008557806400aff20ff00200004e7fd1eff08ffca0afd1eff08ffca0a677fffffffffffffff1390106f800000000000000100000000000000006001121c7ffffff716b61616160b0b0b2b0b0b0becf4bef50a0df4f48b090b2b0bc60a0a007bc9700000000000000000023f00c00014ff002c000000000000223108901860095560006000f3", "nonce": "0x0", "storage": { "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000000000000000000000000000000000000000000009", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x0000000000000000000000000000000000000000000000000000000000000011", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000000008" } }, "0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B": { "balance": "0xffffffffff", "code": "0x", "nonce": "0x0", "privateKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "storage": {} }, "0xe1fAE9b4fAB2F5726677ECfA912d96b0B683e6a9": { "balance": "0x0", "code": "0x", "nonce": "0x0", "storage": {} }, "0xe583e10A46B183759EBdA6b6C9F4c5c8Bac3f93B": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0xd04de6bff05c8224a456b8903e1eccc90b0536886d56e39545afdebcfd03bed3", "storage": {} }, "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89": { "balance": "0x989680", "code": "0x6000496000556001496001556003496002554a6003556002600455", "nonce": "0x0", "storage": {} }, "0xf7c6909762e861F8c904c21cf3Da0D2f4307978D": { "balance": "0x8ac7230489e80000", "code": "0x", "nonce": "0x0", "privateKey": "0x7b323b16770a849a484590f9b4bba2c1f64d350b326633d6d120bfca55a11efd", "storage": {} }, "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c": { "balance": "0x989680", "code": "0x60216000526103f260205260216040527f3623fd54cd06b75de7239ccf1b2449a0c9fd70c16f144a6bd2c9b0ac1fbfa8426060527f5d682940046b0afaf1eb7c6108fc0c970b258534d91d98209d333897b4b59b846080527f4c11a995c208cf5b0d4a29d98e5febda07077f48c48e29111a22442dee68cb9460a0527f950bef146802e0392142abe6ee810af996bea2fb476355f7593642d094ac676260c0527fd0b37c652e6f974b1a3c20664bb531a1e90a07d2d2c72b6115b9688f2002657660e0527ff631350425b8e604137eab399d6197e946a94e944bd07cb999e55efb5e744c94610100527f316b2d67bc1e378311ca594b35b3db4bf9b62cc5c83067a5147007124415f517610120527f1653e592c605857d24772e234ab2688aae83ac8deacdcaa5106fb4af091c8f81610140527f21ea6e72b65e0a16201deb8766050c2bc0612d7777f7b38b865ca773fb5b564c610160527fb69766036db609f36cf7a7c24a8b29254a6f2087ee0d7cccae89c0a3960f3294610180527f3d6a4d27eb848d841c593cac2bfd6f193e1aa156f89786510162d5f9662d49856101a0527f40c0d5118ea194423736359189066377b8195b4659fc3beada17066ba04132a76101c0527f8fc99a206ed6cdac47c088c9b71f4c8ffedb694103f96dddccc1457b7a71318e6101e0527f5649a7fa1ddb7d657a9102f7f5a1a0bd31d21a9388ab01bcf3ff7a0dafc7caeb610200527ffe8d1945e75ffc64e7e1a0e28e6ddab729070484ab13e7b4588eee69fd20980d610220527f06b489907a05480d4bd15c2e811243b0e69483a1759b21dfd02119359c61be16610240527f2476c6aa2b8e075e8c5e60c22223ab7610f7961b88f6f94a35f48ac59c0ccab6610260527fdba179d99abb3d9cb827d031e122f1b6ae6ff0761ce5e62ff2f6b439d7d5c721610280527f3f1ea572872467aac1cea6022193187d39de665fa8eba806cc43f0ab92e5b0816102a0527fb40663f10434fc54da8900ecc24c1ce52254d229603ff06a0a91a393f58c04416102c0527f38cbdf77b1cb1fff9022d5f3ffd04f1ce41442ec8c0086b94aaf2700525f60816102e0527f6beb95bbee2d635427cb55c90edf55323fda330b1709eaf414b391187e096830610300527fe07054ce1cc262cf540e7672266cc70e616c9fcb2b770daa52ee17329a1b3f19610320527fe6c7acff91edb2d66c98f2290c641b4c230f59db3f978964af0549ae58d3a1f4610340527f8537d71840b84339ef799929127470bbe566945ba3600b765fdcc2dd1c1f470e610360527f4dfa8d7e7650e02b28eb62be4eb0c79a718b70e84bf63a10bcb050a0b0db2469610380527f7858ec131355134d102649bfe55ca13bf7812924d28d5851f5c4b1d4ed3c28066103a0527f4668d069b63983dc376dd9940250c84fe5fad561f60c3cccac2ac3d5e79df7666103c0527f4d8520a4c52e2fa81849f4eba861282e70f6fc67ef38d5727bead9bb96432bb26103e0527fa4e584909b998e4926f86f26c61e7dbb2ff97e0ff20fb9cc15afeab67b8ce5ca610400527f616b8111dcb7a9e369eb0fc06366dac06ddc34eb75efe6e8a758d2a46d1deaa1610420527f0dc20600f514db6ef4b5da00e489e2bf64386e4d91b5cdcd3151f98b83ee6ced610440527f2ab02ae3d7f233d2a21d6188b372fad4957220a3c1357422d3902689fb536eef6104605260446104805360c86104815360c96104825360966104835360f36104845360c061048553605661048653604b6104875360836104885360256104895360c861048a5360bf61048b53602561048c53609461048d53602961048e53608d61048f536083610490536078610491536049610492536096610493536021600061049460006005620fe4adf45a01600055600051600155602051600255", "nonce": "0x0", "storage": {} } }, "chainId": 1, "env": { "currentBaseFee": "0xa", "currentBlobGasUsed": "0x40000", "currentCoinbase": "0xc014Ba5e00000000000000000000000000000000", "currentDifficulty": "0x20000", "currentExcessBlobGas": "0x40000", "currentGasLimit": "0x11e1a300", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "fork": "Osaka", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "transactions": [ { "data": "0x8e", "from": "0x78011f4E10a54C02296EfeB11034d561320e8949", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0xBa0E31A0E75AC9a4cac4c57d6c7EF2a10e87D4e6", "value": "0x4a" }, { "data": "0x", "from": "0x94b690A97d429F297d32b8fED10213e759861599", "gas": "0xf42400", "gasPrice": "0x20", "nonce": 0, "to": "0x538A8474EeaB43d5a960164c554A20400151D479", "value": "0x74402e" }, { "data": "0x5fba026aad22ba6d36391ae06cc12b8887c2f8b66741f5c57853e6480826ad6b4fe3bb038561", "from": "0xf7c6909762e861F8c904c21cf3Da0D2f4307978D", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x3Bd84e661C47a73eEe4137D185E4c31c194C343f", "value": "0xa6" }, { "data": "0xb9e0c6c06b57302452e876c996345d34e9ad5434bbeacf59e90fff975f1fe072e7f6f3f33266af1aa0ea535d2741ceafaafa745d5d9653008598379dcd69594e00544ffe6c1509c8ff28dd459e1410e61827cd01dc05bef761bdda", "from": "0x82361b537D93C7A0079Dba1E4f367EaE7b5D5f2E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x9E607bB0Bae19b8bC75638fd1aB98594b36ba46d", "value": "0x1fe4" }, { "data": "0xb88caa18d4de9c90178eecb316248c992f6fc85c57a7970cb37bb1dc781aa8848e011b5a741a61f67e505ee5532d849365395fb740ed631138e9edae986483563d29", "from": "0xB9A8D444BbCDFb9a6b19f59e0024184fbe10761c", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 0, "to": "0x22986B2F9A2f5E7119F940898c35e7128A4Ce7E3", "value": "0xa8ac92" }, { "data": "0x3ef31a11b704ef279b601279a6296bf1039df853abdfc74f36a10522a7af9040a0e907e9fd14cd2e81a5d079e8a723e8aa39956f73387afaa9c1d2eee1ff14", "from": "0x78011f4E10a54C02296EfeB11034d561320e8949", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x9529cc6891Fbd5aBFABE0AE6c79D30F0CCAe848F", "value": "0x750d9e" }, { "data": "0xd4559e7fd8a8496695ae9233914fa1fba8ddb2e4eab01d79d9426299a5", "from": "0x94b690A97d429F297d32b8fED10213e759861599", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xfD6241df8Ce82b2Fb4126dD0e9FA931806Fa573c", "value": "0x0" }, { "blobVersionedHashes": [ "0x01b9a0a66963a7a2735327cbb69cec9c07c2644c444a4a75bb58ae87fe70ec6e", "0x01c0937d94e0a52b9af97df93c6f0d33392f2b3ccdb55c84808a9a29988197d6", "0x01b736808fd4fc140fa4af910c0265186faad28a8a087730a3e71e5bdacad36d", "0x013a1bef93a852ea266538894c417e60875c907875d58766051d3677585a651a", "0x01ea6e6b1e708d9dccabdfa016f94d7f5b18a2bc565b438724634bcc72643927", "0x0145f4cc59d6d83e1a5ff9d4c4171ef8854be73adbca43f41f1dfe53a1f8afb8" ], "data": "0x8c54f5", "from": "0xf7c6909762e861F8c904c21cf3Da0D2f4307978D", "gas": "0xf42400", "maxFeePerBlobGas": "0x100", "maxFeePerGas": "0x20", "maxPriorityFeePerGas": "0x1", "nonce": 1, "sidecar": { "blobs": 6, "commitments": 6, "proofs": 6 }, "to": "0xf3eAc1d1B1EC8cA737bD148b1E96168024fB3F89", "type": "0x3", "value": "0x0" }, { "data": "0x3139811779e97d51edcca9f0f79b1b2fcd5bc74a1da9a7c90ac6fc1366ade717b52e58e1b0", "from": "0x82361b537D93C7A0079Dba1E4f367EaE7b5D5f2E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0x641602bAD4A323C49629d45338d79A2bb984A3fb", "value": "0x0" }, { "data": "0x", "from": "0xB9A8D444BbCDFb9a6b19f59e0024184fbe10761c", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 1, "to": "0xD74CFe323387aE2fd070CD046173026716D8D649", "value": "0x92" }, { "data": "0x25257c9ea9a05c62de65f6f1613928d3dd9f1694b0ce543c5cf7a4cdd41a21b33053082b2312eb71122e3c5901c4ad7797bc6a98b067e7268da2de8d02d544", "from": "0x78011f4E10a54C02296EfeB11034d561320e8949", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x766C0844EBC3c4ef4ddb86260a4D3516cCa03A10", "value": "0x47" }, { "data": "0x48a095c06665b1190c6653014033badc12021c60193e8eb6e8c8822ec3a5605086f4cee4b39c17abb9b02d1046e5c9e59915bf3968b9529020a499", "from": "0x94b690A97d429F297d32b8fED10213e759861599", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x1d891f21BB2a55cD9EC7a32478f7c74d757c4876", "value": "0xf69e" }, { "data": "0xfba48342d570d662f5cc18448171f710e934b7", "from": "0xf7c6909762e861F8c904c21cf3Da0D2f4307978D", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0x7458F9b8B5ee360A32b0b0Fe648C996C68AE8190", "value": "0xc920" }, { "data": "0xec004e5112fb80f934d824af5b6ae62f5397ca8c95ab9efb09baa7a67524ba3d4c51f4d774715bd442806ef5dc3ec256c3d61f97ded829c8", "from": "0x82361b537D93C7A0079Dba1E4f367EaE7b5D5f2E", "gas": "0xf42400", "gasPrice": "0x10", "nonce": 2, "to": "0xDa78807c1C4567c23EB713E9fbB3b1508C1284ce", "value": "0x4cc67" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000011", "chainId": "0x0", "nonce": "0x0", "r": "0xc85231701b4522e30f0612a30f5232b35d33a866a963ade8ff2c5e8852871b63", "s": "0x67cc51220312f0e513ca06ee1923c144e1717f4485ba44ecfd3f5b802cfbbc34", "v": "0x1" }, { "address": "0x0000000000000000000000000000000000000011", "chainId": "0x0", "nonce": "0x0", "r": "0xd7fd315f0a21617cbad586fe26272506edb4a08088290683c37dd206e53aaa0e", "s": "0x240d9bc9570a3d1d6a5018dcec493b70620f59f01ec75873f6ecfdd31ae488", "v": "0x1" }, { "address": "0x000000000000000000000000000000000000000a", "chainId": "0x0", "nonce": "0x0", "r": "0x9f38d3bef386cc1c61793f5a3eb8642a0df6ec0c0099f6fd390b99a35ad63e5b", "s": "0x7d728242231f8632e0e89861c8053024e3bed6de2e29f47b4e034712b45f3c3d", "v": "0x0" }, { "address": "0x0000000000000000000000000000000000000005", "chainId": "0x0", "nonce": "0x0", "r": "0x2b6bbd42a3b7c53e20e688b857c21ae5ea552e203fb85d173c15bccbb5c1a0b6", "s": "0x11fbe9f4188ebc5c59c80cc65f0d555d41ec0148434d1b37fc348f41b87625bc", "v": "0x0" } ], "data": "0x190b8a4289", "from": "0x6EB54E66856fD47bd539A986B19F0Bc9B7B4dA9F", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0xe1fAE9b4fAB2F5726677ECfA912d96b0B683e6a9", "type": "0x4", "value": "0x0" }, { "data": "0x00", "from": "0x4133B3E532cC750d0a4691c8Bb0B03fba51707FC", "gas": "0x30d40", "maxFeePerGas": "0x1e", "maxPriorityFeePerGas": "0x1", "nonce": 0, "to": "0x0000000000000000000000000000000000000011", "type": "0x2", "value": "0x3e8" }, { "authorizationList": [ { "address": "0x0000000000000000000000000000000000000000", "chainId": "0x1", "nonce": "0x2", "r": "0x5dacfa13af5badbc0d7892ab80bdfb50697fdcf55eda65d933585fff39a52def", "s": "0x1dbc77f20853c92d53095f9e2e5280b3e2565a14ea4a24fb2e9706892d04f236", "v": "0x1" } ], "data": "0x190b8a4289", "from": "0xe583e10A46B183759EBdA6b6C9F4c5c8Bac3f93B", "gas": "0xf42400", "maxFeePerGas": "0x10", "maxPriorityFeePerGas": "0x10", "nonce": 0, "to": "0xe1fAE9b4fAB2F5726677ECfA912d96b0B683e6a9", "type": "0x4", "value": "0x0" } ], "version": "2.0" } ================================================ FILE: src/cli/tox_helpers.py ================================================ """ CLI commands used by tox.ini. Contains wrappers to the external commands markdownlint-cli2 and pyspelling (requires aspell) that fail silently if the command is not available. The aim is to avoid disruption to external contributors. """ import os import re import shutil import subprocess import sys from pathlib import Path import click from pyspelling import __main__ as pyspelling_main # type: ignore from rich.console import Console def write_github_summary( title: str, tox_env: str, error_message: str, fix_commands: list[str] ) -> None: """ Write a summary to GitHub Actions when a check fails. Args: title: The title of the check that failed tox_env: The tox environment name (e.g., "spellcheck") tox_env: The tox environment error_message: Description of what went wrong fix_commands: List of commands to fix the issue locally """ if not os.environ.get("GITHUB_ACTIONS"): return summary_file = os.environ.get("GITHUB_STEP_SUMMARY") if not summary_file: return with open(summary_file, "a") as f: f.write(f"## ❌ {title}\n\n") f.write(f"{error_message}\n\n") f.write("### To reproduce this check locally:\n") f.write("```bash\n") f.write(f"uvx --with=tox-uv tox -e {tox_env}\n") f.write("```\n\n") if fix_commands: f.write("### To verify and fix the issues:\n") f.write("```bash\n") for cmd in fix_commands: f.write(f"{cmd}\n") f.write("```\n") @click.command( context_settings={ "ignore_unknown_options": True, "allow_extra_args": True, } ) @click.argument("args", nargs=-1, type=click.UNPROCESSED) def markdownlint(args: tuple[str, ...]) -> None: """ Lint the markdown in ./README.md and ./docs/ using the external command markdownlint-cli2. Silently fail if markdownlint-cli2 is not installed. Allows argument forwarding to markdownlint-cli2. """ markdownlint = shutil.which("markdownlint-cli2") if not markdownlint: # Note: There's an additional step in test.yaml to run markdownlint- # cli2 in GitHub Actions click.echo("********* Install 'markdownlint-cli2' to enable markdown linting *********") sys.exit(0) args_list: list[str] = list(args) if len(args) > 0 else ["./docs/**/*.md", "./README.md"] command = ["node", markdownlint] + args_list sys.exit(subprocess.run(command).returncode) @click.command() def pyspelling() -> None: """ Spellcheck the markdown in ./README.md and ./docs/ using the pyspelling package. Silently fails if aspell is not installed (required by pyspelling). Command-line arguments are not forwarded to pyspelling. """ if not shutil.which("aspell"): click.echo("aspell not installed, skipping spellcheck.") if os.environ.get("GITHUB_ACTIONS"): write_github_summary( title="Pyspelling Check Failed", tox_env="spellcheck", error_message=( "aspell is not installed. This tool is required for spell checking " " documentation." ), fix_commands=[ "# Install aspell on Ubuntu/Debian", "sudo apt-get install aspell aspell-en", "", "# Install aspell on macOS", "brew install aspell", ], ) sys.exit(1) else: click.echo( "********* Install 'aspell' and 'aspell-en' to enable spellcheck *********" ) sys.exit(0) result = pyspelling_main.main() if result != 0: write_github_summary( title="Pyspelling Check Failed", tox_env="spellcheck", error_message="Pyspelling found spelling errors in the documentation.", fix_commands=[ "# Check the pyspelling configuration", "cat .pyspelling.yml", "", "# Review and fix spelling errors manually", "# Pyspelling doesn't have an auto-fix option", ], ) sys.exit(result) @click.command() def codespell() -> None: """ Run codespell on the codebase and provide helpful error messages. Checks spelling in .github/, src/, tests/, and docs/ directories. """ console = Console() # Define the paths to check paths_to_check = ["*.md", "*.ini", ".github/", "src/", "tests/", "docs/"] paths_str = " ".join(paths_to_check) # Run codespell result = subprocess.run( ["codespell"] + paths_to_check, capture_output=True, text=True, ) # Print the output if result.stdout: console.print(result.stdout) if result.stderr: console.print(result.stderr, style="red") # If there were spelling errors, show a helpful message if result.returncode != 0: console.print("\n[bold red]❌ Spellcheck Failed[/bold red]") console.print( "[yellow]Please review the errors above. For single-suggestion fixes, you can " "automatically apply them with:[/yellow]" ) console.print(f"[cyan]uv run codespell {paths_str} --write-changes[/cyan]\n") # Write to GitHub Actions summary write_github_summary( title="Spellcheck Failed", tox_env="spellcheck", error_message="Codespell found spelling errors in the code.", fix_commands=[ "# Ensure codespell is installed (part of docs extras)", "uv sync --all-extras", "", "# Check for spelling errors", f"uv run codespell {paths_str}", "", "# Automatically fix single-suggestion errors", f"uv run codespell {paths_str} --write-changes", ], ) sys.exit(1) sys.exit(0) sys.exit(pyspelling_main.main()) @click.command() def validate_changelog() -> None: """ Validate changelog formatting to ensure bullet points end with proper punctuation. Checks that all bullet points (including nested ones) end with either: - A period (.) for regular entries - A colon (:) for section headers that introduce lists """ changelog_path = Path("docs/CHANGELOG.md") if not changelog_path.exists(): click.echo(f"❌ Changelog file not found: {changelog_path}") sys.exit(1) try: with open(changelog_path, "r", encoding="utf-8") as f: content = f.read() except Exception as e: click.echo(f"❌ Error reading changelog: {e}.") sys.exit(1) # Find bullet points that don't end with period or colon invalid_lines = [] for line_num, line in enumerate(content.splitlines(), 1): if re.match(r"^\s*-\s+", line) and re.search(r"[^\.:]$", line.rstrip()): invalid_lines.append((line_num, line.strip())) if invalid_lines: click.echo(f"❌ Found bullet points in {changelog_path} without proper punctuation:") click.echo() for line_num, line in invalid_lines: click.echo(f"Line {line_num}: {line}") click.echo() click.echo("💡 All bullet points should end with:") click.echo(" - A period (.) for regular entries.") click.echo(" - A colon (:) for paragraphs that introduce lists.") sys.exit(1) else: click.echo("✅ All bullet points have proper punctuation!") sys.exit(0) ================================================ FILE: src/config/__init__.py ================================================ """ Initializes the config package. The config package is responsible for loading and managing application-wide environment configurations, making them accessible throughout the application. """ # This import is done to facilitate cleaner imports in the project # `from config import AppConfig` instead of `from config.app import AppConfig` from .app import AppConfig from .docs import DocsConfig from .env import EnvConfig __all__ = ["AppConfig", "DocsConfig", "EnvConfig"] ================================================ FILE: src/config/app.py ================================================ """ A module for managing application configurations. Classes: - AppConfig: Holds configurations for the application framework. """ from pathlib import Path from pydantic import BaseModel import pytest_plugins.consume.releases as releases class AppConfig(BaseModel): """A class for accessing documentation-related configurations.""" @property def version(self) -> str: """Get the current version from releases.""" spec = "stable@latest" release_url = releases.get_release_url(spec) return release_url.split("/v")[-1].split("/")[0] DEFAULT_LOGS_DIR: Path = Path(__file__).resolve().parent.parent.parent / "logs" """The default directory where log files are stored.""" ROOT_DIR: Path = Path(__file__).resolve().parents[2] """The root directory of the project.""" ================================================ FILE: src/config/check_eip_versions.py ================================================ """A module for managing configuration for the `check_eip_version` utility.""" from pydantic import BaseModel class CheckEipVersionsConfig(BaseModel): """A class for accessing configurations for `check_eip_version`.""" UNTIL_FORK: str = "Prague" """The target fork to check eip versions until.""" ================================================ FILE: src/config/docs.py ================================================ """ A module for managing documentation-related configurations. Classes: DocsConfig: Holds configurations for documentation generation. """ from pydantic import BaseModel class DocsConfig(BaseModel): """A class for accessing documentation-related configurations.""" TARGET_FORK: str = "Osaka" """The target fork for the documentation.""" GENERATE_UNTIL_FORK: str = "Osaka" """The fork until which documentation should be generated.""" DOCS_BASE_URL: str = "https://eest.ethereum.org" # Documentation URLs prefixed with `DOCS_URL__` to avoid conflicts with # other URLs DOCS_URL__WRITING_TESTS: str = f"{DOCS_BASE_URL}/main/writing_tests/" ================================================ FILE: src/config/env.py ================================================ """ A module for exposing application-wide environment variables. This module is responsible for loading, parsing, and validating the application's environment configuration from the `env.yaml` file. It uses Pydantic to ensure that the configuration adheres to expected formats and types. Functions: - create_default_config: Creates a default configuration file if it doesn't exist. Classes: - EnvConfig: Loads the configuration and exposes it as Python objects. - RemoteNode: Represents a remote node configuration with validation. - Config: Represents the overall configuration structure with validation. Usage: - Initialize an instance of EnvConfig to load the configuration. - Access configuration values via properties (e.g., EnvConfig().remote_nodes). """ from pathlib import Path from typing import Dict, List import yaml from pydantic import BaseModel, HttpUrl, ValidationError ENV_PATH = Path(__file__).resolve().parent.parent.parent / "env.yaml" class RemoteNode(BaseModel): """ Represents a configuration for a remote node. Attributes: name (str): The name of the remote node. node_url (HttpUrl): The URL for the remote node, validated as a proper URL. rpc_headers (Dict[str, str]): A dictionary of optional RPC headers, defaults to empty dict. """ name: str = "mainnet_archive" node_url: HttpUrl = HttpUrl("http://example.com") rpc_headers: Dict[str, str] = {"client-secret": ""} class Config(BaseModel): """ Represents the overall environment configuration. Attributes: remote_nodes (List[RemoteNode]): A list of remote node configurations. """ remote_nodes: List[RemoteNode] = [RemoteNode()] class EnvConfig(Config): """ Loads and validates environment configuration from `env.yaml`. This is a wrapper class for the Config model. It reads a config file from disk into a Config model and then exposes it. """ def __init__(self) -> None: """Init for the EnvConfig class.""" if not ENV_PATH.exists(): raise FileNotFoundError( f"The configuration file '{ENV_PATH}' does not exist. " "Run `uv run eest make env` to create it." ) with ENV_PATH.open("r") as file: config_data = yaml.safe_load(file) try: # Validate and parse with Pydantic super().__init__(**config_data) except ValidationError as e: raise ValueError(f"Invalid configuration: {e}") from e ================================================ FILE: src/config/templates/env.yaml.j2 ================================================ # This file contains environment-specific configurations for the application. # It is git-ignored to keep local secrets safe. # The configuration stores Ethereum RPC node details. remote_nodes: {% for node in config.remote_nodes %} - name: {{ node.name }} # Replace with your Ethereum RPC node URL node_url: {{ node.node_url }} # Optional: Headers for RPC requests rpc_headers: {% for key, value in node.rpc_headers.items() %} {{ key }}: {{ value }} {% endfor %} {% endfor %} ================================================ FILE: src/conftest.py ================================================ """Local pytest configuration used on multiple framework tests.""" import os from typing import Dict, Generator import pytest from ethereum_clis import BesuTransitionTool, ExecutionSpecsTransitionTool, TransitionTool DEFAULT_TRANSITION_TOOL_FOR_UNIT_TESTS = ExecutionSpecsTransitionTool INSTALLED_TRANSITION_TOOLS = [ transition_tool for transition_tool in TransitionTool.registered_tools if ( transition_tool.is_installed() # Currently, Besu has the same `default_binary` as Geth, so we can't # use `is_installed`. and transition_tool != BesuTransitionTool ) ] @pytest.fixture(scope="session") def installed_transition_tool_instances() -> Generator[ Dict[str, TransitionTool | Exception], None, None ]: """Return all instantiated transition tools.""" instances: Dict[str, TransitionTool | Exception] = {} for transition_tool_class in INSTALLED_TRANSITION_TOOLS: try: transition_tool_instance = transition_tool_class() transition_tool_instance.start_server() instances[transition_tool_class.__name__] = transition_tool_instance except Exception as e: # Record the exception in order to provide context when failing the # appropriate test instances[transition_tool_class.__name__] = e yield instances for instance in instances.values(): if isinstance(instance, TransitionTool): instance.shutdown() @pytest.fixture( params=INSTALLED_TRANSITION_TOOLS, ids=[transition_tool_class.__name__ for transition_tool_class in INSTALLED_TRANSITION_TOOLS], ) def installed_t8n( request: pytest.FixtureRequest, installed_transition_tool_instances: Dict[str, TransitionTool | Exception], ) -> TransitionTool: """ Return an instantiated transition tool. Tests using this fixture will be automatically parameterized with all installed transition tools. """ transition_tool_class = request.param assert issubclass(transition_tool_class, TransitionTool) assert transition_tool_class.__name__ in installed_transition_tool_instances, ( f"{transition_tool_class.__name__} not instantiated" ) instance_or_error = installed_transition_tool_instances[transition_tool_class.__name__] if isinstance(instance_or_error, Exception): raise Exception( f"Failed to instantiate {transition_tool_class.__name__}" ) from instance_or_error return instance_or_error @pytest.fixture def default_t8n( installed_transition_tool_instances: Dict[str, TransitionTool | Exception], ) -> TransitionTool: """Fixture to provide a default t8n instance.""" instance = installed_transition_tool_instances.get( DEFAULT_TRANSITION_TOOL_FOR_UNIT_TESTS.__name__ ) if instance is None: raise Exception(f"Failed to instantiate {DEFAULT_TRANSITION_TOOL_FOR_UNIT_TESTS.__name__}") if isinstance(instance, Exception): raise Exception( f"Failed to instantiate {DEFAULT_TRANSITION_TOOL_FOR_UNIT_TESTS.__name__}" ) from instance return instance @pytest.fixture(scope="session") def running_in_ci() -> bool: """Return whether the test is running in a CI environment.""" return "CI" in os.environ ================================================ FILE: src/ethereum_clis/__init__.py ================================================ """ Library of Python wrappers for the different implementations of transition tools. """ from .cli_types import ( BlockExceptionWithMessage, Result, Traces, TransactionExceptionWithMessage, TransitionToolOutput, ) from .clis.besu import BesuTransitionTool from .clis.ethereumjs import EthereumJSTransitionTool from .clis.evmone import ( EvmOneBlockchainFixtureConsumer, EvmoneExceptionMapper, EvmOneStateFixtureConsumer, EvmOneTransitionTool, ) from .clis.execution_specs import ExecutionSpecsTransitionTool from .clis.geth import GethFixtureConsumer, GethTransitionTool from .clis.nethermind import Nethtest, NethtestFixtureConsumer from .clis.nimbus import NimbusTransitionTool from .ethereum_cli import CLINotFoundInPathError, UnknownCLIError from .fixture_consumer_tool import FixtureConsumerTool from .transition_tool import TransitionTool TransitionTool.set_default_tool(ExecutionSpecsTransitionTool) FixtureConsumerTool.set_default_tool(GethFixtureConsumer) __all__ = ( "BesuTransitionTool", "BlockExceptionWithMessage", "CLINotFoundInPathError", "EthereumJSTransitionTool", "EvmoneExceptionMapper", "EvmOneTransitionTool", "EvmOneStateFixtureConsumer", "EvmOneBlockchainFixtureConsumer", "ExecutionSpecsTransitionTool", "FixtureConsumerTool", "GethFixtureConsumer", "GethTransitionTool", "Nethtest", "NethtestFixtureConsumer", "NimbusTransitionTool", "Result", "Traces", "TransactionExceptionWithMessage", "TransitionTool", "TransitionToolOutput", "UnknownCLIError", ) ================================================ FILE: src/ethereum_clis/cli_types.py ================================================ """Types used in the transition tool interactions.""" import json from pathlib import Path from typing import Annotated, Any, Dict, List, Self from pydantic import Field, PlainSerializer, PlainValidator from ethereum_test_base_types import ( Bloom, Bytes, CamelModel, EthereumTestRootModel, Hash, HexNumber, ) from ethereum_test_base_types.composite_types import ForkBlobSchedule from ethereum_test_exceptions import ( BlockException, ExceptionMapperValidator, ExceptionWithMessage, TransactionException, UndefinedException, ) from ethereum_test_types import ( Alloc, BlockAccessList, Environment, Transaction, TransactionReceipt, ) from ethereum_test_vm import Opcode, Opcodes from pytest_plugins.custom_logging import get_logger logger = get_logger(__name__) class TransactionExceptionWithMessage(ExceptionWithMessage[TransactionException]): """Transaction exception with message.""" pass class BlockExceptionWithMessage(ExceptionWithMessage[BlockException]): """Block exception with message.""" pass class RejectedTransaction(CamelModel): """Rejected transaction.""" index: HexNumber error: Annotated[ TransactionExceptionWithMessage | UndefinedException, ExceptionMapperValidator ] class TraceLine(CamelModel): """Single trace line contained in the traces output.""" pc: int op: int gas: HexNumber gas_cost: HexNumber | None = None mem_size: int stack: List[HexNumber | None] depth: int refund: int op_name: str error: str | None = None def are_equivalent(self, other: Self) -> bool: """Return True if the only difference is the gas counter.""" self_dict = self.model_dump(mode="python", exclude={"gas", "gas_cost"}) other_dict = other.model_dump(mode="python", exclude={"gas", "gas_cost"}) if self_dict != other_dict: logger.debug(f"Trace lines are not equivalent: {self_dict} != {other_dict}.") return False return True class TransactionTraces(CamelModel): """Traces of a single transaction.""" traces: List[TraceLine] output: str | None = None gas_used: HexNumber | None = None @classmethod def from_file(cls, trace_file_path: Path) -> Self: """Read a single transaction's traces from a .jsonl file.""" trace_lines = trace_file_path.read_text().splitlines() trace_dict: Dict[str, Any] = {} if "gasUsed" in trace_lines[-1] and "output" in trace_lines[-1]: trace_dict |= json.loads(trace_lines.pop()) trace_dict["traces"] = [TraceLine.model_validate_json(line) for line in trace_lines] return cls.model_validate(trace_dict) @staticmethod def remove_gas(traces: List[TraceLine]) -> None: """ Remove the GAS operation opcode result from the stack to make comparison possible even if the gas has been pushed to the stack. """ for i in range(1, len(traces)): trace = traces[i] previous_trace = traces[i - 1] if previous_trace.op_name == "GAS" and trace.depth == previous_trace.depth: # Remove the result of calling `Op.GAS` from the stack. trace.stack[-1] = None def are_equivalent(self, other: Self, enable_post_processing: bool) -> bool: """Return True if the only difference is the gas counter.""" if len(self.traces) != len(other.traces): logger.debug( f"Traces have different lengths: {len(self.traces)} != {len(other.traces)}." ) return False if self.output != other.output: logger.debug(f"Traces have different outputs: {self.output} != {other.output}.") return False if self.gas_used != other.gas_used and not enable_post_processing: logger.debug(f"Traces have different gas used: {self.gas_used} != {other.gas_used}.") return False own_traces = self.traces.copy() other_traces = other.traces.copy() if enable_post_processing: logger.debug("Removing gas from traces (enable_post_processing=True).") TransactionTraces.remove_gas(own_traces) TransactionTraces.remove_gas(other_traces) for i in range(len(self.traces)): if not own_traces[i].are_equivalent(other_traces[i]): logger.debug(f"Trace line {i} is not equivalent.") return False return True def print(self) -> None: """Print the traces in a readable format.""" for exec_step, trace in enumerate(self.traces): print(f"Step {exec_step}:") print(trace.model_dump_json(indent=2)) print() class Traces(EthereumTestRootModel): """ Traces returned from the transition tool for all transactions executed. """ root: List[TransactionTraces] def append(self, item: TransactionTraces) -> None: """Append the transaction traces to the current list.""" self.root.append(item) def are_equivalent(self, other: Self | None, enable_post_processing: bool) -> bool: """Return True if the only difference is the gas counter.""" if other is None: return False if len(self.root) != len(other.root): return False for i in range(len(self.root)): if not self.root[i].are_equivalent(other.root[i], enable_post_processing): logger.debug(f"Trace file {i} is not equivalent.") return False else: logger.debug(f"Trace file {i} is equivalent.") logger.debug("All traces are equivalent.") return True def print(self) -> None: """Print the traces in a readable format.""" for tx_number, tx in enumerate(self.root): print(f"Transaction {tx_number}:") tx.print() _opcode_synonyms = { "KECCAK256": "SHA3", } class UndefinedOpcode(HexNumber): """Undefined opcode.""" pass def validate_opcode(obj: Any) -> Opcodes | Opcode | UndefinedOpcode: """Validate an opcode from a string.""" if isinstance(obj, (Opcode, Opcodes, UndefinedOpcode)): return obj if isinstance(obj, str): if obj.startswith("0x"): return UndefinedOpcode(obj) if obj in _opcode_synonyms: obj = _opcode_synonyms[obj] for op in Opcodes: if str(op) == obj: return op raise Exception(f"Unable to validate {obj} (type={type(obj)})") class OpcodeCount(EthereumTestRootModel): """Opcode count returned from the evm tool.""" root: Dict[ Annotated[ Opcodes | UndefinedOpcode, PlainValidator(validate_opcode), PlainSerializer(lambda o: str(o)), ], int, ] def __add__(self, other: Self) -> Self: """Add two instances of opcode count dictionaries.""" assert isinstance(other, OpcodeCount), f"Incompatible type {type(other)}" new_dict = self.model_dump() | other.model_dump() for match_key in self.root.keys() & other.root.keys(): new_dict[match_key] = self.root[match_key] + other.root[match_key] return self.__class__(new_dict) class Result(CamelModel): """Result of a transition tool output.""" state_root: Hash ommers_hash: Hash | None = Field(None, validation_alias="sha3Uncles") transactions_trie: Hash = Field(..., alias="txRoot") receipts_root: Hash logs_hash: Hash logs_bloom: Bloom receipts: List[TransactionReceipt] rejected_transactions: List[RejectedTransaction] = Field( default_factory=list, alias="rejected" ) difficulty: HexNumber | None = Field(None, alias="currentDifficulty") gas_used: HexNumber base_fee_per_gas: HexNumber | None = Field(None, alias="currentBaseFee") withdrawals_root: Hash | None = None excess_blob_gas: HexNumber | None = Field(None, alias="currentExcessBlobGas") blob_gas_used: HexNumber | None = None requests_hash: Hash | None = None requests: List[Bytes] | None = None block_access_list: BlockAccessList | None = None block_access_list_hash: Hash | None = None block_exception: Annotated[ BlockExceptionWithMessage | UndefinedException | None, ExceptionMapperValidator ] = None traces: Traces | None = None opcode_count: OpcodeCount | None = None class TransitionToolInput(CamelModel): """Transition tool input.""" alloc: Alloc txs: List[Transaction] env: Environment blob_params: ForkBlobSchedule | None = None class TransitionToolOutput(CamelModel): """Transition tool output.""" alloc: Alloc result: Result body: Bytes | None = None class TransitionToolContext(CamelModel): """Transition tool context.""" fork: str chain_id: int = Field(..., alias="chainid") reward: int class TransitionToolRequest(CamelModel): """Transition tool server request data.""" state: TransitionToolContext input: TransitionToolInput ================================================ FILE: src/ethereum_clis/clis/__init__.py ================================================ """Package containing concrete implementations of Ethereum CL interfaces.""" ================================================ FILE: src/ethereum_clis/clis/besu.py ================================================ """Hyperledger Besu Transition tool frontend.""" import json import os import re import subprocess import tempfile import textwrap from pathlib import Path from typing import ClassVar, Dict, Optional import requests from ethereum_test_exceptions import ( BlockException, ExceptionBase, ExceptionMapper, TransactionException, ) from ethereum_test_forks import Fork from ..cli_types import TransitionToolOutput from ..transition_tool import TransitionTool, dump_files_to_directory, model_dump_config class BesuTransitionTool(TransitionTool): """Besu EvmTool Transition tool frontend wrapper class.""" default_binary = Path("evm") detect_binary_pattern = re.compile(r"^Besu evm .*$") binary: Path cached_version: Optional[str] = None trace: bool process: Optional[subprocess.Popen] = None server_url: str besu_trace_dir: Optional[tempfile.TemporaryDirectory] supports_xdist: ClassVar[bool] = False def __init__( self, *, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the BesuTransitionTool class.""" super().__init__(exception_mapper=BesuExceptionMapper(), binary=binary, trace=trace) args = [str(self.binary), "t8n", "--help"] try: result = subprocess.run(args, capture_output=True, text=True) except subprocess.CalledProcessError as e: raise Exception( f"evm process unexpectedly returned a non-zero status code: {e}." ) from e except Exception as e: raise Exception(f"Unexpected exception calling evm tool: {e}.") from e self.help_string = result.stdout self.besu_trace_dir = tempfile.TemporaryDirectory() if self.trace else None def start_server(self) -> None: """ Start the t8n-server process, extract the port, and leave it running for future reuse. """ args = [ str(self.binary), "t8n-server", "--port=0", # OS assigned server port ] if self.trace: args.append("--trace") if self.besu_trace_dir: args.append(f"--output.basedir={self.besu_trace_dir.name}") self.process = subprocess.Popen( args=args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, ) while True: if self.process.stdout is None: raise Exception("Failed starting Besu subprocess") line = str(self.process.stdout.readline()) if not line or "Failed to start transition server" in line: raise Exception("Failed starting Besu subprocess\n" + line) if "Transition server listening on" in line: match = re.search("Transition server listening on (\\d+)", line) if match: port = match.group(1) self.server_url = f"http://localhost:{port}/" break def shutdown(self) -> None: """Stop the t8n-server process if it was started.""" if self.process: self.process.kill() if self.besu_trace_dir: self.besu_trace_dir.cleanup() def evaluate( self, *, transition_tool_data: TransitionTool.TransitionToolData, debug_output_path: str = "", slow_request: bool = False, ) -> TransitionToolOutput: """Execute `evm t8n` with the specified arguments.""" del slow_request if not self.process: self.start_server() input_json = transition_tool_data.to_input().model_dump(mode="json", **model_dump_config) state_json = { "fork": transition_tool_data.fork_name, "chainid": transition_tool_data.chain_id, "reward": transition_tool_data.reward, } post_data = {"state": state_json, "input": input_json} if debug_output_path: post_data_string = json.dumps(post_data, indent=4) additional_indent = " " * 16 # for pretty indentation in t8n.sh indented_post_data_string = "{\n" + "\n".join( additional_indent + line for line in post_data_string[1:].splitlines() ) t8n_script = textwrap.dedent( f"""\ #!/bin/bash # Use $1 as t8n-server port if provided, else default to 3000 PORT=${{1:-3000}} curl http://localhost:${{PORT}}/ -X POST -H "Content-Type: application/json" \\ --data '{indented_post_data_string}' """ ) dump_files_to_directory( debug_output_path, { "state.json": state_json, "input/alloc.json": input_json["alloc"], "input/env.json": input_json["env"], "input/txs.json": input_json["txs"], "t8n.sh+x": t8n_script, }, ) response = requests.post(self.server_url, json=post_data, timeout=5) response.raise_for_status() # exception visible in pytest failure output output: TransitionToolOutput = TransitionToolOutput.model_validate( response.json(), context={"exception_mapper": self.exception_mapper} ) if debug_output_path: dump_files_to_directory( debug_output_path, { "response.txt": response.text, "status_code.txt": response.status_code, "time_elapsed_seconds.txt": response.elapsed.total_seconds(), }, ) if response.status_code != 200: raise Exception( f"t8n-server returned status code {response.status_code}, " f"response: {response.text}" ) if debug_output_path: dump_files_to_directory( debug_output_path, { "output/alloc.json": output.alloc.model_dump(mode="json", **model_dump_config), "output/result.json": output.result.model_dump( mode="json", **model_dump_config ), "output/txs.rlp": str(output.body), }, ) if self.trace and self.besu_trace_dir: self.collect_traces(output.result.receipts, self.besu_trace_dir, debug_output_path) for i, r in enumerate(output.result.receipts): trace_file_name = f"trace-{i}-{r.transaction_hash}.jsonl" os.remove(os.path.join(self.besu_trace_dir.name, trace_file_name)) return output def is_fork_supported(self, fork: Fork) -> bool: """Return True if the fork is supported by the tool.""" return fork.transition_tool_name() in self.help_string class BesuExceptionMapper(ExceptionMapper): """Translate between EEST exceptions and error strings returned by Besu.""" mapping_substring: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.NONCE_IS_MAX: "invalid Nonce must be less than", TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "transaction invalid tx max fee per blob gas less than block blob gas fee" ), TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW: ( "invalid Upfront gas cost cannot exceed 2^256 Wei" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: ( "transaction invalid gasPrice is less than the current BaseFee" ), TransactionException.GAS_ALLOWANCE_EXCEEDED: "provided gas insufficient", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "transaction invalid max priority fee per gas cannot be greater than max fee per gas" ), TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: "Invalid versionedHash", TransactionException.TYPE_3_TX_CONTRACT_CREATION: ( "transaction invalid transaction blob transactions must have a to address" ), TransactionException.TYPE_3_TX_WITH_FULL_BLOBS: ( "Failed to decode transactions from block parameter" ), TransactionException.TYPE_3_TX_ZERO_BLOBS: ( "Failed to decode transactions from block parameter" ), TransactionException.TYPE_3_TX_PRE_FORK: ( "Transaction type BLOB is invalid, accepted transaction types are" ), TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: ( "transaction invalid transaction code delegation transactions must have a " "non-empty code delegation list" ), TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( "transaction invalid transaction code delegation transactions must have a to address" ), TransactionException.TYPE_4_TX_PRE_FORK: ( "transaction invalid Transaction type DELEGATE_CODE is invalid" ), BlockException.RLP_STRUCTURES_ENCODING: ( "Failed to decode transactions from block parameter" ), BlockException.INCORRECT_EXCESS_BLOB_GAS: ( "Payload excessBlobGas does not match calculated excessBlobGas" ), BlockException.BLOB_GAS_USED_ABOVE_LIMIT: ( "Payload BlobGasUsed does not match calculated BlobGasUsed" ), BlockException.INCORRECT_BLOB_GAS_USED: ( "Payload BlobGasUsed does not match calculated BlobGasUsed" ), BlockException.INVALID_GAS_USED_ABOVE_LIMIT: "Header validation failed (FULL)", } mapping_regex = { BlockException.INVALID_REQUESTS: ( r"Invalid execution requests|Requests hash mismatch, calculated: 0x[0-9a-f]+ header: " r"0x[0-9a-f]+" ), BlockException.INVALID_BLOCK_HASH: ( r"Computed block hash 0x[0-9a-f]+ does not match block hash parameter 0x[0-9a-f]+" ), BlockException.SYSTEM_CONTRACT_CALL_FAILED: ( r"System call halted|System call did not execute to completion" ), BlockException.SYSTEM_CONTRACT_EMPTY: ( r"(Invalid system call, no code at address)|" r"(Invalid system call address:)" ), BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: ( r"Invalid (amount|index|pubKey|signature|withdrawalCred) (offset|size): " r"expected (\d+), but got (-?\d+)|" r"Invalid deposit log length\. Must be \d+ bytes, but is \d+ bytes" ), BlockException.RLP_BLOCK_LIMIT_EXCEEDED: ( r"Block size of \d+ bytes exceeds limit of \d+ bytes" ), TransactionException.INITCODE_SIZE_EXCEEDED: ( r"transaction invalid Initcode size of \d+ exceeds maximum size of \d+" ), TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( r"transaction invalid transaction up-front cost 0x[0-9a-f]+ exceeds transaction " r"sender account balance 0x[0-9a-f]+" ), TransactionException.INTRINSIC_GAS_TOO_LOW: ( r"transaction invalid intrinsic gas cost \d+ exceeds gas limit \d+" ), TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: ( r"transaction invalid intrinsic gas cost \d+ exceeds gas limit \d+" ), TransactionException.SENDER_NOT_EOA: ( r"transaction invalid Sender 0x[0-9a-f]+ has deployed code and so is not authorized " r"to send transactions" ), TransactionException.NONCE_MISMATCH_TOO_LOW: ( r"transaction invalid transaction nonce \d+ below sender account nonce \d+" ), TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: ( r"transaction invalid Transaction gas limit must be at most \d+" ), TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( r"Blob transaction 0x[0-9a-f]+ exceeds block blob gas limit: \d+ > \d+" ), TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: ( r"Blob transaction has too many blobs: \d+|Invalid Blob Count: \d+" ), } ================================================ FILE: src/ethereum_clis/clis/erigon.py ================================================ """Erigon execution client transition tool.""" from ethereum_test_exceptions import BlockException, ExceptionMapper, TransactionException class ErigonExceptionMapper(ExceptionMapper): """Erigon exception mapper.""" mapping_substring = { TransactionException.SENDER_NOT_EOA: "sender not an eoa", TransactionException.INITCODE_SIZE_EXCEEDED: "max initcode size exceeded", TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( "insufficient funds for gas * price + value" ), TransactionException.NONCE_IS_MAX: "nonce has max value", TransactionException.INTRINSIC_GAS_TOO_LOW: "intrinsic gas too low", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: "intrinsic gas too low", TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: "fee cap less than block base fee", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: "tip higher than fee cap", TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: "max fee per blob gas too low", TransactionException.NONCE_MISMATCH_TOO_LOW: "nonce too low", TransactionException.GAS_ALLOWANCE_EXCEEDED: "gas limit reached", TransactionException.TYPE_3_TX_PRE_FORK: "blob txn is not supported by signer", TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: ( "invalid blob versioned hash, must start with VERSIONED_HASH_VERSION_KZG" ), TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: "blob transaction has too many blobs", TransactionException.TYPE_3_TX_ZERO_BLOBS: "a blob stx must contain at least one blob", TransactionException.TYPE_3_TX_WITH_FULL_BLOBS: "rlp: expected String or Byte", TransactionException.TYPE_3_TX_CONTRACT_CREATION: "wrong size for To: 0", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( "blobs/blobgas exceeds max" ), TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: ( "SetCodeTransaction without authorizations is invalid" ), TransactionException.TYPE_4_TX_CONTRACT_CREATION: "wrong size for To: 0", TransactionException.TYPE_4_TX_PRE_FORK: "setCode tx is not supported by signer", BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: "could not parse requests logs", BlockException.SYSTEM_CONTRACT_EMPTY: "Syscall failure: Empty Code at", BlockException.SYSTEM_CONTRACT_CALL_FAILED: "Unprecedented Syscall failure", BlockException.INVALID_REQUESTS: "invalid requests root hash in header", BlockException.INVALID_BLOCK_HASH: "invalid block hash", BlockException.RLP_BLOCK_LIMIT_EXCEEDED: "block exceeds max rlp size", } mapping_regex = { TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: ( r"invalid block, txnIdx=\d+,.*gas limit too high" ), BlockException.INCORRECT_BLOB_GAS_USED: r"blobGasUsed by execution: \d+, in header: \d+", BlockException.INCORRECT_EXCESS_BLOB_GAS: r"invalid excessBlobGas: have \d+, want \d+", BlockException.INVALID_GAS_USED: r"gas used by execution: \w+, in header: \w+", BlockException.INVALID_GAS_USED_ABOVE_LIMIT: r"invalid gasUsed: have \d+, gasLimit \d+", } ================================================ FILE: src/ethereum_clis/clis/ethereumjs.py ================================================ """EthereumJS Transition tool interface.""" import re from pathlib import Path from typing import ClassVar, Dict, Optional from ethereum_test_exceptions import ( BlockException, ExceptionBase, ExceptionMapper, TransactionException, ) from ethereum_test_forks import Fork from ..transition_tool import TransitionTool class EthereumJSTransitionTool(TransitionTool): """EthereumJS Transition tool interface wrapper class.""" default_binary = Path("ethereumjs-t8ntool.sh") detect_binary_pattern = re.compile(r"^ethereumjs t8n\b") version_flag: str = "--version" t8n_use_stream = False binary: Path cached_version: Optional[str] = None trace: bool def __init__( self, *, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the EthereumJS Transition tool interface.""" super().__init__(exception_mapper=EthereumJSExceptionMapper(), binary=binary, trace=trace) def is_fork_supported(self, fork: Fork) -> bool: """ Return True if the fork is supported by the tool. Currently, EthereumJS-t8n provides no way to determine supported forks. """ del fork return True class EthereumJSExceptionMapper(ExceptionMapper): """ Translate between EEST exceptions and error strings returned by EthereumJS. """ mapping_substring: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( "would exceed maximum allowance" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "Invalid 4844 transactions: undefined" ), TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW: ( "gas limit * gasPrice cannot exceed MAX_INTEGER" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: "tx unable to pay base fee", TransactionException.NONCE_IS_MAX: "nonce cannot equal or exceed", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "maxFeePerGas cannot be less than maxPriorityFeePerGas" ), TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: ( "versioned hash does not start with KZG commitment version" ), # This message is the same as TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: "exceed maximum allowance", TransactionException.TYPE_3_TX_ZERO_BLOBS: "tx should contain at least one blob", TransactionException.TYPE_3_TX_WITH_FULL_BLOBS: "Invalid EIP-4844 transaction", TransactionException.TYPE_3_TX_CONTRACT_CREATION: ( 'tx should have a "to" field and cannot be used to create contracts' ), TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: ( "Invalid EIP-7702 transaction: authorization list is empty" ), TransactionException.INTRINSIC_GAS_TOO_LOW: "is lower than the minimum gas limit of", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: ( "is lower than the minimum gas limit of" ), TransactionException.INITCODE_SIZE_EXCEEDED: ( "the initcode size of this transaction is too large" ), TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( 'tx should have a "to" field and cannot be used to create contracts' ), TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( "sender doesn't have enough funds to send tx" ), TransactionException.NONCE_MISMATCH_TOO_LOW: "the tx doesn't have the correct nonce", TransactionException.GAS_ALLOWANCE_EXCEEDED: "tx has a higher gas limit than the block", BlockException.INCORRECT_EXCESS_BLOB_GAS: "Invalid 4844 transactions", BlockException.INVALID_RECEIPTS_ROOT: "invalid receipttrie", BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: ( "Error verifying block while running: error: number exceeds 53 bits" ), } mapping_regex: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( r"tx causes total blob gas of \d+ to exceed maximum blob gas per block of \d+|" r"tx can contain at most \d+ blobs" ), TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: ( r"tx causes total blob gas of \d+ to exceed maximum blob gas per block of \d+|" r"tx can contain at most \d+ blobs" ), TransactionException.TYPE_3_TX_PRE_FORK: ( r"blob tx used but field env.ExcessBlobGas missing|EIP-4844 not enabled on Common" ), BlockException.BLOB_GAS_USED_ABOVE_LIMIT: r"invalid blobGasUsed expected=\d+ actual=\d+", BlockException.INCORRECT_BLOB_GAS_USED: r"invalid blobGasUsed expected=\d+ actual=\d+", BlockException.INVALID_BLOCK_HASH: ( r"Invalid blockHash, expected: 0x[0-9a-f]+, received: 0x[0-9a-f]+" ), BlockException.INVALID_REQUESTS: r"Unknown request identifier|invalid requestshash", BlockException.INVALID_GAS_USED_ABOVE_LIMIT: ( r"Invalid block: too much gas used. Used: \d+, gas limit: \d+" ), } ================================================ FILE: src/ethereum_clis/clis/ethrex.py ================================================ """Ethrex execution client transition tool.""" from ethereum_test_exceptions import BlockException, ExceptionMapper, TransactionException class EthrexExceptionMapper(ExceptionMapper): """Ethrex exception mapper.""" mapping_substring = { TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( "Exceeded MAX_BLOB_GAS_PER_BLOCK" ), BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: ("Invalid deposit request layout"), BlockException.INVALID_REQUESTS: ( "Requests hash does not match the one in the header after executing" ), BlockException.INVALID_RECEIPTS_ROOT: ( "Receipts Root does not match the one in the header after executing" ), BlockException.INVALID_STATE_ROOT: ( "World State Root does not match the one in the header after executing" ), BlockException.INVALID_GAS_USED: "Gas used doesn't match value in header", BlockException.INCORRECT_BLOB_GAS_USED: "Blob gas used doesn't match value in header", } mapping_regex = { TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( r"(?i)priority fee.* is greater than max fee.*" ), TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: r"(?i)empty authorization list", TransactionException.SENDER_NOT_EOA: ( r"reject transactions from senders with deployed code|" r"Sender account .* shouldn't be a contract" ), TransactionException.NONCE_MISMATCH_TOO_LOW: r"nonce \d+ too low, expected \d+|" r"Nonce mismatch.*", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( r"blob gas used \d+ exceeds maximum allowance \d+" ), TransactionException.TYPE_3_TX_ZERO_BLOBS: ( r"blob transactions present in pre-cancun payload|empty blobs|" r"Type 3 transaction without blobs" ), TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: ( r"blob version not supported|Invalid blob versioned hash" ), TransactionException.TYPE_3_TX_PRE_FORK: ( r"blob versioned hashes not supported|" r"Type 3 transactions are not supported before the Cancun fork" ), # A type 4 Transaction without a recipient won't even reach the EVM, we # can't decode it. TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( r"unexpected length|Contract creation in type 4 transaction|" r"Error decoding field 'to' of type primitive_types::H160: InvalidLength" ), TransactionException.TYPE_3_TX_CONTRACT_CREATION: ( r"unexpected length|Contract creation in type 3 transaction|" r"Error decoding field 'to' of type primitive_types::H160: InvalidLength" ), TransactionException.TYPE_4_TX_PRE_FORK: ( r"eip 7702 transactions present in pre-prague payload|" r"Type 4 transactions are not supported before the Prague fork" ), TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( r"lack of funds \(\d+\) for max fee \(\d+\)|Insufficient account funds" ), TransactionException.INTRINSIC_GAS_TOO_LOW: ( r"gas floor exceeds the gas limit|call gas cost exceeds the gas limit|" r"Transaction gas limit lower than the minimum gas cost to execute the transaction" ), TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: ( r"Transaction gas limit lower than the gas cost floor for calldata tokens" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: ( r"gas price is less than basefee|Insufficient max fee per gas" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( r"blob gas price is greater than max fee per blob gas|" r"Insufficient max fee per blob gas.*" ), TransactionException.INITCODE_SIZE_EXCEEDED: ( r"create initcode size limit|Initcode size exceeded.*" ), TransactionException.NONCE_IS_MAX: (r"Nonce is max"), TransactionException.GAS_ALLOWANCE_EXCEEDED: (r"Gas allowance exceeded.*"), TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: (r"Blob count exceeded.*"), BlockException.SYSTEM_CONTRACT_CALL_FAILED: (r"System call failed.*"), BlockException.SYSTEM_CONTRACT_EMPTY: (r"System contract:.* has no code after deployment"), BlockException.INCORRECT_BLOB_GAS_USED: (r"Blob gas used doesn't match value in header"), BlockException.RLP_STRUCTURES_ENCODING: (r"Error decoding field '\D+' of type \w+.*"), BlockException.INCORRECT_EXCESS_BLOB_GAS: (r".* Excess blob gas is incorrect"), BlockException.INVALID_BLOCK_HASH: (r"Invalid block hash. Expected \w+, got \w+"), } ================================================ FILE: src/ethereum_clis/clis/evmone.py ================================================ """Evmone Transition tool interface.""" import json import re import shlex import shutil import subprocess import tempfile import textwrap from functools import cache from pathlib import Path from typing import Any, ClassVar, Dict, List, Optional import pytest from ethereum_clis.file_utils import dump_files_to_directory from ethereum_clis.fixture_consumer_tool import FixtureConsumerTool from ethereum_test_exceptions import ( EOFException, ExceptionBase, ExceptionMapper, TransactionException, ) from ethereum_test_fixtures.base import FixtureFormat from ethereum_test_fixtures.blockchain import BlockchainFixture from ethereum_test_fixtures.state import StateFixture from ethereum_test_forks import Fork from ..transition_tool import TransitionTool class EvmOneTransitionTool(TransitionTool): """Evmone `evmone-t8n` Transition tool interface wrapper class.""" default_binary = Path("evmone-t8n") detect_binary_pattern = re.compile(r"^evmone-t8n\b") t8n_use_stream = False binary: Path cached_version: Optional[str] = None trace: bool supports_opcode_count: ClassVar[bool] = True supports_blob_params: ClassVar[bool] = True def __init__( self, *, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the Evmone Transition tool interface.""" super().__init__(exception_mapper=EvmoneExceptionMapper(), binary=binary, trace=trace) def is_fork_supported(self, fork: Fork) -> bool: """ Return True if the fork is supported by the tool. Currently, evmone-t8n provides no way to determine supported forks. """ del fork return True class EvmoneFixtureConsumerCommon: """Common functionality for Evmone fixture consumers.""" binary: Path version_flag: str = "--version" cached_version: Optional[str] = None def __init__( self, trace: bool = False, ): """Initialize the EvmoneFixtureConsumerCommon class.""" del trace self._info_metadata: Optional[Dict[str, Any]] = {} def _run_command(self, command: List[str]) -> subprocess.CompletedProcess: try: return subprocess.run( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) except subprocess.CalledProcessError as e: raise Exception("Command failed with non-zero status.") from e except Exception as e: raise Exception("Unexpected exception calling evm tool.") from e # TODO: copied from geth.py, needs to be deduplicated, but nethermind.py # also has its version def _consume_debug_dump( self, command: List[str], result: subprocess.CompletedProcess, fixture_path: Path, debug_output_path: Path, ) -> None: # our assumption is that each command element is a string assert all(isinstance(x, str) for x in command), ( f"Not all elements of 'command' list are strings: {command}" ) assert len(command) > 0 # replace last value with debug fixture path debug_fixture_path = str(debug_output_path / "fixtures.json") command[-1] = debug_fixture_path # ensure that flags with spaces are wrapped in double-quotes consume_direct_call = " ".join(shlex.quote(arg) for arg in command) consume_direct_script = textwrap.dedent( f"""\ #!/bin/bash {consume_direct_call} """ ) dump_files_to_directory( str(debug_output_path), { "consume_direct_args.py": command, "consume_direct_returncode.txt": result.returncode, "consume_direct_stdout.txt": result.stdout, "consume_direct_stderr.txt": result.stderr, "consume_direct.sh+x": consume_direct_script, }, ) shutil.copyfile(fixture_path, debug_fixture_path) def _skip_message(self, fixture_format: FixtureFormat) -> str: return f"Fixture format {fixture_format.format_name} not supported by {self.binary}" @cache # noqa def consume_test_file( self, fixture_path: Path, debug_output_path: Optional[Path] = None, ) -> Dict[str, Any]: """ Consume an entire state or blockchain test file. The `evmone-...test` will always execute all the tests contained in a file without the possibility of selecting a single test, so this function is cached in order to only call the command once and `consume_test` can simply select the result that was requested. """ global_options: List[str] = [] if debug_output_path: global_options += ["--trace"] with tempfile.NamedTemporaryFile() as tempfile_json: # `evmone` uses `gtest` and generates JSON output to a file, # c.f. https://google.github.io/googletest/advanced.html#generating-a-json-report # see there for the JSON schema. global_options += ["--gtest_output=json:{}".format(tempfile_json.name)] command = [str(self.binary)] + global_options + [str(fixture_path)] result = self._run_command(command) if result.returncode not in [0, 1]: raise Exception( f"Unexpected exit code:\n{' '.join(command)}\n\n Error:\n{result.stderr}" ) try: output_data = json.load(tempfile_json) except json.JSONDecodeError as e: raise Exception( f"Failed to parse JSON output from evmone-state/blockchaintest: {e}" ) from e if debug_output_path: self._consume_debug_dump(command, result, fixture_path, debug_output_path) return output_data def _failure_msg(self, file_results: Dict[str, Any]) -> str: # Assumes only one test has run and there has been a failure, # as asserted before. failures = file_results["testsuites"][0]["testsuite"][0]["failures"] return ", ".join([f["failure"] for f in failures]) def consume_test( self, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Consume a single state or blockchain test. Uses the cached result from `consume_test_file` in order to not call the command every time an select a single result from there. """ file_results = self.consume_test_file( fixture_path=fixture_path, debug_output_path=debug_output_path, ) assert len(file_results["testsuites"]) < 2, f"Multiple testsuites for {fixture_name}" assert len(file_results["testsuites"]) == 1, f"testsuite for {fixture_name} missing" test_suite = file_results["testsuites"][0]["testsuite"] assert fixture_name is not None, "fixture_name must be provided for evmone tests" test_results = [ test_result for test_result in test_suite if test_result["name"] == fixture_name ] assert len(test_results) < 2, f"Multiple test results for {fixture_name}" assert len(test_results) == 1, f"Test result for {fixture_name} missing" assert "failures" not in test_results[0], ( f"Test failed: {test_results[0]['failures'][0]['failure']}" ) class EvmOneStateFixtureConsumer( EvmoneFixtureConsumerCommon, FixtureConsumerTool, fixture_formats=[StateFixture], ): """Evmone's implementation of the fixture consumer for state tests.""" default_binary = Path("evmone-statetest") detect_binary_pattern = re.compile(r"^evmone-statetest\b") def __init__( self, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the EvmOneStateFixtureConsumer class.""" self.binary = binary if binary else self.default_binary super().__init__(trace=trace) def consume_fixture( self, fixture_format: FixtureFormat, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Execute the appropriate fixture consumer for the fixture at `fixture_path`. """ if fixture_format == StateFixture: self.consume_test( fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) else: pytest.skip(self._skip_message(fixture_format)) class EvmOneBlockchainFixtureConsumer( EvmoneFixtureConsumerCommon, FixtureConsumerTool, fixture_formats=[BlockchainFixture], ): """Evmone's implementation of the fixture consumer for blockchain tests.""" default_binary = Path("evmone-blockchaintest") detect_binary_pattern = re.compile(r"^evmone-blockchaintest\b") def __init__( self, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the EvmOneBlockchainFixtureConsumer class.""" self.binary = binary if binary else self.default_binary super().__init__(trace=trace) def consume_fixture( self, fixture_format: FixtureFormat, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Execute the appropriate fixture consumer for the fixture at `fixture_path`. """ if fixture_format == BlockchainFixture: self.consume_test( fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) else: pytest.skip(self._skip_message(fixture_format)) class EvmoneExceptionMapper(ExceptionMapper): """ Translate between EEST exceptions and error strings returned by Evmone. """ mapping_substring: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.SENDER_NOT_EOA: "sender not an eoa:", TransactionException.GAS_ALLOWANCE_EXCEEDED: "gas limit reached", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "max priority fee per gas higher than max fee per gas" ), TransactionException.NONCE_IS_MAX: "nonce has max value:", TransactionException.TYPE_4_TX_CONTRACT_CREATION: "set code transaction must ", TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE: "invalid authorization signature", TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE_S_TOO_HIGH: ( "authorization signature s value too high" ), TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: "empty authorization list", TransactionException.INTRINSIC_GAS_TOO_LOW: "intrinsic gas too low", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: "intrinsic gas too low", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: "blob gas limit exceeded", TransactionException.INITCODE_SIZE_EXCEEDED: "max initcode size exceeded", TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( "insufficient funds for gas * price + value" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: ( "max fee per gas less than block base fee" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "max blob fee per gas less than block base fee" ), TransactionException.TYPE_4_TX_PRE_FORK: "transaction type not supported", TransactionException.TYPE_3_TX_PRE_FORK: "transaction type not supported", TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: "invalid blob hash version", TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: "blob gas limit exceeded", TransactionException.TYPE_3_TX_ZERO_BLOBS: "empty blob hashes list", TransactionException.TYPE_3_TX_CONTRACT_CREATION: ( "blob transaction must not be a create transaction" ), TransactionException.NONCE_MISMATCH_TOO_LOW: "nonce too low", TransactionException.NONCE_MISMATCH_TOO_HIGH: "nonce too high", TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: "max gas limit exceeded", # TODO EVMONE needs to differentiate when the section is missing in the # header or body EOFException.MISSING_STOP_OPCODE: "err: no_terminating_instruction", EOFException.MISSING_CODE_HEADER: "err: code_section_missing", EOFException.MISSING_TYPE_HEADER: "err: type_section_missing", # TODO EVMONE these exceptions are too similar, this leeds to ambiguity EOFException.MISSING_TERMINATOR: "err: header_terminator_missing", EOFException.MISSING_HEADERS_TERMINATOR: "err: section_headers_not_terminated", EOFException.INVALID_VERSION: "err: eof_version_unknown", EOFException.INVALID_NON_RETURNING_FLAG: "err: invalid_non_returning_flag", EOFException.INVALID_MAGIC: "err: invalid_prefix", EOFException.INVALID_FIRST_SECTION_TYPE: "err: invalid_first_section_type", EOFException.INVALID_SECTION_BODIES_SIZE: "err: invalid_section_bodies_size", EOFException.INVALID_TYPE_SECTION_SIZE: "err: invalid_type_section_size", EOFException.INCOMPLETE_SECTION_SIZE: "err: incomplete_section_size", EOFException.INCOMPLETE_SECTION_NUMBER: "err: incomplete_section_number", EOFException.TOO_MANY_CODE_SECTIONS: "err: too_many_code_sections", EOFException.ZERO_SECTION_SIZE: "err: zero_section_size", EOFException.MISSING_DATA_SECTION: "err: data_section_missing", EOFException.UNDEFINED_INSTRUCTION: "err: undefined_instruction", EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT: "err: inputs_outputs_num_above_limit", EOFException.UNREACHABLE_INSTRUCTIONS: "err: unreachable_instructions", EOFException.INVALID_RJUMP_DESTINATION: "err: invalid_rjump_destination", EOFException.UNREACHABLE_CODE_SECTIONS: "err: unreachable_code_sections", EOFException.STACK_UNDERFLOW: "err: stack_underflow", EOFException.STACK_OVERFLOW: "err: stack_overflow", EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT: "err: max_stack_increase_above_limit", EOFException.STACK_HIGHER_THAN_OUTPUTS: "err: stack_higher_than_outputs_required", EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS: ( "err: jumpf_destination_incompatible_outputs" ), EOFException.INVALID_MAX_STACK_INCREASE: "err: invalid_max_stack_increase", EOFException.INVALID_DATALOADN_INDEX: "err: invalid_dataloadn_index", EOFException.TRUNCATED_INSTRUCTION: "err: truncated_instruction", EOFException.TOPLEVEL_CONTAINER_TRUNCATED: "err: toplevel_container_truncated", EOFException.ORPHAN_SUBCONTAINER: "err: unreferenced_subcontainer", EOFException.CONTAINER_SIZE_ABOVE_LIMIT: "err: container_size_above_limit", EOFException.INVALID_CONTAINER_SECTION_INDEX: "err: invalid_container_section_index", EOFException.INCOMPATIBLE_CONTAINER_KIND: "err: incompatible_container_kind", EOFException.AMBIGUOUS_CONTAINER_KIND: "err: ambiguous_container_kind", EOFException.STACK_HEIGHT_MISMATCH: "err: stack_height_mismatch", EOFException.TOO_MANY_CONTAINERS: "err: too_many_container_sections", EOFException.INVALID_CODE_SECTION_INDEX: "err: invalid_code_section_index", EOFException.CALLF_TO_NON_RETURNING: "err: callf_to_non_returning_function", EOFException.EOFCREATE_WITH_TRUNCATED_CONTAINER: "err: eofcreate_with_truncated_container", } mapping_regex: ClassVar[Dict[ExceptionBase, str]] = {} ================================================ FILE: src/ethereum_clis/clis/execution_specs.py ================================================ """ Ethereum Specs EVM Resolver Transition Tool Interface. https://github.com/petertdavies/ethereum-spec-evm-resolver """ import os import re import subprocess import time from pathlib import Path from tempfile import TemporaryDirectory from typing import ClassVar, Dict, List, Optional from ethereum_test_exceptions import ( BlockException, ExceptionBase, ExceptionMapper, TransactionException, ) from ethereum_test_forks import Fork from pytest_plugins.custom_logging import get_logger from ..transition_tool import TransitionTool DAEMON_STARTUP_TIMEOUT_SECONDS = 5 logger = get_logger(__name__) class ExecutionSpecsTransitionTool(TransitionTool): """ Ethereum Specs EVM Resolver `ethereum-spec-evm-resolver` Transition Tool wrapper class. `ethereum-spec-evm-resolver` is installed by default for `execution-spec-tests`: ```console uv run fill --evm-bin=ethereum-spec-evm-resolver ``` To use a specific version of the `ethereum-spec-evm-resolver` tool, update it to the desired version in `pyproject.toml`. The `ethereum-spec-evm-resolver` tool essentially wraps around the EELS evm daemon. It can handle requests for different EVM forks, even when those forks are implemented by different versions of EELS hosted in different places. """ default_binary = Path("ethereum-spec-evm-resolver") detect_binary_pattern = re.compile(r"^ethereum-spec-evm-resolver\b") t8n_use_server: bool = True server_dir: Optional[TemporaryDirectory] = None server_url: str | None = None def __init__( self, *, binary: Optional[Path] = None, trace: bool = False, server_url: str | None = None, ): """ Initialize the Ethereum Specs EVM Resolver Transition Tool interface. """ os.environ.setdefault("NO_PROXY", "*") # Disable proxy for local connections super().__init__( exception_mapper=ExecutionSpecsExceptionMapper(), binary=binary, trace=trace ) args = [str(self.binary), "--help"] try: result = subprocess.run(args, capture_output=True, text=True) except subprocess.CalledProcessError as e: raise Exception( "ethereum-spec-evm-resolver process unexpectedly returned a non-zero status code: " f"{e}." ) from e except Exception as e: raise Exception( f"Unexpected exception calling ethereum-spec-evm-resolver: {e}." ) from e self.help_string = result.stdout self.server_url = server_url def start_server(self) -> None: """ Start the t8n-server process, extract the port, and leave it running for future reuse. """ self.server_dir = TemporaryDirectory() self.server_file_path = Path(self.server_dir.name) / "t8n.sock" replaced_str = str(self.server_file_path).replace("/", "%2F") self.server_url = f"http+unix://{replaced_str}/" self.process = subprocess.Popen( args=[ str(self.binary), "daemon", "--uds", self.server_file_path, ], ) start = time.time() while True: if self.server_file_path.exists(): break if time.time() - start > DAEMON_STARTUP_TIMEOUT_SECONDS: raise Exception("Failed starting ethereum-spec-evm subprocess") time.sleep(0) # yield to other processes def shutdown(self) -> None: """Stop the t8n-server process if it was started.""" if self.process: self.process.terminate() if self.server_dir: self.server_dir.cleanup() self.server_dir = None def is_fork_supported(self, fork: Fork) -> bool: """ Return True if the fork is supported by the tool. If the fork is a transition fork, we want to check the fork it transitions to. `ethereum-spec-evm` appends newlines to forks in the help string. """ fork_is_supported = (fork.transition_tool_name() + "\n") in self.help_string logger.debug(f"EELS supports fork {fork}: {fork_is_supported}") return fork_is_supported def _generate_post_args( self, t8n_data: TransitionTool.TransitionToolData ) -> Dict[str, List[str] | str]: """ Generate the arguments for the POST request to the t8n-server. EELS T8N expects `--state-test` when running a state test. """ return {"arg": "--state-test"} if t8n_data.state_test else {} class ExecutionSpecsExceptionMapper(ExceptionMapper): """ Translate between EEST exceptions and error strings returned by ExecutionSpecs. """ mapping_substring: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: "EmptyAuthorizationListError", TransactionException.SENDER_NOT_EOA: "InvalidSenderError", TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( "TransactionTypeContractCreationError(" "'transaction type `SetCodeTransaction` not allowed to create contracts')" ), TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: "InsufficientBalanceError", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( "BlobGasLimitExceededError" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "InsufficientMaxFeePerBlobGasError" ), TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: ( "InvalidBlobVersionedHashError" ), # This message is the same as TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: "BlobCountExceededError", TransactionException.TYPE_3_TX_ZERO_BLOBS: "NoBlobDataError", TransactionException.INTRINSIC_GAS_TOO_LOW: "InsufficientTransactionGasError", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: "InsufficientTransactionGasError", TransactionException.INITCODE_SIZE_EXCEEDED: "InitCodeTooLargeError", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "PriorityFeeGreaterThanMaxFeeError" ), TransactionException.NONCE_MISMATCH_TOO_HIGH: "NonceMismatchError('nonce too high')", TransactionException.NONCE_MISMATCH_TOO_LOW: "NonceMismatchError('nonce too low')", TransactionException.TYPE_3_TX_CONTRACT_CREATION: ( "TransactionTypeContractCreationError(" "'transaction type `BlobTransaction` not allowed to create contracts')" ), TransactionException.NONCE_IS_MAX: "NonceOverflowError", TransactionException.GAS_ALLOWANCE_EXCEEDED: "GasUsedExceedsLimitError", TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: "TransactionGasLimitExceededError", BlockException.SYSTEM_CONTRACT_EMPTY: "System contract address", BlockException.SYSTEM_CONTRACT_CALL_FAILED: "call failed:", BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: "deposit", } mapping_regex: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: ( r"InsufficientMaxFeePerGasError|InvalidBlock" # Temporary solution for issue #1981. ), TransactionException.TYPE_3_TX_PRE_FORK: ( r"module '.*transactions' has no attribute 'BlobTransaction'" ), TransactionException.TYPE_4_TX_PRE_FORK: ( r"'.*transactions' has no attribute 'SetCodeTransaction'" ), } ================================================ FILE: src/ethereum_clis/clis/geth.py ================================================ """Go-ethereum Transition tool interface.""" import json import re import shlex import shutil import subprocess import textwrap from functools import cache from pathlib import Path from typing import Any, ClassVar, Dict, List, Optional from ethereum_test_exceptions import ( BlockException, ExceptionBase, ExceptionMapper, TransactionException, ) from ethereum_test_fixtures import BlockchainFixture, FixtureFormat, StateFixture from ethereum_test_forks import Fork from ..ethereum_cli import EthereumCLI from ..fixture_consumer_tool import FixtureConsumerTool from ..transition_tool import TransitionTool, dump_files_to_directory class GethExceptionMapper(ExceptionMapper): """Translate between EEST exceptions and error strings returned by Geth.""" mapping_substring: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.SENDER_NOT_EOA: "sender not an eoa", TransactionException.GAS_ALLOWANCE_EXCEEDED: "gas limit reached", TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( "insufficient funds for gas * price + value" ), TransactionException.INTRINSIC_GAS_TOO_LOW: "intrinsic gas too low", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: ( "insufficient gas for floor data gas cost" ), TransactionException.NONCE_IS_MAX: "nonce has max value", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( "would exceed maximum allowance" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "max fee per blob gas less than block blob gas fee" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: ( "max fee per gas less than block base fee" ), TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "max priority fee per gas higher than max fee per gas" ), TransactionException.TYPE_3_TX_PRE_FORK: ("transaction type not supported"), TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: "has invalid hash version", # This message is the same as TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: "blob transaction has too many blobs", TransactionException.TYPE_3_TX_ZERO_BLOBS: "blob transaction missing blob hashes", TransactionException.TYPE_3_TX_WITH_FULL_BLOBS: ( "unexpected blob sidecar in transaction at index" ), TransactionException.TYPE_3_TX_CONTRACT_CREATION: ( "input string too short for common.Address, decoding into (types.BlobTx).To" ), TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: ( "EIP-7702 transaction with empty auth list" ), TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( "input string too short for common.Address, decoding into (types.SetCodeTx).To" ), TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: "transaction gas limit too high", TransactionException.TYPE_4_TX_PRE_FORK: ("transaction type not supported"), TransactionException.INITCODE_SIZE_EXCEEDED: "max initcode size exceeded", TransactionException.NONCE_MISMATCH_TOO_LOW: "nonce too low", TransactionException.NONCE_MISMATCH_TOO_HIGH: "nonce too high", BlockException.INCORRECT_BLOB_GAS_USED: "blob gas used mismatch", BlockException.INCORRECT_EXCESS_BLOB_GAS: "invalid excessBlobGas", BlockException.INVALID_VERSIONED_HASHES: "invalid number of versionedHashes", BlockException.INVALID_REQUESTS: "invalid requests hash", BlockException.SYSTEM_CONTRACT_CALL_FAILED: "system call failed to execute:", BlockException.INVALID_BLOCK_HASH: "blockhash mismatch", BlockException.RLP_BLOCK_LIMIT_EXCEEDED: "block RLP-encoded size exceeds maximum", BlockException.INVALID_BAL_EXTRA_ACCOUNT: "BAL change not reported in computed", BlockException.INVALID_BAL_MISSING_ACCOUNT: "additional mutations compared to BAL", BlockException.INVALID_BLOCK_ACCESS_LIST: "unequal", } mapping_regex: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( r"blob gas used \d+ exceeds maximum allowance \d+" ), BlockException.BLOB_GAS_USED_ABOVE_LIMIT: ( r"blob gas used \d+ exceeds maximum allowance \d+" ), BlockException.INVALID_GAS_USED_ABOVE_LIMIT: r"invalid gasUsed: have \d+, gasLimit \d+", BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: ( r"invalid requests hash|failed to parse deposit logs" ), # Geth does not validate the sizes or offsets of the deposit # contract logs. As a workaround we have set # INVALID_DEPOSIT_EVENT_LAYOUT equal to INVALID_REQUESTS. # # Although this is out of spec, it is understood that this # will not cause an issue so long as the mainnet/testnet # deposit contracts don't change. # # The offsets are checked second and the sizes are checked # third within the `is_valid_deposit_event_data` function: # https://eips.ethereum.org/EIPS/eip-6110#block-validity # # EELS definition for `is_valid_deposit_event_data`: # https://github.com/ethereum/execution-specs/blob/5ddb904fa7ba27daeff423e78466744c51e8cb6a/src/ethereum/forks/prague/requests.py#L51 } class GethEvm(EthereumCLI): """go-ethereum `evm` base class.""" default_binary = Path("evm") detect_binary_pattern = re.compile(r"^evm(.exe)? version\b") cached_version: Optional[str] = None trace: bool def __init__( self, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the GethEvm class.""" self.binary = binary if binary else self.default_binary self.trace = trace self._info_metadata: Optional[Dict[str, Any]] = {} def _run_command(self, command: List[str]) -> subprocess.CompletedProcess: try: return subprocess.run( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) except subprocess.CalledProcessError as e: raise Exception("Command failed with non-zero status.") from e except Exception as e: raise Exception("Unexpected exception calling evm tool.") from e def _consume_debug_dump( self, command: List[str], result: subprocess.CompletedProcess, fixture_path: Path, debug_output_path: Path, ) -> None: # our assumption is that each command element is a string assert all(isinstance(x, str) for x in command), ( f"Not all elements of 'command' list are strings: {command}" ) assert len(command) > 0 # replace last value with debug fixture path debug_fixture_path = str(debug_output_path / "fixtures.json") command[-1] = debug_fixture_path # ensure that flags with spaces are wrapped in double-quotes consume_direct_call = " ".join(shlex.quote(arg) for arg in command) consume_direct_script = textwrap.dedent( f"""\ #!/bin/bash {consume_direct_call} """ ) dump_files_to_directory( str(debug_output_path), { "consume_direct_args.py": command, "consume_direct_returncode.txt": result.returncode, "consume_direct_stdout.txt": result.stdout, "consume_direct_stderr.txt": result.stderr, "consume_direct.sh+x": consume_direct_script, }, ) shutil.copyfile(fixture_path, debug_fixture_path) @cache # noqa def help(self, subcommand: str | None = None) -> str: """Return the help string, optionally for a subcommand.""" help_command = [str(self.binary)] if subcommand: help_command.append(subcommand) help_command.append("--help") return self._run_command(help_command).stdout class GethTransitionTool(GethEvm, TransitionTool): """go-ethereum `evm` Transition tool interface wrapper class.""" subcommand: Optional[str] = "t8n" trace: bool t8n_use_stream = True def __init__( self, *, exception_mapper: Optional[ExceptionMapper] = None, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the GethTransitionTool class.""" if not exception_mapper: exception_mapper = GethExceptionMapper() GethEvm.__init__(self, binary=binary, trace=trace) TransitionTool.__init__( self, binary=binary, exception_mapper=exception_mapper, trace=trace ) help_command = [str(self.binary), str(self.subcommand), "--help"] result = self._run_command(help_command) self.help_string = result.stdout def is_fork_supported(self, fork: Fork) -> bool: """ Return True if the fork is supported by the tool. If the fork is a transition fork, we want to check the fork it transitions to. """ return fork.transition_tool_name() in self.help_string class GethFixtureConsumer( GethEvm, FixtureConsumerTool, fixture_formats=[StateFixture, BlockchainFixture], ): """Geth's implementation of the fixture consumer.""" def consume_blockchain_test( self, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Consume a single blockchain test. The `evm blocktest` command takes the `--run` argument which can be used to select a specific fixture from the fixture file when executing. """ subcommand = "blocktest" global_options = [] subcommand_options = [] if debug_output_path: global_options += ["--verbosity", "100"] subcommand_options += ["--trace"] if fixture_name: subcommand_options += ["--run", re.escape(fixture_name)] command = ( [str(self.binary)] + global_options + [subcommand] + subcommand_options + [str(fixture_path)] ) result = self._run_command(command) if debug_output_path: self._consume_debug_dump(command, result, fixture_path, debug_output_path) if result.returncode != 0: raise Exception( f"Unexpected exit code:\n{' '.join(command)}\n\n Error:\n{result.stderr}" ) result_json = json.loads(result.stdout) if not isinstance(result_json, list): raise Exception(f"Unexpected result from evm blocktest: {result_json}") if any(not test_result["pass"] for test_result in result_json): exception_text = "Blockchain test failed: \n" + "\n".join( f"{test_result['name']}: " + test_result["error"] for test_result in result_json if not test_result["pass"] ) raise Exception(exception_text) @cache # noqa def consume_state_test_file( self, fixture_path: Path, debug_output_path: Optional[Path] = None, ) -> List[Dict[str, Any]]: """ Consume an entire state test file. The `evm statetest` will always execute all the tests contained in a file without the possibility of selecting a single test, so this function is cached in order to only call the command once and `consume_state_test` can simply select the result that was requested. """ subcommand = "statetest" global_options: List[str] = [] subcommand_options: List[str] = [] if debug_output_path: global_options += ["--verbosity", "100"] subcommand_options += ["--trace"] command = ( [str(self.binary)] + global_options + [subcommand] + subcommand_options + [str(fixture_path)] ) result = self._run_command(command) if debug_output_path: self._consume_debug_dump(command, result, fixture_path, debug_output_path) if result.returncode != 0: raise Exception( f"Unexpected exit code:\n{' '.join(command)}\n\n Error:\n{result.stderr}" ) result_json = json.loads(result.stdout) if not isinstance(result_json, list): raise Exception(f"Unexpected result from evm statetest: {result_json}") return result_json def consume_state_test( self, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Consume a single state test. Uses the cached result from `consume_state_test_file` in order to not call the command every time an select a single result from there. """ file_results = self.consume_state_test_file( fixture_path=fixture_path, debug_output_path=debug_output_path, ) if fixture_name: test_result = [ test_result for test_result in file_results if test_result["name"] == fixture_name ] assert len(test_result) < 2, f"Multiple test results for {fixture_name}" assert len(test_result) == 1, f"Test result for {fixture_name} missing" assert test_result[0]["pass"], f"State test failed: {test_result[0]['error']}" else: if any(not test_result["pass"] for test_result in file_results): exception_text = "State test failed: \n" + "\n".join( f"{test_result['name']}: " + test_result["error"] for test_result in file_results if not test_result["pass"] ) raise Exception(exception_text) def consume_fixture( self, fixture_format: FixtureFormat, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Execute the appropriate geth fixture consumer for the fixture at `fixture_path`. """ if fixture_format == BlockchainFixture: self.consume_blockchain_test( fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) elif fixture_format == StateFixture: self.consume_state_test( fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) else: raise Exception( f"Fixture format {fixture_format.format_name} not supported by {self.binary}" ) ================================================ FILE: src/ethereum_clis/clis/nethermind.py ================================================ """Interfaces for Nethermind CLIs.""" import json import re import shlex import subprocess import textwrap from functools import cache from pathlib import Path from typing import Any, Dict, List, Optional, Tuple import pytest from ethereum_test_exceptions import BlockException, ExceptionMapper, TransactionException from ethereum_test_fixtures import BlockchainFixture, EOFFixture, FixtureFormat, StateFixture from ..ethereum_cli import EthereumCLI from ..file_utils import dump_files_to_directory from ..fixture_consumer_tool import FixtureConsumerTool class Nethtest(EthereumCLI): """Nethermind `nethtest` binary base class.""" default_binary = Path("nethtest") # new pattern allows e.g. '1.2.3', in the past that was denied detect_binary_pattern = re.compile(r"^\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?(\+[a-f0-9]{40})?$") version_flag: str = "--version" cached_version: Optional[str] = None def __init__( self, binary: Path, trace: bool = False, exception_mapper: ExceptionMapper | None = None, ): """Initialize the Nethtest class.""" self.binary = binary self.trace = trace # TODO: Implement NethermindExceptionMapper self.exception_mapper = exception_mapper if exception_mapper else None def _run_command(self, command: List[str]) -> subprocess.CompletedProcess: try: return subprocess.run( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) except subprocess.CalledProcessError as e: raise Exception("Command failed with non-zero status.") from e except Exception as e: raise Exception("Unexpected exception calling evm tool.") from e def _consume_debug_dump( self, command: Tuple[str, ...], result: subprocess.CompletedProcess, debug_output_path: Path, ) -> None: # our assumption is that each command element is a string assert all(isinstance(x, str) for x in command), ( f"Not all elements of 'command' list are strings: {command}" ) # ensure that flags with spaces are wrapped in double-quotes consume_direct_call = " ".join(shlex.quote(arg) for arg in command) consume_direct_script = textwrap.dedent( f"""\ #!/bin/bash {consume_direct_call} """ ) dump_files_to_directory( str(debug_output_path), { "consume_direct_args.py": command, "consume_direct_returncode.txt": result.returncode, "consume_direct_stdout.txt": result.stdout, "consume_direct_stderr.txt": result.stderr, "consume_direct.sh+x": consume_direct_script, }, ) @cache # noqa def help(self, subcommand: str | None = None) -> str: """Return the help string, optionally for a subcommand.""" help_command = [str(self.binary)] if subcommand: help_command.append(subcommand) help_command.append("--help") return self._run_command(help_command).stdout @cache # noqa def has_eof_support(self) -> bool: """ Return True if the `nethtest` binary supports the `--eofTest` flag. Currently, nethtest EOF support is only available in nethermind's feature/evm/eof branch https://github.com/NethermindEth/nethermind/tree/feature/evm/eof """ return "--eofTest" in self.help() class NethtestFixtureConsumer( Nethtest, FixtureConsumerTool, fixture_formats=[StateFixture, BlockchainFixture, EOFFixture], ): """Nethermind implementation of the fixture consumer.""" def _build_command_with_options( self, fixture_format: FixtureFormat, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> Tuple[str, ...]: assert fixture_name, "Fixture name must be provided for nethtest." command = [str(self.binary)] if fixture_format is BlockchainFixture: command += ["--blockTest", "--filter", f"{re.escape(fixture_name)}"] elif fixture_format is StateFixture: # TODO: consider using `--filter` here to readily access traces # from the output pass # no additional options needed elif fixture_format is EOFFixture: command += ["--eofTest"] else: raise Exception( f"Fixture format {fixture_format.format_name} not supported by {self.binary}" ) command += ["--input", str(fixture_path)] if debug_output_path: command += ["--trace"] return tuple(command) @cache # noqa def consume_state_test_file( self, fixture_path: Path, command: Tuple[str, ...], debug_output_path: Optional[Path] = None, ) -> Tuple[List[Dict[str, Any]], str]: """ Consume an entire state test file. The `evm statetest` will always execute all the tests contained in a file without the possibility of selecting a single test, so this function is cached in order to only call the command once and `consume_state_test` can simply select the result that was requested. """ del fixture_path result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) if debug_output_path: self._consume_debug_dump(command, result, debug_output_path) if result.returncode != 0: raise Exception( f"Unexpected exit code:\n{' '.join(command)}\n\n Error:\n{result.stderr}" ) try: result_json = json.loads(result.stdout) except json.JSONDecodeError as e: raise Exception( f"Failed to parse JSON output on stdout from nethtest:\n{result.stdout}" ) from e if not isinstance(result_json, list): raise Exception(f"Unexpected result from evm statetest: {result_json}") return result_json, result.stderr def consume_state_test( self, command: Tuple[str, ...], fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Consume a single state test. Uses the cached result from `consume_state_test_file` in order to not call the command every time an select a single result from there. """ file_results, stderr = self.consume_state_test_file( fixture_path=fixture_path, command=command, debug_output_path=debug_output_path, ) if fixture_name: # TODO: this check is too fragile; extend for ethereum/tests? nethtest_suffix = "_d0g0v0_" assert all( test_result["name"].endswith(nethtest_suffix) for test_result in file_results ), ( "consume direct with nethtest doesn't support the multi-data statetest format " "used in ethereum/tests (yet)" ) test_result = [ test_result for test_result in file_results if test_result["name"].removesuffix(nethtest_suffix) == f"{fixture_name.split('/')[-1]}" ] assert len(test_result) < 2, f"Multiple test results for {fixture_name}" assert len(test_result) == 1, f"Test result for {fixture_name} missing" assert test_result[0]["pass"], ( f"State test '{fixture_name}' failed, available stderr:\n {stderr}" ) else: if any(not test_result["pass"] for test_result in file_results): exception_text = "State test failed: \n" + "\n".join( f"{test_result['name']}: " + test_result["error"] for test_result in file_results if not test_result["pass"] ) raise Exception(exception_text) def consume_blockchain_test( self, command: Tuple[str, ...], fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """Execute the the fixture at `fixture_path` via `nethtest`.""" del fixture_path del fixture_name result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) if debug_output_path: self._consume_debug_dump(command, result, debug_output_path) if result.returncode != 0: raise Exception( f"nethtest exited with non-zero exit code ({result.returncode}).\n" f"stdout:\n{result.stdout}\n" f"stderr:\n{result.stderr}\n" f"{' '.join(command)}" ) @cache # noqa def consume_eof_test_file( self, fixture_path: Path, command: Tuple[str, ...], debug_output_path: Optional[Path] = None, ) -> Tuple[Dict[Any, Any], str, str]: """Consume an entire EOF fixture file.""" del fixture_path result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) pattern = re.compile(r"^(test_.+?)\s+(PASS|FAIL)$", re.MULTILINE) test_results = { match.group(1): match.group(2) == "PASS" # Convert "PASS" to True # and "FAIL" to False for match in pattern.finditer(result.stdout) } if debug_output_path: self._consume_debug_dump(command, result, debug_output_path) if result.returncode != 0: raise Exception( f"Unexpected exit code:\n{' '.join(command)}\n\n Error:\n{result.stderr}" ) return test_results, result.stdout, result.stderr def consume_eof_test( self, command: Tuple[str, ...], fixture_path: Path, fixture_name: Optional[str], debug_output_path: Optional[Path], ) -> None: """Execute the the EOF fixture at `fixture_path` via `nethtest`.""" if not self.has_eof_support(): pytest.skip("This version of nethtest does not support the `--eofTest` flag.") file_results, stdout, stderr = self.consume_eof_test_file( fixture_path=fixture_path, command=command, debug_output_path=debug_output_path, ) assert fixture_name, "fixture_name is required for EOF tests" modified_fixture_name = fixture_name.split("::")[-1].replace("\\x", "/x") assert modified_fixture_name in file_results, ( f"Test result for {fixture_name} missing, available stdout:\n{stdout}.\n" f"Parsed test results: {file_results}" ) if stderr: available_stderr = f"Available stderr:\n{stderr}" else: available_stderr = "(No output available.)" assert file_results[modified_fixture_name], ( f"EOF test '{fixture_name}' failed. {available_stderr}" ) def consume_fixture( self, fixture_format: FixtureFormat, fixture_path: Path, fixture_name: Optional[str] = None, debug_output_path: Optional[Path] = None, ) -> None: """ Execute the appropriate geth fixture consumer for the fixture at `fixture_path`. """ command = self._build_command_with_options( fixture_format, fixture_path, fixture_name, debug_output_path ) if fixture_format == BlockchainFixture: self.consume_blockchain_test( command=command, fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) elif fixture_format == StateFixture: self.consume_state_test( command=command, fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) elif fixture_format == EOFFixture: self.consume_eof_test( command=command, fixture_path=fixture_path, fixture_name=fixture_name, debug_output_path=debug_output_path, ) else: raise Exception( f"Fixture format {fixture_format.format_name} not supported by {self.binary}" ) class NethermindExceptionMapper(ExceptionMapper): """Nethermind exception mapper.""" mapping_substring = { TransactionException.SENDER_NOT_EOA: "sender has deployed code", TransactionException.INTRINSIC_GAS_TOO_LOW: "intrinsic gas too low", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: "intrinsic gas too low", TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: "miner premium is negative", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "InvalidMaxPriorityFeePerGas: Cannot be higher than maxFeePerGas" ), TransactionException.GAS_ALLOWANCE_EXCEEDED: "Block gas limit exceeded", TransactionException.NONCE_IS_MAX: "NonceTooHigh", TransactionException.INITCODE_SIZE_EXCEEDED: "max initcode size exceeded", TransactionException.NONCE_MISMATCH_TOO_LOW: "wrong transaction nonce", TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "InsufficientMaxFeePerBlobGas: Not enough to cover blob gas fee" ), TransactionException.TYPE_3_TX_PRE_FORK: ( "InvalidTxType: Transaction type in Custom is not supported" ), TransactionException.TYPE_3_TX_ZERO_BLOBS: "blob transaction missing blob hashes", TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: ( "InvalidBlobVersionedHashVersion: Blob version not supported" ), TransactionException.TYPE_3_TX_CONTRACT_CREATION: "blob transaction of type create", TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: ( "MissingAuthorizationList: Must be set" ), TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( "NotAllowedCreateTransaction: To must be set" ), TransactionException.TYPE_4_TX_PRE_FORK: ( "InvalidTxType: Transaction type in Custom is not supported" ), BlockException.INCORRECT_BLOB_GAS_USED: ( "HeaderBlobGasMismatch: Blob gas in header does not match calculated" ), BlockException.INVALID_REQUESTS: "InvalidRequestsHash: Requests hash mismatch in block", BlockException.INVALID_GAS_USED_ABOVE_LIMIT: ( "ExceededGasLimit: Gas used exceeds gas limit." ), BlockException.RLP_BLOCK_LIMIT_EXCEEDED: ( "ExceededBlockSizeLimit: Exceeded block size limit" ), BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: ( "DepositsInvalid: Invalid deposit event layout:" ), } mapping_regex = { TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: ( r"insufficient sender balance|insufficient MaxFeePerGas for sender balance" ), TransactionException.TYPE_3_TX_WITH_FULL_BLOBS: r"Transaction \d+ is not valid", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( r"BlockBlobGasExceeded: A block cannot have more than \d+ blob gas, blobs count \d+, " r"blobs gas used: \d+" ), TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: ( r"BlobTxGasLimitExceeded: Transaction's totalDataGas=\d+ " r"exceeded MaxBlobGas per transaction=\d+" ), TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: ( r"TxGasLimitCapExceeded: Gas limit \d+ \w+ cap of \d+\.?" ), BlockException.INCORRECT_EXCESS_BLOB_GAS: ( r"HeaderExcessBlobGasMismatch: Excess blob gas in header does not match calculated" r"|Overflow in excess blob gas" ), BlockException.INVALID_BLOCK_HASH: ( r"Invalid block hash 0x[0-9a-f]+ does not match calculated hash 0x[0-9a-f]+" ), BlockException.SYSTEM_CONTRACT_EMPTY: ( r"(Withdrawals|Consolidations)Empty: Contract is not deployed\." ), BlockException.SYSTEM_CONTRACT_CALL_FAILED: ( r"(Withdrawals|Consolidations)Failed: Contract execution failed\." ), } ================================================ FILE: src/ethereum_clis/clis/nimbus.py ================================================ """Nimbus Transition tool interface.""" import re import subprocess from pathlib import Path from typing import ClassVar, Dict, Optional from ethereum_test_exceptions import ( BlockException, ExceptionBase, ExceptionMapper, TransactionException, ) from ethereum_test_forks import Fork from ..transition_tool import TransitionTool class NimbusTransitionTool(TransitionTool): """Nimbus `evm` Transition tool interface wrapper class.""" default_binary = Path("t8n") detect_binary_pattern = re.compile(r"^Nimbus-t8n\b") version_flag: str = "--version" binary: Path cached_version: Optional[str] = None trace: bool def __init__( self, *, binary: Optional[Path] = None, trace: bool = False, ): """Initialize the Nimbus Transition tool interface.""" super().__init__(exception_mapper=NimbusExceptionMapper(), binary=binary, trace=trace) args = [str(self.binary), "--help"] try: result = subprocess.run(args, capture_output=True, text=True) except subprocess.CalledProcessError as e: raise Exception( f"evm process unexpectedly returned a non-zero status code: {e}." ) from e except Exception as e: raise Exception(f"Unexpected exception calling evm tool: {e}.") from e self.help_string = result.stdout def version(self) -> str: """Get `evm` binary version.""" if self.cached_version is None: self.cached_version = re.sub(r"\x1b\[0m", "", super().version()).strip() return self.cached_version def is_fork_supported(self, fork: Fork) -> bool: """ Return True if the fork is supported by the tool. If the fork is a transition fork, we want to check the fork it transitions to. """ return fork.transition_tool_name() in self.help_string class NimbusExceptionMapper(ExceptionMapper): """ Translate between EEST exceptions and error strings returned by Nimbus. """ mapping_substring: ClassVar[Dict[ExceptionBase, str]] = { TransactionException.TYPE_4_TX_CONTRACT_CREATION: ( "set code transaction must not be a create transaction" ), TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: "invalid tx: not enough cash to send", TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( "would exceed maximum allowance" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( "max fee per blob gas less than block blob gas fee" ), TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: ( "max fee per gas less than block base fee" ), TransactionException.TYPE_3_TX_PRE_FORK: ( "blob tx used but field env.ExcessBlobGas missing" ), TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: ( "invalid tx: one of blobVersionedHash has invalid version" ), # TODO: temp solution until mapper for nimbus is fixed TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: "zero gasUsed but transactions present", # This message is the same as TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: "exceeds maximum allowance", TransactionException.TYPE_3_TX_ZERO_BLOBS: "blob transaction missing blob hashes", TransactionException.INTRINSIC_GAS_TOO_LOW: "zero gasUsed but transactions present", TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: "intrinsic gas too low", TransactionException.INITCODE_SIZE_EXCEEDED: "max initcode size exceeded", BlockException.RLP_BLOCK_LIMIT_EXCEEDED: ( # TODO: "ExceededBlockSizeLimit: Exceeded block size limit" ), } mapping_regex: ClassVar[Dict[ExceptionBase, str]] = {} ================================================ FILE: src/ethereum_clis/clis/reth.py ================================================ """Reth execution client transition tool.""" from ethereum_test_exceptions import BlockException, ExceptionMapper, TransactionException class RethExceptionMapper(ExceptionMapper): """Reth exception mapper.""" mapping_substring = { TransactionException.SENDER_NOT_EOA: ( "reject transactions from senders with deployed code" ), TransactionException.INSUFFICIENT_ACCOUNT_FUNDS: "lack of funds", TransactionException.INITCODE_SIZE_EXCEEDED: "create initcode size limit", TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS: "gas price is less than basefee", TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS: ( "priority fee is greater than max fee" ), TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW: "overflow", TransactionException.TYPE_3_TX_CONTRACT_CREATION: "unexpected length", TransactionException.TYPE_3_TX_WITH_FULL_BLOBS: "unexpected list", TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH: "blob version not supported", TransactionException.TYPE_3_TX_ZERO_BLOBS: "empty blobs", TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST: "empty authorization list", TransactionException.TYPE_4_TX_CONTRACT_CREATION: "unexpected length", TransactionException.TYPE_4_TX_PRE_FORK: ( "eip 7702 transactions present in pre-prague payload" ), BlockException.INVALID_DEPOSIT_EVENT_LAYOUT: ( "failed to decode deposit requests from receipts" ), BlockException.INVALID_REQUESTS: "mismatched block requests hash", BlockException.INVALID_RECEIPTS_ROOT: "receipt root mismatch", BlockException.INVALID_STATE_ROOT: "mismatched block state root", BlockException.INVALID_BLOCK_HASH: "block hash mismatch", BlockException.INVALID_GAS_USED: "block gas used mismatch", BlockException.RLP_BLOCK_LIMIT_EXCEEDED: "block is too large: ", } mapping_regex = { TransactionException.NONCE_MISMATCH_TOO_LOW: r"nonce \d+ too low, expected \d+", TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS: ( r"blob gas price \(\d+\) is greater than max fee per blob gas \(\d+\)" ), TransactionException.INTRINSIC_GAS_TOO_LOW: ( r"call gas cost \(\d+\) exceeds the gas limit \(\d+\)" ), TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST: ( r"gas floor \(\d+\) exceeds the gas limit \(\d+\)" ), TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED: ( r"blob gas used \d+ exceeds maximum allowance \d+" ), TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED: r"too many blobs, have \d+, max \d+", TransactionException.TYPE_3_TX_PRE_FORK: ( r"blob transactions present in pre-cancun payload|empty blobs" ), TransactionException.GAS_ALLOWANCE_EXCEEDED: ( r"transaction gas limit \w+ is more than blocks available gas \w+" ), TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM: ( r"transaction gas limit.*is greater than the cap" ), BlockException.SYSTEM_CONTRACT_CALL_FAILED: r"failed to apply .* requests contract call", BlockException.INCORRECT_BLOB_GAS_USED: ( r"blob gas used mismatch|blob gas used \d+ is not a multiple of blob gas per blob" ), BlockException.INCORRECT_EXCESS_BLOB_GAS: ( r"excess blob gas \d+ is not a multiple of blob gas per blob|invalid excess blob gas" ), BlockException.INVALID_GAS_USED_ABOVE_LIMIT: ( r"block used gas \(\d+\) is greater than gas limit \(\d+\)" ), } ================================================ FILE: src/ethereum_clis/ethereum_cli.py ================================================ """Abstract base class to help create Python interfaces to Ethereum CLIs.""" import os import shutil import subprocess from itertools import groupby from pathlib import Path from re import Pattern from typing import Any, List, Optional, Type from pytest_plugins.custom_logging import get_logger logger = get_logger(__name__) class UnknownCLIError(Exception): """Exception raised if an unknown CLI is encountered.""" pass class CLINotFoundInPathError(Exception): """Exception raised if the specified CLI binary isn't found in the path.""" def __init__( self, message: str = "The CLI binary was not found in the path", binary: Path | None = None, ) -> None: """Initialize the exception.""" if binary: message = f"{message} ({binary})" super().__init__(message) class EthereumCLI: """ Abstract base class to help create Python interfaces to Ethereum CLIs. This base class helps handle the special case of EVM subcommands, such as the EVM transition tool `t8n`, which have multiple implementations, one from each client team. In the case of these tools, this class mainly serves to help instantiate the correct subclass based on the output of the CLI's version flag. """ registered_tools: List[Type[Any]] = [] default_tool: Optional[Type[Any]] = None binary: Path default_binary: Path detect_binary_pattern: Pattern version_flag: str = "-v" cached_version: Optional[str] = None def __init__(self, *, binary: Optional[Path] = None): """Abstract init method that all subclasses must implement.""" if binary is None: binary = self.default_binary else: # improve behavior of which by resolving the path: # ~/relative paths don't work resolved_path = Path(os.path.expanduser(binary)).resolve() if resolved_path.exists(): binary = resolved_path binary = shutil.which(binary) # type: ignore if not binary: raise CLINotFoundInPathError(binary=binary) self.binary = Path(binary) @classmethod def register_tool(cls, tool_subclass: Type[Any]) -> None: """Register a given subclass as tool option.""" cls.registered_tools.append(tool_subclass) # raise NotImplementedError @classmethod def set_default_tool(cls, tool_subclass: Type[Any]) -> None: """Register the default tool subclass.""" cls.default_tool = tool_subclass @classmethod def from_binary_path(cls, *, binary_path: Optional[Path] = None, **kwargs: Any) -> Any: """ Instantiate the appropriate CLI subclass derived from the CLI's `binary_path`. This method will attempt to detect the CLI version and instantiate the appropriate subclass based on the version output by running the CLI with the version flag. """ assert cls.default_tool is not None, "default CLI implementation was never set" # ensure provided t8n binary can be found and used if binary_path is None: logger.debug("Binary path of provided t8n is None!") return cls.default_tool(binary=binary_path, **kwargs) expanded_path = Path(os.path.expanduser(binary_path)) logger.debug(f"Expanded path of provided t8n: {expanded_path}") resolved_path = expanded_path.resolve() logger.debug(f"Resolved path of provided t8n: {resolved_path}") if resolved_path.exists(): logger.debug("Resolved path exists") binary = Path(resolved_path) else: logger.debug( f"Resolved path does not exist: {resolved_path}\nTrying to find it via `which`" ) # it might be that the provided binary exists in path filename = os.path.basename(resolved_path) binary = shutil.which(filename) # type: ignore logger.debug(f"Output of 'which {binary_path}': {binary}") if binary is None: logger.error(f"Resolved t8n binary path does not exist: {resolved_path}") raise CLINotFoundInPathError(binary=resolved_path) assert binary is not None logger.debug(f"Successfully located the path of the t8n binary: {binary}") binary = Path(binary) # Group the tools by version flag, so we only have to call the tool # once for all the classes that share the same version flag for version_flag, subclasses in groupby( cls.registered_tools, key=lambda x: x.version_flag ): logger.debug( f"\n{'-' * 120}\nTrying this `version` flag to determine " f"if t8n supported: {version_flag}" ) # adding more logging reveals we check for `-v` twice.. try: result = subprocess.run( [binary, version_flag], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) logger.debug( f"Subprocess:\n\tstdout: {result.stdout!r}\n\n\n\t" f"stderr: {result.stderr!r}\n\n\n" ) if result.returncode != 0: logger.debug(f"Subprocess returncode is not 0!It is: {result.returncode}") # don't raise exception, you are supposed to keep trying # different version flags continue # if there is a breaking error try sth else if result.stderr: stderr_str = str(result.stderr) if EthereumCLI.stderr_is_breaking(stderr=stderr_str): logger.debug(f"Stderr detected: {stderr_str}") continue binary_output = "" if result.stdout: binary_output = result.stdout.decode().strip() logger.debug(f"Stripped subprocess stdout: {binary_output}") for subclass in subclasses: logger.debug(f"Trying subclass {subclass}") try: if subclass.detect_binary(binary_output): subclass_check_result = subclass(binary=binary, **kwargs) return subclass_check_result except Exception as e: print(e) continue logger.debug( f"T8n with version {binary_output} does not belong to subclass {subclass}" ) except Exception as e: logger.debug( f"Trying to determine t8n version with flag `{version_flag}` failed: {e}" ) continue raise UnknownCLIError(f"Unknown CLI: {binary}") @classmethod def detect_binary(cls, binary_output: str) -> bool: """ Return True if a CLI's `binary_output` matches the class's expected output. """ logger.debug(f"Trying to detect binary for {binary_output}..") assert cls.detect_binary_pattern is not None logger.debug( f"Trying to match {binary_output} against this pattern: {cls.detect_binary_pattern}" ) match_result = cls.detect_binary_pattern.match(binary_output) match_successful: bool = match_result is not None return match_successful @classmethod def is_installed(cls, binary_path: Optional[Path] = None) -> bool: """Return whether the tool is installed in the current system.""" if binary_path is None: binary_path = cls.default_binary else: resolved_path = Path(os.path.expanduser(binary_path)).resolve() if resolved_path.exists(): binary_path = resolved_path binary = shutil.which(binary_path) return binary is not None @classmethod def stderr_is_breaking(cls, *, stderr: str) -> bool: """ Process the stderr output and decide if the error is a breaking error for this specific tool. """ # harmless java warning on certain systems (besu) if "SVE vector length" in stderr: return False return True def version(self) -> str: """ Return the name and version of the CLI as reported by the CLI's version flag. """ if self.cached_version is None: result = subprocess.run( [str(self.binary), self.version_flag], stdout=subprocess.PIPE, ) if result.returncode != 0: raise Exception("failed to evaluate: " + result.stderr.decode()) self.cached_version = result.stdout.decode().strip() return self.cached_version ================================================ FILE: src/ethereum_clis/file_utils.py ================================================ """Methods to work with the filesystem and json.""" import os import stat from json import dump from typing import Any, Dict from pydantic import BaseModel, RootModel def write_json_file(data: Dict[str, Any], file_path: str) -> None: """Write a JSON file to the given path.""" with open(file_path, "w") as f: dump(data, f, ensure_ascii=False, indent=4) def dump_files_to_directory(output_path: str, files: Dict[str, Any]) -> None: """Dump the files to the given directory.""" os.makedirs(output_path, exist_ok=True) for file_rel_path_flags, file_contents in files.items(): file_rel_path, flags = ( file_rel_path_flags.split("+") if "+" in file_rel_path_flags else (file_rel_path_flags, "") ) rel_path = os.path.dirname(file_rel_path) if rel_path: os.makedirs(os.path.join(output_path, rel_path), exist_ok=True) file_path = os.path.join(output_path, file_rel_path) with open(file_path, "w") as f: if isinstance(file_contents, BaseModel) or isinstance(file_contents, RootModel): f.write( file_contents.model_dump_json( indent=4, exclude_none=True, by_alias=True, ) ) elif isinstance(file_contents, str): f.write(file_contents) else: dump(file_contents, f, ensure_ascii=True, indent=4) if flags: file_mode = os.stat(file_path).st_mode if "x" in flags: file_mode |= stat.S_IEXEC os.chmod(file_path, file_mode) ================================================ FILE: src/ethereum_clis/fixture_consumer_tool.py ================================================ """Fixture consumer tool abstract class.""" from typing import List, Type from ethereum_test_fixtures import FixtureConsumer, FixtureFormat from .ethereum_cli import EthereumCLI class FixtureConsumerTool(FixtureConsumer, EthereumCLI): """ Fixture consumer tool abstract base class which should be inherited by all fixture consumer tool implementations. """ registered_tools: List[Type["FixtureConsumerTool"]] = [] default_tool: Type["FixtureConsumerTool"] | None = None def __init_subclass__(cls, *, fixture_formats: List[FixtureFormat]): """Register all subclasses of FixtureConsumerTool as possible tools.""" FixtureConsumerTool.register_tool(cls) cls.fixture_formats = fixture_formats ================================================ FILE: src/ethereum_clis/py.typed ================================================ ================================================ FILE: src/ethereum_clis/tests/test_execution_specs.py ================================================ """Additional tests for the EELS t8n tool.""" import json import os import sysconfig from pathlib import Path from shutil import which from typing import Dict, List, Type import pytest from pydantic import TypeAdapter from ethereum_clis import ExecutionSpecsTransitionTool, TransitionTool from ethereum_test_base_types import to_json from ethereum_test_forks import Berlin from ethereum_test_types import Alloc, Environment, Transaction FIXTURES_ROOT = Path(os.path.join("src", "ethereum_clis", "tests", "fixtures")) DEFAULT_EVM_T8N_BINARY_NAME = "ethereum-spec-evm-resolver" @pytest.fixture(autouse=True) def monkeypatch_path_for_entry_points( monkeypatch: pytest.MonkeyPatch, ) -> None: """ Monkeypatch the PATH to add the "bin" directory where entrypoints are installed. This would typically be in the venv in which pytest is running these tests and fill, which, with uv, is `./.venv/bin`. This is required in order for fill to locate the ethereum-spec-evm-resolver "binary" (entrypoint) when being executed using pytester. """ bin_dir = sysconfig.get_path("scripts") monkeypatch.setenv("PATH", f"{bin_dir}:{os.environ['PATH']}") @pytest.mark.parametrize( "alloc,expected_hash", [ ( { "0x1000000000000000000000000000000000000000": { "balance": "0x0BA1A9CE0BA1A9CE", "code": "0x", "nonce": "0", "storage": {}, }, }, bytes.fromhex("51e7c7508e76dca0"), ), ( { "0x1000000000000000000000000000000000000000": { "balance": "0x0BA1A9CE0BA1A9CE", }, }, bytes.fromhex("51e7c7508e76dca0"), ), ( { "0x1000000000000000000000000000000000000000": { "balance": "0x0BA1A9CE0BA1A9CE", "code": "0x", "nonce": "1", "storage": {}, }, }, bytes.fromhex("37c2dedbdea6b3af"), ), ( { "0x1000000000000000000000000000000000000000": { "balance": "0", "storage": { "0x01": "0x01", }, }, }, bytes.fromhex("096122e88929baec"), ), ], ) def test_calc_state_root( alloc: Dict, expected_hash: bytes, ) -> None: """Test calculation of the state root against expected hash.""" assert Alloc(alloc).state_root().startswith(expected_hash) @pytest.mark.parametrize("evm_tool", [ExecutionSpecsTransitionTool]) @pytest.mark.parametrize("binary_arg", ["no_binary_arg", "path_type", "str_type"]) def test_evm_tool_binary_arg( evm_tool: Type[ExecutionSpecsTransitionTool], binary_arg: str ) -> None: """Test the `evm_tool` binary argument.""" if binary_arg == "no_binary_arg": evm_tool().version() return elif binary_arg == "path_type": evm_bin = which(DEFAULT_EVM_T8N_BINARY_NAME) if not evm_bin: # typing: Path can not take None; but if None, we may # as well fail explicitly. raise Exception( f"Failed to find `{DEFAULT_EVM_T8N_BINARY_NAME}` in the PATH via which" ) evm_tool(binary=Path(evm_bin)).version() return elif binary_arg == "str_type": evm_bin_str = which(DEFAULT_EVM_T8N_BINARY_NAME) if evm_bin_str: evm_tool(binary=Path(evm_bin_str)).version() return raise Exception("unknown test parameter") transaction_type_adapter = TypeAdapter(List[Transaction]) @pytest.fixture def alloc(test_dir: str) -> Alloc: """Fixture for the `alloc.json` file.""" alloc_path = Path(FIXTURES_ROOT, test_dir, "alloc.json") with open(alloc_path, "r") as f: return Alloc.model_validate_json(f.read()) @pytest.fixture def txs(test_dir: str) -> List[Transaction]: """Fixture for the `txs.json` file.""" txs_path = Path(FIXTURES_ROOT, test_dir, "txs.json") with open(txs_path, "r") as f: return transaction_type_adapter.validate_json(f.read()) @pytest.fixture def env(test_dir: str) -> Environment: """Fixture for the `env.json` file.""" env_path = Path(FIXTURES_ROOT, test_dir, "env.json") with open(env_path, "r") as f: return Environment.model_validate_json(f.read()) @pytest.mark.parametrize("test_dir", os.listdir(path=FIXTURES_ROOT)) def test_evm_t8n( default_t8n: TransitionTool, alloc: Alloc, txs: List[Transaction], env: Environment, test_dir: str, ) -> None: """ Test the `evaluate` method of the `ExecutionSpecsTransitionTool` class. """ expected_path = Path(FIXTURES_ROOT, test_dir, "exp.json") with open(expected_path, "r") as exp: expected = json.load(exp) t8n_output = default_t8n.evaluate( transition_tool_data=TransitionTool.TransitionToolData( alloc=alloc, txs=txs, env=env, fork=Berlin, chain_id=1, reward=0, blob_schedule=Berlin.blob_schedule(), ), ) assert to_json(t8n_output.alloc) == expected.get("alloc") if isinstance(default_t8n, ExecutionSpecsTransitionTool): # The expected output was generated with geth, instead of deleting # any info from this expected output, the fields not returned by # eels are handled here. missing_receipt_fields = [ "root", "status", "cumulativeGasUsed", "contractAddress", "blockHash", "transactionIndex", ] for key in missing_receipt_fields: for i, _ in enumerate(expected.get("result")["receipts"]): del expected.get("result")["receipts"][i][key] for i, receipt in enumerate(expected.get("result")["receipts"]): if int(receipt["logsBloom"], 16) == 0: del expected.get("result")["receipts"][i]["logsBloom"] t8n_result = to_json(t8n_output.result) for i, _ in enumerate(expected.get("result")["rejected"]): del expected.get("result")["rejected"][i]["error"] del t8n_result["rejected"][i]["error"] assert t8n_result == expected.get("result") ================================================ FILE: src/ethereum_clis/tests/test_transition_tool.py ================================================ """Test the transition tool and subclasses.""" import shutil import subprocess from pathlib import Path from typing import Type import pytest from ethereum_clis import ( CLINotFoundInPathError, EvmOneTransitionTool, ExecutionSpecsTransitionTool, GethTransitionTool, NimbusTransitionTool, TransitionTool, ) def test_default_tool() -> None: """Tests that the default t8n tool is set.""" assert TransitionTool.default_tool is ExecutionSpecsTransitionTool @pytest.mark.parametrize( "binary_path,which_result,read_result,expected_class", [ ( Path("evm"), "evm", "evm version 1.12.1-unstable-c7b099b2-20230627", GethTransitionTool, ), ( Path("evmone-t8n"), "evmone-t8n", "evmone-t8n 0.11.0-dev+commit.93997506", EvmOneTransitionTool, ), ( None, "evm", "evm version 1.12.1-unstable-c7b099b2-20230627", ExecutionSpecsTransitionTool, ), ( Path("t8n"), "t8n", "Nimbus-t8n 0.1.2\n\x1b[0m", NimbusTransitionTool, ), ], ) def test_from_binary( monkeypatch: pytest.MonkeyPatch, binary_path: Path | None, which_result: str, read_result: str, expected_class: Type[TransitionTool], ) -> None: """Test that `from_binary` instantiates the correct subclass.""" class MockCompletedProcess: def __init__(self, stdout: bytes) -> None: self.stdout = stdout self.stderr = None self.returncode = 0 def mock_which(self: str) -> str: del self return which_result def mock_run(args: list, **kwargs: dict) -> MockCompletedProcess: del args, kwargs return MockCompletedProcess(read_result.encode()) monkeypatch.setattr(shutil, "which", mock_which) monkeypatch.setattr(subprocess, "run", mock_run) assert isinstance(TransitionTool.from_binary_path(binary_path=binary_path), expected_class) def test_unknown_binary_path() -> None: """ Test that `from_binary_path` raises `UnknownCLIError` for unknown binary paths. """ with pytest.raises(CLINotFoundInPathError): TransitionTool.from_binary_path(binary_path=Path("unknown_binary_path")) ================================================ FILE: src/ethereum_clis/tests/test_transition_tools_support.py ================================================ """Check T8N filling support.""" from typing import Dict import pytest from ethereum_clis import ExecutionSpecsTransitionTool, TransitionTool from ethereum_test_base_types import Account, Address, TestAddress, TestPrivateKey from ethereum_test_forks import ( ArrowGlacier, Berlin, Byzantium, Cancun, Constantinople, Fork, GrayGlacier, London, MuirGlacier, Paris, Prague, get_deployed_forks, ) from ethereum_test_specs.blockchain import BlockchainFixture, BlockchainTest from ethereum_test_tools import ( AccessList, AuthorizationTuple, Block, Environment, Storage, Transaction, Withdrawal, add_kzg_version, ) from ethereum_test_types import Alloc from ethereum_test_vm import Opcodes as Op BLOB_COMMITMENT_VERSION_KZG = 1 fork_set = set(get_deployed_forks()) fork_set.add(Prague) def test_ci_multi_t8n_support( installed_transition_tool_instances: Dict[str, TransitionTool | Exception], running_in_ci: bool, ) -> None: """ Check that the instances of t8n we expect in CI environment were found. """ names = set(installed_transition_tool_instances.keys()) expected_names = {"ExecutionSpecsTransitionTool"} if running_in_ci: expected_names.add("GethTransitionTool") expected_names.add("EvmOneTransitionTool") assert expected_names.issubset(names), ( f"Missing expected transition tools: {expected_names - names}" ) @pytest.mark.parametrize( "fork", sorted(fork_set, key=lambda f: f.__name__), # type: ignore ) def test_t8n_support(fork: Fork, installed_t8n: TransitionTool) -> None: """Stress test that sends all possible t8n interactions.""" if fork in [MuirGlacier, ArrowGlacier, GrayGlacier]: return if isinstance(installed_t8n, ExecutionSpecsTransitionTool) and fork in [Constantinople]: return env = Environment() sender = TestAddress storage_1 = Storage() storage_2 = Storage() code_account_1 = Address(0x1001) code_account_2 = Address(0x1002) pre = Alloc( { TestAddress: Account(balance=10_000_000), code_account_1: Account( code=Op.SSTORE( storage_1.store_next(1, "blockhash_0_is_set"), Op.GT(Op.BLOCKHASH(0), 0) ) + Op.SSTORE(storage_1.store_next(0, "blockhash_1"), Op.BLOCKHASH(1)) + Op.SSTORE( storage_1.store_next(1 if fork < Paris else 0, "difficulty_1_is_near_20000"), Op.AND(Op.GT(Op.PREVRANDAO(), 0x19990), Op.LT(Op.PREVRANDAO(), 0x20100)), ) ), code_account_2: Account( code=Op.SSTORE( storage_2.store_next(1, "blockhash_1_is_set"), Op.GT(Op.BLOCKHASH(1), 0) ) + Op.SSTORE( storage_2.store_next(1 if fork < Paris else 0, "difficulty_2_is_near_20000"), Op.AND(Op.GT(Op.PREVRANDAO(), 0x19990), Op.LT(Op.PREVRANDAO(), 0x20100)), ) ), } ) tx_1 = Transaction( gas_limit=100_000, to=code_account_1, data=b"", nonce=0, secret_key=TestPrivateKey, protected=fork >= Byzantium, ) if fork < Berlin: # Feed legacy transaction, type 0 tx_2 = Transaction( gas_limit=100_000, to=code_account_2, data=b"", nonce=1, secret_key=TestPrivateKey, protected=fork >= Byzantium, ) elif fork < London: # Feed access list transaction, type 1 tx_2 = Transaction( gas_limit=100_000, to=code_account_2, data=b"", nonce=1, secret_key=TestPrivateKey, protected=fork >= Byzantium, access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], ) elif fork < Cancun: # Feed base fee transaction, type 2 tx_2 = Transaction( to=code_account_2, data=b"", nonce=1, secret_key=TestPrivateKey, protected=fork >= Byzantium, gas_limit=100_000, max_priority_fee_per_gas=5, max_fee_per_gas=10, access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], ) elif fork < Prague: # Feed blob transaction, type 3 tx_2 = Transaction( to=code_account_2, data=b"", nonce=1, secret_key=TestPrivateKey, protected=fork >= Byzantium, gas_limit=100_000, max_priority_fee_per_gas=5, max_fee_per_gas=10, max_fee_per_blob_gas=30, blob_versioned_hashes=add_kzg_version([1], BLOB_COMMITMENT_VERSION_KZG), access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], ) else: # Feed set code transaction, type 4 tx_2 = Transaction( to=sender, data=b"", sender=sender, secret_key=TestPrivateKey, protected=fork >= Byzantium, gas_limit=100_000, max_priority_fee_per_gas=5, max_fee_per_gas=10, nonce=1, access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], authorization_list=[ AuthorizationTuple( address=code_account_2, nonce=2, signer=sender, secret_key=TestPrivateKey ), ], ) block_1 = Block( txs=[tx_1], expected_post_state={ code_account_1: Account( storage=storage_1, ), }, ) block_2 = Block( txs=[tx_2], expected_post_state={ code_account_2: Account( balance=1_000_000_000 if fork >= Cancun else 0, storage=storage_2, ), } if fork < Prague else { code_account_2: Account( balance=1_000_000_000 if fork >= Cancun else 0, ), sender: Account( storage=storage_2, ), }, ) if fork >= Cancun: block_2.withdrawals = [ Withdrawal( address=code_account_2, amount=1, index=1, validator_index=0, ), ] test = BlockchainTest( genesis_environment=env, pre=pre, post=block_1.expected_post_state, blocks=[block_1, block_2], ) test.generate( t8n=installed_t8n, fork=fork, fixture_format=BlockchainFixture, ) ================================================ FILE: src/ethereum_clis/transition_tool.py ================================================ """Transition tool abstract class.""" import json import os import shutil import subprocess import tempfile import textwrap import time from abc import abstractmethod from dataclasses import dataclass from pathlib import Path from typing import Any, ClassVar, Dict, List, LiteralString, Mapping, Optional, Type from urllib.parse import urlencode from requests import Response from requests.exceptions import ConnectionError as RequestsConnectionError from requests.exceptions import ReadTimeout from requests_unixsocket import Session # type: ignore from ethereum_test_base_types import BlobSchedule from ethereum_test_base_types.composite_types import ForkBlobSchedule from ethereum_test_exceptions import ExceptionMapper from ethereum_test_forks import Fork from ethereum_test_forks.helpers import get_development_forks, get_forks from ethereum_test_types import Alloc, Environment, Transaction from .cli_types import ( OpcodeCount, Traces, TransactionReceipt, TransactionTraces, TransitionToolContext, TransitionToolInput, TransitionToolOutput, TransitionToolRequest, ) from .ethereum_cli import EthereumCLI from .file_utils import dump_files_to_directory, write_json_file model_dump_config: Mapping = {"by_alias": True, "exclude_none": True} # TODO: reduce NORMAL_SERVER_TIMEOUT back down to 20 once BLS timeout issue is # resolved: https://github.com/ethereum/execution-spec-tests/issues/1894 NORMAL_SERVER_TIMEOUT = 600 SLOW_REQUEST_TIMEOUT = 600 def get_valid_transition_tool_names() -> set[str]: """ Get all valid transition tool names from deployed and development forks. """ all_available_forks = get_forks() + get_development_forks() return {fork.transition_tool_name() for fork in all_available_forks} class TransitionTool(EthereumCLI): """ Transition tool abstract base class which should be inherited by all transition tool implementations. """ traces: List[Traces] | None = None registered_tools: List[Type["TransitionTool"]] = [] default_tool: Optional[Type["TransitionTool"]] = None exception_mapper: ExceptionMapper subcommand: Optional[str] = None cached_version: Optional[str] = None t8n_use_stream: bool = False t8n_use_server: bool = False server_url: str | None = None process: Optional[subprocess.Popen] = None supports_opcode_count: ClassVar[bool] = False supports_xdist: ClassVar[bool] = True supports_blob_params: ClassVar[bool] = False @abstractmethod def __init__( self, *, exception_mapper: Optional[ExceptionMapper] = None, binary: Optional[Path] = None, trace: bool = False, ): """ Abstract initialization method that all subclasses must implement. """ assert exception_mapper is not None self.exception_mapper = exception_mapper super().__init__(binary=binary) self.trace = trace self._info_metadata: Optional[Dict[str, Any]] = {} def __init_subclass__(cls) -> None: """Register all subclasses of TransitionTool as possible tools.""" TransitionTool.register_tool(cls) @abstractmethod def is_fork_supported(self, fork: Fork) -> bool: """Return True if the fork is supported by the tool.""" pass def start_server(self) -> None: """ Start the t8n-server process, extract the port, and leave it running for future reuse. """ pass def shutdown(self) -> None: """Perform any cleanup tasks related to the tested tool.""" pass def reset_traces(self) -> None: """Reset the internal trace storage for a new test to begin.""" self.traces = None def append_traces(self, new_traces: Traces) -> None: """ Append a list of traces of a state transition to the current list. """ if self.traces is None: self.traces = [] self.traces.append(new_traces) def get_traces(self) -> List[Traces] | None: """Return the accumulated traces.""" return self.traces def collect_traces( self, receipts: List[TransactionReceipt], temp_dir: tempfile.TemporaryDirectory, debug_output_path: str = "", ) -> Traces: """ Collect the traces from the t8n tool output and store them in the traces list. """ traces: Traces = Traces(root=[]) temp_dir_path = Path(temp_dir.name) for i, r in enumerate(receipts): trace_file_name = f"trace-{i}-{r.transaction_hash}.jsonl" trace_file_path = temp_dir_path / trace_file_name if debug_output_path: shutil.copy( trace_file_path, Path(debug_output_path) / trace_file_name, ) traces.append(TransactionTraces.from_file(trace_file_path)) self.append_traces(traces) return traces @dataclass class TransitionToolData: """Transition tool files and data to pass between methods.""" alloc: Alloc txs: List[Transaction] env: Environment fork: Fork chain_id: int reward: int blob_schedule: BlobSchedule | None state_test: bool = False @property def fork_name(self) -> str: """Return the fork name.""" return self.fork.transition_tool_name( block_number=self.env.number, timestamp=self.env.timestamp, ) @property def fork_name_if_supports_blob_params(self) -> str: """Return the fork name.""" fork = self.fork.fork_at( block_number=self.env.number, timestamp=self.env.timestamp, ) # For tools that support blob_params, return base fork for BPO # forks. if fork.bpo_fork(): return fork.non_bpo_ancestor().transition_tool_name() else: return self.fork.transition_tool_name( block_number=self.env.number, timestamp=self.env.timestamp, ) @property def blob_params(self) -> ForkBlobSchedule | None: """Return the blob parameters for the current fork.""" if self.blob_schedule: fork_name = self.fork.fork_at( block_number=self.env.number, timestamp=self.env.timestamp ).name() # Only return blob params if this fork has them if fork_name in self.blob_schedule.root: return self.blob_schedule[fork_name] return None def __post_init__(self) -> None: """Modify the reward if the environment number is 0.""" if self.env.number == 0: self.reward = -1 def to_input(self) -> TransitionToolInput: """Convert the data to a TransactionToolInput object.""" return TransitionToolInput( alloc=self.alloc, txs=self.txs, env=self.env, blob_params=self.blob_params, ) def get_request_data(self) -> TransitionToolRequest: """Convert the data to a TransitionToolRequest object.""" return TransitionToolRequest( state=TransitionToolContext( fork=self.fork_name, chain_id=self.chain_id, reward=self.reward, ), input=self.to_input(), ) def _evaluate_filesystem( self, *, t8n_data: TransitionToolData, debug_output_path: str = "", ) -> TransitionToolOutput: """ Execute a transition tool using the filesystem for its inputs and outputs. """ temp_dir = tempfile.TemporaryDirectory() os.mkdir(os.path.join(temp_dir.name, "input")) os.mkdir(os.path.join(temp_dir.name, "output")) input_contents = t8n_data.to_input().model_dump(mode="json", **model_dump_config) input_paths = { k: os.path.join(temp_dir.name, "input", f"{k}.json") for k in input_contents.keys() } for key, file_path in input_paths.items(): write_json_file(input_contents[key], file_path) output_paths = { output: os.path.join("output", f"{output}.json") for output in ["alloc", "result"] } output_paths["body"] = os.path.join("output", "txs.rlp") # Construct args for evmone-t8n binary args = [ str(self.binary), "--state.fork", t8n_data.fork_name_if_supports_blob_params if self.supports_blob_params else t8n_data.fork_name, "--input.alloc", input_paths["alloc"], "--input.env", input_paths["env"], "--input.txs", input_paths["txs"], "--output.basedir", temp_dir.name, "--output.result", output_paths["result"], "--output.alloc", output_paths["alloc"], "--output.body", output_paths["body"], "--state.reward", str(t8n_data.reward), "--state.chainid", str(t8n_data.chain_id), ] if self.supports_opcode_count: args.extend( [ "--opcode.count", "opcodes.json", ] ) if self.supports_blob_params and input_paths.get("blobParams"): args.extend( [ "--input.blobParams", input_paths["blobParams"], ] ) if self.trace: args.append("--trace") result = subprocess.run( args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) if debug_output_path: if os.path.exists(debug_output_path): shutil.rmtree(debug_output_path) shutil.copytree(temp_dir.name, debug_output_path) t8n_output_base_dir = os.path.join(debug_output_path, "t8n.sh.out") t8n_call = " ".join(args) for file_path in input_paths.values(): # update input paths t8n_call = t8n_call.replace( os.path.dirname(file_path), os.path.join(debug_output_path, "input") ) # use a new output path for basedir and outputs t8n_call = t8n_call.replace( temp_dir.name, t8n_output_base_dir, ) t8n_script = textwrap.dedent( f"""\ #!/bin/bash # hard-coded to avoid surprises rm -rf {debug_output_path}/t8n.sh.out mkdir -p {debug_output_path}/t8n.sh.out/output {t8n_call} """ ) dump_files_to_directory( debug_output_path, { "args.py": args, "returncode.txt": result.returncode, "stdout.txt": result.stdout.decode(), "stderr.txt": result.stderr.decode(), "t8n.sh+x": t8n_script, }, ) if result.returncode != 0: raise Exception("failed to evaluate: " + result.stderr.decode()) for key, file_path in output_paths.items(): output_paths[key] = os.path.join(temp_dir.name, file_path) output_contents = {} for key, file_path in output_paths.items(): if "txs.rlp" in file_path: continue with open(file_path, "r+") as file: output_contents[key] = json.load(file) output = TransitionToolOutput.model_validate( output_contents, context={"exception_mapper": self.exception_mapper} ) if self.supports_opcode_count: opcode_count_file_path = Path(temp_dir.name) / "opcodes.json" if opcode_count_file_path.exists(): opcode_count = OpcodeCount.model_validate_json(opcode_count_file_path.read_text()) output.result.opcode_count = opcode_count if debug_output_path: dump_files_to_directory( debug_output_path, { "opcodes.json": opcode_count.model_dump(), }, ) if self.trace: output.result.traces = self.collect_traces( output.result.receipts, temp_dir, debug_output_path ) temp_dir.cleanup() return output def _restart_server(self) -> None: """Check if server is still responsive and restart if needed.""" self.shutdown() time.sleep(0.1) self.start_server() def _server_post( self, data: Dict[str, Any], timeout: int, url_args: Optional[Dict[str, List[str] | str]] = None, retries: int = 5, ) -> Response: """Send a POST request to the t8n-server and return the response.""" if url_args is None: url_args = {} post_delay = 0.1 while True: try: response = Session().post( f"{self.server_url}?{urlencode(url_args, doseq=True)}", json=data, timeout=timeout, ) break except (RequestsConnectionError, ReadTimeout) as e: self._restart_server() retries -= 1 if retries == 0: raise e time.sleep(post_delay) post_delay *= 2 response.raise_for_status() if response.status_code != 200: raise Exception( f"t8n-server returned status code {response.status_code}, " f"response: {response.text}" ) return response def _generate_post_args(self, t8n_data: TransitionToolData) -> Dict[str, List[str] | str]: """Generate the arguments for the POST request to the t8n-server.""" del t8n_data return {} def _evaluate_server( self, *, t8n_data: TransitionToolData, debug_output_path: str = "", timeout: int, ) -> TransitionToolOutput: """ Execute the transition tool sending inputs and outputs via a server. """ request_data = t8n_data.get_request_data() request_data_json = request_data.model_dump(mode="json", **model_dump_config) temp_dir = tempfile.TemporaryDirectory() request_data_json["trace"] = self.trace if self.trace: request_data_json["output-basedir"] = temp_dir.name if debug_output_path: request_info = ( f"Server URL: {self.server_url}\n\n" f"Request Data:\n{json.dumps(request_data_json, indent=2)}\n" ) dump_files_to_directory( debug_output_path, { "input/alloc.json": request_data.input.alloc, "input/env.json": request_data.input.env, "input/txs.json": [ tx.model_dump(mode="json", **model_dump_config) for tx in request_data.input.txs ], "input/blob_params.json": request_data.input.blob_params, "request_info.txt": request_info, }, ) response = self._server_post( data=request_data_json, url_args=self._generate_post_args(t8n_data), timeout=timeout ) response_json = response.json() # pop optional test ``_info`` metadata from response, if present self._info_metadata = response_json.pop("_info_metadata", {}) output: TransitionToolOutput = TransitionToolOutput.model_validate( response_json, context={"exception_mapper": self.exception_mapper} ) if self.trace: output.result.traces = self.collect_traces( output.result.receipts, temp_dir, debug_output_path ) temp_dir.cleanup() if debug_output_path: response_info = ( f"Status Code: {response.status_code}\n\n" f"Headers:\n{json.dumps(dict(response.headers), indent=2)}\n\n" f"Content:\n{response.text}\n" ) dump_files_to_directory( debug_output_path, { "output/alloc.json": output.alloc, "output/result.json": output.result, "output/txs.rlp": str(output.body), "response_info.txt": response_info, }, ) return output def _evaluate_stream( self, *, t8n_data: TransitionToolData, debug_output_path: str = "", ) -> TransitionToolOutput: """ Execute a transition tool using stdin and stdout for its inputs and outputs. """ temp_dir = tempfile.TemporaryDirectory() args = self.construct_args_stream(t8n_data, temp_dir) stdin = t8n_data.to_input() result = subprocess.run( args, input=stdin.model_dump_json(**model_dump_config).encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) self.dump_debug_stream(debug_output_path, temp_dir, stdin, args, result) if result.returncode != 0: raise Exception("failed to evaluate: " + result.stderr.decode()) output: TransitionToolOutput = TransitionToolOutput.model_validate_json( result.stdout, context={"exception_mapper": self.exception_mapper} ) if debug_output_path: dump_files_to_directory( debug_output_path, { "output/alloc.json": output.alloc, "output/result.json": output.result, "output/txs.rlp": str(output.body), }, ) if self.trace: output.result.traces = self.collect_traces( output.result.receipts, temp_dir, debug_output_path ) temp_dir.cleanup() return output def safe_t8n_args( self, fork_name: str, chain_id: int, reward: int, temp_dir: tempfile.TemporaryDirectory | None = None, ) -> List[str]: """Safely construct t8n arguments with validated inputs.""" # Validate fork name against actual transition tool names from all # available forks valid_forks = get_valid_transition_tool_names() if fork_name not in valid_forks: raise ValueError(f"Invalid fork name: {fork_name}") # Validate chain ID (should be positive integer) if not isinstance(chain_id, int) or chain_id <= 0: raise ValueError(f"Invalid chain ID: {chain_id}") # Validate reward (should be non-negative integer) if not isinstance(reward, int) or reward < 0: raise ValueError(f"Invalid reward: {reward}") # Use literal strings for command flags input_alloc: LiteralString = "--input.alloc=stdin" input_txs: LiteralString = "--input.txs=stdin" input_env: LiteralString = "--input.env=stdin" output_result: LiteralString = "--output.result=stdout" output_alloc: LiteralString = "--output.alloc=stdout" output_body: LiteralString = "--output.body=stdout" trace_flag: LiteralString = "--trace" args = [ input_alloc, input_txs, input_env, output_result, output_alloc, output_body, f"--state.fork={fork_name}", f"--state.chainid={chain_id}", f"--state.reward={reward}", ] if self.trace and temp_dir: args.extend([trace_flag, f"--output.basedir={temp_dir.name}"]) return args def construct_args_stream( self, t8n_data: TransitionToolData, temp_dir: tempfile.TemporaryDirectory ) -> List[str]: """Construct arguments for t8n interaction via streams.""" command: list[str] = [str(self.binary)] if self.subcommand: command.append(self.subcommand) safe_args = self.safe_t8n_args( t8n_data.fork_name, t8n_data.chain_id, t8n_data.reward, temp_dir ) return command + safe_args def dump_debug_stream( self, debug_output_path: str, temp_dir: tempfile.TemporaryDirectory, stdin: TransitionToolInput, args: List[str], result: subprocess.CompletedProcess, ) -> None: """ Export debug files if requested when interacting with t8n via streams. """ if not debug_output_path: return t8n_call = " ".join(args) t8n_output_base_dir = os.path.join(debug_output_path, "t8n.sh.out") if self.trace: t8n_call = t8n_call.replace(temp_dir.name, t8n_output_base_dir) t8n_script = textwrap.dedent( f"""\ #!/bin/bash # hard-coded to avoid surprises rm -rf {debug_output_path}/t8n.sh.out # unused if tracing is not enabled mkdir {debug_output_path}/t8n.sh.out {t8n_call} < {debug_output_path}/stdin.txt """ ) dump_files_to_directory( debug_output_path, { "args.py": args, "input/alloc.json": stdin.alloc, "input/env.json": stdin.env, "input/txs.json": [ tx.model_dump(mode="json", **model_dump_config) for tx in stdin.txs ], "returncode.txt": result.returncode, "stdin.txt": stdin, "stdout.txt": result.stdout.decode(), "stderr.txt": result.stderr.decode(), "t8n.sh+x": t8n_script, }, ) def evaluate( self, *, transition_tool_data: TransitionToolData, debug_output_path: str = "", slow_request: bool = False, ) -> TransitionToolOutput: """ Execute the relevant evaluate method as required by the `t8n` tool. If a client's `t8n` tool varies from the default behavior, this method can be overridden. """ if self.t8n_use_server: if not self.server_url: self.start_server() return self._evaluate_server( t8n_data=transition_tool_data, debug_output_path=debug_output_path, timeout=SLOW_REQUEST_TIMEOUT if slow_request else NORMAL_SERVER_TIMEOUT, ) if self.t8n_use_stream: return self._evaluate_stream( t8n_data=transition_tool_data, debug_output_path=debug_output_path ) return self._evaluate_filesystem( t8n_data=transition_tool_data, debug_output_path=debug_output_path, ) ================================================ FILE: src/ethereum_test_base_types/__init__.py ================================================ """Common definitions and types.""" from .base_types import ( Address, Bloom, BLSPublicKey, BLSSignature, Bytes, FixedSizeBytes, ForkHash, Hash, HashInt, HeaderNonce, HexNumber, Number, NumberBoundTypeVar, StorageKey, Wei, ZeroPaddedHexNumber, ) from .base_types_json import to_json from .composite_types import ( AccessList, Account, Alloc, BlobSchedule, ForkBlobSchedule, Storage, StorageRootType, ) from .constants import ( AddrAA, AddrBB, EmptyOmmersRoot, EmptyTrieRoot, TestAddress, TestAddress2, TestPrivateKey, TestPrivateKey2, ) from .conversions import to_bytes, to_hex from .pydantic import CamelModel, EthereumTestBaseModel, EthereumTestRootModel from .reference_spec import ReferenceSpec from .serialization import RLPSerializable, SignableRLPSerializable __all__ = ( "AccessList", "Account", "AddrAA", "AddrBB", "Address", "Alloc", "BlobSchedule", "Bloom", "BLSPublicKey", "BLSSignature", "Bytes", "CamelModel", "EmptyOmmersRoot", "EmptyTrieRoot", "EthereumTestBaseModel", "EthereumTestRootModel", "FixedSizeBytes", "ForkBlobSchedule", "ForkHash", "Hash", "HashInt", "HeaderNonce", "HexNumber", "Number", "NumberBoundTypeVar", "ReferenceSpec", "RLPSerializable", "SignableRLPSerializable", "Storage", "StorageKey", "StorageRootType", "TestAddress", "TestAddress2", "TestPrivateKey", "TestPrivateKey2", "Wei", "ZeroPaddedHexNumber", "to_bytes", "to_hex", "to_json", ) ================================================ FILE: src/ethereum_test_base_types/base_types.py ================================================ """Basic type primitives used to define other types.""" from hashlib import sha256 from typing import Annotated, Any, ClassVar, SupportsBytes, Type, TypeVar from Crypto.Hash import keccak from pydantic import GetCoreSchemaHandler, StringConstraints from pydantic_core.core_schema import ( PlainValidatorFunctionSchema, no_info_plain_validator_function, to_string_ser_schema, ) from typing_extensions import Self from .conversions import ( BytesConvertible, FixedSizeBytesConvertible, NumberConvertible, to_bytes, to_fixed_size_bytes, to_number, ) class ToStringSchema: """ Type converter to add a simple pydantic schema that correctly parses and serializes the type. """ @staticmethod def __get_pydantic_core_schema__( source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call the class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( source_type, serialization=to_string_ser_schema(), ) class Number(int, ToStringSchema): """Class that helps represent numbers in tests.""" def __new__(cls, input_number: NumberConvertible | Self) -> Self: """Create a new Number object.""" return super(Number, cls).__new__(cls, to_number(input_number)) def __str__(self) -> str: """Return the string representation of the number.""" return str(int(self)) def hex(self) -> str: """Return the hexadecimal representation of the number.""" return hex(self) @classmethod def or_none(cls: Type[Self], input_number: Self | NumberConvertible | None) -> Self | None: """Convert the input to a Number while accepting None.""" if input_number is None: return input_number return cls(input_number) class Wei(Number): """Class that helps represent wei that can be parsed from strings.""" def __new__(cls, input_number: NumberConvertible | Self) -> Self: """Create a new Number object.""" if isinstance(input_number, str): words = input_number.split() multiplier = 1 assert len(words) <= 2 value_str = words[0] if len(words) > 1: unit = words[1].lower() multiplier = cls._get_multiplier(unit) value: float if "**" in value_str: base, exp = value_str.split("**") value = float(base) ** int(exp) else: value = int(value_str) if value_str.isdecimal() else float(value_str) return super(Number, cls).__new__(cls, value * multiplier) return super(Number, cls).__new__(cls, to_number(input_number)) @staticmethod def _get_multiplier(unit: str) -> int: """ Return the multiplier for the given unit of wei, handling synonyms. """ match unit: case "wei": return 1 case "kwei" | "babbage" | "femtoether": return 10**3 case "mwei" | "lovelace" | "picoether": return 10**6 case "gwei" | "shannon" | "nanoether" | "nano": return 10**9 case "szabo" | "microether" | "micro": return 10**12 case "finney" | "milliether" | "milli": return 10**15 case "ether" | "eth": return 10**18 case _: raise ValueError(f"Invalid unit {unit}") class HexNumber(Number): """Class that helps represent an hexadecimal numbers in tests.""" def __str__(self) -> str: """Return the string representation of the number.""" return self.hex() @staticmethod def __get_pydantic_core_schema__( source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call the class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( source_type, serialization=to_string_ser_schema(), json_schema_input_schema=handler( Annotated[str, StringConstraints(pattern=r"^0x[0-9a-fA-F]*$")] ), ) class ZeroPaddedHexNumber(HexNumber): """Class that helps represent zero padded hexadecimal numbers in tests.""" def hex(self) -> str: """Return the hexadecimal representation of the number.""" if self == 0: return "0x00" hex_str = hex(self)[2:] if len(hex_str) % 2 == 1: return "0x0" + hex_str return "0x" + hex_str @staticmethod def __get_pydantic_core_schema__( source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call the class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( source_type, serialization=to_string_ser_schema(), json_schema_input_schema=handler( Annotated[str, StringConstraints(pattern=r"^0x([0-9a-fA-F]{2})*$")] ), ) NumberBoundTypeVar = TypeVar("NumberBoundTypeVar", Number, HexNumber, ZeroPaddedHexNumber) class Bytes(bytes, ToStringSchema): """Class that helps represent bytes of variable length in tests.""" def __new__(cls, input_bytes: BytesConvertible = b"") -> Self: """Create a new Bytes object.""" if type(input_bytes) is cls: return input_bytes return super(Bytes, cls).__new__(cls, to_bytes(input_bytes)) def __hash__(self) -> int: """Return the hash of the bytes.""" return super(Bytes, self).__hash__() def __str__(self) -> str: """Return the hexadecimal representation of the bytes.""" return self.hex() def hex(self, *args: Any, **kwargs: Any) -> str: """Return the hexadecimal representation of the bytes.""" return "0x" + super().hex(*args, **kwargs) @classmethod def or_none(cls, input_bytes: "Bytes | BytesConvertible | None") -> "Bytes | None": """Convert the input to a Bytes while accepting None.""" if input_bytes is None: return input_bytes return cls(input_bytes) def keccak256(self) -> "Hash": """Return the keccak256 hash of the opcode byte representation.""" k = keccak.new(digest_bits=256) return Hash(k.update(bytes(self)).digest()) def sha256(self) -> "Hash": """Return the sha256 hash of the opcode byte representation.""" return Hash(sha256(self).digest()) @staticmethod def __get_pydantic_core_schema__( source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call the class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( source_type, serialization=to_string_ser_schema(), json_schema_input_schema=handler( Annotated[str, StringConstraints(pattern=r"^0x([0-9a-fA-F]{2})*$")] ), ) class FixedSizeHexNumber(int, ToStringSchema): """ A base class that helps represent an integer as a fixed byte-length hexadecimal number. This class is used to dynamically generate subclasses of a specific byte length. """ byte_length: ClassVar[int] max_value: ClassVar[int] def __class_getitem__(cls, length: int) -> Type["FixedSizeHexNumber"]: """Create a new FixedSizeHexNumber class with the given length.""" class Sized(cls): # type: ignore byte_length = length max_value = 2 ** (8 * length) - 1 return Sized def __new__(cls, input_number: NumberConvertible | Self) -> Self: """Create a new Number object.""" i = to_number(input_number) if i > cls.max_value: raise ValueError(f"Value {i} is too large for {cls.byte_length} bytes") if i < 0: i += cls.max_value + 1 if i <= 0: raise ValueError(f"Value {i} is too small for {cls.byte_length} bytes") return super(FixedSizeHexNumber, cls).__new__(cls, i) def __str__(self) -> str: """Return the string representation of the number.""" return self.hex() def hex(self) -> str: """Return the hexadecimal representation of the number.""" if self == 0: return "0x00" hex_str = hex(self)[2:] if len(hex_str) % 2 == 1: return "0x0" + hex_str return "0x" + hex_str @classmethod def __get_pydantic_core_schema__( cls: Type[Self], source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call the class constructor without info and appends the serialization schema. """ pattern = f"^0x([0-9a-fA-F]{{{cls.byte_length * 2}}})*$" return no_info_plain_validator_function( source_type, serialization=to_string_ser_schema(), json_schema_input_schema=handler(Annotated[str, StringConstraints(pattern=pattern)]), ) class HashInt(FixedSizeHexNumber[32]): # type: ignore """Class that helps represent hashes in tests.""" pass class FixedSizeBytes(Bytes): """Class that helps represent bytes of fixed length in tests.""" byte_length: ClassVar[int] _sized_: ClassVar[Type["FixedSizeBytes"]] def __class_getitem__(cls, length: int) -> Type["FixedSizeBytes"]: """Create a new FixedSizeBytes class with the given length.""" class Sized(cls): # type: ignore byte_length = length Sized._sized_ = Sized return Sized def __new__( cls, input_bytes: FixedSizeBytesConvertible | Self, *, left_padding: bool = False, right_padding: bool = False, ) -> Self: """Create a new FixedSizeBytes object.""" if type(input_bytes) is cls: return input_bytes return super(FixedSizeBytes, cls).__new__( cls, to_fixed_size_bytes( input_bytes, cls.byte_length, left_padding=left_padding, right_padding=right_padding, ), ) def __hash__(self) -> int: """Return the hash of the bytes.""" return super(FixedSizeBytes, self).__hash__() @classmethod def or_none( cls: Type[Self], input_bytes: Self | FixedSizeBytesConvertible | None ) -> Self | None: """Convert the input to a Fixed Size Bytes while accepting None.""" if input_bytes is None: return input_bytes return cls(input_bytes) def __eq__(self, other: object) -> bool: """Compare two FixedSizeBytes objects to be equal.""" if other is None: return False if not isinstance(other, FixedSizeBytes): assert ( isinstance(other, str) or isinstance(other, int) or isinstance(other, bytes) or isinstance(other, SupportsBytes) ) other = self._sized_(other) return super().__eq__(other) def __ne__(self, other: object) -> bool: """Compare two FixedSizeBytes objects to be not equal.""" return not self.__eq__(other) @classmethod def __get_pydantic_core_schema__( cls: Type[Self], source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call the class constructor without info and appends the serialization schema. """ pattern = f"^0x([0-9a-fA-F]{{{cls.byte_length * 2}}})*$" return no_info_plain_validator_function( source_type, serialization=to_string_ser_schema(), json_schema_input_schema=handler(Annotated[str, StringConstraints(pattern=pattern)]), ) class ForkHash(FixedSizeBytes[4]): # type: ignore """ Class that helps represent the CRC config hashes and identifiers of a fork. """ pass class Address(FixedSizeBytes[20]): # type: ignore """Class that helps represent Ethereum addresses in tests.""" label: str | None = None def __new__( cls, input_bytes: "FixedSizeBytesConvertible | Address", *args: Any, label: str | None = None, **kwargs: Any, ) -> Self: """Create a new Address object with an optional label.""" instance = super(Address, cls).__new__(cls, input_bytes, *args, **kwargs) if isinstance(input_bytes, Address) and label is None: instance.label = input_bytes.label else: instance.label = label return instance class Hash(FixedSizeBytes[32]): # type: ignore """Class that helps represent hashes in tests.""" pass class StorageKey(FixedSizeBytes[32]): # type: ignore """ Storage key type that automatically applies left padding for values shorter than 32 bytes. """ def __new__( cls, input_bytes: FixedSizeBytesConvertible | FixedSizeBytes, **kwargs: Any ) -> Self: """Create a new StorageKey with automatic left padding.""" # Always apply left_padding for storage keys unless explicitly set to # False if "left_padding" not in kwargs: kwargs["left_padding"] = True return super().__new__(cls, input_bytes, **kwargs) class Bloom(FixedSizeBytes[256]): # type: ignore """Class that helps represent blooms in tests.""" pass class HeaderNonce(FixedSizeBytes[8]): # type: ignore """Class that helps represent the header nonce in tests.""" pass class BLSPublicKey(FixedSizeBytes[48]): # type: ignore """Class that helps represent BLS public keys in tests.""" pass class BLSSignature(FixedSizeBytes[96]): # type: ignore """Class that helps represent BLS signatures in tests.""" pass ================================================ FILE: src/ethereum_test_base_types/base_types_json.py ================================================ """JSON encoding and decoding for Ethereum types.""" from typing import Any, AnyStr, List from .pydantic import EthereumTestBaseModel, EthereumTestRootModel def to_json( input_model: ( EthereumTestBaseModel | EthereumTestRootModel | AnyStr | List[EthereumTestBaseModel | EthereumTestRootModel | AnyStr] ), ) -> Any: """Convert a model to its json data representation.""" if isinstance(input_model, list): return [to_json(item) for item in input_model] elif isinstance(input_model, (EthereumTestBaseModel, EthereumTestRootModel)): return input_model.model_dump(mode="json", by_alias=True, exclude_none=True) else: return str(input_model) ================================================ FILE: src/ethereum_test_base_types/composite_types.py ================================================ """Base composite types for Ethereum test cases.""" from dataclasses import dataclass from typing import Any, ClassVar, Dict, ItemsView, Iterator, List, SupportsBytes, Type, TypeAlias from pydantic import Field, PrivateAttr, TypeAdapter from .base_types import Address, Bytes, Hash, HashInt, HexNumber, ZeroPaddedHexNumber from .conversions import BytesConvertible, NumberConvertible from .pydantic import CamelModel, EthereumTestRootModel from .serialization import RLPSerializable StorageKeyValueTypeConvertible = NumberConvertible StorageKeyValueType = HashInt StorageKeyValueTypeAdapter = TypeAdapter(StorageKeyValueType) StorageRootType = Dict[NumberConvertible, NumberConvertible] class Storage(EthereumTestRootModel[Dict[StorageKeyValueType, StorageKeyValueType]]): """ Definition of contract storage in the `pre` or `post` state of a test. This model accepts a dictionary with keys and values as any of: str, int, bytes, or any type that supports conversion to bytes, and automatically casts them to `HashInt`. """ # internal storage is maintained as a dict with HashInt keys and values. root: Dict[StorageKeyValueType, StorageKeyValueType] = Field(default_factory=dict) _current_slot: int = PrivateAttr(0) _hint_map: Dict[StorageKeyValueType, str] = PrivateAttr(default_factory=dict) _any_map: Dict[StorageKeyValueType, bool] = PrivateAttr(default_factory=dict) StorageDictType: ClassVar[TypeAlias] = Dict[ str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes ] """ Dictionary type to be used when defining an input to initialize a storage. """ @dataclass(kw_only=True) class InvalidTypeError(Exception): """ Invalid type used when describing test's expected storage key or value. """ key_or_value: Any def __init__(self, key_or_value: Any, *args: Any) -> None: """Initialize the exception with the invalid type.""" super().__init__(args) self.key_or_value = key_or_value def __str__(self) -> str: """Print exception string.""" return f"invalid type for key/value: {self.key_or_value}" @dataclass(kw_only=True) class InvalidValueError(Exception): """ Invalid value used when describing test's expected storage key or value. """ key_or_value: Any def __init__(self, key_or_value: Any, *args: Any) -> None: """Initialize the exception with the invalid value.""" super().__init__(args) self.key_or_value = key_or_value def __str__(self) -> str: """Print exception string.""" return f"invalid value for key/value: {self.key_or_value}" @dataclass(kw_only=True) class MissingKeyError(Exception): """Test expected to find a storage key set but key was missing.""" key: int def __init__(self, key: int, *args: Any) -> None: """Initialize the exception with the missing key.""" super().__init__(args) self.key = key def __str__(self) -> str: """Print exception string.""" return "key {0} not found in storage".format(Hash(self.key)) @dataclass(kw_only=True) class KeyValueMismatchError(Exception): """ Test expected a certain value in a storage key but value found was different. """ address: Address key: int want: int got: int hint: str def __init__( self, address: Address, key: int, want: int, got: int, hint: str = "", *args: Any ) -> None: """ Initialize the exception with the address, key, wanted and got values. """ super().__init__(args) self.address = address self.key = key self.want = want self.got = got self.hint = hint def __str__(self) -> str: """Print exception string.""" label_str = "" if self.address.label is not None: label_str = f" ({self.address.label})" return ( f"incorrect value in address {self.address}{label_str} for " + f"key {Hash(self.key)}{f' ({self.hint})' if self.hint else ''}:" + f" want {HexNumber(self.want)} (dec:{int(self.want)})," + f" got {HexNumber(self.got)} (dec:{int(self.got)})" ) def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool: """Check for an item in the storage.""" return StorageKeyValueTypeAdapter.validate_python(key) in self.root def __getitem__( self, key: StorageKeyValueTypeConvertible | StorageKeyValueType ) -> StorageKeyValueType: """Return an item from the storage.""" return self.root[StorageKeyValueTypeAdapter.validate_python(key)] def __setitem__( self, key: StorageKeyValueTypeConvertible | StorageKeyValueType, value: StorageKeyValueTypeConvertible | StorageKeyValueType, ) -> None: """Set an item in the storage.""" self.root[StorageKeyValueTypeAdapter.validate_python(key)] = ( StorageKeyValueTypeAdapter.validate_python(value) ) def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> None: """Delete an item from the storage.""" del self.root[StorageKeyValueTypeAdapter.validate_python(key)] def __iter__(self) -> Iterator[StorageKeyValueType]: # type: ignore [override] """Return an iterator over the storage.""" return iter(self.root) def __eq__(self, other: object) -> bool: """Return True if both storages are equal.""" if not isinstance(other, Storage): return False return self.root == other.root def __ne__(self, other: object) -> bool: """Return True if both storages are not equal.""" if not isinstance(other, Storage): return False return self.root != other.root def __bool__(self) -> bool: """Return True if the storage is not empty.""" return any(v for v in self.root.values()) def __add__(self, other: "Storage") -> "Storage": """Return a new storage that is the sum of two storages.""" return Storage({**self.root, **other.root}) def keys(self) -> set[StorageKeyValueType]: """Return the keys of the storage.""" return set(self.root.keys()) def set_next_slot(self, slot: int) -> "Storage": """Set the next slot to be used by `store_next`.""" self._current_slot = slot return self def items(self) -> ItemsView[StorageKeyValueType, StorageKeyValueType]: """Return the items of the storage.""" return self.root.items() def set_expect_any(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> None: """ Mark key to be able to have any expected value when comparing storages. """ self._any_map[StorageKeyValueTypeAdapter.validate_python(key)] = True def store_next( self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool, hint: str = "" ) -> StorageKeyValueType: """ Store a value in the storage and returns the key where the value is stored. Increments the key counter so the next time this function is called, the next key is used. """ slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot) self._current_slot += 1 if hint: self._hint_map[slot] = hint self[slot] = StorageKeyValueTypeAdapter.validate_python(value) return slot def peek_slot(self) -> int: """Peek the next slot that will be used by `store_next`.""" return self._current_slot def contains(self, other: "Storage") -> bool: """ Return True if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool. """ for key in other.keys(): if key not in self: return False if self[key] != other[key]: return False return True def must_contain(self, address: Address, other: "Storage") -> None: """ Succeeds only if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool. Raises detailed exception when a difference is found. """ for key in other.keys(): if key not in self: # storage[key]==0 is equal to missing storage if other[key] != 0: raise Storage.MissingKeyError(key=key) elif self[key] != other[key]: raise Storage.KeyValueMismatchError( address=address, key=key, want=self[key], got=other[key], hint=self._hint_map.get(key, ""), ) def must_be_equal(self, address: Address, other: "Storage | None") -> None: """Succeed only if "self" is equal to "other" storage.""" # Test keys contained in both storage objects if other is None: other = Storage({}) for key in self.keys() & other.keys(): if self[key] != other[key]: raise Storage.KeyValueMismatchError( address=address, key=key, want=self[key], got=other[key], hint=self._hint_map.get(key, ""), ) # Test keys contained in either one of the storage objects for key in self.keys() ^ other.keys(): if key in self: if self[key] != 0: raise Storage.KeyValueMismatchError( address=address, key=key, want=self[key], got=0, hint=self._hint_map.get(key, ""), ) elif other[key] != 0: # Skip key verification if we allow this key to be ANY if self._any_map.get(key) is True: continue raise Storage.KeyValueMismatchError( address=address, key=key, want=0, got=other[key], hint=self._hint_map.get(key, ""), ) def canary(self) -> "Storage": """ Return a canary storage filled with non-zero values where the current storage expects zero values, to guarantee that the test overwrites the storage. """ return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0}) class Account(CamelModel): """State associated with an address.""" nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) """ The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract. """ balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) """The amount of Wei (10-18 Eth) the account has.""" code: Bytes = Bytes(b"") """Bytecode contained by the account.""" storage: Storage = Field(default_factory=Storage) """Storage within a contract.""" NONEXISTENT: ClassVar[None] = None """ Sentinel object used to specify when an account should not exist in the state. """ @dataclass(kw_only=True) class NonceMismatchError(Exception): """ Test expected a certain nonce value for an account but a different value was found. """ address: Address want: int | None got: int | None def __init__( self, address: Address, want: int | None, got: int | None, *args: Any ) -> None: """ Initialize the exception with the address, wanted and got values. """ super().__init__(args) self.address = address self.want = want self.got = got def __str__(self) -> str: """Print exception string.""" label_str = "" if self.address.label is not None: label_str = f" ({self.address.label})" return ( f"unexpected nonce for account {self.address}{label_str}: " + f"want {self.want}, got {self.got}" ) @dataclass(kw_only=True) class BalanceMismatchError(Exception): """ Test expected a certain balance for an account but a different value was found. """ address: Address want: int | None got: int | None def __init__( self, address: Address, want: int | None, got: int | None, *args: Any ) -> None: """ Initialize the exception with the address, wanted and got values. """ super().__init__(args) self.address = address self.want = want self.got = got def __str__(self) -> str: """Print exception string.""" label_str = "" if self.address.label is not None: label_str = f" ({self.address.label})" return ( f"unexpected balance for account {self.address}{label_str}: " + f"want {self.want}, got {self.got}" ) @dataclass(kw_only=True) class CodeMismatchError(Exception): """ Test expected a certain bytecode for an account but a different one was found. """ address: Address want: bytes | None got: bytes | None def __init__( self, address: Address, want: bytes | None, got: bytes | None, *args: Any ) -> None: """ Initialize the exception with the address, wanted and got values. """ super().__init__(args) self.address = address self.want = want self.got = got def __str__(self) -> str: """Print exception string.""" label_str = "" if self.address.label is not None: label_str = f" ({self.address.label})" return ( f"unexpected code for account {self.address}{label_str}: " f"want {self.want.hex() if self.want else self.want}, " f"got {self.got.hex() if self.got else self.got}" ) def check_alloc(self: "Account", address: Address, account: "Account") -> None: """ Check the returned alloc against an expected account in post state. Raises exception on failure. """ if "nonce" in self.model_fields_set: if self.nonce != account.nonce: raise Account.NonceMismatchError( address=address, want=self.nonce, got=account.nonce, ) if "balance" in self.model_fields_set: if self.balance != account.balance: raise Account.BalanceMismatchError( address=address, want=self.balance, got=account.balance, ) if "code" in self.model_fields_set: if self.code != account.code: raise Account.CodeMismatchError( address=address, want=self.code, got=account.code, ) if "storage" in self.model_fields_set: self.storage.must_be_equal(address=address, other=account.storage) def __bool__(self: "Account") -> bool: """Return True on a non-empty account.""" return any((self.nonce, self.balance, self.code, self.storage)) @classmethod def with_code(cls: Type, code: BytesConvertible) -> "Account": """Create account with provided `code` and nonce of `1`.""" return Account(nonce=HexNumber(1), code=Bytes(code)) @classmethod def merge( cls: Type, account_1: "Dict | Account | None", account_2: "Dict | Account | None" ) -> "Account": """Create a merged account from two sources.""" def to_kwargs_dict(account: "Dict | Account | None") -> Dict: if account is None: return {} if isinstance(account, dict): return account elif isinstance(account, cls): return account.model_dump(exclude_unset=True) raise TypeError(f"Unexpected type for account merge: {type(account)}") kwargs = to_kwargs_dict(account_1) kwargs.update(to_kwargs_dict(account_2)) return cls(**kwargs) class Alloc(EthereumTestRootModel[Dict[Address, Account | None]]): """Allocation of accounts in the state, pre and post test execution.""" root: Dict[Address, Account | None] = Field(default_factory=dict, validate_default=True) class AccessList(CamelModel, RLPSerializable): """Access List for transactions.""" address: Address storage_keys: List[Hash] rlp_fields: ClassVar[List[str]] = ["address", "storage_keys"] class ForkBlobSchedule(CamelModel): """Representation of the blob schedule of a given fork.""" target_blobs_per_block: HexNumber = Field(..., alias="target") max_blobs_per_block: HexNumber = Field(..., alias="max") base_fee_update_fraction: HexNumber = Field(...) class BlobSchedule(EthereumTestRootModel[Dict[str, ForkBlobSchedule]]): """Blob schedule configuration dictionary.""" root: Dict[str, ForkBlobSchedule] = Field(default_factory=dict, validate_default=True) def append(self, *, fork: str, schedule: Any) -> None: """Append a new fork schedule.""" if not isinstance(schedule, ForkBlobSchedule): schedule = ForkBlobSchedule(**schedule) self.root[fork] = schedule def last(self) -> ForkBlobSchedule | None: """Return the last schedule.""" if len(self.root) == 0: return None return list(self.root.values())[-1] def __getitem__(self, key: str) -> ForkBlobSchedule: """Return the schedule for a given fork.""" return self.root[key] ================================================ FILE: src/ethereum_test_base_types/constants.py ================================================ """Common values used in Ethereum tests.""" from .base_types import Address TestAddress = Address("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b") TestAddress2 = Address("0x8a0a19589531694250d570040a0c4b74576919b8") TestPrivateKey = 0x45A915E4D060149EB4365960E6A7A45F334393093061116B197E3240065FF2D8 TestPrivateKey2 = 0x9E7645D0CFD9C3A04EB7A9DB59A4EB7D359F2E75C9164A9D6B9A7D54E1B6A36F AddrAA = Address(0xAA) AddrBB = Address(0xBB) EmptyBloom = bytes([0] * 256) EmptyOmmersRoot = bytes.fromhex("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") EmptyTrieRoot = bytes.fromhex("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") EmptyHash = bytes([0] * 32) EmptyNonce = bytes([0] * 8) ZeroAddress = Address(0x00) ================================================ FILE: src/ethereum_test_base_types/conversions.py ================================================ """Common conversion methods.""" from re import sub from typing import Any, List, Optional, SupportsBytes, TypeAlias BytesConvertible: TypeAlias = str | bytes | SupportsBytes | List[int] FixedSizeBytesConvertible: TypeAlias = str | bytes | SupportsBytes | List[int] | int NumberConvertible: TypeAlias = str | bytes | SupportsBytes | int def int_or_none(input_value: Any, default: Optional[int] = None) -> int | None: """Convert a value to int or returns a default (None).""" if input_value is None: return default if isinstance(input_value, int): return input_value return int(input_value, 0) def str_or_none(input_value: Any, default: Optional[str] = None) -> str | None: """Convert a value to string or returns a default (None).""" if input_value is None: return default if isinstance(input_value, str): return input_value return str(input_value) def to_bytes(input_bytes: BytesConvertible) -> bytes: """Convert multiple types into bytes.""" if input_bytes is None: raise Exception("Cannot convert `None` input to bytes") if ( isinstance(input_bytes, SupportsBytes) or isinstance(input_bytes, bytes) or isinstance(input_bytes, list) ): return bytes(input_bytes) if isinstance(input_bytes, str): # We can have a hex representation of bytes with spaces for readability input_bytes = sub(r"\s+", "", input_bytes) if input_bytes.startswith("0x"): input_bytes = input_bytes[2:] if len(input_bytes) % 2 == 1: input_bytes = "0" + input_bytes return bytes.fromhex(input_bytes) raise Exception("invalid type for `bytes`") def to_fixed_size_bytes( input_bytes: FixedSizeBytesConvertible, size: int, *, left_padding: bool = False, right_padding: bool = False, ) -> bytes: """ Convert multiple types into fixed-size bytes. Args: input_bytes: The input data to convert. size: The size of the output bytes. left_padding: Whether to allow left-padding of the input data bytes using zeros. If the input data is an integer, padding is always performed. right_padding: Whether to allow right-padding of the input data bytes using zeros. If the input data is an integer, padding is always performed. """ if isinstance(input_bytes, int): return int.to_bytes(input_bytes, length=size, byteorder="big", signed=input_bytes < 0) input_bytes = to_bytes(input_bytes) if len(input_bytes) > size: raise Exception( f"input is too large for fixed size bytes: {input_bytes.hex()}, " f" {len(input_bytes)} > {size}" ) if len(input_bytes) < size: if left_padding: return bytes(input_bytes).rjust(size, b"\x00") if right_padding: return bytes(input_bytes).ljust(size, b"\x00") raise Exception( f"input is too small for fixed size bytes: {len(input_bytes)} < {size}\n" "Use `left_padding=True` or `right_padding=True` to allow padding." ) return input_bytes def to_hex(input_bytes: BytesConvertible) -> str: """Convert multiple types into a bytes hex string.""" return "0x" + to_bytes(input_bytes).hex() def to_number(input_number: NumberConvertible) -> int: """Convert multiple types into a number.""" if isinstance(input_number, int): return input_number if isinstance(input_number, str): return int(input_number, 0) if isinstance(input_number, bytes) or isinstance(input_number, SupportsBytes): return int.from_bytes(input_number, byteorder="big") raise Exception("invalid type for `number`") ================================================ FILE: src/ethereum_test_base_types/mixins.py ================================================ """Provides various mixins for Pydantic models.""" from typing import Any, List, Literal, Tuple from pydantic import BaseModel class ModelCustomizationsMixin: """ A mixin that customizes the behavior of pydantic models. Any pydantic configuration override that must apply to all models should be placed here. This mixin is applied to both `EthereumTestBaseModel` and `EthereumTestRootModel`. """ def serialize( self, mode: Literal["json", "python"], by_alias: bool, exclude_none: bool = True, ) -> dict[str, Any]: """ Serialize the model to the specified format with the given parameters. Args: mode: The mode of serialization. If mode is 'json', the output will only contain JSON serializable types. If mode is 'python', the output may contain non-JSON-serializable Python objects. by_alias: Whether to use aliases for field names. exclude_none: Whether to exclude fields with None values, default is True. Returns: dict[str, Any]: The serialized representation of the model. """ if not hasattr(self, "model_dump"): raise NotImplementedError( f"{self.__class__.__name__} does not have 'model_dump' method." "Are you sure you are using a Pydantic model?" ) return self.model_dump(mode=mode, by_alias=by_alias, exclude_none=exclude_none) def __repr_args__(self) -> Any: """ Generate a list of attribute-value pairs for the object representation. This method serializes the model, retrieves the attribute names, and constructs a list of tuples containing attribute names and their corresponding values. Only attributes with non-None values are included in the list. This method is used by the __repr__ method to generate the object representation, and is used by `gentest` module to generate the test cases. See: https://pydantic-docs.helpmanual.io/usage/models/ #custom-repr and https://github.com/ethereum/execution-spec-tests/pull/ 901#issuecomment-24432968 35 Returns: List[Tuple[str, Any]]: A list of tuples where each tuple contains an attribute name and its corresponding non-None value. """ attrs_names = self.serialize(mode="python", by_alias=False).keys() attrs = ((s, getattr(self, s)) for s in attrs_names) # Convert field values based on their type. This ensures consistency # between JSON and Python object representations. Should a custom # `__repr__` be needed for a specific type, it can added in the match # statement below. Otherwise, the default string representation is # used. repr_attrs: List[Tuple[str, Any]] = [] for a, v in attrs: match v: # Note: The `None` case handles an edge case with transactions # see: https://github.com/ethereum/execution-spec-tests/pull/ # 901#discussion_r1828491918 case list() | dict() | BaseModel() | None: repr_attrs.append((a, v)) case _: repr_attrs.append((a, str(v))) return repr_attrs ================================================ FILE: src/ethereum_test_base_types/py.typed ================================================ ================================================ FILE: src/ethereum_test_base_types/pydantic.py ================================================ """Base pydantic classes used to define the models for Ethereum tests.""" from typing import Any, TypeVar from pydantic import BaseModel, ConfigDict, RootModel from pydantic.alias_generators import to_camel from typing_extensions import Self from .mixins import ModelCustomizationsMixin RootModelRootType = TypeVar("RootModelRootType") class EthereumTestBaseModel(BaseModel, ModelCustomizationsMixin): """Base model for all models for Ethereum tests.""" pass class EthereumTestRootModel(RootModel[RootModelRootType], ModelCustomizationsMixin): """Base model for all models for Ethereum tests.""" root: Any class CopyValidateModel(EthereumTestBaseModel): """Model that supports copying with validation.""" def copy(self: Self, **kwargs: Any) -> Self: """ Create a copy of the model with the updated fields that are validated. """ return self.__class__(**(self.model_dump(exclude_unset=True) | kwargs)) class CamelModel(CopyValidateModel): """ A base model that converts field names to camel case when serializing. For example, the field name `current_timestamp` in a Python model will be represented as `currentTimestamp` when it is serialized to json. """ model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, validate_default=True, ) ================================================ FILE: src/ethereum_test_base_types/reference_spec/__init__.py ================================================ """Reference Spec Classes.""" from typing import Sequence, Type from .git_reference_spec import GitReferenceSpec from .reference_spec import ReferenceSpec ReferenceSpecTypes: Sequence[Type[ReferenceSpec]] = [ GitReferenceSpec, ] __all__ = ("ReferenceSpec", "ReferenceSpecTypes") ================================================ FILE: src/ethereum_test_base_types/reference_spec/git_reference_spec.py ================================================ """Reference Specification file located in a github repository.""" import base64 import json import os import warnings from dataclasses import dataclass from typing import Any, Dict, Optional import requests from .reference_spec import NoLatestKnownVersionError, ParseModuleError, ReferenceSpec def _decode_base64_content(encoded_data: str) -> str: return base64.b64decode(encoded_data).decode("utf-8") @dataclass(kw_only=True) class GitReferenceSpec(ReferenceSpec): """Git Reference Specification Description Class.""" SpecPath: str RepositoryOwner: str = "ethereum" RepositoryName: str = "EIPs" BranchName: str = "master" SpecVersion: str = "" _latest_spec: Dict | None = None _github_token: Optional[str] = None def name(self) -> str: """Return the name of the spec.""" return ( f"https://github.com/{self.RepositoryOwner}/" + f"{self.RepositoryName}/blob/{self.BranchName}/{self.SpecPath}" ) def known_version(self) -> str: """Return the latest known version in the reference.""" return self.SpecVersion def api_url(self) -> str: """URL used to retrieve the version via the Github API.""" return ( f"https://api.github.com/repos/{self.RepositoryOwner}/" f"{self.RepositoryName}/contents/{self.SpecPath}" ) def _get_request_headers(self) -> Dict[str, str]: """Get headers for GitHub API request, including token if available.""" headers = {} token = self._github_token or os.environ.get("GITHUB_TOKEN") if token: headers["Authorization"] = f"token {token}" return headers def _get_latest_known_spec(self) -> Dict | None: headers = self._get_request_headers() response = requests.get(self.api_url(), headers=headers) if response.status_code != 200: return None content = json.loads(response.content) content["content"] = _decode_base64_content(content["content"]) return content def _get_latest_spec(self) -> Dict | None: if self._latest_spec is not None: return self._latest_spec headers = self._get_request_headers() response = requests.get(self.api_url(), headers=headers) if response.status_code != 200: warnings.warn( f"Unable to get latest version, status code: {response.status_code} - " f"text: {response.text}", stacklevel=2, ) return None content = json.loads(response.content) content["content"] = _decode_base64_content(content["content"]) self._latest_spec = content return content def is_outdated(self) -> bool: """ Check whether the reference specification has been updated since the test was last updated, by comparing the latest known `sha` value of the file in the repository. """ if self.SpecVersion == "": raise NoLatestKnownVersionError # Fetch the latest spec latest = self._get_latest_spec() if latest is None: raise Exception("unable to get latest version") return latest["sha"].strip() != self.SpecVersion.strip() def latest_version(self) -> str: """Return the sha digest of the latest version of the spec.""" latest = self._get_latest_spec() if latest is None or "sha" not in latest: return "" return latest["sha"] def has_known_version(self) -> bool: """ Return true if the reference spec object is hard-coded with a latest known version. """ return self.SpecVersion != "" def write_info(self, info: Dict[str, Dict[str, Any] | str]) -> None: """ Write info about the reference specification used into the output fixture. """ info["reference-spec"] = self.name() info["reference-spec-version"] = self.SpecVersion @staticmethod def parseable_from_module(module_dict: Dict[str, Any]) -> bool: """Check whether the module contains a git reference spec.""" return "REFERENCE_SPEC_GIT_PATH" in module_dict @staticmethod def parse_from_module( module_dict: Dict[str, Any], github_token: Optional[str] = None ) -> "ReferenceSpec": """ Parse the module's dict into a reference spec. Args: module_dict: Dictionary containing module information github_token: Optional GitHub token for API authentication """ if "REFERENCE_SPEC_GIT_PATH" not in module_dict: raise ParseModuleError spec_path = module_dict["REFERENCE_SPEC_GIT_PATH"] spec = GitReferenceSpec(SpecPath=spec_path, _github_token=github_token) if "REFERENCE_SPEC_VERSION" in module_dict: spec.SpecVersion = module_dict["REFERENCE_SPEC_VERSION"] return spec _ = GitReferenceSpec(SpecPath="") ================================================ FILE: src/ethereum_test_base_types/reference_spec/reference_spec.py ================================================ """ Types used to describe a reference specification and versioning used to write Ethereum tests. """ from abc import abstractmethod from typing import Any, Dict, Optional # Exceptions class NoLatestKnownVersionError(Exception): """ Exception used to signal that the reference specification does not have a latest known version. """ pass class ParseModuleError(Exception): """ Exception used to signal that module's reference spec could not be parsed using the given class. """ pass class ReferenceSpec: """Reference Specification Description Abstract Class.""" @abstractmethod def name(self) -> str: """Return the name of the spec.""" pass @abstractmethod def has_known_version(self) -> bool: """ Return true if the reference spec object is hard-coded with a latest known version. """ pass @abstractmethod def known_version(self) -> str: """Return the latest known version in the reference.""" pass @abstractmethod def api_url(self) -> str: """ Return the URL required to poll the version from an API, if needed. """ pass @abstractmethod def latest_version(self) -> str: """Return a digest that points to the latest version of the spec.""" pass @abstractmethod def is_outdated(self) -> bool: """ Check whether the reference specification has been updated since the test was last updated. """ pass @abstractmethod def write_info(self, info: Dict[str, Dict[str, Any] | str]) -> None: """ Write info about the reference specification used into the output fixture. """ pass @staticmethod @abstractmethod def parseable_from_module(module_dict: Dict[str, Any]) -> bool: """ Check whether the module's dict contains required reference spec information. """ pass @staticmethod @abstractmethod def parse_from_module( module_dict: Dict[str, Any], github_token: Optional[str] = None ) -> "ReferenceSpec": """ Parse the module's dict into a reference spec. Args: module_dict: Dictionary containing module information github_token: Optional GitHub token for API authentication """ pass ================================================ FILE: src/ethereum_test_base_types/serialization.py ================================================ """Ethereum test types for serialization and encoding.""" from typing import Any, ClassVar, List import ethereum_rlp as eth_rlp from ethereum_types.numeric import Uint from ethereum_test_base_types import Bytes def to_serializable_element(v: Any) -> Any: """Return a serializable element that can be passed to `eth_rlp.encode`.""" if isinstance(v, int): return Uint(v) elif isinstance(v, bytes): return v elif isinstance(v, list): return [to_serializable_element(v) for v in v] elif isinstance(v, RLPSerializable): if v.signable: v.sign() return v.to_list(signing=False) elif v is None: return b"" raise Exception(f"Unable to serialize element {v} of type {type(v)}.") class RLPSerializable: """Class that adds RLP serialization to another class.""" rlp_override: Bytes | None = None signable: ClassVar[bool] = False rlp_fields: ClassVar[List[str]] rlp_signing_fields: ClassVar[List[str]] def get_rlp_fields(self) -> List[str]: """ Return an ordered list of field names to be included in RLP serialization. Function can be overridden to customize the logic to return the fields. By default, rlp_fields class variable is used. The list can be nested list up to one extra level to represent nested fields. """ return self.rlp_fields def get_rlp_signing_fields(self) -> List[str]: """ Return an ordered list of field names to be included in the RLP serialization of the object signature. Function can be overridden to customize the logic to return the fields. By default, rlp_signing_fields class variable is used. The list can be nested list up to one extra level to represent nested fields. """ return self.rlp_signing_fields def get_rlp_prefix(self) -> bytes: """ Return a prefix that has to be appended to the serialized object. By default, an empty string is returned. """ return b"" def get_rlp_signing_prefix(self) -> bytes: """ Return a prefix that has to be appended to the serialized signing object. By default, an empty string is returned. """ return b"" def sign(self) -> None: """Sign the current object for further serialization.""" raise NotImplementedError(f'Object "{self.__class__.__name__}" cannot be signed.') def to_list_from_fields(self, fields: List[str]) -> List[Any]: """ Return an RLP serializable list that can be passed to `eth_rlp.encode`. Can be for signing purposes or the entire object. """ values_list: List[Any] = [] for field in fields: assert isinstance(field, str), ( f'Unable to rlp serialize field "{field}" ' f'in object type "{self.__class__.__name__}"' ) assert hasattr(self, field), ( f'Unable to rlp serialize field "{field}" ' f'in object type "{self.__class__.__name__}"' ) try: values_list.append(to_serializable_element(getattr(self, field))) except Exception as e: raise Exception( f'Unable to rlp serialize field "{field}" ' f'in object type "{self.__class__.__name__}"' ) from e return values_list def to_list(self, signing: bool = False) -> List[Any]: """ Return an RLP serializable list that can be passed to `eth_rlp.encode`. Can be for signing purposes or the entire object. """ field_list: List[str] if signing: if not self.signable: raise Exception(f'Object "{self.__class__.__name__}" does not support signing') field_list = self.get_rlp_signing_fields() else: if self.signable: # Automatically sign signable objects during full # serialization: Ensures nested objects have valid signatures # in the final RLP. self.sign() field_list = self.get_rlp_fields() return self.to_list_from_fields(field_list) def rlp_signing_bytes(self) -> Bytes: """Return the signing serialized envelope used for signing.""" return Bytes(self.get_rlp_signing_prefix() + eth_rlp.encode(self.to_list(signing=True))) def rlp(self) -> Bytes: """Return the serialized object.""" if self.rlp_override is not None: return self.rlp_override return Bytes(self.get_rlp_prefix() + eth_rlp.encode(self.to_list(signing=False))) class SignableRLPSerializable(RLPSerializable): """ Class that adds RLP serialization to another class with signing support. """ signable: ClassVar[bool] = True def sign(self) -> None: """Sign the current object for further serialization.""" raise NotImplementedError(f'Object "{self.__class__.__name__}" needs to implement `sign`.') ================================================ FILE: src/ethereum_test_base_types/tests/__init__.py ================================================ """Tests for the ethereum_test_base_types package.""" ================================================ FILE: src/ethereum_test_base_types/tests/test_base_types.py ================================================ """Test suite for `ethereum_test` module base types.""" from typing import Any, Dict import pytest from ..base_types import Address, Hash, Wei from ..base_types_json import to_json from ..composite_types import AccessList @pytest.mark.parametrize( "a, b, equal", [ (Address(0), Address(0), True), ( Address("0x0000000000000000000000000000000000000000"), Address("0x0000000000000000000000000000000000000000"), True, ), ( Address("0x0000000000000000000000000000000000000000"), Address("0x0000000000000000000000000000000000000001"), False, ), ( Address("0x0000000000000000000000000000000000000001"), Address("0x0000000000000000000000000000000000000000"), False, ), ( Address("0x0000000000000000000000000000000000000001"), "0x0000000000000000000000000000000000000001", True, ), ( Address("0x0000000000000000000000000000000000000001"), "0x0000000000000000000000000000000000000002", False, ), (Address("0x0000000000000000000000000000000000000001"), 1, True), (Address("0x0000000000000000000000000000000000000001"), 2, False), ( Address("0x0000000000000000000000000000000000000001"), b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", True, ), ( Address("0x0000000000000000000000000000000000000001"), b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", False, ), ( "0x0000000000000000000000000000000000000001", Address("0x0000000000000000000000000000000000000001"), True, ), ( "0x0000000000000000000000000000000000000002", Address("0x0000000000000000000000000000000000000001"), False, ), (1, Address("0x0000000000000000000000000000000000000001"), True), (2, Address("0x0000000000000000000000000000000000000001"), False), ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", Address("0x0000000000000000000000000000000000000001"), True, ), ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", Address("0x0000000000000000000000000000000000000001"), False, ), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000000"), Hash("0x0000000000000000000000000000000000000000000000000000000000000000"), True, ), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000000"), Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), False, ), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), Hash("0x0000000000000000000000000000000000000000000000000000000000000000"), False, ), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), "0x0000000000000000000000000000000000000000000000000000000000000001", True, ), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), "0x0000000000000000000000000000000000000000000000000000000000000002", False, ), (Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), 1, True), (Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), 2, False), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", True, ), ( Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", False, ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), True, ), ( "0x0000000000000000000000000000000000000000000000000000000000000002", Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), False, ), (1, Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), True), (2, Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), False), ], ) def test_comparisons(a: Any, b: Any, equal: bool) -> None: """Test the comparison methods of the base types.""" if equal: assert a == b assert not a != b else: assert a != b assert not a == b def test_hash_padding() -> None: """Test Hash objects are padded correctly.""" assert Hash(b"\x01", left_padding=True) == ( "0x0000000000000000000000000000000000000000000000000000000000000001" ) assert Hash(b"\x02", right_padding=True) == ( "0x0200000000000000000000000000000000000000000000000000000000000000" ) def test_address_padding() -> None: """Test that addresses are padded correctly.""" assert Address(b"\x01", left_padding=True) == Address( "0x0000000000000000000000000000000000000001" ) assert Address(b"\x80", right_padding=True) == Address( "0x8000000000000000000000000000000000000000" ) @pytest.mark.parametrize( "s, expected", [ ("0", 0), ("10**18", 10**18), ("1e18", 10**18), ("1 ether", 10**18), ("2 ether", 2 * 10**18), ("70000 ether", 70000 * 10**18), ("123456 ether", 123456 * 10**18), ("123456.789 ether", 123456.789 * 10**18), ("2.1 ether", 2.1 * 10**18), ("2.1 Ether", 2.1 * 10**18), ("2.1 ETHER", 2.1 * 10**18), ("1 wei", 1), ("10**9 wei", 10**9), ("1 gwei", 10**9), ("1 szabo", 10**12), ("1 finney", 10**15), ("1 kwei", 10**3), ("1 mwei", 10**6), ("1 babbage", 10**3), ("1 femtoether", 10**3), ("1 Lovelace", 10**6), ("1 Picoether", 10**6), ("1 gwei", 10**9), ("1 shannon", 10**9), ("1 nanoether", 10**9), ("1 nano", 10**9), ("1 microether", 10**12), ("1 micro", 10**12), ("1 milliether", 10**15), ("1 milli", 10**15), ], ) def test_wei_parsing(s: str, expected: int) -> None: """Test the parsing of wei values.""" assert Wei(s) == expected @pytest.mark.parametrize( ["can_be_deserialized", "model_instance", "json"], [ pytest.param( True, AccessList( address=0x1234, storage_keys=[0, 1], ), { "address": "0x0000000000000000000000000000000000001234", "storageKeys": [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", ], }, id="access_list", ), ], ) class TestPydanticModelConversion: """Test that Pydantic models are converted to and from JSON correctly.""" def test_json_serialization( self, can_be_deserialized: bool, model_instance: Any, json: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" del can_be_deserialized assert to_json(model_instance) == json def test_json_deserialization( self, can_be_deserialized: bool, model_instance: Any, json: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" if not can_be_deserialized: pytest.skip(reason="The model instance in this case can not be deserialized") model_type = type(model_instance) assert model_type(**json) == model_instance ================================================ FILE: src/ethereum_test_base_types/tests/test_reference_spec.py ================================================ """Test suite for `ethereum_test_base_types.reference_spec` module.""" import re from typing import Any import pytest import requests from ..reference_spec.git_reference_spec import GitReferenceSpec from ..reference_spec.reference_spec import NoLatestKnownVersionError # the content field from # https://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-100.md # as of 2023-08-29 response_content = "LS0tCmVpcDogMTAwCnRpdGxlOiBDaGFuZ2UgZGlmZmljdWx0eSBhZGp1c3Rt\ ZW50IHRvIHRhcmdldCBtZWFuIGJsb2NrIHRpbWUgaW5jbHVkaW5nIHVuY2xl\ cwphdXRob3I6IFZpdGFsaWsgQnV0ZXJpbiAoQHZidXRlcmluKQp0eXBlOiBT\ dGFuZGFyZHMgVHJhY2sKY2F0ZWdvcnk6IENvcmUKc3RhdHVzOiBGaW5hbApj\ cmVhdGVkOiAyMDE2LTA0LTI4Ci0tLQoKIyMjIFNwZWNpZmljYXRpb24KCkN1\ cnJlbnRseSwgdGhlIGZvcm11bGEgdG8gY29tcHV0ZSB0aGUgZGlmZmljdWx0\ eSBvZiBhIGJsb2NrIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbG9naWM6Cgpg\ YGAgcHl0aG9uCmFkal9mYWN0b3IgPSBtYXgoMSAtICgodGltZXN0YW1wIC0g\ cGFyZW50LnRpbWVzdGFtcCkgLy8gMTApLCAtOTkpCmNoaWxkX2RpZmYgPSBp\ bnQobWF4KHBhcmVudC5kaWZmaWN1bHR5ICsgKHBhcmVudC5kaWZmaWN1bHR5\ IC8vIEJMT0NLX0RJRkZfRkFDVE9SKSAqIGFkal9mYWN0b3IsIG1pbihwYXJl\ bnQuZGlmZmljdWx0eSwgTUlOX0RJRkYpKSkKLi4uCmBgYAoKSWYgYGJsb2Nr\ Lm51bWJlciA+PSBCWVpBTlRJVU1fRk9SS19CTEtOVU1gLCB3ZSBjaGFuZ2Ug\ dGhlIGZpcnN0IGxpbmUgdG8gdGhlIGZvbGxvd2luZzoKCmBgYCBweXRob24K\ YWRqX2ZhY3RvciA9IG1heCgoMiBpZiBsZW4ocGFyZW50LnVuY2xlcykgZWxz\ ZSAxKSAtICgodGltZXN0YW1wIC0gcGFyZW50LnRpbWVzdGFtcCkgLy8gOSks\ IC05OSkKYGBgCiMjIyBSYXRpb25hbGUKClRoaXMgbmV3IGZvcm11bGEgZW5z\ dXJlcyB0aGF0IHRoZSBkaWZmaWN1bHR5IGFkanVzdG1lbnQgYWxnb3JpdGht\ IHRhcmdldHMgYSBjb25zdGFudCBhdmVyYWdlIHJhdGUgb2YgYmxvY2tzIHBy\ b2R1Y2VkIGluY2x1ZGluZyB1bmNsZXMsIGFuZCBzbyBlbnN1cmVzIGEgaGln\ aGx5IHByZWRpY3RhYmxlIGlzc3VhbmNlIHJhdGUgdGhhdCBjYW5ub3QgYmUg\ bWFuaXB1bGF0ZWQgdXB3YXJkIGJ5IG1hbmlwdWxhdGluZyB0aGUgdW5jbGUg\ cmF0ZS4gQSBmb3JtdWxhIHRoYXQgYWNjb3VudHMgZm9yIHRoZSBleGFjdCBu\ dW1iZXIgb2YgaW5jbHVkZWQgdW5jbGVzOgpgYGAgcHl0aG9uCmFkal9mYWN0\ b3IgPSBtYXgoMSArIGxlbihwYXJlbnQudW5jbGVzKSAtICgodGltZXN0YW1w\ IC0gcGFyZW50LnRpbWVzdGFtcCkgLy8gOSksIC05OSkKYGBgCmNhbiBiZSBm\ YWlybHkgZWFzaWx5IHNlZW4gdG8gYmUgKHRvIHdpdGhpbiBhIHRvbGVyYW5j\ ZSBvZiB+My80MTk0MzA0KSBtYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRv\ IGFzc3VtaW5nIHRoYXQgYSBibG9jayB3aXRoIGBrYCB1bmNsZXMgaXMgZXF1\ aXZhbGVudCB0byBhIHNlcXVlbmNlIG9mIGBrKzFgIGJsb2NrcyB0aGF0IGFs\ bCBhcHBlYXIgd2l0aCB0aGUgZXhhY3Qgc2FtZSB0aW1lc3RhbXAsIGFuZCB0\ aGlzIGlzIGxpa2VseSB0aGUgc2ltcGxlc3QgcG9zc2libGUgd2F5IHRvIGFj\ Y29tcGxpc2ggdGhlIGRlc2lyZWQgZWZmZWN0LiBCdXQgc2luY2UgdGhlIGV4\ YWN0IGZvcm11bGEgZGVwZW5kcyBvbiB0aGUgZnVsbCBibG9jayBhbmQgbm90\ IGp1c3QgdGhlIGhlYWRlciwgd2UgYXJlIGluc3RlYWQgdXNpbmcgYW4gYXBw\ cm94aW1hdGUgZm9ybXVsYSB0aGF0IGFjY29tcGxpc2hlcyBhbG1vc3QgdGhl\ IHNhbWUgZWZmZWN0IGJ1dCBoYXMgdGhlIGJlbmVmaXQgdGhhdCBpdCBkZXBl\ bmRzIG9ubHkgb24gdGhlIGJsb2NrIGhlYWRlciAoYXMgeW91IGNhbiBjaGVj\ ayB0aGUgdW5jbGUgaGFzaCBhZ2FpbnN0IHRoZSBibGFuayBoYXNoKS4KCkNo\ YW5naW5nIHRoZSBkZW5vbWluYXRvciBmcm9tIDEwIHRvIDkgZW5zdXJlcyB0\ aGF0IHRoZSBibG9jayB0aW1lIHJlbWFpbnMgcm91Z2hseSB0aGUgc2FtZSAo\ aW4gZmFjdCwgaXQgc2hvdWxkIGRlY3JlYXNlIGJ5IH4zJSBnaXZlbiB0aGUg\ Y3VycmVudCB1bmNsZSByYXRlIG9mIDclKS4KCiMjIyBSZWZlcmVuY2VzCgox\ LiBFSVAgMTAwIGlzc3VlIGFuZCBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1\ Yi5jb20vZXRoZXJldW0vRUlQcy9pc3N1ZXMvMTAwCjIuIGh0dHBzOi8vYml0\ c2xvZy53b3JkcHJlc3MuY29tLzIwMTYvMDQvMjgvdW5jbGUtbWluaW5nLWFu\ LWV0aGVyZXVtLWNvbnNlbnN1cy1wcm90b2NvbC1mbGF3Lwo=" def test_git_reference_spec(monkeypatch: pytest.MonkeyPatch) -> None: """Test Git reference spec.""" def mock_get(self: Any, headers: Any | None = None) -> object: del self, headers class Response: content = ( '{"content": "' + response_content + '", "sha":"78b94002190eb71cb04b8757629397f9418e8cce"}' ) status_code = 200 return Response() monkeypatch.setattr(requests, "get", mock_get) ref_spec = GitReferenceSpec( SpecPath="EIPS/eip-100.md", ) latest_spec = ref_spec._get_latest_spec() assert latest_spec is not None assert "sha" in latest_spec assert re.match(r"^[0-9a-f]{40}$", latest_spec["sha"]) with pytest.raises(NoLatestKnownVersionError): # `is_outdated` method raises here because known version is unset ref_spec.is_outdated() ref_spec.SpecVersion = "0000000000000000000000000000000000000000" assert ref_spec.is_outdated() ================================================ FILE: src/ethereum_test_benchmark/__init__.py ================================================ """ Benchmark code generator classes for creating optimized bytecode patterns. """ from .benchmark_code_generator import ( BenchmarkCodeGenerator, ExtCallGenerator, JumpLoopGenerator, ) __all__ = ( "BenchmarkCodeGenerator", "ExtCallGenerator", "JumpLoopGenerator", ) ================================================ FILE: src/ethereum_test_benchmark/benchmark_code_generator.py ================================================ """ Benchmark code generator classes for creating optimized bytecode patterns. """ from dataclasses import dataclass from ethereum_test_base_types import Address from ethereum_test_forks import Fork from ethereum_test_specs.benchmark import BenchmarkCodeGenerator from ethereum_test_types import Alloc from ethereum_test_vm.opcodes import Opcodes as Op @dataclass(kw_only=True) class JumpLoopGenerator(BenchmarkCodeGenerator): """Generates bytecode that loops execution using JUMP operations.""" def deploy_contracts(self, *, pre: Alloc, fork: Fork) -> Address: """Deploy the looping contract.""" # Benchmark Test Structure: # setup + JUMPDEST + # attack + attack + ... + attack + # cleanup + JUMP(setup_length) code = self.generate_repeated_code( repeated_code=self.attack_block, setup=self.setup, cleanup=self.cleanup, fork=fork ) self._contract_address = pre.deploy_contract(code=code) return self._contract_address @dataclass(kw_only=True) class ExtCallGenerator(BenchmarkCodeGenerator): """ Generates bytecode that fills the contract to maximum allowed code size. """ contract_balance: int = 0 def deploy_contracts(self, *, pre: Alloc, fork: Fork) -> Address: """Deploy both target and caller contracts.""" # Benchmark Test Structure: # There are two contracts: # 1. The target contract that executes certain operation # but not loop (e.g. PUSH) # 2. The loop contract that calls the target contract in a loop pushed_stack_items = self.attack_block.pushed_stack_items popped_stack_items = self.attack_block.popped_stack_items stack_delta = pushed_stack_items - popped_stack_items max_iterations = fork.max_code_size() // len(self.attack_block) if stack_delta > 0: max_iterations = min(fork.max_stack_height() // stack_delta, max_iterations) # Deploy target contract that contains the actual attack block self._target_contract_address = pre.deploy_contract( code=self.setup + self.attack_block * max_iterations, balance=self.contract_balance, ) # Create caller contract that repeatedly calls the target contract # attack = POP( # STATICCALL(GAS, target_contract_address, 0, 0, 0, 0) # ) # # setup + JUMPDEST + attack + attack + ... + attack + # JUMP(setup_length) code_sequence = Op.POP(Op.STATICCALL(Op.GAS, self._target_contract_address, 0, 0, 0, 0)) caller_code = self.generate_repeated_code( repeated_code=code_sequence, cleanup=self.cleanup, fork=fork ) self._contract_address = pre.deploy_contract(code=caller_code) return self._contract_address ================================================ FILE: src/ethereum_test_checklists/__init__.py ================================================ """Ethereum test checklists module for EIP testing coverage tracking.""" from .eip_checklist import EIPChecklist __all__ = ["EIPChecklist"] ================================================ FILE: src/ethereum_test_checklists/eip_checklist.py ================================================ """ EIP Testing Checklist Enum definitions. Note: This module includes a companion .pyi stub file that provides mypy type hints for making EIPChecklist classes callable. The stub file is auto-generated using: uv run generate_checklist_stubs If you modify the EIPChecklist class structure, regenerate the stub file to maintain proper type checking support. """ import re import pytest def camel_to_snake(name: str) -> str: """Convert CamelCase to snake_case.""" # Insert an underscore before any uppercase letter that follows a lowercase # letter s1 = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name) # Insert an underscore before any uppercase letter that follows a lowercase # letter or number return re.sub("([a-z0-9])([A-Z])", r"\1_\2", s1).lower() class ChecklistItemMeta(type): """Metaclass for checklist items that provides string representation.""" _path: str = "" _override_name: str = "" def __new__(mcs, name: str, bases: tuple, namespace: dict, **kwargs): # noqa: N804 """Create a new class with the parent path set.""" parent_path = kwargs.get("parent_path", "") override_name = kwargs.get("override_name", None) # Create the class cls = super().__new__(mcs, name, bases, namespace) cls._override_name = override_name # Set the path for this class item_name = override_name if override_name is not None else camel_to_snake(name) if parent_path: # Convert class name to snake_case and append to parent path cls._path = f"{parent_path}/{item_name}" else: cls._path = item_name # Process nested classes for attr_name, attr_value in namespace.items(): if isinstance(attr_value, type) and not attr_name.startswith("_"): # Create a new class with the parent path set assert isinstance(attr_value, ChecklistItemMeta) nested_cls = ChecklistItemMeta( attr_value.__name__, attr_value.__bases__, dict(attr_value.__dict__), parent_path=cls._path, override_name=attr_value._override_name, ) setattr(cls, attr_name, nested_cls) return cls def __str__(cls) -> str: """Return the path for this checklist item.""" return cls._path def __repr__(cls) -> str: """Return a representation of this checklist item.""" return f"" def __call__(cls, *args, **kwargs): """Return a pytest mark decorator for the checklist item.""" # If called with a function as the first argument (direct decorator # usage) and no other arguments, apply the decorator to the function if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): func = args[0] marker = pytest.mark.eip_checklist(cls._path) return marker(func) # Otherwise, return a pytest mark decorator return pytest.mark.eip_checklist(cls._path, *args, **kwargs) class ChecklistItem(metaclass=ChecklistItemMeta): """Base class for checklist items.""" pass class EIPChecklist: """ Main namespace for EIP testing checklist items. This class provides a structured way to reference checklist items for EIP testing. The class structure is automatically converted to callable pytest markers. Note: If you modify this class structure, regenerate the type stub file using: uv run generate_checklist_stubs Examples: @EIPChecklist.Opcode.Test.GasUsage.Normal() def test_normal_gas(): pass @EIPChecklist.Opcode.Test.StackOverflow def test_stack_overflow(): pass """ class General(ChecklistItem): """General checklist items.""" class CodeCoverage(ChecklistItem): """Code coverage checklist items.""" class Eels(ChecklistItem): """EELS code coverage.""" pass class TestCoverage(ChecklistItem): """Test code coverage.""" pass class SecondClient(ChecklistItem): """Second client code coverage.""" pass class Opcode(ChecklistItem): """New opcode checklist items.""" class Test(ChecklistItem): """Test vectors for new opcode.""" class MemExp(ChecklistItem): """Memory expansion tests.""" class ZeroBytesZeroOffset(ChecklistItem): """Zero bytes expansion with zero-offset.""" pass class ZeroBytesMaxOffset(ChecklistItem): """Zero bytes expansion with 2**256-1 offset.""" pass class SingleByte(ChecklistItem): """Single byte expansion.""" pass class ThirtyOneBytes(ChecklistItem, override_name="31_bytes"): """31 bytes expansion.""" pass class ThirtyTwoBytes(ChecklistItem, override_name="32_bytes"): """32 bytes expansion.""" pass class ThirtyThreeBytes(ChecklistItem, override_name="33_bytes"): """33 bytes expansion.""" pass class SixtyFourBytes(ChecklistItem, override_name="64_bytes"): """64 bytes expansion.""" pass class TwoThirtyTwoMinusOneBytes( ChecklistItem, override_name="2_32_minus_one_bytes" ): """2**32-1 bytes expansion.""" pass class TwoThirtyTwoBytes(ChecklistItem, override_name="2_32_bytes"): """2**32 bytes expansion.""" pass class TwoSixtyFourMinusOneBytes( ChecklistItem, override_name="2_64_minus_one_bytes" ): """2**64-1 bytes expansion.""" pass class TwoSixtyFourBytes(ChecklistItem, override_name="2_64_bytes"): """2**64 bytes expansion.""" pass class TwoTwoFiftySixMinusOneBytes( ChecklistItem, override_name="2_256_minus_one_bytes" ): """2**256-1 bytes expansion.""" pass class StackOverflow(ChecklistItem): """Stack overflow test.""" pass class StackUnderflow(ChecklistItem): """Stack underflow test.""" pass class StackComplexOperations(ChecklistItem): """Stack complex operations tests.""" class StackHeights(ChecklistItem): """Stack height tests.""" class Zero(ChecklistItem): """Operation on an empty stack.""" pass class Odd(ChecklistItem): """Operation on a stack with odd height.""" pass class Even(ChecklistItem): """Operation on a stack with even height.""" pass class DataPortionVariables(ChecklistItem, override_name="data_portion_variables"): """ If the opcode contains variables in its data portion, for each variable `n` of the opcode that accesses the nth stack item, test `n` being. """ class Top(ChecklistItem): """`n` is the top stack item.""" pass class Bottom(ChecklistItem): """`n` is the bottom stack item.""" pass class Middle(ChecklistItem): """`n` is the middle stack item.""" pass class ExecutionContext(ChecklistItem): """Execution context tests.""" class Call(ChecklistItem): """CALL context.""" pass class Staticcall(ChecklistItem): """STATICCALL context tests.""" class BanCheck(ChecklistItem): """Ban check for state modifications.""" pass class BanNoModification(ChecklistItem): """Ban even without modifications.""" pass class SubCalls(ChecklistItem): """Sub-calls verification.""" pass class Delegatecall(ChecklistItem): """DELEGATECALL context.""" pass class Storage(ChecklistItem): """DELEGATECALL storage modification.""" pass class Balance(ChecklistItem): """DELEGATECALL balance modification.""" pass class Code(ChecklistItem): """DELEGATECALL code modification.""" pass class Callcode(ChecklistItem): """CALLCODE context.""" pass class Initcode(ChecklistItem): """Initcode execution tests.""" class Behavior(ChecklistItem): """Initcode behavior.""" pass class Tx(ChecklistItem): """Initcode from transaction.""" pass class Opcode(ChecklistItem): """Initcode from opcode.""" pass class Reentry(ChecklistItem): """Initcode re-entry.""" pass class SetCode(ChecklistItem): """Set-code delegated account.""" pass class TxContext(ChecklistItem): """Transaction context dependent.""" pass class BlockContext(ChecklistItem): """Block context dependent.""" pass class ReturnData(ChecklistItem): """Return data tests.""" class Buffer(ChecklistItem): """Return buffer tests.""" class Current(ChecklistItem): """Return buffer at current call context.""" pass class Parent(ChecklistItem): """Return buffer at parent call context.""" pass class GasUsage(ChecklistItem): """Gas usage tests.""" class Normal(ChecklistItem): """Normal operation gas usage.""" pass class MemoryExpansion(ChecklistItem): """Memory expansion gas usage.""" pass class OutOfGasExecution(ChecklistItem): """Out-of-gas due to opcode inputs.""" pass class OutOfGasMemory(ChecklistItem): """Out-of-gas due to memory expansion.""" pass class ExtraGas(ChecklistItem): """Extra gas usage tests.""" pass class OrderOfOperations(ChecklistItem): """Order of operations tests.""" class Exact(ChecklistItem): """Exact gas required.""" pass class Oog(ChecklistItem): """Out-of-gas with 1 gas difference.""" pass class Terminating(ChecklistItem): """Terminating opcode tests.""" class Scenarios(ChecklistItem): """Termination scenarios.""" class TopLevel(ChecklistItem): """Top-level call termination.""" pass class SubLevel(ChecklistItem): """Sub-level call termination.""" pass class Initcode(ChecklistItem): """Initcode termination.""" pass class Rollback(ChecklistItem): """Rollback tests.""" class Balance(ChecklistItem): """Balance changes rollback.""" pass class Storage(ChecklistItem): """Storage changes rollback.""" pass class Contracts(ChecklistItem): """Contract creations rollback.""" pass class Nonce(ChecklistItem): """Nonce increments rollback.""" pass class Logs(ChecklistItem): """Log events rollback.""" pass class OutOfBounds(ChecklistItem): """Out-of-bounds checks.""" class Verify(ChecklistItem): """Verification tests.""" class Max(ChecklistItem): """Max value for each parameter.""" pass class MaxPlusOne(ChecklistItem): """Max value + 1 for each parameter.""" pass class ExceptionalAbort(ChecklistItem): """Exceptional abort conditions.""" pass class DataPortion(ChecklistItem): """Data portion tests.""" class AllZeros(ChecklistItem): """All zeros data portion.""" pass class MaxValue(ChecklistItem): """Max value data portion.""" pass class Jump(ChecklistItem): """Jump into the data portion.""" pass class ContractCreation(ChecklistItem): """Contract creation tests.""" class Address(ChecklistItem): """Address calculation.""" pass class Failure(ChecklistItem): """Creation failure tests.""" class Oog(ChecklistItem): """Out-of-gas failure.""" pass class InsufficientValue(ChecklistItem): """Insufficient value failure.""" pass class Collision(ChecklistItem): """Address collision failure.""" pass class Recursive(ChecklistItem): """Recursive contract creation.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class Invalid(ChecklistItem): """Invalid before/after fork.""" pass class At(ChecklistItem): """Behavior at transition block.""" pass class Precompile(ChecklistItem): """New precompile checklist items.""" class Test(ChecklistItem): """Test vectors for new precompile.""" class CallContexts(ChecklistItem): """Call context tests.""" class Normal(ChecklistItem): """CALL context.""" pass class Delegate(ChecklistItem): """DELEGATECALL context.""" pass class Static(ChecklistItem): """STATICCALL context.""" pass class Callcode(ChecklistItem): """CALLCODE context.""" pass class TxEntry(ChecklistItem): """Transaction entry-point.""" pass class Initcode(ChecklistItem): """Initcode call tests.""" class CREATE(ChecklistItem, override_name="CREATE"): """Call from CREATE/CREATE2 initcode.""" pass class Tx(ChecklistItem): """Call from transaction initcode.""" pass class SetCode(ChecklistItem): """Set-code delegated address.""" pass class Inputs(ChecklistItem): """Input tests.""" class Valid(ChecklistItem): """Valid inputs.""" class Boundary(ChecklistItem): """Valid boundary values.""" pass class Crypto(ChecklistItem): """Valid cryptographic inputs.""" pass class AllZeros(ChecklistItem): """All zeros input.""" pass class MaxValues(ChecklistItem): """Max values input.""" pass class Invalid(ChecklistItem): """Invalid inputs.""" class Crypto(ChecklistItem): """Invalid cryptographic inputs.""" pass class Corrupted(ChecklistItem): """Corrupted inputs.""" pass class ValueTransfer(ChecklistItem): """Value transfer tests.""" class Fee(ChecklistItem): """Fee-based precompile tests.""" class Under(ChecklistItem): """Under required fee.""" pass class Exact(ChecklistItem): """Exact required fee.""" pass class Over(ChecklistItem): """Over required fee.""" pass class NoFee(ChecklistItem): """No-fee precompile.""" pass class OutOfBounds(ChecklistItem): """Out-of-bounds checks.""" class Max(ChecklistItem): """Max value for each input.""" pass class MaxPlusOne(ChecklistItem): """Max value + 1 for each input.""" pass class InputLengths(ChecklistItem): """Input length tests.""" class Zero(ChecklistItem): """Zero-length calldata.""" pass class Static(ChecklistItem): """Static input length tests.""" class Correct(ChecklistItem): """Correct static-length calldata.""" pass class TooShort(ChecklistItem): """Calldata too short.""" pass class TooLong(ChecklistItem): """Calldata too long.""" pass class Dynamic(ChecklistItem): """Dynamic input length tests.""" class Valid(ChecklistItem): """Valid dynamic lengths.""" pass class TooShort(ChecklistItem): """Calldata too short.""" pass class TooLong(ChecklistItem): """Calldata too long.""" pass class GasUsage(ChecklistItem): """Gas usage tests.""" class Constant(ChecklistItem): """Constant gas cost tests.""" class Exact(ChecklistItem): """Exact gas consumption.""" pass class Oog(ChecklistItem): """Out-of-gas error.""" pass class Dynamic(ChecklistItem): """Dynamic gas cost tests.""" class Exact(ChecklistItem): """Exact gas consumption.""" pass class Oog(ChecklistItem): """Out-of-gas error.""" pass class ExcessiveGasUsage(ChecklistItem): """Excessive gas usage.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class Before(ChecklistItem): """Before fork activation tests.""" class InvalidInput(ChecklistItem): """Invalid input call.""" pass class ZeroGas(ChecklistItem): """Zero-gas call.""" pass class Cold(ChecklistItem): """Cold precompile address.""" pass class After(ChecklistItem): """After fork activation tests.""" class Warm(ChecklistItem): """Warm precompile address.""" pass class RemovedPrecompile(ChecklistItem): """Removed precompile checklist items.""" class Test(ChecklistItem): """Test vectors for removed precompile.""" class ForkTransition(ChecklistItem): """Fork transition tests.""" class Operational(ChecklistItem): """Precompile operation on fork activation.""" pass class Before(ChecklistItem): """Before fork tests.""" class Warm(ChecklistItem): """Warm precompile address.""" pass class After(ChecklistItem): """After fork tests.""" class Cold(ChecklistItem): """Cold precompile address.""" pass class SystemContract(ChecklistItem): """New system contract checklist items.""" class Test(ChecklistItem): """Test vectors for new system contract.""" class CallContexts(ChecklistItem): """Call context tests.""" class Normal(ChecklistItem): """CALL context.""" pass class Delegate(ChecklistItem): """DELEGATECALL context.""" pass class Static(ChecklistItem): """STATICCALL context.""" pass class Callcode(ChecklistItem): """CALLCODE context.""" pass class TxEntry(ChecklistItem): """Transaction entry-point.""" pass class Initcode(ChecklistItem): """Initcode call tests.""" class CREATE(ChecklistItem, override_name="CREATE"): """Call from CREATE/CREATE2 initcode.""" pass class Tx(ChecklistItem): """Call from transaction initcode.""" pass class SetCode(ChecklistItem): """Set-code delegated address.""" pass class Inputs(ChecklistItem): """Input tests.""" class Valid(ChecklistItem): """Valid inputs.""" pass class Boundary(ChecklistItem): """Boundary values.""" pass class AllZeros(ChecklistItem): """All zeros input.""" pass class MaxValues(ChecklistItem): """Max values input.""" pass class Invalid(ChecklistItem): """Invalid inputs.""" class Checks(ChecklistItem): """Invalid validity checks.""" pass class Crypto(ChecklistItem): """Invalid cryptographic inputs.""" pass class Corrupted(ChecklistItem): """Corrupted inputs.""" pass class ValueTransfer(ChecklistItem): """Value transfer tests.""" class Fee(ChecklistItem): """Fee-based system contract tests.""" class Under(ChecklistItem): """Under required fee.""" pass class Exact(ChecklistItem): """Exact required fee.""" pass class Over(ChecklistItem): """Over required fee.""" pass class NoFee(ChecklistItem): """No-fee system contract.""" pass class OutOfBounds(ChecklistItem): """Out-of-bounds checks.""" class Max(ChecklistItem): """Max value for each input.""" pass class MaxPlusOne(ChecklistItem): """Max value + 1 for each input.""" pass class InputLengths(ChecklistItem): """Input length tests.""" class Zero(ChecklistItem): """Zero-length calldata.""" pass class Static(ChecklistItem): """Static input length tests.""" class Correct(ChecklistItem): """Correct static-length calldata.""" pass class TooShort(ChecklistItem): """Calldata too short.""" pass class TooLong(ChecklistItem): """Calldata too long.""" pass class Dynamic(ChecklistItem): """Dynamic input length tests.""" class Valid(ChecklistItem): """Valid dynamic lengths.""" pass class TooShort(ChecklistItem): """Calldata too short.""" pass class TooLong(ChecklistItem): """Calldata too long.""" pass class GasUsage(ChecklistItem): """Gas usage tests.""" class Constant(ChecklistItem): """Constant gas cost tests.""" class Exact(ChecklistItem): """Exact gas consumption.""" pass class Oog(ChecklistItem): """Out-of-gas error.""" pass class Dynamic(ChecklistItem): """Dynamic gas cost tests.""" class Exact(ChecklistItem): """Exact gas consumption.""" pass class Oog(ChecklistItem): """Out-of-gas error.""" pass class ExcessiveGas(ChecklistItem): """Excessive gas tests.""" class BlockGas(ChecklistItem): """Exhaust block gas limit.""" pass class SystemCall(ChecklistItem): """Excessive gas on system call.""" pass class Deployment(ChecklistItem): """Deployment tests.""" class Missing(ChecklistItem): """Missing system contract.""" pass class Address(ChecklistItem): """Deployment address verification.""" pass class ContractVariations(ChecklistItem): """Contract variation tests.""" class Networks(ChecklistItem): """Different network variations.""" pass class ContractSubstitution(ChecklistItem): """Contract substitution tests.""" class ReturnLengths(ChecklistItem): """Modified return value lengths.""" pass class Logs(ChecklistItem): """Modified logs.""" pass class RaisesException(ChecklistItem, override_name="exception"): """Modified to cause exception.""" pass class GasLimitSuccess(ChecklistItem): """30M gas consumption success.""" pass class GasLimitFailure(ChecklistItem): """30M+1 gas consumption failure.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class CallBeforeFork(ChecklistItem): """Call system contract before fork.""" pass class TransactionType(ChecklistItem): """New transaction type checklist items.""" class Test(ChecklistItem): """Test vectors for new transaction type.""" class IntrinsicValidity(ChecklistItem): """Intrinsic validity tests.""" class GasLimit(ChecklistItem): """Gas limit tests.""" class Exact(ChecklistItem): """Exact intrinsic gas.""" pass class Insufficient(ChecklistItem): """Insufficient gas.""" pass class MaxFee(ChecklistItem): """Max fee tests.""" class MaxPriorityLowerThanMaxFee(ChecklistItem): """Max priority < max fee.""" pass class MaxPriorityEqualToMaxFee(ChecklistItem): """Max priority == max fee.""" pass class BaseLower(ChecklistItem): """Max fee < base fee.""" pass class BaseEqual(ChecklistItem): """Max fee == base fee.""" pass class ChainId(ChecklistItem): """Chain ID validation.""" pass class NonceMinusOne(ChecklistItem): """Nonce == sender.nonce - 1.""" pass class NoncePlusOne(ChecklistItem): """Nonce == sender.nonce + 1.""" pass class NonceExact(ChecklistItem): """Nonce == sender.nonce.""" pass class To(ChecklistItem): """To address validation.""" pass class ValueNonZeroInsufficientBalance(ChecklistItem): """Non-zero value with insufficient balance.""" pass class ValueNonZeroSufficientBalance(ChecklistItem): """Non-zero value with sufficient balance.""" pass class ValueZeroInsufficientBalance(ChecklistItem): """Zero value with insufficient balance.""" pass class ValueZeroSufficientBalance(ChecklistItem): """Zero value with sufficient balance.""" pass class DataFloorAboveIntrinsicGasCost(ChecklistItem): """Data floor cost above intrinsic gas.""" pass class Signature(ChecklistItem): """Signature tests.""" class Invalid(ChecklistItem): """Invalid signature tests.""" class FieldOutsideCurve(ChecklistItem): """Field outside curve.""" pass class V(ChecklistItem): """Invalid V values.""" class Two(ChecklistItem, override_name="2"): """V = 2.""" pass class TwentySeven(ChecklistItem, override_name="27"): """V = 27.""" pass class TwentyEight(ChecklistItem, override_name="28"): """V = 28.""" pass class ThirtyFive(ChecklistItem, override_name="35"): """V = 35.""" pass class ThirtySix(ChecklistItem, override_name="36"): """V = 36.""" pass class Max(ChecklistItem): """V = 2**8-1.""" pass class R(ChecklistItem): """Invalid R values.""" class Zero(ChecklistItem, override_name="0"): """R = 0.""" pass class Secp256k1nMinusOne(ChecklistItem): """R = SECP256K1N-1.""" pass class Secp256k1n(ChecklistItem): """R = SECP256K1N.""" pass class Secp256k1nPlusOne(ChecklistItem): """R = SECP256K1N+1.""" pass class MaxMinusOne(ChecklistItem): """R = 2**256-1.""" pass class Max(ChecklistItem): """R = 2**256.""" pass class S(ChecklistItem): """Invalid S values.""" class Zero(ChecklistItem, override_name="0"): """S = 0.""" pass class Secp256k1nHalfMinusOne(ChecklistItem): """S = SECP256K1N//2-1.""" pass class Secp256k1nHalf(ChecklistItem): """S = SECP256K1N//2.""" pass class Secp256k1nHalfPlusOne(ChecklistItem): """S = SECP256K1N//2+1.""" pass class Secp256k1nMinusOne(ChecklistItem): """S = SECP256K1N-1.""" pass class Secp256k1n(ChecklistItem): """S = SECP256K1N.""" pass class Secp256k1nPlusOne(ChecklistItem): """S = SECP256K1N+1.""" pass class MaxMinusOne(ChecklistItem): """S = 2**256-1.""" pass class Max(ChecklistItem): """S = 2**256.""" pass class Complement(ChecklistItem): """S = SECP256K1N - S.""" pass class TxScopedAttributes(ChecklistItem): """Transaction-scoped attributes.""" class Read(ChecklistItem): """Read attributes from EVM.""" pass class OlderTxTypes(ChecklistItem): """Attributes on older tx types.""" pass class Persistent(ChecklistItem): """Persistent values.""" class Throughout(ChecklistItem): """Persist throughout transaction.""" pass class Reset(ChecklistItem): """Reset on subsequent transactions.""" pass class Encoding(ChecklistItem): """Encoding tests.""" class FieldSizes(ChecklistItem): """Field size tests.""" class LeadingZero(ChecklistItem): """Add leading zero byte.""" pass class RemoveByte(ChecklistItem): """Remove single byte.""" pass class ListField(ChecklistItem): """List field tests.""" class Zero(ChecklistItem): """Zero-element list.""" pass class Max(ChecklistItem): """Max count list.""" pass class MaxPlusOne(ChecklistItem): """Max count plus one.""" pass class MissingFields(ChecklistItem): """Missing fields.""" pass class ExtraFields(ChecklistItem): """Extra fields.""" pass class Truncated(ChecklistItem): """Truncated serialization.""" pass class ExtraBytes(ChecklistItem): """Extra bytes in serialization.""" pass class NewTypes(ChecklistItem): """New type encoding tests.""" class IncorrectEncoding(ChecklistItem): """Incorrect encoding.""" pass class OutOfBounds(ChecklistItem): """Out-of-bounds checks.""" class Max(ChecklistItem): """Max value for each field.""" pass class MaxPlusOne(ChecklistItem): """Max value + 1 for each field.""" pass class ContractCreation(ChecklistItem): """Contract creation with new tx type.""" pass class SenderAccount(ChecklistItem): """Sender account modifications.""" class Nonce(ChecklistItem): """Nonce increment.""" pass class Balance(ChecklistItem): """Balance reduction.""" pass class BlockInteractions(ChecklistItem): """Block level interactions.""" class SingleTx(ChecklistItem): """Single transaction in block.""" class Invalid(ChecklistItem): """Invalid gas limit.""" pass class Valid(ChecklistItem): """Valid gas limit.""" pass class LastTx(ChecklistItem): """Last transaction in block.""" class Valid(ChecklistItem): """Valid cumulative gas.""" pass class Invalid(ChecklistItem): """Invalid cumulative gas.""" pass class Eip7825(ChecklistItem): """EIP-7825 gas limit tests.""" class Invalid(ChecklistItem): """Exceeds EIP-7825 limit.""" pass class Valid(ChecklistItem): """Within EIP-7825 limit.""" pass class MixedTxs(ChecklistItem): """Mixed transaction types.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class Before(ChecklistItem): """Before fork activation.""" pass class BlockHeaderField(ChecklistItem): """New block header field checklist items.""" class Test(ChecklistItem): """Test vectors for new block header field.""" class Genesis(ChecklistItem): """Genesis value test.""" pass class ValueBehavior(ChecklistItem): """Value behavior tests.""" class Accept(ChecklistItem): """Block accepted with correct value.""" pass class Reject(ChecklistItem): """Block rejected with incorrect value.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class Initial(ChecklistItem): """Initial value at fork.""" pass class Before(ChecklistItem): """Before fork activation.""" pass class After(ChecklistItem): """After fork activation.""" pass class BlockBodyField(ChecklistItem): """New block body field checklist items.""" class Test(ChecklistItem): """Test vectors for new block body field.""" class ValueBehavior(ChecklistItem): """Value behavior tests.""" class Accept(ChecklistItem): """Block accepted with correct value.""" pass class Reject(ChecklistItem): """Block rejected with incorrect value.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class Before(ChecklistItem): """Before fork activation.""" pass class After(ChecklistItem): """After fork activation.""" pass class GasCostChanges(ChecklistItem): """Gas cost changes checklist items.""" class Test(ChecklistItem): """Test vectors for gas cost changes.""" class GasUpdatesMeasurement(ChecklistItem): """Measure updated gas costs.""" pass class OutOfGas(ChecklistItem): """Out-of-gas with new prices.""" pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class Before(ChecklistItem): """Before fork activation.""" pass class After(ChecklistItem): """After fork activation.""" pass class GasRefundsChanges(ChecklistItem): """Gas refunds changes checklist items.""" class Test(ChecklistItem): """Test vectors for gas refunds changes.""" class RefundCalculation(ChecklistItem): """Refund calculation tests.""" class Over(ChecklistItem): """Refund over limit.""" pass class Exact(ChecklistItem): """Refund at limit.""" pass class Under(ChecklistItem): """Refund under limit.""" pass class ExceptionalAbort(ChecklistItem): """Exceptional abort tests.""" class Revertable(ChecklistItem): """Revertable operations.""" class Revert(ChecklistItem): """REVERT.""" pass class OutOfGas(ChecklistItem): """Out-of-gas.""" pass class InvalidOpcode(ChecklistItem): """Invalid opcode.""" pass class UpperRevert(ChecklistItem): """Upper frame REVERT.""" pass class NonRevertable(ChecklistItem): """Non-revertable operations.""" class Revert(ChecklistItem): """REVERT at top frame.""" pass class OutOfGas(ChecklistItem): """Out-of-gas at top frame.""" pass class InvalidOpcode(ChecklistItem): """Invalid opcode at top frame.""" pass class CrossFunctional(ChecklistItem): """Cross-functional tests.""" class CalldataCost(ChecklistItem): """Calldata cost refunds.""" pass class BlobCountChanges(ChecklistItem): """Blob count changes checklist items.""" class Test(ChecklistItem): """Test vectors for blob count changes.""" class Eip4844BlobsChanges(ChecklistItem): """EIP-4844 blobs test updates.""" pass class ExecutionLayerRequest(ChecklistItem): """New execution layer request checklist items.""" class Test(ChecklistItem): """Test vectors for new execution layer request.""" class CrossRequestType(ChecklistItem): """Cross-request-type interaction.""" class Update(ChecklistItem): """Update cross-request tests.""" pass class NewTransactionValidityConstraint(ChecklistItem): """New transaction validity constraint checklist items.""" class Test(ChecklistItem): """Test vectors for the new validity constraint.""" class ForkTransition(ChecklistItem): """ Tests for the new transaction validity constraint on fork boundary. """ class AcceptedBeforeFork(ChecklistItem): """ Verify that a block before the activation fork is accepted even when the new constraint is not met. """ pass class AcceptedAfterFork(ChecklistItem): """ Verify that a block after the activation fork is accepted when the new validity constraint is met. """ pass class RejectedAfterFork(ChecklistItem): """ Verify that a block after the activation fork is rejected when the new validity constraint is not met. """ pass class ModifiedTransactionValidityConstraint(ChecklistItem): """Modified transaction validity constraint checklist items.""" class Test(ChecklistItem): """Test vectors for the modified validity constraint.""" class ForkTransition(ChecklistItem): """ Tests for the modified transaction validity constraint on fork boundary. """ class AcceptedBeforeFork(ChecklistItem): """ Verify that a block before the activation fork is accepted when the existing constraint is met and, ideally, the new constraint is not met. """ pass class RejectedBeforeFork(ChecklistItem): """ Verify that a block before the activation fork is rejected when the existing constraint is not met and, ideally, the new constraint is met. """ pass class AcceptedAfterFork(ChecklistItem): """ Verify that a block after the activation fork is accepted when the new validity constraint is met. """ pass class RejectedAfterFork(ChecklistItem): """ Verify that a block after the activation fork is rejected when the new validity constraint is not met. """ pass class BlockLevelConstraint(ChecklistItem): """Block-level validation constraint checklist items.""" class Test(ChecklistItem): """Test vectors for block-level constraint.""" class Boundary(ChecklistItem): """Boundary condition tests.""" class Under(ChecklistItem): """ Verify that a block with constraint value at limit minus one is accepted. """ pass class Exact(ChecklistItem): """ Verify that a block with constraint value exactly at limit is accepted. """ pass class Over(ChecklistItem): """ Verify that a block with constraint value at limit plus one is rejected. """ pass class Content(ChecklistItem): """Content variation tests.""" class TransactionTypes(ChecklistItem): """ Verify constraint behavior with all supported transaction types. """ pass class Logs(ChecklistItem): """ Verify constraint behavior when transactions emit logs. """ pass class Receipts(ChecklistItem): """ Verify constraint behavior with varying receipt sizes. """ pass class Withdrawals(ChecklistItem): """ Verify constraint behavior with non-empty withdrawals list. """ pass class ForkTransition(ChecklistItem): """Fork transition tests.""" class AcceptedBeforeFork(ChecklistItem): """ Verify that a block before the activation fork is accepted even when the new constraint is not met. """ pass class AcceptedAfterFork(ChecklistItem): """ Verify that a block after the activation fork is accepted when the new constraint is met. """ pass class RejectedAfterFork(ChecklistItem): """ Verify that a block after the activation fork is rejected when the new constraint is not met. """ pass ================================================ FILE: src/ethereum_test_checklists/eip_checklist.pyi ================================================ """ Type stubs for EIP checklist - auto-generated. DO NOT EDIT MANUALLY - This file is generated by running `uv run generate_checklist_stubs` """ from typing import Any, Callable, TypeVar, overload import pytest F = TypeVar("F", bound=Callable[..., Any]) class _CallableChecklistItem: """Base type for all callable checklist items.""" @overload def __call__(self, func: F) -> F: ... @overload def __call__(self, *, eip: Any = ..., **kwargs: Any) -> pytest.MarkDecorator: ... def __str__(self) -> str: ... class EIPChecklist: class BlobCountChanges(_CallableChecklistItem): class Test(_CallableChecklistItem): Eip4844BlobsChanges: _CallableChecklistItem class BlockBodyField(_CallableChecklistItem): class Test(_CallableChecklistItem): class ForkTransition(_CallableChecklistItem): After: _CallableChecklistItem Before: _CallableChecklistItem class ValueBehavior(_CallableChecklistItem): Accept: _CallableChecklistItem Reject: _CallableChecklistItem class BlockHeaderField(_CallableChecklistItem): class Test(_CallableChecklistItem): Genesis: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): After: _CallableChecklistItem Before: _CallableChecklistItem Initial: _CallableChecklistItem class ValueBehavior(_CallableChecklistItem): Accept: _CallableChecklistItem Reject: _CallableChecklistItem class BlockLevelConstraint(_CallableChecklistItem): class Test(_CallableChecklistItem): class Boundary(_CallableChecklistItem): Exact: _CallableChecklistItem Over: _CallableChecklistItem Under: _CallableChecklistItem class Content(_CallableChecklistItem): Logs: _CallableChecklistItem Receipts: _CallableChecklistItem TransactionTypes: _CallableChecklistItem Withdrawals: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): AcceptedAfterFork: _CallableChecklistItem AcceptedBeforeFork: _CallableChecklistItem RejectedAfterFork: _CallableChecklistItem class ExecutionLayerRequest(_CallableChecklistItem): class Test(_CallableChecklistItem): class CrossRequestType(_CallableChecklistItem): Update: _CallableChecklistItem class GasCostChanges(_CallableChecklistItem): class Test(_CallableChecklistItem): GasUpdatesMeasurement: _CallableChecklistItem OutOfGas: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): After: _CallableChecklistItem Before: _CallableChecklistItem class GasRefundsChanges(_CallableChecklistItem): class Test(_CallableChecklistItem): class CrossFunctional(_CallableChecklistItem): CalldataCost: _CallableChecklistItem class ExceptionalAbort(_CallableChecklistItem): class NonRevertable(_CallableChecklistItem): InvalidOpcode: _CallableChecklistItem OutOfGas: _CallableChecklistItem Revert: _CallableChecklistItem class Revertable(_CallableChecklistItem): InvalidOpcode: _CallableChecklistItem OutOfGas: _CallableChecklistItem Revert: _CallableChecklistItem UpperRevert: _CallableChecklistItem class RefundCalculation(_CallableChecklistItem): Exact: _CallableChecklistItem Over: _CallableChecklistItem Under: _CallableChecklistItem class General(_CallableChecklistItem): class CodeCoverage(_CallableChecklistItem): Eels: _CallableChecklistItem SecondClient: _CallableChecklistItem TestCoverage: _CallableChecklistItem class ModifiedTransactionValidityConstraint(_CallableChecklistItem): class Test(_CallableChecklistItem): class ForkTransition(_CallableChecklistItem): AcceptedAfterFork: _CallableChecklistItem AcceptedBeforeFork: _CallableChecklistItem RejectedAfterFork: _CallableChecklistItem RejectedBeforeFork: _CallableChecklistItem class NewTransactionValidityConstraint(_CallableChecklistItem): class Test(_CallableChecklistItem): class ForkTransition(_CallableChecklistItem): AcceptedAfterFork: _CallableChecklistItem AcceptedBeforeFork: _CallableChecklistItem RejectedAfterFork: _CallableChecklistItem class Opcode(_CallableChecklistItem): class Test(_CallableChecklistItem): ExceptionalAbort: _CallableChecklistItem StackOverflow: _CallableChecklistItem StackUnderflow: _CallableChecklistItem class ContractCreation(_CallableChecklistItem): Address: _CallableChecklistItem Recursive: _CallableChecklistItem class Failure(_CallableChecklistItem): Collision: _CallableChecklistItem InsufficientValue: _CallableChecklistItem Oog: _CallableChecklistItem class DataPortion(_CallableChecklistItem): AllZeros: _CallableChecklistItem Jump: _CallableChecklistItem MaxValue: _CallableChecklistItem class ExecutionContext(_CallableChecklistItem): BlockContext: _CallableChecklistItem Call: _CallableChecklistItem Callcode: _CallableChecklistItem SetCode: _CallableChecklistItem TxContext: _CallableChecklistItem class Delegatecall(_CallableChecklistItem): Balance: _CallableChecklistItem Code: _CallableChecklistItem Storage: _CallableChecklistItem class Initcode(_CallableChecklistItem): Reentry: _CallableChecklistItem class Behavior(_CallableChecklistItem): Opcode: _CallableChecklistItem Tx: _CallableChecklistItem class Staticcall(_CallableChecklistItem): BanCheck: _CallableChecklistItem BanNoModification: _CallableChecklistItem SubCalls: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): At: _CallableChecklistItem Invalid: _CallableChecklistItem class GasUsage(_CallableChecklistItem): ExtraGas: _CallableChecklistItem MemoryExpansion: _CallableChecklistItem Normal: _CallableChecklistItem OutOfGasExecution: _CallableChecklistItem OutOfGasMemory: _CallableChecklistItem class OrderOfOperations(_CallableChecklistItem): Exact: _CallableChecklistItem Oog: _CallableChecklistItem class MemExp(_CallableChecklistItem): SingleByte: _CallableChecklistItem SixtyFourBytes: _CallableChecklistItem ThirtyOneBytes: _CallableChecklistItem ThirtyThreeBytes: _CallableChecklistItem ThirtyTwoBytes: _CallableChecklistItem TwoSixtyFourBytes: _CallableChecklistItem TwoSixtyFourMinusOneBytes: _CallableChecklistItem TwoThirtyTwoBytes: _CallableChecklistItem TwoThirtyTwoMinusOneBytes: _CallableChecklistItem TwoTwoFiftySixMinusOneBytes: _CallableChecklistItem ZeroBytesMaxOffset: _CallableChecklistItem ZeroBytesZeroOffset: _CallableChecklistItem class OutOfBounds(_CallableChecklistItem): class Verify(_CallableChecklistItem): Max: _CallableChecklistItem MaxPlusOne: _CallableChecklistItem class ReturnData(_CallableChecklistItem): class Buffer(_CallableChecklistItem): Current: _CallableChecklistItem Parent: _CallableChecklistItem class StackComplexOperations(_CallableChecklistItem): class DataPortionVariables(_CallableChecklistItem): Bottom: _CallableChecklistItem Middle: _CallableChecklistItem Top: _CallableChecklistItem class StackHeights(_CallableChecklistItem): Even: _CallableChecklistItem Odd: _CallableChecklistItem Zero: _CallableChecklistItem class Terminating(_CallableChecklistItem): class Rollback(_CallableChecklistItem): Balance: _CallableChecklistItem Contracts: _CallableChecklistItem Logs: _CallableChecklistItem Nonce: _CallableChecklistItem Storage: _CallableChecklistItem class Scenarios(_CallableChecklistItem): Initcode: _CallableChecklistItem SubLevel: _CallableChecklistItem TopLevel: _CallableChecklistItem class Precompile(_CallableChecklistItem): class Test(_CallableChecklistItem): ExcessiveGasUsage: _CallableChecklistItem class CallContexts(_CallableChecklistItem): Callcode: _CallableChecklistItem Delegate: _CallableChecklistItem Normal: _CallableChecklistItem SetCode: _CallableChecklistItem Static: _CallableChecklistItem TxEntry: _CallableChecklistItem class Initcode(_CallableChecklistItem): CREATE: _CallableChecklistItem Tx: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): class After(_CallableChecklistItem): Warm: _CallableChecklistItem class Before(_CallableChecklistItem): Cold: _CallableChecklistItem InvalidInput: _CallableChecklistItem ZeroGas: _CallableChecklistItem class GasUsage(_CallableChecklistItem): class Constant(_CallableChecklistItem): Exact: _CallableChecklistItem Oog: _CallableChecklistItem class Dynamic(_CallableChecklistItem): Exact: _CallableChecklistItem Oog: _CallableChecklistItem class InputLengths(_CallableChecklistItem): Zero: _CallableChecklistItem class Dynamic(_CallableChecklistItem): TooLong: _CallableChecklistItem TooShort: _CallableChecklistItem Valid: _CallableChecklistItem class Static(_CallableChecklistItem): Correct: _CallableChecklistItem TooLong: _CallableChecklistItem TooShort: _CallableChecklistItem class Inputs(_CallableChecklistItem): AllZeros: _CallableChecklistItem MaxValues: _CallableChecklistItem class Invalid(_CallableChecklistItem): Corrupted: _CallableChecklistItem Crypto: _CallableChecklistItem class Valid(_CallableChecklistItem): Boundary: _CallableChecklistItem Crypto: _CallableChecklistItem class OutOfBounds(_CallableChecklistItem): Max: _CallableChecklistItem MaxPlusOne: _CallableChecklistItem class ValueTransfer(_CallableChecklistItem): NoFee: _CallableChecklistItem class Fee(_CallableChecklistItem): Exact: _CallableChecklistItem Over: _CallableChecklistItem Under: _CallableChecklistItem class RemovedPrecompile(_CallableChecklistItem): class Test(_CallableChecklistItem): class ForkTransition(_CallableChecklistItem): Operational: _CallableChecklistItem class After(_CallableChecklistItem): Cold: _CallableChecklistItem class Before(_CallableChecklistItem): Warm: _CallableChecklistItem class SystemContract(_CallableChecklistItem): class Test(_CallableChecklistItem): class CallContexts(_CallableChecklistItem): Callcode: _CallableChecklistItem Delegate: _CallableChecklistItem Normal: _CallableChecklistItem SetCode: _CallableChecklistItem Static: _CallableChecklistItem TxEntry: _CallableChecklistItem class Initcode(_CallableChecklistItem): CREATE: _CallableChecklistItem Tx: _CallableChecklistItem class ContractSubstitution(_CallableChecklistItem): GasLimitFailure: _CallableChecklistItem GasLimitSuccess: _CallableChecklistItem Logs: _CallableChecklistItem RaisesException: _CallableChecklistItem ReturnLengths: _CallableChecklistItem class ContractVariations(_CallableChecklistItem): Networks: _CallableChecklistItem class Deployment(_CallableChecklistItem): Address: _CallableChecklistItem Missing: _CallableChecklistItem class ExcessiveGas(_CallableChecklistItem): BlockGas: _CallableChecklistItem SystemCall: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): CallBeforeFork: _CallableChecklistItem class GasUsage(_CallableChecklistItem): class Constant(_CallableChecklistItem): Exact: _CallableChecklistItem Oog: _CallableChecklistItem class Dynamic(_CallableChecklistItem): Exact: _CallableChecklistItem Oog: _CallableChecklistItem class InputLengths(_CallableChecklistItem): Zero: _CallableChecklistItem class Dynamic(_CallableChecklistItem): TooLong: _CallableChecklistItem TooShort: _CallableChecklistItem Valid: _CallableChecklistItem class Static(_CallableChecklistItem): Correct: _CallableChecklistItem TooLong: _CallableChecklistItem TooShort: _CallableChecklistItem class Inputs(_CallableChecklistItem): AllZeros: _CallableChecklistItem Boundary: _CallableChecklistItem MaxValues: _CallableChecklistItem Valid: _CallableChecklistItem class Invalid(_CallableChecklistItem): Checks: _CallableChecklistItem Corrupted: _CallableChecklistItem Crypto: _CallableChecklistItem class OutOfBounds(_CallableChecklistItem): Max: _CallableChecklistItem MaxPlusOne: _CallableChecklistItem class ValueTransfer(_CallableChecklistItem): NoFee: _CallableChecklistItem class Fee(_CallableChecklistItem): Exact: _CallableChecklistItem Over: _CallableChecklistItem Under: _CallableChecklistItem class TransactionType(_CallableChecklistItem): class Test(_CallableChecklistItem): ContractCreation: _CallableChecklistItem class BlockInteractions(_CallableChecklistItem): MixedTxs: _CallableChecklistItem class Eip7825(_CallableChecklistItem): Invalid: _CallableChecklistItem Valid: _CallableChecklistItem class LastTx(_CallableChecklistItem): Invalid: _CallableChecklistItem Valid: _CallableChecklistItem class SingleTx(_CallableChecklistItem): Invalid: _CallableChecklistItem Valid: _CallableChecklistItem class Encoding(_CallableChecklistItem): ExtraBytes: _CallableChecklistItem ExtraFields: _CallableChecklistItem MissingFields: _CallableChecklistItem Truncated: _CallableChecklistItem class FieldSizes(_CallableChecklistItem): LeadingZero: _CallableChecklistItem RemoveByte: _CallableChecklistItem class ListField(_CallableChecklistItem): Max: _CallableChecklistItem MaxPlusOne: _CallableChecklistItem Zero: _CallableChecklistItem class NewTypes(_CallableChecklistItem): IncorrectEncoding: _CallableChecklistItem class ForkTransition(_CallableChecklistItem): Before: _CallableChecklistItem class IntrinsicValidity(_CallableChecklistItem): ChainId: _CallableChecklistItem DataFloorAboveIntrinsicGasCost: _CallableChecklistItem NonceExact: _CallableChecklistItem NonceMinusOne: _CallableChecklistItem NoncePlusOne: _CallableChecklistItem To: _CallableChecklistItem ValueNonZeroInsufficientBalance: _CallableChecklistItem ValueNonZeroSufficientBalance: _CallableChecklistItem ValueZeroInsufficientBalance: _CallableChecklistItem ValueZeroSufficientBalance: _CallableChecklistItem class GasLimit(_CallableChecklistItem): Exact: _CallableChecklistItem Insufficient: _CallableChecklistItem class MaxFee(_CallableChecklistItem): BaseEqual: _CallableChecklistItem BaseLower: _CallableChecklistItem MaxPriorityEqualToMaxFee: _CallableChecklistItem MaxPriorityLowerThanMaxFee: _CallableChecklistItem class OutOfBounds(_CallableChecklistItem): Max: _CallableChecklistItem MaxPlusOne: _CallableChecklistItem class SenderAccount(_CallableChecklistItem): Balance: _CallableChecklistItem Nonce: _CallableChecklistItem class Signature(_CallableChecklistItem): class Invalid(_CallableChecklistItem): FieldOutsideCurve: _CallableChecklistItem class R(_CallableChecklistItem): Max: _CallableChecklistItem MaxMinusOne: _CallableChecklistItem Secp256k1n: _CallableChecklistItem Secp256k1nMinusOne: _CallableChecklistItem Secp256k1nPlusOne: _CallableChecklistItem Zero: _CallableChecklistItem class S(_CallableChecklistItem): Complement: _CallableChecklistItem Max: _CallableChecklistItem MaxMinusOne: _CallableChecklistItem Secp256k1n: _CallableChecklistItem Secp256k1nHalf: _CallableChecklistItem Secp256k1nHalfMinusOne: _CallableChecklistItem Secp256k1nHalfPlusOne: _CallableChecklistItem Secp256k1nMinusOne: _CallableChecklistItem Secp256k1nPlusOne: _CallableChecklistItem Zero: _CallableChecklistItem class V(_CallableChecklistItem): Max: _CallableChecklistItem ThirtyFive: _CallableChecklistItem ThirtySix: _CallableChecklistItem TwentyEight: _CallableChecklistItem TwentySeven: _CallableChecklistItem Two: _CallableChecklistItem class TxScopedAttributes(_CallableChecklistItem): OlderTxTypes: _CallableChecklistItem Read: _CallableChecklistItem class Persistent(_CallableChecklistItem): Reset: _CallableChecklistItem Throughout: _CallableChecklistItem ================================================ FILE: src/ethereum_test_checklists/tests/__init__.py ================================================ """Tests for ethereum_test_checklists.""" ================================================ FILE: src/ethereum_test_checklists/tests/test_checklist_template_consistency.py ================================================ """Test consistency between checklist template and EIPChecklist class.""" import re from pathlib import Path from typing import Any, Set import pytest from ethereum_test_checklists.eip_checklist import EIPChecklist TEMPLATE_PATH = ( Path(__file__).parent.parent.parent.parent / "docs" / "writing_tests" / "checklist_templates" / "eip_testing_checklist_template.md" ) def extract_markdown_ids(markdown_content: str) -> Set[str]: """Extract all checklist IDs from markdown content.""" # Pattern to match IDs in markdown tables (between backticks in ID column) pattern = r"\|\s*`([^`]+)`\s*\|" ids = set() for match in re.finditer(pattern, markdown_content): potential_id = match.group(1) # Filter out non-ID content - IDs should contain forward slashes if "/" in potential_id: ids.add(potential_id) return ids def get_all_checklist_ids(obj: Any) -> Set[str]: """ Recursively extract all checklist IDs from EIPChecklist and its children. """ ids = set() # Iterate through all attributes of the object for attr_name in dir(obj): # Skip private attributes and methods if attr_name.startswith("_"): continue attr = getattr(obj, attr_name) # Check if this is a class with a _path attribute (our checklist items) if isinstance(attr, type) and hasattr(attr, "_path"): # Get the full path for this item item_path = str(attr) if item_path: # Only add non-empty paths ids.add(item_path) # Recursively get IDs from nested classes nested_ids = get_all_checklist_ids(attr) ids.update(nested_ids) return ids def test_checklist_template_consistency() -> None: """ Test that all IDs in markdown template match EIPChecklist class exactly. """ # Read the markdown template with open(TEMPLATE_PATH, "r", encoding="utf-8") as f: markdown_content = f.read() # Extract IDs from both sources markdown_ids = extract_markdown_ids(markdown_content) checklist_ids = get_all_checklist_ids(EIPChecklist) # Find differences missing_in_checklist = markdown_ids - checklist_ids missing_in_markdown = checklist_ids - markdown_ids # Create detailed error messages errors = [] if missing_in_checklist: errors.append( f"IDs found in markdown template but missing in EIPChecklist class " f"({len(missing_in_checklist)} items):\n" + "\n".join(f" - `{id_}`" for id_ in sorted(missing_in_checklist)) ) if missing_in_markdown: for id_ in missing_in_markdown: if any(item.startswith(id_ + "/") for item in checklist_ids): continue errors.append(f"ID `{id_}` not found in markdown template") if errors: error_message = f"\nTotal markdown IDs: {len(markdown_ids)}\n" error_message += f"Total checklist IDs: {len(checklist_ids)}\n\n" error_message += "\n\n".join(errors) pytest.fail(error_message) def test_checklist_template_exists() -> None: """Test that the checklist template file exists.""" assert TEMPLATE_PATH.exists(), f"Checklist template not found at {TEMPLATE_PATH}" def test_eip_checklist_class_structure() -> None: """Test that the EIPChecklist class has expected structure.""" assert hasattr(EIPChecklist, "General"), "EIPChecklist should have General class" assert hasattr(EIPChecklist, "Opcode"), "EIPChecklist should have Opcode class" assert hasattr(EIPChecklist, "Precompile"), "EIPChecklist should have Precompile class" # Test that the metaclass is working correctly assert str(EIPChecklist.General.CodeCoverage.Eels) == "general/code_coverage/eels" assert ( str(EIPChecklist.Opcode.Test.MemExp.ZeroBytesZeroOffset) == "opcode/test/mem_exp/zero_bytes_zero_offset" ) def test_id_extraction_functions() -> None: """Test that our ID extraction functions work correctly.""" # Test markdown extraction sample_markdown = """ | ID | Description | Status | Tests | | `test/example/id` | Test description | | | | `another/test/path` | Another test | | | """ ids = extract_markdown_ids(sample_markdown) assert "test/example/id" in ids assert "another/test/path" in ids # Test checklist extraction checklist_ids = get_all_checklist_ids(EIPChecklist) assert len(checklist_ids) > 0 assert "general/code_coverage/eels" in checklist_ids def test_eip_checklist_decorator_usage() -> None: """ Test EIPChecklist items work correctly as decorators both with and without parentheses. """ # Test decorator with parentheses @EIPChecklist.Opcode.Test.StackComplexOperations() def test_function_with_parens() -> None: pass # Verify the marker was applied markers = list(test_function_with_parens.pytestmark) # type: ignore[attr-defined] assert len(markers) >= 1 eip_markers = [m for m in markers if m.name == "eip_checklist"] assert len(eip_markers) == 1 assert eip_markers[0].args == ("opcode/test/stack_complex_operations",) # Test decorator without parentheses (direct usage - this is the key fix # for issue #1) @EIPChecklist.Opcode.Test.StackOverflow def test_function_no_parens() -> None: pass # Verify the marker was applied markers = list(test_function_no_parens.pytestmark) # type: ignore[attr-defined] eip_markers = [m for m in markers if m.name == "eip_checklist"] assert len(eip_markers) == 1 assert eip_markers[0].args == ("opcode/test/stack_overflow",) def test_eip_checklist_pytest_param_usage() -> None: """Test that EIPChecklist works correctly in pytest.param marks.""" # Test that parentheses form works in pytest.param param_with_parens = pytest.param( "test_value", marks=EIPChecklist.Opcode.Test.GasUsage.Normal(), id="gas_test" ) # Verify the parameter was created successfully assert param_with_parens.values == ("test_value",) assert param_with_parens.id == "gas_test" assert len(param_with_parens.marks) == 1 assert param_with_parens.marks[0].name == "eip_checklist" # type: ignore[index] assert param_with_parens.marks[0].args == ("opcode/test/gas_usage/normal",) # type: ignore[index] # Test that multiple marks work param_multiple_marks = pytest.param( "test_value", marks=[EIPChecklist.Opcode.Test.StackComplexOperations(), pytest.mark.slow], # type: ignore[list-item] id="complex_test", ) # Verify multiple marks assert len(param_multiple_marks.marks) == 2 eip_mark = next(m for m in param_multiple_marks.marks if m.name == "eip_checklist") assert eip_mark.args == ("opcode/test/stack_complex_operations",) # Test that non-parentheses form fails gracefully with pytest.param # (This documents the expected behavior - parentheses are required) with pytest.raises((TypeError, AssertionError)): pytest.param( "test_value", # Without () should fail marks=EIPChecklist.Opcode.Test.StackOverflow, # type: ignore[arg-type] id="should_fail", ) ================================================ FILE: src/ethereum_test_exceptions/__init__.py ================================================ """Exceptions for invalid execution.""" from .engine_api import EngineAPIError from .exception_mapper import ( ExceptionMapper, ExceptionMapperValidator, ExceptionWithMessage, ) from .exceptions import ( BlockException, BlockExceptionInstanceOrList, EOFException, EOFExceptionInstanceOrList, ExceptionBase, ExceptionInstanceOrList, TransactionException, TransactionExceptionInstanceOrList, UndefinedException, ) __all__ = [ "BlockException", "BlockExceptionInstanceOrList", "EOFException", "EOFExceptionInstanceOrList", "ExceptionBase", "EngineAPIError", "ExceptionMapper", "ExceptionInstanceOrList", "ExceptionWithMessage", "ExceptionMapperValidator", "TransactionException", "UndefinedException", "TransactionExceptionInstanceOrList", ] ================================================ FILE: src/ethereum_test_exceptions/engine_api.py ================================================ """Engine API error defniitions.""" from enum import IntEnum class EngineAPIError(IntEnum): """List of Engine API errors.""" ParseError = -32700 InvalidRequest = -32600 MethodNotFound = -32601 InvalidParams = -32602 InternalError = -32603 ServerError = -32000 UnknownPayload = -38001 InvalidForkchoiceState = -38002 InvalidPayloadAttributes = -38003 TooLargeRequest = -38004 UnsupportedFork = -38005 ================================================ FILE: src/ethereum_test_exceptions/exception_mapper.py ================================================ """EEST Exception mapper.""" import re from abc import ABC from typing import Any, ClassVar, Dict, Generic, List from pydantic import BaseModel, BeforeValidator, ValidationInfo from .exceptions import ExceptionBase, ExceptionBoundTypeVar, UndefinedException class ExceptionMapper(ABC): """ Translate between EEST exceptions and error strings returned by client's t8n or other tools. """ mapper_name: str _mapping_compiled_regex: Dict[ExceptionBase, re.Pattern] mapping_substring: ClassVar[Dict[ExceptionBase, str]] """ Mapping of exception to substring that should be present in the error message. Items in this mapping are used for substring matching (`substring in message`). """ mapping_regex: ClassVar[Dict[ExceptionBase, str]] """ Mapping of exception to regex that should be present in the error message. Items in this mapping are compiled into regex patterns for faster matching, and then used for regex matching (`pattern.search(message)`). """ reliable: ClassVar[bool] = True """ Whether the exceptions returned by the tool are reliable and can be accurately mapped to the exceptions in this class. """ def __init__(self) -> None: """Initialize the exception mapper.""" # Ensure that the subclass has properly defined mapping_substring # before accessing it assert self.mapping_substring is not None, "mapping_substring must be defined in subclass" assert self.mapping_regex is not None, "mapping_regex must be defined in subclass" self.mapper_name = self.__class__.__name__ self._mapping_compiled_regex = { exception: re.compile(message) for exception, message in self.mapping_regex.items() } def message_to_exception( self, exception_string: str ) -> List[ExceptionBase] | UndefinedException: """Match a formatted string to an exception.""" exceptions: List[ExceptionBase] = [] for exception, substring in self.mapping_substring.items(): if substring in exception_string: exceptions.append(exception) for exception, pattern in self._mapping_compiled_regex.items(): if pattern.search(exception_string): exceptions.append(exception) if exceptions: return exceptions return UndefinedException(exception_string, mapper_name=self.mapper_name) class ExceptionWithMessage(BaseModel, Generic[ExceptionBoundTypeVar]): """ Class that contains the exception along with the verbatim message from the external tool/client. """ exceptions: List[ExceptionBoundTypeVar] message: str def __contains__(self, item: Any) -> bool: """Check if the item is in the exceptions list.""" if isinstance(item, list): return any(exception in self.exceptions for exception in item) return item in self.exceptions def __str__(self) -> str: """Return the string representation of the exception message.""" return f"[{' | '.join(str(e) for e in self.exceptions)}] {self.message}" def mapper_validator(v: str, info: ValidationInfo) -> Dict[str, Any] | UndefinedException | None: """ Use the exception mapper that must be included in the context to map the exception from the external tool. """ if v is None: return v if not isinstance(info.context, dict): return UndefinedException(v, mapper_name="UndefinedExceptionMapper: No context") exception_mapper = info.context.get("exception_mapper") if exception_mapper is None: return UndefinedException(v, mapper_name="UndefinedExceptionMapper: No mapper") assert isinstance(exception_mapper, ExceptionMapper), ( f"Invalid mapper provided {exception_mapper}" ) exceptions = exception_mapper.message_to_exception(v) if isinstance(exceptions, UndefinedException): return exceptions return { "exceptions": exceptions, "message": v, } ExceptionMapperValidator = BeforeValidator(mapper_validator) """ Validator that can be used to annotate a pydantic field in a model that is meant to be parsed from an external tool or client. The annotated type must be an union that can include `None`, `UndefinedException` and a custom model as: ``` class BlockExceptionWithMessage(ExceptionWithMessage[BlockException]): pass ``` where `BlockException` can be any derivation of `ExceptionBase`. The `message` attribute is the verbatim message received from the external tool or client, and can be used to be printed for extra context information in case of failures. """ ================================================ FILE: src/ethereum_test_exceptions/exceptions/__init__.py ================================================ """Exceptions for invalid execution.""" from .base import ExceptionBase, UndefinedException, from_pipe_str, to_pipe_str from .block import BlockException from .eof import EOFException from .exceptions_types import ( BlockExceptionInstanceOrList, EOFExceptionInstanceOrList, ExceptionBoundTypeVar, ExceptionInstanceOrList, TransactionExceptionInstanceOrList, ) from .transaction import TransactionException __all__ = [ "ExceptionBase", "UndefinedException", "from_pipe_str", "to_pipe_str", "TransactionException", "BlockException", "EOFException", "ExceptionInstanceOrList", "TransactionExceptionInstanceOrList", "BlockExceptionInstanceOrList", "EOFExceptionInstanceOrList", "ExceptionBoundTypeVar", ] ================================================ FILE: src/ethereum_test_exceptions/exceptions/base.py ================================================ """Base classes and infrastructure for exceptions.""" from enum import Enum from typing import Any, Dict from pydantic import GetCoreSchemaHandler from pydantic_core.core_schema import ( PlainValidatorFunctionSchema, no_info_plain_validator_function, to_string_ser_schema, ) _exception_classes: Dict[str, type] = {} class ExceptionBase(Enum): """Base class for exceptions.""" def __init_subclass__(cls) -> None: """Register the exception class.""" super().__init_subclass__() _exception_classes[cls.__name__] = cls @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( cls.from_str, serialization=to_string_ser_schema(), ) @classmethod def from_str(cls, value: "str | ExceptionBase") -> "ExceptionBase": """Return ContainerKind enum value from a string.""" if isinstance(value, ExceptionBase): return value class_name, enum_name = value.split(".") if cls == ExceptionBase: # Exception base automatically resolves the class assert class_name in _exception_classes, f"No such exception class: {class_name}" exception_class = _exception_classes[class_name] else: # Otherwise, use the class that the method is called on assert cls.__name__ == class_name, ( f"Unexpected exception type: {class_name}, expected {cls.__name__}" ) exception_class = cls exception = getattr(exception_class, enum_name, None) if exception is not None: return exception raise ValueError(f"No such exception in {class_name}: {value}") def __contains__(self, exception: "ExceptionBase") -> bool: """Check if provided exception is equal to this.""" return self == exception def __str__(self) -> str: """Return string representation of the exception.""" return f"{self.__class__.__name__}.{self.name}" class UndefinedException(str): """Undefined Exception.""" mapper_name: str | None def __new__(cls, value: str, *, mapper_name: str | None = None) -> "UndefinedException": """Create a new UndefinedException instance.""" if isinstance(value, UndefinedException): return value assert isinstance(value, str) instance = super().__new__(cls, value) instance.mapper_name = mapper_name return instance @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( cls, serialization=to_string_ser_schema(), ) def to_pipe_str(value: Any) -> str: """ Single pipe-separated string representation of an exception list. Obtain a deterministic ordering by ordering using the exception string representations. """ if isinstance(value, list): return "|".join(str(exception) for exception in value) return str(value) def from_pipe_str(value: Any) -> str | list[str]: """Parse a single string as a pipe separated list into enum exceptions.""" if isinstance(value, str): exception_list = value.split("|") if len(exception_list) == 1: return exception_list[0] return exception_list return value ================================================ FILE: src/ethereum_test_exceptions/exceptions/block.py ================================================ """Block Exceptions.""" from enum import auto, unique from .base import ExceptionBase @unique class BlockException(ExceptionBase): """ Exception raised when a block is invalid, but not due to a transaction. E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field. """ TOO_MANY_UNCLES = auto() """Block declares too many uncles over the allowed limit.""" UNCLE_IN_CHAIN = auto() """Block declares uncle header that is already imported into chain.""" UNCLE_IS_ANCESTOR = auto() """Block declares uncle header that is directly a parent of this block.""" UNCLE_IS_BROTHER = auto() """Block declares two similar uncle headers.""" UNCLE_PARENT_INCORRECT = auto() """Block declares uncle header that is an outdated block to be an uncle.""" EXTRA_DATA_TOO_BIG = auto() """Block header's extra data >32 bytes.""" EXTRA_DATA_INVALID_DAO = auto() """ Block header's extra data after dao fork must be a fixed pre defined hash. """ UNKNOWN_PARENT = auto() """ Block header's parent hash does not correspond to any of existing blocks on chain. """ UNCLE_UNKNOWN_PARENT = auto() """ Uncle header's parent hash does not correspond to any of existing blocks on chain. """ UNKNOWN_PARENT_ZERO = auto() """Block header's parent hash is zero hash.""" GASLIMIT_TOO_BIG = auto() """Block header's gas limit > 0x7fffffffffffffff.""" INVALID_BLOCK_NUMBER = auto() """Block header's number != parent header's number + 1.""" INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() """Block header's timestamp <= parent header's timestamp.""" INVALID_DIFFICULTY = auto() """ Block header's difficulty does not match the difficulty formula calculated from previous block. """ INVALID_LOG_BLOOM = auto() """ Block header's logs bloom hash does not match the actually computed log bloom. """ INVALID_STATE_ROOT = auto() """ Block header's state root hash does not match the actually computed hash of the state. """ INVALID_RECEIPTS_ROOT = auto() """ Block header's receipts root hash does not match the actually computed hash of receipts. """ INVALID_TRANSACTIONS_ROOT = auto() """ Block header's transactions root hash does not match the actually computed hash of tx tree. """ INVALID_UNCLES_HASH = auto() """ Block header's uncle hash does not match the actually computed hash of block's uncles. """ GAS_USED_OVERFLOW = auto() """Block transactions consume more gas than block header allow.""" INVALID_GASLIMIT = auto() """ Block header's gas limit does not match the gas limit formula calculated from previous block. """ INVALID_BASEFEE_PER_GAS = auto() """Block header's base_fee_per_gas field is calculated incorrect.""" INVALID_GAS_USED = auto() """ Block header's actual gas used does not match the provided header's value """ INVALID_GAS_USED_ABOVE_LIMIT = auto() """Block header's gas used value is above the gas limit field's value.""" INVALID_WITHDRAWALS_ROOT = auto() """ Block header's withdrawals root does not match calculated withdrawals root. """ INCORRECT_BLOCK_FORMAT = auto() """ Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet. """ BLOB_GAS_USED_ABOVE_LIMIT = auto() """Block's blob gas used in header is above the limit.""" INCORRECT_BLOB_GAS_USED = auto() """Block's blob gas used in header is incorrect.""" INCORRECT_EXCESS_BLOB_GAS = auto() """Block's excess blob gas in header is incorrect.""" INVALID_VERSIONED_HASHES = auto() """Incorrect number of versioned hashes in a payload.""" RLP_STRUCTURES_ENCODING = auto() """ Block's rlp encoding is valid but ethereum structures in it are invalid. """ RLP_WITHDRAWALS_NOT_READ = auto() """Block's rlp encoding is missing withdrawals.""" RLP_INVALID_FIELD_OVERFLOW_64 = auto() """One of block's fields rlp is overflow 2**64 value.""" RLP_INVALID_ADDRESS = auto() """Block withdrawals address is rlp of invalid address != 20 bytes.""" RLP_BLOCK_LIMIT_EXCEEDED = auto() """Block's rlp encoding is larger than the allowed limit.""" INVALID_REQUESTS = auto() """Block's requests are invalid.""" IMPORT_IMPOSSIBLE_LEGACY = auto() """Legacy block import is impossible in this chain configuration.""" IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() """ Legacy block import is impossible, trying to import on top of a block that is not legacy. """ IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() """ Trying to import london (basefee) block on top of block that is not 1559. """ IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() """Trying to import paris(merge) block with PoW enabled.""" IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() """ Trying to import paris(merge) block with PoS enabled before TTD is reached. """ IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() """Trying to import london looking block over paris network (POS).""" IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() """Trying to import paris block on top of shanghai block.""" IMPORT_IMPOSSIBLE_SHANGHAI = auto() """Shanghai block import is impossible in this chain configuration.""" IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() """ Trying to import a block after paris fork that has not empty uncles hash. """ IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() """Trying to import a block after paris fork that has difficulty != 0.""" SYSTEM_CONTRACT_EMPTY = auto() """ A system contract address contains no code at the end of fork activation block. """ SYSTEM_CONTRACT_CALL_FAILED = auto() """ A system contract call at the end of block execution (from the system address) fails. """ INVALID_BLOCK_HASH = auto() """ Block header's hash does not match the actually computed hash of the block. """ INVALID_DEPOSIT_EVENT_LAYOUT = auto() """ Transaction emits a `DepositEvent` in the deposit contract (EIP-6110), but the layout of the event does not match the required layout. """ # --- Block-Level Access Lists (EIP-7928) --- # INVALID_BLOCK_ACCESS_LIST = auto() """Block's access list is invalid.""" INVALID_BAL_HASH = auto() """Block header's BAL hash does not match the computed BAL hash.""" INVALID_BAL_EXTRA_ACCOUNT = auto() """ Block BAL contains an account change that is not present in the computed BAL. """ INVALID_BAL_MISSING_ACCOUNT = auto() """ Block BAL is missing an account change that is present in the computed BAL. """ ================================================ FILE: src/ethereum_test_exceptions/exceptions/eof.py ================================================ """EOF Exceptions.""" from enum import auto, unique from .base import ExceptionBase @unique class EOFException(ExceptionBase): """Exception raised when an EOF container is invalid.""" DEFAULT_EXCEPTION = auto() """Expect some exception, not yet known.""" UNDEFINED_EXCEPTION = auto() """Indicates that exception string is not mapped to an exception enum.""" UNDEFINED_INSTRUCTION = auto() """EOF container has undefined instruction in it's body code.""" UNKNOWN_VERSION = auto() """EOF container has an unknown version.""" INCOMPLETE_MAGIC = auto() """EOF container has not enough bytes to read magic.""" INVALID_MAGIC = auto() """EOF container has not allowed magic version byte.""" INVALID_VERSION = auto() """EOF container version bytes mismatch.""" INVALID_NON_RETURNING_FLAG = auto() """EOF container's section has non-returning flag set incorrectly.""" INVALID_RJUMP_DESTINATION = auto() """Code has RJUMP instruction with invalid parameters.""" MISSING_TYPE_HEADER = auto() """EOF container missing types section.""" INVALID_TYPE_SECTION_SIZE = auto() """EOF container types section has wrong size.""" INVALID_TYPE_BODY = auto() """EOF container types body section bytes are wrong.""" MISSING_CODE_HEADER = auto() """EOF container missing code section.""" INVALID_CODE_SECTION = auto() """EOF container code section bytes are incorrect.""" INCOMPLETE_CODE_HEADER = auto() """EOF container code header missing bytes.""" INCOMPLETE_DATA_HEADER = auto() """EOF container data header missing bytes.""" ZERO_SECTION_SIZE = auto() """EOF container data header construction is wrong.""" MISSING_DATA_SECTION = auto() """EOF container missing data section""" INCOMPLETE_CONTAINER = auto() """EOF container bytes are incomplete.""" INVALID_SECTION_BODIES_SIZE = auto() """Sections bodies does not match sections headers.""" TRAILING_BYTES = auto() """EOF container has bytes beyond data section.""" MISSING_TERMINATOR = auto() """EOF container missing terminator bytes between header and body.""" MISSING_HEADERS_TERMINATOR = auto() """Some type of another exception about missing headers terminator.""" INVALID_FIRST_SECTION_TYPE = auto() """EOF container header does not have types section first.""" INCOMPLETE_SECTION_NUMBER = auto() """EOF container header has section that is missing declaration bytes.""" INCOMPLETE_SECTION_SIZE = auto() """EOF container header has section that is defined incorrectly.""" TOO_MANY_CODE_SECTIONS = auto() """EOF container header has too many code sections.""" MISSING_STOP_OPCODE = auto() """EOF container's code missing STOP bytecode at it's end.""" INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() """EOF container code section inputs/outputs number is above the limit""" UNREACHABLE_INSTRUCTIONS = auto() """EOF container's code have instructions that are unreachable.""" UNREACHABLE_CODE_SECTIONS = auto() """EOF container's body have code sections that are unreachable.""" STACK_UNDERFLOW = auto() """EOF container's code produces an stack underflow.""" STACK_OVERFLOW = auto() """EOF container's code produces an stack overflow.""" STACK_HEIGHT_MISMATCH = auto() """EOF container section stack height mismatch.""" MAX_STACK_INCREASE_ABOVE_LIMIT = auto() """EOF container's specified max stack increase is above the limit.""" STACK_HIGHER_THAN_OUTPUTS = auto() """ EOF container section stack height is higher than the outputs. when returning """ JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() """ EOF container section JUMPF's to a destination section with incompatible outputs. """ INVALID_MAX_STACK_INCREASE = auto() """ EOF container section's specified max stack increase does not match the actual stack height. """ INVALID_DATALOADN_INDEX = auto() """A DATALOADN instruction has out-of-bounds index for the data section.""" TRUNCATED_INSTRUCTION = auto() """EOF container's code section has truncated instruction.""" TOPLEVEL_CONTAINER_TRUNCATED = auto() """Top-level EOF container has data section truncated""" ORPHAN_SUBCONTAINER = auto() """EOF container has an unreferenced subcontainer. '""" CONTAINER_SIZE_ABOVE_LIMIT = auto() """EOF container is above size limit""" INVALID_CONTAINER_SECTION_INDEX = auto() """Instruction references container section that does not exist.""" INCOMPATIBLE_CONTAINER_KIND = auto() """Incompatible instruction found in a container of a specific kind.""" AMBIGUOUS_CONTAINER_KIND = auto() """The kind of a sub-container cannot be uniquely deduced.""" TOO_MANY_CONTAINERS = auto() """EOF container header has too many sub-containers.""" INVALID_CODE_SECTION_INDEX = auto() """CALLF Operation refers to a non-existent code section""" UNEXPECTED_HEADER_KIND = auto() """Header parsing encountered a section kind it wasn't expecting""" CALLF_TO_NON_RETURNING = auto() """CALLF instruction targeting a non-returning code section""" EOFCREATE_WITH_TRUNCATED_CONTAINER = auto() """EOFCREATE with truncated container""" ================================================ FILE: src/ethereum_test_exceptions/exceptions/exceptions_types.py ================================================ """Pydantic annotated types for exceptions.""" from typing import Annotated, List, TypeVar from pydantic import BeforeValidator, PlainSerializer from .base import from_pipe_str, to_pipe_str from .block import BlockException from .eof import EOFException from .transaction import TransactionException """ Pydantic Annotated Types """ ExceptionInstanceOrList = Annotated[ List[TransactionException | BlockException] | TransactionException | BlockException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] TransactionExceptionInstanceOrList = Annotated[ List[TransactionException] | TransactionException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] BlockExceptionInstanceOrList = Annotated[ List[BlockException] | BlockException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] EOFExceptionInstanceOrList = Annotated[ List[EOFException] | EOFException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] ExceptionBoundTypeVar = TypeVar( "ExceptionBoundTypeVar", TransactionException, BlockException, EOFException ) ================================================ FILE: src/ethereum_test_exceptions/exceptions/transaction.py ================================================ """Transaction Exceptions.""" from enum import auto, unique from .base import ExceptionBase @unique class TransactionException(ExceptionBase): """ Exception raised when a transaction is invalid, and thus cannot be executed. If a transaction with any of these exceptions is included in a block, the block is invalid. """ TYPE_NOT_SUPPORTED = auto() """Transaction type is not supported on this chain configuration.""" SENDER_NOT_EOA = auto() """Transaction is coming from address that is not exist anymore.""" ADDRESS_TOO_SHORT = auto() """Transaction `to` is not allowed to be less than 20 bytes.""" ADDRESS_TOO_LONG = auto() """Transaction `to` is not allowed to be more than 20 bytes.""" NONCE_MISMATCH_TOO_HIGH = auto() """Transaction nonce > sender.nonce.""" NONCE_MISMATCH_TOO_LOW = auto() """Transaction nonce < sender.nonce.""" NONCE_TOO_BIG = auto() """ Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest). """ NONCE_IS_MAX = auto() """ Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests). """ NONCE_OVERFLOW = auto() """Transaction `nonce` is not allowed to be more than uint64.""" GASLIMIT_OVERFLOW = auto() """Transaction gaslimit exceeds 2^64-1 maximum value.""" VALUE_OVERFLOW = auto() """Transaction value exceeds 2^256-1 maximum value.""" GASPRICE_OVERFLOW = auto() """Transaction gasPrice exceeds 2^256-1 maximum value.""" GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() """Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.""" INVALID_SIGNATURE_VRS = auto() """Invalid transaction v, r, s values.""" RLP_INVALID_SIGNATURE_R = auto() """Error reading transaction signature R value.""" RLP_INVALID_SIGNATURE_S = auto() """Error reading transaction signature S value.""" RLP_LEADING_ZEROS_GASLIMIT = auto() """Error reading transaction gaslimit field RLP.""" RLP_LEADING_ZEROS_GASPRICE = auto() """Error reading transaction gasprice field RLP.""" RLP_LEADING_ZEROS_VALUE = auto() """Error reading transaction value field RLP.""" RLP_LEADING_ZEROS_NONCE = auto() """Error reading transaction nonce field RLP.""" RLP_LEADING_ZEROS_R = auto() """Error reading transaction signature R field RLP.""" RLP_LEADING_ZEROS_S = auto() """Error reading transaction signature S field RLP.""" RLP_LEADING_ZEROS_V = auto() """Error reading transaction signature V field RLP.""" RLP_LEADING_ZEROS_BASEFEE = auto() """Error reading transaction basefee field RLP.""" RLP_LEADING_ZEROS_PRIORITY_FEE = auto() """Error reading transaction priority fee field RLP.""" RLP_LEADING_ZEROS_DATA_SIZE = auto() """ Error reading transaction data field RLP, (rlp field length has leading zeros). """ RLP_LEADING_ZEROS_NONCE_SIZE = auto() """ Error reading transaction nonce field RLP, (rlp field length has leading zeros). """ RLP_TOO_FEW_ELEMENTS = auto() """ Error reading transaction RLP, structure has too few elements than expected. """ RLP_TOO_MANY_ELEMENTS = auto() """ Error reading transaction RLP, structure has too many elements than expected. """ RLP_ERROR_EOF = auto() """Error reading transaction RLP, rlp stream unexpectedly finished.""" RLP_ERROR_SIZE = auto() """Error reading transaction RLP, rlp size is invalid.""" RLP_ERROR_SIZE_LEADING_ZEROS = auto() """Error reading transaction RLP, field size has leading zeros.""" INVALID_CHAINID = auto() """Transaction chain id encoding is incorrect.""" RLP_INVALID_DATA = auto() """Transaction data field is invalid rlp.""" RLP_INVALID_GASLIMIT = auto() """Transaction gaslimit field is invalid rlp.""" RLP_INVALID_NONCE = auto() """Transaction nonce field is invalid rlp.""" RLP_INVALID_TO = auto() """Transaction to field is invalid rlp.""" RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() """Transaction access list address is > 20 bytes.""" RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() """Transaction access list address is < 20 bytes.""" RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() """Transaction access list storage hash > 32 bytes.""" RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() """Transaction access list storage hash < 32 bytes.""" RLP_INVALID_HEADER = auto() """Transaction failed to read from RLP as rlp header is invalid.""" RLP_INVALID_VALUE = auto() """Transaction value field is invalid rlp/structure.""" EC_RECOVERY_FAIL = auto() """Transaction has correct signature, but ec recovery failed.""" INSUFFICIENT_ACCOUNT_FUNDS = auto() """ Transaction's sender does not have enough funds to pay for the transaction. """ INSUFFICIENT_MAX_FEE_PER_GAS = auto() """Transaction's max-fee-per-gas is lower than the block base-fee.""" PRIORITY_OVERFLOW = auto() """ Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value. """ PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() """ Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas. """ PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() """ Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests). """ INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() """ Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price. """ INTRINSIC_GAS_TOO_LOW = auto() """Transaction's gas limit is too low.""" INTRINSIC_GAS_BELOW_FLOOR_GAS_COST = auto() """Transaction's gas limit is below the floor gas cost.""" INITCODE_SIZE_EXCEEDED = auto() """ Transaction's initcode for a contract-creating transaction is too large. """ TYPE_3_TX_PRE_FORK = auto() """Transaction type 3 included before activation fork.""" TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() """Transaction type 3, with zero blobs, included before activation fork.""" TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() """Transaction contains a blob versioned hash with an invalid version.""" TYPE_3_TX_WITH_FULL_BLOBS = auto() """Transaction contains full blobs (network-version of the transaction).""" TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() """Transaction contains too many blob versioned hashes.""" TYPE_3_TX_CONTRACT_CREATION = auto() """Transaction is a type 3 transaction and has an empty `to`.""" TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() """Transaction causes block to go over blob gas limit.""" GAS_ALLOWANCE_EXCEEDED = auto() """Transaction causes block to go over blob gas limit.""" GAS_LIMIT_EXCEEDS_MAXIMUM = auto() """ Transaction gas limit exceeds the maximum allowed limit of 30 million. """ TYPE_3_TX_ZERO_BLOBS = auto() """Transaction is type 3, but has no blobs.""" TYPE_4_EMPTY_AUTHORIZATION_LIST = auto() """Transaction is type 4, but has an empty authorization list.""" TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto() """Transaction authority signature is invalid""" TYPE_4_INVALID_AUTHORITY_SIGNATURE_S_TOO_HIGH = auto() """Transaction authority signature is invalid""" TYPE_4_TX_CONTRACT_CREATION = auto() """Transaction is a type 4 transaction and has an empty `to`.""" TYPE_4_INVALID_AUTHORIZATION_FORMAT = auto() """ Transaction is type 4, but contains an authorization that has an invalid format. """ TYPE_4_TX_PRE_FORK = auto() """Transaction type 4 included before activation fork.""" ================================================ FILE: src/ethereum_test_exceptions/exceptions.py ================================================ """Exceptions for invalid execution.""" from enum import Enum, auto, unique from typing import Annotated, Any, Dict, List, TypeVar from pydantic import BeforeValidator, GetCoreSchemaHandler, PlainSerializer from pydantic_core.core_schema import ( PlainValidatorFunctionSchema, no_info_plain_validator_function, to_string_ser_schema, ) _exception_classes: Dict[str, type] = {} class ExceptionBase(Enum): """Base class for exceptions.""" def __init_subclass__(cls) -> None: """Register the exception class.""" super().__init_subclass__() _exception_classes[cls.__name__] = cls @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( cls.from_str, serialization=to_string_ser_schema(), ) @classmethod def from_str(cls, value: "str | ExceptionBase") -> "ExceptionBase": """Return ContainerKind enum value from a string.""" if isinstance(value, ExceptionBase): return value class_name, enum_name = value.split(".") if cls == ExceptionBase: # Exception base automatically resolves the class assert class_name in _exception_classes, f"No such exception class: {class_name}" exception_class = _exception_classes[class_name] else: # Otherwise, use the class that the method is called on assert cls.__name__ == class_name, ( f"Unexpected exception type: {class_name}, expected {cls.__name__}" ) exception_class = cls exception = getattr(exception_class, enum_name, None) if exception is not None: return exception raise ValueError(f"No such exception in {class_name}: {value}") def __contains__(self, exception) -> bool: """Check if provided exception is equal to this.""" return self == exception def __str__(self) -> str: """Return string representation of the exception.""" return f"{self.__class__.__name__}.{self.name}" def to_pipe_str(value: Any) -> str: """ Single pipe-separated string representation of an exception list. Obtain a deterministic ordering by ordering using the exception string representations. """ if isinstance(value, list): return "|".join(str(exception) for exception in value) return str(value) def from_pipe_str(value: Any) -> str | List[str]: """Parse a single string as a pipe separated list into enum exceptions.""" if isinstance(value, str): exception_list = value.split("|") if len(exception_list) == 1: return exception_list[0] return exception_list return value class UndefinedException(str): """Undefined Exception.""" mapper_name: str | None def __new__(cls, value: str, *, mapper_name: str | None = None) -> "UndefinedException": """Create a new UndefinedException instance.""" if isinstance(value, UndefinedException): return value assert isinstance(value, str) instance = super().__new__(cls, value) instance.mapper_name = mapper_name return instance @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( cls, serialization=to_string_ser_schema(), ) @unique class TransactionException(ExceptionBase): """ Exception raised when a transaction is invalid, and thus cannot be executed. If a transaction with any of these exceptions is included in a block, the block is invalid. """ TYPE_NOT_SUPPORTED = auto() """Transaction type is not supported on this chain configuration.""" SENDER_NOT_EOA = auto() """Transaction is coming from address that is not exist anymore.""" ADDRESS_TOO_SHORT = auto() """Transaction `to` is not allowed to be less than 20 bytes.""" ADDRESS_TOO_LONG = auto() """Transaction `to` is not allowed to be more than 20 bytes.""" NONCE_MISMATCH_TOO_HIGH = auto() """Transaction nonce > sender.nonce.""" NONCE_MISMATCH_TOO_LOW = auto() """Transaction nonce < sender.nonce.""" NONCE_TOO_BIG = auto() """ Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest). """ NONCE_IS_MAX = auto() """ Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests). """ NONCE_OVERFLOW = auto() """Transaction `nonce` is not allowed to be more than uint64.""" GASLIMIT_OVERFLOW = auto() """Transaction gaslimit exceeds 2^64-1 maximum value.""" VALUE_OVERFLOW = auto() """Transaction value exceeds 2^256-1 maximum value.""" GASPRICE_OVERFLOW = auto() """Transaction gasPrice exceeds 2^256-1 maximum value.""" GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() """Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.""" INVALID_SIGNATURE_VRS = auto() """Invalid transaction v, r, s values.""" RLP_INVALID_SIGNATURE_R = auto() """Error reading transaction signature R value.""" RLP_INVALID_SIGNATURE_S = auto() """Error reading transaction signature S value.""" RLP_LEADING_ZEROS_GASLIMIT = auto() """Error reading transaction gaslimit field RLP.""" RLP_LEADING_ZEROS_GASPRICE = auto() """Error reading transaction gasprice field RLP.""" RLP_LEADING_ZEROS_VALUE = auto() """Error reading transaction value field RLP.""" RLP_LEADING_ZEROS_NONCE = auto() """Error reading transaction nonce field RLP.""" RLP_LEADING_ZEROS_R = auto() """Error reading transaction signature R field RLP.""" RLP_LEADING_ZEROS_S = auto() """Error reading transaction signature S field RLP.""" RLP_LEADING_ZEROS_V = auto() """Error reading transaction signature V field RLP.""" RLP_LEADING_ZEROS_BASEFEE = auto() """Error reading transaction basefee field RLP.""" RLP_LEADING_ZEROS_PRIORITY_FEE = auto() """Error reading transaction priority fee field RLP.""" RLP_LEADING_ZEROS_DATA_SIZE = auto() """ Error reading transaction data field RLP, (rlp field length has leading zeros). """ RLP_LEADING_ZEROS_NONCE_SIZE = auto() """ Error reading transaction nonce field RLP, (rlp field length has leading zeros). """ RLP_TOO_FEW_ELEMENTS = auto() """ Error reading transaction RLP, structure has too few elements than expected. """ RLP_TOO_MANY_ELEMENTS = auto() """ Error reading transaction RLP, structure has too many elements than expected. """ RLP_ERROR_EOF = auto() """Error reading transaction RLP, rlp stream unexpectedly finished.""" RLP_ERROR_SIZE = auto() """Error reading transaction RLP, rlp size is invalid.""" RLP_ERROR_SIZE_LEADING_ZEROS = auto() """Error reading transaction RLP, field size has leading zeros.""" INVALID_CHAINID = auto() """Transaction chain id encoding is incorrect.""" RLP_INVALID_DATA = auto() """Transaction data field is invalid rlp.""" RLP_INVALID_GASLIMIT = auto() """Transaction gaslimit field is invalid rlp.""" RLP_INVALID_NONCE = auto() """Transaction nonce field is invalid rlp.""" RLP_INVALID_TO = auto() """Transaction to field is invalid rlp.""" RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() """Transaction access list address is > 20 bytes.""" RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() """Transaction access list address is < 20 bytes.""" RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() """Transaction access list storage hash > 32 bytes.""" RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() """Transaction access list storage hash < 32 bytes.""" RLP_INVALID_HEADER = auto() """Transaction failed to read from RLP as rlp header is invalid.""" RLP_INVALID_VALUE = auto() """Transaction value field is invalid rlp/structure.""" EC_RECOVERY_FAIL = auto() """Transaction has correct signature, but ec recovery failed.""" INSUFFICIENT_ACCOUNT_FUNDS = auto() """ Transaction's sender does not have enough funds to pay for the transaction. """ INSUFFICIENT_MAX_FEE_PER_GAS = auto() """Transaction's max-fee-per-gas is lower than the block base-fee.""" PRIORITY_OVERFLOW = auto() """ Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value. """ PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() """ Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas. """ PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() """ Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests). """ INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() """ Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price. """ INTRINSIC_GAS_TOO_LOW = auto() """Transaction's gas limit is too low.""" INTRINSIC_GAS_BELOW_FLOOR_GAS_COST = auto() """Transaction's gas limit is below the floor gas cost.""" INITCODE_SIZE_EXCEEDED = auto() """ Transaction's initcode for a contract-creating transaction is too large. """ TYPE_3_TX_PRE_FORK = auto() """Transaction type 3 included before activation fork.""" TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() """Transaction type 3, with zero blobs, included before activation fork.""" TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() """Transaction contains a blob versioned hash with an invalid version.""" TYPE_3_TX_WITH_FULL_BLOBS = auto() """Transaction contains full blobs (network-version of the transaction).""" TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() """Transaction contains too many blob versioned hashes.""" TYPE_3_TX_CONTRACT_CREATION = auto() """Transaction is a type 3 transaction and has an empty `to`.""" TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() """Transaction causes block to go over blob gas limit.""" GAS_ALLOWANCE_EXCEEDED = auto() """Transaction causes block to go over blob gas limit.""" GAS_LIMIT_EXCEEDS_MAXIMUM = auto() """ Transaction gas limit exceeds the maximum allowed limit of 30 million. """ TYPE_3_TX_ZERO_BLOBS = auto() """Transaction is type 3, but has no blobs.""" TYPE_4_EMPTY_AUTHORIZATION_LIST = auto() """Transaction is type 4, but has an empty authorization list.""" TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto() """Transaction authority signature is invalid""" TYPE_4_INVALID_AUTHORITY_SIGNATURE_S_TOO_HIGH = auto() """Transaction authority signature is invalid""" TYPE_4_TX_CONTRACT_CREATION = auto() """Transaction is a type 4 transaction and has an empty `to`.""" TYPE_4_INVALID_AUTHORIZATION_FORMAT = auto() """ Transaction is type 4, but contains an authorization that has an invalid format. """ TYPE_4_TX_PRE_FORK = auto() """Transaction type 4 included before activation fork.""" @unique class BlockException(ExceptionBase): """ Exception raised when a block is invalid, but not due to a transaction. E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field. """ TOO_MANY_UNCLES = auto() """Block declares too many uncles over the allowed limit.""" UNCLE_IN_CHAIN = auto() """Block declares uncle header that is already imported into chain.""" UNCLE_IS_ANCESTOR = auto() """Block declares uncle header that is directly a parent of this block.""" UNCLE_IS_BROTHER = auto() """Block declares two similar uncle headers.""" UNCLE_PARENT_INCORRECT = auto() """Block declares uncle header that is an outdated block to be an uncle.""" EXTRA_DATA_TOO_BIG = auto() """Block header's extra data >32 bytes.""" EXTRA_DATA_INVALID_DAO = auto() """ Block header's extra data after dao fork must be a fixed pre defined hash. """ UNKNOWN_PARENT = auto() """ Block header's parent hash does not correspond to any of existing blocks on chain. """ UNCLE_UNKNOWN_PARENT = auto() """ Uncle header's parent hash does not correspond to any of existing blocks on chain. """ UNKNOWN_PARENT_ZERO = auto() """Block header's parent hash is zero hash.""" GASLIMIT_TOO_BIG = auto() """Block header's gas limit > 0x7fffffffffffffff.""" INVALID_BLOCK_NUMBER = auto() """Block header's number != parent header's number + 1.""" INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() """Block header's timestamp <= parent header's timestamp.""" INVALID_DIFFICULTY = auto() """ Block header's difficulty does not match the difficulty formula calculated from previous block. """ INVALID_LOG_BLOOM = auto() """ Block header's logs bloom hash does not match the actually computed log bloom. """ INVALID_STATE_ROOT = auto() """ Block header's state root hash does not match the actually computed hash of the state. """ INVALID_RECEIPTS_ROOT = auto() """ Block header's receipts root hash does not match the actually computed hash of receipts. """ INVALID_TRANSACTIONS_ROOT = auto() """ Block header's transactions root hash does not match the actually computed hash of tx tree. """ INVALID_UNCLES_HASH = auto() """ Block header's uncle hash does not match the actually computed hash of block's uncles. """ GAS_USED_OVERFLOW = auto() """Block transactions consume more gas than block header allow.""" INVALID_GASLIMIT = auto() """ Block header's gas limit does not match the gas limit formula calculated from previous block. """ INVALID_BASEFEE_PER_GAS = auto() """Block header's base_fee_per_gas field is calculated incorrect.""" INVALID_GAS_USED = auto() """ Block header's actual gas used does not match the provided header's value """ INVALID_GAS_USED_ABOVE_LIMIT = auto() """Block header's gas used value is above the gas limit field's value.""" INVALID_WITHDRAWALS_ROOT = auto() """ Block header's withdrawals root does not match calculated withdrawals root. """ INCORRECT_BLOCK_FORMAT = auto() """ Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet. """ BLOB_GAS_USED_ABOVE_LIMIT = auto() """Block's blob gas used in header is above the limit.""" INCORRECT_BLOB_GAS_USED = auto() """Block's blob gas used in header is incorrect.""" INCORRECT_EXCESS_BLOB_GAS = auto() """Block's excess blob gas in header is incorrect.""" INVALID_VERSIONED_HASHES = auto() """Incorrect number of versioned hashes in a payload.""" RLP_STRUCTURES_ENCODING = auto() """ Block's rlp encoding is valid but ethereum structures in it are invalid. """ RLP_WITHDRAWALS_NOT_READ = auto() """Block's rlp encoding is missing withdrawals.""" RLP_INVALID_FIELD_OVERFLOW_64 = auto() """One of block's fields rlp is overflow 2**64 value.""" RLP_INVALID_ADDRESS = auto() """Block withdrawals address is rlp of invalid address != 20 bytes.""" RLP_BLOCK_LIMIT_EXCEEDED = auto() """Block's rlp encoding is larger than the allowed limit.""" INVALID_REQUESTS = auto() """Block's requests are invalid.""" IMPORT_IMPOSSIBLE_LEGACY = auto() """Legacy block import is impossible in this chain configuration.""" IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() """ Legacy block import is impossible, trying to import on top of a block that is not legacy. """ IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() """ Trying to import london (basefee) block on top of block that is not 1559. """ IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() """Trying to import paris(merge) block with PoW enabled.""" IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() """ Trying to import paris(merge) block with PoS enabled before TTD is reached. """ IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() """Trying to import london looking block over paris network (POS).""" IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() """Trying to import paris block on top of shanghai block.""" IMPORT_IMPOSSIBLE_SHANGHAI = auto() """Shanghai block import is impossible in this chain configuration.""" IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() """ Trying to import a block after paris fork that has not empty uncles hash. """ IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() """Trying to import a block after paris fork that has difficulty != 0.""" SYSTEM_CONTRACT_EMPTY = auto() """ A system contract address contains no code at the end of fork activation block. """ SYSTEM_CONTRACT_CALL_FAILED = auto() """ A system contract call at the end of block execution (from the system address) fails. """ INVALID_BLOCK_HASH = auto() """ Block header's hash does not match the actually computed hash of the block. """ INVALID_DEPOSIT_EVENT_LAYOUT = auto() """ Transaction emits a `DepositEvent` in the deposit contract (EIP-6110), but the layout of the event does not match the required layout. """ @unique class EOFException(ExceptionBase): """Exception raised when an EOF container is invalid.""" DEFAULT_EXCEPTION = auto() """Expect some exception, not yet known.""" UNDEFINED_EXCEPTION = auto() """Indicates that exception string is not mapped to an exception enum.""" UNDEFINED_INSTRUCTION = auto() """EOF container has undefined instruction in it's body code.""" UNKNOWN_VERSION = auto() """EOF container has an unknown version.""" INCOMPLETE_MAGIC = auto() """EOF container has not enough bytes to read magic.""" INVALID_MAGIC = auto() """EOF container has not allowed magic version byte.""" INVALID_VERSION = auto() """EOF container version bytes mismatch.""" INVALID_NON_RETURNING_FLAG = auto() """EOF container's section has non-returning flag set incorrectly.""" INVALID_RJUMP_DESTINATION = auto() """Code has RJUMP instruction with invalid parameters.""" MISSING_TYPE_HEADER = auto() """EOF container missing types section.""" INVALID_TYPE_SECTION_SIZE = auto() """EOF container types section has wrong size.""" INVALID_TYPE_BODY = auto() """EOF container types body section bytes are wrong.""" MISSING_CODE_HEADER = auto() """EOF container missing code section.""" INVALID_CODE_SECTION = auto() """EOF container code section bytes are incorrect.""" INCOMPLETE_CODE_HEADER = auto() """EOF container code header missing bytes.""" INCOMPLETE_DATA_HEADER = auto() """EOF container data header missing bytes.""" ZERO_SECTION_SIZE = auto() """EOF container data header construction is wrong.""" MISSING_DATA_SECTION = auto() """EOF container missing data section""" INCOMPLETE_CONTAINER = auto() """EOF container bytes are incomplete.""" INVALID_SECTION_BODIES_SIZE = auto() """Sections bodies does not match sections headers.""" TRAILING_BYTES = auto() """EOF container has bytes beyond data section.""" MISSING_TERMINATOR = auto() """EOF container missing terminator bytes between header and body.""" MISSING_HEADERS_TERMINATOR = auto() """Some type of another exception about missing headers terminator.""" INVALID_FIRST_SECTION_TYPE = auto() """EOF container header does not have types section first.""" INCOMPLETE_SECTION_NUMBER = auto() """EOF container header has section that is missing declaration bytes.""" INCOMPLETE_SECTION_SIZE = auto() """EOF container header has section that is defined incorrectly.""" TOO_MANY_CODE_SECTIONS = auto() """EOF container header has too many code sections.""" MISSING_STOP_OPCODE = auto() """EOF container's code missing STOP bytecode at it's end.""" INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() """EOF container code section inputs/outputs number is above the limit""" UNREACHABLE_INSTRUCTIONS = auto() """EOF container's code have instructions that are unreachable.""" UNREACHABLE_CODE_SECTIONS = auto() """EOF container's body have code sections that are unreachable.""" STACK_UNDERFLOW = auto() """EOF container's code produces an stack underflow.""" STACK_OVERFLOW = auto() """EOF container's code produces an stack overflow.""" STACK_HEIGHT_MISMATCH = auto() """EOF container section stack height mismatch.""" MAX_STACK_INCREASE_ABOVE_LIMIT = auto() """EOF container's specified max stack increase is above the limit.""" STACK_HIGHER_THAN_OUTPUTS = auto() """ EOF container section stack height is higher than the outputs. when returning """ JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() """ EOF container section JUMPF's to a destination section with incompatible outputs. """ INVALID_MAX_STACK_INCREASE = auto() """ EOF container section's specified max stack increase does not match the actual stack height. """ INVALID_DATALOADN_INDEX = auto() """A DATALOADN instruction has out-of-bounds index for the data section.""" TRUNCATED_INSTRUCTION = auto() """EOF container's code section has truncated instruction.""" TOPLEVEL_CONTAINER_TRUNCATED = auto() """Top-level EOF container has data section truncated""" ORPHAN_SUBCONTAINER = auto() """EOF container has an unreferenced subcontainer. '""" CONTAINER_SIZE_ABOVE_LIMIT = auto() """EOF container is above size limit""" INVALID_CONTAINER_SECTION_INDEX = auto() """Instruction references container section that does not exist.""" INCOMPATIBLE_CONTAINER_KIND = auto() """Incompatible instruction found in a container of a specific kind.""" AMBIGUOUS_CONTAINER_KIND = auto() """The kind of a sub-container cannot be uniquely deduced.""" TOO_MANY_CONTAINERS = auto() """EOF container header has too many sub-containers.""" INVALID_CODE_SECTION_INDEX = auto() """CALLF Operation refers to a non-existent code section""" UNEXPECTED_HEADER_KIND = auto() """Header parsing encountered a section kind it wasn't expecting""" CALLF_TO_NON_RETURNING = auto() """CALLF instruction targeting a non-returning code section""" EOFCREATE_WITH_TRUNCATED_CONTAINER = auto() """EOFCREATE with truncated container""" """Pydantic Annotated Types""" ExceptionInstanceOrList = Annotated[ List[TransactionException | BlockException] | TransactionException | BlockException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] TransactionExceptionInstanceOrList = Annotated[ List[TransactionException] | TransactionException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] BlockExceptionInstanceOrList = Annotated[ List[BlockException] | BlockException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] EOFExceptionInstanceOrList = Annotated[ List[EOFException] | EOFException, BeforeValidator(from_pipe_str), PlainSerializer(to_pipe_str), ] ExceptionBoundTypeVar = TypeVar( "ExceptionBoundTypeVar", TransactionException, BlockException, EOFException ) ================================================ FILE: src/ethereum_test_exceptions/py.typed ================================================ ================================================ FILE: src/ethereum_test_exceptions/tests/__init__.py ================================================ """Tests for the ethereum_test_exceptions package.""" ================================================ FILE: src/ethereum_test_exceptions/tests/test_exceptions.py ================================================ """Test suite for ethereum_test_exceptions module.""" import pytest from pydantic import TypeAdapter from ..exceptions import ( BlockException, BlockExceptionInstanceOrList, ExceptionInstanceOrList, TransactionException, TransactionExceptionInstanceOrList, ) GenericExceptionListAdapter: TypeAdapter = TypeAdapter(ExceptionInstanceOrList) TransactionExceptionListAdapter: TypeAdapter = TypeAdapter(TransactionExceptionInstanceOrList) BlockExceptionListAdapter: TypeAdapter = TypeAdapter(BlockExceptionInstanceOrList) @pytest.mark.parametrize( "exception, expected", [ ( TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", ), ( TransactionException.INITCODE_SIZE_EXCEEDED, "TransactionException.INITCODE_SIZE_EXCEEDED", ), (BlockException.INCORRECT_BLOB_GAS_USED, "BlockException.INCORRECT_BLOB_GAS_USED"), (BlockException.INCORRECT_BLOCK_FORMAT, "BlockException.INCORRECT_BLOCK_FORMAT"), ], ) def test_exceptions_string_conversion( exception: BlockException | TransactionException, expected: str ) -> None: """ Test that the exceptions are unique and have the correct string representation. """ assert str(exception) == expected @pytest.mark.parametrize( "type_adapter,exception,expected", [ ( GenericExceptionListAdapter, [ BlockException.INCORRECT_BLOB_GAS_USED, TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, ], "BlockException.INCORRECT_BLOB_GAS_USED|" "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", ), ( GenericExceptionListAdapter, [ BlockException.INCORRECT_BLOB_GAS_USED, TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, TransactionException.INITCODE_SIZE_EXCEEDED, ], "BlockException.INCORRECT_BLOB_GAS_USED" "|TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "|TransactionException.INITCODE_SIZE_EXCEEDED", ), ( GenericExceptionListAdapter, [ TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, BlockException.INCORRECT_BLOB_GAS_USED, ], "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "|BlockException.INCORRECT_BLOB_GAS_USED", ), ( TransactionExceptionListAdapter, [ TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, TransactionException.INITCODE_SIZE_EXCEEDED, ], "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "|TransactionException.INITCODE_SIZE_EXCEEDED", ), ( BlockExceptionListAdapter, [ BlockException.INCORRECT_BLOB_GAS_USED, BlockException.INCORRECT_BLOCK_FORMAT, ], "BlockException.INCORRECT_BLOB_GAS_USED|BlockException.INCORRECT_BLOCK_FORMAT", ), ], ) def test_exceptions_or(type_adapter: TypeAdapter, exception: list, expected: str) -> None: """Test that the exceptions can be combined using the | operator.""" assert type_adapter.dump_python(type_adapter.validate_python(exception)) == expected ================================================ FILE: src/ethereum_test_execution/__init__.py ================================================ """Ethereum test execution package.""" from .base import BaseExecute, ExecuteFormat, LabeledExecuteFormat from .blob_transaction import BlobTransaction from .transaction_post import TransactionPost __all__ = [ "BaseExecute", "ExecuteFormat", "BlobTransaction", "LabeledExecuteFormat", "TransactionPost", ] ================================================ FILE: src/ethereum_test_execution/base.py ================================================ """Ethereum test execution base types.""" from abc import abstractmethod from typing import Annotated, Any, ClassVar, Dict, Type from pydantic import PlainSerializer, PlainValidator from pytest import FixtureRequest from ethereum_test_base_types import CamelModel from ethereum_test_forks import Fork from ethereum_test_rpc import EngineRPC, EthRPC class BaseExecute(CamelModel): """Represents a base execution format.""" # Base Execute class properties formats: ClassVar[Dict[str, Type["BaseExecute"]]] = {} # Execute format properties format_name: ClassVar[str] = "" description: ClassVar[str] = "Unknown execute format; it has not been set." requires_engine_rpc: ClassVar[bool] = False @classmethod def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: """ Register all subclasses of BaseExecute with a execute format name set as possible execute formats. """ if cls.format_name: # Register the new execute format BaseExecute.formats[cls.format_name] = cls @abstractmethod def execute( self, fork: Fork, eth_rpc: EthRPC, engine_rpc: EngineRPC | None, request: FixtureRequest, ) -> None: """Execute the format.""" pass class LabeledExecuteFormat: """ Represents an execution format with a custom label. This label will be used in the test id and also will be added as a marker to the generated test case when executing the test. """ format: Type[BaseExecute] label: str description: str registered_labels: ClassVar[Dict[str, "LabeledExecuteFormat"]] = {} def __init__( self, execute_format: "Type[BaseExecute] | LabeledExecuteFormat", label: str, description: str, ): """Initialize the execute format with a custom label.""" self.format = ( execute_format.format if isinstance(execute_format, LabeledExecuteFormat) else execute_format ) self.label = label self.description = description if label not in LabeledExecuteFormat.registered_labels: LabeledExecuteFormat.registered_labels[label] = self @property def format_name(self) -> str: """Get the execute format name.""" return self.format.format_name @property def requires_engine_rpc(self) -> bool: """Get the requires engine RPC flag.""" return self.format.requires_engine_rpc def __eq__(self, other: Any) -> bool: """ Check if two labeled execute formats are equal. If the other object is a ExecuteFormat type, the format of the labeled execute format will be compared with the format of the other object. """ if isinstance(other, LabeledExecuteFormat): return self.format == other.format if isinstance(other, type) and issubclass(other, BaseExecute): return self.format == other return False # Type alias for a base execute class ExecuteFormat = Annotated[ Type[BaseExecute], PlainSerializer(lambda f: f.format_name), PlainValidator(lambda f: BaseExecute.formats[f] if f in BaseExecute.formats else f), ] ================================================ FILE: src/ethereum_test_execution/blob_transaction.py ================================================ """Test execution format to get blobs from the execution client.""" from hashlib import sha256 from typing import ClassVar, Dict, List from pytest import FixtureRequest from ethereum_test_base_types import Address, Hash from ethereum_test_base_types.base_types import Bytes from ethereum_test_forks import Fork from ethereum_test_rpc import BlobAndProofV1, BlobAndProofV2, EngineRPC, EthRPC from ethereum_test_rpc.rpc_types import GetBlobsResponse from ethereum_test_types import NetworkWrappedTransaction, Transaction from ethereum_test_types.transaction_types import TransactionTestMetadata from pytest_plugins.custom_logging import get_logger from .base import BaseExecute logger = get_logger(__name__) def versioned_hashes_with_blobs_and_proofs( tx: NetworkWrappedTransaction, ) -> Dict[Hash, BlobAndProofV1 | BlobAndProofV2]: """ Return a dictionary of versioned hashes with their corresponding blobs and proofs. """ versioned_hashes: Dict[Hash, BlobAndProofV1 | BlobAndProofV2] = {} for blob in tx.blob_objects: if isinstance(blob.proof, Bytes): versioned_hashes[blob.versioned_hash] = BlobAndProofV1( blob=blob.data, proof=blob.proof ) elif isinstance(blob.proof, list): versioned_hashes[blob.versioned_hash] = BlobAndProofV2( blob=blob.data, proofs=blob.proof ) else: raise ValueError( f"Blob with versioned hash {blob.versioned_hash.hex()} requires a proof " "that is not None" ) return versioned_hashes class BlobTransaction(BaseExecute): """ Represents a test execution format to send blob transactions to the client and then use `engine_getBlobsV*` end points to validate the proofs generated by the execution client. """ format_name: ClassVar[str] = "blob_transaction_test" description: ClassVar[str] = ( "Send blob transactions to the execution client and validate their availability via " "`engine_getBlobsV*`" ) requires_engine_rpc: ClassVar[bool] = True txs: List[NetworkWrappedTransaction | Transaction] nonexisting_blob_hashes: List[Hash] | None = None def execute( self, fork: Fork, eth_rpc: EthRPC, engine_rpc: EngineRPC | None, request: FixtureRequest, ) -> None: """Execute the format.""" assert engine_rpc is not None, "Engine RPC is required for this format." versioned_hashes: Dict[Hash, BlobAndProofV1 | BlobAndProofV2] = {} sent_txs: List[Transaction] = [] for tx_index, tx in enumerate(self.txs): if isinstance(tx, NetworkWrappedTransaction): tx.tx = tx.tx.with_signature_and_sender() sent_txs.append(tx.tx) expected_hash = tx.tx.hash versioned_hashes.update(versioned_hashes_with_blobs_and_proofs(tx)) to_address = tx.tx.to else: tx = tx.with_signature_and_sender() sent_txs.append(tx) expected_hash = tx.hash to_address = tx.to label = to_address.label if isinstance(to_address, Address) else None metadata = TransactionTestMetadata( test_id=request.node.nodeid, phase="testing", target=label, tx_index=tx_index, ) received_hash = eth_rpc.send_raw_transaction(tx.rlp(), request_id=metadata.to_json()) assert expected_hash == received_hash, ( f"Expected hash {expected_hash} does not match received hash {received_hash}." ) version = fork.engine_get_blobs_version() assert version is not None, "Engine get blobs version is not supported by the fork." # ensure that clients respond 'null' when they have no access to at # least one blob list_versioned_hashes = list(versioned_hashes.keys()) if self.nonexisting_blob_hashes is not None: list_versioned_hashes.extend(self.nonexisting_blob_hashes) blob_response: GetBlobsResponse | None = engine_rpc.get_blobs( list_versioned_hashes, version=version ) # if non-existing blob hashes were request then the response must be # 'null' if self.nonexisting_blob_hashes is not None: if blob_response is not None: raise ValueError( f"Non-existing blob hashes were requested and " "the client was expected to respond with 'null', but instead it replied: " f"{blob_response.root}" ) else: logger.info( "Test was passed (partial responses are not allowed and the client " "correctly returned 'null')" ) eth_rpc.wait_for_transactions(sent_txs) return assert blob_response is not None local_blobs_and_proofs = list(versioned_hashes.values()) assert len(blob_response) == len(local_blobs_and_proofs), ( f"Expected {len(local_blobs_and_proofs)} blobs and proofs, got {len(blob_response)}." ) for expected_blob, received_blob in zip( local_blobs_and_proofs, blob_response.root, strict=True ): if received_blob is None: raise ValueError("Received blob is empty.") if isinstance(expected_blob, BlobAndProofV1): if not isinstance(received_blob, BlobAndProofV1): raise ValueError("Received blob is not a BlobAndProofV1.") if expected_blob.blob != received_blob.blob: raise ValueError("Blob mismatch.") if expected_blob.proof != received_blob.proof: raise ValueError("Proof mismatch.") elif isinstance(expected_blob, BlobAndProofV2): if not isinstance(received_blob, BlobAndProofV2): raise ValueError("Received blob is not a BlobAndProofV2.") if expected_blob.blob != received_blob.blob: raise ValueError("Blob mismatch.") if expected_blob.proofs != received_blob.proofs: error_message = "Proofs mismatch." error_message += f"len(expected_blob.proofs) = {len(expected_blob.proofs)}, " error_message += f"len(received_blob.proofs) = {len(received_blob.proofs)}\n" if len(expected_blob.proofs) == len(received_blob.proofs): index = 0 for expected_proof, received_proof in zip( expected_blob.proofs, received_blob.proofs, strict=False ): if len(expected_proof) != len(received_proof): error_message += f"Proof length mismatch. index = {index}," error_message += f"expected_proof length = {len(expected_proof)}, " error_message += f"received_proof length = {len(received_proof)}\n" index += 1 continue if expected_proof != received_proof: error_message += f"Proof mismatch. index = {index}," error_message += ( f"expected_proof hash = {sha256(expected_proof).hexdigest()}, " ) error_message += ( f"received_proof hash = {sha256(received_proof).hexdigest()}\n" ) index += 1 raise ValueError(error_message) else: raise ValueError(f"Unexpected blob type: {type(expected_blob)}") eth_rpc.wait_for_transactions(sent_txs) ================================================ FILE: src/ethereum_test_execution/transaction_post.py ================================================ """Simple transaction-send then post-check execution format.""" from typing import ClassVar, List import pytest from pytest import FixtureRequest from ethereum_test_base_types import Address, Alloc, Hash from ethereum_test_forks import Fork from ethereum_test_rpc import EngineRPC, EthRPC, SendTransactionExceptionError from ethereum_test_types import Transaction, TransactionTestMetadata from .base import BaseExecute class TransactionPost(BaseExecute): """ Represents a simple transaction-send then post-check execution format. """ blocks: List[List[Transaction]] post: Alloc # Gas validation fields for benchmark tests expected_benchmark_gas_used: int | None = None # Expected total gas to be consumed skip_gas_used_validation: bool = False # Skip gas validation even if expected is set format_name: ClassVar[str] = "transaction_post_test" description: ClassVar[str] = ( "Simple transaction sending, then post-check after all transactions are included" ) def execute( self, fork: Fork, eth_rpc: EthRPC, engine_rpc: EngineRPC | None, request: FixtureRequest, ) -> None: """Execute the format.""" del fork del engine_rpc assert not any(tx.ty == 3 for block in self.blocks for tx in block), ( "Transaction type 3 is not supported in execute mode." ) # Track transaction hashes for gas validation (benchmarking) all_tx_hashes = [] for block in self.blocks: signed_txs = [] for tx_index, tx in enumerate(block): # Add metadata tx = tx.with_signature_and_sender() to_address = tx.to label = to_address.label if isinstance(to_address, Address) else None phase = ( "testing" if (tx.test_phase == "execution" or tx.test_phase is None) else "setup" ) tx.metadata = TransactionTestMetadata( test_id=request.node.nodeid, phase=phase, target=label, tx_index=tx_index, ) signed_txs.append(tx) if any(tx.error is not None for tx in signed_txs): for transaction in signed_txs: if transaction.error is None: eth_rpc.send_wait_transaction(transaction) all_tx_hashes.append(transaction.hash) else: with pytest.raises(SendTransactionExceptionError): eth_rpc.send_transaction(transaction) else: eth_rpc.send_wait_transactions(signed_txs) all_tx_hashes.extend([tx.hash for tx in signed_txs]) # Perform gas validation if required for benchmarking # Ensures benchmark tests consume exactly the expected gas if not self.skip_gas_used_validation and self.expected_benchmark_gas_used is not None: total_gas_used = 0 # Fetch transaction receipts to get actual gas used for tx_hash in all_tx_hashes: receipt = eth_rpc.get_transaction_receipt(tx_hash) assert receipt is not None, f"Failed to get receipt for transaction {tx_hash}" gas_used = int(receipt["gasUsed"], 16) total_gas_used += gas_used # Verify that the total gas consumed matches expectations assert total_gas_used == self.expected_benchmark_gas_used, ( f"Total gas used ({total_gas_used}) does not match " f"expected benchmark gas ({self.expected_benchmark_gas_used}), " f"difference: {total_gas_used - self.expected_benchmark_gas_used}" ) for address, account in self.post.root.items(): balance = eth_rpc.get_balance(address) code = eth_rpc.get_code(address) nonce = eth_rpc.get_transaction_count(address) if account is None: assert balance == 0, f"Balance of {address} is {balance}, expected 0." assert code == b"", f"Code of {address} is {code}, expected 0x." assert nonce == 0, f"Nonce of {address} is {nonce}, expected 0." else: if "balance" in account.model_fields_set: assert balance == account.balance, ( f"Balance of {address} is {balance}, expected {account.balance}." ) if "code" in account.model_fields_set: assert code == account.code, ( f"Code of {address} is {code}, expected {account.code}." ) if "nonce" in account.model_fields_set: assert nonce == account.nonce, ( f"Nonce of {address} is {nonce}, expected {account.nonce}." ) if "storage" in account.model_fields_set: for key, value in account.storage.items(): storage_value = eth_rpc.get_storage_at(address, Hash(key)) assert storage_value == value, ( f"Storage value at {key} of {address} is {storage_value}," f"expected {value}." ) ================================================ FILE: src/ethereum_test_fixtures/__init__.py ================================================ """Ethereum test fixture format definitions.""" from .base import BaseFixture, FixtureFillingPhase, FixtureFormat, LabeledFixtureFormat from .blockchain import ( BlockchainEngineFixture, BlockchainEngineFixtureCommon, BlockchainEngineSyncFixture, BlockchainEngineXFixture, BlockchainFixture, BlockchainFixtureCommon, ) from .collector import FixtureCollector, TestInfo from .consume import FixtureConsumer from .eof import EOFFixture from .pre_alloc_groups import PreAllocGroup, PreAllocGroups from .state import StateFixture from .transaction import TransactionFixture __all__ = [ "BaseFixture", "BlockchainEngineFixture", "BlockchainEngineFixtureCommon", "BlockchainEngineSyncFixture", "BlockchainEngineXFixture", "BlockchainFixture", "BlockchainFixtureCommon", "EOFFixture", "FixtureCollector", "FixtureConsumer", "FixtureFillingPhase", "FixtureFormat", "LabeledFixtureFormat", "PreAllocGroups", "PreAllocGroup", "StateFixture", "TestInfo", "TransactionFixture", ] ================================================ FILE: src/ethereum_test_fixtures/base.py ================================================ """Base fixture definitions used to define all fixture types.""" import hashlib import json from enum import Enum, auto from functools import cached_property from typing import Annotated, Any, ClassVar, Dict, List, Set, Type, Union import pytest from pydantic import ( Discriminator, Field, PlainSerializer, PlainValidator, Tag, TypeAdapter, model_validator, ) from pydantic_core.core_schema import ValidatorFunctionWrapHandler from ethereum_test_base_types import CamelModel, ReferenceSpec from ethereum_test_forks import Fork def fixture_format_discriminator(v: Any) -> str | None: """Discriminator function that returns the model type as a string.""" if v is None: return None if isinstance(v, dict): info_dict = v.get("_info") elif hasattr(v, "info"): info_dict = v.info assert info_dict is not None, ( f"Fixture does not have an info field, cannot determine fixture format: {v}" ) fixture_format = info_dict.get("fixture-format") if not fixture_format: fixture_format = info_dict.get("fixture_format") assert fixture_format is not None, f"Fixture format not found in info field: {info_dict}" return fixture_format class FixtureFillingPhase(Enum): """Execution phase for fixture generation.""" PRE_ALLOC_GENERATION = auto() FILL = auto() class BaseFixture(CamelModel): """Represents a base Ethereum test fixture of any type.""" # Base Fixture class properties formats: ClassVar[Dict[str, Type["BaseFixture"]]] = {} formats_type_adapter: ClassVar[TypeAdapter] info: Dict[str, Dict[str, Any] | str] = Field(default_factory=dict, alias="_info") # Fixture format properties format_name: ClassVar[str] = "" output_file_extension: ClassVar[str] = ".json" description: ClassVar[str] = "Unknown fixture format; it has not been set." format_phases: ClassVar[Set[FixtureFillingPhase]] = {FixtureFillingPhase.FILL} @classmethod def output_base_dir_name(cls) -> str: """ Return name of the subdirectory where this type of fixture should be dumped to. """ return cls.format_name.replace("test", "tests") @classmethod def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: """ Register all subclasses of BaseFixture with a fixture format name set as possible fixture formats. """ if cls.format_name: # Register the new fixture format BaseFixture.formats[cls.format_name] = cls if len(BaseFixture.formats) > 1: BaseFixture.formats_type_adapter = TypeAdapter( Annotated[ Union[ tuple( Annotated[fixture_format, Tag(format_name)] for ( format_name, fixture_format, ) in BaseFixture.formats.items() ) ], Discriminator(fixture_format_discriminator), ] ) else: BaseFixture.formats_type_adapter = TypeAdapter(cls) @model_validator(mode="wrap") @classmethod def _parse_into_subclass(cls, v: Any, handler: ValidatorFunctionWrapHandler) -> "BaseFixture": """Parse the fixture into the correct subclass.""" if cls is BaseFixture: return BaseFixture.formats_type_adapter.validate_python(v) return handler(v) @cached_property def json_dict(self) -> Dict[str, Any]: """Returns the JSON representation of the fixture.""" return self.model_dump(mode="json", by_alias=True, exclude_none=True, exclude={"info"}) @cached_property def hash(self) -> str: """Returns the hash of the fixture.""" json_str = json.dumps(self.json_dict, sort_keys=True, separators=(",", ":")) h = hashlib.sha256(json_str.encode("utf-8")).hexdigest() return f"0x{h}" def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]: """Return JSON representation of the fixture with the info field.""" dict_with_info = self.json_dict.copy() dict_with_info["_info"] = {"hash": self.hash} if not hash_only: dict_with_info["_info"].update(self.info) return dict_with_info def fill_info( self, t8n_version: str, test_case_description: str, fixture_source_url: str, ref_spec: ReferenceSpec | None, _info_metadata: Dict[str, Any], ) -> None: """Fill the info field for this fixture.""" if "comment" not in self.info: self.info["comment"] = "`execution-spec-tests` generated test" self.info["filling-transition-tool"] = t8n_version self.info["description"] = test_case_description self.info["url"] = fixture_source_url self.info["fixture-format"] = self.format_name if ref_spec is not None: ref_spec.write_info(self.info) if _info_metadata: self.info.update(_info_metadata) def get_fork(self) -> Fork | None: """Return fork of the fixture as a string.""" raise NotImplementedError @classmethod def supports_fork(cls, fork: Fork) -> bool: """ Return whether the fixture can be generated for the given fork. By default, all fixtures support all forks. """ del fork return True @classmethod def discard_fixture_format_by_marks( cls, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard a fixture format from filling if the appropriate marker is used. """ del fork, markers return False class LabeledFixtureFormat: """ Represents a fixture format with a custom label. This label will be used in the test id and also will be added as a marker to the generated test case when filling the test. """ format: Type[BaseFixture] label: str description: str registered_labels: ClassVar[Dict[str, "LabeledFixtureFormat"]] = {} def __init__( self, fixture_format: "Type[BaseFixture] | LabeledFixtureFormat", label: str, description: str, ): """Initialize the fixture format with a custom label.""" self.format = ( fixture_format.format if isinstance(fixture_format, LabeledFixtureFormat) else fixture_format ) self.label = label self.description = description if label not in LabeledFixtureFormat.registered_labels: LabeledFixtureFormat.registered_labels[label] = self @property def format_name(self) -> str: """Get the filling format name.""" return self.format.format_name @property def format_phases(self) -> Set[FixtureFillingPhase]: """Get the filling format phases where it should be included.""" return self.format.format_phases def __eq__(self, other: Any) -> bool: """ Check if two labeled fixture formats are equal. If the other object is a FixtureFormat type, the format of the labeled fixture format will be compared with the format of the other object. """ if isinstance(other, LabeledFixtureFormat): return self.format == other.format if isinstance(other, type) and issubclass(other, BaseFixture): return self.format == other return False # Annotated type alias for a base fixture class FixtureFormat = Annotated[ Type[BaseFixture], PlainSerializer(lambda f: f.format_name), PlainValidator(lambda f: BaseFixture.formats[f] if f in BaseFixture.formats else f), ] ================================================ FILE: src/ethereum_test_fixtures/blockchain.py ================================================ """BlockchainTest types.""" import json from functools import cached_property from typing import ( Annotated, Any, ClassVar, List, Literal, Self, Set, Tuple, Type, Union, cast, get_args, get_type_hints, ) import ethereum_rlp as eth_rlp import pytest from ethereum_types.numeric import Uint from pydantic import AliasChoices, Field, PlainSerializer, computed_field, model_validator from ethereum_test_base_types import ( Address, Alloc, Bloom, Bytes, CamelModel, EmptyOmmersRoot, EmptyTrieRoot, Hash, HeaderNonce, HexNumber, Number, ZeroPaddedHexNumber, ) from ethereum_test_exceptions import EngineAPIError, ExceptionInstanceOrList from ethereum_test_forks import Fork, Paris from ethereum_test_types import ( BlockAccessList, Environment, Requests, Transaction, Withdrawal, ) from ethereum_test_types.block_types import WithdrawalGeneric from ethereum_test_types.transaction_types import TransactionFixtureConverter, TransactionGeneric from .base import BaseFixture, FixtureFillingPhase from .common import FixtureAuthorizationTuple, FixtureBlobSchedule def post_state_validator(alternate_field: str | None = None, mode: str = "after") -> Any: """ Create a validator to ensure exactly one post-state field is provided. Args: alternate_field: Alternative field name to post_state_hash (e.g., 'post_state_diff'). mode: Pydantic validation mode. """ def decorator(cls: Type[Any]) -> Type[Any]: @model_validator(mode=mode) # type: ignore def validate_post_state_fields(self: Any) -> Any: """Ensure exactly one post-state field is provided.""" if mode == "after": # Determine which fields to check if alternate_field: # For engine x fixtures: check post_state vs # post_state_diff field1_name, field2_name = "post_state", alternate_field else: # For standard fixtures: check post_state vs # post_state_hash field1_name, field2_name = "post_state", "post_state_hash" field1_value = getattr(self, field1_name, None) field2_value = getattr(self, field2_name, None) if field1_value is None and field2_value is None: raise ValueError(f"Either {field1_name} or {field2_name} must be provided.") if field1_value is not None and field2_value is not None: raise ValueError( f"Only one of {field1_name} or {field2_name} must be provided." ) return self # Apply the validator to the class return cls return decorator class HeaderForkRequirement(str): """ Fork requirement class that specifies the name of the method that should be called to check if the field is required. """ def __new__(cls, value: str) -> "HeaderForkRequirement": """Create a new instance of the class.""" return super().__new__(cls, value) def required(self, fork: Fork, block_number: int, timestamp: int) -> bool: """Check if the field is required for the given fork.""" return getattr(fork, f"header_{self}_required")( block_number=block_number, timestamp=timestamp ) @classmethod def get_from_annotation(cls, field_hints: Any) -> Self | None: """Find the annotation in the field args.""" if isinstance(field_hints, cls): return field_hints for hint in get_args(field_hints): if res := cls.get_from_annotation(hint): return res return None class FixtureHeader(CamelModel): """ Representation of an Ethereum header within a test Fixture. We combine the `Environment` and `Result` contents to create this model. """ parent_hash: Hash = Hash(0) ommers_hash: Hash = Field(Hash(EmptyOmmersRoot), alias="uncleHash") fee_recipient: Address = Field( ..., alias="coinbase", validation_alias=AliasChoices("coinbase", "miner") ) state_root: Hash transactions_trie: Hash = Field( Hash(EmptyTrieRoot), validation_alias=AliasChoices("transactionsTrie", "transactionsRoot") ) receipts_root: Hash = Field( Hash(EmptyTrieRoot), alias="receiptTrie", validation_alias=AliasChoices("receiptTrie", "receiptsRoot"), ) logs_bloom: Bloom = Field( Bloom(0), alias="bloom", validation_alias=AliasChoices("bloom", "logsBloom") ) difficulty: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) number: ZeroPaddedHexNumber gas_limit: ZeroPaddedHexNumber gas_used: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) timestamp: ZeroPaddedHexNumber extra_data: Bytes prev_randao: Hash = Field(Hash(0), alias="mixHash") nonce: HeaderNonce = Field(HeaderNonce(0), validate_default=True) base_fee_per_gas: ( Annotated[ ZeroPaddedHexNumber, HeaderForkRequirement("base_fee"), ] | None ) = Field(None) withdrawals_root: Annotated[Hash, HeaderForkRequirement("withdrawals")] | None = Field(None) blob_gas_used: ( Annotated[ZeroPaddedHexNumber, HeaderForkRequirement("blob_gas_used")] | None ) = Field(None) excess_blob_gas: ( Annotated[ZeroPaddedHexNumber, HeaderForkRequirement("excess_blob_gas")] | None ) = Field(None) parent_beacon_block_root: Annotated[Hash, HeaderForkRequirement("beacon_root")] | None = Field( None ) requests_hash: Annotated[Hash, HeaderForkRequirement("requests")] | None = Field(None) block_access_list_hash: Annotated[Hash, HeaderForkRequirement("bal_hash")] | None = Field( None, alias="blockAccessListHash" ) fork: Fork | None = Field(None, exclude=True) def model_post_init(self, __context: Any) -> None: """ Model post init method used to check for required fields of a given fork. """ super().model_post_init(__context) if self.fork is None: # No validation done when we are importing the fixture from file return # Get the timestamp and block number block_number = self.number timestamp = self.timestamp # For each field, check if any of the annotations are of type # HeaderForkRequirement and if so, check if the field is required for # the given fork. annotated_hints = get_type_hints(self, include_extras=True) for field in self.__class__.model_fields: if field == "fork": continue header_fork_requirement = HeaderForkRequirement.get_from_annotation( annotated_hints[field] ) if header_fork_requirement is not None: if ( header_fork_requirement.required(self.fork, block_number, timestamp) and getattr(self, field) is None ): raise ValueError(f"Field {field} is required for fork {self.fork}") @cached_property def rlp_encode_list(self) -> List: """Compute the RLP of the header.""" header_list = [] for field in self.__class__.model_fields: if field == "fork": continue value = getattr(self, field) if value is not None: header_list.append(value if isinstance(value, bytes) else Uint(value)) return header_list @cached_property def rlp(self) -> Bytes: """Compute the RLP of the header.""" return Bytes(eth_rlp.encode(self.rlp_encode_list)) @computed_field(alias="hash") # type: ignore[prop-decorator] @cached_property def block_hash(self) -> Hash: """Compute the RLP of the header.""" return self.rlp.keccak256() @classmethod def genesis(cls, fork: Fork, env: Environment, state_root: Hash) -> Self: """Get the genesis header for the given fork.""" environment_values = env.model_dump(exclude_none=True, exclude={"withdrawals"}) if env.withdrawals is not None: environment_values["withdrawals_root"] = Withdrawal.list_root(env.withdrawals) environment_values["extra_data"] = env.extra_data extras = { "state_root": state_root, "requests_hash": Requests() if fork.header_requests_required(block_number=0, timestamp=0) else None, "block_access_list_hash": ( BlockAccessList().rlp_hash if fork.header_bal_hash_required(block_number=0, timestamp=0) else None ), "fork": fork, } return cls(**environment_values, **extras) class FixtureExecutionPayload(CamelModel): """ Representation of an Ethereum execution payload within a test Fixture. """ parent_hash: Hash fee_recipient: Address state_root: Hash receipts_root: Hash logs_bloom: Bloom number: HexNumber = Field(..., alias="blockNumber") gas_limit: HexNumber gas_used: HexNumber timestamp: HexNumber extra_data: Bytes prev_randao: Hash base_fee_per_gas: HexNumber blob_gas_used: HexNumber | None = Field(None) excess_blob_gas: HexNumber | None = Field(None) block_hash: Hash transactions: List[Bytes] withdrawals: List[Withdrawal] | None = None block_access_list: Bytes | None = Field( None, description="RLP-serialized EIP-7928 Block Access List" ) @classmethod def from_fixture_header( cls, header: FixtureHeader, transactions: List[Transaction], withdrawals: List[Withdrawal] | None, block_access_list: Bytes | None = None, ) -> Self: """ Return FixtureExecutionPayload from a FixtureHeader, a list of transactions, a list of withdrawals, and an optional block access list. """ return cls( **header.model_dump(exclude={"rlp"}, exclude_none=True), transactions=[tx.rlp() for tx in transactions], withdrawals=withdrawals, block_access_list=block_access_list, ) EngineNewPayloadV1Parameters = Tuple[FixtureExecutionPayload] EngineNewPayloadV3Parameters = Tuple[FixtureExecutionPayload, List[Hash], Hash] EngineNewPayloadV4Parameters = Tuple[ FixtureExecutionPayload, List[Hash], Hash, List[Bytes], ] EngineNewPayloadV5Parameters = EngineNewPayloadV4Parameters # Important: We check EngineNewPayloadV3Parameters first as it has more fields, # and pydantic has a weird behavior when the smaller tuple is checked first. EngineNewPayloadParameters = Union[ EngineNewPayloadV5Parameters, EngineNewPayloadV4Parameters, EngineNewPayloadV3Parameters, EngineNewPayloadV1Parameters, ] class FixtureEngineNewPayload(CamelModel): """ Representation of the `engine_newPayloadVX` information to be sent using the block information. """ params: EngineNewPayloadParameters new_payload_version: Number forkchoice_updated_version: Number validation_error: ExceptionInstanceOrList | None = None error_code: ( Annotated[ EngineAPIError, PlainSerializer( lambda x: str(x.value), return_type=str, ), ] | None ) = None def valid(self) -> bool: """Return whether the payload is valid.""" return self.validation_error is None @classmethod def from_fixture_header( cls, fork: Fork, header: FixtureHeader, transactions: List[Transaction], withdrawals: List[Withdrawal] | None, requests: List[Bytes] | None, block_access_list: Bytes | None = None, **kwargs: Any, ) -> Self: """Create `FixtureEngineNewPayload` from a `FixtureHeader`.""" new_payload_version = fork.engine_new_payload_version( block_number=header.number, timestamp=header.timestamp ) forkchoice_updated_version = fork.engine_forkchoice_updated_version( block_number=header.number, timestamp=header.timestamp ) assert new_payload_version is not None, "Invalid header for engine_newPayload" if fork.engine_execution_payload_block_access_list( block_number=header.number, timestamp=header.timestamp ): if block_access_list is None: raise ValueError( f"`block_access_list` is required in engine `ExecutionPayload` for >={fork}." ) execution_payload = FixtureExecutionPayload.from_fixture_header( header=header, transactions=transactions, withdrawals=withdrawals, block_access_list=block_access_list, ) params: List[Any] = [execution_payload] if fork.engine_new_payload_blob_hashes( block_number=header.number, timestamp=header.timestamp ): blob_hashes = Transaction.list_blob_versioned_hashes(transactions) if blob_hashes is None: raise ValueError(f"Blob hashes are required for ${fork}.") params.append(blob_hashes) if fork.engine_new_payload_beacon_root( block_number=header.number, timestamp=header.timestamp ): parent_beacon_block_root = header.parent_beacon_block_root if parent_beacon_block_root is None: raise ValueError(f"Parent beacon block root is required for ${fork}.") params.append(parent_beacon_block_root) if fork.engine_new_payload_requests( block_number=header.number, timestamp=header.timestamp ): if requests is None: raise ValueError(f"Requests are required for ${fork}.") params.append(requests) payload_params: EngineNewPayloadParameters = cast( EngineNewPayloadParameters, tuple(params), ) new_payload = cls( params=payload_params, new_payload_version=new_payload_version, forkchoice_updated_version=forkchoice_updated_version, **kwargs, ) return new_payload class FixtureTransaction(TransactionFixtureConverter, TransactionGeneric[ZeroPaddedHexNumber]): """Representation of an Ethereum transaction within a test Fixture.""" authorization_list: List[FixtureAuthorizationTuple] | None = None initcodes: List[Bytes] | None = None @classmethod def from_transaction(cls, tx: Transaction) -> Self: """Return FixtureTransaction from a Transaction.""" return cls(**tx.model_dump()) class FixtureWithdrawal(WithdrawalGeneric[ZeroPaddedHexNumber]): """ Structure to represent a single withdrawal of a validator's balance from the beacon chain in the output fixture. """ @classmethod def from_withdrawal(cls, w: WithdrawalGeneric) -> Self: """Return FixtureWithdrawal from a Withdrawal.""" return cls(**w.model_dump()) class WitnessChunk(CamelModel): """Represents execution witness data for a block.""" state: List[str] codes: List[str] keys: List[str] headers: List[str] @classmethod def parse_witness_chunks(cls, s: str) -> List[Self]: """ Parse multiple witness chunks from JSON string. Returns a list of WitnessChunk instances parsed from the JSON array. """ return [cls(**obj) for obj in json.loads(s)] class FixtureBlockBase(CamelModel): """ Representation of an Ethereum block within a test Fixture without RLP bytes. """ header: FixtureHeader = Field(..., alias="blockHeader") txs: List[FixtureTransaction] = Field(default_factory=list, alias="transactions") ommers: List[FixtureHeader] = Field(default_factory=list, alias="uncleHeaders") withdrawals: List[FixtureWithdrawal] | None = None execution_witness: WitnessChunk | None = None block_access_list: BlockAccessList | None = Field( None, description="EIP-7928 Block Access List" ) @computed_field(alias="blocknumber") # type: ignore[prop-decorator] @cached_property def block_number(self) -> Number: """Get the block number from the header.""" return Number(self.header.number) def with_rlp(self, txs: List[Transaction]) -> "FixtureBlock": """Return FixtureBlock with the RLP bytes set.""" block = [ self.header.rlp_encode_list, [tx.serializable_list for tx in txs], # TODO: This is incorrect, and we probably # need to serialize the ommers self.ommers, ] if self.withdrawals is not None: block.append([w.to_serializable_list() for w in self.withdrawals]) if self.block_access_list is not None: block.append(self.block_access_list.to_list()) return FixtureBlock( **self.model_dump(), rlp=eth_rlp.encode(block), ) class FixtureBlock(FixtureBlockBase): """Representation of an Ethereum block within a test Fixture.""" rlp: Bytes def without_rlp(self) -> FixtureBlockBase: """Return FixtureBlockBase without the RLP bytes set.""" return FixtureBlockBase( **self.model_dump(exclude={"rlp"}), ) class FixtureConfig(CamelModel): """Chain configuration for a fixture.""" fork: Fork = Field(..., alias="network") chain_id: ZeroPaddedHexNumber = Field(ZeroPaddedHexNumber(1), alias="chainid") blob_schedule: FixtureBlobSchedule | None = None class InvalidFixtureBlock(CamelModel): """Representation of an invalid Ethereum block within a test Fixture.""" rlp: Bytes expect_exception: ExceptionInstanceOrList rlp_decoded: FixtureBlockBase | None = Field(None, alias="rlp_decoded") @post_state_validator() class BlockchainFixtureCommon(BaseFixture): """Base blockchain test fixture model.""" fork: Fork = Field(..., alias="network") genesis: FixtureHeader = Field(..., alias="genesisBlockHeader") pre: Alloc post_state: Alloc | None = Field(None) post_state_hash: Hash | None = Field(None) # FIXME: lastBlockHash last_block_hash: Hash = Field(..., alias="lastblockhash") config: FixtureConfig @model_validator(mode="before") @classmethod def config_defaults_for_backwards_compatibility(cls, data: Any) -> Any: """ Check if the config field is populated, otherwise use the root-level field values for backwards compatibility. """ if isinstance(data, dict): if "config" not in data: data["config"] = {} if isinstance(data["config"], dict): if "network" not in data["config"]: data["config"]["network"] = data["network"] if "chainid" not in data["config"]: data["config"]["chainid"] = "0x01" return data def get_fork(self) -> Fork | None: """Return fork of the fixture as a string.""" return self.fork class BlockchainFixture(BlockchainFixtureCommon): """Cross-client specific blockchain test model use in JSON fixtures.""" format_name: ClassVar[str] = "blockchain_test" description: ClassVar[str] = "Tests that generate a blockchain test fixture." genesis_rlp: Bytes = Field(..., alias="genesisRLP") blocks: List[FixtureBlock | InvalidFixtureBlock] seal_engine: Literal["NoProof"] = Field("NoProof") @post_state_validator() class BlockchainEngineFixtureCommon(BaseFixture): """ Base blockchain test fixture model for Engine API based execution. Similar to BlockchainFixtureCommon but excludes the 'pre' field to avoid duplicating large pre-allocations. """ fork: Fork = Field(..., alias="network") post_state_hash: Hash | None = Field(None) # FIXME: lastBlockHash last_block_hash: Hash = Field(..., alias="lastblockhash") config: FixtureConfig def get_fork(self) -> Fork | None: """Return fixture's `Fork`.""" return self.fork @classmethod def supports_fork(cls, fork: Fork) -> bool: """ Return whether the fixture can be generated for the given fork. The Engine API is available only on Paris and afterwards. """ return fork >= Paris class BlockchainEngineFixture(BlockchainEngineFixtureCommon): """Engine specific test fixture information.""" format_name: ClassVar[str] = "blockchain_test_engine" description: ClassVar[str] = ( "Tests that generate a blockchain test fixture in Engine API format." ) pre: Alloc genesis: FixtureHeader = Field(..., alias="genesisBlockHeader") post_state: Alloc | None = Field(None) payloads: List[FixtureEngineNewPayload] = Field(..., alias="engineNewPayloads") @post_state_validator(alternate_field="post_state_diff") class BlockchainEngineXFixture(BlockchainEngineFixtureCommon): """ Engine X specific test fixture information. Uses pre-allocation groups (and a single client instance) for efficient test execution without client restarts. """ format_name: ClassVar[str] = "blockchain_test_engine_x" description: ClassVar[str] = "Tests that generate a Blockchain Test Engine X fixture." format_phases: ClassVar[Set[FixtureFillingPhase]] = { FixtureFillingPhase.FILL, FixtureFillingPhase.PRE_ALLOC_GENERATION, } pre_hash: str """Hash of the pre-allocation group this test belongs to.""" post_state_diff: Alloc | None = None """ State difference from genesis after test execution (efficiency optimization). """ payloads: List[FixtureEngineNewPayload] = Field(..., alias="engineNewPayloads") """Engine API payloads for blockchain execution.""" class BlockchainEngineSyncFixture(BlockchainEngineFixture): """ Engine Sync specific test fixture information. This fixture format is specifically designed for sync testing where: - The client under test receives all payloads - A sync client attempts to sync from the client under test - Both client types are parametrized from hive client config """ format_name: ClassVar[str] = "blockchain_test_sync" description: ClassVar[str] = ( "Tests that generate a blockchain test fixture for Engine API testing with client sync." ) sync_payload: FixtureEngineNewPayload | None = None @classmethod def discard_fixture_format_by_marks( cls, fork: Fork, markers: List[pytest.Mark], ) -> bool: """Discard the fixture format based on the provided markers.""" del fork marker_names = [m.name for m in markers] return "verify_sync" not in marker_names ================================================ FILE: src/ethereum_test_fixtures/collector.py ================================================ """ Fixture collector class used to collect, sort and combine the different types of generated fixtures. """ import json import os import re import sys from dataclasses import dataclass, field from pathlib import Path from typing import ClassVar, Dict, Literal, Optional, Tuple from ethereum_test_base_types import to_json from .base import BaseFixture from .consume import FixtureConsumer from .file import Fixtures @dataclass(kw_only=True, slots=True) class TestInfo: """Contains test information from the current node.""" name: str # pytest: Item.name, e.g. test_paris_one[fork_Paris-state_test] id: str # pytest: Item.nodeid, e.g. # tests/paris/test_module_paris.py::test_paris_one[...] original_name: str # pytest: Item.originalname, e.g. test_paris_one module_path: Path # pytest: Item.path, e.g. # .../tests/paris/test_module_paris.py test_prefix: ClassVar[str] = "test_" # Python test prefix filler_suffix: ClassVar[str] = "Filler" # Static test suffix @classmethod def strip_test_name(cls, name: str) -> str: """Remove test prefix from a python test case name.""" if name.startswith(cls.test_prefix): return name.removeprefix(cls.test_prefix) if name.endswith(cls.filler_suffix): return name.removesuffix(cls.filler_suffix) return name def get_name_and_parameters(self) -> Tuple[str, str]: """ Convert test name to a tuple containing the test name and test parameters. Example: test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai """ test_name, parameters = self.name.split("[") return test_name, re.sub(r"[\[\-]", "_", parameters).replace("]", "") def get_single_test_name(self, mode: Literal["module", "test"] = "module") -> str: """Convert test name to a single test name.""" if mode == "module": # Use the module name as the test name return self.strip_test_name(self.original_name) elif mode == "test": # Mix the module name and the test name/arguments test_name, test_parameters = self.get_name_and_parameters() test_name = self.strip_test_name(test_name) return f"{test_name}__{test_parameters}" def get_dump_dir_path( self, base_dump_dir: Optional[Path], filler_path: Path, level: Literal["test_module", "test_function", "test_parameter"] = "test_parameter", ) -> Optional[Path]: """Path to dump the debug output as defined by the level to dump at.""" if not base_dump_dir: return None test_module_relative_dir = self.get_module_relative_output_dir(filler_path) if level == "test_module": return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, "__")) test_name, test_parameter_string = self.get_name_and_parameters() flat_path = f"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}" if level == "test_function": return Path(base_dump_dir) / flat_path elif level == "test_parameter": return Path(base_dump_dir) / flat_path / test_parameter_string raise Exception("Unexpected level.") def get_id(self) -> str: """Return the test id.""" return self.id def get_module_relative_output_dir(self, filler_path: Path) -> Path: """ Return a directory name for the provided test_module (relative to the base ./tests directory) that can be used for output (within the configured fixtures output path or the base_dump_dir directory). Example: tests/shanghai/eip3855_push0/test_push0.py -> shanghai/eip3855_push0/test_push0 """ basename = self.module_path.with_suffix("").absolute() basename_relative = basename.relative_to( os.path.commonpath([filler_path.absolute(), basename]) ) module_path = basename_relative.parent / self.strip_test_name(basename_relative.stem) return module_path @dataclass(kw_only=True) class FixtureCollector: """Collects all fixtures generated by the test cases.""" output_dir: Path fill_static_tests: bool single_fixture_per_file: bool filler_path: Path base_dump_dir: Optional[Path] = None flush_interval: int = 1000 # Internal state all_fixtures: Dict[Path, Fixtures] = field(default_factory=dict) json_path_to_test_item: Dict[Path, TestInfo] = field(default_factory=dict) def get_fixture_basename(self, info: TestInfo) -> Path: """Return basename of the fixture file for a given test case.""" module_relative_output_dir = info.get_module_relative_output_dir(self.filler_path) # Each legacy test filler has only 1 test per file if it's a !state # test! So no need to create directory Add11/add11.json it can be plain # add11.json if self.fill_static_tests: return module_relative_output_dir.parent / info.original_name if self.single_fixture_per_file: return module_relative_output_dir / info.get_single_test_name(mode="test") return module_relative_output_dir / info.get_single_test_name(mode="module") def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path: """Add fixture to the list of fixtures of a given test case.""" fixture_basename = self.get_fixture_basename(info) fixture_path = ( self.output_dir / fixture.output_base_dir_name() / fixture_basename.with_suffix(fixture.output_file_extension) ) # relevant when we group by test function if fixture_path not in self.all_fixtures.keys(): self.all_fixtures[fixture_path] = Fixtures(root={}) self.json_path_to_test_item[fixture_path] = info self.all_fixtures[fixture_path][info.get_id()] = fixture if self.flush_interval > 0 and len(self.all_fixtures) >= self.flush_interval: self.dump_fixtures() return fixture_path def dump_fixtures(self) -> None: """Dump all collected fixtures to their respective files.""" if self.output_dir.name == "stdout": combined_fixtures = { k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items() } json.dump(combined_fixtures, sys.stdout, indent=4) return os.makedirs(self.output_dir, exist_ok=True) for fixture_path, fixtures in self.all_fixtures.items(): os.makedirs(fixture_path.parent, exist_ok=True) if len({fixture.__class__ for fixture in fixtures.values()}) != 1: raise TypeError("All fixtures in a single file must have the same format.") fixtures.collect_into_file(fixture_path) self.all_fixtures.clear() def verify_fixture_files(self, evm_fixture_verification: FixtureConsumer) -> None: """Run `evm [state|block]test` on each fixture.""" for fixture_path, name_fixture_dict in self.all_fixtures.items(): for _fixture_name, fixture in name_fixture_dict.items(): if evm_fixture_verification.can_consume(fixture.__class__): info = self.json_path_to_test_item[fixture_path] consume_direct_dump_dir = self._get_consume_direct_dump_dir(info) evm_fixture_verification.consume_fixture( fixture.__class__, fixture_path, fixture_name=None, debug_output_path=consume_direct_dump_dir, ) def _get_consume_direct_dump_dir( self, info: TestInfo, ) -> Path | None: """ Directory to dump the current test function's fixture.json and fixture verification debug output. """ if not self.base_dump_dir: return None if self.single_fixture_per_file: return info.get_dump_dir_path( self.base_dump_dir, self.filler_path, level="test_parameter" ) else: return info.get_dump_dir_path( self.base_dump_dir, self.filler_path, level="test_function" ) ================================================ FILE: src/ethereum_test_fixtures/common.py ================================================ """Common types used to define multiple fixture types.""" from typing import Dict from pydantic import AliasChoices, Field from ethereum_test_base_types import ( BlobSchedule, CamelModel, EthereumTestRootModel, SignableRLPSerializable, ZeroPaddedHexNumber, ) from ethereum_test_types.account_types import Address from ethereum_test_types.transaction_types import AuthorizationTupleGeneric class FixtureForkBlobSchedule(CamelModel): """Representation of the blob schedule of a given fork.""" target_blobs_per_block: ZeroPaddedHexNumber = Field(..., alias="target") max_blobs_per_block: ZeroPaddedHexNumber = Field(..., alias="max") base_fee_update_fraction: ZeroPaddedHexNumber = Field(...) class FixtureBlobSchedule(EthereumTestRootModel[Dict[str, FixtureForkBlobSchedule]]): """Blob schedule configuration dictionary.""" root: Dict[str, FixtureForkBlobSchedule] = Field(default_factory=dict, validate_default=True) @classmethod def from_blob_schedule( cls, blob_schedule: BlobSchedule | None ) -> "FixtureBlobSchedule | None": """Return a FixtureBlobSchedule from a BlobSchedule.""" if blob_schedule is None: return None return cls( root=blob_schedule.model_dump(), ) class FixtureAuthorizationTuple( AuthorizationTupleGeneric[ZeroPaddedHexNumber], SignableRLPSerializable ): """Authorization tuple for fixture transactions.""" v: ZeroPaddedHexNumber = Field(validation_alias=AliasChoices("v", "yParity")) r: ZeroPaddedHexNumber s: ZeroPaddedHexNumber signer: Address | None = None @classmethod def from_authorization_tuple( cls, auth_tuple: AuthorizationTupleGeneric ) -> "FixtureAuthorizationTuple": """Return FixtureAuthorizationTuple from an AuthorizationTuple.""" return cls(**auth_tuple.model_dump()) def sign(self) -> None: """Sign the current object for further serialization.""" # No-op, as the object is always already signed return ================================================ FILE: src/ethereum_test_fixtures/consume.py ================================================ """Defines models for index files and consume test cases.""" import datetime from abc import ABC, abstractmethod from pathlib import Path from typing import Iterator, List, Optional, TextIO from pydantic import BaseModel, RootModel from ethereum_test_base_types import HexNumber from ethereum_test_forks import Fork from .base import BaseFixture, FixtureFormat from .file import Fixtures class FixtureConsumer(ABC): """Abstract class for verifying Ethereum test fixtures.""" fixture_formats: List[FixtureFormat] def can_consume( self, fixture_format: FixtureFormat, ) -> bool: """Return whether the fixture format is consumable by this consumer.""" return fixture_format in self.fixture_formats @abstractmethod def consume_fixture( self, fixture_format: FixtureFormat, fixture_path: Path, fixture_name: str | None = None, debug_output_path: Path | None = None, ) -> None: """ Test the client with the specified fixture using its direct consumer interface. """ raise NotImplementedError( "The `consume_fixture()` function is not supported by this tool." ) class TestCaseBase(BaseModel): """Base model for a test case used in EEST consume commands.""" id: str fixture_hash: HexNumber | None fork: Fork | None format: FixtureFormat pre_hash: str | None = None __test__ = False # stop pytest from collecting this class as a test class TestCaseStream(TestCaseBase): """The test case model used to load test cases from a stream (stdin).""" fixture: BaseFixture __test__ = False # stop pytest from collecting this class as a test class TestCaseIndexFile(TestCaseBase): """ The test case model used to save/load test cases to/from an index file. """ json_path: Path __test__ = False # stop pytest from collecting this class as a test # TODO: add pytest marks """ ConsumerTypes = Literal["all", "direct", "rlp", "engine"] @classmethod def _marks_default(cls): return {consumer_type: [] for consumer_type in get_args(ConsumerTypes)} marks: Mapping[ConsumerTypes, List[pytest.MarkDecorator]] = field( default_factory=lambda: TestCase._marks_default() ) """ class IndexFile(BaseModel): """The model definition used for fixture index files.""" root_hash: HexNumber | None created_at: datetime.datetime test_count: int forks: Optional[List[Fork]] = [] fixture_formats: Optional[List[str]] = [] test_cases: List[TestCaseIndexFile] class TestCases(RootModel): """Root model defining a list test cases used in consume commands.""" root: List[TestCaseIndexFile] | List[TestCaseStream] __test__ = False # stop pytest from collecting this class as a test def __len__(self) -> int: """Return the number of test cases in the root list.""" return len(self.root) def __getitem__(self, position: int) -> TestCaseIndexFile | TestCaseStream: """Retrieve a test case by its index.""" return self.root[position] def __setitem__(self, position: int, value: TestCaseIndexFile | TestCaseStream) -> None: """Set a test case at a particular index.""" self.root[position] = value # type: ignore def __delitem__(self, position: int) -> None: """Remove a test case at a particular index.""" del self.root[position] def append(self, item: TestCaseIndexFile | TestCaseStream) -> None: """Append a test case to the root list.""" self.root.append(item) # type: ignore def insert(self, position: int, value: TestCaseIndexFile | TestCaseStream) -> None: """Insert a test case at a given position.""" self.root.insert(position, value) # type: ignore def remove(self, value: TestCaseIndexFile | TestCaseStream) -> None: """Remove a test case from the root list.""" self.root.remove(value) # type: ignore def pop(self, position: int = -1) -> TestCaseIndexFile | TestCaseStream: """Remove and return a test case at the given position.""" return self.root.pop(position) def clear(self) -> None: """Remove all items from the root list.""" self.root.clear() def __iter__(self) -> Iterator[TestCaseIndexFile | TestCaseStream]: # type: ignore [override] """Return an iterator for the root list.""" return iter(self.root) def __repr__(self) -> str: """Return a string representation of the TestCases object.""" return f"{self.__class__.__name__}(root={self.root})" @classmethod def from_stream(cls, fd: TextIO) -> "TestCases": """Create a TestCases object from a stream.""" fixtures: Fixtures = Fixtures.model_validate_json(fd.read()) test_cases = [ TestCaseStream( id=fixture_name, fixture_hash=fixture.hash, fork=fixture.get_fork(), format=fixture.__class__, fixture=fixture, ) for fixture_name, fixture in fixtures.items() ] return cls(root=test_cases) @classmethod def from_index_file(cls, index_file: Path) -> "TestCases": """Create a TestCases object from an index file.""" index: IndexFile = IndexFile.model_validate_json(index_file.read_text()) return cls(root=index.test_cases) ================================================ FILE: src/ethereum_test_fixtures/eof.py ================================================ """EOFTest Type Definitions.""" from typing import Any, ClassVar, Mapping from pydantic import Field from ethereum_test_base_types import Bytes, CamelModel, Number from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList from ethereum_test_forks import Fork from ethereum_test_types.eof.v1 import ContainerKind from .base import BaseFixture class Result(CamelModel): """Result for a single fork in a fixture.""" exception: EOFExceptionInstanceOrList | None = None valid: bool = Field(..., alias="result") def model_post_init(self, __context: Any) -> None: """ Cross-field validation that a test cannot have an empty exception if the valid is False. """ if not self.valid and self.exception is None: raise ValueError("Invalid test: invalid but exception is not set") elif self.valid and self.exception is not None: raise ValueError("Invalid test: valid but exception is set") super().model_post_init(__context) class Vector(CamelModel): """Single test vector in a fixture.""" code: Bytes container_kind: ContainerKind = ContainerKind.RUNTIME results: Mapping[Fork, Result] class EOFFixture(BaseFixture): """Fixture for a single EOFTest.""" format_name: ClassVar[str] = "eof_test" description: ClassVar[str] = "Tests that generate an EOF test fixture." vectors: Mapping[Number, Vector] def get_fork(self) -> Fork | None: """Return fork of the fixture as a string.""" return None ================================================ FILE: src/ethereum_test_fixtures/file.py ================================================ """Defines models for interacting with JSON fixture files.""" import json from pathlib import Path from typing import Any, Dict, ItemsView, Iterator, KeysView, ValuesView from filelock import FileLock from pydantic import SerializeAsAny from ethereum_test_base_types import EthereumTestRootModel from .base import BaseFixture class Fixtures(EthereumTestRootModel): """ A base class for defining top-level models that encapsulate multiple test fixtures. Each fixture is stored in a dictionary, where each key is a string (typically the fixture name) and its corresponding value is a fixture object. This is the structure used for blockchain and state JSON fixture files. This class implements dunder methods and other common functionality to allow interaction with the model's fixtures as if they were being accessed directly from a dictionary. """ root: Dict[str, SerializeAsAny[BaseFixture]] def __setitem__(self, key: str, value: BaseFixture) -> None: # noqa: D105 self.root[key] = value def __getitem__(self, item: str) -> SerializeAsAny[BaseFixture]: # noqa: D105 return self.root[item] def __iter__(self) -> Iterator[str]: # type: ignore [override] # noqa: D105 return iter(self.root) def __contains__(self, item: str) -> bool: # noqa: D105 return item in self.root def __len__(self) -> int: # noqa: D105 return len(self.root) def keys(self) -> KeysView[str]: # noqa: D102 return self.root.keys() def values(self) -> ValuesView[SerializeAsAny[BaseFixture]]: # noqa: D102 return self.root.values() def items(self) -> ItemsView[str, SerializeAsAny[BaseFixture]]: # noqa: D102 return self.root.items() def collect_into_file(self, file_path: Path) -> None: """ For all formats, we join the fixtures as json into a single file. Note: We don't use pydantic model_dump_json() on the Fixtures object as we add the hash to the info field on per-fixture basis. """ json_fixtures: Dict[str, Dict[str, Any]] = {} lock_file_path = file_path.with_suffix(".lock") with FileLock(lock_file_path): if file_path.exists(): with open(file_path, "r") as f: json_fixtures = json.load(f) for name, fixture in self.items(): json_fixtures[name] = fixture.json_dict_with_info() with open(file_path, "w") as f: json.dump(dict(sorted(json_fixtures.items())), f, indent=4) ================================================ FILE: src/ethereum_test_fixtures/pre_alloc_groups.py ================================================ """Pre-allocation group models for test fixture generation.""" import json from pathlib import Path from typing import Any, Dict, Generator, Iterator, KeysView, List, Tuple from filelock import FileLock from pydantic import Field, PrivateAttr, computed_field from ethereum_test_base_types import CamelModel, EthereumTestRootModel from ethereum_test_forks import Fork from ethereum_test_types import Alloc, Environment from .blockchain import FixtureHeader class PreAllocGroup(CamelModel): """ Pre-allocation group for tests with identical Environment and fork values. Groups tests by a hash of their fixture Environment and fork to enable pre-allocation group optimization. """ # Allow both field names and aliases model_config = {"populate_by_name": True} test_ids: List[str] = Field(default_factory=list) environment: Environment = Field(..., description="Grouping environment for this test group") fork: Fork = Field(..., alias="network") pre: Alloc @computed_field(description="Number of accounts in the pre-allocation") # type: ignore[prop-decorator] @property def pre_account_count(self) -> int: """Return the amount of accounts the pre-allocation group holds.""" return len(self.pre.root) @computed_field(description="Number of tests in this group") # type: ignore[prop-decorator] @property def test_count(self) -> int: """Return the amount of tests that use this pre-allocation group.""" return len(self.test_ids) @computed_field # type: ignore[prop-decorator] @property def genesis(self) -> FixtureHeader: """Get the genesis header for this group.""" return FixtureHeader.genesis( self.fork, self.environment, self.pre.state_root(), ) def to_file(self, file: Path) -> None: """Save PreAllocGroup to a file.""" lock_file_path = file.with_suffix(".lock") with FileLock(lock_file_path): if file.exists(): with open(file, "r") as f: previous_pre_alloc_group = PreAllocGroup.model_validate_json(f.read()) for account in previous_pre_alloc_group.pre: existing_account = previous_pre_alloc_group.pre[account] if account not in self.pre: self.pre[account] = existing_account else: new_account = self.pre[account] if new_account != existing_account: # This procedure fails during xdist worker's # pytest_sessionfinish and is not reported to the # master thread. We signal here that the groups # created contain a collision. collision_file_path = file.with_suffix(".fail") collision_exception = Alloc.CollisionError( address=account, account_1=existing_account, account_2=new_account, ) with open(collision_file_path, "w") as f: f.write(json.dumps(collision_exception.to_json())) raise collision_exception self.test_ids.extend(previous_pre_alloc_group.test_ids) with open(file, "w") as f: f.write(self.model_dump_json(by_alias=True, exclude_none=True, indent=2)) class PreAllocGroups(EthereumTestRootModel): """ Root model mapping pre-allocation group hashes to test groups. If lazy_load is True, the groups are not loaded from the folder until they are accessed. Iterating will fail if lazy_load is True. """ root: Dict[str, PreAllocGroup | None] _folder_source: Path | None = PrivateAttr(None) def __setitem__(self, key: str, value: Any) -> None: """Set item in root dict.""" assert self._folder_source is None, ( "Cannot set item in root dict after folder source is set" ) self.root[key] = value @classmethod def from_folder(cls, folder: Path, *, lazy_load: bool = False) -> "PreAllocGroups": """Create PreAllocGroups from a folder of pre-allocation files.""" # First check for collision failures for fail_file in folder.glob("*.fail"): with open(fail_file) as f: raise Alloc.CollisionError.from_json(json.loads(f.read())) data: Dict[str, PreAllocGroup | None] = {} for file in folder.glob("*.json"): if lazy_load: data[file.stem] = None else: with open(file) as f: data[file.stem] = PreAllocGroup.model_validate_json(f.read()) instance = cls(root=data) if lazy_load: instance._folder_source = folder return instance def to_folder(self, folder: Path) -> None: """Save PreAllocGroups to a folder of pre-allocation files.""" for key, value in self.root.items(): assert value is not None, f"Value for key {key} is None" value.to_file(folder / f"{key}.json") def __getitem__(self, item: str) -> PreAllocGroup: """Get item from root dict.""" if self._folder_source is None: value = self.root[item] assert value is not None, f"Item {item} is None" return value else: if self.root[item] is None: with open(self._folder_source / f"{item}.json") as f: self.root[item] = PreAllocGroup.model_validate_json(f.read()) result = self.root[item] assert result is not None return result def __iter__(self) -> Iterator[str]: # type: ignore [override] """Iterate over root dict.""" return iter(self.root) def __contains__(self, item: str) -> bool: """Check if item in root dict.""" return item in self.root def __len__(self) -> int: """Get length of root dict.""" return len(self.root) def keys(self) -> KeysView[str]: """Get keys from root dict.""" return self.root.keys() def values(self) -> Generator[PreAllocGroup, None, None]: """Get values from root dict.""" for value in self.root.values(): assert value is not None, "Value is None" yield value def items(self) -> Generator[Tuple[str, PreAllocGroup], None, None]: """Get items from root dict.""" for key, value in self.root.items(): assert value is not None, f"Value for key {key} is None" yield key, value ================================================ FILE: src/ethereum_test_fixtures/py.typed ================================================ ================================================ FILE: src/ethereum_test_fixtures/state.py ================================================ """StateTest types.""" from typing import ClassVar, List, Mapping, Sequence from pydantic import BaseModel, Field from ethereum_test_base_types import ( AccessList, Address, Alloc, Bytes, CamelModel, Hash, ZeroPaddedHexNumber, ) from ethereum_test_exceptions import TransactionExceptionInstanceOrList from ethereum_test_forks import Fork from ethereum_test_types.block_types import EnvironmentGeneric from ethereum_test_types.transaction_types import ( Transaction, TransactionFixtureConverter, ) from .base import BaseFixture from .common import FixtureAuthorizationTuple, FixtureBlobSchedule class FixtureEnvironment(EnvironmentGeneric[ZeroPaddedHexNumber]): """Type used to describe the environment of a state test.""" prev_randao: Hash | None = Field(None, alias="currentRandom") # type: ignore class FixtureTransaction(TransactionFixtureConverter): """Type used to describe a transaction in a state test.""" nonce: ZeroPaddedHexNumber gas_price: ZeroPaddedHexNumber | None = None max_priority_fee_per_gas: ZeroPaddedHexNumber | None = None max_fee_per_gas: ZeroPaddedHexNumber | None = None gas_limit: List[ZeroPaddedHexNumber] to: Address | None = None value: List[ZeroPaddedHexNumber] data: List[Bytes] access_lists: List[List[AccessList] | None] | None = None authorization_list: List[FixtureAuthorizationTuple] | None = None initcodes: List[Bytes] | None = None max_fee_per_blob_gas: ZeroPaddedHexNumber | None = None blob_versioned_hashes: Sequence[Hash] | None = None sender: Address | None = None secret_key: Hash | None = None @classmethod def from_transaction(cls, tx: Transaction) -> "FixtureTransaction": """Return FixtureTransaction from a Transaction.""" model_as_dict = tx.model_dump( exclude={"gas_limit", "value", "data", "access_list"}, exclude_none=True ) model_as_dict["gas_limit"] = [tx.gas_limit] model_as_dict["value"] = [tx.value] model_as_dict["data"] = [tx.data] model_as_dict["access_lists"] = [tx.access_list] if tx.access_list is not None else None return cls(**model_as_dict) class FixtureForkPostIndexes(BaseModel): """ Type used to describe the indexes of a single post state of a single Fork. """ data: int = 0 gas: int = 0 value: int = 0 class FixtureForkPost(CamelModel): """Type used to describe the post state of a single Fork.""" state_root: Hash = Field(..., alias="hash") logs_hash: Hash = Field(..., alias="logs") tx_bytes: Bytes = Field(..., alias="txbytes") indexes: FixtureForkPostIndexes = Field(default_factory=FixtureForkPostIndexes) state: Alloc expect_exception: TransactionExceptionInstanceOrList | None = None class FixtureConfig(CamelModel): """Chain configuration for a fixture.""" blob_schedule: FixtureBlobSchedule | None = None chain_id: ZeroPaddedHexNumber = Field(ZeroPaddedHexNumber(1), alias="chainid") class StateFixture(BaseFixture): """Fixture for a single StateTest.""" format_name: ClassVar[str] = "state_test" description: ClassVar[str] = "Tests that generate a state test fixture." env: FixtureEnvironment pre: Alloc transaction: FixtureTransaction post: Mapping[Fork, List[FixtureForkPost]] config: FixtureConfig def get_fork(self) -> Fork | None: """Return fork of the fixture as a string.""" forks = list(self.post.keys()) assert len(forks) == 1, "Expected state test fixture with single fork" return forks[0] ================================================ FILE: src/ethereum_test_fixtures/tests/__init__.py ================================================ """Tests for the ethereum_test_fixtures package.""" ================================================ FILE: src/ethereum_test_fixtures/tests/test_base.py ================================================ """Test cases for the ethereum_test_fixtures.base module.""" import pytest from ..base import BaseFixture from ..file import Fixtures from ..state import FixtureEnvironment, FixtureTransaction, StateFixture from ..transaction import FixtureResult, TransactionFixture def test_json_dict() -> None: """Test that the json_dict property does not include the info field.""" fixture = TransactionFixture( txbytes="0x1234", result={"Paris": FixtureResult(intrinsic_gas=0)}, ) assert "_info" not in fixture.json_dict, "json_dict should exclude the 'info' field" @pytest.mark.parametrize( "fixture", [ pytest.param( StateFixture( env=FixtureEnvironment(), transaction=FixtureTransaction( nonce=0, gas_limit=[0], value=[0], data=[b""], ), pre={}, post={}, config={}, ), id="StateFixture", ), pytest.param( TransactionFixture( transaction="0x1234", result={"Paris": FixtureResult(intrinsic_gas=0)}, ), id="TransactionFixture", ), ], ) def test_base_fixtures_parsing(fixture: BaseFixture) -> None: """Test that the Fixtures generic model can validate any fixture format.""" fixture.fill_info( "t8n-version", "test_case_description", fixture_source_url="fixture_source_url", ref_spec=None, _info_metadata={}, ) json_dump = fixture.json_dict_with_info() assert json_dump is not None Fixtures.model_validate({"fixture": json_dump}) ================================================ FILE: src/ethereum_test_fixtures/tests/test_blockchain.py ================================================ """Test the blockchain test types.""" from typing import Any, Dict import pytest from pydantic import TypeAdapter from ethereum_test_base_types import ( AccessList, Address, Bloom, BLSPublicKey, BLSSignature, Bytes, Hash, HeaderNonce, TestPrivateKey, ZeroPaddedHexNumber, to_json, ) from ethereum_test_exceptions import BlockException, EngineAPIError, TransactionException from ethereum_test_forks import Prague from ethereum_test_types import ( EOA, AuthorizationTuple, ConsolidationRequest, DepositRequest, Requests, Transaction, Withdrawal, WithdrawalRequest, ) from ..blockchain import ( EngineNewPayloadParameters, FixtureBlockBase, FixtureEngineNewPayload, FixtureExecutionPayload, FixtureHeader, FixtureTransaction, InvalidFixtureBlock, ) fixture_header_ones = FixtureHeader( parent_hash=Hash(1), ommers_hash=Hash(1), fee_recipient=Address(1), state_root=Hash(1), transactions_trie=Hash(1), receipts_root=Hash(1), logs_bloom=Bloom(1), difficulty=1, number=1, gas_limit=1, gas_used=1, timestamp=1, extra_data=Bytes([1]), prev_randao=Hash(1), nonce=HeaderNonce(1), base_fee_per_gas=1, withdrawals_root=Hash(1), blob_gas_used=1, excess_blob_gas=1, # hash=Hash(1), ) @pytest.mark.parametrize( ["can_be_deserialized", "model_instance", "json_repr"], [ pytest.param( True, FixtureTransaction.from_transaction(Transaction().with_signature_and_sender()), { "type": "0x00", "chainId": "0x01", "nonce": "0x00", "to": "0x00000000000000000000000000000000000000aa", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "gasPrice": "0x0a", "v": "0x26", "r": "0xcc61d852649c34cc0b71803115f38036ace257d2914f087bf885e6806a664fbd", "s": "0x2020cb35f5d7731ab540d62614503a7f2344301a86342f67daf011c1341551ff", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_type_0_default_values", ), pytest.param( True, FixtureTransaction.from_transaction(Transaction(to=None).with_signature_and_sender()), { "type": "0x00", "chainId": "0x01", "to": "", "nonce": "0x00", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "gasPrice": "0x0a", "v": "0x25", "r": "0x1cfe2cbb0c3577f74d9ae192a7f1ee2d670fe806a040f427af9cb768be3d07ce", "s": "0x0cbe2d029f52dbf93ade486625bed0603945d2c7358b31de99fe8786c00f13da", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_type_0_contract_creation", ), pytest.param( True, FixtureTransaction.from_transaction(Transaction(ty=1).with_signature_and_sender()), { "type": "0x01", "chainId": "0x01", "nonce": "0x00", "to": "0x00000000000000000000000000000000000000aa", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "gasPrice": "0x0a", "accessList": [], "v": "0x01", "r": "0x58b4ddaa529492d32b6bc8327eb8ee0bc8b535c3bfc0f4f1db3d7c16b51d1851", "s": "0x5ef19167661b14d06dfc785bf62693e6f9e5a44e7c11e0320efed27b27294970", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_type_1_default_values", ), pytest.param( True, FixtureTransaction.from_transaction( Transaction(ty=2, max_fee_per_gas=7).with_signature_and_sender() ), { "type": "0x02", "chainId": "0x01", "nonce": "0x00", "to": "0x00000000000000000000000000000000000000aa", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", "accessList": [], "v": "0x00", "r": "0x33fc39081d01f8e7f0ce5426d4a00a7b07c2edea064d24a8cac8e4b1f0c08298", "s": "0x4635e1c45238697db38e37070d4fce27fb5684f9dec4046466ea42a9834bad0a", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_type_2_default_values", ), pytest.param( True, FixtureTransaction.from_transaction( Transaction( ty=3, max_fee_per_gas=7, max_fee_per_blob_gas=1, blob_versioned_hashes=[], ).with_signature_and_sender() ), { "type": "0x03", "chainId": "0x01", "nonce": "0x00", "to": "0x00000000000000000000000000000000000000aa", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", "maxFeePerBlobGas": "0x01", "accessList": [], "blobVersionedHashes": [], "v": "0x01", "r": "0x8978475a00bf155bf5687dfda89c2df55ef6c341cdfd689aeaa6c519569a530a", "s": "0x66fc34935cdd191441a12a2e7b1f224cb40b928afb9bc89c8ddb2b78c19342cc", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_type_3_default_values", ), pytest.param( True, FixtureTransaction.from_transaction( Transaction( ty=4, max_fee_per_gas=7, authorization_list=[ AuthorizationTuple( chain_id=1, address=2, nonce=3, signer=EOA(key=TestPrivateKey), ) ], ).with_signature_and_sender() ), { "type": "0x04", "chainId": "0x01", "nonce": "0x00", "to": "0x00000000000000000000000000000000000000aa", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", "accessList": [], "authorizationList": [ { "chainId": "0x01", "address": Address(2).hex(), "nonce": "0x03", "v": "0x00", "r": "0xda29c3bd0304ae475b06d1a11344e0b6d75590f2c23138c9507f4b5bedde3c79", "s": "0x3e1fb143ae0460373d567cf901645757b321e42c423a53b2d46ed13c9ef0a9ab", "signer": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "yParity": "0x00", } ], "v": "0x01", "r": "0xe7da7f244c95cea73ac6316971139ac0eb8fad455d9a25e1c134d7a157c38ff9", "s": "0x1939185d2e2a2b3375183e42b5755d695efbd72e186cf9a3e6958a3fb84cc709", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_type_4", ), pytest.param( True, FixtureTransaction.from_transaction( Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender() ), { "type": "0x03", "chainId": "0x01", "nonce": "0x00", "to": "0x0000000000000000000000000000000000001234", "accessList": [ { "address": "0x0000000000000000000000000000000000001234", "storageKeys": [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", ], } ], "value": "0x00", "data": "0x0100", "gasLimit": "0x5208", "maxPriorityFeePerGas": "0x0a", "maxFeePerGas": "0x14", "maxFeePerBlobGas": "0x1e", "blobVersionedHashes": [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", ], "v": "0x00", "r": "0x418bb557c43262375f80556cb09dac5e67396acf0eaaf2c2540523d1ce54b280", "s": "0x4fa36090ea68a1138043d943ced123c0b0807d82ff3342a6977cbc09230e927c", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="fixture_transaction_3", ), pytest.param( True, FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), ), { "parentHash": Hash(0).hex(), "uncleHash": Hash(1).hex(), "coinbase": Address(2).hex(), "stateRoot": Hash(3).hex(), "transactionsTrie": Hash(4).hex(), "receiptTrie": Hash(5).hex(), "bloom": Bloom(6).hex(), "difficulty": ZeroPaddedHexNumber(7).hex(), "number": ZeroPaddedHexNumber(8).hex(), "gasLimit": ZeroPaddedHexNumber(9).hex(), "gasUsed": ZeroPaddedHexNumber(10).hex(), "timestamp": ZeroPaddedHexNumber(11).hex(), "extraData": Bytes([12]).hex(), "mixHash": Hash(13).hex(), "nonce": HeaderNonce(14).hex(), "hash": "0x1dc087517148c2d6a1dd1ea5de107bc5f728414f9d210ed18286d305abe6ba5e", }, id="fixture_header_1", ), pytest.param( True, FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), { "parentHash": Hash(0).hex(), "uncleHash": Hash(1).hex(), "coinbase": Address(2).hex(), "stateRoot": Hash(3).hex(), "transactionsTrie": Hash(4).hex(), "receiptTrie": Hash(5).hex(), "bloom": Bloom(6).hex(), "difficulty": ZeroPaddedHexNumber(7).hex(), "number": ZeroPaddedHexNumber(8).hex(), "gasLimit": ZeroPaddedHexNumber(9).hex(), "gasUsed": ZeroPaddedHexNumber(10).hex(), "timestamp": ZeroPaddedHexNumber(11).hex(), "extraData": Bytes([12]).hex(), "mixHash": Hash(13).hex(), "nonce": HeaderNonce(14).hex(), "baseFeePerGas": ZeroPaddedHexNumber(15).hex(), "withdrawalsRoot": Hash(16).hex(), "blobGasUsed": ZeroPaddedHexNumber(17).hex(), "excessBlobGas": ZeroPaddedHexNumber(18).hex(), "hash": "0xd90115b7fde329f64335763a446af150ab67e639281dccdb07a007d18bb80211", }, id="fixture_header_2", ), pytest.param( True, FixtureBlockBase( header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), transactions=[ FixtureTransaction.from_transaction(Transaction().with_signature_and_sender()) ], ), { "blockHeader": { "parentHash": Hash(0).hex(), "uncleHash": Hash(1).hex(), "coinbase": Address(2).hex(), "stateRoot": Hash(3).hex(), "transactionsTrie": Hash(4).hex(), "receiptTrie": Hash(5).hex(), "bloom": Bloom(6).hex(), "difficulty": ZeroPaddedHexNumber(7).hex(), "number": ZeroPaddedHexNumber(8).hex(), "gasLimit": ZeroPaddedHexNumber(9).hex(), "gasUsed": ZeroPaddedHexNumber(10).hex(), "timestamp": ZeroPaddedHexNumber(11).hex(), "extraData": Bytes([12]).hex(), "mixHash": Hash(13).hex(), "nonce": HeaderNonce(14).hex(), "baseFeePerGas": ZeroPaddedHexNumber(15).hex(), "withdrawalsRoot": Hash(16).hex(), "blobGasUsed": ZeroPaddedHexNumber(17).hex(), "excessBlobGas": ZeroPaddedHexNumber(18).hex(), "hash": "0xd90115b7fde329f64335763a446af150ab67e639281dccdb07a007d18bb80211", }, "blocknumber": "8", "uncleHeaders": [], "transactions": [ { "type": "0x00", "chainId": "0x01", "nonce": "0x00", "to": "0x00000000000000000000000000000000000000aa", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "gasPrice": "0x0a", "v": "0x26", "r": "0xcc61d852649c34cc0b71803115f38036ace257d2914f087bf885e6806a664fbd", "s": "0x2020cb35f5d7731ab540d62614503a7f2344301a86342f67daf011c1341551ff", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", } ], }, id="fixture_block_1", ), pytest.param( True, FixtureBlockBase( header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), transactions=[ FixtureTransaction.from_transaction( Transaction(to=None).with_signature_and_sender() ) ], ), { "blockHeader": { "parentHash": Hash(0).hex(), "uncleHash": Hash(1).hex(), "coinbase": Address(2).hex(), "stateRoot": Hash(3).hex(), "transactionsTrie": Hash(4).hex(), "receiptTrie": Hash(5).hex(), "bloom": Bloom(6).hex(), "difficulty": ZeroPaddedHexNumber(7).hex(), "number": ZeroPaddedHexNumber(8).hex(), "gasLimit": ZeroPaddedHexNumber(9).hex(), "gasUsed": ZeroPaddedHexNumber(10).hex(), "timestamp": ZeroPaddedHexNumber(11).hex(), "extraData": Bytes([12]).hex(), "mixHash": Hash(13).hex(), "nonce": HeaderNonce(14).hex(), "baseFeePerGas": ZeroPaddedHexNumber(15).hex(), "withdrawalsRoot": Hash(16).hex(), "blobGasUsed": ZeroPaddedHexNumber(17).hex(), "excessBlobGas": ZeroPaddedHexNumber(18).hex(), "hash": "0xd90115b7fde329f64335763a446af150ab67e639281dccdb07a007d18bb80211", }, "blocknumber": "8", "uncleHeaders": [], "transactions": [ { "type": "0x00", "chainId": "0x01", "to": "", "nonce": "0x00", "value": "0x00", "data": "0x", "gasLimit": "0x5208", "gasPrice": "0x0a", "v": "0x25", "r": "0x1cfe2cbb0c3577f74d9ae192a7f1ee2d670fe806a040f427af9cb768be3d07ce", "s": "0x0cbe2d029f52dbf93ade486625bed0603945d2c7358b31de99fe8786c00f13da", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", } ], }, id="fixture_block_2", ), pytest.param( True, InvalidFixtureBlock( rlp="0x00", expect_exception=BlockException.RLP_STRUCTURES_ENCODING, ), { "rlp": "0x00", "expectException": "BlockException.RLP_STRUCTURES_ENCODING", }, id="invalid_fixture_block_1", ), pytest.param( True, InvalidFixtureBlock( rlp="0x00", expect_exception=TransactionException.INTRINSIC_GAS_TOO_LOW, ), { "rlp": "0x00", "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", }, id="invalid_fixture_block_2", ), pytest.param( False, # Can not be deserialized: A single expect_exception str # will not be deserialized as a list and therefore will not # match the model_instance definition. InvalidFixtureBlock( rlp="0x00", expect_exception=[TransactionException.INTRINSIC_GAS_TOO_LOW], ), { "rlp": "0x00", "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", }, id="invalid_fixture_block_3", ), pytest.param( True, InvalidFixtureBlock( rlp="0x00", expect_exception=[ BlockException.RLP_STRUCTURES_ENCODING, TransactionException.INTRINSIC_GAS_TOO_LOW, ], ), { "rlp": "0x00", "expectException": "BlockException.RLP_STRUCTURES_ENCODING|" "TransactionException.INTRINSIC_GAS_TOO_LOW", }, id="invalid_fixture_block_4", ), pytest.param( True, FixtureExecutionPayload.from_fixture_header( header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), transactions=[ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), ], withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], ), { "parentHash": Hash(0).hex(), "feeRecipient": Address(2).hex(), "stateRoot": Hash(3).hex(), "receiptsRoot": Hash(5).hex(), "logsBloom": Bloom(6).hex(), "blockNumber": hex(8), "gasLimit": hex(9), "gasUsed": hex(10), "timestamp": hex(11), "extraData": Bytes([12]).hex(), "prevRandao": Hash(13).hex(), "baseFeePerGas": hex(15), "blobGasUsed": hex(17), "excessBlobGas": hex(18), "blockHash": "0xd90115b7fde329f64335763a446af150ab67e639281dccdb07a007d18bb80211", "transactions": [ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ) .with_signature_and_sender() .rlp() .hex() ], "withdrawals": [ to_json(Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)) ], }, id="fixture_execution_payload_1", ), pytest.param( True, FixtureEngineNewPayload.from_fixture_header( fork=Prague, header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, parent_beacon_block_root=19, requests_hash=20, ), transactions=[ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), ], withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], requests=Requests( DepositRequest( pubkey=BLSPublicKey(0), withdrawal_credentials=Hash(1), amount=2, signature=BLSSignature(3), index=4, ), WithdrawalRequest( source_address=Address(0), validator_pubkey=BLSPublicKey(1), amount=2, ), ConsolidationRequest( source_address=Address(0), source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), ).requests_list, validation_error=[ BlockException.INCORRECT_BLOCK_FORMAT, TransactionException.INTRINSIC_GAS_TOO_LOW, ], error_code=EngineAPIError.InvalidRequest, ), { "params": [ { "parentHash": Hash(0).hex(), "feeRecipient": Address(2).hex(), "stateRoot": Hash(3).hex(), "receiptsRoot": Hash(5).hex(), "logsBloom": Bloom(6).hex(), "blockNumber": hex(8), "gasLimit": hex(9), "gasUsed": hex(10), "timestamp": hex(11), "extraData": Bytes([12]).hex(), "prevRandao": Hash(13).hex(), "baseFeePerGas": hex(15), "blobGasUsed": hex(17), "excessBlobGas": hex(18), "blockHash": ( "0x93bd662d8a80a1f54bffc6d140b83d6cda233209998809f9540be51178b4d0b6" ), "transactions": [ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ) .with_signature_and_sender() .rlp() .hex() ], "withdrawals": [ to_json( Withdrawal( index=0, validator_index=1, address=0x1234, amount=2, ) ) ], }, [ str(Hash(0)), str(Hash(1)), ], str(Hash(19)), [ Bytes(r).hex() for r in Requests( DepositRequest( pubkey=BLSPublicKey(0), withdrawal_credentials=Hash(1), amount=2, signature=BLSSignature(3), index=4, ), WithdrawalRequest( source_address=Address(0), validator_pubkey=BLSPublicKey(1), amount=2, ), ConsolidationRequest( source_address=Address(0), source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), ).requests_list ], ], "forkchoiceUpdatedVersion": "3", "newPayloadVersion": "4", "validationError": "BlockException.INCORRECT_BLOCK_FORMAT" "|TransactionException.INTRINSIC_GAS_TOO_LOW", "errorCode": "-32600", }, id="fixture_engine_new_payload_1", ), pytest.param( True, FixtureEngineNewPayload.from_fixture_header( fork=Prague, header=FixtureHeader( fork=Prague, parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, parent_beacon_block_root=19, requests_hash=20, ), transactions=[ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), ], withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], requests=Requests( DepositRequest( pubkey=BLSPublicKey(0), withdrawal_credentials=Hash(1), amount=2, signature=BLSSignature(3), index=4, ), WithdrawalRequest( source_address=Address(0), validator_pubkey=BLSPublicKey(1), amount=2, ), ConsolidationRequest( source_address=Address(0), source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), ).requests_list, validation_error=[ BlockException.INCORRECT_BLOCK_FORMAT, TransactionException.INTRINSIC_GAS_TOO_LOW, ], ), { "params": [ { "parentHash": Hash(0).hex(), "feeRecipient": Address(2).hex(), "stateRoot": Hash(3).hex(), "receiptsRoot": Hash(5).hex(), "logsBloom": Bloom(6).hex(), "blockNumber": hex(8), "gasLimit": hex(9), "gasUsed": hex(10), "timestamp": hex(11), "extraData": Bytes([12]).hex(), "prevRandao": Hash(13).hex(), "baseFeePerGas": hex(15), "blobGasUsed": hex(17), "excessBlobGas": hex(18), "blockHash": ( "0x93bd662d8a80a1f54bffc6d140b83d6cda233209998809f9540be51178b4d0b6" ), "transactions": [ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ) .with_signature_and_sender() .rlp() .hex() ], "withdrawals": [ to_json( Withdrawal( index=0, validator_index=1, address=0x1234, amount=2, ) ) ], }, [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", ], str(Hash(19)), [ Bytes(r).hex() for r in Requests( DepositRequest( pubkey=BLSPublicKey(0), withdrawal_credentials=Hash(1), amount=2, signature=BLSSignature(3), index=4, ), WithdrawalRequest( source_address=Address(0), validator_pubkey=BLSPublicKey(1), amount=2, ), ConsolidationRequest( source_address=Address(0), source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), ).requests_list ], ], "newPayloadVersion": "4", "forkchoiceUpdatedVersion": "3", "validationError": "BlockException.INCORRECT_BLOCK_FORMAT" "|TransactionException.INTRINSIC_GAS_TOO_LOW", }, id="fixture_engine_new_payload_2", ), ], ) class TestPydanticModelConversion: """Test that Pydantic models are converted to and from JSON correctly.""" def test_json_serialization( self, can_be_deserialized: bool, model_instance: Any, json_repr: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" del can_be_deserialized assert to_json(model_instance) == json_repr def test_json_deserialization( self, can_be_deserialized: bool, model_instance: Any, json_repr: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" if not can_be_deserialized: pytest.skip(reason="The model instance in this case can not be deserialized") model_type = type(model_instance) assert model_type(**json_repr) == model_instance EngineNewPayloadParametersAdapter = TypeAdapter(EngineNewPayloadParameters) # type: ignore @pytest.mark.parametrize( "can_be_deserialized, adapter, type_instance, json_repr", [ pytest.param( True, EngineNewPayloadParametersAdapter, ( FixtureExecutionPayload.from_fixture_header( header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), transactions=[ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), ], withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], ), ), [ { "parentHash": Hash(0).hex(), "feeRecipient": Address(2).hex(), "stateRoot": Hash(3).hex(), "receiptsRoot": Hash(5).hex(), "logsBloom": Bloom(6).hex(), "blockNumber": hex(8), "gasLimit": hex(9), "gasUsed": hex(10), "timestamp": hex(11), "extraData": Bytes([12]).hex(), "prevRandao": Hash(13).hex(), "baseFeePerGas": hex(15), "blobGasUsed": hex(17), "excessBlobGas": hex(18), "blockHash": "0xd90115b7fde329f64335763a446af1" "50ab67e639281dccdb07a007d18bb80211", "transactions": [ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ) .with_signature_and_sender() .rlp() .hex() ], "withdrawals": [ to_json(Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)) ], } ], id="fixture_engine_new_payload_parameters_v1", ), pytest.param( True, EngineNewPayloadParametersAdapter, ( FixtureExecutionPayload.from_fixture_header( header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), transactions=[ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), ], withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], ), [Hash(1), Hash(2)], Hash(3), ), [ { "parentHash": Hash(0).hex(), "feeRecipient": Address(2).hex(), "stateRoot": Hash(3).hex(), "receiptsRoot": Hash(5).hex(), "logsBloom": Bloom(6).hex(), "blockNumber": hex(8), "gasLimit": hex(9), "gasUsed": hex(10), "timestamp": hex(11), "extraData": Bytes([12]).hex(), "prevRandao": Hash(13).hex(), "baseFeePerGas": hex(15), "blobGasUsed": hex(17), "excessBlobGas": hex(18), "blockHash": "0xd90115b7fde329f64335763a446af1" "50ab67e639281dccdb07a007d18bb80211", "transactions": [ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ) .with_signature_and_sender() .rlp() .hex() ], "withdrawals": [ to_json(Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)) ], }, [Hash(1).hex(), Hash(2).hex()], Hash(3).hex(), ], id="fixture_engine_new_payload_parameters_v3", ), pytest.param( True, EngineNewPayloadParametersAdapter, ( FixtureExecutionPayload.from_fixture_header( header=FixtureHeader( parent_hash=Hash(0), ommers_hash=Hash(1), fee_recipient=Address(2), state_root=Hash(3), transactions_trie=Hash(4), receipts_root=Hash(5), logs_bloom=Bloom(6), difficulty=7, number=8, gas_limit=9, gas_used=10, timestamp=11, extra_data=Bytes([12]), prev_randao=Hash(13), nonce=HeaderNonce(14), base_fee_per_gas=15, withdrawals_root=Hash(16), blob_gas_used=17, excess_blob_gas=18, ), transactions=[ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), ], withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], ), [Hash(1), Hash(2)], Hash(3), Requests( DepositRequest( pubkey=BLSPublicKey(0), withdrawal_credentials=Hash(1), amount=2, signature=BLSSignature(3), index=4, ), WithdrawalRequest( source_address=Address(0), validator_pubkey=BLSPublicKey(1), amount=2, ), ConsolidationRequest( source_address=Address(0), source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), ).requests_list, ), [ { "parentHash": Hash(0).hex(), "feeRecipient": Address(2).hex(), "stateRoot": Hash(3).hex(), "receiptsRoot": Hash(5).hex(), "logsBloom": Bloom(6).hex(), "blockNumber": hex(8), "gasLimit": hex(9), "gasUsed": hex(10), "timestamp": hex(11), "extraData": Bytes([12]).hex(), "prevRandao": Hash(13).hex(), "baseFeePerGas": hex(15), "blobGasUsed": hex(17), "excessBlobGas": hex(18), "blockHash": "0xd90115b7fde329f64335763a446af1" "50ab67e639281dccdb07a007d18bb80211", "transactions": [ Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ) .with_signature_and_sender() .rlp() .hex() ], "withdrawals": [ to_json(Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)) ], }, [Hash(1).hex(), Hash(2).hex()], Hash(3).hex(), [ Bytes(r).hex() for r in Requests( DepositRequest( pubkey=BLSPublicKey(0), withdrawal_credentials=Hash(1), amount=2, signature=BLSSignature(3), index=4, ), WithdrawalRequest( source_address=Address(0), validator_pubkey=BLSPublicKey(1), amount=2, ), ConsolidationRequest( source_address=Address(0), source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), ).requests_list ], ], id="fixture_engine_new_payload_parameters_v4", ), ], ) class TestPydanticAdaptersConversion: """Test that Pydantic models are converted to and from JSON correctly.""" def test_json_serialization( self, can_be_deserialized: bool, adapter: TypeAdapter, type_instance: Any, json_repr: str | Dict[str, Any], ) -> None: """Test that to_json returns the expected JSON for the given object.""" del can_be_deserialized assert ( adapter.dump_python( type_instance, mode="json", by_alias=True, exclude_none=True, ) == json_repr ) def test_json_deserialization( self, can_be_deserialized: bool, adapter: TypeAdapter, type_instance: Any, json_repr: str | Dict[str, Any], ) -> None: """Test that to_json returns the expected JSON for the given object.""" if not can_be_deserialized: pytest.skip(reason="The model instance in this case can not be deserialized") assert adapter.validate_python(json_repr) == type_instance ================================================ FILE: src/ethereum_test_fixtures/tests/test_eof.py ================================================ """Test the EOF fixture types.""" from typing import Any, Dict import pytest from ethereum_test_base_types import Bytes, to_json from ethereum_test_exceptions import EOFException from ..eof import ContainerKind, EOFFixture, Result, Vector @pytest.mark.parametrize( ["can_be_deserialized", "model_instance", "json_repr"], [ pytest.param( True, EOFFixture( vectors={ 1: Vector( code=Bytes(b"\x00"), container_kind=ContainerKind.INITCODE, results={ "Paris": Result( exception=None, valid=True, ), }, ), } ), { "vectors": { "1": { "code": "0x00", "containerKind": "INITCODE", "results": { "Paris": { "result": True, }, }, }, }, }, id="eof_fixture", ), pytest.param( True, EOFFixture( vectors={ 1: Vector( code=Bytes(b"\x00"), container_kind=ContainerKind.RUNTIME, results={ "Paris": Result( exception=EOFException.INVALID_MAGIC, valid=False, ), }, ), } ), { "vectors": { "1": { "code": "0x00", "containerKind": "RUNTIME", "results": { "Paris": { "exception": "EOFException.INVALID_MAGIC", "result": False, }, }, }, }, }, id="eof_fixture_with_exception", ), ], ) class TestPydanticModelConversion: """Test that Pydantic models are converted to and from JSON correctly.""" def test_json_serialization( self, can_be_deserialized: bool, model_instance: Any, json_repr: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" del can_be_deserialized serialized = to_json(model_instance) serialized.pop("_info") assert serialized == json_repr def test_json_deserialization( self, can_be_deserialized: bool, model_instance: Any, json_repr: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" if not can_be_deserialized: pytest.skip(reason="The model instance in this case can not be deserialized") model_type = type(model_instance) assert model_type(**json_repr) == model_instance ================================================ FILE: src/ethereum_test_fixtures/tests/test_state.py ================================================ """Test state spec types.""" from typing import Any, Dict import pytest from ethereum_test_base_types import Bytes, Hash, to_json from ethereum_test_exceptions import TransactionException from ..state import FixtureForkPost @pytest.mark.parametrize( ["can_be_deserialized", "model_instance", "json"], [ pytest.param( True, FixtureForkPost( state_root=0, logs_hash=1, tx_bytes="0x02", state={}, ), { "hash": Hash(0).hex(), "logs": Hash(1).hex(), "txbytes": Bytes(b"\x02").hex(), "indexes": {"data": 0, "gas": 0, "value": 0}, "state": {}, }, id="state_fixture_fork_post", ), pytest.param( True, FixtureForkPost( state_root=0, logs_hash=1, tx_bytes="0x02", expect_exception=TransactionException.INITCODE_SIZE_EXCEEDED, state={}, ), { "hash": Hash(0).hex(), "logs": Hash(1).hex(), "txbytes": Bytes(b"\x02").hex(), "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED", "indexes": {"data": 0, "gas": 0, "value": 0}, "state": {}, }, id="state_fixture_fork_post_exception", ), pytest.param( False, # Can not be deserialized: A single expect_exception str # will not be deserialized as a list and therefore will not # match the model_instance definition. FixtureForkPost( state_root=0, logs_hash=1, tx_bytes="0x02", expect_exception=[TransactionException.INITCODE_SIZE_EXCEEDED], state={}, ), { "hash": Hash(0).hex(), "logs": Hash(1).hex(), "txbytes": Bytes(b"\x02").hex(), "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED", "indexes": {"data": 0, "gas": 0, "value": 0}, "state": {}, }, id="state_fixture_fork_post_exception_list_1", ), pytest.param( True, FixtureForkPost( state_root=0, logs_hash=1, tx_bytes="0x02", expect_exception=[ TransactionException.INITCODE_SIZE_EXCEEDED, TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, ], state={}, ), { "hash": Hash(0).hex(), "logs": Hash(1).hex(), "txbytes": Bytes(b"\x02").hex(), "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED|" "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "indexes": {"data": 0, "gas": 0, "value": 0}, "state": {}, }, id="state_fixture_fork_post_exception_list_2", ), ], ) class TestPydanticModelConversion: """Test that Pydantic models are converted to and from JSON correctly.""" def test_json_serialization( self, can_be_deserialized: bool, model_instance: Any, json: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" del can_be_deserialized assert to_json(model_instance) == json def test_json_deserialization( self, can_be_deserialized: bool, model_instance: Any, json: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" if not can_be_deserialized: pytest.skip(reason="The model instance in this case can not be deserialized") model_type = type(model_instance) assert model_type(**json) == model_instance ================================================ FILE: src/ethereum_test_fixtures/transaction.py ================================================ """TransactionTest types.""" from typing import ClassVar, Mapping from pydantic import Field from ethereum_test_base_types import Address, Bytes, CamelModel, Hash, ZeroPaddedHexNumber from ethereum_test_exceptions import TransactionExceptionInstanceOrList from ethereum_test_forks import Fork from .base import BaseFixture class FixtureResult(CamelModel): """The per-network (fork) result structure.""" hash: Hash | None = None intrinsic_gas: ZeroPaddedHexNumber sender: Address | None = None exception: TransactionExceptionInstanceOrList | None = None class TransactionFixture(BaseFixture): """Fixture for a single TransactionTest.""" format_name: ClassVar[str] = "transaction_test" description: ClassVar[str] = "Tests that generate a transaction test fixture." result: Mapping[Fork, FixtureResult] transaction: Bytes = Field(..., alias="txbytes") def get_fork(self) -> Fork | None: """Return the fork of the fixture as a string.""" forks = list(self.result.keys()) assert len(forks) == 1, "Expected transaction test fixture with single fork" return forks[0] ================================================ FILE: src/ethereum_test_forks/__init__.py ================================================ """Ethereum test fork definitions.""" from .base_fork import ForkAttribute from .forks.forks import ( BPO1, BPO2, BPO3, BPO4, BPO5, Amsterdam, ArrowGlacier, Berlin, Byzantium, Cancun, Constantinople, ConstantinopleFix, EOFv1, Frontier, GrayGlacier, Homestead, Istanbul, London, MuirGlacier, Osaka, Paris, Prague, Shanghai, ) from .forks.transition import ( BerlinToLondonAt5, BPO1ToBPO2AtTime15k, BPO2ToBPO3AtTime15k, BPO3ToBPO4AtTime15k, CancunToPragueAtTime15k, OsakaToBPO1AtTime15k, ParisToShanghaiAtTime15k, PragueToOsakaAtTime15k, ShanghaiToCancunAtTime15k, ) from .gas_costs import GasCosts from .helpers import ( ALL_FORKS, ALL_FORKS_WITH_TRANSITIONS, ALL_TRANSITION_FORKS, Fork, ForkAdapter, ForkOrNoneAdapter, ForkRangeDescriptor, ForkSet, ForkSetAdapter, InvalidForkError, TransitionFork, TransitionForkAdapter, TransitionForkOrNoneAdapter, forks_from, forks_from_until, get_closest_fork, get_deployed_forks, get_development_forks, get_fork_by_name, get_forks, get_forks_with_no_descendants, get_forks_with_no_parents, get_from_until_fork_set, get_last_descendants, get_relative_fork_markers, get_selected_fork_set, get_transition_fork_predecessor, get_transition_fork_successor, get_transition_forks, transition_fork_from_to, transition_fork_to, ) __all__ = [ "ALL_FORKS_WITH_TRANSITIONS", "ALL_FORKS", "ALL_TRANSITION_FORKS", "Fork", "ForkAdapter", "ForkOrNoneAdapter", "ForkSet", "ForkSetAdapter", "TransitionFork", "TransitionForkAdapter", "TransitionForkOrNoneAdapter", "ForkAttribute", "Amsterdam", "ArrowGlacier", "Berlin", "BerlinToLondonAt5", "Byzantium", "Constantinople", "ConstantinopleFix", "EOFv1", "ForkRangeDescriptor", "Frontier", "GrayGlacier", "Homestead", "InvalidForkError", "Istanbul", "London", "Paris", "ParisToShanghaiAtTime15k", "MuirGlacier", "Shanghai", "ShanghaiToCancunAtTime15k", "Cancun", "CancunToPragueAtTime15k", "Prague", "PragueToOsakaAtTime15k", "Osaka", "OsakaToBPO1AtTime15k", "BPO1", "BPO1ToBPO2AtTime15k", "BPO2", "BPO2ToBPO3AtTime15k", "BPO3", "BPO3ToBPO4AtTime15k", "BPO4", "BPO5", "get_transition_forks", "forks_from", "forks_from_until", "get_closest_fork", "get_deployed_forks", "get_development_forks", "get_transition_fork_predecessor", "get_transition_fork_successor", "get_fork_by_name", "get_forks_with_no_descendants", "get_forks_with_no_parents", "get_relative_fork_markers", "get_forks", "get_from_until_fork_set", "get_last_descendants", "get_selected_fork_set", "transition_fork_from_to", "transition_fork_to", "GasCosts", ] ================================================ FILE: src/ethereum_test_forks/base_decorators.py ================================================ """Decorators for the fork methods.""" from typing import Callable, TypeVar F = TypeVar("F", bound=Callable) def prefer_transition_to_method(method: F) -> F: """Call the `fork_to` implementation when transitioning.""" method.__prefer_transition_to_method__ = True # type: ignore return method ================================================ FILE: src/ethereum_test_forks/base_fork.py ================================================ """Abstract base class for Ethereum forks.""" from abc import ABC, ABCMeta, abstractmethod from typing import ( Any, ClassVar, Dict, List, Literal, Mapping, Optional, Protocol, Set, Sized, Tuple, Type, Union, ) from ethereum_test_base_types import AccessList, Address, BlobSchedule from ethereum_test_base_types.conversions import BytesConvertible from ethereum_test_vm import EVMCodeType, Opcodes from .base_decorators import prefer_transition_to_method from .gas_costs import GasCosts class ForkAttribute(Protocol): """ A protocol to get the attribute of a fork at a given block number and timestamp. """ def __call__(self, block_number: int = 0, timestamp: int = 0) -> Any: """ Return value of the attribute at the given block number and timestamp. """ pass class MemoryExpansionGasCalculator(Protocol): """ A protocol to calculate the gas cost of memory expansion at a given fork. """ def __call__(self, *, new_bytes: int, previous_bytes: int = 0) -> int: """Return gas cost of expanding the memory by the given length.""" pass class CalldataGasCalculator(Protocol): """ A protocol to calculate the transaction gas cost of calldata at a given fork. """ def __call__(self, *, data: BytesConvertible, floor: bool = False) -> int: """Return the transaction gas cost of calldata given its contents.""" pass class TransactionDataFloorCostCalculator(Protocol): """ Calculate the transaction floor cost due to its calldata for a given fork. """ def __call__(self, *, data: BytesConvertible) -> int: """Return transaction gas cost of calldata given its contents.""" pass class BaseFeePerGasCalculator(Protocol): """A protocol to calculate the base fee per gas at a given fork.""" def __call__( self, *, parent_base_fee_per_gas: int, parent_gas_used: int, parent_gas_limit: int ) -> int: """Return the base fee per gas at a given fork.""" pass class BaseFeeChangeCalculator(Protocol): """ A protocol to calculate the gas that needs to be used to change the base fee. """ def __call__( self, *, parent_base_fee_per_gas: int, parent_gas_limit: int, required_base_fee_per_gas: int, ) -> int: """Return the gas that needs to be used to change the base fee.""" pass class TransactionIntrinsicCostCalculator(Protocol): """ A protocol to calculate the intrinsic gas cost of a transaction at a given fork. """ def __call__( self, *, calldata: BytesConvertible = b"", contract_creation: bool = False, access_list: List[AccessList] | None = None, authorization_list_or_count: Sized | int | None = None, return_cost_deducted_prior_execution: bool = False, ) -> int: """ Return the intrinsic gas cost of a transaction given its properties. Args: calldata: The data of the transaction. contract_creation: Whether the transaction creates a contract. access_list: The list of access lists for the transaction. authorization_list_or_count: The list of authorizations or the count of authorizations for the transaction. return_cost_deducted_prior_execution: If set to False, the returned value is equal to the minimum gas required for the transaction to be valid. If set to True, the returned value is equal to the cost that is deducted from the gas limit before the transaction starts execution. Returns: Gas cost of a transaction """ pass class BlobGasPriceCalculator(Protocol): """ A protocol to calculate the blob gas price given the excess blob gas at a given fork. """ def __call__(self, *, excess_blob_gas: int) -> int: """Return the blob gas price given the excess blob gas.""" pass class ExcessBlobGasCalculator(Protocol): """ A protocol to calculate the excess blob gas for a block at a given fork. """ def __call__( self, *, parent_excess_blob_gas: int | None = None, parent_excess_blobs: int | None = None, parent_blob_gas_used: int | None = None, parent_blob_count: int | None = None, parent_base_fee_per_gas: int, ) -> int: """ Return the excess blob gas given the parent's excess blob gas and blob gas used. """ pass class BaseForkMeta(ABCMeta): """Metaclass for BaseFork.""" @abstractmethod def name(cls) -> str: """ Return the name of the fork (e.g., Berlin), must be implemented by subclasses. """ pass def __repr__(cls) -> str: """Print the name of the fork, instead of the class.""" return cls.name() @staticmethod def _maybe_transitioned(fork_cls: "BaseForkMeta") -> "BaseForkMeta": """ Return the transitioned fork, if a transition fork, otherwise return `fork_cls`. """ return fork_cls.transitions_to() if hasattr(fork_cls, "transitions_to") else fork_cls @staticmethod def _is_subclass_of(a: "BaseForkMeta", b: "BaseForkMeta") -> bool: """ Check if `a` is a subclass of `b`, taking fork transitions into account. """ a = BaseForkMeta._maybe_transitioned(a) b = BaseForkMeta._maybe_transitioned(b) return issubclass(a, b) def __gt__(cls, other: "BaseForkMeta") -> bool: """Compare if a fork is newer than some other fork (cls > other).""" return cls is not other and BaseForkMeta._is_subclass_of(cls, other) def __ge__(cls, other: "BaseForkMeta") -> bool: """ Compare if a fork is newer than or equal to some other fork (cls >= other). """ return cls is other or BaseForkMeta._is_subclass_of(cls, other) def __lt__(cls, other: "BaseForkMeta") -> bool: """Compare if a fork is older than some other fork (cls < other).""" # "Older" means other is a subclass of cls, but not the same. return cls is not other and BaseForkMeta._is_subclass_of(other, cls) def __le__(cls, other: "BaseForkMeta") -> bool: """ Compare if a fork is older than or equal to some other fork (cls <= other). """ return cls is other or BaseForkMeta._is_subclass_of(other, cls) class BaseFork(ABC, metaclass=BaseForkMeta): """ An abstract class representing an Ethereum fork. Must contain all the methods used by every fork. """ _transition_tool_name: ClassVar[Optional[str]] = None _solc_name: ClassVar[Optional[str]] = None _ignore: ClassVar[bool] = False _bpo_fork: ClassVar[bool] = False _children: ClassVar[Set[Type["BaseFork"]]] = set() # make mypy happy BLOB_CONSTANTS: ClassVar[Dict[str, Union[int, Literal["big"]]]] = {} @classmethod def get_blob_constant(cls, name: str) -> int | Literal["big"]: """Return value of requested blob constant.""" raise NotImplementedError def __init_subclass__( cls, *, transition_tool_name: Optional[str] = None, solc_name: Optional[str] = None, ignore: bool = False, bpo_fork: bool = False, ) -> None: """ Initialize new fork with values that don't carry over to subclass forks. """ cls._transition_tool_name = transition_tool_name cls._solc_name = solc_name cls._ignore = ignore cls._bpo_fork = bpo_fork cls._children = set() base_class = cls.__bases__[0] assert issubclass(base_class, BaseFork) if base_class != BaseFork: base_class._children.add(cls) # Header information abstract methods @classmethod @abstractmethod def header_base_fee_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain base fee.""" pass @classmethod @abstractmethod def header_prev_randao_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain Prev Randao value.""" pass @classmethod @abstractmethod def header_zero_difficulty_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must have difficulty zero.""" pass @classmethod @abstractmethod def header_withdrawals_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain withdrawals.""" pass @classmethod @abstractmethod def header_excess_blob_gas_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain excess blob gas.""" pass @classmethod @abstractmethod def header_blob_gas_used_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain blob gas used.""" pass @classmethod @abstractmethod def header_beacon_root_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain parent beacon block root.""" pass @classmethod @abstractmethod def header_requests_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain beacon chain requests.""" pass @classmethod @abstractmethod def header_bal_hash_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return true if the header must contain block access list hash.""" pass # Gas related abstract methods @classmethod @abstractmethod def gas_costs(cls, *, block_number: int = 0, timestamp: int = 0) -> GasCosts: """Return dataclass with the gas costs constants for the fork.""" pass @classmethod @abstractmethod def memory_expansion_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> MemoryExpansionGasCalculator: """ Return a callable that calculates the gas cost of memory expansion for the fork. """ pass @classmethod @abstractmethod def calldata_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> CalldataGasCalculator: """ Return callable that calculates the transaction gas cost for its calldata depending on its contents. """ pass @classmethod @abstractmethod def base_fee_per_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BaseFeePerGasCalculator: """ Return a callable that calculates the base fee per gas at a given fork. """ pass @classmethod @abstractmethod def base_fee_change_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BaseFeeChangeCalculator: """ Return a callable that calculates the gas that needs to be used to change the base fee. """ pass @classmethod @abstractmethod def base_fee_max_change_denominator(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base fee max change denominator at a given fork.""" pass @classmethod @abstractmethod def base_fee_elasticity_multiplier(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base fee elasticity multiplier at a given fork.""" pass @classmethod @abstractmethod def max_refund_quotient(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max refund quotient at a given fork.""" pass @classmethod @abstractmethod def transaction_data_floor_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionDataFloorCostCalculator: """ Return a callable that calculates the transaction floor cost due to its calldata. """ pass @classmethod @abstractmethod def transaction_intrinsic_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionIntrinsicCostCalculator: """ Return callable that calculates the intrinsic gas cost of a transaction for the fork. """ pass @classmethod @abstractmethod def blob_gas_price_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BlobGasPriceCalculator: """ Return a callable that calculates the blob gas price at a given fork. """ pass @classmethod @abstractmethod def excess_blob_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> ExcessBlobGasCalculator: """ Return a callable that calculates the excess blob gas for a block at a given fork. """ pass @classmethod @abstractmethod def min_base_fee_per_blob_gas(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the minimum base fee per blob gas at a given fork.""" pass @classmethod @abstractmethod def blob_gas_per_blob(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the amount of blob gas used per blob at a given fork.""" pass @classmethod @abstractmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction at a given fork.""" pass @classmethod @abstractmethod def supports_blobs(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Return whether the given fork supports blobs or not.""" pass @classmethod @abstractmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the target blobs per block at a given fork.""" pass @classmethod @abstractmethod def max_blobs_per_tx(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max blobs per transaction at a given fork.""" pass @classmethod @abstractmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max blobs per block at a given fork.""" pass @classmethod @abstractmethod def blob_reserve_price_active(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ Return whether the fork uses a reserve price mechanism for blobs or not. """ pass @classmethod @abstractmethod def blob_base_cost(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base cost of a blob at a given fork.""" pass @classmethod @abstractmethod def full_blob_tx_wrapper_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> int | None: """ Return the version of the full blob transaction wrapper at a given fork. """ pass @classmethod @prefer_transition_to_method @abstractmethod def blob_schedule(cls, *, block_number: int = 0, timestamp: int = 0) -> BlobSchedule | None: """Return the blob schedule up until the given fork.""" pass @classmethod @abstractmethod def get_reward(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return expected reward amount in wei of a given fork.""" pass # Transaction related abstract methods @classmethod @abstractmethod def tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """Return list of the transaction types supported by the fork.""" pass @classmethod @abstractmethod def contract_creating_tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """ Return list of the transaction types supported by the fork that can create contracts. """ pass @classmethod @abstractmethod def transaction_gas_limit_cap(cls, *, block_number: int = 0, timestamp: int = 0) -> int | None: """ Return the transaction gas limit cap, or None if no limit is imposed. """ pass @classmethod @abstractmethod def block_rlp_size_limit(cls, *, block_number: int = 0, timestamp: int = 0) -> int | None: """ Return the maximum RLP size of a block in bytes, or None if no limit is imposed. """ pass @classmethod @abstractmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """Return list pre-compiles supported by the fork.""" pass @classmethod @abstractmethod def system_contracts(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """Return list system-contracts supported by the fork.""" pass @classmethod @prefer_transition_to_method @abstractmethod def pre_allocation(cls, *, block_number: int = 0, timestamp: int = 0) -> Mapping: """ Return required pre-allocation of accounts for any kind of test. This method must always call the `fork_to` method when transitioning, because the allocation can only be set at genesis, and thus cannot be changed at transition time. """ pass @classmethod @prefer_transition_to_method @abstractmethod def pre_allocation_blockchain(cls, *, block_number: int = 0, timestamp: int = 0) -> Mapping: """ Return required pre-allocation of accounts for any blockchain tests. This method must always call the `fork_to` method when transitioning, because the allocation can only be set at genesis, and thus cannot be changed at transition time. """ pass # Engine API information abstract methods @classmethod @abstractmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """ Return `None` if this fork's payloads cannot be sent over the engine API, or the payload version if it can. """ pass @classmethod @abstractmethod def engine_new_payload_blob_hashes(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ Return true if the engine api version requires new payload calls to include blob hashes. """ pass @classmethod @abstractmethod def engine_new_payload_beacon_root(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ Return true if the engine api version requires new payload calls to include a parent beacon block root. """ pass @classmethod @abstractmethod def engine_new_payload_requests(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ Return true if the engine api version requires new payload calls to include requests. """ pass @classmethod @abstractmethod def engine_new_payload_target_blobs_per_block( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ Return true if the engine api version requires new payload calls to include target blobs per block. """ pass @classmethod @abstractmethod def engine_execution_payload_block_access_list( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ Return `True` if the engine api version requires execution payload to include a `block_access_list`. """ pass @classmethod @abstractmethod def engine_payload_attribute_target_blobs_per_block( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ Return true if the payload attributes include the target blobs per block. """ pass @classmethod @abstractmethod def engine_payload_attribute_max_blobs_per_block( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ Return true if the payload attributes include the max blobs per block. """ pass @classmethod @abstractmethod def engine_forkchoice_updated_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """ Return `None` if the forks canonical chain cannot be set using the forkchoice method. """ pass @classmethod @abstractmethod def engine_get_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """ Return `None` if the forks canonical chain cannot build a payload using the engine API. """ pass @classmethod @abstractmethod def engine_get_blobs_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """ Return `None` if the fork does not support the engine get blobs version. """ pass # EVM information abstract methods @classmethod @abstractmethod def evm_code_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]: """Return list of EVM code types supported by the fork.""" pass @classmethod @abstractmethod def max_code_size(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ Return the maximum code size allowed to be deployed in a contract creation. """ pass @classmethod @abstractmethod def max_stack_height(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the maximum stack height allowed in the EVM stack.""" pass @classmethod @abstractmethod def max_initcode_size(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ Return the maximum initcode size allowed to be used in a contract creation. """ pass @classmethod @abstractmethod def call_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """ Return list of tuples with the call opcodes and its corresponding EVM code type. """ pass @classmethod @abstractmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" pass @classmethod @abstractmethod def create_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """ Return list of tuples with the create opcodes and its corresponding EVM code type. """ pass @classmethod @abstractmethod def max_request_type(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return max request type supported by the fork.""" pass # Meta information about the fork @classmethod def name(cls) -> str: """Return name of the fork.""" return cls.__name__ @classmethod def fork_at(cls, *, block_number: int = 0, timestamp: int = 0) -> Type["BaseFork"]: """ Return fork at the given block number and timestamp. Useful only for transition forks, and it's a no-op for normal forks. """ del block_number, timestamp return cls @classmethod @abstractmethod def transition_tool_name(cls, *, block_number: int = 0, timestamp: int = 0) -> str: """ Return fork name as it's meant to be passed to the transition tool for execution. """ pass @classmethod @abstractmethod def solc_name(cls) -> str: """Return fork name as it's meant to be passed to the solc compiler.""" pass @classmethod def is_deployed(cls) -> bool: """ Return whether the fork has been deployed to mainnet, or not. Must be overridden and return False for forks that are still under development. """ return True @classmethod def ignore(cls) -> bool: """Return whether the fork should be ignored during test generation.""" return cls._ignore @classmethod @prefer_transition_to_method def bpo_fork(cls) -> bool: """Return whether the fork is a BPO fork.""" return cls._bpo_fork @classmethod def parent(cls) -> Type["BaseFork"] | None: """Return the parent fork.""" base_class = cls.__bases__[0] assert issubclass(base_class, BaseFork) if base_class == BaseFork: return None return base_class @classmethod def non_bpo_ancestor(cls) -> Type["BaseFork"]: """Return the nearest non-BPO ancestor fork.""" ancestor = cls while ancestor.bpo_fork(): parent = ancestor.parent() if parent is None: break ancestor = parent return ancestor @classmethod def children(cls) -> Set[Type["BaseFork"]]: """Return the children forks.""" return set(cls._children) ================================================ FILE: src/ethereum_test_forks/forks/__init__.py ================================================ """Listings of all forks, current and upcoming.""" ================================================ FILE: src/ethereum_test_forks/forks/forks.py ================================================ """All Ethereum fork class definitions.""" from dataclasses import replace from hashlib import sha256 from os.path import realpath from pathlib import Path from typing import List, Literal, Mapping, Optional, Sized, Tuple from ethereum_test_base_types import AccessList, Address, BlobSchedule, Bytes, ForkBlobSchedule from ethereum_test_base_types.conversions import BytesConvertible from ethereum_test_vm import EVMCodeType, Opcodes from ..base_fork import ( BaseFeeChangeCalculator, BaseFeePerGasCalculator, BaseFork, BlobGasPriceCalculator, CalldataGasCalculator, ExcessBlobGasCalculator, MemoryExpansionGasCalculator, TransactionDataFloorCostCalculator, TransactionIntrinsicCostCalculator, ) from ..gas_costs import GasCosts from .helpers import ceiling_division, fake_exponential CURRENT_FILE = Path(realpath(__file__)) CURRENT_FOLDER = CURRENT_FILE.parent # All forks must be listed here !!! in the order they were introduced !!! class Frontier(BaseFork, solc_name="homestead"): """Frontier fork.""" @classmethod def transition_tool_name(cls, *, block_number: int = 0, timestamp: int = 0) -> str: """ Return fork name as it's meant to be passed to the transition tool for execution. """ del block_number, timestamp if cls._transition_tool_name is not None: return cls._transition_tool_name return cls.name() @classmethod def solc_name(cls) -> str: """Return fork name as it's meant to be passed to the solc compiler.""" if cls._solc_name is not None: return cls._solc_name return cls.name().lower() @classmethod def header_base_fee_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain base fee.""" del block_number, timestamp return False @classmethod def header_prev_randao_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain Prev Randao value.""" del block_number, timestamp return False @classmethod def header_zero_difficulty_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not have difficulty zero.""" del block_number, timestamp return False @classmethod def header_withdrawals_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain withdrawals.""" del block_number, timestamp return False @classmethod def header_excess_blob_gas_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain excess blob gas.""" del block_number, timestamp return False @classmethod def header_blob_gas_used_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain blob gas used.""" del block_number, timestamp return False @classmethod def gas_costs(cls, *, block_number: int = 0, timestamp: int = 0) -> GasCosts: """ Return dataclass with the defined gas costs constants for genesis. """ del block_number, timestamp return GasCosts( G_JUMPDEST=1, G_BASE=2, G_VERY_LOW=3, G_LOW=5, G_MID=8, G_HIGH=10, G_WARM_ACCOUNT_ACCESS=100, G_COLD_ACCOUNT_ACCESS=2_600, G_ACCESS_LIST_ADDRESS=2_400, G_ACCESS_LIST_STORAGE=1_900, G_WARM_SLOAD=100, G_COLD_SLOAD=2_100, G_STORAGE_SET=20_000, G_STORAGE_RESET=2_900, R_STORAGE_CLEAR=4_800, G_SELF_DESTRUCT=5_000, G_CREATE=32_000, G_CODE_DEPOSIT_BYTE=200, G_INITCODE_WORD=2, G_CALL_VALUE=9_000, G_CALL_STIPEND=2_300, G_NEW_ACCOUNT=25_000, G_EXP=10, G_EXP_BYTE=50, G_MEMORY=3, G_TX_DATA_ZERO=4, G_TX_DATA_NON_ZERO=68, G_TX_DATA_STANDARD_TOKEN_COST=0, G_TX_DATA_FLOOR_TOKEN_COST=0, G_TRANSACTION=21_000, G_TRANSACTION_CREATE=32_000, G_LOG=375, G_LOG_DATA=8, G_LOG_TOPIC=375, G_KECCAK_256=30, G_KECCAK_256_WORD=6, G_COPY=3, G_BLOCKHASH=20, G_AUTHORIZATION=0, R_AUTHORIZATION_EXISTING_AUTHORITY=0, ) @classmethod def memory_expansion_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> MemoryExpansionGasCalculator: """ Return callable that calculates the gas cost of memory expansion for the fork. """ gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) def fn(*, new_bytes: int, previous_bytes: int = 0) -> int: if new_bytes <= previous_bytes: return 0 new_words = ceiling_division(new_bytes, 32) previous_words = ceiling_division(previous_bytes, 32) def c(w: int) -> int: return (gas_costs.G_MEMORY * w) + ((w * w) // 512) return c(new_words) - c(previous_words) return fn @classmethod def calldata_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> CalldataGasCalculator: """ Return callable that calculates the transaction gas cost for its calldata depending on its contents. """ gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) def fn(*, data: BytesConvertible, floor: bool = False) -> int: del floor cost = 0 for b in Bytes(data): if b == 0: cost += gas_costs.G_TX_DATA_ZERO else: cost += gas_costs.G_TX_DATA_NON_ZERO return cost return fn @classmethod def base_fee_per_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BaseFeePerGasCalculator: """ Return a callable that calculates the base fee per gas at a given fork. """ raise NotImplementedError(f"Base fee per gas calculator is not supported in {cls.name()}") @classmethod def base_fee_change_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BaseFeeChangeCalculator: """ Return a callable that calculates the gas that needs to be used to change the base fee. """ raise NotImplementedError(f"Base fee change calculator is not supported in {cls.name()}") @classmethod def base_fee_max_change_denominator(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base fee max change denominator at a given fork.""" del block_number, timestamp raise NotImplementedError( f"Base fee max change denominator is not supported in {cls.name()}" ) @classmethod def base_fee_elasticity_multiplier(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base fee elasticity multiplier at a given fork.""" del block_number, timestamp raise NotImplementedError( f"Base fee elasticity multiplier is not supported in {cls.name()}" ) @classmethod def transaction_data_floor_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionDataFloorCostCalculator: """At frontier, the transaction data floor cost is a constant zero.""" del block_number, timestamp def fn(*, data: BytesConvertible) -> int: del data return 0 return fn @classmethod def transaction_intrinsic_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionIntrinsicCostCalculator: """ Return callable that calculates the intrinsic gas cost of a transaction for the fork. """ gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) calldata_gas_calculator = cls.calldata_gas_calculator( block_number=block_number, timestamp=timestamp ) def fn( *, calldata: BytesConvertible = b"", contract_creation: bool = False, access_list: List[AccessList] | None = None, authorization_list_or_count: Sized | int | None = None, return_cost_deducted_prior_execution: bool = False, ) -> int: del return_cost_deducted_prior_execution assert access_list is None, f"Access list is not supported in {cls.name()}" assert authorization_list_or_count is None, ( f"Authorizations are not supported in {cls.name()}" ) intrinsic_cost: int = gas_costs.G_TRANSACTION if contract_creation: intrinsic_cost += gas_costs.G_INITCODE_WORD * ceiling_division( len(Bytes(calldata)), 32 ) return intrinsic_cost + calldata_gas_calculator(data=calldata) return fn @classmethod def blob_gas_price_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BlobGasPriceCalculator: """ Return a callable that calculates the blob gas price at a given fork. """ raise NotImplementedError(f"Blob gas price calculator is not supported in {cls.name()}") @classmethod def excess_blob_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> ExcessBlobGasCalculator: """ Return a callable that calculates the excess blob gas for a block at a given fork. """ raise NotImplementedError(f"Excess blob gas calculator is not supported in {cls.name()}") @classmethod def min_base_fee_per_blob_gas(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the amount of blob gas used per blob at a given fork.""" del block_number, timestamp raise NotImplementedError(f"Base fee per blob gas is not supported in {cls.name()}") @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction at a given fork.""" del block_number, timestamp raise NotImplementedError( f"Blob base fee update fraction is not supported in {cls.name()}" ) @classmethod def blob_gas_per_blob(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the amount of blob gas used per blob at a given fork.""" del block_number, timestamp return 0 @classmethod def supports_blobs(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Blobs are not supported at Frontier.""" del block_number, timestamp return False @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the target number of blobs per block at a given fork.""" del block_number, timestamp raise NotImplementedError(f"Target blobs per block is not supported in {cls.name()}") @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max number of blobs per block at a given fork.""" del block_number, timestamp raise NotImplementedError(f"Max blobs per block is not supported in {cls.name()}") @classmethod def blob_reserve_price_active(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ Return whether the fork uses a reserve price mechanism for blobs or not. """ del block_number, timestamp raise NotImplementedError(f"Blob reserve price is not supported in {cls.name()}") @classmethod def blob_base_cost(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base cost of a blob at a given fork.""" del block_number, timestamp raise NotImplementedError(f"Blob base cost is not supported in {cls.name()}") @classmethod def full_blob_tx_wrapper_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> int | None: """Return the version of the full blob transaction wrapper.""" raise NotImplementedError( f"Full blob transaction wrapper version is not supported in {cls.name()}" ) @classmethod def max_blobs_per_tx(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max number of blobs per tx at a given fork.""" del block_number, timestamp raise NotImplementedError(f"Max blobs per tx is not supported in {cls.name()}") @classmethod def blob_schedule(cls, *, block_number: int = 0, timestamp: int = 0) -> BlobSchedule | None: """At genesis, no blob schedule is used.""" del block_number, timestamp return None @classmethod def header_requests_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain beacon chain requests.""" del block_number, timestamp return False @classmethod def header_bal_hash_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain block access list hash.""" del block_number, timestamp return False @classmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """At genesis, payloads cannot be sent through the engine API.""" del block_number, timestamp return None @classmethod def header_beacon_root_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, header must not contain parent beacon block root.""" del block_number, timestamp return False @classmethod def engine_new_payload_blob_hashes(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, payloads do not have blob hashes.""" del block_number, timestamp return False @classmethod def engine_new_payload_beacon_root(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, payloads do not have a parent beacon block root.""" del block_number, timestamp return False @classmethod def engine_new_payload_requests(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At genesis, payloads do not have requests.""" del block_number, timestamp return False @classmethod def engine_execution_payload_block_access_list( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """At genesis, payloads do not have block access list.""" del block_number, timestamp return False @classmethod def engine_new_payload_target_blobs_per_block( cls, *, block_number: int = 0, timestamp: int = 0, ) -> bool: """At genesis, payloads do not have target blobs per block.""" del block_number, timestamp return False @classmethod def engine_payload_attribute_target_blobs_per_block( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ At genesis, payload attributes do not include the target blobs per block. """ del block_number, timestamp return False @classmethod def engine_payload_attribute_max_blobs_per_block( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ At genesis, payload attributes do not include the max blobs per block. """ del block_number, timestamp return False @classmethod def engine_forkchoice_updated_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """ At genesis, forkchoice updates cannot be sent through the engine API. """ return cls.engine_new_payload_version(block_number=block_number, timestamp=timestamp) @classmethod def engine_get_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """At genesis, payloads cannot be retrieved through the engine API.""" return cls.engine_new_payload_version(block_number=block_number, timestamp=timestamp) @classmethod def engine_get_blobs_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """At genesis, blobs cannot be retrieved through the engine API.""" del block_number, timestamp return None @classmethod def get_reward(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ At Genesis the expected reward amount in wei is 5_000_000_000_000_000_000. """ del block_number, timestamp return 5_000_000_000_000_000_000 @classmethod def tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At Genesis, only legacy transactions are allowed.""" del block_number, timestamp return [0] @classmethod def contract_creating_tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At Genesis, only legacy transactions are allowed.""" del block_number, timestamp return [0] @classmethod def transaction_gas_limit_cap(cls, *, block_number: int = 0, timestamp: int = 0) -> int | None: """At Genesis, no transaction gas limit cap is imposed.""" del block_number, timestamp return None @classmethod def block_rlp_size_limit(cls, *, block_number: int = 0, timestamp: int = 0) -> int | None: """At Genesis, no RLP block size limit is imposed.""" del block_number, timestamp return None @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """At Genesis, no pre-compiles are present.""" del block_number, timestamp return [] @classmethod def system_contracts(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """At Genesis, no system-contracts are present.""" del block_number, timestamp return [] @classmethod def evm_code_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]: """At Genesis, only legacy EVM code is supported.""" del block_number, timestamp return [EVMCodeType.LEGACY] @classmethod def max_code_size(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ At genesis, there is no upper bound for code size (bounded by block gas limit). However, the default is set to the limit of EIP-170 (Spurious Dragon) """ del block_number, timestamp return 0x6000 @classmethod def max_stack_height(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """At genesis, the maximum stack height is 1024.""" del block_number, timestamp return 1024 @classmethod def max_initcode_size(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """At genesis, there is no upper bound for initcode size.""" del block_number, timestamp """However, the default is set to the limit of EIP-3860 (Shanghai)""" return 0xC000 @classmethod def call_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """Return list of call opcodes supported by the fork.""" del block_number, timestamp return [ (Opcodes.CALL, EVMCodeType.LEGACY), (Opcodes.CALLCODE, EVMCodeType.LEGACY), ] @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [ Opcodes.STOP, Opcodes.ADD, Opcodes.MUL, Opcodes.SUB, Opcodes.DIV, Opcodes.SDIV, Opcodes.MOD, Opcodes.SMOD, Opcodes.ADDMOD, Opcodes.MULMOD, Opcodes.EXP, Opcodes.SIGNEXTEND, Opcodes.LT, Opcodes.GT, Opcodes.SLT, Opcodes.SGT, Opcodes.EQ, Opcodes.ISZERO, Opcodes.AND, Opcodes.OR, Opcodes.XOR, Opcodes.NOT, Opcodes.BYTE, Opcodes.SHA3, Opcodes.ADDRESS, Opcodes.BALANCE, Opcodes.ORIGIN, Opcodes.CALLER, Opcodes.CALLVALUE, Opcodes.CALLDATALOAD, Opcodes.CALLDATASIZE, Opcodes.CALLDATACOPY, Opcodes.CODESIZE, Opcodes.CODECOPY, Opcodes.GASPRICE, Opcodes.EXTCODESIZE, Opcodes.EXTCODECOPY, Opcodes.BLOCKHASH, Opcodes.COINBASE, Opcodes.TIMESTAMP, Opcodes.NUMBER, Opcodes.PREVRANDAO, Opcodes.GASLIMIT, Opcodes.POP, Opcodes.MLOAD, Opcodes.MSTORE, Opcodes.MSTORE8, Opcodes.SLOAD, Opcodes.SSTORE, Opcodes.PC, Opcodes.MSIZE, Opcodes.GAS, Opcodes.JUMP, Opcodes.JUMPI, Opcodes.JUMPDEST, Opcodes.PUSH1, Opcodes.PUSH2, Opcodes.PUSH3, Opcodes.PUSH4, Opcodes.PUSH5, Opcodes.PUSH6, Opcodes.PUSH7, Opcodes.PUSH8, Opcodes.PUSH9, Opcodes.PUSH10, Opcodes.PUSH11, Opcodes.PUSH12, Opcodes.PUSH13, Opcodes.PUSH14, Opcodes.PUSH15, Opcodes.PUSH16, Opcodes.PUSH17, Opcodes.PUSH18, Opcodes.PUSH19, Opcodes.PUSH20, Opcodes.PUSH21, Opcodes.PUSH22, Opcodes.PUSH23, Opcodes.PUSH24, Opcodes.PUSH25, Opcodes.PUSH26, Opcodes.PUSH27, Opcodes.PUSH28, Opcodes.PUSH29, Opcodes.PUSH30, Opcodes.PUSH31, Opcodes.PUSH32, Opcodes.DUP1, Opcodes.DUP2, Opcodes.DUP3, Opcodes.DUP4, Opcodes.DUP5, Opcodes.DUP6, Opcodes.DUP7, Opcodes.DUP8, Opcodes.DUP9, Opcodes.DUP10, Opcodes.DUP11, Opcodes.DUP12, Opcodes.DUP13, Opcodes.DUP14, Opcodes.DUP15, Opcodes.DUP16, Opcodes.SWAP1, Opcodes.SWAP2, Opcodes.SWAP3, Opcodes.SWAP4, Opcodes.SWAP5, Opcodes.SWAP6, Opcodes.SWAP7, Opcodes.SWAP8, Opcodes.SWAP9, Opcodes.SWAP10, Opcodes.SWAP11, Opcodes.SWAP12, Opcodes.SWAP13, Opcodes.SWAP14, Opcodes.SWAP15, Opcodes.SWAP16, Opcodes.LOG0, Opcodes.LOG1, Opcodes.LOG2, Opcodes.LOG3, Opcodes.LOG4, Opcodes.CREATE, Opcodes.CALL, Opcodes.CALLCODE, Opcodes.RETURN, Opcodes.SELFDESTRUCT, ] @classmethod def create_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """At Genesis, only `CREATE` opcode is supported.""" del block_number, timestamp return [ (Opcodes.CREATE, EVMCodeType.LEGACY), ] @classmethod def max_refund_quotient(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max refund quotient at Genesis.""" del block_number, timestamp return 2 @classmethod def max_request_type(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """At genesis, no request type is supported, signaled by -1.""" del block_number, timestamp return -1 @classmethod def pre_allocation(cls, *, block_number: int = 0, timestamp: int = 0) -> Mapping: """ Return whether the fork expects pre-allocation of accounts. Frontier does not require pre-allocated accounts """ del block_number, timestamp return {} @classmethod def pre_allocation_blockchain(cls, *, block_number: int = 0, timestamp: int = 0) -> Mapping: """ Return whether the fork expects pre-allocation of accounts. Frontier does not require pre-allocated accounts """ del block_number, timestamp return {} class Homestead(Frontier): """Homestead fork.""" @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """ At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced. """ return [ Address(1, label="ECREC"), Address(2, label="SHA256"), Address(3, label="RIPEMD160"), Address(4, label="ID"), ] + super(Homestead, cls).precompiles(block_number=block_number, timestamp=timestamp) @classmethod def call_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """At Homestead, DELEGATECALL opcode was introduced.""" return [(Opcodes.DELEGATECALL, EVMCodeType.LEGACY)] + super(Homestead, cls).call_opcodes( block_number=block_number, timestamp=timestamp ) @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return the list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [Opcodes.DELEGATECALL] + super(Homestead, cls).valid_opcodes() @classmethod def transaction_intrinsic_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionIntrinsicCostCalculator: """ At Homestead, the transaction intrinsic cost needs to take contract creation into account. """ super_fn = super(Homestead, cls).transaction_intrinsic_cost_calculator( block_number=block_number, timestamp=timestamp ) gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) def fn( *, calldata: BytesConvertible = b"", contract_creation: bool = False, access_list: List[AccessList] | None = None, authorization_list_or_count: Sized | int | None = None, return_cost_deducted_prior_execution: bool = False, ) -> int: del return_cost_deducted_prior_execution intrinsic_cost: int = super_fn( calldata=calldata, contract_creation=contract_creation, access_list=access_list, authorization_list_or_count=authorization_list_or_count, ) if contract_creation: intrinsic_cost += gas_costs.G_TRANSACTION_CREATE return intrinsic_cost return fn class DAOFork(Homestead, ignore=True): """DAO fork.""" pass class Tangerine(DAOFork, ignore=True): """Tangerine fork (EIP-150).""" pass class SpuriousDragon(Tangerine, ignore=True): """SpuriousDragon fork (EIP-155, EIP-158).""" pass class Byzantium(Homestead): """Byzantium fork.""" @classmethod def get_reward(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ At Byzantium, the block reward is reduced to 3_000_000_000_000_000_000 wei. """ del block_number, timestamp return 3_000_000_000_000_000_000 @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """ At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar multiplication on elliptic curve alt_bn128, and optimal ate pairing check on elliptic curve alt_bn128 are introduced. """ return [ Address(5, label="MODEXP"), Address(6, label="BN254_ADD"), Address(7, label="BN254_MUL"), Address(8, label="BN254_PAIRING"), ] + super(Byzantium, cls).precompiles(block_number=block_number, timestamp=timestamp) @classmethod def max_code_size(cls, *, block_number: int = 0, timestamp: int = 0) -> int: # NOTE: Move this to Spurious Dragon once this fork is introduced. See # EIP-170. """ At Spurious Dragon, an upper bound was introduced for max contract code size. """ del block_number, timestamp return 0x6000 @classmethod def call_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """At Byzantium, STATICCALL opcode was introduced.""" return [(Opcodes.STATICCALL, EVMCodeType.LEGACY)] + super(Byzantium, cls).call_opcodes( block_number=block_number, timestamp=timestamp ) @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [ Opcodes.REVERT, Opcodes.RETURNDATASIZE, Opcodes.RETURNDATACOPY, Opcodes.STATICCALL, ] + super(Byzantium, cls).valid_opcodes() class Constantinople(Byzantium): """Constantinople fork.""" @classmethod def get_reward(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ At Constantinople, the block reward is reduced to 2_000_000_000_000_000_000 wei. """ del block_number, timestamp return 2_000_000_000_000_000_000 @classmethod def create_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """At Constantinople, `CREATE2` opcode is added.""" return [(Opcodes.CREATE2, EVMCodeType.LEGACY)] + super(Constantinople, cls).create_opcodes( block_number=block_number, timestamp=timestamp ) @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [ Opcodes.SHL, Opcodes.SHR, Opcodes.SAR, Opcodes.EXTCODEHASH, Opcodes.CREATE2, ] + super(Constantinople, cls).valid_opcodes() class ConstantinopleFix(Constantinople, solc_name="constantinople"): """Constantinople Fix fork.""" pass class Istanbul(ConstantinopleFix): """Istanbul fork.""" @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """At Istanbul, pre-compile for blake2 compression is introduced.""" return [ Address(9, label="BLAKE2F"), ] + super(Istanbul, cls).precompiles(block_number=block_number, timestamp=timestamp) @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [Opcodes.CHAINID, Opcodes.SELFBALANCE] + super(Istanbul, cls).valid_opcodes() @classmethod def gas_costs(cls, *, block_number: int = 0, timestamp: int = 0) -> GasCosts: """ On Istanbul, the non-zero transaction data byte cost is reduced to 16 due to EIP-2028. """ return replace( super(Istanbul, cls).gas_costs(block_number=block_number, timestamp=timestamp), G_TX_DATA_NON_ZERO=16, # https://eips.ethereum.org/EIPS/eip-2028 ) # Glacier forks skipped, unless explicitly specified class MuirGlacier(Istanbul, solc_name="istanbul", ignore=True): """Muir Glacier fork.""" pass class Berlin(Istanbul): """Berlin fork.""" @classmethod def tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At Berlin, access list transactions are introduced.""" return [1] + super(Berlin, cls).tx_types(block_number=block_number, timestamp=timestamp) @classmethod def contract_creating_tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At Berlin, access list transactions are introduced.""" return [1] + super(Berlin, cls).contract_creating_tx_types( block_number=block_number, timestamp=timestamp ) @classmethod def transaction_intrinsic_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionIntrinsicCostCalculator: """ At Berlin, the transaction intrinsic cost needs to take the access list into account. """ super_fn = super(Berlin, cls).transaction_intrinsic_cost_calculator( block_number=block_number, timestamp=timestamp ) gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) def fn( *, calldata: BytesConvertible = b"", contract_creation: bool = False, access_list: List[AccessList] | None = None, authorization_list_or_count: Sized | int | None = None, return_cost_deducted_prior_execution: bool = False, ) -> int: del return_cost_deducted_prior_execution intrinsic_cost: int = super_fn( calldata=calldata, contract_creation=contract_creation, authorization_list_or_count=authorization_list_or_count, ) if access_list is not None: for access in access_list: intrinsic_cost += gas_costs.G_ACCESS_LIST_ADDRESS for _ in access.storage_keys: intrinsic_cost += gas_costs.G_ACCESS_LIST_STORAGE return intrinsic_cost return fn class London(Berlin): """London fork.""" @classmethod def header_base_fee_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Header must contain the Base Fee starting from London.""" del block_number, timestamp return True @classmethod def tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At London, dynamic fee transactions are introduced.""" return [2] + super(London, cls).tx_types(block_number=block_number, timestamp=timestamp) @classmethod def contract_creating_tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At London, dynamic fee transactions are introduced.""" return [2] + super(London, cls).contract_creating_tx_types( block_number=block_number, timestamp=timestamp ) @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [Opcodes.BASEFEE] + super(London, cls).valid_opcodes() @classmethod def max_refund_quotient(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the max refund quotient at London.""" del block_number, timestamp return 5 @classmethod def base_fee_max_change_denominator(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base fee max change denominator at London.""" del block_number, timestamp return 8 @classmethod def base_fee_elasticity_multiplier(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base fee elasticity multiplier at London.""" del block_number, timestamp return 2 @classmethod def base_fee_per_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BaseFeePerGasCalculator: """ Return a callable that calculates the base fee per gas at London. EIP-1559 block validation pseudo code: if INITIAL_FORK_BLOCK_NUMBER == block.number: expected_base_fee_per_gas = INITIAL_BASE_FEE elif parent_gas_used == parent_gas_target: expected_base_fee_per_gas = parent_base_fee_per_gas elif parent_gas_used > parent_gas_target: gas_used_delta = parent_gas_used - parent_gas_target base_fee_per_gas_delta = max( parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR, 1, ) expected_base_fee_per_gas = parent_base_fee_per_gas + base_fee_per_gas_delta else: gas_used_delta = parent_gas_target - parent_gas_used base_fee_per_gas_delta = ( parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR ) expected_base_fee_per_gas = parent_base_fee_per_gas - base_fee_per_gas_delta """ base_fee_max_change_denominator = cls.base_fee_max_change_denominator( block_number=block_number, timestamp=timestamp ) elasticity_multiplier = cls.base_fee_elasticity_multiplier( block_number=block_number, timestamp=timestamp ) def fn( *, parent_base_fee_per_gas: int, parent_gas_used: int, parent_gas_limit: int ) -> int: parent_gas_target = parent_gas_limit // elasticity_multiplier if parent_gas_used == parent_gas_target: return parent_base_fee_per_gas elif parent_gas_used > parent_gas_target: gas_used_delta = parent_gas_used - parent_gas_target base_fee_per_gas_delta = max( parent_base_fee_per_gas * gas_used_delta // parent_gas_target // base_fee_max_change_denominator, 1, ) return parent_base_fee_per_gas + base_fee_per_gas_delta else: gas_used_delta = parent_gas_target - parent_gas_used base_fee_per_gas_delta = ( parent_base_fee_per_gas * gas_used_delta // parent_gas_target // base_fee_max_change_denominator ) return parent_base_fee_per_gas - base_fee_per_gas_delta return fn @classmethod def base_fee_change_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BaseFeeChangeCalculator: """ Return a callable that calculates the gas that needs to be used to change the base fee. """ base_fee_max_change_denominator = cls.base_fee_max_change_denominator( block_number=block_number, timestamp=timestamp ) elasticity_multiplier = cls.base_fee_elasticity_multiplier( block_number=block_number, timestamp=timestamp ) base_fee_per_gas_calculator = cls.base_fee_per_gas_calculator( block_number=block_number, timestamp=timestamp ) def fn( *, parent_base_fee_per_gas: int, parent_gas_limit: int, required_base_fee_per_gas: int, ) -> int: parent_gas_target = parent_gas_limit // elasticity_multiplier if parent_base_fee_per_gas == required_base_fee_per_gas: return parent_gas_target elif required_base_fee_per_gas > parent_base_fee_per_gas: # Base fee needs to go up, so we need to use more than target base_fee_per_gas_delta = required_base_fee_per_gas - parent_base_fee_per_gas parent_gas_used = ( (base_fee_per_gas_delta * base_fee_max_change_denominator * parent_gas_target) // parent_base_fee_per_gas ) + parent_gas_target elif required_base_fee_per_gas < parent_base_fee_per_gas: # Base fee needs to go down, so we need to use less than target base_fee_per_gas_delta = parent_base_fee_per_gas - required_base_fee_per_gas parent_gas_used = ( parent_gas_target - ( ( base_fee_per_gas_delta * base_fee_max_change_denominator * parent_gas_target ) // parent_base_fee_per_gas ) - 1 ) assert ( base_fee_per_gas_calculator( parent_base_fee_per_gas=parent_base_fee_per_gas, parent_gas_used=parent_gas_used, parent_gas_limit=parent_gas_limit, ) == required_base_fee_per_gas ) return parent_gas_used return fn # Glacier forks skipped, unless explicitly specified class ArrowGlacier(London, solc_name="london", ignore=True): """Arrow Glacier fork.""" pass class GrayGlacier(ArrowGlacier, solc_name="london", ignore=True): """Gray Glacier fork.""" pass class Paris( London, transition_tool_name="Merge", ): """Paris (Merge) fork.""" @classmethod def header_prev_randao_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Prev Randao is required starting from Paris.""" del block_number, timestamp return True @classmethod def header_zero_difficulty_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Zero difficulty is required starting from Paris.""" del block_number, timestamp return True @classmethod def get_reward(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Paris updates the reward to 0.""" del block_number, timestamp return 0 @classmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """From Paris, payloads can be sent through the engine API.""" del block_number, timestamp return 1 class Shanghai(Paris): """Shanghai fork.""" @classmethod def header_withdrawals_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Withdrawals are required starting from Shanghai.""" del block_number, timestamp return True @classmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """From Shanghai, new payload calls must use version 2.""" del block_number, timestamp return 2 @classmethod def max_initcode_size(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """From Shanghai, the initcode size is now limited. See EIP-3860.""" del block_number, timestamp return 0xC000 @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [Opcodes.PUSH0] + super(Shanghai, cls).valid_opcodes() class Cancun(Shanghai): """Cancun fork.""" BLOB_CONSTANTS = { # every value is an int or a Literal "FIELD_ELEMENTS_PER_BLOB": 4096, "BYTES_PER_FIELD_ELEMENT": 32, "CELL_LENGTH": 2048, # EIP-2537: Main subgroup order = q, due to this BLS_MODULUS # every blob byte (uint256) must be smaller than 116 "BLS_MODULUS": 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001, # https://github.com/ethereum/consensus-specs/blob/ # cc6996c22692d70e41b7a453d925172ee4b719ad/specs/deneb/ # polynomial-commitments.md?plain=1#L78 "BYTES_PER_PROOF": 48, "BYTES_PER_COMMITMENT": 48, "KZG_ENDIANNESS": "big", "AMOUNT_CELL_PROOFS": 0, } @classmethod def get_blob_constant(cls, name: str) -> int | Literal["big"]: """Return blob constant if it exists.""" retrieved_constant = cls.BLOB_CONSTANTS.get(name) assert retrieved_constant is not None, ( f"You tried to retrieve the blob constant {name} but it does not exist!" ) return retrieved_constant @classmethod def header_excess_blob_gas_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Excess blob gas is required starting from Cancun.""" del block_number, timestamp return True @classmethod def header_blob_gas_used_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Blob gas used is required starting from Cancun.""" del block_number, timestamp return True @classmethod def header_beacon_root_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Parent beacon block root is required starting from Cancun.""" del block_number, timestamp return True @classmethod def blob_gas_price_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> BlobGasPriceCalculator: """Return a callable that calculates the blob gas price at Cancun.""" min_base_fee_per_blob_gas = cls.min_base_fee_per_blob_gas( block_number=block_number, timestamp=timestamp ) blob_base_fee_update_fraction = cls.blob_base_fee_update_fraction( block_number=block_number, timestamp=timestamp ) def fn(*, excess_blob_gas: int) -> int: return fake_exponential( min_base_fee_per_blob_gas, excess_blob_gas, blob_base_fee_update_fraction, ) return fn @classmethod def excess_blob_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> ExcessBlobGasCalculator: """ Return a callable that calculates the excess blob gas for a block at Cancun. """ target_blobs_per_block = cls.target_blobs_per_block( block_number=block_number, timestamp=timestamp ) blob_gas_per_blob = cls.blob_gas_per_blob(block_number=block_number, timestamp=timestamp) target_blob_gas_per_block = target_blobs_per_block * blob_gas_per_blob def fn( *, parent_excess_blob_gas: int | None = None, parent_excess_blobs: int | None = None, parent_blob_gas_used: int | None = None, parent_blob_count: int | None = None, # Required for Osaka as using this as base parent_base_fee_per_gas: int, ) -> int: del parent_base_fee_per_gas if parent_excess_blob_gas is None: assert parent_excess_blobs is not None, "Parent excess blobs are required" parent_excess_blob_gas = parent_excess_blobs * blob_gas_per_blob if parent_blob_gas_used is None: assert parent_blob_count is not None, "Parent blob count is required" parent_blob_gas_used = parent_blob_count * blob_gas_per_blob if parent_excess_blob_gas + parent_blob_gas_used < target_blob_gas_per_block: return 0 else: return parent_excess_blob_gas + parent_blob_gas_used - target_blob_gas_per_block return fn @classmethod def min_base_fee_per_blob_gas(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the minimum base fee per blob gas for Cancun.""" del block_number, timestamp return 1 @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction for Cancun.""" del block_number, timestamp return 3338477 @classmethod def blob_gas_per_blob(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs are enabled starting from Cancun.""" del block_number, timestamp return 2**17 @classmethod def supports_blobs(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """At Cancun, blobs support is enabled.""" del block_number, timestamp return True @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ Blobs are enabled starting from Cancun, with a static target of 3 blobs per block. """ del block_number, timestamp return 3 @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ Blobs are enabled starting from Cancun, with a static max of 6 blobs per block. """ del block_number, timestamp return 6 @classmethod def blob_reserve_price_active(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Blob reserve price is not supported in Cancun.""" del block_number, timestamp return False @classmethod def full_blob_tx_wrapper_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> int | None: """ Pre-Osaka forks don't use tx wrapper versions for full blob transactions. """ del block_number, timestamp return None @classmethod def max_blobs_per_tx(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ Blobs are enabled starting from Cancun, with a static max equal to the max per block. """ return cls.max_blobs_per_block(block_number=block_number, timestamp=timestamp) @classmethod def blob_schedule(cls, *, block_number: int = 0, timestamp: int = 0) -> BlobSchedule | None: """ At Cancun, the fork object runs this routine to get the updated blob schedule. """ parent_fork = cls.parent() assert parent_fork is not None, "Parent fork must be defined" blob_schedule = ( parent_fork.blob_schedule(block_number=block_number, timestamp=timestamp) or BlobSchedule() ) current_blob_schedule = ForkBlobSchedule( target_blobs_per_block=cls.target_blobs_per_block( block_number=block_number, timestamp=timestamp ), max_blobs_per_block=cls.max_blobs_per_block( block_number=block_number, timestamp=timestamp ), base_fee_update_fraction=cls.blob_base_fee_update_fraction( block_number=block_number, timestamp=timestamp ), ) blob_schedule.append(fork=cls.name(), schedule=current_blob_schedule) return blob_schedule @classmethod def tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At Cancun, blob type transactions are introduced.""" return [3] + super(Cancun, cls).tx_types(block_number=block_number, timestamp=timestamp) @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """At Cancun, pre-compile for kzg point evaluation is introduced.""" return [ Address(10, label="KZG_POINT_EVALUATION"), ] + super(Cancun, cls).precompiles(block_number=block_number, timestamp=timestamp) @classmethod def system_contracts(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """Cancun introduces the system contract for EIP-4788.""" del block_number, timestamp return [Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02, label="BEACON_ROOTS_ADDRESS")] @classmethod def pre_allocation_blockchain(cls, *, block_number: int = 0, timestamp: int = 0) -> Mapping: """ Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain type tests. """ del block_number, timestamp new_allocation = { 0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02: { "nonce": 1, "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5f" "fd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f" "5ffd5b62001fff42064281555f359062001fff015500", } } return new_allocation | super(Cancun, cls).pre_allocation_blockchain() # type: ignore @classmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """From Cancun, new payload calls must use version 3.""" del block_number, timestamp return 3 @classmethod def engine_get_blobs_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """At Cancun, the engine get blobs version is 1.""" del block_number, timestamp return 1 @classmethod def engine_new_payload_blob_hashes(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """From Cancun, payloads must have blob hashes.""" del block_number, timestamp return True @classmethod def engine_new_payload_beacon_root(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """From Cancun, payloads must have a parent beacon block root.""" del block_number, timestamp return True @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [ Opcodes.BLOBHASH, Opcodes.BLOBBASEFEE, Opcodes.TLOAD, Opcodes.TSTORE, Opcodes.MCOPY, ] + super(Cancun, cls).valid_opcodes() class Prague(Cancun): """Prague fork.""" # update some blob constants BLOB_CONSTANTS = { **Cancun.BLOB_CONSTANTS, # same base constants as cancun "MAX_BLOBS_PER_BLOCK": 9, # but overwrite or add these "TARGET_BLOBS_PER_BLOCK": 6, "MAX_BLOB_GAS_PER_BLOCK": 1179648, "TARGET_BLOB_GAS_PER_BLOCK": 786432, "BLOB_BASE_FEE_UPDATE_FRACTION": 5007716, } @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """ At Prague, pre-compile for BLS operations are added. BLS12_G1ADD = 0x0B BLS12_G1MSM = 0x0C BLS12_G2ADD = 0x0D BLS12_G2MSM = 0x0E BLS12_PAIRING_CHECK = 0x0F BLS12_MAP_FP_TO_G1 = 0x10 BLS12_MAP_FP2_TO_G2 = 0x11 """ return [ Address(11, label="BLS12_G1ADD"), Address(12, label="BLS12_G1MSM"), Address(13, label="BLS12_G2ADD"), Address(14, label="BLS12_G2MSM"), Address(15, label="BLS12_PAIRING_CHECK"), Address(16, label="BLS12_MAP_FP_TO_G1"), Address(17, label="BLS12_MAP_FP2_TO_G2"), ] + super(Prague, cls).precompiles(block_number=block_number, timestamp=timestamp) @classmethod def tx_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[int]: """At Prague, set-code type transactions are introduced.""" return [4] + super(Prague, cls).tx_types(block_number=block_number, timestamp=timestamp) @classmethod def gas_costs(cls, *, block_number: int = 0, timestamp: int = 0) -> GasCosts: """ On Prague, the standard token cost and the floor token costs are introduced due to EIP-7623. """ return replace( super(Prague, cls).gas_costs(block_number=block_number, timestamp=timestamp), G_TX_DATA_STANDARD_TOKEN_COST=4, # https://eips.ethereum.org/EIPS/eip-7623 G_TX_DATA_FLOOR_TOKEN_COST=10, G_AUTHORIZATION=25_000, R_AUTHORIZATION_EXISTING_AUTHORITY=12_500, ) @classmethod def system_contracts(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """ Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935. """ return [ Address( 0x00000000219AB540356CBB839CBE05303D7705FA, label="DEPOSIT_CONTRACT_ADDRESS", ), Address( 0x00000961EF480EB55E80D19AD83579A64C007002, label="WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS", ), Address( 0x0000BBDDC7CE488642FB579F8B00F3A590007251, label="CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS", ), Address( 0x0000F90827F1C53A10CB7A02335B175320002935, label="HISTORY_STORAGE_ADDRESS", ), ] + super(Prague, cls).system_contracts(block_number=block_number, timestamp=timestamp) @classmethod def max_request_type(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ At Prague, three request types are introduced, hence the max request type is 2. """ del block_number, timestamp return 2 @classmethod def calldata_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> CalldataGasCalculator: """ Return a callable that calculates the transaction gas cost for its calldata depending on its contents. """ gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) def fn(*, data: BytesConvertible, floor: bool = False) -> int: tokens = 0 for b in Bytes(data): if b == 0: tokens += 1 else: tokens += 4 if floor: return tokens * gas_costs.G_TX_DATA_FLOOR_TOKEN_COST return tokens * gas_costs.G_TX_DATA_STANDARD_TOKEN_COST return fn @classmethod def transaction_data_floor_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionDataFloorCostCalculator: """ On Prague, due to EIP-7623, the transaction data floor cost is introduced. """ calldata_gas_calculator = cls.calldata_gas_calculator( block_number=block_number, timestamp=timestamp ) gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) def fn(*, data: BytesConvertible) -> int: return calldata_gas_calculator(data=data, floor=True) + gas_costs.G_TRANSACTION return fn @classmethod def transaction_intrinsic_cost_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> TransactionIntrinsicCostCalculator: """ At Prague, the transaction intrinsic cost needs to take the authorizations into account. """ super_fn = super(Prague, cls).transaction_intrinsic_cost_calculator( block_number=block_number, timestamp=timestamp ) gas_costs = cls.gas_costs(block_number=block_number, timestamp=timestamp) transaction_data_floor_cost_calculator = cls.transaction_data_floor_cost_calculator( block_number=block_number, timestamp=timestamp ) def fn( *, calldata: BytesConvertible = b"", contract_creation: bool = False, access_list: List[AccessList] | None = None, authorization_list_or_count: Sized | int | None = None, return_cost_deducted_prior_execution: bool = False, ) -> int: intrinsic_cost: int = super_fn( calldata=calldata, contract_creation=contract_creation, access_list=access_list, return_cost_deducted_prior_execution=False, ) if authorization_list_or_count is not None: if isinstance(authorization_list_or_count, Sized): authorization_list_or_count = len(authorization_list_or_count) intrinsic_cost += authorization_list_or_count * gas_costs.G_AUTHORIZATION if return_cost_deducted_prior_execution: return intrinsic_cost transaction_floor_data_cost = transaction_data_floor_cost_calculator(data=calldata) return max(intrinsic_cost, transaction_floor_data_cost) return fn @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction for Prague.""" del block_number, timestamp return 5007716 @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in Prague, have a static target of 6 blobs per block.""" del block_number, timestamp return 6 @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in Prague, have a static max of 9 blobs per block.""" del block_number, timestamp return 9 @classmethod def pre_allocation_blockchain(cls, *, block_number: int = 0, timestamp: int = 0) -> Mapping: """ Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110, the exits contract for EIP-7002, and the history storage contract for EIP-2935. """ del block_number, timestamp new_allocation = {} # Add the beacon chain deposit contract deposit_contract_tree_depth = 32 storage = {} next_hash = sha256(b"\x00" * 64).digest() for i in range(deposit_contract_tree_depth + 2, deposit_contract_tree_depth * 2 + 1): storage[i] = next_hash next_hash = sha256(next_hash + next_hash).digest() with open(CURRENT_FOLDER / "contracts" / "deposit_contract.bin", mode="rb") as f: new_allocation.update( { 0x00000000219AB540356CBB839CBE05303D7705FA: { "nonce": 1, "code": f.read(), "storage": storage, } } ) # EIP-7002: Add the withdrawal request contract with open(CURRENT_FOLDER / "contracts" / "withdrawal_request.bin", mode="rb") as f: new_allocation.update( { 0x00000961EF480EB55E80D19AD83579A64C007002: { "nonce": 1, "code": f.read(), }, } ) # EIP-7251: Add the consolidation request contract with open(CURRENT_FOLDER / "contracts" / "consolidation_request.bin", mode="rb") as f: new_allocation.update( { 0x0000BBDDC7CE488642FB579F8B00F3A590007251: { "nonce": 1, "code": f.read(), }, } ) # EIP-2935: Add the history storage contract with open(CURRENT_FOLDER / "contracts" / "history_contract.bin", mode="rb") as f: new_allocation.update( { 0x0000F90827F1C53A10CB7A02335B175320002935: { "nonce": 1, "code": f.read(), } } ) return new_allocation | super(Prague, cls).pre_allocation_blockchain() # type: ignore @classmethod def header_requests_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ Prague requires that the execution layer header contains the beacon chain requests hash. """ del block_number, timestamp return True @classmethod def engine_new_payload_requests(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ From Prague, new payloads include the requests hash as a parameter. """ del block_number, timestamp return True @classmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """From Prague, new payload calls must use version 4.""" del block_number, timestamp return 4 @classmethod def engine_forkchoice_updated_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """ At Prague, version number of NewPayload and ForkchoiceUpdated diverge. """ del block_number, timestamp return 3 class Osaka(Prague, solc_name="cancun"): """Osaka fork.""" # update some blob constants BLOB_CONSTANTS = { **Prague.BLOB_CONSTANTS, # same base constants as prague "AMOUNT_CELL_PROOFS": 128, } @classmethod def engine_get_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """From Osaka, get payload calls must use version 5.""" del block_number, timestamp return 5 @classmethod def engine_get_blobs_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """At Osaka, the engine get blobs version is 2.""" del block_number, timestamp return 2 @classmethod def full_blob_tx_wrapper_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> int | None: """At Osaka, the full blob transaction wrapper version is defined.""" del block_number, timestamp return 1 @classmethod def transaction_gas_limit_cap(cls, *, block_number: int = 0, timestamp: int = 0) -> int | None: """At Osaka, transaction gas limit is capped at 16 million (2**24).""" del block_number, timestamp return 16_777_216 @classmethod def block_rlp_size_limit(cls, *, block_number: int = 0, timestamp: int = 0) -> int | None: """From Osaka, block RLP size is limited as specified in EIP-7934.""" del block_number, timestamp max_block_size = 10_485_760 safety_margin = 2_097_152 return max_block_size - safety_margin @classmethod def is_deployed(cls) -> bool: """ Flag that the fork has not been deployed to mainnet; it is under active development. """ return False @classmethod def valid_opcodes(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Opcodes]: """Return list of Opcodes that are valid to work on this fork.""" del block_number, timestamp return [ Opcodes.CLZ, ] + super(Prague, cls).valid_opcodes() @classmethod def precompiles(cls, *, block_number: int = 0, timestamp: int = 0) -> List[Address]: """ At Osaka, pre-compile for p256verify operation is added. P256VERIFY = 0x100 """ return [ Address(0x100, label="P256VERIFY"), ] + super(Osaka, cls).precompiles(block_number=block_number, timestamp=timestamp) @classmethod def excess_blob_gas_calculator( cls, *, block_number: int = 0, timestamp: int = 0 ) -> ExcessBlobGasCalculator: """ Return a callable that calculates the excess blob gas for a block. """ target_blobs_per_block = cls.target_blobs_per_block( block_number=block_number, timestamp=timestamp ) blob_gas_per_blob = cls.blob_gas_per_blob(block_number=block_number, timestamp=timestamp) target_blob_gas_per_block = target_blobs_per_block * blob_gas_per_blob max_blobs_per_block = cls.max_blobs_per_block( block_number=block_number, timestamp=timestamp ) blob_base_cost = 2**13 # EIP-7918 new parameter def fn( *, parent_excess_blob_gas: int | None = None, parent_excess_blobs: int | None = None, parent_blob_gas_used: int | None = None, parent_blob_count: int | None = None, parent_base_fee_per_gas: int, # EIP-7918 additional parameter ) -> int: if parent_excess_blob_gas is None: assert parent_excess_blobs is not None, "Parent excess blobs are required" parent_excess_blob_gas = parent_excess_blobs * blob_gas_per_blob if parent_blob_gas_used is None: assert parent_blob_count is not None, "Parent blob count is required" parent_blob_gas_used = parent_blob_count * blob_gas_per_blob if parent_excess_blob_gas + parent_blob_gas_used < target_blob_gas_per_block: return 0 # EIP-7918: Apply reserve price when execution costs dominate blob # costs current_blob_base_fee = cls.blob_gas_price_calculator()( excess_blob_gas=parent_excess_blob_gas ) reserve_price_active = ( blob_base_cost * parent_base_fee_per_gas > blob_gas_per_blob * current_blob_base_fee ) if reserve_price_active: blob_excess_adjustment = ( parent_blob_gas_used * (max_blobs_per_block - target_blobs_per_block) // max_blobs_per_block ) return parent_excess_blob_gas + blob_excess_adjustment # Original EIP-4844 calculation return parent_excess_blob_gas + parent_blob_gas_used - target_blob_gas_per_block return fn @classmethod def max_blobs_per_tx(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """ Blobs in Osaka, have a static max of 6 blobs per tx. Differs from the max per block. """ del block_number, timestamp return 6 @classmethod def blob_reserve_price_active(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """Blob reserve price is supported in Osaka.""" del block_number, timestamp return True @classmethod def blob_base_cost(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the base cost of a blob at a given fork.""" del block_number, timestamp return 2**13 # EIP-7918 new parameter class BPO1(Osaka, bpo_fork=True): """Mainnet BPO1 fork - Blob Parameter Only fork 1.""" @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction for BPO1.""" del block_number, timestamp return 8346193 @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO1 have a target of 10 blobs per block.""" del block_number, timestamp return 10 @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO1 have a max of 15 blobs per block.""" del block_number, timestamp return 15 class BPO2(BPO1, bpo_fork=True): """Mainnet BPO2 fork - Blob Parameter Only fork 2.""" @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction for BPO2.""" del block_number, timestamp return 11684671 @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO2 have a target of 14 blobs per block.""" del block_number, timestamp return 14 @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO2 have a max of 21 blobs per block.""" del block_number, timestamp return 21 class BPO3(BPO2, bpo_fork=True): """ Pseudo BPO3 fork - Blob Parameter Only fork 3. For testing purposes only. """ @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction for BPO3.""" del block_number, timestamp return 20609697 @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO3 have a target of 21 blobs per block.""" del block_number, timestamp return 21 @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO3 have a max of 32 blobs per block.""" del block_number, timestamp return 32 class BPO4(BPO3, bpo_fork=True): """ Pseudo BPO4 fork - Blob Parameter Only fork 4. For testing purposes only. Testing a decrease in values from BPO3. """ @classmethod def blob_base_fee_update_fraction(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Return the blob base fee update fraction for BPO4.""" del block_number, timestamp return 13739630 @classmethod def target_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO4 have a target of 14 blobs per block.""" del block_number, timestamp return 14 @classmethod def max_blobs_per_block(cls, *, block_number: int = 0, timestamp: int = 0) -> int: """Blobs in BPO4 have a max of 21 blobs per block.""" del block_number, timestamp return 21 class BPO5(BPO4, bpo_fork=True): """ Pseudo BPO5 fork - Blob Parameter Only fork 5. For testing purposes only. Required to parse Fusaka devnet genesis files. """ pass class Amsterdam(Osaka): """Amsterdam fork.""" @classmethod def header_bal_hash_required(cls, *, block_number: int = 0, timestamp: int = 0) -> bool: """ From Amsterdam, header must contain block access list hash (EIP-7928). """ del block_number, timestamp return True @classmethod def is_deployed(cls) -> bool: """Return True if this fork is deployed.""" return False @classmethod def engine_new_payload_version( cls, *, block_number: int = 0, timestamp: int = 0 ) -> Optional[int]: """From Amsterdam, new payload calls must use version 5.""" del block_number, timestamp return 5 @classmethod def engine_execution_payload_block_access_list( cls, *, block_number: int = 0, timestamp: int = 0 ) -> bool: """ From Amsterdam, engine execution payload includes `block_access_list` as a parameter. """ del block_number, timestamp return True class EOFv1(Prague, solc_name="cancun"): """EOF fork.""" @classmethod def evm_code_types(cls, *, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]: """EOF V1 is supported starting from Osaka.""" return super(EOFv1, cls).evm_code_types( block_number=block_number, timestamp=timestamp, ) + [EVMCodeType.EOF_V1] @classmethod def call_opcodes( cls, *, block_number: int = 0, timestamp: int = 0 ) -> List[Tuple[Opcodes, EVMCodeType]]: """EOF V1 introduces EXTCALL, EXTSTATICCALL, EXTDELEGATECALL.""" return [ (Opcodes.EXTCALL, EVMCodeType.EOF_V1), (Opcodes.EXTSTATICCALL, EVMCodeType.EOF_V1), (Opcodes.EXTDELEGATECALL, EVMCodeType.EOF_V1), ] + super(EOFv1, cls).call_opcodes(block_number=block_number, timestamp=timestamp) @classmethod def is_deployed(cls) -> bool: """ Flag that the fork has not been deployed to mainnet; it is under active development. """ return False ================================================ FILE: src/ethereum_test_forks/forks/helpers.py ================================================ """Helpers used to return fork-specific values.""" def ceiling_division(a: int, b: int) -> int: """ Calculate the ceil without using floating point. Used by many of the EVM's formulas. """ return -(a // -b) def fake_exponential(factor: int, numerator: int, denominator: int) -> int: """Calculate the blob gas cost.""" i = 1 output = 0 numerator_accumulator = factor * denominator while numerator_accumulator > 0: output += numerator_accumulator numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i) i += 1 return output // denominator ================================================ FILE: src/ethereum_test_forks/forks/transition.py ================================================ """List of all transition fork definitions.""" from ..transition_base_fork import transition_fork from .forks import BPO1, BPO2, BPO3, BPO4, Berlin, Cancun, London, Osaka, Paris, Prague, Shanghai # Transition Forks @transition_fork(to_fork=London, at_block=5) class BerlinToLondonAt5(Berlin): """Berlin to London transition at Block 5.""" pass @transition_fork(to_fork=Shanghai, at_timestamp=15_000) class ParisToShanghaiAtTime15k(Paris): """Paris to Shanghai transition at Timestamp 15k.""" pass @transition_fork(to_fork=Cancun, at_timestamp=15_000) class ShanghaiToCancunAtTime15k(Shanghai): """Shanghai to Cancun transition at Timestamp 15k.""" pass @transition_fork(to_fork=Prague, at_timestamp=15_000) class CancunToPragueAtTime15k(Cancun): """Cancun to Prague transition at Timestamp 15k.""" pass @transition_fork(to_fork=Osaka, at_timestamp=15_000) class PragueToOsakaAtTime15k(Prague): """Prague to Osaka transition at Timestamp 15k.""" pass @transition_fork(to_fork=BPO1, at_timestamp=15_000) class OsakaToBPO1AtTime15k(Osaka): """Osaka to BPO1 transition at Timestamp 15k.""" pass @transition_fork(to_fork=BPO2, at_timestamp=15_000) class BPO1ToBPO2AtTime15k(BPO1): """BPO1 to BPO2 transition at Timestamp 15k.""" pass @transition_fork(to_fork=BPO3, at_timestamp=15_000) class BPO2ToBPO3AtTime15k(BPO2): """BPO2 to BPO3 transition at Timestamp 15k.""" pass @transition_fork(to_fork=BPO4, at_timestamp=15_000) class BPO3ToBPO4AtTime15k(BPO3): """BPO3 to BPO4 transition at Timestamp 15k.""" pass ================================================ FILE: src/ethereum_test_forks/gas_costs.py ================================================ """Defines the data class that will contain gas cost constants on each fork.""" from dataclasses import dataclass @dataclass(kw_only=True, frozen=True) class GasCosts: """Class that contains the gas cost constants for any fork.""" G_JUMPDEST: int G_BASE: int G_VERY_LOW: int G_LOW: int G_MID: int G_HIGH: int G_WARM_ACCOUNT_ACCESS: int G_COLD_ACCOUNT_ACCESS: int G_ACCESS_LIST_ADDRESS: int G_ACCESS_LIST_STORAGE: int G_WARM_SLOAD: int G_COLD_SLOAD: int G_STORAGE_SET: int G_STORAGE_RESET: int R_STORAGE_CLEAR: int G_SELF_DESTRUCT: int G_CREATE: int G_CODE_DEPOSIT_BYTE: int G_INITCODE_WORD: int G_CALL_VALUE: int G_CALL_STIPEND: int G_NEW_ACCOUNT: int G_EXP: int G_EXP_BYTE: int G_MEMORY: int G_TX_DATA_ZERO: int G_TX_DATA_NON_ZERO: int G_TX_DATA_STANDARD_TOKEN_COST: int G_TX_DATA_FLOOR_TOKEN_COST: int G_TRANSACTION: int G_TRANSACTION_CREATE: int G_LOG: int G_LOG_DATA: int G_LOG_TOPIC: int G_KECCAK_256: int G_KECCAK_256_WORD: int G_COPY: int G_BLOCKHASH: int G_AUTHORIZATION: int R_AUTHORIZATION_EXISTING_AUTHORITY: int ================================================ FILE: src/ethereum_test_forks/helpers.py ================================================ """Helper methods to resolve forks during test filling.""" import re from typing import Annotated, Any, Callable, FrozenSet, List, Optional, Set, Type from pydantic import ( BaseModel, BeforeValidator, ConfigDict, PlainSerializer, PlainValidator, TypeAdapter, ValidatorFunctionWrapHandler, model_validator, ) from .base_fork import BaseFork from .forks import forks, transition from .transition_base_fork import TransitionBaseClass class InvalidForkError(Exception): """ Invalid fork error raised when the fork specified is not found or incompatible. """ def __init__(self, message: str) -> None: """Initialize the InvalidForkError exception.""" super().__init__(message) all_forks: List[Type[BaseFork]] = [] for fork_name in forks.__dict__: fork = forks.__dict__[fork_name] if not isinstance(fork, type): continue if issubclass(fork, BaseFork) and fork is not BaseFork: all_forks.append(fork) transition_forks: List[Type[BaseFork]] = [] for fork_name in transition.__dict__: fork = transition.__dict__[fork_name] if not isinstance(fork, type): continue if issubclass(fork, TransitionBaseClass) and issubclass(fork, BaseFork): transition_forks.append(fork) ALL_FORKS = frozenset(fork for fork in all_forks if not fork.ignore()) ALL_TRANSITION_FORKS = frozenset(transition_forks) ALL_FORKS_WITH_TRANSITIONS = frozenset( fork for fork in ALL_FORKS | ALL_TRANSITION_FORKS if not fork.ignore() ) def get_forks() -> List[Type[BaseFork]]: """ Return list of all the fork classes implemented by `ethereum_test_forks` ordered chronologically by deployment. """ return all_forks[:] def get_deployed_forks() -> List[Type[BaseFork]]: """ Return list of all the fork classes implemented by `ethereum_test_forks` that have been deployed to mainnet, chronologically ordered by deployment. """ return [fork for fork in get_forks() if fork.is_deployed() and not fork.ignore()] def get_development_forks() -> List[Type[BaseFork]]: """ Return list of all the fork classes implemented by `ethereum_test_forks` that have been not yet deployed to mainnet and are currently under development. The list is ordered by their planned deployment date. """ return [fork for fork in get_forks() if not fork.is_deployed()] def get_parent_fork(fork: Type[BaseFork]) -> Type[BaseFork]: """Return parent fork of the specified fork.""" parent_fork = fork.__base__ if not parent_fork: raise InvalidForkError(f"Parent fork of {fork} not found.") return parent_fork def get_closest_fork(fork: Type[BaseFork]) -> Optional[Type[BaseFork]]: """Return None if BaseFork is passed, otherwise return the fork itself.""" if fork is BaseFork: return None return fork def get_transition_forks() -> Set[Type[BaseFork]]: """Return all the transition forks.""" return set(ALL_TRANSITION_FORKS) def get_transition_fork_predecessor(transition_fork: Type[BaseFork]) -> Type[BaseFork]: """Return the fork from which the transition fork transitions.""" if not issubclass(transition_fork, TransitionBaseClass): raise InvalidForkError(f"{transition_fork} is not a transition fork.") return transition_fork.transitions_from() def get_transition_fork_successor(transition_fork: Type[BaseFork]) -> Type[BaseFork]: """Return the fork to which the transition fork transitions.""" if not issubclass(transition_fork, TransitionBaseClass): raise InvalidForkError(f"{transition_fork} is not a transition fork.") return transition_fork.transitions_to() def get_from_until_fork_set( forks: Set[Type[BaseFork]] | FrozenSet[Type[BaseFork]], forks_from: Set[Type[BaseFork]], forks_until: Set[Type[BaseFork]], ) -> Set[Type[BaseFork]]: """Get fork range from forks_from to forks_until.""" resulting_set = set() for fork_from in forks_from: for fork_until in forks_until: for fork in forks: if fork <= fork_until and fork >= fork_from: resulting_set.add(fork) return resulting_set def get_forks_with_no_parents( forks: Set[Type[BaseFork]] | FrozenSet[Type[BaseFork]], ) -> Set[Type[BaseFork]]: """Get forks with no parents in the inheritance hierarchy.""" resulting_forks: Set[Type[BaseFork]] = set() for fork in forks: parents = False for next_fork in forks - {fork}: if next_fork < fork: parents = True break if not parents: resulting_forks = resulting_forks | {fork} return resulting_forks def get_forks_with_no_descendants(forks: Set[Type[BaseFork]]) -> Set[Type[BaseFork]]: """Get forks with no descendants in the inheritance hierarchy.""" resulting_forks: Set[Type[BaseFork]] = set() for fork in forks: descendants = False for next_fork in forks - {fork}: if next_fork > fork: descendants = True break if not descendants: resulting_forks = resulting_forks | {fork} return resulting_forks def get_last_descendants( forks: Set[Type[BaseFork]], forks_from: Set[Type[BaseFork]] ) -> Set[Type[BaseFork]]: """Get last descendant of a class in the inheritance hierarchy.""" resulting_forks: Set[Type[BaseFork]] = set() forks = get_forks_with_no_descendants(forks) for fork_from in forks_from: for fork in forks: if fork >= fork_from: resulting_forks = resulting_forks | {fork} return resulting_forks def get_selected_fork_set( *, single_fork: Set[Type[BaseFork]], forks_from: Set[Type[BaseFork]], forks_until: Set[Type[BaseFork]], transition_forks: bool = True, ) -> Set[Type[BaseFork]]: """ Process sets derived from `--fork`, `--until` and `--from` to return an unified fork set. """ selected_fork_set = set() if single_fork: selected_fork_set |= single_fork else: if not forks_from: forks_from = get_forks_with_no_parents(ALL_FORKS) if not forks_until: forks_until = get_last_descendants(set(get_deployed_forks()), forks_from) selected_fork_set = get_from_until_fork_set(ALL_FORKS, forks_from, forks_until) if transition_forks: for fork in list(selected_fork_set): transition_fork_set = transition_fork_to(fork) selected_fork_set |= transition_fork_set return selected_fork_set def transition_fork_from_to( fork_from: Type[BaseFork], fork_to: Type[BaseFork] ) -> Type[BaseFork] | None: """ Return transition fork that transitions to and from the specified forks. """ for transition_fork in get_transition_forks(): if not issubclass(transition_fork, TransitionBaseClass): continue if ( transition_fork.transitions_to() == fork_to and transition_fork.transitions_from() == fork_from ): return transition_fork return None def transition_fork_to(fork_to: Type[BaseFork]) -> Set[Type[BaseFork]]: """Return transition fork that transitions to the specified fork.""" transition_forks: Set[Type[BaseFork]] = set() for transition_fork in get_transition_forks(): if not issubclass(transition_fork, TransitionBaseClass): continue if transition_fork.transitions_to() == fork_to: transition_forks.add(transition_fork) return transition_forks def forks_from_until( fork_from: Type[BaseFork], fork_until: Type[BaseFork] ) -> List[Type[BaseFork]]: """ Return specified fork and all forks after it until and including the second specified fork. """ prev_fork = fork_until forks: List[Type[BaseFork]] = [] while prev_fork != BaseFork and prev_fork != fork_from: forks.insert(0, prev_fork) prev_fork = get_parent_fork(prev_fork) if prev_fork == BaseFork: return [] forks.insert(0, fork_from) return forks def forks_from(fork: Type[BaseFork], deployed_only: bool = True) -> List[Type[BaseFork]]: """Return specified fork and all forks after it.""" if deployed_only: latest_fork = get_deployed_forks()[-1] else: latest_fork = get_forks()[-1] return forks_from_until(fork, latest_fork) def get_relative_fork_markers( fork_identifier: Type[BaseFork] | str, strict_mode: bool = True ) -> list[str]: """ Return a list of marker names for a given fork. For a base fork (e.g. `Shanghai`), return [ `Shanghai` ]. For a transition fork (e.g. `ShanghaiToCancunAtTime15k` which transitions to `Cancun`), return [ `ShanghaiToCancunAtTime15k`, `Cancun` ]. If `strict_mode` is set to `True`, raise an `InvalidForkError` if the fork is not found, otherwise, simply return the provided (str) `fork_identifier` (this is required to run `consume` with forks that are unknown to EEST). """ all_forks = set(get_forks()) | set(get_transition_forks()) if isinstance(fork_identifier, str): fork_class = None for candidate in all_forks: if candidate.name() == fork_identifier: fork_class = candidate break if strict_mode and fork_class is None: raise InvalidForkError(f"Unknown fork: {fork_identifier}") return [fork_identifier] else: fork_class = fork_identifier if issubclass(fork_class, TransitionBaseClass): return [fork_class.name(), fork_class.transitions_to().name()] else: return [fork_class.name()] def get_fork_by_name(fork_name: str) -> Type[BaseFork] | None: """Get a fork by name.""" for fork in get_forks(): if fork.name() == fork_name: return fork return None class ForkRangeDescriptor(BaseModel): """ Fork descriptor parsed from string normally contained in ethereum/tests fillers. """ greater_equal: Type[BaseFork] | None = None less_than: Type[BaseFork] | None = None model_config = ConfigDict(frozen=True) def fork_in_range(self, fork: Type[BaseFork]) -> bool: """Return whether the given fork is within range.""" if self.greater_equal is not None and fork < self.greater_equal: return False if self.less_than is not None and fork >= self.less_than: return False return True @model_validator(mode="wrap") @classmethod def validate_fork_range_descriptor( cls, v: Any, handler: ValidatorFunctionWrapHandler ) -> "ForkRangeDescriptor": """ Validate the fork range descriptor from a string. Examples: - ">=Osaka" validates to {greater_equal=Osaka, less_than=None} - ">=Prague=(\w+)", descriptor_string): fork: Type[BaseFork] | None = get_fork_by_name(m.group(1)) if fork is None: raise Exception(f"Unable to parse fork name: {m.group(1)}") v["greater_equal"] = fork descriptor_string = re.sub(r">=(\w+)", "", descriptor_string) if m := re.search(r"<(\w+)", descriptor_string): fork = get_fork_by_name(m.group(1)) if fork is None: raise Exception(f"Unable to parse fork name: {m.group(1)}") v["less_than"] = fork descriptor_string = re.sub(r"<(\w+)", "", descriptor_string) if descriptor_string: raise Exception( "Unable to completely parse fork range descriptor. " + f'Remaining string: "{descriptor_string}"' ) return handler(v) def fork_validator_generator( cls_name: str, forks: List[Type[BaseFork]] ) -> Callable[[Any], Type[BaseFork]]: """Generate a fork validator function.""" forks_dict = {fork.name().lower(): fork for fork in forks} def fork_validator(obj: Any) -> Type[BaseFork]: """Get a fork by name or raise an error.""" if obj is None: raise InvalidForkError("Fork cannot be None") if isinstance(obj, type) and issubclass(obj, BaseFork): return obj if isinstance(obj, str): if obj.lower() in forks_dict: return forks_dict[obj.lower()] else: raise InvalidForkError(f"Invalid fork '{obj}' specified") raise InvalidForkError(f"Invalid {cls_name}: {obj} (type: {type(obj)})") return fork_validator def set_before_validator(value: Any) -> Any: """Convert a comma-separated string to a validation input for a set.""" if isinstance(value, str): if value.strip() == "": return set() return {v.strip() for v in value.split(",")} return value # Annotated Pydantic-Friendly Fork Types Fork = Annotated[ Type[BaseFork], PlainSerializer(str), PlainValidator(fork_validator_generator("Fork", all_forks + transition_forks)), ] ForkAdapter: TypeAdapter = TypeAdapter(Fork) ForkOrNoneAdapter: TypeAdapter = TypeAdapter(Fork | None) ForkSet = Annotated[ Set[Fork], BeforeValidator(set_before_validator), ] ForkSetAdapter: TypeAdapter = TypeAdapter(ForkSet) TransitionFork = Annotated[ Type[BaseFork], PlainSerializer(str), PlainValidator(fork_validator_generator("TransitionFork", transition_forks)), ] TransitionForkAdapter: TypeAdapter = TypeAdapter(TransitionFork) TransitionForkOrNoneAdapter: TypeAdapter = TypeAdapter(TransitionFork | None) ================================================ FILE: src/ethereum_test_forks/py.typed ================================================ ================================================ FILE: src/ethereum_test_forks/tests/__init__.py ================================================ """`ethereum_test_forks` verification tests.""" ================================================ FILE: src/ethereum_test_forks/tests/test_fork_range_descriptor.py ================================================ """Test fork range descriptor parsing from string.""" import pytest from ..forks.forks import Osaka, Prague from ..helpers import ForkRangeDescriptor @pytest.mark.parametrize( "fork_range_descriptor_string,expected_fork_range_descriptor", [ ( ">=Osaka", ForkRangeDescriptor( greater_equal=Osaka, less_than=None, ), ), ( ">= Prague < Osaka", ForkRangeDescriptor( greater_equal=Prague, less_than=Osaka, ), ), ], ) def test_parsing_fork_range_descriptor_from_string( fork_range_descriptor_string: str, expected_fork_range_descriptor: ForkRangeDescriptor, ) -> None: """ Test multiple strings used as fork range descriptors in ethereum/tests. """ assert ( ForkRangeDescriptor.model_validate(fork_range_descriptor_string) == expected_fork_range_descriptor ) ================================================ FILE: src/ethereum_test_forks/tests/test_forks.py ================================================ """Test fork utilities.""" from typing import Dict, cast import pytest from pydantic import BaseModel from ethereum_test_base_types import BlobSchedule from ..forks.forks import ( BPO1, BPO2, BPO3, BPO4, Berlin, Cancun, Frontier, Homestead, Istanbul, London, Osaka, Paris, Prague, Shanghai, ) from ..forks.transition import ( BerlinToLondonAt5, BPO1ToBPO2AtTime15k, BPO2ToBPO3AtTime15k, BPO3ToBPO4AtTime15k, CancunToPragueAtTime15k, OsakaToBPO1AtTime15k, ParisToShanghaiAtTime15k, PragueToOsakaAtTime15k, ShanghaiToCancunAtTime15k, ) from ..helpers import ( Fork, ForkAdapter, ForkOrNoneAdapter, ForkSetAdapter, forks_from, forks_from_until, get_deployed_forks, get_forks, transition_fork_from_to, transition_fork_to, ) from ..transition_base_fork import transition_fork FIRST_DEPLOYED = Frontier LAST_DEPLOYED = Prague LAST_DEVELOPMENT = Osaka DEVELOPMENT_FORKS = [Osaka] def test_transition_forks() -> None: """Test transition fork utilities.""" assert transition_fork_from_to(Berlin, London) == BerlinToLondonAt5 assert transition_fork_from_to(Berlin, Paris) is None assert transition_fork_to(Shanghai) == {ParisToShanghaiAtTime15k} # Test forks transitioned to and from assert BerlinToLondonAt5.transitions_to() == London # type: ignore assert BerlinToLondonAt5.transitions_from() == Berlin # type: ignore assert BerlinToLondonAt5.transition_tool_name(block_number=4, timestamp=0) == "Berlin" assert BerlinToLondonAt5.transition_tool_name(block_number=5, timestamp=0) == "London" # Default values of transition forks is the transition block assert BerlinToLondonAt5.transition_tool_name() == "London" assert ( ParisToShanghaiAtTime15k.transition_tool_name(block_number=0, timestamp=14_999) == "Merge" ) assert ( ParisToShanghaiAtTime15k.transition_tool_name(block_number=0, timestamp=15_000) == "Shanghai" ) assert ParisToShanghaiAtTime15k.transition_tool_name() == "Shanghai" assert BerlinToLondonAt5.header_base_fee_required(block_number=4, timestamp=0) is False assert BerlinToLondonAt5.header_base_fee_required(block_number=5, timestamp=0) is True assert ( ParisToShanghaiAtTime15k.header_withdrawals_required(block_number=0, timestamp=14_999) is False ) assert ( ParisToShanghaiAtTime15k.header_withdrawals_required(block_number=0, timestamp=15_000) is True ) assert ( ParisToShanghaiAtTime15k.engine_new_payload_version(block_number=0, timestamp=14_999) == 1 ) assert ( ParisToShanghaiAtTime15k.engine_new_payload_version(block_number=0, timestamp=15_000) == 2 ) assert BerlinToLondonAt5.fork_at(block_number=4, timestamp=0) == Berlin assert BerlinToLondonAt5.fork_at(block_number=5, timestamp=0) == London assert ParisToShanghaiAtTime15k.fork_at(block_number=0, timestamp=14_999) == Paris assert ParisToShanghaiAtTime15k.fork_at(block_number=0, timestamp=15_000) == Shanghai assert ParisToShanghaiAtTime15k.fork_at() == Paris assert ParisToShanghaiAtTime15k.fork_at(block_number=10_000_000, timestamp=14_999) == Paris def test_forks_from() -> None: # noqa: D103 assert forks_from(Paris)[0] == Paris assert forks_from(Paris)[-1] == LAST_DEPLOYED assert forks_from(Paris, deployed_only=True)[0] == Paris assert forks_from(Paris, deployed_only=True)[-1] == LAST_DEPLOYED assert forks_from(Paris, deployed_only=False)[0] == Paris # Too flaky # assert forks_from(Paris, deployed_only=False)[-1] == LAST_DEVELOPMENT def test_forks() -> None: """Test fork utilities.""" assert forks_from_until(Berlin, Berlin) == [Berlin] assert forks_from_until(Berlin, London) == [Berlin, London] assert forks_from_until(Berlin, Paris) == [ Berlin, London, Paris, ] # Test fork names assert London.name() == "London" assert ParisToShanghaiAtTime15k.name() == "ParisToShanghaiAtTime15k" assert f"{London}" == "London" assert f"{ParisToShanghaiAtTime15k}" == "ParisToShanghaiAtTime15k" # Merge name will be changed to paris, but we need to check the inheriting # fork name is still the default assert Paris.transition_tool_name() == "Merge" assert Shanghai.transition_tool_name() == "Shanghai" assert f"{Paris}" == "Paris" assert f"{Shanghai}" == "Shanghai" assert f"{ParisToShanghaiAtTime15k}" == "ParisToShanghaiAtTime15k" # Test some fork properties assert Berlin.header_base_fee_required(block_number=0, timestamp=0) is False assert London.header_base_fee_required(block_number=0, timestamp=0) is True assert Paris.header_base_fee_required(block_number=0, timestamp=0) is True # Default values of normal forks if the genesis block assert Paris.header_base_fee_required() is True # Transition forks too assert ( cast(Fork, BerlinToLondonAt5).header_base_fee_required(block_number=4, timestamp=0) is False ) assert ( cast(Fork, BerlinToLondonAt5).header_base_fee_required(block_number=5, timestamp=0) is True ) assert ( cast(Fork, ParisToShanghaiAtTime15k).header_withdrawals_required( block_number=0, timestamp=14_999 ) is False ) assert ( cast(Fork, ParisToShanghaiAtTime15k).header_withdrawals_required( block_number=0, timestamp=15_000 ) is True ) assert cast(Fork, ParisToShanghaiAtTime15k).header_withdrawals_required() is True class ForkInPydanticModel(BaseModel): """Fork in pydantic model.""" fork_1: Fork fork_2: Fork fork_3: Fork | None def test_fork_in_pydantic_model() -> None: """Test fork in pydantic model.""" model = ForkInPydanticModel(fork_1=Paris, fork_2=ParisToShanghaiAtTime15k, fork_3=None) assert model.model_dump() == { "fork_1": "Paris", "fork_2": "ParisToShanghaiAtTime15k", "fork_3": None, } assert ( model.model_dump_json() == '{"fork_1":"Paris","fork_2":"ParisToShanghaiAtTime15k","fork_3":null}' ) model = ForkInPydanticModel.model_validate_json( '{"fork_1": "Paris", "fork_2": "ParisToShanghaiAtTime15k", "fork_3": null}' ) assert model.fork_1 == Paris assert model.fork_2 == ParisToShanghaiAtTime15k assert model.fork_3 is None def test_fork_comparison() -> None: """Test fork comparison operators.""" # Test fork comparison assert Paris > Berlin assert not Berlin > Paris assert Berlin < Paris assert not Paris < Berlin assert Paris >= Berlin assert not Berlin >= Paris assert Berlin <= Paris assert not Paris <= Berlin assert London > Berlin assert not Berlin > London assert Berlin < London assert not London < Berlin assert London >= Berlin assert not Berlin >= London assert Berlin <= London assert not London <= Berlin assert Berlin >= Berlin assert Berlin <= Berlin assert not Berlin > Berlin assert not Berlin < Berlin fork = Berlin assert fork >= Berlin assert fork <= Berlin assert not fork > Berlin assert not fork < Berlin assert fork == Berlin def test_transition_fork_comparison() -> None: """ Test comparing to a transition fork. The comparison logic is based on the logic we use to generate the tests. E.g. given transition fork A->B, when filling, and given the from/until markers, we expect the following logic: Marker Comparison A->B Included --------- ------------ --------------- From A fork >= A True Until A fork <= A False From B fork >= B True Until B fork <= B True """ assert BerlinToLondonAt5 >= Berlin assert not BerlinToLondonAt5 <= Berlin assert BerlinToLondonAt5 >= London assert BerlinToLondonAt5 <= London # Comparisons between transition forks is done against the `transitions_to` # fork assert BerlinToLondonAt5 < ParisToShanghaiAtTime15k assert ParisToShanghaiAtTime15k > BerlinToLondonAt5 assert BerlinToLondonAt5 == BerlinToLondonAt5 assert BerlinToLondonAt5 != ParisToShanghaiAtTime15k assert BerlinToLondonAt5 <= ParisToShanghaiAtTime15k assert ParisToShanghaiAtTime15k >= BerlinToLondonAt5 assert sorted( { PragueToOsakaAtTime15k, CancunToPragueAtTime15k, ParisToShanghaiAtTime15k, ShanghaiToCancunAtTime15k, BerlinToLondonAt5, } ) == [ BerlinToLondonAt5, ParisToShanghaiAtTime15k, ShanghaiToCancunAtTime15k, CancunToPragueAtTime15k, PragueToOsakaAtTime15k, ] def test_get_forks() -> None: # noqa: D103 all_forks = get_forks() assert all_forks[0] == FIRST_DEPLOYED # assert all_forks[-1] == LAST_DEVELOPMENT # Too flaky def test_deployed_forks() -> None: # noqa: D103 deployed_forks = get_deployed_forks() assert deployed_forks[0] == FIRST_DEPLOYED assert deployed_forks[-1] == LAST_DEPLOYED class PrePreAllocFork(Shanghai): """Dummy fork used for testing.""" @classmethod def pre_allocation(cls, *, block_number: int = 0, timestamp: int = 0) -> Dict: """Return some starting point for allocation.""" del block_number, timestamp return {"test": "test"} class PreAllocFork(PrePreAllocFork): """Dummy fork used for testing.""" @classmethod def pre_allocation(cls, *, block_number: int = 0, timestamp: int = 0) -> Dict: """Add allocation to the pre-existing one from previous fork.""" del block_number, timestamp return {"test2": "test2"} | super(PreAllocFork, cls).pre_allocation() @transition_fork(to_fork=PreAllocFork, at_timestamp=15_000) class PreAllocTransitionFork(PrePreAllocFork): """PrePreAllocFork to PreAllocFork transition at Timestamp 15k.""" pass def test_pre_alloc() -> None: # noqa: D103 assert PrePreAllocFork.pre_allocation() == {"test": "test"} assert PreAllocFork.pre_allocation() == {"test": "test", "test2": "test2"} assert PreAllocTransitionFork.pre_allocation() == { "test": "test", "test2": "test2", } assert PreAllocTransitionFork.pre_allocation() == { "test": "test", "test2": "test2", } def test_precompiles() -> None: # noqa: D103 Cancun.precompiles() == list(range(11))[1:] # noqa: B015 def test_tx_types() -> None: # noqa: D103 Cancun.tx_types() == list(range(4)) # noqa: B015 @pytest.mark.parametrize( "fork", [ pytest.param(Berlin, id="Berlin"), pytest.param(Istanbul, id="Istanbul"), pytest.param(Homestead, id="Homestead"), pytest.param(Frontier, id="Frontier"), ], ) @pytest.mark.parametrize( "calldata", [ pytest.param(b"\0", id="zero-data"), pytest.param(b"\1", id="non-zero-data"), ], ) @pytest.mark.parametrize( "create_tx", [False, True], ) def test_tx_intrinsic_gas_functions(fork: Fork, calldata: bytes, create_tx: bool) -> None: # noqa: D103 intrinsic_gas = 21_000 if calldata == b"\0": intrinsic_gas += 4 else: if fork >= Istanbul: intrinsic_gas += 16 else: intrinsic_gas += 68 if create_tx: if fork >= Homestead: intrinsic_gas += 32000 intrinsic_gas += 2 assert ( fork.transaction_intrinsic_cost_calculator()( calldata=calldata, contract_creation=create_tx, ) == intrinsic_gas ) class FutureFork(Osaka): """ Dummy fork used for testing. Contains no changes to the blob parameters from the parent fork in order to confirm that it's added to the blob schedule even if it doesn't have any changes. """ pass @pytest.mark.parametrize( "fork,expected_schedule", [ pytest.param(Frontier, None, id="Frontier"), pytest.param( Cancun, { "Cancun": { "target_blobs_per_block": 3, "max_blobs_per_block": 6, "baseFeeUpdateFraction": 3338477, }, }, id="Cancun", ), pytest.param( Prague, { "Cancun": { "target_blobs_per_block": 3, "max_blobs_per_block": 6, "baseFeeUpdateFraction": 3338477, }, "Prague": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, }, id="Prague", ), pytest.param( Osaka, { "Cancun": { "target_blobs_per_block": 3, "max_blobs_per_block": 6, "baseFeeUpdateFraction": 3338477, }, "Prague": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, "Osaka": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, }, id="Osaka", ), pytest.param( CancunToPragueAtTime15k, { "Cancun": { "target_blobs_per_block": 3, "max_blobs_per_block": 6, "baseFeeUpdateFraction": 3338477, }, "Prague": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, }, id="CancunToPragueAtTime15k", ), pytest.param( PragueToOsakaAtTime15k, { "Cancun": { "target_blobs_per_block": 3, "max_blobs_per_block": 6, "baseFeeUpdateFraction": 3338477, }, "Prague": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, "Osaka": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, }, id="PragueToOsakaAtTime15k", ), pytest.param( FutureFork, { "Cancun": { "target_blobs_per_block": 3, "max_blobs_per_block": 6, "baseFeeUpdateFraction": 3338477, }, "Prague": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, "Osaka": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, "FutureFork": { "target_blobs_per_block": 6, "max_blobs_per_block": 9, "baseFeeUpdateFraction": 5007716, }, }, id="FutureFork", ), ], ) def test_blob_schedules(fork: Fork, expected_schedule: Dict | None) -> None: """Test blob schedules for different forks.""" if expected_schedule is None: assert fork.blob_schedule() is None else: assert fork.blob_schedule() == BlobSchedule(**expected_schedule) def test_bpo_fork() -> None: # noqa: D103 assert Osaka.bpo_fork() is False assert BPO1.bpo_fork() is True assert BPO2.bpo_fork() is True assert BPO3.bpo_fork() is True assert BPO4.bpo_fork() is True assert OsakaToBPO1AtTime15k.bpo_fork() is True assert BPO1ToBPO2AtTime15k.bpo_fork() is True assert BPO2ToBPO3AtTime15k.bpo_fork() is True assert BPO3ToBPO4AtTime15k.bpo_fork() is True def test_fork_adapters() -> None: # noqa: D103 assert Osaka == ForkAdapter.validate_python("Osaka") assert Osaka == ForkOrNoneAdapter.validate_python("Osaka") assert ForkOrNoneAdapter.validate_python(None) is None assert {Osaka, Prague} == ForkSetAdapter.validate_python("Osaka, Prague") assert {Osaka, Prague} == ForkSetAdapter.validate_python("osaka, Prague") assert {Osaka, Prague} == ForkSetAdapter.validate_python({"osaka", "Prague"}) assert {Osaka} == ForkSetAdapter.validate_python("Osaka") assert {Osaka} == ForkSetAdapter.validate_python({Osaka}) assert set() == ForkSetAdapter.validate_python("") ================================================ FILE: src/ethereum_test_forks/transition_base_fork.py ================================================ """Base objects used to define transition forks.""" from inspect import signature from typing import Any, Callable, List, Type from .base_fork import BaseFork ALWAYS_TRANSITIONED_BLOCK_NUMBER = 10_000 ALWAYS_TRANSITIONED_BLOCK_TIMESTAMP = 10_000_000 class TransitionBaseClass: """Base class for transition forks.""" @classmethod def transitions_to(cls) -> Type[BaseFork]: """Return fork where the transition ends.""" raise Exception("Not implemented") @classmethod def transitions_from(cls) -> Type[BaseFork]: """Return fork where the transition starts.""" raise Exception("Not implemented") def base_fork_abstract_methods() -> List[str]: """ Return list of all abstract methods that must be implemented by a fork. """ return list(BaseFork.__abstractmethods__) def transition_fork( to_fork: Type[BaseFork], at_block: int = 0, at_timestamp: int = 0 ) -> Callable[[Type[BaseFork]], Type[TransitionBaseClass]]: """Mark a class as a transition fork.""" def decorator(cls: Type[Any]) -> Type[TransitionBaseClass]: transition_name = cls.__name__ from_fork = cls.__bases__[0] assert issubclass(from_fork, BaseFork) class NewTransitionClass( cls, TransitionBaseClass, BaseFork, transition_tool_name=cls._transition_tool_name, solc_name=cls._solc_name, ignore=cls._ignore, ): @classmethod def transitions_to(cls) -> Type[BaseFork]: return to_fork @classmethod def transitions_from(cls) -> Type[BaseFork]: return from_fork NewTransitionClass.name = lambda: transition_name # type: ignore def make_transition_method( base_method: Callable[..., Any], from_fork_method: Callable[..., Any], to_fork_method: Callable[..., Any], ) -> classmethod: base_method_parameters = signature(base_method).parameters def transition_method( cls: Type[Any], block_number: int = ALWAYS_TRANSITIONED_BLOCK_NUMBER, timestamp: int = ALWAYS_TRANSITIONED_BLOCK_TIMESTAMP, ) -> Any: del cls kwargs = {} if "block_number" in base_method_parameters: kwargs["block_number"] = block_number if "timestamp" in base_method_parameters: kwargs["timestamp"] = timestamp if getattr(base_method, "__prefer_transition_to_method__", False): return to_fork_method(**kwargs) return ( to_fork_method(**kwargs) if block_number >= at_block and timestamp >= at_timestamp else from_fork_method(**kwargs) ) return classmethod(transition_method) for method_name in base_fork_abstract_methods() + ["bpo_fork"]: setattr( NewTransitionClass, method_name, make_transition_method( getattr(BaseFork, method_name), getattr(from_fork, method_name), getattr(to_fork, method_name), ), ) NewTransitionClass.transitions_to = lambda: to_fork # type: ignore NewTransitionClass.transitions_from = lambda: from_fork # type: ignore NewTransitionClass.fork_at = lambda block_number=0, timestamp=0: ( # type: ignore to_fork if block_number >= at_block and timestamp >= at_timestamp else from_fork ) return NewTransitionClass return decorator ================================================ FILE: src/ethereum_test_rpc/__init__.py ================================================ """ JSON-RPC methods and helper functions for EEST consume based hive simulators. """ from .rpc import ( AdminRPC, BlockNumberType, DebugRPC, EngineRPC, EthRPC, NetRPC, SendTransactionExceptionError, ) from .rpc_types import ( BlobAndProofV1, BlobAndProofV2, EthConfigResponse, ForkConfig, ForkConfigBlobSchedule, ) __all__ = [ "AdminRPC", "BlobAndProofV1", "BlobAndProofV2", "BlockNumberType", "DebugRPC", "EngineRPC", "EthConfigResponse", "EthRPC", "ForkConfig", "ForkConfigBlobSchedule", "NetRPC", "SendTransactionExceptionError", ] ================================================ FILE: src/ethereum_test_rpc/rpc.py ================================================ """ JSON-RPC methods and helper functions for EEST consume based hive simulators. """ import logging import os import time from itertools import count from pprint import pprint from typing import Any, ClassVar, Dict, List, Literal import requests from jwt import encode from pydantic import ValidationError from tenacity import ( before_sleep_log, retry, retry_if_exception_type, stop_after_attempt, wait_exponential, ) from ethereum_test_base_types import Address, Bytes, Hash, to_json from ethereum_test_types import Transaction from pytest_plugins.custom_logging import get_logger from .rpc_types import ( EthConfigResponse, ForkchoiceState, ForkchoiceUpdateResponse, GetBlobsResponse, GetPayloadResponse, JSONRPCError, PayloadAttributes, PayloadStatus, TransactionByHashResponse, ) logger = get_logger(__name__) BlockNumberType = int | Literal["latest", "earliest", "pending"] class SendTransactionExceptionError(Exception): """ Represent an exception that is raised when a transaction fails to be sent. """ tx: Transaction | None = None tx_rlp: Bytes | None = None def __init__( self, *args: Any, tx: Transaction | None = None, tx_rlp: Bytes | None = None ) -> None: """ Initialize SendTransactionExceptionError class with the given transaction. """ super().__init__(*args) self.tx = tx self.tx_rlp = tx_rlp def __str__(self) -> str: """Return string representation of the exception.""" base = super().__str__() if self.tx is not None: return f"{base} Transaction={self.tx.model_dump_json()}" elif self.tx_rlp is not None: return f"{base} Transaction RLP={self.tx_rlp.hex()}" return base class BaseRPC: """ Represents a base RPC class for every RPC call used within EEST based hive simulators. """ namespace: ClassVar[str] response_validation_context: Any | None def __init__( self, url: str, *, response_validation_context: Any | None = None, ): """Initialize BaseRPC class with the given url.""" self.url = url self.request_id_counter = count(1) self.response_validation_context = response_validation_context def __init_subclass__(cls, namespace: str | None = None) -> None: """ Set namespace of the RPC class to the lowercase of the class name. """ if namespace is None: namespace = cls.__name__ if namespace.endswith("RPC"): namespace = namespace.removesuffix("RPC") namespace = namespace.lower() cls.namespace = namespace @retry( retry=retry_if_exception_type((requests.ConnectionError, ConnectionRefusedError)), stop=stop_after_attempt(5), wait=wait_exponential(multiplier=0.5, min=0.5, max=4.0), before_sleep=before_sleep_log(logger, logging.WARNING), reraise=True, ) def _make_request( self, url: str, json_payload: dict[str, Any], headers: dict[str, str], timeout: int | None, ) -> requests.Response: """ Make HTTP POST request with retry logic for connection errors only. This method only retries network-level connection failures (ConnectionError, ConnectionRefusedError). HTTP status errors (4xx/5xx) are handled by the caller using response.raise_for_status() WITHOUT retries because: - 4xx errors are client errors (permanent failures, no point retrying) - 5xx errors are server errors that typically indicate application-level issues rather than transient network problems """ logger.debug(f"Making HTTP request to {url}, timeout={timeout}") return requests.post(url, json=json_payload, headers=headers, timeout=timeout) def post_request( self, *, method: str, params: List[Any] | None = None, extra_headers: Dict[str, str] | None = None, request_id: int | str | None = None, timeout: int | None = None, ) -> Any: """ Send JSON-RPC POST request to the client RPC server at port defined in the url. """ if extra_headers is None: extra_headers = {} if params is None: params = [] assert self.namespace, "RPC namespace not set" next_request_id_counter = next(self.request_id_counter) if request_id is None: request_id = next_request_id_counter payload = { "jsonrpc": "2.0", "method": f"{self.namespace}_{method}", "params": params, "id": request_id, } base_header = { "Content-Type": "application/json", } headers = base_header | extra_headers logger.debug( f"Sending RPC request to {self.url}, method={self.namespace}_{method}, " f"timeout={timeout}..." ) response = self._make_request(self.url, payload, headers, timeout) response.raise_for_status() response_json = response.json() if "error" in response_json: raise JSONRPCError(**response_json["error"]) assert "result" in response_json, "RPC response didn't contain a result field" result = response_json["result"] return result class EthRPC(BaseRPC): """ Represents an `eth_X` RPC class for every default ethereum RPC method used within EEST based hive simulators. """ transaction_wait_timeout: int = 60 poll_interval: float = 1.0 # how often to poll for tx inclusion BlockNumberType = int | Literal["latest", "earliest", "pending"] def __init__( self, *args: Any, transaction_wait_timeout: int = 60, poll_interval: float | None = None, **kwargs: Any, ) -> None: """ Initialize EthRPC class with the given url and transaction wait timeout. """ super().__init__(*args, **kwargs) self.transaction_wait_timeout = transaction_wait_timeout # Allow overriding via env "flag" EEST_POLL_INTERVAL or ctor arg # Priority: ctor arg > env var > default (1.0) env_val = os.getenv("EEST_POLL_INTERVAL") if poll_interval is not None: self.poll_interval = float(poll_interval) elif env_val: try: self.poll_interval = float(env_val) except ValueError: logger.warning("Invalid EEST_POLL_INTERVAL=%r; falling back to 1.0s", env_val) self.poll_interval = 1.0 else: self.poll_interval = 1.0 def config(self, timeout: int | None = None) -> EthConfigResponse | None: """ `eth_config`: Returns information about a fork configuration of the client. """ try: response = self.post_request(method="config", timeout=timeout) if response is None: logger.warning("eth_config request: failed to get response") return None return EthConfigResponse.model_validate( response, context=self.response_validation_context ) except ValidationError as e: pprint(e.errors()) raise e except Exception as e: logger.debug(f"exception occurred when sending JSON-RPC request: {e}") raise e def chain_id(self) -> int: """`eth_chainId`: Returns the current chain id.""" response = self.post_request(method="chainId", timeout=10) return int(response, 16) def get_block_by_number( self, block_number: BlockNumberType = "latest", full_txs: bool = True ) -> Any | None: """ `eth_getBlockByNumber`: Returns information about a block by block number. """ block = hex(block_number) if isinstance(block_number, int) else block_number params = [block, full_txs] response = self.post_request(method="getBlockByNumber", params=params) return response def get_block_by_hash(self, block_hash: Hash, full_txs: bool = True) -> Any | None: """`eth_getBlockByHash`: Returns information about a block by hash.""" params = [f"{block_hash}", full_txs] response = self.post_request(method="getBlockByHash", params=params) return response def get_balance(self, address: Address, block_number: BlockNumberType = "latest") -> int: """ `eth_getBalance`: Returns the balance of the account of given address. """ block = hex(block_number) if isinstance(block_number, int) else block_number params = [f"{address}", block] response = self.post_request(method="getBalance", params=params) return int(response, 16) def get_code(self, address: Address, block_number: BlockNumberType = "latest") -> Bytes: """`eth_getCode`: Returns code at a given address.""" block = hex(block_number) if isinstance(block_number, int) else block_number params = [f"{address}", block] response = self.post_request(method="getCode", params=params) return Bytes(response) def get_transaction_count( self, address: Address, block_number: BlockNumberType = "latest" ) -> int: """ `eth_getTransactionCount`: Returns the number of transactions sent from an address. """ block = hex(block_number) if isinstance(block_number, int) else block_number params = [f"{address}", block] response = self.post_request(method="getTransactionCount", params=params) return int(response, 16) def get_transaction_by_hash(self, transaction_hash: Hash) -> TransactionByHashResponse | None: """`eth_getTransactionByHash`: Returns transaction details.""" try: response = self.post_request( method="getTransactionByHash", params=[f"{transaction_hash}"] ) if response is None: return None return TransactionByHashResponse.model_validate( response, context=self.response_validation_context ) except ValidationError as e: pprint(e.errors()) raise e def get_transaction_receipt(self, transaction_hash: Hash) -> dict[str, Any] | None: """ `eth_getTransactionReceipt`: Returns transaction receipt. Used to get the actual gas used by a transaction for gas validation in benchmark tests. """ response = self.post_request( method="getTransactionReceipt", params=[f"{transaction_hash}"] ) return response def get_storage_at( self, address: Address, position: Hash, block_number: BlockNumberType = "latest" ) -> Hash: """ `eth_getStorageAt`: Returns the value from a storage position at a given address. """ block = hex(block_number) if isinstance(block_number, int) else block_number params = [f"{address}", f"{position}", block] response = self.post_request(method="getStorageAt", params=params) return Hash(response) def gas_price(self) -> int: """ `eth_gasPrice`: Returns the number of transactions sent from an address. """ response = self.post_request(method="gasPrice") return int(response, 16) def send_raw_transaction( self, transaction_rlp: Bytes, request_id: int | str | None = None ) -> Hash: """`eth_sendRawTransaction`: Send a transaction to the client.""" try: response = self.post_request( method="sendRawTransaction", params=[transaction_rlp.hex()], request_id=request_id, ) result_hash = Hash(response) assert result_hash is not None return result_hash except Exception as e: raise SendTransactionExceptionError(str(e), tx_rlp=transaction_rlp) from e def send_transaction(self, transaction: Transaction) -> Hash: """`eth_sendRawTransaction`: Send a transaction to the client.""" # TODO: is this a copypaste error from above? try: response = self.post_request( method="sendRawTransaction", params=[transaction.rlp().hex()], request_id=transaction.metadata_string(), ) result_hash = Hash(response) assert result_hash == transaction.hash assert result_hash is not None return transaction.hash except Exception as e: raise SendTransactionExceptionError(str(e), tx=transaction) from e def send_transactions(self, transactions: List[Transaction]) -> List[Hash]: """ Use `eth_sendRawTransaction` to send a list of transactions to the client. """ return [self.send_transaction(tx) for tx in transactions] def storage_at_keys( self, account: Address, keys: List[Hash], block_number: BlockNumberType = "latest" ) -> Dict[Hash, Hash]: """ Retrieve the storage values for the specified keys at a given address and block number. """ results: Dict[Hash, Hash] = {} for key in keys: storage_value = self.get_storage_at(account, key, block_number) results[key] = storage_value return results def wait_for_transaction(self, transaction: Transaction) -> TransactionByHashResponse: """ Use `eth_getTransactionByHash` to wait until a transaction is included in a block. """ tx_hash = transaction.hash start_time = time.time() while True: tx = self.get_transaction_by_hash(tx_hash) if tx is not None and tx.block_number is not None: return tx if (time.time() - start_time) > self.transaction_wait_timeout: break time.sleep(self.poll_interval) raise Exception( f"Transaction {tx_hash} ({transaction.model_dump_json()}) not included in a " f"block after {self.transaction_wait_timeout} seconds" ) def wait_for_transactions( self, transactions: List[Transaction] ) -> List[TransactionByHashResponse]: """ Use `eth_getTransactionByHash` to wait until all transactions in list are included in a block. """ tx_hashes = [tx.hash for tx in transactions] responses: List[TransactionByHashResponse] = [] start_time = time.time() while True: i = 0 while i < len(tx_hashes): tx_hash = tx_hashes[i] tx = self.get_transaction_by_hash(tx_hash) if tx is not None and tx.block_number is not None: responses.append(tx) tx_hashes.pop(i) else: i += 1 if not tx_hashes: return responses if (time.time() - start_time) > self.transaction_wait_timeout: break time.sleep(self.poll_interval) missing_txs_strings = [ f"{tx.hash} ({tx.model_dump_json()})" for tx in transactions if tx.hash in tx_hashes ] raise Exception( f"Transactions {', '.join(missing_txs_strings)} not included in a block " f"after {self.transaction_wait_timeout} seconds" ) def send_wait_transaction(self, transaction: Transaction) -> Any: """Send transaction and waits until it is included in a block.""" self.send_transaction(transaction) return self.wait_for_transaction(transaction) def send_wait_transactions(self, transactions: List[Transaction]) -> List[Any]: """ Send list of transactions and waits until all of them are included in a block. """ self.send_transactions(transactions) return self.wait_for_transactions(transactions) class DebugRPC(EthRPC): """ Represents an `debug_X` RPC class for every default ethereum RPC method used within EEST based hive simulators. """ def trace_call(self, tr: dict[str, str], block_number: str) -> Any | None: """`debug_traceCall`: Returns pre state required for transaction.""" params = [tr, block_number, {"tracer": "prestateTracer"}] return self.post_request(method="traceCall", params=params) class EngineRPC(BaseRPC): """ Represents an Engine API RPC class for every Engine API method used within EEST based hive simulators. """ jwt_secret: bytes def __init__( self, *args: Any, jwt_secret: bytes = b"secretsecretsecretsecretsecretse", # Default secret used in hive **kwargs: Any, ) -> None: """Initialize Engine RPC class with the given JWT secret.""" super().__init__(*args, **kwargs) self.jwt_secret = jwt_secret def post_request( self, *, method: str, params: Any | None = None, extra_headers: Dict[str, str] | None = None, request_id: int | str | None = None, timeout: int | None = None, ) -> Any: """ Send JSON-RPC POST request to the client RPC server at port defined in the url. """ if extra_headers is None: extra_headers = {} jwt_token = encode( {"iat": int(time.time())}, self.jwt_secret, algorithm="HS256", ) extra_headers = { "Authorization": f"Bearer {jwt_token}", } | extra_headers return super().post_request( method=method, params=params, extra_headers=extra_headers, timeout=timeout, request_id=request_id, ) def new_payload(self, *params: Any, version: int) -> PayloadStatus: """ `engine_newPayloadVX`: Attempts to execute the given payload on an execution client. """ method = f"newPayloadV{version}" params_list = [to_json(param) for param in params] return PayloadStatus.model_validate( self.post_request(method=method, params=params_list), context=self.response_validation_context, ) def forkchoice_updated( self, forkchoice_state: ForkchoiceState, payload_attributes: PayloadAttributes | None = None, *, version: int, ) -> ForkchoiceUpdateResponse: """ `engine_forkchoiceUpdatedVX`: Updates the forkchoice state of the execution client. """ method = f"forkchoiceUpdatedV{version}" if payload_attributes is None: params = [to_json(forkchoice_state), None] else: params = [to_json(forkchoice_state), to_json(payload_attributes)] return ForkchoiceUpdateResponse.model_validate( self.post_request( method=method, params=params, ), context=self.response_validation_context, ) def get_payload( self, payload_id: Bytes, *, version: int, ) -> GetPayloadResponse: """ `engine_getPayloadVX`: Retrieves a payload that was requested through `engine_forkchoiceUpdatedVX`. """ method = f"getPayloadV{version}" return GetPayloadResponse.model_validate( self.post_request( method=method, params=[f"{payload_id}"], ), context=self.response_validation_context, ) def get_blobs( self, versioned_hashes: List[Hash], *, version: int, ) -> GetBlobsResponse | None: """ `engine_getBlobsVX`: Retrieves blobs from an execution layers tx pool. """ method = f"getBlobsV{version}" params = [f"{h}" for h in versioned_hashes] response = self.post_request( method=method, params=[params], ) if response is None: # for tests that request non-existing blobs logger.debug("get_blobs response received but it has value: None") return None return GetBlobsResponse.model_validate( response, context=self.response_validation_context, ) class NetRPC(BaseRPC): """Represents a net RPC class for network-related RPC calls.""" def peer_count(self) -> int: """`net_peerCount`: Get the number of peers connected to the client.""" response = self.post_request(method="peerCount") return int(response, 16) # hex -> int class AdminRPC(BaseRPC): """Represents an admin RPC class for administrative RPC calls.""" def add_peer(self, enode: str) -> bool: """`admin_addPeer`: Add a peer by enode URL.""" return self.post_request(method="addPeer", params=[enode]) ================================================ FILE: src/ethereum_test_rpc/rpc_types.py ================================================ """Types used in the RPC module for `eth` and `engine` namespaces' requests.""" import json from binascii import crc32 from enum import Enum from hashlib import sha256 from typing import Annotated, Any, Dict, List, Self from pydantic import AliasChoices, Field, model_validator from ethereum_test_base_types import ( Address, Bytes, CamelModel, EthereumTestRootModel, ForkBlobSchedule, ForkHash, Hash, HexNumber, ) from ethereum_test_exceptions import ( BlockException, ExceptionMapperValidator, ExceptionWithMessage, TransactionException, UndefinedException, ) from ethereum_test_fixtures.blockchain import FixtureExecutionPayload from ethereum_test_types import EOA, Transaction, Withdrawal class JSONRPCError(Exception): """Model to parse a JSON RPC error response.""" code: int message: str data: str | None def __init__(self, code: int | str, message: str, data: str | None = None) -> None: """Initialize the JSONRPCError.""" self.code = int(code) self.message = message self.data = data def __str__(self) -> str: """Return string representation of the JSONRPCError.""" if self.data is not None: return f"JSONRPCError(code={self.code}, message={self.message}, data={self.data})" return f"JSONRPCError(code={self.code}, message={self.message})" class TransactionByHashResponse(Transaction): """Represents the response of a transaction by hash request.""" block_hash: Hash | None = None block_number: HexNumber | None = None gas_limit: HexNumber = Field(HexNumber(21_000), alias="gas") transaction_hash: Hash = Field(..., alias="hash") sender: EOA | None = Field(None, alias="from") # The to field can have different names in different clients, so we use # AliasChoices. to: Address | None = Field(..., validation_alias=AliasChoices("to_address", "to", "toAddress")) v: HexNumber = Field(0, validation_alias=AliasChoices("v", "yParity")) # type: ignore @model_validator(mode="before") @classmethod def adapt_clients_response(cls, data: Any) -> Any: """ Perform modifications necessary to adapt the response returned by clients so it can be parsed by our model. """ if isinstance(data, dict): if "gasPrice" in data and "maxFeePerGas" in data: # Keep only one of the gas price fields. del data["gasPrice"] return data def model_post_init(self, __context: Any) -> None: """ Check that the transaction hash returned by the client matches the one calculated by us. """ Transaction.model_post_init(self, __context) assert self.transaction_hash == self.hash class ForkchoiceState(CamelModel): """Represents the forkchoice state of the beacon chain.""" head_block_hash: Hash = Field(Hash(0)) safe_block_hash: Hash = Field(Hash(0)) finalized_block_hash: Hash = Field(Hash(0)) class PayloadStatusEnum(str, Enum): """Represents the status of a payload after execution.""" VALID = "VALID" INVALID = "INVALID" SYNCING = "SYNCING" ACCEPTED = "ACCEPTED" INVALID_BLOCK_HASH = "INVALID_BLOCK_HASH" class BlockTransactionExceptionWithMessage( ExceptionWithMessage[BlockException | TransactionException] # type: ignore ): """Exception returned from the execution client with a message.""" pass class PayloadStatus(CamelModel): """Represents the status of a payload after execution.""" status: PayloadStatusEnum latest_valid_hash: Hash | None validation_error: ( Annotated[ BlockTransactionExceptionWithMessage | UndefinedException, ExceptionMapperValidator ] | None ) class ForkchoiceUpdateResponse(CamelModel): """Represents the response of a forkchoice update.""" payload_status: PayloadStatus payload_id: Bytes | None class PayloadAttributes(CamelModel): """Represents the attributes of a payload.""" timestamp: HexNumber prev_randao: Hash suggested_fee_recipient: Address withdrawals: List[Withdrawal] | None = None parent_beacon_block_root: Hash | None = None class BlobsBundle(CamelModel): """Represents the bundle of blobs.""" commitments: List[Bytes] proofs: List[Bytes] blobs: List[Bytes] def blob_versioned_hashes(self, versioned_hash_version: int = 1) -> List[Hash]: """Return versioned hashes of the blobs.""" versioned_hashes: List[Hash] = [] for commitment in self.commitments: commitment_hash = sha256(commitment).digest() versioned_hash = Hash(bytes([versioned_hash_version]) + commitment_hash[1:]) versioned_hashes.append(versioned_hash) return versioned_hashes class BlobAndProofV1(CamelModel): """Represents a blob and single-proof structure (< Osaka).""" blob: Bytes proof: Bytes class BlobAndProofV2(CamelModel): """Represents a blob and cell proof structure (>= Osaka).""" blob: Bytes proofs: List[Bytes] class GetPayloadResponse(CamelModel): """Represents the response of a get payload request.""" execution_payload: FixtureExecutionPayload blobs_bundle: BlobsBundle | None = None execution_requests: List[Bytes] | None = None class GetBlobsResponse(EthereumTestRootModel[List[BlobAndProofV1 | BlobAndProofV2 | None]]): """Represents the response of a get blobs request.""" root: List[BlobAndProofV1 | BlobAndProofV2 | None] def __len__(self) -> int: """Return the number of blobs in the response.""" return len(self.root) def __getitem__(self, index: int) -> BlobAndProofV1 | BlobAndProofV2 | None: """Return the blob at the given index.""" return self.root[index] class ForkConfigBlobSchedule(CamelModel): """Representation of the blob schedule of a given fork.""" target_blobs_per_block: int = Field(..., alias="target") max_blobs_per_block: int = Field(..., alias="max") base_fee_update_fraction: int @classmethod def from_fork_blob_schedule(cls, fork_blob_schedule: ForkBlobSchedule) -> Self: """Create a ForkConfigBlobSchedule from a ForkBlobSchedule.""" return cls( target_blobs_per_block=fork_blob_schedule.target_blobs_per_block, max_blobs_per_block=fork_blob_schedule.max_blobs_per_block, base_fee_update_fraction=fork_blob_schedule.base_fee_update_fraction, ) class ForkConfig(CamelModel): """Current or next fork config information.""" activation_time: int blob_schedule: ForkConfigBlobSchedule | None = None chain_id: HexNumber fork_id: ForkHash precompiles: Dict[str, Address] system_contracts: Dict[str, Address] def get_hash(self) -> ForkHash: """Return the hash of the fork config.""" obj = self.model_dump(mode="json", by_alias=True, exclude_none=True) return ForkHash(crc32(json.dumps(obj, sort_keys=True, separators=(",", ":")).encode())) class EthConfigResponse(CamelModel): """Response of the `eth_config` RPC endpoint.""" current: ForkConfig next: ForkConfig | None = None last: ForkConfig | None = None ================================================ FILE: src/ethereum_test_rpc/tests/__init__.py ================================================ """Unit tests for the `ethereum_test_rpc` package.""" ================================================ FILE: src/ethereum_test_rpc/tests/test_types.py ================================================ """Test the types in the `ethereum_test_rpc` package.""" from typing import Any, Dict import pytest from ethereum_test_rpc import EthConfigResponse eth_config_dict: Dict[str, Any] = { "current": { "activationTime": 0, "blobSchedule": {"baseFeeUpdateFraction": 3338477, "max": 6, "target": 3}, "chainId": "0x88bb0", "forkId": "0xbef71d30", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002", }, "systemContracts": {"BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02"}, }, "next": { "activationTime": 1742999832, "blobSchedule": {"baseFeeUpdateFraction": 5007716, "max": 9, "target": 6}, "chainId": "0x88bb0", "forkId": "0x0929e24e", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002", }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": ( "0x0000bbddc7ce488642fb579f8b00f3a590007251" ), "DEPOSIT_CONTRACT_ADDRESS": ("0x00000000219ab540356cbb839cbe05303d7705fa"), "HISTORY_STORAGE_ADDRESS": ("0x0000f90827f1c53a10cb7a02335b175320002935"), "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": ("0x00000961ef480eb55e80d19ad83579a64c007002"), }, }, "last": { "activationTime": 1742999832, "blobSchedule": {"baseFeeUpdateFraction": 5007716, "max": 9, "target": 6}, "chainId": "0x88bb0", "forkId": "0x0929e24e", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002", }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": ( "0x0000bbddc7ce488642fb579f8b00f3a590007251" ), "DEPOSIT_CONTRACT_ADDRESS": ("0x00000000219ab540356cbb839cbe05303d7705fa"), "HISTORY_STORAGE_ADDRESS": ("0x0000f90827f1c53a10cb7a02335b175320002935"), "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": ("0x00000961ef480eb55e80d19ad83579a64c007002"), }, }, } @pytest.fixture def eth_config_response() -> EthConfigResponse: """ Get the `eth_config` response from the client to be verified by all tests. """ return EthConfigResponse.model_validate(eth_config_dict) def test_fork_config_get_hash(eth_config_response: EthConfigResponse) -> None: """Test the `get_hash` method of the `ForkConfig` class.""" # Iterate through each fork config and validate for config_name in ("current", "next", "last"): config = getattr(eth_config_response, config_name) expected = eth_config_dict[config_name] if config is None: assert expected is None continue # Top-level fields assert config.activation_time == expected["activationTime"] assert str(config.chain_id) == expected["chainId"] assert str(config.fork_id) == expected["forkId"] # Precompiles assert set(config.precompiles.keys()) == set(expected["precompiles"].keys()) for k, v in expected["precompiles"].items(): assert config.precompiles[k] == v # System contracts assert set(config.system_contracts.keys()) == set(expected["systemContracts"].keys()) for k, v in expected["systemContracts"].items(): assert config.system_contracts[k] == v # Blob schedule if expected.get("blobSchedule") is not None: assert config.blob_schedule is not None assert ( config.blob_schedule.target_blobs_per_block == expected["blobSchedule"]["target"] ) assert config.blob_schedule.max_blobs_per_block == expected["blobSchedule"]["max"] assert ( config.blob_schedule.base_fee_update_fraction == expected["blobSchedule"]["baseFeeUpdateFraction"] ) else: assert config.blob_schedule is None ================================================ FILE: src/ethereum_test_specs/__init__.py ================================================ """Test spec definitions and utilities.""" from .base import BaseTest, TestSpec from .base_static import BaseStaticTest from .benchmark import BenchmarkTest, BenchmarkTestFiller, BenchmarkTestSpec from .blobs import BlobsTest, BlobsTestFiller, BlobsTestSpec from .blockchain import ( BlockchainTest, BlockchainTestFiller, BlockchainTestSpec, ) from .eof import ( EOFStateTest, EOFStateTestFiller, EOFStateTestSpec, EOFTest, EOFTestFiller, EOFTestSpec, ) from .state import StateTest, StateTestFiller, StateTestSpec from .static_state.state_static import StateStaticTest from .transaction import TransactionTest, TransactionTestFiller, TransactionTestSpec __all__ = ( "BaseStaticTest", "BaseTest", "BenchmarkTest", "BenchmarkTestFiller", "BenchmarkTestSpec", "BlobsTest", "BlobsTestFiller", "BlobsTestSpec", "BlockchainTest", "BlockchainTestEngineFiller", "BlockchainTestEngineSpec", "BlockchainTestFiller", "BlockchainTestSpec", "EOFStateTest", "EOFStateTestFiller", "EOFStateTestSpec", "EOFTest", "EOFTestFiller", "EOFTestSpec", "StateStaticTest", "StateTest", "StateTestFiller", "StateTestSpec", "TestSpec", "TransactionTest", "TransactionTestFiller", "TransactionTestSpec", ) ================================================ FILE: src/ethereum_test_specs/base.py ================================================ """ Base test class and helper functions for Ethereum state and blockchain tests. """ import hashlib from abc import abstractmethod from enum import StrEnum, unique from functools import reduce from os import path from pathlib import Path from typing import Any, Callable, ClassVar, Dict, Generator, List, Sequence, Type import pytest from pydantic import BaseModel, ConfigDict, Field, PrivateAttr from typing_extensions import Self from ethereum_clis import Result, TransitionTool from ethereum_clis.cli_types import OpcodeCount from ethereum_test_base_types import to_hex from ethereum_test_execution import BaseExecute, ExecuteFormat, LabeledExecuteFormat from ethereum_test_fixtures import ( BaseFixture, FixtureFormat, LabeledFixtureFormat, PreAllocGroup, PreAllocGroups, ) from ethereum_test_forks import Fork from ethereum_test_types import Alloc, Environment, Withdrawal class HashMismatchExceptionError(Exception): """Exception raised when the expected and actual hashes don't match.""" def __init__( self, expected_hash: str, actual_hash: str, message: str = "Hashes do not match" ) -> None: """Initialize the exception with the expected and actual hashes.""" self.expected_hash = expected_hash self.actual_hash = actual_hash self.message = message super().__init__(self.message) def __str__(self) -> str: """Return the error message.""" return f"{self.message}: Expected {self.expected_hash}, got {self.actual_hash}" def verify_result(result: Result, env: Environment) -> None: """ Verify that values in the t8n result match the expected values. Raises exception on unexpected values. """ if env.withdrawals is not None: assert result.withdrawals_root == to_hex(Withdrawal.list_root(env.withdrawals)) @unique class OpMode(StrEnum): """Operation mode for the fill and execute.""" CONSENSUS = "consensus" BENCHMARKING = "benchmarking" OPTIMIZE_GAS = "optimize-gas" OPTIMIZE_GAS_POST_PROCESSING = "optimize-gas-post-processing" class BaseTest(BaseModel): """ Represents a base Ethereum test which must return a single test fixture. """ model_config = ConfigDict(extra="forbid") tag: str = "" _request: pytest.FixtureRequest | None = PrivateAttr(None) _operation_mode: OpMode | None = PrivateAttr(None) _gas_optimization: int | None = PrivateAttr(None) _gas_optimization_max_gas_limit: int | None = PrivateAttr(None) _opcode_count: OpcodeCount | None = PrivateAttr(None) expected_benchmark_gas_used: int | None = None skip_gas_used_validation: bool = False spec_types: ClassVar[Dict[str, Type["BaseTest"]]] = {} # Transition tool specific fields t8n_dump_dir: Path | None = Field(None, exclude=True) t8n_call_counter: int = Field(0, exclude=True) supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [] supported_markers: ClassVar[Dict[str, str]] = {} @classmethod def discard_fixture_format_by_marks( cls, fixture_format: FixtureFormat, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard a fixture format from filling if the appropriate marker is used. """ del fork, fixture_format, markers return False @classmethod def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: """ Register all subclasses of BaseFixture with a fixture format name set as possible fixture formats. """ if cls.pytest_parameter_name(): # Register the new fixture format BaseTest.spec_types[cls.pytest_parameter_name()] = cls @classmethod def from_test( cls: Type[Self], *, base_test: "BaseTest", **kwargs: Any, ) -> Self: """Create a test in a different format from a base test.""" new_instance = cls( tag=base_test.tag, t8n_dump_dir=base_test.t8n_dump_dir, expected_benchmark_gas_used=base_test.expected_benchmark_gas_used, skip_gas_used_validation=base_test.skip_gas_used_validation, **kwargs, ) new_instance._request = base_test._request new_instance._operation_mode = base_test._operation_mode new_instance._opcode_count = base_test._opcode_count return new_instance @classmethod def discard_execute_format_by_marks( cls, execute_format: ExecuteFormat, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard an execute format from executing if the appropriate marker is used. """ del execute_format, fork, markers return False @abstractmethod def generate( self, *, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, ) -> BaseFixture: """Generate the list of test fixtures.""" pass def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Generate the list of test fixtures.""" del fork raise Exception(f"Unsupported execute format: {execute_format}") @classmethod def pytest_parameter_name(cls) -> str: """ Must return the name of the parameter used in pytest to select this spec type as filler for the test. By default, it returns the underscore separated name of the class. """ if cls == BaseTest: return "" return reduce(lambda x, y: x + ("_" if y.isupper() else "") + y, cls.__name__).lower() def get_next_transition_tool_output_path(self) -> str: """Return path to the next transition tool output file.""" if not self.t8n_dump_dir: return "" current_value = self.t8n_call_counter self.t8n_call_counter += 1 return path.join( self.t8n_dump_dir, str(current_value), ) def is_tx_gas_heavy_test(self) -> bool: """Check if the test is gas-heavy for transaction execution.""" if self._request is not None and hasattr(self._request, "node"): node = self._request.node has_slow_marker = node.get_closest_marker("slow") is not None has_benchmark_marker = node.get_closest_marker("benchmark") is not None return has_slow_marker or has_benchmark_marker return False def is_exception_test(self) -> bool | None: """ Check if the test is an exception test (invalid block, invalid transaction). `None` is returned if it's not possible to determine if the test is negative or not. This is the case when the test is not run in pytest. """ if self._request is not None and hasattr(self._request, "node"): return self._request.node.get_closest_marker("exception_test") is not None return None def node_id(self) -> str: """Return the node ID of the test.""" if self._request is not None and hasattr(self._request, "node"): return self._request.node.nodeid return "" def check_exception_test( self, *, exception: bool, ) -> None: """Compare the test marker against the outcome of the test.""" negative_test_marker = self.is_exception_test() if negative_test_marker is None: return if negative_test_marker != exception: if exception: raise Exception( "Test produced an invalid block or transaction but was not marked with the " "`exception_test` marker. Add the `@pytest.mark.exception_test` decorator " "to the test." ) else: raise Exception( "Test didn't produce an invalid block or transaction but was marked with the " "`exception_test` marker. Remove the `@pytest.mark.exception_test` decorator " "from the test." ) def get_genesis_environment(self, fork: Fork) -> Environment: """ Get the genesis environment for pre-allocation groups. Must be implemented by subclasses to provide the appropriate environment. """ raise NotImplementedError( f"{self.__class__.__name__} must implement genesis environment access for use with " "pre-allocation groups." ) def update_pre_alloc_groups( self, pre_alloc_groups: PreAllocGroups, fork: Fork, test_id: str ) -> PreAllocGroups: """ Create or update the pre-allocation group with the pre from the current spec. """ if not hasattr(self, "pre"): raise AttributeError( f"{self.__class__.__name__} does not have a 'pre' field. Pre-allocation groups " "are only supported for test types that define pre-allocation." ) pre_alloc_hash = self.compute_pre_alloc_group_hash(fork=fork) if pre_alloc_hash in pre_alloc_groups: # Update existing group - just merge pre-allocations group = pre_alloc_groups[pre_alloc_hash] group.pre = Alloc.merge( group.pre, self.pre, key_collision_mode=Alloc.KeyCollisionMode.ALLOW_IDENTICAL_ACCOUNTS, ) group.fork = fork group.test_ids.append(str(test_id)) pre_alloc_groups[pre_alloc_hash] = group else: # Create new group - use Environment instead of expensive genesis # generation genesis_env = self.get_genesis_environment(fork) pre_alloc = Alloc.merge( Alloc.model_validate(fork.pre_allocation_blockchain()), self.pre, ) group = PreAllocGroup( test_ids=[str(test_id)], fork=fork, environment=genesis_env, pre=pre_alloc, ) pre_alloc_groups[pre_alloc_hash] = group return pre_alloc_groups def compute_pre_alloc_group_hash(self, fork: Fork) -> str: """Hash (fork, env) in order to group tests by genesis config.""" if not hasattr(self, "pre"): raise AttributeError( f"{self.__class__.__name__} does not have a 'pre' field. Pre-allocation group " "usage is only supported for test types that define pre-allocs." ) fork_digest = hashlib.sha256(fork.name().encode("utf-8")).digest() fork_hash = int.from_bytes(fork_digest[:8], byteorder="big") genesis_env = self.get_genesis_environment(fork) combined_hash = fork_hash ^ hash(genesis_env) # Check if test has pre_alloc_group marker if self._request is not None and hasattr(self._request, "node"): pre_alloc_group_marker = self._request.node.get_closest_marker("pre_alloc_group") if pre_alloc_group_marker: # Get the group name/salt from marker args if pre_alloc_group_marker.args: group_salt = str(pre_alloc_group_marker.args[0]) if group_salt == "separate": # Use nodeid for unique group per test group_salt = self._request.node.nodeid # Add custom salt to hash salt_hash = hashlib.sha256(group_salt.encode("utf-8")).digest() salt_int = int.from_bytes(salt_hash[:8], byteorder="big") combined_hash = combined_hash ^ salt_int return f"0x{combined_hash:016x}" TestSpec = Callable[[Fork], Generator[BaseTest, None, None]] ================================================ FILE: src/ethereum_test_specs/base_static.py ================================================ """ Base class to parse test cases written in static formats. """ import re from abc import abstractmethod from typing import Any, Callable, ClassVar, Dict, List, Tuple, Type, Union from pydantic import ( BaseModel, TypeAdapter, ValidatorFunctionWrapHandler, model_validator, ) from ethereum_test_base_types import Bytes class BaseStaticTest(BaseModel): """Represents a base class that reads cases from static files.""" formats: ClassVar[List[Type["BaseStaticTest"]]] = [] formats_type_adapter: ClassVar[TypeAdapter] format_name: ClassVar[str] = "" @classmethod def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: """ Register all subclasses of BaseStaticTest with a static test format name set as possible static test format. """ if cls.format_name: # Register the new fixture format BaseStaticTest.formats.append(cls) if len(BaseStaticTest.formats) > 1: BaseStaticTest.formats_type_adapter = TypeAdapter( Union[tuple(BaseStaticTest.formats)], ) else: BaseStaticTest.formats_type_adapter = TypeAdapter(cls) @model_validator(mode="wrap") @classmethod def _parse_into_subclass( cls, v: Any, handler: ValidatorFunctionWrapHandler ) -> "BaseStaticTest": """Parse the static test into the correct subclass.""" if cls is BaseStaticTest: return BaseStaticTest.formats_type_adapter.validate_python(v) return handler(v) @abstractmethod def fill_function(self) -> Callable: """ Return the test function that can be used to fill the test. This method should be implemented by the subclasses. The function returned can be optionally decorated with the `@pytest.mark.parametrize` decorator to parametrize the test with the number of sub test cases. Example: ``` @pytest.mark.parametrize("n", [1]) @pytest.mark.parametrize("m", [1, 2]) @pytest.mark.valid_from("Homestead") def test_state_filler( state_test: StateTestFiller, fork: Fork, pre: Alloc, n: int, m: int ): \"\"\"Generate a test from a static state filler.\"\"\" assert n == 1 assert m in [1, 2] env = Environment(**self.env.model_dump()) sender = pre.fund_eoa() tx = Transaction( ty=0x0, nonce=0, to=Address(0x1000), gas_limit=500000, protected=False if fork in [Frontier, Homestead] else True, data="", sender=sender, ) state_test(env=env, pre=pre, post={}, tx=tx) ``` To aid the generation of the test, the function can be defined and then the decorator be applied after defining the function: ``` def test_state_filler( state_test: StateTestFiller, fork: Fork, pre: Alloc, n: int, m: int, ): ... test_state_filler = pytest.mark.parametrize("n", [1])(test_state_filler ) test_state_filler = pytest.mark.parametrize("m", [1, 2])(test_state_filler ) if self.valid_from: test_state_filler = pytest.mark.valid_from( self.valid_from )(test_state_filler) if self.valid_until: test_state_filler = pytest.mark.valid_until( self.valid_until )(test_state_filler) return test_state_filler ``` The function can contain the following parameters on top of the spec type parameter (`state_test` in the example above): - `fork`: The fork for which the test is currently being filled. - `pre`: The pre-state of the test. """ raise NotImplementedError @staticmethod def remove_comments(data: Dict) -> Dict: """Remove comments from a dictionary.""" result = {} for k, v in data.items(): if isinstance(k, str) and k.startswith("//"): continue if isinstance(v, dict): v = BaseStaticTest.remove_comments(v) elif isinstance(v, list): v = [BaseStaticTest.remove_comments(i) if isinstance(i, dict) else i for i in v] result[k] = v return result @model_validator(mode="before") @classmethod def remove_comments_from_model(cls, data: Any) -> Any: """Remove comments from the static file loaded, if any.""" if isinstance(data, dict): return BaseStaticTest.remove_comments(data) return data def remove_comments(v: str) -> str: """ Split by line and then remove the comments (starting with #) at the end of each line if any. """ return "\n".join([line.split("#")[0].strip() for line in v.splitlines()]) label_matcher = re.compile(r"^:label\s+(\S+)\s*", re.MULTILINE) raw_matcher = re.compile(r":raw\s+(.*)", re.MULTILINE) def labeled_bytes_from_string(v: str) -> Tuple[str | None, Bytes]: """Parse `:label` and `:raw` from a string.""" v = remove_comments(v) label: str | None = None if m := label_matcher.search(v): label = m.group(1) v = label_matcher.sub("", v) m = raw_matcher.match(v.replace("\n", " ")) if not m: raise Exception(f"Unable to parse container from string: {v}") strip_string = m.group(1).strip() return label, Bytes(strip_string) ================================================ FILE: src/ethereum_test_specs/benchmark.py ================================================ """Ethereum benchmark test spec definition and filler.""" import math from abc import ABC, abstractmethod from dataclasses import dataclass, field from typing import Any, Callable, ClassVar, Dict, Generator, List, Sequence, Type import pytest from pydantic import ConfigDict, Field from ethereum_clis import TransitionTool from ethereum_test_base_types import Address, HexNumber from ethereum_test_exceptions import BlockException, TransactionException from ethereum_test_execution import ( BaseExecute, ExecuteFormat, LabeledExecuteFormat, TransactionPost, ) from ethereum_test_fixtures import ( BaseFixture, BlockchainEngineFixture, BlockchainEngineXFixture, BlockchainFixture, FixtureFormat, LabeledFixtureFormat, ) from ethereum_test_forks import Fork from ethereum_test_types import Alloc, Environment, Transaction from ethereum_test_vm import Bytecode from ethereum_test_vm.opcodes import Opcodes as Op from .base import BaseTest from .blockchain import Block, BlockchainTest @dataclass(kw_only=True) class BenchmarkCodeGenerator(ABC): """Abstract base class for generating benchmark bytecode.""" attack_block: Bytecode setup: Bytecode = field(default_factory=Bytecode) cleanup: Bytecode = field(default_factory=Bytecode) tx_kwargs: Dict[str, Any] = field(default_factory=dict) _contract_address: Address | None = None @abstractmethod def deploy_contracts(self, *, pre: Alloc, fork: Fork) -> Address: """Deploy any contracts needed for the benchmark.""" ... def generate_transaction(self, *, pre: Alloc, gas_benchmark_value: int) -> Transaction: """Generate transaction that executes the looping contract.""" assert self._contract_address is not None if "gas_limit" not in self.tx_kwargs: self.tx_kwargs["gas_limit"] = gas_benchmark_value return Transaction( to=self._contract_address, sender=pre.fund_eoa(), **self.tx_kwargs, ) def generate_repeated_code( self, *, repeated_code: Bytecode, setup: Bytecode | None = None, cleanup: Bytecode | None = None, fork: Fork, ) -> Bytecode: """ Calculate the maximum number of iterations that can fit in the code size limit. """ assert len(repeated_code) > 0, "repeated_code cannot be empty" max_code_size = fork.max_code_size() if setup is None: setup = Bytecode() if cleanup is None: cleanup = Bytecode() overhead = len(setup) + len(Op.JUMPDEST) + len(cleanup) + len(Op.JUMP(len(setup))) available_space = max_code_size - overhead max_iterations = available_space // len(repeated_code) # TODO: Unify the PUSH0 and PUSH1 usage. code = setup + Op.JUMPDEST + repeated_code * max_iterations + cleanup code += Op.JUMP(len(setup)) if len(setup) > 0 else Op.PUSH0 + Op.JUMP self._validate_code_size(code, fork) return code def _validate_code_size(self, code: Bytecode, fork: Fork) -> None: """Validate that the generated code fits within size limits.""" if len(code) > fork.max_code_size(): raise ValueError( f"Generated code size {len(code)} exceeds maximum allowed size " f"{fork.max_code_size()}" ) class BenchmarkTest(BaseTest): """Test type designed specifically for benchmark test cases.""" model_config = ConfigDict(extra="forbid") pre: Alloc = Field(default_factory=Alloc) post: Alloc = Field(default_factory=Alloc) tx: Transaction | None = None setup_blocks: List[Block] = Field(default_factory=list) blocks: List[Block] | None = None block_exception: ( List[TransactionException | BlockException] | TransactionException | BlockException | None ) = None env: Environment = Field(default_factory=Environment) expected_benchmark_gas_used: int | None = None gas_benchmark_value: int = Field(default_factory=lambda: int(Environment().gas_limit)) code_generator: BenchmarkCodeGenerator | None = None supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [ BlockchainFixture, BlockchainEngineFixture, BlockchainEngineXFixture, ] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( TransactionPost, "benchmark_test", "An execute test derived from a benchmark test", ), ] supported_markers: ClassVar[Dict[str, str]] = { "blockchain_test_engine_only": "Only generate a blockchain test engine fixture", "blockchain_test_only": "Only generate a blockchain test fixture", } def model_post_init(self, __context: Any, /) -> None: """ Model post-init to assert that the custom pre-allocation was provided and the default was not used. """ super().model_post_init(__context) assert "pre" in self.model_fields_set, "pre allocation was not provided" @classmethod def pytest_parameter_name(cls) -> str: """ Return the parameter name used in pytest to select this spec type. """ return "benchmark_test" @classmethod def discard_fixture_format_by_marks( cls, fixture_format: FixtureFormat, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard a fixture format from filling if the appropriate marker is used. """ del fork if "blockchain_test_only" in [m.name for m in markers]: return fixture_format != BlockchainFixture if "blockchain_test_engine_only" in [m.name for m in markers]: return fixture_format != BlockchainEngineFixture return False def get_genesis_environment(self, fork: Fork) -> Environment: """Get the genesis environment for this benchmark test.""" del fork return self.env def split_transaction(self, tx: Transaction, gas_limit_cap: int | None) -> List[Transaction]: """ Split a transaction that exceeds the gas limit cap into multiple transactions. """ if gas_limit_cap is None: tx.gas_limit = HexNumber(self.gas_benchmark_value) return [tx] if gas_limit_cap >= self.gas_benchmark_value: tx.gas_limit = HexNumber(self.gas_benchmark_value) return [tx] num_splits = math.ceil(self.gas_benchmark_value / gas_limit_cap) remaining_gas = self.gas_benchmark_value split_transactions = [] for i in range(num_splits): split_tx = tx.model_copy() split_tx.gas_limit = HexNumber(remaining_gas if i == num_splits - 1 else gas_limit_cap) remaining_gas -= gas_limit_cap split_tx.nonce = HexNumber(tx.nonce + i) split_transactions.append(split_tx) return split_transactions def generate_blocks_from_code_generator(self, fork: Fork) -> List[Block]: """Generate blocks using the code generator.""" if self.code_generator is None: raise Exception("Code generator is not set") self.code_generator.deploy_contracts(pre=self.pre, fork=fork) gas_limit = fork.transaction_gas_limit_cap() or self.gas_benchmark_value benchmark_tx = self.code_generator.generate_transaction( pre=self.pre, gas_benchmark_value=gas_limit ) execution_txs = self.split_transaction(benchmark_tx, gas_limit) execution_block = Block(txs=execution_txs) return [execution_block] def generate_blockchain_test(self, fork: Fork) -> BlockchainTest: """Create a BlockchainTest from this BenchmarkTest.""" set_props = [ name for name, val in [ ("code_generator", self.code_generator), ("blocks", self.blocks), ("tx", self.tx), ] if val is not None ] if len(set_props) != 1: raise ValueError( f"Exactly one must be set, but got {len(set_props)}: {', '.join(set_props)}" ) blocks: List[Block] = self.setup_blocks if self.code_generator is not None: generated_blocks = self.generate_blocks_from_code_generator(fork) blocks += generated_blocks elif self.blocks is not None: blocks += self.blocks elif self.tx is not None: gas_limit = fork.transaction_gas_limit_cap() or self.gas_benchmark_value transactions = self.split_transaction(self.tx, gas_limit) blocks.append(Block(txs=transactions)) else: raise ValueError( "Cannot create BlockchainTest without a code generator, transactions, or blocks" ) return BlockchainTest.from_test( base_test=self, genesis_environment=self.env, pre=self.pre, post=self.post, blocks=blocks, ) def generate( self, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, ) -> BaseFixture: """Generate the blockchain test fixture.""" self.check_exception_test(exception=self.tx.error is not None if self.tx else False) if fixture_format in BlockchainTest.supported_fixture_formats: return self.generate_blockchain_test(fork=fork).generate( t8n=t8n, fork=fork, fixture_format=fixture_format ) else: raise Exception(f"Unsupported fixture format: {fixture_format}") def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Execute the benchmark test by sending it to the live network.""" del fork if execute_format == TransactionPost: return TransactionPost( blocks=[[self.tx]], post=self.post, ) raise Exception(f"Unsupported execute format: {execute_format}") BenchmarkTestSpec = Callable[[str], Generator[BenchmarkTest, None, None]] BenchmarkTestFiller = Type[BenchmarkTest] ================================================ FILE: src/ethereum_test_specs/blobs.py ================================================ """Test specification for blob tests.""" from typing import Callable, ClassVar, Generator, List, Sequence, Type from ethereum_clis import TransitionTool from ethereum_test_base_types import Alloc from ethereum_test_base_types.base_types import Hash from ethereum_test_execution import BaseExecute, BlobTransaction from ethereum_test_fixtures import ( BaseFixture, FixtureFormat, ) from ethereum_test_forks import Fork from ethereum_test_types import NetworkWrappedTransaction, Transaction from .base import BaseTest, ExecuteFormat, LabeledExecuteFormat class BlobsTest(BaseTest): """Test specification for blob tests.""" pre: Alloc txs: List[NetworkWrappedTransaction | Transaction] nonexisting_blob_hashes: List[Hash] | None = None supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( BlobTransaction, "blob_transaction_test", "A test that executes a blob transaction", ), ] def generate( self, *, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, ) -> BaseFixture: """Generate the list of test fixtures.""" del t8n, fork raise Exception(f"Unknown fixture format: {fixture_format}") def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Generate the list of test fixtures.""" del fork if execute_format == BlobTransaction: return BlobTransaction( txs=self.txs, nonexisting_blob_hashes=self.nonexisting_blob_hashes ) raise Exception(f"Unsupported execute format: {execute_format}") BlobsTestSpec = Callable[[str], Generator[BlobsTest, None, None]] BlobsTestFiller = Type[BlobsTest] ================================================ FILE: src/ethereum_test_specs/blockchain.py ================================================ """Ethereum blockchain test spec definition and filler.""" from pprint import pprint from typing import Any, Callable, ClassVar, Dict, Generator, List, Sequence, Tuple, Type import pytest from pydantic import ConfigDict, Field, field_validator, model_serializer from ethereum_clis import BlockExceptionWithMessage, Result, TransitionTool from ethereum_test_base_types import ( Address, Bloom, Bytes, CamelModel, Hash, HeaderNonce, HexNumber, Number, ) from ethereum_test_exceptions import ( BlockException, EngineAPIError, ExceptionWithMessage, TransactionException, UndefinedException, ) from ethereum_test_execution import ( BaseExecute, ExecuteFormat, LabeledExecuteFormat, TransactionPost, ) from ethereum_test_fixtures import ( BaseFixture, BlockchainEngineFixture, BlockchainEngineSyncFixture, BlockchainEngineXFixture, BlockchainFixture, FixtureFormat, LabeledFixtureFormat, ) from ethereum_test_fixtures.blockchain import ( FixtureBlock, FixtureBlockBase, FixtureConfig, FixtureEngineNewPayload, FixtureHeader, FixtureTransaction, FixtureWithdrawal, InvalidFixtureBlock, ) from ethereum_test_fixtures.common import FixtureBlobSchedule from ethereum_test_forks import Fork from ethereum_test_types import Alloc, Environment, Removable, Requests, Transaction, Withdrawal from ethereum_test_types.block_access_list import BlockAccessList, BlockAccessListExpectation from .base import BaseTest, OpMode, verify_result from .debugging import print_traces from .helpers import verify_block, verify_transactions def environment_from_parent_header(parent: "FixtureHeader") -> "Environment": """Instantiate new environment with the provided header as parent.""" return Environment( parent_difficulty=parent.difficulty, parent_timestamp=parent.timestamp, parent_base_fee_per_gas=parent.base_fee_per_gas, parent_blob_gas_used=parent.blob_gas_used, parent_excess_blob_gas=parent.excess_blob_gas, parent_gas_used=parent.gas_used, parent_gas_limit=parent.gas_limit, parent_ommers_hash=parent.ommers_hash, block_hashes={parent.number: parent.block_hash}, ) def apply_new_parent(env: Environment, new_parent: FixtureHeader) -> "Environment": """Apply header as parent to a copy of this environment.""" updated: Dict[str, Any] = {} updated["parent_difficulty"] = new_parent.difficulty updated["parent_timestamp"] = new_parent.timestamp updated["parent_base_fee_per_gas"] = new_parent.base_fee_per_gas updated["parent_blob_gas_used"] = new_parent.blob_gas_used updated["parent_excess_blob_gas"] = new_parent.excess_blob_gas updated["parent_gas_used"] = new_parent.gas_used updated["parent_gas_limit"] = new_parent.gas_limit updated["parent_ommers_hash"] = new_parent.ommers_hash block_hashes = env.block_hashes.copy() block_hashes[new_parent.number] = new_parent.block_hash updated["block_hashes"] = block_hashes return env.copy(**updated) def count_blobs(txs: List[Transaction]) -> int: """Return number of blobs in a list of transactions.""" return sum( [len(tx.blob_versioned_hashes) for tx in txs if tx.blob_versioned_hashes is not None] ) class Header(CamelModel): """Header type used to describe block header properties in test specs.""" parent_hash: Hash | None = None ommers_hash: Hash | None = None fee_recipient: Address | None = None state_root: Hash | None = None transactions_trie: Hash | None = None receipts_root: Hash | None = None logs_bloom: Bloom | None = None difficulty: HexNumber | None = None number: HexNumber | None = None gas_limit: HexNumber | None = None gas_used: HexNumber | None = None timestamp: HexNumber | None = None extra_data: Bytes | None = None prev_randao: Hash | None = None nonce: HeaderNonce | None = None base_fee_per_gas: Removable | HexNumber | None = None withdrawals_root: Removable | Hash | None = None blob_gas_used: Removable | HexNumber | None = None excess_blob_gas: Removable | HexNumber | None = None parent_beacon_block_root: Removable | Hash | None = None requests_hash: Removable | Hash | None = None bal_hash: Removable | Hash | None = None REMOVE_FIELD: ClassVar[Removable] = Removable() """ Sentinel object used to specify that a header field should be removed. """ EMPTY_FIELD: ClassVar[Removable] = Removable() """ Sentinel object used to specify that a header field must be empty during verification. This can be used in a test to explicitly skip a field in a block's RLP encoding. included in the (json) output when the model is serialized. For example: ``` header_modifier = Header( excess_blob_gas=Header.REMOVE_FIELD, ) block = Block( timestamp=TIMESTAMP, rlp_modifier=header_modifier, exception=BlockException.INCORRECT_BLOCK_FORMAT, engine_api_error_code=EngineAPIError.InvalidParams, ) ``` """ model_config = ConfigDict(arbitrary_types_allowed=True) @model_serializer(mode="wrap", when_used="json") def _serialize_model(self, serializer: Any, info: Any) -> Dict[str, Any]: """Exclude Removable fields from serialization.""" del info data = serializer(self) return {k: v for k, v in data.items() if not isinstance(v, Removable)} @field_validator("withdrawals_root", mode="before") @classmethod def validate_withdrawals_root(cls, value: Any) -> Any: """Convert a list of withdrawals into the withdrawals root hash.""" if isinstance(value, list): return Withdrawal.list_root(value) return value def apply(self, target: FixtureHeader) -> FixtureHeader: """ Produce a fixture header copy with the set values from the modifier. """ return target.copy( **{ k: (v if v is not Header.REMOVE_FIELD else None) for k, v in self.model_dump(exclude_none=True).items() } ) def verify(self, target: FixtureHeader) -> None: """Verify that the header fields from self are as expected.""" for field_name in self.__class__.model_fields: baseline_value = getattr(self, field_name) if baseline_value is not None: assert baseline_value is not Header.REMOVE_FIELD, "invalid header" value = getattr(target, field_name) if baseline_value is Header.EMPTY_FIELD: assert value is None, ( f"invalid header field {field_name}, got {value}, want None" ) continue assert value == baseline_value, ( f"invalid header field ({field_name}) value, " + f"got {value}, want {baseline_value}" ) BLOCK_EXCEPTION_TYPE = ( List[TransactionException | BlockException] | TransactionException | BlockException | None ) class Block(Header): """Block type used to describe block properties in test specs.""" header_verify: Header | None = None # If set, the block header will be verified against the specified values. rlp_modifier: Header | None = None """ An RLP modifying header which values would be used to override the ones returned by the `ethereum_clis.TransitionTool`. """ expected_block_access_list: BlockAccessListExpectation | None = None """ If set, the block access list will be verified and potentially corrupted for invalid tests. """ exception: BLOCK_EXCEPTION_TYPE = None # If set, the block is expected to be rejected by the client. skip_exception_verification: bool = False """ Skip verifying that the exception is returned by the transition tool. This could be because the exception is inserted in the block after the transition tool evaluates it. """ engine_api_error_code: EngineAPIError | None = None """ If set, the block is expected to produce an error response from the Engine API. """ txs: List[Transaction] = Field(default_factory=list) """List of transactions included in the block.""" ommers: List[Header] | None = None """List of ommer headers included in the block.""" withdrawals: List[Withdrawal] | None = None """List of withdrawals to perform for this block.""" requests: List[Bytes] | None = None """Custom list of requests to embed in this block.""" expected_post_state: Alloc | None = None """Post state for verification after block execution in BlockchainTest""" block_access_list: Bytes | None = Field(None) """EIP-7928: Block-level access lists (serialized).""" def set_environment(self, env: Environment) -> Environment: """ Create copy of the environment with the characteristics of this specific block. """ new_env_values: Dict[str, Any] = {} """ Values that need to be set in the environment and are `None` for this block need to be set to their defaults. """ new_env_values["difficulty"] = self.difficulty new_env_values["prev_randao"] = self.prev_randao new_env_values["fee_recipient"] = ( self.fee_recipient if self.fee_recipient is not None else Environment().fee_recipient ) new_env_values["gas_limit"] = ( self.gas_limit or env.parent_gas_limit or Environment().gas_limit ) if not isinstance(self.base_fee_per_gas, Removable): new_env_values["base_fee_per_gas"] = self.base_fee_per_gas new_env_values["withdrawals"] = self.withdrawals if not isinstance(self.excess_blob_gas, Removable): new_env_values["excess_blob_gas"] = self.excess_blob_gas if not isinstance(self.blob_gas_used, Removable): new_env_values["blob_gas_used"] = self.blob_gas_used if not isinstance(self.parent_beacon_block_root, Removable): new_env_values["parent_beacon_block_root"] = self.parent_beacon_block_root if not isinstance(self.requests_hash, Removable) and self.block_access_list is not None: new_env_values["bal_hash"] = self.block_access_list.keccak256() new_env_values["block_access_list"] = self.block_access_list if ( not isinstance(self.block_access_list, Removable) and self.block_access_list is not None ): new_env_values["block_access_list"] = self.block_access_list """ These values are required, but they depend on the previous environment, so they can be calculated here. """ if self.number is not None: new_env_values["number"] = self.number else: # calculate the next block number for the environment if len(env.block_hashes) == 0: new_env_values["number"] = 0 else: new_env_values["number"] = max([Number(n) for n in env.block_hashes.keys()]) + 1 if self.timestamp is not None: new_env_values["timestamp"] = self.timestamp else: assert env.parent_timestamp is not None new_env_values["timestamp"] = int(Number(env.parent_timestamp) + 12) return env.copy(**new_env_values) class BuiltBlock(CamelModel): """Model that contains all properties to build a full block or payload.""" header: FixtureHeader env: Environment alloc: Alloc txs: List[Transaction] ommers: List[FixtureHeader] withdrawals: List[Withdrawal] | None requests: List[Bytes] | None result: Result expected_exception: BLOCK_EXCEPTION_TYPE = None engine_api_error_code: EngineAPIError | None = None fork: Fork block_access_list: BlockAccessList | None def get_fixture_block(self) -> FixtureBlock | InvalidFixtureBlock: """Get a FixtureBlockBase from the built block.""" fixture_block = FixtureBlockBase( header=self.header, txs=[FixtureTransaction.from_transaction(tx) for tx in self.txs], withdrawals=( [FixtureWithdrawal.from_withdrawal(w) for w in self.withdrawals] if self.withdrawals is not None else None ), block_access_list=self.block_access_list if self.block_access_list else None, fork=self.fork, ).with_rlp(txs=self.txs) if self.expected_exception is not None: return InvalidFixtureBlock( rlp=fixture_block.rlp, expect_exception=self.expected_exception, rlp_decoded=( None if BlockException.RLP_STRUCTURES_ENCODING in self.expected_exception else fixture_block.without_rlp() ), ) return fixture_block def get_block_rlp(self) -> Bytes: """Get the RLP of the block.""" return self.get_fixture_block().rlp def get_fixture_engine_new_payload(self) -> FixtureEngineNewPayload: """Get a FixtureEngineNewPayload from the built block.""" return FixtureEngineNewPayload.from_fixture_header( fork=self.fork, header=self.header, transactions=self.txs, withdrawals=self.withdrawals, requests=self.requests, block_access_list=self.block_access_list.rlp if self.block_access_list else None, validation_error=self.expected_exception, error_code=self.engine_api_error_code, ) def verify_transactions(self, transition_tool_exceptions_reliable: bool) -> List[int]: """Verify the transactions.""" return verify_transactions( txs=self.txs, result=self.result, transition_tool_exceptions_reliable=transition_tool_exceptions_reliable, ) def verify_block_exception(self, transition_tool_exceptions_reliable: bool) -> None: """Verify the block exception.""" got_exception: ExceptionWithMessage | UndefinedException | None = ( self.result.block_exception ) # Verify exceptions that are not caught by the transition tool. fork_block_rlp_size_limit = self.fork.block_rlp_size_limit( block_number=self.env.number, timestamp=self.env.timestamp, ) if fork_block_rlp_size_limit is not None: rlp_size = len(self.get_block_rlp()) if rlp_size > fork_block_rlp_size_limit: got_exception = BlockExceptionWithMessage( exceptions=[BlockException.RLP_BLOCK_LIMIT_EXCEEDED], message=f"Block RLP size limit exceeded: {rlp_size} > " f"{fork_block_rlp_size_limit}", ) verify_block( block_number=self.env.number, want_exception=self.expected_exception, got_exception=got_exception, transition_tool_exceptions_reliable=transition_tool_exceptions_reliable, ) GENESIS_ENVIRONMENT_DEFAULTS: Dict[str, Any] = { "fee_recipient": 0, "number": 0, "timestamp": 0, "extra_data": b"\x00", "prev_randao": 0, } """ Default values for the genesis environment that are used to create all genesis headers. """ class BlockchainTest(BaseTest): """Filler type that tests multiple blocks (valid or invalid) in a chain.""" pre: Alloc post: Alloc blocks: List[Block] genesis_environment: Environment = Field(default_factory=Environment) chain_id: int = 1 exclude_full_post_state_in_output: bool = False """ Exclude the post state from the fixture output. In this case, the state verification is only performed based on the state root. """ supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [ BlockchainFixture, BlockchainEngineFixture, BlockchainEngineXFixture, BlockchainEngineSyncFixture, ] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( TransactionPost, "blockchain_test", "An execute test derived from a blockchain test", ), ] supported_markers: ClassVar[Dict[str, str]] = { "blockchain_test_engine_only": "Only generate a blockchain test engine fixture", "blockchain_test_only": "Only generate a blockchain test fixture", } @classmethod def discard_fixture_format_by_marks( cls, fixture_format: FixtureFormat, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard a fixture format from filling if the appropriate marker is used. """ del fork marker_names = [m.name for m in markers] if fixture_format != BlockchainFixture and "blockchain_test_only" in marker_names: return True if ( fixture_format not in [BlockchainEngineFixture, BlockchainEngineXFixture] and "blockchain_test_engine_only" in marker_names ): return True return False def get_genesis_environment(self, fork: Fork) -> Environment: """Get the genesis environment for pre-allocation groups.""" modified_values = self.genesis_environment.set_fork_requirements(fork).model_dump( exclude_unset=True ) return Environment(**(GENESIS_ENVIRONMENT_DEFAULTS | modified_values)) def make_genesis( self, *, fork: Fork, apply_pre_allocation_blockchain: bool ) -> Tuple[Alloc, FixtureBlock]: """Create a genesis block from the blockchain test definition.""" env = self.get_genesis_environment(fork) assert env.withdrawals is None or len(env.withdrawals) == 0, ( "withdrawals must be empty at genesis" ) assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(0), ( "parent_beacon_block_root must be empty at genesis" ) pre_alloc = self.pre if apply_pre_allocation_blockchain: pre_alloc = Alloc.merge( Alloc.model_validate(fork.pre_allocation_blockchain()), pre_alloc, ) if empty_accounts := pre_alloc.empty_accounts(): raise Exception(f"Empty accounts in pre state: {empty_accounts}") state_root = pre_alloc.state_root() genesis = FixtureHeader.genesis(fork, env, state_root) return ( pre_alloc, FixtureBlockBase( header=genesis, withdrawals=None if env.withdrawals is None else [], ).with_rlp(txs=[]), ) def generate_block_data( self, t8n: TransitionTool, fork: Fork, block: Block, previous_env: Environment, previous_alloc: Alloc, last_block: bool, ) -> BuiltBlock: """ Generate common block data for both make_fixture and make_hive_fixture. """ env = block.set_environment(previous_env) env = env.set_fork_requirements(fork) txs = [tx.with_signature_and_sender() for tx in block.txs] if failing_tx_count := len([tx for tx in txs if tx.error]) > 0: if failing_tx_count > 1: raise Exception( "test correctness: only one transaction can produce an exception in a block" ) if not txs[-1].error: raise Exception( "test correctness: the transaction that produces an exception " + "must be the last transaction in the block" ) transition_tool_output = t8n.evaluate( transition_tool_data=TransitionTool.TransitionToolData( alloc=previous_alloc, txs=txs, env=env, fork=fork, chain_id=self.chain_id, reward=fork.get_reward(block_number=env.number, timestamp=env.timestamp), blob_schedule=fork.blob_schedule(), ), debug_output_path=self.get_next_transition_tool_output_path(), slow_request=self.is_tx_gas_heavy_test(), ) if transition_tool_output.result.opcode_count is not None: if self._opcode_count is None: self._opcode_count = transition_tool_output.result.opcode_count else: self._opcode_count += transition_tool_output.result.opcode_count # One special case of the invalid transactions is the blob gas used, # since this value is not included in the transition tool result, but # it is included in the block header, and some clients check it before # executing the block by simply counting the type-3 txs, we need to set # the correct value by default. blob_gas_used: int | None = None if ( blob_gas_per_blob := fork.blob_gas_per_blob( block_number=env.number, timestamp=env.timestamp ) ) > 0: blob_gas_used = blob_gas_per_blob * count_blobs(txs) header = FixtureHeader( **( transition_tool_output.result.model_dump( exclude_none=True, exclude={"blob_gas_used", "transactions_trie"} ) | env.model_dump(exclude_none=True, exclude={"blob_gas_used"}) ), blob_gas_used=blob_gas_used, transactions_trie=Transaction.list_root(txs), extra_data=block.extra_data if block.extra_data is not None else b"", fork=fork, ) if block.header_verify is not None: # Verify the header after transition tool processing. try: block.header_verify.verify(header) except Exception as e: raise Exception(f"Verification of block {int(env.number)} failed") from e if last_block and self._operation_mode == OpMode.BENCHMARKING: expected_benchmark_gas_used = self.expected_benchmark_gas_used assert expected_benchmark_gas_used is not None, ( "expected_benchmark_gas_used is not set" ) gas_used = int(transition_tool_output.result.gas_used) if not self.skip_gas_used_validation: assert gas_used == expected_benchmark_gas_used, ( f"gas_used ({gas_used}) does not match expected_benchmark_gas_used " f"({expected_benchmark_gas_used})" f", difference: {gas_used - expected_benchmark_gas_used}" ) requests_list: List[Bytes] | None = None if fork.header_requests_required(block_number=header.number, timestamp=header.timestamp): assert transition_tool_output.result.requests is not None, ( "Requests are required for this block" ) requests = Requests(requests_lists=list(transition_tool_output.result.requests)) if Hash(requests) != header.requests_hash: raise Exception( "Requests root in header does not match the requests root in the transition " "tool output: " f"{header.requests_hash} != {Hash(requests)}" ) requests_list = requests.requests_list if block.requests is not None: header.requests_hash = Hash(Requests(requests_lists=list(block.requests))) requests_list = block.requests if fork.header_bal_hash_required(block_number=header.number, timestamp=header.timestamp): assert transition_tool_output.result.block_access_list is not None, ( "Block access list is required for this block but was not provided " "by the transition tool" ) rlp = transition_tool_output.result.block_access_list.rlp computed_bal_hash = Hash(rlp.keccak256()) assert computed_bal_hash == header.block_access_list_hash, ( "Block access list hash in header does not match the " f"computed hash from BAL: {header.block_access_list_hash} " f"!= {computed_bal_hash}" ) if block.rlp_modifier is not None: # Modify any parameter specified in the `rlp_modifier` after # transition tool processing. header = block.rlp_modifier.apply(header) header.fork = fork # Deleted during `apply` because `exclude=True` # Process block access list - apply transformer if present for invalid # tests t8n_bal = transition_tool_output.result.block_access_list bal = t8n_bal if block.expected_block_access_list is not None and t8n_bal is not None: block.expected_block_access_list.verify_against(t8n_bal) bal = block.expected_block_access_list.modify_if_invalid_test(t8n_bal) if bal != t8n_bal: # If the BAL was modified, update the header hash header.block_access_list_hash = Hash(bal.rlp.keccak256()) built_block = BuiltBlock( header=header, alloc=transition_tool_output.alloc, env=env, txs=txs, ommers=[], withdrawals=env.withdrawals, requests=requests_list, result=transition_tool_output.result, expected_exception=block.exception, engine_api_error_code=block.engine_api_error_code, fork=fork, block_access_list=bal, ) try: rejected_txs = built_block.verify_transactions( transition_tool_exceptions_reliable=t8n.exception_mapper.reliable, ) if ( not rejected_txs and block.rlp_modifier is None and block.requests is None and not block.skip_exception_verification and not ( block.expected_block_access_list is not None and block.expected_block_access_list._modifier is not None ) ): # Only verify block level exception if: - No transaction # exception was raised, because these are not reported as block # exceptions. - No RLP modifier was specified, because the # modifier is what normally produces the block exception. - No # requests were specified, because modified requests are also # what normally produces the block exception. - No BAL modifier # was specified, because modified BAL also produces block # exceptions. built_block.verify_block_exception( transition_tool_exceptions_reliable=t8n.exception_mapper.reliable, ) verify_result(transition_tool_output.result, env) except Exception as e: print_traces(t8n.get_traces()) pprint(transition_tool_output.result) pprint(previous_alloc) pprint(transition_tool_output.alloc) raise e if len(rejected_txs) > 0 and block.exception is None: print_traces(t8n.get_traces()) raise Exception( "one or more transactions in `BlockchainTest` are " + "intrinsically invalid, but the block was not expected " + "to be invalid. Please verify whether the transaction " + "was indeed expected to fail and add the proper " + "`block.exception`" ) return built_block def verify_post_state( self, t8n: TransitionTool, t8n_state: Alloc, expected_state: Alloc | None = None ) -> None: """Verify post alloc after all block/s or payload/s are generated.""" try: if expected_state: expected_state.verify_post_alloc(t8n_state) else: self.post.verify_post_alloc(t8n_state) except Exception as e: print_traces(t8n.get_traces()) raise e def make_fixture( self, t8n: TransitionTool, fork: Fork, ) -> BlockchainFixture: """Create a fixture from the blockchain test definition.""" fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = [] pre, genesis = self.make_genesis(fork=fork, apply_pre_allocation_blockchain=True) alloc = pre env = environment_from_parent_header(genesis.header) head = genesis.header.block_hash invalid_blocks = 0 for i, block in enumerate(self.blocks): # This is the most common case, the RLP needs to be constructed # based on the transactions to be included in the block. # Set the environment according to the block to execute. built_block = self.generate_block_data( t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, last_block=i == len(self.blocks) - 1, ) fixture_blocks.append(built_block.get_fixture_block()) # BAL verification already done in to_fixture_bal() if # expected_block_access_list set if block.exception is None: # Update env, alloc and last block hash for the next block. alloc = built_block.alloc env = apply_new_parent(built_block.env, built_block.header) head = built_block.header.block_hash else: invalid_blocks += 1 if block.expected_post_state: self.verify_post_state( t8n, t8n_state=alloc, expected_state=block.expected_post_state ) self.check_exception_test(exception=invalid_blocks > 0) self.verify_post_state(t8n, t8n_state=alloc) info = {} if self._opcode_count is not None: info["opcode_count"] = self._opcode_count.model_dump() return BlockchainFixture( fork=fork, genesis=genesis.header, genesis_rlp=genesis.rlp, blocks=fixture_blocks, last_block_hash=head, pre=pre, post_state=alloc if not self.exclude_full_post_state_in_output else None, post_state_hash=alloc.state_root() if self.exclude_full_post_state_in_output else None, config=FixtureConfig( fork=fork, blob_schedule=FixtureBlobSchedule.from_blob_schedule(fork.blob_schedule()), chain_id=self.chain_id, ), info=info, ) def make_hive_fixture( self, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat = BlockchainEngineFixture, ) -> BlockchainEngineFixture | BlockchainEngineXFixture | BlockchainEngineSyncFixture: """Create a hive fixture from the blocktest definition.""" fixture_payloads: List[FixtureEngineNewPayload] = [] pre, genesis = self.make_genesis( fork=fork, apply_pre_allocation_blockchain=fixture_format != BlockchainEngineXFixture, ) alloc = pre env = environment_from_parent_header(genesis.header) head_hash = genesis.header.block_hash invalid_blocks = 0 for i, block in enumerate(self.blocks): built_block = self.generate_block_data( t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, last_block=i == len(self.blocks) - 1, ) fixture_payloads.append(built_block.get_fixture_engine_new_payload()) if block.exception is None: alloc = built_block.alloc env = apply_new_parent(built_block.env, built_block.header) head_hash = built_block.header.block_hash else: invalid_blocks += 1 if block.expected_post_state: self.verify_post_state( t8n, t8n_state=alloc, expected_state=block.expected_post_state ) self.check_exception_test(exception=invalid_blocks > 0) fcu_version = fork.engine_forkchoice_updated_version( block_number=built_block.header.number, timestamp=built_block.header.timestamp ) assert fcu_version is not None, ( "A hive fixture was requested but no forkchoice update is defined." " The framework should never try to execute this test case." ) self.verify_post_state(t8n, t8n_state=alloc) # Create base fixture data, common to all fixture formats info = {} if self._opcode_count is not None: info["opcode_count"] = self._opcode_count.model_dump() fixture_data = { "fork": fork, "genesis": genesis.header, "payloads": fixture_payloads, "last_block_hash": head_hash, "post_state_hash": alloc.state_root() if self.exclude_full_post_state_in_output else None, "config": FixtureConfig( fork=fork, chain_id=self.chain_id, blob_schedule=FixtureBlobSchedule.from_blob_schedule(fork.blob_schedule()), ), "info": info, } # Add format-specific fields if fixture_format == BlockchainEngineXFixture: # For Engine X format, exclude pre (will be provided via shared # state) and prepare for state diff optimization fixture_data.update( { "post_state": alloc if not self.exclude_full_post_state_in_output else None, "pre_hash": "", # Will be set by BaseTestWrapper } ) return BlockchainEngineXFixture(**fixture_data) elif fixture_format == BlockchainEngineSyncFixture: # Sync fixture format assert genesis.header.block_hash != head_hash, ( "Invalid payload tests negative test via sync is not supported yet." ) # Most clients require the header to start the sync process, so we # create an empty block on top of the last block of the test to # send it as new payload and trigger the sync process. sync_built_block = self.generate_block_data( t8n=t8n, fork=fork, block=Block(), previous_env=env, previous_alloc=alloc, last_block=False, ) fixture_data.update( { "sync_payload": sync_built_block.get_fixture_engine_new_payload(), "pre": pre, "post_state": alloc if not self.exclude_full_post_state_in_output else None, } ) return BlockchainEngineSyncFixture(**fixture_data) else: # Standard engine fixture fixture_data.update( { "pre": pre, "post_state": alloc if not self.exclude_full_post_state_in_output else None, } ) return BlockchainEngineFixture(**fixture_data) def generate( self, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, ) -> BaseFixture: """Generate the BlockchainTest fixture.""" t8n.reset_traces() if fixture_format in [ BlockchainEngineFixture, BlockchainEngineXFixture, BlockchainEngineSyncFixture, ]: return self.make_hive_fixture(t8n, fork, fixture_format) elif fixture_format == BlockchainFixture: return self.make_fixture(t8n, fork) raise Exception(f"Unknown fixture format: {fixture_format}") def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Generate the list of test fixtures.""" del fork if execute_format == TransactionPost: blocks: List[List[Transaction]] = [] for block in self.blocks: blocks += [block.txs] # Pass gas validation params for benchmark tests # If not benchmark mode, skip gas used validation if self._operation_mode != OpMode.BENCHMARKING: self.skip_gas_used_validation = True return TransactionPost( blocks=blocks, post=self.post, expected_benchmark_gas_used=self.expected_benchmark_gas_used, skip_gas_used_validation=self.skip_gas_used_validation, ) raise Exception(f"Unsupported execute format: {execute_format}") BlockchainTestSpec = Callable[[str], Generator[BlockchainTest, None, None]] BlockchainTestFiller = Type[BlockchainTest] ================================================ FILE: src/ethereum_test_specs/debugging.py ================================================ """Test spec debugging tools.""" from typing import List from ethereum_clis import Traces def print_traces(traces: List[Traces] | None) -> None: """Print the traces from the transition tool for debugging.""" if traces is None: print("Traces not collected. Use `--traces` to see detailed execution information.") return print("Printing traces for debugging purposes:") for block_number, block in enumerate(traces): print(f"Block {block_number}:") block.print() ================================================ FILE: src/ethereum_test_specs/eof.py ================================================ """Ethereum EOF test spec definition and filler.""" import subprocess import warnings from pathlib import Path from shutil import which from subprocess import CompletedProcess from typing import ( Annotated, Any, Callable, ClassVar, Dict, Generator, List, Optional, Sequence, Type, ) import pytest from pydantic import Field, TypeAdapter from ethereum_clis import EvmoneExceptionMapper, TransitionTool from ethereum_test_base_types import Account, Bytes, HexNumber from ethereum_test_exceptions import ( EOFException, ExceptionMapperValidator, ExceptionWithMessage, UndefinedException, ) from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList, to_pipe_str from ethereum_test_execution import ( BaseExecute, ExecuteFormat, LabeledExecuteFormat, TransactionPost, ) from ethereum_test_fixtures import ( BaseFixture, EOFFixture, FixtureFormat, LabeledFixtureFormat, ) from ethereum_test_fixtures.eof import Result, Vector from ethereum_test_forks import Fork from ethereum_test_types import EOA, Alloc, Environment, Transaction from ethereum_test_types.eof.v1 import Container, ContainerKind, Section, SectionKind from ethereum_test_types.helpers import compute_eofcreate_address from ethereum_test_vm import Opcodes as Op from .base import BaseTest from .state import StateTest existing_tests: Dict[Bytes, str] = {} class EOFBaseExceptionError(Exception): """Base exception class for exceptions raised when verifying EOF code.""" def __init__(self, message: str) -> None: """Initialize the exception with the message.""" super().__init__(message) @staticmethod def format_code(code: Bytes, max_length: int = 60) -> str: """ Avoid printing long bytecode strings in the terminal upon test failure. """ if len(code) > max_length: half_length = max_length // 2 - 5 # Floor; adjust for ellipsis return f"{code[:half_length].hex()}...{code[-half_length:].hex()}" return code.hex() class UnexpectedEOFExceptionError(EOFBaseExceptionError): """ Exception used when valid EOF code unexpectedly raises an exception in eofparse. """ def __init__(self, *, code: Bytes, got: str): """Initialize the exception with the code and the exception message.""" message = ( "Expected EOF code to be valid, but an exception occurred:\n" f" Code: {self.format_code(code)}\n" f"Expected: No Exception\n" f" Got: {got}" ) super().__init__(message) class ExpectedEOFExceptionError(EOFBaseExceptionError): """ Exception used when EOF code is expected to raise an exception, but eofparse did not raise an exception. """ def __init__(self, *, code: Bytes, expected: str): """ Initialize the exception with the code and the expected exception message. """ message = ( "Expected EOF code to be invalid, but no exception was raised:\n" f" Code: {self.format_code(code)}\n" f"Expected: {expected}\n" f" Got: No Exception" ) super().__init__(message) class EOFExceptionMismatchError(EOFBaseExceptionError): """ Exception used when the actual EOF exception differs from the expected one. """ def __init__(self, code: Bytes, expected: str, got: str): """ Initialize the exception with the code, the expected/actual exception message. """ message = ( "EOF code raised a different exception than expected:\n" f" Code: {self.format_code(code)}\n" f"Expected: {expected}\n" f" Got: {got}" ) super().__init__(message) class EOFExceptionWithMessage(ExceptionWithMessage[EOFException]): """Exception returned from the eof validator with a message.""" pass eof_exception_type_adapter: TypeAdapter[EOFExceptionWithMessage | UndefinedException] = ( TypeAdapter(Annotated[EOFExceptionWithMessage | UndefinedException, ExceptionMapperValidator]) ) class EOFParse: """evmone-eofparse binary.""" binary: Path def __new__(cls) -> "EOFParse": """Make EOF binary a singleton.""" if not hasattr(cls, "instance"): cls.instance = super(EOFParse, cls).__new__(cls) return cls.instance def __init__( self, binary: Optional[Path | str] = None, ): """Initialize the EOF binary.""" if binary is None: which_path = which("evmone-eofparse") if which_path is not None: binary = Path(which_path) if binary is None or not Path(binary).exists(): raise FileNotFoundError( "`evmone-eofparse` binary executable not found/not executable." ) self.binary = Path(binary) def run(self, *args: str, input_value: str | None = None) -> CompletedProcess: """Run evmone with the given arguments.""" result = subprocess.run( [self.binary, *args], capture_output=True, text=True, input=input_value, ) if result.returncode not in [0, 1]: raise Exception( f"`{self.binary.name}` call failed with return code {result.returncode}." ) return result class EOFTest(BaseTest): """ Filler type that generates a test for EOF container validation. A state test is also automatically generated where the container is wrapped in a contract-creating transaction to test deployment/validation on the instantiated blockchain. """ container: Container """ EOF container that will be tested for validity. The only supported type at the moment is `ethereum_test_types.eof.v1.Container`. If an invalid container needs to be tested, and it cannot be generated using the Container class features, the `raw_bytes` field can be used to provide the raw container bytes. """ expect_exception: EOFExceptionInstanceOrList | None = None """ Expected exception that the container should raise when parsed by an EOF parser. Can be a single exception or a list of exceptions that the container is expected to raise, in which case the test will pass if any of the exceptions are raised. The list of supported exceptions can be found in the `ethereum_test_exceptions.EOFException` class. """ container_kind: ContainerKind = ContainerKind.RUNTIME """ Container kind type that the container should be treated as. The container kind can be one of the following: - `ContainerKind.INITCODE`: The container is an initcode container. - `ContainerKind.RUNTIME`: The container is a runtime container. The default value is `ContainerKind.RUNTIME`. """ deployed_container: Container | None = None """ To be used when the container is an initcode container and the expected deployed container is known. The value is only used when a State Test is generated from this EOF test to set the expected deployed container that should be found in the post state. If this field is not set, and the container is valid: - If the container kind is `ContainerKind.RUNTIME`, the deployed container is assumed to be the container itself, and an initcode container that wraps the container is generated automatically. - If the container kind is `ContainerKind.INITCODE`, `model_post_init` will attempt to infer the deployed container from the sections of the init-container, and the first container-type section will be used. An error will be raised if the deployed container cannot be inferred. If the value is set to `None`, it is assumed that the container is invalid and the test will expect that no contract is created. It is considered an error if: - The `deployed_container` field is set and the `container_kind` field is not set to `ContainerKind.INITCODE`. - The `deployed_container` field is set and the `expect_exception` is not `None`. The deployed container is **not** executed at any point during the EOF validation test nor the generated State Test. For container runtime testing use the `EOFStateTest` class. """ pre: Alloc | None = None """ Pre alloc object that is used during State Test generation. This field is automatically set by the test filler when generating a State Test from this EOF test and should otherwise be left unset. """ post: Alloc | None = None """ Post alloc object that is used during State Test generation. This field is automatically set by the test filler when generating a State Test from this EOF test and is normally not set by the user. """ sender: EOA | None = None """ Sender EOA object that is used during State Test generation. This field is automatically set by the `model_post_init` method and should otherwise be left unset. """ supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [ EOFFixture ] + [ LabeledFixtureFormat( fixture_format, f"{fixture_format.format_name}_from_eof_test", f"A {fixture_format.format_name} generated from an eof_test.", ) for fixture_format in StateTest.supported_fixture_formats ] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( execute_format, f"{execute_format.label}_from_eof_test", f"A {execute_format.label} generated from an eof_test.", ) for execute_format in StateTest.supported_execute_formats ] supported_markers: ClassVar[Dict[str, str]] = { "eof_test_only": "Only generate an EOF test fixture", } @classmethod def discard_fixture_format_by_marks( cls, fixture_format: FixtureFormat, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard a fixture format from filling if the appropriate marker is used. """ del fork if "eof_test_only" in [m.name for m in markers]: return fixture_format != EOFFixture return False @classmethod def pytest_parameter_name(cls) -> str: """Workaround for pytest parameter name.""" return "eof_test" def model_post_init(self, __context: Any) -> None: """Prepare the test exception based on the container.""" if self.container.validity_error is not None: if self.expect_exception is not None: assert self.expect_exception == self.container.validity_error, ( f"Container validity error {self.container.validity_error} " f"does not match expected exception {self.expect_exception}." ) self.expect_exception = self.container.validity_error # type: ignore[assignment] assert self.deployed_container is None, ( "deployed_container must be None for invalid containers." ) if "kind" in self.container.model_fields_set or "container_kind" in self.model_fields_set: if ( "kind" in self.container.model_fields_set and "container_kind" in self.model_fields_set ): assert self.container.kind == self.container_kind, ( f"Container kind type {str(self.container.kind)} " f"does not match test {self.container_kind}." ) elif "kind" in self.container.model_fields_set: self.container_kind = self.container.kind elif "container_kind" in self.model_fields_set: self.container.kind = self.container_kind assert self.pre is not None, "pre must be set to generate a StateTest." self.sender = self.pre.fund_eoa() if self.post is None: self.post = Alloc() def make_eof_test_fixture( self, *, fork: Fork, ) -> EOFFixture: """Generate the EOF test fixture.""" container_bytes = Bytes(self.container) if container_bytes in existing_tests: pytest.fail( f"Duplicate EOF test: {container_bytes}, " f"existing test: {existing_tests[container_bytes]}" ) existing_tests[container_bytes] = self.node_id() vectors = [ Vector( code=container_bytes, container_kind=self.container_kind, results={ fork: Result( exception=self.expect_exception, valid=self.expect_exception is None, ), }, ) ] fixture = EOFFixture(vectors=dict(enumerate(vectors))) try: eof_parse = EOFParse() except FileNotFoundError as e: warnings.warn( f"{e} Skipping EOF fixture verification. Fixtures may be invalid!", stacklevel=2 ) return fixture for _, vector in fixture.vectors.items(): expected_result = vector.results.get(fork) if expected_result is None: raise Exception(f"EOF Fixture missing vector result for fork: {fork}") args = [] if vector.container_kind == ContainerKind.INITCODE: args.append("--initcode") result = eof_parse.run(*args, input_value=str(vector.code)) self.verify_result(result, expected_result, vector.code) return fixture def verify_result( self, result: CompletedProcess, expected_result: Result, code: Bytes ) -> None: """ Check that the reported exception string matches the expected error. """ evmone_exception_mapper = EvmoneExceptionMapper() actual_exception_str = result.stdout.strip() actual_exception: EOFExceptionWithMessage | UndefinedException | None = None if not actual_exception_str.startswith("OK"): actual_exception = eof_exception_type_adapter.validate_python( actual_exception_str, context={"exception_mapper": evmone_exception_mapper} ) if expected_result.exception is None: if actual_exception is not None: raise UnexpectedEOFExceptionError(code=code, got=f"{actual_exception}") else: expected_string = to_pipe_str(expected_result.exception) if actual_exception is None: raise ExpectedEOFExceptionError( code=code, expected=f"{expected_string}", ) if ( not isinstance(actual_exception, EOFExceptionWithMessage) or expected_result.exception not in actual_exception ): raise EOFExceptionMismatchError( code=code, expected=f"{expected_string}", got=f"{actual_exception}", ) def generate_eof_contract_create_transaction(self) -> Transaction: """Generate a transaction that creates a contract.""" assert self.sender is not None, "sender must be set to generate a StateTest." assert self.post is not None, "post must be set to generate a StateTest." assert self.pre is not None, "pre must be set to generate a StateTest." initcode: Container deployed_container: Container | Bytes | None = None if self.container_kind == ContainerKind.INITCODE: initcode = self.container if "deployed_container" in self.model_fields_set: # In the case of an initcontainer where we know the deployed # container, we can use the initcontainer as-is. deployed_container = self.deployed_container elif self.expect_exception is None: # We have a valid init-container, but we don't know the # deployed container. Try to infer the deployed container from # the sections of the init-container. assert self.container.raw_bytes is None, ( "deployed_container must be set for initcode containers with raw_bytes." ) for section in self.container.sections: if section.kind == SectionKind.CONTAINER: deployed_container = section.data break assert deployed_container is not None, ( "Unable to infer deployed container for init-container. " "Use field `deployed_container` to set the expected deployed container." ) else: assert self.deployed_container is None, ( "deployed_container must be None for runtime containers." ) initcode = Container( sections=[ Section.Code(Op.RETURNCODE[0](0, 0)), Section.Container(self.container), ] ) deployed_container = self.container factory_address = self.pre.deploy_contract( Op.TXCREATE(tx_initcode_hash=initcode.hash) + Op.STOP ) tx = Transaction( sender=self.sender, to=factory_address, gas_limit=10_000_000, max_priority_fee_per_gas=10, max_fee_per_gas=10, initcodes=[initcode], ) if self.expect_exception is not None or deployed_container is None: self.post[compute_eofcreate_address(factory_address, 0)] = None else: self.post[compute_eofcreate_address(factory_address, 0)] = Account( code=deployed_container, ) return tx def generate_state_test(self, fork: Fork) -> StateTest: """Generate the StateTest filler.""" del fork return StateTest.from_test( base_test=self, pre=self.pre, tx=self.generate_eof_contract_create_transaction(), env=Environment(), post=self.post, ) def generate( self, *, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, **_: Any, ) -> BaseFixture: """Generate the BlockchainTest fixture.""" if fixture_format == EOFFixture: return self.make_eof_test_fixture(fork=fork) elif fixture_format in StateTest.supported_fixture_formats: return self.generate_state_test(fork).generate( t8n=t8n, fork=fork, fixture_format=fixture_format ) raise Exception(f"Unknown fixture format: {fixture_format}") def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Generate the list of test fixtures.""" if execute_format == TransactionPost: return self.generate_state_test(fork).execute(fork=fork, execute_format=execute_format) raise Exception(f"Unsupported execute format: {execute_format}") EOFTestSpec = Callable[[str], Generator[EOFTest, None, None]] EOFTestFiller = Type[EOFTest] class EOFStateTest(EOFTest, Transaction): """ Filler type that generates an EOF test for container validation, and also tests the container during runtime using a state test (and blockchain test). In the state or blockchain test, the container is first deployed to the pre-allocation and then a transaction is sent to the deployed container. Container deployment/validation is **not** tested like in the `EOFTest` unless the container under test is an initcode container. All fields from `ethereum_test_types.Transaction` are available for use in the test. """ gas_limit: HexNumber = Field(HexNumber(10_000_000), serialization_alias="gas") """Gas limit for the transaction that deploys the container.""" tx_sender_funding_amount: int = 1_000_000_000_000_000_000_000 """Amount of funds to send to the sender EOA before the transaction.""" env: Environment = Field(default_factory=Environment) """Environment object that is used during State Test generation.""" container_post: Account = Field(default_factory=Account) """Account object used to verify the container post state.""" supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [ EOFFixture ] + [ LabeledFixtureFormat( fixture_format, f"eof_{fixture_format.format_name}", f"Tests that generate an EOF {fixture_format.format_name}.", ) for fixture_format in StateTest.supported_fixture_formats ] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( execute_format, f"eof_{execute_format.label}", f"Tests that generate an EOF {execute_format.label}.", ) for execute_format in StateTest.supported_execute_formats ] @classmethod def pytest_parameter_name(cls) -> str: """Workaround for pytest parameter name.""" return "eof_state_test" def model_post_init(self, __context: Any) -> None: """Prepare the transaction parameters required to fill the test.""" assert self.pre is not None, "pre must be set to generate a StateTest." EOFTest.model_post_init(self, __context) self.sender = self.pre.fund_eoa(amount=self.tx_sender_funding_amount) if self.post is None: self.post = Alloc() if self.expect_exception is not None and self.container_kind == ContainerKind.RUNTIME: # Invalid EOF runtime code initcode = Container.Init(deploy_container=self.container) self.to = self.pre.deploy_contract( Op.TXCREATE(tx_initcode_hash=initcode.hash) + Op.STOP ) self.initcodes = [initcode] # type: ignore[list-item] # Run transaction model validation Transaction.model_post_init(self, __context) self.post[compute_eofcreate_address(self.to, 0)] = None # Expect # failure. elif self.expect_exception is not None and self.container_kind == ContainerKind.INITCODE: # Invalid EOF initcode self.to = self.pre.deploy_contract( Op.TXCREATE(tx_initcode_hash=self.container.hash) + Op.STOP ) self.initcodes = [self.container] # type: ignore[list-item] # Run transaction model validation Transaction.model_post_init(self, __context) self.post[compute_eofcreate_address(self.to, 0)] = None # Expect # failure. elif self.container_kind == ContainerKind.INITCODE: self.to = self.pre.deploy_contract( Op.TXCREATE(tx_initcode_hash=self.container.hash) + Op.STOP ) self.initcodes = [self.container] # type: ignore[list-item] # Run transaction model validation Transaction.model_post_init(self, __context) self.post[compute_eofcreate_address(self.to, 0)] = self.container_post else: self.to = self.pre.deploy_contract(code=self.container) # Run transaction model validation Transaction.model_post_init(self, __context) self.post[self.to] = self.container_post def generate_state_test(self, fork: Fork) -> StateTest: """Generate the StateTest filler.""" del fork assert self.pre is not None, "pre must be set to generate a StateTest." assert self.post is not None, "post must be set to generate a StateTest." return StateTest.from_test( base_test=self, pre=self.pre, tx=self, env=self.env, post=self.post, ) def generate( self, *, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, **_: Any, ) -> BaseFixture: """Generate the BlockchainTest fixture.""" if fixture_format == EOFFixture: if Bytes(self.container) in existing_tests: # Gracefully skip duplicate tests because one EOFStateTest can # generate multiple state fixtures with the same data. pytest.skip(f"Duplicate EOF container on EOFStateTest: {self.node_id()}") return self.make_eof_test_fixture(fork=fork) elif fixture_format in StateTest.supported_fixture_formats: return self.generate_state_test(fork).generate( t8n=t8n, fork=fork, fixture_format=fixture_format ) raise Exception(f"Unknown fixture format: {fixture_format}") EOFStateTestSpec = Callable[[str], Generator[EOFStateTest, None, None]] EOFStateTestFiller = Type[EOFStateTest] ================================================ FILE: src/ethereum_test_specs/helpers.py ================================================ """Helper functions.""" from dataclasses import dataclass from enum import StrEnum from typing import Any, Dict, List from ethereum_clis import Result from ethereum_test_exceptions import ( BlockException, ExceptionBase, ExceptionWithMessage, TransactionException, UndefinedException, ) from ethereum_test_types import Transaction, TransactionReceipt class ExecutionContext(StrEnum): """The execution context in which a test case can fail.""" BLOCK = "Block" TRANSACTION = "Transaction" class UnexpectedExecutionSuccessError(Exception): """ Exception used when the transaction expected to fail succeeded instead. """ def __init__(self, execution_context: ExecutionContext, **kwargs: Any) -> None: """Initialize the unexpected success exception.""" message = ( f"\nUnexpected success for {execution_context.value} ({kwargs}):" f"\n What: {execution_context.value} unexpectedly succeeded!" ) super().__init__(message) class UnexpectedExecutionFailError(Exception): """ Exception used when a transaction/block expected to succeed failed instead. """ def __init__( self, execution_context: ExecutionContext, message: str, exception: ExceptionWithMessage | UndefinedException, **kwargs: Any, ) -> None: """Initialize the exception.""" message = ( f"Unexpected fail for {execution_context.value} ({kwargs}):" f"\n What: {execution_context.value} unexpectedly failed!" f'\n Error: "{message}" ({exception})' ) super().__init__(message) class UndefinedExecutionExceptionError(Exception): """ Exception used when a client's exception message isn't present in its `ExceptionMapper`. """ def __init__( self, execution_context: ExecutionContext, want_exception: ExceptionBase | List[ExceptionBase], got_exception: UndefinedException, **kwargs: Any, ) -> None: """Initialize the exception.""" message = ( f"Exception mismatch on {execution_context.value} ({kwargs}):" f"\n What: {execution_context.value} exception mismatch!" f"\n Want: {want_exception}" f'\n Got: "{got_exception}"' "\n No exception defined for error message got, please add it to " f"{got_exception.mapper_name}" ) super().__init__(message) class ExecutionExceptionMismatchError(Exception): """ Exception used when the actual block/transaction error string differs from the expected one. """ def __init__( self, execution_context: ExecutionContext, want_exception: ExceptionBase | List[ExceptionBase], got_exception: ExceptionWithMessage, got_message: str, **kwargs: Any, ) -> None: """Initialize the exception.""" message = ( f"Exception mismatch on {execution_context.value} ({kwargs}):" f"\n What: {execution_context.value} exception mismatch!" f"\n Want: {want_exception}" f'\n Got: "{got_exception}" ("{got_message}")' ) super().__init__(message) class TransactionReceiptMismatchError(Exception): """ Exception used when the actual transaction receipt differs from the expected one. """ def __init__( self, index: int, field_name: str, expected_value: Any, actual_value: Any, ): """Initialize the exception.""" message = ( f"\nTransactionReceiptMismatch (pos={index}):" f"\n What: {field_name} mismatch!" f"\n Want: {expected_value}" f"\n Got: {actual_value}" ) super().__init__(message) @dataclass class ExceptionInfo: """Info to print transaction exception error messages.""" execution_context: ExecutionContext want_exception: List[ExceptionBase] | ExceptionBase | None got_exception: ExceptionWithMessage | UndefinedException | None got_message: str | None context: Dict[str, Any] def __init__( self, *, execution_context: ExecutionContext, want_exception: List[ExceptionBase] | ExceptionBase | None, got_exception: ExceptionWithMessage | UndefinedException | None, context: Dict[str, Any], ): """Initialize the exception.""" self.execution_context = execution_context self.want_exception = want_exception self.got_exception = got_exception if self.got_exception is None: self.got_message = None else: self.got_message = ( got_exception.message if isinstance(got_exception, ExceptionWithMessage) else str(got_exception) ) self.context = context def verify(self: "ExceptionInfo", *, strict_match: bool) -> None: """Verify the exception.""" want_exception, got_exception = ( self.want_exception, self.got_exception, ) if want_exception and not got_exception: raise UnexpectedExecutionSuccessError( execution_context=self.execution_context, **self.context ) elif not want_exception and got_exception: assert self.got_message is not None raise UnexpectedExecutionFailError( execution_context=self.execution_context, message=self.got_message, exception=got_exception, **self.context, ) elif want_exception and got_exception: if isinstance(got_exception, UndefinedException): raise UndefinedExecutionExceptionError( execution_context=self.execution_context, want_exception=want_exception, got_exception=got_exception, **self.context, ) if strict_match: if want_exception not in got_exception: got_message = self.got_message assert got_message is not None raise ExecutionExceptionMismatchError( execution_context=self.execution_context, want_exception=want_exception, got_exception=got_exception, got_message=got_message, **self.context, ) class TransactionExceptionInfo(ExceptionInfo): """Info to print transaction exception error messages.""" def __init__( self, tx: Transaction, tx_index: int, **kwargs: Any, ) -> None: """Initialize the exception.""" super().__init__( execution_context=ExecutionContext.TRANSACTION, want_exception=tx.error, # type: ignore context={"index": tx_index, "nonce": tx.nonce}, **kwargs, ) class BlockExceptionInfo(ExceptionInfo): """Info to print block exception error messages.""" def __init__( self, block_number: int, **kwargs: Any, ) -> None: """Initialize the exception.""" super().__init__( execution_context=ExecutionContext.BLOCK, context={"number": block_number}, **kwargs, ) def verify_transaction_receipt( transaction_index: int, expected_receipt: TransactionReceipt | None, actual_receipt: TransactionReceipt | None, ) -> None: """ Verify the actual receipt against the expected one. If the expected receipt is None, validation is skipped. Only verifies non-None values in the expected receipt if any. """ if expected_receipt is None: return assert actual_receipt is not None if ( expected_receipt.gas_used is not None and actual_receipt.gas_used != expected_receipt.gas_used ): raise TransactionReceiptMismatchError( index=transaction_index, field_name="gas_used", expected_value=expected_receipt.gas_used, actual_value=actual_receipt.gas_used, ) # TODO: Add more fields as needed def verify_transactions( *, txs: List[Transaction], result: Result, transition_tool_exceptions_reliable: bool, ) -> List[int]: """ Verify accepted and rejected (if any) transactions against the expected outcome. Raises exception on unexpected rejections, unexpected successful txs, or successful txs with unexpected receipt values. """ rejected_txs: Dict[int, ExceptionWithMessage | UndefinedException] = { rejected_tx.index: rejected_tx.error for rejected_tx in result.rejected_transactions } receipt_index = 0 for i, tx in enumerate(txs): error_message = rejected_txs[i] if i in rejected_txs else None info = TransactionExceptionInfo( tx=tx, tx_index=i, got_exception=error_message, ) info.verify(strict_match=transition_tool_exceptions_reliable) if error_message is None: verify_transaction_receipt(i, tx.expected_receipt, result.receipts[receipt_index]) receipt_index += 1 return list(rejected_txs.keys()) def verify_block( *, block_number: int, want_exception: List[TransactionException | BlockException] | TransactionException | BlockException | None, got_exception: ExceptionWithMessage | UndefinedException | None, transition_tool_exceptions_reliable: bool, ) -> None: """Verify the block exception against the expected one.""" info = BlockExceptionInfo( block_number=block_number, want_exception=want_exception, got_exception=got_exception, ) info.verify(strict_match=transition_tool_exceptions_reliable) ================================================ FILE: src/ethereum_test_specs/py.typed ================================================ ================================================ FILE: src/ethereum_test_specs/state.py ================================================ """Ethereum state test spec definition and filler.""" from pprint import pprint from typing import Any, Callable, ClassVar, Dict, Generator, List, Optional, Sequence, Type import pytest from pydantic import Field from ethereum_clis import TransitionTool, TransitionToolOutput from ethereum_test_base_types import HexNumber from ethereum_test_exceptions import BlockException, EngineAPIError, TransactionException from ethereum_test_execution import ( BaseExecute, ExecuteFormat, LabeledExecuteFormat, TransactionPost, ) from ethereum_test_fixtures import ( BaseFixture, FixtureFormat, LabeledFixtureFormat, StateFixture, ) from ethereum_test_fixtures.common import FixtureBlobSchedule from ethereum_test_fixtures.state import ( FixtureConfig, FixtureEnvironment, FixtureForkPost, FixtureTransaction, ) from ethereum_test_forks import Fork from ethereum_test_types import ( Alloc, BlockAccessListExpectation, Environment, Transaction, ) from pytest_plugins.custom_logging import get_logger from .base import BaseTest, OpMode from .blockchain import Block, BlockchainTest, Header from .debugging import print_traces from .helpers import verify_transactions logger = get_logger(__name__) class StateTest(BaseTest): """ Filler type that tests transactions over the period of a single block. """ env: Environment = Field(default_factory=Environment) pre: Alloc post: Alloc tx: Transaction block_exception: ( List[TransactionException | BlockException] | TransactionException | BlockException | None ) = None engine_api_error_code: Optional[EngineAPIError] = None blockchain_test_header_verify: Optional[Header] = None blockchain_test_rlp_modifier: Optional[Header] = None expected_block_access_list: Optional[BlockAccessListExpectation] = None chain_id: int = 1 supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [ StateFixture, ] + [ LabeledFixtureFormat( fixture_format, f"{fixture_format.format_name}_from_state_test", f"A {fixture_format.format_name} generated from a state_test", ) for fixture_format in BlockchainTest.supported_fixture_formats # Exclude sync fixtures from state tests - they don't make sense for # state tests if not ( (hasattr(fixture_format, "__name__") and "Sync" in fixture_format.__name__) or (hasattr(fixture_format, "format") and "Sync" in fixture_format.format.__name__) ) ] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( TransactionPost, "state_test", "An execute test derived from a state test", ), ] supported_markers: ClassVar[Dict[str, str]] = { "state_test_only": "Only generate a state test fixture", } def verify_modified_gas_limit( self, *, t8n: TransitionTool, base_tool_output: TransitionToolOutput, fork: Fork, current_gas_limit: int, pre_alloc: Alloc, env: Environment, enable_post_processing: bool, ) -> bool: """Verify a new lower gas limit yields the same transaction outcome.""" base_traces = base_tool_output.result.traces assert base_traces is not None, "Traces not collected for gas optimization" new_tx = self.tx.copy(gas_limit=current_gas_limit).with_signature_and_sender() modified_tool_output = t8n.evaluate( transition_tool_data=TransitionTool.TransitionToolData( alloc=pre_alloc, txs=[new_tx], env=env, fork=fork, chain_id=self.chain_id, reward=0, # Reward on state tests is always zero blob_schedule=fork.blob_schedule(), state_test=True, ), debug_output_path=self.get_next_transition_tool_output_path(), slow_request=self.is_tx_gas_heavy_test(), ) modified_traces = modified_tool_output.result.traces assert modified_traces is not None, "Traces not collected for gas optimization" if not base_traces.are_equivalent( modified_tool_output.result.traces, enable_post_processing, ): logger.debug(f"Traces are not equivalent (gas_limit={current_gas_limit})") return False try: self.post.verify_post_alloc(modified_tool_output.alloc) except Exception as e: logger.debug(f"Post alloc is not equivalent (gas_limit={current_gas_limit})") logger.debug(e) return False try: verify_transactions( txs=[new_tx], result=modified_tool_output.result, transition_tool_exceptions_reliable=t8n.exception_mapper.reliable, ) except Exception as e: logger.debug(f"Transactions are not equivalent (gas_limit={current_gas_limit})") logger.debug(e) return False if len(base_tool_output.alloc.root) != len(modified_tool_output.alloc.root): logger.debug(f"Post alloc is not equivalent (gas_limit={current_gas_limit})") return False if modified_tool_output.alloc.root.keys() != modified_tool_output.alloc.root.keys(): logger.debug(f"Post alloc is not equivalent (gas_limit={current_gas_limit})") return False for k in base_tool_output.alloc.root.keys(): if k not in modified_tool_output.alloc: logger.debug(f"Post alloc is not equivalent (gas_limit={current_gas_limit})") return False base_account = base_tool_output.alloc[k] modified_account = modified_tool_output.alloc[k] if (modified_account is None) != (base_account is None): logger.debug(f"Post alloc is not equivalent (gas_limit={current_gas_limit})") return False if ( modified_account is not None and base_account is not None and base_account.nonce != modified_account.nonce ): logger.debug(f"Post alloc is not equivalent (gas_limit={current_gas_limit})") return False logger.debug(f"Gas limit is equivalent (gas_limit={current_gas_limit})") return True @classmethod def discard_fixture_format_by_marks( cls, fixture_format: FixtureFormat, fork: Fork, markers: List[pytest.Mark], ) -> bool: """ Discard a fixture format from filling if the appropriate marker is used. """ del fork if "state_test_only" in [m.name for m in markers]: return fixture_format != StateFixture return False def _generate_blockchain_genesis_environment(self, *, fork: Fork) -> Environment: """ Generate the genesis environment for the BlockchainTest formatted test. """ assert self.env.number >= 1, ( "genesis block number cannot be negative, set state test env.number to at least 1" ) assert self.env.timestamp >= 1, ( "genesis timestamp cannot be negative, set state test env.timestamp to at least 1" ) # There's only a handful of values that we need to set in the genesis # for the environment values at block 1 to make sense: # - Number: Needs to be N minus 1 # - Timestamp: Needs to be zero, because the subsequent # block can come at any time. # - Gas Limit: Changes from parent to child, needs to be set in genesis # - Base Fee Per Gas: Block's base fee depends on the parent's value # - Excess Blob Gas: Block's excess blob gas value depends on # the parent's value kwargs: Dict[str, Any] = { "number": self.env.number - 1, "timestamp": 0, } if "gas_limit" in self.env.model_fields_set: kwargs["gas_limit"] = self.env.gas_limit if self.env.base_fee_per_gas: # Calculate genesis base fee per gas from state test's block#1 env kwargs["base_fee_per_gas"] = HexNumber( int(int(str(self.env.base_fee_per_gas), 0) * 8 / 7) ) if self.env.excess_blob_gas: # The excess blob gas environment value means the value of the # context (block header) where the transaction is executed. In a # blockchain test, we need to indirectly set the excess blob gas by # setting the excess blob gas of the genesis block to the expected # value plus the TARGET_BLOB_GAS_PER_BLOCK, which is the value that # will be subtracted from the excess blob gas when the first block # is mined. kwargs["excess_blob_gas"] = self.env.excess_blob_gas + ( fork.target_blobs_per_block() * fork.blob_gas_per_blob() ) return Environment(**kwargs) def _generate_blockchain_blocks(self, *, fork: Fork) -> List[Block]: """ Generate the single block that represents this state test in a BlockchainTest format. """ kwargs = { "number": self.env.number, "timestamp": self.env.timestamp, "prev_randao": self.env.prev_randao, "fee_recipient": self.env.fee_recipient, "gas_limit": self.env.gas_limit, "extra_data": self.env.extra_data, "withdrawals": self.env.withdrawals, "parent_beacon_block_root": self.env.parent_beacon_block_root, "txs": [self.tx], "ommers": [], "header_verify": self.blockchain_test_header_verify, "rlp_modifier": self.blockchain_test_rlp_modifier, "expected_block_access_list": self.expected_block_access_list, } if not fork.header_prev_randao_required(): kwargs["difficulty"] = self.env.difficulty if "block_exception" in self.model_fields_set: kwargs["exception"] = self.block_exception # type: ignore elif "error" in self.tx.model_fields_set: kwargs["exception"] = self.tx.error # type: ignore return [Block(**kwargs)] def generate_blockchain_test(self, *, fork: Fork) -> BlockchainTest: """Generate a BlockchainTest fixture from this StateTest fixture.""" return BlockchainTest.from_test( base_test=self, genesis_environment=self._generate_blockchain_genesis_environment(fork=fork), pre=self.pre, post=self.post, blocks=self._generate_blockchain_blocks(fork=fork), ) def make_state_test_fixture( self, t8n: TransitionTool, fork: Fork, ) -> StateFixture: """Create a fixture from the state test definition.""" # We can't generate a state test fixture that names a transition fork, # so we get the fork at the block number and timestamp of the state # test fork = fork.fork_at(block_number=self.env.number, timestamp=self.env.timestamp) env = self.env.set_fork_requirements(fork) tx = self.tx.with_signature_and_sender(keep_secret_key=True) pre_alloc = Alloc.merge( Alloc.model_validate(fork.pre_allocation()), self.pre, ) if empty_accounts := pre_alloc.empty_accounts(): raise Exception(f"Empty accounts in pre state: {empty_accounts}") transition_tool_output = t8n.evaluate( transition_tool_data=TransitionTool.TransitionToolData( alloc=pre_alloc, txs=[tx], env=env, fork=fork, chain_id=self.chain_id, reward=0, # Reward on state tests is always zero blob_schedule=fork.blob_schedule(), state_test=True, ), debug_output_path=self.get_next_transition_tool_output_path(), slow_request=self.is_tx_gas_heavy_test(), ) try: self.post.verify_post_alloc(transition_tool_output.alloc) except Exception as e: print_traces(t8n.get_traces()) raise e try: verify_transactions( txs=[tx], result=transition_tool_output.result, transition_tool_exceptions_reliable=t8n.exception_mapper.reliable, ) except Exception as e: print_traces(t8n.get_traces()) pprint(transition_tool_output.result) pprint(transition_tool_output.alloc) raise e if ( self._operation_mode == OpMode.OPTIMIZE_GAS or self._operation_mode == OpMode.OPTIMIZE_GAS_POST_PROCESSING ): enable_post_processing = self._operation_mode == OpMode.OPTIMIZE_GAS_POST_PROCESSING base_tool_output = transition_tool_output assert base_tool_output.result.traces is not None, "Traces not found." # First try reducing the gas limit only by one, if the validation # fails, it means that the traces change even with the slightest # modification to the gas. if self.verify_modified_gas_limit( t8n=t8n, base_tool_output=base_tool_output, fork=fork, current_gas_limit=self.tx.gas_limit - 1, pre_alloc=pre_alloc, env=env, enable_post_processing=enable_post_processing, ): minimum_gas_limit = 0 maximum_gas_limit = int(self.tx.gas_limit) while minimum_gas_limit < maximum_gas_limit: current_gas_limit = (maximum_gas_limit + minimum_gas_limit) // 2 if self.verify_modified_gas_limit( t8n=t8n, base_tool_output=base_tool_output, fork=fork, current_gas_limit=current_gas_limit, pre_alloc=pre_alloc, env=env, enable_post_processing=enable_post_processing, ): maximum_gas_limit = current_gas_limit else: minimum_gas_limit = current_gas_limit + 1 if ( self._gas_optimization_max_gas_limit is not None and minimum_gas_limit > self._gas_optimization_max_gas_limit ): raise Exception( "Requires more than the minimum " f"{self._gas_optimization_max_gas_limit} wanted." ) assert self.verify_modified_gas_limit( t8n=t8n, base_tool_output=base_tool_output, fork=fork, current_gas_limit=minimum_gas_limit, pre_alloc=pre_alloc, env=env, enable_post_processing=enable_post_processing, ) self._gas_optimization = current_gas_limit else: raise Exception("Impossible to compare.") if self._operation_mode == OpMode.BENCHMARKING: expected_benchmark_gas_used = self.expected_benchmark_gas_used assert expected_benchmark_gas_used is not None, ( "expected_benchmark_gas_used is not set" ) gas_used = int(transition_tool_output.result.gas_used) if not self.skip_gas_used_validation: assert gas_used == expected_benchmark_gas_used, ( f"gas_used ({gas_used}) does not match expected_benchmark_gas_used " f"({expected_benchmark_gas_used})" f", difference: {gas_used - expected_benchmark_gas_used}" ) return StateFixture( env=FixtureEnvironment(**env.model_dump(exclude_none=True)), pre=pre_alloc, post={ fork: [ FixtureForkPost( state_root=transition_tool_output.result.state_root, logs_hash=transition_tool_output.result.logs_hash, tx_bytes=tx.rlp(), expect_exception=tx.error, state=transition_tool_output.alloc, ) ] }, transaction=FixtureTransaction.from_transaction(tx), config=FixtureConfig( blob_schedule=FixtureBlobSchedule.from_blob_schedule(fork.blob_schedule()), chain_id=self.chain_id, ), ) def get_genesis_environment(self, fork: Fork) -> Environment: """Get the genesis environment for pre-allocation groups.""" return self.generate_blockchain_test(fork=fork).get_genesis_environment(fork=fork) def generate( self, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, ) -> BaseFixture: """Generate the BlockchainTest fixture.""" self.check_exception_test(exception=self.tx.error is not None) if fixture_format in BlockchainTest.supported_fixture_formats: return self.generate_blockchain_test(fork=fork).generate( t8n=t8n, fork=fork, fixture_format=fixture_format ) elif fixture_format == StateFixture: return self.make_state_test_fixture(t8n, fork) raise Exception(f"Unknown fixture format: {fixture_format}") def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Generate the list of test fixtures.""" del fork if execute_format == TransactionPost: # Pass gas validation params for benchmark tests # If not benchmark mode, skip gas used validation if self._operation_mode != OpMode.BENCHMARKING: self.skip_gas_used_validation = True return TransactionPost( blocks=[[self.tx]], post=self.post, expected_benchmark_gas_used=self.expected_benchmark_gas_used, skip_gas_used_validation=self.skip_gas_used_validation, ) raise Exception(f"Unsupported execute format: {execute_format}") StateTestSpec = Callable[[str], Generator[StateTest, None, None]] StateTestFiller = Type[StateTest] ================================================ FILE: src/ethereum_test_specs/static_state/__init__.py ================================================ """Ethereum/tests structures.""" ================================================ FILE: src/ethereum_test_specs/static_state/account.py ================================================ """Account structure of ethereum/tests fillers.""" from typing import Any, Dict, List, Mapping, Set, Tuple from pydantic import BaseModel, ConfigDict from ethereum_test_base_types import Bytes, EthereumTestRootModel, HexNumber, Storage from ethereum_test_types import Alloc from .common import ( AddressOrTagInFiller, CodeInFiller, ContractTag, SenderTag, Tag, TagDependentData, TagDict, ValueInFiller, ValueOrTagInFiller, ) class StorageInPre(EthereumTestRootModel): """Class that represents a storage in pre-state.""" root: Dict[ValueInFiller, ValueOrTagInFiller] def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" tag_dependencies: Dict[str, Tag] = {} for k, v in self.root.items(): if isinstance(k, Tag): tag_dependencies[k.name] = k if isinstance(v, Tag): tag_dependencies[v.name] = v return tag_dependencies def resolve(self, tags: TagDict) -> Dict[ValueInFiller, ValueInFiller]: """Resolve the storage.""" resolved_storage: Dict[ValueInFiller, ValueInFiller] = {} for key, value in self.root.items(): if isinstance(value, Tag): resolved_storage[key] = HexNumber(int.from_bytes(value.resolve(tags), "big")) else: resolved_storage[key] = value return resolved_storage class AccountInFiller(BaseModel, TagDependentData): """Class that represents an account in filler.""" balance: ValueInFiller | None = None code: CodeInFiller | None = None nonce: ValueInFiller | None = None storage: StorageInPre | None = None model_config = ConfigDict(arbitrary_types_allowed=True, extra="forbid") def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" tag_dependencies: Dict[str, Tag] = {} if self.storage is not None: tag_dependencies.update(self.storage.tag_dependencies()) if self.code is not None and isinstance(self.code, CodeInFiller): tag_dependencies.update(self.code.tag_dependencies()) return tag_dependencies def resolve(self, tags: TagDict) -> Dict[str, Any]: """Resolve the account.""" account_properties: Dict[str, Any] = {} if self.balance is not None: account_properties["balance"] = self.balance if self.code is not None: if compiled_code := self.code.compiled(tags): account_properties["code"] = compiled_code if self.nonce is not None: account_properties["nonce"] = self.nonce if self.storage is not None: if resolved_storage := self.storage.resolve(tags): account_properties["storage"] = resolved_storage return account_properties class PreInFiller(EthereumTestRootModel): """Class that represents a pre-state in filler.""" root: Dict[AddressOrTagInFiller, AccountInFiller] def _build_dependency_graph( self, ) -> Tuple[Dict[str, Set[str]], Dict[str, AddressOrTagInFiller]]: """Build a dependency graph for all tags.""" dep_graph: Dict[str, Set[str]] = {} tag_to_address: Dict[str, AddressOrTagInFiller] = {} # First pass: identify all tags and their dependencies for address_or_tag, account in self.root.items(): if isinstance(address_or_tag, Tag): tag_name = address_or_tag.name tag_to_address[tag_name] = address_or_tag dep_graph[tag_name] = set() # Get dependencies from account properties dependencies = account.tag_dependencies() for dep_name in dependencies: if dep_name != tag_name: # Ignore self-references dep_graph[tag_name].add(dep_name) return dep_graph, tag_to_address def _topological_sort(self, dep_graph: Dict[str, Set[str]]) -> List[str]: """Perform topological sort on dependency graph.""" # Create a copy to modify graph = {node: deps.copy() for node, deps in dep_graph.items()} # Find nodes with no dependencies no_deps = [node for node, deps in graph.items() if not deps] sorted_nodes = [] while no_deps: # Process a node with no dependencies node = no_deps.pop() sorted_nodes.append(node) # Remove this node from other nodes' dependencies for other_node, deps in graph.items(): if node in deps: deps.remove(node) if not deps and other_node not in sorted_nodes: no_deps.append(other_node) # Check for cycles remaining = [node for node in graph if node not in sorted_nodes] if remaining: # Handle cycles by processing remaining nodes in any order # This works because self-references are allowed sorted_nodes.extend(remaining) return sorted_nodes def setup(self, pre: Alloc, all_dependencies: Dict[str, Tag]) -> TagDict: """Resolve the pre-state with improved tag resolution.""" resolved_accounts: TagDict = {} # Separate tagged and non-tagged accounts tagged_accounts = {} non_tagged_accounts = {} for address_or_tag, account in self.root.items(): if isinstance(address_or_tag, Tag): tagged_accounts[address_or_tag] = account else: non_tagged_accounts[address_or_tag] = account # Step 1: Process non-tagged accounts but don't compile code yet # We'll compile code later after all tags are resolved non_tagged_to_process = [] for address, account in non_tagged_accounts.items(): non_tagged_to_process.append((address, account)) resolved_accounts[address.hex()] = address # Step 2: Build dependency graph for tagged accounts dep_graph, tag_to_address = self._build_dependency_graph() # Step 3: Get topological order resolution_order = self._topological_sort(dep_graph) # Step 4: Pre-deploy all contract tags and pre-fund EOAs to get # addresses for tag_name in resolution_order: if tag_name in tag_to_address: tag = tag_to_address[tag_name] if isinstance(tag, ContractTag): # Deploy with placeholder to get address deployed_address = pre.deploy_contract( code=b"", # Temporary placeholder label=tag_name, ) resolved_accounts[tag_name] = deployed_address elif isinstance(tag, SenderTag): # Create EOA to get address - use amount=1 to ensure # account is created eoa = pre.fund_eoa(amount=1, label=tag_name) # Store the EOA object for SenderKeyTag resolution resolved_accounts[tag_name] = eoa # Step 5: Now resolve all properties with all addresses available for tag_name in resolution_order: if tag_name in tag_to_address: tag = tag_to_address[tag_name] assert isinstance(tag, (ContractTag, SenderTag)), ( f"Tag {tag_name} is not a contract or sender" ) account = tagged_accounts[tag] # All addresses are now available, so resolve properties account_properties = account.resolve(resolved_accounts) if isinstance(tag, ContractTag): # Update the already-deployed contract deployed_address = resolved_accounts[tag_name] deployed_account = pre[deployed_address] if deployed_account is not None: if "code" in account_properties: deployed_account.code = Bytes(account_properties["code"]) if "balance" in account_properties: deployed_account.balance = account_properties["balance"] if "nonce" in account_properties: deployed_account.nonce = account_properties["nonce"] if "storage" in account_properties: deployed_account.storage = Storage(root=account_properties["storage"]) elif isinstance(tag, SenderTag): eoa_account = pre[resolved_accounts[tag_name]] if eoa_account is not None: if "balance" in account_properties: eoa_account.balance = account_properties["balance"] if "nonce" in account_properties: eoa_account.nonce = account_properties["nonce"] if "code" in account_properties: eoa_account.code = Bytes(account_properties["code"]) if "storage" in account_properties: eoa_account.storage = Storage(root=account_properties["storage"]) # Step 6: Now process non-tagged accounts (including code compilation) for address, account in non_tagged_to_process: account_properties = account.resolve(resolved_accounts) if "balance" in account_properties: pre.fund_address(address, account_properties["balance"]) existing_account = pre[address] if existing_account is not None: if "code" in account_properties: existing_account.code = Bytes(account_properties["code"]) if "nonce" in account_properties: existing_account.nonce = account_properties["nonce"] if "storage" in account_properties: existing_account.storage = Storage(root=account_properties["storage"]) # Step 7: Handle any extra dependencies not in pre for extra_dependency in all_dependencies: if extra_dependency not in resolved_accounts: if all_dependencies[extra_dependency].type != "eoa": raise ValueError(f"Contract dependency {extra_dependency} not found in pre") # Create new EOA - this will have a dynamically generated key # and address eoa = pre.fund_eoa(amount=0, label=extra_dependency) resolved_accounts[extra_dependency] = eoa return resolved_accounts ================================================ FILE: src/ethereum_test_specs/static_state/common/__init__.py ================================================ """Ethereum/tests structures.""" from .common import ( AccessListInFiller, AddressInFiller, AddressOrCreateTagInFiller, AddressOrTagInFiller, AddressTag, CodeInFiller, ContractTag, HashOrTagInFiller, SenderTag, Tag, TagDependentData, TagDict, ValueInFiller, ValueOrCreateTagInFiller, ValueOrTagInFiller, parse_address_or_tag, ) __all__ = [ "AccessListInFiller", "AddressInFiller", "AddressOrCreateTagInFiller", "AddressOrTagInFiller", "AddressTag", "CodeInFiller", "ContractTag", "HashOrTagInFiller", "Tag", "TagDict", "TagDependentData", "SenderTag", "ValueInFiller", "ValueOrCreateTagInFiller", "ValueOrTagInFiller", "parse_address_or_tag", ] ================================================ FILE: src/ethereum_test_specs/static_state/common/common.py ================================================ """Common field types from ethereum/tests.""" import re import subprocess import tempfile from typing import Any, Dict, List, Mapping, Tuple, Union from eth_abi import encode from eth_utils import function_signature_to_4byte_selector from pydantic import BaseModel, BeforeValidator, Field, PrivateAttr, model_validator from pydantic_core import core_schema from typing_extensions import Annotated from ethereum_test_base_types import AccessList, Address, CamelModel, Hash, HexNumber from .compile_yul import compile_yul from .tags import ( ContractTag, CreateTag, SenderKeyTag, SenderTag, Tag, TagDependentData, TagDict, ) def parse_hex_number(i: str | int) -> int: """Check if the given string is a valid hex number.""" if i == "" or i == "0x": return 0 if isinstance(i, int): return i if i.startswith("0x:bigint "): i = i[10:] return int(i, 16) if i.startswith("0x") or any(char in "abcdef" for char in i.lower()): return int(i, 16) return int(i, 10) def parse_args_from_string_into_array( stream: str, pos: int, delim: str = " " ) -> Tuple[List[str], int]: """Parse YUL options into array.""" args = [] arg = "" # Loop until end of stream or until encountering newline or '{' while pos < len(stream) and stream[pos] not in ("\n", "{"): if stream[pos] == delim: args.append(arg) arg = "" else: arg += stream[pos] pos += 1 if arg: args.append(arg) return args, pos class CodeInFiller(BaseModel, TagDependentData): """Not compiled code source in test filler.""" label: str | None source: str _dependencies: Dict[str, Tag] = PrivateAttr(default_factory=dict) @model_validator(mode="before") @classmethod def validate_from_string(cls, code: Any) -> Any: """Validate from string, separating label from code source.""" if isinstance(code, str): label_marker = ":label" # Only look for label at the beginning of the string (possibly # after whitespace) stripped_code = code.lstrip() # Parse :label into code options label = None source = code # Check if the code starts with :label if stripped_code.startswith(label_marker): # Calculate the position in the original string label_index = code.find(label_marker) space_index = code.find(" ", label_index + len(label_marker) + 1) if space_index == -1: label = code[label_index + len(label_marker) + 1 :] source = "" # No source after label else: label = code[label_index + len(label_marker) + 1 : space_index] source = code[space_index + 1 :].strip() return {"label": label, "source": source} return code def model_post_init(self, context: Any) -> None: """Initialize StateStaticTest.""" super().model_post_init(context) tag_dependencies: Dict[str, Tag] = {} for tag_type in {ContractTag, SenderTag}: for m in tag_type.regex_pattern.finditer(self.source): new_tag = tag_type.model_validate(m.group(0)) tag_dependencies[new_tag.name] = new_tag self._dependencies = tag_dependencies def compiled(self, tags: TagDict) -> bytes: """Compile the code from source to bytes.""" raw_code = self.source if isinstance(raw_code, int): # Users pass code as int (very bad) hex_str = format(raw_code, "02x") return bytes.fromhex(hex_str) if not isinstance(raw_code, str): raise ValueError(f"code is of type {type(raw_code)} but expected a string: {raw_code}") if len(raw_code) == 0: return b"" compiled_code = "" def replace_tags(raw_code: str, keep_prefix: bool) -> str: for tag in self._dependencies.values(): if tag.name not in tags: raise ValueError(f"Tag {tag} not found in tags") substitution_address = f"{tag.resolve(tags)}" if not keep_prefix and substitution_address.startswith("0x"): substitution_address = substitution_address[2:] # Use the original string if available, otherwise construct a # pattern if hasattr(tag, "original_string") and tag.original_string: raw_code = raw_code.replace(tag.original_string, substitution_address) else: raw_code = re.sub(f"<\\w+:{tag.name}(:0x.+)?>", substitution_address, raw_code) return raw_code raw_marker = ":raw 0x" raw_index = raw_code.find(raw_marker) if raw_index == -1: raw_index = replace_tags(raw_code, True).find(raw_marker) abi_marker = ":abi" abi_index = raw_code.find(abi_marker) yul_marker = ":yul" yul_index = raw_code.find(yul_marker) # Parse :raw or 0x if raw_index != -1 or raw_code.lstrip().startswith("0x"): raw_code = replace_tags(raw_code, False) # Parse :raw if raw_index != -1: compiled_code = raw_code[raw_index + len(raw_marker) :] # Parse plain code 0x elif raw_code.lstrip().startswith("0x"): compiled_code = raw_code[2:].lower() else: raw_code = replace_tags(raw_code, True) # Parse :yul if yul_index != -1: option_start = yul_index + len(yul_marker) options: list[str] = [] native_yul_options: str = "" if raw_code[option_start:].lstrip().startswith("{"): # No yul options, proceed to code parsing source_start = option_start else: opt, source_start = parse_args_from_string_into_array( raw_code, option_start + 1 ) for arg in opt: if arg == "object" or arg == '"C"': native_yul_options += arg + " " else: options.append(arg) with tempfile.NamedTemporaryFile(mode="w+", delete=False, suffix=".yul") as tmp: tmp.write(native_yul_options + raw_code[source_start:]) tmp_path = tmp.name compiled_code = compile_yul( source_file=tmp_path, evm_version=options[0] if len(options) >= 1 else None, optimize=options[1] if len(options) >= 2 else None, )[2:] # Parse :abi elif abi_index != -1: abi_encoding = raw_code[abi_index + len(abi_marker) + 1 :] tokens = abi_encoding.strip().split() abi = tokens[0] function_signature = function_signature_to_4byte_selector(abi) parameter_str = re.sub(r"^\w+", "", abi).strip() parameter_types = parameter_str.strip("()").split(",") if len(tokens) > 1: function_parameters = encode( [parameter_str], [ [ # treat big ints as 256bits int(t.lower(), 0) & ((1 << 256) - 1) if parameter_types[t_index] == "uint" # treat positive values as True else int(t.lower(), 0) > 0 if parameter_types[t_index] == "bool" else False and ValueError("unhandled parameter_types") for t_index, t in enumerate(tokens[1:]) ] ], ) return function_signature + function_parameters return function_signature # Parse lllc code elif ( raw_code.lstrip().startswith("{") or raw_code.lstrip().startswith("(asm") or raw_code.lstrip().startswith(":raw 0x") ): with tempfile.NamedTemporaryFile(mode="w+", delete=False) as tmp: tmp.write(raw_code) tmp_path = tmp.name # - using lllc result = subprocess.run(["lllc", tmp_path], capture_output=True, text=True) # - using docker: If the running machine does not have lllc # installed, we can use docker to run lllc, but we need to # start a container first, and the process is generally slower. # # from .docker import get_lllc_container_id # result = subprocess.run( ["docker", # "exec", # get_lllc_container_id(), # "lllc", # tmp_path[5:]], # capture_output=True, # text=True # ) compiled_code = "".join(result.stdout.splitlines()) else: raise Exception(f'Error parsing code: "{raw_code}"') try: return bytes.fromhex(compiled_code) except ValueError as e: raise Exception(f'Error parsing compile code: "{raw_code}"') from e def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" return self._dependencies class AddressTag: """ Represents an address tag like: - . - . - . """ def __init__(self, tag_type: str, tag_name: str, original_string: str): """Initialize address tag.""" self.tag_type = tag_type # "eoa", "contract", or "coinbase" # e.g., "sender", "target", or address for 2-part tags self.tag_name = tag_name self.original_string = original_string def __str__(self) -> str: """Return original tag string.""" return self.original_string def __repr__(self) -> str: """Return debug representation.""" return f"AddressTag(type={self.tag_type}, name={self.tag_name})" def __eq__(self, other: object) -> bool: """Check equality based on original string.""" if isinstance(other, AddressTag): return self.original_string == other.original_string return False def __hash__(self) -> int: """Hash based on original string for use as dict key.""" return hash(self.original_string) @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: Any ) -> core_schema.CoreSchema: """Pydantic core schema for AddressTag.""" return core_schema.str_schema() def parse_address_or_tag(value: Any) -> Union[Address, AddressTag]: """Parse either a regular address or an address tag.""" if not isinstance(value, str): # Non-string values should be converted to Address normally return Address(value, left_padding=True) # Check if it matches tag pattern: # - , , # - , # Try 3-part pattern first (type:name:address) tag_pattern_3_part = r"^<(eoa|contract|coinbase):([^:]+):(.+)>$" match = re.match(tag_pattern_3_part, value.strip()) if match: tag_type = match.group(1) tag_name = match.group(2) address_part = match.group(3) # For 3-part tags, the tag_name is the middle part return AddressTag(tag_type, tag_name, value.strip()) # Try 2-part pattern (type:address) tag_pattern_2_part = r"^<(eoa|contract|coinbase):(.+)>$" match = re.match(tag_pattern_2_part, value.strip()) if match: tag_type = match.group(1) address_part = match.group(2) # For 2-part tags, use the address as the tag_name return AddressTag(tag_type, address_part, value.strip()) # Regular address string return Address(value, left_padding=True) def parse_address_or_tag_for_access_list(value: Any) -> Union[Address, str]: """ Parse either a regular address or an address tag, keeping tags as strings for later resolution. """ if not isinstance(value, str): # Non-string values should be converted to Address normally return Address(value, left_padding=True) # Check if it matches a tag pattern tag_pattern = r"^<(eoa|contract|coinbase):.+>$" if re.match(tag_pattern, value.strip()): # Return the tag string as-is for later resolution return value.strip() else: # Regular address string return Address(value, left_padding=True) AddressInFiller = Annotated[Address, BeforeValidator(lambda a: Address(a, left_padding=True))] AddressOrTagInFiller = ContractTag | SenderTag | Address AddressOrCreateTagInFiller = ContractTag | SenderTag | CreateTag | Address ValueInFiller = Annotated[HexNumber, BeforeValidator(parse_hex_number)] ValueOrTagInFiller = ContractTag | SenderTag | ValueInFiller ValueOrCreateTagInFiller = ContractTag | SenderTag | CreateTag | ValueInFiller HashOrTagInFiller = SenderKeyTag | Hash class AccessListInFiller(CamelModel, TagDependentData): """ Access List for transactions in fillers that can contain address tags. """ address: AddressOrTagInFiller storage_keys: List[Hash] = Field(default_factory=list) def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" if isinstance(self.address, Tag): return { self.address.name: self.address, } return {} def resolve(self, tags: TagDict) -> AccessList: """Resolve the access list.""" kwargs: Dict[str, Address | List[Hash]] = {} if isinstance(self.address, Tag): kwargs["address"] = self.address.resolve(tags) else: kwargs["address"] = self.address kwargs["storageKeys"] = [Hash(key, left_padding=True) for key in self.storage_keys] return AccessList(**kwargs) ================================================ FILE: src/ethereum_test_specs/static_state/common/compile_yul.py ================================================ """compile yul with arguments.""" import subprocess from pathlib import Path from typing import LiteralString def safe_solc_command( source_file: Path | str, evm_version: str | None = None, optimize: str | None = None ) -> list[str]: """Safely construct solc command with validated inputs.""" # Validate source file path source_path = Path(source_file) if not source_path.exists(): raise FileNotFoundError(f"Source file not found: {source_file}") cmd: list[str] = ["solc"] # Add EVM version if provided (validate against known versions) if evm_version: valid_versions = { "homestead", "tangerineWhistle", "spuriousDragon", "byzantium", "constantinople", "petersburg", "istanbul", "berlin", "london", "paris", "shanghai", "cancun", } if evm_version not in valid_versions: raise ValueError(f"Invalid EVM version: {evm_version}") cmd.extend(["--evm-version", evm_version]) # Add compilation flags (using literal strings) strict_assembly: LiteralString = "--strict-assembly" cmd.append(strict_assembly) if optimize is None: optimize_flag: LiteralString = "--optimize" yul_opts: LiteralString = "--yul-optimizations=:" cmd.extend([optimize_flag, yul_opts]) cmd.append(str(source_path)) return cmd def compile_yul( source_file: str, evm_version: str | None = None, optimize: str | None = None ) -> str: """ Compiles a Yul source file using solc and returns the binary representation. Arguments: source_file (str): Path to the Yul source file. evm_version(str, optional): The EVM version to use (e.g., 'istanbul'). Defaults to None. optimize (any, optional): If provided (non-None), optimization flags are not added. If None, additional optimization flags will be included. Returns: str: The binary representation prefixed with "0x". Raises: Exception: If the solc output contains an error message. """ cmd = safe_solc_command(source_file, evm_version, optimize) # Execute the solc command and capture both stdout and stderr result = subprocess.run( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, check=False ) out = result.stdout # Check for errors in the output if "Error" in out: raise Exception(f"Yul compilation error:\n{out}") # Search for the "Binary representation:" line and get the following line # as the binary lines = out.splitlines() binary_line = "" for i, line in enumerate(lines): if "Binary representation:" in line: if i + 1 < len(lines): binary_line = lines[i + 1].strip() break return f"0x{binary_line}" ================================================ FILE: src/ethereum_test_specs/static_state/common/tags.py ================================================ """Classes to manage tags in static state tests.""" import re from abc import ABC, abstractmethod from typing import Any, ClassVar, Dict, Generic, Mapping, TypeVar from pydantic import BaseModel, model_validator from ethereum_test_base_types import Address, Bytes, Hash, HexNumber from ethereum_test_types import EOA, compute_create2_address, compute_create_address TagDict = Dict[str, Address | EOA] T = TypeVar("T", bound=Address | Hash) class Tag(BaseModel, Generic[T]): """Tag.""" name: str type: ClassVar[str] = "" regex_pattern: ClassVar[re.Pattern] = re.compile(r"<\w+:(\w+)(:[^>]+)?") # Store the original tag string for replacement original_string: str | None = None def __hash__(self) -> int: """Hash based on original string for use as dict key.""" return hash(f"{self.__class__.__name__}:{self.name}") @model_validator(mode="before") @classmethod def validate_from_string(cls, data: Any) -> Any: """Validate the generic tag from string: .""" if isinstance(data, str): if m := cls.regex_pattern.match(data): name = m.group(1) return {"name": name, "original_string": data} return data def resolve(self, tags: TagDict) -> T: """Resolve the tag.""" raise NotImplementedError("Subclasses must implement this method") class TagDependentData(ABC): """Data for resolving tags.""" @abstractmethod def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" pass class AddressTag(Tag[Address]): """Address tag.""" def resolve(self, tags: TagDict) -> Address: """Resolve the tag.""" assert self.name in tags, f"Tag {self.name} not found in tags" return Address(tags[self.name]) class ContractTag(AddressTag): """Contract tag.""" type: ClassVar[str] = "contract" regex_pattern: ClassVar[re.Pattern] = re.compile(r"]+)(?::(0x[a-fA-F0-9]+))?>") # Optional hard-coded address for debugging debug_address: Address | None = None @model_validator(mode="before") @classmethod def validate_from_string(cls, data: Any) -> Any: """ Validate the contract tag from string: or . """ if isinstance(data, str): if m := cls.regex_pattern.match(data): name_or_addr = m.group(1) debug_addr = m.group(2) if m.lastindex and m.lastindex >= 2 else None # Check if it's a 2-part format with an address if name_or_addr.startswith("0x") and len(name_or_addr) == 42: # For 2-part format, use the full address as the name This # ensures all references to the same address get the same # tag name return { "name": name_or_addr, "debug_address": Address(name_or_addr), "original_string": data, } else: # Normal 3-part format - use the name as-is result = {"name": name_or_addr, "original_string": data} if debug_addr: result["debug_address"] = Address(debug_addr) return result return data class CreateTag(AddressTag): """Contract derived from a another contract via CREATE.""" create_type: str nonce: HexNumber | None = None salt: HexNumber | None = None initcode: Bytes | None = None type: ClassVar[str] = "contract" regex_pattern: ClassVar[re.Pattern] = re.compile(r"<(create|create2):(\w+):(\w+):?(\w+)?>") @model_validator(mode="before") @classmethod def validate_from_string(cls, data: Any) -> Any: """Validate the create tag from string: .""" if isinstance(data, str): if m := cls.regex_pattern.match(data): create_type = m.group(1) name = m.group(2) kwargs = { "create_type": create_type, "name": name, "original_string": data, } if create_type == "create": kwargs["nonce"] = m.group(3) elif create_type == "create2": kwargs["salt"] = m.group(3) kwargs["initcode"] = m.group(4) return kwargs return data def resolve(self, tags: TagDict) -> Address: """Resolve the tag.""" assert self.name in tags, f"Tag {self.name} not found in tags" if self.create_type == "create": assert self.nonce is not None, "Nonce is required for create" return compute_create_address(address=tags[self.name], nonce=self.nonce) elif self.create_type == "create2": assert self.salt is not None, "Salt is required for create2" assert self.initcode is not None, "Init code is required for create2" return compute_create2_address( address=tags[self.name], salt=self.salt, initcode=self.initcode ) else: raise ValueError(f"Invalid create type: {self.create_type}") class SenderTag(AddressTag): """Sender tag.""" type: ClassVar[str] = "eoa" regex_pattern: ClassVar[re.Pattern] = re.compile(r"") # Optional hard-coded address for debugging debug_address: Address | None = None @model_validator(mode="before") @classmethod def validate_from_string(cls, data: Any) -> Any: """Validate the sender tag from string: .""" if isinstance(data, str): if m := cls.regex_pattern.match(data): name = m.group(1) debug_addr = m.group(2) if m.lastindex and m.lastindex >= 2 else None result = {"name": name, "original_string": data} if debug_addr: result["debug_address"] = Address(debug_addr) return result return data class SenderKeyTag(Tag[EOA]): """Sender eoa tag.""" type: ClassVar[str] = "eoa" regex_pattern: ClassVar[re.Pattern] = re.compile(r"") debug_key: str | None = None # Optional hard-coded key for debugging @model_validator(mode="before") @classmethod def validate_from_string(cls, data: Any) -> Any: """Validate the sender key tag from string: .""" if isinstance(data, str): if m := cls.regex_pattern.match(data): name = m.group(1) debug_key = m.group(2) if m.lastindex and m.lastindex >= 2 else None result = {"name": name, "original_string": data} if debug_key: result["debug_key"] = debug_key return result return data def resolve(self, tags: TagDict) -> EOA: """Resolve the tag.""" assert self.name in tags, f"Tag {self.name} not found in tags" result = tags[self.name] assert isinstance(result, EOA), f"Expected EOA but got {type(result)} for tag {self.name}" return result ================================================ FILE: src/ethereum_test_specs/static_state/environment.py ================================================ """Environment structure of ethereum/tests fillers.""" from typing import Any, Dict from pydantic import BaseModel, ConfigDict, Field, model_validator from ethereum_test_base_types import Address from ethereum_test_types import Environment from .common import AddressOrTagInFiller, Tag, TagDict, ValueInFiller class EnvironmentInStateTestFiller(BaseModel): """Class that represents an environment filler.""" current_coinbase: AddressOrTagInFiller = Field(..., alias="currentCoinbase") current_gas_limit: ValueInFiller = Field(..., alias="currentGasLimit") current_number: ValueInFiller = Field(..., alias="currentNumber") current_timestamp: ValueInFiller = Field(..., alias="currentTimestamp") current_difficulty: ValueInFiller | None = Field( ValueInFiller("0x020000"), alias="currentDifficulty" ) current_random: ValueInFiller | None = Field(ValueInFiller("0x020000"), alias="currentRandom") current_base_fee: ValueInFiller | None = Field(ValueInFiller("0x0a"), alias="currentBaseFee") current_excess_blob_gas: ValueInFiller | None = Field(None, alias="currentExcessBlobGas") model_config = ConfigDict(extra="forbid") @model_validator(mode="after") def check_fields(self) -> "EnvironmentInStateTestFiller": """Validate all fields are set.""" if self.current_difficulty is None: if self.current_random is None: raise ValueError("If `currentDifficulty` is not set, `currentRandom` must be set!") return self def get_environment(self, tags: TagDict) -> Environment: """Get the environment.""" kwargs: Dict[str, Any] = {} if isinstance(self.current_coinbase, Tag): assert self.current_coinbase.name in tags, ( f"Tag {self.current_coinbase.name} to resolve coinbase not found in tags" ) kwargs["fee_recipient"] = self.current_coinbase.resolve(tags) else: kwargs["fee_recipient"] = Address(self.current_coinbase) if self.current_difficulty is not None: kwargs["difficulty"] = self.current_difficulty if self.current_random is not None: kwargs["prev_randao"] = self.current_random if self.current_gas_limit is not None: kwargs["gas_limit"] = self.current_gas_limit if self.current_number is not None: kwargs["number"] = self.current_number if self.current_timestamp is not None: kwargs["timestamp"] = self.current_timestamp if self.current_base_fee is not None: kwargs["base_fee_per_gas"] = self.current_base_fee if self.current_excess_blob_gas is not None: kwargs["excess_blob_gas"] = self.current_excess_blob_gas return Environment(**kwargs) ================================================ FILE: src/ethereum_test_specs/static_state/expect_section.py ================================================ """Expect section structure of ethereum/tests fillers.""" import re from enum import StrEnum from typing import Annotated, Any, Dict, Iterator, List, Mapping, Set, Union from pydantic import ( BaseModel, BeforeValidator, Field, ValidatorFunctionWrapHandler, field_validator, model_validator, ) from ethereum_test_base_types import ( Account, Address, CamelModel, EthereumTestRootModel, HexNumber, Storage, ) from ethereum_test_exceptions import TransactionExceptionInstanceOrList from ethereum_test_forks import Fork, get_forks from ethereum_test_types import Alloc from .common import ( AddressOrCreateTagInFiller, CodeInFiller, Tag, TagDependentData, TagDict, ValueInFiller, ValueOrCreateTagInFiller, ) class Indexes(BaseModel): """Class that represents an index filler.""" data: int | List[Union[int, str]] | List[int] | str = Field(-1) gas: int | List[Union[int, str]] | List[int] | str = Field(-1) value: int | List[Union[int, str]] | List[int] | str = Field(-1) def validate_any_string_as_none(v: Any) -> Any: """Validate "ANY" as None.""" if type(v) is str and v == "ANY": return None return v class StorageInExpectSection(EthereumTestRootModel, TagDependentData): """Class that represents a storage in expect section filler.""" root: Dict[ ValueOrCreateTagInFiller, Annotated[ValueOrCreateTagInFiller | None, BeforeValidator(validate_any_string_as_none)], ] def tag_dependencies(self) -> Mapping[str, Tag]: """Get storage dependencies.""" tag_dependencies = {} for key, value in self.root.items(): if isinstance(key, Tag): tag_dependencies[key.name] = key if isinstance(value, Tag): tag_dependencies[value.name] = value return tag_dependencies def resolve(self, tags: TagDict) -> Storage: """Resolve the account with the given tags.""" storage = Storage() for key, value in self.root.items(): resolved_key: HexNumber | Address if isinstance(key, Tag): resolved_key = key.resolve(tags) else: resolved_key = key if value is None: storage.set_expect_any(resolved_key) elif isinstance(value, Tag): storage[resolved_key] = value.resolve(tags) else: storage[resolved_key] = value return storage def __contains__(self, key: Address) -> bool: """Check if the storage contains a key.""" return key in self.root def __iter__(self) -> Iterator[ValueOrCreateTagInFiller]: # type: ignore[override] """Iterate over the storage.""" return iter(self.root) class AccountInExpectSection(BaseModel, TagDependentData): """Class that represents an account in expect section filler.""" balance: ValueInFiller | None = None code: CodeInFiller | None = None nonce: ValueInFiller | None = None storage: StorageInExpectSection | None = None @model_validator(mode="wrap") # type: ignore[misc] @classmethod def validate_should_not_exist( cls, v: Any, handler: ValidatorFunctionWrapHandler ) -> "AccountInExpectSection | None": """ Validate the "shouldnotexist" field, which makes this validator return `None`. """ if isinstance(v, dict): if "shouldnotexist" in v: return None return handler(v) def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" tag_dependencies: Dict[str, Tag] = {} if self.code is not None: tag_dependencies.update(self.code.tag_dependencies()) if self.storage is not None: tag_dependencies.update(self.storage.tag_dependencies()) return tag_dependencies def resolve(self, tags: TagDict) -> Account: """Resolve the account with the given tags.""" account_kwargs: Dict[str, Any] = {} if self.storage is not None: account_kwargs["storage"] = self.storage.resolve(tags) if self.code is not None: account_kwargs["code"] = self.code.compiled(tags) if self.balance is not None: account_kwargs["balance"] = self.balance if self.nonce is not None: account_kwargs["nonce"] = self.nonce return Account(**account_kwargs) class CMP(StrEnum): """Comparison action.""" LE = "<=" GE = ">=" LT = "<" GT = ">" EQ = "=" class ForkConstraint(BaseModel): """Single fork with an operand.""" operand: CMP fork: Fork @field_validator("fork", mode="before") @classmethod def parse_fork_synonyms(cls, value: Any) -> Any: """Resolve fork synonyms.""" if value == "EIP158": value = "Byzantium" return value @model_validator(mode="before") @classmethod def parse_from_string(cls, data: Any) -> Any: """Parse a fork with operand from a string.""" if isinstance(data, str): for cmp in CMP: if data.startswith(cmp): fork = data.removeprefix(cmp) return { "operand": cmp, "fork": fork, } return { "operand": CMP.EQ, "fork": data, } return data def match(self, fork: Fork) -> bool: """Return whether the fork satisfies the operand evaluation.""" match self.operand: case CMP.LE: return fork <= self.fork case CMP.GE: return fork >= self.fork case CMP.LT: return fork < self.fork case CMP.GT: return fork > self.fork case CMP.EQ: return fork == self.fork case _: raise ValueError(f"Invalid operand: {self.operand}") class ForkSet(EthereumTestRootModel): """Set of forks.""" root: Set[Fork] @model_validator(mode="before") @classmethod def parse_from_list_or_string(cls, value: Any) -> Set[Fork]: """Parse fork_with_operand `>=Cancun` into {Cancun, Prague, ...}.""" fork_set: Set[Fork] = set() if not isinstance(value, list): value = [value] for fork_with_operand in value: matches = re.findall(r"(<=|<|>=|>|=)([^<>=]+)", fork_with_operand) if matches: all_fork_constraints = [ ForkConstraint.model_validate(f"{op}{fork.strip()}") for op, fork in matches ] else: all_fork_constraints = [ForkConstraint.model_validate(fork_with_operand.strip())] for fork in get_forks(): for f in all_fork_constraints: if not f.match(fork): # If any constraint does not match, skip adding break else: # All constraints match, add the fork to the set fork_set.add(fork) return fork_set def __hash__(self) -> int: """Return the hash of the fork set.""" h = hash(None) for fork in sorted([str(f) for f in self]): h ^= hash(fork) return h def __contains__(self, fork: Fork) -> bool: """Check if the fork set contains a fork.""" return fork in self.root def __iter__(self) -> Iterator[Fork]: # type: ignore[override] """Iterate over the fork set.""" return iter(self.root) def __len__(self) -> int: """Return the length of the fork set.""" return len(self.root) class ResultInFiller(EthereumTestRootModel, TagDependentData): """ Post section in state test filler. A value of `None` for an address means that the account should not be in the state trie at the end of the test. """ root: Dict[AddressOrCreateTagInFiller, AccountInExpectSection | None] def tag_dependencies(self) -> Mapping[str, Tag]: """Return all tags used in the result.""" tag_dependencies: Dict[str, Tag] = {} for address, account in self.root.items(): if isinstance(address, Tag): tag_dependencies[address.name] = address if account is None: continue tag_dependencies.update(account.tag_dependencies()) return tag_dependencies def resolve(self, tags: TagDict) -> Alloc: """Resolve the post section.""" post = Alloc() for address, account in self.root.items(): if isinstance(address, Tag): resolved_address = address.resolve(tags) else: resolved_address = Address(address) if account is None: continue post[resolved_address] = account.resolve(tags) return post def __contains__(self, address: Address) -> bool: """Check if the result contains an address.""" return address in self.root def __iter__(self) -> Iterator[AddressOrCreateTagInFiller]: # type: ignore[override] """Iterate over the result.""" return iter(self.root) def __len__(self) -> int: """Return the length of the result.""" return len(self.root) class ExpectException(EthereumTestRootModel): """Expect exception model.""" root: Dict[ForkSet, TransactionExceptionInstanceOrList] def __getitem__(self, fork: Fork) -> TransactionExceptionInstanceOrList: """Get an expectation for a given fork.""" for k in self.root: if fork in k: return self.root[k] raise KeyError(f"Fork {fork} not found in expectations.") def __contains__(self, fork: Fork) -> bool: """Check if the expect exception contains a fork.""" return fork in self.root def __iter__(self) -> Iterator[ForkSet]: # type: ignore[override] """Iterate over the expect exception.""" return iter(self.root) def __len__(self) -> int: """Return the length of the expect exception.""" return len(self.root) class ExpectSectionInStateTestFiller(CamelModel): """Expect section in state test filler.""" indexes: Indexes = Field(default_factory=Indexes) network: ForkSet result: ResultInFiller expect_exception: ExpectException | None = None def model_post_init(self, __context: Any) -> None: """Validate that the expectation is coherent.""" if self.expect_exception is None: return all_forks: Set[Fork] = set() for current_fork_set in self.expect_exception: for fork in current_fork_set: assert fork not in all_forks all_forks.add(fork) def has_index(self, d: int, g: int, v: int) -> bool: """Check if there is index set in indexes.""" d_match: bool = False g_match: bool = False v_match: bool = False # Check if data index match if isinstance(self.indexes.data, int): d_match = True if self.indexes.data == -1 or self.indexes.data == d else False elif isinstance(self.indexes.data, list): d_match = True if self.indexes.data.count(d) else False # Check if gas index match if isinstance(self.indexes.gas, int): g_match = True if self.indexes.gas == -1 or self.indexes.gas == g else False elif isinstance(self.indexes.gas, list): g_match = True if self.indexes.gas.count(g) else False # Check if value index match if isinstance(self.indexes.value, int): v_match = True if self.indexes.value == -1 or self.indexes.value == v else False elif isinstance(self.indexes.value, list): v_match = True if self.indexes.value.count(v) else False return d_match and g_match and v_match ================================================ FILE: src/ethereum_test_specs/static_state/general_transaction.py ================================================ """General transaction structure of ethereum/tests fillers.""" from typing import Any, Dict, Generator, List, Mapping from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator from ethereum_test_base_types import Address, CamelModel, EthereumTestRootModel, Hash from ethereum_test_exceptions import TransactionExceptionInstanceOrList from ethereum_test_types import Transaction from .common import ( AccessListInFiller, AddressOrTagInFiller, CodeInFiller, HashOrTagInFiller, Tag, TagDependentData, TagDict, ValueInFiller, ) class DataWithAccessList(CamelModel, TagDependentData): """Class that represents data with access list.""" data: CodeInFiller access_list: List[AccessListInFiller] | None = None @field_validator("access_list", mode="before") @classmethod def convert_keys_to_hash( cls, access_list: List[Dict[str, Any]] | None ) -> List[Dict[str, Any]] | None: # noqa: N805 """Fix keys.""" if access_list is None: return None for entry in access_list: if "storageKeys" in entry: entry["storageKeys"] = [ Hash(key, left_padding=True) for key in entry["storageKeys"] ] return access_list def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" tag_dependencies: Dict[str, Tag] = {} if self.access_list is not None: for entry in self.access_list: tag_dependencies.update(entry.tag_dependencies()) if self.data is not None and isinstance(self.data, CodeInFiller): tag_dependencies.update(self.data.tag_dependencies()) return tag_dependencies @model_validator(mode="wrap") @classmethod def wrap_data_only(cls, data: Any, handler: Any) -> "DataWithAccessList": """Wrap data only if it is not a dictionary.""" if not isinstance(data, dict) and not isinstance(data, DataWithAccessList): data = {"data": data} return handler(data) class LabeledDataIndex(BaseModel): """Represents an index with a label if any.""" index: int label: str | None = None def __str__(self) -> str: """Transform into a string that can be part of a test name.""" if self.label is not None: return self.label return f"{self.index}" class LabeledDataList(EthereumTestRootModel): """Class that represents a list of labeled data.""" root: List[DataWithAccessList] def __getitem__(self, label_or_index: int | str) -> DataWithAccessList: """Get an item by label or index.""" if isinstance(label_or_index, int): return self.root[label_or_index] if isinstance(label_or_index, str): for item in self.root: if item.data.label == label_or_index: return item raise KeyError(f"Label/index {label_or_index} not found in data indexes") def __contains__(self, label_or_index: int | str) -> bool: """ Return True if the LabeledDataList contains the given label/index. """ if isinstance(label_or_index, int): return label_or_index < len(self.root) if isinstance(label_or_index, str): for item in self.root: if item.data.label == label_or_index: return True return False def __len__(self) -> int: """Return the length of the list.""" return len(self.root) def __iter__(self) -> Generator[LabeledDataIndex, None, None]: # type: ignore """Return the iterator of the root list.""" for i, item in enumerate(self.root): labeled_data_index = LabeledDataIndex(index=i) if item.data.label is not None: labeled_data_index.label = item.data.label yield labeled_data_index class GeneralTransactionInFiller(BaseModel, TagDependentData): """Class that represents general transaction in filler.""" data: LabeledDataList gas_limit: List[ValueInFiller] = Field(..., alias="gasLimit") gas_price: ValueInFiller | None = Field(None, alias="gasPrice") nonce: ValueInFiller | None to: AddressOrTagInFiller | None value: List[ValueInFiller] secret_key: HashOrTagInFiller = Field(..., alias="secretKey") max_fee_per_gas: ValueInFiller | None = Field(None, alias="maxFeePerGas") max_priority_fee_per_gas: ValueInFiller | None = Field(None, alias="maxPriorityFeePerGas") max_fee_per_blob_gas: ValueInFiller | None = Field(None, alias="maxFeePerBlobGas") blob_versioned_hashes: List[Hash] | None = Field(None, alias="blobVersionedHashes") model_config = ConfigDict(extra="forbid") def tag_dependencies(self) -> Mapping[str, Tag]: """Get tag dependencies.""" tag_dependencies: Dict[str, Tag] = {} if self.data: for idx in self.data: data = self.data[idx.index] tag_dependencies.update(data.tag_dependencies()) if self.to is not None and isinstance(self.to, Tag): tag_dependencies[self.to.name] = self.to if self.secret_key is not None and isinstance(self.secret_key, Tag): tag_dependencies[self.secret_key.name] = self.secret_key return tag_dependencies @field_validator("to", mode="before") def check_single_key(cls, to: Any) -> Any: # noqa: N805 """Creation transaction.""" if to == "": to = None return to @model_validator(mode="after") def check_fields(self) -> "GeneralTransactionInFiller": """Validate all fields are set.""" if self.gas_price is None: if self.max_fee_per_gas is None or self.max_priority_fee_per_gas is None: raise ValueError( "If `gasPrice` is not set," " `maxFeePerGas` and `maxPriorityFeePerGas` must be set!" ) return self def get_transaction( self, tags: TagDict, d: int, g: int, v: int, exception: TransactionExceptionInstanceOrList | None, ) -> Transaction: """Get the transaction.""" data_box = self.data[d] kwargs: Dict[str, Any] = {} if self.to is None: kwargs["to"] = None elif isinstance(self.to, Tag): kwargs["to"] = self.to.resolve(tags) else: kwargs["to"] = Address(self.to) kwargs["data"] = data_box.data.compiled(tags) if data_box.access_list is not None: kwargs["access_list"] = [entry.resolve(tags) for entry in data_box.access_list] kwargs["gas_limit"] = self.gas_limit[g] if isinstance(self.secret_key, Tag): sender = self.secret_key.resolve(tags) kwargs["secret_key"] = sender.key else: kwargs["secret_key"] = self.secret_key if self.value[v] > 0: kwargs["value"] = self.value[v] if self.gas_price is not None: kwargs["gas_price"] = self.gas_price if self.nonce is not None: kwargs["nonce"] = self.nonce if self.max_fee_per_gas is not None: kwargs["max_fee_per_gas"] = self.max_fee_per_gas if self.max_priority_fee_per_gas is not None: kwargs["max_priority_fee_per_gas"] = self.max_priority_fee_per_gas if self.max_fee_per_blob_gas is not None: kwargs["max_fee_per_blob_gas"] = self.max_fee_per_blob_gas if self.blob_versioned_hashes is not None: kwargs["blob_versioned_hashes"] = self.blob_versioned_hashes if exception is not None: kwargs["error"] = exception return Transaction(**kwargs) ================================================ FILE: src/ethereum_test_specs/static_state/state_static.py ================================================ """Ethereum General State Test filler static test spec parser.""" from typing import Any, Callable, ClassVar, List, Self, Set, Union import pytest from _pytest.mark.structures import ParameterSet from pydantic import BaseModel, ConfigDict, Field, model_validator from ethereum_test_forks import Fork from ethereum_test_types import Alloc from ..base_static import BaseStaticTest from ..state import StateTestFiller from .account import PreInFiller from .common import Tag from .environment import EnvironmentInStateTestFiller from .expect_section import ExpectSectionInStateTestFiller from .general_transaction import GeneralTransactionInFiller class Info(BaseModel): """Class that represents an info filler.""" comment: str | None = Field(None) pytest_marks: List[str] = Field(default_factory=list) class StateStaticTest(BaseStaticTest): """General State Test static filler from ethereum/tests.""" test_name: str = "" format_name: ClassVar[str] = "state_test" info: Info | None = Field(None, alias="_info") env: EnvironmentInStateTestFiller pre: PreInFiller transaction: GeneralTransactionInFiller expect: List[ExpectSectionInStateTestFiller] model_config = ConfigDict(extra="forbid") def model_post_init(self, context: Any) -> None: """Initialize StateStaticTest.""" super().model_post_init(context) @model_validator(mode="after") def match_labels(self) -> Self: """Replace labels in expect section with corresponding tx.d indexes.""" def parse_string_indexes(indexes: str) -> List[int]: """Parse index that are string in to list of int.""" if ":label" in indexes: # Parse labels in data indexes = indexes.replace(":label ", "") tx_matches: List[int] = [] for idx in self.transaction.data: if indexes == idx.label: tx_matches.append(idx.index) return tx_matches else: # Parse ranges in data start, end = map(int, indexes.lstrip().split("-")) return list(range(start, end + 1)) def parse_indexes( indexes: Union[int, str, list[Union[int, str]], list[str], list[int]], do_hint: bool = False, ) -> List[int] | int: """ Parse indexes and replace all ranges and labels into tx indexes. """ result: List[int] | int = [] if do_hint: print("Before: " + str(indexes)) if isinstance(indexes, int): result = indexes if isinstance(indexes, str): result = parse_string_indexes(indexes) if isinstance(indexes, list): result = [] for element in indexes: parsed = parse_indexes(element) if isinstance(parsed, int): result.append(parsed) else: result.extend(parsed) result = list(set(result)) if do_hint: print("After: " + str(result)) return result for expect_section in self.expect: expect_section.indexes.data = parse_indexes(expect_section.indexes.data) expect_section.indexes.gas = parse_indexes(expect_section.indexes.gas) expect_section.indexes.value = parse_indexes(expect_section.indexes.value) return self def fill_function(self) -> Callable: """Return a StateTest spec from a static file.""" # Check if this test uses tags has_tags = False tx_tag_dependencies = self.transaction.tag_dependencies() if tx_tag_dependencies: has_tags = True else: # Check expect sections for tags for expect in self.expect: result_tag_dependencies = expect.result.tag_dependencies() if result_tag_dependencies: has_tags = True break fully_tagged = True for address in self.pre.root: if not isinstance(address, Tag): fully_tagged = False break d_g_v_parameters: List[ParameterSet] = [] for d in self.transaction.data: for g in range(len(self.transaction.gas_limit)): for v in range(len(self.transaction.value)): exception_test = False for expect in self.expect: if expect.has_index(d.index, g, v) and expect.expect_exception is not None: exception_test = True # TODO: This does not take into account exceptions that # only happen on specific forks, but this requires a # covariant parametrize marks = [pytest.mark.exception_test] if exception_test else [] id_label = "" if len(self.transaction.data) > 1 or d.label is not None: if d.label is not None: id_label = f"{d}" else: id_label = f"d{d}" if len(self.transaction.gas_limit) > 1: id_label += f"-g{g}" if len(self.transaction.value) > 1: id_label += f"-v{v}" d_g_v_parameters.append(pytest.param(d.index, g, v, marks=marks, id=id_label)) @pytest.mark.valid_at(*self.get_valid_at_forks()) @pytest.mark.parametrize("d,g,v", d_g_v_parameters) def test_state_vectors( state_test: StateTestFiller, pre: Alloc, fork: Fork, d: int, g: int, v: int, ) -> None: for expect in self.expect: if expect.has_index(d, g, v): if fork in expect.network: tx_tag_dependencies = self.transaction.tag_dependencies() result_tag_dependencies = expect.result.tag_dependencies() all_dependencies = {**tx_tag_dependencies, **result_tag_dependencies} tags = self.pre.setup(pre, all_dependencies) env = self.env.get_environment(tags) exception = ( None if expect.expect_exception is None else expect.expect_exception[fork] ) tx = self.transaction.get_transaction(tags, d, g, v, exception) post = expect.result.resolve(tags) state_test( env=env, pre=pre, post=post, tx=tx, ) return pytest.fail(f"Expectation not found for d={d}, g={g}, v={v}, fork={fork}") if self.info and self.info.pytest_marks: for mark in self.info.pytest_marks: if mark == "pre_alloc_group": test_state_vectors = pytest.mark.pre_alloc_group( "separate", reason="Requires separate pre-alloc grouping" )(test_state_vectors) else: apply_mark = getattr(pytest.mark, mark) test_state_vectors = apply_mark(test_state_vectors) if has_tags: test_state_vectors = pytest.mark.tagged(test_state_vectors) if fully_tagged: test_state_vectors = pytest.mark.fully_tagged(test_state_vectors) else: test_state_vectors = pytest.mark.untagged(test_state_vectors) test_state_vectors = pytest.mark.pre_alloc_group( "separate", reason="Uses hard-coded addresses" )(test_state_vectors) if not fully_tagged: test_state_vectors = pytest.mark.pre_alloc_modify(test_state_vectors) return test_state_vectors def get_valid_at_forks(self) -> List[str]: """Return list of forks that are valid for this test.""" fork_set: Set[Fork] = set() for expect in self.expect: fork_set.update(expect.network) return sorted([str(f) for f in fork_set]) ================================================ FILE: src/ethereum_test_specs/tests/__init__.py ================================================ """Tests for the ethereum_test_specs package.""" ================================================ FILE: src/ethereum_test_specs/tests/helpers.py ================================================ """Helper methods used in the spec tests.""" from typing import Any, Dict def remove_info_metadata(fixture_json: Dict[str, Any]) -> None: # noqa: D103 for t in fixture_json: if "_info" in fixture_json[t]: info_keys = list(fixture_json[t]["_info"].keys()) for key in info_keys: if key != "hash": # remove keys that are not 'hash' del fixture_json[t]["_info"][key] ================================================ FILE: src/ethereum_test_specs/tests/test_benchmark.py ================================================ """ Tests for the BenchmarkTest class and its transaction splitting functionality. """ import pytest from ethereum_test_base_types import HexNumber from ethereum_test_specs.benchmark import BenchmarkTest from ethereum_test_types import Alloc, Environment, Transaction @pytest.mark.parametrize( "gas_benchmark_value_millions,expected_splits", [ (1, 1), # 1M / 16M = 1 transaction (10, 1), # 10M / 16M = 1 transaction (30, 2), # 30M / 16M = 2 transactions (16M + 14M) (45, 3), # 45M / 16M = 3 transactions (16M + 16M + 13M) (60, 4), # 60M / 16M = 4 transactions (16M + 16M + 16M + 12M) (100, 7), # 100M / 16M = 7 transactions (6x16M + 4M) (150, 10), # 150M / 16M = 10 transactions (9x16M + 6M) ], ) def test_split_transaction(gas_benchmark_value_millions: int, expected_splits: int) -> None: """ Test that transaction splitting works correctly for Osaka fork gas cap. """ gas_benchmark_value = gas_benchmark_value_millions * 1_000_000 gas_limit_cap = 16_000_000 # Osaka's transaction gas limit cap # Create a minimal BenchmarkTest instance benchmark_test = BenchmarkTest( pre=Alloc(), post=Alloc(), tx=Transaction(sender=HexNumber(0), to=HexNumber(0), nonce=0), env=Environment(), gas_benchmark_value=gas_benchmark_value, ) # Test the split_transaction method assert benchmark_test.tx is not None, "Transaction should not be None" split_txs = benchmark_test.split_transaction(benchmark_test.tx, gas_limit_cap) # Verify the number of transactions assert len(split_txs) == expected_splits, ( f"Expected {expected_splits} transactions for {gas_benchmark_value_millions}M gas, " f"got {len(split_txs)}" ) # Verify total gas equals the benchmark value total_gas = sum(tx.gas_limit for tx in split_txs) assert total_gas == gas_benchmark_value, ( f"Total gas {total_gas} doesn't match benchmark value {gas_benchmark_value}" ) # Verify no transaction exceeds the cap for i, tx in enumerate(split_txs): assert tx.gas_limit <= gas_limit_cap, ( f"Transaction {i} gas limit {tx.gas_limit} exceeds cap {gas_limit_cap}" ) # Verify nonces increment correctly for i, tx in enumerate(split_txs): assert tx.nonce == i, f"Transaction {i} has incorrect nonce {tx.nonce}" # Verify gas distribution for i, tx in enumerate(split_txs[:-1]): # All but last should be at cap assert tx.gas_limit == gas_limit_cap, ( f"Transaction {i} should have gas limit {gas_limit_cap}, got {tx.gas_limit}" ) # Last transaction should have the remainder if expected_splits > 1: expected_last_gas = gas_benchmark_value - (gas_limit_cap * (expected_splits - 1)) assert split_txs[-1].gas_limit == expected_last_gas, ( f"Last transaction should have {expected_last_gas} gas, got {split_txs[-1].gas_limit}" ) @pytest.mark.parametrize( "gas_benchmark_value,gas_limit_cap", [ (50_000_000, None), # No cap - should return single transaction (50_000_000, 100_000_000), # Cap higher than benchmark value ], ) def test_split_transaction_edge_cases(gas_benchmark_value: int, gas_limit_cap: int | None) -> None: """Test edge cases for transaction splitting.""" benchmark_test = BenchmarkTest( pre=Alloc(), post=Alloc(), tx=Transaction(sender=HexNumber(0), to=HexNumber(0), nonce=0, gas_limit=1_000_000_000), env=Environment(), gas_benchmark_value=gas_benchmark_value, ) assert benchmark_test.tx is not None, "Transaction should not be None" split_txs = benchmark_test.split_transaction(benchmark_test.tx, gas_limit_cap) # Should return single transaction in both cases assert len(split_txs) == 1, f"Expected 1 transaction, got {len(split_txs)}" if gas_limit_cap is None: # When no cap, gas_limit should be benchmark value assert split_txs[0].gas_limit == gas_benchmark_value else: # When cap > benchmark, gas_limit should be # min of tx.gas_limit and benchmark assert benchmark_test.tx is not None, "Transaction should not be None" assert split_txs[0].gas_limit == min(benchmark_test.tx.gas_limit, gas_benchmark_value) ================================================ FILE: src/ethereum_test_specs/tests/test_expect.py ================================================ """Test fixture post state (expect section) during state fixture generation.""" from typing import Any, Mapping, Type import pytest from ethereum_clis import TransitionTool from ethereum_test_base_types import Account, Address, Storage, TestAddress, TestPrivateKey from ethereum_test_exceptions import TransactionException from ethereum_test_fixtures import BlockchainFixture, FixtureFormat, StateFixture from ethereum_test_forks import Fork, get_deployed_forks from ethereum_test_tools import Block from ethereum_test_types import Alloc, Environment, Transaction, TransactionReceipt from ..blockchain import BlockchainEngineFixture, BlockchainTest from ..helpers import ( ExecutionExceptionMismatchError, TransactionReceiptMismatchError, UnexpectedExecutionFailError, UnexpectedExecutionSuccessError, ) from ..state import StateTest ADDRESS_UNDER_TEST = Address(0x01) @pytest.fixture def tx() -> Transaction: """Fixture set from the test's indirectly parametrized `tx` parameter.""" return Transaction(secret_key=TestPrivateKey) @pytest.fixture def pre(request: Any) -> Alloc: """Fixture set from the test's indirectly parametrized `pre` parameter.""" extra_accounts = {} if hasattr(request, "param"): extra_accounts = request.param return Alloc(extra_accounts | {TestAddress: Account(balance=(10**18))}) @pytest.fixture def post(request: Any) -> Alloc: # noqa: D103 """Fixture set from the test's indirectly parametrized `post` parameter.""" extra_accounts = {} if hasattr(request, "param"): extra_accounts = request.param return Alloc(extra_accounts) @pytest.fixture def fork() -> Fork: # noqa: D103 return get_deployed_forks()[-1] @pytest.fixture def state_test( # noqa: D103 pre: Mapping[Any, Any], post: Mapping[Any, Any], tx: Transaction ) -> StateTest: return StateTest( env=Environment(), pre=pre, post=post, tx=tx, ) # Storage value mismatch tests @pytest.mark.parametrize( "pre,post,expected_exception", [ ( # mismatch_1: 1:1 vs 1:2 {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x01"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=1, want=2, got=1), ), ( # mismatch_2: 1:1 vs 2:1 {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x01"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x02": "0x01"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=1, want=0, got=1), ), ( # mismatch_2_a: 1:1 vs 0:0 {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x01"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x00": "0x00"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=1, want=0, got=1), ), ( # mismatch_2_b: 1:1 vs empty {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x01"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=1, want=0, got=1), ), ( # mismatch_3: 0:0 vs 1:2 {ADDRESS_UNDER_TEST: Account(storage={"0x00": "0x00"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=1, want=2, got=0), ), ( # mismatch_3_a: empty vs 1:2 {ADDRESS_UNDER_TEST: Account(storage={}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=1, want=2, got=0), ), ( # mismatch_4: 0:3, 1:2 vs 1:2 {ADDRESS_UNDER_TEST: Account(storage={"0x00": "0x03", "0x01": "0x02"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=0, want=0, got=3), ), ( # mismatch_5: 1:2, 2:3 vs 1:2 {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02", "0x02": "0x03"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=2, want=0, got=3), ), ( # mismatch_6: 1:2 vs 1:2, 2:3 {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02"}, nonce=1)}, {ADDRESS_UNDER_TEST: Account(storage={"0x01": "0x02", "0x02": "0x03"})}, Storage.KeyValueMismatchError(address=ADDRESS_UNDER_TEST, key=2, want=3, got=0), ), ], indirect=["pre", "post"], ) def test_post_storage_value_mismatch( expected_exception: Storage.KeyValueMismatchError, state_test: StateTest, default_t8n: TransitionTool, fork: Fork, ) -> None: """ Test post state `Account.storage` exceptions during state test fixture generation. """ with pytest.raises(Storage.KeyValueMismatchError) as e_info: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) assert e_info.value == expected_exception # Nonce value mismatch tests @pytest.mark.parametrize( "pre,post", [ ({ADDRESS_UNDER_TEST: Account(nonce=1)}, {ADDRESS_UNDER_TEST: Account(nonce=2)}), ({ADDRESS_UNDER_TEST: Account(nonce=1)}, {ADDRESS_UNDER_TEST: Account(nonce=0)}), ({ADDRESS_UNDER_TEST: Account(nonce=1)}, {ADDRESS_UNDER_TEST: Account()}), ], indirect=["pre", "post"], ) def test_post_nonce_value_mismatch( pre: Alloc, post: Alloc, state_test: StateTest, default_t8n: TransitionTool, fork: Fork ) -> None: """ Test post state `Account.nonce` verification and exceptions during state test fixture generation. """ pre_account = pre[ADDRESS_UNDER_TEST] post_account = post[ADDRESS_UNDER_TEST] assert pre_account is not None assert post_account is not None pre_nonce = pre_account.nonce post_nonce = post_account.nonce if "nonce" not in post_account.model_fields_set: # no exception state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) return with pytest.raises(Account.NonceMismatchError) as e_info: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) assert e_info.value == Account.NonceMismatchError( address=ADDRESS_UNDER_TEST, want=post_nonce, got=pre_nonce ) # Code value mismatch tests @pytest.mark.parametrize( "pre,post", [ ({ADDRESS_UNDER_TEST: Account(code="0x02")}, {ADDRESS_UNDER_TEST: Account(code="0x01")}), ({ADDRESS_UNDER_TEST: Account(code="0x02")}, {ADDRESS_UNDER_TEST: Account(code="0x")}), ({ADDRESS_UNDER_TEST: Account(code="0x02")}, {ADDRESS_UNDER_TEST: Account()}), ], indirect=["pre", "post"], ) def test_post_code_value_mismatch( pre: Alloc, post: Alloc, state_test: StateTest, default_t8n: TransitionTool, fork: Fork ) -> None: """ Test post state `Account.code` verification and exceptions during state test fixture generation. """ pre_account = pre[ADDRESS_UNDER_TEST] post_account = post[ADDRESS_UNDER_TEST] assert pre_account is not None assert post_account is not None pre_code = pre_account.code post_code = post_account.code if "code" not in post_account.model_fields_set: # no exception state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) return with pytest.raises(Account.CodeMismatchError) as e_info: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) assert e_info.value == Account.CodeMismatchError( address=ADDRESS_UNDER_TEST, want=post_code, got=pre_code ) # Balance value mismatch tests @pytest.mark.parametrize( "pre,post", [ ({ADDRESS_UNDER_TEST: Account(balance=1)}, {ADDRESS_UNDER_TEST: Account(balance=2)}), ({ADDRESS_UNDER_TEST: Account(balance=1)}, {ADDRESS_UNDER_TEST: Account(balance=0)}), ({ADDRESS_UNDER_TEST: Account(balance=1)}, {ADDRESS_UNDER_TEST: Account()}), ], indirect=["pre", "post"], ) def test_post_balance_value_mismatch( pre: Alloc, post: Alloc, state_test: StateTest, default_t8n: TransitionTool, fork: Fork ) -> None: """ Test post state `Account.balance` verification and exceptions during state test fixture generation. """ pre_account = pre[ADDRESS_UNDER_TEST] post_account = post[ADDRESS_UNDER_TEST] assert pre_account is not None assert post_account is not None pre_balance = pre_account.balance post_balance = post_account.balance if "balance" not in post_account.model_fields_set: # no exception state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) return with pytest.raises(Account.BalanceMismatchError) as e_info: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) assert e_info.value == Account.BalanceMismatchError( address=ADDRESS_UNDER_TEST, want=post_balance, got=pre_balance ) # Account mismatch tests @pytest.mark.parametrize( "pre,post,exception_type", [ ( {ADDRESS_UNDER_TEST: Account(balance=1)}, {ADDRESS_UNDER_TEST: Account()}, None, ), ( {ADDRESS_UNDER_TEST: Account(balance=1)}, {ADDRESS_UNDER_TEST: Account(balance=1), Address(0x02): Account(balance=1)}, Alloc.MissingAccountError, ), ( {ADDRESS_UNDER_TEST: Account(balance=1)}, {}, None, ), ( {ADDRESS_UNDER_TEST: Account(balance=1)}, {ADDRESS_UNDER_TEST: Account.NONEXISTENT}, Alloc.UnexpectedAccountError, ), ], indirect=["pre", "post"], ) def test_post_account_mismatch( state_test: StateTest, default_t8n: TransitionTool, fork: Fork, exception_type: Type[Exception] | None, ) -> None: """ Test post state `Account` verification and exceptions during state test fixture generation. """ if exception_type is None: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) return with pytest.raises(exception_type) as _: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=StateFixture) # Transaction result mismatch tests @pytest.mark.parametrize( "tx,exception_type", [ pytest.param( Transaction( secret_key=TestPrivateKey, gas_limit=20_999, error=TransactionException.SENDER_NOT_EOA, ), ExecutionExceptionMismatchError, id="TransactionExecutionExceptionMismatchError", ), pytest.param( Transaction( secret_key=TestPrivateKey, error=TransactionException.INTRINSIC_GAS_TOO_LOW, expected_receipt=TransactionReceipt(gas_used=21_000), ), UnexpectedExecutionSuccessError, id="TransactionUnexpectedExecutionSuccessError", ), pytest.param( Transaction( secret_key=TestPrivateKey, gas_limit=20_999, expected_receipt=TransactionReceipt(gas_used=21_000), ), UnexpectedExecutionFailError, id="TransactionUnexpectedExecutionFailError", ), pytest.param( Transaction( secret_key=TestPrivateKey, expected_receipt=TransactionReceipt(gas_used=21_001), ), TransactionReceiptMismatchError, id="TransactionReceiptMismatchError", ), pytest.param( Transaction( secret_key=TestPrivateKey, gas_limit=20_999, expected_receipt=TransactionReceipt(gas_used=21_001), ), UnexpectedExecutionFailError, id="TransactionUnexpectedExecutionFailError+TransactionReceiptMismatchError", ), pytest.param( Transaction( secret_key=TestPrivateKey, error=TransactionException.INTRINSIC_GAS_TOO_LOW, expected_receipt=TransactionReceipt(gas_used=21_001), ), UnexpectedExecutionSuccessError, id="TransactionUnexpectedExecutionSuccessError+TransactionReceiptMismatchError", ), ], ) @pytest.mark.parametrize( "fixture_format", [ StateFixture, BlockchainFixture, ], ) def test_transaction_expectation( state_test: StateTest, default_t8n: TransitionTool, fork: Fork, exception_type: Type[Exception] | None, fixture_format: FixtureFormat, ) -> None: """ Test a transaction that has an unexpected error, expected error, or expected a specific value in its receipt. """ if ( exception_type == ExecutionExceptionMismatchError and not default_t8n.exception_mapper.reliable ): pytest.xfail( reason="Exceptions need to be better described in the t8n tool " f"({default_t8n.__class__.__name__})." ) if exception_type is None: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) else: with pytest.raises(exception_type) as _: state_test.generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) @pytest.mark.parametrize( "intermediate_state,expected_exception", [ pytest.param( { TestAddress: Account(nonce=1), Address(0x01): Account(balance=1), }, None, id="NoException", ), pytest.param( { TestAddress: Account(nonce=2), Address(0x01): Account(balance=1), }, Account.NonceMismatchError, id="NonceMismatchError", ), pytest.param( { TestAddress: Account(nonce=1), Address(0x01): Account(balance=2), }, Account.BalanceMismatchError, id="BalanceMismatchError", ), ], ) @pytest.mark.parametrize( "fixture_format", [ BlockchainFixture, BlockchainEngineFixture, ], ) def test_block_intermediate_state( pre: Alloc, default_t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, intermediate_state: Mapping[Any, Any], expected_exception: Type[Exception] | None, ) -> None: """Validate the state when building blockchain.""" env = Environment() to = Address(0x01) tx = Transaction(gas_limit=100_000, to=to, value=1, nonce=0, secret_key=TestPrivateKey) tx_2 = Transaction(gas_limit=100_000, to=to, value=1, nonce=1, secret_key=TestPrivateKey) block_1 = Block( txs=[tx], expected_post_state={ TestAddress: Account(nonce=1), to: Account(balance=1), }, ) block_2 = Block(txs=[], expected_post_state=intermediate_state) block_3 = Block( txs=[tx_2], expected_post_state={ TestAddress: Account(nonce=2), to: Account(balance=2), }, ) if expected_exception: with pytest.raises(expected_exception) as _: BlockchainTest( genesis_environment=env, pre=pre, post=block_3.expected_post_state, blocks=[block_1, block_2, block_3], ).generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) return else: BlockchainTest( genesis_environment=env, pre=pre, post=block_3.expected_post_state, blocks=[block_1, block_2, block_3], ).generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) ================================================ FILE: src/ethereum_test_specs/tests/test_fixtures.py ================================================ """Test suite for `ethereum_test_specs` fixture generation.""" import json import os from typing import Any, List, Mapping import pytest from click.testing import CliRunner import cli.check_fixtures from ethereum_clis import TransitionTool from ethereum_test_base_types import AccessList, Account, Address, Hash from ethereum_test_exceptions import TransactionException from ethereum_test_fixtures import ( BaseFixture, BlockchainEngineFixture, BlockchainFixture, BlockchainFixtureCommon, FixtureFormat, StateFixture, ) from ethereum_test_forks import Berlin, Cancun, Fork, Istanbul, London, Paris, Shanghai from ethereum_test_types import Alloc, Environment, Transaction, TransactionType from ethereum_test_vm import Opcodes as Op from ..blockchain import Block, BlockchainTest, Header from ..state import StateTest from .helpers import remove_info_metadata @pytest.fixture() def fixture_hash(fork: Fork) -> bytes: """Set the fixture hash based on the fork.""" if fork == Berlin: return bytes.fromhex("e57ad774ca") elif fork == London: return bytes.fromhex("3714102a4c") elif fork == Cancun: return bytes.fromhex("2885c707e3") raise ValueError(f"Unexpected fork: {fork}") def test_check_helper_fixtures() -> None: """ Test that the framework's pydantic models serialization and deserialization work correctly and that they are compatible with the helper fixtures defined in ./fixtures/ by using the check_fixtures.py script. """ runner = CliRunner() args = [ "--input", "src/ethereum_test_specs/tests/fixtures", "--quiet", "--stop-on-error", ] result = runner.invoke(cli.check_fixtures.check_fixtures, args) assert result.exit_code == 0, ( "check_fixtures detected errors in the json fixtures:" + f"\n{result}" ) @pytest.mark.parametrize( "fork", [ Berlin, London, Cancun, ], ) def test_make_genesis(fork: Fork, fixture_hash: bytes, default_t8n: TransitionTool) -> None: # noqa: D103 env = Environment(gas_limit=100_000_000_000_000_000) pre = Alloc( { Address(0x0BA1A9CE0BA1A9CE): Account(balance=0x0BA1A9CE0BA1A9CE), Address(0xC0DE): Account( code=Op.SSTORE(0, Op.ADD(1, 2)) + Op.RETURN(0, 32), balance=0x0BA1A9CE0BA1A9CE, nonce=1, ), } ) fixture = BlockchainTest( genesis_environment=env, pre=pre, post={}, blocks=[], tag="some_state_test", ).generate(t8n=default_t8n, fork=fork, fixture_format=BlockchainFixture) assert isinstance(fixture, BlockchainFixture) assert fixture.genesis is not None assert fixture.genesis.block_hash is not None assert fixture.genesis.block_hash.startswith(fixture_hash) @pytest.mark.parametrize( "fork,fixture_format,tx_type", [ (Istanbul, BlockchainFixture, TransactionType.LEGACY), (London, BlockchainFixture, TransactionType.LEGACY), (Cancun, BlockchainFixture, TransactionType.LEGACY), (Paris, BlockchainEngineFixture, TransactionType.LEGACY), (Shanghai, BlockchainEngineFixture, TransactionType.LEGACY), (Cancun, BlockchainEngineFixture, TransactionType.LEGACY), (Paris, StateFixture, TransactionType.LEGACY), (Shanghai, StateFixture, TransactionType.LEGACY), (Cancun, StateFixture, TransactionType.LEGACY), (Cancun, StateFixture, TransactionType.ACCESS_LIST), ], ) def test_fill_state_test( fork: Fork, fixture_format: FixtureFormat, tx_type: TransactionType, default_t8n: TransitionTool, ) -> None: """Test `ethereum_test.filler.fill_fixtures` with `StateTest`.""" env = Environment( fee_recipient="0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", difficulty=0x20000, gas_limit=10000000000, number=1, timestamp=1000, ) pre = { 0x1000000000000000000000000000000000000000: Account(code="0x4660015500"), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": Account(balance=1000000000000000000000), } if tx_type == TransactionType.LEGACY: tx = Transaction( chain_id=0x0, nonce=0, to="0x1000000000000000000000000000000000000000", gas_limit=100000000, gas_price=10, protected=False, ) elif tx_type == TransactionType.ACCESS_LIST: tx = Transaction( ty=0x1, chain_id=0x1, nonce=0, to="0x1000000000000000000000000000000000000000", gas_limit=100000000, gas_price=10, access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], ) post = { "0x1000000000000000000000000000000000000000": Account( code="0x4660015500", storage={"0x01": "0x01"} ), } generated_fixture = StateTest( env=env, pre=pre, post=post, tx=tx, tag="my_chain_id_test", ).generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) assert generated_fixture.__class__ == fixture_format fixture = { f"000/my_chain_id_test/{fork}/tx_type_{tx_type}": generated_fixture.json_dict_with_info( hash_only=True ), } format_name = fixture_format.format_name expected_json_file = f"chainid_{fork.name().lower()}_{format_name}_tx_type_{tx_type}.json" with open( os.path.join( "src", "ethereum_test_specs", "tests", "fixtures", expected_json_file, ) ) as f: expected = json.load(f) remove_info_metadata(expected) remove_info_metadata(fixture) assert fixture == expected class TestFillBlockchainValidTxs: """Test `BlockchainTest.generate()` and blockchain fixtures.""" @pytest.fixture def fork(self, request: Any) -> Fork: # noqa: D102 return request.param @pytest.fixture def check_hive(self, fork: Fork) -> bool: # noqa: D102 return fork == Shanghai @pytest.fixture def expected_json_file(self, fork: Fork, check_hive: bool) -> str: # noqa: D102 if fork == London and not check_hive: return "blockchain_london_valid_filled.json" elif fork == Shanghai and check_hive: return "blockchain_shanghai_valid_filled_engine.json" raise ValueError(f"Unexpected fork/check_hive combination: {fork}/{check_hive}") @pytest.fixture def pre(self, fork: Fork) -> Mapping[Any, Any]: # noqa: D102 pre = { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": Account(balance=0x1000000000000000000), "0xd02d72E067e77158444ef2020Ff2d325f929B363": Account( balance=0x1000000000000000000, nonce=1 ), "0xcccccccccccccccccccccccccccccccccccccccc": Account( balance=0x10000000000, nonce=1, code=( Op.SSTORE(Op.NUMBER(), Op.BASEFEE()) + Op.SSTORE(Op.ADD(Op.NUMBER(), 0x1000), Op.SUB(Op.GASPRICE(), Op.BASEFEE())) + Op.SSTORE(Op.ADD(Op.NUMBER(), 0x2000), Op.SELFBALANCE()) + Op.STOP() ), ), "0xcccccccccccccccccccccccccccccccccccccccd": Account( balance=0x20000000000, nonce=1, code=( (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH20("0xcccccccccccccccccccccccccccccccccccccccc") + Op.GAS + Op.DELEGATECALL + Op.POP ), ), 0xC0DE: Account( balance=0, nonce=1, code=( (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH20("0xcccccccccccccccccccccccccccccccccccccccc") + Op.GAS + Op.DELEGATECALL + Op.POP ), ), "0xccccccccccccccccccccccccccccccccccccccce": Account( balance=0x20000000000, nonce=1, code=( (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH2("0x1000") + Op.PUSH2("0xc0de") + Op.GAS + Op.CALL + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH20("0xcccccccccccccccccccccccccccccccccccccccc") + Op.GAS + Op.DELEGATECALL + Op.SWAP1 + Op.POP + Op.POP ), ), } return pre @pytest.fixture def blocks(self) -> List[Block]: # noqa: D102 blocks: List[Block] = [ Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x01", nonce=0, gas_limit=1000000, max_priority_fee_per_gas=1, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), ], ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0201", nonce=1, gas_limit=1000000, max_priority_fee_per_gas=10, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0202", nonce=2, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ), Transaction( data="0x0203", nonce=3, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE", ), ], ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0301", nonce=4, gas_limit=1000000, max_priority_fee_per_gas=1000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0303", nonce=5, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE", ), Transaction( data="0x0304", nonce=6, gas_limit=1000000, max_priority_fee_per_gas=100000, max_fee_per_gas=100000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ), ], ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0401", nonce=7, gas_limit=1000000, max_priority_fee_per_gas=1000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0403", nonce=8, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE", ), Transaction( data="0x0404", nonce=9, gas_limit=1000000, max_priority_fee_per_gas=100000, max_fee_per_gas=100000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ), ], ), ] return blocks @pytest.fixture def post(self) -> Mapping[Any, Any]: # noqa: D102 post = { "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC": Account( storage={ # BASEFEE and the tip in block 1 0x0001: 875, # BASEFEE 0x1001: 1, # tip # Block 2 0x0002: 766, # BASEFEE 0x1002: 10, # tip # Block 3 0x0003: 671, 0x1003: 329, # Block 4 0x0004: 588, 0x1004: 412, # SELFBALANCE, always the same 0x2001: 0x010000000000, 0x2002: 0x010000000000, 0x2003: 0x010000000000, 0x2004: 0x010000000000, } ), "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD": Account( storage={ # Block 2 0x0002: 766, # BASEFEE 0x1002: 100, # tip # Block 3 0x0003: 671, 0x1003: 99329, # Block 4 0x0004: 588, 0x1004: 99412, # SELFBALANCE, always the same 0x2002: 0x020000000000, 0x2003: 0x020000000000, 0x2004: 0x020000000000, } ), "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE": Account( storage={ # Block 2 0x0002: 766, # BASEFEE 0x1002: 100, # tip 0x0003: 671, 0x1003: 100, 0x0004: 588, 0x1004: 100, # SELFBALANCE 0x2002: 0x01FFFFFFF000, 0x2003: 0x01FFFFFFE000, 0x2004: 0x01FFFFFFD000, } ), 0xC0DE: Account( storage={ # Block 2 0x0002: 766, 0x1002: 100, # Block 3 0x0003: 671, 0x1003: 100, # Block 4 0x0004: 588, 0x1004: 100, # SELFBALANCE 0x2002: 0x1000, 0x2003: 0x2000, 0x2004: 0x3000, } ), } return post @pytest.fixture def genesis_environment(self) -> Environment: # noqa: D102 return Environment( gas_limit=100_000_000_000_000_000, base_fee_per_gas=1000, fee_recipient="0x0000000000000000000000000000000000000000", ) @pytest.fixture def fixture_format(self, check_hive: bool) -> FixtureFormat: # noqa: D102 return BlockchainEngineFixture if check_hive else BlockchainFixture @pytest.fixture def blockchain_test_fixture( # noqa: D102 self, fork: Fork, pre: Mapping[Any, Any], post: Mapping[Any, Any], blocks: List[Block], genesis_environment: Environment, fixture_format: FixtureFormat, default_t8n: TransitionTool, ) -> BaseFixture: return BlockchainTest( pre=pre, post=post, blocks=blocks, genesis_environment=genesis_environment, tag="my_blockchain_test_valid_txs", ).generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) @pytest.mark.parametrize("fork", [London, Shanghai], indirect=True) def test_fill_blockchain_valid_txs( # noqa: D102 self, fork: Fork, fixture_format: FixtureFormat, expected_json_file: str, blockchain_test_fixture: BlockchainFixture, ) -> None: assert blockchain_test_fixture.__class__ == fixture_format # BlockchainEngineFixture inherits from BlockchainEngineFixtureCommon # (not BlockchainFixtureCommon) from ethereum_test_fixtures.blockchain import BlockchainEngineFixtureCommon assert isinstance( blockchain_test_fixture, (BlockchainFixtureCommon, BlockchainEngineFixtureCommon) ) fixture_name = f"000/my_blockchain_test/{fork.name()}" fixture = { fixture_name: blockchain_test_fixture.json_dict_with_info(hash_only=True), } with open( os.path.join( "src", "ethereum_test_specs", "tests", "fixtures", expected_json_file, ) ) as f: expected = json.load(f) remove_info_metadata(expected) remove_info_metadata(fixture) assert fixture_name in fixture assert fixture_name in expected assert fixture[fixture_name] == expected[fixture_name] @pytest.mark.parametrize("fork", [London], indirect=True) def test_fixture_header_join(self, blockchain_test_fixture: BlockchainFixture) -> None: """Test `FixtureHeader.join()`.""" block = blockchain_test_fixture.blocks[0] new_difficulty = block.header.difficulty - 1 # type: ignore new_state_root = Hash(12345) # See description of https://github.com/ethereum/execution-spec-tests/pull/398 new_transactions_root = 0x100 header_new_fields = Header( difficulty=new_difficulty, state_root=new_state_root, transactions_trie=new_transactions_root, ) updated_block_header = header_new_fields.apply(block.header) # type: ignore assert updated_block_header.difficulty == new_difficulty assert updated_block_header.state_root == new_state_root assert updated_block_header.transactions_trie == Hash(new_transactions_root) assert updated_block_header.block_hash != block.header.block_hash # type: ignore assert isinstance(updated_block_header.transactions_trie, Hash) @pytest.mark.parametrize( "fork,check_hive,expected_json_file", [ (London, False, "blockchain_london_invalid_filled.json"), (Shanghai, True, "blockchain_shanghai_invalid_filled_engine.json"), ], ) def test_fill_blockchain_invalid_txs( fork: Fork, check_hive: bool, expected_json_file: str, default_t8n: TransitionTool ) -> None: """Test `ethereum_test.filler.fill_fixtures` with `BlockchainTest`.""" pre = { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": Account(balance=0x1000000000000000000), "0xd02d72E067e77158444ef2020Ff2d325f929B363": Account( balance=0x1000000000000000000, nonce=1 ), "0xcccccccccccccccccccccccccccccccccccccccc": Account( balance=0x10000000000, nonce=1, code=( Op.SSTORE(Op.NUMBER(), Op.BASEFEE()) + Op.SSTORE(Op.ADD(Op.NUMBER(), 0x1000), Op.SUB(Op.GASPRICE(), Op.BASEFEE())) + Op.SSTORE(Op.ADD(Op.NUMBER(), 0x2000), Op.SELFBALANCE()) + Op.STOP() ), ), "0xcccccccccccccccccccccccccccccccccccccccd": Account( balance=0x20000000000, nonce=1, code=( (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH20("0xcccccccccccccccccccccccccccccccccccccccc") + Op.GAS + Op.DELEGATECALL + Op.POP ), ), 0xC0DE: Account( balance=0, nonce=1, code=( (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH20("0xcccccccccccccccccccccccccccccccccccccccc") + Op.GAS + Op.DELEGATECALL + Op.POP ), ), "0xccccccccccccccccccccccccccccccccccccccce": Account( balance=0x20000000000, nonce=1, code=( (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH2("0x1000") + Op.PUSH2("0xc0de") + Op.GAS + Op.CALL + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + (Op.PUSH1(0) if fork < Shanghai else Op.PUSH0) + Op.DUP1 + Op.PUSH20("0xcccccccccccccccccccccccccccccccccccccccc") + Op.GAS + Op.DELEGATECALL + Op.SWAP1 + Op.POP + Op.POP ), ), } blocks: List[Block] = [ Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x01", nonce=0, gas_limit=1000000, max_priority_fee_per_gas=1, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), ], ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0201", nonce=1, gas_limit=1000000, max_priority_fee_per_gas=10, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0202", nonce=2, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ), Transaction( data="0x0203", nonce=3, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE", ), ], ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0301", nonce=4, gas_limit=1000000, max_priority_fee_per_gas=1000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0302", nonce=5, gas_limit=1000000, max_priority_fee_per_gas=100000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", error=TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS, ), ], exception=TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS, ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0301", nonce=4, gas_limit=1000000, max_priority_fee_per_gas=1000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0303", nonce=5, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE", ), Transaction( data="0x0304", nonce=6, gas_limit=1000000, max_priority_fee_per_gas=100000, max_fee_per_gas=100000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ), ], ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0401", nonce=7, gas_limit=1000000, max_priority_fee_per_gas=1000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0402", nonce=8, gas_limit=1000000, max_priority_fee_per_gas=100000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", error=TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS, ), ], exception=TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS, ), Block( fee_recipient="0xba5e000000000000000000000000000000000000", txs=[ Transaction( data="0x0401", nonce=7, gas_limit=1000000, max_priority_fee_per_gas=1000, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ), Transaction( data="0x0403", nonce=8, gas_limit=1000000, max_priority_fee_per_gas=100, max_fee_per_gas=1000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE", ), Transaction( data="0x0404", nonce=9, gas_limit=1000000, max_priority_fee_per_gas=100000, max_fee_per_gas=100000, to="0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ), ], ), ] post = { "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC": Account( storage={ # BASEFEE and the tip in block 1 0x0001: 875, # BASEFEE 0x1001: 1, # tip # Block 2 0x0002: 766, # BASEFEE 0x1002: 10, # tip # Block 3 0x0003: 671, 0x1003: 329, # Block 4 0x0004: 588, 0x1004: 412, # SELFBALANCE, always the same 0x2001: 0x010000000000, 0x2002: 0x010000000000, 0x2003: 0x010000000000, 0x2004: 0x010000000000, } ), "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD": Account( storage={ # Block 2 0x0002: 766, # BASEFEE 0x1002: 100, # tip # Block 3 0x0003: 671, 0x1003: 99329, # Block 4 0x0004: 588, 0x1004: 99412, # SELFBALANCE, always the same 0x2002: 0x020000000000, 0x2003: 0x020000000000, 0x2004: 0x020000000000, } ), "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE": Account( storage={ # Block 2 0x0002: 766, # BASEFEE 0x1002: 100, # tip 0x0003: 671, 0x1003: 100, 0x0004: 588, 0x1004: 100, # SELFBALANCE 0x2002: 0x01FFFFFFF000, 0x2003: 0x01FFFFFFE000, 0x2004: 0x01FFFFFFD000, } ), 0xC0DE: Account( storage={ # Block 2 0x0002: 766, 0x1002: 100, # Block 3 0x0003: 671, 0x1003: 100, # Block 4 0x0004: 588, 0x1004: 100, # SELFBALANCE 0x2002: 0x1000, 0x2003: 0x2000, 0x2004: 0x3000, } ), } # We start genesis with a baseFee of 1000 genesis_environment = Environment( gas_limit=100_000_000_000_000_000, base_fee_per_gas=1000, fee_recipient="0x0000000000000000000000000000000000000000", ) fixture_format: FixtureFormat = BlockchainEngineFixture if check_hive else BlockchainFixture generated_fixture = BlockchainTest( pre=pre, post=post, blocks=blocks, genesis_environment=genesis_environment, ).generate(t8n=default_t8n, fork=fork, fixture_format=fixture_format) assert generated_fixture.__class__ == fixture_format # BlockchainEngineFixture inherits from BlockchainEngineFixtureCommon # (not BlockchainFixtureCommon) from ethereum_test_fixtures.blockchain import BlockchainEngineFixtureCommon assert isinstance(generated_fixture, (BlockchainFixtureCommon, BlockchainEngineFixtureCommon)) fixture_name = f"000/my_blockchain_test/{fork.name()}" fixture = { fixture_name: generated_fixture.json_dict_with_info(hash_only=True), } with open( os.path.join( "src", "ethereum_test_specs", "tests", "fixtures", expected_json_file, ) ) as f: expected = json.load(f) remove_info_metadata(expected) remove_info_metadata(fixture) assert fixture_name in fixture assert fixture_name in expected assert fixture[fixture_name] == expected[fixture_name] ================================================ FILE: src/ethereum_test_specs/tests/test_transaction.py ================================================ """Test suite for the transaction spec test generation.""" import json import os import pytest from ethereum_test_fixtures import TransactionFixture from ethereum_test_forks import Fork, Shanghai from ethereum_test_types import Transaction from ..transaction import TransactionTest from .helpers import remove_info_metadata @pytest.mark.parametrize( "name, tx, fork", [ pytest.param("simple_type_0", Transaction(), Shanghai), ], ) def test_transaction_test_filling(name: str, tx: Transaction, fork: Fork) -> None: """Test the transaction test filling.""" generated_fixture = TransactionTest(tx=tx.with_signature_and_sender()).generate( t8n=None, # type: ignore fork=fork, fixture_format=TransactionFixture, ) assert generated_fixture.__class__ == TransactionFixture fixture_json_dict = generated_fixture.json_dict_with_info() fixture = { "fixture": fixture_json_dict, } expected_json_file = f"tx_{name}_{fork.name().lower()}.json" with open( os.path.join( "src", "ethereum_test_specs", "tests", "fixtures", expected_json_file, ) ) as f: expected = json.load(f) remove_info_metadata(expected) remove_info_metadata(fixture) assert fixture == expected ================================================ FILE: src/ethereum_test_specs/tests/test_types.py ================================================ """Test types from ethereum_test_specs.""" import pytest from ethereum_test_base_types import Address, Bloom, Bytes, Hash, HeaderNonce from ethereum_test_fixtures.blockchain import FixtureHeader from ..blockchain import Header fixture_header_ones = FixtureHeader( parent_hash=Hash(1), ommers_hash=Hash(1), fee_recipient=Address(1), state_root=Hash(1), transactions_trie=Hash(1), receipts_root=Hash(1), logs_bloom=Bloom(1), difficulty=1, number=1, gas_limit=1, gas_used=1, timestamp=1, extra_data=Bytes([1]), prev_randao=Hash(1), nonce=HeaderNonce(1), base_fee_per_gas=1, withdrawals_root=Hash(1), blob_gas_used=1, excess_blob_gas=1, # hash=Hash(1), ) @pytest.mark.parametrize( "fixture_header,modifier,fixture_header_expected", [ pytest.param( fixture_header_ones, Header(), fixture_header_ones, id="default_header", ), pytest.param( fixture_header_ones, Header( state_root="0x0000000000000000000000000000000000000000000000000000000000000100" ), fixture_header_ones.copy( state_root="0x0000000000000000000000000000000000000000000000000000000000000100" ), id="state_root_as_str", ), pytest.param( fixture_header_ones, Header(state_root=100), fixture_header_ones.copy(state_root=100), id="state_root_as_int", ), pytest.param( fixture_header_ones, Header(state_root=Hash(100)), fixture_header_ones.copy(state_root=100), id="state_root_as_hash", ), pytest.param( fixture_header_ones, Header(withdrawals_root=Header.REMOVE_FIELD), # state_root is not removable fixture_header_ones.copy(withdrawals_root=None), id="state_root_as_header_remove_field", ), pytest.param( fixture_header_ones, Header(state_root=None), fixture_header_ones, id="state_root_as_none", ), pytest.param( fixture_header_ones, Header( logs_bloom="0x00000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000100" ), fixture_header_ones.copy( logs_bloom="0x00000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000100" ), id="bloom_as_str", ), pytest.param( fixture_header_ones, Header(logs_bloom=100), fixture_header_ones.copy(logs_bloom=100), id="bloom_as_int", ), pytest.param( fixture_header_ones, Header(logs_bloom=Bloom(100)), fixture_header_ones.copy(logs_bloom=100), id="bloom_as_hash", ), pytest.param( fixture_header_ones, Header( state_root="0x0000000000000000000000000000000000000000000000000000000000000100", logs_bloom=Bloom(200), difficulty=300, ), fixture_header_ones.copy( state_root=0x100, logs_bloom=200, difficulty=300, ), id="multiple_fields", ), ], ) def test_fixture_header_join( fixture_header: FixtureHeader, modifier: Header, fixture_header_expected: FixtureHeader ) -> None: """Test that the join method works as expected.""" assert modifier.apply(fixture_header) == fixture_header_expected ================================================ FILE: src/ethereum_test_specs/transaction.py ================================================ """Ethereum transaction test spec definition and filler.""" from typing import Callable, ClassVar, Generator, Sequence, Type from ethereum_clis import TransitionTool from ethereum_test_execution import ( BaseExecute, ExecuteFormat, LabeledExecuteFormat, TransactionPost, ) from ethereum_test_fixtures import ( BaseFixture, FixtureFormat, LabeledFixtureFormat, TransactionFixture, ) from ethereum_test_fixtures.transaction import FixtureResult from ethereum_test_forks import Fork from ethereum_test_types import Alloc, Transaction from .base import BaseTest class TransactionTest(BaseTest): """ Filler type that tests the transaction over the period of a single block. """ tx: Transaction pre: Alloc | None = None supported_fixture_formats: ClassVar[Sequence[FixtureFormat | LabeledFixtureFormat]] = [ TransactionFixture, ] supported_execute_formats: ClassVar[Sequence[LabeledExecuteFormat]] = [ LabeledExecuteFormat( TransactionPost, "transaction_test", "An execute test derived from a transaction test", ), ] def make_transaction_test_fixture( self, fork: Fork, ) -> TransactionFixture: """Create a fixture from the transaction test definition.""" if self.tx.error is not None: result = FixtureResult( exception=self.tx.error, hash=None, intrinsic_gas=0, sender=None, ) else: intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas = intrinsic_gas_cost_calculator( calldata=self.tx.data, contract_creation=self.tx.to is None, access_list=self.tx.access_list, authorization_list_or_count=self.tx.authorization_list, ) result = FixtureResult( exception=None, hash=self.tx.hash, intrinsic_gas=intrinsic_gas, sender=self.tx.sender, ) return TransactionFixture( result={ fork: result, }, transaction=self.tx.with_signature_and_sender().rlp(), ) def generate( self, t8n: TransitionTool, fork: Fork, fixture_format: FixtureFormat, ) -> BaseFixture: """Generate the TransactionTest fixture.""" del t8n self.check_exception_test(exception=self.tx.error is not None) if fixture_format == TransactionFixture: return self.make_transaction_test_fixture(fork) raise Exception(f"Unknown fixture format: {fixture_format}") def execute( self, *, fork: Fork, execute_format: ExecuteFormat, ) -> BaseExecute: """Execute the transaction test by sending it to the live network.""" del fork if execute_format == TransactionPost: return TransactionPost( blocks=[[self.tx]], post={}, ) raise Exception(f"Unsupported execute format: {execute_format}") TransactionTestSpec = Callable[[str], Generator[TransactionTest, None, None]] TransactionTestFiller = Type[TransactionTest] ================================================ FILE: src/ethereum_test_tools/__init__.py ================================================ """ Module containing tools for generating cross-client Ethereum execution layer tests. """ from ethereum_test_base_types import ( AccessList, Account, Address, Bytes, Hash, Storage, TestAddress, TestAddress2, TestPrivateKey, TestPrivateKey2, ) from ethereum_test_base_types.reference_spec import ReferenceSpec, ReferenceSpecTypes from ethereum_test_benchmark import ( BenchmarkCodeGenerator, ExtCallGenerator, JumpLoopGenerator, ) from ethereum_test_exceptions import ( BlockException, EngineAPIError, EOFException, TransactionException, ) from ethereum_test_fixtures import BaseFixture, FixtureCollector from ethereum_test_specs import ( BaseTest, BenchmarkTest, BenchmarkTestFiller, BlobsTest, BlobsTestFiller, BlockchainTest, BlockchainTestFiller, EOFStateTest, EOFStateTestFiller, EOFTest, EOFTestFiller, StateTest, StateTestFiller, TransactionTest, TransactionTestFiller, ) from ethereum_test_specs.blockchain import Block, Header from ethereum_test_types import ( EOA, Alloc, AuthorizationTuple, BalAccountChange, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageChange, BalStorageSlot, Blob, BlockAccessList, ChainConfig, ConsolidationRequest, DepositRequest, Environment, NetworkWrappedTransaction, Removable, Requests, TestParameterGroup, Transaction, TransactionReceipt, Withdrawal, WithdrawalRequest, add_kzg_version, ceiling_division, compute_create2_address, compute_create_address, compute_eofcreate_address, keccak256, ) from ethereum_test_vm import ( Bytecode, EVMCodeType, Macro, Macros, MemoryVariable, Opcode, OpcodeCallArg, Opcodes, UndefinedOpcodes, call_return_code, ) from .tools_code import ( CalldataCase, Case, CodeGasMeasure, Conditional, Initcode, Switch, While, ) from .utility.generators import ( DeploymentTestType, generate_system_contract_deploy_test, generate_system_contract_error_test, ) from .utility.pytest import extend_with_defaults __all__ = ( "AccessList", "Account", "Address", "Alloc", "AuthorizationTuple", "BalAccountChange", "BalBalanceChange", "BalCodeChange", "BalNonceChange", "BalStorageChange", "BalStorageSlot", "BaseFixture", "BaseTest", "BenchmarkCodeGenerator", "BenchmarkTest", "BenchmarkTestFiller", "Blob", "BlockAccessList", "BlobsTest", "BlobsTestFiller", "Block", "BlockchainTest", "BlockchainTestFiller", "BlockException", "Bytecode", "Bytes", "CalldataCase", "Case", "ChainConfig", "CodeGasMeasure", "Conditional", "ConsolidationRequest", "ExtCallGenerator", "DeploymentTestType", "DepositRequest", "EngineAPIError", "Environment", "EOA", "EOFException", "EOFStateTest", "EOFStateTestFiller", "EOFTest", "EOFTestFiller", "EVMCodeType", "FixtureCollector", "Hash", "Header", "Initcode", "JumpLoopGenerator", "Macro", "Macros", "MemoryVariable", "NetworkWrappedTransaction", "Opcode", "OpcodeCallArg", "Opcodes", "ReferenceSpec", "ReferenceSpecTypes", "Removable", "Requests", "StateTest", "StateTestFiller", "Storage", "Switch", "TestAddress", "TestAddress2", "TestParameterGroup", "TestPrivateKey", "TestPrivateKey2", "Transaction", "TransactionException", "TransactionReceipt", "TransactionTest", "TransactionTestFiller", "UndefinedOpcodes", "While", "Withdrawal", "WithdrawalRequest", "add_kzg_version", "call_return_code", "ceiling_division", "compute_create_address", "compute_create2_address", "compute_eofcreate_address", "extend_with_defaults", "generate_system_contract_deploy_test", "generate_system_contract_error_test", "keccak256", "vm", ) ================================================ FILE: src/ethereum_test_tools/py.typed ================================================ ================================================ FILE: src/ethereum_test_tools/tests/__init__.py ================================================ """`ethereum_test_tools` verification tests.""" ================================================ FILE: src/ethereum_test_tools/tests/test_code.py ================================================ """Test suite for `ethereum_test.code` module.""" from string import Template from typing import Mapping import pytest from semver import Version from ethereum_clis import TransitionTool from ethereum_test_base_types import Account, Address, Hash, TestAddress, TestPrivateKey from ethereum_test_fixtures import BlockchainFixture from ethereum_test_forks import ( Cancun, Fork, Homestead, Shanghai, get_deployed_forks, ) from ethereum_test_specs import StateTest from ethereum_test_types import Alloc, Environment, Transaction from ethereum_test_vm import Opcodes as Op from ethereum_test_vm import UndefinedOpcodes from pytest_plugins.solc.solc import SOLC_EXPECTED_MIN_VERSION from ..tools_code import CalldataCase, Case, Conditional, Initcode, Switch @pytest.fixture(params=get_deployed_forks()) def fork(request: pytest.FixtureRequest) -> Fork: """Return the target evm-version (fork) for solc compilation.""" return request.param @pytest.fixture() def expected_bytes(request: pytest.FixtureRequest, solc_version: Version, fork: Fork) -> bytes: """Return the expected bytes for the test.""" expected_bytes = request.param if isinstance(expected_bytes, Template): if solc_version < SOLC_EXPECTED_MIN_VERSION or fork <= Homestead: solc_padding = "" else: solc_padding = "00" return bytes.fromhex(expected_bytes.substitute(solc_padding=solc_padding)) if isinstance(expected_bytes, bytes): if fork >= Shanghai: expected_bytes = b"\x5f" + expected_bytes[2:] if solc_version < SOLC_EXPECTED_MIN_VERSION or fork <= Homestead: return expected_bytes else: return expected_bytes + b"\x00" raise Exception("Unsupported expected_bytes type: {}".format(type(expected_bytes))) @pytest.mark.parametrize( "initcode,bytecode", [ pytest.param( Initcode(), bytes( [ 0x61, 0x00, 0x00, 0x60, 0x00, 0x81, 0x60, 0x0B, 0x82, 0x39, 0xF3, ] ), id="empty-deployed-code", ), pytest.param( Initcode(initcode_prefix=Op.STOP), bytes( [ 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x81, 0x60, 0x0C, 0x82, 0x39, 0xF3, ] ), id="empty-deployed-code-with-prefix", ), pytest.param( Initcode(initcode_length=20), bytes( [ 0x61, 0x00, 0x00, 0x60, 0x00, 0x81, 0x60, 0x0B, 0x82, 0x39, 0xF3, ] + [0x00] * 9 # padding ), id="empty-deployed-code-with-padding", ), pytest.param( Initcode(deploy_code=Op.STOP, initcode_length=20), bytes( [ 0x61, 0x00, 0x01, 0x60, 0x00, 0x81, 0x60, 0x0B, 0x82, 0x39, 0xF3, ] + [0x00] # deployed code + [0x00] * 8 # padding ), id="single-byte-deployed-code-with-padding", ), pytest.param( Initcode( deploy_code=Op.STOP, initcode_prefix=Op.SSTORE(0, 1), initcode_length=20, ), bytes( [ 0x60, 0x01, 0x60, 0x00, 0x55, 0x61, 0x00, 0x01, 0x60, 0x00, 0x81, 0x60, 0x10, 0x82, 0x39, 0xF3, ] + [0x00] # deployed code + [0x00] * 3 # padding ), id="single-byte-deployed-code-with-padding-and-prefix", ), ], ) def test_initcode(initcode: Initcode, bytecode: bytes) -> None: # noqa: D103 assert bytes(initcode) == bytecode @pytest.mark.parametrize( "conditional_bytecode,expected", [ ( Conditional( condition=Op.CALLDATALOAD(0), if_true=Op.MSTORE(0, Op.SLOAD(0)) + Op.RETURN(0, 32), if_false=Op.SSTORE(0, 69), ), bytes.fromhex("600035600d5801576045600055600f5801565b60005460005260206000f35b"), ), ], ) def test_opcodes_if(conditional_bytecode: bytes, expected: bytes) -> None: """ Test that the if opcode macro is transformed into bytecode as expected. """ assert bytes(conditional_bytecode) == expected @pytest.mark.parametrize( "tx_data,switch_bytecode,expected_storage", [ pytest.param( Hash(1), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), ], default_action=None, ), {0: 1}, id="no-default-action-condition-met", ), pytest.param( Hash(1), Switch( cases=[ CalldataCase(value=1, action=Op.SSTORE(0, 1)), CalldataCase(value=2, action=Op.SSTORE(0, 2)), ], default_action=None, ), {0: 1}, id="no-default-action-condition-met-calldata", ), pytest.param( Hash(0), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), ], default_action=None, ), {0: 0}, id="no-default-action-no-condition-met", ), pytest.param( Hash(1), Switch( cases=[], default_action=Op.SSTORE(0, 3), ), {0: 3}, id="no-cases", ), pytest.param( Hash(1), Switch( cases=[Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1))], default_action=Op.SSTORE(0, 3), ), {0: 1}, id="one-case-condition-met", ), pytest.param( Hash(0), Switch( cases=[Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1))], default_action=Op.SSTORE(0, 3), ), {0: 3}, id="one-case-condition-not-met", ), pytest.param( Hash(0), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), ], default_action=Op.SSTORE(0, 3), ), {0: 3}, id="two-cases-no-condition-met", ), pytest.param( Hash(1), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), ], default_action=Op.SSTORE(0, 3), ), {0: 1}, id="two-cases-first-condition-met", ), pytest.param( Hash(2), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), ], default_action=Op.SSTORE(0, 3), ), {0: 2}, id="two-cases-second-condition-met", ), pytest.param( Hash(1), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 3)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 4), action=Op.SSTORE(0, 4)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 5), action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 1}, id="five-cases-first-condition-met", ), pytest.param( Hash(1), Switch( cases=[ CalldataCase(value=1, action=Op.SSTORE(0, 1)), CalldataCase(value=2, action=Op.SSTORE(0, 2)), CalldataCase(value=3, action=Op.SSTORE(0, 3)), CalldataCase(value=4, action=Op.SSTORE(0, 4)), CalldataCase(value=5, action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 1}, id="five-cases-first-condition-met-calldata", ), pytest.param( Hash(3), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 3)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 4), action=Op.SSTORE(0, 4)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 5), action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 3}, id="five-cases-third-condition-met", ), pytest.param( Hash(3), Switch( cases=[ CalldataCase(value=1, action=Op.SSTORE(0, 1)), CalldataCase(value=2, action=Op.SSTORE(0, 2)), CalldataCase(value=3, action=Op.SSTORE(0, 3)), CalldataCase(value=4, action=Op.SSTORE(0, 4)), CalldataCase(value=5, action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 3}, id="five-cases-third-condition-met-calldata", ), pytest.param( Hash(5), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 3)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 4), action=Op.SSTORE(0, 4)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 5), action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 5}, id="five-cases-last-met", ), pytest.param( Hash(3), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 3)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 4)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 3}, id="five-cases-multiple-conditions-met", # first in list should be evaluated ), pytest.param( Hash(9), Switch( cases=[ Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 2), action=Op.SSTORE(0, 2)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 3), action=Op.SSTORE(0, 3)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 4), action=Op.SSTORE(0, 4)), Case(condition=Op.EQ(Op.CALLDATALOAD(0), 5), action=Op.SSTORE(0, 5)), ], default_action=Op.SSTORE(0, 6), ), {0: 6}, id="five-cases-no-condition-met", ), pytest.param( Hash(0), Switch( cases=[ Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(1, 1), action=Op.SSTORE(0, 2)), Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), ], default_action=None, ), {0: 2}, id="no-calldataload-condition-met", ), pytest.param( Hash(0), Switch( cases=[ Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), Case( condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1) + Op.SSTORE(1, 1) + Op.SSTORE(2, 1), ), Case(condition=Op.EQ(1, 1), action=Op.SSTORE(0, 2) + Op.SSTORE(1, 2)), Case(condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1)), ], default_action=None, ), {0: 2, 1: 2}, id="no-calldataload-condition-met-different-length-actions", ), pytest.param( Hash(0), Switch( cases=[ Case( condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1), ), Case( condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1), ), Case( condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1) + Op.SSTORE(1, 1) + Op.SSTORE(2, 1), ), Case( condition=Op.EQ(1, 1), action=Op.SSTORE(0, 2) + Op.SSTORE(1, 2), ), Case( condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1), ), ], default_action=None, ), {0: 2, 1: 2}, id="different-length-conditions-condition-met-different-length-actions", ), pytest.param( Hash(0), Op.SSTORE(0x10, 1) + Switch( cases=[ Case( condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1), ), Case( condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1), ), Case( condition=Op.EQ(1, 2), action=Op.SSTORE(0, 1) + Op.SSTORE(1, 1) + Op.SSTORE(2, 1), ), Case( condition=Op.EQ(1, 1), action=Op.SSTORE(0, 2) + Op.SSTORE(1, 2), ), Case( condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1), ), ], default_action=None, ) + Op.SSTORE(0x11, 1), {0: 2, 1: 2, 0x10: 1, 0x11: 1}, id="nested-within-bytecode", ), pytest.param( Hash(1), Switch( cases=[Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1))], default_action=Op.PUSH32(2**256 - 1) * 8, ), {0: 1}, id="jumpi-larger-than-1-byte", ), pytest.param( Hash(1), Switch( cases=[Case(condition=Op.EQ(Op.CALLDATALOAD(0), 1), action=Op.SSTORE(0, 1))], default_action=Op.PUSH32(2**256 - 1) * 2048, ), {0: 1}, id="jumpi-larger-than-4-bytes", ), ], ) def test_switch( tx_data: bytes, switch_bytecode: bytes, expected_storage: Mapping, default_t8n: TransitionTool ) -> None: """ Test that the switch opcode macro gets executed as using the t8n tool. """ code_address = Address(0x1000) pre = Alloc( { code_address: Account(code=switch_bytecode), TestAddress: Account(balance=10_000_000), } ) tx = Transaction(to=code_address, data=tx_data, gas_limit=1_000_000, secret_key=TestPrivateKey) post = {TestAddress: Account(nonce=1), code_address: Account(storage=expected_storage)} state_test = StateTest( env=Environment(), pre=pre, tx=tx, post=post, ) state_test.generate( t8n=default_t8n, fork=Cancun, fixture_format=BlockchainFixture, ) def test_full_opcode_range() -> None: """ Test that the full opcode range is covered by the opcode set defined by Opcodes and UndefineOpcodes. """ assert len(set(Op) & set(UndefinedOpcodes)) == 0 full_possible_opcode_set = set(Op) | set(UndefinedOpcodes) assert len(full_possible_opcode_set) == 257 assert {op.hex() for op in full_possible_opcode_set} == {f"{i:02x}" for i in range(256)} ================================================ FILE: src/ethereum_test_tools/tools_code/__init__.py ================================================ """Code related utilities and classes.""" from .generators import CalldataCase, Case, CodeGasMeasure, Conditional, Initcode, Switch, While from .yul import Solc, Yul, YulCompiler __all__ = ( "CalldataCase", "Case", "CodeGasMeasure", "Conditional", "Initcode", "Solc", "Switch", "While", "Yul", "YulCompiler", ) ================================================ FILE: src/ethereum_test_tools/tools_code/generators.py ================================================ """Code generating classes and functions.""" from dataclasses import dataclass from typing import Any, List, SupportsBytes from typing_extensions import Self from ethereum_test_base_types import Bytes from ethereum_test_types import ceiling_division from ethereum_test_vm import Bytecode, EVMCodeType from ethereum_test_vm import Opcodes as Op GAS_PER_DEPLOYED_CODE_BYTE = 0xC8 class Initcode(Bytecode): """ Helper class used to generate initcode for the specified deployment code. The execution gas cost of the initcode is calculated, and also the deployment gas costs for the deployed code. The initcode can be padded to a certain length if necessary, which does not affect the deployed code. Other costs such as the CREATE2 hashing costs or the initcode_word_cost of EIP-3860 are *not* taken into account by any of these calculated costs. """ deploy_code: SupportsBytes | Bytes """ Bytecode to be deployed by the initcode. """ execution_gas: int """ Gas cost of executing the initcode, without considering deployment gas costs. """ deployment_gas: int """ Gas cost of deploying the cost, subtracted after initcode execution, """ def __new__( cls, *, deploy_code: SupportsBytes | Bytes | None = None, initcode_length: int | None = None, initcode_prefix: Bytecode | None = None, initcode_prefix_execution_gas: int = 0, padding_byte: int = 0x00, name: str = "", ) -> Self: """ Generate legacy initcode that inits a contract with the specified code. The initcode can be padded to a specified length for testing purposes. """ if deploy_code is None: deploy_code = Bytecode() if initcode_prefix is None: initcode_prefix = Bytecode() initcode = initcode_prefix code_length = len(bytes(deploy_code)) execution_gas = initcode_prefix_execution_gas # PUSH2: length= initcode += Op.PUSH2(code_length) execution_gas = 3 # PUSH1: offset=0 initcode += Op.PUSH1(0) execution_gas += 3 # DUP2 initcode += Op.DUP2 execution_gas += 3 # PUSH1: initcode_length=11 + len(initcode_prefix_bytes) (constant) no_prefix_length = 0x0B assert no_prefix_length + len(initcode_prefix) <= 0xFF, "initcode prefix too long" initcode += Op.PUSH1(no_prefix_length + len(initcode_prefix)) execution_gas += 3 # DUP3 initcode += Op.DUP3 execution_gas += 3 # CODECOPY: destinationOffset=0, offset=0, length initcode += Op.CODECOPY execution_gas += ( 3 + (3 * ceiling_division(code_length, 32)) + (3 * code_length) + ((code_length * code_length) // 512) ) # RETURN: offset=0, length initcode += Op.RETURN execution_gas += 0 initcode_plus_deploy_code = bytes(initcode) + bytes(deploy_code) padding_bytes = bytes() if initcode_length is not None: assert initcode_length >= len(initcode_plus_deploy_code), ( "specified invalid length for initcode" ) padding_bytes = bytes( [padding_byte] * (initcode_length - len(initcode_plus_deploy_code)) ) initcode_bytes = initcode_plus_deploy_code + padding_bytes instance = super().__new__( cls, initcode_bytes, popped_stack_items=initcode.popped_stack_items, pushed_stack_items=initcode.pushed_stack_items, max_stack_height=initcode.max_stack_height, min_stack_height=initcode.min_stack_height, ) instance._name_ = name instance.deploy_code = deploy_code instance.execution_gas = execution_gas instance.deployment_gas = GAS_PER_DEPLOYED_CODE_BYTE * len(bytes(instance.deploy_code)) return instance class CodeGasMeasure(Bytecode): """ Helper class used to generate bytecode that measures gas usage of a bytecode, taking into account and subtracting any extra overhead gas costs required to execute. By default, the result gas calculation is saved to storage key 0. """ code: Bytecode """ Bytecode to be executed to measure the gas usage. """ overhead_cost: int """ Extra gas cost to be subtracted from extra operations. """ extra_stack_items: int """ Extra stack items that remain at the end of the execution. To be considered when subtracting the value of the previous GAS operation, and to be popped at the end of the execution. """ sstore_key: int | Bytes """ Storage key to save the gas used. """ def __new__( cls, *, code: Bytecode, overhead_cost: int = 0, extra_stack_items: int = 0, sstore_key: int | Bytes = 0, stop: bool = True, ) -> Self: """Assemble the bytecode that measures gas usage.""" res = Op.GAS + code + Op.GAS # We need to swap and pop for each extra stack item that remained from # the execution of the code res += (Op.SWAP1 + Op.POP) * extra_stack_items res += ( Op.SWAP1 + Op.SUB + Op.PUSH1(overhead_cost + 2) + Op.SWAP1 + Op.SSTORE(sstore_key, Op.SUB) ) if stop: res += Op.STOP instance = super().__new__(cls, res) instance.code = code instance.overhead_cost = overhead_cost instance.extra_stack_items = extra_stack_items instance.sstore_key = sstore_key return instance class Conditional(Bytecode): """Helper class used to generate conditional bytecode.""" def __new__( cls, *, condition: Bytecode | Op, if_true: Bytecode | Op | None = None, if_false: Bytecode | Op | None = None, evm_code_type: EVMCodeType = EVMCodeType.LEGACY, ) -> Self: """ Assemble the conditional bytecode by generating the necessary jump and jumpdest opcodes surrounding the condition and the two possible execution paths. In the future, PC usage should be replaced by using RJUMP and RJUMPI """ if if_true is None: if_true = Bytecode() if if_false is None: if_false = Bytecode() if evm_code_type == EVMCodeType.LEGACY: # First we append a jumpdest to the start of the true branch if_true = Op.JUMPDEST + if_true # Then we append the unconditional jump to the end of the false # branch, used to skip the true branch if_false += Op.JUMP(Op.ADD(Op.PC, len(if_true) + 3)) # Then we need to do the conditional jump by skipping the false # branch condition = Op.JUMPI(Op.ADD(Op.PC, len(if_false) + 3), condition) # Finally we append the condition, false and true branches, plus # the jumpdest at the very end bytecode = condition + if_false + if_true + Op.JUMPDEST elif evm_code_type == EVMCodeType.EOF_V1: if not if_false.terminating: if_false += Op.RJUMP[len(if_true)] condition = Op.RJUMPI[len(if_false)](condition) # Finally we append the condition, false and true branches bytecode = condition + if_false + if_true return super().__new__(cls, bytecode) class While(Bytecode): """Helper class used to generate while-loop bytecode.""" def __new__( cls, *, body: Bytecode | Op, condition: Bytecode | Op | None = None, evm_code_type: EVMCodeType = EVMCodeType.LEGACY, ) -> Self: """ Assemble the loop bytecode. The condition nor the body can leave a stack item on the stack. """ bytecode = Bytecode() if evm_code_type == EVMCodeType.LEGACY: bytecode += Op.JUMPDEST bytecode += body if condition is not None: bytecode += Op.JUMPI( Op.SUB(Op.PC, Op.PUSH4[len(body) + len(condition) + 6]), condition ) else: bytecode += Op.JUMP(Op.SUB(Op.PC, Op.PUSH4[len(body) + 6])) elif evm_code_type == EVMCodeType.EOF_V1: raise NotImplementedError("EOF while loops are not implemented") return super().__new__(cls, bytecode) @dataclass(kw_only=True, slots=True) class Case: """ Small helper class to represent a single, generic case in a `Switch` cases list. """ condition: Bytecode | Op action: Bytecode | Op terminating: bool | None = None @property def is_terminating(self) -> bool: """Returns whether the case is terminating.""" return self.terminating if self.terminating is not None else self.action.terminating class CalldataCase(Case): """ Small helper class to represent a single case whose condition depends on the value of the contract's calldata in a Switch case statement. By default the calldata is read from position zero, but this can be overridden using `position`. The `condition` is generated automatically based on the `value` (and optionally `position`) and may not be set directly. """ def __init__(self, value: int | str | Bytecode, position: int = 0, **kwargs: Any) -> None: """Generate the condition base on `value` and `position`.""" condition = Op.EQ(Op.CALLDATALOAD(position), value) super().__init__(condition=condition, **kwargs) class Switch(Bytecode): """ Helper class used to generate switch-case expressions in EVM bytecode. Switch-case behavior: - If no condition is met in the list of BytecodeCases conditions, the `default_action` bytecode is executed. - If multiple conditions are met, the action from the first valid condition is the only one executed. - There is no fall through; it is not possible to execute multiple actions. """ default_action: Bytecode | Op | None """ The default bytecode to execute; if no condition is met, this bytecode is executed. """ cases: List[Case] """ A list of Cases: The first element with a condition that evaluates to a non-zero value is the one that is executed. """ evm_code_type: EVMCodeType """ The EVM code type to use for the switch-case bytecode. """ def __new__( cls, *, default_action: Bytecode | Op | None = None, cases: List[Case], evm_code_type: EVMCodeType = EVMCodeType.LEGACY, ) -> Self: """ Assemble the bytecode by looping over the list of cases and adding the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate switch-case behavior. """ # The length required to jump over subsequent actions to the final # JUMPDEST at the end of the switch-case block: # - add 6 per case for the length of the JUMPDEST and # JUMP(ADD(PC, action_jump_length)) bytecode # # - add 3 to the total to account for this action's JUMP; # the PC within the call requires a "correction" of 3. bytecode = Bytecode() # All conditions get prepended to this bytecode; if none are met, we # reach the default if evm_code_type == EVMCodeType.LEGACY: action_jump_length = sum(len(case.action) + 6 for case in cases) + 3 bytecode = default_action + Op.JUMP(Op.ADD(Op.PC, action_jump_length)) # The length required to jump over the default action and its JUMP # bytecode condition_jump_length = len(bytecode) + 3 elif evm_code_type == EVMCodeType.EOF_V1: action_jump_length = sum( len(case.action) + (len(Op.RJUMP[0]) if not case.is_terminating else 0) for case in cases # On not terminating cases, we need to add 3 bytes for the # RJUMP ) bytecode = default_action + Op.RJUMP[action_jump_length] # The length required to jump over the default action and its JUMP # bytecode condition_jump_length = len(bytecode) # Reversed: first case in the list has priority; it will become the # outer-most onion layer. We build up layers around the default_action, # after 1 iteration of the loop, a simplified representation of the # bytecode is: # # JUMPI(case[n-1].condition) # + default_action + JUMP() # + JUMPDEST + case[n-1].action + JUMP() # # and after n=len(cases) iterations: # # JUMPI(case[0].condition) # + JUMPI(case[1].condition) # ... # + JUMPI(case[n-1].condition) + default_action + JUMP() + JUMPDEST + # case[n-1].action + JUMP() + ... + JUMPDEST + case[1].action + JUMP() # + JUMPDEST + case[0].action + JUMP() for case in reversed(cases): action = case.action if evm_code_type == EVMCodeType.LEGACY: action_jump_length -= len(action) + 6 action = Op.JUMPDEST + action + Op.JUMP(Op.ADD(Op.PC, action_jump_length)) condition = Op.JUMPI(Op.ADD(Op.PC, condition_jump_length), case.condition) elif evm_code_type == EVMCodeType.EOF_V1: action_jump_length -= len(action) + ( len(Op.RJUMP[0]) if not case.is_terminating else 0 ) if not case.is_terminating: action += Op.RJUMP[action_jump_length] condition = Op.RJUMPI[condition_jump_length](case.condition) # wrap the current case around the onion as its next layer bytecode = condition + bytecode + action condition_jump_length += len(condition) + len(action) bytecode += Op.JUMPDEST instance = super().__new__(cls, bytecode) instance.default_action = default_action instance.cases = cases return instance ================================================ FILE: src/ethereum_test_tools/tools_code/yul.py ================================================ """Yul frontend.""" import re import warnings from functools import cached_property from pathlib import Path from shutil import which from subprocess import CompletedProcess, run from typing import Optional, Type from semver import Version from typing_extensions import Self from ethereum_test_forks import Fork from ethereum_test_vm import Bytecode DEFAULT_SOLC_ARGS = ("--assemble", "-") VERSION_PATTERN = re.compile(r"Version: (.*)") class Solc: """Solc compiler.""" binary: Path def __init__( self, binary: Optional[Path | str] = None, ): """Initialize the solc compiler.""" if not binary: which_path = which("solc") if which_path is not None: binary = Path(which_path) if not binary or not Path(binary).exists(): raise Exception( """`solc` binary executable not found, please refer to https://docs.soliditylang.org/en/latest/installing-solidity.html for help downloading and installing `solc`""" ) self.binary = Path(binary) def run(self, *args: str, input_value: str | None = None) -> CompletedProcess: """Run solc with the given arguments.""" return run( [self.binary, *args], capture_output=True, text=True, input=input_value, ) @cached_property def version(self) -> Version: """Return solc's version.""" for line in self.run("--version").stdout.splitlines(): if match := VERSION_PATTERN.search(line): # Sanitize solc_version_string = match.group(1).replace("g++", "gpp") return Version.parse(solc_version_string) warnings.warn("Unable to determine solc version.", stacklevel=2) return Version(0) class Yul(Bytecode): """ Yul compiler. Compiles Yul source code into bytecode. """ source: str evm_version: str | None def __new__( cls, source: str, fork: Optional[Fork] = None, binary: Optional[Path | str] = None, ) -> Self: """Compile Yul source code into bytecode.""" solc = Solc(binary) evm_version = fork.solc_name() if fork else None solc_args = ("--evm-version", evm_version) if evm_version else () result = solc.run(*solc_args, *DEFAULT_SOLC_ARGS, input_value=source) if result.returncode: stderr_lines = result.stderr.splitlines() stderr_message = "\n".join(line.strip() for line in stderr_lines) raise Exception(f"failed to compile yul source:\n{stderr_message[7:]}") lines = result.stdout.splitlines() hex_str = lines[lines.index("Binary representation:") + 1] bytecode = bytes.fromhex(hex_str) instance = super().__new__( cls, bytecode, popped_stack_items=0, pushed_stack_items=0, ) instance.source = source instance.evm_version = evm_version return instance YulCompiler = Type[Yul] ================================================ FILE: src/ethereum_test_tools/utility/__init__.py ================================================ """Sub-package for utility functions and classes.""" ================================================ FILE: src/ethereum_test_tools/utility/generators.py ================================================ """Test generator decorators.""" import json from enum import StrEnum from pathlib import Path from typing import Any, Callable, Dict, Generator, List, Protocol import pytest from ethereum_test_base_types import Account, Address, Hash from ethereum_test_exceptions import BlockException from ethereum_test_forks import Fork from ethereum_test_specs import BlockchainTestFiller from ethereum_test_specs.blockchain import Block from ethereum_test_types import Alloc, Transaction from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op class DeploymentTestType(StrEnum): """Represents the type of deployment test.""" DEPLOY_BEFORE_FORK = "deploy_before_fork" DEPLOY_ON_FORK_BLOCK = "deploy_on_fork_block" DEPLOY_AFTER_FORK = "deploy_after_fork" class SystemContractTestType(StrEnum): """Represents the type of system contract test.""" GAS_LIMIT = "system_contract_reaches_gas_limit" OUT_OF_GAS_ERROR = "system_contract_out_of_gas" REVERT_ERROR = "system_contract_reverts" EXCEPTION_ERROR = "system_contract_throws" def param(self) -> Any: """Return the parameter for the test.""" return pytest.param( self, id=self.value, marks=pytest.mark.exception_test if self != SystemContractTestType.GAS_LIMIT else [], ) class ContractAddressHasBalance(StrEnum): """ Represents whether the target deployment test has a balance before deployment. """ ZERO_BALANCE = "zero_balance" NONZERO_BALANCE = "nonzero_balance" class SystemContractDeployTestFunction(Protocol): """ Represents a function to be decorated with the `generate_system_contract_deploy_test` decorator. """ def __call__( self, *, fork: Fork, pre: Alloc, post: Alloc, test_type: DeploymentTestType, ) -> Generator[Block, None, None]: """ Arguments: fork (Fork): The fork to test. pre (Alloc): The pre state of the blockchain. post (Alloc): The post state of the blockchain. test_type(DeploymentTestType): The type of deployment test currently being filled. Yields: Block: To add after the block where the contract was deployed (e.g. can contain extra transactions to execute after the system contract has been deployed, and/or a header object to verify that the headers are correct). """ pass def generate_system_contract_deploy_test( *, fork: Fork, tx_json_path: Path, expected_deploy_address: Address, fail_on_empty_code: bool, expected_system_contract_storage: Dict | None = None, ) -> Callable[[SystemContractDeployTestFunction], Callable]: """ Generate a test that verifies the correct deployment of a system contract. Generates following test cases: | before/after fork | fail on | invalid block | empty block | | --------------------|-------------------|--------------|----------------| `deploy_before_fork-| before | False | False | nonzero_balance` `deploy_before_fork-| before | True | False | zero_balance` `deploy_on_fork_ | on fork block | False | False | block-nonzero_ balance` `deploy_on_fork_ | on fork block | True | False | block-zero_balance` `deploy_after_fork | after | False | False | -nonzero_balance` `deploy_after_fork | after | True | True | -zero_balance` The `has balance` parametrization does not have an effect on the expectation of the test. Arguments: fork (Fork): The fork to test. tx_json_path (Path): Path to the JSON file with the transaction to deploy the system contract. Providing a JSON file is useful to copy-paste the transaction from the EIP. expected_deploy_address (Address): The expected address of the deployed contract. fail_on_empty_code (bool): If True, the test is expected to fail on empty code. expected_system_contract_storage (Dict | None): The expected storage of the system contract. """ with open(tx_json_path, mode="r") as f: tx_json = json.loads(f.read()) if "gasLimit" not in tx_json and "gas" in tx_json: tx_json["gasLimit"] = tx_json["gas"] del tx_json["gas"] if "protected" not in tx_json: tx_json["protected"] = False deploy_tx = Transaction.model_validate(tx_json).with_signature_and_sender() gas_price = deploy_tx.gas_price assert gas_price is not None deployer_required_balance = deploy_tx.gas_limit * gas_price deployer_address = deploy_tx.sender if "hash" in tx_json: assert deploy_tx.hash == Hash(tx_json["hash"]) if "sender" in tx_json: assert deploy_tx.sender == Address(tx_json["sender"]) def decorator(func: SystemContractDeployTestFunction) -> Callable: @pytest.mark.parametrize( "has_balance", [ pytest.param(ContractAddressHasBalance.NONZERO_BALANCE), pytest.param(ContractAddressHasBalance.ZERO_BALANCE), ], ids=lambda x: x.name.lower(), ) @pytest.mark.parametrize( "test_type", [ pytest.param(DeploymentTestType.DEPLOY_BEFORE_FORK), pytest.param(DeploymentTestType.DEPLOY_ON_FORK_BLOCK), pytest.param( DeploymentTestType.DEPLOY_AFTER_FORK, marks=[pytest.mark.exception_test] if fail_on_empty_code else [], ), ], ids=lambda x: x.name.lower(), ) @pytest.mark.execute(pytest.mark.skip(reason="modifies pre-alloc")) @pytest.mark.valid_at_transition_to(fork.name()) def wrapper( blockchain_test: BlockchainTestFiller, has_balance: ContractAddressHasBalance, pre: Alloc, test_type: DeploymentTestType, fork: Fork, ) -> None: assert deployer_address is not None assert deploy_tx.created_contract == expected_deploy_address blocks: List[Block] = [] if test_type == DeploymentTestType.DEPLOY_BEFORE_FORK: blocks = [ Block( # Deployment block txs=[deploy_tx], timestamp=14_999, ), Block( # Empty block on fork txs=[], timestamp=15_000, ), ] elif test_type == DeploymentTestType.DEPLOY_ON_FORK_BLOCK: blocks = [ Block( # Deployment on fork block txs=[deploy_tx], timestamp=15_000, ), Block( # Empty block after fork txs=[], timestamp=15_001, ), ] elif test_type == DeploymentTestType.DEPLOY_AFTER_FORK: blocks = [ Block( # Empty block on fork txs=[], timestamp=15_000, exception=BlockException.SYSTEM_CONTRACT_EMPTY if fail_on_empty_code else None, ) ] if not fail_on_empty_code: blocks.append( Block( # Deployment after fork block txs=[deploy_tx], timestamp=15_001, ) ) blocks.append( Block( # Empty block after deployment txs=[], timestamp=15_002, ), ) balance = 1 if has_balance == ContractAddressHasBalance.NONZERO_BALANCE else 0 pre[expected_deploy_address] = Account( code=b"", # Remove the code that is automatically allocated on # the fork nonce=0, balance=balance, ) pre[deployer_address] = Account( balance=deployer_required_balance, ) expected_deploy_address_int = int.from_bytes(expected_deploy_address, "big") post = Alloc() fork_pre_allocation = fork.pre_allocation_blockchain() assert expected_deploy_address_int in fork_pre_allocation expected_code = fork_pre_allocation[expected_deploy_address_int]["code"] # Note: balance check is omitted; it may be modified by the # underlying, decorated test account_kwargs = { "code": expected_code, "nonce": 1, } if expected_system_contract_storage: account_kwargs["storage"] = expected_system_contract_storage if test_type != DeploymentTestType.DEPLOY_AFTER_FORK or not fail_on_empty_code: post[expected_deploy_address] = Account(**account_kwargs) post[deployer_address] = Account( nonce=1, ) # Extra blocks (if any) returned by the decorated function to add # after the contract is deployed. if test_type != DeploymentTestType.DEPLOY_AFTER_FORK or not fail_on_empty_code: # Only fill more blocks if the deploy block does not fail. blocks += list(func(fork=fork, pre=pre, post=post, test_type=test_type)) blockchain_test( pre=pre, blocks=blocks, post=post, ) wrapper.__name__ = func.__name__ # type: ignore wrapper.__doc__ = func.__doc__ return wrapper return decorator def generate_system_contract_error_test( *, max_gas_limit: int, ) -> Callable[[SystemContractDeployTestFunction], Callable]: """ Generate a test that verifies the correct behavior when a system contract fails execution. Parametrizations required: - system_contract (Address): The address of the system contract to deploy. - valid_from (Fork): The fork from which the test is valid. Arguments: max_gas_limit (int): The maximum gas limit for the system transaction. """ def decorator(func: SystemContractDeployTestFunction) -> Callable: @pytest.mark.parametrize("test_type", [v.param() for v in SystemContractTestType]) @pytest.mark.execute(pytest.mark.skip(reason="modifies pre-alloc")) def wrapper( blockchain_test: BlockchainTestFiller, pre: Alloc, test_type: SystemContractTestType, system_contract: Address, fork: Fork, ) -> None: modified_system_contract_code = Bytecode() # Depending on the test case, we need to modify the system contract # code accordingly. if ( test_type == SystemContractTestType.GAS_LIMIT or test_type == SystemContractTestType.OUT_OF_GAS_ERROR ): # Run code so that it reaches the gas limit. gas_costs = fork.gas_costs() # The code works by storing N values to storage, and N is # calculated based on the gas costs for the given fork. This # code will only work once, so if the system contract is re- # executed in a subsequent block, it will consume less gas. gas_used_per_storage = ( gas_costs.G_STORAGE_SET + gas_costs.G_COLD_SLOAD + (gas_costs.G_VERY_LOW * 2) ) modified_system_contract_code += sum( Op.SSTORE(i, 1) for i in range(max_gas_limit // gas_used_per_storage) ) # If the gas limit is not divisible by the gas used per # storage, we need to add some NO-OP (JUMPDEST) to the code # that each consume 1 gas. assert gas_costs.G_JUMPDEST == 1, ( f"JUMPDEST gas cost should be 1, but got {gas_costs.G_JUMPDEST}. " "Generator `generate_system_contract_error_test` needs to be updated." ) modified_system_contract_code += sum( Op.JUMPDEST for _ in range(max_gas_limit % gas_used_per_storage) ) if test_type == SystemContractTestType.OUT_OF_GAS_ERROR: # If the test type is OUT_OF_GAS_ERROR, we need to add a # JUMPDEST to the code to ensure that we go over the limit # by one gas. modified_system_contract_code += Op.JUMPDEST modified_system_contract_code += Op.STOP elif test_type == SystemContractTestType.REVERT_ERROR: # Run a simple revert. modified_system_contract_code = Op.REVERT(0, 0) elif test_type == SystemContractTestType.EXCEPTION_ERROR: # Run a simple exception. modified_system_contract_code = Op.INVALID() else: raise ValueError(f"Invalid test type: {test_type}") pre[system_contract] = Account( code=modified_system_contract_code, nonce=1, balance=0, ) # Simple test transaction to verify the block failed to modify the # state. value_receiver = pre.fund_eoa(amount=0) test_tx = Transaction( to=value_receiver, value=1, gas_limit=100_000, sender=pre.fund_eoa(), ) post = Alloc() post[value_receiver] = ( Account.NONEXISTENT if test_type != SystemContractTestType.GAS_LIMIT else Account( balance=1, ) ) blockchain_test( pre=pre, blocks=[ Block( # Deployment block txs=[test_tx], exception=BlockException.SYSTEM_CONTRACT_CALL_FAILED if test_type != SystemContractTestType.GAS_LIMIT else None, ) ], post=post, ) wrapper.__name__ = func.__name__ # type: ignore wrapper.__doc__ = func.__doc__ return wrapper return decorator ================================================ FILE: src/ethereum_test_tools/utility/pytest.py ================================================ """Pytest utility functions used to write Ethereum tests.""" from typing import Any, Dict, List import pytest from _pytest.mark.structures import ParameterSet class UnknownParameterInCasesError(Exception): """ Exception raised when a test case contains parameters that are not present in the defaults. """ def __init__(self) -> None: """Initialize the exception.""" super().__init__("each case must only contain parameters present in defaults") def extend_with_defaults( defaults: Dict[str, Any], cases: List[ParameterSet], **parametrize_kwargs: Any ) -> Dict[str, Any]: """ Extend test cases with default parameter values. This utility function extends test case parameters by adding default values from the `defaults` dictionary to each case in the `cases` list. If a case already specifies a value for a parameter, its default is ignored. This function is particularly useful in scenarios where you want to define a common set of default values but allow individual test cases to override them as needed. The function returns a dictionary that can be directly unpacked and passed to the `@pytest.mark.parametrize` decorator. Arguments: defaults (Dict[str, Any]): A dictionary of default parameter names and their values. These values will be added to each case unless the case already defines a value for each parameter. cases (List[ParameterSet]): A list of `pytest.param` objects representing different test cases. Its first argument must be a dictionary defining parameter names and values. parametrize_kwargs (Any): Additional keyword arguments to be passed to `@pytest.mark.parametrize`. These arguments are not modified by this function and are passed through unchanged. Returns: Dict[str, Any]: A dictionary with the following structure: `argnames`: A list of parameter names. `argvalues`: A list of test cases with modified parameter values. `parametrize_kwargs`: Additional keyword arguments passed through unchanged. Example: ```python @pytest.mark.parametrize(**extend_with_defaults( defaults=dict( min_value=0, # default minimum value is 0 max_value=100, # default maximum value is 100 average=50, # default average value is 50 ), cases=[ pytest.param( dict(), # use default values id='default_case', ), pytest.param( dict(min_value=10), # override with min_value=10 id='min_value_10', ), pytest.param( dict(max_value=200), # override with max_value=200 id='max_value_200', ), pytest.param( dict(min_value=-10, max_value=50), # override both min_value # and max_value id='min_-10_max_50', ), pytest.param( # all defaults are overridden dict(min_value=20, max_value=80, average=50), id="min_20_max_80_avg_50", ), pytest.param( dict(min_value=100, max_value=0), # invalid range id='invalid_range', marks=pytest.mark.xfail(reason='invalid range'), ) ], )) def test_range(min_value, max_value, average): assert min_value <= max_value assert min_value <= average <= max_value ``` The above test will execute with the following sets of parameters: ```python "default_case": {"min_value": 0, "max_value": 100, "average": 50} "min_value_10": {"min_value": 10, "max_value": 100, "average": 50} "max_value_200": {"min_value": 0, "max_value": 200, "average": 50} "min_-10_max_50": {"min_value": -10, "max_value": 50, "average": 50} "min_20_max_80_avg_50": {"min_value": 20, "max_value": 80, "average": 50} # expected to fail "invalid_range": {"min_value": 100, "max_value": 0, "average": 50} ``` Notes: - Each case in `cases` must contain exactly one value, which is a dictionary of parameter values. - The function performs an in-place update of the `cases` list, so the original `cases` list is modified. """ for i, case in enumerate(cases): if not (len(case.values) == 1 and isinstance(case.values[0], dict)): raise ValueError( "each case must contain exactly one value; a dict of parameter values" ) if set(case.values[0].keys()) - set(defaults.keys()): raise UnknownParameterInCasesError() # Overwrite values in defaults if the parameter is present in the test # case values merged_params = {**defaults, **case.values[0]} cases[i] = pytest.param(*merged_params.values(), id=case.id, marks=case.marks) return {"argnames": list(defaults), "argvalues": cases, **parametrize_kwargs} ================================================ FILE: src/ethereum_test_tools/utility/tests/test_pytest.py ================================================ """Tests for ethereum_test_tools.utility.pytest.""" import pytest from ethereum_test_tools import extend_with_defaults from ethereum_test_tools.utility.pytest import UnknownParameterInCasesError # TODO: This is from the docstring in extend_with_defaults; should be tested # automatically @pytest.mark.parametrize( **extend_with_defaults( defaults={ "min_value": 0, # default minimum value is 0 "max_value": 100, # default maximum value is 100 "average": 50, # default average value is 50 }, cases=[ pytest.param( {}, # use default values id="default_case", ), pytest.param( {"min_value": 10}, # override with min_value=10 id="min_value_10", ), pytest.param( {"max_value": 200}, # override with max_value=200 id="max_value_200", ), pytest.param( # override both min_value and max_value {"min_value": -10, "max_value": 50}, id="min_-10_max_50", ), pytest.param( # all defaults are overridden {"min_value": 20, "max_value": 80, "average": 50}, id="min_20_max_80_avg_50", ), pytest.param( {"min_value": 100, "max_value": 0}, # invalid range id="invalid_range", marks=pytest.mark.xfail(reason="invalid range"), ), ], ) ) def test_range(min_value: int, max_value: int, average: int) -> None: # noqa: D103 assert min_value <= max_value assert min_value <= average <= max_value @pytest.mark.parametrize( "defaults,cases,parametrize_kwargs,expected", [ pytest.param( {"min_value": 0, "max_value": 100, "average": 50}, [ pytest.param( {}, id="default_case", ), pytest.param( {"min_value": 10}, id="min_value_10", ), pytest.param( {"max_value": 200}, id="max_value_200", ), pytest.param( {"min_value": -10, "max_value": 50}, id="min_-10_max_50", ), pytest.param( {"min_value": 20, "max_value": 80, "average": 50}, id="min_20_max_80_avg_50", ), pytest.param( {"min_value": 100, "max_value": 0}, id="invalid_range", marks=pytest.mark.xfail(reason="invalid range"), ), ], {}, { "argnames": ["min_value", "max_value", "average"], "argvalues": [ pytest.param(0, 100, 50, id="default_case"), pytest.param(10, 100, 50, id="min_value_10"), pytest.param(0, 200, 50, id="max_value_200"), pytest.param(-10, 50, 50, id="min_-10_max_50"), pytest.param(20, 80, 50, id="min_20_max_80_avg_50"), pytest.param( 100, 0, 50, id="invalid_range", marks=pytest.mark.xfail(reason="invalid range"), ), ], }, id="defaults_and_cases_empty_parametrize_kwargs", ), pytest.param( {"min_value": 0, "max_value": 100, "average": 50}, [ pytest.param( {}, id="default_case", ), pytest.param( {"min_value": 10}, id="min_value_10", ), ], {"scope": "session"}, { "argnames": ["min_value", "max_value", "average"], "argvalues": [ pytest.param(0, 100, 50, id="default_case"), pytest.param(10, 100, 50, id="min_value_10"), ], }, id="defaults_and_cases_with_parametrize_kwargs", ), ], ) def test_extend_with_defaults( defaults: dict, cases: list, parametrize_kwargs: dict, expected: dict ) -> None: # noqa: D103 """Test the extend_with_defaults function.""" result = extend_with_defaults(defaults, cases, **parametrize_kwargs) assert result["argnames"] == expected["argnames"] assert result["argvalues"] == expected["argvalues"] result.pop("argnames") result.pop("argvalues") assert result == parametrize_kwargs def test_extend_with_defaults_raises_for_unknown_default() -> None: # noqa: D103 with pytest.raises( UnknownParameterInCasesError, match="only contain parameters present in defaults" ): extend_with_defaults({"a": 0, "b": 1}, [pytest.param({"c": 2})]) @pytest.mark.parametrize( "defaults, cases", [ pytest.param( {"param_1": "default1"}, [pytest.param({"param_1": "value1"}, {"param_2": "value2"})], id="multiple_values", ), pytest.param( {"param_1": "default1"}, [pytest.param("not_a_dict")], id="non_dict_value", ), ], ) def test_extend_with_defaults_raises_value_error(defaults: dict, cases: list) -> None: # noqa: D103 expected_message = "each case must contain exactly one value; a dict of parameter values" with pytest.raises(ValueError, match=expected_message): extend_with_defaults(defaults, cases) ================================================ FILE: src/ethereum_test_tools/utility/versioning.py ================================================ """Utility module with helper functions for versioning.""" import re from typing import Union from git import InvalidGitRepositoryError, Repo def get_current_commit_hash_or_tag(repo_path: str = ".", shorten_hash: bool = False) -> str: """ Get the latest commit tag or commit hash from the repository. If a tag points to the current commit, return the tag name. If no tag exists: - If shorten_hash is True, return the first 8 characters of the commit hash. - Otherwise, return the full commit hash. """ try: repo = Repo(repo_path) current_commit = repo.head.commit # Check if current commit has a tag using lookup for tag in repo.tags: if tag.commit == current_commit: return tag.name # No tag found, return commit hash return current_commit.hexsha[:8] if shorten_hash else current_commit.hexsha except InvalidGitRepositoryError: # Handle the case where the repository is not a valid Git repository return "Not a git repository; this should only be seen in framework tests." def generate_github_url( file_path: str, branch_or_commit_or_tag: str = "main", line_number: Union[str, int] = "" ) -> str: """Generate a permalink to a source file in Github.""" base_url = "https://github.com" username = "ethereum" repository = "execution-spec-tests" if line_number: line_number = f"#L{line_number}" release_tag_regex = r"^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(a[0-9]+|b[0-9]+|rc[0-9]+)?$" tree_or_blob = "tree" if re.match(release_tag_regex, branch_or_commit_or_tag) else "blob" return ( f"{base_url}/{username}/{repository}/{tree_or_blob}/" f"{branch_or_commit_or_tag}/{file_path}{line_number}" ) ================================================ FILE: src/ethereum_test_types/__init__.py ================================================ """Common definitions and types.""" from .account_types import EOA, Alloc from .blob_types import Blob from .block_access_list import ( BalAccountChange, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageChange, BalStorageSlot, BlockAccessList, BlockAccessListExpectation, ) from .block_types import ( Environment, EnvironmentDefaults, Withdrawal, ) from .chain_config_types import ChainConfig, ChainConfigDefaults from .helpers import ( TestParameterGroup, add_kzg_version, ceiling_division, compute_create2_address, compute_create_address, compute_eofcreate_address, ) from .phase_manager import TestPhase, TestPhaseManager from .receipt_types import TransactionReceipt from .request_types import ( ConsolidationRequest, DepositRequest, Requests, WithdrawalRequest, ) from .transaction_types import ( AuthorizationTuple, NetworkWrappedTransaction, Transaction, TransactionDefaults, TransactionTestMetadata, TransactionType, ) from .utils import Removable, keccak256 __all__ = ( "Alloc", "AuthorizationTuple", "BalAccountChange", "BalBalanceChange", "BalCodeChange", "BalNonceChange", "BalStorageChange", "BalStorageSlot", "Blob", "BlockAccessList", "BlockAccessListExpectation", "ChainConfig", "ChainConfigDefaults", "ConsolidationRequest", "DepositRequest", "Environment", "EnvironmentDefaults", "EOA", "NetworkWrappedTransaction", "Removable", "Requests", "TestParameterGroup", "TestPhase", "TestPhaseManager", "Transaction", "TransactionDefaults", "TransactionReceipt", "TransactionTestMetadata", "TransactionType", "Withdrawal", "WithdrawalRequest", "add_kzg_version", "ceiling_division", "compute_create_address", "compute_create2_address", "compute_eofcreate_address", "keccak256", ) ================================================ FILE: src/ethereum_test_types/account_types.py ================================================ """Account-related types for Ethereum tests.""" import json from dataclasses import dataclass, field from enum import Enum, auto from typing import Any, Dict, ItemsView, Iterator, List, Literal, Optional, Self, Tuple from coincurve.keys import PrivateKey from ethereum_types.bytes import Bytes20 from ethereum_types.numeric import U256, Bytes32, Uint from pydantic import PrivateAttr from ethereum_test_base_types import ( Account, Address, Hash, Number, Storage, StorageRootType, ) from ethereum_test_base_types import Alloc as BaseAlloc from ethereum_test_base_types.conversions import ( BytesConvertible, FixedSizeBytesConvertible, NumberConvertible, ) from ethereum_test_vm import EVMCodeType from .trie import EMPTY_TRIE_ROOT, FrontierAccount, Trie, root, trie_get, trie_set from .utils import keccak256 FrontierAddress = Bytes20 @dataclass class State: """Contains all information that is preserved between transactions.""" _main_trie: Trie[Bytes20, Optional[FrontierAccount]] = field( default_factory=lambda: Trie(secured=True, default=None) ) _storage_tries: Dict[Bytes20, Trie[Bytes32, U256]] = field(default_factory=dict) _snapshots: List[ Tuple[ Trie[Bytes20, Optional[FrontierAccount]], Dict[Bytes20, Trie[Bytes32, U256]], ] ] = field(default_factory=list) def set_account(state: State, address: Bytes20, account: Optional[FrontierAccount]) -> None: """ Set the `Account` object at an address. Setting to `None` deletes the account (but not its storage, see `destroy_account()`). """ trie_set(state._main_trie, address, account) def set_storage(state: State, address: Bytes20, key: Bytes32, value: U256) -> None: """ Set a value at a storage key on an account. Setting to `U256(0)` deletes the key. """ assert trie_get(state._main_trie, address) is not None trie = state._storage_tries.get(address) if trie is None: trie = Trie(secured=True, default=U256(0)) state._storage_tries[address] = trie trie_set(trie, key, value) if trie._data == {}: del state._storage_tries[address] def storage_root(state: State, address: Bytes20) -> Bytes32: """Calculate the storage root of an account.""" assert not state._snapshots if address in state._storage_tries: return root(state._storage_tries[address]) else: return EMPTY_TRIE_ROOT def state_root(state: State) -> Bytes32: """Calculate the state root.""" assert not state._snapshots def get_storage_root(address: Bytes20) -> Bytes32: return storage_root(state, address) return root(state._main_trie, get_storage_root=get_storage_root) class EOA(Address): """ An Externally Owned Account (EOA) is an account controlled by a private key. The EOA is defined by its address and (optionally) by its corresponding private key. """ key: Hash | None nonce: Number def __new__( cls, address: "FixedSizeBytesConvertible | Address | EOA | None" = None, *, key: FixedSizeBytesConvertible | None = None, nonce: NumberConvertible = 0, ) -> "EOA": """Init the EOA.""" if address is None: if key is None: raise ValueError("impossible to initialize EOA without address") private_key = PrivateKey(Hash(key)) public_key = private_key.public_key address = Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]) elif isinstance(address, EOA): return address instance = super(EOA, cls).__new__(cls, address) instance.key = Hash(key) if key is not None else None instance.nonce = Number(nonce) return instance def get_nonce(self) -> Number: """Return current nonce of the EOA and increments it by one.""" nonce = self.nonce self.nonce = Number(nonce + 1) return nonce def copy(self) -> Self: """Return copy of the EOA.""" return self.__class__(Address(self), key=self.key, nonce=self.nonce) class Alloc(BaseAlloc): """Allocation of accounts in the state, pre and post test execution.""" _eoa_fund_amount_default: int = PrivateAttr(10**21) @dataclass(kw_only=True) class UnexpectedAccountError(Exception): """Unexpected account found in the allocation.""" address: Address account: Account | None def __str__(self) -> str: """Print exception string.""" return f"unexpected account in allocation {self.address}: {self.account}" @dataclass(kw_only=True) class MissingAccountError(Exception): """Expected account not found in the allocation.""" address: Address def __str__(self) -> str: """Print exception string.""" return f"Account missing from allocation {self.address}" @dataclass(kw_only=True) class CollisionError(Exception): """Different accounts at the same address.""" address: Address account_1: Account | None account_2: Account | None def to_json(self) -> Dict[str, Any]: """Dump to json object.""" return { "address": self.address.hex(), "account_1": self.account_1.model_dump(mode="json") if self.account_1 is not None else None, "account_2": self.account_2.model_dump(mode="json") if self.account_2 is not None else None, } @classmethod def from_json(cls, obj: Dict[str, Any]) -> Self: """Parse from a json dict.""" return cls( address=Address(obj["address"]), account_1=Account.model_validate(obj["account_1"]) if obj["account_1"] is not None else None, account_2=Account.model_validate(obj["account_2"]) if obj["account_2"] is not None else None, ) def __str__(self) -> str: """Print exception string.""" return ( "Overlapping key defining different accounts detected:\n" f"{json.dumps(self.to_json(), indent=2)}" ) class KeyCollisionMode(Enum): """Mode for handling key collisions when merging allocations.""" ERROR = auto() OVERWRITE = auto() ALLOW_IDENTICAL_ACCOUNTS = auto() @classmethod def merge( cls, alloc_1: "Alloc", alloc_2: "Alloc", key_collision_mode: KeyCollisionMode = KeyCollisionMode.OVERWRITE, ) -> "Alloc": """Return merged allocation of two sources.""" overlapping_keys = alloc_1.root.keys() & alloc_2.root.keys() if overlapping_keys: if key_collision_mode == cls.KeyCollisionMode.ERROR: raise Exception( f"Overlapping keys detected: {[key.hex() for key in overlapping_keys]}" ) elif key_collision_mode == cls.KeyCollisionMode.ALLOW_IDENTICAL_ACCOUNTS: # The overlapping keys must point to the exact same account for key in overlapping_keys: account_1 = alloc_1[key] account_2 = alloc_2[key] if account_1 != account_2: raise Alloc.CollisionError( address=key, account_1=account_1, account_2=account_2, ) merged = alloc_1.model_dump() for address, other_account in alloc_2.root.items(): merged_account = Account.merge(merged.get(address, None), other_account) if merged_account: merged[address] = merged_account elif address in merged: merged.pop(address, None) return Alloc(merged) def __iter__(self) -> Iterator[Address]: # type: ignore [override] """Return iterator over the allocation.""" return iter(self.root) def items(self) -> ItemsView[Address, Account | None]: """Return iterator over the allocation items.""" return self.root.items() def __getitem__(self, address: Address | FixedSizeBytesConvertible) -> Account | None: """Return account associated with an address.""" if not isinstance(address, Address): address = Address(address) return self.root[address] def __setitem__( self, address: Address | FixedSizeBytesConvertible, account: Account | None ) -> None: """Set account associated with an address.""" if not isinstance(address, Address): address = Address(address) self.root[address] = account def __delitem__(self, address: Address | FixedSizeBytesConvertible) -> None: """Delete account associated with an address.""" if not isinstance(address, Address): address = Address(address) self.root.pop(address, None) def __eq__(self, other: object) -> bool: """Return True if both allocations are equal.""" if not isinstance(other, Alloc): return False return self.root == other.root def __contains__(self, address: Address | FixedSizeBytesConvertible) -> bool: """Check if an account is in the allocation.""" if not isinstance(address, Address): address = Address(address) return address in self.root def empty_accounts(self) -> List[Address]: """Return list of addresses of empty accounts.""" return [address for address, account in self.root.items() if not account] def state_root(self) -> Hash: """Return state root of the allocation.""" state = State() for address, account in self.root.items(): if account is None: continue set_account( state=state, address=FrontierAddress(address), account=FrontierAccount( nonce=Uint(account.nonce) if account.nonce is not None else Uint(0), balance=(U256(account.balance) if account.balance is not None else U256(0)), code=account.code if account.code is not None else b"", ), ) if account.storage is not None: for key, value in account.storage.root.items(): set_storage( state=state, address=FrontierAddress(address), key=Bytes32(Hash(key)), value=U256(value), ) return Hash(state_root(state)) def verify_post_alloc(self, got_alloc: "Alloc") -> None: """ Verify that the allocation matches the expected post in the test. Raises exception on unexpected values. """ assert isinstance(got_alloc, Alloc), f"got_alloc is not an Alloc: {got_alloc}" for address, account in self.root.items(): if account is None: # Account must not exist if address in got_alloc.root and got_alloc.root[address] is not None: raise Alloc.UnexpectedAccountError( address=address, account=got_alloc.root[address] ) else: if address in got_alloc.root: got_account = got_alloc.root[address] assert isinstance(got_account, Account) assert isinstance(account, Account) account.check_alloc(address, got_account) else: raise Alloc.MissingAccountError(address=address) def deploy_contract( self, code: BytesConvertible, *, storage: Storage | StorageRootType | None = None, balance: NumberConvertible = 0, nonce: NumberConvertible = 1, address: Address | None = None, evm_code_type: EVMCodeType | None = None, label: str | None = None, stub: str | None = None, ) -> Address: """Deploy a contract to the allocation.""" raise NotImplementedError("deploy_contract is not implemented in the base class") def fund_eoa( self, amount: NumberConvertible | None = None, label: str | None = None, storage: Storage | None = None, delegation: Address | Literal["Self"] | None = None, nonce: NumberConvertible | None = None, ) -> EOA: """ Add a previously unused EOA to the pre-alloc with the balance specified by `amount`. """ raise NotImplementedError("fund_eoa is not implemented in the base class") def fund_address(self, address: Address, amount: NumberConvertible) -> None: """ Fund an address with a given amount. If the address is already present in the pre-alloc the amount will be added to its existing balance. """ raise NotImplementedError("fund_address is not implemented in the base class") def empty_account(self) -> Address: """ Return a previously unused account guaranteed to be empty. This ensures the account has zero balance, zero nonce, no code, and no storage. The account is not a precompile or a system contract. """ raise NotImplementedError("empty_account is not implemented in the base class") ================================================ FILE: src/ethereum_test_types/blob_types.py ================================================ """Blob-related types for Ethereum tests.""" import random from enum import Enum from hashlib import sha256 from os.path import realpath from pathlib import Path from typing import Any, ClassVar, List, Literal, cast import ckzg # type: ignore import platformdirs from filelock import FileLock from ethereum_test_base_types.base_types import Bytes, Hash from ethereum_test_base_types.pydantic import CamelModel from ethereum_test_forks import Fork from pytest_plugins.custom_logging import get_logger CACHED_BLOBS_DIRECTORY: Path = ( Path(platformdirs.user_cache_dir("ethereum-execution-spec-tests")) / "cached_blobs" ) logger = get_logger(__name__) def clear_blob_cache(cached_blobs_folder_path: Path) -> None: """Delete all cached blobs.""" if not cached_blobs_folder_path.is_dir(): return json_files = list(cached_blobs_folder_path.glob("*.json")) for f in json_files: lock_file_path = f.with_suffix(".lock") try: # get file lock for what you want to delete with FileLock(lock_file_path): f.unlink() except Exception as e: print( f"Error while trying to delete file {f}:{e}. " "Aborting clearing of blob cache folder." ) return class Blob(CamelModel): """Class representing a full blob.""" data: Bytes commitment: Bytes proof: List[Bytes] | Bytes # Bytes < Osaka, List[Bytes] >= Osaka # None (in json: null) < Osaka, List[Bytes] >= Osaka cells: List[Bytes] | None versioned_hash: Hash name: str fork: Fork seed: int timestamp: int # fork transitions require timestamp >= 15000 to occur _trusted_setup: ClassVar[Any | None] = None @classmethod def trusted_setup(cls) -> Any: """Set trusted setup if it is not already set.""" if cls._trusted_setup is None: trusted_setup_path = Path(realpath(__file__)).parent / "kzg_trusted_setup.txt" trusted_setup = ckzg.load_trusted_setup(str(trusted_setup_path), 0) cls._trusted_setup = trusted_setup return cls._trusted_setup @staticmethod def get_filename(fork: Fork, seed: int) -> str: """ Return filename this blob would have as string (with .json extension). """ amount_cell_proofs: int = cast(int, fork.get_blob_constant("AMOUNT_CELL_PROOFS")) return "blob_" + str(seed) + "_cell_proofs_" + str(amount_cell_proofs) + ".json" @staticmethod def get_filepath(fork: Fork, seed: int) -> Path: """ Return the Path to the blob that would be created with these parameters. """ # determine amount of cell proofs for this fork (0 or 128) would_be_filename: str = Blob.get_filename(fork, seed) # return path to blob return CACHED_BLOBS_DIRECTORY / would_be_filename @staticmethod def from_fork(fork: Fork, seed: int = 0, timestamp: int = 0) -> "Blob": """ Construct Blob instances. Fork logic is encapsulated within nested functions. """ def generate_blob_data(rng_seed: int = 0) -> Bytes: """Calculate blob data deterministically via provided seed.""" # create local (independent) RNG object seeded with rng_seed rng = random.Random(rng_seed) # generate blob ints: list[int] = [ rng.randrange(cast(int, fork.get_blob_constant("BLS_MODULUS"))) for _ in range(cast(int, fork.get_blob_constant("FIELD_ELEMENTS_PER_BLOB"))) ] encoded: list[bytes] = [ i.to_bytes( cast(int, fork.get_blob_constant("BYTES_PER_FIELD_ELEMENT")), cast(Literal["big"], fork.get_blob_constant("KZG_ENDIANNESS")), ) for i in ints ] blob: bytes = b"".join(encoded) # without 0x return Bytes(blob) def get_versioned_hash(commitment: Bytes, version: int = 1) -> Hash: """Calculate versioned hash for a given blob.""" return Hash(bytes([version]) + sha256(commitment).digest()[1:]) def get_commitment(data: Bytes) -> Bytes: """ Take a blob and returns a cryptographic commitment to it. Note: Each cell holds the exact same copy of this commitment. """ # sanity check field_elements: int = cast(int, fork.get_blob_constant("FIELD_ELEMENTS_PER_BLOB")) bytes_per_field: int = cast(int, fork.get_blob_constant("BYTES_PER_FIELD_ELEMENT")) assert len(data) == field_elements * bytes_per_field, ( f"Expected blob of length " f"{field_elements * bytes_per_field} but got blob of length {len(data)}" ) # calculate commitment commitment = ckzg.blob_to_kzg_commitment(data, Blob.trusted_setup()) assert len(commitment) == fork.get_blob_constant("BYTES_PER_COMMITMENT"), ( f"Expected {fork.get_blob_constant('BYTES_PER_COMMITMENT')} " f"resulting commitments but got {len(commitment)} commitments" ) return commitment def get_proof(fork: Fork, data: Bytes) -> List[Bytes] | Bytes: # determine whether this fork is = osaka by looking at # amount of cell_proofs amount_cell_proofs = fork.get_blob_constant("AMOUNT_CELL_PROOFS") # cancun, prague if amount_cell_proofs == 0: z = 2 # 2 is one of many possible valid field elements z # https://github.com/ethereum/consensus-specs/blob/ad884507f # 7a1d5962cd3dfb5f7b3e41aab728c55/tests/core/pyspec/eth2spec/ # test/utils/kzg_tests.py#L58-L66) z_valid_size: bytes = z.to_bytes( cast(int, fork.get_blob_constant("BYTES_PER_FIELD_ELEMENT")), byteorder="big" ) proof, _ = ckzg.compute_kzg_proof(data, z_valid_size, Blob.trusted_setup()) return proof # >=osaka if amount_cell_proofs == 128: _, proofs = ckzg.compute_cells_and_kzg_proofs( data, Blob.trusted_setup() ) # returns List[byte] of length 128 return proofs raise AssertionError( f"get_proof() has not been implemented yet for fork: {fork.name()}." f"Got amount of cell proofs {amount_cell_proofs} but expected 128." ) def get_cells(fork: Fork, data: Bytes) -> List[Bytes] | None: # determine whether this fork is = osaka by looking at # amount of cell_proofs amount_cell_proofs = fork.get_blob_constant("AMOUNT_CELL_PROOFS") # cancun, prague if amount_cell_proofs == 0: return None # >=osaka if amount_cell_proofs == 128: cells, _ = ckzg.compute_cells_and_kzg_proofs( data, Blob.trusted_setup() ) # returns List[byte] of length 128 return cells # List[bytes] raise AssertionError( f"get_cells() has not been implemented yet for fork: {fork.name()}. Got amount of " f"cell proofs {amount_cell_proofs} but expected 128." ) # first, create cached blobs dir if necessary if not CACHED_BLOBS_DIRECTORY.exists(): CACHED_BLOBS_DIRECTORY.mkdir( parents=True, exist_ok=True ) # create all necessary dirs on the way # handle transition forks (blob related constants are needed and only # available for normal forks) fork = fork.fork_at(timestamp=timestamp) # if this blob already exists then load from file. use lock blob_location: Path = Blob.get_filepath(fork, seed) # use lock to avoid race conditions lock_file_path = blob_location.with_suffix(".lock") with FileLock(lock_file_path): if blob_location.exists(): logger.debug(f"Blob exists already, reading it from file {blob_location}") return Blob.from_file(Blob.get_filename(fork, seed)) assert fork.supports_blobs(), f"Provided fork {fork.name()} does not support blobs!" # get data for blob parameters data: Bytes = generate_blob_data(seed) commitment: Bytes = get_commitment(data) proof: List[Bytes] | Bytes = get_proof(fork, data) cells: List[Bytes] | None = get_cells(fork, data) versioned_hash: Hash = get_versioned_hash(commitment) name: str = Blob.get_filename(fork, seed) blob = Blob( data=data, commitment=commitment, proof=proof, cells=cells, versioned_hash=versioned_hash, name=name, fork=fork, seed=seed, timestamp=timestamp, ) # for most effective caching temporarily persist every blob that is # created in cache blob.write_to_file() return blob @staticmethod def from_file(file_name: str) -> "Blob": """ Read a .json file and reconstruct object it represents. You can load a blob only via its filename (with or without .json extension). """ # ensure filename was passed assert file_name.startswith("blob_"), ( f"You provided an invalid blob filename. Expected it to start with 'blob_' " f"but got: {file_name}" ) if ".json" not in file_name: file_name = file_name + ".json" # determine path where this blob would be stored if it existed blob_file_location = CACHED_BLOBS_DIRECTORY / file_name # check whether blob exists assert blob_file_location.exists(), ( f"Tried to load blob from file but {blob_file_location} does not exist" ) # read blob from file with open(blob_file_location, "r", encoding="utf-8") as f: json_str: str = f.read() # reconstruct and return blob object return Blob.model_validate_json(json_str) def write_to_file(self) -> None: """Take a blob object, serialize it and write it to disk as json.""" json_str = self.model_dump_json() output_location = Blob.get_filepath(self.fork, self.seed) # use lock to avoid race conditions lock_file_path = output_location.with_suffix(".lock") with FileLock(lock_file_path): # warn if existing static_blob gets overwritten if output_location.exists(): logger.debug(f"Blob {output_location} already exists. It will be overwritten.") # overwrite existing with open(output_location, "w", encoding="utf-8") as f: f.write(json_str) def verify_cell_kzg_proof_batch(self, cell_indices: list) -> bool: """ Check whether all cell proofs are valid and returns True only if that is the case. """ amount_cell_proofs: int = cast(int, self.fork.get_blob_constant("AMOUNT_CELL_PROOFS")) assert amount_cell_proofs > 0, ( f"verify_cell_kzg_proof_batch() is not available for your fork: {self.fork.name()}." ) assert self.cells is not None, "self.cells is None, critical error." assert len(cell_indices) == len(self.cells), ( f"Cell Indices list (detected length {len(cell_indices)}) and Cell list " f"(detected length {len(self.cells)}) should have same length." ) # each cell refers to the same commitment commitments: list[bytes] = [self.commitment] * len(cell_indices) is_valid = ckzg.verify_cell_kzg_proof_batch( commitments, cell_indices, self.cells, self.proof, Blob.trusted_setup() ) return is_valid def delete_cells_then_recover_them(self, deletion_indices: list[int]) -> None: """ Simulate the cell recovery process in user-specified scenario. Note: Requirement for successful reconstruction is having at least N of the 2N cells. Theoretical Usage: You pass a cell list with to 128 elements to this function along with a list of deletion indices. These cells will be deleted and then the ckzg recovery mechanism is used to repair the missing cells. If no assertion is triggered the reconstruction was successful. """ amount_cell_proofs: int = cast(int, self.fork.get_blob_constant("AMOUNT_CELL_PROOFS")) assert amount_cell_proofs > 0, ( f"delete_cells_then_recover_them() is not available for fork: {self.fork.name()}" ) assert self.cells is not None, "self.cells is None, critical problem." assert isinstance(self.proof, list), ( "This function only works when self.proof is a list, but it seems to be " " of type bytes (not a list)" ) assert len(self.cells) == 128, ( f"You are supposed to pass a full cell list with 128 elements to this function, " f"but got list of length {len(self.cells)}" ) assert len(deletion_indices) < 129, ( f"You can't delete more than every cell (max len of deletion indices list is 128), " f"but you passed a deletion indices list of length {len(deletion_indices)}" ) for i in deletion_indices: assert 0 <= i <= 127, f"Expected integers in range [0, 127], but got: {i}" # delete cells all_cell_indices: list[int] = list(range(128)) remaining_indices: list[int] = [i for i in all_cell_indices if i not in deletion_indices] remaining_cells = [c for i, c in enumerate(self.cells) if i not in deletion_indices] recovered_cells, recovered_proofs = ckzg.recover_cells_and_kzg_proofs( remaining_indices, remaining_cells, Blob.trusted_setup() ) # on success returns two lists of len 128 # determine success/failure assert len(recovered_cells) == len(self.cells), ( f"Failed to recover cell list. Original cell list had length {len(self.cells)} but " f"recovered cell list has length {len(recovered_cells)}" ) assert len(recovered_proofs) == len(self.proof), ( f"Failed to recover proofs list. Original proofs list had length {len(self.proof)} " f"but recovered proofs list has length {len(recovered_proofs)}" ) for i in range(len(recovered_cells)): assert self.cells[i] == recovered_cells[i], ( f"Failed to correctly restore missing cells. At index {i} original cell was " f"0x{self.cells[i].hex()} but reconstructed cell does not match: " f"0x{recovered_cells[i].hex()}" ) assert self.proof[i] == recovered_proofs[i], ( f"Failed to correctly restore missing proofs. At index {i} original proof was " f"0x{self.proof[i].hex()} but reconstructed proof does not match: " f"0x{recovered_proofs[i].hex()}" ) class ProofCorruptionMode(Enum): """ Define what the proof corruption modes do. For Osaka and later each Bytes object in the list is manipulated this way. """ CORRUPT_FIRST_BYTE = 1 # corrupts a single byte (index 0) CORRUPT_LAST_BYTE = 2 # corrupts a single byte (last valid index) CORRUPT_TO_ALL_ZEROES = 3 # sets all proof bytes to 0 CORRUPT_ALL_BYTES = 4 # corrupts all bytes def corrupt_proof(self, mode: ProofCorruptionMode) -> None: """Corrupt the proof field, supports different corruption modes.""" def corrupt_byte(b: bytes) -> Bytes: """ Bit-flip all bits of provided byte using XOR to guarantee change. """ if len(b) != 1: raise ValueError("Input must be a single byte") return Bytes(bytes([b[0] ^ 0xFF])) # >=osaka amount_cell_proofs: int = cast(int, self.fork.get_blob_constant("AMOUNT_CELL_PROOFS")) if amount_cell_proofs > 0: assert isinstance(self.proof, list), "proof was expected to be a list but it isn't" if mode == self.ProofCorruptionMode.CORRUPT_FIRST_BYTE: for i in range(len(self.proof)): b: Bytes = self.proof[i] corrupted: Bytes = Bytes(corrupt_byte(b[:1]) + b[1:]) self.proof[i] = corrupted elif mode == self.ProofCorruptionMode.CORRUPT_LAST_BYTE: for i in range(len(self.proof)): b = self.proof[i] corrupted = Bytes(b[:-1] + corrupt_byte(b[-1:])) self.proof[i] = corrupted elif mode == self.ProofCorruptionMode.CORRUPT_TO_ALL_ZEROES: for i in range(len(self.proof)): self.proof[i] = Bytes(bytes(len(self.proof[i]))) elif mode == self.ProofCorruptionMode.CORRUPT_ALL_BYTES: for i in range(len(self.proof)): b = self.proof[i] corrupted_bytes = Bytes(b"".join(corrupt_byte(bytes([byte])) for byte in b)) self.proof[i] = corrupted_bytes return # pre-osaka (cancun and prague) assert amount_cell_proofs == 0, ( f"You need to adjust corrupt_proof to handle fork {self.fork.name()}" ) assert isinstance(self.proof, Bytes), "proof was expected to be Bytes but it isn't" if mode == self.ProofCorruptionMode.CORRUPT_FIRST_BYTE: self.proof = Bytes(corrupt_byte(self.proof[:1]) + self.proof[1:]) elif mode == self.ProofCorruptionMode.CORRUPT_LAST_BYTE: self.proof = Bytes(self.proof[:-1] + corrupt_byte(self.proof[-1:])) elif mode == self.ProofCorruptionMode.CORRUPT_TO_ALL_ZEROES: self.proof = Bytes(bytes(len(self.proof))) elif mode == self.ProofCorruptionMode.CORRUPT_ALL_BYTES: self.proof = Bytes(b"".join(corrupt_byte(bytes([byte])) for byte in self.proof)) ================================================ FILE: src/ethereum_test_types/block_access_list/__init__.py ================================================ """ Block Access List (BAL) models for EIP-7928. Following the established pattern in the codebase (AccessList, AuthorizationTuple), these are simple data classes that can be composed together. """ from .account_absent_values import BalAccountAbsentValues from .account_changes import ( BalAccountChange, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageChange, BalStorageSlot, BlockAccessListChangeLists, ) from .exceptions import BlockAccessListValidationError from .expectations import ( BalAccountExpectation, BlockAccessListExpectation, compose, ) from .t8n import BlockAccessList __all__ = [ # Core models "BlockAccessList", "BlockAccessListExpectation", "BalAccountExpectation", "BalAccountAbsentValues", # Change types "BalAccountChange", "BalNonceChange", "BalBalanceChange", "BalCodeChange", "BalStorageChange", "BalStorageSlot", # Utilities "BlockAccessListChangeLists", "BlockAccessListValidationError", "compose", ] ================================================ FILE: src/ethereum_test_types/block_access_list/account_absent_values.py ================================================ """ BalAccountAbsentValues class for BAL testing. This module provides a unified class for specifying explicit absent values in Block Access Lists. This class uses the same change classes as BalAccountChanges to specify specific values that should NOT exist in the BAL. For checking complete absence, use BalAccountExpectation with empty lists instead. """ from typing import Any, List from pydantic import Field, model_validator from ethereum_test_base_types import CamelModel, StorageKey from .account_changes import ( BalAccountChange, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageSlot, ) from .exceptions import BlockAccessListValidationError EMPTY_LIST_ERROR_MSG = ( "Empty lists are not allowed. This would mean 'check for any change' and " "is bad practice. Instead, use the `BalAccountExpectation` to define " "explicit, expected changes." ) class BalAccountAbsentValues(CamelModel): """ Represents explicit absent value expectations for a specific account in a block. This class specifies specific changes that should NOT exist in the BAL for a given account. IMPORTANT: This class is for checking that specific values are absent, NOT for checking that entire categories are empty. For complete absence checks (e.g., "no nonce changes at all"), use BalAccountExpectation with empty lists instead. The validation works by checking that none of the specified explicit changes exist in the actual BAL. Example: # Forbid specific nonce change at tx 1 with post_nonce=5, and specific # storage change absent_values = BalAccountAbsentValues( nonce_changes=[ # Forbid exact nonce change at this tx BalNonceChange(tx_index=1, post_nonce=5), ], storage_changes=[ BalStorageSlot( slot=0x42, slot_changes=[ # Forbid exact storage change at this slot and tx BalStorageChange(tx_index=2, post_value=0x99) ], ) ], ) For checking complete absence: # Use BalAccountExpectation with empty lists instead expectation = BalAccountExpectation( nonce_changes=[], # Expect NO nonce changes at all storage_changes=[], # Expect NO storage changes at all ) """ model_config = CamelModel.model_config | {"extra": "forbid"} nonce_changes: List[BalNonceChange] = Field( default_factory=list, description="List of nonce changes that should NOT exist in the BAL. " "Validates that none of these changes are present.", ) balance_changes: List[BalBalanceChange] = Field( default_factory=list, description="List of balance changes that should NOT exist in the BAL. " "Validates that none of these changes are present.", ) code_changes: List[BalCodeChange] = Field( default_factory=list, description="List of code changes that should NOT exist in the BAL. " "Validates that none of these changes are present.", ) storage_changes: List[BalStorageSlot] = Field( default_factory=list, description="List of storage slots/changes that should NOT exist in the BAL. " "Validates that none of these changes are present.", ) storage_reads: List[StorageKey] = Field( default_factory=list, description="List of storage slots that should NOT be read.", ) @model_validator(mode="after") def validate_specific_absences_only(self) -> "BalAccountAbsentValues": """Ensure absence fields contain specific values, not empty checks.""" # at least one field must have content if not any( [ self.nonce_changes, self.balance_changes, self.code_changes, self.storage_changes, self.storage_reads, ] ): raise ValueError( "At least one absence field must be specified. " "`BalAccountAbsentValues` is for checking specific forbidden values. " f"{EMPTY_LIST_ERROR_MSG}" ) # check that no fields are explicitly set to empty lists field_checks = [ ("nonce_changes", self.nonce_changes), ("balance_changes", self.balance_changes), ("code_changes", self.code_changes), ("storage_changes", self.storage_changes), ("storage_reads", self.storage_reads), ] for field_name, field_value in field_checks: if field_name in self.model_fields_set and field_value == []: raise ValueError( f"`BalAccountAbsentValues.{field_name}` cannot be an empty list. " f"{EMPTY_LIST_ERROR_MSG}" ) # validate that storage_changes don't have empty slot_changes for storage_slot in self.storage_changes: if not storage_slot.slot_changes: raise ValueError( f"`BalAccountAbsentValues.storage_changes[{storage_slot.slot}].slot_changes` " f"cannot be an empty list. {EMPTY_LIST_ERROR_MSG}" ) return self @staticmethod def _validate_forbidden_changes( actual_changes: List, forbidden_changes: List, match_fn: Any, error_msg_fn: Any, ) -> None: for actual in actual_changes: for forbidden in forbidden_changes: if match_fn(actual, forbidden): raise BlockAccessListValidationError(error_msg_fn(actual)) def validate_against(self, account: BalAccountChange) -> None: """ Validate that the account does not contain the forbidden changes specified in this object. Args: account: The BalAccountChange to validate against Raises: BlockAccessListValidationError: If any forbidden changes are found """ self._validate_forbidden_changes( account.nonce_changes, self.nonce_changes, lambda a, f: a.tx_index == f.tx_index and a.post_nonce == f.post_nonce, lambda a: f"Unexpected nonce change found at tx {a.tx_index}", ) self._validate_forbidden_changes( account.balance_changes, self.balance_changes, lambda a, f: a.tx_index == f.tx_index and a.post_balance == f.post_balance, lambda a: f"Unexpected balance change found at tx {a.tx_index}", ) self._validate_forbidden_changes( account.code_changes, self.code_changes, lambda a, f: a.tx_index == f.tx_index and a.new_code == f.new_code, lambda a: f"Unexpected code change found at tx {a.tx_index}", ) for forbidden_storage_slot in self.storage_changes: for actual_storage_slot in account.storage_changes: if actual_storage_slot.slot == forbidden_storage_slot.slot: slot_id = actual_storage_slot.slot self._validate_forbidden_changes( actual_storage_slot.slot_changes, forbidden_storage_slot.slot_changes, lambda a, f: (a.tx_index == f.tx_index and a.post_value == f.post_value), lambda a, slot=slot_id: ( f"Unexpected storage change found at slot {slot} in tx {a.tx_index}" ), ) for forbidden_read in self.storage_reads: for actual_read in account.storage_reads: if actual_read == forbidden_read: raise BlockAccessListValidationError( f"Unexpected storage read found at slot {actual_read}" ) __all__ = [ "BalAccountAbsentValues", ] ================================================ FILE: src/ethereum_test_types/block_access_list/account_changes.py ================================================ """ Account change classes for Block Access List. This module contains the core data structures representing changes to accounts in a block access list as defined in EIP-7928. """ from typing import ClassVar, List, Union from pydantic import Field from ethereum_test_base_types import ( Address, Bytes, CamelModel, HexNumber, RLPSerializable, StorageKey, ) class BalNonceChange(CamelModel, RLPSerializable): """Represents a nonce change in the block access list.""" model_config = CamelModel.model_config | {"extra": "forbid"} tx_index: HexNumber = Field( HexNumber(1), description="Transaction index where the change occurred", ) post_nonce: HexNumber = Field(..., description="Nonce value after the transaction") rlp_fields: ClassVar[List[str]] = ["tx_index", "post_nonce"] class BalBalanceChange(CamelModel, RLPSerializable): """Represents a balance change in the block access list.""" model_config = CamelModel.model_config | {"extra": "forbid"} tx_index: HexNumber = Field( HexNumber(1), description="Transaction index where the change occurred", ) post_balance: HexNumber = Field(..., description="Balance after the transaction") rlp_fields: ClassVar[List[str]] = ["tx_index", "post_balance"] class BalCodeChange(CamelModel, RLPSerializable): """Represents a code change in the block access list.""" model_config = CamelModel.model_config | {"extra": "forbid"} tx_index: HexNumber = Field( HexNumber(1), description="Transaction index where the change occurred", ) new_code: Bytes = Field(..., description="New code bytes") rlp_fields: ClassVar[List[str]] = ["tx_index", "new_code"] class BalStorageChange(CamelModel, RLPSerializable): """Represents a change to a specific storage slot.""" model_config = CamelModel.model_config | {"extra": "forbid"} tx_index: HexNumber = Field( HexNumber(1), description="Transaction index where the change occurred", ) post_value: StorageKey = Field(..., description="Value after the transaction") rlp_fields: ClassVar[List[str]] = ["tx_index", "post_value"] class BalStorageSlot(CamelModel, RLPSerializable): """Represents all changes to a specific storage slot.""" model_config = CamelModel.model_config | {"extra": "forbid"} slot: StorageKey = Field(..., description="Storage slot key") slot_changes: List[BalStorageChange] = Field( default_factory=list, description="List of changes to this slot" ) rlp_fields: ClassVar[List[str]] = ["slot", "slot_changes"] class BalAccountChange(CamelModel, RLPSerializable): """Represents all changes to a specific account in a block.""" model_config = CamelModel.model_config | {"extra": "forbid"} address: Address = Field(..., description="Account address") nonce_changes: List[BalNonceChange] = Field( default_factory=list, description="List of nonce changes" ) balance_changes: List[BalBalanceChange] = Field( default_factory=list, description="List of balance changes" ) code_changes: List[BalCodeChange] = Field( default_factory=list, description="List of code changes" ) storage_changes: List[BalStorageSlot] = Field( default_factory=list, description="List of storage changes" ) storage_reads: List[StorageKey] = Field( default_factory=list, description="List of storage slots that were read" ) rlp_fields: ClassVar[List[str]] = [ "address", "storage_changes", "storage_reads", "balance_changes", "nonce_changes", "code_changes", ] BlockAccessListChangeLists = Union[ List[BalNonceChange], List[BalBalanceChange], List[BalCodeChange], ] __all__ = [ "BalNonceChange", "BalBalanceChange", "BalCodeChange", "BalStorageChange", "BalStorageSlot", "BalAccountChange", "BlockAccessListChangeLists", ] ================================================ FILE: src/ethereum_test_types/block_access_list/exceptions.py ================================================ """Exceptions related to block access list validation.""" class BlockAccessListValidationError(Exception): """Custom exception for Block Access List validation errors.""" pass ================================================ FILE: src/ethereum_test_types/block_access_list/expectations.py ================================================ """ Block Access List expectation classes for test validation. This module contains classes for defining and validating expected BAL values in tests. """ from typing import Any, Callable, ClassVar, Dict, List, Optional from pydantic import Field, PrivateAttr from ethereum_test_base_types import Address, CamelModel, StorageKey from .account_absent_values import BalAccountAbsentValues from .account_changes import ( BalAccountChange, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageSlot, BlockAccessListChangeLists, ) from .exceptions import BlockAccessListValidationError from .t8n import BlockAccessList class BalAccountExpectation(CamelModel): """ Represents expected changes to a specific account in a block. Same as BalAccountChange but without the address field, used for expectations. """ model_config = CamelModel.model_config | {"extra": "forbid"} nonce_changes: List[BalNonceChange] = Field( default_factory=list, description="List of expected nonce changes" ) balance_changes: List[BalBalanceChange] = Field( default_factory=list, description="List of expected balance changes" ) code_changes: List[BalCodeChange] = Field( default_factory=list, description="List of expected code changes" ) storage_changes: List[BalStorageSlot] = Field( default_factory=list, description="List of expected storage changes" ) storage_reads: List[StorageKey] = Field( default_factory=list, description="List of expected read storage slots" ) absent_values: Optional[BalAccountAbsentValues] = Field( default=None, description="Explicit absent value expectations using BalAccountAbsentValues" ) _EMPTY: ClassVar[Optional["BalAccountExpectation"]] = None @classmethod def empty(cls) -> "BalAccountExpectation": """ Create an expectation that validates the account has NO changes. This is distinct from `BalAccountExpectation()` with no fields set, which is ambiguous and clashes with `model_fields_set` logic, and will raise a clarifying error if used in expectations. Returns: A BalAccountExpectation instance with all change lists empty. This uses a classvar to facilitate identity checks across multiple expectation instances. """ if cls._EMPTY is None: cls._EMPTY = cls( nonce_changes=[], balance_changes=[], code_changes=[], storage_changes=[], storage_reads=[], ) return cls._EMPTY def compose( *modifiers: Callable[["BlockAccessList"], "BlockAccessList"], ) -> Callable[["BlockAccessList"], "BlockAccessList"]: """Compose multiple modifiers into a single modifier.""" def composed(bal: BlockAccessList) -> BlockAccessList: result = bal for modifier in modifiers: result = modifier(result) return result return composed class BlockAccessListExpectation(CamelModel): """ Block Access List expectation model for test writing. This model is used to define expected BAL values in tests. It supports: - Partial validation (only checks explicitly set fields) - Convenient test syntax with named parameters - Verification against actual BAL from t8n - Explicit exclusion of addresses (using None values) Example: # In test definition expected_block_access_list = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)] ), bob: None, # Bob should NOT be in the BAL } ) """ model_config = CamelModel.model_config | {"extra": "forbid"} account_expectations: Dict[Address, BalAccountExpectation | None] = Field( default_factory=dict, description="Expected account changes or exclusions to verify" ) _modifier: Callable[["BlockAccessList"], "BlockAccessList"] | None = PrivateAttr(default=None) def modify( self, *modifiers: Callable[["BlockAccessList"], "BlockAccessList"] ) -> "BlockAccessListExpectation": """ Create a new expectation with a modifier for invalid test cases. Args: modifiers: One or more functions that take and return a BlockAccessList Returns: A new BlockAccessListExpectation instance with the modifiers applied Example: from ethereum_test_types.block_access_list. modifiers import remove_nonces expectation = BlockAccessListExpectation( account_expectations={...} ).modify(remove_nonces(alice)) """ new_instance = self.model_copy(deep=True) new_instance._modifier = compose(*modifiers) return new_instance def modify_if_invalid_test(self, t8n_bal: "BlockAccessList") -> "BlockAccessList": """ Apply the modifier to the given BAL if this is an invalid test case. Args: t8n_bal: The BlockAccessList from t8n tool Returns: The potentially transformed BlockAccessList for the fixture """ if self._modifier: return self._modifier(t8n_bal) return t8n_bal def verify_against(self, actual_bal: "BlockAccessList") -> None: """ Verify that the actual BAL from the client matches this expected BAL. Validation steps: 1. Validate actual BAL conforms to EIP-7928 ordering requirements 2. Verify address expectations - presence or explicit absence 3. Verify expected changes within accounts match actual changes Args: actual_bal: The BlockAccessList model from the client Raises: BlockAccessListValidationError: If verification fails """ # validate the actual BAL structure follows EIP-7928 ordering self._validate_bal_ordering(actual_bal) actual_accounts_by_addr = {acc.address: acc for acc in actual_bal.root} for address, expectation in self.account_expectations.items(): if expectation is None: # check explicit exclusion of address when set to `None` if address in actual_accounts_by_addr: raise BlockAccessListValidationError( f"Address {address} should not be in BAL but was found" ) elif not expectation.model_fields_set: # Disallow ambiguous BalAccountExpectation() with no fields set raise BlockAccessListValidationError( f"Address {address}: BalAccountExpectation() with no fields set is " f"ambiguous. Use BalAccountExpectation.empty() to validate no changes, " f"or explicitly set the fields to validate " f"(e.g., nonce_changes=[...])." ) else: # check address is present and validate changes if address not in actual_accounts_by_addr: raise BlockAccessListValidationError( f"Expected address {address} not found in actual BAL" ) if expectation is BalAccountExpectation.empty(): # explicit check for "no changes" validation w/ .empty() if actual_accounts_by_addr.get(address) != BalAccountChange(address=address): raise BlockAccessListValidationError( f"No account changes expected for {address} but found " f"changes: {actual_accounts_by_addr[address]}" ) actual_account = actual_accounts_by_addr[address] try: self._compare_account_expectations(expectation, actual_account) except AssertionError as e: raise BlockAccessListValidationError(f"Account {address}: {str(e)}") from e @staticmethod def _validate_bal_ordering(bal: "BlockAccessList") -> None: """ Validate BAL ordering follows EIP-7928 requirements. Args: bal: The BlockAccessList to validate Raises: BlockAccessListValidationError: If ordering is invalid """ # Check address ordering (ascending) for i in range(1, len(bal.root)): if bal.root[i - 1].address >= bal.root[i].address: raise BlockAccessListValidationError( f"BAL addresses are not in lexicographic order: " f"{bal.root[i - 1].address} >= {bal.root[i].address}" ) # Check transaction index ordering and uniqueness within accounts for account in bal.root: changes_to_check: List[tuple[str, BlockAccessListChangeLists]] = [ ("nonce_changes", account.nonce_changes), ("balance_changes", account.balance_changes), ("code_changes", account.code_changes), ] for field_name, change_list in changes_to_check: if not change_list: continue tx_indices = [c.tx_index for c in change_list] # Check both ordering and duplicates if tx_indices != sorted(tx_indices): raise BlockAccessListValidationError( f"Transaction indices not in ascending order in {field_name} of account " f"{account.address}. Got: {tx_indices}, Expected: {sorted(tx_indices)}" ) if len(tx_indices) != len(set(tx_indices)): duplicates = sorted({idx for idx in tx_indices if tx_indices.count(idx) > 1}) raise BlockAccessListValidationError( f"Duplicate transaction indices in {field_name} of account " f"{account.address}. Duplicates: {duplicates}" ) # Check storage slot ordering for i in range(1, len(account.storage_changes)): if account.storage_changes[i - 1].slot >= account.storage_changes[i].slot: raise BlockAccessListValidationError( f"Storage slots not in ascending order in account " f"{account.address}: {account.storage_changes[i - 1].slot} >= " f"{account.storage_changes[i].slot}" ) # Check transaction index ordering and uniqueness within storage # slots for storage_slot in account.storage_changes: if not storage_slot.slot_changes: continue tx_indices = [c.tx_index for c in storage_slot.slot_changes] # Check both ordering and duplicates if tx_indices != sorted(tx_indices): raise BlockAccessListValidationError( f"Transaction indices not in ascending order in storage slot " f"{storage_slot.slot} of account {account.address}. " f"Got: {tx_indices}, Expected: {sorted(tx_indices)}" ) if len(tx_indices) != len(set(tx_indices)): duplicates = sorted({idx for idx in tx_indices if tx_indices.count(idx) > 1}) raise BlockAccessListValidationError( f"Duplicate transaction indices in storage slot " f"{storage_slot.slot} of account {account.address}. " f"Duplicates: {duplicates}" ) # Check storage reads ordering for i in range(1, len(account.storage_reads)): if account.storage_reads[i - 1] >= account.storage_reads[i]: raise BlockAccessListValidationError( f"Storage reads not in ascending order in account " f"{account.address}: {account.storage_reads[i - 1]} >= " f"{account.storage_reads[i]}" ) @staticmethod def _compare_account_expectations( expected: BalAccountExpectation, actual: BalAccountChange ) -> None: """ Compare expected and actual account changes using subsequence validation. Args: expected: The expected account changes actual: The actual account changes from the BAL Raises: AssertionError: If validation fails """ # Check absence expectations first if defined if expected.absent_values is not None: expected.absent_values.validate_against(actual) # Validate expected changes using subsequence validation field_pairs: List[tuple[str, Any, Any]] = [ ("nonce_changes", expected.nonce_changes, actual.nonce_changes), ("balance_changes", expected.balance_changes, actual.balance_changes), ("code_changes", expected.code_changes, actual.code_changes), ("storage_changes", expected.storage_changes, actual.storage_changes), ("storage_reads", expected.storage_reads, actual.storage_reads), ] for field_name, expected_list, actual_list in field_pairs: # Only validate fields that were explicitly set if field_name not in expected.model_fields_set: continue # Check if explicitly set to empty but actual has values if not expected_list and actual_list: raise BlockAccessListValidationError( f"Expected {field_name} to be empty but found {actual_list}" ) if field_name == "storage_reads": # storage_reads is a simple list of StorageKey actual_idx = 0 for expected_read in expected_list: found = False while actual_idx < len(actual_list): if actual_list[actual_idx] == expected_read: found = True actual_idx += 1 break actual_idx += 1 if not found: raise BlockAccessListValidationError( f"Storage read {expected_read} not found or not in correct order. " f"Actual reads: {actual_list}" ) elif field_name == "storage_changes": # storage_changes is a list of BalStorageSlot actual_idx = 0 for expected_slot in expected_list: found = False while actual_idx < len(actual_list): if actual_list[actual_idx].slot == expected_slot.slot: # Found matching slot, now validate slot_changes actual_slot_changes = actual_list[actual_idx].slot_changes expected_slot_changes = expected_slot.slot_changes if not expected_slot_changes: # Empty expected means any # slot_changes are acceptable pass else: # Validate slot_changes as subsequence slot_actual_idx = 0 for expected_change in expected_slot_changes: slot_found = False while slot_actual_idx < len(actual_slot_changes): actual_change = actual_slot_changes[slot_actual_idx] if ( actual_change.tx_index == expected_change.tx_index and actual_change.post_value == expected_change.post_value ): slot_found = True slot_actual_idx += 1 break slot_actual_idx += 1 if not slot_found: raise BlockAccessListValidationError( f"Storage change {expected_change} not found " f"or not in correct order in slot " f"{expected_slot.slot}. " f"Actual slot changes: {actual_slot_changes}" ) found = True actual_idx += 1 break actual_idx += 1 if not found: raise BlockAccessListValidationError( f"Storage slot {expected_slot.slot} not found " f"or not in correct order. Actual slots: " f"{[s.slot for s in actual_list]}" ) else: # Handle nonce_changes, balance_changes, code_changes # Create tuples for comparison (ordering already validated) if field_name == "nonce_changes": expected_tuples = [(c.tx_index, c.post_nonce) for c in expected_list] actual_tuples = [(c.tx_index, c.post_nonce) for c in actual_list] item_type = "nonce" elif field_name == "balance_changes": expected_tuples = [(c.tx_index, int(c.post_balance)) for c in expected_list] actual_tuples = [(c.tx_index, int(c.post_balance)) for c in actual_list] item_type = "balance" elif field_name == "code_changes": expected_tuples = [(c.tx_index, bytes(c.new_code)) for c in expected_list] actual_tuples = [(c.tx_index, bytes(c.new_code)) for c in actual_list] item_type = "code" else: # sanity check raise ValueError(f"Unexpected field type: {field_name}") # Check that expected forms a subsequence of actual actual_idx = 0 for exp_tuple in expected_tuples: found = False while actual_idx < len(actual_tuples): if actual_tuples[actual_idx] == exp_tuple: found = True actual_idx += 1 break actual_idx += 1 if not found: raise BlockAccessListValidationError( f"{item_type.capitalize()} change {exp_tuple} not found " f"or not in correct order. Actual changes: {actual_tuples}" ) __all__ = [ "BalAccountExpectation", "BlockAccessListExpectation", "compose", ] ================================================ FILE: src/ethereum_test_types/block_access_list/modifiers.py ================================================ """ BAL modifier functions for invalid test cases. This module provides modifier functions that can be used to modify Block Access Lists in various ways for testing invalid block scenarios. They are composable and can be combined to create complex modifications. """ from typing import Any, Callable, List, Optional from ethereum_test_base_types import Address, HexNumber from .. import BalCodeChange from . import ( BalAccountChange, BalBalanceChange, BalNonceChange, BalStorageChange, BlockAccessList, ) def _remove_field_from_accounts( addresses: tuple[Address, ...], field_name: str ) -> Callable[[BlockAccessList], BlockAccessList]: """Abstracted helper to remove a field from specified accounts.""" len_addresses = len(addresses) found_addresses = set() def transform(bal: BlockAccessList) -> BlockAccessList: nonlocal found_addresses new_root = [] for account_change in bal.root: if account_change.address in addresses: found_addresses.add(account_change.address) new_account = account_change.model_copy(deep=True) # clear the specified field setattr(new_account, field_name, []) new_root.append(new_account) else: new_root.append(account_change) if len(found_addresses) != len_addresses: # sanity check that we found all addresses specified missing = set(addresses) - found_addresses raise ValueError(f"Some specified addresses were not found in the BAL: {missing}") return BlockAccessList(root=new_root) return transform def _modify_field_value( address: Address, tx_index: int, field_name: str, change_class: type, new_value: Any, value_field: str = "post_value", nested: bool = False, slot: Optional[int] = None, ) -> Callable[[BlockAccessList], BlockAccessList]: """ Abstracted helper to modify a field value for a specific account and transaction. """ found_address = False def transform(bal: BlockAccessList) -> BlockAccessList: nonlocal found_address new_root = [] for account_change in bal.root: if account_change.address == address: found_address = True new_account = account_change.model_copy(deep=True) changes = getattr(new_account, field_name) if changes: if nested and slot is not None: # nested structure (storage) for storage_slot in changes: if storage_slot.slot == slot: for j, change in enumerate(storage_slot.slot_changes): if change.tx_index == tx_index: kwargs = {"tx_index": tx_index, value_field: new_value} storage_slot.slot_changes[j] = change_class(**kwargs) break break else: # flat structure (nonce, balance, code) for i, change in enumerate(changes): if change.tx_index == tx_index: kwargs = {"tx_index": tx_index, value_field: new_value} changes[i] = change_class(**kwargs) break new_root.append(new_account) else: new_root.append(account_change) if not found_address: # sanity check that we actually found the address raise ValueError(f"Address {address} not found in BAL to modify {field_name}") return BlockAccessList(root=new_root) return transform def remove_accounts(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Remove entire account entries from the BAL.""" def transform(bal: BlockAccessList) -> BlockAccessList: new_root = [] for account_change in bal.root: if account_change.address not in addresses: new_root.append(account_change) return BlockAccessList(root=new_root) return transform def remove_nonces(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Remove nonce changes from specified accounts.""" return _remove_field_from_accounts(addresses, "nonce_changes") def remove_balances(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Remove balance changes from specified accounts.""" return _remove_field_from_accounts(addresses, "balance_changes") def remove_storage(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Remove storage changes from specified accounts.""" return _remove_field_from_accounts(addresses, "storage_changes") def remove_storage_reads(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Remove storage reads from specified accounts.""" return _remove_field_from_accounts(addresses, "storage_reads") def remove_code(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Remove code changes from specified accounts.""" return _remove_field_from_accounts(addresses, "code_changes") def modify_nonce( address: Address, tx_index: int, nonce: int ) -> Callable[[BlockAccessList], BlockAccessList]: """Set an incorrect nonce value for a specific account and transaction.""" return _modify_field_value( address, tx_index, "nonce_changes", BalNonceChange, nonce, "post_nonce" ) def modify_balance( address: Address, tx_index: int, balance: int ) -> Callable[[BlockAccessList], BlockAccessList]: """ Set an incorrect balance value for a specific account and transaction. """ return _modify_field_value( address, tx_index, "balance_changes", BalBalanceChange, balance, "post_balance" ) def modify_storage( address: Address, tx_index: int, slot: int, value: int ) -> Callable[[BlockAccessList], BlockAccessList]: """ Set an incorrect storage value for a specific account, transaction, and slot. """ return _modify_field_value( address, tx_index, "storage_changes", BalStorageChange, value, "post_value", nested=True, slot=slot, ) def modify_code( address: Address, tx_index: int, code: bytes ) -> Callable[[BlockAccessList], BlockAccessList]: """Set an incorrect code value for a specific account and transaction.""" return _modify_field_value(address, tx_index, "code_changes", BalCodeChange, code, "post_code") def swap_tx_indices(tx1: int, tx2: int) -> Callable[[BlockAccessList], BlockAccessList]: """Swap transaction indices throughout the BAL, modifying tx ordering.""" nonce_indices = {tx1: False, tx2: False} balance_indices = nonce_indices.copy() storage_indices = nonce_indices.copy() code_indices = nonce_indices.copy() def transform(bal: BlockAccessList) -> BlockAccessList: nonlocal nonce_indices, balance_indices, storage_indices, code_indices new_root = [] for account_change in bal.root: new_account = account_change.model_copy(deep=True) # Swap in nonce changes if new_account.nonce_changes: for nonce_change in new_account.nonce_changes: if nonce_change.tx_index == tx1: nonce_indices[tx1] = True nonce_change.tx_index = HexNumber(tx2) elif nonce_change.tx_index == tx2: nonce_indices[tx2] = True nonce_change.tx_index = HexNumber(tx1) # Swap in balance changes if new_account.balance_changes: for balance_change in new_account.balance_changes: if balance_change.tx_index == tx1: balance_indices[tx1] = True balance_change.tx_index = HexNumber(tx2) elif balance_change.tx_index == tx2: balance_indices[tx2] = True balance_change.tx_index = HexNumber(tx1) # Swap in storage changes (nested structure) if new_account.storage_changes: for storage_slot in new_account.storage_changes: for storage_change in storage_slot.slot_changes: if storage_change.tx_index == tx1: balance_indices[tx1] = True storage_change.tx_index = HexNumber(tx2) elif storage_change.tx_index == tx2: balance_indices[tx2] = True storage_change.tx_index = HexNumber(tx1) # Note: storage_reads is just a list of StorageKey, no tx_index to # swap # Swap in code changes if new_account.code_changes: for code_change in new_account.code_changes: if code_change.tx_index == tx1: code_indices[tx1] = True code_change.tx_index = HexNumber(tx2) elif code_change.tx_index == tx2: code_indices[tx2] = True code_change.tx_index = HexNumber(tx1) new_root.append(new_account) return BlockAccessList(root=new_root) return transform def append_account( account_change: BalAccountChange, ) -> Callable[[BlockAccessList], BlockAccessList]: """Append an account to account changes.""" def transform(bal: BlockAccessList) -> BlockAccessList: new_root = list(bal.root) new_root.append(account_change) return BlockAccessList(root=new_root) return transform def duplicate_account(address: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Duplicate an account entry in the BAL.""" address_present = False def transform(bal: BlockAccessList) -> BlockAccessList: nonlocal address_present new_root = [] for account_change in bal.root: new_root.append(account_change) if account_change.address == address: # Add duplicate immediately after new_root.append(account_change.model_copy(deep=True)) address_present = True if not address_present: # sanity check that we actually duplicate raise ValueError(f"Address {address} not found in BAL to duplicate") return BlockAccessList(root=new_root) return transform def reverse_accounts() -> Callable[[BlockAccessList], BlockAccessList]: """Reverse the order of accounts in the BAL.""" def transform(bal: BlockAccessList) -> BlockAccessList: return BlockAccessList(root=list(reversed(bal.root))) return transform def sort_accounts_by_address() -> Callable[[BlockAccessList], BlockAccessList]: """Sort accounts by address (may modify expected ordering).""" def transform(bal: BlockAccessList) -> BlockAccessList: sorted_root = sorted(bal.root, key=lambda x: x.address) return BlockAccessList(root=sorted_root) return transform def reorder_accounts(indices: List[int]) -> Callable[[BlockAccessList], BlockAccessList]: """Reorder accounts according to the provided index list.""" def transform(bal: BlockAccessList) -> BlockAccessList: if len(indices) != len(bal.root): raise ValueError("Index list length must match number of accounts") new_root = [bal.root[i] for i in indices] return BlockAccessList(root=new_root) return transform def clear_all() -> Callable[[BlockAccessList], BlockAccessList]: """Return an empty BAL.""" def transform(bal: BlockAccessList) -> BlockAccessList: del bal return BlockAccessList(root=[]) return transform def keep_only(*addresses: Address) -> Callable[[BlockAccessList], BlockAccessList]: """Keep only the specified accounts, removing all others.""" len_addresses = len(addresses) def transform(bal: BlockAccessList) -> BlockAccessList: new_root = [] for account_change in bal.root: if account_change.address in addresses: new_root.append(account_change) if len(new_root) != len_addresses: # sanity check that we found all specified addresses raise ValueError("Some specified addresses were not found in the BAL") return BlockAccessList(root=new_root) return transform __all__ = [ # Core functions # Account-level modifiers "remove_accounts", "append_account", "duplicate_account", "reverse_accounts", "keep_only", # Field-level modifiers "remove_nonces", "remove_balances", "remove_storage", "remove_storage_reads", "remove_code", # Value modifiers "modify_nonce", "modify_balance", "modify_storage", "modify_code", # Transaction index modifiers "swap_tx_indices", ] ================================================ FILE: src/ethereum_test_types/block_access_list/t8n.py ================================================ """Block Access List (BAL) for t8n tool communication and fixtures.""" from functools import cached_property from typing import Any, List import ethereum_rlp as eth_rlp from pydantic import Field from ethereum_test_base_types import Bytes, EthereumTestRootModel from ethereum_test_base_types.serialization import to_serializable_element from .account_changes import BalAccountChange class BlockAccessList(EthereumTestRootModel[List[BalAccountChange]]): """ Block Access List for t8n tool communication and fixtures. This model represents the BAL exactly as defined in EIP-7928 - it is itself a list of account changes (root model), not a container. Used for: - Communication with t8n tools - Fixture generation - RLP encoding for hash verification Example: bal = BlockAccessList([ BalAccountChange(address=alice, nonce_changes=[...]), BalAccountChange(address=bob, balance_changes=[...]) ]) """ root: List[BalAccountChange] = Field(default_factory=list) def to_list(self) -> List[Any]: """Return the list for RLP encoding per EIP-7928.""" return to_serializable_element(self.root) @cached_property def rlp(self) -> Bytes: """Return the RLP encoded block access list for hash verification.""" return Bytes(eth_rlp.encode(self.to_list())) @cached_property def rlp_hash(self) -> Bytes: """Return the hash of the RLP encoded block access list.""" return self.rlp.keccak256() ================================================ FILE: src/ethereum_test_types/block_types.py ================================================ """Block-related types for Ethereum tests.""" import hashlib from dataclasses import dataclass from functools import cached_property from typing import Any, Dict, Generic, List, Sequence import ethereum_rlp as eth_rlp from ethereum_types.numeric import Uint from pydantic import Field, computed_field from trie import HexaryTrie from ethereum_test_base_types import ( Address, Bytes, CamelModel, EmptyOmmersRoot, Hash, HexNumber, NumberBoundTypeVar, ZeroPaddedHexNumber, ) from ethereum_test_forks import Fork DEFAULT_BASE_FEE = 7 CURRENT_MAINNET_BLOCK_GAS_LIMIT = 45_000_000 DEFAULT_BLOCK_GAS_LIMIT = CURRENT_MAINNET_BLOCK_GAS_LIMIT * 2 @dataclass class EnvironmentDefaults: """Default environment values.""" # By default, the constant `DEFAULT_BLOCK_GAS_LIMIT` is used. # Other libraries (pytest plugins) may override this value by modifying the # `EnvironmentDefaults.gas_limit` class attribute. gas_limit: int = DEFAULT_BLOCK_GAS_LIMIT class WithdrawalGeneric(CamelModel, Generic[NumberBoundTypeVar]): """ Withdrawal generic type, used as a parent class for `Withdrawal` and `FixtureWithdrawal`. """ index: NumberBoundTypeVar validator_index: NumberBoundTypeVar address: Address amount: NumberBoundTypeVar def to_serializable_list(self) -> List[Any]: """ Return list of the withdrawal's attributes in the order they should be serialized. """ return [ Uint(self.index), Uint(self.validator_index), self.address, Uint(self.amount), ] @staticmethod def list_root(withdrawals: Sequence["WithdrawalGeneric"]) -> bytes: """Return withdrawals root of a list of withdrawals.""" t = HexaryTrie(db={}) for i, w in enumerate(withdrawals): t.set(eth_rlp.encode(Uint(i)), eth_rlp.encode(w.to_serializable_list())) return t.root_hash class Withdrawal(WithdrawalGeneric[HexNumber]): """Withdrawal type.""" pass class EnvironmentGeneric(CamelModel, Generic[NumberBoundTypeVar]): """Used as a parent class for `Environment` and `FixtureEnvironment`.""" fee_recipient: Address = Field( Address("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"), alias="currentCoinbase", ) gas_limit: NumberBoundTypeVar = Field( default_factory=lambda: EnvironmentDefaults.gas_limit, alias="currentGasLimit" ) # type: ignore number: NumberBoundTypeVar = Field(1, alias="currentNumber") # type: ignore timestamp: NumberBoundTypeVar = Field(1_000, alias="currentTimestamp") # type: ignore prev_randao: NumberBoundTypeVar | None = Field(None, alias="currentRandom") difficulty: NumberBoundTypeVar | None = Field(None, alias="currentDifficulty") base_fee_per_gas: NumberBoundTypeVar | None = Field(None, alias="currentBaseFee") excess_blob_gas: NumberBoundTypeVar | None = Field(None, alias="currentExcessBlobGas") parent_difficulty: NumberBoundTypeVar | None = Field(None) parent_timestamp: NumberBoundTypeVar | None = Field(None) parent_base_fee_per_gas: NumberBoundTypeVar | None = Field(None, alias="parentBaseFee") parent_gas_used: NumberBoundTypeVar | None = Field(None) parent_gas_limit: NumberBoundTypeVar | None = Field(None) class Environment(EnvironmentGeneric[ZeroPaddedHexNumber]): """ Structure used to keep track of the context in which a block must be executed. """ blob_gas_used: ZeroPaddedHexNumber | None = Field(None, alias="currentBlobGasUsed") parent_ommers_hash: Hash = Field(Hash(EmptyOmmersRoot), alias="parentUncleHash") parent_blob_gas_used: ZeroPaddedHexNumber | None = Field(None) parent_excess_blob_gas: ZeroPaddedHexNumber | None = Field(None) parent_beacon_block_root: Hash | None = Field(None) block_hashes: Dict[ZeroPaddedHexNumber, Hash] = Field(default_factory=dict) ommers: List[Hash] = Field(default_factory=list) withdrawals: List[Withdrawal] | None = Field(None) extra_data: Bytes = Field(Bytes(b"\x00"), exclude=True) # EIP-7928: Block-level access lists bal_hash: Hash | None = Field(None) block_access_lists: Bytes | None = Field(None) @computed_field # type: ignore[prop-decorator] @cached_property def parent_hash(self) -> Hash | None: """ Obtains the latest hash according to the highest block number in `block_hashes`. """ if len(self.block_hashes) == 0: return None last_index = max(self.block_hashes.keys()) return Hash(self.block_hashes[last_index]) def set_fork_requirements(self, fork: Fork) -> "Environment": """Fill required fields in an environment depending on the fork.""" number = self.number timestamp = self.timestamp updated_values: Dict[str, Any] = {} if ( fork.header_prev_randao_required(block_number=number, timestamp=timestamp) and self.prev_randao is None ): updated_values["prev_randao"] = 0 if ( fork.header_withdrawals_required(block_number=number, timestamp=timestamp) and self.withdrawals is None ): updated_values["withdrawals"] = [] if ( fork.header_base_fee_required(block_number=number, timestamp=timestamp) and self.base_fee_per_gas is None and self.parent_base_fee_per_gas is None ): updated_values["base_fee_per_gas"] = DEFAULT_BASE_FEE if fork.header_zero_difficulty_required(block_number=number, timestamp=timestamp): updated_values["difficulty"] = 0 elif self.difficulty is None and self.parent_difficulty is None: updated_values["difficulty"] = 0x20000 if ( fork.header_excess_blob_gas_required(block_number=number, timestamp=timestamp) and self.excess_blob_gas is None and self.parent_excess_blob_gas is None ): updated_values["excess_blob_gas"] = 0 if ( fork.header_blob_gas_used_required(block_number=number, timestamp=timestamp) and self.blob_gas_used is None and self.parent_blob_gas_used is None ): updated_values["blob_gas_used"] = 0 if ( fork.header_beacon_root_required(block_number=number, timestamp=timestamp) and self.parent_beacon_block_root is None ): updated_values["parent_beacon_block_root"] = 0 return self.copy(**updated_values) def __hash__(self) -> int: """Hashes the environment object.""" hash_dict = self.model_dump(exclude_none=True, by_alias=True) sorted_items = sorted(hash_dict.items()) hash_string = str(sorted_items) digest = hashlib.sha256(hash_string.encode("utf-8")).digest() return int.from_bytes(digest[:8], byteorder="big") def __eq__(self, other: object) -> bool: """Check if two environment objects are equal.""" if not isinstance(other, Environment): return False self_dict = self.model_dump(exclude_none=True, by_alias=True) self_dict["extra_data"] = self.extra_data.hex() other_dict = other.model_dump(exclude_none=True, by_alias=True) other_dict["extra_data"] = other.extra_data.hex() return self_dict == other_dict ================================================ FILE: src/ethereum_test_types/chain_config_types.py ================================================ """Chain Configuration related types for Ethereum tests.""" from pydantic import Field from ethereum_test_base_types import CamelModel class ChainConfigDefaults: """ Default values for the chain configuration. Can be modified by modules that import this module and want to override the default values. """ chain_id: int = 1 class ChainConfig(CamelModel): """Chain configuration.""" chain_id: int = Field( default_factory=lambda: ChainConfigDefaults.chain_id, validate_default=True ) ================================================ FILE: src/ethereum_test_types/eof/__init__.py ================================================ """EVM Object Format Library to generate bytecode for testing purposes.""" from .constants import LATEST_EOF_VERSION __all__ = ("LATEST_EOF_VERSION",) ================================================ FILE: src/ethereum_test_types/eof/constants.py ================================================ """EVM Object Format generic constants. Applicable to all EOF versions.""" EOF_MAGIC = b"\xef\x00" """ The second byte found on every EOF formatted contract, which was chosen to avoid clashes with three contracts which were deployed on Mainnet. """ EOF_HEADER_TERMINATOR = b"\x00" """Byte that terminates the header of the EOF format.""" LATEST_EOF_VERSION = 1 """Latest existing EOF version.""" VERSION_BYTE_LENGTH = 1 """Length of the version byte.""" MAX_RUNTIME_STACK_HEIGHT = 1024 """ Maximum height of the EVM runtime operand stack. Exceeding this value during execution will result in the stack overflow exception. This value applies to both legacy EVM and EOF. """ ================================================ FILE: src/ethereum_test_types/eof/v1/__init__.py ================================================ """ EVM Object Format Version 1 Library to generate bytecode for testing purposes. """ from dataclasses import dataclass from enum import Enum, IntEnum, auto from functools import cached_property from typing import Any, Dict, List, Optional, Tuple from pydantic import Field, GetCoreSchemaHandler from pydantic_core.core_schema import ( PlainValidatorFunctionSchema, no_info_plain_validator_function, to_string_ser_schema, ) from ethereum_test_base_types import Bytes, Hash from ethereum_test_base_types.conversions import BytesConvertible from ethereum_test_base_types.pydantic import CopyValidateModel from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from ..constants import EOF_HEADER_TERMINATOR, EOF_MAGIC from .constants import ( HEADER_SECTION_CONTAINER_SIZE_BYTE_LENGTH, HEADER_SECTION_COUNT_BYTE_LENGTH, HEADER_SECTION_KIND_BYTE_LENGTH, HEADER_SECTION_SIZE_BYTE_LENGTH, NON_RETURNING_SECTION, TYPES_INPUTS_BYTE_LENGTH, TYPES_OUTPUTS_BYTE_LENGTH, TYPES_STACK_BYTE_LENGTH, VERSION_NUMBER_BYTES, ) class SectionKind(IntEnum): """Enum class of V1 valid section kind values.""" TYPE = 1 CODE = 2 CONTAINER = 3 DATA = 0xFF def __str__(self) -> str: """Return string representation of the section kind.""" return self.name class ContainerKind(Enum): """Enum class of V1 valid container kind values.""" RUNTIME = auto() INITCODE = auto() @staticmethod def __get_pydantic_core_schema__( source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Call class constructor without info and appends the serialization schema. """ return no_info_plain_validator_function( source_type.from_str, serialization=to_string_ser_schema(), ) @staticmethod def from_str(value: "str | ContainerKind | None") -> "ContainerKind | None": """Return ContainerKind enum value from a string.""" if value is None: return None if isinstance(value, ContainerKind): return value return ContainerKind[value.upper()] def __str__(self) -> str: """Return string representation of the container kind.""" return self.name class AutoSection(Enum): """Enum class for auto section generation approach.""" AUTO = 1 ONLY_HEADER = 2 ONLY_BODY = 3 NONE = 4 def any(self) -> bool: """Return True if the enum is not NONE.""" return self != AutoSection.NONE def header(self) -> bool: """Return True if the enum is not ONLY_BODY.""" return self != AutoSection.ONLY_BODY and self != AutoSection.NONE def body(self) -> bool: """Return True if the enum is not ONLY_HEADER.""" return self != AutoSection.ONLY_HEADER and self != AutoSection.NONE SUPPORT_MULTI_SECTION_HEADER = [SectionKind.CODE, SectionKind.CONTAINER] class Section(CopyValidateModel): """Class that represents a section in an EOF V1 container.""" data: Bytes = Bytes(b"") """ Data to be contained by this section. Can be SupportsBytes, another EOF container or any other abstract data. """ custom_size: int = 0 """ Custom size value to be used in the header. If unset, the header is built with length of the data. """ kind: SectionKind | int """ Kind of section that is represented by this object. Can be any `int` outside of the values defined by `SectionKind` for testing purposes. """ force_type_listing: bool = False """ Forces this section to appear in the TYPE section at the beginning of the container. """ code_inputs: int = 0 """Data stack items consumed by this code section (function)""" code_outputs: int = NON_RETURNING_SECTION """ Data stack items produced by or expected at the end of this code section (function) """ max_stack_increase: int | None = None """Maximum operand stack height increase above the code section inputs.""" max_stack_height: int | None = None """Maximum height data stack reaches during execution of code section.""" auto_max_stack_height: bool = False """ Whether to automatically compute the best suggestion for the max_stack_height value for this code section. """ auto_code_inputs_outputs: bool = False """ Whether to automatically compute the best suggestion for the code_inputs, code_outputs values for this code section. """ skip_header_listing: bool = False """Skip section from listing in the header""" skip_body_listing: bool = False """Skip section from listing in the body""" skip_types_body_listing: bool = False """ Skip section from listing in the types body (input, output, stack) bytes """ skip_types_header_listing: bool = False """ Skip section from listing in the types header (not calculating input, output, stack size) """ @cached_property def header(self) -> bytes: """Get formatted header for this section according to its contents.""" size = self.custom_size if "custom_size" in self.model_fields_set else len(self.data) if self.kind == SectionKind.CODE: raise Exception("Need container-wide view of code sections to generate header") return self.kind.to_bytes( HEADER_SECTION_KIND_BYTE_LENGTH, byteorder="big" ) + size.to_bytes(HEADER_SECTION_SIZE_BYTE_LENGTH, byteorder="big") @cached_property def type_definition(self) -> bytes: """Returns a serialized type section entry for this section.""" if self.kind != SectionKind.CODE and not self.force_type_listing: return bytes() code_inputs, code_outputs, max_stack_increase, max_stack_height = ( self.code_inputs, self.code_outputs, self.max_stack_increase, self.max_stack_height, ) if self.auto_max_stack_height or self.auto_code_inputs_outputs: ( auto_code_inputs, auto_code_outputs, auto_max_height, ) = compute_code_stack_values(self.data) if self.auto_code_inputs_outputs: code_inputs, code_outputs = ( auto_code_inputs, auto_code_outputs, ) if self.auto_max_stack_height: max_stack_increase = auto_max_height - code_inputs if max_stack_increase is not None: assert max_stack_height is None elif max_stack_height is not None: max_stack_increase = max_stack_height - code_inputs else: max_stack_increase = 0 assert max_stack_increase >= 0, "incorrect max stack height value" return ( code_inputs.to_bytes(length=TYPES_INPUTS_BYTE_LENGTH, byteorder="big") + code_outputs.to_bytes(length=TYPES_OUTPUTS_BYTE_LENGTH, byteorder="big") + max_stack_increase.to_bytes(length=TYPES_STACK_BYTE_LENGTH, byteorder="big") ) def with_max_stack_height(self, max_stack_height: int) -> "Section": """ Create copy of the section with `max_stack_height` set to the specified value. """ return self.copy(max_stack_height=max_stack_height) def with_auto_max_stack_height(self) -> "Section": """ Create copy of the section with `auto_max_stack_height` set to True. """ return self.copy(auto_max_stack_height=True) def with_auto_code_inputs_outputs(self) -> "Section": """ Create copy of the section with `auto_code_inputs_outputs` set to True. """ return self.copy(auto_code_inputs_outputs=True) @staticmethod def list_header(sections: List["Section"]) -> bytes: """ Create single code header for all code sections contained in the list. """ # Allow 'types section' to use skip_header_listing flag if sections[0].skip_header_listing: return b"" if sections[0].kind not in SUPPORT_MULTI_SECTION_HEADER: return b"".join(s.header for s in sections) h = sections[0].kind.to_bytes(HEADER_SECTION_KIND_BYTE_LENGTH, "big") # Count only those sections that are not marked to be skipped for # header calculation header_registered_sections = 0 for cs in sections: if not cs.skip_header_listing: header_registered_sections += 1 h += header_registered_sections.to_bytes(HEADER_SECTION_COUNT_BYTE_LENGTH, "big") for cs in sections: # If section is marked to skip the header calculation, don't make # header for it if cs.skip_header_listing: continue size = cs.custom_size if "custom_size" in cs.model_fields_set else len(cs.data) body_size_length = ( HEADER_SECTION_SIZE_BYTE_LENGTH if cs.kind != SectionKind.CONTAINER else HEADER_SECTION_CONTAINER_SIZE_BYTE_LENGTH ) h += size.to_bytes(body_size_length, "big") return h @classmethod def Code( # noqa: N802 cls, code: Optional[BytesConvertible | Bytecode] = None, **kwargs: Any ) -> "Section": """Create new code section with the specified code.""" if code is None: code = Bytecode() kwargs.pop("kind", None) if ( "max_stack_height" not in kwargs and "max_stack_increase" not in kwargs and isinstance(code, Bytecode) ): # If not specified, take the max_stack_increase from the Bytecode. kwargs["max_stack_increase"] = code.max_stack_height - kwargs.get("code_inputs", 0) return cls(kind=SectionKind.CODE, data=code, **kwargs) @classmethod def Container( # noqa: N802 cls, container: "Container" | BytesConvertible, **kwargs: Any ) -> "Section": """Create new container section with the specified container.""" kwargs.pop("kind", None) return cls(kind=SectionKind.CONTAINER, data=container, **kwargs) @classmethod def Data(cls, data: BytesConvertible = b"", **kwargs: Any) -> "Section": # noqa: N802 """Create new data section with the specified data.""" kwargs.pop("kind", None) return cls(kind=SectionKind.DATA, data=data, **kwargs) class Container(CopyValidateModel): """Class that represents an EOF V1 container.""" name: Optional[str] = None """Name of the container""" sections: List[Section] = Field(default_factory=list) """List of sections in the container""" magic: Bytes = Bytes(EOF_MAGIC) """ Custom magic value used to override the mandatory EOF value for testing purposes. """ version: Bytes = Bytes(VERSION_NUMBER_BYTES) """ Custom version value used to override the mandatory EOF V1 value for testing purposes. """ header_terminator: Bytes = Bytes(EOF_HEADER_TERMINATOR) """Bytes used to terminate the header.""" extra: Bytes = Bytes(b"") """ Extra data to be appended at the end of the container, which will not be considered part of any of the sections, for testing purposes. """ auto_type_section: AutoSection = AutoSection.AUTO """ Automatically generate a `TYPE` section based on the included `CODE` kind sections. """ auto_data_section: bool = True """Automatically generate a `DATA` section.""" auto_sort_sections: AutoSection = AutoSection.AUTO """ Automatically sort sections for the header and body: Headers: type section first, all code sections, container sections, last data section(s) Body: type section first, all code sections, data section(s), last container sections """ skip_join_concurrent_sections_in_header: bool = False """Skip joining concurrent sections in the header (code and container)""" validity_error: EOFExceptionInstanceOrList | str | None = None """Optional error expected for the container. TODO: Remove str""" kind: ContainerKind = ContainerKind.RUNTIME """Kind type of the container.""" raw_bytes: Optional[Bytes] = None """ Optional raw bytes that represent the container. Used to have a cohesive type among all test cases, even those that do not resemble a valid EOF V1 container. """ expected_bytecode: Optional[Bytes] = None """ Optional raw bytes of the expected constructed bytecode. This allows confirming that raw EOF and Container() representations are identical. """ @cached_property def bytecode(self) -> bytes: """Converts the EOF V1 Container into bytecode.""" if self.raw_bytes is not None: assert len(self.sections) == 0 return self.raw_bytes c = self.magic + self.version # Prepare auto-generated sections sections = self.sections # Add type section if needed if self.auto_type_section.any() and count_sections(sections, SectionKind.TYPE) == 0: # Calculate skipping flags types_header_size = 0 type_section_data = b"" for s in sections: types_header_size += ( len(s.type_definition) if not s.skip_types_header_listing else 0 ) type_section_data += s.type_definition if not s.skip_types_body_listing else b"" sections = [ Section( kind=SectionKind.TYPE, data=type_section_data, custom_size=types_header_size ) ] + sections # Add data section if needed if self.auto_data_section and count_sections(sections, SectionKind.DATA) == 0: sections = sections + [Section(kind=SectionKind.DATA, data="0x")] header_sections = [ s for s in sections if s.kind != SectionKind.TYPE or self.auto_type_section != AutoSection.ONLY_BODY ] if self.auto_sort_sections.header(): header_sections.sort(key=lambda x: x.kind) # Add headers if header_sections: # Join headers of the same kind in a list of lists, only if they # are next to each other concurrent_sections: List[List[Section]] = [[header_sections[0]]] for s in header_sections[1:]: if ( s.kind == concurrent_sections[-1][-1].kind and not self.skip_join_concurrent_sections_in_header ): concurrent_sections[-1].append(s) else: concurrent_sections.append([s]) c += b"".join(Section.list_header(cs) for cs in concurrent_sections) # Add header terminator c += self.header_terminator body_sections = sections[:] if self.auto_sort_sections.body(): # Sort sections for the body body_sections.sort(key=lambda x: x.kind) # Add section bodies for s in body_sections: if s.kind == SectionKind.TYPE and self.auto_type_section == AutoSection.ONLY_HEADER: continue if s.data and not s.skip_body_listing: c += s.data # Add extra (garbage) c += self.extra # Check if the constructed bytecode matches the expected one if self.expected_bytecode is not None: assert c == self.expected_bytecode return c @classmethod def Code(cls, code: Optional[BytesConvertible] = None, **kwargs: Any) -> "Container": # noqa: N802 """Create simple container with a single code section.""" if code is None: code = Bytecode() kwargs.pop("kind", None) return cls(sections=[Section.Code(code=code, **kwargs)]) @classmethod def Init( # noqa: N802 cls, deploy_container: "Container", initcode_prefix: Optional[Bytecode] = None, ) -> "Container": """ Create simple init container that deploys the specified container. """ if initcode_prefix is None: initcode_prefix = Bytecode() return cls( sections=[ Section.Code( code=initcode_prefix + Op.RETURNCODE[0](0, 0), ), Section.Container( container=deploy_container, ), ], ) @cached_property def hash(self) -> Hash: """Returns hash of the container bytecode.""" return Bytes(self.bytecode).keccak256() def __bytes__(self) -> bytes: """Return bytecode of the container.""" return self.bytecode def __len__(self) -> int: """Return length of the container bytecode.""" return len(self.bytecode) def __str__(self) -> str: """ Return name of the container if available, otherwise the bytecode of the container as a string. """ if self.name: return self.name return str(self.bytecode) @dataclass(kw_only=True) class Initcode(Bytecode): """ Helper class used to generate initcode for the specified deployment code, using EOF V1 container as init code. """ name: str = "EOF V1 Initcode" """Name used to identify the initcode.""" deploy_container: Container """Container to be deployed.""" @cached_property def init_container(self) -> Container: """Generate a container that will be used as the initcode.""" return Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), max_stack_height=2, ), Section.Container( container=self.deploy_container, ), ], ) @cached_property def bytecode(self) -> bytes: """ Generate an EOF container performs `EOFCREATE` with the specified code. """ initcode = Container( sections=[ Section.Code( # TODO: Pass calldata code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP(), max_stack_height=4, ), Section.Container( container=self.init_container, ), ] ) return bytes(initcode) def count_sections(sections: List[Section], kind: SectionKind | int) -> int: """Count sections from a list that match a specific kind.""" return len([s for s in sections if s.kind == kind]) OPCODE_MAP: Dict[int, Op] = {x.int(): x for x in Op} def compute_code_stack_values(code: bytes) -> Tuple[int, int, int]: """ Compute stack values for the given bytecode. TODO: THIS DOES NOT WORK WHEN THE RJUMP* JUMPS BACKWARDS (and many other things). """ i = 0 stack_height = 0 min_stack_height = 0 max_stack_height = 0 # compute type annotation while i < len(code): op = OPCODE_MAP.get(code[i]) if op is None: return (0, 0, 0) elif op == Op.RJUMPV: i += 1 if i < len(code): count = code[i] i += count * 2 else: i += 1 + op.data_portion_length stack_height -= op.popped_stack_items min_stack_height = min(stack_height, min_stack_height) stack_height += op.pushed_stack_items max_stack_height = max(stack_height, max_stack_height) if stack_height < 0: stack_height = 0 return (abs(min_stack_height), stack_height, max_stack_height) ================================================ FILE: src/ethereum_test_types/eof/v1/constants.py ================================================ """ EVM Object Format generic constants. Applicable to EOF version 1. """ from ..constants import VERSION_BYTE_LENGTH VERSION_NUMBER = 0x01 VERSION_NUMBER_BYTES = VERSION_NUMBER.to_bytes(VERSION_BYTE_LENGTH, "big") MAX_CODE_SECTIONS = 1024 MAX_RETURN_STACK_HEIGHT = 1024 MAX_STACK_INCREASE_LIMIT = 0x3FF """ Maximum value for the max stack increase accepted by the EOF format. """ MAX_CODE_INPUTS = 127 MAX_CODE_OUTPUTS = 127 NON_RETURNING_SECTION = 0x80 MAX_RJUMPV_COUNT = 0xFF MAX_BYTECODE_SIZE = 24576 MAX_INITCODE_SIZE = MAX_BYTECODE_SIZE * 2 HEADER_SECTION_KIND_BYTE_LENGTH = 1 HEADER_SECTION_COUNT_BYTE_LENGTH = 2 HEADER_SECTION_SIZE_BYTE_LENGTH = 2 HEADER_SECTION_CONTAINER_SIZE_BYTE_LENGTH = 4 TYPES_INPUTS_BYTE_LENGTH = 1 TYPES_OUTPUTS_BYTE_LENGTH = 1 TYPES_STACK_BYTE_LENGTH = 2 ================================================ FILE: src/ethereum_test_types/helpers.py ================================================ """Helper functions/classes used to generate Ethereum tests.""" from typing import List, SupportsBytes import ethereum_rlp as eth_rlp from pydantic import BaseModel, ConfigDict from ethereum_test_base_types.base_types import Address, Bytes, Hash from ethereum_test_base_types.conversions import BytesConvertible, FixedSizeBytesConvertible from ethereum_test_vm import Opcodes as Op from .account_types import EOA from .utils import int_to_bytes """ Helper functions """ def ceiling_division(a: int, b: int) -> int: """ Calculate ceil without using floating point. Used by many of the EVM's formulas. """ return -(a // -b) def compute_create_address( *, address: FixedSizeBytesConvertible | EOA, nonce: int | None = None, salt: int = 0, initcode: BytesConvertible = b"", opcode: Op = Op.CREATE, ) -> Address: """ Compute address of the resulting contract created using a transaction or the `CREATE` opcode. """ if opcode == Op.CREATE: if isinstance(address, EOA): if nonce is None: nonce = address.nonce else: address = Address(address) if nonce is None: nonce = 0 hash_bytes = Bytes(eth_rlp.encode([address, int_to_bytes(nonce)])).keccak256() return Address(hash_bytes[-20:]) if opcode == Op.CREATE2: return compute_create2_address(address, salt, initcode) raise ValueError("Unsupported opcode") def compute_create2_address( address: FixedSizeBytesConvertible, salt: FixedSizeBytesConvertible, initcode: BytesConvertible ) -> Address: """ Compute address of the resulting contract created using the `CREATE2` opcode. """ hash_bytes = Bytes( b"\xff" + Address(address) + Hash(salt) + Bytes(initcode).keccak256() ).keccak256() return Address(hash_bytes[-20:]) def compute_eofcreate_address( address: FixedSizeBytesConvertible, salt: FixedSizeBytesConvertible ) -> Address: """ Compute address of the resulting contract created using the `EOFCREATE` opcode. """ hash_bytes = Bytes(b"\xff" + b"\x00" * 12 + Address(address) + Hash(salt)).keccak256() return Address(hash_bytes[-20:]) def add_kzg_version( b_hashes: List[bytes | SupportsBytes | int | str], kzg_version: int ) -> List[Hash]: """Add Kzg Version to each blob hash.""" kzg_version_hex = bytes([kzg_version]) kzg_versioned_hashes = [] for b_hash in b_hashes: b_hash = bytes(Hash(b_hash)) if isinstance(b_hash, int) or isinstance(b_hash, str): kzg_versioned_hashes.append(Hash(kzg_version_hex + b_hash[1:])) elif isinstance(b_hash, bytes) or isinstance(b_hash, SupportsBytes): if isinstance(b_hash, SupportsBytes): b_hash = bytes(b_hash) kzg_versioned_hashes.append(Hash(kzg_version_hex + b_hash[1:])) else: raise TypeError("Blob hash must be either an integer, string or bytes") return kzg_versioned_hashes class TestParameterGroup(BaseModel): """ Base class for grouping test parameters in a dataclass. Provides a generic __repr__ method to generate clean test ids, including only non-default optional fields. """ __test__ = False # explicitly prevent pytest collecting this class model_config = ConfigDict(frozen=True, validate_default=True) def __repr__(self) -> str: """ Generate repr string, intended to be used as a test id, based on the class name and the values of the non-default optional fields. """ class_name = self.__class__.__name__ field_strings = [ f"{field}_{value}" # Include the field only if it is not optional or not set to its # default value for field, value in self.model_dump(exclude_defaults=True, exclude_unset=True).items() ] return f"{class_name}_{'-'.join(field_strings)}" ================================================ FILE: src/ethereum_test_types/kzg_trusted_setup.txt ================================================ 4096 65 a0413c0dcafec6dbc9f47d66785cf1e8c981044f7d13cfe3e4fcbb71b5408dfde6312493cb3c1d30516cb3ca88c03654 8b997fb25730d661918371bb41f2a6e899cac23f04fc5365800b75433c0a953250e15e7a98fb5ca5cc56a8cd34c20c57 83302852db89424d5699f3f157e79e91dc1380f8d5895c5a772bb4ea3a5928e7c26c07db6775203ce33e62a114adaa99 a759c48b7e4a685e735c01e5aa6ef9c248705001f470f9ad856cd87806983e917a8742a3bd5ee27db8d76080269b7c83 967f8dc45ebc3be14c8705f43249a30ff48e96205fb02ae28daeab47b72eb3f45df0625928582aa1eb4368381c33e127 a418eb1e9fb84cb32b370610f56f3cb470706a40ac5a47c411c464299c45c91f25b63ae3fcd623172aa0f273c0526c13 8f44e3f0387293bc7931e978165abbaed08f53acd72a0a23ac85f6da0091196b886233bcee5b4a194db02f3d5a9b3f78 97173434b336be73c89412a6d70d416e170ea355bf1956c32d464090b107c090ef2d4e1a467a5632fbc332eeb679bf2d a24052ad8d55ad04bc5d951f78e14213435681594110fd18173482609d5019105b8045182d53ffce4fc29fc8810516c1 b950768136b260277590b5bec3f56bbc2f7a8bc383d44ce8600e85bf8cf19f479898bcc999d96dfbd2001ede01d94949 92ab8077871037bd3b57b95cbb9fb10eb11efde9191690dcac655356986fd02841d8fdb25396faa0feadfe3f50baf56d a79b096dff98038ac30f91112dd14b78f8ad428268af36d20c292e2b3b6d9ed4fb28480bb04e465071cc67d05786b6d1 b9ff71461328f370ce68bf591aa7fb13027044f42a575517f3319e2be4aa4843fa281e756d0aa5645428d6dfa857cef2 8d765808c00b3543ff182e2d159c38ae174b12d1314da88ea08e13bd9d1c37184cb515e6bf6420531b5d41767987d7ce b8c9a837d20c3b53e6f578e4a257bb7ef8fc43178614ec2a154915b267ad2be135981d01ed2ee1b5fbd9d9bb27f0800a a9773d92cf23f65f98ef68f6cf95c72b53d0683af2f9bf886bb9036e4a38184b1131b26fd24397910b494fbef856f3aa b41ebe38962d112da4a01bf101cb248d808fbd50aaf749fc7c151cf332032eb3e3bdbd716db899724b734d392f26c412 90fbb030167fb47dcc13d604a726c0339418567c1d287d1d87423fa0cb92eec3455fbb46bcbe2e697144a2d3972142e4 b11d298bd167464b35fb923520d14832bd9ed50ed841bf6d7618424fd6f3699190af21759e351b89142d355952149da1 8bc36066f69dc89f7c4d1e58d67497675050c6aa002244cebd9fc957ec5e364c46bab4735ea3db02b73b3ca43c96e019 ab7ab92c5d4d773068e485aa5831941ebd63db7118674ca38089635f3b4186833af2455a6fb9ed2b745df53b3ce96727 af191ca3089892cb943cd97cf11a51f38e38bd9be50844a4e8da99f27e305e876f9ed4ab0628e8ae3939066b7d34a15f a3204c1747feabc2c11339a542195e7cb6628fd3964f846e71e2e3f2d6bb379a5e51700682ea1844eba12756adb13216 903a29883846b7c50c15968b20e30c471aeac07b872c40a4d19eb1a42da18b649d5bbfde4b4cf6225d215a461b0deb6d 8e6e9c15ffbf1e16e5865a5fef7ed751dc81957a9757b535cb38b649e1098cda25d42381dc4f776778573cdf90c3e6e0 a8f6dd26100b512a8c96c52e00715c4b2cb9ac457f17aed8ffe1cf1ea524068fe5a1ddf218149845fc1417b789ecfc98 a5b0ffc819451ea639cfd1c18cbc9365cc79368d3b2e736c0ae54eba2f0801e6eb0ee14a5f373f4a70ca463bdb696c09 879f91ccd56a1b9736fbfd20d8747354da743fb121f0e308a0d298ff0d9344431890e41da66b5009af3f442c636b4f43 81bf3a2d9755e206b515a508ac4d1109bf933c282a46a4ae4a1b4cb4a94e1d23642fad6bd452428845afa155742ade7e 8de778d4742f945df40004964e165592f9c6b1946263adcdd5a88b00244bda46c7bb49098c8eb6b3d97a0dd46148a8ca b7a57b21d13121907ee28c5c1f80ee2e3e83a3135a8101e933cf57171209a96173ff5037f5af606e9fd6d066de6ed693 b0877d1963fd9200414a38753dffd9f23a10eb3198912790d7eddbc9f6b477019d52ddd4ebdcb9f60818db076938a5a9 88da2d7a6611bc16adc55fc1c377480c828aba4496c645e3efe0e1a67f333c05a0307f7f1d2df8ac013602c655c6e209 95719eb02e8a9dede1a888c656a778b1c69b7716fbe3d1538fe8afd4a1bc972183c7d32aa7d6073376f7701df80116d8 8e8a1ca971f2444b35af3376e85dccda3abb8e8e11d095d0a4c37628dfe5d3e043a377c3de68289ef142e4308e9941a0 b720caaff02f6d798ac84c4f527203e823ff685869e3943c979e388e1c34c3f77f5c242c6daa7e3b30e511aab917b866 86040d55809afeec10e315d1ad950d269d37cfee8c144cd8dd4126459e3b15a53b3e68df5981df3c2346d23c7b4baaf4 82d8cabf13ab853db0377504f0aec00dba3a5cd3119787e8ad378ddf2c40b022ecfc67c642b7acc8c1e3dd03ab50993e b8d873927936719d2484cd03a6687d65697e17dcf4f0d5aed6f5e4750f52ef2133d4645894e7ebfc4ef6ce6788d404c8 b1235594dbb15b674a419ff2b2deb644ad2a93791ca05af402823f87114483d6aa1689b7a9bea0f547ad12fe270e4344 a53fda86571b0651f5affb74312551a082fffc0385cfd24c1d779985b72a5b1cf7c78b42b4f7e51e77055f8e5e915b00 b579adcfd9c6ef916a5a999e77a0cb21d378c4ea67e13b7c58709d5da23a56c2e54218691fc4ac39a4a3d74f88cc31f7 ab79e584011713e8a2f583e483a91a0c2a40771b77d91475825b5acbea82db4262132901cb3e4a108c46d7c9ee217a4e a0fe58ea9eb982d7654c8aaf9366230578fc1362f6faae0594f8b9e659bcb405dff4aac0c7888bbe07f614ecf0d800a6 867e50e74281f28ecd4925560e2e7a6f8911b135557b688254623acce0dbc41e23ac3e706a184a45d54c586edc416eb0 89f81b61adda20ea9d0b387a36d0ab073dc7c7cbff518501962038be19867042f11fcc7ff78096e5d3b68c6d8dc04d9b a58ee91bb556d43cf01f1398c5811f76dc0f11efdd569eed9ef178b3b0715e122060ec8f945b4dbf6eebfa2b90af6fa6 ac460be540f4c840def2eef19fc754a9af34608d107cbadb53334cf194cc91138d53b9538fcd0ec970b5d4aa455b224a b09b91f929de52c09d48ca0893be6eb44e2f5210a6c394689dc1f7729d4be4e11d0474b178e80cea8c2ac0d081f0e811 8d37a442a76b06a02a4e64c2504aea72c8b9b020ab7bcc94580fe2b9603c7c50d7b1e9d70d2a7daea19c68667e8f8c31 a9838d4c4e3f3a0075a952cf7dd623307ec633fcc81a7cf9e52e66c31780de33dbb3d74c320dc7f0a4b72f7a49949515 a44766b6251af458fe4f5f9ed1e02950f35703520b8656f09fc42d9a2d38a700c11a7c8a0436ac2e5e9f053d0bb8ff91 ad78d9481c840f5202546bea0d13c776826feb8b1b7c72e83d99a947622f0bf38a4208551c4c41beb1270d7792075457 b619ffa8733b470039451e224b777845021e8dc1125f247a4ff2476cc774657d0ff9c5279da841fc1236047de9d81c60 af760b0a30a1d6af3bc5cd6686f396bd41779aeeb6e0d70a09349bd5da17ca2e7965afc5c8ec22744198fbe3f02fb331 a0cc209abdb768b589fcb7b376b6e1cac07743288c95a1cf1a0354b47f0cf91fca78a75c1fcafa6f5926d6c379116608 864add673c89c41c754eeb3cd8dcff5cdde1d739fce65c30e474a082bb5d813cba6412e61154ce88fdb6c12c5d9be35b b091443b0ce279327dc37cb484e9a5b69b257a714ce21895d67539172f95ffa326903747b64a3649e99aea7bb10d03f7 a8c452b8c4ca8e0a61942a8e08e28f17fb0ef4c5b018b4e6d1a64038280afa2bf1169202f05f14af24a06ca72f448ccd a23c24721d18bc48d5dcf70effcbef89a7ae24e67158d70ae1d8169ee75d9a051d34b14e9cf06488bac324fe58549f26 92a730e30eb5f3231feb85f6720489dbb1afd42c43f05a1610c6b3c67bb949ec8fde507e924498f4ffc646f7b07d9123 8dbe5abf4031ec9ba6bb06d1a47dd1121fb9e03b652804069250967fd5e9577d0039e233441b7f837a7c9d67ba18c28e aa456bcfef6a21bb88181482b279df260297b3778e84594ebddbdf337e85d9e3d46ca1d0b516622fb0b103df8ec519b7 a3b31ae621bd210a2b767e0e6f22eb28fe3c4943498a7e91753225426168b9a26da0e02f1dc5264da53a5ad240d9f51b aa8d66857127e6e71874ce2202923385a7d2818b84cb73a6c42d71afe70972a70c6bdd2aad1a6e8c5e4ca728382a8ea8 ac7e8e7a82f439127a5e40558d90d17990f8229852d21c13d753c2e97facf077cf59582b603984c3dd3faebd80aff4f5 93a8bcf4159f455d1baa73d2ef2450dcd4100420de84169bbe28b8b7a5d1746273f870091a87a057e834f754f34204b1 89d0ebb287c3613cdcae7f5acc43f17f09c0213fc40c074660120b755d664109ffb9902ed981ede79e018ddb0c845698 a87ccbfad431406aadbee878d9cf7d91b13649d5f7e19938b7dfd32645a43b114eef64ff3a13201398bd9b0337832e5a 833c51d0d0048f70c3eefb4e70e4ff66d0809c41838e8d2c21c288dd3ae9d9dfaf26d1742bf4976dab83a2b381677011 8bcd6b1c3b02fffead432e8b1680bad0a1ac5a712d4225e220690ee18df3e7406e2769e1f309e2e803b850bc96f0e768 b61e3dbd88aaf4ff1401521781e2eea9ef8b66d1fac5387c83b1da9e65c2aa2a56c262dea9eceeb4ad86c90211672db0 866d3090db944ecf190dd0651abf67659caafd31ae861bab9992c1e3915cb0952da7c561cc7e203560a610f48fae633b a5e8971543c14274a8dc892b0be188c1b4fbc75c692ed29f166e0ea80874bc5520c2791342b7c1d2fb5dd454b03b8a5b 8f2f9fc50471bae9ea87487ebd1bc8576ef844cc42d606af5c4c0969670fdf2189afd643e4de3145864e7773d215f37f b1bb0f2527db6d51f42b9224383c0f96048bbc03d469bf01fe1383173ef8b1cc9455d9dd8ba04d46057f46949bfc92b5 aa7c99d906b4d7922296cfe2520473fc50137c03d68b7865c5bfb8adbc316b1034310ec4b5670c47295f4a80fb8d61e9 a5d1da4d6aba555919df44cbaa8ff79378a1c9e2cfdfbf9d39c63a4a00f284c5a5724e28ecbc2d9dba27fe4ee5018bd5 a8db53224f70af4d991b9aae4ffe92d2aa5b618ad9137784b55843e9f16cefbfd25ada355d308e9bbf55f6d2f7976fb3 b6536c4232bb20e22af1a8bb12de76d5fec2ad9a3b48af1f38fa67e0f8504ef60f305a73d19385095bb6a9603fe29889 87f7e371a1817a63d6838a8cf4ab3a8473d19ce0d4f40fd013c03d5ddd5f4985df2956531cc9f187928ef54c68f4f9a9 ae13530b1dbc5e4dced9d909ea61286ec09e25c12f37a1ed2f309b0eb99863d236c3b25ed3484acc8c076ad2fa8cd430 98928d850247c6f7606190e687d5c94a627550198dbdbea0161ef9515eacdb1a0f195cae3bb293112179082daccf8b35 918528bb8e6a055ad4db6230d3a405e9e55866da15c4721f5ddd1f1f37962d4904aad7a419218fe6d906fe191a991806 b71e31a06afe065773dd3f4a6e9ef81c3292e27a3b7fdfdd452d03e05af3b6dd654c355f7516b2a93553360c6681a73a 8870b83ab78a98820866f91ac643af9f3ff792a2b7fda34185a9456a63abdce42bfe8ad4dc67f08a6392f250d4062df4 91eea1b668e52f7a7a5087fabf1cab803b0316f78d9fff469fbfde2162f660c250e4336a9eea4cb0450bd30ac067bc8b 8b74990946de7b72a92147ceac1bd9d55999a8b576e8df68639e40ed5dc2062cfcd727903133de482b6dca19d0aaed82 8ebad537fece090ebbab662bdf2618e21ca30cf6329c50935e8346d1217dcbe3c1fe1ea28efca369c6003ce0a94703c1 a8640479556fb59ebd1c40c5f368fbd960932fdbb782665e4a0e24e2bdb598fc0164ce8c0726d7759cfc59e60a62e182 a9a52a6bf98ee4d749f6d38be2c60a6d54b64d5cbe4e67266633dc096cf28c97fe998596707d31968cbe2064b72256bf 847953c48a4ce6032780e9b39d0ed4384e0be202c2bbe2dfda3910f5d87aa5cd3c2ffbfcfae4dddce16d6ab657599b95 b6f6e1485d3ec2a06abaecd23028b200b2e4a0096c16144d07403e1720ff8f9ba9d919016b5eb8dc5103880a7a77a1d3 98dfc2065b1622f596dbe27131ea60bef7a193b12922cecb27f8c571404f483014f8014572e86ae2e341ab738e4887ef acb0d205566bacc87bbe2e25d10793f63f7a1f27fd9e58f4f653ceae3ffeba511eaf658e068fad289eeb28f9edbeb35b ae4411ed5b263673cee894c11fe4abc72a4bf642d94022a5c0f3369380fcdfc1c21e277f2902972252503f91ada3029a ac4a7a27ba390a75d0a247d93d4a8ef1f0485f8d373a4af4e1139369ec274b91b3464d9738eeaceb19cd6f509e2f8262 87379c3bf231fdafcf6472a79e9e55a938d851d4dd662ab6e0d95fd47a478ed99e2ad1e6e39be3c0fc4f6d996a7dd833 81316904b035a8bcc2041199a789a2e6879486ba9fddcba0a82c745cc8dd8374a39e523b91792170cd30be7aa3005b85 b8206809c6cd027ed019f472581b45f7e12288f89047928ba32b4856b6560ad30395830d71e5e30c556f6f182b1fe690 88d76c028f534a62e019b4a52967bb8642ede6becfa3807be68fdd36d366fc84a4ac8dc176e80a68bc59eb62caf5dff9 8c3b8be685b0f8aad131ee7544d0e12f223f08a6f8edaf464b385ac644e0ddc9eff7cc7cb5c1b50ab5d71ea0f41d2213 8d91410e004f76c50fdc05784157b4d839cb5090022c629c7c97a5e0c3536eeafee17a527b54b1165c3cd81774bb54ce b25c2863bc28ec5281ce800ddf91a7e1a53f4c6d5da1e6c86ef4616e93bcf55ed49e297216d01379f5c6e7b3c1e46728 865f7b09ac3ca03f20be90c48f6975dd2588838c2536c7a3532a6aa5187ed0b709cd03d91ff4048061c10d0aa72b69ce b3f7477c90c11596eb4f8bbf34adbcb832638c4ff3cdd090d4d477ee50472ac9ddaf5be9ad7eca3f148960d362bbd098 8db35fd53fca04faecd1c76a8227160b3ab46ac1af070f2492445a19d8ff7c25bbaef6c9fa0c8c088444561e9f7e4eb2 a478b6e9d058a2e01d2fc053b739092e113c23a6a2770a16afbef044a3709a9e32f425ace9ba7981325f02667c3f9609 98caa6bd38916c08cf221722a675a4f7577f33452623de801d2b3429595f988090907a7e99960fff7c076d6d8e877b31 b79aaaacefc49c3038a14d2ac468cfec8c2161e88bdae91798d63552cdbe39e0e02f9225717436b9b8a40a022c633c6e 845a31006c680ee6a0cc41d3dc6c0c95d833fcf426f2e7c573fa15b2c4c641fbd6fe5ebb0e23720cc3467d6ee1d80dc4 a1bc287e272cf8b74dbf6405b3a5190883195806aa351f1dc8e525aa342283f0a35ff687e3b434324dedee74946dd185 a4fd2dc8db75d3783a020856e2b3aa266dc6926e84f5c491ef739a3bddd46dc8e9e0fc1177937839ef1b18d062ffbb9e acbf0d3c697f57c202bb8c5dc4f3fc341b8fc509a455d44bd86acc67cad2a04495d5537bcd3e98680185e8aa286f2587 a5caf423a917352e1b8e844f5968a6da4fdeae467d10c6f4bbd82b5eea46a660b82d2f5440d3641c717b2c3c9ed0be52 8a39d763c08b926599ab1233219c49c825368fad14d9afc7c0c039224d37c00d8743293fd21645bf0b91eaf579a99867 b2b53a496def0ba06e80b28f36530fbe0fb5d70a601a2f10722e59abee529369c1ae8fd0f2db9184dd4a2519bb832d94 a73980fcef053f1b60ebbb5d78ba6332a475e0b96a0c724741a3abf3b59dd344772527f07203cf4c9cb5155ebed81fa0 a070d20acce42518ece322c9db096f16aed620303a39d8d5735a0df6e70fbeceb940e8d9f5cc38f3314b2240394ec47b a50cf591f522f19ca337b73089557f75929d9f645f3e57d4f241e14cdd1ea3fb48d84bcf05e4f0377afbb789fbdb5d20 82a5ffce451096aca8eeb0cd2ae9d83db3ed76da3f531a80d9a70a346359bf05d74863ce6a7c848522b526156a5e20cd 88e0e84d358cbb93755a906f329db1537c3894845f32b9b0b691c29cbb455373d9452fadd1e77e20a623f6eaf624de6f aa07ac7b84a6d6838826e0b9e350d8ec75e398a52e9824e6b0da6ae4010e5943fec4f00239e96433f291fef9d1d1e609 ac8887bf39366034bc63f6cc5db0c26fd27307cbc3d6cce47894a8a019c22dd51322fb5096edc018227edfafc053a8f6 b7d26c26c5b33f77422191dca94977588ab1d4b9ce7d0e19c4a3b4cd1c25211b78c328dbf81e755e78cd7d1d622ad23e 99a676d5af49f0ba44047009298d8474cabf2d5bca1a76ba21eff7ee3c4691a102fdefea27bc948ccad8894a658abd02 b0d09a91909ab3620c183bdf1d53d43d39eb750dc7a722c661c3de3a1a5d383ad221f71bae374f8a71867505958a3f76 84681a883de8e4b93d68ac10e91899c2bbb815ce2de74bb48a11a6113b2a3f4df8aceabda1f5f67bc5aacac8c9da7221 9470259957780fa9b43521fab3644f555f5343281c72582b56d2efd11991d897b3b481cafa48681c5aeb80c9663b68f7 ab1b29f7ece686e6fa968a4815da1d64f3579fed3bc92e1f3e51cd13a3c076b6cf695ed269d373300a62463dc98a4234 8ab415bfcd5f1061f7687597024c96dd9c7cb4942b5989379a7a3b5742f7d394337886317659cbeacaf030234a24f972 b9b524aad924f9acc63d002d617488f31b0016e0f0548f050cada285ce7491b74a125621638f19e9c96eabb091d945be 8c4c373e79415061837dd0def4f28a2d5d74d21cb13a76c9049ad678ca40228405ab0c3941df49249847ecdefc1a5b78 a8edf4710b5ab2929d3db6c1c0e3e242261bbaa8bcec56908ddadd7d2dad2dca9d6eb9de630b960b122ebeea41040421 8d66bb3b50b9df8f373163629f9221b3d4b6980a05ea81dc3741bfe9519cf3ebba7ab98e98390bae475e8ede5821bd5c 8d3c21bae7f0cfb97c56952bb22084b58e7bb718890935b73103f33adf5e4d99cd262f929c6eeab96209814f0dbae50a a5c66cfab3d9ebf733c4af24bebc97070e7989fe3c73e79ac85fb0e4d40ae44fb571e0fad4ad72560e13ed453900d14f 9362e6b50b43dbefbc3254471372297b5dcce809cd3b60bf74a1268ab68bdb50e46e462cbd78f0d6c056330e982846af 854630d08e3f0243d570cc2e856234cb4c1a158d9c1883bf028a76525aaa34be897fe918d5f6da9764a3735fa9ebd24a 8c7d246985469ff252c3f4df6c7c9196fc79f05c1c66a609d84725c78001d0837c7a7049394ba5cf7e863e2d58af8417 ae050271e01b528925302e71903f785b782f7bf4e4e7a7f537140219bc352dc7540c657ed03d3a297ad36798ecdb98cd 8d2ae9179fcf2b0c69850554580b52c1f4a5bd865af5f3028f222f4acad9c1ad69a8ef6c7dc7b03715ee5c506b74325e b8ef8de6ce6369a8851cd36db0ccf00a85077e816c14c4e601f533330af9e3acf0743a95d28962ed8bfcfc2520ef3cfe a6ecad6fdfb851b40356a8b1060f38235407a0f2706e7b8bb4a13465ca3f81d4f5b99466ac2565c60af15f022d26732e 819ff14cdea3ab89d98e133cd2d0379361e2e2c67ad94eeddcdb9232efd509f51d12f4f03ebd4dd953bd262a886281f7 8561cd0f7a6dbcddd83fcd7f472d7dbcba95b2d4fb98276f48fccf69f76d284e626d7e41314b633352df8e6333fd52a1 b42557ccce32d9a894d538c48712cb3e212d06ac05cd5e0527ccd2db1078ee6ae399bf6a601ffdab1f5913d35fc0b20c 89b4008d767aad3c6f93c349d3b956e28307311a5b1cec237e8d74bb0dee7e972c24f347fd56afd915a2342bd7bc32f0 877487384b207e53f5492f4e36c832c2227f92d1bb60542cfeb35e025a4a7afc2b885fae2528b33b40ab09510398f83e 8c411050b63c9053dd0cd81dacb48753c3d7f162028098e024d17cd6348482703a69df31ad6256e3d25a8bbf7783de39 a8506b54a88d17ac10fb1b0d1fe4aa40eae7553a064863d7f6b52ccc4236dd4b82d01dca6ba87da9a239e3069ba879fb b1a24caef9df64750c1350789bb8d8a0db0f39474a1c74ea9ba064b1516db6923f00af8d57c632d58844fb8786c3d47a 959d6e255f212b0708c58a2f75cb1fe932248c9d93424612c1b8d1e640149656059737e4db2139afd5556bcdacf3eda2 84525af21a8d78748680b6535bbc9dc2f0cf9a1d1740d12f382f6ecb2e73811d6c1da2ad9956070b1a617c61fcff9fe5 b74417d84597a485d0a8e1be07bf78f17ebb2e7b3521b748f73935b9afbbd82f34b710fb7749e7d4ab55b0c7f9de127d a4a9aecb19a6bab167af96d8b9d9aa5308eab19e6bfb78f5a580f9bf89bdf250a7b52a09b75f715d651cb73febd08e84 9777b30be2c5ffe7d29cc2803a562a32fb43b59d8c3f05a707ab60ec05b28293716230a7d264d7cd9dd358fc031cc13e 95dce7a3d4f23ac0050c510999f5fbf8042f771e8f8f94192e17bcbfa213470802ebdbe33a876cb621cf42e275cbfc8b b0b963ebcbbee847ab8ae740478544350b3ac7e86887e4dfb2299ee5096247cd2b03c1de74c774d9bde94ae2ee2dcd59 a4ab20bafa316030264e13f7ef5891a2c3b29ab62e1668fcb5881f50a9acac6adbe3d706c07e62f2539715db768f6c43 901478a297669d608e406fe4989be75264b6c8be12169aa9e0ad5234f459ca377f78484ffd2099a2fe2db5e457826427 88c76e5c250810c057004a03408b85cd918e0c8903dc55a0dd8bb9b4fc2b25c87f9b8cf5943eb19fbbe99d36490050c5 91607322bbad4a4f03fc0012d0821eff5f8c516fda45d1ec1133bface6f858bf04b25547be24159cab931a7aa08344d4 843203e07fce3c6c81f84bc6dc5fb5e9d1c50c8811ace522dc66e8658433a0ef9784c947e6a62c11bf705307ef05212e 91dd8813a5d6dddcda7b0f87f672b83198cd0959d8311b2b26fb1fae745185c01f796fbd03aad9db9b58482483fdadd8 8d15911aacf76c8bcd7136e958febd6963104addcd751ce5c06b6c37213f9c4fb0ffd4e0d12c8e40c36d658999724bfd 8a36c5732d3f1b497ebe9250610605ee62a78eaa9e1a45f329d09aaa1061131cf1d9df00f3a7d0fe8ad614a1ff9caaae a407d06affae03660881ce20dab5e2d2d6cddc23cd09b95502a9181c465e57597841144cb34d22889902aff23a76d049 b5fd856d0578620a7e25674d9503be7d97a2222900e1b4738c1d81ff6483b144e19e46802e91161e246271f90270e6cf 91b7708869cdb5a7317f88c0312d103f8ce90be14fb4f219c2e074045a2a83636fdc3e69e862049fc7c1ef000e832541 b64719cc5480709d1dae958f1d3082b32a43376da446c8f9f64cb02a301effc9c34d9102051733315a8179aed94d53cc 94347a9542ff9d18f7d9eaa2f4d9b832d0e535fe49d52aa2de08aa8192400eddabdb6444a2a78883e27c779eed7fdf5a 840ef44a733ff1376466698cd26f82cf56bb44811e196340467f932efa3ae1ef9958a0701b3b032f50fd9c1d2aed9ab5 90ab3f6f67688888a31ffc2a882bb37adab32d1a4b278951a21646f90d03385fc976715fc639a785d015751171016f10 b56f35d164c24b557dbcbc8a4bfa681ec916f8741ffcb27fb389c164f4e3ed2be325210ef5bdaeae7a172ca9599ab442 a7921a5a80d7cf6ae81ba9ee05e0579b18c20cd2852762c89d6496aa4c8ca9d1ca2434a67b2c16d333ea8e382cdab1e3 a506bcfbd7e7e5a92f68a1bd87d07ad5fe3b97aeee40af2bf2cae4efcd77fff03f872732c5b7883aa6584bee65d6f8cb a8c46cff58931a1ce9cbe1501e1da90b174cddd6d50f3dfdfb759d1d4ad4673c0a8feed6c1f24c7af32865a7d6c984e5 b45686265a83bff69e312c5149db7bb70ac3ec790dc92e392b54d9c85a656e2bf58596ce269f014a906eafc97461aa5f 8d4009a75ccb2f29f54a5f16684b93202c570d7a56ec1a8b20173269c5f7115894f210c26b41e8d54d4072de2d1c75d0 aef8810af4fc676bf84a0d57b189760ddc3375c64e982539107422e3de2580b89bd27aa6da44e827b56db1b5555e4ee8 888f0e1e4a34f48eb9a18ef4de334c27564d72f2cf8073e3d46d881853ac1424d79e88d8ddb251914890588937c8f711 b64b0aa7b3a8f6e0d4b3499fe54e751b8c3e946377c0d5a6dbb677be23736b86a7e8a6be022411601dd75012012c3555 8d57776f519f0dd912ea14f79fbab53a30624e102f9575c0bad08d2dc754e6be54f39b11278c290977d9b9c7c0e1e0ad a018fc00d532ceb2e4de908a15606db9b6e0665dd77190e2338da7c87a1713e6b9b61554e7c1462f0f6d4934b960b15c 8c932be83ace46f65c78e145b384f58e41546dc0395270c1397874d88626fdeda395c8a289d602b4c312fe98c1311856 89174838e21639d6bdd91a0621f04dc056907b88e305dd66e46a08f6d65f731dea72ae87ca5e3042d609e8de8de9aa26 b7b7f508bb74f7a827ac8189daa855598ff1d96fa3a02394891fd105d8f0816224cd50ac4bf2ed1cf469ace516c48184 b31877ad682583283baadd68dc1bebd83f5748b165aadd7fe9ef61a343773b88bcd3a022f36d6c92f339b7bfd72820a9 b79d77260b25daf9126dab7a193df2d7d30542786fa1733ffaf6261734770275d3ca8bae1d9915d1181a78510b3439db 91894fb94cd4c1dd2ceaf9c53a7020c5799ba1217cf2d251ea5bc91ed26e1159dd758e98282ebe35a0395ef9f1ed15a0 ab59895cdafd33934ceedfc3f0d5d89880482cba6c99a6db93245f9e41987efd76e0640e80aef31782c9a8c7a83fccec aa22ea63654315e033e09d4d4432331904a6fc5fb1732557987846e3c564668ca67c60a324b4af01663a23af11a9ce4b b53ba3ef342601467e1f71aa280e100fbabbd38518fa0193e0099505036ee517c1ac78e96e9baeb549bb6879bb698fb0 943fd69fd656f37487cca3605dc7e5a215fddd811caf228595ec428751fc1de484a0cb84c667fe4d7c35599bfa0e5e34 9353128b5ebe0dddc555093cf3e5942754f938173541033e8788d7331fafc56f68d9f97b4131e37963ab7f1c8946f5f1 a76cd3c566691f65cfb86453b5b31dbaf3cab8f84fe1f795dd1e570784b9b01bdd5f0b3c1e233942b1b5838290e00598 983d84b2e53ffa4ae7f3ba29ef2345247ea2377686b74a10479a0ef105ecf90427bf53b74c96dfa346d0f842b6ffb25b 92e0fe9063306894a2c6970c001781cff416c87e87cb5fbac927a3192655c3da4063e6fa93539f6ff58efac6adcc5514 b00a81f03c2b8703acd4e2e4c21e06973aba696415d0ea1a648ace2b0ea19b242fede10e4f9d7dcd61c546ab878bc8f9 b0d08d880f3b456a10bf65cff983f754f545c840c413aea90ce7101a66eb0a0b9b1549d6c4d57725315828607963f15a 90cb64d03534f913b411375cce88a9e8b1329ce67a9f89ca5df8a22b8c1c97707fec727dbcbb9737f20c4cf751359277 8327c2d42590dfcdb78477fc18dcf71608686ad66c49bce64d7ee874668be7e1c17cc1042a754bbc77c9daf50b2dae07 8532171ea13aa7e37178e51a6c775da469d2e26ec854eb16e60f3307db4acec110d2155832c202e9ba525fc99174e3b0 83ca44b15393d021de2a511fa5511c5bd4e0ac7d67259dce5a5328f38a3cce9c3a269405959a2486016bc27bb140f9ff b1d36e8ca812be545505c8214943b36cabee48112cf0de369957afa796d37f86bf7249d9f36e8e990f26f1076f292b13 9803abf45be5271e2f3164c328d449efc4b8fc92dfc1225d38e09630909fe92e90a5c77618daa5f592d23fc3ad667094 b268ad68c7bf432a01039cd889afae815c3e120f57930d463aece10af4fd330b5bd7d8869ef1bcf6b2e78e4229922edc a4c91a0d6f16b1553264592b4cbbbf3ca5da32ab053ffbdd3dbb1aed1afb650fb6e0dc5274f71a51d7160856477228db ad89d043c2f0f17806277ffdf3ecf007448e93968663f8a0b674254f36170447b7527d5906035e5e56f4146b89b5af56 8b6964f757a72a22a642e4d69102951897e20c21449184e44717bd0681d75f7c5bfa5ee5397f6e53febf85a1810d6ed1 b08f5cdaabec910856920cd6e836c830b863eb578423edf0b32529488f71fe8257d90aed4a127448204df498b6815d79 af26bb3358be9d280d39b21d831bb53145c4527a642446073fee5a86215c4c89ff49a3877a7a549486262f6f57a0f476 b4010b37ec4d7c2af20800e272539200a6b623ae4636ecbd0e619484f4ab9240d02bc5541ace3a3fb955dc0a3d774212 82752ab52bdcc3cc2fc405cb05a2e694d3df4a3a68f2179ec0652536d067b43660b96f85f573f26fbd664a9ef899f650 96d392dde067473a81faf2d1fea55b6429126b88b160e39b4210d31d0a82833ffd3a80e07d24d495aea2d96be7251547 a76d8236d6671204d440c33ac5b8deb71fa389f6563d80e73be8b043ec77d4c9b06f9a586117c7f957f4af0331cbc871 b6c90961f68b5e385d85c9830ec765d22a425f506904c4d506b87d8944c2b2c09615e740ed351df0f9321a7b93979cae a6ec5ea80c7558403485b3b1869cdc63bde239bafdf936d9b62a37031628402a36a2cfa5cfbb8e26ac922cb0a209b3ba 8c3195bbdbf9bc0fc95fa7e3d7f739353c947f7767d1e3cb24d8c8602d8ea0a1790ac30b815be2a2ba26caa5227891e2 a7f8a63d809f1155722c57f375ea00412b00147776ae4444f342550279ef4415450d6f400000a326bf11fea6c77bf941 97fa404df48433a00c85793440e89bb1af44c7267588ae937a1f5d53e01e1c4d4fc8e4a6d517f3978bfdd6c2dfde012f a984a0a3836de3d8d909c4629a2636aacb85393f6f214a2ef68860081e9db05ad608024762db0dc35e895dc00e2d4cdd 9526cf088ab90335add1db4d3a4ac631b58cbfbe88fa0845a877d33247d1cfeb85994522e1eb8f8874651bfb1df03e2a ac83443fd0afe99ad49de9bf8230158c118e2814c9c89db5ac951c240d6c2ce45e7677221279d9e97848ec466b99aafe aeeefdbaba612e971697798ceaf63b247949dc823a0ad771ae5b988a5e882b338a98d3d0796230f49d533ec5ba411b39 ae3f248b5a7b0f92b7820a6c5ae21e5bd8f4265d4f6e21a22512079b8ee9be06393fd3133ce8ebac0faf23f4f8517e36 a64a831b908eee784b8388b45447d2885ec0551b26b0c2b15e5f417d0a12c79e867fb7bd3d008d0af98b44336f8ec1ad b242238cd8362b6e440ba21806905714dd55172db25ec7195f3fc4937b2aba146d5cbf3cf691a1384b4752dc3b54d627 819f97f337eea1ffb2a678cc25f556f1aab751c6b048993a1d430fe1a3ddd8bb411c152e12ca60ec6e057c190cd1db9a b9d7d187407380df54ee9fef224c54eec1bfabf17dc8abf60765b7951f538f59aa26fffd5846cfe05546c35f59b573f4 aa6e3c14efa6a5962812e3f94f8ce673a433f4a82d07a67577285ea0eaa07f8be7115853122d12d6d4e1fdf64c504be1 82268bee9c1662d3ddb5fb785abfae6fb8b774190f30267f1d47091d2cd4b3874db4372625aa36c32f27b0eee986269b b236459565b7b966166c4a35b2fa71030b40321821b8e96879d95f0e83a0baf33fa25721f30af4a631df209e25b96061 8708d752632d2435d2d5b1db4ad1fa2558d776a013655f88e9a3556d86b71976e7dfe5b8834fdec97682cd94560d0d0d ae1424a68ae2dbfb0f01211f11773732a50510b5585c1fb005cb892b2c6a58f4a55490b5c5b4483c6fce40e9d3236a52 b3f5f722af9dddb07293c871ce97abbccba0093ca98c8d74b1318fa21396fc1b45b69c15084f63d728f9908442024506 9606f3ce5e63886853ca476dc0949e7f1051889d529365c0cb0296fdc02abd088f0f0318ecd2cf36740a3634132d36f6 b11a833a49fa138db46b25ff8cdda665295226595bc212c0931b4931d0a55c99da972c12b4ef753f7e37c6332356e350 afede34e7dab0a9e074bc19a7daddb27df65735581ca24ad70c891c98b1349fcebbcf3ba6b32c2617fe06a5818dabc2d 97993d456e459e66322d01f8eb13918979761c3e8590910453944bdff90b24091bb018ac6499792515c9923be289f99f 977e3e967eff19290a192cd11df3667d511b398fb3ac9a5114a0f3707e25a0edcb56105648b1b85a8b7519fc529fc6f6 b873a7c88bf58731fe1bf61ff6828bf114cf5228f254083304a4570e854e83748fc98683ddba62d978fff7909f2c5c47 ad4b2691f6f19da1d123aaa23cca3e876247ed9a4ab23c599afdbc0d3aa49776442a7ceaa996ac550d0313d9b9a36cee b9210713c78e19685608c6475bfa974b57ac276808a443f8b280945c5d5f9c39da43effa294bfb1a6c6f7b6b9f85bf6c a65152f376113e61a0e468759de38d742caa260291b4753391ee408dea55927af08a4d4a9918600a3bdf1df462dffe76 8bf8c27ad5140dde7f3d2280fd4cc6b29ab76537e8d7aa7011a9d2796ee3e56e9a60c27b5c2da6c5e14fc866301dc195 92fde8effc9f61393a2771155812b863cff2a0c5423d7d40aa04d621d396b44af94ddd376c28e7d2f53c930aea947484 97a01d1dd9ee30553ce676011aea97fa93d55038ada95f0057d2362ae9437f3ed13de8290e2ff21e3167dd7ba10b9c3f 89affffaa63cb2df3490f76f0d1e1d6ca35c221dd34057176ba739fa18d492355e6d2a5a5ad93a136d3b1fed0bb8aa19 928b8e255a77e1f0495c86d3c63b83677b4561a5fcbbe5d3210f1e0fc947496e426d6bf3b49394a5df796c9f25673fc4 842a0af91799c9b533e79ee081efe2a634cac6c584c2f054fb7d1db67dde90ae36de36cbf712ec9cd1a0c7ee79e151ea a65b946cf637e090baf2107c9a42f354b390e7316beb8913638130dbc67c918926eb87bec3b1fe92ef72bc77a170fa3b aafc0f19bfd71ab5ae4a8510c7861458b70ad062a44107b1b1dbacbfa44ba3217028c2824bd7058e2fa32455f624040b 95269dc787653814e0be899c95dba8cfa384f575a25e671c0806fd80816ad6797dc819d30ae06e1d0ed9cb01c3950d47 a1e760f7fa5775a1b2964b719ff961a92083c5c617f637fc46e0c9c20ab233f8686f7f38c3cb27d825c54dd95e93a59b ac3b8a7c2317ea967f229eddc3e23e279427f665c4705c7532ed33443f1243d33453c1088f57088d2ab1e3df690a9cc9 b787beeddfbfe36dd51ec4efd9cf83e59e84d354c3353cc9c447be53ae53d366ed1c59b686e52a92f002142c8652bfe0 b7a64198300cb6716aa7ac6b25621f8bdec46ad5c07a27e165b3f774cdf65bcfdbf31e9bae0c16b44de4b00ada7a4244 b8ae9f1452909e0c412c7a7fe075027691ea8df1347f65a5507bc8848f1d2c833d69748076db1129e5b4fb912f65c86c 9682e41872456b9fa67def89e71f06d362d6c8ca85c9c48536615bc401442711e1c9803f10ab7f8ab5feaec0f9df20a6 88889ff4e271dc1c7e21989cc39f73cde2f0475acd98078281591ff6c944fadeb9954e72334319050205d745d4df73df 8f79b5b8159e7fd0d93b0645f3c416464f39aec353b57d99ecf24f96272df8a068ad67a6c90c78d82c63b40bb73989bb 838c01a009a3d8558a3f0bdd5e22de21af71ca1aefc8423c91dc577d50920e9516880e87dce3e6d086e11cd45c9052d9 b97f1c6eee8a78f137c840667cc288256e39294268a3009419298a04a1d0087c9c9077b33c917c65caf76637702dda8a 972284ce72f96a61c899260203dfa06fc3268981732bef74060641c1a5068ead723e3399431c247ca034b0dae861e8df 945a8d52d6d3db6663dbd3110c6587f9e9c44132045eeffba15621576d178315cb52870fa5861669f84f0bee646183fe a0a547b5f0967b1c3e5ec6c6a9a99f0578521489180dfdfbb5561f4d166baac43a2f06f950f645ce991664e167537eed a0592cda5cdddf1340033a745fd13a6eff2021f2e26587116c61c60edead067e0f217bc2bef4172a3c9839b0b978ab35 b9c223b65a3281587fa44ec829e609154b32f801fd1de6950e01eafb07a8324243b960d5735288d0f89f0078b2c42b5b 99ebfc3b8f9f98249f4d37a0023149ed85edd7a5abe062c8fb30c8c84555258b998bdcdd1d400bc0fa2a4aaa8b224466 955b68526e6cb3937b26843270f4e60f9c6c8ece2fa9308fe3e23afa433309c068c66a4bc16ee2cf04220f095e9afce4 b766caeafcc00378135ae53397f8a67ed586f5e30795462c4a35853de6681b1f17401a1c40958de32b197c083b7279c1 921bf87cad947c2c33fa596d819423c10337a76fe5a63813c0a9dc78a728207ae7b339407a402fc4d0f7cba3af6da6fc a74ba1f3bc3e6c025db411308f49b347ec91da1c916bda9da61e510ec8d71d25e0ac0f124811b7860e5204f93099af27 a29b4d144e0bf17a7e8353f2824cef0ce85621396babe8a0b873ca1e8a5f8d508b87866cf86da348470649fceefd735c a8040e12ffc3480dd83a349d06741d1572ef91932c46f5cf03aee8454254156ee95786fd013d5654725e674c920cec32 8c4cf34ca60afd33923f219ffed054f90cd3f253ffeb2204a3b61b0183417e366c16c07fae860e362b0f2bfe3e1a1d35 8195eede4ddb1c950459df6c396b2e99d83059f282b420acc34220cadeed16ab65c856f2c52568d86d3c682818ed7b37 91fff19e54c15932260aa990c7fcb3c3c3da94845cc5aa8740ef56cf9f58d19b4c3c55596f8d6c877f9f4d22921d93aa a3e0bf7e5d02a80b75cf75f2db7e66cb625250c45436e3c136d86297d652590ec97c2311bafe407ad357c79ab29d107b 81917ff87e5ed2ae4656b481a63ced9e6e5ff653b8aa6b7986911b8bc1ee5b8ef4f4d7882c3f250f2238e141b227e510 915fdbe5e7de09c66c0416ae14a8750db9412e11dc576cf6158755fdcaf67abdbf0fa79b554cac4fe91c4ec245be073f 8df27eafb5c3996ba4dc5773c1a45ca77e626b52e454dc1c4058aa94c2067c18332280630cc3d364821ee53bf2b8c130 934f8a17c5cbb827d7868f5c8ca00cb027728a841000a16a3428ab16aa28733f16b52f58c9c4fbf75ccc45df72d9c4df b83f4da811f9183c25de8958bc73b504cf790e0f357cbe74ef696efa7aca97ad3b7ead1faf76e9f982c65b6a4d888fc2 87188213c8b5c268dc2b6da413f0501c95749e953791b727450af3e43714149c115b596b33b63a2f006a1a271b87efd0 83e9e888ab9c3e30761de635d9aabd31248cdd92f7675fc43e4b21fd96a03ec1dc4ad2ec94fec857ffb52683ac98e360 b4b9a1823fe2d983dc4ec4e3aaea297e581c3fc5ab4b4af5fa1370caa37af2d1cc7fc6bfc5e7da60ad8fdce27dfe4b24 856388bc78aef465dbcdd1f559252e028c9e9a2225c37d645c138e78f008f764124522705822a61326a6d1c79781e189 a6431b36db93c3b47353ba22e7c9592c9cdfb9cbdd052ecf2cc3793f5b60c1e89bc96e6bae117bfd047f2308da00dd2f b619972d48e7e4291542dcde08f7a9cdc883c892986ded2f23ccb216e245cd8d9ad1d285347b0f9d7611d63bf4cee2bc 8845cca6ff8595955f37440232f8e61d5351500bd016dfadd182b9d39544db77a62f4e0102ff74dd4173ae2c181d24ef b2f5f7fa26dcd3b6550879520172db2d64ee6aaa213cbef1a12befbce03f0973a22eb4e5d7b977f466ac2bf8323dcedd 858b7f7e2d44bdf5235841164aa8b4f3d33934e8cb122794d90e0c1cac726417b220529e4f896d7b77902ab0ccd35b3a 80b0408a092dae2b287a5e32ea1ad52b78b10e9c12f49282976cd738f5d834e03d1ad59b09c5ccaccc39818b87d06092 b996b0a9c6a2d14d984edcd6ab56bc941674102980d65b3ad9733455f49473d3f587c8cbf661228a7e125ddbe07e3198 90224fcebb36865293bd63af786e0c5ade6b67c4938d77eb0cbae730d514fdd0fe2d6632788e858afd29d46310cf86df b71351fdfff7168b0a5ec48397ecc27ac36657a8033d9981e97002dcca0303e3715ce6dd3f39423bc8ef286fa2e9e669 ae2a3f078b89fb753ce4ed87e0c1a58bb19b4f0cfb6586dedb9fcab99d097d659a489fb40e14651741e1375cfc4b6c5f 8ef476b118e0b868caed297c161f4231bbeb863cdfa5e2eaa0fc6b6669425ce7af50dc374abceac154c287de50c22307 92e46ab472c56cfc6458955270d3c72b7bde563bb32f7d4ab4d959db6f885764a3d864e1aa19802fefaa5e16b0cb0b54 96a3f68323d1c94e73d5938a18a377af31b782f56212de3f489d22bc289cf24793a95b37f1d6776edf88114b5c1fa695 962cc068cfce6faaa27213c4e43e44eeff0dfbb6d25b814e82c7da981fb81d7d91868fa2344f05fb552362f98cfd4a72 895d4e4c4ad670abf66d43d59675b1add7afad7438ada8f42a0360c704cee2060f9ac15b4d27e9b9d0996bb801276fe3 b3ad18d7ece71f89f2ef749b853c45dc56bf1c796250024b39a1e91ed11ca32713864049c9aaaea60cde309b47486bbf 8f05404e0c0258fdbae50e97ccb9b72ee17e0bd2400d9102c0dad981dac8c4c71585f03e9b5d50086d0a2d3334cb55d1 8bd877e9d4591d02c63c6f9fc9976c109de2d0d2df2bfa5f6a3232bab5b0b8b46e255679520480c2d7a318545efa1245 8d4c16b5d98957c9da13d3f36c46f176e64e5be879f22be3179a2c0e624fe4758a82bf8c8027410002f973a3b84cd55a 86e2a8dea86427b424fa8eada881bdff896907084a495546e66556cbdf070b78ba312bf441eb1be6a80006d25d5097a3 8608b0c117fd8652fdab0495b08fadbeba95d9c37068e570de6fddfef1ba4a1773b42ac2be212836141d1bdcdef11a17 a13d6febf5fb993ae76cae08423ca28da8b818d6ef0fde32976a4db57839cd45b085026b28ee5795f10a9a8e3098c683 8e261967fa6de96f00bc94a199d7f72896a6ad8a7bbb1d6187cca8fad824e522880e20f766620f4f7e191c53321d70f9 8b8e8972ac0218d7e3d922c734302803878ad508ca19f5f012bc047babd8a5c5a53deb5fe7c15a4c00fd6d1cb9b1dbd0 b5616b233fb3574a2717d125a434a2682ff68546dccf116dd8a3b750a096982f185614b9fb6c7678107ff40a451f56fa aa6adf9b0c3334b0d0663f583a4914523b2ac2e7adffdb026ab9109295ff6af003ef8357026dbcf789896d2afded8d73 acb72df56a0b65496cd534448ed4f62950bb1e11e50873b6ed349c088ee364441821294ce0f7c61bd7d38105bea3b442 abae12df83e01ec947249fedd0115dc501d2b03ff7232092979eda531dbbca29ace1d46923427c7dde4c17bdf3fd7708 820b4fc2b63a9fda7964acf5caf19a2fc4965007cb6d6b511fcafcb1f71c3f673a1c0791d3f86e3a9a1eb6955b191cc0 af277259d78c6b0f4f030a10c53577555df5e83319ddbad91afbd7c30bc58e7671c56d00d66ec3ab5ef56470cd910cee ad4a861c59f1f5ca1beedd488fb3d131dea924fffd8e038741a1a7371fad7370ca5cf80dc01f177fbb9576713bb9a5b3 b67a5162982ce6a55ccfb2f177b1ec26b110043cf18abd6a6c451cf140b5af2d634591eb4f28ad92177d8c7e5cd0a5e8 96176d0a83816330187798072d449cbfccff682561e668faf6b1220c9a6535b32a6e4f852e8abb00f79abb87493df16b b0afe6e7cb672e18f0206e4423f51f8bd0017bf464c4b186d46332c5a5847647f89ff7fa4801a41c1b0b42f6135bcc92 8fc5e7a95ef20c1278c645892811f6fe3f15c431ebc998a32ec0da44e7213ea934ed2be65239f3f49b8ec471e9914160 b7793e41adda6c82ba1f2a31f656f6205f65bf8a3d50d836ee631bc7ce77c153345a2d0fc5c60edf8b37457c3729c4ec a504dd7e4d6b2f4379f22cc867c65535079c75ccc575955f961677fa63ecb9f74026fa2f60c9fb6323c1699259e5e9c8 ab899d00ae693649cc1afdf30fb80d728973d2177c006e428bf61c7be01e183866614e05410041bc82cb14a33330e69c 8a3bd8b0b1be570b65c4432a0f6dc42f48a2000e30ab089cf781d38f4090467b54f79c0d472fcbf18ef6a00df69cc6f3 b4d7028f7f76a96a3d7803fca7f507ae11a77c5346e9cdfccb120a833a59bda1f4264e425aa588e7a16f8e7638061d84 b9c7511a76ea5fb105de905d44b02edb17008335766ee357ed386b7b3cf19640a98b38785cb14603c1192bee5886c9b6 8563afb12e53aed71ac7103ab8602bfa8371ae095207cb0d59e8fd389b6ad1aff0641147e53cb6a7ca16c7f37c9c5e6b 8e108be614604e09974a9ed90960c28c4ea330a3d9a0cb4af6dd6f193f84ab282b243ecdf549b3131036bebc8905690c b794d127fbedb9c5b58e31822361706ffac55ce023fbfe55716c3c48c2fd2f2c7660a67346864dfe588812d369cb50b6 b797a3442fc3b44f41baefd30346f9ac7f96e770d010d53c146ce74ce424c10fb62758b7e108b8abfdc5fafd89d745cb 993bb71e031e8096442e6205625e1bfddfe6dd6a83a81f3e2f84fafa9e5082ab4cad80a099f21eff2e81c83457c725c3 8711ab833fc03e37acf2e1e74cfd9133b101ff4144fe30260654398ae48912ab46549d552eb9d15d2ea57760d35ac62e b21321fd2a12083863a1576c5930e1aecb330391ef83326d9d92e1f6f0d066d1394519284ddab55b2cb77417d4b0292f 877d98f731ffe3ee94b0b5b72d127630fa8a96f6ca4f913d2aa581f67732df6709493693053b3e22b0181632ac6c1e3b ae391c12e0eb8c145103c62ea64f41345973311c3bf7281fa6bf9b7faafac87bcf0998e5649b9ef81e288c369c827e07 b83a2842f36998890492ab1cd5a088d9423d192681b9a3a90ec518d4c541bce63e6c5f4df0f734f31fbfdd87785a2463 a21b6a790011396e1569ec5b2a423857b9bec16f543e63af28024e116c1ea24a3b96e8e4c75c6537c3e4611fd265e896 b4251a9c4aab3a495da7a42e684ba4860dbcf940ad1da4b6d5ec46050cbe8dab0ab9ae6b63b5879de97b905723a41576 8222f70aebfe6ac037f8543a08498f4cadb3edaac00336fc00437eb09f2cba758f6c38e887cc634b4d5b7112b6334836 86f05038e060594c46b5d94621a1d9620aa8ba59a6995baf448734e21f58e23c1ea2993d3002ad5250d6edd5ba59b34f a7c0c749baef811ab31b973c39ceb1d94750e2bc559c90dc5eeb20d8bb6b78586a2b363c599ba2107d6be65cd435f24e 861d46a5d70b38d6c1cd72817a2813803d9f34c00320c8b62f8b9deb67f5b5687bc0b37c16d28fd017367b92e05da9ca b3365d3dab639bffbe38e35383686a435c8c88b397b717cd4aeced2772ea1053ceb670f811f883f4e02975e5f1c4ac58 a5750285f61ab8f64cd771f6466e2c0395e01b692fd878f2ef2d5c78bdd8212a73a3b1dfa5e4c8d9e1afda7c84857d3b 835a10809ccf939bc46cf950a33b36d71be418774f51861f1cd98a016ade30f289114a88225a2c11e771b8b346cbe6ef a4f59473a037077181a0a62f1856ec271028546ca9452b45cedfcb229d0f4d1aabfc13062b07e536cc8a0d4b113156a2 95cd14802180b224d44a73cc1ed599d6c4ca62ddcaa503513ccdc80aaa8be050cc98bd4b4f3b639549beb4587ac6caf9 973b731992a3e69996253d7f36dd7a0af1982b5ed21624b77a7965d69e9a377b010d6dabf88a8a97eec2a476259859cc af8a1655d6f9c78c8eb9a95051aa3baaf9c811adf0ae8c944a8d3fcba87b15f61021f3baf6996fa0aa51c81b3cb69de1 835aad5c56872d2a2d6c252507b85dd742bf9b8c211ccb6b25b52d15c07245b6d89b2a40f722aeb5083a47cca159c947 abf4e970b02bef8a102df983e22e97e2541dd3650b46e26be9ee394a3ea8b577019331857241d3d12b41d4eacd29a3ac a13c32449dbedf158721c13db9539ae076a6ce5aeaf68491e90e6ad4e20e20d1cdcc4a89ed9fd49cb8c0dd50c17633c1 8c8f78f88b7e22dd7e9150ab1c000f10c28e696e21d85d6469a6fe315254740f32e73d81ab1f3c1cf8f544c86df506e8 b4b77f2acfe945abf81f2605f906c10b88fb4d28628487fb4feb3a09f17f28e9780445dfcee4878349d4c6387a9d17d4 8d255c235f3812c6ecc646f855fa3832be5cb4dbb9c9e544989fafdf3f69f05bfd370732eaf954012f0044aa013fc9c6 b982efd3f34b47df37c910148ac56a84e8116647bea24145a49e34e0a6c0176e3284d838dae6230cb40d0be91c078b85 983f365aa09bd85df2a6a2ad8e4318996b1e27d02090755391d4486144e40d80b1fbfe1c798d626db92f52e33aa634da 95fd1981271f3ea3a41d654cf497e6696730d9ff7369f26bc4d7d15c7adb4823dd0c42e4a005a810af12d234065e5390 a9f5219bd4b913c186ef30c02f995a08f0f6f1462614ea5f236964e02bdaa33db9d9b816c4aee5829947840a9a07ba60 9210e6ceb05c09b46fd09d036287ca33c45124ab86315e5d6911ff89054f1101faaa3e83d123b7805056d388bcec6664 8ed9cbf69c6ff3a5c62dd9fe0d7264578c0f826a29e614bc2fb4d621d90c8c9992438accdd7a614b1dca5d1bb73dc315 85cf2a8cca93e00da459e3cecd22c342d697eee13c74d5851634844fc215f60053cf84b0e03c327cb395f48d1c71a8a4 8818a18e9a2ec90a271b784400c1903089ffb0e0b40bc5abbbe12fbebe0f731f91959d98c5519ef1694543e31e2016d4 8dabc130f296fa7a82870bf9a8405aaf542b222ed9276bba9bd3c3555a0f473acb97d655ee7280baff766a827a8993f0 ac7952b84b0dc60c4d858f034093b4d322c35959605a3dad2b806af9813a4680cb038c6d7f4485b4d6b2ff502aaeca25 ad65cb6d57b48a2602568d2ec8010baed0eb440eec7638c5ec8f02687d764e9de5b5d42ad5582934e592b48471c22d26 a02ab8bd4c3d114ea23aebdd880952f9495912817da8c0c08eabc4e6755439899d635034413d51134c72a6320f807f1c 8319567764b8295402ec1ebef4c2930a138480b37e6d7d01c8b4c9cd1f2fc3f6e9a44ae6e380a0c469b25b06db23305f afec53b2301dc0caa8034cd9daef78c48905e6068d692ca23d589b84a6fa9ddc2ed24a39480597e19cb3e83eec213b3f ac0b4ffdb5ae08e586a9cdb98f9fe56f4712af3a97065e89e274feacfb52b53c839565aee93c4cfaaccfe51432c4fab0 8972cbf07a738549205b1094c5987818124144bf187bc0a85287c94fdb22ce038c0f11df1aa16ec5992e91b44d1af793 b7267aa6f9e3de864179b7da30319f1d4cb2a3560f2ea980254775963f1523b44c680f917095879bebfa3dc2b603efcf 80f68f4bfc337952e29504ee5149f15093824ea7ab02507efd1317a670f6cbc3611201848560312e3e52e9d9af72eccf 8897fee93ce8fc1e1122e46b6d640bba309384dbd92e46e185e6364aa8210ebf5f9ee7e5e604b6ffba99aa80a10dd7d0 b58ea6c02f2360be60595223d692e82ee64874fda41a9f75930f7d28586f89be34b1083e03bbc1575bbfdda2d30db1ea 85a523a33d903280d70ac5938770453a58293480170c84926457ac2df45c10d5ff34322ab130ef4a38c916e70d81af53 a2cbf045e1bed38937492c1f2f93a5ba41875f1f262291914bc1fc40c60bd0740fb3fea428faf6da38b7c180fe8ac109 8c09328770ed8eb17afc6ac7ddd87bb476de18ed63cab80027234a605806895959990c47bd10d259d7f3e2ecb50074c9 b4b9e19edb4a33bde8b7289956568a5b6b6557404e0a34584b5721fe6f564821091013fbb158e2858c6d398293bb4b59 8a47377df61733a2aa5a0e945fce00267f8e950f37e109d4487d92d878fb8b573317bb382d902de515b544e9e233458d b5804c9d97efeff5ca94f3689b8088c62422d92a1506fd1d8d3b1b30e8a866ad0d6dad4abfa051dfc4471250cac4c5d9 9084a6ee8ec22d4881e9dcc8a9eb3c2513523d8bc141942370fd191ad2601bf9537a0b1e84316f3209b3d8a54368051e 85447eea2fa26656a649f8519fa67279183044791d61cf8563d0783d46d747d96af31d0a93507bbb2242666aa87d3720 97566a84481027b60116c751aec552adfff2d9038e68d48c4db9811fb0cbfdb3f1d91fc176a0b0d988a765f8a020bce1 ae87e5c1b9e86c49a23dceda4ecfd1dcf08567f1db8e5b6ec752ebd45433c11e7da4988573cdaebbb6f4135814fc059e abee05cf9abdbc52897ac1ce9ed157f5466ed6c383d6497de28616238d60409e5e92619e528af8b62cc552bf09970dc2 ae6d31cd7bf9599e5ee0828bab00ceb4856d829bba967278a73706b5f388465367aa8a6c7da24b5e5f1fdd3256ef8e63 ac33e7b1ee47e1ee4af472e37ab9e9175260e506a4e5ce449788075da1b53c44cb035f3792d1eea2aa24b1f688cc6ed3 80f65b205666b0e089bb62152251c48c380a831e5f277f11f3ef4f0d52533f0851c1b612267042802f019ec900dc0e8f 858520ad7aa1c9fed738e3b583c84168f2927837ad0e1d326afe9935c26e9b473d7f8c382e82ef1fe37d2b39bb40a1ee b842dd4af8befe00a97c2d0f0c33c93974761e2cb9e5ab8331b25170318ddd5e4bdbc02d8f90cbfdd5f348f4f371c1f7 8bf2cb79bc783cb57088aae7363320cbeaabd078ffdec9d41bc74ff49e0043d0dad0086a30e5112b689fd2f5a606365d 982eb03bbe563e8850847cd37e6a3306d298ab08c4d63ab6334e6b8c1fa13fce80cf2693b09714c7621d74261a0ff306 b143edb113dec9f1e5105d4a93fbe502b859e587640d3db2f628c09a17060e6aec9e900e2c8c411cda99bc301ff96625 af472d9befa750dcebc5428fe1a024f18ec1c07bca0f95643ce6b5f4189892a910285afb03fd7ed7068fbe614e80d33c a97e3bc57ede73ecd1bbf02de8f51b4e7c1a067da68a3cd719f4ba26a0156cbf1cef2169fd35a18c5a4cced50d475998 a862253c937cf3d75d7183e5f5be6a4385d526aeda5171c1c60a8381fea79f88f5f52a4fab244ecc70765d5765e6dfd5 90cb776f8e5a108f1719df4a355bebb04bf023349356382cae55991b31720f0fd03206b895fa10c56c98f52453be8778 a7614e8d0769dccd520ea4b46f7646e12489951efaef5176bc889e9eb65f6e31758df136b5bf1e9107e68472fa9b46ec ac3a9b80a3254c42e5ed3a090a0dd7aee2352f480de96ad187027a3bb6c791eddfc3074b6ffd74eea825188f107cda4d 82a01d0168238ef04180d4b6e0a0e39024c02c2d75b065017c2928039e154d093e1af4503f4d1f3d8a948917abb5d09f 8fab000a2b0eef851a483aec8d2dd85fe60504794411a2f73ed82e116960547ac58766cb73df71aea71079302630258d 872451a35c6db61c63e9b8bb9f16b217f985c20be4451c14282c814adb29d7fb13f201367c664435c7f1d4d9375d7a58 887d9ff54cc96b35d562df4a537ff972d7c4b3fd91ab06354969a4cfede0b9fc68bbffb61d0dbf1a58948dc701e54f5a 8cb5c2a6bd956875d88f41ae24574434f1308514d44057b55c9c70f13a3366ed054150eed0955a38fda3f757be73d55f 89ad0163cad93e24129d63f8e38422b7674632a8d0a9016ee8636184cab177659a676c4ee7efba3abe1a68807c656d60 b9ec01c7cab6d00359b5a0b4a1573467d09476e05ca51a9227cd16b589a9943d161eef62dcc73f0de2ec504d81f4d252 8031d17635d39dfe9705c485d2c94830b6fc9bc67b91300d9d2591b51e36a782e77ab5904662effa9382d9cca201f525 8be5a5f6bc8d680e5092d6f9a6585acbaaaa2ddc671da560dcf5cfa4472f4f184b9597b5b539438accd40dda885687cc b1fc0f052fae038a2e3de3b3a96b0a1024b009de8457b8b3adb2d315ae68a89af905720108a30038e5ab8d0d97087785 8b8bdc77bd3a6bc7ca5492b6f8c614852c39a70d6c8a74916eaca0aeb4533b11898b8820a4c2620a97bf35e275480029 af35f4dc538d4ad5cdf710caa38fd1eb496c3fa890a047b6a659619c5ad3054158371d1e88e0894428282eed9f47f76b 8166454a7089cc07758ad78724654f4e7a1a13e305bbf88ddb86f1a4b2904c4fc8ab872d7da364cdd6a6c0365239e2ad ab287c7d3addce74ce40491871c768abe01daaa0833481276ff2e56926b38a7c6d2681ffe837d2cc323045ad1a4414f9 b90317f4505793094d89365beb35537f55a6b5618904236258dd04ca61f21476837624a2f45fef8168acf732cab65579 98ae5ea27448e236b6657ab5ef7b1cccb5372f92ab25f5fa651fbac97d08353a1dae1b280b1cd42b17d2c6a70a63ab9d adcf54e752d32cbaa6cb98fbca48d8cd087b1db1d131d465705a0d8042c8393c8f4d26b59006eb50129b21e6240f0c06 b591a3e4db18a7345fa935a8dd7994bbac5cc270b8ebd84c8304c44484c7a74afb45471fdbe4ab22156a30fae1149b40 806b53ac049a42f1dcc1d6335505371da0bf27c614f441b03bbf2e356be7b2fb4eed7117eabcce9e427a542eaa2bf7d8 800482e7a772d49210b81c4a907f5ce97f270b959e745621ee293cf8c71e8989363d61f66a98f2d16914439544ca84c7 99de9eafdad3617445312341644f2bb888680ff01ce95ca9276b1d2e5ef83fa02dab5e948ebf66c17df0752f1bd37b70 961ee30810aa4c93ae157fbe9009b8e443c082192bd36a73a6764ff9b2ad8b0948fe9a73344556e01399dd77badb4257 ae0a361067c52efbe56c8adf982c00432cd478929459fc7f74052c8ee9531cd031fe1335418fde53f7c2ef34254eb7ac a3503d16b6b27eb20c1b177bcf90d13706169220523a6271b85b2ce35a9a2b9c5bed088540031c0a4ebfdae3a4c6ab04 909420122c3e723289ca4e7b81c2df5aff312972a2203f4c45821b176e7c862bf9cac7f7df3adf1d59278f02694d06e7 989f42380ae904b982f85d0c6186c1aef5d6bcba29bcfbb658e811b587eb2749c65c6e4a8cc6409c229a107499a4f5d7 8037a6337195c8e26a27ea4ef218c6e7d79a9720aaab43932d343192abc2320fe72955f5e431c109093bda074103330a b312e168663842099b88445e940249cc508f080ab0c94331f672e7760258dbd86be5267e4cf25ea25facb80bff82a7e9 aaa3ff8639496864fcdbfdda1ac97edc4f08e3c9288b768f6c8073038c9fbbf7e1c4bea169b4d45c31935cdf0680d45e 97dbd3df37f0b481a311dfc5f40e59227720f367912200d71908ef6650f32cc985cb05b981e3eea38958f7e48d10a15d a89d49d1e267bb452d6cb621b9a90826fe55e9b489c0427b94442d02a16f390eed758e209991687f73f6b5a032321f42 9530dea4e0e19d6496f536f2e75cf7d814d65fde567055eb20db48fd8d20d501cd2a22fb506db566b94c9ee10f413d43 81a7009b9e67f1965fa7da6a57591c307de91bf0cd35ab4348dc4a98a4961e096d004d7e7ad318000011dc4342c1b809 83440a9402b766045d7aca61a58bba2aa29cac1cf718199e472ba086f5d48093d9dda4d135292ba51d049a23964eceae a06c9ce5e802df14f6b064a3d1a0735d429b452f0e2e276042800b0a4f16df988fd94cf3945921d5dd3802ab2636f867 b1359e358b89936dee9e678a187aad3e9ab14ac40e96a0a68f70ee2583cdcf467ae03bef4215e92893f4e12f902adec8 835304f8619188b4d14674d803103d5a3fa594d48e96d9699e653115dd05fdc2dda6ba3641cf7ad53994d448da155f02 8327cba5a9ff0d3f5cd0ae55e77167448926d5fcf76550c0ad978092a14122723090c51c415e88e42a2b62eb07cc3981 b373dcdaea85f85ce9978b1426a7ef4945f65f2d3467a9f1cc551a99766aac95df4a09e2251d3f89ca8c9d1a7cfd7b0e ab1422dc41af2a227b973a6fd124dfcb2367e2a11a21faa1d381d404f51b7257e5bc82e9cf20cd7fe37d7ae761a2ab37 a93774a03519d2f20fdf2ef46547b0a5b77c137d6a3434b48d56a2cbef9e77120d1b85d0092cf8842909213826699477 8eb967a495a38130ea28711580b7e61bcd1d051cd9e4f2dbf62f1380bd86e0d60e978d72f6f31e909eb97b3b9a2b867c ae8213378da1287ba1fe4242e1acaec19b877b6fe872400013c6eac1084b8d03156792fa3020201725b08228a1e80f49 b143daf6893d674d607772b3b02d8ac48f294237e2f2c87963c0d4e26d9227d94a2a13512457c3d5883544bbc259f0ef b343bd2aca8973888e42542218924e2dda2e938fd1150d06878af76f777546213912b7c7a34a0f94186817d80ffa185c b188ebc6a8c3007001aa347ae72cc0b15d09bc6c19a80e386ee4b334734ec0cc2fe8b493c2422f38d1e6d133cc3db6fe b795f6a8b9b826aaeee18ccd6baf6c5adeeec85f95eb5b6d19450085ec7217e95a2d9e221d77f583b297d0872073ba0e b1c7dbd998ad32ae57bfa95deafa147024afd57389e98992c36b6e52df915d3d5a39db585141ec2423173e85d212fed8 812bcdeb9fe5f12d0e1df9964798056e1f1c3de3b17b6bd2919b6356c4b86d8e763c01933efbe0224c86a96d5198a4be b19ebeda61c23d255cbf472ef0b8a441f4c55b70f0d8ed47078c248b1d3c7c62e076b43b95c00a958ec8b16d5a7cb0d7 b02adc9aaa20e0368a989c2af14ff48b67233d28ebee44ff3418bb0473592e6b681af1cc45450bd4b175df9051df63d9 8d87f0714acee522eb58cec00360e762adc411901dba46adc9227124fa70ee679f9a47e91a6306d6030dd4eb8de2f3c1 8be54cec21e74bcc71de29dc621444263737db15f16d0bb13670f64e42f818154e04b484593d19ef95f2ee17e4b3fe21 ab8e20546c1db38d31493b5d5f535758afb17e459645c1b70813b1cf7d242fd5d1f4354a7c929e8f7259f6a25302e351 89f035a1ed8a1e302ac893349ba8ddf967580fcb6e73d44af09e3929cde445e97ff60c87dafe489e2c0ab9c9986cfa00 8b2b0851a795c19191a692af55f7e72ad2474efdc5401bc3733cfdd910e34c918aaebe69d5ea951bdddf3c01cabbfc67 a4edb52c2b51495ccd1ee6450fc14b7b3ede8b3d106808929d02fb31475bacb403e112ba9c818d2857651e508b3a7dd1 9569341fded45d19f00bcf3cbf3f20eb2b4d82ef92aba3c8abd95866398438a2387437e580d8b646f17cf6fde8c5af23 aa4b671c6d20f72f2f18a939a6ff21cc37e0084b44b4a717f1be859a80b39fb1be026b3205adec2a66a608ec2bcd578f 94902e980de23c4de394ad8aec91b46f888d18f045753541492bfbb92c59d3daa8de37ae755a6853744af8472ba7b72b af651ef1b2a0d30a7884557edfad95b6b5d445a7561caebdc46a485aedd25932c62c0798465c340a76f6feaa196dd712 b7b669b8e5a763452128846dd46b530dca4893ace5cc5881c7ddcd3d45969d7e73fbebdb0e78aa81686e5f7b22ec5759 82507fd4ebe9fa656a7f2e084d64a1fa6777a2b0bc106d686e2d9d2edafc58997e58cb6bfd0453b2bf415704aa82ae62 b40bce2b42b88678400ecd52955bbdadd15f8b9e1b3751a1a3375dc0efb5ca3ee258cf201e1140b3c09ad41217d1d49e b0210d0cbb3fbf3b8cdb39e862f036b0ff941cd838e7aaf3a8354e24246e64778d22f3de34572e6b2a580614fb6425be 876693cba4301b251523c7d034108831df3ce133d8be5a514e7a2ca494c268ca0556fa2ad8310a1d92a16b55bcd99ea9 8660281406d22a4950f5ef050bf71dd3090edb16eff27fa29ef600cdea628315e2054211ed2cc6eaf8f2a1771ef689fd a610e7e41e41ab66955b809ba4ade0330b8e9057d8efc9144753caed81995edeb1a42a53f93ce93540feca1fae708dac a49e2c176a350251daef1218efaccc07a1e06203386ede59c136699d25ca5cb2ac1b800c25b28dd05678f14e78e51891 83e0915aa2b09359604566080d411874af8c993beba97d4547782fdbe1a68e59324b800ff1f07b8db30c71adcbd102a8 a19e84e3541fb6498e9bb8a099c495cbfcad113330e0262a7e4c6544495bb8a754b2208d0c2d895c93463558013a5a32 87f2bd49859a364912023aca7b19a592c60214b8d6239e2be887ae80b69ebdeb59742bdebcfa73a586ab23b2c945586c b8e8fdddae934a14b57bc274b8dcd0d45ebb95ddbaabef4454e0f6ce7d3a5a61c86181929546b3d60c447a15134d08e1 87e0c31dcb736ea4604727e92dc1d9a3cf00adcff79df3546e02108355260f3dd171531c3c0f57be78d8b28058fcc8c0 9617d74e8f808a4165a8ac2e30878c349e1c3d40972006f0787b31ea62d248c2d9f3fc3da83181c6e57e95feedfd0e8c 8949e2cee582a2f8db86e89785a6e46bc1565c2d8627d5b6bf43ba71ffadfab7e3c5710f88dcb5fb2fc6edf6f4fae216 ad3fa7b0edceb83118972a2935a09f409d09a8db3869f30be3a76f67aa9fb379cabb3a3aff805ba023a331cad7d7eb64 8c95718a4112512c4efbd496be38bf3ca6cdcaad8a0d128f32a3f9aae57f3a57bdf295a3b372a8c549fda8f4707cffed 88f3261d1e28a58b2dee3fcc799777ad1c0eb68b3560f9b4410d134672d9533532a91ea7be28a041784872632d3c9d80 b47472a41d72dd2e8b72f5c4f8ad626737dde3717f63d6bc776639ab299e564cbad0a2ad5452a07f02ff49a359c437e5 9896d21dc2e8aad87b76d6df1654f10cd7bceed4884159d50a818bea391f8e473e01e14684814c7780235f28e69dca6e 82d47c332bbd31bbe83b5eb44a23da76d4a7a06c45d7f80f395035822bc27f62f59281d5174e6f8e77cc9b5c3193d6f0 95c74cd46206e7f70c9766117c34c0ec45c2b0f927a15ea167901a160e1530d8522943c29b61e03568aa0f9c55926c53 a89d7757825ae73a6e81829ff788ea7b3d7409857b378ebccd7df73fdbe62c8d9073741cf038314971b39af6c29c9030 8c1cd212d0b010905d560688cfc036ae6535bc334fa8b812519d810b7e7dcf1bb7c5f43deaa40f097158358987324a7f b86993c383c015ed8d847c6b795164114dd3e9efd25143f509da318bfba89389ea72a420699e339423afd68b6512fafb 8d06bd379c6d87c6ed841d8c6e9d2d0de21653a073725ff74be1934301cc3a79b81ef6dd0aad4e7a9dc6eac9b73019bc 81af4d2d87219985b9b1202d724fe39ef988f14fef07dfe3c3b11714e90ffba2a97250838e8535eb63f107abfe645e96 8c5e0af6330a8becb787e4b502f34f528ef5756e298a77dc0c7467433454347f3a2e0bd2641fbc2a45b95e231c6e1c02 8e2a8f0f04562820dc8e7da681d5cad9fe2e85dd11c785fb6fba6786c57a857e0b3bd838fb849b0376c34ce1665e4837 a39be8269449bfdfc61b1f62077033649f18dae9bef7c6163b9314ca8923691fb832f42776f0160b9e8abd4d143aa4e1 8c154e665706355e1cc98e0a4cabf294ab019545ba9c4c399d666e6ec5c869ca9e1faf8fb06cd9c0a5c2f51a7d51b70a a046a7d4de879d3ebd4284f08f24398e9e3bf006cd4e25b5c67273ade248689c69affff92ae810c07941e4904296a563 afd94c1cb48758e5917804df03fb38a6da0e48cd9b6262413ea13b26973f9e266690a1b7d9d24bbaf7e82718e0e594b0 859e21080310c8d6a38e12e2ac9f90a156578cdeb4bb2e324700e97d9a5511cd6045dc39d1d0de3f94aeed043a24119d a219fb0303c379d0ab50893264919f598e753aac9065e1f23ef2949abc992577ab43c636a1d2c089203ec9ddb941e27d b0fdb639d449588a2ca730afcba59334e7c387342d56defdfb7ef79c493f7fd0e5277eff18e7203e756c7bdda5803047 87f9c3b7ed01f54368aca6dbcf2f6e06bff96e183c4b2c65f8baa23b377988863a0a125d5cdd41a072da8462ced4c070 99ef7a5d5ac2f1c567160e1f8c95f2f38d41881850f30c461a205f7b1b9fb181277311333839b13fb3ae203447e17727 aeaca9b1c2afd24e443326cc68de67b4d9cedb22ad7b501a799d30d39c85bb2ea910d4672673e39e154d699e12d9b3dc a11675a1721a4ba24dd3d0e4c3c33a6edf4cd1b9f6b471070b4386c61f77452266eae6e3f566a40cfc885eada9a29f23 b228334445e37b9b49cb4f2cc56b454575e92173ddb01370a553bba665adadd52df353ad74470d512561c2c3473c7bb9 a18177087c996572d76f81178d18ed1ceebc8362a396348ce289f1d8bd708b9e99539be6fccd4acb1112381cfc5749b4 8e7b8bf460f0d3c99abb19803b9e43422e91507a1c0c22b29ee8b2c52d1a384da4b87c292e28eff040db5be7b1f8641f b03d038d813e29688b6e6f444eb56fec3abba64c3d6f890a6bcf2e916507091cdb2b9d2c7484617be6b26552ed1c56cb a1c88ccd30e934adfc5494b72655f8afe1865a84196abfb376968f22ddc07761210b6a9fb7638f1413d1b4073d430290 961b714faebf172ad2dbc11902461e286e4f24a99a939152a53406117767682a571057044decbeb3d3feef81f4488497 a03dc4059b46effdd786a0a03cc17cfee8585683faa35bb07936ded3fa3f3a097f518c0b8e2db92fd700149db1937789 adf60180c99ca574191cbcc23e8d025b2f931f98ca7dfcebfc380226239b6329347100fcb8b0fcb12db108c6ad101c07 805d4f5ef24d46911cbf942f62cb84b0346e5e712284f82b0db223db26d51aabf43204755eb19519b00e665c7719fcaa 8dea7243e9c139662a7fe3526c6c601eee72fd8847c54c8e1f2ad93ef7f9e1826b170afe58817dac212427164a88e87f a2ba42356606d651b077983de1ad643650997bb2babb188c9a3b27245bb65d2036e46667c37d4ce02cb1be5ae8547abe af2ae50b392bdc013db2d12ce2544883472d72424fc767d3f5cb0ca2d973fc7d1f425880101e61970e1a988d0670c81b 98e6bec0568d3939b31d00eb1040e9b8b2a35db46ddf4369bdaee41bbb63cc84423d29ee510a170fb5b0e2df434ba589 822ff3cd12fbef4f508f3ca813c04a2e0b9b799c99848e5ad3563265979e753ee61a48f6adc2984a850f1b46c1a43d35 891e8b8b92a394f36653d55725ef514bd2e2a46840a0a2975c76c2a935577f85289026aaa74384da0afe26775cbddfb9 b2a3131a5d2fe7c8967047aa66e4524babae941d90552171cc109527f345f42aa0df06dcbb2fa01b33d0043917bbed69 80c869469900431f3eeefafdbe07b8afd8cee7739e659e6d0109b397cacff85a88247698f87dc4e2fe39a592f250ac64 9091594f488b38f9d2bb5df49fd8b4f8829d9c2f11a197dd1431ed5abbc5c954bbde3387088f9ee3a5a834beb7619bce b472e241e6956146cca57b97a8a204668d050423b4e76f857bad5b47f43b203a04c8391ba9d9c3e95093c071f9d376a1 b7dd2de0284844392f7dfb56fe7ca3ede41e27519753ffc579a0a8d2d65ceb8108d06b6b0d4c3c1a2588951297bd1a1e 902116ce70d0a079ac190321c1f48701318c05f8e69ee09694754885d33a835a849cafe56f499a2f49f6cda413ddf9a7 b18105cc736787fafaf7c3c11c448bce9466e683159dff52723b7951dff429565e466e4841d982e3aaa9ee2066838666 97ab9911f3f659691762d568ae0b7faa1047b0aed1009c319fa79d15d0db8db9f808fc385dc9a68fa388c10224985379 b2a2cba65f5b927e64d2904ba412e2bac1cf18c9c3eda9c72fb70262497ecf505b640827e2afebecf10eebbcf48ccd3e b36a3fd677baa0d3ef0dac4f1548ff50a1730286b8c99d276a0a45d576e17b39b3cbadd2fe55e003796d370d4be43ce3 a5dfec96ca3c272566e89dc453a458909247e3895d3e44831528130bc47cc9d0a0dac78dd3cad680a4351d399d241967 8029382113909af6340959c3e61db27392531d62d90f92370a432aec3eb1e4c36ae1d4ef2ba8ec6edb4d7320c7a453f6 971d85121ea108e6769d54f9c51299b0381ece8b51d46d49c89f65bedc123bab4d5a8bc14d6f67f4f680077529cbae4c 98ff6afc01d0bec80a278f25912e1b1ebff80117adae72e31d5b9fa4d9624db4ba2065b444df49b489b0607c45e26c4c 8fa29be10fb3ab30ce25920fec0187e6e91e458947009dabb869aade7136c8ba23602682b71e390c251f3743164cbdaa b3345c89eb1653418fe3940cf3e56a9a9c66526389b98f45ca02dd62bfb37baa69a4baaa7132d7320695f8ea6ad1fd94 b72c7f5541c9ac6b60a7ec9f5415e7fb14da03f7164ea529952a29399f3a071576608dbbcc0d45994f21f92ddbeb1e19 aa3450bb155a5f9043d0ef95f546a2e6ade167280bfb75c9f09c6f9cdb1fffb7ce8181436161a538433afa3681c7a141 92a18fecaded7854b349f441e7102b638ababa75b1b0281dd0bded6541abe7aa37d96693595be0b01fe0a2e2133d50f9 980756ddf9d2253cfe6c94960b516c94889d09e612810935150892627d2ecee9a2517e04968eea295d0106850c04ca44 ae68c6ccc454318cdd92f32b11d89116a3b8350207a36d22a0f626718cad671d960090e054c0c77ac3162ae180ecfd4b 99f31f66eaaa551749ad91d48a0d4e3ff4d82ef0e8b28f3184c54e852422ba1bdafd53b1e753f3a070f3b55f3c23b6a2 a44eaeaa6589206069e9c0a45ff9fc51c68da38d4edff1d15529b7932e6f403d12b9387019c44a1488a5d5f27782a51f b80b5d54d4b344840e45b79e621bd77a3f83fb4ce6d8796b7d6915107b3f3c34d2e7d95bdafd120f285669e5acf2437a b36c069ec085a612b5908314d6b84c00a83031780261d1c77a0384c406867c9847d5b0845deddfa512cc04a8df2046fb b09dbe501583220f640d201acea7ee3e39bf9eda8b91aa07b5c50b7641d86d71acb619b38d27835ce97c3759787f08e9 87403d46a2bf63170fff0b857acacf42ee801afe9ccba8e5b4aea967b68eac73a499a65ca46906c2eb4c8f27bc739faa 82b93669f42a0a2aa5e250ffe6097269da06a9c02fcd1801abbad415a7729a64f830754bafc702e64600ba47671c2208 8e3a3029be7edb8dd3ab1f8216664c8dc50d395f603736061d802cef77627db7b859ef287ed850382c13b4d22d6a2d80 968e9ec7194ff424409d182ce0259acd950c384c163c04463bc8700a40b79beba6146d22b7fa7016875a249b7b31c602 8b42c984bbe4996e0c20862059167c6bdc5164b1ffcd928f29512664459212d263e89f0f0e30eed4e672ffa5ed0b01b5 96bac54062110dada905363211133f1f15dc7e4fd80a4c6e4a83bc9a0bcbbaba11cd2c7a13debcf0985e1a954c1da66b a16dc8a653d67a7cd7ae90b2fffac0bf1ca587005430fe5ba9403edd70ca33e38ba5661d2ed6e9d2864400d997626a62 a68ab11a570a27853c8d67e491591dcba746bfbee08a2e75ae0790399130d027ed387f41ef1d7de8df38b472df309161 92532b74886874447c0300d07eda9bbe4b41ed25349a3da2e072a93fe32c89d280f740d8ff70d5816793d7f2b97373cc 88e35711b471e89218fd5f4d0eadea8a29405af1cd81974427bc4a5fb26ed60798daaf94f726c96e779b403a2cd82820 b5c72aa4147c19f8c4f3a0a62d32315b0f4606e0a7025edc5445571eaf4daff64f4b7a585464821574dd50dbe1b49d08 9305d9b4095258e79744338683fd93f9e657367b3ab32d78080e51d54eec331edbc224fad5093ebf8ee4bd4286757eb8 b2a17abb3f6a05bcb14dc7b98321fa8b46d299626c73d7c6eb12140bf4c3f8e1795250870947af817834f033c88a59d6 b3477004837dbd8ba594e4296f960fc91ab3f13551458445e6c232eb04b326da803c4d93e2e8dcd268b4413305ff84da 924b4b2ebaafdcfdfedb2829a8bf46cd32e1407d8d725a5bd28bdc821f1bafb3614f030ea4352c671076a63494275a3f 8b81b9ef6125c82a9bece6fdcb9888a767ac16e70527753428cc87c56a1236e437da8be4f7ecfe57b9296dc3ae7ba807 906e19ec8b8edd58bdf9ae05610a86e4ea2282b1bbc1e8b00b7021d093194e0837d74cf27ac9916bdb8ec308b00da3da b41c5185869071760ac786078a57a2ab4e2af60a890037ac0c0c28d6826f15c2cf028fddd42a9b6de632c3d550bfbc14 a646e5dec1b713ae9dfdf7bdc6cd474d5731a320403c7dfcfd666ffc9ae0cff4b5a79530e8df3f4aa9cb80568cb138e9 b0efad22827e562bd3c3e925acbd0d9425d19057868608d78c2209a531cccd0f2c43dc5673acf9822247428ffa2bb821 a94c19468d14b6f99002fc52ac06bbe59e5c472e4a0cdb225144a62f8870b3f10593749df7a2de0bd3c9476ce682e148 803864a91162f0273d49271dafaab632d93d494d1af935aefa522768af058fce52165018512e8d6774976d52bd797e22 a08711c2f7d45c68fb340ac23597332e1bcaec9198f72967b9921204b9d48a7843561ff318f87908c05a44fc35e3cc9d 91c3cad94a11a3197ae4f9461faab91a669e0dddb0371d3cab3ed9aeb1267badc797d8375181130e461eadd05099b2a2 81bdaaf48aae4f7b480fc13f1e7f4dd3023a41439ba231760409ce9292c11128ab2b0bdbbf28b98af4f97b3551f363af 8d60f9df9fd303f625af90e8272c4ecb95bb94e6efc5da17b8ab663ee3b3f673e9f6420d890ccc94acf4d2cae7a860d8 a7b75901520c06e9495ab983f70b61483504c7ff2a0980c51115d11e0744683ce022d76e3e09f4e99e698cbd21432a0d 82956072df0586562fda7e7738226f694e1c73518dd86e0799d2e820d7f79233667192c9236dcb27637e4c65ef19d493 a586beb9b6ffd06ad200957490803a7cd8c9bf76e782734e0f55e04a3dc38949de75dc607822ec405736c576cf83bca3 a179a30d00def9b34a7e85607a447eea0401e32ab5abeee1a281f2acd1cf6ec81a178020666f641d9492b1bdf66f05a3 83e129705c538787ed8e0fdc1275e6466a3f4ee21a1e6abedd239393b1df72244723b92f9d9d9339a0cab6ebf28f5a16 811bd8d1e3722b64cd2f5b431167e7f91456e8bba2cc669d3fbbce7d553e29c3c19f629fcedd2498bc26d33a24891d17 a243c030c858f1f60cccd26b45b024698cc6d9d9e6198c1ed4964a235d9f8d0baf9cde10c8e63dfaa47f8e74e51a6e85 ab839eb82e23ca52663281f863b55b0a3d6d4425c33ffb4eeb1d7979488ab068bf99e2a60e82cea4dc42c56c26cbfebe 8b896f9bb21d49343e67aec6ad175b58c0c81a3ca73d44d113ae4354a0065d98eb1a5cafedaf232a2bb9cdc62152f309 af6230340cc0b66f5bf845540ed4fc3e7d6077f361d60762e488d57834c3e7eb7eacc1b0ed73a7d134f174a01410e50c 88975e1b1af678d1b5179f72300a30900736af580dd748fd9461ef7afccc91ccd9bed33f9da55c8711a7635b800e831f a97486bb9047391661718a54b8dd5a5e363964e495eae6c692730264478c927cf3e66dd3602413189a3699fbeae26e15 a5973c161ab38732885d1d2785fd74bf156ba34881980cba27fe239caef06b24a533ffe6dbbbeca5e6566682cc00300a a24776e9a840afda0003fa73b415d5bd6ecd9b5c2cc842b643ee51b8c6087f4eead4d0bfbd987eb174c489a7b952ff2a a8a6ee06e3af053b705a12b59777267c546f33ba8a0f49493af8e6df4e15cf8dd2d4fb4daf7e84c6b5d3a7363118ff03 a28e59ce6ad02c2ce725067c0123117e12ac5a52c8f5af13eec75f4a9efc4f696777db18a374fa33bcae82e0734ebd16 86dfc3b78e841c708aff677baa8ee654c808e5d257158715097c1025d46ece94993efe12c9d188252ad98a1e0e331fec a88d0275510f242eab11fdb0410ff6e1b9d7a3cbd3658333539815f1b450a84816e6613d15aa8a8eb15d87cdad4b27a2 8440acea2931118a5b481268ff9f180ee4ede85d14a52c026adc882410825b8275caa44aff0b50c2b88d39f21b1a0696 a7c3182eab25bd6785bacf12079d0afb0a9b165d6ed327814e2177148539f249eb9b5b2554538f54f3c882d37c0a8abe 85291fbe10538d7da38efdd55a7acebf03b1848428a2f664c3ce55367aece60039f4f320b1771c9c89a35941797f717c a2c6414eeb1234728ab0de94aa98fc06433a58efa646ca3fcbd97dbfb8d98ae59f7ce6d528f669c8149e1e13266f69c9 840c8462785591ee93aee2538d9f1ec44ba2ca61a569ab51d335ac873f5d48099ae8d7a7efa0725d9ff8f9475bfa4f56 a7065a9d02fb3673acf7702a488fbc01aa69580964932f6f40b6c2d1c386b19e50b0e104fcac24ea26c4e723611d0238 b72db6d141267438279e032c95e6106c2ccb3164b842ba857a2018f3a35f4b040da92680881eb17cd61d0920d5b8f006 a8005d6c5960e090374747307ef0be2871a7a43fa4e76a16c35d2baab808e9777b496e9f57a4218b23390887c33a0b55 8e152cea1e00a451ca47c20a1e8875873419700af15a5f38ee2268d3fbc974d4bd5f4be38008fa6f404dbdedd6e6e710 a3391aed1fcd68761f06a7d1008ec62a09b1cb3d0203cd04e300a0c91adfed1812d8bc1e4a3fd7976dc0aae0e99f52f1 967eb57bf2aa503ee0c6e67438098149eac305089c155f1762cf5e84e31f0fbf27c34a9af05621e34645c1ec96afaec8 88af97ddc4937a95ec0dcd25e4173127260f91c8db2f6eac84afb789b363705fb3196235af631c70cafd09411d233589 a32df75b3f2c921b8767638fd289bcfc61e08597170186637a7128ffedd52c798c434485ac2c7de07014f9e895c2c3d8 b0a783832153650aa0d766a3a73ec208b6ce5caeb40b87177ffc035ab03c7705ecdd1090b6456a29f5fb7e90e2fa8930 b59c8e803b4c3486777d15fc2311b97f9ded1602fa570c7b0200bada36a49ee9ef4d4c1474265af8e1c38a93eb66b18b 982f2c85f83e852022998ff91bafbb6ff093ef22cf9d5063e083a48b29175ccbd51b9c6557151409e439096300981a6c 939e3b5989fefebb9d272a954659a4eb125b98c9da6953f5e628d26266bd0525ec38304b8d56f08d65abc4d6da4a8dbb 8898212fe05bc8de7d18503cb84a1c1337cc2c09d1eeef2b475aa79185b7322bf1f8e065f1bf871c0c927dd19faf1f6d 94b0393a41cd00f724aee2d4bc72103d626a5aecb4b5486dd1ef8ac27528398edf56df9db5c3d238d8579af368afeb09 96ac564450d998e7445dd2ea8e3fc7974d575508fa19e1c60c308d83b645864c029f2f6b7396d4ff4c1b24e92e3bac37 8adf6638e18aff3eb3b47617da696eb6c4bdfbecbbc3c45d3d0ab0b12cbad00e462fdfbe0c35780d21aa973fc150285e b53f94612f818571b5565bbb295e74bada9b5f9794b3b91125915e44d6ddcc4da25510eab718e251a09c99534d6042d9 8b96462508d77ee083c376cd90807aebad8de96bca43983c84a4a6f196d5faf6619a2351f43bfeec101864c3bf255519 aeadf34657083fc71df33bd44af73bf5281c9ca6d906b9c745536e1819ea90b56107c55e2178ebad08f3ba75b3f81c86 9784ba29b2f0057b5af1d3ab2796d439b8753f1f749c73e791037461bdfc3f7097394283105b8ab01788ea5255a96710 8756241bda159d4a33bf74faba0d4594d963c370fb6a18431f279b4a865b070b0547a6d1613cf45b8cfb5f9236bbf831 b03ebfd6b71421dfd49a30460f9f57063eebfe31b9ceaa2a05c37c61522b35bdc09d7db3ad75c76c253c00ba282d3cd2 b34e7e6341fa9d854b2d3153bdda0c4ae2b2f442ab7af6f99a0975d45725aa48e36ae5f7011edd249862e91f499687d4 b462ee09dc3963a14354244313e3444de5cc37ea5ccfbf14cd9aca8027b59c4cb2a949bc30474497cab8123e768460e6 aea753290e51e2f6a21a9a0ee67d3a2713f95c2a5c17fe41116c87d3aa77b1683761264d704df1ac34f8b873bc88ef7b 98430592afd414394f98ddfff9f280fcb1c322dbe3510f45e1e9c4bb8ee306b3e0cf0282c0ee73ebb8ba087d4d9e0858 b95d3b5aaf54ffca11f4be8d57f76e14afdb20afc859dc7c7471e0b42031e8f3d461b726ecb979bdb2f353498dfe95ea 984d17f9b11a683132e0b5a9ee5945e3ff7054c2d5c716be73b29078db1d36f54c6e652fd2f52a19da313112e97ade07 ab232f756b3fff3262be418a1af61a7e0c95ceebbc775389622a8e10610508cd6784ab7960441917a83cc191c58829ea a28f41678d6e60de76b0e36ab10e4516e53e02e9c77d2b5af3cfeee3ce94cfa30c5797bd1daab20c98e1cad83ad0f633 b55395fca84dd3ccc05dd480cb9b430bf8631ff06e24cb51d54519703d667268c2f8afcde4ba4ed16bece8cc7bc8c6e0 8a8a5392a0e2ea3c7a8c51328fab11156004e84a9c63483b64e8f8ebf18a58b6ffa8fe8b9d95af0a2f655f601d096396 ab480000fe194d23f08a7a9ec1c392334e9c687e06851f083845121ce502c06b54dda8c43092bcc1035df45cc752fe9b b265644c29f628d1c7e8e25a5e845cabb21799371814730a41a363e1bda8a7be50fee7c3996a365b7fcba4642add10db b8a915a3c685c2d4728f6931c4d29487cad764c5ce23c25e64b1a3259ac27235e41b23bfe7ae982921b4cb84463097df 8efa7338442a4b6318145a5440fc213b97869647eeae41b9aa3c0a27ee51285b73e3ae3b4a9423df255e6add58864aa9 9106d65444f74d217f4187dfc8fcf3810b916d1e4275f94f6a86d1c4f3565b131fd6cde1fa708bc05fe183c49f14941a 948252dac8026bbbdb0a06b3c9d66ec4cf9532163bab68076fda1bd2357b69e4b514729c15aaa83b5618b1977bbc60c4 ae6596ccfdf5cbbc5782efe3bb0b101bb132dbe1d568854ca24cacc0b2e0e9fabcb2ca7ab42aecec412efd15cf8cb7a2 84a0b6c198ff64fd7958dfd1b40eac9638e8e0b2c4cd8cf5d8cdf80419baee76a05184bce6c5b635f6bf2d30055476a7 8893118be4a055c2b3da593dbca51b1ae2ea2469911acfb27ee42faf3e6c3ad0693d3914c508c0b05b36a88c8b312b76 b097479e967504deb6734785db7e60d1d8034d6ca5ba9552887e937f5e17bb413fccac2c1d1082154ed76609127860ad a0294e6b9958f244d29943debf24b00b538b3da1116269b6e452bb12dc742226712fd1a15b9c88195afeb5d2415f505c b3cc15f635080bc038f61b615f62b5b5c6f2870586191f59476e8368a73641d6ac2f7d0c1f54621982defdb318020230 99856f49b9fe1604d917c94d09cc0ed753d13d015d30587a94e6631ffd964b214e607deb8a69a8b5e349a7edf4309206 a8571e113ea22b4b4fce41a094da8c70de37830ae32e62c65c2fa5ad06a9bc29e884b945e73d448c72b176d6ecebfb58 a9e9c6e52beb0013273c29844956b3ce291023678107cdc785f7b44eff5003462841ad8780761b86aefc6b734adde7cf 80a784b0b27edb51ef2bad3aee80e51778dcaa0f3f5d3dcb5dc5d4f4b2cf7ae35b08de6680ea9dac53f8438b92eb09ef 827b543e609ea328e97e373f70ad72d4915a2d1daae0c60d44ac637231070e164c43a2a58db80a64df1c624a042b38f9 b449c65e8195202efdcb9bdb4e869a437313b118fef8b510cbbf8b79a4e99376adb749b37e9c20b51b31ed3310169e27 8ea3028f4548a79a94c717e1ed28ad4d8725b8d6ab18b021063ce46f665c79da3c49440c6577319dab2d036b7e08f387 897798431cfb17fe39f08f5f854005dc37b1c1ec1edba6c24bc8acb3b88838d0534a75475325a5ea98b326ad47dbad75 89cf232e6303b0751561960fd4dea5754a28c594daf930326b4541274ffb03c7dd75938e411eb9a375006a70ce38097f 9727c6ae7f0840f0b6c8bfb3a1a5582ceee705e0b5c59b97def7a7a2283edd4d3f47b7971e902a3a2079e40b53ff69b8 b76ed72b122c48679d221072efc0eeea063cb205cbf5f9ef0101fd10cb1075b8628166c83577cced654e1c001c7882f7 ae908c42d208759da5ee9b405df85a6532ea35c6f0f6a1288d22870f59d98edc896841b8ac890a538e6c8d1e8b02d359 809d12fe4039a0ec80dc9be6a89acaab7797e5f7f9b163378f52f9a75a1d73b2e9ae6e3dd49e32ced439783c1cabbef5 a4149530b7f85d1098ba534d69548c6c612c416e8d35992fc1f64f4deeb41e09e49c6cf7aadbed7e846b91299358fe2d a49342eacd1ec1148b8df1e253b1c015f603c39de11fa0a364ccb86ea32d69c34fd7aa6980a1fadcd8e785a57fa46f60 87d43eff5a006dc4dddcf76cc96c656a1f3a68f19f124181feab86c6cc9a52cb9189cdbb423414defdd9bb0ca8ff1ddc 861367e87a9aa2f0f68296ba50aa5dbc5713008d260cc2c7e62d407c2063064749324c4e8156dc21b749656cfebce26b b5303c2f72e84e170e66ae1b0fbd51b8c7a6f27476eaf5694b64e8737d5c84b51fe90100b256465a4c4156dd873cddb0 b62849a4f891415d74f434cdc1d23c4a69074487659ca96e1762466b2b7a5d8525b056b891d0feea6fe6845cba8bc7fb 923dd9e0d6590a9307e8c4c23f13bae3306b580e297a937711a8b13e8de85e41a61462f25b7d352b682e8437bf2b4ab3 9147379860cd713cd46c94b8cdf75125d36c37517fbecf81ace9680b98ce6291cd1c3e472f84249cc3b2b445e314b1b6 a808a4f17ac21e3fb5cfef404e61fae3693ca3e688d375f99b6116779696059a146c27b06de3ac36da349b0649befd56 87787e9322e1b75e66c1f0d9ea0915722a232770930c2d2a95e9478c4b950d15ab767e30cea128f9ed65893bfc2d0743 9036a6ee2577223be105defe1081c48ea7319e112fff9110eb9f61110c319da25a6cea0464ce65e858635b079691ef1f af5548c7c24e1088c23b57ee14d26c12a83484c9fd9296edf1012d8dcf88243f20039b43c8c548c265ef9a1ffe9c1c88 a0fff520045e14065965fb8accd17e878d3fcaf9e0af2962c8954e50be6683d31fa0bf4816ab68f08630dbac6bfce52a b4c1b249e079f6ae1781af1d97a60b15855f49864c50496c09c91fe1946266915b799f0406084d7783f5b1039116dd8b 8b0ffa5e7c498cb3879dddca34743b41eee8e2dea3d4317a6e961b58adb699ef0c92400c068d5228881a2b08121226bf 852ae8b19a1d80aa8ae5382e7ee5c8e7670ceb16640871c56b20b96b66b3b60e00015a3dde039446972e57b49a999ddd a49942f04234a7d8492169da232cfff8051df86e8e1ba3db46aede02422c689c87dc1d99699c25f96cb763f5ca0983e5 b04b597b7760cf5dcf411ef896d1661e6d5b0db3257ac2cf64b20b60c6cc18fa10523bb958a48d010b55bac7b02ab3b1 a494591b51ea8285daecc194b5e5bd45ae35767d0246ac94fae204d674ee180c8e97ff15f71f28b7aeb175b8aea59710 97d2624919e78406e7460730680dea8e71c8571cf988e11441aeea54512b95bd820e78562c99372d535d96f7e200d20d ac693ddb00e48f76e667243b9b6a7008424043fb779e4f2252330285232c3fccac4da25cbd6d95fe9ad959ff305a91f6 8d20ca0a71a64a3f702a0825bb46bd810d03bebfb227683680d474a52f965716ff99e19a165ebaf6567987f4f9ee3c94 a5c516a438f916d1d68ca76996404792e0a66e97b7f18fc54c917bf10cf3211b62387932756e39e67e47b0bd6e88385a b089614d830abc0afa435034cec7f851f2f095d479cacf1a3fb57272da826c499a52e7dcbc0eb85f4166fb94778e18e9 a8dacc943765d930848288192f4c69e2461c4b9bc6e79e30eeef9a543318cf9ae9569d6986c65c5668a89d49993f8e07 ab5a9361fa339eec8c621bdad0a58078983abd8942d4282b22835d7a3a47e132d42414b7c359694986f7db39386c2e19 94230517fb57bd8eb26c6f64129b8b2abd0282323bf7b94b8bac7fab27b4ecc2c4290c294275e1a759de19f2216134f3 b8f158ea5006bc3b90b285246625faaa6ac9b5f5030dc69701b12f3b79a53ec7e92eeb5a63bbd1f9509a0a3469ff3ffc 8b6944fd8cb8540957a91a142fdcda827762aa777a31e8810ca6d026e50370ee1636fc351724767e817ca38804ebe005 82d1ee40fe1569c29644f79fa6c4033b7ed45cd2c3b343881f6eb0de2e79548fded4787fae19bed6ee76ed76ff9f2f11 a8924c7035e99eaed244ca165607e7e568b6c8085510dcdbaf6ebdbed405af2e6c14ee27d94ffef10d30aa52a60bf66d 956f82a6c2ae044635e85812581e4866c5fa2f427b01942047d81f6d79a14192f66fbbe77c9ffeaef4e6147097fdd2b5 b1100255a1bcf5e05b6aff1dfeb6e1d55b5d68d43a7457ba10cc76b61885f67f4d0d5179abda786e037ae95deb8eea45 99510799025e3e5e8fbf06dedb14c060c6548ba2bda824f687d3999dc395e794b1fb6514b9013f3892b6cf65cb0d65aa 8f9091cebf5e9c809aab415942172258f894e66e625d7388a05289183f01b8d994d52e05a8e69f784fba41db9ea357f0 a13d2eeb0776bdee9820ecb6693536720232848c51936bb4ef4fe65588d3f920d08a21907e1fdb881c1ad70b3725e726 a68b8f18922d550284c5e5dc2dda771f24c21965a6a4d5e7a71678178f46df4d8a421497aad8fcb4c7e241aba26378a0 8b7601f0a3c6ad27f03f2d23e785c81c1460d60100f91ea9d1cab978aa03b523150206c6d52ce7c7769c71d2c8228e9e a8e02926430813caa851bb2b46de7f0420f0a64eb5f6b805401c11c9091d3b6d67d841b5674fa2b1dce0867714124cd8 b7968ecba568b8193b3058400af02c183f0a6df995a744450b3f7e0af7a772454677c3857f99c140bbdb2a09e832e8e0 8f20b1e9ba87d0a3f35309b985f3c18d2e8800f1ca7f0c52cadef773f1496b6070c936eea48c4a1cae83fd2524e9d233 88aef260042db0d641a51f40639dbeeefa9e9811df30bee695f3791f88a2f84d318f04e8926b7f47bf25956cb9e3754f 9725345893b647e9ba4e6a29e12f96751f1ae25fcaec2173e9a259921a1a7edb7a47159b3c8767e44d9e2689f5aa0f72 8c281e6f72752cb11e239e4df9341c45106eb7993c160e54423c2bffe10bc39d42624b45a1f673936ef2e1a02fc92f1a 90aba2f68bddb2fcce6c51430dacdfeec43ea8dc379660c99095df11017691ccf5faa27665cf4b9f0eea7728ae53c327 b7022695c16521c5704f49b7ddbdbec9b5f57ce0ceebe537bc0ebb0906d8196cc855a9afeb8950a1710f6a654464d93f 8fe1b9dd3c6a258116415d36e08374e094b22f0afb104385a5da48be17123e86fb8327baacc4f0d9ebae923d55d99bb5 817e85d8e3d19a4cbc1dec31597142c2daa4871bda89c2177fa719c00eda3344eb08b82eb92d4aa91a9eaacb3fc09783 b59053e1081d2603f1ca0ba553804d6fa696e1fd996631db8f62087b26a40dfef02098b0326bb75f99ec83b9267ca738 990a173d857d3ba81ff3789b931bfc9f5609cde0169b7f055fa3cb56451748d593d62d46ba33f80f9cafffe02b68dd14 b0c538dbba4954b809ab26f9f94a3cf1dcb77ce289eaec1d19f556c0ae4be1fa03af4a9b7057837541c3cc0a80538736 ac3ba42f5f44f9e1fc453ce49c4ab79d0e1d5c42d3b30b1e098f3ab3f414c4c262fa12fb2be249f52d4aaf3c5224beb9 af47467eb152e59870e21f0d4da2f43e093daf40180ab01438030684b114d025326928eaab12c41b81a066d94fce8436 98d1b58ba22e7289b1c45c79a24624f19b1d89e00f778eef327ec4856a9a897278e6f1a9a7e673844b31dde949153000 97ccb15dfadc7c59dca08cfe0d22df2e52c684cf97de1d94bc00d7ba24e020025130b0a39c0f4d46e4fc872771ee7875 b699e4ed9a000ff96ca296b2f09dce278832bc8ac96851ff3cff99ed3f6f752cfc0fea8571be28cd9b5a7ec36f1a08ee b9f49f0edb7941cc296435ff0a912e3ad16848ee8765ab5f60a050b280d6ea585e5b34051b15f6b8934ef01ceb85f648 ac3893df7b4ceab23c6b9054e48e8ba40d6e5beda8fbe90b814f992f52494186969b35d8c4cdc3c99890a222c9c09008 a41293ad22fae81dea94467bc1488c3707f3d4765059173980be93995fa4fcc3c9340796e3eed0beeb0ba0d9bb4fa3aa a0543e77acd2aeecde13d18d258aeb2c7397b77f17c35a1992e8666ea7abcd8a38ec6c2741bd929abba2f766138618cc 92e79b22bc40e69f6527c969500ca543899105837b6b1075fa1796755c723462059b3d1b028e0b3df2559fa440e09175 a1fa1eac8f41a5197a6fb4aa1eae1a031c89f9c13ff9448338b222780cf9022e0b0925d930c37501a0ef7b2b00fdaf83 b3cb29ff73229f0637335f28a08ad8c5f166066f27c6c175164d0f26766a927f843b987ee9b309ed71cbf0a65d483831 84d4ab787f0ac00f104f4a734dc693d62d48c2aeb03913153da62c2ae2c27d11b1110dcef8980368dd84682ea2c1a308 ab6a8e4bbc78d4a7b291ad3e9a8fe2d65f640524ba3181123b09d2d18a9e300e2509ccf7000fe47e75b65f3e992a2e7e b7805ebe4f1a4df414003dc10bca805f2ab86ca75820012653e8f9b79c405196b0e2cab099f2ab953d67f0d60d31a0f9 b12c582454148338ea605d22bd00a754109063e22617f1f8ac8ddf5502c22a181c50c216c3617b9852aa5f26af56b323 86333ad9f898947e31ce747728dc8c887479e18d36ff3013f69ebef807d82c6981543b5c3788af93c4d912ba084d3cba b514efa310dc4ad1258add138891e540d8c87142a881b5f46563cc58ecd1488e6d3a2fca54c0b72a929f3364ca8c333e aa0a30f92843cf2f484066a783a1d75a7aa6f41f00b421d4baf20a6ac7886c468d0eea7ca8b17dd22f4f74631b62b640 b3b7dc63baec9a752e8433c0cdee4d0f9bc41f66f2b8d132faf925eef9cf89aae756fc132c45910f057122462605dc10 b9b8190dac5bfdeb59fd44f4da41a57e7f1e7d2c21faba9da91fa45cbeca06dcf299c9ae22f0c89ece11ac46352d619f 89f8cf36501ad8bdfeab863752a9090e3bfda57cf8fdeca2944864dc05925f501e252c048221bcc57136ab09a64b64b2 b0cbfaf317f05f97be47fc9d69eda2dd82500e00d42612f271a1fe24626408c28881f171e855bd5bd67409f9847502b4 a7c21a8fcede581bfd9847b6835eda62ba250bea81f1bb17372c800a19c732abe03064e64a2f865d974fb636cab4b859 95f9df524ba7a4667351696c4176b505d8ea3659f5ff2701173064acc624af69a0fad4970963736383b979830cb32260 856a74fe8b37a2e3afeac858c8632200485d438422a16ae3b29f359e470e8244995c63ad79c7e007ed063f178d0306fd b37faa4d78fdc0bb9d403674dbea0176c2014a171c7be8527b54f7d1a32a76883d3422a3e7a5f5fcc5e9b31b57822eeb 8d37234d8594ec3fe75670b5c9cc1ec3537564d4739b2682a75b18b08401869a4264c0f264354219d8d896cded715db4 b5289ee5737f0e0bde485d32096d23387d68dab8f01f47821ab4f06cc79a967afe7355e72dc0c751d96b2747b26f6255 9085e1fdf9f813e9c3b8232d3c8863cd84ab30d45e8e0d3d6a0abd9ebc6fd70cdf749ff4d04390000e14c7d8c6655fc7 93a388c83630331eca4da37ea4a97b3b453238af474817cc0a0727fd3138dcb4a22de38c04783ec829c22cb459cb4e8e a5377116027c5d061dbe24c240b891c08cdd8cd3f0899e848d682c873aff5b8132c1e7cfe76d2e5ed97ee0eb1d42cb68 a274c84b04338ed28d74683e2a7519c2591a3ce37c294d6f6e678f7d628be2db8eff253ede21823e2df7183e6552f622 8bc201147a842453a50bec3ac97671397bc086d6dfc9377fa38c2124cdc286abda69b7324f47d64da094ae011d98d9d9 9842d0c066c524592b76fbec5132bc628e5e1d21c424bec4555efca8619cc1fd8ea3161febcb8b9e8ab54702f4e815e2 a19191b713a07efe85c266f839d14e25660ee74452e6c691cd9997d85ae4f732052d802d3deb018bdd847caa298a894b a24f71fc0db504da4e287dd118a4a74301cbcd16033937ba2abc8417956fcb4ae19b8e63b931795544a978137eff51cb a90eec4a6a3a4b8f9a5b93d978b5026fcf812fe65585b008d7e08c4aaf21195a1d0699f12fc16f79b6a18a369af45771 8b551cf89737d7d06d9b3b9c4c1c73b41f2ea0af4540999c70b82dabff8580797cf0a3caf34c86c59a7069eb2e38f087 b8d312e6c635e7a216a1cda075ae77ba3e1d2fd501dc31e83496e6e81ed5d9c7799f8e578869c2e0e256fb29f5de10a7 8d144bdb8cae0b2cdb5b33d44bbc96984a5925202506a8cc65eb67ac904b466f5a7fe3e1cbf04aa785bbb7348c4bb73c a101b3d58b7a98659244b88de0b478b3fb87dc5fc6031f6e689b99edf498abd43e151fd32bd4bbd240e0b3e59c440359 907453abca7d8e7151a05cc3d506c988007692fe7401395dc93177d0d07d114ab6cca0cc658eb94c0223fe8658295cad 825329ffbe2147ddb68f63a0a67f32d7f309657b8e5d9ab5bb34b3730bfa2c77a23eaaadb05def7d9f94a9e08fdc1e96 88ee923c95c1dac99ae7ed6067906d734d793c5dc5d26339c1bb3314abe201c5dccb33b9007351885eb2754e9a8ea06c 98bc9798543f5f1adc9f2cfcfa72331989420e9c3f6598c45269f0dc9b7c8607bbeaf03faa0aea2ddde2b8f17fdceff5 8ee87877702a79aef923ab970db6fa81561b3c07d5bf1a072af0a7bad765b4cbaec910afe1a91703feacc7822fa38a94 8060b9584aa294fe8adc2b22f67e988bc6da768eae91e429dcc43ddc53cfcc5d6753fdc1b420b268c7eb2fb50736a970 b344a5524d80a2f051870c7001f74fcf348a70fcf78dbd20c6ff9ca85d81567d2318c8b8089f2c4f195d6aec9fc15fa6 8f5a5d893e1936ed062149d20eb73d98b62b7f50ab5d93a6429c03656b36688d1c80cb5010e4977491e51fa0d7dd35d5 86fa32ebbf97328c5f5f15564e1238297e289ec3219b9a741724e9f3ae8d5c15277008f555863a478b247ba5dc601d44 9557e55377e279f4b6b5e0ffe01eca037cc13aac242d67dfcd0374a1e775c5ed5cb30c25fe21143fee54e3302d34a3ea 8cb6bcbc39372d23464a416ea7039f57ba8413cf3f00d9a7a5b356ab20dcb8ed11b3561f7bce372b8534d2870c7ee270 b5d59075cb5abde5391f64b6c3b8b50adc6e1f654e2a580b6d6d6eff3f4fbdd8fffc92e06809c393f5c8eab37f774c4b afcfb6903ef13e493a1f7308675582f15af0403b6553e8c37afb8b2808ad21b88b347dc139464367dc260df075fea1ad 810fbbe808375735dd22d5bc7fc3828dc49fdd22cc2d7661604e7ac9c4535c1df578780affb3b895a0831640a945bcad 8056b0c678803b416f924e09a6299a33cf9ad7da6fe1ad7accefe95c179e0077da36815fde3716711c394e2c5ea7127f 8b67403702d06979be19f1d6dc3ec73cc2e81254d6b7d0cc49cd4fdda8cd51ab0835c1d2d26fc0ecab5df90585c2f351 87f97f9e6d4be07e8db250e5dd2bffdf1390665bc5709f2b631a6fa69a7fca958f19bd7cc617183da1f50ee63e9352b5 ae151310985940471e6803fcf37600d7fa98830613e381e00dab943aec32c14162d51c4598e8847148148000d6e5af5c 81eb537b35b7602c45441cfc61b27fa9a30d3998fad35a064e05bc9479e9f10b62eba2b234b348219eea3cadcaac64bb 8a441434934180ab6f5bc541f86ebd06eadbee01f438836d797e930fa803a51510e005c9248cecc231a775b74d12b5e9 81f3c250a27ba14d8496a5092b145629eb2c2e6a5298438670375363f57e2798207832c8027c3e9238ad94ecdadfc4df a6217c311f2f3db02ceaa5b6096849fe92b6f4b6f1491535ef8525f6ccee6130bed2809e625073ecbaddd4a3eb3df186 82d1c396f0388b942cf22b119d7ef1ad03d3dad49a74d9d01649ee284f377c8daddd095d596871669e16160299a210db a40ddf7043c5d72a7246bd727b07f7fff1549f0e443d611de6f9976c37448b21664c5089c57f20105102d935ab82f27b b6c03c1c97adf0c4bf4447ec71366c6c1bff401ba46236cd4a33d39291e7a1f0bb34bd078ba3a18d15c98993b153a279 8a94f5f632068399c359c4b3a3653cb6df2b207379b3d0cdace51afdf70d6d5cce6b89a2b0fee66744eba86c98fb21c2 b2f19e78ee85073f680c3bba1f07fd31b057c00b97040357d97855b54a0b5accb0d3b05b2a294568fcd6a4be6f266950 a74632d13bbe2d64b51d7a9c3ae0a5a971c19f51cf7596a807cea053e6a0f3719700976d4e394b356c0329a2dced9aa2 afef616d341a9bc94393b8dfba68ff0581436aa3a3adb7c26a1bbf2cf19fa877066191681f71f17f3cd6f9cf6bf70b5a 8ce96d93ae217408acf7eb0f9cbb9563363e5c7002e19bbe1e80760bc9d449daee2118f3878b955163ed664516b97294 8414f79b496176bc8b8e25f8e4cfee28f4f1c2ddab099d63d2aca1b6403d26a571152fc3edb97794767a7c4686ad557c b6c61d01fd8ce087ef9f079bf25bf10090db483dd4f88c4a786d31c1bdf52065651c1f5523f20c21e75cea17df69ab73 a5790fd629be70545093631efadddc136661f63b65ec682609c38ef7d3d7fa4e56bdf94f06e263bc055b90cb1c6bcefe b515a767e95704fb7597bca9e46f1753abacdc0e56e867ee3c6f4cd382643c2a28e65312c05ad040eaa3a8cbe7217a65 8135806a02ead6aa92e9adb6fefb91349837ab73105aaa7be488ef966aa8dfaafdfa64bbae30fcbfa55dd135a036a863 8f22435702716d76b1369750694540742d909d5e72b54d0878245fab7c269953b1c6f2b29c66f08d5e0263ca3a731771 8e0f8a8e8753e077dac95848212aeffd51c23d9b6d611df8b102f654089401954413ecbedc6367561ca599512ae5dda7 815a9084e3e2345f24c5fa559deec21ee1352fb60f4025c0779be65057f2d528a3d91593bd30d3a185f5ec53a9950676 967e6555ccba395b2cc1605f8484c5112c7b263f41ce8439a99fd1c71c5ed14ad02684d6f636364199ca48afbbde13be 8cd0ccf17682950b34c796a41e2ea7dd5367aba5e80a907e01f4cdc611e4a411918215e5aebf4292f8b24765d73314a6 a58bf1bbb377e4b3915df6f058a0f53b8fb8130fdec8c391f6bc82065694d0be59bb67ffb540e6c42cc8b380c6e36359 92af3151d9e6bfb3383d85433e953c0160859f759b0988431ec5893542ba40288f65db43c78a904325ef8d324988f09d 8011bbb05705167afb47d4425065630f54cb86cd462095e83b81dfebf348f846e4d8fbcf1c13208f5de1931f81da40b9 81c743c104fc3cb047885c9fa0fb9705c3a83ee24f690f539f4985509c3dafd507af3f6a2128276f45d5939ef70c167f a2c9679b151c041aaf5efeac5a737a8f70d1631d931609fca16be1905682f35e291292874cb3b03f14994f98573c6f44 a4949b86c4e5b1d5c82a337e5ce6b2718b1f7c215148c8bfb7e7c44ec86c5c9476048fc5c01f57cb0920876478c41ad6 86c2495088bd1772152e527a1da0ef473f924ea9ab0e5b8077df859c28078f73c4e22e3a906b507fdf217c3c80808b5c 892e0a910dcf162bcea379763c3e2349349e4cda9402949255ac4a78dd5a47e0bf42f5bd0913951576b1d206dc1e536a a7009b2c6b396138afe4754b7cc10dee557c51c7f1a357a11486b3253818531f781ea8107360c8d4c3b1cd96282353c0 911763ef439c086065cc7b4e57484ed6d693ea44acee4b18c9fd998116da55fbe7dcb8d2a0f0f9b32132fca82d73dff6 a722000b95a4a2d40bed81870793f15ba2af633f9892df507f2842e52452e02b5ea8dea6a043c2b2611d82376e33742a 9387ac49477bd719c2f92240d0bdfcf9767aad247ca93dc51e56106463206bc343a8ec855eb803471629a66fffb565d6 92819a1fa48ab4902939bb72a0a4e6143c058ea42b42f9bc6cea5df45f49724e2530daf3fc4f097cceefa2a8b9db0076 98eac7b04537653bc0f4941aae732e4b1f84bd276c992c64a219b8715eb1fb829b5cbd997d57feb15c7694c468f95f70 b275e7ba848ce21bf7996e12dbeb8dadb5d0e4f1cb5a0248a4f8f9c9fe6c74e3c93f4b61edbcb0a51af5a141e1c14bc7 97243189285aba4d49c53770c242f2faf5fd3914451da4931472e3290164f7663c726cf86020f8f181e568c72fd172d1 839b0b3c25dd412bee3dc24653b873cc65454f8f16186bb707bcd58259c0b6765fa4c195403209179192a4455c95f3b8 8689d1a870514568a074a38232e2ceb4d7df30fabeb76cff0aed5b42bf7f02baea12c5fadf69f4713464dbd52aafa55f 8958ae7b290f0b00d17c3e9fdb4dbf168432b457c7676829299dd428984aba892de1966fc106cfc58a772862ecce3976 a422bc6bd68b8870cfa5bc4ce71781fd7f4368b564d7f1e0917f6013c8bbb5b240a257f89ecfdbecb40fe0f3aa31d310 aa61f78130cebe09bc9a2c0a37f0dd57ed2d702962e37d38b1df7f17dc554b1d4b7a39a44182a452ce4c5eb31fa4cfcc b7918bd114f37869bf1a459023386825821bfadce545201929d13ac3256d92a431e34f690a55d944f77d0b652cefeffc 819bba35fb6ace1510920d4dcff30aa682a3c9af9022e287751a6a6649b00c5402f14b6309f0aeef8fce312a0402915e 8b7c9ad446c6f63c11e1c24e24014bd570862b65d53684e107ba9ad381e81a2eaa96731b4b33536efd55e0f055071274 8fe79b53f06d33386c0ec7d6d521183c13199498594a46d44a8a716932c3ec480c60be398650bbfa044fa791c4e99b65 9558e10fb81250b9844c99648cf38fa05ec1e65d0ccbb18aa17f2d1f503144baf59d802c25be8cc0879fff82ed5034ad b538a7b97fbd702ba84645ca0a63725be1e2891c784b1d599e54e3480e4670d0025526674ef5cf2f87dddf2290ba09f0 92eafe2e869a3dd8519bbbceb630585c6eb21712b2f31e1b63067c0acb5f9bdbbcbdb612db4ea7f9cc4e7be83d31973f b40d21390bb813ab7b70a010dff64c57178418c62685761784e37d327ba3cb9ef62df87ecb84277c325a637fe3709732 b349e6fbf778c4af35fbed33130bd8a7216ed3ba0a79163ebb556e8eb8e1a7dad3456ddd700dad9d08d202491c51b939 a8fdaedecb251f892b66c669e34137f2650509ade5d38fbe8a05d9b9184bb3b2d416186a3640429bd1f3e4b903c159dd ac6167ebfee1dbab338eff7642f5e785fc21ef0b4ddd6660333fe398068cbd6c42585f62e81e4edbb72161ce852a1a4f 874b1fbf2ebe140c683bd7e4e0ab017afa5d4ad38055aaa83ee6bbef77dbc88a6ce8eb0dcc48f0155244af6f86f34c2d 903c58e57ddd9c446afab8256a6bb6c911121e6ccfb4f9b4ed3e2ed922a0e500a5cb7fa379d5285bc16e11dac90d1fda 8dae7a0cffa2fd166859cd1bf10ff82dd1932e488af377366b7efc0d5dec85f85fe5e8150ff86a79a39cefc29631733a aa047857a47cc4dfc08585f28640420fcf105b881fd59a6cf7890a36516af0644d143b73f3515ab48faaa621168f8c31 864508f7077c266cc0cb3f7f001cb6e27125ebfe79ab57a123a8195f2e27d3799ff98413e8483c533b46a816a3557f1f 8bcd45ab1f9cbab36937a27e724af819838f66dfeb15923f8113654ff877bd8667c54f6307aaf0c35027ca11b6229bfd b21aa34da9ab0a48fcfdd291df224697ce0c1ebc0e9b022fdee8750a1a4b5ba421c419541ed5c98b461eecf363047471 a9a18a2ab2fae14542dc336269fe612e9c1af6cf0c9ac933679a2f2cb77d3c304114f4d219ca66fe288adde30716775b b5205989b92c58bdda71817f9a897e84100b5c4e708de1fced5c286f7a6f01ae96b1c8d845f3a320d77c8e2703c0e8b1 a364059412bbcc17b8907d43ac8e5df90bc87fd1724b5f99832d0d24559fae6fa76a74cff1d1eac8cbac6ec80b44af20 ae709f2c339886b31450834cf29a38b26eb3b0779bd77c9ac269a8a925d1d78ea3837876c654b61a8fe834b3b6940808 8802581bba66e1952ac4dab36af371f66778958f4612901d95e5cac17f59165e6064371d02de8fb6fccf89c6dc8bd118 a313252df653e29c672cbcfd2d4f775089cb77be1077381cf4dc9533790e88af6cedc8a119158e7da5bf6806ad9b91a1 992a065b4152c7ef11515cd54ba9d191fda44032a01aed954acff3443377ee16680c7248d530b746b8c6dee2d634e68c b627b683ee2b32c1ab4ccd27b9f6cce2fe097d96386fa0e5c182ad997c4c422ab8dfc03870cd830b8c774feb66537282 b823cf8a9aee03dadd013eb9efe40a201b4b57ef67efaae9f99683005f5d1bf55e950bf4af0774f50859d743642d3fea b8a7449ffac0a3f206677097baf7ce00ca07a4d2bd9b5356fbcb83f3649b0fda07cfebad220c1066afba89e5a52abf4b b2dd1a2f986395bb4e3e960fbbe823dbb154f823284ebc9068502c19a7609790ec0073d08bfa63f71e30c7161b6ef966 98e5236de4281245234f5d40a25b503505af140b503a035fc25a26159a9074ec81512b28f324c56ea2c9a5aa7ce90805 89070847dc8bbf5bc4ed073aa2e2a1f699cf0c2ca226f185a0671cecc54e7d3e14cd475c7752314a7a8e7476829da4bc a9402dc9117fdb39c4734c0688254f23aed3dce94f5f53f5b7ef2b4bf1b71a67f85ab1a38ec224a59691f3bee050aeb3 957288f9866a4bf56a4204218ccc583f717d7ce45c01ea27142a7e245ad04a07f289cc044f8cf1f21d35e67e39299e9c b2fb31ccb4e69113763d7247d0fc8edaae69b550c5c56aecacfd780c7217dc672f9fb7496edf4aba65dacf3361268e5b b44a4526b2f1d6eb2aa8dba23bfa385ff7634572ab2afddd0546c3beb630fbfe85a32f42dd287a7fec069041411537f7 8db5a6660c3ac7fd7a093573940f068ee79a82bc17312af900b51c8c439336bc86ca646c6b7ab13aaaa008a24ca508ab 8f9899a6d7e8eb4367beb5c060a1f8e94d8a21099033ae582118477265155ba9e72176a67f7f25d7bad75a152b56e21a a67de0e91ade8d69a0e00c9ff33ee2909b8a609357095fa12319e6158570c232e5b6f4647522efb7345ce0052aa9d489 82eb2414898e9c3023d57907a2b17de8e7eea5269029d05a94bfd7bf5685ac4a799110fbb375eb5e0e2bd16acf6458ae 94451fc7fea3c5a89ba701004a9693bab555cb622caf0896b678faba040409fdfd14a978979038b2a81e8f0abc4994d2 ac879a5bb433998e289809a4a966bd02b4bf6a9c1cc276454e39c886efcf4fc68baebed575826bde577ab5aa71d735a9 880c0f8f49c875dfd62b4ddedde0f5c8b19f5687e693717f7e5c031bc580e58e13ab497d48b4874130a18743c59fdce3 b582af8d8ff0bf76f0a3934775e0b54c0e8fed893245d7d89cae65b03c8125b7237edc29dc45b4fe1a3fe6db45d280ee 89f337882ed3ae060aaee98efa20d79b6822bde9708c1c5fcee365d0ec9297f694cae37d38fd8e3d49717c1e86f078e7 826d2c1faea54061848b484e288a5f4de0d221258178cf87f72e14baaa4acc21322f8c9eab5dde612ef497f2d2e1d60b a5333d4f227543e9cd741ccf3b81db79f2f03ca9e649e40d6a6e8ff9073e06da83683566d3b3c8d7b258c62970fb24d1 a28f08c473db06aaf4c043a2fae82b3c8cfaa160bce793a4c208e4e168fb1c65115ff8139dea06453c5963d95e922b94 8162546135cc5e124e9683bdfaa45833c18553ff06a0861c887dc84a5b12ae8cd4697f6794c7ef6230492c32faba7014 b23f0d05b74c08d6a7df1760792be83a761b36e3f8ae360f3c363fb196e2a9dd2de2e492e49d36561366e14daa77155c b6f70d6c546722d3907c708d630dbe289771d2c8bf059c2e32b77f224696d750b4dda9b3a014debda38e7d02c9a77585 83bf4c4a9f3ca022c631017e7a30ea205ba97f7f5927cba8fc8489a4646eac6712cb821c5668c9ffe94d69d524374a27 b0371475425a8076d0dd5f733f55aabbe42d20a7c8ea7da352e736d4d35a327b2beb370dfcb05284e22cfd69c5f6c4cc a0031ba7522c79211416c2cca3aa5450f96f8fee711552a30889910970ba13608646538781a2c08b834b140aadd7166f 99d273c80c7f2dc6045d4ed355d9fc6f74e93549d961f4a3b73cd38683f905934d359058cd1fc4da8083c7d75070487f b0e4b0efa3237793e9dcce86d75aafe9879c5fa23f0d628649aef2130454dcf72578f9bf227b9d2b9e05617468e82588 a5ab076fa2e1c5c51f3ae101afdd596ad9d106bba7882b359c43d8548b64f528af19afa76cd6f40da1e6c5fca4def3fa 8ce2299e570331d60f6a6eff1b271097cd5f1c0e1113fc69b89c6a0f685dabea3e5bc2ac6bd789aa492ab189f89be494 91b829068874d911a310a5f9dee001021f97471307b5a3de9ec336870ec597413e1d92010ce320b619f38bed7c4f7910 b14fe91f4b07bf33b046e9285b66cb07927f3a8da0af548ac2569b4c4fb1309d3ced76d733051a20814e90dd5b75ffd1 abaab92ea6152d40f82940277c725aa768a631ee0b37f5961667f82fb990fc11e6d3a6a2752b0c6f94563ed9bb28265c b7fe28543eca2a716859a76ab9092f135337e28109544f6bd2727728d0a7650428af5713171ea60bfc273d1c821d992c 8a4917b2ab749fc7343fc64bdf51b6c0698ff15d740cc7baf248c030475c097097d5a473bcc00d8c25817563fe0447b4 aa96156d1379553256350a0a3250166add75948fb9cde62aa555a0a9dc0a9cb7f2f7b8428aff66097bf6bfedaf14bbe2 ae4ffeb9bdc76830d3eca2b705f30c1bdede6412fa064260a21562c8850c7fb611ec62bc68479fe48f692833e6f66d8d b96543caaba9d051600a14997765d49e4ab10b07c7a92cccf0c90b309e6da334fdd6d18c96806cbb67a7801024fbd3c7 97b2b9ad76f19f500fcc94ca8e434176249f542ac66e5881a3dccd07354bdab6a2157018b19f8459437a68d8b86ba8e0 a8d206f6c5a14c80005849474fde44b1e7bcf0b2d52068f5f97504c3c035b09e65e56d1cf4b5322791ae2c2fdbd61859 936bad397ad577a70cf99bf9056584a61bd7f02d2d5a6cf219c05d770ae30a5cd902ba38366ce636067fc1dd10108d31 a77e30195ee402b84f3882e2286bf5380c0ed374a112dbd11e16cef6b6b61ab209d4635e6f35cdaaa72c1a1981d5dabe a46ba4d3947188590a43c180757886a453a0503f79cc435322d92490446f37419c7b999fdf868a023601078070e03346 80d8d4c5542f223d48240b445d4d8cf6a75d120b060bc08c45e99a13028b809d910b534d2ac47fb7068930c54efd8da9 803be9c68c91b42b68e1f55e58917a477a9a6265e679ca44ee30d3eb92453f8c89c64eafc04c970d6831edd33d066902 b14b2b3d0dfe2bb57cee4cd72765b60ac33c1056580950be005790176543826c1d4fbd737f6cfeada6c735543244ab57 a9e480188bba1b8fb7105ff12215706665fd35bf1117bacfb6ab6985f4dbc181229873b82e5e18323c2b8f5de03258e0 a66a0f0779436a9a3999996d1e6d3000f22c2cac8e0b29cddef9636393c7f1457fb188a293b6c875b05d68d138a7cc4a 848397366300ab40c52d0dbbdafbafef6cd3dadf1503bb14b430f52bb9724188928ac26f6292a2412bc7d7aa620763c8 95466cc1a78c9f33a9aaa3829a4c8a690af074916b56f43ae46a67a12bb537a5ac6dbe61590344a25b44e8512355a4a7 8b5f7a959f818e3baf0887f140f4575cac093d0aece27e23b823cf421f34d6e4ff4bb8384426e33e8ec7b5eed51f6b5c 8d5e1368ec7e3c65640d216bcc5d076f3d9845924c734a34f3558ac0f16e40597c1a775a25bf38b187213fbdba17c93b b4647c1b823516880f60d20c5cc38c7f80b363c19d191e8992226799718ee26b522a12ecb66556ed3d483aa4824f3326 ac3abaea9cd283eb347efda4ed9086ea3acf495043e08d0d19945876329e8675224b685612a6badf8fd72fb6274902b1 8eae1ce292d317aaa71bcf6e77e654914edd5090e2e1ebab78b18bb41b9b1bc2e697439f54a44c0c8aa0d436ebe6e1a9 94dc7d1aec2c28eb43d93b111fa59aaa0d77d5a09501220bd411768c3e52208806abf973c6a452fd8292ff6490e0c9e2 8fd8967f8e506fef27d17b435d6b86b232ec71c1036351f12e6fb8a2e12daf01d0ee04451fb944d0f1bf7fd20e714d02 824e6865be55d43032f0fec65b3480ea89b0a2bf860872237a19a54bc186a85d2f8f9989cc837fbb325b7c72d9babe2c 8bd361f5adb27fd6f4e3f5de866e2befda6a8454efeb704aacc606f528c03f0faae888f60310e49440496abd84083ce2 b098a3c49f2aaa28b6b3e85bc40ce6a9cdd02134ee522ae73771e667ad7629c8d82c393fba9f27f5416986af4c261438 b385f5ca285ff2cfe64dcaa32dcde869c28996ed091542600a0b46f65f3f5a38428cca46029ede72b6cf43e12279e3d3 8196b03d011e5be5288196ef7d47137d6f9237a635ab913acdf9c595fa521d9e2df722090ec7eb0203544ee88178fc5f 8ed1270211ef928db18e502271b7edf24d0bbd11d97f2786aee772d70c2029e28095cf8f650b0328cc8a4c38d045316d a52ab60e28d69b333d597a445884d44fd2a7e1923dd60f763951e1e45f83e27a4dac745f3b9eff75977b3280e132c15d 91e9fe78cdac578f4a4687f71b800b35da54b824b1886dafec073a3c977ce7a25038a2f3a5b1e35c2c8c9d1a7312417c a42832173f9d9491c7bd93b21497fbfa4121687cd4d2ab572e80753d7edcbb42cfa49f460026fbde52f420786751a138 97b947126d84dcc70c97be3c04b3de3f239b1c4914342fa643b1a4bb8c4fe45c0fcb585700d13a7ed50784790c54bef9 860e407d353eac070e2418ef6cb80b96fc5f6661d6333e634f6f306779651588037be4c2419562c89c61f9aa2c4947f5 b2c9d93c3ba4e511b0560b55d3501bf28a510745fd666b3cb532db051e6a8617841ea2f071dda6c9f15619c7bfd2737f 8596f4d239aeeac78311207904d1bd863ef68e769629cc379db60e019aaf05a9d5cd31dc8e630b31e106a3a93e47cbc5 8b26e14e2e136b65c5e9e5c2022cee8c255834ea427552f780a6ca130a6446102f2a6f334c3f9a0308c53df09e3dba7e b54724354eb515a3c8bed0d0677ff1db94ac0a07043459b4358cb90e3e1aa38ac23f2caa3072cf9647275d7cd61d0e80 b7ce9fe0e515e7a6b2d7ddcb92bc0196416ff04199326aea57996eef8c5b1548bd8569012210da317f7c0074691d01b7 a1a13549c82c877253ddefa36a29ea6a23695ee401fdd48e65f6f61e5ebd956d5e0edeff99484e9075cb35071fec41e2 838ba0c1e5bd1a6da05611ff1822b8622457ebd019cb065ece36a2d176bd2d889511328120b8a357e44569e7f640c1e6 b916eccff2a95519400bbf76b5f576cbe53cf200410370a19d77734dc04c05b585cfe382e8864e67142d548cd3c4c2f4 a610447cb7ca6eea53a6ff1f5fe562377dcb7f4aaa7300f755a4f5e8eba61e863c51dc2aa9a29b35525b550fbc32a0fe 9620e8f0f0ee9a4719aa9685eeb1049c5c77659ba6149ec4c158f999cfd09514794b23388879931fe26fea03fa471fd3 a9dcf8b679e276583cf5b9360702a185470d09aea463dc474ee9c8aee91ef089dacb073e334e47fbc78ec5417c90465c 8c9adee8410bdd99e5b285744cee61e2593b6300ff31a8a83b0ec28da59475a5c6fb9346fe43aadea2e6c3dad2a8e30a 97d5afe9b3897d7b8bb628b7220cf02d8ee4e9d0b78f5000d500aaf4c1df9251aaaabfd1601626519f9d66f00a821d4e 8a382418157b601ce4c3501d3b8409ca98136a4ef6abcbf62885e16e215b76b035c94d149cc41ff92e42ccd7c43b9b3d b64b8d11fb3b01abb2646ac99fdb9c02b804ce15d98f9fe0fbf1c9df8440c71417487feb6cdf51e3e81d37104b19e012 849d7d044f9d8f0aab346a9374f0b3a5d14a9d1faa83dbacccbdc629ad1ef903a990940255564770537f8567521d17f0 829dbb0c76b996c2a91b4cbbe93ba455ca0d5729755e5f0c92aaee37dff7f36fcdc06f33aca41f1b609c784127b67d88 85a7c0069047b978422d264d831ab816435f63938015d2e977222b6b5746066c0071b7f89267027f8a975206ed25c1b0 84b9fbc1cfb302df1acdcf3dc5d66fd1edfe7839f7a3b2fb3a0d5548656249dd556104d7c32b73967bccf0f5bdcf9e3b 972220ac5b807f53eac37dccfc2ad355d8b21ea6a9c9b011c09fe440ddcdf7513e0b43d7692c09ded80d7040e26aa28f 855885ed0b21350baeca890811f344c553cf9c21024649c722453138ba29193c6b02c4b4994cd414035486f923472e28 841874783ae6d9d0e59daea03e96a01cbbe4ecaced91ae4f2c8386e0d87b3128e6d893c98d17c59e4de1098e1ad519dd 827e50fc9ce56f97a4c3f2f4cbaf0b22f1c3ce6f844ff0ef93a9c57a09b8bf91ebfbd2ba9c7f83c442920bffdaf288cc a441f9136c7aa4c08d5b3534921b730e41ee91ab506313e1ba5f7c6f19fd2d2e1594e88c219834e92e6fb95356385aa7 97d75b144471bf580099dd6842b823ec0e6c1fb86dd0da0db195e65524129ea8b6fd4a7a9bbf37146269e938a6956596 a4b6fa87f09d5a29252efb2b3aaab6b3b6ea9fab343132a651630206254a25378e3e9d6c96c3d14c150d01817d375a8e a31a671876d5d1e95fe2b8858dc69967231190880529d57d3cab7f9f4a2b9b458ac9ee5bdaa3289158141bf18f559efb 90bee6fff4338ba825974021b3b2a84e36d617e53857321f13d2b3d4a28954e6de3b3c0e629d61823d18a9763313b3bf 96b622a63153f393bb419bfcf88272ea8b3560dbd46b0aa07ada3a6223990d0abdd6c2adb356ef4be5641688c8d83941 84c202adeaff9293698022bc0381adba2cd959f9a35a4e8472288fd68f96f6de8be9da314c526d88e291c96b1f3d6db9 8ca01a143b8d13809e5a8024d03e6bc9492e22226073ef6e327edf1328ef4aff82d0bcccee92cb8e212831fa35fe1204 b2f970dbad15bfbefb38903c9bcc043d1367055c55dc1100a850f5eb816a4252c8c194b3132c929105511e14ea10a67d a5e36556472a95ad57eb90c3b6623671b03eafd842238f01a081997ffc6e2401f76e781d049bb4aa94d899313577a9cf 8d1057071051772f7c8bedce53a862af6fd530dd56ae6321eaf2b9fc6a68beff5ed745e1c429ad09d5a118650bfd420a 8aadc4f70ace4fcb8d93a78610779748dcffc36182d45b932c226dc90e48238ea5daa91f137c65ed532352c4c4d57416 a2ea05ae37e673b4343232ae685ee14e6b88b867aef6dfac35db3589cbcd76f99540fed5c2641d5bb5a4a9f808e9bf0d 947f1abad982d65648ae4978e094332b4ecb90f482c9be5741d5d1cf5a28acf4680f1977bf6e49dd2174c37f11e01296 a27b144f1565e4047ba0e3f4840ef19b5095d1e281eaa463c5358f932114cbd018aa6dcf97546465cf2946d014d8e6d6 8574e1fc3acade47cd4539df578ce9205e745e161b91e59e4d088711a7ab5aa3b410d517d7304b92109924d9e2af8895 a48ee6b86b88015d6f0d282c1ae01d2a5b9e8c7aa3d0c18b35943dceb1af580d08a65f54dc6903cde82fd0d73ce94722 8875650cec543a7bf02ea4f2848a61d167a66c91ffaefe31a9e38dc8511c6a25bde431007eefe27a62af3655aca208dc 999b0a6e040372e61937bf0d68374e230346b654b5a0f591a59d33a4f95bdb2f3581db7c7ccb420cd7699ed709c50713 878c9e56c7100c5e47bbe77dc8da5c5fe706cec94d37fa729633bca63cace7c40102eee780fcdabb655f5fa47a99600e 865006fb5b475ada5e935f27b96f9425fc2d5449a3c106aa366e55ebed3b4ee42adc3c3f0ac19fd129b40bc7d6bc4f63 b7a7da847f1202e7bc1672553e68904715e84fd897d529243e3ecda59faa4e17ba99c649a802d53f6b8dfdd51f01fb74 8b2fb4432c05653303d8c8436473682933a5cb604da10c118ecfcd2c8a0e3132e125afef562bdbcc3df936164e5ce4f2 808d95762d33ddfa5d0ee3d7d9f327de21a994d681a5f372e2e3632963ea974da7f1f9e5bac8ccce24293509d1f54d27 932946532e3c397990a1df0e94c90e1e45133e347a39b6714c695be21aeb2d309504cb6b1dde7228ff6f6353f73e1ca2 9705e7c93f0cdfaa3fa96821f830fe53402ad0806036cd1b48adc2f022d8e781c1fbdab60215ce85c653203d98426da3 aa180819531c3ec1feb829d789cb2092964c069974ae4faad60e04a6afcce5c3a59aec9f11291e6d110a788d22532bc6 88f755097f7e25cb7dd3c449520c89b83ae9e119778efabb54fbd5c5714b6f37c5f9e0346c58c6ab09c1aef2483f895d 99fc03ab7810e94104c494f7e40b900f475fde65bdec853e60807ffd3f531d74de43335c3b2646b5b8c26804a7448898 af2dea9683086bed1a179110efb227c9c00e76cd00a2015b089ccbcee46d1134aa18bda5d6cab6f82ae4c5cd2461ac21 a500f87ba9744787fdbb8e750702a3fd229de6b8817594348dec9a723b3c4240ddfa066262d002844b9e38240ce55658 924d0e45c780f5bc1c1f35d15dfc3da28036bdb59e4c5440606750ecc991b85be18bc9a240b6c983bc5430baa4c68287 865b11e0157b8bf4c5f336024b016a0162fc093069d44ac494723f56648bc4ded13dfb3896e924959ea11c96321afefc 93672d8607d4143a8f7894f1dcca83fb84906dc8d6dd7dd063bb0049cfc20c1efd933e06ca7bd03ea4cb5a5037990bfe 826891efbdff0360446825a61cd1fa04326dd90dae8c33dfb1ed97b045e165766dd070bd7105560994d0b2044bdea418 93c4a4a8bcbc8b190485cc3bc04175b7c0ed002c28c98a540919effd6ed908e540e6594f6db95cd65823017258fb3b1c aeb2a0af2d2239fda9aa6b8234b019708e8f792834ff0dd9c487fa09d29800ddceddd6d7929faa9a3edcb9e1b3aa0d6b 87f11de7236d387863ec660d2b04db9ac08143a9a2c4dfff87727c95b4b1477e3bc473a91e5797313c58754905079643 80dc1db20067a844fe8baceca77f80db171a5ca967acb24e2d480eae9ceb91a3343c31ad1c95b721f390829084f0eae6 9825c31f1c18da0de3fa84399c8b40f8002c3cae211fb6a0623c76b097b4d39f5c50058f57a16362f7a575909d0a44a2 a99fc8de0c38dbf7b9e946de83943a6b46a762167bafe2a603fb9b86f094da30d6de7ed55d639aafc91936923ee414b3 ad594678b407db5d6ea2e90528121f84f2b96a4113a252a30d359a721429857c204c1c1c4ff71d8bb5768c833f82e80e b33d985e847b54510b9b007e31053732c8a495e43be158bd2ffcea25c6765bcbc7ca815f7c60b36ad088b955dd6e9350 815f8dfc6f90b3342ca3fbd968c67f324dae8f74245cbf8bc3bef10e9440c65d3a2151f951e8d18959ba01c1b50b0ec1 94c608a362dd732a1abc56e338637c900d59013db8668e49398b3c7a0cae3f7e2f1d1bf94c0299eeafe6af7f76c88618 8ebd8446b23e5adfcc393adc5c52fe172f030a73e63cd2d515245ca0dd02782ceed5bcdd9ccd9c1b4c5953dfac9c340c 820437f3f6f9ad0f5d7502815b221b83755eb8dc56cd92c29e9535eb0b48fb8d08c9e4fcc26945f9c8cca60d89c44710 8910e4e8a56bf4be9cc3bbf0bf6b1182a2f48837a2ed3c2aaec7099bfd7f0c83e14e608876b17893a98021ff4ab2f20d 9633918fde348573eec15ce0ad53ac7e1823aac86429710a376ad661002ae6d049ded879383faaa139435122f64047c6 a1f5e3fa558a9e89318ca87978492f0fb4f6e54a9735c1b8d2ecfb1d1c57194ded6e0dd82d077b2d54251f3bee1279e1 b208e22d04896abfd515a95c429ff318e87ff81a5d534c8ac2c33c052d6ffb73ef1dccd39c0bbe0734b596c384014766 986d5d7d2b5bde6d16336f378bd13d0e671ad23a8ec8a10b3fc09036faeeb069f60662138d7a6df3dfb8e0d36180f770 a2d4e6c5f5569e9cef1cddb569515d4b6ace38c8aed594f06da7434ba6b24477392cc67ba867c2b079545ca0c625c457 b5ac32b1d231957d91c8b7fc43115ce3c5c0d8c13ca633374402fa8000b6d9fb19499f9181844f0c10b47357f3f757ce 96b8bf2504b4d28fa34a4ec378e0e0b684890c5f44b7a6bb6e19d7b3db2ab27b1e2686389d1de9fbd981962833a313ea 953bfd7f6c3a0469ad432072b9679a25486f5f4828092401eff494cfb46656c958641a4e6d0d97d400bc59d92dba0030 876ab3cea7484bbfd0db621ec085b9ac885d94ab55c4bb671168d82b92e609754b86aaf472c55df3d81421d768fd108a 885ff4e67d9ece646d02dd425aa5a087e485c3f280c3471b77532b0db6145b69b0fbefb18aa2e3fa5b64928b43a94e57 b91931d93f806d0b0e6cc62a53c718c099526140f50f45d94b8bbb57d71e78647e06ee7b42aa5714aed9a5c05ac8533f a0313eeadd39c720c9c27b3d671215331ab8d0a794e71e7e690f06bcd87722b531d6525060c358f35f5705dbb7109ccb 874c0944b7fedc6701e53344100612ddcb495351e29305c00ec40a7276ea5455465ffb7bded898886c1853139dfb1fc7 8dc31701a01ee8137059ca1874a015130d3024823c0576aa9243e6942ec99d377e7715ed1444cd9b750a64b85dcaa3e5 836d2a757405e922ec9a2dfdcf489a58bd48b5f9683dd46bf6047688f778c8dee9bc456de806f70464df0b25f3f3d238 b30b0a1e454a503ea3e2efdec7483eaf20b0a5c3cefc42069e891952b35d4b2c955cf615f3066285ed8fafd9fcfbb8f6 8e6d4044b55ab747e83ec8762ea86845f1785cc7be0279c075dadf08aca3ccc5a096c015bb3c3f738f647a4eadea3ba5 ad7735d16ab03cbe09c029610aa625133a6daecfc990b297205b6da98eda8c136a7c50db90f426d35069708510d5ae9c 8d62d858bbb59ec3c8cc9acda002e08addab4d3ad143b3812098f3d9087a1b4a1bb255dcb1635da2402487d8d0249161 805beec33238b832e8530645a3254aeef957e8f7ea24bcfc1054f8b9c69421145ebb8f9d893237e8a001c857fedfc77e b1005644be4b085e3f5775aa9bd3e09a283e87ddada3082c04e7a62d303dcef3b8cf8f92944c200c7ae6bb6bdf63f832 b4ba0e0790dc29063e577474ffe3b61f5ea2508169f5adc1e394934ebb473e356239413a17962bc3e5d3762d72cce8c2 a157ba9169c9e3e6748d9f1dd67fbe08b9114ade4c5d8fc475f87a764fb7e6f1d21f66d7905cd730f28a1c2d8378682a 913e52b5c93989b5d15e0d91aa0f19f78d592bc28bcfdfddc885a9980c732b1f4debb8166a7c4083c42aeda93a702898 90fbfc1567e7cd4e096a38433704d3f96a2de2f6ed3371515ccc30bc4dd0721a704487d25a97f3c3d7e4344472702d8d 89646043028ffee4b69d346907586fd12c2c0730f024acb1481abea478e61031966e72072ff1d5e65cb8c64a69ad4eb1 b125a45e86117ee11d2fb42f680ab4a7894edd67ff927ae2c808920c66c3e55f6a9d4588eee906f33a05d592e5ec3c04 aad47f5b41eae9be55fb4f67674ff1e4ae2482897676f964a4d2dcb6982252ee4ff56aac49578b23f72d1fced707525e b9ddff8986145e33851b4de54d3e81faa3352e8385895f357734085a1616ef61c692d925fe62a5ed3be8ca49f5d66306 b3cb0963387ed28c0c0adf7fe645f02606e6e1780a24d6cecef5b7c642499109974c81a7c2a198b19862eedcea2c2d8c ac9c53c885457aaf5cb36c717a6f4077af701e0098eebd7aa600f5e4b14e6c1067255b3a0bc40e4a552025231be7de60 8e1a8d823c4603f6648ec21d064101094f2a762a4ed37dd2f0a2d9aa97b2d850ce1e76f4a4b8cae58819b058180f7031 b268b73bf7a179b6d22bd37e5e8cb514e9f5f8968c78e14e4f6d5700ca0d0ca5081d0344bb73b028970eebde3cb4124e a7f57d71940f0edbd29ed8473d0149cae71d921dd15d1ff589774003e816b54b24de2620871108cec1ab9fa956ad6ce6 8053e6416c8b120e2b999cc2fc420a6a55094c61ac7f2a6c6f0a2c108a320890e389af96cbe378936132363c0d551277 b3823f4511125e5aa0f4269e991b435a0d6ceb523ebd91c04d7add5534e3df5fc951c504b4fd412a309fd3726b7f940b ae6eb04674d04e982ca9a6add30370ab90e303c71486f43ed3efbe431af1b0e43e9d06c11c3412651f304c473e7dbf39 96ab55e641ed2e677591f7379a3cd126449614181fce403e93e89b1645d82c4af524381ff986cae7f9cebe676878646d b52423b4a8c37d3c3e2eca8f0ddbf7abe0938855f33a0af50f117fab26415fb0a3da5405908ec5fdc22a2c1f2ca64892 82a69ce1ee92a09cc709d0e3cd22116c9f69d28ea507fe5901f5676000b5179b9abe4c1875d052b0dd42d39925e186bb a84c8cb84b9d5cfb69a5414f0a5283a5f2e90739e9362a1e8c784b96381b59ac6c18723a4aa45988ee8ef5c1f45cc97d afd7efce6b36813082eb98257aae22a4c1ae97d51cac7ea9c852d4a66d05ef2732116137d8432e3f117119725a817d24 a0f5fe25af3ce021b706fcff05f3d825384a272284d04735574ce5fb256bf27100fad0b1f1ba0e54ae9dcbb9570ecad3 8751786cb80e2e1ff819fc7fa31c2833d25086534eb12b373d31f826382430acfd87023d2a688c65b5e983927e146336 8cf5c4b17fa4f3d35c78ce41e1dc86988fd1135cd5e6b2bb0c108ee13538d0d09ae7102609c6070f39f937b439b31e33 a9108967a2fedd7c322711eca8159c533dd561bedcb181b646de98bf5c3079449478eab579731bee8d215ae8852c7e21 b54c5171704f42a6f0f4e70767cdb3d96ffc4888c842eece343a01557da405961d53ffdc34d2f902ea25d3e1ed867cad ae8d4b764a7a25330ba205bf77e9f46182cd60f94a336bbd96773cf8064e3d39caf04c310680943dc89ed1fbad2c6e0d aa5150e911a8e1346868e1b71c5a01e2a4bb8632c195861fb6c3038a0e9b85f0e09b3822e9283654a4d7bb17db2fc5f4 9685d3756ce9069bf8bb716cf7d5063ebfafe37e15b137fc8c3159633c4e006ff4887ddd0ae90360767a25c3f90cba7f 82155fd70f107ab3c8e414eadf226c797e07b65911508c76c554445422325e71af8c9a8e77fd52d94412a6fc29417cd3 abfae52f53a4b6e00760468d973a267f29321997c3dbb5aee36dc1f20619551229c0c45b9d9749f410e7f531b73378e8 81a76d921f8ef88e774fd985e786a4a330d779b93fad7def718c014685ca0247379e2e2a007ad63ee7f729cd9ed6ce1b 81947c84bc5e28e26e2e533af5ae8fe10407a7b77436dbf8f1d5b0bbe86fc659eae10f974659dc7c826c6dabd03e3a4b 92b8c07050d635b8dd4fd09df9054efe4edae6b86a63c292e73cc819a12a21dd7d104ce51fa56af6539dedf6dbe6f7b6 b44c579e3881f32b32d20c82c207307eca08e44995dd2aac3b2692d2c8eb2a325626c80ac81c26eeb38c4137ff95add5 97efab8941c90c30860926dea69a841f2dcd02980bf5413b9fd78d85904588bf0c1021798dbc16c8bbb32cce66c82621 913363012528b50698e904de0588bf55c8ec5cf6f0367cfd42095c4468fcc64954fbf784508073e542fee242d0743867 8ed203cf215148296454012bd10fddaf119203db1919a7b3d2cdc9f80e66729464fdfae42f1f2fc5af1ed53a42b40024 ab84312db7b87d711e9a60824f4fe50e7a6190bf92e1628688dfcb38930fe87b2d53f9e14dd4de509b2216856d8d9188 880726def069c160278b12d2258eac8fa63f729cd351a710d28b7e601c6712903c3ac1e7bbd0d21e4a15f13ca49db5aa 980699cd51bac6283959765f5174e543ed1e5f5584b5127980cbc2ef18d984ecabba45042c6773b447b8e694db066028 aeb019cb80dc4cb4207430d0f2cd24c9888998b6f21d9bf286cc638449668d2eec0018a4cf3fe6448673cd6729335e2b b29852f6aa6c60effdffe96ae88590c88abae732561d35cc19e82d3a51e26cb35ea00986193e07f90060756240f5346e a0fa855adc5ba469f35800c48414b8921455950a5c0a49945d1ef6e8f2a1881f2e2dfae47de6417270a6bf49deeb091d b6c7332e3b14813641e7272d4f69ecc7e09081df0037d6dab97ce13a9e58510f5c930d300633f208181d9205c5534001 85a6c050f42fce560b5a8d54a11c3bbb8407abbadd859647a7b0c21c4b579ec65671098b74f10a16245dc779dff7838e 8f3eb34bb68759d53c6677de4de78a6c24dd32c8962a7fb355ed362572ef8253733e6b52bc21c9f92ecd875020a9b8de a17dd44181e5dab4dbc128e1af93ec22624b57a448ca65d2d9e246797e4af7d079e09c6e0dfb62db3a9957ce92f098d5 a56a1b854c3183082543a8685bb34cae1289f86cfa8123a579049dbd059e77982886bfeb61bf6e05b4b1fe4e620932e7 aedae3033cb2fb7628cb4803435bdd7757370a86f808ae4cecb9a268ad0e875f308c048c80cbcac523de16b609683887 9344905376aa3982b1179497fac5a1d74b14b7038fd15e3b002db4c11c8bfc7c39430db492cdaf58b9c47996c9901f28 a3bfafdae011a19f030c749c3b071f83580dee97dd6f949e790366f95618ca9f828f1daaeabad6dcd664fcef81b6556d 81c03d8429129e7e04434dee2c529194ddb01b414feda3adee2271eb680f6c85ec872a55c9fa9d2096f517e13ed5abcc 98205ef3a72dff54c5a9c82d293c3e45d908946fa74bb749c3aabe1ab994ea93c269bcce1a266d2fe67a8f02133c5985 85a70aeed09fda24412fadbafbbbf5ba1e00ac92885df329e147bfafa97b57629a3582115b780d8549d07d19b7867715 b0fbe81c719f89a57d9ea3397705f898175808c5f75f8eb81c2193a0b555869ba7bd2e6bc54ee8a60cea11735e21c68c b03a0bd160495ee626ff3a5c7d95bc79d7da7e5a96f6d10116600c8fa20bedd1132f5170f25a22371a34a2d763f2d6d0 a90ab04091fbca9f433b885e6c1d60ab45f6f1daf4b35ec22b09909d493a6aab65ce41a6f30c98239cbca27022f61a8b b66f92aa3bf2549f9b60b86f99a0bd19cbdd97036d4ae71ca4b83d669607f275260a497208f6476cde1931d9712c2402 b08e1fdf20e6a9b0b4942f14fa339551c3175c1ffc5d0ab5b226b6e6a322e9eb0ba96adc5c8d59ca4259e2bdd04a7eb0 a2812231e92c1ce74d4f5ac3ab6698520288db6a38398bb38a914ac9326519580af17ae3e27cde26607e698294022c81 abfcbbcf1d3b9e84c02499003e490a1d5d9a2841a9e50c7babbef0b2dd20d7483371d4dc629ba07faf46db659459d296 b0fe9f98c3da70927c23f2975a9dc4789194d81932d2ad0f3b00843dd9cbd7fb60747a1da8fe5a79f136a601becf279d b130a6dba7645165348cb90f023713bed0eefbd90a976b313521c60a36d34f02032e69a2bdcf5361e343ed46911297ec 862f0cffe3020cea7a5fd4703353aa1eb1be335e3b712b29d079ff9f7090d1d8b12013011e1bdcbaa80c44641fd37c9f 8c6f11123b26633e1abb9ed857e0bce845b2b3df91cc7b013b2fc77b477eee445da0285fc6fc793e29d5912977f40916 91381846126ea819d40f84d3005e9fb233dc80071d1f9bb07f102bf015f813f61e5884ffffb4f5cd333c1b1e38a05a58 8add7d908de6e1775adbd39c29a391f06692b936518db1f8fde74eb4f533fc510673a59afb86e3a9b52ade96e3004c57 8780e086a244a092206edcde625cafb87c9ab1f89cc3e0d378bc9ee776313836160960a82ec397bc3800c0a0ec3da283 a6cb4cd9481e22870fdd757fae0785edf4635e7aacb18072fe8dc5876d0bab53fb99ce40964a7d3e8bcfff6f0ab1332f af30ff47ecc5b543efba1ba4706921066ca8bb625f40e530fb668aea0551c7647a9d126e8aba282fbcce168c3e7e0130 91b0bcf408ce3c11555dcb80c4410b5bc2386d3c05caec0b653352377efdcb6bab4827f2018671fc8e4a0e90d772acc1 a9430b975ef138b6b2944c7baded8fe102d31da4cfe3bd3d8778bda79189c99d38176a19c848a19e2d1ee0bddd9a13c1 aa5a4eef849d7c9d2f4b018bd01271c1dd83f771de860c4261f385d3bdcc130218495860a1de298f14b703ec32fa235f b0ce79e7f9ae57abe4ff366146c3b9bfb38b0dee09c28c28f5981a5d234c6810ad4d582751948affb480d6ae1c8c31c4 b75122748560f73d15c01a8907d36d06dc068e82ce22b84b322ac1f727034493572f7907dec34ebc3ddcc976f2f89ed7 b0fc7836369a3e4411d34792d6bd5617c14f61d9bba023dda64e89dc5fb0f423244e9b48ee64869258931daa9753a56f 8956d7455ae9009d70c6e4a0bcd7610e55f37494cf9897a8f9e1b904cc8febc3fd2d642ebd09025cfff4609ad7e3bc52 ad741efe9e472026aa49ae3d9914cb9c1a6f37a54f1a6fe6419bebd8c7d68dca105a751c7859f4389505ede40a0de786 b52f418797d719f0d0d0ffb0846788b5cba5d0454a69a2925de4b0b80fa4dd7e8c445e5eac40afd92897ed28ca650566 a0ab65fb9d42dd966cd93b1de01d7c822694669dd2b7a0c04d99cd0f3c3de795f387b9c92da11353412f33af5c950e9a a0052f44a31e5741a331f7cac515a08b3325666d388880162d9a7b97598fde8b61f9ff35ff220df224eb5c4e40ef0567 a0101cfdc94e42b2b976c0d89612a720e55d145a5ef6ef6f1f78cf6de084a49973d9b5d45915349c34ce712512191e3c a0dd99fcf3f5cead5aaf08e82212df3a8bb543c407a4d6fab88dc5130c1769df3f147e934a46f291d6c1a55d92b86917 a5939153f0d1931bbda5cf6bdf20562519ea55fbfa978d6dbc6828d298260c0da7a50c37c34f386e59431301a96c2232 9568269f3f5257200f9ca44afe1174a5d3cf92950a7f553e50e279c239e156a9faaa2a67f288e3d5100b4142efe64856 b746b0832866c23288e07f24991bbf687cad794e7b794d3d3b79367566ca617d38af586cdc8d6f4a85a34835be41d54f a871ce28e39ab467706e32fec1669fda5a4abba2f8c209c6745df9f7a0fa36bbf1919cf14cb89ea26fa214c4c907ae03 a08dacdd758e523cb8484f6bd070642c0c20e184abdf8e2a601f61507e93952d5b8b0c723c34fcbdd70a8485eec29db2 85bdb78d501382bb95f1166b8d032941005661aefd17a5ac32df9a3a18e9df2fc5dc2c1f07075f9641af10353cecc0c9 98d730c28f6fa692a389e97e368b58f4d95382fad8f0baa58e71a3d7baaea1988ead47b13742ce587456f083636fa98e a557198c6f3d5382be9fb363feb02e2e243b0c3c61337b3f1801c4a0943f18e38ce1a1c36b5c289c8fa2aa9d58742bab 89174f79201742220ac689c403fc7b243eed4f8e3f2f8aba0bf183e6f5d4907cb55ade3e238e3623d9885f03155c4d2b b891d600132a86709e06f3381158db300975f73ea4c1f7c100358e14e98c5fbe792a9af666b85c4e402707c3f2db321e b9e5b2529ef1043278c939373fc0dbafe446def52ddd0a8edecd3e4b736de87e63e187df853c54c28d865de18a358bb6 8589b2e9770340c64679062c5badb7bbef68f55476289b19511a158a9a721f197da03ece3309e059fc4468b15ac33aa3 aad8c6cd01d785a881b446f06f1e9cd71bca74ba98674c2dcddc8af01c40aa7a6d469037498b5602e76e9c91a58d3dbd abaccb1bd918a8465f1bf8dbe2c9ad4775c620b055550b949a399f30cf0d9eb909f3851f5b55e38f9e461e762f88f499 ae62339d26db46e85f157c0151bd29916d5cc619bd4b832814b3fd2f00af8f38e7f0f09932ffe5bba692005dab2d9a74 93a6ff30a5c0edf8058c89aba8c3259e0f1b1be1b80e67682de651e5346f7e1b4b4ac3d87cbaebf198cf779524aff6bf 8980a2b1d8f574af45b459193c952400b10a86122b71fca2acb75ee0dbd492e7e1ef5b959baf609a5172115e371f3177 8c2f49f3666faee6940c75e8c7f6f8edc3f704cca7a858bbb7ee5e96bba3b0cf0993996f781ba6be3b0821ef4cb75039 b14b9e348215b278696018330f63c38db100b0542cfc5be11dc33046e3bca6a13034c4ae40d9cef9ea8b34fef0910c4e b59bc3d0a30d66c16e6a411cb641f348cb1135186d5f69fda8b0a0934a5a2e7f6199095ba319ec87d3fe8f1ec4a06368 8874aca2a3767aa198e4c3fec2d9c62d496bc41ff71ce242e9e082b7f38cdf356089295f80a301a3cf1182bde5308c97 b1820ebd61376d91232423fc20bf008b2ba37e761199f4ef0648ea2bd70282766799b4de814846d2f4d516d525c8daa7 a6b202e5dedc16a4073e04a11af3a8509b23dfe5a1952f899adeb240e75c3f5bde0c424f811a81ea48d343591faffe46 a69becee9c93734805523b92150a59a62eed4934f66056b645728740d42223f2925a1ad38359ba644da24d9414f4cdda ad72f0f1305e37c7e6b48c272323ee883320994cb2e0d850905d6655fafc9f361389bcb9c66b3ff8d2051dbb58c8aa96 b563600bd56fad7c8853af21c6a02a16ed9d8a8bbeea2c31731d63b976d83cb05b9779372d898233e8fd597a75424797 b0abb78ce465bf7051f563c62e8be9c57a2cc997f47c82819300f36e301fefd908894bb2053a9d27ce2d0f8c46d88b5b a071a85fb8274bac2202e0cb8e0e2028a5e138a82d6e0374d39ca1884a549c7c401312f00071b91f455c3a2afcfe0cda b931c271513a0f267b9f41444a5650b1918100b8f1a64959c552aff4e2193cc1b9927906c6fa7b8a8c68ef13d79aaa52 a6a1bb9c7d32cb0ca44d8b75af7e40479fbce67d216b48a2bb680d3f3a772003a49d3cd675fc64e9e0f8fabeb86d6d61 b98d609858671543e1c3b8564162ad828808bb50ded261a9f8690ded5b665ed8368c58f947365ed6e84e5a12e27b423d b3dca58cd69ec855e2701a1d66cad86717ff103ef862c490399c771ad28f675680f9500cb97be48de34bcdc1e4503ffd b34867c6735d3c49865e246ddf6c3b33baf8e6f164db3406a64ebce4768cb46b0309635e11be985fee09ab7a31d81402 acb966c554188c5b266624208f31fab250b3aa197adbdd14aee5ab27d7fb886eb4350985c553b20fdf66d5d332bfd3fe 943c36a18223d6c870d54c3b051ef08d802b85e9dd6de37a51c932f90191890656c06adfa883c87b906557ae32d09da0 81bca7954d0b9b6c3d4528aadf83e4bc2ef9ea143d6209bc45ae9e7ae9787dbcd8333c41f12c0b6deee8dcb6805e826a aba176b92256efb68f574e543479e5cf0376889fb48e3db4ebfb7cba91e4d9bcf19dcfec444c6622d9398f06de29e2b9 b9f743691448053216f6ece7cd699871fff4217a1409ceb8ab7bdf3312d11696d62c74b0664ba0a631b1e0237a8a0361 a383c2b6276fa9af346b21609326b53fb14fdf6f61676683076e80f375b603645f2051985706d0401e6fbed7eb0666b6 a9ef2f63ec6d9beb8f3d04e36807d84bda87bdd6b351a3e4a9bf7edcb5618c46c1f58cfbf89e64b40f550915c6988447 a141b2d7a82f5005eaea7ae7d112c6788b9b95121e5b70b7168d971812f3381de8b0082ac1f0a82c7d365922ebd2d26a b1b76ef8120e66e1535c17038b75255a07849935d3128e3e99e56567b842fb1e8d56ef932d508d2fb18b82f7868fe1a9 8e2e234684c81f21099f5c54f6bbe2dd01e3b172623836c77668a0c49ce1fe218786c3827e4d9ae2ea25c50a8924fb3c a5caf5ff948bfd3c4ca3ffbdfcd91eec83214a6c6017235f309a0bbf7061d3b0b466307c00b44a1009cf575163898b43 986415a82ca16ebb107b4c50b0c023c28714281db0bcdab589f6cb13d80e473a3034b7081b3c358e725833f6d845cb14 b94836bf406ac2cbacb10e6df5bcdfcc9d9124ae1062767ca4e322d287fd5e353fdcebd0e52407cb3cd68571258a8900 83c6d70a640b33087454a4788dfd9ef3ed00272da084a8d36be817296f71c086b23b576f98178ab8ca6a74f04524b46b ad4115182ad784cfe11bcfc5ce21fd56229cc2ce77ac82746e91a2f0aa53ca6593a22efd2dc4ed8d00f84542643d9c58 ab1434c5e5065da826d10c2a2dba0facccab0e52b506ce0ce42fbe47ced5a741797151d9ecc99dc7d6373cfa1779bbf6 8a8b591d82358d55e6938f67ea87a89097ab5f5496f7260adb9f649abb289da12b498c5b2539c2f9614fb4e21b1f66b0 964f355d603264bc1f44c64d6d64debca66f37dff39c971d9fc924f2bc68e6c187b48564a6dc82660a98b035f8addb5d b66235eaaf47456bc1dc4bde454a028e2ce494ece6b713a94cd6bf27cf18c717fd0c57a5681caaa2ad73a473593cdd7a 9103e3bb74304186fa4e3e355a02da77da4aca9b7e702982fc2082af67127ebb23a455098313c88465bc9b7d26820dd5 b6a42ff407c9dd132670cdb83cbad4b20871716e44133b59a932cd1c3f97c7ac8ff7f61acfaf8628372508d8dc8cad7c 883a9c21c16a167a4171b0f084565c13b6f28ba7c4977a0de69f0a25911f64099e7bbb4da8858f2e93068f4155d04e18 8dbb3220abc6a43220adf0331e3903d3bfd1d5213aadfbd8dfcdf4b2864ce2e96a71f35ecfb7a07c3bbabf0372b50271 b4ad08aee48e176bda390b7d9acf2f8d5eb008f30d20994707b757dc6a3974b2902d29cd9b4d85e032810ad25ac49e97 865bb0f33f7636ec501bb634e5b65751c8a230ae1fa807a961a8289bbf9c7fe8c59e01fbc4c04f8d59b7f539cf79ddd5 86a54d4c12ad1e3605b9f93d4a37082fd26e888d2329847d89afa7802e815f33f38185c5b7292293d788ad7d7da1df97 b26c8615c5e47691c9ff3deca3021714662d236c4d8401c5d27b50152ce7e566266b9d512d14eb63e65bc1d38a16f914 827639d5ce7db43ba40152c8a0eaad443af21dc92636cc8cc2b35f10647da7d475a1e408901cd220552fddad79db74df a2b79a582191a85dbe22dc384c9ca3de345e69f6aa370aa6d3ff1e1c3de513e30b72df9555b15a46586bd27ea2854d9d ae0d74644aba9a49521d3e9553813bcb9e18f0b43515e4c74366e503c52f47236be92dfbd99c7285b3248c267b1de5a0 80fb0c116e0fd6822a04b9c25f456bdca704e2be7bdc5d141dbf5d1c5eeb0a2c4f5d80db583b03ef3e47517e4f9a1b10 ac3a1fa3b4a2f30ea7e0a114cdc479eb51773573804c2a158d603ad9902ae8e39ffe95df09c0d871725a5d7f9ba71a57 b56b2b0d601cba7f817fa76102c68c2e518c6f20ff693aad3ff2e07d6c4c76203753f7f91686b1801e8c4659e4d45c48 89d50c1fc56e656fb9d3915964ebce703cb723fe411ab3c9eaa88ccc5d2b155a9b2e515363d9c600d3c0cee782c43f41 b24207e61462f6230f3cd8ccf6828357d03e725769f7d1de35099ef9ee4dca57dbce699bb49ed994462bee17059d25ce b886f17fcbcbfcd08ac07f04bb9543ef58510189decaccea4b4158c9174a067cb67d14b6be3c934e6e2a18c77efa9c9c b9c050ad9cafd41c6e2e192b70d080076eed59ed38ea19a12bd92fa17b5d8947d58d5546aaf5e8e27e1d3b5481a6ce51 aaf7a34d3267e3b1ddbc54c641e3922e89303f7c86ebebc7347ebca4cffad5b76117dac0cbae1a133053492799cd936f a9ee604ada50adef82e29e893070649d2d4b7136cc24fa20e281ce1a07bd736bf0de7c420369676bcbcecff26fb6e900 9855315a12a4b4cf80ab90b8bd13003223ba25206e52fd4fe6a409232fbed938f30120a3db23eab9c53f308bd8b9db81 8cd488dd7a24f548a3cf03c54dec7ff61d0685cb0f6e5c46c2d728e3500d8c7bd6bba0156f4bf600466fda53e5b20444 890ad4942ebac8f5b16c777701ab80c68f56fa542002b0786f8fea0fb073154369920ac3dbfc07ea598b82f4985b8ced 8de0cf9ddc84c9b92c59b9b044387597799246b30b9f4d7626fc12c51f6e423e08ee4cbfe9289984983c1f9521c3e19d b474dfb5b5f4231d7775b3c3a8744956b3f0c7a871d835d7e4fd9cc895222c7b868d6c6ce250de568a65851151fac860 86433b6135d9ed9b5ee8cb7a6c40e5c9d30a68774cec04988117302b8a02a11a71a1e03fd8e0264ef6611d219f103007 80b9ed4adbe9538fb1ef69dd44ec0ec5b57cbfea820054d8d445b4261962624b4c70ac330480594bc5168184378379c3 8b2e83562ccd23b7ad2d17f55b1ab7ef5fbef64b3a284e6725b800f3222b8bdf49937f4a873917ada9c4ddfb090938c2 abe78cebc0f5a45d754140d1f685e387489acbfa46d297a8592aaa0d676a470654f417a4f7d666fc0b2508fab37d908e a9c5f8ff1f8568e252b06d10e1558326db9901840e6b3c26bbd0cd5e850cb5fb3af3f117dbb0f282740276f6fd84126f 975f8dc4fb55032a5df3b42b96c8c0ffecb75456f01d4aef66f973cb7270d4eff32c71520ceefc1adcf38d77b6b80c67 b043306ed2c3d8a5b9a056565afd8b5e354c8c4569fda66b0d797a50a3ce2c08cffbae9bbe292da69f39e89d5dc7911e 8d2afc36b1e44386ba350c14a6c1bb31ff6ea77128a0c5287584ac3584282d18516901ce402b4644a53db1ed8e7fa581 8c294058bed53d7290325c363fe243f6ec4f4ea2343692f4bac8f0cb86f115c069ccb8334b53d2e42c067691ad110dba b92157b926751aaf7ef82c1aa8c654907dccab6376187ee8b3e8c0c82811eae01242832de953faa13ebaff7da8698b3e a780c4bdd9e4ba57254b09d745075cecab87feda78c88ffee489625c5a3cf96aa6b3c9503a374a37927d9b78de9bd22b 811f548ef3a2e6a654f7dcb28ac9378de9515ed61e5a428515d9594a83e80b35c60f96a5cf743e6fab0d3cb526149f49 85a4dccf6d90ee8e094731eec53bd00b3887aec6bd81a0740efddf812fd35e3e4fe4f983afb49a8588691c202dabf942 b152c2da6f2e01c8913079ae2b40a09b1f361a80f5408a0237a8131b429677c3157295e11b365b1b1841924b9efb922e 849b9efee8742502ffd981c4517c88ed33e4dd518a330802caff168abae3cd09956a5ee5eda15900243bc2e829016b74 955a933f3c18ec0f1c0e38fa931e4427a5372c46a3906ebe95082bcf878c35246523c23f0266644ace1fa590ffa6d119 911989e9f43e580c886656377c6f856cdd4ff1bd001b6db3bbd86e590a821d34a5c6688a29b8d90f28680e9fdf03ba69 b73b8b4f1fd6049fb68d47cd96a18fcba3f716e0a1061aa5a2596302795354e0c39dea04d91d232aec86b0bf2ba10522 90f87456d9156e6a1f029a833bf3c7dbed98ca2f2f147a8564922c25ae197a55f7ea9b2ee1f81bf7383197c4bad2e20c 903cba8b1e088574cb04a05ca1899ab00d8960580c884bd3c8a4c98d680c2ad11410f2b75739d6050f91d7208cac33a5 9329987d42529c261bd15ecedd360be0ea8966e7838f32896522c965adfc4febf187db392bd441fb43bbd10c38fdf68b 8178ee93acf5353baa349285067b20e9bb41aa32d77b5aeb7384fe5220c1fe64a2461bd7a83142694fe673e8bbf61b7c a06a8e53abcff271b1394bcc647440f81fb1c1a5f29c27a226e08f961c3353f4891620f2d59b9d1902bf2f5cc07a4553 aaf5fe493b337810889e777980e6bbea6cac39ac66bc0875c680c4208807ac866e9fda9b5952aa1d04539b9f4a4bec57 aa058abb1953eceac14ccfa7c0cc482a146e1232905dcecc86dd27f75575285f06bbae16a8c9fe8e35d8713717f5f19f 8f15dd732799c879ca46d2763453b359ff483ca33adb1d0e0a57262352e0476c235987dc3a8a243c74bc768f93d3014c a61cc8263e9bc03cce985f1663b8a72928a607121005a301b28a278e9654727fd1b22bc8a949af73929c56d9d3d4a273 98d6dc78502d19eb9f921225475a6ebcc7b44f01a2df6f55ccf6908d65b27af1891be2a37735f0315b6e0f1576c1f8d8 8bd258b883f3b3793ec5be9472ad1ff3dc4b51bc5a58e9f944acfb927349ead8231a523cc2175c1f98e7e1e2b9f363b8 aeacc2ecb6e807ad09bedd99654b097a6f39840e932873ace02eabd64ccfbb475abdcb62939a698abf17572d2034c51e b8ccf78c08ccd8df59fd6eda2e01de328bc6d8a65824d6f1fc0537654e9bc6bf6f89c422dd3a295cce628749da85c864 8f91fd8cb253ba2e71cc6f13da5e05f62c2c3b485c24f5d68397d04665673167fce1fc1aec6085c69e87e66ec555d3fd a254baa10cb26d04136886073bb4c159af8a8532e3fd36b1e9c3a2e41b5b2b6a86c4ebc14dbe624ee07b7ccdaf59f9ab 94e3286fe5cd68c4c7b9a7d33ae3d714a7f265cf77cd0e9bc19fc51015b1d1c34ad7e3a5221c459e89f5a043ee84e3a9 a279da8878af8d449a9539bec4b17cea94f0242911f66fab275b5143ab040825f78c89cb32a793930609415cfa3a1078 ac846ceb89c9e5d43a2991c8443079dc32298cd63e370e64149cec98cf48a6351c09c856f2632fd2f2b3d685a18bbf8b a847b27995c8a2e2454aaeb983879fb5d3a23105c33175839f7300b7e1e8ec3efd6450e9fa3f10323609dee7b98c6fd5 a2f432d147d904d185ff4b2de8c6b82fbea278a2956bc406855b44c18041854c4f0ecccd472d1d0dff1d8aa8e281cb1d 94a48ad40326f95bd63dff4755f863a1b79e1df771a1173b17937f9baba57b39e651e7695be9f66a472f098b339364fc a12a0ccd8f96e96e1bc6494341f7ebce959899341b3a084aa1aa87d1c0d489ac908552b7770b887bb47e7b8cbc3d8e66 81a1f1681bda923bd274bfe0fbb9181d6d164fe738e54e25e8d4849193d311e2c4253614ed673c98af2c798f19a93468 abf71106a05d501e84cc54610d349d7d5eae21a70bd0250f1bebbf412a130414d1c8dbe673ffdb80208fd72f1defa4d4 96266dc2e0df18d8136d79f5b59e489978eee0e6b04926687fe389d4293c14f36f055c550657a8e27be4118b64254901 8df5dcbefbfb4810ae3a413ca6b4bf08619ca53cd50eb1dde2a1c035efffc7b7ac7dff18d403253fd80104bd83dc029e 9610b87ff02e391a43324a7122736876d5b3af2a137d749c52f75d07b17f19900b151b7f439d564f4529e77aa057ad12 a90a5572198b40fe2fcf47c422274ff36c9624df7db7a89c0eb47eb48a73a03c985f4ac5016161c76ca317f64339bce1 98e5e61a6ab6462ba692124dba7794b6c6bde4249ab4fcc98c9edd631592d5bc2fb5e38466691a0970a38e48d87c2e43 918cefb8f292f78d4db81462c633daf73b395e772f47b3a7d2cea598025b1d8c3ec0cbff46cdb23597e74929981cde40 a98918a5dc7cf610fe55f725e4fd24ce581d594cb957bb9b4e888672e9c0137003e1041f83e3f1d7b9caab06462c87d4 b92b74ac015262ca66c33f2d950221e19d940ba3bf4cf17845f961dc1729ae227aa9e1f2017829f2135b489064565c29 a053ee339f359665feb178b4e7ee30a85df37debd17cacc5a27d6b3369d170b0114e67ad1712ed26d828f1df641bcd99 8c3c8bad510b35da5ce5bd84b35c958797fbea024ad1c97091d2ff71d9b962e9222f65a9b776e5b3cc29c36e1063d2ee af99dc7330fe7c37e850283eb47cc3257888e7c197cb0d102edf94439e1e02267b6a56306d246c326c4c79f9dc8c6986 afecb2dc34d57a725efbd7eb93d61eb29dbe8409b668ab9ea040791f5b796d9be6d4fc10d7f627bf693452f330cf0435 93334fedf19a3727a81a6b6f2459db859186227b96fe7a391263f69f1a0884e4235de64d29edebc7b99c44d19e7c7d7a 89579c51ac405ad7e9df13c904061670ce4b38372492764170e4d3d667ed52e5d15c7cd5c5991bbfa3a5e4e3fa16363e 9778f3e8639030f7ef1c344014f124e375acb8045bd13d8e97a92c5265c52de9d1ffebaa5bc3e1ad2719da0083222991 88f77f34ee92b3d36791bdf3326532524a67d544297dcf1a47ff00b47c1b8219ff11e34034eab7d23b507caa2fd3c6b9 a699c1e654e7c484431d81d90657892efeb4adcf72c43618e71ca7bd7c7a7ebbb1db7e06e75b75dc4c74efd306b5df3f 81d13153baebb2ef672b5bdb069d3cd669ce0be96b742c94e04038f689ff92a61376341366b286eee6bf3ae85156f694 81efb17de94400fdacc1deec2550cbe3eecb27c7af99d8207e2f9be397e26be24a40446d2a09536bb5172c28959318d9 989b21ebe9ceab02488992673dc071d4d5edec24bff0e17a4306c8cb4b3c83df53a2063d1827edd8ed16d6e837f0d222 8d6005d6536825661b13c5fdce177cb37c04e8b109b7eb2b6d82ea1cb70efecf6a0022b64f84d753d165edc2bba784a3 a32607360a71d5e34af2271211652d73d7756d393161f4cf0da000c2d66a84c6826e09e759bd787d4fd0305e2439d342 aaad8d6f6e260db45d51b2da723be6fa832e76f5fbcb77a9a31e7f090dd38446d3b631b96230d78208cae408c288ac4e abcfe425255fd3c5cffd3a818af7650190c957b6b07b632443f9e33e970a8a4c3bf79ac9b71f4d45f238a04d1c049857 aeabf026d4c783adc4414b5923dbd0be4b039cc7201219f7260d321f55e9a5b166d7b5875af6129c034d0108fdc5d666 af49e740c752d7b6f17048014851f437ffd17413c59797e5078eaaa36f73f0017c3e7da020310cfe7d3c85f94a99f203 8854ca600d842566e3090040cd66bb0b3c46dae6962a13946f0024c4a8aca447e2ccf6f240045f1ceee799a88cb9210c b6c03b93b1ab1b88ded8edfa1b487a1ed8bdce8535244dddb558ffb78f89b1c74058f80f4db2320ad060d0c2a9c351cc b5bd7d17372faff4898a7517009b61a7c8f6f0e7ed4192c555db264618e3f6e57fb30a472d169fea01bf2bf0362a19a8 96eb1d38319dc74afe7e7eb076fcd230d19983f645abd14a71e6103545c01301b31c47ae931e025f3ecc01fb3d2f31fa b55a8d30d4403067def9b65e16f867299f8f64c9b391d0846d4780bc196569622e7e5b64ce799b5aefac8f965b2a7a7b 8356d199a991e5cbbff608752b6291731b6b6771aed292f8948b1f41c6543e4ab1bedc82dd26d10206c907c03508df06 97f4137445c2d98b0d1d478049de952610ad698c91c9d0f0e7227d2aae690e9935e914ec4a2ea1fbf3fc1dddfeeacebb af5621707e0938320b15ddfc87584ab325fbdfd85c30efea36f8f9bd0707d7ec12c344eff3ec21761189518d192df035 8ac7817e71ea0825b292687928e349da7140285d035e1e1abff0c3704fa8453faaae343a441b7143a74ec56539687cc4 8a5e0a9e4758449489df10f3386029ada828d1762e4fb0a8ffe6b79e5b6d5d713cb64ed95960e126398b0cdb89002bc9 81324be4a71208bbb9bca74b77177f8f1abb9d3d5d9db195d1854651f2cf333cd618d35400da0f060f3e1b025124e4b2 849971d9d095ae067525b3cbc4a7dfae81f739537ade6d6cec1b42fb692d923176197a8770907c58069754b8882822d6 89f830825416802477cc81fdf11084885865ee6607aa15aa4eb28e351c569c49b8a1b9b5e95ddc04fa0ebafe20071313 9240aeeaff37a91af55f860b9badd466e8243af9e8c96a7aa8cf348cd270685ab6301bc135b246dca9eda696f8b0e350 acf74db78cc33138273127599eba35b0fb4e7b9a69fe02dae18fc6692d748ca332bd00b22afa8e654ed587aab11833f3 b091e6d37b157b50d76bd297ad752220cd5c9390fac16dc838f8557aed6d9833fc920b61519df21265406216315e883f a6446c429ebf1c7793c622250e23594c836b2fbcaf6c5b3d0995e1595a37f50ea643f3e549b0be8bbdadd69044d72ab9 93e675353bd60e996bf1c914d5267eeaa8a52fc3077987ccc796710ef9becc6b7a00e3d82671a6bdfb8145ee3c80245a a2f731e43251d04ed3364aa2f072d05355f299626f2d71a8a38b6f76cf08c544133f7d72dd0ab4162814b674b9fc7fa6 97a8b791a5a8f6e1d0de192d78615d73d0c38f1e557e4e15d15adc663d649e655bc8da3bcc499ef70112eafe7fb45c7a 98cd624cbbd6c53a94469be4643c13130916b91143425bcb7d7028adbbfede38eff7a21092af43b12d4fab703c116359 995783ce38fd5f6f9433027f122d4cf1e1ff3caf2d196ce591877f4a544ce9113ead60de2de1827eaff4dd31a20d79a8 8cf251d6f5229183b7f3fe2f607a90b4e4b6f020fb4ba2459d28eb8872426e7be8761a93d5413640a661d73e34a5b81f b9232d99620652a3aa7880cad0876f153ff881c4ed4c0c2e7b4ea81d5d42b70daf1a56b869d752c3743c6d4c947e6641 849716f938f9d37250cccb1bf77f5f9fde53096cdfc6f2a25536a6187029a8f1331cdbed08909184b201f8d9f04b792f 80c7c4de098cbf9c6d17b14eba1805e433b5bc905f6096f8f63d34b94734f2e4ebf4bce8a177efd1186842a61204a062 b790f410cf06b9b8daadceeb4fd5ff40a2deda820c8df2537e0a7554613ae3948e149504e3e79aa84889df50c8678eeb 813aab8bd000299cd37485b73cd7cba06e205f8efb87f1efc0bae8b70f6db2bc7702eb39510ad734854fb65515fe9d0f 94f0ab7388ac71cdb67f6b85dfd5945748afb2e5abb622f0b5ad104be1d4d0062b651f134ba22385c9e32c2dfdcccce1 ab6223dca8bd6a4f969e21ccd9f8106fc5251d321f9e90cc42cea2424b3a9c4e5060a47eeef6b23c7976109b548498e8 859c56b71343fce4d5c5b87814c47bf55d581c50fd1871a17e77b5e1742f5af639d0e94d19d909ec7dfe27919e954e0c aae0d632b6191b8ad71b027791735f1578e1b89890b6c22e37de0e4a6074886126988fe8319ae228ac9ef3b3bcccb730 8ca9f32a27a024c3d595ecfaf96b0461de57befa3b331ab71dc110ec3be5824fed783d9516597537683e77a11d334338 a061df379fb3f4b24816c9f6cd8a94ecb89b4c6dc6cd81e4b8096fa9784b7f97ab3540259d1de9c02eb91d9945af4823 998603102ac63001d63eb7347a4bb2bf4cf33b28079bb48a169076a65c20d511ccd3ef696d159e54cc8e772fb5d65d50 94444d96d39450872ac69e44088c252c71f46be8333a608a475147752dbb99db0e36acfc5198f158509401959c12b709 ac1b51b6c09fe055c1d7c9176eea9adc33f710818c83a1fbfa073c8dc3a7eb3513cbdd3f5960b7845e31e3e83181e6ba 803d530523fc9e1e0f11040d2412d02baef3f07eeb9b177fa9bfa396af42eea898a4276d56e1db998dc96ae47b644cb2 85a3c9fc7638f5bf2c3e15ba8c2fa1ae87eb1ceb44c6598c67a2948667a9dfa41e61f66d535b4e7fda62f013a5a8b885 a961cf5654c46a1a22c29baf7a4e77837a26b7f138f410e9d1883480ed5fa42411d522aba32040b577046c11f007388e ad1154142344f494e3061ef45a34fab1aaacf5fdf7d1b26adbb5fbc3d795655fa743444e39d9a4119b4a4f82a6f30441 b1d6c30771130c77806e7ab893b73d4deb590b2ff8f2f8b5e54c2040c1f3e060e2bd99afc668cf706a2df666a508bbf6 a00361fd440f9decabd98d96c575cd251dc94c60611025095d1201ef2dedde51cb4de7c2ece47732e5ed9b3526c2012c a85c5ab4d17d328bda5e6d839a9a6adcc92ff844ec25f84981e4f44a0e8419247c081530f8d9aa629c7eb4ca21affba6 a4ddd3eab4527a2672cf9463db38bc29f61460e2a162f426b7852b7a7645fbd62084fd39a8e4d60e1958cce436dd8f57 811648140080fe55b8618f4cf17f3c5a250adb0cd53d885f2ddba835d2b4433188e41fc0661faac88e4ff910b16278c0 b85c7f1cfb0ed29addccf7546023a79249e8f15ac2d14a20accbfef4dd9dc11355d599815fa09d2b6b4e966e6ea8cff1 a10b5d8c260b159043b020d5dd62b3467df2671afea6d480ca9087b7e60ed170c82b121819d088315902842d66c8fb45 917e191df1bcf3f5715419c1e2191da6b8680543b1ba41fe84ed07ef570376e072c081beb67b375fca3565a2565bcabb 881fd967407390bfd7badc9ab494e8a287559a01eb07861f527207c127eadea626e9bcc5aa9cca2c5112fbac3b3f0e9c 959fd71149af82cc733619e0e5bf71760ca2650448c82984b3db74030d0e10f8ab1ce1609a6de6f470fe8b5bd90df5b3 a3370898a1c5f33d15adb4238df9a6c945f18b9ada4ce2624fc32a844f9ece4c916a64e9442225b6592afa06d2e015f2 817efb8a791435e4236f7d7b278181a5fa34587578c629dbc14fbf9a5c26772290611395eecd20222a4c58649fc256d8 a04c9876acf2cfdc8ef96de4879742709270fa1d03fe4c8511fbef2d59eb0aaf0336fa2c7dfe41a651157377fa217813 81e15875d7ea7f123e418edf14099f2e109d4f3a6ce0eb65f67fe9fb10d2f809a864a29f60ad3fc949f89e2596b21783 b49f529975c09e436e6bc202fdc16e3fdcbe056db45178016ad6fdece9faad4446343e83aed096209690b21a6910724f 879e8eda589e1a279f7f49f6dd0580788c040d973748ec4942dbe51ea8fbd05983cc919b78f0c6b92ef3292ae29db875 81a2b74b2118923f34139a102f3d95e7eee11c4c2929c2576dee200a5abfd364606158535a6c9e4178a6a83dbb65f3c4 8913f281d8927f2b45fc815d0f7104631cb7f5f7278a316f1327d670d15868daadd2a64e3eb98e1f53fe7e300338cc80 a6f815fba7ef9af7fbf45f93bc952e8b351f5de6568a27c7c47a00cb39a254c6b31753794f67940fc7d2e9cc581529f4 b3722a15c66a0014ce4d082de118def8d39190c15678a472b846225585f3a83756ae1b255b2e3f86a26168878e4773b2 817ae61ab3d0dd5b6e24846b5a5364b1a7dc2e77432d9fed587727520ae2f307264ea0948c91ad29f0aea3a11ff38624 b3db467464415fcad36dc1de2d6ba7686772a577cc2619242ac040d6734881a45d3b40ed4588db124e4289cfeec4bbf6 ad66a14f5a54ac69603b16e5f1529851183da77d3cc60867f10aea41339dd5e06a5257982e9e90a352cdd32750f42ee4 adafa3681ef45d685555601a25a55cf23358319a17f61e2179e704f63df83a73bdd298d12cf6cef86db89bd17119e11d a379dc44cb6dd3b9d378c07b2ec654fec7ca2f272de6ba895e3d00d20c9e4c5550498a843c8ac67e4221db2115bedc1c b7bf81c267a78efc6b9e5a904574445a6487678d7ef70054e3e93ea6a23f966c2b68787f9164918e3b16d2175459ed92 b41d66a13a4afafd5760062b77f79de7e6ab8ccacde9c6c5116a6d886912fb491dc027af435b1b44aacc6af7b3c887f2 9904d23a7c1c1d2e4bab85d69f283eb0a8e26d46e8b7b30224438015c936729b2f0af7c7c54c03509bb0500acb42d8a4 ae30d65e9e20c3bfd603994ae2b175ff691d51f3e24b2d058b3b8556d12ca4c75087809062dddd4aaac81c94d15d8a17 9245162fab42ac01527424f6013310c3eb462982518debef6c127f46ba8a06c705d7dc9f0a41e796ba8d35d60ae6cc64 87fab853638d7a29a20f3ba2b1a7919d023e9415bfa78ebb27973d8cbc7626f584dc5665d2e7ad71f1d760eba9700d88 85aac46ecd330608e5272430970e6081ff02a571e8ea444f1e11785ea798769634a22a142d0237f67b75369d3c484a8a 938c85ab14894cc5dfce3d80456f189a2e98eddbc8828f4ff6b1df1dcb7b42b17ca2ff40226a8a1390a95d63dca698dd a18ce1f846e3e3c4d846822f60271eecf0f5d7d9f986385ac53c5ace9589dc7c0188910448c19b91341a1ef556652fa9 8611608a9d844f0e9d7584ad6ccf62a5087a64f764caf108db648a776b5390feb51e5120f0ef0e9e11301af3987dd7dc 8106333ba4b4de8d1ae43bc9735d3fea047392e88efd6a2fa6f7b924a18a7a265ca6123c3edc0f36307dd7fb7fe89257 a91426fa500951ff1b051a248c050b7139ca30dde8768690432d597d2b3c4357b11a577be6b455a1c5d145264dcf81fc b7f9f90e0e450f37b081297f7f651bad0496a8b9afd2a4cf4120a2671aaaa8536dce1af301258bfbfdb122afa44c5048 84126da6435699b0c09fa4032dec73d1fca21d2d19f5214e8b0bea43267e9a8dd1fc44f8132d8315e734c8e2e04d7291 aff064708103884cb4f1a3c1718b3fc40a238d35cf0a7dc24bdf9823693b407c70da50df585bf5bc4e9c07d1c2d203e8 a8b40fc6533752983a5329c31d376c7a5c13ce6879cc7faee648200075d9cd273537001fb4c86e8576350eaac6ba60c2 a02db682bdc117a84dcb9312eb28fcbde12d49f4ce915cc92c610bb6965ec3cc38290f8c5b5ec70afe153956692cda95 86decd22b25d300508472c9ce75d3e465b737e7ce13bc0fcce32835e54646fe12322ba5bc457be18bfd926a1a6ca4a38 a18666ef65b8c2904fd598791f5627207165315a85ee01d5fb0e6b2e10bdd9b00babc447da5bd63445e3337de33b9b89 89bb0c06effadefdaf34ffe4b123e1678a90d4451ee856c863df1e752eef41fd984689ded8f0f878bf8916d5dd8e8024 97cfcba08ebec05d0073992a66b1d7d6fb9d95871f2cdc36db301f78bf8069294d1c259efef5c93d20dc937eedae3a1a ac2643b14ece79dcb2e289c96776a47e2bebd40dd6dc74fd035df5bb727b5596f40e3dd2d2202141e69b0993717ede09 a5e6fd88a2f9174d9bd4c6a55d9c30974be414992f22aa852f552c7648f722ed8077acf5aba030abd47939bb451b2c60 8ad40a612824a7994487731a40b311b7349038c841145865539c6ada75c56de6ac547a1c23df190e0caaafecddd80ccc 953a7cea1d857e09202c438c6108060961f195f88c32f0e012236d7a4b39d840c61b162ec86436e8c38567328bea0246 80d8b47a46dae1868a7b8ccfe7029445bbe1009dad4a6c31f9ef081be32e8e1ac1178c3c8fb68d3e536c84990cc035b1 81ecd99f22b3766ce0aca08a0a9191793f68c754fdec78b82a4c3bdc2db122bbb9ebfd02fc2dcc6e1567a7d42d0cc16a b1dd0446bccc25846fb95d08c1c9cc52fb51c72c4c5d169ffde56ecfe800f108dc1106d65d5c5bd1087c656de3940b63 b87547f0931e164e96de5c550ca5aa81273648fe34f6e193cd9d69cf729cb432e17aa02e25b1c27a8a0d20a3b795e94e 820a94e69a927e077082aae66f6b292cfbe4589d932edf9e68e268c9bd3d71ef76cf7d169dd445b93967c25db11f58f1 b0d07ddf2595270c39adfa0c8cf2ab1322979b0546aa4d918f641be53cd97f36c879bb75d205e457c011aca3bbd9f731 8700b876b35b4b10a8a9372c5230acecd39539c1bb87515640293ad4464a9e02929d7d6a6a11112e8a29564815ac0de4 a61a601c5bb27dcb97e37c8e2b9ce479c6b192a5e04d9ed5e065833c5a1017ee5f237b77d1a17be5d48f8e7cc0bcacf6 92fb88fe774c1ba1d4a08cae3c0e05467ad610e7a3f1d2423fd47751759235fe0a3036db4095bd6404716aa03820f484 b274f140d77a3ce0796f5e09094b516537ccaf27ae1907099bff172e6368ba85e7c3ef8ea2a07457cac48ae334da95b3 b2292d9181f16581a9a9142490b2bdcdfb218ca6315d1effc8592100d792eb89d5356996c890441f04f2b4a95763503e 8897e73f576d86bc354baa3bd96e553107c48cf5889dcc23c5ba68ab8bcd4e81f27767be2233fdfa13d39f885087e668 a29eac6f0829791c728d71abc49569df95a4446ecbfc534b39f24f56c88fe70301838dfc1c19751e7f3c5c1b8c6af6a0 9346dc3720adc5df500a8df27fd9c75ef38dc5c8f4e8ed66983304750e66d502c3c59b8e955be781b670a0afc70a2167 9566d534e0e30a5c5f1428665590617e95fd05d45f573715f58157854ad596ece3a3cfec61356aee342308d623e029d5 a464fb8bffe6bd65f71938c1715c6e296cc6d0311a83858e4e7eb5873b7f2cf0c584d2101e3407b85b64ca78b2ac93ce b54088f7217987c87e9498a747569ac5b2f8afd5348f9c45bf3fd9fbf713a20f495f49c8572d087efe778ac7313ad6d3 91fa9f5f8000fe050f5b224d90b59fcce13c77e903cbf98ded752e5b3db16adb2bc1f8c94be48b69f65f1f1ad81d6264 92d04a5b0ac5d8c8e313709b432c9434ecd3e73231f01e9b4e7952b87df60cbfa97b5dedd2200bd033b4b9ea8ba45cc1 a94b90ad3c3d6c4bbe169f8661a790c40645b40f0a9d1c7220f01cf7fc176e04d80bab0ced9323fcafb93643f12b2760 94d86149b9c8443b46196f7e5a3738206dd6f3be7762df488bcbb9f9ee285a64c997ed875b7b16b26604fa59020a8199 82efe4ae2c50a2d7645240c173a047f238536598c04a2c0b69c96e96bd18e075a99110f1206bc213f39edca42ba00cc1 ab8667685f831bc14d4610f84a5da27b4ea5b133b4d991741a9e64dceb22cb64a3ce8f1b6e101d52af6296df7127c9ad 83ba433661c05dcc5d562f4a9a261c8110dac44b8d833ae1514b1fc60d8b4ee395b18804baea04cb10adb428faf713c3 b5748f6f660cc5277f1211d2b8649493ed8a11085b871cd33a5aea630abd960a740f08c08be5f9c21574600ac9bf5737 a5c8dd12af48fb710642ad65ebb97ca489e8206741807f7acfc334f8035d3c80593b1ff2090c9bb7bd138f0c48714ca8 a2b382fd5744e3babf454b1d806cc8783efeb4761bc42b6914ea48a46a2eae835efbe0a18262b6bc034379e03cf1262b b3145ffaf603f69f15a64936d32e3219eea5ed49fdfd2f5bf40ea0dfd974b36fb6ff12164d4c2282d892db4cf3ff3ce1 87a316fb213f4c5e30c5e3face049db66be4f28821bd96034714ec23d3e97849d7b301930f90a4323c7ccf53de23050c b9de09a919455070fed6220fc179c8b7a4c753062bcd27acf28f5b9947a659c0b364298daf7c85c4ca6fca7f945add1f 806fbd98d411b76979464c40ad88bc07a151628a27fcc1012ba1dfbaf5b5cc9d962fb9b3386008978a12515edce934bc a15268877fae0d21610ae6a31061ed7c20814723385955fac09fdc9693a94c33dea11db98bb89fdfe68f933490f5c381 8d633fb0c4da86b2e0b37d8fad5972d62bff2ac663c5ec815d095cd4b7e1fe66ebef2a2590995b57eaf941983c7ad7a4 8139e5dd9cf405e8ef65f11164f0440827d98389ce1b418b0c9628be983a9ddd6cf4863036ccb1483b40b8a527acd9ed 88b15fa94a08eac291d2b94a2b30eb851ff24addf2cc30b678e72e32cfcb3424cf4b33aa395d741803f3e578ddf524de b5eaf0c8506e101f1646bcf049ee38d99ea1c60169730da893fd6020fd00a289eb2f415947e44677af49e43454a7b1be 8489822ad0647a7e06aa2aa5595960811858ddd4542acca419dd2308a8c5477648f4dd969a6740bb78aa26db9bfcc555 b1e9a7b9f3423c220330d45f69e45fa03d7671897cf077f913c252e3e99c7b1b1cf6d30caad65e4228d5d7b80eb86e5e b28fe9629592b9e6a55a1406903be76250b1c50c65296c10c5e48c64b539fb08fe11f68cf462a6edcbba71b0cee3feb2 a41acf96a02c96cd8744ff6577c244fc923810d17ade133587e4c223beb7b4d99fa56eae311a500d7151979267d0895c 880798938fe4ba70721be90e666dfb62fcab4f3556fdb7b0dc8ec5bc34f6b4513df965eae78527136eb391889fe2caf9 98d4d89d358e0fb7e212498c73447d94a83c1b66e98fc81427ab13acddb17a20f52308983f3a5a8e0aaacec432359604 81430b6d2998fc78ba937a1639c6020199c52da499f68109da227882dc26d005b73d54c5bdcac1a04e8356a8ca0f7017 a8d906a4786455eb74613aba4ce1c963c60095ffb8658d368df9266fdd01e30269ce10bf984e7465f34b4fd83beba26a af54167ac1f954d10131d44a8e0045df00d581dd9e93596a28d157543fbe5fb25d213806ed7fb3cba6b8f5b5423562db 8511e373a978a12d81266b9afbd55035d7bc736835cfa921903a92969eeba3624437d1346b55382e61415726ab84a448 8cf43eea93508ae586fa9a0f1354a1e16af659782479c2040874a46317f9e8d572a23238efa318fdfb87cc63932602b7 b0bdd3bacff077173d302e3a9678d1d37936188c7ecc34950185af6b462b7c679815176f3cce5db19aac8b282f2d60ad a355e9b87f2f2672052f5d4d65b8c1c827d24d89b0d8594641fccfb69aef1b94009105f3242058bb31c8bf51caae5a41 b8baa9e4b950b72ff6b88a6509e8ed1304bc6fd955748b2e59a523a1e0c5e99f52aec3da7fa9ff407a7adf259652466c 840bc3dbb300ea6f27d1d6dd861f15680bd098be5174f45d6b75b094d0635aced539fa03ddbccb453879de77fb5d1fe9 b4bc7e7e30686303856472bae07e581a0c0bfc815657c479f9f5931cff208d5c12930d2fd1ff413ebd8424bcd7a9b571 89b5d514155d7999408334a50822508b9d689add55d44a240ff2bdde2eee419d117031f85e924e2a2c1ca77db9b91eea a8604b6196f87a04e1350302e8aa745bba8dc162115d22657b37a1d1a98cb14876ddf7f65840b5dbd77e80cd22b4256c 83cb7acdb9e03247515bb2ce0227486ccf803426717a14510f0d59d45e998b245797d356f10abca94f7a14e1a2f0d552 aeb3266a9f16649210ab2df0e1908ac259f34ce1f01162c22b56cf1019096ee4ea5854c36e30bb2feb06c21a71e8a45c 89e72e86edf2aa032a0fc9acf4d876a40865fbb2c8f87cb7e4d88856295c4ac14583e874142fd0c314a49aba68c0aa3c 8c3576eba0583c2a7884976b4ed11fe1fda4f6c32f6385d96c47b0e776afa287503b397fa516a455b4b8c3afeedc76db a31e5b633bda9ffa174654fee98b5d5930a691c3c42fcf55673d927dbc8d91c58c4e42e615353145431baa646e8bbb30 89f2f3f7a8da1544f24682f41c68114a8f78c86bd36b066e27da13acb70f18d9f548773a16bd8e24789420e17183f137 ada27fa4e90a086240c9164544d2528621a415a5497badb79f8019dc3dce4d12eb6b599597e47ec6ac39c81efda43520 90dc1eb21bf21c0187f359566fc4bf5386abea52799306a0e5a1151c0817c5f5bc60c86e76b1929c092c0f3ff48cedd2 b702a53ebcc17ae35d2e735a347d2c700e9cbef8eadbece33cac83df483b2054c126593e1f462cfc00a3ce9d737e2af5 9891b06455ec925a6f8eafffba05af6a38cc5e193acaaf74ffbf199df912c5197106c5e06d72942bbb032ce277b6417f 8c0ee71eb01197b019275bcf96cae94e81d2cdc3115dbf2d8e3080074260318bc9303597e8f72b18f965ad601d31ec43 8aaf580aaf75c1b7a5f99ccf60503506e62058ef43b28b02f79b8536a96be3f019c9f71caf327b4e6730134730d1bef5 ae6f9fc21dd7dfa672b25a87eb0a41644f7609fab5026d5cedb6e43a06dbbfd6d6e30322a2598c8dedde88c52eaed626 8159b953ffece5693edadb2e906ebf76ff080ee1ad22698950d2d3bfc36ac5ea78f58284b2ca180664452d55bd54716c ab7647c32ca5e9856ac283a2f86768d68de75ceeba9e58b74c5324f8298319e52183739aba4340be901699d66ac9eb3f a4d85a5701d89bcfaf1572db83258d86a1a0717603d6f24ac2963ffcf80f1265e5ab376a4529ca504f4396498791253c 816080c0cdbfe61b4d726c305747a9eb58ac26d9a35f501dd32ba43c098082d20faf3ccd41aad24600aa73bfa453dfac 84f3afac024f576b0fd9acc6f2349c2fcefc3f77dbe5a2d4964d14b861b88e9b1810334b908cf3427d9b67a8aee74b18 94b390655557b1a09110018e9b5a14490681ade275bdc83510b6465a1218465260d9a7e2a6e4ec700f58c31dc3659962 a8c66826b1c04a2dd4c682543242e7a57acae37278bd09888a3d17747c5b5fec43548101e6f46d703638337e2fd3277b 86e6f4608a00007fa533c36a5b054c5768ccafe41ad52521d772dcae4c8a4bcaff8f7609be30d8fab62c5988cbbb6830 837da4cf09ae8aa0bceb16f8b3bfcc3b3367aecac9eed6b4b56d7b65f55981ef066490764fb4c108792623ecf8cad383 941ff3011462f9b5bf97d8cbdb0b6f5d37a1b1295b622f5485b7d69f2cb2bcabc83630dae427f0259d0d9539a77d8424 b99e5d6d82aa9cf7d5970e7f710f4039ac32c2077530e4c2779250c6b9b373bc380adb0a03b892b652f649720672fc8c a791c78464b2d65a15440b699e1e30ebd08501d6f2720adbc8255d989a82fcded2f79819b5f8f201bed84a255211b141 84af7ad4a0e31fcbb3276ab1ad6171429cf39adcf78dc03750dc5deaa46536d15591e26d53e953dfb31e1622bc0743ab a833e62fe97e1086fae1d4917fbaf09c345feb6bf1975b5cb863d8b66e8d621c7989ab3dbecda36bc9eaffc5eaa6fa66 b4ef79a46a2126f53e2ebe62770feb57fd94600be29459d70a77c5e9cc260fa892be06cd60f886bf48459e48eb50d063 b43b8f61919ea380bf151c294e54d3a3ff98e20d1ee5efbfe38aa2b66fafbc6a49739793bd5cb1c809f8b30466277c3a ab37735af2412d2550e62df9d8b3b5e6f467f20de3890bf56faf1abf2bf3bd1d98dc3fa0ad5e7ab3fce0fa20409eb392 82416b74b1551d484250d85bb151fabb67e29cce93d516125533df585bc80779ab057ea6992801a3d7d5c6dcff87a018 8145d0787f0e3b5325190ae10c1d6bee713e6765fb6a0e9214132c6f78f4582bb2771aaeae40d3dad4bafb56bf7e36d8 b6935886349ecbdd5774e12196f4275c97ec8279fdf28ccf940f6a022ebb6de8e97d6d2173c3fe402cbe9643bed3883b 87ef9b4d3dc71ac86369f8ed17e0dd3b91d16d14ae694bc21a35b5ae37211b043d0e36d8ff07dcc513fb9e6481a1f37f ae1d0ded32f7e6f1dc8fef495879c1d9e01826f449f903c1e5034aeeabc5479a9e323b162b688317d46d35a42d570d86 a40d16497004db4104c6794e2f4428d75bdf70352685944f3fbe17526df333e46a4ca6de55a4a48c02ecf0bde8ba03c0 8d45121efba8cc308a498e8ee39ea6fa5cae9fb2e4aab1c2ff9d448aa8494ccbec9a078f978a86fcd97b5d5e7be7522a a8173865c64634ba4ac2fa432740f5c05056a9deaf6427cb9b4b8da94ca5ddbc8c0c5d3185a89b8b28878194de9cdfcd b6ec06a74d690f6545f0f0efba236e63d1fdfba54639ca2617408e185177ece28901c457d02b849fd00f1a53ae319d0a b69a12df293c014a40070e3e760169b6f3c627caf9e50b35a93f11ecf8df98b2bc481b410eecb7ab210bf213bbe944de 97e7dc121795a533d4224803e591eef3e9008bab16f12472210b73aaf77890cf6e3877e0139403a0d3003c12c8f45636 acdfa6fdd4a5acb7738cc8768f7cba84dbb95c639399b291ae8e4e63df37d2d4096900a84d2f0606bf534a9ccaa4993f 86ee253f3a9446a33e4d1169719b7d513c6b50730988415382faaf751988c10a421020609f7bcdef91be136704b906e2 aac9438382a856caf84c5a8a234282f71b5fc5f65219103b147e7e6cf565522285fbfd7417b513bdad8277a00f652ca1 83f3799d8e5772527930f5dc071a2e0a65471618993ec8990a96ccdeee65270e490bda9d26bb877612475268711ffd80 93f28a81ac8c0ec9450b9d762fae9c7f8feaace87a6ee6bd141ef1d2d0697ef1bbd159fe6e1de640dbdab2b0361fca8a a0825c95ba69999b90eac3a31a3fd830ea4f4b2b7409bde5f202b61d741d6326852ce790f41de5cb0eccec7af4db30c1 83924b0e66233edd603c3b813d698daa05751fc34367120e3cf384ea7432e256ccee4d4daf13858950549d75a377107d 956fd9fa58345277e06ba2ec72f49ed230b8d3d4ff658555c52d6cddeb84dd4e36f1a614f5242d5ca0192e8daf0543c2 944869912476baae0b114cced4ff65c0e4c90136f73ece5656460626599051b78802df67d7201c55d52725a97f5f29fe 865cb25b64b4531fb6fe4814d7c8cd26b017a6c6b72232ff53defc18a80fe3b39511b23f9e4c6c7249d06e03b2282ed2 81e09ff55214960775e1e7f2758b9a6c4e4cd39edf7ec1adfaad51c52141182b79fe2176b23ddc7df9fd153e5f82d668 b31006896f02bc90641121083f43c3172b1039334501fbaf1672f7bf5d174ddd185f945adf1a9c6cf77be34c5501483d 88b92f6f42ae45e9f05b16e52852826e933efd0c68b0f2418ac90957fd018df661bc47c8d43c2a7d7bfcf669dab98c3c 92fc68f595853ee8683930751789b799f397135d002eda244fe63ecef2754e15849edde3ba2f0cc8b865c9777230b712 99ca06a49c5cd0bb097c447793fcdd809869b216a34c66c78c7e41e8c22f05d09168d46b8b1f3390db9452d91bc96dea b48b9490a5d65296802431852d548d81047bbefc74fa7dc1d4e2a2878faacdfcb365ae59209cb0ade01901a283cbd15d aff0fdbef7c188b120a02bc9085d7b808e88f73973773fef54707bf2cd772cd066740b1b6f4127b5c349f657bd97e738 966fd4463b4f43dd8ccba7ad50baa42292f9f8b2e70da23bb6780e14155d9346e275ef03ddaf79e47020dcf43f3738bd 9330c3e1fadd9e08ac85f4839121ae20bbeb0a5103d84fa5aadbd1213805bdcda67bf2fb75fc301349cbc851b5559d20 993bb99867bd9041a71a55ad5d397755cfa7ab6a4618fc526179bfc10b7dc8b26e4372fe9a9b4a15d64f2b63c1052dda a29b59bcfab51f9b3c490a3b96f0bf1934265c315349b236012adbd64a56d7f6941b2c8cc272b412044bc7731f71e1dc a65c9cefe1fc35d089fe8580c2e7671ebefdb43014ac291528ff4deefd4883fd4df274af83711dad610dad0d615f9d65 944c78c56fb227ae632805d448ca3884cd3d2a89181cead3d2b7835e63297e6d740aa79a112edb1d4727824991636df5 a73d782da1db7e4e65d7b26717a76e16dd9fab4df65063310b8e917dc0bc24e0d6755df5546c58504d04d9e68c3b474a af80f0b87811ae3124f68108b4ca1937009403f87928bbc53480e7c5408d072053ace5eeaf5a5aba814dab8a45502085 88aaf1acfc6e2e19b8387c97da707cb171c69812fefdd4650468e9b2c627bd5ccfb459f4d8e56bdfd84b09ddf87e128f 92c97276ff6f72bab6e9423d02ad6dc127962dbce15a0dd1e4a393b4510c555df6aa27be0f697c0d847033a9ca8b8dfd a0e07d43d96e2d85b6276b3c60aadb48f0aedf2de8c415756dc597249ea64d2093731d8735231dadc961e5682ac59479 adc9e6718a8f9298957d1da3842a7751c5399bbdf56f8de6c1c4bc39428f4aee6f1ba6613d37bf46b9403345e9d6fc81 951da434da4b20d949b509ceeba02e24da7ed2da964c2fcdf426ec787779c696b385822c7dbea4df3e4a35921f1e912c a04cbce0d2b2e87bbf038c798a12ec828423ca6aca08dc8d481cf6466e3c9c73d4d4a7fa47df9a7e2e15aae9e9f67208 8f855cca2e440d248121c0469de1f94c2a71b8ee2682bbad3a78243a9e03da31d1925e6760dbc48a1957e040fae9abe8 b642e5b17c1df4a4e101772d73851180b3a92e9e8b26c918050f51e6dd3592f102d20b0a1e96f0e25752c292f4c903ff a92454c300781f8ae1766dbbb50a96192da7d48ef4cbdd72dd8cbb44c6eb5913c112cc38e9144615fdc03684deb99420 8b74f7e6c2304f8e780df4649ef8221795dfe85fdbdaa477a1542d135b75c8be45bf89adbbb6f3ddf54ca40f02e733e9 85cf66292cbb30cec5fd835ab10c9fcb3aea95e093aebf123e9a83c26f322d76ebc89c4e914524f6c5f6ee7d74fc917d ae0bfe0cdc97c09542a7431820015f2d16067b30dca56288013876025e81daa8c519e5e347268e19aa1a85fa1dc28793 921322fc6a47dc091afa0ad6df18ed14cde38e48c6e71550aa513918b056044983aee402de21051235eecf4ce8040fbe 96c030381e97050a45a318d307dcb3c8377b79b4dd5daf6337cded114de26eb725c14171b9b8e1b3c08fe1f5ea6b49e0 90c23b86b6111818c8baaf53a13eaee1c89203b50e7f9a994bf0edf851919b48edbac7ceef14ac9414cf70c486174a77 8bf6c301240d2d1c8d84c71d33a6dfc6d9e8f1cfae66d4d0f7a256d98ae12b0bcebfa94a667735ee89f810bcd7170cff a41a4ffbbea0e36874d65c009ee4c3feffff322f6fc0e30d26ee4dbc1f46040d05e25d9d0ecb378cef0d24a7c2c4b850 a8d4cdd423986bb392a0a92c12a8bd4da3437eec6ef6af34cf5310944899287452a2eb92eb5386086d5063381189d10e a81dd26ec057c4032a4ed7ad54d926165273ed51d09a1267b2e477535cf6966835a257c209e4e92d165d74fa75695fa3 8d7f708c3ee8449515d94fc26b547303b53d8dd55f177bc3b25d3da2768accd9bc8e9f09546090ebb7f15c66e6c9c723 839ba65cffcd24cfffa7ab3b21faabe3c66d4c06324f07b2729c92f15cad34e474b0f0ddb16cd652870b26a756b731d3 87f1a3968afec354d92d77e2726b702847c6afcabb8438634f9c6f7766de4c1504317dc4fa9a4a735acdbf985e119564 91a8a7fd6542f3e0673f07f510d850864b34ac087eb7eef8845a1d14b2b1b651cbdc27fa4049bdbf3fea54221c5c8549 aef3cf5f5e3a2385ead115728d7059e622146c3457d266c612e778324b6e06fbfb8f98e076624d2f3ce1035d65389a07 819915d6232e95ccd7693fdd78d00492299b1983bc8f96a08dcb50f9c0a813ed93ae53c0238345d5bea0beda2855a913 8e9ba68ded0e94935131b392b28218315a185f63bf5e3c1a9a9dd470944509ca0ba8f6122265f8da851b5cc2abce68f1 b28468e9b04ee9d69003399a3cf4457c9bf9d59f36ab6ceeb8e964672433d06b58beeea198fedc7edbaa1948577e9fa2 a633005e2c9f2fd94c8bce2dd5bb708fe946b25f1ec561ae65e54e15cdd88dc339f1a083e01f0d39610c8fe24151aaf0 841d0031e22723f9328dd993805abd13e0c99b0f59435d2426246996b08d00ce73ab906f66c4eab423473b409e972ce0 85758d1b084263992070ec8943f33073a2d9b86a8606672550c17545507a5b3c88d87382b41916a87ee96ff55a7aa535 8581b06b0fc41466ef94a76a1d9fb8ae0edca6d018063acf6a8ca5f4b02d76021902feba58972415691b4bdbc33ae3b4 83539597ff5e327357ee62bc6bf8c0bcaec2f227c55c7c385a4806f0d37fb461f1690bad5066b8a5370950af32fafbef aee3557290d2dc10827e4791d00e0259006911f3f3fce4179ed3c514b779160613eca70f720bff7804752715a1266ffa b48d2f0c4e90fc307d5995464e3f611a9b0ef5fe426a289071f4168ed5cc4f8770c9332960c2ca5c8c427f40e6bb389f 847af8973b4e300bb06be69b71b96183fd1a0b9d51b91701bef6fcfde465068f1eb2b1503b07afda380f18d69de5c9e1 a70a6a80ce407f07804c0051ac21dc24d794b387be94eb24e1db94b58a78e1bcfb48cd0006db8fc1f9bedaece7a44fbe b40e942b8fa5336910ff0098347df716bff9d1fa236a1950c16eeb966b3bc1a50b8f7b0980469d42e75ae13ced53cead b208fabaa742d7db3148515330eb7a3577487845abdb7bd9ed169d0e081db0a5816595c33d375e56aeac5b51e60e49d3 b7c8194b30d3d6ef5ab66ec88ad7ebbc732a3b8a41731b153e6f63759a93f3f4a537eab9ad369705bd730184bdbbdc34 9280096445fe7394d04aa1bc4620c8f9296e991cc4d6c131bd703cb1cc317510e6e5855ac763f4d958c5edfe7eebeed7 abc2aa4616a521400af1a12440dc544e3c821313d0ab936c86af28468ef8bbe534837e364598396a81cf8d06274ed5a6 b18ca8a3325adb0c8c18a666d4859535397a1c3fe08f95eebfac916a7a99bbd40b3c37b919e8a8ae91da38bc00fa56c0 8a40c33109ecea2a8b3558565877082f79121a432c45ec2c5a5e0ec4d1c203a6788e6b69cb37f1fd5b8c9a661bc5476d 88c47301dd30998e903c84e0b0f2c9af2e1ce6b9f187dab03528d44f834dc991e4c86d0c474a2c63468cf4020a1e24a0 920c832853e6ab4c851eecfa9c11d3acc7da37c823be7aa1ab15e14dfd8beb5d0b91d62a30cec94763bd8e4594b66600 98e1addbe2a6b8edc7f12ecb9be81c3250aeeca54a1c6a7225772ca66549827c15f3950d01b8eb44aecb56fe0fff901a 8cfb0fa1068be0ec088402f5950c4679a2eb9218c729da67050b0d1b2d7079f3ddf4bf0f57d95fe2a8db04bc6bcdb20c b70f381aafe336b024120453813aeab70baac85b9c4c0f86918797b6aee206e6ed93244a49950f3d8ec9f81f4ac15808 a4c8edf4aa33b709a91e1062939512419711c1757084e46f8f4b7ed64f8e682f4e78b7135920c12f0eb0422fe9f87a6a b4817e85fd0752d7ebb662d3a51a03367a84bac74ebddfba0e5af5e636a979500f72b148052d333b3dedf9edd2b4031b a87430169c6195f5d3e314ff2d1c2f050e766fd5d2de88f5207d72dba4a7745bb86d0baca6e9ae156582d0d89e5838c7 991b00f8b104566b63a12af4826b61ce7aa40f4e5b8fff3085e7a99815bdb4471b6214da1e480214fac83f86a0b93cc5 b39966e3076482079de0678477df98578377a094054960ee518ef99504d6851f8bcd3203e8da5e1d4f6f96776e1fe6eb a448846d9dc2ab7a0995fa44b8527e27f6b3b74c6e03e95edb64e6baa4f1b866103f0addb97c84bef1d72487b2e21796 894bec21a453ae84b592286e696c35bc30e820e9c2fd3e63dd4fbe629e07df16439c891056070faa490155f255bf7187 a9ec652a491b11f6a692064e955f3f3287e7d2764527e58938571469a1e29b5225b9415bd602a45074dfbfe9c131d6ca b39d37822e6cbe28244b5f42ce467c65a23765bd16eb6447c5b3e942278069793763483dafd8c4dd864f8917aad357fe 88dba51133f2019cb266641c56101e3e5987d3b77647a2e608b5ff9113dfc5f85e2b7c365118723131fbc0c9ca833c9c b566579d904b54ecf798018efcb824dccbebfc6753a0fd2128ac3b4bd3b038c2284a7c782b5ca6f310eb7ea4d26a3f0a a97a55c0a492e53c047e7d6f9d5f3e86fb96f3dddc68389c0561515343b66b4bc02a9c0d5722dff1e3445308240b27f7 a044028ab4bcb9e1a2b9b4ca4efbf04c5da9e4bf2fff0e8bd57aa1fc12a71e897999c25d9117413faf2f45395dee0f13 a78dc461decbeaeed8ebd0909369b491a5e764d6a5645a7dac61d3140d7dc0062526f777b0eb866bff27608429ebbdde b2c2a8991f94c39ca35fea59f01a92cb3393e0eccb2476dfbf57261d406a68bd34a6cff33ed80209991688c183609ef4 84189eefb521aff730a4fd3fd5b10ddfd29f0d365664caef63bb015d07e689989e54c33c2141dd64427805d37a7e546e 85ac80bd734a52235da288ff042dea9a62e085928954e8eacd2c751013f61904ed110e5b3afe1ab770a7e6485efb7b5e 9183a560393dcb22d0d5063e71182020d0fbabb39e32493eeffeb808df084aa243eb397027f150b55a247d1ed0c8513e 81c940944df7ecc58d3c43c34996852c3c7915ed185d7654627f7af62abae7e0048dd444a6c09961756455000bd96d09 aa8c34e164019743fd8284b84f06c3b449aae7996e892f419ee55d82ad548cb300fd651de329da0384243954c0ef6a60 89a7b7bdfc7e300d06a14d463e573d6296d8e66197491900cc9ae49504c4809ff6e61b758579e9091c61085ba1237b83 878d21809ba540f50bd11f4c4d9590fb6f3ab9de5692606e6e2ef4ed9d18520119e385be5e1f4b3f2e2b09c319f0e8fc 8eb248390193189cf0355365e630b782cd15751e672dc478b39d75dc681234dcd9309df0d11f4610dbb249c1e6be7ef9 a1d7fb3aecb896df3a52d6bd0943838b13f1bd039c936d76d03de2044c371d48865694b6f532393b27fd10a4cf642061 a34bca58a24979be442238cbb5ece5bee51ae8c0794dd3efb3983d4db713bc6f28a96e976ac3bd9a551d3ed9ba6b3e22 817c608fc8cacdd178665320b5a7587ca21df8bdd761833c3018b967575d25e3951cf3d498a63619a3cd2ad4406f5f28 86c95707db0495689afd0c2e39e97f445f7ca0edffad5c8b4cacd1421f2f3cc55049dfd504f728f91534e20383955582 99c3b0bb15942c301137765d4e19502f65806f3b126dc01a5b7820c87e8979bce6a37289a8f6a4c1e4637227ad5bf3bf 8aa1518a80ea8b074505a9b3f96829f5d4afa55a30efe7b4de4e5dbf666897fdd2cf31728ca45921e21a78a80f0e0f10 8d74f46361c79e15128ac399e958a91067ef4cec8983408775a87eca1eed5b7dcbf0ddf30e66f51780457413496c7f07 a41cde4a786b55387458a1db95171aca4fd146507b81c4da1e6d6e495527c3ec83fc42fad1dfe3d92744084a664fd431 8c352852c906fae99413a84ad11701f93f292fbf7bd14738814f4c4ceab32db02feb5eb70bc73898b0bc724a39d5d017 a5993046e8f23b71ba87b7caa7ace2d9023fb48ce4c51838813174880d918e9b4d2b0dc21a2b9c6f612338c31a289df8 83576d3324bf2d8afbfb6eaecdc5d767c8e22e7d25160414924f0645491df60541948a05e1f4202e612368e78675de8a b43749b8df4b15bc9a3697e0f1c518e6b04114171739ef1a0c9c65185d8ec18e40e6954d125cbc14ebc652cf41ad3109 b4eebd5d80a7327a040cafb9ccdb12b2dfe1aa86e6bc6d3ac8a57fadfb95a5b1a7332c66318ff72ba459f525668af056 9198be7f1d413c5029b0e1c617bcbc082d21abe2c60ec8ce9b54ca1a85d3dba637b72fda39dae0c0ae40d047eab9f55a 8d96a0232832e24d45092653e781e7a9c9520766c3989e67bbe86b3a820c4bf621ea911e7cd5270a4bfea78b618411f6 8d7160d0ea98161a2d14d46ef01dff72d566c330cd4fabd27654d300e1bc7644c68dc8eabf2a20a59bfe7ba276545f9b abb60fce29dec7ba37e3056e412e0ec3e05538a1fc0e2c68877378c867605966108bc5742585ab6a405ce0c962b285b6 8fabffa3ed792f05e414f5839386f6449fd9f7b41a47595c5d71074bd1bb3784cc7a1a7e1ad6b041b455035957e5b2dc 90ff017b4804c2d0533b72461436b10603ab13a55f86fd4ec11b06a70ef8166f958c110519ca1b4cc7beba440729fe2d b340cfd120f6a4623e3a74cf8c32bfd7cd61a280b59dfd17b15ca8fae4d82f64a6f15fbde4c02f424debc72b7db5fe67 871311c9c7220c932e738d59f0ecc67a34356d1429fe570ca503d340c9996cb5ee2cd188fad0e3bd16e4c468ec1dbebd a772470262186e7b94239ba921b29f2412c148d6f97c4412e96d21e55f3be73f992f1ad53c71008f0558ec3f84e2b5a7 b2a897dcb7ffd6257f3f2947ec966f2077d57d5191a88840b1d4f67effebe8c436641be85524d0a21be734c63ab5965d a044f6eacc48a4a061fa149500d96b48cbf14853469aa4d045faf3dca973be1bd4b4ce01646d83e2f24f7c486d03205d 981af5dc2daa73f7fa9eae35a93d81eb6edba4a7f673b55d41f6ecd87a37685d31bb40ef4f1c469b3d72f2f18b925a17 912d2597a07864de9020ac77083eff2f15ceb07600f15755aba61251e8ce3c905a758453b417f04d9c38db040954eb65 9642b7f6f09394ba5e0805734ef6702c3eddf9eea187ba98c676d5bbaec0e360e3e51dc58433aaa1e2da6060c8659cb7 8ab3836e0a8ac492d5e707d056310c4c8e0489ca85eb771bff35ba1d658360084e836a6f51bb990f9e3d2d9aeb18fbb5 879e058e72b73bb1f4642c21ffdb90544b846868139c6511f299aafe59c2d0f0b944dffc7990491b7c4edcd6a9889250 b9e60b737023f61479a4a8fd253ed0d2a944ea6ba0439bbc0a0d3abf09b0ad1f18d75555e4a50405470ae4990626f390 b9c2535d362796dcd673640a9fa2ebdaec274e6f8b850b023153b0a7a30fffc87f96e0b72696f647ebe7ab63099a6963 94aeff145386a087b0e91e68a84a5ede01f978f9dd9fe7bebca78941938469495dc30a96bba9508c0d017873aeea9610 98b179f8a3d9f0d0a983c30682dd425a2ddc7803be59bd626c623c8951a5179117d1d2a68254c95c9952989877d0ee55 889ecf5f0ee56938273f74eb3e9ecfb5617f04fb58e83fe4c0e4aef51615cf345bc56f3f61b17f6eed3249d4afd54451 a0f2b2c39bcea4b50883e2587d16559e246248a66ecb4a4b7d9ab3b51fb39fe98d83765e087eee37a0f86b0ba4144c02 b2a61e247ed595e8a3830f7973b07079cbda510f28ad8c78c220b26cb6acde4fbb5ee90c14a665f329168ee951b08cf0 95bd0fcfb42f0d6d8a8e73d7458498a85bcddd2fb132fd7989265648d82ac2707d6d203fac045504977af4f0a2aca4b7 843e5a537c298666e6cf50fcc044f13506499ef83c802e719ff2c90e85003c132024e04711be7234c04d4b0125512d5d a46d1797c5959dcd3a5cfc857488f4d96f74277c3d13b98b133620192f79944abcb3a361d939a100187f1b0856eae875 a1c7786736d6707a48515c38660615fcec67eb8a2598f46657855215f804fd72ab122d17f94fcffad8893f3be658dca7 b23dc9e610abc7d8bd21d147e22509a0fa49db5be6ea7057b51aae38e31654b3aa044df05b94b718153361371ba2f622 b00cc8f257d659c22d30e6d641f79166b1e752ea8606f558e4cad6fc01532e8319ea4ee12265ba4140ac45aa4613c004 ac7019af65221b0cc736287b32d7f1a3561405715ba9a6a122342e04e51637ba911c41573de53e4781f2230fdcb2475f 81a630bc41b3da8b3eb4bf56cba10cd9f93153c3667f009dc332287baeb707d505fb537e6233c8e53d299ec0f013290c a6b7aea5c545bb76df0f230548539db92bc26642572cb7dd3d5a30edca2b4c386f44fc8466f056b42de2a452b81aff5b 8271624ff736b7b238e43943c81de80a1612207d32036d820c11fc830c737972ccc9c60d3c2359922b06652311e3c994 8a684106458cb6f4db478170b9ad595d4b54c18bf63b9058f095a2fa1b928c15101472c70c648873d5887880059ed402 a5cc3c35228122f410184e4326cf61a37637206e589fcd245cb5d0cec91031f8f7586b80503070840fdfd8ce75d3c88b 9443fc631aed8866a7ed220890911057a1f56b0afe0ba15f0a0e295ab97f604b134b1ed9a4245e46ee5f9a93aa74f731 984b6f7d79835dffde9558c6bb912d992ca1180a2361757bdba4a7b69dc74b056e303adc69fe67414495dd9c2dd91e64 b15a5c8cba5de080224c274d31c68ed72d2a7126d347796569aef0c4e97ed084afe3da4d4b590b9dda1a07f0c2ff3dfb 991708fe9650a1f9a4e43938b91d45dc68c230e05ee999c95dbff3bf79b1c1b2bb0e7977de454237c355a73b8438b1d9 b4f7edc7468b176a4a7c0273700c444fa95c726af6697028bed4f77eee887e3400f9c42ee15b782c0ca861c4c3b8c98a 8c60dcc16c51087eb477c13e837031d6c6a3dc2b8bf8cb43c23f48006bc7173151807e866ead2234b460c2de93b31956 83ad63e9c910d1fc44bc114accfb0d4d333b7ebe032f73f62d25d3e172c029d5e34a1c9d547273bf6c0fead5c8801007 85de73213cc236f00777560756bdbf2b16841ba4b55902cf2cad9742ecaf5d28209b012ceb41f337456dfeca93010cd7 a7561f8827ccd75b6686ba5398bb8fc3083351c55a589b18984e186820af7e275af04bcd4c28e1dc11be1e8617a0610b 88c0a4febd4068850557f497ea888035c7fc9f404f6cc7794e7cc8722f048ad2f249e7dc62743e7a339eb7473ad3b0cd 932b22b1d3e6d5a6409c34980d176feb85ada1bf94332ef5c9fc4d42b907dabea608ceef9b5595ef3feee195151f18d8 a2867bb3f5ab88fbdae3a16c9143ab8a8f4f476a2643c505bb9f37e5b1fd34d216cab2204c9a017a5a67b7ad2dda10e8 b573d5f38e4e9e8a3a6fd82f0880dc049efa492a946d00283019bf1d5e5516464cf87039e80aef667cb86fdea5075904 b948f1b5ab755f3f5f36af27d94f503b070696d793b1240c1bdfd2e8e56890d69e6904688b5f8ff5a4bdf5a6abfe195f 917eae95ebc4109a2e99ddd8fec7881d2f7aaa0e25fda44dec7ce37458c2ee832f1829db7d2dcfa4ca0f06381c7fe91d 95751d17ed00a3030bce909333799bb7f4ab641acf585807f355b51d6976dceee410798026a1a004ef4dcdff7ec0f5b8 b9b7bd266f449a79bbfe075e429613e76c5a42ac61f01c8f0bbbd34669650682efe01ff9dbbc400a1e995616af6aa278 ac1722d097ce9cd7617161f8ec8c23d68f1fb1c9ca533e2a8b4f78516c2fd8fb38f23f834e2b9a03bb06a9d655693ca9 a7ad9e96ffd98db2ecdb6340c5d592614f3c159abfd832fe27ee9293519d213a578e6246aae51672ee353e3296858873 989b8814d5de7937c4acafd000eec2b4cd58ba395d7b25f98cafd021e8efa37029b29ad8303a1f6867923f5852a220eb a5bfe6282c771bc9e453e964042d44eff4098decacb89aecd3be662ea5b74506e1357ab26f3527110ba377711f3c9f41 8900a7470b656639721d2abbb7b06af0ac4222ab85a1976386e2a62eb4b88bfb5b72cf7921ddb3cf3a395d7eeb192a2e 95a71b55cd1f35a438cf5e75f8ff11c5ec6a2ebf2e4dba172f50bfad7d6d5dca5de1b1afc541662c81c858f7604c1163 82b5d62fea8db8d85c5bc3a76d68dedd25794cf14d4a7bc368938ffca9e09f7e598fdad2a5aac614e0e52f8112ae62b9 997173f07c729202afcde3028fa7f52cefc90fda2d0c8ac2b58154a5073140683e54c49ed1f254481070d119ce0ce02a aeffb91ccc7a72bbd6ffe0f9b99c9e66e67d59cec2e02440465e9636a613ab3017278cfa72ea8bc4aba9a8dc728cb367 952743b06e8645894aeb6440fc7a5f62dd3acf96dab70a51e20176762c9751ea5f2ba0b9497ccf0114dc4892dc606031 874c63baeddc56fbbca2ff6031f8634b745f6e34ea6791d7c439201aee8f08ef5ee75f7778700a647f3b21068513fce6 85128fec9c750c1071edfb15586435cc2f317e3e9a175bb8a9697bcda1eb9375478cf25d01e7fed113483b28f625122d 85522c9576fd9763e32af8495ae3928ed7116fb70d4378448926bc9790e8a8d08f98cf47648d7da1b6e40d6a210c7924 97d0f37a13cfb723b848099ca1c14d83e9aaf2f7aeb71829180e664b7968632a08f6a85f557d74b55afe6242f2a36e7c abaa472d6ad61a5fccd1a57c01aa1bc081253f95abbcba7f73923f1f11c4e79b904263890eeb66926de3e2652f5d1c70 b3c04945ba727a141e5e8aec2bf9aa3772b64d8fd0e2a2b07f3a91106a95cbcb249adcd074cbe498caf76fffac20d4ef 82c46781a3d730d9931bcabd7434a9171372dde57171b6180e5516d4e68db8b23495c8ac3ab96994c17ddb1cf249b9fb a202d8b65613c42d01738ccd68ed8c2dbc021631f602d53f751966e04182743ebc8e0747d600b8a8676b1da9ae7f11ab ae73e7256e9459db04667a899e0d3ea5255211fb486d084e6550b6dd64ca44af6c6b2d59d7aa152de9f96ce9b58d940d b67d87b176a9722945ec7593777ee461809861c6cfd1b945dde9ee4ff009ca4f19cf88f4bbb5c80c9cbab2fe25b23ac8 8f0b7a317a076758b0dac79959ee4a06c08b07d0f10538a4b53d3da2eda16e2af26922feb32c090330dc4d969cf69bd3 90b36bf56adbd8c4b6cb32febc3a8d5f714370c2ac3305c10fa6d168dffb2a026804517215f9a2d4ec8310cdb6bb459b aa80c19b0682ead69934bf18cf476291a0beddd8ef4ed75975d0a472e2ab5c70f119722a8574ae4973aceb733d312e57 a3fc9abb12574e5c28dcb51750b4339b794b8e558675eef7d26126edf1de920c35e992333bcbffcbf6a5f5c0d383ce62 a1573ff23ab972acdcd08818853b111fc757fdd35aa070186d3e11e56b172fb49d840bf297ac0dd222e072fc09f26a81 98306f2be4caa92c2b4392212d0cbf430b409b19ff7d5b899986613bd0e762c909fc01999aa94be3bd529d67f0113d7f 8c1fc42482a0819074241746d17dc89c0304a2acdae8ed91b5009e9e3e70ff725ba063b4a3e68fdce05b74f5180c545e a6c6113ebf72d8cf3163b2b8d7f3fa24303b13f55752522c660a98cd834d85d8c79214d900fa649499365e2e7641f77a ab95eea424f8a2cfd9fb1c78bb724e5b1d71a0d0d1e4217c5d0f98b0d8bbd3f8400a2002abc0a0e4576d1f93f46fefad 823c5a4fd8cf4a75fdc71d5f2dd511b6c0f189b82affeacd2b7cfcad8ad1a5551227dcc9bfdb2e34b2097eaa00efbb51 b97314dfff36d80c46b53d87a61b0e124dc94018a0bb680c32765b9a2d457f833a7c42bbc90b3b1520c33a182580398d b17566ee3dcc6bb3b004afe4c0136dfe7dd27df9045ae896dca49fb36987501ae069eb745af81ba3fc19ff037e7b1406 b0bdc0f55cfd98d331e3a0c4fbb776a131936c3c47c6bffdc3aaf7d8c9fa6803fbc122c2fefbb532e634228687d52174 aa5d9e60cc9f0598559c28bb9bdd52aa46605ab4ffe3d192ba982398e72cec9a2a44c0d0d938ce69935693cabc0887ea 802b6459d2354fa1d56c592ac1346c428dadea6b6c0a87bf7d309bab55c94e1cf31dd98a7a86bd92a840dd51f218b91b a526914efdc190381bf1a73dd33f392ecf01350b9d3f4ae96b1b1c3d1d064721c7d6eec5788162c933245a3943f5ee51 b3b8fcf637d8d6628620a1a99dbe619eabb3e5c7ce930d6efd2197e261bf394b74d4e5c26b96c4b8009c7e523ccfd082 8f7510c732502a93e095aba744535f3928f893f188adc5b16008385fb9e80f695d0435bfc5b91cdad4537e87e9d2551c 97b90beaa56aa936c3ca45698f79273a68dd3ccd0076eab48d2a4db01782665e63f33c25751c1f2e070f4d1a8525bf96 b9fb798324b1d1283fdc3e48288e3861a5449b2ab5e884b34ebb8f740225324af86e4711da6b5cc8361c1db15466602f b6d52b53cea98f1d1d4c9a759c25bf9d8a50b604b144e4912acbdbdc32aab8b9dbb10d64a29aa33a4f502121a6fb481c 9174ffff0f2930fc228f0e539f5cfd82c9368d26b074467f39c07a774367ff6cccb5039ac63f107677d77706cd431680 a33b6250d4ac9e66ec51c063d1a6a31f253eb29bbaed12a0d67e2eccfffb0f3a52750fbf52a1c2aaba8c7692346426e7 a97025fd5cbcebe8ef865afc39cd3ea707b89d4e765ec817fd021d6438e02fa51e3544b1fd45470c58007a08efac6edd b32a78480edd9ff6ba2f1eec4088db5d6ceb2d62d7e59e904ecaef7bb4a2e983a4588e51692b3be76e6ffbc0b5f911a5 b5ab590ef0bb77191f00495b33d11c53c65a819f7d0c1f9dc4a2caa147a69c77a4fff7366a602d743ee1f395ce934c1e b3fb0842f9441fb1d0ee0293b6efbc70a8f58d12d6f769b12872db726b19e16f0f65efbc891cf27a28a248b0ef9c7e75 9372ad12856fefb928ccb0d34e198df99e2f8973b07e9d417a3134d5f69e12e79ff572c4e03ccd65415d70639bc7c73e aa8d6e83d09ce216bfe2009a6b07d0110d98cf305364d5529c170a23e693aabb768b2016befb5ada8dabdd92b4d012bb a954a75791eeb0ce41c85200c3763a508ed8214b5945a42c79bfdcfb1ec4f86ad1dd7b2862474a368d4ac31911a2b718 8e2081cfd1d062fe3ab4dab01f68062bac802795545fede9a188f6c9f802cb5f884e60dbe866710baadbf55dc77c11a4 a2f06003b9713e7dd5929501ed485436b49d43de80ea5b15170763fd6346badf8da6de8261828913ee0dacd8ff23c0e1 98eecc34b838e6ffd1931ca65eec27bcdb2fdcb61f33e7e5673a93028c5865e0d1bf6d3bec040c5e96f9bd08089a53a4 88cc16019741b341060b95498747db4377100d2a5bf0a5f516f7dec71b62bcb6e779de2c269c946d39040e03b3ae12b7 ad1135ccbc3019d5b2faf59a688eef2500697642be8cfbdf211a1ab59abcc1f24483e50d653b55ff1834675ac7b4978f a946f05ed9972f71dfde0020bbb086020fa35b482cce8a4cc36dd94355b2d10497d7f2580541bb3e81b71ac8bba3c49f a83aeed488f9a19d8cfd743aa9aa1982ab3723560b1cd337fc2f91ad82f07afa412b3993afb845f68d47e91ba4869840 95eebe006bfc316810cb71da919e5d62c2cebb4ac99d8e8ef67be420302320465f8b69873470982de13a7c2e23516be9 a55f8961295a11e91d1e5deadc0c06c15dacbfc67f04ccba1d069cba89d72aa3b3d64045579c3ea8991b150ac29366ae b321991d12f6ac07a5de3c492841d1a27b0d3446082fbce93e7e1f9e8d8fe3b45d41253556261c21b70f5e189e1a7a6f a0b0822f15f652ce7962a4f130104b97bf9529797c13d6bd8e24701c213cc37f18157bd07f3d0f3eae6b7cd1cb40401f 96e2fa4da378aa782cc2d5e6e465fc9e49b5c805ed01d560e9b98abb5c0de8b74a2e7bec3aa5e2887d25cccb12c66f0c 97e4ab610d414f9210ed6f35300285eb3ccff5b0b6a95ed33425100d7725e159708ea78704497624ca0a2dcabce3a2f9 960a375b17bdb325761e01e88a3ea57026b2393e1d887b34b8fa5d2532928079ce88dc9fd06a728b26d2bb41b12b9032 8328a1647398e832aadc05bd717487a2b6fcdaa0d4850d2c4da230c6a2ed44c3e78ec4837b6094f3813f1ee99414713f aa283834ebd18e6c99229ce4b401eda83f01d904f250fedd4e24f1006f8fa0712a6a89a7296a9bf2ce8de30e28d1408e b29e097f2caadae3e0f0ae3473c072b0cd0206cf6d2e9b22c1a5ad3e07d433e32bd09ed1f4e4276a2da4268633357b7f 9539c5cbba14538b2fe077ecf67694ef240da5249950baaabea0340718b882a966f66d97f08556b08a4320ceb2cc2629 b4529f25e9b42ae8cf8338d2eface6ba5cd4b4d8da73af502d081388135c654c0b3afb3aa779ffc80b8c4c8f4425dd2b 95be0739c4330619fbe7ee2249c133c91d6c07eab846c18c5d6c85fc21ac5528c5d56dcb0145af68ed0c6a79f68f2ccd ac0c83ea802227bfc23814a24655c9ff13f729619bcffdb487ccbbf029b8eaee709f8bddb98232ef33cd70e30e45ca47 b503becb90acc93b1901e939059f93e671900ca52c6f64ae701d11ac891d3a050b505d89324ce267bc43ab8275da6ffe 98e3811b55b1bacb70aa409100abb1b870f67e6d059475d9f278c751b6e1e2e2d6f2e586c81a9fb6597fda06e7923274 b0b0f61a44053fa6c715dbb0731e35d48dba257d134f851ee1b81fd49a5c51a90ebf5459ec6e489fce25da4f184fbdb1 b1d2117fe811720bb997c7c93fe9e4260dc50fca8881b245b5e34f724aaf37ed970cdad4e8fcb68e05ac8cf55a274a53 a10f502051968f14b02895393271776dee7a06db9de14effa0b3471825ba94c3f805302bdddac4d397d08456f620999d a3dbad2ef060ae0bb7b02eaa4a13594f3f900450faa1854fc09620b01ac94ab896321dfb1157cf2374c27e5718e8026a b550fdec503195ecb9e079dcdf0cad559d64d3c30818ef369b4907e813e689da316a74ad2422e391b4a8c2a2bef25fc0 a25ba865e2ac8f28186cea497294c8649a201732ecb4620c4e77b8e887403119910423df061117e5f03fc5ba39042db1 b3f88174e03fdb443dd6addd01303cf88a4369352520187c739fc5ae6b22fa99629c63c985b4383219dab6acc5f6f532 97a7503248e31e81b10eb621ba8f5210c537ad11b539c96dfb7cf72b846c7fe81bd7532c5136095652a9618000b7f8d3 a8bcdc1ce5aa8bfa683a2fc65c1e79de8ff5446695dcb8620f7350c26d2972a23da22889f9e2b1cacb3f688c6a2953dc 8458c111df2a37f5dd91a9bee6c6f4b79f4f161c93fe78075b24a35f9817da8dde71763218d627917a9f1f0c4709c1ed ac5f061a0541152b876cbc10640f26f1cc923c9d4ae1b6621e4bb3bf2cec59bbf87363a4eb72fb0e5b6d4e1c269b52d5 a9a25ca87006e8a9203cbb78a93f50a36694aa4aad468b8d80d3feff9194455ca559fcc63838128a0ab75ad78c07c13a a450b85f5dfffa8b34dfd8bc985f921318efacf8857cf7948f93884ba09fb831482ee90a44224b1a41e859e19b74962f 8ed91e7f92f5c6d7a71708b6132f157ac226ecaf8662af7d7468a4fa25627302efe31e4620ad28719318923e3a59bf82 ab524165fd4c71b1fd395467a14272bd2b568592deafa039d8492e9ef36c6d3f96927c95c72d410a768dc0b6d1fbbc9b b662144505aa8432c75ffb8d10318526b6d5777ac7af9ebfad87d9b0866c364f7905a6352743bd8fd79ffd9d5dd4f3e6 a48f1677550a5cd40663bb3ba8f84caaf8454f332d0ceb1d94dbea52d0412fe69c94997f7749929712fd3995298572f7 8391cd6e2f6b0c242de1117a612be99776c3dc95cb800b187685ea5bf7e2722275eddb79fd7dfc8be8e389c4524cdf70 875d3acb9af47833b72900bc0a2448999d638f153c5e97e8a14ec02d0c76f6264353a7e275e1f1a5855daced523d243b 91f1823657d30b59b2f627880a9a9cb530f5aca28a9fd217fe6f2f5133690dfe7ad5a897872e400512db2e788b3f7628 ad3564332aa56cea84123fc7ca79ea70bb4fef2009fa131cb44e4b15e8613bd11ca1d83b9d9bf456e4b7fee9f2e8b017 8c530b84001936d5ab366c84c0b105241a26d1fb163669f17c8f2e94776895c2870edf3e1bc8ccd04d5e65531471f695 932d01fa174fdb0c366f1230cffde2571cc47485f37f23ba5a1825532190cc3b722aeb1f15aed62cf83ccae9403ba713 88b28c20585aca50d10752e84b901b5c2d58efef5131479fbbe53de7bce2029e1423a494c0298e1497669bd55be97a5d b914148ca717721144ebb3d3bf3fcea2cd44c30c5f7051b89d8001502f3856fef30ec167174d5b76265b55d70f8716b5 81d0173821c6ddd2a068d70766d9103d1ee961c475156e0cbd67d54e668a796310474ef698c7ab55abe6f2cf76c14679 8f28e8d78e2fe7fa66340c53718e0db4b84823c8cfb159c76eac032a62fb53da0a5d7e24ca656cf9d2a890cb2a216542 8a26360335c73d1ab51cec3166c3cf23b9ea51e44a0ad631b0b0329ef55aaae555420348a544e18d5760969281759b61 94f326a32ed287545b0515be9e08149eb0a565025074796d72387cc3a237e87979776410d78339e23ef3172ca43b2544 a785d2961a2fa5e70bffa137858a92c48fe749fee91b02599a252b0cd50d311991a08efd7fa5e96b78d07e6e66ffe746 94af9030b5ac792dd1ce517eaadcec1482206848bea4e09e55cc7f40fd64d4c2b3e9197027c5636b70d6122c51d2235d 9722869f7d1a3992850fe7be405ec93aa17dc4d35e9e257d2e469f46d2c5a59dbd504056c85ab83d541ad8c13e8bcd54 b13c4088b61a06e2c03ac9813a75ff1f68ffdfee9df6a8f65095179a475e29cc49119cad2ce05862c3b1ac217f3aace9 8c64d51774753623666b10ca1b0fe63ae42f82ed6aa26b81dc1d48c86937c5772eb1402624c52a154b86031854e1fb9f b47e4df18002b7dac3fee945bf9c0503159e1b8aafcce2138818e140753011b6d09ef1b20894e08ba3006b093559061b 93cb5970076522c5a0483693f6a35ffd4ea2aa7aaf3730c4eccd6af6d1bebfc1122fc4c67d53898ae13eb6db647be7e2 a68873ef80986795ea5ed1a597d1cd99ed978ec25e0abb57fdcc96e89ef0f50aeb779ff46e3dce21dc83ada3157a8498 8cab67f50949cc8eee6710e27358aea373aae3c92849f8f0b5531c080a6300cdf2c2094fe6fecfef6148de0d28446919 993e932bcb616dbaa7ad18a4439e0565211d31071ef1b85a0627db74a05d978c60d507695eaeea5c7bd9868a21d06923 acdadff26e3132d9478a818ef770e9fa0d2b56c6f5f48bd3bd674436ccce9bdfc34db884a73a30c04c5f5e9764cb2218 a0d3e64c9c71f84c0eef9d7a9cb4fa184224b969db5514d678e93e00f98b41595588ca802643ea225512a4a272f5f534 91c9140c9e1ba6e330cb08f6b2ce4809cd0d5a0f0516f70032bf30e912b0ed684d07b413b326ab531ee7e5b4668c799b 87bc2ee7a0c21ba8334cd098e35cb703f9af57f35e091b8151b9b63c3a5b0f89bd7701dbd44f644ea475901fa6d9ef08 9325ccbf64bf5d71b303e31ee85d486298f9802c5e55b2c3d75427097bf8f60fa2ab4fcaffa9b60bf922c3e24fbd4b19 95d0506e898318f3dc8d28d16dfd9f0038b54798838b3c9be2a2ae3c2bf204eb496166353fc042220b0bd4f6673b9285 811de529416331fe9c416726d45df9434c29dcd7e949045eb15740f47e97dde8f31489242200e19922cac2a8b7c6fd1f ade632d04a4c8bbab6ca7df370b2213cb9225023e7973f0e29f4f5e52e8aeaabc65171306bbdd12a67b195dfbb96d48f 88b7f029e079b6ae956042c0ea75d53088c5d0efd750dd018adaeacf46be21bf990897c58578c491f41afd3978d08073 91f477802de507ffd2be3f4319903119225b277ad24f74eb50f28b66c14d32fae53c7edb8c7590704741af7f7f3e3654 809838b32bb4f4d0237e98108320d4b079ee16ed80c567e7548bd37e4d7915b1192880f4812ac0e00476d246aec1dbc8 84183b5fc4a7997a8ae5afedb4d21dce69c480d5966b5cbdafd6dd10d29a9a6377f3b90ce44da0eb8b176ac3af0253bb 8508abbf6d3739a16b9165caf0f95afb3b3ac1b8c38d6d374cf0c91296e2c1809a99772492b539cda184510bce8a0271 8722054e59bab2062e6419a6e45fc803af77fde912ef2cd23055ad0484963de65a816a2debe1693d93c18218d2b8e81a 8e895f80e485a7c4f56827bf53d34b956281cdc74856c21eb3b51f6288c01cc3d08565a11cc6f3e2604775885490e8c5 afc92714771b7aa6e60f3aee12efd9c2595e9659797452f0c1e99519f67c8bc3ac567119c1ddfe82a3e961ee9defea9a 818ff0fd9cefd32db87b259e5fa32967201016fc02ef44116cdca3c63ce5e637756f60477a408709928444a8ad69c471 8251e29af4c61ae806fc5d032347fb332a94d472038149225298389495139ce5678fae739d02dfe53a231598a992e728 a0ea39574b26643f6f1f48f99f276a8a64b5481989cfb2936f9432a3f8ef5075abfe5c067dc5512143ce8bf933984097 af67a73911b372bf04e57e21f289fc6c3dfac366c6a01409b6e76fea4769bdb07a6940e52e8d7d3078f235c6d2f632c6 b5291484ef336024dd2b9b4cf4d3a6b751133a40656d0a0825bcc6d41c21b1c79cb50b0e8f4693f90c29c8f4358641f9 8bc0d9754d70f2cb9c63f991902165a87c6535a763d5eece43143b5064ae0bcdce7c7a8f398f2c1c29167b2d5a3e6867 8d7faff53579ec8f6c92f661c399614cc35276971752ce0623270f88be937c414eddcb0997e14724a783905a026c8883 9310b5f6e675fdf60796f814dbaa5a6e7e9029a61c395761e330d9348a7efab992e4e115c8be3a43d08e90d21290c892 b5eb4f3eb646038ad2a020f0a42202532d4932e766da82b2c1002bf9c9c2e5336b54c8c0ffcc0e02d19dde2e6a35b6cc 91dabfd30a66710f1f37a891136c9be1e23af4abf8cb751f512a40c022a35f8e0a4fb05b17ec36d4208de02d56f0d53a b3ded14e82d62ac7a5a036122a62f00ff8308498f3feae57d861babaff5a6628d43f0a0c5fc903f10936bcf4e2758ceb a88e8348fed2b26acca6784d19ef27c75963450d99651d11a950ea81d4b93acd2c43e0ecce100eaf7e78508263d5baf3 b1f5bbf7c4756877b87bb42163ac570e08c6667c4528bf68b5976680e19beeff7c5effd17009b0718797077e2955457a ad2e7b516243f915d4d1415326e98b1a7390ae88897d0b03b66c2d9bd8c3fba283d7e8fe44ed3333296a736454cef6d8 8f82eae096d5b11f995de6724a9af895f5e1c58d593845ad16ce8fcae8507e0d8e2b2348a0f50a1f66a17fd6fac51a5c 890e4404d0657c6c1ee14e1aac132ecf7a568bb3e04137b85ac0f84f1d333bd94993e8750f88eee033a33fb00f85dcc7 82ac7d3385e035115f1d39a99fc73e5919de44f5e6424579776d118d711c8120b8e5916372c6f27bed4cc64cac170b6c 85ee16d8901c272cfbbe966e724b7a891c1bd5e68efd5d863043ad8520fc409080af61fd726adc680b3f1186fe0ac8b8 86dc564c9b545567483b43a38f24c41c6551a49cabeebb58ce86404662a12dbfafd0778d30d26e1c93ce222e547e3898 a29f5b4522db26d88f5f95f18d459f8feefab02e380c2edb65aa0617a82a3c1a89474727a951cef5f15050bcf7b380fb a1ce039c8f6cac53352899edb0e3a72c76da143564ad1a44858bd7ee88552e2fe6858d1593bbd74aeee5a6f8034b9b9d 97f10d77983f088286bd7ef3e7fdd8fa275a56bec19919adf33cf939a90c8f2967d2b1b6fc51195cb45ad561202a3ed7 a25e2772e8c911aaf8712bdac1dd40ee061c84d3d224c466cfaae8e5c99604053f940cde259bd1c3b8b69595781dbfec b31bb95a0388595149409c48781174c340960d59032ab2b47689911d03c68f77a2273576fbe0c2bf4553e330656058c7 b8b2e9287ad803fb185a13f0d7456b397d4e3c8ad5078f57f49e8beb2e85f661356a3392dbd7bcf6a900baa5582b86a1 a3d0893923455eb6e96cc414341cac33d2dbc88fba821ac672708cce131761d85a0e08286663a32828244febfcae6451 82310cb42f647d99a136014a9f881eb0b9791efd2e01fc1841907ad3fc8a9654d3d1dab6689c3607214b4dc2aca01cee 874022d99c16f60c22de1b094532a0bc6d4de700ad01a31798fac1d5088b9a42ad02bef8a7339af7ed9c0d4f16b186ee 94981369e120265aed40910eebc37eded481e90f4596b8d57c3bec790ab7f929784bd33ddd05b7870aad6c02e869603b a4f1f50e1e2a73f07095e0dd31cb45154f24968dae967e38962341c1241bcd473102fff1ff668b20c6547e9732d11701 ae2328f3b0ad79fcda807e69a1b5278145225083f150f67511dafc97e079f860c3392675f1752ae7e864c056e592205b 875d8c971e593ca79552c43d55c8c73b17cd20c81ff2c2fed1eb19b1b91e4a3a83d32df150dbfd5db1092d0aebde1e1f add2e80aa46aae95da73a11f130f4bda339db028e24c9b11e5316e75ba5e63bc991d2a1da172c7c8e8fee038baae3433 b46dbe1cb3424002aa7de51e82f600852248e251465c440695d52538d3f36828ff46c90ed77fc1d11534fe3c487df8ef a5e5045d28b4e83d0055863c30c056628c58d4657e6176fd0536f5933f723d60e851bb726d5bf3c546b8ce4ac4a57ef8 91fec01e86dd1537e498fff7536ea3ca012058b145f29d9ada49370cd7b7193ac380e116989515df1b94b74a55c45df3 a7428176d6918cd916a310bdc75483c72de660df48cac4e6e7478eef03205f1827ea55afc0df5d5fa7567d14bbea7fc9 851d89bef45d9761fe5fdb62972209335193610015e16a675149519f9911373bac0919add226ef118d9f3669cfdf4734 b74acf5c149d0042021cb2422ea022be4c4f72a77855f42393e71ffd12ebb3eec16bdf16f812159b67b79a9706e7156d 99f35dce64ec99aa595e7894b55ce7b5a435851b396e79036ffb249c28206087db4c85379df666c4d95857db02e21ff9 b6b9a384f70db9e298415b8ab394ee625dafff04be2886476e59df8d052ca832d11ac68a9b93fba7ab055b7bc36948a4 898ee4aefa923ffec9e79f2219c7389663eb11eb5b49014e04ed4a336399f6ea1691051d86991f4c46ca65bcd4fdf359 b0f948217b0d65df7599a0ba4654a5e43c84db477936276e6f11c8981efc6eaf14c90d3650107ed4c09af4cc8ec11137 aa6286e27ac54f73e63dbf6f41865dd94d24bc0cf732262fcaff67319d162bb43af909f6f8ee27b1971939cfbba08141 8bca7cdf730cf56c7b2c8a2c4879d61361a6e1dba5a3681a1a16c17a56e168ace0e99cf0d15826a1f5e67e6b8a8a049a a746d876e8b1ce225fcafca603b099b36504846961526589af977a88c60d31ba2cc56e66a3dec8a77b3f3531bf7524c9 a11e2e1927e6704cdb8874c75e4f1842cef84d7d43d7a38e339e61dc8ba90e61bbb20dd3c12e0b11d2471d58eed245be a36395e22bc1d1ba8b0459a235203177737397da5643ce54ded3459d0869ff6d8d89f50c73cb62394bf66a959cde9b90 8b49f12ba2fdf9aca7e5f81d45c07d47f9302a2655610e7634d1e4bd16048381a45ef2c95a8dd5b0715e4b7cf42273af 91cffa2a17e64eb7f76bccbe4e87280ee1dd244e04a3c9eac12e15d2d04845d876eb24fe2ec6d6d266cce9efb281077f a6b8afabf65f2dee01788114e33a2f3ce25376fb47a50b74da7c3c25ff1fdc8aa9f41307534abbf48acb6f7466068f69 8d13db896ccfea403bd6441191995c1a65365cab7d0b97fbe9526da3f45a877bd1f4ef2edef160e8a56838cd1586330e 98c717de9e01bef8842c162a5e757fe8552d53269c84862f4d451e7c656ae6f2ae473767b04290b134773f63be6fdb9d 8c2036ace1920bd13cf018e82848c49eb511fad65fd0ff51f4e4b50cf3bfc294afb63cba682c16f52fb595a98fa84970 a3520fdff05dbad9e12551b0896922e375f9e5589368bcb2cc303bde252743b74460cb5caf99629325d3620f13adc796 8d4f83a5bfec05caf5910e0ce538ee9816ee18d0bd44c1d0da2a87715a23cd2733ad4d47552c6dc0eb397687d611dd19 a7b39a0a6a02823452d376533f39d35029867b3c9a6ad6bca181f18c54132d675613a700f9db2440fb1b4fa13c8bf18a 80bcb114b2544b80f404a200fc36860ed5e1ad31fe551acd4661d09730c452831751baa9b19d7d311600d267086a70bc 90dcce03c6f88fc2b08f2b42771eedde90cc5330fe0336e46c1a7d1b5a6c1641e5fcc4e7b3d5db00bd8afca9ec66ed81 aec15f40805065c98e2965b1ae12a6c9020cfdb094c2d0549acfc7ea2401a5fb48d3ea7d41133cf37c4e096e7ff53eb9 80e129b735dba49fa627a615d6c273119acec8e219b2f2c4373a332b5f98d66cbbdd688dfbe72a8f8bfefaccc02c50c1 a9b596da3bdfe23e6799ece5f7975bf7a1979a75f4f546deeaf8b34dfe3e0d623217cb4cf4ccd504cfa3625b88cd53f1 abcbbb70b16f6e517c0ab4363ab76b46e4ff58576b5f8340e5c0e8cc0e02621b6e23d742d73b015822a238b17cfd7665 a046937cc6ea6a2e1adae543353a9fe929c1ae4ad655be1cc051378482cf88b041e28b1e9a577e6ccff2d3570f55e200 831279437282f315e65a60184ef158f0a3dddc15a648dc552bdc88b3e6fe8288d3cfe9f0031846d81350f5e7874b4b33 993d7916fa213c6d66e7c4cafafc1eaec9a2a86981f91c31eb8a69c5df076c789cbf498a24c84e0ee77af95b42145026 823907a3b6719f8d49b3a4b7c181bd9bb29fcf842d7c70660c4f351852a1e197ca46cf5e879b47fa55f616fa2b87ce5e 8d228244e26132b234930ee14c75d88df0943cdb9c276a8faf167d259b7efc1beec2a87c112a6c608ad1600a239e9aae ab6e55766e5bfb0cf0764ed909a8473ab5047d3388b4f46faeba2d1425c4754c55c6daf6ad4751e634c618b53e549529 ab0cab6860e55a84c5ad2948a7e0989e2b4b1fd637605634b118361497332df32d9549cb854b2327ca54f2bcb85eed8f b086b349ae03ef34f4b25a57bcaa5d1b29bd94f9ebf87e22be475adfe475c51a1230c1ebe13506cb72c4186192451658 8a0b49d8a254ca6d91500f449cbbfbb69bb516c6948ac06808c65595e46773e346f97a5ce0ef7e5a5e0de278af22709c ac49de11edaaf04302c73c578cc0824bdd165c0d6321be1c421c1950e68e4f3589aa3995448c9699e93c6ebae8803e27 884f02d841cb5d8f4c60d1402469216b114ab4e93550b5bc1431756e365c4f870a9853449285384a6fa49e12ce6dc654 b75f3a28fa2cc8d36b49130cb7448a23d73a7311d0185ba803ad55c8219741d451c110f48b786e96c728bc525903a54f 80ae04dbd41f4a35e33f9de413b6ad518af0919e5a30cb0fa1b061b260420780bb674f828d37fd3b52b5a31673cbd803 b9a8011eb5fcea766907029bf743b45262db3e49d24f84503687e838651ed11cb64c66281e20a0ae9f6aa51acc552263 90bfdd75e2dc9cf013e22a5d55d2d2b8a754c96103a17524488e01206e67f8b6d52b1be8c4e3d5307d4fe06d0e51f54c b4af353a19b06203a815ec43e79a88578cc678c46f5a954b85bc5c53b84059dddba731f3d463c23bfd5273885c7c56a4 aa125e96d4553b64f7140e5453ff5d2330318b69d74d37d283e84c26ad672fa00e3f71e530eb7e28be1e94afb9c4612e a18e060aee3d49cde2389b10888696436bb7949a79ca7d728be6456a356ea5541b55492b2138da90108bd1ce0e6f5524 93e55f92bdbccc2de655d14b1526836ea2e52dba65eb3f87823dd458a4cb5079bf22ce6ef625cb6d6bfdd0995ab9a874 89f5a683526b90c1c3ceebbb8dc824b21cff851ce3531b164f6626e326d98b27d3e1d50982e507d84a99b1e04e86a915 83d1c38800361633a3f742b1cb2bfc528129496e80232611682ddbe403e92c2ac5373aea0bca93ecb5128b0b2b7a719e 8ecba560ac94905e19ce8d9c7af217bf0a145d8c8bd38e2db82f5e94cc3f2f26f55819176376b51f154b4aab22056059 a7e2a4a002b60291924850642e703232994acb4cfb90f07c94d1e0ecd2257bb583443283c20fc6017c37e6bfe85b7366 93ed7316fa50b528f1636fc6507683a672f4f4403e55e94663f91221cc198199595bd02eef43d609f451acc9d9b36a24 a1220a8ebc5c50ceed76a74bc3b7e0aa77f6884c71b64b67c4310ac29ce5526cb8992d6abc13ef6c8413ce62486a6795 b2f6eac5c869ad7f4a25161d3347093e2f70e66cd925032747e901189355022fab3038bca4d610d2f68feb7e719c110b b703fa11a4d511ca01c7462979a94acb40b5d933759199af42670eb48f83df202fa0c943f6ab3b4e1cc54673ea3aab1e b5422912afbfcb901f84791b04f1ddb3c3fbdc76d961ee2a00c5c320e06d3cc5b5909c3bb805df66c5f10c47a292b13d ad0934368da823302e1ac08e3ede74b05dfdbfffca203e97ffb0282c226814b65c142e6e15ec1e754518f221f01b30f7 a1dd302a02e37df15bf2f1147efe0e3c06933a5a767d2d030e1132f5c3ce6b98e216b6145eb39e1e2f74e76a83165b8d a346aab07564432f802ae44738049a36f7ca4056df2d8f110dbe7fef4a3e047684dea609b2d03dc6bf917c9c2a47608f b96c5f682a5f5d02123568e50f5d0d186e4b2c4c9b956ec7aabac1b3e4a766d78d19bd111adb5176b898e916e49be2aa 8a96676d56876fc85538db2e806e1cba20fd01aeb9fa3cb43ca6ca94a2c102639f65660db330e5d74a029bb72d6a0b39 ab0048336bd5c3def1a4064eadd49e66480c1f2abb4df46e03afbd8a3342c2c9d74ee35d79f08f4768c1646681440984 888427bdf76caec90814c57ee1c3210a97d107dd88f7256f14f883ad0f392334b82be11e36dd8bfec2b37935177c7831 b622b282becf0094a1916fa658429a5292ba30fb48a4c8066ce1ddcefb71037948262a01c95bab6929ed3a76ba5db9fe b5b9e005c1f456b6a368a3097634fb455723abe95433a186e8278dceb79d4ca2fbe21f8002e80027b3c531e5bf494629 a3c6707117a1e48697ed41062897f55d8119403eea6c2ee88f60180f6526f45172664bfee96bf61d6ec0b7fbae6aa058 b02a9567386a4fbbdb772d8a27057b0be210447348efe6feb935ceec81f361ed2c0c211e54787dc617cdffed6b4a6652 a9b8364e40ef15c3b5902e5534998997b8493064fa2bea99600def58279bb0f64574c09ba11e9f6f669a8354dd79dc85 9998a2e553a9aa9a206518fae2bc8b90329ee59ab23005b10972712389f2ec0ee746033c733092ffe43d73d33abbb8ef 843a4b34d9039bf79df96d79f2d15e8d755affb4d83d61872daf540b68c0a3888cf8fc00d5b8b247b38524bcb3b5a856 84f7128920c1b0bb40eee95701d30e6fc3a83b7bb3709f16d97e72acbb6057004ee7ac8e8f575936ca9dcb7866ab45f7 918d3e2222e10e05edb34728162a899ad5ada0aaa491aeb7c81572a9c0d506e31d5390e1803a91ff3bd8e2bb15d47f31 9442d18e2489613a7d47bb1cb803c8d6f3259d088cd079460976d87f7905ee07dea8f371b2537f6e1d792d36d7e42723 b491976970fe091995b2ed86d629126523ccf3e9daf8145302faca71b5a71a5da92e0e05b62d7139d3efac5c4e367584 aa628006235dc77c14cef4c04a308d66b07ac92d377df3de1a2e6ecfe3144f2219ad6d7795e671e1cb37a3641910b940 99d386adaea5d4981d7306feecac9a555b74ffdc218c907c5aa7ac04abaead0ec2a8237300d42a3fbc464673e417ceed 8f78e8b1556f9d739648ea3cab9606f8328b52877fe72f9305545a73b74d49884044ba9c1f1c6db7d9b7c7b7c661caba 8fb357ae49932d0babdf74fc7aa7464a65d3b6a2b3acf4f550b99601d3c0215900cfd67f2b6651ef94cfc323bac79fae 9906f2fa25c0290775aa001fb6198113d53804262454ae8b83ef371b5271bde189c0460a645829cb6c59f9ee3a55ce4d 8f4379b3ebb50e052325b27655ca6a82e6f00b87bf0d2b680d205dd2c7afdc9ff32a9047ae71a1cdf0d0ce6b9474d878 a85534e88c2bd43c043792eaa75e50914b21741a566635e0e107ae857aed0412035f7576cf04488ade16fd3f35fdbb87 b4ce93199966d3c23251ca7f28ec5af7efea1763d376b0385352ffb2e0a462ef95c69940950278cf0e3dafd638b7bd36 b10cb3d0317dd570aa73129f4acf63c256816f007607c19b423fb42f65133ce21f2f517e0afb41a5378cccf893ae14d0 a9b231c9f739f7f914e5d943ed9bff7eba9e2c333fbd7c34eb1648a362ee01a01af6e2f7c35c9fe962b11152cddf35de 99ff6a899e156732937fb81c0cced80ae13d2d44c40ba99ac183aa246103b31ec084594b1b7feb96da58f4be2dd5c0ed 8748d15d18b75ff2596f50d6a9c4ce82f61ecbcee123a6ceae0e43cab3012a29b6f83cf67b48c22f6f9d757c6caf76b2 b88ab05e4248b7fb634cf640a4e6a945d13e331237410f7217d3d17e3e384ddd48897e7a91e4516f1b9cbd30f35f238b 8d826deaeeb84a3b2d2c04c2300ca592501f992810582d6ae993e0d52f6283a839dba66c6c72278cff5871802b71173b b36fed027c2f05a5ef625ca00b0364b930901e9e4420975b111858d0941f60e205546474bb25d6bfa6928d37305ae95f af2fcfc6b87967567e8b8a13a4ed914478185705724e56ce68fb2df6d1576a0cf34a61e880997a0d35dc2c3276ff7501 ac351b919cd1fbf106feb8af2c67692bfcddc84762d18cea681cfa7470a5644839caace27efee5f38c87d3df306f4211 8d6665fb1d4d8d1fa23bd9b8a86e043b8555663519caac214d1e3e3effbc6bee7f2bcf21e645f77de0ced279d69a8a8b a9fc1c2061756b2a1a169c1b149f212ff7f0d2488acd1c5a0197eba793cffa593fc6d1d1b40718aa75ca3ec77eff10e1 aff64f0fa009c7a6cf0b8d7a22ddb2c8170c3cb3eec082e60d5aadb00b0040443be8936d728d99581e33c22178c41c87 82e0b181adc5e3b1c87ff8598447260e839d53debfae941ebea38265575546c3a74a14b4325a030833a62ff6c52d9365 b7ad43cbb22f6f892c2a1548a41dc120ab1f4e1b8dea0cb6272dd9cb02054c542ecabc582f7e16de709d48f5166cae86 985e0c61094281532c4afb788ecb2dfcba998e974b5d4257a22040a161883908cdd068fe80f8eb49b8953cfd11acf43a ae46895c6d67ea6d469b6c9c07b9e5d295d9ae73b22e30da4ba2c973ba83a130d7eef39717ec9d0f36e81d56bf742671 8600177ea1f7e7ef90514b38b219a37dedfc39cb83297e4c7a5b479817ef56479d48cf6314820960c751183f6edf8b0e b9208ec1c1d7a1e99b59c62d3e4e61dfb706b0e940d09d3abfc3454c19749083260614d89cfd7e822596c3cdbcc6bb95 a1e94042c796c2b48bc724352d2e9f3a22291d9a34705993357ddb6adabd76da6fc25dac200a8cb0b5bbd99ecddb7af6 b29c3adedd0bcad8a930625bc4dfdc3552a9afd5ca6dd9c0d758f978068c7982b50b711aa0eb5b97f2b84ee784637835 af0632a238bb1f413c7ea8e9b4c3d68f2827bd2e38cd56024391fba6446ac5d19a780d0cfd4a78fe497d537b766a591a aaf6e7f7d54f8ef5e2e45dd59774ecbeecf8683aa70483b2a75be6a6071b5981bbaf1627512a65d212817acdfab2e428 8c751496065da2e927cf492aa5ca9013b24f861d5e6c24b30bbf52ec5aaf1905f40f9a28175faef283dd4ed4f2182a09 8952377d8e80a85cf67d6b45499f3bad5fd452ea7bcd99efc1b066c4720d8e5bff1214cea90fd1f972a7f0baac3d29be a1946ee543d1a6e21f380453be4d446e4130950c5fc3d075794eb8260f6f52d0a795c1ff91d028a648dc1ce7d9ab6b47 89f3fefe37af31e0c17533d2ca1ce0884cc1dc97c15cbfab9c331b8debd94781c9396abef4bb2f163d09277a08d6adf0 a2753f1e6e1a154fb117100a5bd9052137add85961f8158830ac20541ab12227d83887d10acf7fd36dcaf7c2596d8d23 814955b4198933ee11c3883863b06ff98c7eceb21fc3e09df5f916107827ccf3323141983e74b025f46ae00284c9513b 8cc5c6bb429073bfef47cae7b3bfccb0ffa076514d91a1862c6bda4d581e0df87db53cc6c130bf8a7826304960f5a34e 909f22c1f1cdc87f7be7439c831a73484a49acbf8f23d47087d7cf867c64ef61da3bde85dc57d705682b4c3fc710d36e 8048fee7f276fcd504aed91284f28e73693615e0eb3858fa44bcf79d7285a9001c373b3ef71d9a3054817ba293ebe28c 94400e5cf5d2700ca608c5fe35ce14623f71cc24959f2bc27ca3684092850f76b67fb1f07ca9e5b2ca3062cf8ad17bd4 81c2ae7d4d1b17f8b6de6a0430acc0d58260993980fe48dc2129c4948269cdc74f9dbfbf9c26b19360823fd913083d48 8c41fe765128e63f6889d6a979f6a4342300327c8b245a8cfe3ecfbcac1e09c3da30e2a1045b24b78efc6d6d50c8c6ac a5dd4ae51ae48c8be4b218c312ade226cffce671cf121cb77810f6c0990768d6dd767badecb5c69921d5574d5e8433d3 b7642e325f4ba97ae2a39c1c9d97b35aafd49d53dba36aed3f3cb0ca816480b3394079f46a48252d46596559c90f4d58 ae87375b40f35519e7bd4b1b2f73cd0b329b0c2cb9d616629342a71c6c304338445eda069b78ea0fbe44087f3de91e09 b08918cb6f736855e11d3daca1ddfbdd61c9589b203b5493143227bf48e2c77c2e8c94b0d1aa2fab2226e0eae83f2681 ac36b84a4ac2ebd4d6591923a449c564e3be8a664c46092c09e875c2998eba16b5d32bfd0882fd3851762868e669f0b1 a44800a3bb192066fa17a3f29029a23697240467053b5aa49b9839fb9b9b8b12bcdcbfc557f024b61f4f51a9aacdefcb 9064c688fec23441a274cdf2075e5a449caf5c7363cc5e8a5dc9747183d2e00a0c69f2e6b3f6a7057079c46014c93b3b aa367b021469af9f5b764a79bb3afbe2d87fe1e51862221672d1a66f954b165778b7c27a705e0f93841fab4c8468344d a1a8bfc593d4ab71f91640bc824de5c1380ab2591cfdafcbc78a14b32de3c0e15f9d1b461d85c504baa3d4232c16bb53 97df48da1799430f528184d30b6baa90c2a2f88f34cdfb342d715339c5ebd6d019aa693cea7c4993daafc9849063a3aa abd923831fbb427e06e0dd335253178a9e5791395c84d0ab1433c07c53c1209161097e9582fb8736f8a60bde62d8693e 84cd1a43f1a438b43dc60ffc775f646937c4f6871438163905a3cebf1115f814ccd38a6ccb134130bff226306e412f32 91426065996b0743c5f689eb3ca68a9f7b9e4d01f6c5a2652b57fa9a03d8dc7cd4bdbdab0ca5a891fee1e97a7f00cf02 a4bee50249db3df7fd75162b28f04e57c678ba142ce4d3def2bc17bcb29e4670284a45f218dad3969af466c62a903757 83141ebcc94d4681404e8b67a12a46374fded6df92b506aff3490d875919631408b369823a08b271d006d5b93136f317 a0ea1c8883d58d5a784da3d8c8a880061adea796d7505c1f903d07c287c5467f71e4563fc0faafbc15b5a5538b0a7559 89d9d480574f201a87269d26fb114278ed2c446328df431dc3556e3500e80e4cd01fcac196a2459d8646361ebda840df 8bf302978973632dd464bec819bdb91304712a3ec859be071e662040620422c6e75eba6f864f764cffa2799272efec39 922f666bc0fd58b6d7d815c0ae4f66d193d32fc8382c631037f59eeaeae9a8ca6c72d08e72944cf9e800b8d639094e77 81ad8714f491cdff7fe4399f2eb20e32650cff2999dd45b9b3d996d54a4aba24cc6c451212e78c9e5550368a1a38fb3f b58fcf4659d73edb73175bd9139d18254e94c3e32031b5d4b026f2ed37aa19dca17ec2eb54c14340231615277a9d347e b365ac9c2bfe409b710928c646ea2fb15b28557e0f089d39878e365589b9d1c34baf5566d20bb28b33bb60fa133f6eff 8fcae1d75b53ab470be805f39630d204853ca1629a14158bac2f52632277d77458dec204ff84b7b2d77e641c2045be65 a03efa6bebe84f4f958a56e2d76b5ba4f95dd9ed7eb479edc7cc5e646c8d4792e5b0dfc66cc86aa4b4afe2f7a4850760 af1c823930a3638975fb0cc5c59651771b2719119c3cd08404fbd4ce77a74d708cefbe3c56ea08c48f5f10e6907f338f 8260c8299b17898032c761c325ac9cabb4c5b7e735de81eacf244f647a45fb385012f4f8df743128888c29aefcaaad16 ab2f37a573c82e96a8d46198691cd694dfa860615625f477e41f91b879bc58a745784fccd8ffa13065834ffd150d881d 986c746c9b4249352d8e5c629e8d7d05e716b3c7aab5e529ca969dd1e984a14b5be41528baef4c85d2369a42d7209216 b25e32da1a8adddf2a6080725818b75bc67240728ad1853d90738485d8924ea1e202df0a3034a60ffae6f965ec55cf63 a266e627afcebcefea6b6b44cbc50f5c508f7187e87d047b0450871c2a030042c9e376f3ede0afcf9d1952f089582f71 86c3bbca4c0300606071c0a80dbdec21ce1dd4d8d4309648151c420854032dff1241a1677d1cd5de4e4de4385efda986 b9a21a1fe2d1f3273a8e4a9185abf2ff86448cc98bfa435e3d68306a2b8b4a6a3ea33a155be3cb62a2170a86f77679a5 b117b1ea381adce87d8b342cba3a15d492ff2d644afa28f22424cb9cbc820d4f7693dfc1a4d1b3697046c300e1c9b4c8 9004c425a2e68870d6c69b658c344e3aa3a86a8914ee08d72b2f95c2e2d8a4c7bb0c6e7e271460c0e637cec11117bf8e 86a18aa4783b9ebd9131580c8b17994825f27f4ac427b0929a1e0236907732a1c8139e98112c605488ee95f48bbefbfc 84042243b955286482ab6f0b5df4c2d73571ada00716d2f737ca05a0d2e88c6349e8ee9e67934cfee4a1775dbf7f4800 92c2153a4733a62e4e1d5b60369f3c26777c7d01cd3c8679212660d572bd3bac9b8a8a64e1f10f7dbf5eaa7579c4e423 918454b6bb8e44a2afa144695ba8d48ae08d0cdfef4ad078f67709eddf3bb31191e8b006f04e82ea45a54715ef4d5817 acf0b54f6bf34cf6ed6c2b39cf43194a40d68de6bcf1e4b82c34c15a1343e9ac3737885e1a30b78d01fa3a5125463db8 a7d60dbe4b6a7b054f7afe9ee5cbbfeca0d05dc619e6041fa2296b549322529faddb8a11e949562309aecefb842ac380 91ffb53e6d7e5f11159eaf13e783d6dbdfdb1698ed1e6dbf3413c6ea23492bbb9e0932230a9e2caac8fe899a17682795 b6e8d7be5076ee3565d5765a710c5ecf17921dd3cf555c375d01e958a365ae087d4a88da492a5fb81838b7b92bf01143 a8c6b763de2d4b2ed42102ef64eccfef31e2fb2a8a2776241c82912fa50fc9f77f175b6d109a97ede331307c016a4b1a 99839f86cb700c297c58bc33e28d46b92931961548deac29ba8df91d3e11721b10ea956c8e16984f9e4acf1298a79b37 8c2e2c338f25ea5c25756b7131cde0d9a2b35abf5d90781180a00fe4b8e64e62590dc63fe10a57fba3a31c76d784eb01 9687d7df2f41319ca5469d91978fed0565a5f11f829ebadaa83db92b221755f76c6eacd7700735e75c91e257087512e3 8795fdfb7ff8439c58b9bf58ed53873d2780d3939b902b9ddaaa4c99447224ced9206c3039a23c2c44bcc461e2bb637f a803697b744d2d087f4e2307218d48fa88620cf25529db9ce71e2e3bbcc65bac5e8bb9be04777ef7bfb5ed1a5b8e6170 80f3d3efbbb9346ddd413f0a8e36b269eb5d7ff6809d5525ff9a47c4bcab2c01b70018b117f6fe05253775612ff70c6b 9050e0e45bcc83930d4c505af35e5e4d7ca01cd8681cba92eb55821aececcebe32bb692ebe1a4daac4e7472975671067 8d206812aac42742dbaf233e0c080b3d1b30943b54b60283515da005de05ea5caa90f91fedcfcba72e922f64d7040189 a2d44faaeb2eff7915c83f32b13ca6f31a6847b1c1ce114ea240bac3595eded89f09b2313b7915ad882292e2b586d5b4 961776c8576030c39f214ea6e0a3e8b3d32f023d2600958c098c95c8a4e374deeb2b9dc522adfbd6bda5949bdc09e2a2 993fa7d8447407af0fbcd9e6d77f815fa5233ab00674efbcf74a1f51c37481445ae291cc7b76db7c178f9cb0e570e0fc abd5b1c78e05f9d7c8cc99bdaef8b0b6a57f2daf0f02bf492bec48ea4a27a8f1e38b5854da96efff11973326ff980f92 8f15af4764bc275e6ccb892b3a4362cacb4e175b1526a9a99944e692fe6ccb1b4fc19abf312bb2a089cb1f344d91a779 a09b27ccd71855512aba1d0c30a79ffbe7f6707a55978f3ced50e674b511a79a446dbc6d7946add421ce111135a460af 94b2f98ce86a9271fbd4153e1fc37de48421fe3490fb3840c00f2d5a4d0ba8810c6a32880b002f6374b59e0a7952518b 8650ac644f93bbcb88a6a0f49fee2663297fd4bc6fd47b6a89b9d8038d32370438ab3a4775ec9b58cb10aea8a95ef7b6 95e5c2f2e84eed88c6980bbba5a1c0bb375d5a628bff006f7516d45bb7d723da676add4fdd45956f312e7bab0f052644 b3278a3fa377ac93af7cfc9453f8cb594aae04269bbc99d2e0e45472ff4b6a2f97a26c4c57bf675b9d86f5e77a5d55d1 b4bcbe6eb666a206e2ea2f877912c1d3b5bdbd08a989fc4490eb06013e1a69ad1ba08bcdac048bf29192312be399077b a76d70b78c99fffcbf9bb9886eab40f1ea4f99a309710b660b64cbf86057cbcb644d243f6e341711bb7ef0fedf0435a7 b2093c1ee945dca7ac76ad5aed08eae23af31dd5a77c903fd7b6f051f4ab84425d33a03c3d45bf2907bc93c02d1f3ad8 904b1f7534e053a265b22d20be859912b9c9ccb303af9a8d6f1d8f6ccdc5c53eb4a45a1762b880d8444d9be0cd55e7f9 8f664a965d65bc730c9ef1ec7467be984d4b8eb46bd9b0d64e38e48f94e6e55dda19aeac82cbcf4e1473440e64c4ca18 8bcee65c4cc7a7799353d07b114c718a2aae0cd10a3f22b7eead5185d159dafd64852cb63924bf87627d176228878bce 8c78f2e3675096fef7ebaa898d2615cd50d39ca3d8f02b9bdfb07e67da648ae4be3da64838dffc5935fd72962c4b96c7 8c40afd3701629421fec1df1aac4e849384ef2e80472c0e28d36cb1327acdf2826f99b357f3d7afdbc58a6347fc40b3c a197813b1c65a8ea5754ef782522a57d63433ef752215ecda1e7da76b0412ee619f58d904abd2e07e0c097048b6ae1dd a670542629e4333884ad7410f9ea3bd6f988df4a8f8a424ca74b9add2312586900cf9ae8bd50411f9146e82626b4af56 a19875cc07ab84e569d98b8b67fb1dbbdfb59093c7b748fae008c8904a6fd931a63ca8d03ab5fea9bc8d263568125a9b b57e7f68e4eb1bd04aafa917b1db1bdab759a02aa8a9cdb1cba34ba8852b5890f655645c9b4e15d5f19bf37e9f2ffe9f 8abe4e2a4f6462b6c64b3f10e45db2a53c2b0d3c5d5443d3f00a453e193df771eda635b098b6c8604ace3557514027af 8459e4fb378189b22b870a6ef20183deb816cefbf66eca1dc7e86d36a2e011537db893729f500dc154f14ce24633ba47 930851df4bc7913c0d8c0f7bd3b071a83668987ed7c397d3d042fdc0d9765945a39a3bae83da9c88cb6b686ed8aeeb26 8078c9e5cd05e1a8c932f8a1d835f61a248b6e7133fcbb3de406bf4ffc0e584f6f9f95062740ba6008d98348886cf76b addff62bb29430983fe578e3709b0949cdc0d47a13a29bc3f50371a2cb5c822ce53e2448cfaa01bcb6e0aa850d5a380e 9433add687b5a1e12066721789b1db2edf9b6558c3bdc0f452ba33b1da67426abe326e9a34d207bfb1c491c18811bde1 822beda3389963428cccc4a2918fa9a8a51cf0919640350293af70821967108cded5997adae86b33cb917780b097f1ca a7a9f52bda45e4148ed56dd176df7bd672e9b5ed18888ccdb405f47920fdb0844355f8565cefb17010b38324edd8315f b35c3a872e18e607b2555c51f9696a17fa18da1f924d503b163b4ec9fe22ed0c110925275cb6c93ce2d013e88f173d6a adf34b002b2b26ab84fc1bf94e05bd8616a1d06664799ab149363c56a6e0c807fdc473327d25632416e952ea327fcd95 ae4a6b9d22a4a3183fac29e2551e1124a8ce4a561a9a2afa9b23032b58d444e6155bb2b48f85c7b6d70393274e230db7 a2ea3be4fc17e9b7ce3110284038d46a09e88a247b6971167a7878d9dcf36925d613c382b400cfa4f37a3ebea3699897 8e5863786b641ce3140fbfe37124d7ad3925472e924f814ebfc45959aaf3f61dc554a597610b5defaecc85b59a99b50f aefde3193d0f700d0f515ab2aaa43e2ef1d7831c4f7859f48e52693d57f97fa9e520090f3ed700e1c966f4b76048e57f 841a50f772956622798e5cd208dc7534d4e39eddee30d8ce133383d66e5f267e389254a0cdae01b770ecd0a9ca421929 8fbc2bfd28238c7d47d4c03b1b910946c0d94274a199575e5b23242619b1de3497784e646a92aa03e3e24123ae4fcaba 926999579c8eec1cc47d7330112586bdca20b4149c8b2d066f527c8b9f609e61ce27feb69db67eea382649c6905efcf9 b09f31f305efcc65589adf5d3690a76cf339efd67cd43a4e3ced7b839507466e4be72dd91f04e89e4bbef629d46e68c0 b917361f6b95f759642638e0b1d2b3a29c3bdef0b94faa30de562e6078c7e2d25976159df3edbacbf43614635c2640b4 8e7e8a1253bbda0e134d62bfe003a2669d471b47bd2b5cde0ff60d385d8e62279d54022f5ac12053b1e2d3aaa6910b4c b69671a3c64e0a99d90b0ed108ce1912ff8ed983e4bddd75a370e9babde25ee1f5efb59ec707edddd46793207a8b1fe7 910b2f4ebd37b7ae94108922b233d0920b4aba0bd94202c70f1314418b548d11d8e9caa91f2cd95aff51b9432d122b7f 82f645c90dfb52d195c1020346287c43a80233d3538954548604d09fbab7421241cde8593dbc4acc4986e0ea39a27dd9 8fee895f0a140d88104ce442fed3966f58ff9d275e7373483f6b4249d64a25fb5374bbdc6bce6b5ab0270c2847066f83 84f5bd7aab27b2509397aeb86510dd5ac0a53f2c8f73799bf720f2f87a52277f8d6b0f77f17bc80739c6a7119b7eb062 9903ceced81099d7e146e661bcf01cbaccab5ba54366b85e2177f07e2d8621e19d9c9c3eee14b9266de6b3f9b6ea75ae b9c16ea2a07afa32dd6c7c06df0dec39bca2067a9339e45475c98917f47e2320f6f235da353fd5e15b477de97ddc68dd 9820a9bbf8b826bec61ebf886de2c4f404c1ebdc8bab82ee1fea816d9de29127ce1852448ff717a3fe8bbfe9e92012e5 817224d9359f5da6f2158c2c7bf9165501424f063e67ba9859a07ab72ee2ee62eb00ca6da821cfa19065c3282ca72c74 94b95c465e6cb00da400558a3c60cfec4b79b27e602ca67cbc91aead08de4b6872d8ea096b0dc06dca4525c8992b8547 a2b539a5bccd43fa347ba9c15f249b417997c6a38c63517ca38394976baa08e20be384a360969ff54e7e721db536b3e5 96caf707e34f62811ee8d32ccf28d8d6ec579bc33e424d0473529af5315c456fd026aa910c1fed70c91982d51df7d3ca 8a77b73e890b644c6a142bdbac59b22d6a676f3b63ddafb52d914bb9d395b8bf5aedcbcc90429337df431ebd758a07a6 8857830a7351025617a08bc44caec28d2fae07ebf5ffc9f01d979ce2a53839a670e61ae2783e138313929129790a51a1 aa3e420321ed6f0aa326d28d1a10f13facec6f605b6218a6eb9cbc074801f3467bf013a456d1415a5536f12599efa3d3 824aed0951957b00ea2f3d423e30328a3527bf6714cf9abbae84cf27e58e5c35452ba89ccc011de7c68c75d6e021d8f1 a2e87cc06bf202e953fb1081933d8b4445527dde20e38ed1a4f440144fd8fa464a2b73e068b140562e9045e0f4bd3144 ae3b8f06ad97d7ae3a5e5ca839efff3e4824dc238c0c03fc1a8d2fc8aa546cdfd165b784a31bb4dec7c77e9305b99a4b b30c3e12395b1fb8b776f3ec9f87c70e35763a7b2ddc68f0f60a4982a84017f27c891a98561c830038deb033698ed7fc 874e507757cd1177d0dff0b0c62ce90130324442a33da3b2c8ee09dbca5d543e3ecfe707e9f1361e7c7db641c72794bb b53012dd10b5e7460b57c092eaa06d6502720df9edbbe3e3f61a9998a272bf5baaac4a5a732ad4efe35d6fac6feca744 85e6509d711515534d394e6cacbed6c81da710074d16ef3f4950bf2f578d662a494d835674f79c4d6315bced4defc5f0 b6132b2a34b0905dcadc6119fd215419a7971fe545e52f48b768006944b4a9d7db1a74b149e2951ea48c083b752d0804 989867da6415036d19b4bacc926ce6f4df7a556f50a1ba5f3c48eea9cefbb1c09da81481c8009331ee83f0859185e164 960a6c36542876174d3fbc1505413e29f053ed87b8d38fef3af180491c7eff25200b45dd5fe5d4d8e63c7e8c9c00f4c8 9040b59bd739d9cc2e8f6e894683429e4e876a8106238689ff4c22770ae5fdae1f32d962b30301fa0634ee163b524f35 af3fcd0a45fe9e8fe256dc7eab242ef7f582dd832d147444483c62787ac820fafc6ca55d639a73f76bfa5e7f5462ab8f b934c799d0736953a73d91e761767fdb78454355c4b15c680ce08accb57ccf941b13a1236980001f9e6195801cffd692 8871e8e741157c2c326b22cf09551e78da3c1ec0fc0543136f581f1550f8bab03b0a7b80525c1e99812cdbf3a9698f96 a8a977f51473a91d178ee8cfa45ffef8d6fd93ab1d6e428f96a3c79816d9c6a93cd70f94d4deda0125fd6816e30f3bea a7688b3b0a4fc1dd16e8ba6dc758d3cfe1b7cf401c31739484c7fa253cce0967df1b290769bcefc9d23d3e0cb19e6218 8ae84322662a57c6d729e6ff9d2737698cc2da2daeb1f39e506618750ed23442a6740955f299e4a15dda6db3e534d2c6 a04a961cdccfa4b7ef83ced17ab221d6a043b2c718a0d6cc8e6f798507a31f10bf70361f70a049bc8058303fa7f96864 b463e39732a7d9daec8a456fb58e54b30a6e160aa522a18b9a9e836488cce3342bcbb2e1deab0f5e6ec0a8796d77197d b1434a11c6750f14018a2d3bcf94390e2948f4f187e93bb22070ca3e5393d339dc328cbfc3e48815f51929465ffe7d81 84ff81d73f3828340623d7e3345553610aa22a5432217ef0ebd193cbf4a24234b190c65ca0873c22d10ea7b63bd1fbed b6fe2723f0c47757932c2ddde7a4f8434f665612f7b87b4009c2635d56b6e16b200859a8ade49276de0ef27a2b6c970a 9742884ed7cd52b4a4a068a43d3faa02551a424136c85a9313f7cb58ea54c04aa83b0728fd741d1fe39621e931e88f8f b7d2d65ea4d1ad07a5dee39e40d6c03a61264a56b1585b4d76fc5b2a68d80a93a42a0181d432528582bf08d144c2d6a9 88c0f66bada89f8a43e5a6ead2915088173d106c76f724f4a97b0f6758aed6ae5c37c373c6b92cdd4aea8f6261f3a374 81f9c43582cb42db3900747eb49ec94edb2284999a499d1527f03315fd330e5a509afa3bff659853570e9886aab5b28b 821f9d27d6beb416abf9aa5c79afb65a50ed276dbda6060103bc808bcd34426b82da5f23e38e88a55e172f5c294b4d40 8ba307b9e7cb63a6c4f3851b321aebfdb6af34a5a4c3bd949ff7d96603e59b27ff4dc4970715d35f7758260ff942c9e9 b142eb6c5f846de33227d0bda61d445a7c33c98f0a8365fe6ab4c1fabdc130849be597ef734305894a424ea715372d08 a732730ae4512e86a741c8e4c87fee8a05ee840fec0e23b2e037d58dba8dde8d10a9bc5191d34d00598941becbbe467f adce6f7c30fd221f6b10a0413cc76435c4bb36c2d60bca821e5c67409fe9dbb2f4c36ef85eb3d734695e4be4827e9fd3 a74f00e0f9b23aff7b2527ce69852f8906dab9d6abe62ecd497498ab21e57542e12af9918d4fd610bb09e10b0929c510 a593b6b0ef26448ce4eb3ab07e84238fc020b3cb10d542ff4b16d4e2be1bcde3797e45c9cf753b8dc3b0ffdb63984232 aed3913afccf1aa1ac0eb4980eb8426d0baccebd836d44651fd72af00d09fac488a870223c42aca3ceb39752070405ae b2c44c66a5ea7fde626548ba4cef8c8710191343d3dadfd3bb653ce715c0e03056a5303a581d47dde66e70ea5a2d2779 8e5029b2ccf5128a12327b5103f7532db599846e422531869560ceaff392236434d87159f597937dbf4054f810c114f4 82beed1a2c4477e5eb39fc5b0e773b30cfec77ef2b1bf17eadaf60eb35b6d0dd9d8cf06315c48d3546badb3f21cd0cca 90077bd6cc0e4be5fff08e5d07a5a158d36cebd1d1363125bc4fae0866ffe825b26f933d4ee5427ba5cd0c33c19a7b06 a7ec0d8f079970e8e34f0ef3a53d3e0e45428ddcef9cc776ead5e542ef06f3c86981644f61c5a637e4faf001fb8c6b3e ae6d4add6d1a6f90b22792bc9d40723ee6850c27d0b97eefafd5b7fd98e424aa97868b5287cc41b4fbd7023bca6a322c 831aa917533d077da07c01417feaa1408846363ba2b8d22c6116bb858a95801547dd88b7d7fa1d2e3f0a02bdeb2e103d 96511b860b07c8a5ed773f36d4aa9d02fb5e7882753bf56303595bcb57e37ccc60288887eb83bef08c657ec261a021a2 921d2a3e7e9790f74068623de327443666b634c8443aba80120a45bba450df920b2374d96df1ce3fb1b06dd06f8cf6e3 aa74451d51fe82b4581ead8e506ec6cd881010f7e7dd51fc388eb9a557db5d3c6721f81c151d08ebd9c2591689fbc13e a972bfbcf4033d5742d08716c927c442119bdae336bf5dff914523b285ccf31953da2733759aacaa246a9af9f698342c ad1fcd0cae0e76840194ce4150cb8a56ebed728ec9272035f52a799d480dfc85840a4d52d994a18b6edb31e79be6e8ad a2c69fe1d36f235215432dad48d75887a44c99dfa0d78149acc74087da215a44bdb5f04e6eef88ff7eff80a5a7decc77 a94ab2af2b6ee1bc6e0d4e689ca45380d9fbd3c5a65b9bd249d266a4d4c07bf5d5f7ef2ae6000623aee64027892bf8fe 881ec1fc514e926cdc66480ac59e139148ff8a2a7895a49f0dff45910c90cdda97b66441a25f357d6dd2471cddd99bb3 884e6d3b894a914c8cef946a76d5a0c8351843b2bffa2d1e56c6b5b99c84104381dd1320c451d551c0b966f4086e60f9 817c6c10ce2677b9fc5223500322e2b880583254d0bb0d247d728f8716f5e05c9ff39f135854342a1afecd9fbdcf7c46 aaf4a9cb686a14619aa1fc1ac285dd3843ac3dd99f2b2331c711ec87b03491c02f49101046f3c5c538dc9f8dba2a0ac2 97ecea5ce53ca720b5d845227ae61d70269a2f53540089305c86af35f0898bfd57356e74a8a5e083fa6e1ea70080bd31 a22d811e1a20a75feac0157c418a4bfe745ccb5d29466ffa854dca03e395b6c3504a734341746b2846d76583a780b32e 940cbaa0d2b2db94ae96b6b9cf2deefbfd059e3e5745de9aec4a25f0991b9721e5cd37ef71c631575d1a0c280b01cd5b ae33cb4951191258a11044682de861bf8d92d90ce751b354932dd9f3913f542b6a0f8a4dc228b3cd9244ac32c4582832 a580df5e58c4274fe0f52ac2da1837e32f5c9db92be16c170187db4c358f43e5cfdda7c5911dcc79d77a5764e32325f5 81798178cb9d8affa424f8d3be67576ba94d108a28ccc01d330c51d5a63ca45bb8ca63a2f569b5c5fe1303cecd2d777f 89975b91b94c25c9c3660e4af4047a8bacf964783010820dbc91ff8281509379cb3b24c25080d5a01174dd9a049118d5 a7327fcb3710ed3273b048650bde40a32732ef40a7e58cf7f2f400979c177944c8bc54117ba6c80d5d4260801dddab79 92b475dc8cb5be4b90c482f122a51bcb3b6c70593817e7e2459c28ea54a7845c50272af38119406eaadb9bcb993368d0 9645173e9ecefc4f2eae8363504f7c0b81d85f8949a9f8a6c01f2d49e0a0764f4eacecf3e94016dd407fc14494fce9f9 9215fd8983d7de6ae94d35e6698226fc1454977ae58d42d294be9aad13ac821562ad37d5e7ee5cdfe6e87031d45cd197 810360a1c9b88a9e36f520ab5a1eb8bed93f52deefbe1312a69225c0a08edb10f87cc43b794aced9c74220cefcc57e7d ad7e810efd61ed4684aeda9ed8bb02fb9ae4b4b63fda8217d37012b94ff1b91c0087043bfa4e376f961fff030c729f3b 8b07c95c6a06db8738d10bb03ec11b89375c08e77f0cab7e672ce70b2685667ca19c7e1c8b092821d31108ea18dfd4c7 968825d025ded899ff7c57245250535c732836f7565eab1ae23ee7e513201d413c16e1ba3f5166e7ac6cf74de8ceef4f 908243370c5788200703ade8164943ad5f8c458219186432e74dbc9904a701ea307fd9b94976c866e6c58595fd891c4b 959969d16680bc535cdc6339e6186355d0d6c0d53d7bbfb411641b9bf4b770fd5f575beef5deec5c4fa4d192d455c350 ad177f4f826a961adeac76da40e2d930748effff731756c797eddc4e5aa23c91f070fb69b19221748130b0961e68a6bb 82f8462bcc25448ef7e0739425378e9bb8a05e283ce54aae9dbebaf7a3469f57833c9171672ad43a79778366c72a5e37 a28fb275b1845706c2814d9638573e9bc32ff552ebaed761fe96fdbce70395891ca41c400ae438369264e31a2713b15f 8a9c613996b5e51dadb587a787253d6081ea446bf5c71096980bf6bd3c4b69905062a8e8a3792de2d2ece3b177a71089 8d5aefef9f60cb27c1db2c649221204dda48bb9bf8bf48f965741da051340e8e4cab88b9d15c69f3f84f4c854709f48a 93ebf2ca6ad85ab6deace6de1a458706285b31877b1b4d7dcb9d126b63047efaf8c06d580115ec9acee30c8a7212fa55 b3ee46ce189956ca298057fa8223b7fd1128cf52f39159a58bca03c71dd25161ac13f1472301f72aef3e1993fe1ab269 a24d7a8d066504fc3f5027ccb13120e2f22896860e02c45b5eba1dbd512d6a17c28f39155ea581619f9d33db43a96f92 ae9ceacbfe12137db2c1a271e1b34b8f92e4816bad1b3b9b6feecc34df0f8b3b0f7ed0133acdf59c537d43d33fc8d429 83967e69bf2b361f86361bd705dce0e1ad26df06da6c52b48176fe8dfcbeb03c462c1a4c9e649eff8c654b18c876fdef 9148e6b814a7d779c19c31e33a068e97b597de1f8100513db3c581190513edc4d544801ce3dd2cf6b19e0cd6daedd28a 94ccdafc84920d320ed22de1e754adea072935d3c5f8c2d1378ebe53d140ea29853f056fb3fb1e375846061a038cc9bc afb43348498c38b0fa5f971b8cdd3a62c844f0eb52bc33daf2f67850af0880fce84ecfb96201b308d9e6168a0d443ae3 86d5736520a83538d4cd058cc4b4e84213ed00ebd6e7af79ae787adc17a92ba5359e28ba6c91936d967b4b28d24c3070 b5210c1ff212c5b1e9ef9126e08fe120a41e386bb12c22266f7538c6d69c7fd8774f11c02b81fd4e88f9137b020801fe b78cfd19f94d24e529d0f52e18ce6185cb238edc6bd43086270fd51dd99f664f43dd4c7d2fe506762fbd859028e13fcf a6e7220598c554abdcc3fdc587b988617b32c7bb0f82c06205467dbedb58276cc07cae317a190f19d19078773f4c2bbb b88862809487ee430368dccd85a5d72fa4d163ca4aad15c78800e19c1a95be2192719801e315d86cff7795e0544a77e4 87ecb13a03921296f8c42ceb252d04716f10e09c93962239fcaa0a7fef93f19ab3f2680bc406170108bc583e9ff2e721 a810cd473832b6581c36ec4cb403f2849357ba2d0b54df98ef3004b8a530c078032922a81d40158f5fb0043d56477f6e a247b45dd85ca7fbb718b328f30a03f03c84aef2c583fbdc9fcc9eb8b52b34529e8c8f535505c10598b1b4dac3d7c647 96ee0b91313c68bac4aa9e065ce9e1d77e51ca4cff31d6a438718c58264dee87674bd97fc5c6b8008be709521e4fd008 837567ad073e42266951a9a54750919280a2ac835a73c158407c3a2b1904cf0d17b7195a393c71a18ad029cbd9cf79ee a6a469c44b67ebf02196213e7a63ad0423aab9a6e54acc6fcbdbb915bc043586993454dc3cd9e4be8f27d67c1050879b 8712d380a843b08b7b294f1f06e2f11f4ad6bcc655fdde86a4d8bc739c23916f6fad2b902fe47d6212f03607907e9f0e 920adfb644b534789943cdae1bdd6e42828dda1696a440af2f54e6b97f4f97470a1c6ea9fa6a2705d8f04911d055acd1 a161c73adf584a0061e963b062f59d90faac65c9b3a936b837a10d817f02fcabfa748824607be45a183dd40f991fe83f 874f4ecd408c76e625ea50bc59c53c2d930ee25baf4b4eca2440bfbffb3b8bc294db579caa7c68629f4d9ec24187c1ba 8bff18087f112be7f4aa654e85c71fef70eee8ae480f61d0383ff6f5ab1a0508f966183bb3fc4d6f29cb7ca234aa50d3 b03b46a3ca3bc743a173cbc008f92ab1aedd7466b35a6d1ca11e894b9482ea9dc75f8d6db2ddd1add99bfbe7657518b7 8b4f3691403c3a8ad9e097f02d130769628feddfa8c2b3dfe8cff64e2bed7d6e5d192c1e2ba0ac348b8585e94acd5fa1 a0d9ca4a212301f97591bf65d5ef2b2664766b427c9dd342e23cb468426e6a56be66b1cb41fea1889ac5d11a8e3c50a5 8c93ed74188ca23b3df29e5396974b9cc135c91fdefdea6c0df694c8116410e93509559af55533a3776ac11b228d69b1 82dd331fb3f9e344ebdeeb557769b86a2cc8cc38f6c298d7572a33aea87c261afa9dbd898989139b9fc16bc1e880a099 a65faedf326bcfd8ef98a51410c78b021d39206704e8291cd1f09e096a66b9b0486be65ff185ca224c45918ac337ddeb a188b37d363ac072a766fd5d6fa27df07363feff1342217b19e3c37385e42ffde55e4be8355aceaa2f267b6d66b4ac41 810fa3ba3e96d843e3bafd3f2995727f223d3567c8ba77d684c993ba1773c66551eb5009897c51b3fe9b37196984f5ec 87631537541852da323b4353af45a164f68b304d24c01183bf271782e11687f3fcf528394e1566c2a26cb527b3148e64 b721cb2b37b3c477a48e3cc0044167d51ff568a5fd2fb606e5aec7a267000f1ddc07d3db919926ae12761a8e017c767c 904dfad4ba2cc1f6e60d1b708438a70b1743b400164cd981f13c064b8328d5973987d4fb9cf894068f29d3deaf624dfb a70491538893552c20939fae6be2f07bfa84d97e2534a6bbcc0f1729246b831103505e9f60e97a8fa7d2e6c1c2384579 8726cf1b26b41f443ff7485adcfddc39ace2e62f4d65dd0bb927d933e262b66f1a9b367ded5fbdd6f3b0932553ac1735 ae8a11cfdf7aa54c08f80cb645e3339187ab3886babe9fae5239ba507bb3dd1c0d161ca474a2df081dcd3d63e8fe445e 92328719e97ce60e56110f30a00ac5d9c7a2baaf5f8d22355d53c1c77941e3a1fec7d1405e6fbf8959665fe2ba7a8cad 8d9d6255b65798d0018a8cccb0b6343efd41dc14ff2058d3eed9451ceaad681e4a0fa6af67b0a04318aa628024e5553d b70209090055459296006742d946a513f0cba6d83a05249ee8e7a51052b29c0ca9722dc4af5f9816a1b7938a5dac7f79 aab7b766b9bf91786dfa801fcef6d575dc6f12b77ecc662eb4498f0312e54d0de9ea820e61508fc8aeee5ab5db529349 a8104b462337748b7f086a135d0c3f87f8e51b7165ca6611264b8fb639d9a2f519926cb311fa2055b5fadf03da70c678 b0d2460747d5d8b30fc6c6bd0a87cb343ddb05d90a51b465e8f67d499cfc5e3a9e365da05ae233bbee792cdf90ec67d5 aa55f5bf3815266b4a149f85ed18e451c93de9163575e3ec75dd610381cc0805bb0a4d7c4af5b1f94d10231255436d2c 8d4c6a1944ff94426151909eb5b99cfd92167b967dabe2bf3aa66bb3c26c449c13097de881b2cfc1bf052862c1ef7b03 8862296162451b9b6b77f03bf32e6df71325e8d7485cf3335d66fd48b74c2a8334c241db8263033724f26269ad95b395 901aa96deb26cda5d9321190ae6624d357a41729d72ef1abfd71bebf6139af6d690798daba53b7bc5923462115ff748a 96c195ec4992728a1eb38cdde42d89a7bce150db43adbc9e61e279ea839e538deec71326b618dd39c50d589f78fc0614 b6ff8b8aa0837b99a1a8b46fb37f20ad4aecc6a98381b1308697829a59b8442ffc748637a88cb30c9b1f0f28a926c4f6 8d807e3dca9e7bef277db1d2cfb372408dd587364e8048b304eff00eacde2c723bfc84be9b98553f83cba5c7b3cba248 8800c96adb0195c4fc5b24511450dee503c32bf47044f5e2e25bd6651f514d79a2dd9b01cd8c09f3c9d3859338490f57 89fe366096097e38ec28dd1148887112efa5306cc0c3da09562aafa56f4eb000bf46ff79bf0bdd270cbde6bf0e1c8957 af409a90c2776e1e7e3760b2042507b8709e943424606e31e791d42f17873a2710797f5baaab4cc4a19998ef648556b0 8d761863c9b6edbd232d35ab853d944f5c950c2b643f84a1a1327ebb947290800710ff01dcfa26dc8e9828481240e8b1 90b95e9be1e55c463ed857c4e0617d6dc3674e99b6aa62ed33c8e79d6dfcf7d122f4f4cc2ee3e7c5a49170cb617d2e2e b3ff381efefabc4db38cc4727432e0301949ae4f16f8d1dea9b4f4de611cf5a36d84290a0bef160dac4e1955e516b3b0 a8a84564b56a9003adcadb3565dc512239fc79572762cda7b5901a255bc82656bb9c01212ad33d6bef4fbbce18dacc87 90a081890364b222eef54bf0075417f85e340d2fec8b7375995f598aeb33f26b44143ebf56fca7d8b4ebb36b5747b0eb ade6ee49e1293224ddf2d8ab7f14bb5be6bc6284f60fd5b3a1e0cf147b73cff57cf19763b8a36c5083badc79c606b103 b2fa99806dd2fa3de09320b615a2570c416c9bcdb052e592b0aead748bbe407ec9475a3d932ae48b71c2627eb81986a6 91f3b7b73c8ccc9392542711c45fe6f236057e6efad587d661ad5cb4d6e88265f86b807bb1151736b1009ab74fd7acb4 8800e2a46af96696dfbdcbf2ca2918b3dcf28ad970170d2d1783b52b8d945a9167d052beeb55f56c126da7ffa7059baa 9862267a1311c385956b977c9aa08548c28d758d7ba82d43dbc3d0a0fd1b7a221d39e8399997fea9014ac509ff510ac4 b7d24f78886fd3e2d283e18d9ad5a25c1a904e7d9b9104bf47da469d74f34162e27e531380dbbe0a9d051e6ffd51d6e7 b0f445f9d143e28b9df36b0f2c052da87ee2ca374d9d0fbe2eff66ca6fe5fe0d2c1951b428d58f7314b7e74e45d445ea b63fc4083eabb8437dafeb6a904120691dcb53ce2938b820bb553da0e1eecd476f72495aacb72600cf9cad18698fd3db b9ffd8108eaebd582d665f8690fe8bb207fd85185e6dd9f0b355a09bac1bbff26e0fdb172bc0498df025414e88fe2eda 967ed453e1f1a4c5b7b6834cc9f75c13f6889edc0cc91dc445727e9f408487bbf05c337103f61397a10011dfbe25d61d 98ceb673aff36e1987d5521a3984a07079c3c6155974bb8b413e8ae1ce84095fe4f7862fba7aefa14753eb26f2a5805f 85f01d28603a8fdf6ce6a50cb5c44f8a36b95b91302e3f4cd95c108ce8f4d212e73aec1b8d936520d9226802a2bd9136 88118e9703200ca07910345fbb789e7a8f92bd80bbc79f0a9e040e8767d33df39f6eded403a9b636eabf9101e588482a 90833a51eef1b10ed74e8f9bbd6197e29c5292e469c854eed10b0da663e2bceb92539710b1858bbb21887bd538d28d89 b513b905ec19191167c6193067b5cfdf5a3d3828375360df1c7e2ced5815437dfd37f0c4c8f009d7fb29ff3c8793f560 b1b6d405d2d18f9554b8a358cc7e2d78a3b34269737d561992c8de83392ac9a2857be4bf15de5a6c74e0c9d0f31f393c b828bd3e452b797323b798186607849f85d1fb20c616833c0619360dfd6b3e3aa000fd09dafe4b62d74abc41072ff1a9 8efde67d0cca56bb2c464731879c9ac46a52e75bac702a63200a5e192b4f81c641f855ca6747752b84fe469cb7113b6c b2762ba1c89ac3c9a983c242e4d1c2610ff0528585ed5c0dfc8a2c0253551142af9b59f43158e8915a1da7cc26b9df67 8a3f1157fb820d1497ef6b25cd70b7e16bb8b961b0063ad340d82a79ee76eb2359ca9e15e6d42987ed7f154f5eeaa2da a75e29f29d38f09c879f971c11beb5368affa084313474a5ecafa2896180b9e47ea1995c2733ec46f421e395a1d9cffe 8e8c3dd3e7196ef0b4996b531ec79e4a1f211db5d5635e48ceb80ff7568b2ff587e845f97ee703bb23a60945ad64314a 8e7f32f4a3e3c584af5e3d406924a0aa34024c42eca74ef6cc2a358fd3c9efaf25f1c03aa1e66bb94b023a2ee2a1cace ab7dce05d59c10a84feb524fcb62478906b3fa045135b23afbede3bb32e0c678d8ebe59feabccb5c8f3550ea76cae44b b38bb4b44d827f6fd3bd34e31f9186c59e312dbfadd4a7a88e588da10146a78b1f8716c91ad8b806beb8da65cab80c4c 9490ce9442bbbd05438c7f5c4dea789f74a7e92b1886a730544b55ba377840740a3ae4f2f146ee73f47c9278b0e233bc 83c003fab22a7178eed1a668e0f65d4fe38ef3900044e9ec63070c23f2827d36a1e73e5c2b883ec6a2afe2450171b3b3 9982f02405978ddc4fca9063ebbdb152f524c84e79398955e66fe51bc7c1660ec1afc3a86ec49f58d7b7dde03505731c ab337bd83ccdd2322088ffa8d005f450ced6b35790f37ab4534313315ee84312adc25e99cce052863a8bedee991729ed 8312ce4bec94366d88f16127a17419ef64285cd5bf9e5eda010319b48085966ed1252ed2f5a9fd3e0259b91bb65f1827 a60d5a6327c4041b0c00a1aa2f0af056520f83c9ce9d9ccd03a0bd4d9e6a1511f26a422ea86bd858a1f77438adf07e6c b84a0a0b030bdad83cf5202aa9afe58c9820e52483ab41f835f8c582c129ee3f34aa096d11c1cd922eda02ea1196a882 8077d105317f4a8a8f1aadeb05e0722bb55f11abcb490c36c0904401107eb3372875b0ac233144829e734f0c538d8c1d 9202503bd29a6ec198823a1e4e098f9cfe359ed51eb5174d1ca41368821bfeebcbd49debfd02952c41359d1c7c06d2b1 abc28c155e09365cb77ffead8dc8f602335ef93b2f44e4ef767ce8fc8ef9dd707400f3a722e92776c2e0b40192c06354 b0f6d1442533ca45c9399e0a63a11f85ff288d242cea6cb3b68c02e77bd7d158047cae2d25b3bcd9606f8f66d9b32855 b01c3d56a0db84dc94575f4b6ee2de4beca3230e86bed63e2066beb22768b0a8efb08ebaf8ac3dedb5fe46708b084807 8c8634b0432159f66feaabb165842d1c8ac378f79565b1b90c381aa8450eb4231c3dad11ec9317b9fc2b155c3a771e32 8e67f623d69ecd430c9ee0888520b6038f13a2b6140525b056dc0951f0cfed2822e62cf11d952a483107c5c5acac4826 9590bb1cba816dd6acd5ac5fba5142c0a19d53573e422c74005e0bcf34993a8138c83124cad35a3df65879dba6134edd 801cd96cde0749021a253027118d3ea135f3fcdbe895db08a6c145641f95ebd368dd6a1568d995e1d0084146aebe224a 848b5d196427f6fc1f762ee3d36e832b64a76ec1033cfedc8b985dea93932a7892b8ef1035c653fb9dcd9ab2d9a44ac8 a1017eb83d5c4e2477e7bd2241b2b98c4951a3b391081cae7d75965cadc1acaec755cf350f1f3d29741b0828e36fedea 8d6d2785e30f3c29aad17bd677914a752f831e96d46caf54446d967cb2432be2c849e26f0d193a60bee161ea5c6fe90a 935c0ba4290d4595428e034b5c8001cbd400040d89ab00861108e8f8f4af4258e41f34a7e6b93b04bc253d3b9ffc13bf aac02257146246998477921cef2e9892228590d323b839f3e64ea893b991b463bc2f47e1e5092ddb47e70b2f5bce7622 b921fde9412970a5d4c9a908ae8ce65861d06c7679af577cf0ad0d5344c421166986bee471fd6a6cecb7d591f06ec985 8ef4c37487b139d6756003060600bb6ebac7ea810b9c4364fc978e842f13ac196d1264fbe5af60d76ff6d9203d8e7d3f 94b65e14022b5cf6a9b95f94be5ace2711957c96f4211c3f7bb36206bd39cfbd0ea82186cab5ad0577a23214a5c86e9e a31c166d2a2ca1d5a75a5920fef7532681f62191a50d8555fdaa63ba4581c3391cc94a536fc09aac89f64eafceec3f90 919a8cc128de01e9e10f5d83b08b52293fdd41bde2b5ae070f3d95842d4a16e5331cf2f3d61c765570c8022403610fa4 b23d6f8331eef100152d60483cfa14232a85ee712c8538c9b6417a5a7c5b353c2ac401390c6c215cb101f5cee6b5f43e ab357160c08a18319510a571eafff154298ce1020de8e1dc6138a09fcb0fcbcdd8359f7e9386bda00b7b9cdea745ffdc ab55079aea34afa5c0bd1124b9cdfe01f325b402fdfa017301bf87812eaa811ea5798c3aaf818074d420d1c782b10ada ade616010dc5009e7fc4f8d8b00dc716686a5fa0a7816ad9e503e15839d3b909b69d9dd929b7575376434ffec0d2bea8 863997b97ed46898a8a014599508fa3079f414b1f4a0c4fdc6d74ae8b444afa350f327f8bfc2a85d27f9e2d049c50135 8d602ff596334efd4925549ed95f2aa762b0629189f0df6dbb162581657cf3ea6863cd2287b4d9c8ad52813d87fcd235 b70f68c596dcdeed92ad5c6c348578b26862a51eb5364237b1221e840c47a8702f0fbc56eb520a22c0eed99795d3903e 9628088f8e0853cefadee305a8bf47fa990c50fa96a82511bbe6e5dc81ef4b794e7918a109070f92fc8384d77ace226f 97e26a46e068b605ce96007197ecd943c9a23881862f4797a12a3e96ba2b8d07806ad9e2a0646796b1889c6b7d75188c b1edf467c068cc163e2d6413cc22b16751e78b3312fe47b7ea82b08a1206d64415b2c8f2a677fa89171e82cc49797150 a44d15ef18745b251429703e3cab188420e2d974de07251501799b016617f9630643fcd06f895634d8ecdd579e1bf000 abd126df3917ba48c618ee4dbdf87df506193462f792874439043fa1b844466f6f4e0ff2e42516e63b5b23c0892b2695 a2a67f57c4aa3c2aa1eeddbfd5009a89c26c2ce8fa3c96a64626aba19514beb125f27df8559506f737de3eae0f1fc18f a633e0132197e6038197304b296ab171f1d8e0d0f34dcf66fe9146ac385b0239232a8470b9205a4802ab432389f4836d a914b3a28509a906c3821463b936455d58ff45dcbe158922f9efb2037f2eb0ce8e92532d29b5d5a3fcd0d23fa773f272 a0e1412ce4505daf1a2e59ce4f0fc0e0023e335b50d2b204422f57cd65744cc7a8ed35d5ef131a42c70b27111d3115b7 a2339e2f2b6072e88816224fdd612c04d64e7967a492b9f8829db15367f565745325d361fd0607b0def1be384d010d9e a7309fc41203cb99382e8193a1dcf03ac190a7ce04835304eb7e341d78634e83ea47cb15b885601956736d04cdfcaa01 81f3ccd6c7f5b39e4e873365f8c37b214e8ab122d04a606fbb7339dc3298c427e922ec7418002561d4106505b5c399ee 92c121cf914ca549130e352eb297872a63200e99b148d88fbc9506ad882bec9d0203d65f280fb5b0ba92e336b7f932e8 a4b330cf3f064f5b131578626ad7043ce2a433b6f175feb0b52d36134a454ca219373fd30d5e5796410e005b69082e47 86fe5774112403ad83f9c55d58317eeb17ad8e1176d9f2f69c2afb7ed83bc718ed4e0245ceab4b377f5f062dcd4c00e7 809d152a7e2654c7fd175b57f7928365a521be92e1ed06c05188a95864ddb25f7cab4c71db7d61bbf4cae46f3a1d96ce b82d663e55c2a5ada7e169e9b1a87bc1c0177baf1ec1c96559b4cb1c5214ce1ddf2ab8d345014cab6402f3774235cf5a 86580af86df1bd2c385adb8f9a079e925981b7184db66fc5fe5b14cddb82e7d836b06eaeef14924ac529487b23dae111 b5f5f4c5c94944ecc804df6ab8687d64e27d988cbfeae1ba7394e0f6adbf778c5881ead7cd8082dd7d68542b9bb4ecd5 a6016916146c2685c46e8fdd24186394e2d5496e77e08c0c6a709d4cd7dfa97f1efcef94922b89196819076a91ad37b5 b778e7367ded3b6eab53d5fc257f7a87e8faf74a593900f2f517220add2125be3f6142022660d8181df8d164ad9441ce 8581b2d36abe6f553add4d24be761bec1b8efaa2929519114346615380b3c55b59e6ad86990e312f7e234d0203bdf59b 9917e74fd45c3f71a829ff5498a7f6b5599b48c098dda2339bf04352bfc7f368ccf1a407f5835901240e76452ae807d7 afd196ce6f9335069138fd2e3d133134da253978b4ce373152c0f26affe77a336505787594022e610f8feb722f7cc1fb a477491a1562e329764645e8f24d8e228e5ef28c9f74c6b5b3abc4b6a562c15ffb0f680d372aed04d9e1bf944dece7be 9767440d58c57d3077319d3a330e5322b9ba16981ec74a5a14d53462eab59ae7fd2b14025bfc63b268862094acb444e6 80986d921be3513ef69264423f351a61cb48390c1be8673aee0f089076086aaebea7ebe268fd0aa7182695606116f679 a9554c5c921c07b450ee04e34ec58e054ac1541b26ce2ce5a393367a97348ba0089f53db6660ad76b60278b66fd12e3e 95097e7d2999b3e84bf052c775581cf361325325f4a50192521d8f4693c830bed667d88f482dc1e3f833aa2bd22d2cbf 9014c91d0f85aefd28436b5228c12f6353c055a9326c7efbf5e071e089e2ee7c070fcbc84c5fafc336cbb8fa6fec1ca1 90f57ba36ee1066b55d37384942d8b57ae00f3cf9a3c1d6a3dfee1d1af42d4b5fa9baeb0cd7e46687d1d6d090ddb931d 8e4b1db12fd760a17214c9e47f1fce6e43c0dbb4589a827a13ac61aaae93759345697bb438a00edab92e0b7b62414683 8022a959a513cdc0e9c705e0fc04eafd05ff37c867ae0f31f6d01cddd5df86138a426cab2ff0ac8ff03a62e20f7e8f51 914e9a38829834c7360443b8ed86137e6f936389488eccf05b4b4db7c9425611705076ecb3f27105d24b85c852be7511 957fb10783e2bd0db1ba66b18e794df710bc3b2b05776be146fa5863c15b1ebdd39747b1a95d9564e1772cdfc4f37b8a b6307028444daed8ed785ac9d0de76bc3fe23ff2cc7e48102553613bbfb5afe0ebe45e4212a27021c8eb870721e62a1f 8f76143597777d940b15a01b39c5e1b045464d146d9a30a6abe8b5d3907250e6c7f858ff2308f8591e8b0a7b3f3c568a 96163138ac0ce5fd00ae9a289648fd9300a0ca0f63a88481d703ecd281c06a52a3b5178e849e331f9c85ca4ba398f4cc a63ef47c3e18245b0482596a09f488a716df3cbd0f9e5cfabed0d742843e65db8961c556f45f49762f3a6ac8b627b3ef 8cb595466552e7c4d42909f232d4063e0a663a8ef6f6c9b7ce3a0542b2459cde04e0e54c7623d404acb5b82775ac04f6 b47fe69960eb45f399368807cff16d941a5a4ebad1f5ec46e3dc8a2e4d598a7e6114d8f0ca791e9720fd786070524e2b 89eb5ff83eea9df490e5beca1a1fbbbbcf7184a37e2c8c91ede7a1e654c81e8cd41eceece4042ea7918a4f4646b67fd6 a84f5d155ed08b9054eecb15f689ba81e44589e6e7207a99790c598962837ca99ec12344105b16641ca91165672f7153 a6cc8f25c2d5b2d2f220ec359e6a37a52b95fa6af6e173c65e7cd55299eff4aa9e6d9e6f2769e6459313f1f2aecb0fab afcde944411f017a9f7979755294981e941cc41f03df5e10522ef7c7505e5f1babdd67b3bf5258e8623150062eb41d9b 8fab39f39c0f40182fcd996ade2012643fe7731808afbc53f9b26900b4d4d1f0f5312d9d40b3df8baa4739970a49c732 ae193af9726da0ebe7df1f9ee1c4846a5b2a7621403baf8e66c66b60f523e719c30c6b4f897bb14b27d3ff3da8392eeb 8ac5adb82d852eba255764029f42e6da92dcdd0e224d387d1ef94174038db9709ac558d90d7e7c57ad4ce7f89bbfc38c a2066b3458fdf678ee487a55dd5bfb74fde03b54620cb0e25412a89ee28ad0d685e309a51e3e4694be2fa6f1593a344c 88d031745dd0ae07d61a15b594be5d4b2e2a29e715d081649ad63605e3404b0c3a5353f0fd9fad9c05c18e93ce674fa1 8283cfb0ef743a043f2b77ecaeba3005e2ca50435585b5dd24777ee6bce12332f85e21b446b536da38508807f0f07563 b376de22d5f6b0af0b59f7d9764561f4244cf8ffe22890ecd3dcf2ff1832130c9b821e068c9d8773136f4796721e5963 ae3afc50c764f406353965363840bf28ee85e7064eb9d5f0bb3c31c64ab10f48c853e942ee2c9b51bae59651eaa08c2f 948b204d103917461a01a6c57a88f2d66b476eae5b00be20ec8c747650e864bc8a83aee0aff59cb7584b7a3387e0ee48 81ab098a082b07f896c5ffd1e4446cb7fb44804cbbf38d125208b233fc82f8ec9a6a8d8dd1c9a1162dc28ffeec0dde50 a149c6f1312821ced2969268789a3151bdda213451760b397139a028da609c4134ac083169feb0ee423a0acafd10eceb b0ac9e27a5dadaf523010f730b28f0ebac01f460d3bbbe277dc9d44218abb5686f4fac89ae462682fef9edbba663520a 8d0e0073cca273daaaa61b6fc54bfe5a009bc3e20ae820f6c93ba77b19eca517d457e948a2de5e77678e4241807157cb ad61d3a2edf7c7533a04964b97499503fd8374ca64286dba80465e68fe932e96749b476f458c6fc57cb1a7ca85764d11 90eb5e121ae46bc01a30881eaa556f46bd8457a4e80787cf634aab355082de34ac57d7f497446468225f7721e68e2a47 8cdac557de7c42d1f3780e33dec1b81889f6352279be81c65566cdd4952d4c15d79e656cbd46035ab090b385e90245ef 82b67e61b88b84f4f4d4f65df37b3e3dcf8ec91ea1b5c008fdccd52da643adbe6468a1cfdb999e87d195afe2883a3b46 8503b467e8f5d6048a4a9b78496c58493a462852cab54a70594ae3fd064cfd0deb4b8f336a262155d9fedcaa67d2f6fd 8db56c5ac763a57b6ce6832930c57117058e3e5a81532b7d19346346205e2ec614eb1a2ee836ef621de50a7bc9b7f040 ad344699198f3c6e8c0a3470f92aaffc805b76266734414c298e10b5b3797ca53578de7ccb2f458f5e0448203f55282b 80602032c43c9e2a09154cc88b83238343b7a139f566d64cb482d87436b288a98f1ea244fd3bff8da3c398686a900c14 a6385bd50ecd548cfb37174cdbb89e10025b5cadaf3cff164c95d7aef5a33e3d6a9bf0c681b9e11db9ef54ebeee2a0c1 abf2d95f4aa34b0581eb9257a0cc8462b2213941a5deb8ba014283293e8b36613951b61261cc67bbd09526a54cbbff76 a3d5de52f48df72c289ff713e445991f142390798cd42bd9d9dbefaee4af4f5faf09042d126b975cf6b98711c3072553 8e627302ff3d686cff8872a1b7c2a57b35f45bf2fc9aa42b049d8b4d6996a662b8e7cbac6597f0cb79b0cc4e29fbf133 8510702e101b39a1efbf4e504e6123540c34b5689645e70d0bac1ecc1baf47d86c05cef6c4317a4e99b4edaeb53f2d00 aa173f0ecbcc6088f878f8726d317748c81ebf501bba461f163b55d66099b191ec7c55f7702f351a9c8eb42cfa3280e2 b560a697eafab695bcef1416648a0a664a71e311ecbe5823ae903bd0ed2057b9d7574b9a86d3fe22aa3e6ddce38ea513 8df6304a3d9cf40100f3f687575419c998cd77e5cc27d579cf4f8e98642de3609af384a0337d145dd7c5635172d26a71 8105c7f3e4d30a29151849673853b457c1885c186c132d0a98e63096c3774bc9deb956cf957367e633d0913680bda307 95373fc22c0917c3c2044ac688c4f29a63ed858a45c0d6d2d0fe97afd6f532dcb648670594290c1c89010ecc69259bef 8c2fae9bcadab341f49b55230310df93cac46be42d4caa0d42e45104148a91e527af1b4209c0d972448162aed28fab64 b05a77baab70683f76209626eaefdda2d36a0b66c780a20142d23c55bd479ddd4ad95b24579384b6cf62c8eb4c92d021 8e6bc6a7ea2755b4aaa19c1c1dee93811fcde514f03485fdc3252f0ab7f032c315614f6336e57cea25dcfb8fb6084eeb b656a27d06aade55eadae2ad2a1059198918ea6cc3fd22c0ed881294d34d5ac7b5e4700cc24350e27d76646263b223aa a296469f24f6f56da92d713afcd4dd606e7da1f79dc4e434593c53695847eefc81c7c446486c4b3b8c8d00c90c166f14 87a326f57713ac2c9dffeb3af44b9f3c613a8f952676fc46343299122b47ee0f8d792abaa4b5db6451ced5dd153aabd0 b689e554ba9293b9c1f6344a3c8fcb6951d9f9eac4a2e2df13de021aade7c186be27500e81388e5b8bcab4c80f220a31 87ae0aa0aa48eac53d1ca5a7b93917de12db9e40ceabf8fdb40884ae771cfdf095411deef7c9f821af0b7070454a2608 a71ffa7eae8ace94e6c3581d4cb2ad25d48cbd27edc9ec45baa2c8eb932a4773c3272b2ffaf077b40f76942a1f3af7f2 94c218c91a9b73da6b7a495b3728f3028df8ad9133312fc0c03e8c5253b7ccb83ed14688fd4602e2fd41f29a0bc698bd ae1e77b90ca33728af07a4c03fb2ef71cd92e2618e7bf8ed4d785ce90097fc4866c29999eb84a6cf1819d75285a03af2 b7a5945b277dab9993cf761e838b0ac6eaa903d7111fca79f9fde3d4285af7a89bf6634a71909d095d7619d913972c9c 8c43b37be02f39b22029b20aca31bff661abce4471dca88aa3bddefd9c92304a088b2dfc8c4795acc301ca3160656af2 b32e5d0fba024554bd5fe8a793ebe8003335ddd7f585876df2048dcf759a01285fecb53daae4950ba57f3a282a4d8495 85ea7fd5e10c7b659df5289b2978b2c89e244f269e061b9a15fcab7983fc1962b63546e82d5731c97ec74b6804be63ef 96b89f39181141a7e32986ac02d7586088c5a9662cec39843f397f3178714d02f929af70630c12cbaba0268f8ba2d4fa 929ab1a2a009b1eb37a2817c89696a06426529ebe3f306c586ab717bd34c35a53eca2d7ddcdef36117872db660024af9 a696dccf439e9ca41511e16bf3042d7ec0e2f86c099e4fc8879d778a5ea79e33aa7ce96b23dc4332b7ba26859d8e674d a8fe69a678f9a194b8670a41e941f0460f6e2dbc60470ab4d6ae2679cc9c6ce2c3a39df2303bee486dbfde6844e6b31a 95f58f5c82de2f2a927ca99bf63c9fc02e9030c7e46d0bf6b67fe83a448d0ae1c99541b59caf0e1ccab8326231af09a5 a57badb2c56ca2c45953bd569caf22968f76ed46b9bac389163d6fe22a715c83d5e94ae8759b0e6e8c2f27bff7748f3f 868726fd49963b24acb5333364dffea147e98f33aa19c7919dc9aca0fd26661cfaded74ede7418a5fadbe7f5ae67b67b a8d8550dcc64d9f1dd7bcdab236c4122f2b65ea404bb483256d712c7518f08bb028ff8801f1da6aed6cbfc5c7062e33b 97e25a87dae23155809476232178538d4bc05d4ff0882916eb29ae515f2a62bfce73083466cc0010ca956aca200aeacc b4ea26be3f4bd04aa82d7c4b0913b97bcdf5e88b76c57eb1a336cbd0a3eb29de751e1bc47c0e8258adec3f17426d0c71 99ee555a4d9b3cf2eb420b2af8e3bc99046880536116d0ce7193464ac40685ef14e0e3c442f604e32f8338cb0ef92558 8c64efa1da63cd08f319103c5c7a761221080e74227bbc58b8fb35d08aa42078810d7af3e60446cbaff160c319535648 8d9fd88040076c28420e3395cbdfea402e4077a3808a97b7939d49ecbcf1418fe50a0460e1c1b22ac3f6e7771d65169a ae3c19882d7a9875d439265a0c7003c8d410367627d21575a864b9cb4918de7dbdb58a364af40c5e045f3df40f95d337 b4f7bfacab7b2cafe393f1322d6dcc6f21ffe69cd31edc8db18c06f1a2b512c27bd0618091fd207ba8df1808e9d45914 94f134acd0007c623fb7934bcb65ef853313eb283a889a3ffa79a37a5c8f3665f3d5b4876bc66223610c21dc9b919d37 aa15f74051171daacdc1f1093d3f8e2d13da2833624b80a934afec86fc02208b8f55d24b7d66076444e7633f46375c6a a32d6bb47ef9c836d9d2371807bafbbbbb1ae719530c19d6013f1d1f813c49a60e4fa51d83693586cba3a840b23c0404 b61b3599145ea8680011aa2366dc511a358b7d67672d5b0c5be6db03b0efb8ca5a8294cf220ea7409621f1664e00e631 859cafc3ee90b7ececa1ed8ef2b2fc17567126ff10ca712d5ffdd16aa411a5a7d8d32c9cab1fbf63e87dce1c6e2f5f53 a2fef1b0b2874387010e9ae425f3a9676d01a095d017493648bcdf3b31304b087ccddb5cf76abc4e1548b88919663b6b 939e18c73befc1ba2932a65ede34c70e4b91e74cc2129d57ace43ed2b3af2a9cc22a40fbf50d79a63681b6d98852866d b3b4259d37b1b14aee5b676c9a0dd2d7f679ab95c120cb5f09f9fbf10b0a920cb613655ddb7b9e2ba5af4a221f31303c 997255fe51aaca6e5a9cb3359bcbf25b2bb9e30649bbd53a8a7c556df07e441c4e27328b38934f09c09d9500b5fabf66 abb91be2a2d860fd662ed4f1c6edeefd4da8dc10e79251cf87f06029906e7f0be9b486462718f0525d5e049472692cb7 b2398e593bf340a15f7801e1d1fbda69d93f2a32a889ec7c6ae5e8a37567ac3e5227213c1392ee86cfb3b56ec2787839 8ddf10ccdd72922bed36829a36073a460c2118fc7a56ff9c1ac72581c799b15c762cb56cb78e3d118bb9f6a7e56cb25e 93e6bc0a4708d16387cacd44cf59363b994dc67d7ada7b6d6dbd831c606d975247541b42b2a309f814c1bfe205681fc6 b93fc35c05998cffda2978e12e75812122831523041f10d52f810d34ff71944979054b04de0117e81ddf5b0b4b3e13c0 92221631c44d60d68c6bc7b287509f37ee44cbe5fdb6935cee36b58b17c7325098f98f7910d2c3ca5dc885ad1d6dabc7 a230124424a57fad3b1671f404a94d7c05f4c67b7a8fbacfccea28887b78d7c1ed40b92a58348e4d61328891cd2f6cee a6a230edb8518a0f49d7231bc3e0bceb5c2ac427f045819f8584ba6f3ae3d63ed107a9a62aad543d7e1fcf1f20605706 845be1fe94223c7f1f97d74c49d682472585d8f772762baad8a9d341d9c3015534cc83d102113c51a9dea2ab10d8d27b b44262515e34f2db597c8128c7614d33858740310a49cdbdf9c8677c5343884b42c1292759f55b8b4abc4c86e4728033 805592e4a3cd07c1844bc23783408310accfdb769cca882ad4d07d608e590a288b7370c2cb327f5336e72b7083a0e30f 95153e8b1140df34ee864f4ca601cb873cdd3efa634af0c4093fbaede36f51b55571ab271e6a133020cd34db8411241f 82878c1285cfa5ea1d32175c9401f3cc99f6bb224d622d3fd98cc7b0a27372f13f7ab463ce3a33ec96f9be38dbe2dfe3 b7588748f55783077c27fc47d33e20c5c0f5a53fc0ac10194c003aa09b9f055d08ec971effa4b7f760553997a56967b3 b36b4de6d1883b6951f59cfae381581f9c6352fcfcf1524fccdab1571a20f80441d9152dc6b48bcbbf00371337ca0bd5 89c5523f2574e1c340a955cbed9c2f7b5fbceb260cb1133160dabb7d41c2f613ec3f6e74bbfab3c4a0a6f0626dbe068f a52f58cc39f968a9813b1a8ddc4e83f4219e4dd82c7aa1dd083bea7edf967151d635aa9597457f879771759b876774e4 8300a67c2e2e123f89704abfde095463045dbd97e20d4c1157bab35e9e1d3d18f1f4aaba9cbe6aa2d544e92578eaa1b6 ac6a7f2918768eb6a43df9d3a8a04f8f72ee52f2e91c064c1c7d75cad1a3e83e5aba9fe55bb94f818099ac91ccf2e961 8d64a2b0991cf164e29835c8ddef6069993a71ec2a7de8157bbfa2e00f6367be646ed74cbaf524f0e9fe13fb09fa15fd 8b2ffe5a545f9f680b49d0a9797a4a11700a2e2e348c34a7a985fc278f0f12def6e06710f40f9d48e4b7fbb71e072229 8ab8f71cd337fa19178924e961958653abf7a598e3f022138b55c228440a2bac4176cea3aea393549c03cd38a13eb3fc 8419d28318c19ea4a179b7abb43669fe96347426ef3ac06b158d79c0acf777a09e8e770c2fb10e14b3a0421705990b23 8bacdac310e1e49660359d0a7a17fe3d334eb820e61ae25e84cb52f863a2f74cbe89c2e9fc3283745d93a99b79132354 b57ace3fa2b9f6b2db60c0d861ace7d7e657c5d35d992588aeed588c6ce3a80b6f0d49f8a26607f0b17167ab21b675e4 83e265cde477f2ecc164f49ddc7fb255bb05ff6adc347408353b7336dc3a14fdedc86d5a7fb23f36b8423248a7a67ed1 a60ada971f9f2d79d436de5d3d045f5ab05308cae3098acaf5521115134b2a40d664828bb89895840db7f7fb499edbc5 a63eea12efd89b62d3952bf0542a73890b104dd1d7ff360d4755ebfa148fd62de668edac9eeb20507967ea37fb220202 a0275767a270289adc991cc4571eff205b58ad6d3e93778ddbf95b75146d82517e8921bd0d0564e5b75fa0ccdab8e624 b9b03fd3bf07201ba3a039176a965d736b4ef7912dd9e9bf69fe1b57c330a6aa170e5521fe8be62505f3af81b41d7806 a95f640e26fb1106ced1729d6053e41a16e4896acac54992279ff873e5a969aad1dcfa10311e28b8f409ac1dab7f03bb b144778921742418053cb3c70516c63162c187f00db2062193bb2c14031075dbe055d020cde761b26e8c58d0ea6df2c1 8432fbb799e0435ef428d4fefc309a05dd589bce74d7a87faf659823e8c9ed51d3e42603d878e80f439a38be4321c2fa b08ddef14e42d4fd5d8bf39feb7485848f0060d43b51ed5bdda39c05fe154fb111d29719ee61a23c392141358c0cfcff 8ae3c5329a5e025b86b5370e06f5e61177df4bda075856fade20a17bfef79c92f54ed495f310130021ba94fb7c33632b 92b6d3c9444100b4d7391febfc1dddaa224651677c3695c47a289a40d7a96d200b83b64e6d9df51f534564f272a2c6c6 b432bc2a3f93d28b5e506d68527f1efeb2e2570f6be0794576e2a6ef9138926fdad8dd2eabfa979b79ab7266370e86bc 8bc315eacedbcfc462ece66a29662ca3dcd451f83de5c7626ef8712c196208fb3d8a0faf80b2e80384f0dd9772f61a23 a72375b797283f0f4266dec188678e2b2c060dfed5880fc6bb0c996b06e91a5343ea2b695adaab0a6fd183b040b46b56 a43445036fbaa414621918d6a897d3692fdae7b2961d87e2a03741360e45ebb19fcb1703d23f1e15bb1e2babcafc56ac b9636b2ffe305e63a1a84bd44fb402442b1799bd5272638287aa87ca548649b23ce8ce7f67be077caed6aa2dbc454b78 99a30bf0921d854c282b83d438a79f615424f28c2f99d26a05201c93d10378ab2cd94a792b571ddae5d4e0c0013f4006 8648e3c2f93d70b392443be116b48a863e4b75991bab5db656a4ef3c1e7f645e8d536771dfe4e8d1ceda3be8d32978b0 ab50dc9e6924c1d2e9d2e335b2d679fc7d1a7632e84964d3bac0c9fe57e85aa5906ec2e7b0399d98ddd022e9b19b5904 ab729328d98d295f8f3272afaf5d8345ff54d58ff9884da14f17ecbdb7371857fdf2f3ef58080054e9874cc919b46224 83fa5da7592bd451cad3ad7702b4006332b3aae23beab4c4cb887fa6348317d234bf62a359e665b28818e5410c278a09 8bdbff566ae9d368f114858ef1f009439b3e9f4649f73efa946e678d6c781d52c69af195df0a68170f5f191b2eac286b 91245e59b4425fd4edb2a61d0d47c1ccc83d3ced8180de34887b9655b5dcda033d48cde0bdc3b7de846d246c053a02e8 a2cb00721e68f1cad8933947456f07144dc69653f96ceed845bd577d599521ba99cdc02421118971d56d7603ed118cbf af8cd66d303e808b22ec57860dd909ca64c27ec2c60e26ffecfdc1179d8762ffd2739d87b43959496e9fee4108df71df 9954136812dffcd5d3f167a500e7ab339c15cfc9b3398d83f64b0daa3dd5b9a851204f424a3493b4e326d3de81e50a62 93252254d12511955f1aa464883ad0da793f84d900fea83e1df8bca0f2f4cf5b5f9acbaec06a24160d33f908ab5fea38 997cb55c26996586ba436a95566bd535e9c22452ca5d2a0ded2bd175376557fa895f9f4def4519241ff386a063f2e526 a12c78ad451e0ac911260ade2927a768b50cb4125343025d43474e7f465cdc446e9f52a84609c5e7e87ae6c9b3f56cda a789d4ca55cbba327086563831b34487d63d0980ba8cf55197c016702ed6da9b102b1f0709ce3da3c53ff925793a3d73 a5d76acbb76741ce85be0e655b99baa04f7f587347947c0a30d27f8a49ae78cce06e1cde770a8b618d3db402be1c0c4b 873c0366668c8faddb0eb7c86f485718d65f8c4734020f1a18efd5fa123d3ea8a990977fe13592cd01d17e60809cb5ff b659b71fe70f37573ff7c5970cc095a1dc0da3973979778f80a71a347ef25ad5746b2b9608bad4ab9a4a53a4d7df42d7 a34cbe05888e5e5f024a2db14cb6dcdc401a9cbd13d73d3c37b348f68688f87c24ca790030b8f84fef9e74b4eab5e412 94ce8010f85875c045b0f014db93ef5ab9f1f6842e9a5743dce9e4cb872c94affd9e77c1f1d1ab8b8660b52345d9acb9 adefa9b27a62edc0c5b019ddd3ebf45e4de846165256cf6329331def2e088c5232456d3de470fdce3fa758bfdd387512 a6b83821ba7c1f83cc9e4529cf4903adb93b26108e3d1f20a753070db072ad5a3689643144bdd9c5ea06bb9a7a515cd0 a3a9ddedc2a1b183eb1d52de26718151744db6050f86f3580790c51d09226bf05f15111691926151ecdbef683baa992c a64bac89e7686932cdc5670d07f0b50830e69bfb8c93791c87c7ffa4913f8da881a9d8a8ce8c1a9ce5b6079358c54136 a77b5a63452cb1320b61ab6c7c2ef9cfbcade5fd4727583751fb2bf3ea330b5ca67757ec1f517bf4d503ec924fe32fbd 8746fd8d8eb99639d8cd0ca34c0d9c3230ed5a312aab1d3d925953a17973ee5aeb66e68667e93caf9cb817c868ea8f3d 88a2462a26558fc1fbd6e31aa8abdc706190a17c27fdc4217ffd2297d1b1f3321016e5c4b2384c5454d5717dc732ed03 b78893a97e93d730c8201af2e0d3b31cb923d38dc594ffa98a714e627c473d42ea82e0c4d2eeb06862ee22a9b2c54588 920cc8b5f1297cf215a43f6fc843e379146b4229411c44c0231f6749793d40f07b9af7699fd5d21fd69400b97febe027 a0f0eafce1e098a6b58c7ad8945e297cd93aaf10bc55e32e2e32503f02e59fc1d5776936577d77c0b1162cb93b88518b 98480ba0064e97a2e7a6c4769b4d8c2a322cfc9a3b2ca2e67e9317e2ce04c6e1108169a20bd97692e1cb1f1423b14908 83dbbb2fda7e287288011764a00b8357753a6a44794cc8245a2275237f11affdc38977214e463ad67aec032f3dfa37e9 86442fff37598ce2b12015ff19b01bb8a780b40ad353d143a0f30a06f6d23afd5c2b0a1253716c855dbf445cc5dd6865 b8a4c60c5171189414887847b9ed9501bff4e4c107240f063e2d254820d2906b69ef70406c585918c4d24f1dd052142b 919f33a98e84015b2034b57b5ffe9340220926b2c6e45f86fd79ec879dbe06a148ae68b77b73bf7d01bd638a81165617 95c13e78d89474a47fbc0664f6f806744b75dede95a479bbf844db4a7f4c3ae410ec721cb6ffcd9fa9c323da5740d5ae ab7151acc41fffd8ec6e90387700bcd7e1cde291ea669567295bea1b9dd3f1df2e0f31f3588cd1a1c08af8120aca4921 80e74c5c47414bd6eeef24b6793fb1fa2d8fb397467045fcff887c52476741d5bc4ff8b6d3387cb53ad285485630537f a296ad23995268276aa351a7764d36df3a5a3cffd7dbeddbcea6b1f77adc112629fdeffa0918b3242b3ccd5e7587e946 813d2506a28a2b01cb60f49d6bd5e63c9b056aa56946faf2f33bd4f28a8d947569cfead3ae53166fc65285740b210f86 924b265385e1646287d8c09f6c855b094daaee74b9e64a0dddcf9ad88c6979f8280ba30c8597b911ef58ddb6c67e9fe3 8d531513c70c2d3566039f7ca47cd2352fd2d55b25675a65250bdb8b06c3843db7b2d29c626eed6391c238fc651cf350 82b338181b62fdc81ceb558a6843df767b6a6e3ceedc5485664b4ea2f555904b1a45fbb35f6cf5d96f27da10df82a325 92e62faaedea83a37f314e1d3cb4faaa200178371d917938e59ac35090be1db4b4f4e0edb78b9c991de202efe4f313d8 99d645e1b642c2dc065bac9aaa0621bc648c9a8351efb6891559c3a41ba737bd155fb32d7731950514e3ecf4d75980e4 b34a13968b9e414172fb5d5ece9a39cf2eb656128c3f2f6cc7a9f0c69c6bae34f555ecc8f8837dc34b5e470e29055c78 a2a0bb7f3a0b23a2cbc6585d59f87cd7e56b2bbcb0ae48f828685edd9f7af0f5edb4c8e9718a0aaf6ef04553ba71f3b7 8e1a94bec053ed378e524b6685152d2b52d428266f2b6eadd4bcb7c4e162ed21ab3e1364879673442ee2162635b7a4d8 9944adaff14a85eab81c73f38f386701713b52513c4d4b838d58d4ffa1d17260a6d056b02334850ea9a31677c4b078bd a450067c7eceb0854b3eca3db6cf38669d72cb7143c3a68787833cbca44f02c0be9bfbe082896f8a57debb13deb2afb1 8be4ad3ac9ef02f7df09254d569939757101ee2eda8586fefcd8c847adc1efe5bdcb963a0cafa17651befaafb376a531 90f6de91ea50255f148ac435e08cf2ac00c772a466e38155bd7e8acf9197af55662c7b5227f88589b71abe9dcf7ba343 86e5a24f0748b106dee2d4d54e14a3b0af45a96cbee69cac811a4196403ebbee17fd24946d7e7e1b962ac7f66dbaf610 afdd96fbcda7aa73bf9eeb2292e036c25753d249caee3b9c013009cc22e10d3ec29e2aa6ddbb21c4e949b0c0bccaa7f4 b5a4e7436d5473647c002120a2cb436b9b28e27ad4ebdd7c5f122b91597c507d256d0cbd889d65b3a908531936e53053 b632414c3da704d80ac2f3e5e0e9f18a3637cdc2ebeb613c29300745582427138819c4e7b0bec3099c1b8739dac1807b a28df1464d3372ce9f37ef1db33cc010f752156afae6f76949d98cd799c0cf225c20228ae86a4da592d65f0cffe3951b 898b93d0a31f7d3f11f253cb7a102db54b669fd150da302d8354d8e02b1739a47cb9bd88015f3baf12b00b879442464e 96fb88d89a12049091070cb0048a381902965e67a8493e3991eaabe5d3b7ff7eecd5c94493a93b174df3d9b2c9511755 b899cb2176f59a5cfba3e3d346813da7a82b03417cad6342f19cc8f12f28985b03bf031e856a4743fd7ebe16324805b0 a60e2d31bc48e0c0579db15516718a03b73f5138f15037491f4dae336c904e312eda82d50862f4debd1622bb0e56d866 979fc8b987b5cef7d4f4b58b53a2c278bd25a5c0ea6f41c715142ea5ff224c707de38451b0ad3aa5e749aa219256650a b2a75bff18e1a6b9cf2a4079572e41205741979f57e7631654a3c0fcec57c876c6df44733c9da3d863db8dff392b44a3 b7a0f0e811222c91e3df98ff7f286b750bc3b20d2083966d713a84a2281744199e664879401e77470d44e5a90f3e5181 82b74ba21c9d147fbc338730e8f1f8a6e7fc847c3110944eb17a48bea5e06eecded84595d485506d15a3e675fd0e5e62 a7f44eef817d5556f0d1abcf420301217d23c69dd2988f44d91ea1f1a16c322263cbacd0f190b9ba22b0f141b9267b4f aadb68164ede84fc1cb3334b3194d84ba868d5a88e4c9a27519eef4923bc4abf81aab8114449496c073c2a6a0eb24114 b5378605fabe9a8c12a5dc55ef2b1de7f51aedb61960735c08767a565793cea1922a603a6983dc25f7cea738d0f7c40d a97a4a5cd8d51302e5e670aee78fe6b5723f6cc892902bbb4f131e82ca1dfd5de820731e7e3367fb0c4c1922a02196e3 8bdfeb15c29244d4a28896f2b2cb211243cd6a1984a3f5e3b0ebe5341c419beeab3304b390a009ffb47588018034b0ea a9af3022727f2aa2fca3b096968e97edad3f08edcbd0dbca107b892ae8f746a9c0485e0d6eb5f267999b23a845923ed0 8e7594034feef412f055590fbb15b6322dc4c6ab7a4baef4685bd13d71a83f7d682b5781bdfa0d1c659489ce9c2b8000 84977ca6c865ebee021c58106c1a4ad0c745949ecc5332948002fd09bd9b890524878d0c29da96fd11207621136421fe 8687551a79158e56b2375a271136756313122132a6670fa51f99a1b5c229ed8eea1655a734abae13228b3ebfd2a825dd a0227d6708979d99edfc10f7d9d3719fd3fc68b0d815a7185b60307e4c9146ad2f9be2b8b4f242e320d4288ceeb9504c 89f75583a16735f9dd8b7782a130437805b34280ccea8dac6ecaee4b83fe96947e7b53598b06fecfffdf57ffc12cc445 a0056c3353227f6dd9cfc8e3399aa5a8f1d71edf25d3d64c982910f50786b1e395c508d3e3727ac360e3e040c64b5298 b070e61a6d813626144b312ded1788a6d0c7cec650a762b2f8df6e4743941dd82a2511cd956a3f141fc81e15f4e092da b4e6db232e028a1f989bb5fc13416711f42d389f63564d60851f009dcffac01acfd54efa307aa6d4c0f932892d4e62b0 89b5991a67db90024ddd844e5e1a03ef9b943ad54194ae0a97df775dde1addf31561874f4e40fbc37a896630f3bbda58 ad0e8442cb8c77d891df49cdb9efcf2b0d15ac93ec9be1ad5c3b3cca1f4647b675e79c075335c1f681d56f14dc250d76 b5d55a6ae65bb34dd8306806cb49b5ccb1c83a282ee47085cf26c4e648e19a52d9c422f65c1cd7e03ca63e926c5e92ea b749501347e5ec07e13a79f0cb112f1b6534393458b3678a77f02ca89dca973fa7b30e55f0b25d8b92b97f6cb0120056 94144b4a3ffc5eec6ba35ce9c245c148b39372d19a928e236a60e27d7bc227d18a8cac9983851071935d8ffb64b3a34f 92bb4f9f85bc8c028a3391306603151c6896673135f8a7aefedd27acb322c04ef5dac982fc47b455d6740023e0dd3ea3 b9633a4a101461a782fc2aa092e9dbe4e2ad00987578f18cd7cf0021a909951d60fe79654eb7897806795f93c8ff4d1c 809f0196753024821b48a016eca5dbb449a7c55750f25981bb7a4b4c0e0846c09b8f6128137905055fc43a3f0deb4a74 a27dc9cdd1e78737a443570194a03d89285576d3d7f3a3cf15cc55b3013e42635d4723e2e8fe1d0b274428604b630db9 861f60f0462e04cd84924c36a28163def63e777318d00884ab8cb64c8df1df0bce5900342163edb60449296484a6c5bf b7bc23fb4e14af4c4704a944253e760adefeca8caee0882b6bbd572c84434042236f39ae07a8f21a560f486b15d82819 b9a6eb492d6dd448654214bd01d6dc5ff12067a11537ab82023fc16167507ee25eed2c91693912f4155d1c07ed9650b3 97678af29c68f9a5e213bf0fb85c265303714482cfc4c2c00b4a1e8a76ed08834ee6af52357b143a1ca590fb0265ea5a 8a15b499e9eca5b6cac3070b5409e8296778222018ad8b53a5d1f6b70ad9bb10c68a015d105c941ed657bf3499299e33 b487fefede2e8091f2c7bfe85770db2edff1db83d4effe7f7d87bff5ab1ace35e9b823a71adfec6737fede8d67b3c467 8b51b916402aa2c437fce3bcad6dad3be8301a1a7eab9d163085b322ffb6c62abf28637636fe6114573950117fc92898 b06a2106d031a45a494adec0881cb2f82275dff9dcdd2bc16807e76f3bec28a6734edd3d54f0be8199799a78cd6228ad af0a185391bbe2315eb97feac98ad6dd2e5d931d012c621abd6e404a31cc188b286fef14871762190acf086482b2b5e2 8e78ee8206506dd06eb7729e32fceda3bebd8924a64e4d8621c72e36758fda3d0001af42443851d6c0aea58562870b43 a1ba52a569f0461aaf90b49b92be976c0e73ec4a2c884752ee52ffb62dd137770c985123d405dfb5de70692db454b54a 8d51b692fa1543c51f6b62b9acb8625ed94b746ef96c944ca02859a4133a5629da2e2ce84e111a7af8d9a5b836401c64 a7a20d45044cf6492e0531d0b8b26ffbae6232fa05a96ed7f06bdb64c2b0f5ca7ec59d5477038096a02579e633c7a3ff 84df867b98c53c1fcd4620fef133ee18849c78d3809d6aca0fb6f50ff993a053a455993f216c42ab6090fa5356b8d564 a7227c439f14c48e2577d5713c97a5205feb69acb0b449152842e278fa71e8046adfab468089c8b2288af1fc51fa945b 855189b3a105670779997690876dfaa512b4a25a24931a912c2f0f1936971d2882fb4d9f0b3d9daba77eaf660e9d05d5 b5696bd6706de51c502f40385f87f43040a5abf99df705d6aac74d88c913b8ecf7a99a63d7a37d9bdf3a941b9e432ff5 ab997beb0d6df9c98d5b49864ef0b41a2a2f407e1687dfd6089959757ba30ed02228940b0e841afe6911990c74d536c4 b36b65f85546ebfdbe98823d5555144f96b4ab39279facd19c0de3b8919f105ba0315a0784dce4344b1bc62d8bb4a5a3 b8371f0e4450788720ac5e0f6cd3ecc5413d33895083b2c168d961ec2b5c3de411a4cc0712481cbe8df8c2fa1a7af006 98325d8026b810a8b7a114171ae59a57e8bbc9848e7c3df992efc523621729fd8c9f52114ce01d7730541a1ada6f1df1 8d0e76dbd37806259486cd9a31bc8b2306c2b95452dc395546a1042d1d17863ef7a74c636b782e214d3aa0e8d717f94a a4e15ead76da0214d702c859fb4a8accdcdad75ed08b865842bd203391ec4cba2dcc916455e685f662923b96ee0c023f 8618190972086ebb0c4c1b4a6c94421a13f378bc961cc8267a301de7390c5e73c3333864b3b7696d81148f9d4843fd02 85369d6cc7342e1aa15b59141517d8db8baaaeb7ab9670f3ba3905353948d575923d283b7e5a05b13a30e7baf1208a86 87c51ef42233c24a6da901f28c9a075d9ba3c625687c387ad6757b72ca6b5a8885e6902a3082da7281611728b1e45f26 aa6348a4f71927a3106ad0ea8b02fc8d8c65531e4ab0bd0a17243e66f35afe252e40ab8eef9f13ae55a72566ffdaff5c 96a3bc976e9d03765cc3fee275fa05b4a84c94fed6b767e23ca689394501e96f56f7a97cffddc579a6abff632bf153be 97dbf96c6176379fdb2b888be4e757b2bca54e74124bd068d3fa1dbd82a011bbeb75079da38e0cd22a761fe208ecad9b b70cf0a1d14089a4129ec4e295313863a59da8c7e26bf74cc0e704ed7f0ee4d7760090d0ddf7728180f1bf2c5ac64955 882d664714cc0ffe53cbc9bef21f23f3649824f423c4dbad1f893d22c4687ab29583688699efc4d5101aa08b0c3e267a 80ecb7cc963e677ccaddbe3320831dd6ee41209acf4ed41b16dc4817121a3d86a1aac9c4db3d8c08a55d28257088af32 a25ba667d832b145f9ce18c3f9b1bd00737aa36db020e1b99752c8ef7d27c6c448982bd8d352e1b6df266b8d8358a8d5 83734841c13dee12759d40bdd209b277e743b0d08cc0dd1e0b7afd2d65bfa640400eefcf6be4a52e463e5b3d885eeac6 848d16505b04804afc773aebabb51b36fd8aacfbb0e09b36c0d5d57df3c0a3b92f33e7d5ad0a7006ec46ebb91df42b8c 909a8d793f599e33bb9f1dc4792a507a97169c87cd5c087310bc05f30afcd247470b4b56dec59894c0fb1d48d39bb54e 8e558a8559df84a1ba8b244ece667f858095c50bb33a5381e60fcc6ba586b69693566d8819b4246a27287f16846c1dfa 84d6b69729f5aaa000cd710c2352087592cfbdf20d5e1166977e195818e593fa1a50d1e04566be23163a2523dc1612f1 9536d262b7a42125d89f4f32b407d737ba8d9242acfc99d965913ab3e043dcac9f7072a43708553562cac4cba841df30 9598548923ca119d6a15fd10861596601dd1dedbcccca97bb208cdc1153cf82991ea8cc17686fbaa867921065265970c b87f2d4af6d026e4d2836bc3d390a4a18e98a6e386282ce96744603bab74974272e97ac2da281afa21885e2cbb3a8001 991ece62bf07d1a348dd22191868372904b9f8cf065ae7aa4e44fd24a53faf6d851842e35fb472895963aa1992894918 a8c53dea4c665b30e51d22ca6bc1bc78aaf172b0a48e64a1d4b93439b053877ec26cb5221c55efd64fa841bbf7d5aff4 93487ec939ed8e740f15335b58617c3f917f72d07b7a369befd479ae2554d04deb240d4a14394b26192efae4d2f4f35d a44793ab4035443f8f2968a40e043b4555960193ffa3358d22112093aadfe2c136587e4139ffd46d91ed4107f61ea5e0 b13fe033da5f0d227c75927d3dacb06dbaf3e1322f9d5c7c009de75cdcba5e308232838785ab69a70f0bedea755e003f 970a29b075faccd0700fe60d1f726bdebf82d2cc8252f4a84543ebd3b16f91be42a75c9719a39c4096139f0f31393d58 a4c3eb1f7160f8216fc176fb244df53008ff32f2892363d85254002e66e2de21ccfe1f3b1047589abee50f29b9d507e3 8c552885eab04ba40922a8f0c3c38c96089c95ff1405258d3f1efe8d179e39e1295cbf67677894c607ae986e4e6b1fb0 b3671746fa7f848c4e2ae6946894defadd815230b906b419143523cc0597bc1d6c0a4c1e09d49b66b4a2c11cde3a4de3 937a249a95813a5e2ef428e355efd202e15a37d73e56cfb7e57ea9f943f2ce5ca8026f2f1fd25bf164ba89d07077d858 83646bdf6053a04aa9e2f112499769e5bd5d0d10f2e13db3ca89bd45c0b3b7a2d752b7d137fb3909f9c62b78166c9339 b4eac4b91e763666696811b7ed45e97fd78310377ebea1674b58a2250973f80492ac35110ed1240cd9bb2d17493d708c 82db43a99bc6573e9d92a3fd6635dbbb249ac66ba53099c3c0c8c8080b121dd8243cd5c6e36ba0a4d2525bae57f5c89c a64d6a264a681b49d134c655d5fc7756127f1ee7c93d328820f32bca68869f53115c0d27fef35fe71f7bc4fdaed97348 8739b7a9e2b4bc1831e7f04517771bc7cde683a5e74e052542517f8375a2f64e53e0d5ac925ef722327e7bb195b4d1d9 8f337cdd29918a2493515ebb5cf702bbe8ecb23b53c6d18920cc22f519e276ca9b991d3313e2d38ae17ae8bdfa4f8b7e b0edeab9850e193a61f138ef2739fc42ceec98f25e7e8403bfd5fa34a7bc956b9d0898250d18a69fa4625a9b3d6129da a9920f26fe0a6d51044e623665d998745c9eca5bce12051198b88a77d728c8238f97d4196f26e43b24f8841500b998d0 86e655d61502b979eeeeb6f9a7e1d0074f936451d0a1b0d2fa4fb3225b439a3770767b649256fe481361f481a8dbc276 84d3b32fa62096831cc3bf013488a9f3f481dfe293ae209ed19585a03f7db8d961a7a9dd0db82bd7f62d612707575d9c 81c827826ec9346995ffccf62a241e3b2d32f7357acd1b1f8f7a7dbc97022d3eb51b8a1230e23ce0b401d2e535e8cd78 94a1e40c151191c5b055b21e86f32e69cbc751dcbdf759a48580951834b96a1eed75914c0d19a38aefd21fb6c8d43d0c ab890222b44bc21b71f7c75e15b6c6e16bb03371acce4f8d4353ff3b8fcd42a14026589c5ed19555a3e15e4d18bfc3a3 accb0be851e93c6c8cc64724cdb86887eea284194b10e7a43c90528ed97e9ec71ca69c6fac13899530593756dd49eab2 b630220aa9e1829c233331413ee28c5efe94ea8ea08d0c6bfd781955078b43a4f92915257187d8526873e6c919c6a1de add389a4d358c585f1274b73f6c3c45b58ef8df11f9d11221f620e241bf3579fba07427b288c0c682885a700cc1fa28d a9fe6ca8bf2961a3386e8b8dcecc29c0567b5c0b3bcf3b0f9169f88e372b80151af883871fc5229815f94f43a6f5b2b0 ad839ae003b92b37ea431fa35998b46a0afc3f9c0dd54c3b3bf7a262467b13ff3c323ada1c1ae02ac7716528bdf39e3e 9356d3fd0edcbbb65713c0f2a214394f831b26f792124b08c5f26e7f734b8711a87b7c4623408da6a091c9aef1f6af3c 896b25b083c35ac67f0af3784a6a82435b0e27433d4d74cd6d1eafe11e6827827799490fb1c77c11de25f0d75f14e047 8bfa019391c9627e8e5f05c213db625f0f1e51ec68816455f876c7e55b8f17a4f13e5aae9e3fb9e1cf920b1402ee2b40 8ba3a6faa6a860a8f3ce1e884aa8769ceded86380a86520ab177ab83043d380a4f535fe13884346c5e51bee68da6ab41 a8292d0844084e4e3bb7af92b1989f841a46640288c5b220fecfad063ee94e86e13d3d08038ec2ac82f41c96a3bfe14d 8229bb030b2fc566e11fd33c7eab7a1bb7b49fed872ea1f815004f7398cb03b85ea14e310ec19e1f23e0bdaf60f8f76c 8cfbf869ade3ec551562ff7f63c2745cc3a1f4d4dc853a0cd42dd5f6fe54228f86195ea8fe217643b32e9f513f34a545 ac52a3c8d3270ddfe1b5630159da9290a5ccf9ccbdef43b58fc0a191a6c03b8a5974cf6e2bbc7bd98d4a40a3581482d7 ab13decb9e2669e33a7049b8eca3ca327c40dea15ad6e0e7fa63ed506db1d258bc36ac88b35f65cae0984e937eb6575d b5e748eb1a7a1e274ff0cc56311c198f2c076fe4b7e73e5f80396fe85358549df906584e6bb2c8195b3e2be7736850a5 b5cb911325d8f963c41f691a60c37831c7d3bbd92736efa33d1f77a22b3fde7f283127256c2f47e197571e6fe0b46149 8a01dc6ed1b55f26427a014faa347130738b191a06b800e32042a46c13f60b49534520214359d68eb2e170c31e2b8672 a72fa874866e19b2efb8e069328362bf7921ec375e3bcd6b1619384c3f7ee980f6cf686f3544e9374ff54b4d17a1629c 8db21092f7c5f110fba63650b119e82f4b42a997095d65f08f8237b02dd66fdf959f788df2c35124db1dbd330a235671 8c65d50433d9954fe28a09fa7ba91a70a590fe7ba6b3060f5e4be0f6cef860b9897fa935fb4ebc42133524eb071dd169 b4614058e8fa21138fc5e4592623e78b8982ed72aa35ee4391b164f00c68d277fa9f9eba2eeefc890b4e86eba5124591 ab2ad3a1bce2fbd55ca6b7c23786171fe1440a97d99d6df4d80d07dd56ac2d7203c294b32fc9e10a6c259381a73f24a1 812ae3315fdc18774a8da3713a4679e8ed10b9405edc548c00cacbe25a587d32040566676f135e4723c5dc25df5a22e9 a464b75f95d01e5655b54730334f443c8ff27c3cb79ec7af4b2f9da3c2039c609908cd128572e1fd0552eb597e8cef8d a0db3172e93ca5138fe419e1c49a1925140999f6eff7c593e5681951ee0ec1c7e454c851782cbd2b8c9bc90d466e90e0 806db23ba7d00b87d544eed926b3443f5f9c60da6b41b1c489fba8f73593b6e3b46ebfcab671ee009396cd77d5e68aa1 8bfdf2c0044cc80260994e1c0374588b6653947b178e8b312be5c2a05e05767e98ea15077278506aee7df4fee1aaf89e 827f6558c16841b5592ff089c9c31e31eb03097623524394813a2e4093ad2d3f8f845504e2af92195aaa8a1679d8d692 925c4f8eab2531135cd71a4ec88e7035b5eea34ba9d799c5898856080256b4a15ed1a746e002552e2a86c9c157e22e83 a9f9a368f0e0b24d00a35b325964c85b69533013f9c2cfad9708be5fb87ff455210f8cb8d2ce3ba58ca3f27495552899 8ac0d3bebc1cae534024187e7c71f8927ba8fcc6a1926cb61c2b6c8f26bb7831019e635a376146c29872a506784a4aaa 97c577be2cbbfdb37ad754fae9df2ada5fc5889869efc7e18a13f8e502fbf3f4067a509efbd46fd990ab47ce9a70f5a8 935e7d82bca19f16614aa43b4a3474e4d20d064e4bfdf1cea2909e5c9ab72cfe3e54dc50030e41ee84f3588cebc524e9 941aafc08f7c0d94cebfbb1f0aad5202c02e6e37f2c12614f57e727efa275f3926348f567107ee6d8914dd71e6060271 af0fbc1ba05b4b5b63399686df3619968be5d40073de0313cbf5f913d3d4b518d4c249cdd2176468ccaa36040a484f58 a0c414f23f46ca6d69ce74c6f8a00c036cb0edd098af0c1a7d39c802b52cfb2d5dbdf93fb0295453d4646e2af7954d45 909cf39e11b3875bb63b39687ae1b5d1f5a15445e39bf164a0b14691b4ddb39a8e4363f584ef42213616abc4785b5d66 a92bac085d1194fbd1c88299f07a061d0bdd3f980b663e81e6254dbb288bf11478c0ee880e28e01560f12c5ccb3c0103 841705cd5cd76b943e2b7c5e845b9dd3c8defe8ef67e93078d6d5e67ade33ad4b0fd413bc196f93b0a4073c855cd97d4 8e7eb8364f384a9161e81d3f1d52ceca9b65536ae49cc35b48c3e2236322ba4ae9973e0840802d9fa4f4d82ea833544f aed3ab927548bc8bec31467ba80689c71a168e34f50dcb6892f19a33a099f5aa6b3f9cb79f5c0699e837b9a8c7f27efe b8fbf7696210a36e20edabd77839f4dfdf50d6d015cdf81d587f90284a9bcef7d2a1ff520728d7cc69a4843d6c20dedd a9d533769ce6830211c884ae50a82a7bf259b44ac71f9fb11f0296fdb3981e6b4c1753fe744647b247ebc433a5a61436 8b4bdf90d33360b7f428c71cde0a49fb733badba8c726876945f58c620ce7768ae0e98fc8c31fa59d8955a4823336bb1 808d42238e440e6571c59e52a35ae32547d502dc24fd1759d8ea70a7231a95859baf30b490a4ba55fa2f3aaa11204597 85594701f1d2fee6dc1956bc44c7b31db93bdeec2f3a7d622c1a08b26994760773e3d57521a44cfd7e407ac3fd430429 a66de045ce7173043a6825e9dc440ac957e2efb6df0a337f4f8003eb0c719d873a52e6eba3cb0d69d977ca37d9187674 87a1c6a1fdff993fa51efa5c3ba034c079c0928a7d599b906336af7c2dcab9721ceaf3108c646490af9dff9a754f54b3 926424223e462ceb75aed7c22ade8a7911a903b7e5dd4bc49746ddce8657f4616325cd12667d4393ac52cdd866396d0e b5dc96106593b42b30f06f0b0a1e0c1aafc70432e31807252d3674f0b1ea5e58eac8424879d655c9488d85a879a3e572 997ca0987735cc716507cb0124b1d266d218b40c9d8e0ecbf26a1d65719c82a637ce7e8be4b4815d307df717bde7c72a 92994d3f57a569b7760324bb5ae4e8e14e1633d175dab06aa57b8e391540e05f662fdc08b8830f489a063f59b689a688 a8087fcc6aa4642cb998bea11facfe87eb33b90a9aa428ab86a4124ad032fc7d2e57795311a54ec9f55cc120ebe42df1 a9bd7d1de6c0706052ca0b362e2e70e8c8f70f1f026ea189b4f87a08ce810297ebfe781cc8004430776c54c1a05ae90c 856d33282e8a8e33a3d237fb0a0cbabaf77ba9edf2fa35a831fdafcadf620561846aa6cbb6bdc5e681118e1245834165 9524a7aa8e97a31a6958439c5f3339b19370f03e86b89b1d02d87e4887309dbbe9a3a8d2befd3b7ed5143c8da7e0a8ad 824fdf433e090f8acbd258ac7429b21f36f9f3b337c6d0b71d1416a5c88a767883e255b2888b7c906dd2e9560c4af24c 88c7fee662ca7844f42ed5527996b35723abffd0d22d4ca203b9452c639a5066031207a5ae763dbc0865b3299d19b1ec 919dca5c5595082c221d5ab3a5bc230f45da7f6dec4eb389371e142c1b9c6a2c919074842479c2844b72c0d806170c0c b939be8175715e55a684578d8be3ceff3087f60fa875fff48e52a6e6e9979c955efef8ff67cfa2b79499ea23778e33b0 873b6db725e7397d11bc9bed9ac4468e36619135be686790a79bc6ed4249058f1387c9a802ea86499f692cf635851066 aeae06db3ec47e9e5647323fa02fac44e06e59b885ad8506bf71b184ab3895510c82f78b6b22a5d978e8218e7f761e9f b99c0a8359c72ab88448bae45d4bf98797a26bca48b0d4460cd6cf65a4e8c3dd823970ac3eb774ae5d0cea4e7fadf33e 8f10c8ec41cdfb986a1647463076a533e6b0eec08520c1562401b36bb063ac972aa6b28a0b6ce717254e35940b900e3c a106d9be199636d7add43b942290269351578500d8245d4aae4c083954e4f27f64740a3138a66230391f2d0e6043a8de a469997908244578e8909ff57cffc070f1dbd86f0098df3cfeb46b7a085cfecc93dc69ee7cad90ff1dc5a34d50fe580c a4ef087bea9c20eb0afc0ee4caba7a9d29dfa872137828c721391273e402fb6714afc80c40e98bbd8276d3836bffa080 b07a013f73cd5b98dae0d0f9c1c0f35bff8a9f019975c4e1499e9bee736ca6fcd504f9bc32df1655ff333062382cff04 b0a77188673e87cc83348c4cc5db1eecf6b5184e236220c8eeed7585e4b928db849944a76ec60ef7708ef6dac02d5592 b1284b37e59b529f0084c0dacf0af6c0b91fc0f387bf649a8c74819debf606f7b07fc3e572500016fb145ec2b24e9f17 97b20b5b4d6b9129da185adfbf0d3d0b0faeba5b9715f10299e48ea0521709a8296a9264ce77c275a59c012b50b6519a b9d37e946fae5e4d65c1fbfacc8a62e445a1c9d0f882e60cca649125af303b3b23af53c81d7bac544fb7fcfc7a314665 8e5acaac379f4bb0127efbef26180f91ff60e4c525bc9b798fc50dfaf4fe8a5aa84f18f3d3cfb8baead7d1e0499af753 b0c0b8ab1235bf1cda43d4152e71efc1a06c548edb964eb4afceb201c8af24240bf8ab5cae30a08604e77432b0a5faf0 8cc28d75d5c8d062d649cbc218e31c4d327e067e6dbd737ec0a35c91db44fbbd0d40ec424f5ed79814add16947417572 95ae6219e9fd47efaa9cb088753df06bc101405ba50a179d7c9f7c85679e182d3033f35b00dbba71fdcd186cd775c52e b5d28fa09f186ebc5aa37453c9b4d9474a7997b8ae92748ecb940c14868792292ac7d10ade01e2f8069242b308cf97e5 8c922a0faa14cc6b7221f302df3342f38fc8521ec6c653f2587890192732c6da289777a6cd310747ea7b7d104af95995 b9ad5f660b65230de54de535d4c0fcae5bc6b59db21dea5500fdc12eea4470fb8ea003690fdd16d052523418d5e01e8c a39a9dd41a0ff78c82979483731f1cd68d3921c3e9965869662c22e02dde3877802e180ba93f06e7346f96d9fa9261d2 8b32875977ec372c583b24234c27ed73aef00cdff61eb3c3776e073afbdeade548de9497c32ec6d703ff8ad0a5cb7fe4 9644cbe755a5642fe9d26cfecf170d3164f1848c2c2e271d5b6574a01755f3980b3fc870b98cf8528fef6ecef4210c16 81ea9d1fdd9dd66d60f40ce0712764b99da9448ae0b300f8324e1c52f154e472a086dda840cb2e0b9813dc8ce8afd4b5 906aaa4a7a7cdf01909c5cfbc7ded2abc4b869213cbf7c922d4171a4f2e637e56f17020b852ad339d83b8ac92f111666 939b5f11acbdeff998f2a080393033c9b9d8d5c70912ea651c53815c572d36ee822a98d6dfffb2e339f29201264f2cf4 aba4898bf1ccea9b9e2df1ff19001e05891581659c1cbbde7ee76c349c7fc7857261d9785823c9463a8aea3f40e86b38 83ca1a56b8a0be4820bdb5a9346357c68f9772e43f0b887729a50d2eb2a326bbcede676c8bf2e51d7c89bbd8fdb778a6 94e86e9fe6addfe2c3ee3a547267ed921f4230d877a85bb4442c2d9350c2fa9a9c54e6fe662de82d1a2407e4ab1691c2 a0cc3bdef671a59d77c6984338b023fa2b431b32e9ed2abe80484d73edc6540979d6f10812ecc06d4d0c5d4eaca7183c b5343413c1b5776b55ea3c7cdd1f3af1f6bd802ea95effe3f2b91a523817719d2ecc3f8d5f3cc2623ace7e35f99ca967 92085d1ed0ed28d8cabe3e7ff1905ed52c7ceb1eac5503760c52fb5ee3a726aba7c90b483c032acc3f166b083d7ec370 8ec679520455275cd957fca8122724d287db5df7d29f1702a322879b127bff215e5b71d9c191901465d19c86c8d8d404 b65eb2c63d8a30332eb24ee8a0c70156fc89325ebbb38bacac7cf3f8636ad8a472d81ccca80423772abc00192d886d8a a9fe1c060b974bee4d590f2873b28635b61bfcf614e61ff88b1be3eee4320f4874e21e8d666d8ac8c9aba672efc6ecae b3fe2a9a389c006a831dea7e777062df84b5c2803f9574d7fbe10b7e1c125817986af8b6454d6be9d931a5ac94cfe963 95418ad13b734b6f0d33822d9912c4c49b558f68d08c1b34a0127fcfa666bcae8e6fda8832d2c75bb9170794a20e4d7c a9a7df761e7f18b79494bf429572140c8c6e9d456c4d4e336184f3f51525a65eb9582bea1e601bdb6ef8150b7ca736a5 a0de03b1e75edf7998c8c1ac69b4a1544a6fa675a1941950297917366682e5644a4bda9cdeedfaf9473d7fccd9080b0c a61838af8d95c95edf32663a68f007d95167bf6e41b0c784a30b22d8300cfdd5703bd6d16e86396638f6db6ae7e42a85 8866d62084d905c145ff2d41025299d8b702ac1814a7dec4e277412c161bc9a62fed735536789cb43c88693c6b423882 91da22c378c81497fe363e7f695c0268443abee50f8a6625b8a41e865638a643f07b157ee566de09ba09846934b4e2d7 941d21dd57c9496aa68f0c0c05507405fdd413acb59bc668ce7e92e1936c68ec4b065c3c30123319884149e88228f0b2 a77af9b094bc26966ddf2bf9e1520c898194a5ccb694915950dadc204facbe3066d3d89f50972642d76b14884cfbaa21 8e76162932346869f4618bde744647f7ab52ab498ad654bdf2a4feeb986ac6e51370841e5acbb589e38b6e7142bb3049 b60979ace17d6937ece72e4f015da4657a443dd01cebc7143ef11c09e42d4aa8855999a65a79e2ea0067f31c9fc2ab0f b3e2ffdd5ee6fd110b982fd4fad4b93d0fca65478f986d086eeccb0804960bfaa1919afa743c2239973ea65091fe57d2 8ce0ce05e7d7160d44574011da687454dbd3c8b8290aa671731b066e2c82f8cf2d63cb8e932d78c6122ec610e44660e6 ab005dd8d297045c39e2f72fb1c48edb501ccf3575d3d04b9817b3afee3f0bb0f3f53f64bda37d1d9cde545aae999bae 95bd7edb4c4cd60e3cb8a72558845a3cce6bb7032ccdf33d5a49ebb6ddf203bc3c79e7b7e550735d2d75b04c8b2441e8 889953ee256206284094e4735dbbb17975bafc7c3cb94c9fbfee4c3e653857bfd49e818f64a47567f721b98411a3b454 b188423e707640ab0e75a061e0b62830cde8afab8e1ad3dae30db69ffae4e2fc005bababbdcbd7213b918ed4f70e0c14 a97e0fafe011abd70d4f99a0b36638b3d6e7354284588f17a88970ed48f348f88392779e9a038c6cbc9208d998485072 87db11014a91cb9b63e8dfaa82cdebca98272d89eb445ee1e3ff9dbaf2b3fad1a03b888cffc128e4fe208ed0dddece0f aad2e40364edd905d66ea4ac9d51f9640d6fda9a54957d26ba233809851529b32c85660fa401dbee3679ec54fa6dd966 863e99336ca6edf03a5a259e59a2d0f308206e8a2fb320cfc0be06057366df8e0f94b33a28f574092736b3c5ada84270 b34bcc56a057589f34939a1adc51de4ff6a9f4fee9c7fa9aa131e28d0cf0759a0c871b640162acdfbf91f3f1b59a3703 935dd28f2896092995c5eff1618e5b6efe7a40178888d7826da9b0503c2d6e68a28e7fac1a334e166d0205f0695ef614 b842cd5f8f5de5ca6c68cb4a5c1d7b451984930eb4cc18fd0934d52fdc9c3d2d451b1c395594d73bc3451432bfba653f 9014537885ce2debad736bc1926b25fdab9f69b216bf024f589c49dc7e6478c71d595c3647c9f65ff980b14f4bb2283b 8e827ccca1dd4cd21707140d10703177d722be0bbe5cac578db26f1ef8ad2909103af3c601a53795435b27bf95d0c9ed 8a0b8ad4d466c09d4f1e9167410dbe2edc6e0e6229d4b3036d30f85eb6a333a18b1c968f6ca6d6889bb08fecde017ef4 9241ee66c0191b06266332dc9161dede384c4bb4e116dbd0890f3c3790ec5566da4568243665c4725b718ac0f6b5c179 aeb4d5fad81d2b505d47958a08262b6f1b1de9373c2c9ba6362594194dea3e002ab03b8cbb43f867be83065d3d370f19 8781bc83bb73f7760628629fe19e4714b494dbed444c4e4e4729b7f6a8d12ee347841a199888794c2234f51fa26fc2b9 b58864f0acd1c2afa29367e637cbde1968d18589245d9936c9a489c6c495f54f0113ecdcbe4680ac085dd3c397c4d0c3 94a24284afaeead61e70f3e30f87248d76e9726759445ca18cdb9360586c60cc9f0ec1c397f9675083e0b56459784e2e aed358853f2b54dcbddf865e1816c2e89be12e940e1abfa661e2ee63ffc24a8c8096be2072fa83556482c0d89e975124 b95374e6b4fc0765708e370bc881e271abf2e35c08b056a03b847e089831ef4fe3124b9c5849d9c276eb2e35b3daf264 b834cdbcfb24c8f84bfa4c552e7fadc0028a140952fd69ed13a516e1314a4cd35d4b954a77d51a1b93e1f5d657d0315d 8fb6d09d23bfa90e7443753d45a918d91d75d8e12ec7d016c0dfe94e5c592ba6aaf483d2f16108d190822d955ad9cdc3 aa315cd3c60247a6ad4b04f26c5404c2713b95972843e4b87b5a36a89f201667d70f0adf20757ebe1de1b29ae27dda50 a116862dca409db8beff5b1ccd6301cdd0c92ca29a3d6d20eb8b87f25965f42699ca66974dd1a355200157476b998f3b b4c2f5fe173c4dc8311b60d04a65ce1be87f070ac42e13cd19c6559a2931c6ee104859cc2520edebbc66a13dc7d30693 8d4a02bf99b2260c334e7d81775c5cf582b00b0c982ce7745e5a90624919028278f5e9b098573bad5515ce7fa92a80c8 8543493bf564ce6d97bd23be9bff1aba08bd5821ca834f311a26c9139c92a48f0c2d9dfe645afa95fec07d675d1fd53b 9344239d13fde08f98cb48f1f87d34cf6abe8faecd0b682955382a975e6eed64e863fa19043290c0736261622e00045c aa49d0518f343005ca72b9e6c7dcaa97225ce6bb8b908ebbe7b1a22884ff8bfb090890364e325a0d414ad180b8f161d1 907d7fd3e009355ab326847c4a2431f688627faa698c13c03ffdd476ecf988678407f029b8543a475dcb3dafdf2e7a9c 845f1f10c6c5dad2adc7935f5cd2e2b32f169a99091d4f1b05babe7317b9b1cdce29b5e62f947dc621b9acbfe517a258 8f3be8e3b380ea6cdf9e9c237f5e88fd5a357e5ded80ea1fc2019810814de82501273b4da38916881125b6fa0cfd4459 b9c7f487c089bf1d20c822e579628db91ed9c82d6ca652983aa16d98b4270c4da19757f216a71b9c13ddee3e6e43705f 8ba2d8c88ad2b872db104ea8ddbb006ec2f3749fd0e19298a804bb3a5d94de19285cc7fb19fee58a66f7851d1a66c39f 9375ecd3ed16786fe161af5d5c908f56eeb467a144d3bbddfc767e90065b7c94fc53431adebecba2b6c9b5821184d36e a49e069bfadb1e2e8bff6a4286872e2a9765d62f0eaa4fcb0e5af4bbbed8be3510fb19849125a40a8a81d1e33e81c3eb 9522cc66757b386aa6b88619525c8ce47a5c346d590bb3647d12f991e6c65c3ab3c0cfc28f0726b6756c892eae1672be a9a0f1f51ff877406fa83a807aeb17b92a283879f447b8a2159653db577848cc451cbadd01f70441e351e9ed433c18bc 8ff7533dcff6be8714df573e33f82cf8e9f2bcaaa43e939c4759d52b754e502717950de4b4252fb904560fc31dce94a4 959724671e265a28d67c29d95210e97b894b360da55e4cf16e6682e7912491ed8ca14bfaa4dce9c25a25b16af580494f 92566730c3002f4046c737032487d0833c971e775de59fe02d9835c9858e2e3bc37f157424a69764596c625c482a2219 a84b47ceff13ed9c3e5e9cdf6739a66d3e7c2bd8a6ba318fefb1a9aecf653bb2981da6733ddb33c4b0a4523acc429d23 b4ddf571317e44f859386d6140828a42cf94994e2f1dcbcc9777f4eebbfc64fc1e160b49379acc27c4672b8e41835c5d 8ab95c94072b853d1603fdd0a43b30db617d13c1d1255b99075198e1947bfa5f59aed2b1147548a1b5e986cd9173d15c 89511f2eab33894fd4b3753d24249f410ff7263052c1fef6166fc63a79816656b0d24c529e45ccce6be28de6e375d916 a0866160ca63d4f2be1b4ea050dac6b59db554e2ebb4e5b592859d8df339b46fd7cb89aaed0951c3ee540aee982c238a 8fcc5cbba1b94970f5ff2eb1922322f5b0aa7d918d4b380c9e7abfd57afd8b247c346bff7b87af82efbce3052511cd1b 99aeb2a5e846b0a2874cca02c66ed40d5569eb65ab2495bc3f964a092e91e1517941f2688e79f8cca49cd3674c4e06dc b7a096dc3bad5ca49bee94efd884aa3ff5615cf3825cf95fbe0ce132e35f46581d6482fa82666c7ef5f1643eaee8f1ca 94393b1da6eaac2ffd186b7725eca582f1ddc8cdd916004657f8a564a7c588175cb443fc6943b39029f5bbe0add3fad8 884b85fe012ccbcd849cb68c3ad832d83b3ef1c40c3954ffdc97f103b1ed582c801e1a41d9950f6bddc1d11f19d5ec76 b00061c00131eded8305a7ce76362163deb33596569afb46fe499a7c9d7a0734c084d336b38d168024c2bb42b58e7660 a439153ac8e6ca037381e3240e7ba08d056c83d7090f16ed538df25901835e09e27de2073646e7d7f3c65056af6e4ce7 830fc9ca099097d1f38b90e6843dc86f702be9d20bdacc3e52cae659dc41df5b8d2c970effa6f83a5229b0244a86fe22 b81ea2ffaaff2bb00dd59a9ab825ba5eed4db0d8ac9c8ed1a632ce8f086328a1cddd045fbe1ace289083c1325881b7e7 b51ea03c58daf2db32c99b9c4789b183365168cb5019c72c4cc91ac30b5fb7311d3db76e6fa41b7cd4a8c81e2f6cdc94 a4170b2c6d09ca5beb08318730419b6f19215ce6c631c854116f904be3bc30dd85a80c946a8ab054d3e307afaa3f8fbc 897cc42ff28971ff54d2a55dd6b35cfb8610ac902f3c06e3a5cea0e0a257e870c471236a8e84709211c742a09c5601a6 a18f2e98d389dace36641621488664ecbb422088ab03b74e67009b8b8acacaaa24fdcf42093935f355207d934adc52a8 92adcfb678cc2ba19c866f3f2b988fdcb4610567f3ab436cc0cb9acaf5a88414848d71133ebdbec1983e38e6190f1b5f a86d43c2ce01b366330d3b36b3ca85f000c3548b8297e48478da1ee7d70d8576d4650cba7852ed125c0d7cb6109aa7f3 8ed31ceed9445437d7732dce78a762d72ff32a7636bfb3fd7974b7ae15db414d8184a1766915244355deb354fbc5803b 9268f70032584f416e92225d65af9ea18c466ebc7ae30952d56a4e36fd9ea811dde0a126da9220ba3c596ec54d8a335e 9433b99ee94f2d3fbdd63b163a2bdf440379334c52308bd24537f7defd807145a062ff255a50d119a7f29f4b85d250e3 90ce664f5e4628a02278f5cf5060d1a34f123854634b1870906e5723ac9afd044d48289be283b267d45fcbf3f4656aaf aaf21c4d59378bb835d42ae5c5e5ab7a3c8c36a59e75997989313197752b79a472d866a23683b329ea69b048b87fa13e b83c0589b304cec9ede549fde54f8a7c2a468c6657da8c02169a6351605261202610b2055c639b9ed2d5b8c401fb8f56 9370f326ea0f170c2c05fe2c5a49189f20aec93b6b18a5572a818cd4c2a6adb359e68975557b349fb54f065d572f4c92 ac3232fa5ce6f03fca238bef1ce902432a90b8afce1c85457a6bee5571c033d4bceefafc863af04d4e85ac72a4d94d51 80d9ea168ff821b22c30e93e4c7960ce3ad3c1e6deeebedd342a36d01bd942419b187e2f382dbfd8caa34cca08d06a48 a387a3c61676fb3381eefa2a45d82625635a666e999aba30e3b037ec9e040f414f9e1ad9652abd3bcad63f95d85038db a1b229fe32121e0b391b0f6e0180670b9dc89d79f7337de4c77ea7ad0073e9593846f06797c20e923092a08263204416 92164a9d841a2b828cedf2511213268b698520f8d1285852186644e9a0c97512cafa4bfbe29af892c929ebccd102e998 82ee2fa56308a67c7db4fd7ef539b5a9f26a1c2cc36da8c3206ba4b08258fbb3cec6fe5cdbd111433fb1ba2a1e275927 8c77bfe9e191f190a49d46f05600603fa42345592539b82923388d72392404e0b29a493a15e75e8b068dddcd444c2928 80b927f93ccf79dcf5c5b20bcf5a7d91d7a17bc0401bb7cc9b53a6797feac31026eb114257621f5a64a52876e4474cc1 b6b68b6501c37804d4833d5a063dd108a46310b1400549074e3cac84acc6d88f73948b7ad48d686de89c1ec043ae8c1a ab3da00f9bdc13e3f77624f58a3a18fc3728956f84b5b549d62f1033ae4b300538e53896e2d943f160618e05af265117 b6830e87233b8eace65327fdc764159645b75d2fd4024bf8f313b2dd5f45617d7ecfb4a0b53ccafb5429815a9a1adde6 b9251cfe32a6dc0440615aadcd98b6b1b46e3f4e44324e8f5142912b597ee3526bea2431e2b0282bb58f71be5b63f65e af8d70711e81cdddfb39e67a1b76643292652584c1ce7ce4feb1641431ad596e75c9120e85f1a341e7a4da920a9cdd94 98cd4e996594e89495c078bfd52a4586b932c50a449a7c8dfdd16043ca4cda94dafbaa8ad1b44249c99bbcc52152506e b9fc6d1c24f48404a4a64fbe3e43342738797905db46e4132aee5f086aaa4c704918ad508aaefa455cfe1b36572e6242 a365e871d30ba9291cedaba1be7b04e968905d003e9e1af7e3b55c5eb048818ae5b913514fb08b24fb4fbdccbb35d0b8 93bf99510971ea9af9f1e364f1234c898380677c8e8de9b0dd24432760164e46c787bc9ec42a7ad450500706cf247b2d b872f825a5b6e7b9c7a9ddfeded3516f0b1449acc9b4fd29fc6eba162051c17416a31e5be6d3563f424d28e65bab8b8f b06b780e5a5e8eb4f4c9dc040f749cf9709c8a4c9ef15e925f442b696e41e5095db0778a6c73bcd329b265f2c6955c8b 848f1a981f5fc6cd9180cdddb8d032ad32cdfa614fc750d690dbae36cc0cd355cbf1574af9b3ffc8b878f1b2fafb9544 a03f48cbff3e9e8a3a655578051a5ae37567433093ac500ed0021c6250a51b767afac9bdb194ee1e3eac38a08c0eaf45 b5be78ce638ff8c4aa84352b536628231d3f7558c5be3bf010b28feac3022e64691fa672f358c8b663904aebe24a54ed a9d4da70ff676fa55d1728ba6ab03b471fa38b08854d99e985d88c2d050102d8ccffbe1c90249a5607fa7520b15fe791 8fe9f7092ffb0b69862c8e972fb1ecf54308c96d41354ed0569638bb0364f1749838d6d32051fff1599112978c6e229c ae6083e95f37770ecae0df1e010456f165d96cfe9a7278c85c15cffd61034081ce5723e25e2bede719dc9341ec8ed481 a260891891103089a7afbd9081ea116cfd596fd1015f5b65e10b0961eb37fab7d09c69b7ce4be8bf35e4131848fb3fe4 8d729fa32f6eb9fd2f6a140bef34e8299a2f3111bffd0fe463aa8622c9d98bfd31a1df3f3e87cd5abc52a595f96b970e a30ec6047ae4bc7da4daa7f4c28c93aedb1112cfe240e681d07e1a183782c9ff6783ac077c155af23c69643b712a533f ac830726544bfe7b5467339e5114c1a75f2a2a8d89453ce86115e6a789387e23551cd64620ead6283dfa4538eb313d86 8445c135b7a48068d8ed3e011c6d818cfe462b445095e2fbf940301e50ded23f272d799eea47683fc027430ce14613ef 95785411715c9ae9d8293ce16a693a2aa83e3cb1b4aa9f76333d0da2bf00c55f65e21e42e50e6c5772ce213dd7b4f7a0 b273b024fa18b7568c0d1c4d2f0c4e79ec509dafac8c5951f14192d63ddbcf2d8a7512c1c1b615cc38fa3e336618e0c5 a78b9d3ea4b6a90572eb27956f411f1d105fdb577ee2ffeec9f221da9b45db84bfe866af1f29597220c75e0c37a628d8 a4be2bf058c36699c41513c4d667681ce161a437c09d81383244fc55e1c44e8b1363439d0cce90a3e44581fb31d49493 b6eef13040f17dd4eba22aaf284d2f988a4a0c4605db44b8d2f4bf9567ac794550b543cc513c5f3e2820242dd704152e 87eb00489071fa95d008c5244b88e317a3454652dcb1c441213aa16b28cd3ecaa9b22fec0bdd483c1df71c37119100b1 92d388acdcb49793afca329cd06e645544d2269234e8b0b27d2818c809c21726bc9cf725651b951e358a63c83dedee24 ae27e219277a73030da27ab5603c72c8bd81b6224b7e488d7193806a41343dff2456132274991a4722fdb0ef265d04cd 97583e08ecb82bbc27c0c8476d710389fa9ffbead5c43001bd36c1b018f29faa98de778644883e51870b69c5ffb558b5 90a799a8ce73387599babf6b7da12767c0591cadd36c20a7990e7c05ea1aa2b9645654ec65308ee008816623a2757a6a a1b47841a0a2b06efd9ab8c111309cc5fc9e1d5896b3e42ed531f6057e5ade8977c29831ce08dbda40348386b1dcc06d b92b8ef59bbddb50c9457691bc023d63dfcc54e0fd88bd5d27a09e0d98ac290fc90e6a8f6b88492043bf7c87fac8f3e4 a9d6240b07d62e22ec8ab9b1f6007c975a77b7320f02504fc7c468b4ee9cfcfd945456ff0128bc0ef2174d9e09333f8d 8e96534c94693226dc32bca79a595ca6de503af635f802e86442c67e77564829756961d9b701187fe91318da515bf0e6 b6ba290623cd8dd5c2f50931c0045d1cfb0c30877bc8fe58cbc3ff61ee8da100045a39153916efa1936f4aee0892b473 b43baa7717fac02d4294f5b3bb5e58a65b3557747e3188b482410388daac7a9c177f762d943fd5dcf871273921213da8 b9cf00f8fb5e2ef2b836659fece15e735060b2ea39b8e901d3dcbdcf612be8bf82d013833718c04cd46ffaa70b85f42e 8017d0c57419e414cbba504368723e751ef990cc6f05dad7b3c2de6360adc774ad95512875ab8337d110bf39a42026fa ae7401048b838c0dcd4b26bb6c56d79d51964a0daba780970b6c97daee4ea45854ea0ac0e4139b3fe60dac189f84df65 887b237b0cd0f816b749b21db0b40072f9145f7896c36916296973f9e6990ede110f14e5976c906d08987c9836cca57f a88c3d5770148aee59930561ca1223aceb2c832fb5417e188dca935905301fc4c6c2c9270bc1dff7add490a125eb81c6 b6cf9b02c0cd91895ad209e38c54039523f137b5848b9d3ad33ae43af6c20c98434952db375fe378de7866f2d0e8b18a 84ef3d322ff580c8ad584b1fe4fe346c60866eb6a56e982ba2cf3b021ecb1fdb75ecc6c29747adda86d9264430b3f816 a0561c27224baf0927ad144cb71e31e54a064c598373fcf0d66aebf98ab7af1d8e2f343f77baefff69a6da750a219e11 aa5cc43f5b8162b016f5e1b61214c0c9d15b1078911c650b75e6cdfb49b85ee04c6739f5b1687d15908444f691f732de ad4ac099b935589c7b8fdfdf3db332b7b82bb948e13a5beb121ebd7db81a87d278024a1434bcf0115c54ca5109585c3d 8a00466abf3f109a1dcd19e643b603d3af23d42794ef8ca2514dd507ecea44a031ac6dbc18bd02f99701168b25c1791e b00b5900dfad79645f8bee4e5adc7b84eb22e5b1e67df77ccb505b7fc044a6c08a8ea5faca662414eb945f874f884cea 950e204e5f17112250b22ea6bb8423baf522fc0af494366f18fe0f949f51d6e6812074a80875cf1ed9c8e7420058d541 91e5cbf8bb1a1d50c81608c9727b414d0dd2fb467ebc92f100882a3772e54f94979cfdf8e373fdef7c7fcdd60fec9e00 a093f6a857b8caaff80599c2e89c962b415ecbaa70d8fd973155fa976a284c6b29a855f5f7a3521134d00d2972755188 b4d55a3551b00da54cc010f80d99ddd2544bde9219a3173dfaadf3848edc7e4056ab532fb75ac26f5f7141e724267663 a03ea050fc9b011d1b04041b5765d6f6453a93a1819cd9bd6328637d0b428f08526466912895dcc2e3008ee58822e9a7 99b12b3665e473d01bc6985844f8994fb65cb15745024fb7af518398c4a37ff215da8f054e8fdf3286984ae36a73ca5e 9972c7e7a7fb12e15f78d55abcaf322c11249cd44a08f62c95288f34f66b51f146302bce750ff4d591707075d9123bd2 a64b4a6d72354e596d87cda213c4fc2814009461570ccb27d455bbe131f8d948421a71925425b546d8cf63d5458cd64b 91c215c73b195795ede2228b7ed1f6e37892e0c6b0f4a0b5a16c57aa1100c84df9239054a173b6110d6c2b7f4bf1ce52 88807198910ec1303480f76a3683870246a995e36adaeadc29c22f0bdba8152fe705bd070b75de657b04934f7d0ccf80 b37c0026c7b32eb02cacac5b55cb5fe784b8e48b2945c64d3037af83ece556a117f0ff053a5968c2f5fa230e291c1238 94c768384ce212bc2387e91ce8b45e4ff120987e42472888a317abc9dcdf3563b62e7a61c8e98d7cdcbe272167d91fc6 a10c2564936e967a390cb14ef6e8f8b04ea9ece5214a38837eda09e79e0c7970b1f83adf017c10efd6faa8b7ffa2c567 a5085eed3a95f9d4b1269182ea1e0d719b7809bf5009096557a0674bde4201b0ddc1f0f16a908fc468846b3721748ce3 87468eb620b79a0a455a259a6b4dfbc297d0d53336537b771254dd956b145dc816b195b7002647ea218552e345818a3f ace2b77ffb87366af0a9cb5d27d6fc4a14323dbbf1643f5f3c4559306330d86461bb008894054394cbfaefeaa0bc2745 b27f56e840a54fbd793f0b7a7631aa4cee64b5947e4382b2dfb5eb1790270288884c2a19afebe5dc0c6ef335d4531c1c 876e438633931f7f895062ee16c4b9d10428875f7bc79a8e156a64d379a77a2c45bf5430c5ab94330f03da352f1e9006 a2512a252587d200d2092b44c914df54e04ff8bcef36bf631f84bde0cf5a732e3dc7f00f662842cfd74b0b0f7f24180e 827f1bc8f54a35b7a4bd8154f79bcc055e45faed2e74adf7cf21cca95df44d96899e847bd70ead6bb27b9c0ed97bbd8b a0c92cf5a9ed843714f3aea9fe7b880f622d0b4a3bf66de291d1b745279accf6ba35097849691370f41732ba64b5966b a63f5c1e222775658421c487b1256b52626c6f79cb55a9b7deb2352622cedffb08502042d622eb3b02c97f9c09f9c957 8cc093d52651e65fb390e186db6cc4de559176af4624d1c44cb9b0e836832419dacac7b8db0627b96288977b738d785d aa7b6a17dfcec146134562d32a12f7bd7fe9522e300859202a02939e69dbd345ed7ff164a184296268f9984f9312e8fc 8ac76721f0d2b679f023d06cbd28c85ae5f4b43c614867ccee88651d4101d4fd352dbdb65bf36bfc3ebc0109e4b0c6f9 8d350f7c05fc0dcd9a1170748846fb1f5d39453e4cb31e6d1457bed287d96fc393b2ecc53793ca729906a33e59c6834a b9913510dfc5056d7ec5309f0b631d1ec53e3a776412ada9aefdaf033c90da9a49fdde6719e7c76340e86599b1f0eec2 94955626bf4ce87612c5cfffcf73bf1c46a4c11a736602b9ba066328dc52ad6d51e6d4f53453d4ed55a51e0aad810271 b0fcab384fd4016b2f1e53f1aafd160ae3b1a8865cd6c155d7073ecc1664e05b1d8bca1def39c158c7086c4e1103345e 827de3f03edfbde08570b72de6662c8bfa499b066a0a27ebad9b481c273097d17a5a0a67f01553da5392ec3f149b2a78 ab7940384c25e9027c55c40df20bd2a0d479a165ced9b1046958353cd69015eeb1e44ed2fd64e407805ba42df10fc7bf 8ad456f6ff8cd58bd57567d931f923d0c99141978511b17e03cab7390a72b9f62498b2893e1b05c7c22dd274e9a31919 ac75399e999effe564672db426faa17a839e57c5ef735985c70cd559a377adec23928382767b55ed5a52f7b11b54b756 b17f975a00b817299ac7af5f2024ea820351805df58b43724393bfb3920a8cd747a3bbd4b8286e795521489db3657168 a2bed800a6d95501674d9ee866e7314063407231491d794f8cf57d5be020452729c1c7cefd8c50dc1540181f5caab248 9743f5473171271ffdd3cc59a3ae50545901a7b45cd4bc3570db487865f3b73c0595bebabbfe79268809ee1862e86e4a b7eab77c2d4687b60d9d7b04e842b3880c7940140012583898d39fcc22d9b9b0a9be2c2e3788b3e6f30319b39c338f09 8e2b8f797a436a1b661140e9569dcf3e1eea0a77c7ff2bc4ff0f3e49af04ed2de95e255df8765f1d0927fb456a9926b1 8aefea201d4a1f4ff98ffce94e540bb313f2d4dfe7e9db484a41f13fc316ed02b282e1acc9bc6f56cad2dc2e393a44c9 b950c17c0e5ca6607d182144aa7556bb0efe24c68f06d79d6413a973b493bfdf04fd147a4f1ab03033a32004cc3ea66f b7b8dcbb179a07165f2dc6aa829fad09f582a71b05c3e3ea0396bf9e6fe73076f47035c031c2101e8e38e0d597eadd30 a9d77ed89c77ec1bf8335d08d41c3c94dcca9fd1c54f22837b4e54506b212aa38d7440126c80648ab7723ff18e65ed72 a819d6dfd4aef70e52b8402fe5d135f8082d40eb7d3bb5c4d7997395b621e2bb10682a1bad2c9caa33dd818550fc3ec6 8f6ee34128fac8bbf13ce2d68b2bb363eb4fd65b297075f88e1446ddeac242500eeb4ef0735e105882ff5ba8c44c139b b4440e48255c1644bcecf3a1e9958f1ec4901cb5b1122ee5b56ffd02cad1c29c4266999dbb85aa2605c1b125490074d4 a43304a067bede5f347775d5811cf65a6380a8d552a652a0063580b5c5ef12a0867a39c7912fa219e184f4538eba1251 a891ad67a790089ffc9f6d53e6a3d63d3556f5f693e0cd8a7d0131db06fd4520e719cfcc3934f0a8f62a95f90840f1d4 aea6df8e9bb871081aa0fc5a9bafb00be7d54012c5baf653791907d5042a326aeee966fd9012a582cc16695f5baf7042 8ffa2660dc52ed1cd4eff67d6a84a8404f358a5f713d04328922269bee1e75e9d49afeec0c8ad751620f22352a438e25 87ec6108e2d63b06abed350f8b363b7489d642486f879a6c3aa90e5b0f335efc2ff2834eef9353951a42136f8e6a1b32 865619436076c2760d9e87ddc905023c6de0a8d56eef12c98a98c87837f2ca3f27fd26a2ad752252dbcbe2b9f1d5a032 980437dce55964293cb315c650c5586ffd97e7a944a83f6618af31c9d92c37b53ca7a21bb5bc557c151b9a9e217e7098 95d128fc369df4ad8316b72aea0ca363cbc7b0620d6d7bb18f7076a8717a6a46956ff140948b0cc4f6d2ce33b5c10054 8c7212d4a67b9ec70ebbca04358ad2d36494618d2859609163526d7b3acc2fc935ca98519380f55e6550f70a9bc76862 893a2968819401bf355e85eee0f0ed0406a6d4a7d7f172d0017420f71e00bb0ba984f6020999a3cdf874d3cd8ebcd371 9103c1af82dece25d87274e89ea0acd7e68c2921c4af3d8d7c82ab0ed9990a5811231b5b06113e7fa43a6bd492b4564f 99cfd87a94eab7d35466caa4ed7d7bb45e5c932b2ec094258fb14bf205659f83c209b83b2f2c9ccb175974b2a33e7746 874b6b93e4ee61be3f00c32dd84c897ccd6855c4b6251eb0953b4023634490ed17753cd3223472873cbc6095b2945075 84a32c0dc4ea60d33aac3e03e70d6d639cc9c4cc435c539eff915017be3b7bdaba33349562a87746291ebe9bc5671f24 a7057b24208928ad67914e653f5ac1792c417f413d9176ba635502c3f9c688f7e2ee81800d7e3dc0a340c464da2fd9c5 a03fb9ed8286aacfa69fbd5d953bec591c2ae4153400983d5dbb6cd9ea37fff46ca9e5cceb9d117f73e9992a6c055ad2 863b2de04e89936c9a4a2b40380f42f20aefbae18d03750fd816c658aee9c4a03df7b12121f795c85d01f415baaeaa59 8526eb9bd31790fe8292360d7a4c3eed23be23dd6b8b8f01d2309dbfdc0cfd33ad1568ddd7f8a610f3f85a9dfafc6a92 b46ab8c5091a493d6d4d60490c40aa27950574a338ea5bbc045be3a114af87bdcb160a8c80435a9b7ad815f3cb56a3f3 aeadc47b41a8d8b4176629557646202f868b1d728b2dda58a347d937e7ffc8303f20d26d6c00b34c851b8aeec547885d aebb19fc424d72c1f1822aa7adc744cd0ef7e55727186f8df8771c784925058c248406ebeeaf3c1a9ee005a26e9a10c6 8ff96e81c1a4a2ab1b4476c21018fae0a67e92129ee36120cae8699f2d7e57e891f5c624902cb1b845b944926a605cc3 8251b8d2c43fadcaa049a9e7aff838dae4fb32884018d58d46403ac5f3beb5c518bfd45f03b8abb710369186075eb71c a8b2a64f865f51a5e5e86a66455c093407933d9d255d6b61e1fd81ffafc9538d73caaf342338a66ba8ee166372a3d105 aad915f31c6ba7fdc04e2aaac62e84ef434b7ee76a325f07dc430d12c84081999720181067b87d792efd0117d7ee1eab a13db3bb60389883fd41d565c54fb5180d9c47ce2fe7a169ae96e01d17495f7f4fa928d7e556e7c74319c4c25d653eb2 a4491b0198459b3f552855d680a59214eb74e6a4d6c5fa3b309887dc50ebea2ecf6d26c040550f7dc478b452481466fb 8f017f13d4b1e3f0c087843582b52d5f8d13240912254d826dd11f8703a99a2f3166dfbdfdffd9a3492979d77524276b 96c3d5dcd032660d50d7cd9db2914f117240a63439966162b10c8f1f3cf74bc83b0f15451a43b31dbd85e4a7ce0e4bb1 b479ec4bb79573d32e0ec93b92bdd7ec8c26ddb5a2d3865e7d4209d119fd3499eaac527615ffac78c440e60ef3867ae0 b2c49c4a33aa94b52b6410b599e81ff15490aafa7e43c8031c865a84e4676354a9c81eb4e7b8be6825fdcefd1e317d44 906dc51d6a90c089b6704b47592805578a6eed106608eeb276832f127e1b8e858b72e448edcbefb497d152447e0e68ff b0e81c63b764d7dfbe3f3fddc9905aef50f3633e5d6a4af6b340495124abedcff5700dfd1577bbbed7b6bf97d02719cb 9304c64701e3b4ed6d146e48a881f7d83a17f58357cca0c073b2bb593afd2d94f6e2a7a1ec511d0a67ad6ff4c3be5937 b6fdbd12ba05aa598d80b83f70a15ef90e5cba7e6e75fa038540ee741b644cd1f408a6cecfd2a891ef8d902de586c6b5 b80557871a6521b1b3c74a1ba083ae055b575df607f1f7b04c867ba8c8c181ea68f8d90be6031f4d25002cca27c44da2 aa7285b8e9712e06b091f64163f1266926a36607f9d624af9996856ed2aaf03a580cb22ce407d1ade436c28b44ca173f 8148d72b975238b51e6ea389e5486940d22641b48637d7dfadfa603a605bfc6d74a016480023945d0b85935e396aea5d 8a014933a6aea2684b5762af43dcf4bdbb633cd0428d42d71167a2b6fc563ece5e618bff22f1db2ddb69b845b9a2db19 990d91740041db770d0e0eb9d9d97d826f09fd354b91c41e0716c29f8420e0e8aac0d575231efba12fe831091ec38d5a 9454d0d32e7e308ddec57cf2522fb1b67a2706e33fb3895e9e1f18284129ab4f4c0b7e51af25681d248d7832c05eb698 a5bd434e75bac105cb3e329665a35bce6a12f71dd90c15165777d64d4c13a82bceedb9b48e762bd24034e0fc9fbe45f4 b09e3b95e41800d4dc29c6ffdaab2cd611a0050347f6414f154a47ee20ee59bf8cf7181454169d479ebce1eb5c777c46 b193e341d6a047d15eea33766d656d807b89393665a783a316e9ba10518e5515c8e0ade3d6e15641d917a8a172a5a635 ade435ec0671b3621dde69e07ead596014f6e1daa1152707a8c18877a8b067bde2895dd47444ffa69db2bbef1f1d8816 a7fd3d6d87522dfc56fb47aef9ce781a1597c56a8bbfd796baba907afdc872f753d732bfda1d3402aee6c4e0c189f52d a298cb4f4218d0464b2fab393e512bbc477c3225aa449743299b2c3572f065bc3a42d07e29546167ed9e1b6b3b3a3af3 a9ee57540e1fd9c27f4f0430d194b91401d0c642456c18527127d1f95e2dba41c2c86d1990432eb38a692fda058fafde 81d6c1a5f93c04e6d8e5a7e0678c1fc89a1c47a5c920bcd36180125c49fcf7c114866b90e90a165823560b19898a7c16 a4b7a1ec9e93c899b9fd9aaf264c50e42c36c0788d68296a471f7a3447af4dbc81e4fa96070139941564083ec5b5b5a1 b3364e327d381f46940c0e11e29f9d994efc6978bf37a32586636c0070b03e4e23d00650c1440f448809e1018ef9f6d8 8056e0913a60155348300e3a62e28b5e30629a90f7dd4fe11289097076708110a1d70f7855601782a3cdc5bdb1ca9626 b4980fd3ea17bac0ba9ee1c470b17e575bb52e83ebdd7d40c93f4f87bebeaff1c8a679f9d3d09d635f068d37d5bd28bd 905a9299e7e1853648e398901dfcd437aa575c826551f83520df62984f5679cb5f0ea86aa45ed3e18b67ddc0dfafe809 ab99553bf31a84f2e0264eb34a08e13d8d15e2484aa9352354becf9a15999c76cc568d68274b70a65e49703fc23540d0 a43681597bc574d2dae8964c9a8dc1a07613d7a1272bdcb818d98c85d44e16d744250c33f3b5e4d552d97396b55e601f a54e5a31716fccb50245898c99865644405b8dc920ded7a11f3d19bdc255996054b268e16f2e40273f11480e7145f41e 8134f3ad5ef2ad4ba12a8a4e4d8508d91394d2bcdc38b7c8c8c0b0a820357ac9f79d286c65220f471eb1adca1d98fc68 94e2f755e60471578ab2c1adb9e9cea28d4eec9b0e92e0140770bca7002c365fcabfe1e5fb4fe6cfe79a0413712aa3ef ad48f8d0ce7eb3cc6e2a3086ad96f562e5bed98a360721492ae2e74dc158586e77ec8c35d5fd5927376301b7741bad2b 8614f0630bdd7fbad3a31f55afd9789f1c605dc85e7dc67e2edfd77f5105f878bb79beded6e9f0b109e38ea7da67e8d5 9804c284c4c5e77dabb73f655b12181534ca877c3e1e134aa3f47c23b7ec92277db34d2b0a5d38d2b69e5d1c3008a3e3 a51b99c3088e473afdaa9e0a9f7e75a373530d3b04e44e1148da0726b95e9f5f0c7e571b2da000310817c36f84b19f7f ac4ff909933b3b76c726b0a382157cdc74ab851a1ac6cef76953c6444441804cc43abb883363f416592e8f6cfbc4550b ae7d915eb9fc928b65a29d6edbc75682d08584d0014f7bcf17d59118421ae07d26a02137d1e4de6938bcd1ab8ef48fad 852f7e453b1af89b754df6d11a40d5d41ea057376e8ecacd705aacd2f917457f4a093d6b9a8801837fa0f62986ad7149 92c6bf5ada5d0c3d4dd8058483de36c215fa98edab9d75242f3eff9db07c734ad67337da6f0eefe23a487bf75a600dee a2b42c09d0db615853763552a48d2e704542bbd786aae016eb58acbf6c0226c844f5fb31e428cb6450b9db855f8f2a6f 880cc07968266dbfdcfbc21815cd69e0eddfee239167ac693fb0413912d816f2578a74f7716eecd6deefa68c6eccd394 b885b3ace736cd373e8098bf75ba66fa1c6943ca1bc4408cd98ac7074775c4478594f91154b8a743d9c697e1b29f5840 a51ce78de512bd87bfa0835de819941dffbf18bec23221b61d8096fc9436af64e0693c335b54e7bfc763f287bdca2db6 a3c76166a3bdb9b06ef696e57603b58871bc72883ee9d45171a30fe6e1d50e30bc9c51b4a0f5a7270e19a77b89733850 acefc5c6f8a1e7c24d7b41e0fc7f6f3dc0ede6cf3115ffb9a6e54b1d954cbca9bda8ad7a084be9be245a1b8e9770d141 b420ed079941842510e31cfad117fa11fb6b4f97dfbc6298cb840f27ebaceba23eeaf3f513bcffbf5e4aae946310182d 95c3bb5ef26c5ed2f035aa5d389c6b3c15a6705b9818a3fefaed28922158b35642b2e8e5a1a620fdad07e75ad4b43af4 825149f9081ecf07a2a4e3e8b5d21bade86c1a882475d51c55ee909330b70c5a2ac63771c8600c6f38df716af61a3ea1 873b935aae16d9f08adbc25353cee18af2f1b8d5f26dec6538d6bbddc515f2217ed7d235dcfea59ae61b428798b28637 9294150843a2bedcedb3bb74c43eb28e759cf9499582c5430bccefb574a8ddd4f11f9929257ff4c153990f9970a2558f b619563a811cc531da07f4f04e5c4c6423010ff9f8ed7e6ec9449162e3d501b269fb1c564c09c0429431879b0f45df02 91b509b87eb09f007d839627514658c7341bc76d468920fe8a740a8cb96a7e7e631e0ea584a7e3dc1172266f641d0f5c 8b8aceace9a7b9b4317f1f01308c3904d7663856946afbcea141a1c615e21ccad06b71217413e832166e9dd915fbe098 87b3b36e725833ea0b0f54753c3728c0dbc87c52d44d705ffc709f2d2394414c652d3283bab28dcce09799504996cee0 b2670aad5691cbf308e4a6a77a075c4422e6cbe86fdba24e9f84a313e90b0696afb6a067eebb42ba2d10340d6a2f6e51 876784a9aff3d54faa89b2bacd3ff5862f70195d0b2edc58e8d1068b3c9074c0da1cfa23671fe12f35e33b8a329c0ccd 8b48b9e758e8a8eae182f5cbec96f67d20cca6d3eee80a2d09208eb1d5d872e09ef23d0df8ebbb9b01c7449d0e3e3650 b79303453100654c04a487bdcadc9e3578bc80930c489a7069a52e8ca1dba36c492c8c899ce025f8364599899baa287d 961b35a6111da54ece6494f24dacd5ea46181f55775b5f03df0e370c34a5046ac2b4082925855325bb42bc2a2c98381d a31feb1be3f5a0247a1f7d487987eb622e34fca817832904c6ee3ee60277e5847945a6f6ea1ac24542c72e47bdf647df a12a2aa3e7327e457e1aae30e9612715dd2cfed32892c1cd6dcda4e9a18203af8a44afb46d03b2eed89f6b9c5a2c0c23 a08265a838e69a2ca2f80fead6ccf16f6366415b920c0b22ee359bcd8d4464ecf156f400a16a7918d52e6d733dd64211 b723d6344e938d801cca1a00032af200e541d4471fd6cbd38fb9130daa83f6a1dffbbe7e67fc20f9577f884acd7594b2 a6733d83ec78ba98e72ddd1e7ff79b7adb0e559e256760d0c590a986e742445e8cdf560d44b29439c26d87edd0b07c8c a61c2c27d3f7b9ff4695a17afedf63818d4bfba390507e1f4d0d806ce8778d9418784430ce3d4199fd3bdbc2504d2af3 8332f3b63a6dc985376e8b1b25eeae68be6160fbe40053ba7bcf6f073204f682da72321786e422d3482fd60c9e5aa034 a280f44877583fbb6b860d500b1a3f572e3ee833ec8f06476b3d8002058e25964062feaa1e5bec1536d734a5cfa09145 a4026a52d277fcea512440d2204f53047718ebfcae7b48ac57ea7f6bfbc5de9d7304db9a9a6cbb273612281049ddaec5 95cdf69c831ab2fad6c2535ede9c07e663d2ddccc936b64e0843d2df2a7b1c31f1759c3c20f1e7a57b1c8f0dbb21b540 95c96cec88806469c277ab567863c5209027cecc06c7012358e5f555689c0d9a5ffb219a464f086b45817e8536b86d2f afe38d4684132a0f03d806a4c8df556bf589b25271fbc6fe2e1ed16de7962b341c5003755da758d0959d2e6499b06c68 a9b77784fda64987f97c3a23c5e8f61b918be0f7c59ba285084116d60465c4a2aaafc8857eb16823282cc83143eb9126 a830f05881ad3ce532a55685877f529d32a5dbe56cea57ffad52c4128ee0fad0eeaf0da4362b55075e77eda7babe70e5 992b3ad190d6578033c13ed5abfee4ef49cbc492babb90061e3c51ee4b5790cdd4c8fc1abff1fa2c00183b6b64f0bbbe b1015424d9364aeff75de191652dc66484fdbec3e98199a9eb9671ec57bec6a13ff4b38446e28e4d8aedb58dd619cd90 a745304604075d60c9db36cada4063ac7558e7ec2835d7da8485e58d8422e817457b8da069f56511b02601289fbb8981 a5ba4330bc5cb3dbe0486ddf995632a7260a46180a08f42ae51a2e47778142132463cc9f10021a9ad36986108fefa1a9 b419e9fd4babcaf8180d5479db188bb3da232ae77a1c4ed65687c306e6262f8083070a9ac32220cddb3af2ec73114092 a49e23dc5f3468f3bf3a0bb7e4a114a788b951ff6f23a3396ae9e12cbff0abd1240878a3d1892105413dbc38818e807c b7ecc7b4831f650202987e85b86bc0053f40d983f252e9832ef503aea81c51221ce93279da4aa7466c026b2d2070e55d 96a8c35cb87f84fa84dcd6399cc2a0fd79cc9158ef4bdde4bae31a129616c8a9f2576cd19baa3f497ca34060979aed7d 8681b2c00aa62c2b519f664a95dcb8faef601a3b961bb4ce5d85a75030f40965e2983871d41ea394aee934e859581548 85c229a07efa54a713d0790963a392400f55fbb1a43995a535dc6c929f20d6a65cf4efb434e0ad1cb61f689b8011a3bc 90856f7f3444e5ad44651c28e24cc085a5db4d2ffe79aa53228c26718cf53a6e44615f3c5cda5aa752d5f762c4623c66 978999b7d8aa3f28a04076f74d11c41ef9c89fdfe514936c4238e0f13c38ec97e51a5c078ebc6409e517bfe7ccb42630 a099914dd7ed934d8e0d363a648e9038eb7c1ec03fa04dbcaa40f7721c618c3ef947afef7a16b4d7ac8c12aa46637f03 ab2a104fed3c83d16f2cda06878fa5f30c8c9411de71bfb67fd2fc9aa454dcbcf3d299d72f8cc12e919466a50fcf7426 a4471d111db4418f56915689482f6144efc4664cfb0311727f36c864648d35734351becc48875df96f4abd3cfcf820f9 83be11727cd30ea94ccc8fa31b09b81c9d6a9a5d3a4686af9da99587332fe78c1f94282f9755854bafd6033549afec91 88020ff971dc1a01a9e993cd50a5d2131ffdcbb990c1a6aaa54b20d8f23f9546a70918ea57a21530dcc440c1509c24ad ae24547623465e87905eaffa1fa5d52bb7c453a8dbd89614fa8819a2abcedaf455c2345099b7324ae36eb0ad7c8ef977 b59b0c60997de1ee00b7c388bc7101d136c9803bf5437b1d589ba57c213f4f835a3e4125b54738e78abbc21b000f2016 a584c434dfe194546526691b68fa968c831c31da42303a1d735d960901c74011d522246f37f299555416b8cf25c5a548 80408ce3724f4837d4d52376d255e10f69eb8558399ae5ca6c11b78b98fe67d4b93157d2b9b639f1b5b64198bfe87713 abb941e8d406c2606e0ddc35c113604fdd9d249eacc51cb64e2991e551b8639ce44d288cc92afa7a1e7fc599cfc84b22 b223173f560cacb1c21dba0f1713839e348ad02cbfdef0626748604c86f89e0f4c919ed40b583343795bdd519ba952c8 af1c70512ec3a19d98b8a1fc3ff7f7f5048a27d17d438d43f561974bbdd116fcd5d5c21040f3447af3f0266848d47a15 8a44809568ebe50405bede19b4d2607199159b26a1b33e03d180e6840c5cf59d991a4fb150d111443235d75ecad085b7 b06207cdca46b125a27b3221b5b50cf27af4c527dd7c80e2dbcebbb09778a96df3af67e50f07725239ce3583dad60660 993352d9278814ec89b26a11c4a7c4941bf8f0e6781ae79559d14749ee5def672259792db4587f85f0100c7bb812f933 9180b8a718b971fd27bc82c8582d19c4b4f012453e8c0ffeeeffe745581fc6c07875ab28be3af3fa3896d19f0c89ac5b 8b8e1263eb48d0fe304032dd5ea1f30e73f0121265f7458ba9054d3626894e8a5fef665340abd2ede9653045c2665938 99a2beee4a10b7941c24b2092192faf52b819afd033e4a2de050fd6c7f56d364d0cf5f99764c3357cf32399e60fc5d74 946a4aad7f8647ea60bee2c5fcdeb6f9a58fb2cfca70c4d10e458027a04846e13798c66506151be3df9454b1e417893f a672a88847652d260b5472d6908d1d57e200f1e492d30dd1cecc441cdfc9b76e016d9bab560efd4d7f3c30801de884a9 9414e1959c156cde1eb24e628395744db75fc24b9df4595350aaad0bc38e0246c9b4148f6443ef68b8e253a4a6bcf11c 9316e9e4ec5fab4f80d6540df0e3a4774db52f1d759d2e5b5bcd3d7b53597bb007eb1887cb7dc61f62497d51ffc8d996 902d6d77bb49492c7a00bc4b70277bc28c8bf9888f4307bb017ac75a962decdedf3a4e2cf6c1ea9f9ba551f4610cbbd7 b07025a18b0e32dd5e12ec6a85781aa3554329ea12c4cd0d3b2c22e43d777ef6f89876dd90a9c8fb097ddf61cf18adc5 b355a849ad3227caa4476759137e813505ec523cbc2d4105bc7148a4630f9e81918d110479a2d5f5e4cd9ccec9d9d3e3 b49532cfdf02ee760109881ad030b89c48ee3bb7f219ccafc13c93aead754d29bdafe345be54c482e9d5672bd4505080 9477802410e263e4f938d57fa8f2a6cac7754c5d38505b73ee35ea3f057aad958cb9722ba6b7b3cfc4524e9ca93f9cdc 9148ea83b4436339580f3dbc9ba51509e9ab13c03063587a57e125432dd0915f5d2a8f456a68f8fff57d5f08c8f34d6e b00b6b5392b1930b54352c02b1b3b4f6186d20bf21698689bbfc7d13e86538a4397b90e9d5c93fd2054640c4dbe52a4f 926a9702500441243cd446e7cbf15dde16400259726794694b1d9a40263a9fc9e12f7bcbf12a27cb9aaba9e2d5848ddc a0c6155f42686cbe7684a1dc327100962e13bafcf3db97971fc116d9f5c0c8355377e3d70979cdbd58fd3ea52440901c a277f899f99edb8791889d0817ea6a96c24a61acfda3ad8c3379e7c62b9d4facc4b965020b588651672fd261a77f1bfc 8f528cebb866b501f91afa50e995234bef5bf20bff13005de99cb51eaac7b4f0bf38580cfd0470de40f577ead5d9ba0f 963fc03a44e9d502cc1d23250efef44d299befd03b898d07ce63ca607bb474b5cf7c965a7b9b0f32198b04a8393821f7 ab087438d0a51078c378bf4a93bd48ef933ff0f1fa68d02d4460820df564e6642a663b5e50a5fe509527d55cb510ae04 b0592e1f2c54746bb076be0fa480e1c4bebc4225e1236bcda3b299aa3853e3afb401233bdbcfc4a007b0523a720fbf62 851613517966de76c1c55a94dc4595f299398a9808f2d2f0a84330ba657ab1f357701d0895f658c18a44cb00547f6f57 a2fe9a1dd251e72b0fe4db27be508bb55208f8f1616b13d8be288363ec722826b1a1fd729fc561c3369bf13950bf1fd6 b896cb2bc2d0c77739853bc59b0f89b2e008ba1f701c9cbe3bef035f499e1baee8f0ff1e794854a48c320586a2dfc81a a1b60f98e5e5106785a9b81a85423452ee9ef980fa7fa8464f4366e73f89c50435a0c37b2906052b8e58e212ebd366cf a853b0ebd9609656636df2e6acd5d8839c0fda56f7bf9288a943b06f0b67901a32b95e016ca8bc99bd7b5eab31347e72 b290fa4c1346963bd5225235e6bdf7c542174dab4c908ab483d1745b9b3a6015525e398e1761c90e4b49968d05e30eea b0f65a33ad18f154f1351f07879a183ad62e5144ad9f3241c2d06533dad09cbb2253949daff1bb02d24d16a3569f7ef0 a00db59b8d4218faf5aeafcd39231027324408f208ec1f54d55a1c41228b463b88304d909d16b718cfc784213917b71e b8d695dd33dc2c3bc73d98248c535b2770ad7fa31aa726f0aa4b3299efb0295ba9b4a51c71d314a4a1bd5872307534d1 b848057cca2ca837ee49c42b88422303e58ea7d2fc76535260eb5bd609255e430514e927cc188324faa8e657396d63ec 92677836061364685c2aaf0313fa32322746074ed5666fd5f142a7e8f87135f45cd10e78a17557a4067a51dfde890371 a854b22c9056a3a24ab164a53e5c5cf388616c33e67d8ebb4590cb16b2e7d88b54b1393c93760d154208b5ca822dc68f 86fff174920388bfab841118fb076b2b0cdec3fdb6c3d9a476262f82689fb0ed3f1897f7be9dbf0932bb14d346815c63 99661cf4c94a74e182752bcc4b98a8c2218a8f2765642025048e12e88ba776f14f7be73a2d79bd21a61def757f47f904 8a8893144d771dca28760cba0f950a5d634195fd401ec8cf1145146286caffb0b1a6ba0c4c1828d0a5480ce49073c64c 938a59ae761359ee2688571e7b7d54692848eb5dde57ffc572b473001ea199786886f8c6346a226209484afb61d2e526 923f68a6aa6616714cf077cf548aeb845bfdd78f2f6851d8148cba9e33a374017f2f3da186c39b82d14785a093313222 ac923a93d7da7013e73ce8b4a2b14b8fd0cc93dc29d5de941a70285bdd19be4740fedfe0c56b046689252a3696e9c5bc b49b32c76d4ec1a2c68d4989285a920a805993bc6fcce6dacd3d2ddae73373050a5c44ba8422a3781050682fa0ef6ba2 8a367941c07c3bdca5712524a1411bad7945c7c48ffc7103b1d4dff2c25751b0624219d1ccde8c3f70c465f954be5445 b838f029df455efb6c530d0e370bbbf7d87d61a9aea3d2fe5474c5fe0a39cf235ceecf9693c5c6c5820b1ba8f820bd31 a8983b7c715eaac7f13a001d2abc462dfc1559dab4a6b554119c271aa8fe00ffcf6b6949a1121f324d6d26cb877bcbae a2afb24ad95a6f14a6796315fbe0d8d7700d08f0cfaf7a2abe841f5f18d4fecf094406cbd54da7232a159f9c5b6e805e 87e8e95ad2d62f947b2766ff405a23f7a8afba14e7f718a691d95369c79955cdebe24c54662553c60a3f55e6322c0f6f 87c2cbcecb754e0cc96128e707e5c5005c9de07ffd899efa3437cadc23362f5a1d3fcdd30a1f5bdc72af3fb594398c2a 91afd6ee04f0496dc633db88b9370d41c428b04fd991002502da2e9a0ef051bcd7b760e860829a44fbe5539fa65f8525 8c50e5d1a24515a9dd624fe08b12223a75ca55196f769f24748686315329b337efadca1c63f88bee0ac292dd0a587440 8a07e8f912a38d94309f317c32068e87f68f51bdfa082d96026f5f5f8a2211621f8a3856dda8069386bf15fb2d28c18f 94ad1dbe341c44eeaf4dc133eed47d8dbfe752575e836c075745770a6679ff1f0e7883b6aa917462993a7f469d74cab5 8745f8bd86c2bb30efa7efb7725489f2654f3e1ac4ea95bd7ad0f3cfa223055d06c187a16192d9d7bdaea7b050c6a324 900d149c8d79418cda5955974c450a70845e02e5a4ecbcc584a3ca64d237df73987c303e3eeb79da1af83bf62d9e579f 8f652ab565f677fb1a7ba03b08004e3cda06b86c6f1b0b9ab932e0834acf1370abb2914c15b0d08327b5504e5990681c 9103097d088be1f75ab9d3da879106c2f597e2cc91ec31e73430647bdd5c33bcfd771530d5521e7e14df6acda44f38a6 b0fec7791cfb0f96e60601e1aeced9a92446b61fedab832539d1d1037558612d78419efa87ff5f6b7aab8fd697d4d9de b9d2945bdb188b98958854ba287eb0480ef614199c4235ce5f15fc670b8c5ffe8eeb120c09c53ea8a543a022e6a321ac a9461bb7d5490973ebaa51afc0bb4a5e42acdccb80e2f939e88b77ac28a98870e103e1042899750f8667a8cc9123bae9 a37fdf11d4bcb2aed74b9f460a30aa34afea93386fa4cdb690f0a71bc58f0b8df60bec56e7a24f225978b862626fa00e a214420e183e03d531cf91661466ea2187d84b6e814b8b20b3730a9400a7d25cf23181bb85589ebc982cec414f5c2923 ad09a45a698a6beb3e0915f540ef16e9af7087f53328972532d6b5dfe98ce4020555ece65c6cbad8bd6be8a4dfefe6fd ab6742800b02728c92d806976764cb027413d6f86edd08ad8bb5922a2969ee9836878cd39db70db0bd9a2646862acc4f 974ca9305bd5ea1dc1755dff3b63e8bfe9f744321046c1395659bcea2a987b528e64d5aa96ac7b015650b2253b37888d 84eee9d6bce039c52c2ebc4fccc0ad70e20c82f47c558098da4be2f386a493cbc76adc795b5488c8d11b6518c2c4fab8 875d7bda46efcb63944e1ccf760a20144df3b00d53282b781e95f12bfc8f8316dfe6492c2efbf796f1150e36e436e9df b68a2208e0c587b5c31b5f6cb32d3e6058a9642e2d9855da4f85566e1412db528475892060bb932c55b3a80877ad7b4a ba006368ecab5febb6ab348644d9b63de202293085ed468df8bc24d992ae8ce468470aa37f36a73630c789fb9c819b30 90a196035150846cd2b482c7b17027471372a8ce7d914c4d82b6ea7fa705d8ed5817bd42d63886242585baf7d1397a1c a223b4c85e0daa8434b015fd9170b5561fe676664b67064974a1e9325066ecf88fc81f97ab5011c59fad28cedd04b240 82e8ec43139cf15c6bbeed484b62e06cded8a39b5ce0389e4cbe9c9e9c02f2f0275d8d8d4e8dfec8f69a191bef220408 81a3fc07a7b68d92c6ee4b6d28f5653ee9ec85f7e2ee1c51c075c1b130a8c5097dc661cf10c5aff1c7114b1a6a19f11a 8ed2ef8331546d98819a5dd0e6c9f8cb2630d0847671314a28f277faf68da080b53891dd75c82cbcf7788b255490785d acecabf84a6f9bbed6b2fc2e7e4b48f02ef2f15e597538a73aea8f98addc6badda15e4695a67ecdb505c1554e8f345ec b8f51019b2aa575f8476e03dcadf86cc8391f007e5f922c2a36b2daa63f5a503646a468990cd5c65148d323942193051 aaa595a84b403ec65729bc1c8055a94f874bf9adddc6c507b3e1f24f79d3ad359595a672b93aab3394db4e2d4a7d8970 895144c55fcbd0f64d7dd69e6855cfb956e02b5658eadf0f026a70703f3643037268fdd673b0d21b288578a83c6338dd a2e92ae6d0d237d1274259a8f99d4ea4912a299816350b876fba5ebc60b714490e198a916e1c38c6e020a792496fa23c a45795fda3b5bb0ad1d3c628f6add5b2a4473a1414c1a232e80e70d1cfffd7f8a8d9861f8df2946999d7dbb56bf60113 b6659bf7f6f2fef61c39923e8c23b8c70e9c903028d8f62516d16755cd3fba2fe41c285aa9432dc75ab08f8a1d8a81fc a735609a6bc5bfd85e58234fc439ff1f58f1ff1dd966c5921d8b649e21f006bf2b8642ad8a75063c159aaf6935789293 a3c622eb387c9d15e7bda2e3e84d007cb13a6d50d655c3f2f289758e49d3b37b9a35e4535d3cc53d8efd51f407281f19 8afe147b53ad99220f5ef9d763bfc91f9c20caecbcf823564236fb0e6ede49414c57d71eec4772c8715cc65a81af0047 b5f0203233cf71913951e9c9c4e10d9243e3e4a1f2cb235bf3f42009120ba96e04aa414c9938ea8873b63148478927e8 93c52493361b458d196172d7ba982a90a4f79f03aa8008edc322950de3ce6acf4c3977807a2ffa9e924047e02072b229 b9e72b805c8ac56503f4a86c82720afbd5c73654408a22a2ac0b2e5caccdfb0e20b59807433a6233bc97ae58cf14c70a af0475779b5cee278cca14c82da2a9f9c8ef222eb885e8c50cca2315fea420de6e04146590ed0dd5a29c0e0812964df5 b430ccab85690db02c2d0eb610f3197884ca12bc5f23c51e282bf3a6aa7e4a79222c3d8761454caf55d6c01a327595f9 830032937418b26ee6da9b5206f3e24dc76acd98589e37937e963a8333e5430abd6ce3dd93ef4b8997bd41440eed75d6 8820a6d73180f3fe255199f3f175c5eb770461ad5cfdde2fb11508041ed19b8c4ce66ad6ecebf7d7e836cc2318df47ca aef1393e7d97278e77bbf52ef6e1c1d5db721ccf75fe753cf47a881fa034ca61eaa5098ee5a344c156d2b14ff9e284ad 8a4a26c07218948c1196c45d927ef4d2c42ade5e29fe7a91eaebe34a29900072ce5194cf28d51f746f4c4c649daf4396 84011dc150b7177abdcb715efbd8c201f9cb39c36e6069af5c50a096021768ba40cef45b659c70915af209f904ede3b6 b1bd90675411389bb66910b21a4bbb50edce5330850c5ab0b682393950124252766fc81f5ecfc72fb7184387238c402e 8dfdcd30583b696d2c7744655f79809f451a60c9ad5bf1226dc078b19f4585d7b3ef7fa9d54e1ac09520d95cbfd20928 b351b4dc6d98f75b8e5a48eb7c6f6e4b78451991c9ba630e5a1b9874c15ac450cd409c1a024713bf2cf82dc400e025ef a462b8bc97ac668b97b28b3ae24b9f5de60e098d7b23ecb600d2194cd35827fb79f77c3e50d358f5bd72ee83fef18fa0 a183753265c5f7890270821880cce5f9b2965b115ba783c6dba9769536f57a04465d7da5049c7cf8b3fcf48146173c18 a8a771b81ed0d09e0da4d79f990e58eabcd2be3a2680419502dd592783fe52f657fe55125b385c41d0ba3b9b9cf54a83 a71ec577db46011689d073245e3b1c3222a9b1fe6aa5b83629adec5733dd48617ebea91346f0dd0e6cdaa86e4931b168 a334b8b244f0d598a02da6ae0f918a7857a54dce928376c4c85df15f3b0f2ba3ac321296b8b7c9dd47d770daf16c8f8c a29037f8ef925c417c90c4df4f9fb27fb977d04e2b3dd5e8547d33e92ab72e7a00f5461de21e28835319eae5db145eb7 b91054108ae78b00e3298d667b913ebc44d8f26e531eae78a8fe26fdfb60271c97efb2dee5f47ef5a3c15c8228138927 926c13efbe90604f6244be9315a34f72a1f8d1aab7572df431998949c378cddbf2fe393502c930fff614ff06ae98a0ce 995c758fd5600e6537089b1baa4fbe0376ab274ff3e82a17768b40df6f91c2e443411de9cafa1e65ea88fb8b87d504f4 9245ba307a7a90847da75fca8d77ec03fdfc812c871e7a2529c56a0a79a6de16084258e7a9ac4ae8a3756f394336e21c 99e0cfa2bb57a7e624231317044c15e52196ecce020db567c8e8cb960354a0be9862ee0c128c60b44777e65ac315e59f ad4f6b3d27bbbb744126601053c3dc98c07ff0eb0b38a898bd80dce778372846d67e5ab8fb34fb3ad0ef3f235d77ba7f a0f12cae3722bbbca2e539eb9cc7614632a2aefe51410430070a12b5bc5314ecec5857b7ff8f41e9980cac23064f7c56 b487f1bc59485848c98222fd3bc36c8c9bb3d2912e2911f4ceca32c840a7921477f9b1fe00877e05c96c75d3eecae061 a6033db53925654e18ecb3ce715715c36165d7035db9397087ac3a0585e587998a53973d011ac6d48af439493029cee6 a6b4d09cd01c70a3311fd131d3710ccf97bde3e7b80efd5a8c0eaeffeb48cca0f951ced905290267b115b06d46f2693b a9dff1df0a8f4f218a98b6f818a693fb0d611fed0fc3143537cbd6578d479af13a653a8155e535548a2a0628ae24fa58 a58e469f65d366b519f9a394cacb7edaddac214463b7b6d62c2dbc1316e11c6c5184ce45c16de2d77f990dcdd8b55430 989e71734f8119103586dc9a3c5f5033ddc815a21018b34c1f876cdfc112efa868d5751bf6419323e4e59fa6a03ece1c a2da00e05036c884369e04cf55f3de7d659cd5fa3f849092b2519dd263694efe0f051953d9d94b7e121f0aee8b6174d7 968f3c029f57ee31c4e1adea89a7f92e28483af9a74f30fbdb995dc2d40e8e657dff8f8d340d4a92bf65f54440f2859f 932778df6f60ac1639c1453ef0cbd2bf67592759dcccb3e96dcc743ff01679e4c7dd0ef2b0833dda548d32cb4eba49e2 a805a31139f8e0d6dae1ac87d454b23a3dc9fc653d4ca18d4f8ebab30fc189c16e73981c2cb7dd6f8c30454a5208109d a9ba0991296caa2aaa4a1ceacfb205544c2a2ec97088eace1d84ee5e2767656a172f75d2f0c4e16a3640a0e0dec316e0 b1e49055c968dced47ec95ae934cf45023836d180702e20e2df57e0f62fb85d7ac60d657ba3ae13b8560b67210449459 a94e1da570a38809c71e37571066acabff7bf5632737c9ab6e4a32856924bf6211139ab3cedbf083850ff2d0e0c0fcfc 88ef1bb322000c5a5515b310c838c9af4c1cdbb32eab1c83ac3b2283191cd40e9573747d663763a28dad0d64adc13840 a987ce205f923100df0fbd5a85f22c9b99b9b9cbe6ddfa8dfda1b8fe95b4f71ff01d6c5b64ca02eb24edb2b255a14ef0 84fe8221a9e95d9178359918a108de4763ebfa7a6487facb9c963406882a08a9a93f492f8e77cf9e7ea41ae079c45993 aa1cf3dc7c5dcfa15bbbc811a4bb6dbac4fba4f97fb1ed344ab60264d7051f6eef19ea9773441d89929ee942ed089319 8f6a7d610d59d9f54689bbe6a41f92d9f6096cde919c1ab94c3c7fcecf0851423bc191e5612349e10f855121c0570f56 b5af1fa7894428a53ea520f260f3dc3726da245026b6d5d240625380bfb9c7c186df0204bb604efac5e613a70af5106e a5bce6055ff812e72ce105f147147c7d48d7a2313884dd1f488b1240ee320f13e8a33f5441953a8e7a3209f65b673ce1 b9b55b4a1422677d95821e1d042ab81bbf0bf087496504021ec2e17e238c2ca6b44fb3b635a5c9eac0871a724b8d47c3 941c38e533ce4a673a3830845b56786585e5fe49c427f2e5c279fc6db08530c8f91db3e6c7822ec6bb4f956940052d18 a38e191d66c625f975313c7007bbe7431b5a06ed2da1290a7d5d0f2ec73770d476efd07b8e632de64597d47df175cbb0 94ba76b667abf055621db4c4145d18743a368d951565632ed4e743dd50dd3333507c0c34f286a5c5fdbf38191a2255cd a5ca38c60be5602f2bfa6e00c687ac96ac36d517145018ddbee6f12eb0faa63dd57909b9eeed26085fe5ac44e55d10ab b00fea3b825e60c1ed1c5deb4b551aa65a340e5af36b17d5262c9cd2c508711e4dc50dc2521a2c16c7c901902266e64a 971b86fc4033485e235ccb0997a236206ba25c6859075edbcdf3c943116a5030b7f75ebca9753d863a522ba21a215a90 b3b31f52370de246ee215400975b674f6da39b2f32514fe6bd54e747752eedca22bb840493b44a67df42a3639c5f901f affbbfac9c1ba7cbfa1839d2ae271dd6149869b75790bf103230637da41857fc326ef3552ff31c15bda0694080198143 a95d42aa7ef1962520845aa3688f2752d291926f7b0d73ea2ee24f0612c03b43f2b0fe3c9a9a99620ffc8d487b981bc2 914a266065caf64985e8c5b1cb2e3f4e3fe94d7d085a1881b1fefa435afef4e1b39a98551d096a62e4f5cc1a7f0fdc2e 81a0b4a96e2b75bc1bf2dbd165d58d55cfd259000a35504d1ffb18bc346a3e6f07602c683723864ffb980f840836fd8d 91c1556631cddd4c00b65b67962b39e4a33429029d311c8acf73a18600e362304fb68bccb56fde40f49e95b7829e0b87 8befbacc19e57f7c885d1b7a6028359eb3d80792fe13b92a8400df21ce48deb0bb60f2ddb50e3d74f39f85d7eab23adc 92f9458d674df6e990789690ec9ca73dacb67fc9255b58c417c555a8cc1208ace56e8e538f86ba0f3615573a0fbac00d b4b1b3062512d6ae7417850c08c13f707d5838e43d48eb98dd4621baf62eee9e82348f80fe9b888a12874bfa538771f8 a13c4a3ac642ede37d9c883f5319e748d2b938f708c9d779714108a449b343f7b71a6e3ef4080fee125b416762920273 af44983d5fc8cceee0551ef934e6e653f2d3efa385e5c8a27a272463a6f333e290378cc307c2b664eb923c78994e706e a389fd6c59fe2b4031cc244e22d3991e541bd203dd5b5e73a6159e72df1ab41d49994961500dcde7989e945213184778 8d2141e4a17836c548de9598d7b298b03f0e6c73b7364979a411c464e0628e21cff6ac3d6decdba5d1c4909eff479761 980b22ef53b7bdf188a3f14bc51b0dbfdf9c758826daa3cbc1e3986022406a8aa9a6a79e400567120b88c67faa35ce5f a28882f0a055f96df3711de5d0aa69473e71245f4f3e9aa944e9d1fb166e02caa50832e46da6d3a03b4801735fd01b29 8db106a37d7b88f5d995c126abb563934dd8de516af48e85695d02b1aea07f79217e3cdd03c6f5ca57421830186c772b b5a7e50da0559a675c472f7dfaee456caab6695ab7870541b2be8c2b118c63752427184aad81f0e1afc61aef1f28c46f 9962118780e20fe291d10b64f28d09442a8e1b5cffd0f3dd68d980d0614050a626c616b44e9807fbee7accecae00686a b38ddf33745e8d2ad6a991aefaf656a33c5f8cbe5d5b6b6fd03bd962153d8fd0e01b5f8f96d80ae53ab28d593ab1d4e7 857dc12c0544ff2c0c703761d901aba636415dee45618aba2e3454ff9cbc634a85c8b05565e88520ff9be2d097c8b2b1 a80d465c3f8cc63af6d74a6a5086b626c1cb4a8c0fee425964c3bd203d9d7094e299f81ce96d58afc20c8c9a029d9dae 89e1c8fbde8563763be483123a3ed702efac189c6d8ab4d16c85e74bbaf856048cc42d5d6e138633a38572ba5ec3f594 893a594cf495535f6d216508f8d03c317dcf03446668cba688da90f52d0111ac83d76ad09bf5ea47056846585ee5c791 aadbd8be0ae452f7f9450c7d2957598a20cbf10139a4023a78b4438172d62b18b0de39754dd2f8862dbd50a3a0815e53 ae7d39670ecca3eb6db2095da2517a581b0e8853bdfef619b1fad9aacd443e7e6a40f18209fadd44038a55085c5fe8b2 866ef241520eacb6331593cfcb206f7409d2f33d04542e6e52cba5447934e02d44c471f6c9a45963f9307e9809ab91d9 b1a09911ad3864678f7be79a9c3c3eb5c84a0a45f8dcb52c67148f43439aeaaa9fd3ed3471276b7e588b49d6ebe3033a add07b7f0dbb34049cd8feeb3c18da5944bf706871cfd9f14ff72f6c59ad217ebb1f0258b13b167851929387e4e34cfe ae048892d5c328eefbdd4fba67d95901e3c14d974bfc0a1fc68155ca9f0d59e61d7ba17c6c9948b120cf35fd26e6fee9 9185b4f3b7da0ddb4e0d0f09b8a9e0d6943a4611e43f13c3e2a767ed8592d31e0ba3ebe1914026a3627680274291f6e5 a9c022d4e37b0802284ce3b7ee9258628ab4044f0db4de53d1c3efba9de19d15d65cc5e608dbe149c21c2af47d0b07b5 b24dbd5852f8f24921a4e27013b6c3fa8885b973266cb839b9c388efad95821d5d746348179dcc07542bd0d0aefad1ce b5fb4f279300876a539a27a441348764908bc0051ebd66dc51739807305e73db3d2f6f0f294ffb91b508ab150eaf8527 ace50841e718265b290c3483ed4b0fdd1175338c5f1f7530ae9a0e75d5f80216f4de37536adcbc8d8c95982e88808cd0 b19cadcde0f63bd1a9c24bd9c2806f53c14c0b9735bf351601498408ba503ddbd2037c891041cbba47f58b8c483f3b21 b6061e63558d312eb891b97b39aa552fa218568d79ee26fe6dd5b864aea9e3216d8f2e2f3b093503be274766dac41426 89730fdb2876ab6f0fe780d695f6e12090259027e789b819956d786e977518057e5d1d7f5ab24a3ae3d5d4c97773bd2b b6fa841e81f9f2cad0163a02a63ae96dc341f7ae803b616efc6e1da2fbea551c1b96b11ad02c4afbdf6d0cc9f23da172 8fb66187182629c861ddb6896d7ed3caf2ad050c3dba8ab8eb0d7a2c924c3d44c48d1a148f9e33fb1f061b86972f8d21 86022ac339c1f84a7fa9e05358c1a5b316b4fc0b83dbe9c8c7225dc514f709d66490b539359b084ce776e301024345fa b50b9c321468da950f01480bb62b6edafd42f83c0001d6e97f2bd523a1c49a0e8574fb66380ea28d23a7c4d54784f9f0 a31c05f7032f30d1dac06678be64d0250a071fd655e557400e4a7f4c152be4d5c7aa32529baf3e5be7c4bd49820054f6 b95ac0848cd322684772119f5b682d90a66bbf9dac411d9d86d2c34844bbd944dbaf8e47aa41380455abd51687931a78 ae4a6a5ce9553b65a05f7935e61e496a4a0f6fd8203367a2c627394c9ce1e280750297b74cdc48fd1d9a31e93f97bef4 a22daf35f6e9b05e52e0b07f7bd1dbbebd2c263033fb0e1b2c804e2d964e2f11bc0ece6aca6af079dd3a9939c9c80674 902150e0cb1f16b9b59690db35281e28998ce275acb313900da8b2d8dfd29fa1795f8ca3ff820c31d0697de29df347c1 b17b5104a5dc665cdd7d47e476153d715eb78c6e5199303e4b5445c21a7fa7cf85fe7cfd08d7570f4e84e579b005428c a03f49b81c15433f121680aa02d734bb9e363af2156654a62bcb5b2ba2218398ccb0ff61104ea5d7df5b16ea18623b1e 802101abd5d3c88876e75a27ffc2f9ddcce75e6b24f23dba03e5201281a7bd5cc7530b6a003be92d225093ca17d3c3bb a4d183f63c1b4521a6b52226fc19106158fc8ea402461a5cccdaa35fee93669df6a8661f45c1750cd01308149b7bf08e 8d17c22e0c8403b69736364d460b3014775c591032604413d20a5096a94d4030d7c50b9fe3240e31d0311efcf9816a47 947225acfcce5992eab96276f668c3cbe5f298b90a59f2bb213be9997d8850919e8f496f182689b5cbd54084a7332482 8df6f4ed216fc8d1905e06163ba1c90d336ab991a18564b0169623eb39b84e627fa267397da15d3ed754d1f3423bff07 83480007a88f1a36dea464c32b849a3a999316044f12281e2e1c25f07d495f9b1710b4ba0d88e9560e72433addd50bc2 b3019d6e591cf5b33eb972e49e06c6d0a82a73a75d78d383dd6f6a4269838289e6e07c245f54fed67f5c9bb0fd5e1c5f 92e8ce05e94927a9fb02debadb99cf30a26172b2705003a2c0c47b3d8002bf1060edb0f6a5750aad827c98a656b19199 ac2aff801448dbbfc13cca7d603fd9c69e82100d997faf11f465323b97255504f10c0c77401e4d1890339d8b224f5803 b0453d9903d08f508ee27e577445dc098baed6cde0ac984b42e0f0efed62760bd58d5816cf1e109d204607b7b175e30c ae68dc4ba5067e825d46d2c7c67f1009ceb49d68e8d3e4c57f4bcd299eb2de3575d42ea45e8722f8f28497a6e14a1cfe b22486c2f5b51d72335ce819bbafb7fa25eb1c28a378a658f13f9fc79cd20083a7e573248d911231b45a5cf23b561ca7 89d1201d1dbd6921867341471488b4d2fd0fc773ae1d4d074c78ae2eb779a59b64c00452c2a0255826fca6b3d03be2b1 a2998977c91c7a53dc6104f5bc0a5b675e5350f835e2f0af69825db8af4aeb68435bdbcc795f3dd1f55e1dd50bc0507f b0be4937a925b3c05056ed621910d535ccabf5ab99fd3b9335080b0e51d9607d0fd36cb5781ff340018f6acfca4a9736 aea145a0f6e0ba9df8e52e84bb9c9de2c2dc822f70d2724029b153eb68ee9c17de7d35063dcd6a39c37c59fdd12138f7 91cb4545d7165ee8ffbc74c874baceca11fdebbc7387908d1a25877ca3c57f2c5def424dab24148826832f1e880bede0 b3b579cb77573f19c571ad5eeeb21f65548d7dff9d298b8d7418c11f3e8cd3727c5b467f013cb87d6861cfaceee0d2e3 b98a1eeec2b19fecc8378c876d73645aa52fb99e4819903735b2c7a885b242787a30d1269a04bfb8573d72d9bbc5f0f0 940c1f01ed362bd588b950c27f8cc1d52276c71bb153d47f07ec85b038c11d9a8424b7904f424423e714454d5e80d1cd aa343a8ecf09ce11599b8cf22f7279cf80f06dbf9f6d62cb05308dbbb39c46fd0a4a1240b032665fbb488a767379b91b 87c3ac72084aca5974599d3232e11d416348719e08443acaba2b328923af945031f86432e170dcdd103774ec92e988c9 91d6486eb5e61d2b9a9e742c20ec974a47627c6096b3da56209c2b4e4757f007e793ebb63b2b246857c9839b64dc0233 aebcd3257d295747dd6fc4ff910d839dd80c51c173ae59b8b2ec937747c2072fa85e3017f9060aa509af88dfc7529481 b3075ba6668ca04eff19efbfa3356b92f0ab12632dcda99cf8c655f35b7928c304218e0f9799d68ef9f809a1492ff7db 93ba7468bb325639ec2abd4d55179c69fd04eaaf39fc5340709227bbaa4ad0a54ea8b480a1a3c8d44684e3be0f8d1980 a6aef86c8c0d92839f38544d91b767c582568b391071228ff5a5a6b859c87bf4f81a7d926094a4ada1993ddbd677a920 91dcd6d14207aa569194aa224d1e5037b999b69ade52843315ca61ba26abe9a76412c9e88259bc5cf5d7b95b97d9c3bc b3b483d31c88f78d49bd065893bc1e3d2aa637e27dedb46d9a7d60be7660ce7a10aaaa7deead362284a52e6d14021178 8e5730070acf8371461ef301cc4523e8e672aa0e3d945d438a0e0aa6bdf8cb9c685dcf38df429037b0c8aff3955c6f5b b8c6d769890a8ee18dc4f9e917993315877c97549549b34785a92543cbeec96a08ae3a28d6e809c4aacd69de356c0012 95ca86cd384eaceaa7c077c5615736ca31f36824bd6451a16142a1edc129fa42b50724aeed7c738f08d7b157f78b569e 94df609c6d71e8eee7ab74226e371ccc77e01738fe0ef1a6424435b4570fe1e5d15797b66ed0f64eb88d4a3a37631f0e 89057b9783212add6a0690d6bb99097b182738deff2bd9e147d7fd7d6c8eacb4c219923633e6309ad993c24572289901 83a0f9f5f265c5a0e54defa87128240235e24498f20965009fef664f505a360b6fb4020f2742565dfc7746eb185bcec0 91170da5306128931349bc3ed50d7df0e48a68b8cc8420975170723ac79d8773e4fa13c5f14dc6e3fafcad78379050b1 b7178484d1b55f7e56a4cc250b6b2ec6040437d96bdfddfa7b35ed27435860f3855c2eb86c636f2911b012eb83b00db8 ac0b00c4322d1e4208e09cd977b4e54d221133ff09551f75b32b0b55d0e2be80941dda26257b0e288c162e63c7e9cf68 9690ed9e7e53ed37ff362930e4096b878b12234c332fd19d5d064824084245952eda9f979e0098110d6963e468cf513e b6fa547bb0bb83e5c5be0ed462a8783fba119041c136a250045c09d0d2af330c604331e7de960df976ff76d67f8000cd 814603907c21463bcf4e59cfb43066dfe1a50344ae04ef03c87c0f61b30836c3f4dea0851d6fa358c620045b7f9214c8 9495639e3939fad2a3df00a88603a5a180f3c3a0fe4d424c35060e2043e0921788003689887b1ed5be424d9a89bb18bb aba4c02d8d57f2c92d5bc765885849e9ff8393d6554f5e5f3e907e5bfac041193a0d8716d7861104a4295d5a03c36b03 8ead0b56c1ca49723f94a998ba113b9058059321da72d9e395a667e6a63d5a9dac0f5717cec343f021695e8ced1f72af b43037f7e3852c34ed918c5854cd74e9d5799eeddfe457d4f93bb494801a064735e326a76e1f5e50a339844a2f4a8ec9 99db8422bb7302199eb0ff3c3d08821f8c32f53a600c5b6fb43e41205d96adae72be5b460773d1280ad1acb806af9be8 8a9be08eae0086c0f020838925984df345c5512ff32e37120b644512b1d9d4fecf0fd30639ca90fc6cf334a86770d536 81b43614f1c28aa3713a309a88a782fb2bdfc4261dd52ddc204687791a40cf5fd6a263a8179388596582cccf0162efc2 a9f3a8b76912deb61d966c75daf5ddb868702ebec91bd4033471c8e533183df548742a81a2671de5be63a502d827437d 902e2415077f063e638207dc7e14109652e42ab47caccd6204e2870115791c9defac5425fd360b37ac0f7bd8fe7011f8 aa18e4fdc1381b59c18503ae6f6f2d6943445bd00dd7d4a2ad7e5adad7027f2263832690be30d456e6d772ad76f22350 a348b40ba3ba7d81c5d4631f038186ebd5e5f314f1ea737259151b07c3cc8cf0c6ed4201e71bcc1c22fefda81a20cde6 aa1306f7ac1acbfc47dc6f7a0cb6d03786cec8c8dc8060388ccda777bca24bdc634d03e53512c23dba79709ff64f8620 818ccfe46e700567b7f3eb400e5a35f6a5e39b3db3aa8bc07f58ace35d9ae5a242faf8dbccd08d9a9175bbce15612155 b7e3da2282b65dc8333592bb345a473f03bd6df69170055fec60222de9897184536bf22b9388b08160321144d0940279 a4d976be0f0568f4e57de1460a1729129252b44c552a69fceec44e5b97c96c711763360d11f9e5bf6d86b4976bf40d69 85d185f0397c24c2b875b09b6328a23b87982b84ee880f2677a22ff4c9a1ba9f0fea000bb3f7f66375a00d98ebafce17 b4ccbb8c3a2606bd9b87ce022704663af71d418351575f3b350d294f4efc68c26f9a2ce49ff81e6ff29c3b63d746294e 93ffd3265fddb63724dfde261d1f9e22f15ecf39df28e4d89e9fea03221e8e88b5dd9b77628bacaa783c6f91802d47cc b1fd0f8d7a01378e693da98d03a2d2fda6b099d03454b6f2b1fa6472ff6bb092751ce6290059826b74ac0361eab00e1e a89f440c71c561641589796994dd2769616b9088766e983c873fae0716b95c386c8483ab8a4f367b6a68b72b7456dd32 af4fe92b01d42d03dd5d1e7fa55e96d4bbcb7bf7d4c8c197acd16b3e0f3455807199f683dcd263d74547ef9c244b35cc a8227f6e0a344dfe76bfbe7a1861be32c4f4bed587ccce09f9ce2cf481b2dda8ae4f566154bc663d15f962f2d41761bd a7b361663f7495939ed7f518ba45ea9ff576c4e628995b7aea026480c17a71d63fc2c922319f0502eb7ef8f14a406882 8ddcf382a9f39f75777160967c07012cfa89e67b19714a7191f0c68eaf263935e5504e1104aaabd0899348c972a8d3c6 98c95b9f6f5c91f805fb185eedd06c6fc4457d37dd248d0be45a6a168a70031715165ea20606245cbdf8815dc0ac697f 805b44f96e001e5909834f70c09be3efcd3b43632bcac5b6b66b6d227a03a758e4b1768ce2a723045681a1d34562aaeb b0e81b07cdc45b3dca60882676d9badb99f25c461b7efe56e3043b80100bb62d29e1873ae25eb83087273160ece72a55 b0c53f0abe78ee86c7b78c82ae1f7c070bb0b9c45c563a8b3baa2c515d482d7507bb80771e60b38ac13f78b8af92b4a9 a7838ef6696a9e4d2e5dfd581f6c8d6a700467e8fd4e85adabb5f7a56f514785dd4ab64f6f1b48366f7d94728359441b 88c76f7700a1d23c30366a1d8612a796da57b2500f97f88fdf2d76b045a9d24e7426a8ffa2f4e86d3046937a841dad58 ad8964baf98c1f02e088d1d9fcb3af6b1dfa44cdfe0ed2eae684e7187c33d3a3c28c38e8f4e015f9c04d451ed6f85ff6 90e9d00a098317ececaa9574da91fc149eda5b772dedb3e5a39636da6603aa007804fa86358550cfeff9be5a2cb7845e a56ff4ddd73d9a6f5ab23bb77efa25977917df63571b269f6a999e1ad6681a88387fcc4ca3b26d57badf91b236503a29 97ad839a6302c410a47e245df84c01fb9c4dfef86751af3f9340e86ff8fc3cd52fa5ff0b9a0bd1d9f453e02ca80658a6 a4c8c44cbffa804129e123474854645107d1f0f463c45c30fd168848ebea94880f7c0c5a45183e9eb837f346270bdb35 a72e53d0a1586d736e86427a93569f52edd2f42b01e78aee7e1961c2b63522423877ae3ac1227a2cf1e69f8e1ff15bc3 8559f88a7ef13b4f09ac82ae458bbae6ab25671cfbf52dae7eac7280d6565dd3f0c3286aec1a56a8a16dc3b61d78ce47 8221503f4cdbed550876c5dc118a3f2f17800c04e8be000266633c83777b039a432d576f3a36c8a01e8fd18289ebc10b 99bfbe5f3e46d4d898a578ba86ed26de7ed23914bd3bcdf3c791c0bcd49398a52419077354a5ab75cea63b6c871c6e96 aa134416d8ff46f2acd866c1074af67566cfcf4e8be8d97329dfa0f603e1ff208488831ce5948ac8d75bfcba058ddcaa b02609d65ebfe1fe8e52f21224a022ea4b5ea8c1bd6e7b9792eed8975fc387cdf9e3b419b8dd5bcce80703ab3a12a45f a4f14798508698fa3852e5cac42a9db9797ecee7672a54988aa74037d334819aa7b2ac7b14efea6b81c509134a6b7ad2 884f01afecbcb987cb3e7c489c43155c416ed41340f61ecb651d8cba884fb9274f6d9e7e4a46dd220253ae561614e44c a05523c9e71dce1fe5307cc71bd721feb3e1a0f57a7d17c7d1c9fb080d44527b7dbaa1f817b1af1c0b4322e37bc4bb1e 8560aec176a4242b39f39433dd5a02d554248c9e49d3179530815f5031fee78ba9c71a35ceeb2b9d1f04c3617c13d8f0 996aefd402748d8472477cae76d5a2b92e3f092fc834d5222ae50194dd884c9fb8b6ed8e5ccf8f6ed483ddbb4e80c747 8fd09900320000cbabc40e16893e2fcf08815d288ec19345ad7b6bb22f7d78a52b6575a3ca1ca2f8bc252d2eafc928ec 939e51f73022bc5dc6862a0adf8fb8a3246b7bfb9943cbb4b27c73743926cc20f615a036c7e5b90c80840e7f1bfee0e7 a0a6258700cadbb9e241f50766573bf9bdb7ad380b1079dc3afb4054363d838e177b869cad000314186936e40359b1f2 972699a4131c8ed27a2d0e2104d54a65a7ff1c450ad9da3a325c662ab26869c21b0a84d0700b98c8b5f6ce3b746873d7 a454c7fe870cb8aa6491eafbfb5f7872d6e696033f92e4991d057b59d70671f2acdabef533e229878b60c7fff8f748b1 a167969477214201f09c79027b10221e4707662e0c0fde81a0f628249f2f8a859ce3d30a7dcc03b8ecca8f7828ad85c7 8ff6b7265175beb8a63e1dbf18c9153fb2578c207c781282374f51b40d57a84fd2ef2ea2b9c6df4a54646788a62fd17f a3d7ebeccde69d73d8b3e76af0da1a30884bb59729503ff0fb0c3bccf9221651b974a6e72ea33b7956fc3ae758226495 b71ef144c9a98ce5935620cb86c1590bd4f48e5a2815d25c0cdb008fde628cf628c31450d3d4f67abbfeb16178a74cfd b5e0a16d115134f4e2503990e3f2035ed66b9ccf767063fe6747870d97d73b10bc76ed668550cb82eedc9a2ca6f75524 b30ffaaf94ee8cbc42aa2c413175b68afdb207dbf351fb20be3852cb7961b635c22838da97eaf43b103aff37e9e725cc 98aa7d52284f6c1f22e272fbddd8c8698cf8f5fbb702d5de96452141fafb559622815981e50b87a72c2b1190f59a7deb 81fbacda3905cfaf7780bb4850730c44166ed26a7c8d07197a5d4dcd969c09e94a0461638431476c16397dd7bdc449f9 95e47021c1726eac2e5853f570d6225332c6e48e04c9738690d53e07c6b979283ebae31e2af1fc9c9b3e59f87e5195b1 ac024a661ba568426bb8fce21780406537f518075c066276197300841e811860696f7588188bc01d90bace7bc73d56e3 a4ebcaf668a888dd404988ab978594dee193dad2d0aec5cdc0ccaf4ec9a7a8228aa663db1da8ddc52ec8472178e40c32 a20421b8eaf2199d93b083f2aff37fb662670bd18689d046ae976d1db1fedd2c2ff897985ecc6277b396db7da68bcb27 8bc33d4b40197fd4d49d1de47489d10b90d9b346828f53a82256f3e9212b0cbc6930b895e879da9cec9fedf026aadb3e aaafdd1bec8b757f55a0433eddc0a39f818591954fd4e982003437fcceb317423ad7ee74dbf17a2960380e7067a6b4e2 aad34277ebaed81a6ec154d16736866f95832803af28aa5625bf0461a71d02b1faba02d9d9e002be51c8356425a56867 976e9c8b150d08706079945bd0e84ab09a648ecc6f64ded9eb5329e57213149ae409ae93e8fbd8eda5b5c69f5212b883 8097fae1653247d2aed4111533bc378171d6b2c6d09cbc7baa9b52f188d150d645941f46d19f7f5e27b7f073c1ebd079 83905f93b250d3184eaba8ea7d727c4464b6bdb027e5cbe4f597d8b9dc741dcbea709630bd4fd59ce24023bec32fc0f3 8095030b7045cff28f34271386e4752f9a9a0312f8df75de4f424366d78534be2b8e1720a19cb1f9a2d21105d790a225 a7b7b73a6ae2ed1009c49960374b0790f93c74ee03b917642f33420498c188a169724945a975e5adec0a1e83e07fb1b2 856a41c54df393b6660b7f6354572a4e71c8bfca9cabaffb3d4ef2632c015e7ee2bc10056f3eccb3dbed1ad17d939178 a8f7a55cf04b38cd4e330394ee6589da3a07dc9673f74804fdf67b364e0b233f14aec42e783200a2e4666f7c5ff62490 82c529f4e543c6bca60016dc93232c115b359eaee2798a9cf669a654b800aafe6ab4ba58ea8b9cdda2b371c8d62fa845 8caab020c1baddce77a6794113ef1dfeafc5f5000f48e97f4351b588bf02f1f208101745463c480d37f588d5887e6d8c 8fa91b3cc400f48b77b6fd77f3b3fbfb3f10cdff408e1fd22d38f77e087b7683adad258804409ba099f1235b4b4d6fea 8aa02787663d6be9a35677d9d8188b725d5fcd770e61b11b64e3def8808ea5c71c0a9afd7f6630c48634546088fcd8e2 b5635b7b972e195cab878b97dea62237c7f77eb57298538582a330b1082f6207a359f2923864630136d8b1f27c41b9aa 8257bb14583551a65975946980c714ecd6e5b629672bb950b9caacd886fbd22704bc9e3ba7d30778adab65dc74f0203a ab5fe1cd12634bfa4e5c60d946e2005cbd38f1063ec9a5668994a2463c02449a0a185ef331bd86b68b6e23a8780cb3ba a7d3487da56cda93570cc70215d438204f6a2709bfb5fda6c5df1e77e2efc80f4235c787e57fbf2c74aaff8cbb510a14 b61cff7b4c49d010e133319fb828eb900f8a7e55114fc86b39c261a339c74f630e1a7d7e1350244ada566a0ff3d46c4b 8d4d1d55d321d278db7a85522ccceca09510374ca81d4d73e3bb5249ace7674b73900c35a531ec4fa6448fabf7ad00dc 966492248aee24f0f56c8cfca3c8ec6ba3b19abb69ae642041d4c3be8523d22c65c4dafcab4c58989ccc4e0bd2f77919 b20c320a90cb220b86e1af651cdc1e21315cd215da69f6787e28157172f93fc8285dcd59b039c626ed8ca4633cba1a47 aae9e6b22f018ceb5c0950210bb8182cb8cb61014b7e14581a09d36ebd1bbfebdb2b82afb7fdb0cf75e58a293d9c456d 875547fb67951ad37b02466b79f0c9b985ccbc500cfb431b17823457dc79fb9597ec42cd9f198e15523fcd88652e63a4 92afce49773cb2e20fb21e4f86f18e0959ebb9c33361547ddb30454ee8e36b1e234019cbdca0e964cb292f7f77df6b90 8af85343dfe1821464c76ba11c216cbef697b5afc69c4d821342e55afdac047081ec2e3f7b09fc14b518d9a23b78c003 b7de4a1648fd63f3a918096ea669502af5357438e69dac77cb8102b6e6c15c76e033cfaa80dafc806e535ede5c1a20aa ac80e9b545e8bd762951d96c9ce87f629d01ffcde07efc2ef7879ca011f1d0d8a745abf26c9d452541008871304fac00 a4cf0f7ed724e481368016c38ea5816698a5f68eb21af4d3c422d2ba55f96a33e427c2aa40de1b56a7cfac7f7cf43ab0 899b0a678bb2db2cae1b44e75a661284844ebcdd87abf308fedeb2e4dbe5c5920c07db4db7284a7af806a2382e8b111a af0588a2a4afce2b1b13c1230816f59e8264177e774e4a341b289a101dcf6af813638fed14fb4d09cb45f35d5d032609 a4b8df79e2be76e9f5fc5845f06fe745a724cf37c82fcdb72719b77bdebea3c0e763f37909373e3a94480cc5e875cba0 83e42c46d88930c8f386b19fd999288f142d325e2ebc86a74907d6d77112cb0d449bc511c95422cc810574031a8cbba9 b5e39534070de1e5f6e27efbdd3dc917d966c2a9b8cf2d893f964256e95e954330f2442027dc148c776d63a95bcde955 958607569dc28c075e658cd4ae3927055c6bc456eef6212a6fea8205e48ed8777a8064f584cda38fe5639c371e2e7fba 812adf409fa63575113662966f5078a903212ffb65c9b0bbe62da0f13a133443a7062cb8fd70f5e5dd5559a32c26d2c8 a679f673e5ce6a3cce7fa31f22ee3785e96bcb55e5a776e2dd3467bef7440e3555d1a9b87cb215e86ee9ed13a090344b afedbb34508b159eb25eb2248d7fe328f86ef8c7d84c62d5b5607d74aae27cc2cc45ee148eb22153b09898a835c58df4 b75505d4f6b67d31e665cfaf5e4acdb5838ae069166b7fbcd48937c0608a59e40a25302fcc1873d2e81c1782808c70f0 b62515d539ec21a155d94fc00ea3c6b7e5f6636937bce18ed5b618c12257fb82571886287fd5d1da495296c663ebc512 ab8e1a9446bbdd588d1690243b1549d230e6149c28f59662b66a8391a138d37ab594df38e7720fae53217e5c3573b5be b31e8abf4212e03c3287bb2c0a153065a7290a16764a0bac8f112a72e632185a654bb4e88fdd6053e6c7515d9719fadb b55165477fe15b6abd2d0f4fddaa9c411710dcc4dd712daba3d30e303c9a3ee5415c256f9dc917ecf18c725b4dbab059 a0939d4f57cacaae549b78e87cc234de4ff6a35dc0d9cd5d7410abc30ebcd34c135e008651c756e5a9d2ca79c40ef42b 8cf10e50769f3443340844aad4d56ec790850fed5a41fcbd739abac4c3015f0a085a038fbe7fae9f5ad899cce5069f6b 924055e804d82a99ea4bb160041ea4dc14b568abf379010bc1922fde5d664718c31d103b8b807e3a1ae809390e708c73 8ec0f9d26f71b0f2e60a179e4fd1778452e2ffb129d50815e5d7c7cb9415fa69ae5890578086e8ef6bfde35ad2a74661 98c7f12b15ec4426b59f737f73bf5faea4572340f4550b7590dfb7f7ffedb2372e3e555977c63946d579544c53210ad0 8a935f7a955c78f69d66f18eee0092e5e833fa621781c9581058e219af4d7ceee48b84e472e159dda6199715fb2f9acf b78d4219f95a2dbfaa7d0c8a610c57c358754f4f43c2af312ab0fe8f10a5f0177e475332fb8fd23604e474fc2abeb051 8d086a14803392b7318c28f1039a17e3cfdcece8abcaca3657ec3d0ac330842098a85c0212f889fabb296dfb133ce9aa a53249f417aac82f2c2a50c244ce21d3e08a5e5a8bd33bec2a5ab0d6cd17793e34a17edfa3690899244ce201e2fb9986 8619b0264f9182867a1425be514dc4f1ababc1093138a728a28bd7e4ecc99b9faaff68c23792264bc6e4dce5f52a5c52 8c171edbbbde551ec19e31b2091eb6956107dd9b1f853e1df23bff3c10a3469ac77a58335eee2b79112502e8e163f3de a9d19ec40f0ca07c238e9337c6d6a319190bdba2db76fb63902f3fb459aeeb50a1ac30db5b25ee1b4201f3ca7164a7f4 b9c6ec14b1581a03520b8d2c1fbbc31fb8ceaef2c0f1a0d0080b6b96e18442f1734bea7ef7b635d787c691de4765d469 8cb437beb4cfa013096f40ccc169a713dc17afee6daa229a398e45fd5c0645a9ad2795c3f0cd439531a7151945d7064d a6e8740cc509126e146775157c2eb278003e5bb6c48465c160ed27888ca803fa12eee1f6a8dd7f444f571664ed87fdc1 b75c1fecc85b2732e96b3f23aefb491dbd0206a21d682aee0225838dc057d7ed3b576176353e8e90ae55663f79e986e4 ad8d249b0aea9597b08358bce6c77c1fd552ef3fbc197d6a1cfe44e5e6f89b628b12a6fb04d5dcfcbacc51f46e4ae7bb b998b2269932cbd58d04b8e898d373ac4bb1a62e8567484f4f83e224061bc0f212459f1daae95abdbc63816ae6486a55 827988ef6c1101cddc96b98f4a30365ff08eea2471dd949d2c0a9b35c3bbfa8c07054ad1f4c88c8fbf829b20bb5a9a4f 8692e638dd60babf7d9f2f2d2ce58e0ac689e1326d88311416357298c6a2bffbfebf55d5253563e7b3fbbf5072264146 a685d75b91aea04dbc14ab3c1b1588e6de96dae414c8e37b8388766029631b28dd860688079b12d09cd27f2c5af11adf b57eced93eec3371c56679c259b34ac0992286be4f4ff9489d81cf9712403509932e47404ddd86f89d7c1c3b6391b28c a1c8b4e42ebcbd8927669a97f1b72e236fb19249325659e72be7ddaaa1d9e81ca2abb643295d41a8c04a2c01f9c0efd7 877c33de20d4ed31674a671ba3e8f01a316581e32503136a70c9c15bf0b7cb7b1cba6cd4eb641fad165fb3c3c6c235fd a2a469d84ec478da40838f775d11ad38f6596eb41caa139cc190d6a10b5108c09febae34ffdafac92271d2e73c143693 972f817caedb254055d52e963ed28c206848b6c4cfdb69dbc961c891f8458eaf582a6d4403ce1177d87bc2ea410ef60a accbd739e138007422f28536381decc54bb6bd71d93edf3890e54f9ef339f83d2821697d1a4ac1f5a98175f9a9ecb9b5 8940f8772e05389f823b62b3adc3ed541f91647f0318d7a0d3f293aeeb421013de0d0a3664ea53dd24e5fbe02d7efef6 8ecce20f3ef6212edef07ec4d6183fda8e0e8cad2c6ccd0b325e75c425ee1faba00b5c26b4d95204238931598d78f49d 97cc72c36335bd008afbed34a3b0c7225933faba87f7916d0a6d2161e6f82e0cdcda7959573a366f638ca75d30e9dab1 9105f5de8699b5bdb6bd3bb6cc1992d1eac23929c29837985f83b22efdda92af64d9c574aa9640475087201bbbe5fd73 8ffb33c4f6d05c413b9647eb6933526a350ed2e4278ca2ecc06b0e8026d8dbe829c476a40e45a6df63a633090a3f82ef 8bfc6421fdc9c2d2aaa68d2a69b1a2728c25b84944cc3e6a57ff0c94bfd210d1cbf4ff3f06702d2a8257024d8be7de63 a80e1dc1dddfb41a70220939b96dc6935e00b32fb8be5dff4eed1f1c650002ff95e4af481c43292e3827363b7ec4768a 96f714ebd54617198bd636ba7f7a7f8995a61db20962f2165078d9ed8ee764d5946ef3cbdc7ebf8435bb8d5dd4c1deac 8cdb0890e33144d66391d2ae73f5c71f5a861f72bc93bff6cc399fc25dd1f9e17d8772592b44593429718784802ac377 8ccf9a7f80800ee770b92add734ed45a73ecc31e2af0e04364eefc6056a8223834c7c0dc9dfc52495bdec6e74ce69994 aa0875f423bd68b5f10ba978ddb79d3b96ec093bfbac9ff366323193e339ed7c4578760fb60f60e93598bdf1e5cc4995 a9214f523957b59c7a4cb61a40251ad72aba0b57573163b0dc0f33e41d2df483fb9a1b85a5e7c080e9376c866790f8cb b6224b605028c6673a536cc8ff9aeb94e7a22e686fda82cf16068d326469172f511219b68b2b3affb7933af0c1f80d07 b6d58968d8a017c6a34e24c2c09852f736515a2c50f37232ac6b43a38f8faa7572cc31dade543b594b61b5761c4781d0 8a97cefe5120020c38deeb861d394404e6c993c6cbd5989b6c9ebffe24f46ad11b4ba6348e2991cbf3949c28cfc3c99d 95bf046f8c3a9c0ce2634be4de3713024daec3fc4083e808903b25ce3ac971145af90686b451efcc72f6b22df0216667 a6a4e2f71b8fa28801f553231eff2794c0f10d12e7e414276995e21195abc9c2983a8997e41af41e78d19ff6fbb2680b 8e5e62a7ca9c2f58ebaab63db2ff1fb1ff0877ae94b7f5e2897f273f684ae639dff44cc65718f78a9c894787602ab26a 8542784383eec4f565fcb8b9fc2ad8d7a644267d8d7612a0f476fc8df3aff458897a38003d506d24142ad18f93554f2b b7db68ba4616ea072b37925ec4fb39096358c2832cc6d35169e032326b2d6614479f765ae98913c267105b84afcb9bf2 8b31dbb9457d23d416c47542c786e07a489af35c4a87dadb8ee91bea5ac4a5315e65625d78dad2cf8f9561af31b45390 a8545a1d91ac17257732033d89e6b7111db8242e9c6ebb0213a88906d5ef407a2c6fdb444e29504b06368b6efb4f4839 b1bd85d29ebb28ccfb05779aad8674906b267c2bf8cdb1f9a0591dd621b53a4ee9f2942687ee3476740c0b4a7621a3ae a2b54534e152e46c50d91fff03ae9cd019ff7cd9f4168b2fe7ac08ef8c3bbc134cadd3f9d6bd33d20ae476c2a8596c8a b19b571ff4ae3e9f5d95acda133c455e72c9ea9973cae360732859836c0341c4c29ab039224dc5bc3deb824e031675d8 940b5f80478648bac025a30f3efeb47023ce20ee98be833948a248bca6979f206bb28fc0f17b90acf3bb4abd3d14d731 8f106b40588586ac11629b96d57808ad2808915d89539409c97414aded90b4ff23286a692608230a52bff696055ba5d6 ae6bda03aa10da3d2abbc66d764ca6c8d0993e7304a1bdd413eb9622f3ca1913baa6da1e9f4f9e6cf847f14f44d6924d a18e7796054a340ef826c4d6b5a117b80927afaf2ebd547794c400204ae2caf277692e2eabb55bc2f620763c9e9da66d 8d2d25180dc2c65a4844d3e66819ccfcf48858f0cc89e1c77553b463ec0f7feb9a4002ce26bc618d1142549b9850f232 863f413a394de42cc8166c1c75d513b91d545fff1de6b359037a742c70b008d34bf8e587afa2d62c844d0c6f0ea753e7 83cd0cf62d63475e7fcad18a2e74108499cdbf28af2113cfe005e3b5887794422da450b1944d0a986eb7e1f4c3b18f25 b4f8b350a6d88fea5ab2e44715a292efb12eb52df738c9b2393da3f1ddee68d0a75b476733ccf93642154bceb208f2b8 b3f52aaa4cd4221cb9fc45936cc67fd3864bf6d26bf3dd86aa85aa55ecfc05f5e392ecce5e7cf9406b4b1c4fce0398c8 b33137084422fb643123f40a6df2b498065e65230fc65dc31791c330e898c51c3a65ff738930f32c63d78f3c9315f85b 91452bfa75019363976bb7337fe3a73f1c10f01637428c135536b0cdc7da5ce558dae3dfc792aa55022292600814a8ef ad6ba94c787cd4361ca642c20793ea44f1f127d4de0bb4a77c7fbfebae0fcadbf28e2cb6f0c12c12a07324ec8c19761d 890aa6248b17f1501b0f869c556be7bf2b1d31a176f9978bb97ab7a6bd4138eed32467951c5ef1871944b7f620542f43 82111db2052194ee7dd22ff1eafffac0443cf969d3762cceae046c9a11561c0fdce9c0711f88ac01d1bed165f8a7cee3 b1527b71df2b42b55832f72e772a466e0fa05743aacc7814f4414e4bcc8d42a4010c9e0fd940e6f254cafedff3cd6543 922370fa49903679fc565f09c16a5917f8125e72acfeb060fcdbadbd1644eb9f4016229756019c93c6d609cda5d5d174 aa4c7d98a96cab138d2a53d4aee8ebff6ef903e3b629a92519608d88b3bbd94de5522291a1097e6acf830270e64c8ee1 b3dc21608a389a72d3a752883a382baaafc61ecc44083b832610a237f6a2363f24195acce529eb4aed4ef0e27a12b66e 94619f5de05e07b32291e1d7ab1d8b7337a2235e49d4fb5f3055f090a65e932e829efa95db886b32b153bdd05a53ec8c ade1e92722c2ffa85865d2426fb3d1654a16477d3abf580cfc45ea4b92d5668afc9d09275d3b79283e13e6b39e47424d b7201589de7bed094911dd62fcd25c459a8e327ac447b69f541cdba30233063e5ddffad0b67e9c3e34adcffedfd0e13d 809d325310f862d6549e7cb40f7e5fc9b7544bd751dd28c4f363c724a0378c0e2adcb5e42ec8f912f5f49f18f3365c07 a79c20aa533de7a5d671c99eb9eb454803ba54dd4f2efa3c8fec1a38f8308e9905c71e9282955225f686146388506ff6 a85eeacb5e8fc9f3ed06a3fe2dc3108ab9f8c5877b148c73cf26e4e979bf5795edbe2e63a8d452565fd1176ed40402b2 97ef55662f8a1ec0842b22ee21391227540adf7708f491436044f3a2eb18c471525e78e1e14fa292507c99d74d7437c6 93110d64ed5886f3d16ce83b11425576a3a7a9bb831cd0de3f9a0b0f2270a730d68136b4ef7ff035ede004358f419b5c ac9ed0a071517f0ae4f61ce95916a90ba9a77a3f84b0ec50ef7298acdcd44d1b94525d191c39d6bd1bb68f4471428760 98abd6a02c7690f5a339adf292b8c9368dfc12e0f8069cf26a5e0ce54b4441638f5c66ea735142f3c28e00a0024267e6 b51efb73ba6d44146f047d69b19c0722227a7748b0e8f644d0fc9551324cf034c041a2378c56ce8b58d06038fb8a78de 8f115af274ef75c1662b588b0896b97d71f8d67986ae846792702c4742ab855952865ce236b27e2321967ce36ff93357 b3c4548f14d58b3ab03c222da09e4381a0afe47a72d18d50a94e0008797f78e39e99990e5b4757be62310d400746e35a a9b1883bd5f31f909b8b1b6dcb48c1c60ed20aa7374b3ffa7f5b2ed036599b5bef33289d23c80a5e6420d191723b92f7 85d38dffd99487ae5bb41ab4a44d80a46157bbbe8ef9497e68f061721f74e4da513ccc3422936b059575975f6787c936 adf870fcb96e972c033ab7a35d28ae79ee795f82bc49c3bd69138f0e338103118d5529c53f2d72a9c0d947bf7d312af2 ab4c7a44e2d9446c6ff303eb49aef0e367a58b22cc3bb27b4e69b55d1d9ee639c9234148d2ee95f9ca8079b1457d5a75 a386420b738aba2d7145eb4cba6d643d96bda3f2ca55bb11980b318d43b289d55a108f4bc23a9606fb0bccdeb3b3bb30 847020e0a440d9c4109773ecca5d8268b44d523389993b1f5e60e541187f7c597d79ebd6e318871815e26c96b4a4dbb1 a530aa7e5ca86fcd1bec4b072b55cc793781f38a666c2033b510a69e110eeabb54c7d8cbcb9c61fee531a6f635ffa972 87364a5ea1d270632a44269d686b2402da737948dac27f51b7a97af80b66728b0256547a5103d2227005541ca4b7ed04 8816fc6e16ea277de93a6d793d0eb5c15e9e93eb958c5ef30adaf8241805adeb4da8ce19c3c2167f971f61e0b361077d 8836a72d301c42510367181bb091e4be377777aed57b73c29ef2ce1d475feedd7e0f31676284d9a94f6db01cc4de81a2 b0d9d8b7116156d9dde138d28aa05a33e61f8a85839c1e9071ccd517b46a5b4b53acb32c2edd7150c15bc1b4bd8db9e3 ae931b6eaeda790ba7f1cd674e53dc87f6306ff44951fa0df88d506316a5da240df9794ccbd7215a6470e6b31c5ea193 8c6d5bdf87bd7f645419d7c6444e244fe054d437ed1ba0c122fde7800603a5fadc061e5b836cb22a6cfb2b466f20f013 90d530c6d0cb654999fa771b8d11d723f54b8a8233d1052dc1e839ea6e314fbed3697084601f3e9bbb71d2b4eaa596df b0d341a1422588c983f767b1ed36c18b141774f67ef6a43cff8e18b73a009da10fc12120938b8bba27f225bdfd3138f9 a131b56f9537f460d304e9a1dd75702ace8abd68cb45419695cb8dee76998139058336c87b7afd6239dc20d7f8f940cc aa6c51fa28975f709329adee1bbd35d49c6b878041841a94465e8218338e4371f5cb6c17f44a63ac93644bf28f15d20f 88440fb584a99ebd7f9ea04aaf622f6e44e2b43bbb49fb5de548d24a238dc8f26c8da2ccf03dd43102bda9f16623f609 9777b8695b790e702159a4a750d5e7ff865425b95fa0a3c15495af385b91c90c00a6bd01d1b77bffe8c47d01baae846f 8b9d764ece7799079e63c7f01690c8eff00896a26a0d095773dea7a35967a8c40db7a6a74692f0118bf0460c26739af4 85808c65c485520609c9e61fa1bb67b28f4611d3608a9f7a5030ee61c3aa3c7e7dc17fff48af76b4aecee2cb0dbd22ac ad2783a76f5b3db008ef5f7e67391fda4e7e36abde6b3b089fc4835b5c339370287935af6bd53998bed4e399eda1136d 96f18ec03ae47c205cc4242ca58e2eff185c9dca86d5158817e2e5dc2207ab84aadda78725f8dc080a231efdc093b940 97de1ab6c6cc646ae60cf7b86df73b9cf56cc0cd1f31b966951ebf79fc153531af55ca643b20b773daa7cab784b832f7 870ba266a9bfa86ef644b1ef025a0f1b7609a60de170fe9508de8fd53170c0b48adb37f19397ee8019b041ce29a16576 ad990e888d279ac4e8db90619d663d5ae027f994a3992c2fbc7d262b5990ae8a243e19157f3565671d1cb0de17fe6e55 8d9d5adcdd94c5ba3be4d9a7428133b42e485f040a28d16ee2384758e87d35528f7f9868de9bd23d1a42a594ce50a567 85a33ed75d514ece6ad78440e42f7fcdb59b6f4cff821188236d20edae9050b3a042ce9bc7d2054296e133d033e45022 92afd2f49a124aaba90de59be85ff269457f982b54c91b06650c1b8055f9b4b0640fd378df02a00e4fc91f7d226ab980 8c0ee09ec64bd831e544785e3d65418fe83ed9c920d9bb4d0bf6dd162c1264eb9d6652d2def0722e223915615931581c 8369bedfa17b24e9ad48ebd9c5afea4b66b3296d5770e09b00446c5b0a8a373d39d300780c01dcc1c6752792bccf5fd0 8b9e960782576a59b2eb2250d346030daa50bbbec114e95cdb9e4b1ba18c3d34525ae388f859708131984976ca439d94 b682bface862008fea2b5a07812ca6a28a58fd151a1d54c708fc2f8572916e0d678a9cb8dc1c10c0470025c8a605249e a38d5e189bea540a824b36815fc41e3750760a52be0862c4cac68214febdc1a754fb194a7415a8fb7f96f6836196d82a b9e7fbda650f18c7eb8b40e42cc42273a7298e65e8be524292369581861075c55299ce69309710e5b843cb884de171bd b6657e5e31b3193874a1bace08f42faccbd3c502fb73ad87d15d18a1b6c2a146f1baa929e6f517db390a5a47b66c0acf ae15487312f84ed6265e4c28327d24a8a0f4d2d17d4a5b7c29b974139cf93223435aaebe3af918f5b4bb20911799715f 8bb4608beb06bc394e1a70739b872ce5a2a3ffc98c7547bf2698c893ca399d6c13686f6663f483894bccaabc3b9c56ad b58ac36bc6847077584308d952c5f3663e3001af5ecf2e19cb162e1c58bd6c49510205d453cffc876ca1dc6b8e04a578 924f65ced61266a79a671ffb49b300f0ea44c50a0b4e3b02064faa99fcc3e4f6061ea8f38168ab118c5d47bd7804590e 8d67d43b8a06b0ff4fafd7f0483fa9ed1a9e3e658a03fb49d9d9b74e2e24858dc1bed065c12392037b467f255d4e5643 b4d4f87813125a6b355e4519a81657fa97c43a6115817b819a6caf4823f1d6a1169683fd68f8d025cdfa40ebf3069acb a7fd4d2c8e7b59b8eed3d4332ae94b77a89a2616347402f880bc81bde072220131e6dbec8a605be3a1c760b775375879 8d4a7d8fa6f55a30df37bcf74952e2fa4fd6676a2e4606185cf154bdd84643fd01619f8fb8813a564f72e3f574f8ce30 8086fb88e6260e9a9c42e9560fde76315ff5e5680ec7140f2a18438f15bc2cc7d7d43bfb5880b180b738c20a834e6134 916c4c54721de03934fee6f43de50bb04c81f6f8dd4f6781e159e71c40c60408aa54251d457369d133d4ba3ed7c12cb4 902e5bf468f11ed9954e2a4a595c27e34abe512f1d6dc08bbca1c2441063f9af3dc5a8075ab910a10ff6c05c1c644a35 a1302953015e164bf4c15f7d4d35e3633425a78294406b861675667eec77765ff88472306531e5d3a4ec0a2ff0dd6a9e 87874461df3c9aa6c0fa91325576c0590f367075f2f0ecfeb34afe162c04c14f8ce9d608c37ac1adc8b9985bc036e366 84b50a8a61d3cc609bfb0417348133e698fe09a6d37357ce3358de189efcf35773d78c57635c2d26c3542b13cc371752 acaed2cff8633d12c1d12bb7270c54d65b0b0733ab084fd47f81d0a6e1e9b6f300e615e79538239e6160c566d8bb8d29 889e6a0e136372ca4bac90d1ab220d4e1cad425a710e8cdd48b400b73bb8137291ceb36a39440fa84305783b1d42c72f 90952e5becec45b2b73719c228429a2c364991cf1d5a9d6845ae5b38018c2626f4308daa322cab1c72e0f6c621bb2b35 8f5a97a801b6e9dcd66ccb80d337562c96f7914e7169e8ff0fda71534054c64bf2a9493bb830623d612cfe998789be65 84f3df8b9847dcf1d63ca470dc623154898f83c25a6983e9b78c6d2d90a97bf5e622445be835f32c1e55e6a0a562ea78 91d12095cd7a88e7f57f254f02fdb1a1ab18984871dead2f107404bcf8069fe68258c4e6f6ebd2477bddf738135400bb b771a28bc04baef68604d4723791d3712f82b5e4fe316d7adc2fc01b935d8e644c06d59b83bcb542afc40ebafbee0683 872f6341476e387604a7e93ae6d6117e72d164e38ebc2b825bc6df4fcce815004d7516423c190c1575946b5de438c08d 90d6b4aa7d40a020cdcd04e8b016d041795961a8e532a0e1f4041252131089114a251791bf57794cadb7d636342f5d1c 899023ba6096a181448d927fed7a0fe858be4eac4082a42e30b3050ee065278d72fa9b9d5ce3bc1372d4cbd30a2f2976 a28f176571e1a9124f95973f414d5bdbf5794d41c3839d8b917100902ac4e2171eb940431236cec93928a60a77ede793 838dbe5bcd29c4e465d02350270fa0036cd46f8730b13d91e77afb7f5ed16525d0021d3b2ae173a76c378516a903e0cb 8e105d012dd3f5d20f0f1c4a7e7f09f0fdd74ce554c3032e48da8cce0a77260d7d47a454851387770f5c256fa29bcb88 8f4df0f9feeb7a487e1d138d13ea961459a6402fd8f8cabb226a92249a0d04ded5971f3242b9f90d08da5ff66da28af6 ad1cfda4f2122a20935aa32fb17c536a3653a18617a65c6836700b5537122af5a8206befe9eaea781c1244c43778e7f1 832c6f01d6571964ea383292efc8c8fa11e61c0634a25fa180737cc7ab57bc77f25e614aac9a2a03d98f27b3c1c29de2 903f89cc13ec6685ac7728521898781fecb300e9094ef913d530bf875c18bcc3ceed7ed51e7b482d45619ab4b025c2e9 a03c474bb915aad94f171e8d96f46abb2a19c9470601f4c915512ec8b9e743c3938450a2a5b077b4618b9df8809e1dc1 83536c8456f306045a5f38ae4be2e350878fa7e164ea408d467f8c3bc4c2ee396bd5868008c089183868e4dfad7aa50b 88f26b4ea1b236cb326cd7ad7e2517ec8c4919598691474fe15d09cabcfc37a8d8b1b818f4d112432ee3a716b0f37871 a44324e3fe96e9c12b40ded4f0f3397c8c7ee8ff5e96441118d8a6bfad712d3ac990b2a6a23231a8f691491ac1fd480f b0de4693b4b9f932191a21ee88629964878680152a82996c0019ffc39f8d9369bbe2fe5844b68d6d9589ace54af947e4 8e5d8ba948aea5fd26035351a960e87f0d23efddd8e13236cc8e4545a3dda2e9a85e6521efb8577e03772d3637d213d9 93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556 8731176363ad7658a2862426ee47a5dce9434216cef60e6045fa57c40bb3ce1e78dac4510ae40f1f31db5967022ced32 b10c9a96745722c85bdb1a693100104d560433d45b9ac4add54c7646a7310d8e9b3ca9abd1039d473ae768a18e489845 a2ac374dfbb464bf850b4a2caf15b112634a6428e8395f9c9243baefd2452b4b4c61b0cb2836d8eae2d57d4900bf407e b69fe3ded0c4f5d44a09a0e0f398221b6d1bf5dbb8bc4e338b93c64f1a3cac1e4b5f73c2b8117158030ec03787f4b452 8852cdbaf7d0447a8c6f211b4830711b3b5c105c0f316e3a6a18dcfbb9be08bd6f4e5c8ae0c3692da08a2dfa532f9d5c 93bbf6d7432a7d98ade3f94b57bf9f4da9bc221a180a370b113066dd42601bb9e09edd79e2e6e04e00423399339eebda a80941c391f1eeafc1451c59e4775d6a383946ff22997aeaadf806542ba451d3b0f0c6864eeba954174a296efe2c1550 a045fe2bb011c2a2f71a0181a8f457a3078470fb74c628eab8b59aef69ffd0d649723bf74d6885af3f028bc5a104fb39 b9d8c35911009c4c8cad64692139bf3fc16b78f5a19980790cb6a7aea650a25df4231a4437ae0c351676a7e42c16134f 94c79501ded0cfcbab99e1841abe4a00a0252b3870e20774c3da16c982d74c501916ec28304e71194845be6e3113c7ab 900a66418b082a24c6348d8644ddb1817df5b25cb33044a519ef47cc8e1f7f1e38d2465b7b96d32ed472d2d17f8414c6 b26f45d393b8b2fcb29bdbb16323dc7f4b81c09618519ab3a39f8ee5bd148d0d9f3c0b5dfab55b5ce14a1cb9206d777b aa1a87735fc493a80a96a9a57ca40a6d9c32702bfcaa9869ce1a116ae65d69cefe2f3e79a12454b4590353e96f8912b4 a922b188d3d0b69b4e4ea2a2aa076566962844637da12c0832105d7b31dea4a309eee15d12b7a336be3ea36fcbd3e3b7 8f3841fcf4105131d8c4d9885e6e11a46c448226401cf99356c291fadb864da9fa9d30f3a73c327f23f9fd99a11d633e 9791d1183fae270e226379af6c497e7da803ea854bb20afa74b253239b744c15f670ee808f708ede873e78d79a626c9a a4cad52e3369491ada61bf28ada9e85de4516d21c882e5f1cd845bea9c06e0b2887b0c5527fcff6fc28acd3c04f0a796 b9ac86a900899603452bd11a7892a9bfed8054970bfcbeaa8c9d1930db891169e38d6977f5258c25734f96c8462eee3b a3a154c28e5580656a859f4efc2f5ebfa7eaa84ca40e3f134fa7865e8581586db74992dbfa4036aa252fba103773ddde 95cc2a0c1885a029e094f5d737e3ecf4d26b99036453a8773c77e360101f9f98676ee246f6f732a377a996702d55691f 842651bbe99720438d8d4b0218feb60481280c05beb17750e9ca0d8c0599a60f873b7fbdcc7d8835ba9a6d57b16eec03 81ee54699da98f5620307893dcea8f64670609fa20e5622265d66283adeac122d458b3308c5898e6c57c298db2c8b24f b97868b0b2bc98032d68352a535a1b341b9ff3c7af4e3a7f3ebc82d3419daa1b5859d6aedc39994939623c7cd878bd9b b60325cd5d36461d07ef253d826f37f9ee6474a760f2fff80f9873d01fd2b57711543cdc8d7afa1c350aa753c2e33dea 8c205326c11d25a46717b780c639d89714c7736c974ae71287e3f4b02e6605ac2d9b4928967b1684f12be040b7bf2dd3 95a392d82db51e26ade6c2ccd3396d7e40aff68fa570b5951466580d6e56dda51775dce5cf3a74a7f28c3cb2eb551c4d 8f2cc8071eb56dffb70bda6dd433b556221dc8bba21c53353c865f00e7d4d86c9e39f119ea9a8a12ef583e9a55d9a6b6 9449a71af9672aaf8856896d7e3d788b22991a7103f75b08c0abbcc2bfe60fda4ed8ce502cea4511ff0ea52a93e81222 857090ab9fdb7d59632d068f3cc8cf27e61f0d8322d30e6b38e780a1f05227199b4cd746aac1311c36c659ef20931f28 98a891f4973e7d9aaf9ac70854608d4f7493dffc7e0987d7be9dd6029f6ea5636d24ef3a83205615ca1ff403750058e1 a486e1365bbc278dd66a2a25d258dc82f46b911103cb16aab3945b9c95ae87b386313a12b566df5b22322ede0afe25ad a9a1eb399ed95d396dccd8d1ac718043446f8b979ec62bdce51c617c97a312f01376ab7fb87d27034e5f5570797b3c33 b7abc3858d7a74bb446218d2f5a037e0fae11871ed9caf44b29b69c500c1fa1dcfad64c9cdccc9d80d5e584f06213deb 8cfb09fe2e202faa4cebad932b1d35f5ca204e1c2a0c740a57812ac9a6792130d1312aabd9e9d4c58ca168bfebd4c177 a90a305c2cd0f184787c6be596fa67f436afd1f9b93f30e875f817ac2aae8bdd2e6e656f6be809467e6b3ad84adb86b1 80a9ef993c2b009ae172cc8f7ec036f5734cf4f4dfa06a7db4d54725e7fbfae5e3bc6f22687bdbb6961939d6f0c87537 848ade1901931e72b955d7db1893f07003e1708ff5d93174bac5930b9a732640f0578839203e9b77eb27965c700032d3 93fdf4697609c5ae9c33b9ca2f5f1af44abeb2b98dc4fdf732cf7388de086f410730dc384d9b7a7f447bb009653c8381 89ce3fb805aea618b5715c0d22a9f46da696b6fa86794f56fdf1d44155a33d42daf1920bcbe36cbacf3cf4c92df9cbc7 829ce2c342cf82aa469c65f724f308f7a750bd1494adc264609cd790c8718b8b25b5cab5858cf4ee2f8f651d569eea67 af2f0cee7bf413204be8b9df59b9e4991bc9009e0d6dbe6815181df0ec2ca93ab8f4f3135b1c14d8f53d74bff0bd6f27 b87998cecf7b88cde93d1779f10a521edd5574a2fbd240102978639ec57433ba08cdb53849038a329cebbe74657268d2 a64542a1261a6ed3d720c2c3a802303aad8c4c110c95d0f12e05c1065e66f42da494792b6bfc5b9272363f3b1d457f58 86a6fd042e4f282fadf07a4bfee03fc96a3aea49f7a00f52bf249a20f1ec892326855410e61f37fbb27d9305eb2fc713 967ea5bc403b6db269682f7fd0df90659350d7e1aa66bc4fab4c9dfcd75ed0bba4b52f1cebc5f34dc8ba810793727629 a52990f9f3b8616ce3cdc2c74cd195029e6a969753dcf2d1630438700e7d6ebde36538532b3525ac516f5f2ce9dd27a3 a64f7ff870bab4a8bf0d4ef6f5c744e9bf1021ed08b4c80903c7ad318e80ba1817c3180cc45cb5a1cae1170f0241655f b00f706fa4de1f663f021e8ad3d155e84ce6084a409374b6e6cd0f924a0a0b51bebaaaf1d228c77233a73b0a5a0df0e9 8b882cc3bff3e42babdb96df95fb780faded84887a0a9bab896bef371cdcf169d909f5658649e93006aa3c6e1146d62e 9332663ef1d1dcf805c3d0e4ce7a07d9863fb1731172e766b3cde030bf81682cc011e26b773fb9c68e0477b4ae2cfb79 a8aa8151348dbd4ef40aaeb699b71b4c4bfd3218560c120d85036d14f678f6736f0ec68e80ce1459d3d35feccc575164 a16cd8b729768f51881c213434aa28301fa78fcb554ddd5f9012ee1e4eae7b5cb3dd88d269d53146dea92d10790faf0b 86844f0ef9d37142faf3b1e196e44fbe280a3ba4189aa05c356778cb9e3b388a2bff95eed305ada8769935c9974e4c57 ae2eec6b328fccf3b47bcdac32901ac2744a51beb410b04c81dea34dee4912b619466a4f5e2780d87ecefaebbe77b46d 915df4c38d301c8a4eb2dc5b1ba0ffaad67cbb177e0a80095614e9c711f4ef24a4cef133f9d982a63d2a943ba6c8669d ae6a2a4dedfc2d1811711a8946991fede972fdf2a389b282471280737536ffc0ac3a6d885b1f8bda0366eb0b229b9979 a9b628c63d08b8aba6b1317f6e91c34b2382a6c85376e8ef2410a463c6796740ae936fc4e9e0737cb9455d1daa287bd8 848e30bf7edf2546670b390d5cf9ab71f98fcb6add3c0b582cb34996c26a446dee5d1bde4fdcde4fc80c10936e117b29 907d6096c7c8c087d1808dd995d5d2b9169b3768c3f433475b50c2e2bd4b082f4d543afd8b0b0ddffa9c66222a72d51d a59970a2493b07339124d763ac9d793c60a03354539ecbcf6035bc43d1ea6e35718202ae6d7060b7d388f483d971573c b9cfef2af9681b2318f119d8611ff6d9485a68d8044581b1959ab1840cbca576dbb53eec17863d2149966e9feb21122f ad47271806161f61d3afa45cdfe2babceef5e90031a21779f83dc8562e6076680525b4970b2f11fe9b2b23c382768323 8e425a99b71677b04fe044625d338811fbb8ee32368a424f6ab2381c52e86ee7a6cecedf777dc97181519d41c351bc22 86b55b54d7adefc12954a9252ee23ae83efe8b5b4b9a7dc307904413e5d69868c7087a818b2833f9b004213d629be8ad a14fda6b93923dd11e564ae4457a66f397741527166e0b16a8eb91c6701c244fd1c4b63f9dd3515193ec88fa6c266b35 a9b17c36ae6cd85a0ed7f6cabc5b47dc8f80ced605db327c47826476dc1fb8f8669aa7a7dc679fbd4ee3d8e8b4bd6a6f 82a0829469c1458d959c821148f15dacae9ea94bf56c59a6ab2d4dd8b3d16d73e313b5a3912a6c1f131d73a8f06730c4 b22d56d549a53eaef549595924bdb621ff807aa4513feedf3fdcbf7ba8b6b9cfa4481c2f67fc642db397a6b794a8b63a 974c59c24392e2cb9294006cbe3c52163e255f3bd0c2b457bdc68a6338e6d5b6f87f716854492f8d880a6b896ccf757c b70d247ba7cad97c50b57f526c2ba915786e926a94e8f8c3eebc2e1be6f4255411b9670e382060049c8f4184302c40b2 ad80201fe75ef21c3ddbd98cf23591e0d7a3ba1036dfe77785c32f44755a212c31f0ceb0a0b6f5ee9b6dc81f358d30c3 8c656e841f9bb90b9a42d425251f3fdbc022a604d75f5845f479ed4be23e02aaf9e6e56cde351dd7449c50574818a199 8b88dd3fa209d3063b7c5b058f7249ee9900fbc2287d16da61a0704a0a1d71e45d9c96e1cda7fdf9654534ec44558b22 961da00cc8750bd84d253c08f011970ae1b1158ad6778e8ed943d547bceaf52d6d5a212a7de3bf2706688c4389b827d2 a5dd379922549a956033e3d51a986a4b1508e575042b8eaa1df007aa77cf0b8c2ab23212f9c075702788fa9c53696133 ac8fcfde3a349d1e93fc8cf450814e842005c545c4844c0401bc80e6b96cdb77f29285a14455e167c191d4f312e866cd ac63d79c799783a8466617030c59dd5a8f92ee6c5204676fd8d881ce5f7f8663bdbeb0379e480ea9b6340ab0dc88e574 805874fde19ce359041ae2bd52a39e2841acabfd31f965792f2737d7137f36d4e4722ede8340d8c95afa6af278af8acb 8d2f323a228aa8ba7b7dc1399138f9e6b41df1a16a7069003ab8104b8b68506a45141bc5fe66acf430e23e13a545190b a1610c721a2d9af882bb6b39bea97cff1527a3aea041d25934de080214ae77c959e79957164440686d15ab301e897d4d aba16d29a47fc36f12b654fde513896723e2c700c4190f11b26aa4011da57737ad717daa02794aa3246e4ae5f0b0cc3a a406db2f15fdd135f346cc4846623c47edd195e80ba8c7cb447332095314d565e4040694ca924696bb5ee7f8996ea0ba 8b30e2cd9b47d75ba57b83630e40f832249af6c058d4f490416562af451993eec46f3e1f90bc4d389e4c06abd1b32a46 aacf9eb7036e248e209adbfc3dd7ce386569ea9b312caa4b240726549db3c68c4f1c8cbf8ed5ea9ea60c7e57c9df3b8e b20fcac63bf6f5ee638a42d7f89be847f348c085ddcbec3fa318f4323592d136c230495f188ef2022aa355cc2b0da6f9 811eff750456a79ec1b1249d76d7c1547065b839d8d4aaad860f6d4528eb5b669473dcceeeea676cddbc3980b68461b7 b52d14ae33f4ab422f953392ae76a19c618cc31afc96290bd3fe2fb44c954b5c92c4789f3f16e8793f2c0c1691ade444 a7826dafeeba0db5b66c4dfcf2b17fd7b40507a5a53ac2e42942633a2cb30b95ba1739a6e9f3b7a0e0f1ec729bf274e2 8acfd83ddf7c60dd7c8b20c706a3b972c65d336b8f9b3d907bdd8926ced271430479448100050b1ef17578a49c8fa616 af0c69f65184bb06868029ad46f8465d75c36814c621ac20a5c0b06a900d59305584f5a6709683d9c0e4b6cd08d650a6 b6cc8588191e00680ee6c3339bd0f0a17ad8fd7f4be57d5d7075bede0ea593a19e67f3d7c1a20114894ee5bfcab71063 a82fd4f58635129dbb6cc3eb9391cf2d28400018b105fc41500fbbd12bd890b918f97d3d359c29dd3b4c4e34391dfab0 92fc544ed65b4a3625cf03c41ddff7c039bc22d22c0d59dcc00efd5438401f2606adb125a1d5de294cca216ec8ac35a3 906f67e4a32582b71f15940523c0c7ce370336935e2646bdaea16a06995256d25e99df57297e39d6c39535e180456407 97510337ea5bbd5977287339197db55c60533b2ec35c94d0a460a416ae9f60e85cee39be82abeeacd5813cf54df05862 87e6894643815c0ea48cb96c607266c5ee4f1f82ba5fe352fb77f9b6ed14bfc2b8e09e80a99ac9047dfcf62b2ae26795 b6fd55dd156622ad7d5d51b7dde75e47bd052d4e542dd6449e72411f68275775c846dde301e84613312be8c7bce58b07 b98461ac71f554b2f03a94e429b255af89eec917e208a8e60edf5fc43b65f1d17a20de3f31d2ce9f0cb573c25f2f4d98 96f0dea40ca61cefbee41c4e1fe9a7d81fbe1f49bb153d083ab70f5d0488a1f717fd28cedcf6aa18d07cce2c62801898 8d7c3ab310184f7dc34b6ce4684e4d29a31e77b09940448ea4daac730b7eb308063125d4dd229046cf11bfd521b771e0 96f0564898fe96687918bbf0a6adead99cf72e3a35ea3347e124af9d006221f8e82e5a9d2fe80094d5e8d48e610f415e ad50fcb92c2675a398cf07d4c40a579e44bf8d35f27cc330b57e54d5ea59f7d898af0f75dccfe3726e5471133d70f92b 828beed62020361689ae7481dd8f116902b522fb0c6c122678e7f949fdef70ead011e0e6bffd25678e388744e17cdb69 8349decac1ca16599eee2efc95bcaabf67631107da1d34a2f917884bd70dfec9b4b08ab7bc4379d6c73b19c0b6e54fb8 b2a6a2e50230c05613ace9e58bb2e98d94127f196f02d9dddc53c43fc68c184549ca12d713cb1b025d8260a41e947155 94ff52181aadae832aed52fc3b7794536e2a31a21fc8be3ea312ca5c695750d37f08002f286b33f4023dba1e3253ecfa a21d56153c7e5972ee9a319501be4faff199fdf09bb821ea9ce64aa815289676c00f105e6f00311b3a5b627091b0d0fc a27a60d219f1f0c971db73a7f563b371b5c9fc3ed1f72883b2eac8a0df6698400c9954f4ca17d7e94e44bd4f95532afb a2fc56fae99b1f18ba5e4fe838402164ce82f8a7f3193d0bbd360c2bac07c46f9330c4c7681ffb47074c6f81ee6e7ac6 b748e530cd3afb96d879b83e89c9f1a444f54e55372ab1dcd46a0872f95ce8f49cf2363fc61be82259e04f555937ed16 8bf8993e81080c7cbba1e14a798504af1e4950b2f186ab3335b771d6acaee4ffe92131ae9c53d74379d957cb6344d9cd 96774d0ef730d22d7ab6d9fb7f90b9ead44285219d076584a901960542756700a2a1603cdf72be4708b267200f6c36a9 b47703c2ab17be1e823cc7bf3460db1d6760c0e33862c90ca058845b2ff234b0f9834ddba2efb2ee1770eb261e7d8ffd 84319e67c37a9581f8b09b5e4d4ae88d0a7fb4cbb6908971ab5be28070c3830f040b1de83ee663c573e0f2f6198640e4 96811875fa83133e0b3c0e0290f9e0e28bca6178b77fdf5350eb19344d453dbd0d71e55a0ef749025a5a2ca0ad251e81 81a423423e9438343879f2bfd7ee9f1c74ebebe7ce3cfffc8a11da6f040cc4145c3b527bd3cf63f9137e714dbcb474ef b8c3535701ddbeec2db08e17a4fa99ba6752d32ece5331a0b8743676f421fcb14798afc7c783815484f14693d2f70db8 81aee980c876949bf40782835eec8817d535f6f3f7e00bf402ddd61101fdcd60173961ae90a1cf7c5d060339a18c959d 87e67b928d97b62c49dac321ce6cb680233f3a394d4c9a899ac2e8db8ccd8e00418e66cdfd68691aa3cb8559723b580c 8eac204208d99a2b738648df96353bbb1b1065e33ee4f6bba174b540bbbd37d205855e1f1e69a6b7ff043ca377651126 848e6e7a54ad64d18009300b93ea6f459ce855971dddb419b101f5ac4c159215626fadc20cc3b9ab1701d8f6dfaddd8b 88aa123d9e0cf309d46dddb6acf634b1ade3b090a2826d6e5e78669fa1220d6df9a6697d7778cd9b627db17eea846126 9200c2a629b9144d88a61151b661b6c4256cc5dadfd1e59a8ce17a013c2d8f7e754aabe61663c3b30f1bc47784c1f8cf b6e1a2827c3bdda91715b0e1b1f10dd363cef337e7c80cac1f34165fc0dea7c8b69747e310563db5818390146ce3e231 92c333e694f89f0d306d54105b2a5dcc912dbe7654d9e733edab12e8537350815be472b063e56cfde5286df8922fdecb a6fac04b6d86091158ebb286586ccfec2a95c9786e14d91a9c743f5f05546073e5e3cc717635a0c602cad8334e922346 a581b4af77feebc1fb897d49b5b507c6ad513d8f09b273328efbb24ef0d91eb740d01b4d398f2738125dacfe550330cd 81c4860cccf76a34f8a2bc3f464b7bfd3e909e975cce0d28979f457738a56e60a4af8e68a3992cf273b5946e8d7f76e2 8d1eaa09a3180d8af1cbaee673db5223363cc7229a69565f592fa38ba0f9d582cedf91e15dabd06ebbf2862fc0feba54 9832f49b0147f4552402e54593cfa51f99540bffada12759b71fcb86734be8e500eea2d8b3d036710bdf04c901432de9 8bdb0e8ec93b11e5718e8c13cb4f5de545d24829fd76161216340108098dfe5148ed25e3b57a89a516f09fa79043734d ab96f06c4b9b0b2c0571740b24fca758e6976315053a7ecb20119150a9fa416db2d3a2e0f8168b390bb063f0c1caf785 ab777f5c52acd62ecf4d1f168b9cc8e1a9b45d4ec6a8ff52c583e867c2239aba98d7d3af977289b367edce03d9c2dfb1 a09d3ce5e748da84802436951acc3d3ea5d8ec1d6933505ed724d6b4b0d69973ab0930daec9c6606960f6e541e4a3ce2 8ef94f7be4d85d5ad3d779a5cf4d7b2fc3e65c52fb8e1c3c112509a4af77a0b5be994f251e5e40fabeeb1f7d5615c22b a7406a5bf5708d9e10922d3c5c45c03ef891b8d0d74ec9f28328a72be4cdc05b4f2703fa99366426659dfca25d007535 b7f52709669bf92a2e070bfe740f422f0b7127392c5589c7f0af71bb5a8428697c762d3c0d74532899da24ea7d8695c2 b9dfb0c8df84104dbf9239ccefa4672ef95ddabb8801b74997935d1b81a78a6a5669a3c553767ec19a1281f6e570f4ff ae4d5c872156061ce9195ac640190d8d71dd406055ee43ffa6f9893eb24b870075b74c94d65bc1d5a07a6573282b5520 afe6bd3eb72266d333f1807164900dcfa02a7eb5b1744bb3c86b34b3ee91e3f05e38fa52a50dc64eeb4bdb1dd62874b8 948043cf1bc2ef3c01105f6a78dc06487f57548a3e6ef30e6ebc51c94b71e4bf3ff6d0058c72b6f3ecc37efd7c7fa8c0 a22fd17c2f7ffe552bb0f23fa135584e8d2d8d75e3f742d94d04aded2a79e22a00dfe7acbb57d44e1cdb962fb22ae170 8cd0f4e9e4fb4a37c02c1bde0f69359c43ab012eb662d346487be0c3758293f1ca560122b059b091fddce626383c3a8f 90499e45f5b9c81426f3d735a52a564cafbed72711d9279fdd88de8038e953bc48c57b58cba85c3b2e4ce56f1ddb0e11 8c30e4c034c02958384564cac4f85022ef36ab5697a3d2feaf6bf105049675bbf23d01b4b6814711d3d9271abff04cac 81f7999e7eeea30f3e1075e6780bbf054f2fb6f27628a2afa4d41872a385b4216dd5f549da7ce6cf39049b2251f27fb7 b36a7191f82fc39c283ffe53fc1f5a9a00b4c64eee7792a8443475da9a4d226cf257f226ea9d66e329af15d8f04984ec aad4da528fdbb4db504f3041c747455baff5fcd459a2efd78f15bdf3aea0bdb808343e49df88fe7a7c8620009b7964a3 99ebd8c6dd5dd299517fb6381cfc2a7f443e6e04a351440260dd7c2aee3f1d8ef06eb6c18820b394366ecdfd2a3ce264 8873725b81871db72e4ec3643084b1cdce3cbf80b40b834b092767728605825c19b6847ad3dcf328438607e8f88b4410 b008ee2f895daa6abd35bd39b6f7901ae4611a11a3271194e19da1cdcc7f1e1ea008fe5c5440e50d2c273784541ad9c5 9036feafb4218d1f576ef89d0e99124e45dacaa6d816988e34d80f454d10e96809791d5b78f7fd65f569e90d4d7238c5 92073c1d11b168e4fa50988b0288638b4868e48bbc668c5a6dddf5499875d53be23a285acb5e4bad60114f6cf6c556e9 88c87dfcb8ba6cbfe7e1be081ccfadbd589301db2cb7c99f9ee5d7db90aa297ed1538d5a867678a763f2deede5fd219a b42a562805c661a50f5dea63108002c0f27c0da113da6a9864c9feb5552225417c0356c4209e8e012d9bcc9d182c7611 8e6317d00a504e3b79cd47feb4c60f9df186467fe9ca0f35b55c0364db30528f5ff071109dabb2fc80bb9cd4949f0c24 b7b1ea6a88694f8d2f539e52a47466695e39e43a5eb9c6f23bca15305fe52939d8755cc3ac9d6725e60f82f994a3772f a3cd55161befe795af93a38d33290fb642b8d80da8b786c6e6fb02d393ea308fbe87f486994039cbd7c7b390414594b6 b416d2d45b44ead3b1424e92c73c2cf510801897b05d1724ff31cbd741920cd858282fb5d6040fe1f0aa97a65bc49424 950ee01291754feace97c2e933e4681e7ddfbc4fcd079eb6ff830b0e481d929c93d0c7fb479c9939c28ca1945c40da09 869bd916aee8d86efe362a49010382674825d49195b413b4b4018e88ce43fe091b475d0b863ff0ba2259400f280c2b23 9782f38cd9c9d3385ec286ebbc7cba5b718d2e65a5890b0a5906b10a89dc8ed80d417d71d7c213bf52f2af1a1f513ea7 91cd33bc2628d096269b23faf47ee15e14cb7fdc6a8e3a98b55e1031ea0b68d10ba30d97e660f7e967d24436d40fad73 8becc978129cc96737034c577ae7225372dd855da8811ae4e46328e020c803833b5bdbc4a20a93270e2b8bd1a2feae52 a36b1d8076783a9522476ce17f799d78008967728ce920531fdaf88303321bcaf97ecaa08e0c01f77bc32e53c5f09525 b4720e744943f70467983aa34499e76de6d59aa6fadf86f6b787fdce32a2f5b535b55db38fe2da95825c51002cfe142d 91ad21fc502eda3945f6de874d1b6bf9a9a7711f4d61354f9e5634fc73f9c06ada848de15ab0a75811d3250be862827d 84f78e2ebf5fc077d78635f981712daf17e2475e14c2a96d187913006ad69e234746184a51a06ef510c9455b38acb0d7 960aa7906e9a2f11db64a26b5892ac45f20d2ccb5480f4888d89973beb6fa0dfdc06d68d241ff5ffc7f1b82b1aac242d a99365dcd1a00c66c9db6924b97c920f5c723380e823b250db85c07631b320ec4e92e586f7319e67a522a0578f7b6d6c a25d92d7f70cf6a88ff317cfec071e13774516da664f5fac0d4ecaa65b8bf4eb87a64a4d5ef2bd97dfae98d388dbf5cc a7af47cd0041295798f9779020a44653007444e8b4ef0712982b06d0dcdd434ec4e1f7c5f7a049326602cb605c9105b7 aefe172eac5568369a05980931cc476bebd9dea573ba276d59b9d8c4420784299df5a910033b7e324a6c2dfc62e3ef05 b69bc9d22ffa645baa55e3e02522e9892bb2daa7fff7c15846f13517d0799766883ee09ae0869df4139150c5b843ca8a 95a10856140e493354fdd12722c7fdded21b6a2ffbc78aa2697104af8ad0c8e2206f44b0bfee077ef3949d46bbf7c16b 891f2fcd2c47cbea36b7fa715968540c233313f05333f09d29aba23c193f462ed490dd4d00969656e89c53155fdfe710 a6c33e18115e64e385c843dde34e8a228222795c7ca90bc2cc085705d609025f3351d9be61822c69035a49fb3e48f2d5 b87fb12f12c0533b005adad0487f03393ff682e13575e3cb57280c3873b2c38ba96a63c49eef7a442753d26b7005230b b905c02ba451bfd411c135036d92c27af3b0b1c9c2f1309d6948544a264b125f39dd41afeff4666b12146c545adc168a 8b29c513f43a78951cf742231cf5457a6d9d55edf45df5481a0f299a418d94effef561b15d2c1a01d1b8067e7153fda9 b9941cccd51dc645920d2781c81a317e5a33cb7cf76427b60396735912cb6d2ca9292bb4d36b6392467d390d2c58d9f3 a8546b627c76b6ef5c93c6a98538d8593dbe21cb7673fd383d5401b0c935eea0bdeeefeb1af6ad41bad8464fb87bbc48 aa286b27de2812de63108a1aec29d171775b69538dc6198640ac1e96767c2b83a50391f49259195957d457b493b667c9 a932fb229f641e9abbd8eb2bd874015d97b6658ab6d29769fc23b7db9e41dd4f850382d4c1f08af8f156c5937d524473 a1412840fcc86e2aeec175526f2fb36e8b3b8d21a78412b7266daf81e51b3f68584ed8bd42a66a43afdd8c297b320520 89c78be9efb624c97ebca4fe04c7704fa52311d183ffd87737f76b7dadc187c12c982bd8e9ed7cd8beb48cdaafd2fd01 a3f5ddec412a5bec0ce15e3bcb41c6214c2b05d4e9135a0d33c8e50a78eaba71e0a5a6ea8b45854dec5c2ed300971fc2 9721f9cec7a68b7758e3887548790de49fa6a442d0396739efa20c2f50352a7f91d300867556d11a703866def2d5f7b5 a23764e140a87e5991573521af039630dd28128bf56eed2edbed130fd4278e090b60cf5a1dca9de2910603d44b9f6d45 a1a6494a994215e48ab55c70efa8ffdddce6e92403c38ae7e8dd2f8288cad460c6c7db526bbdf578e96ca04d9fe12797 b1705ea4cb7e074efe0405fc7b8ee2ec789af0426142f3ec81241cacd4f7edcd88e39435e4e4d8e7b1df64f3880d6613 85595d061d677116089a6064418b93eb44ff79e68d12bd9625078d3bbc440a60d0b02944eff6054433ee34710ae6fbb4 9978d5e30bedb7526734f9a1febd973a70bfa20890490e7cc6f2f9328feab1e24f991285dbc3711d892514e2d7d005ad af30243c66ea43b9f87a061f947f7bce745f09194f6e95f379c7582b9fead920e5d6957eaf05c12ae1282ada4670652f a1930efb473f88001e47aa0b2b2a7566848cccf295792e4544096ecd14ee5d7927c173a8576b405bfa2eec551cd67eb5 b0446d1c590ee5a45f7e22d269c044f3848c97aec1d226b44bfd0e94d9729c28a38bccddc3a1006cc5fe4e3c24f001f2 b8a8380172df3d84b06176df916cf557966d4f2f716d3e9437e415d75b646810f79f2b2b71d857181b7fc944018883a3 a563afec25b7817bfa26e19dc9908bc00aa8fc3d19be7d6de23648701659009d10e3e4486c28e9c6b13d48231ae29ac5 a5a8e80579de886fb7d6408f542791876885947b27ad6fa99a8a26e381f052598d7b4e647b0115d4b5c64297e00ce28e 8f87afcc7ad33c51ac719bade3cd92da671a37a82c14446b0a2073f4a0a23085e2c8d31913ed2d0be928f053297de8f6 a43c455ce377e0bc434386c53c752880687e017b2f5ae7f8a15c044895b242dffde4c92fb8f8bb50b18470b17351b156 8368f8b12a5bceb1dba25adb3a2e9c7dc9b1a77a1f328e5a693f5aec195cd1e06b0fe9476b554c1c25dac6c4a5b640a3 919878b27f3671fc78396f11531c032f3e2bd132d04cc234fa4858676b15fb1db3051c0b1db9b4fc49038216f11321ce b48cd67fb7f1242696c1f877da4bdf188eac676cd0e561fbac1a537f7b8229aff5a043922441d603a26aae56a15faee4 a3e0fdfd4d29ea996517a16f0370b54787fefe543c2fe73bfc6f9e560c1fd30dad8409859e2d7fa2d44316f24746c712 8bb156ade8faf149df7bea02c140c7e392a4742ae6d0394d880a849127943e6f26312033336d3b9fdc0092d71b5efe87 8845e5d5cc555ca3e0523244300f2c8d7e4d02aaebcb5bd749d791208856c209a6f84dd99fd55968c9f0ab5f82916707 a3e90bb5c97b07789c2f32dff1aec61d0a2220928202f5ad5355ae71f8249237799d6c8a22602e32e572cb12eabe0c17 b150bcc391884c996149dc3779ce71f15dda63a759ee9cc05871f5a8379dcb62b047098922c0f26c7bd04deb394c33f9 95cd4ad88d51f0f2efcfd0c2df802fe252bb9704d1afbf9c26a248df22d55da87bdfaf41d7bc6e5df38bd848f0b13f42 a05a49a31e91dff6a52ac8b9c2cfdd646a43f0d488253f9e3cfbce52f26667166bbb9b608fc358763a65cbf066cd6d05 a59c3c1227fdd7c2e81f5e11ef5c406da44662987bac33caed72314081e2eed66055d38137e01b2268e58ec85dd986c0 b7020ec3bd73a99861f0f1d88cf5a19abab1cbe14b7de77c9868398c84bb8e18dbbe9831838a96b6d6ca06e82451c67b 98d1ff2525e9718ee59a21d8900621636fcd873d9a564b8dceb4be80a194a0148daf1232742730b3341514b2e5a5436c 886d97b635975fc638c1b6afc493e5998ca139edba131b75b65cfe5a8e814f11bb678e0eeee5e6e5cd913ad3f2fefdfc 8fb9fd928d38d5d813b671c924edd56601dd7163b686c13f158645c2f869d9250f3859aa5463a39258c90fef0f41190a aac35e1cd655c94dec3580bb3800bd9c2946c4a9856f7d725af15fbea6a2d8ca51c8ad2772abed60ee0e3fb9cb24046b b8d71fa0fa05ac9e443c9b4929df9e7f09a919be679692682e614d24227e04894bfc14a5c73a62fb927fedff4a0e4aa7 a45a19f11fbbb531a704badbb813ed8088ab827c884ee4e4ebf363fa1132ff7cfa9d28be9c85b143e4f7cdbc94e7cf1a 82b54703a4f295f5471b255ab59dce00f0fe90c9fb6e06b9ee48b15c91d43f4e2ef4a96c3118aeb03b08767be58181bb 8283264c8e6d2a36558f0d145c18576b6600ff45ff99cc93eca54b6c6422993cf392668633e5df396b9331e873d457e5 8c549c03131ead601bc30eb6b9537b5d3beb7472f5bb1bcbbfd1e9f3704477f7840ab3ab7f7dc13bbbbcdff886a462d4 afbb0c520ac1b5486513587700ad53e314cb74bfbc12e0b5fbdcfdaac36d342e8b59856196a0d84a25cff6e6e1d17e76 89e4c22ffb51f2829061b3c7c1983c5c750cad158e3a825d46f7cf875677da5d63f653d8a297022b5db5845c9271b32b afb27a86c4c2373088c96b9adf4433f2ebfc78ac5c526e9f0510670b6e4e5e0057c0a4f75b185e1a30331b9e805c1c15 a18e16b57445f88730fc5d3567bf5a176861dc14c7a08ed2996fe80eed27a0e7628501bcb78a1727c5e9ac55f29c12c4 93d61bf88b192d6825cf4e1120af1c17aa0f994d158b405e25437eaeefae049f7b721a206e7cc8a04fdc29d3c42580a1 a99f2995a2e3ed2fd1228d64166112038de2f516410aa439f4c507044e2017ea388604e2d0f7121256fadf7fbe7023d1 914fd91cffc23c32f1c6d0e98bf660925090d873367d543034654389916f65f552e445b0300b71b61b721a72e9a5983c b42a578a7787b71f924e7def425d849c1c777156b1d4170a8ee7709a4a914e816935131afd9a0412c4cb952957b20828 82fb30590e84b9e45db1ec475a39971cf554dc01bcc7050bc89265740725c02e2be5a972168c5170c86ae83e5b0ad2c0 b14f8d8e1e93a84976289e0cf0dfa6f3a1809e98da16ee5c4932d0e1ed6bf8a07697fdd4dd86a3df84fb0003353cdcc0 85d7a2f4bda31aa2cb208b771fe03291a4ebdaf6f1dc944c27775af5caec412584c1f45bc741fca2a6a85acb3f26ad7d af02e56ce886ff2253bc0a68faad76f25ead84b2144e5364f3fb9b648f03a50ee9dc0b2c33ebacf7c61e9e43201ef9ef 87e025558c8a0b0abd06dfc350016847ea5ced7af2d135a5c9eec9324a4858c4b21510fb0992ec52a73447f24945058e 80fff0bafcd058118f5e7a4d4f1ae0912efeb281d2cbe4d34ba8945cc3dbe5d8baf47fb077343b90b8d895c90b297aca b6edcf3a40e7b1c3c0148f47a263cd819e585a51ef31c2e35a29ce6f04c53e413f743034c0d998d9c00a08ba00166f31 abb87ed86098c0c70a76e557262a494ff51a30fb193f1c1a32f8e35eafa34a43fcc07aa93a3b7a077d9e35afa07b1a3d a280214cd3bb0fb7ecd2d8bcf518cbd9078417f2b91d2533ec2717563f090fb84f2a5fcfdbbeb2a2a1f8a71cc5aa5941 a63083ca7238ea2b57d15a475963cf1d4f550d8cd76db290014a0461b90351f1f26a67d674c837b0b773b330c7c3d534 a8fa39064cb585ece5263e2f42f430206476bf261bd50f18d2b694889bd79d04d56410664cecad62690e5c5a20b3f6ff 85ba52ce9d700a5dcf6c5b00559acbe599d671ce5512467ff4b6179d7fad550567ce2a9c126a50964e3096458ea87920 b913501e1008f076e5eac6d883105174f88b248e1c9801e568fefaffa1558e4909364fc6d9512aa4d125cbd7cc895f05 8eb33b5266c8f2ed4725a6ad147a322e44c9264cf261c933cbbe230a43d47fca0f29ec39756b20561dabafadd5796494 850ebc8b661a04318c9db5a0515066e6454fa73865aa4908767a837857ecd717387f614acb614a88e075d4edc53a2f5a a08d6b92d866270f29f4ce23a3f5d99b36b1e241a01271ede02817c8ec3f552a5c562db400766c07b104a331835c0c64 8131804c89bb3e74e9718bfc4afa547c1005ff676bd4db9604335032b203390cfa54478d45c6c78d1fe31a436ed4be9f 9106d94f23cc1eacec8316f16d6f0a1cc160967c886f51981fdb9f3f12ee1182407d2bb24e5b873de58cb1a3ee915a6b a13806bfc3eae7a7000c9d9f1bd25e10218d4e67f59ae798b145b098bca3edad2b1040e3fc1e6310e612fb8818f459ac 8c69fbca502046cb5f6db99900a47b34117aef3f4b241690cdb3b84ca2a2fc7833e149361995dc41fa78892525bce746 852c473150c91912d58ecb05769222fa18312800c3f56605ad29eec9e2d8667b0b81c379048d3d29100ed2773bb1f3c5 b1767f6074426a00e01095dbb1795beb4e4050c6411792cbad6537bc444c3165d1058bafd1487451f9c5ddd209e0ae7e 80c600a5fe99354ce59ff0f84c760923dc8ff66a30bf47dc0a086181785ceb01f9b951c4e66df800ea6d705e8bc47055 b5cf19002fbc88a0764865b82afcb4d64a50196ea361e5c71dff7de084f4dcbbc34ec94a45cc9e0247bd51da565981aa 93e67a254ea8ce25e112d93cc927fadaa814152a2c4ec7d9a56eaa1ed47aec99b7e9916b02e64452cc724a6641729bbb ace70b32491bda18eee4a4d041c3bc9effae9340fe7e6c2f5ad975ee0874c17f1a7da7c96bd85fccff9312c518fac6e9 ab4cfa02065017dd7f1aadc66f2c92f78f0f11b8597c03a5d69d82cb2eaf95a4476a836ac102908f137662472c8d914b a40b8cd8deb8ae503d20364d64cab7c2801b7728a9646ed19c65edea6a842756a2f636283494299584ad57f4bb12cd0b 8594e11d5fc2396bcd9dbf5509ce4816dbb2b7305168021c426171fb444d111da5a152d6835ad8034542277011c26c0e 8024de98c26b4c994a66628dc304bb737f4b6859c86ded552c5abb81fd4c6c2e19d5a30beed398a694b9b2fdea1dd06a 8843f5872f33f54df8d0e06166c1857d733995f67bc54abb8dfa94ad92407cf0179bc91b0a50bbb56cdc2b350d950329 b8bab44c7dd53ef9edf497dcb228e2a41282c90f00ba052fc52d57e87b5c8ab132d227af1fcdff9a12713d1f980bcaae 982b4d7b29aff22d527fd82d2a52601d95549bfb000429bb20789ed45e5abf1f4b7416c7b7c4b79431eb3574b29be658 8eb1f571b6a1878e11e8c1c757e0bc084bab5e82e897ca9be9b7f4b47b91679a8190bf0fc8f799d9b487da5442415857 a6e74b588e5af935c8b243e888582ef7718f8714569dd4992920740227518305eb35fab674d21a5551cca44b3e511ef2 a30fc2f3a4cb4f50566e82307de73cd7bd8fe2c1184e9293c136a9b9e926a018d57c6e4f308c95b9eb8299e94d90a2a1 a50c5869ca5d2b40722c056a32f918d47e0b65ca9d7863ca7d2fb4a7b64fe523fe9365cf0573733ceaadebf20b48fff8 83bbdd32c04d17581418cf360749c7a169b55d54f2427390defd9f751f100897b2d800ce6636c5bbc046c47508d60c8c a82904bdf614de5d8deaff688c8a5e7ac5b3431687acbcda8fa53960b7c417a39c8b2e462d7af91ce6d79260f412db8e a4362e31ff4b05d278b033cf5eebea20de01714ae16d4115d04c1da4754269873afc8171a6f56c5104bfd7b0db93c3e7 b5b8daa63a3735581e74a021b684a1038cea77168fdb7fdf83c670c2cfabcfc3ab2fc7359069b5f9048188351aef26b5 b48d723894b7782d96ac8433c48faca1bdfa5238019c451a7f47d958097cce3ae599b876cf274269236b9d6ff8b6d7ca 98ffff6a61a3a6205c7820a91ca2e7176fab5dba02bc194c4d14942ac421cb254183c705506ab279e4f8db066f941c6c ae7db24731da2eaa6efc4f7fcba2ecc26940ddd68038dce43acf2cee15b72dc4ef42a7bfdd32946d1ed78786dd7696b3 a656db14f1de9a7eb84f6301b4acb2fbf78bfe867f48a270e416c974ab92821eb4df1cb881b2d600cfed0034ac784641 aa315f8ecba85a5535e9a49e558b15f39520fce5d4bf43131bfbf2e2c9dfccc829074f9083e8d49f405fb221d0bc4c3c 90bffba5d9ff40a62f6c8e9fc402d5b95f6077ed58d030c93e321b8081b77d6b8dac3f63a92a7ddc01585cf2c127d66c abdd733a36e0e0f05a570d0504e73801bf9b5a25ff2c78786f8b805704997acb2e6069af342538c581144d53149fa6d3 b4a723bb19e8c18a01bd449b1bb3440ddb2017f10bb153da27deb7a6a60e9bb37619d6d5435fbb1ba617687838e01dd0 870016b4678bab3375516db0187a2108b2e840bae4d264b9f4f27dbbc7cc9cac1d7dc582d7a04d6fd1ed588238e5e513 80d33d2e20e8fc170aa3cb4f69fffb72aeafb3b5bb4ea0bc79ab55da14142ca19b2d8b617a6b24d537366e3b49cb67c3 a7ee76aec273aaae03b3b87015789289551969fb175c11557da3ab77e39ab49d24634726f92affae9f4d24003050d974 8415ea4ab69d779ebd42d0fe0c6aef531d6a465a5739e429b1fcf433ec45aa8296c527e965a20f0ec9f340c9273ea3cf 8c7662520794e8b4405d0b33b5cac839784bc86a5868766c06cbc1fa306dbe334978177417b31baf90ce7b0052a29c56 902b2abecc053a3dbdea9897ee21e74821f3a1b98b2d560a514a35799f4680322550fd3a728d4f6d64e1de98033c32b8 a05e84ed9ecab8d508d670c39f2db61ad6e08d2795ec32a3c9d0d3737ef3801618f4fc2a95f90ec2f068606131e076c5 8b9208ff4d5af0c2e3f53c9375da666773ac57197dfabb0d25b1c8d0588ba7f3c15ee9661bb001297f322ea2fbf6928b a3c827741b34a03254d4451b5ab74a96f2b9f7fb069e2f5adaf54fd97cc7a4d516d378db5ca07da87d8566d6eef13726 8509d8a3f4a0ed378e0a1e28ea02f6bf1d7f6c819c6c2f5297c7df54c895b848f841653e32ba2a2c22c2ff739571acb8 a0ce988b7d3c40b4e496aa83a09e4b5472a2d98679622f32bea23e6d607bc7de1a5374fb162bce0549a67dad948519be aa8a3dd12bd60e3d2e05f9c683cdcb8eab17fc59134815f8d197681b1bcf65108cba63ac5c58ee632b1e5ed6bba5d474 8b955f1d894b3aefd883fb4b65f14cd37fc2b9db77db79273f1700bef9973bf3fd123897ea2b7989f50003733f8f7f21 ac79c00ddac47f5daf8d9418d798d8af89fc6f1682e7e451f71ea3a405b0d36af35388dd2a332af790bc83ca7b819328 a0d44dd2a4438b809522b130d0938c3fe7c5c46379365dbd1810a170a9aa5818e1c783470dd5d0b6d4ac7edbb7330910 a30b69e39ad43dd540a43c521f05b51b5f1b9c4eed54b8162374ae11eac25da4f5756e7b70ce9f3c92c2eeceee7431ed ac43220b762c299c7951222ea19761ab938bf38e4972deef58ed84f4f9c68c230647cf7506d7cbfc08562fcca55f0485 b28233b46a8fb424cfa386a845a3b5399d8489ceb83c8f3e05c22c934798d639c93718b7b68ab3ce24c5358339e41cbb ac30d50ee8ce59a10d4b37a3a35e62cdb2273e5e52232e202ca7d7b8d09d28958ee667fae41a7bb6cdc6fe8f6e6c9c85 b199842d9141ad169f35cc7ff782b274cbaa645fdb727761e0a89edbf0d781a15f8218b4bf4eead326f2903dd88a9cc1 85e018c7ddcad34bb8285a737c578bf741ccd547e68c734bdb3808380e12c5d4ef60fc896b497a87d443ff9abd063b38 8c856e6ba4a815bdb891e1276f93545b7072f6cb1a9aa6aa5cf240976f29f4dee01878638500a6bf1daf677b96b54343 b8a47555fa8710534150e1a3f13eab33666017be6b41005397afa647ea49708565f2b86b77ad4964d140d9ced6b4d585 8cd1f1db1b2f4c85a3f46211599caf512d5439e2d8e184663d7d50166fd3008f0e9253272f898d81007988435f715881 b1f34b14612c973a3eceb716dc102b82ab18afef9de7630172c2780776679a7706a4874e1df3eaadf541fb009731807f b25464af9cff883b55be2ff8daf610052c02df9a5e147a2cf4df6ce63edcdee6dc535c533590084cc177da85c5dc0baa 91c3c4b658b42d8d3448ae1415d4541d02379a40dc51e36a59bd6e7b9ba3ea51533f480c7c6e8405250ee9b96a466c29 86dc027b95deb74c36a58a1333a03e63cb5ae22d3b29d114cfd2271badb05268c9d0c819a977f5e0c6014b00c1512e3a ae0e6ff58eb5fa35da5107ebeacf222ab8f52a22bb1e13504247c1dfa65320f40d97b0e6b201cb6613476687cb2f0681 8f13415d960b9d7a1d93ef28afc2223e926639b63bdefce0f85e945dfc81670a55df288893a0d8b3abe13c5708f82f91 956f67ca49ad27c1e3a68c1faad5e7baf0160c459094bf6b7baf36b112de935fdfd79fa4a9ea87ea8de0ac07272969f4 835e45e4a67df9fb51b645d37840b3a15c171d571a10b03a406dd69d3c2f22df3aa9c5cbe1e73f8d767ce01c4914ea9a 919b938e56d4b32e2667469d0bdccb95d9dda3341aa907683ee70a14bbbe623035014511c261f4f59b318b610ac90aa3 96b48182121ccd9d689bf1dfdc228175564cd68dc904a99c808a7f0053a6f636c9d953e12198bdf2ea49ea92772f2e18 ac5e5a941d567fa38fdbcfa8cf7f85bb304e3401c52d88752bcd516d1fa9bac4572534ea2205e38423c1df065990790f ac0bd594fb85a8d4fc26d6df0fa81f11919401f1ecf9168b891ec7f061a2d9368af99f7fd8d9b43b2ce361e7b8482159 83d92c69ca540d298fe80d8162a1c7af3fa9b49dfb69e85c1d136a3ec39fe419c9fa78e0bb6d96878771fbd37fe92e40 b35443ae8aa66c763c2db9273f908552fe458e96696b90e41dd509c17a5c04ee178e3490d9c6ba2dc0b8f793c433c134 923b2d25aa45b2e580ffd94cbb37dc8110f340f0f011217ee1bd81afb0714c0b1d5fb4db86006cdd2457563276f59c59 96c9125d38fca1a61ac21257b696f8ac3dae78def50285e44d90ea293d591d1c58f703540a7e4e99e070afe4646bbe15 b57946b2332077fbcdcb406b811779aefd54473b5559a163cd65cb8310679b7e2028aa55c12a1401fdcfcac0e6fae29a 845daedc5cf972883835d7e13c937b63753c2200324a3b8082a6c4abb4be06c5f7c629d4abe4bfaf1d80a1f073eb6ce6 91a55dfd0efefcd03dc6dacc64ec93b8d296cb83c0ee72400a36f27246e7f2a60e73b7b70ba65819e9cfb73edb7bd297 8874606b93266455fe8fdd25df9f8d2994e927460af06f2e97dd4d2d90db1e6b06d441b72c2e76504d753badca87fb37 8ee99e6d231274ff9252c0f4e84549da173041299ad1230929c3e3d32399731c4f20a502b4a307642cac9306ccd49d3c 8836497714a525118e20849d6933bb8535fb6f72b96337d49e3133d936999c90a398a740f42e772353b5f1c63581df6d a6916945e10628f7497a6cdc5e2de113d25f7ade3e41e74d3de48ccd4fce9f2fa9ab69645275002e6f49399b798c40af 9597706983107eb23883e0812e1a2c58af7f3499d50c6e29b455946cb9812fde1aa323d9ed30d1c0ffd455abe32303cd a24ee89f7f515cc33bdbdb822e7d5c1877d337f3b2162303cfc2dae028011c3a267c5cb4194afa63a4856a6e1c213448 8cd25315e4318801c2776824ae6e7d543cb85ed3bc2498ba5752df2e8142b37653cf9e60104d674be3aeb0a66912e97a b5085ecbe793180b40dbeb879f4c976eaaccaca3a5246807dced5890e0ed24d35f3f86955e2460e14fb44ff5081c07ba 960188cc0b4f908633a6840963a6fa2205fc42c511c6c309685234911c5304ef4c304e3ae9c9c69daa2fb6a73560c256 a32d0a70bf15d569b4cda5aebe3e41e03c28bf99cdd34ffa6c5d58a097f322772acca904b3a47addb6c7492a7126ebac 977f72d06ad72d4aa4765e0f1f9f4a3231d9f030501f320fe7714cc5d329d08112789fa918c60dd7fdb5837d56bb7fc6 99fa038bb0470d45852bb871620d8d88520adb701712fcb1f278fed2882722b9e729e6cdce44c82caafad95e37d0e6f7 b855e8f4fc7634ada07e83b6c719a1e37acb06394bc8c7dcab7747a8c54e5df3943915f021364bd019fdea103864e55f 88bc2cd7458532e98c596ef59ea2cf640d7cc31b4c33cef9ed065c078d1d4eb49677a67de8e6229cc17ea48bace8ee5a aaa78a3feaa836d944d987d813f9b9741afb076e6aca1ffa42682ab06d46d66e0c07b8f40b9dbd63e75e81efa1ef7b08 b7b080420cc4d808723b98b2a5b7b59c81e624ab568ecdfdeb8bf3aa151a581b6f56e983ef1b6f909661e25db40b0c69 abee85c462ac9a2c58e54f06c91b3e5cd8c5f9ab5b5deb602b53763c54826ed6deb0d6db315a8d7ad88733407e8d35e2 994d075c1527407547590df53e9d72dd31f037c763848d1662eebd4cefec93a24328c986802efa80e038cb760a5300f5 ab8777640116dfb6678e8c7d5b36d01265dfb16321abbfc277da71556a34bb3be04bc4ae90124ed9c55386d2bfb3bda0 967e3a828bc59409144463bcf883a3a276b5f24bf3cbfdd7a42343348cba91e00b46ac285835a9b91eef171202974204 875a9f0c4ffe5bb1d8da5e3c8e41d0397aa6248422a628bd60bfae536a651417d4e8a7d2fb98e13f2dad3680f7bd86d3 acaa330c3e8f95d46b1880126572b238dbb6d04484d2cd4f257ab9642d8c9fc7b212188b9c7ac9e0fd135c520d46b1bf aceb762edbb0f0c43dfcdb01ea7a1ac5918ca3882b1e7ebc4373521742f1ed5250d8966b498c00b2b0f4d13212e6dd0b 81d072b4ad258b3646f52f399bced97c613b22e7ad76373453d80b1650c0ca87edb291a041f8253b649b6e5429bb4cff 980a47d27416ac39c7c3a0ebe50c492f8c776ea1de44d5159ac7d889b6d554357f0a77f0e5d9d0ff41aae4369eba1fc2 8b4dfd5ef5573db1476d5e43aacfb5941e45d6297794508f29c454fe50ea622e6f068b28b3debe8635cf6036007de2e3 a60831559d6305839515b68f8c3bc7abbd8212cc4083502e19dd682d56ca37c9780fc3ce4ec2eae81ab23b221452dc57 951f6b2c1848ced9e8a2339c65918e00d3d22d3e59a0a660b1eca667d18f8430d737884e9805865ef3ed0fe1638a22d9 b02e38fe790b492aa5e89257c4986c9033a8b67010fa2add9787de857d53759170fdd67715ca658220b4e14b0ca48124 a51007e4346060746e6b0e4797fc08ef17f04a34fe24f307f6b6817edbb8ce2b176f40771d4ae8a60d6152cbebe62653 a510005b05c0b305075b27b243c9d64bcdce85146b6ed0e75a3178b5ff9608213f08c8c9246f2ca6035a0c3e31619860 aaff4ef27a7a23be3419d22197e13676d6e3810ceb06a9e920d38125745dc68a930f1741c9c2d9d5c875968e30f34ab5 864522a9af9857de9814e61383bebad1ba9a881696925a0ea6bfc6eff520d42c506bbe5685a9946ed710e889765be4a0 b63258c080d13f3b7d5b9f3ca9929f8982a6960bdb1b0f8676f4dca823971601672f15e653917bf5d3746bb220504913 b51ce0cb10869121ae310c7159ee1f3e3a9f8ad498827f72c3d56864808c1f21fa2881788f19ece884d3f705cd7bd0c5 95d9cecfc018c6ed510e441cf84c712d9909c778c16734706c93222257f64dcd2a9f1bd0b400ca271e22c9c487014274 8beff4d7d0140b86380ff4842a9bda94c2d2be638e20ac68a4912cb47dbe01a261857536375208040c0554929ced1ddc 891ff49258749e2b57c1e9b8e04b12c77d79c3308b1fb615a081f2aacdfb4b39e32d53e069ed136fdbd43c53b87418fa 9625cad224e163d387738825982d1e40eeff35fe816d10d7541d15fdc4d3eee48009090f3faef4024b249205b0b28f72 8f3947433d9bd01aa335895484b540a9025a19481a1c40b4f72dd676bfcf332713714fd4010bde936eaf9470fd239ed0 a00ec2d67789a7054b53f0e858a8a232706ccc29a9f3e389df7455f1a51a2e75801fd78469a13dbc25d28399ae4c6182 a3f65884506d4a62b8775a0ea0e3d78f5f46bc07910a93cd604022154eabdf1d73591e304d61edc869e91462951975e1 a14eef4fd5dfac311713f0faa9a60415e3d30b95a4590cbf95f2033dffb4d16c02e7ceff3dcd42148a4e3bc49cce2dd4 8afa11c0eef3c540e1e3460bc759bb2b6ea90743623f88e62950c94e370fe4fd01c22b6729beba4dcd4d581198d9358f afb05548a69f0845ffcc5f5dc63e3cdb93cd270f5655173b9a950394b0583663f2b7164ba6df8d60c2e775c1d9f120af 97f179e01a947a906e1cbeafa083960bc9f1bade45742a3afee488dfb6011c1c6e2db09a355d77f5228a42ccaa7bdf8e 8447fca4d35f74b3efcbd96774f41874ca376bf85b79b6e66c92fa3f14bdd6e743a051f12a7fbfd87f319d1c6a5ce217 a57ca39c23617cd2cf32ff93b02161bd7baf52c4effb4679d9d5166406e103bc8f3c6b5209e17c37dbb02deb8bc72ddd 9667c7300ff80f0140be002b0e36caab07aaee7cce72679197c64d355e20d96196acaf54e06e1382167d081fe6f739c1 828126bb0559ce748809b622677267ca896fa2ee76360fd2c02990e6477e06a667241379ca7e65d61a5b64b96d7867de 8b8835dea6ba8cf61c91f01a4b3d2f8150b687a4ee09b45f2e5fc8f80f208ae5d142d8e3a18153f0722b90214e60c5a7 a98e8ff02049b4da386e3ee93db23bbb13dfeb72f1cfde72587c7e6d962780b7671c63e8ac3fbaeb1a6605e8d79e2f29 87a4892a0026d7e39ef3af632172b88337cb03669dea564bcdb70653b52d744730ebb5d642e20cb627acc9dbb547a26b 877352a22fc8052878a57effc159dac4d75fe08c84d3d5324c0bab6d564cdf868f33ceee515eee747e5856b62cfa0cc7 8b801ba8e2ff019ee62f64b8cb8a5f601fc35423eb0f9494b401050103e1307dc584e4e4b21249cd2c686e32475e96c3 a9e7338d6d4d9bfec91b2af28a8ed13b09415f57a3a00e5e777c93d768fdb3f8e4456ae48a2c6626b264226e911a0e28 99c05fedf40ac4726ed585d7c1544c6e79619a0d3fb6bda75a08c7f3c0008e8d5e19ed4da48de3216135f34a15eba17c a61cce8a1a8b13a4a650fdbec0eeea8297c352a8238fb7cac95a0df18ed16ee02a3daa2de108fa122aca733bd8ad7855 b97f37da9005b440b4cb05870dd881bf8491fe735844f2d5c8281818583b38e02286e653d9f2e7fa5e74c3c3eb616540 a72164a8554da8e103f692ac5ebb4aece55d5194302b9f74b6f2a05335b6e39beede0bf7bf8c5bfd4d324a784c5fb08c b87e8221c5341cd9cc8bb99c10fe730bc105550f25ed4b96c0d45e6142193a1b2e72f1b3857373a659b8c09be17b3d91 a41fb1f327ef91dcb7ac0787918376584890dd9a9675c297c45796e32d6e5985b12f9b80be47fc3a8596c245f419d395 90dafa3592bdbb3465c92e2a54c2531822ba0459d45d3e7a7092fa6b823f55af28357cb51896d4ec2d66029c82f08e26 a0a9adc872ebc396557f484f1dd21954d4f4a21c4aa5eec543f5fa386fe590839735c01f236574f7ff95407cd12de103 b8c5c940d58be7538acf8672852b5da3af34f82405ef2ce8e4c923f1362f97fc50921568d0fd2fe846edfb0823e62979 85aaf06a8b2d0dac89dafd00c28533f35dbd074978c2aaa5bef75db44a7b12aeb222e724f395513b9a535809a275e30b 81f3cbe82fbc7028c26a6c1808c604c63ba023a30c9f78a4c581340008dbda5ec07497ee849a2183fcd9124f7936af32 a11ac738de75fd60f15a34209d3825d5e23385796a4c7fc5931822f3f380af977dd0f7b59fbd58eed7777a071e21b680 85a279c493de03db6fa6c3e3c1b1b29adc9a8c4effc12400ae1128da8421954fa8b75ad19e5388fe4543b76fb0812813 83a217b395d59ab20db6c4adb1e9713fc9267f5f31a6c936042fe051ce8b541f579442f3dcf0fa16b9e6de9fd3518191 83a0b86e7d4ed8f9ccdc6dfc8ff1484509a6378fa6f09ed908e6ab9d1073f03011dc497e14304e4e3d181b57de06a5ab a63ad69c9d25704ce1cc8e74f67818e5ed985f8f851afa8412248b2df5f833f83b95b27180e9e7273833ed0d07113d3b 99b1bc2021e63b561fe44ddd0af81fcc8627a91bfeecbbc989b642bc859abc0c8d636399701aad7bbaf6a385d5f27d61 b53434adb66f4a807a6ad917c6e856321753e559b1add70824e5c1e88191bf6993fccb9b8b911fc0f473fb11743acacd 97ed3b9e6fb99bf5f945d4a41f198161294866aa23f2327818cdd55cb5dc4c1a8eff29dd8b8d04902d6cd43a71835c82 b1e808260e368a18d9d10bdea5d60223ba1713b948c782285a27a99ae50cc5fc2c53d407de07155ecc16fb8a36d744a0 a3eb4665f18f71833fec43802730e56b3ee5a357ea30a888ad482725b169d6f1f6ade6e208ee081b2e2633079b82ba7d ab8beb2c8353fc9f571c18fdd02bdb977fc883313469e1277b0372fbbb33b80dcff354ca41de436d98d2ed710faa467e aa9071cfa971e4a335a91ad634c98f2be51544cb21f040f2471d01bb97e1df2277ae1646e1ea8f55b7ba9f5c8c599b39 80b7dbfdcaf40f0678012acc634eba44ea51181475180d9deb2050dc4f2de395289edd0223018c81057ec79b04b04c49 89623d7f6cb17aa877af14de842c2d4ab7fd576d61ddd7518b5878620a01ded40b6010de0da3cdf31d837eecf30e9847 a773bb024ae74dd24761f266d4fb27d6fd366a8634febe8235376b1ae9065c2fe12c769f1d0407867dfbe9f5272c352f 8455a561c3aaa6ba64c881a5e13921c592b3a02e968f4fb24a2243c36202795d0366d9cc1a24e916f84d6e158b7aeac7 81d8bfc4b283cf702a40b87a2b96b275bdbf0def17e67d04842598610b67ea08c804d400c3e69fa09ea001eaf345b276 b8f8f82cb11fea1c99467013d7e167ff03deb0c65a677fab76ded58826d1ba29aa7cf9fcd7763615735ea3ad38e28719 89a6a04baf9cccc1db55179e1650b1a195dd91fb0aebc197a25143f0f393524d2589975e3fbfc2547126f0bced7fd6f2 b81b2162df045390f04df07cbd0962e6b6ca94275a63edded58001a2f28b2ae2af2c7a6cba4ecd753869684e77e7e799 a3757f722776e50de45c62d9c4a2ee0f5655a512344c4cbec542d8045332806568dd626a719ef21a4eb06792ca70f204 8c5590df96ec22179a4e8786de41beb44f987a1dcc508eb341eecbc0b39236fdfad47f108f852e87179ccf4e10091e59 87502f026ed4e10167419130b88c3737635c5b9074c364e1dd247cef5ef0fc064b4ae99b187e33301e438bbd2fe7d032 af925a2165e980ced620ff12289129fe17670a90ae0f4db9d4b39bd887ccb1f5d2514ac9ecf910f6390a8fc66bd5be17 857fca899828cf5c65d26e3e8a6e658542782fc72762b3b9c73514919f83259e0f849a9d4838b40dc905fe43024d0d23 87ffebdbfb69a9e1007ebac4ffcb4090ff13705967b73937063719aa97908986effcb7262fdadc1ae0f95c3690e3245d a9ff6c347ac6f4c6ab993b748802e96982eaf489dc69032269568412fc9a79e7c2850dfc991b28211b3522ee4454344b a65b3159df4ec48bebb67cb3663cd744027ad98d970d620e05bf6c48f230fa45bf17527fe726fdf705419bb7a1bb913e 84b97b1e6408b6791831997b03cd91f027e7660fd492a93d95daafe61f02427371c0e237c75706412f442991dfdff989 ab761c26527439b209af0ae6afccd9340bbed5fbe098734c3145b76c5d2cd7115d9227b2eb523882b7317fbb09180498 a0479a8da06d7a69c0b0fee60df4e691c19c551f5e7da286dab430bfbcabf31726508e20d26ea48c53365a7f00a3ad34 a732dfc9baa0f4f40b5756d2e8d8937742999623477458e0bc81431a7b633eefc6f53b3b7939fe0a020018549c954054 901502436a1169ba51dc479a5abe7c8d84e0943b16bc3c6a627b49b92cd46263c0005bc324c67509edd693f28e612af1 b627aee83474e7f84d1bab9b7f6b605e33b26297ac6bbf52d110d38ba10749032bd551641e73a383a303882367af429b 95108866745760baef4a46ef56f82da6de7e81c58b10126ebd2ba2cd13d339f91303bf2fb4dd104a6956aa3b13739503 899ed2ade37236cec90056f3569bc50f984f2247792defafcceb49ad0ca5f6f8a2f06573705300e07f0de0c759289ff5 a9f5eee196d608efe4bcef9bf71c646d27feb615e21252cf839a44a49fd89da8d26a758419e0085a05b1d59600e2dc42 b36c6f68fed6e6c85f1f4a162485f24817f2843ec5cbee45a1ebfa367d44892e464949c6669f7972dc7167af08d55d25 aaaede243a9a1b6162afbc8f571a52671a5a4519b4062e3f26777664e245ba873ed13b0492c5dbf0258c788c397a0e9e 972b4fb39c31cbe127bf9a32a5cc10d621ebdd9411df5e5da3d457f03b2ab2cd1f6372d8284a4a9400f0b06ecdbfd38e 8f6ca1e110e959a4b1d9a5ce5f212893cec21db40d64d5ac4d524f352d72198f923416a850bf845bc5a22a79c0ea2619 a0f3c93b22134f66f04b2553a53b738644d1665ceb196b8494b315a4c28236fb492017e4a0de4224827c78e42f9908b7 807fb5ee74f6c8735b0b5ca07e28506214fe4047dbeb00045d7c24f7849e98706aea79771241224939cb749cf1366c7d 915eb1ff034224c0b645442cdb7d669303fdc00ca464f91aaf0b6fde0b220a3a74ff0cb043c26c9f3a5667b3fdaa9420 8fda6cef56ed33fefffa9e6ac8e6f76b1af379f89761945c63dd448801f7bb8ca970504a7105fac2f74f652ccff32327 87380cffdcffb1d0820fa36b63cc081e72187f86d487315177d4d04da4533eb19a0e2ff6115ceab528887819c44a5164 8cd89e03411a18e7f16f968b89fb500c36d47d229f6487b99e62403a980058db5925ce249206743333538adfad168330 974451b1df33522ce7056de9f03e10c70bf302c44b0741a59df3d6877d53d61a7394dcee1dd46e013d7cb9d73419c092 98c35ddf645940260c490f384a49496a7352bb8e3f686feed815b1d38f59ded17b1ad6e84a209e773ed08f7b8ff1e4c2 963f386cf944bb9b2ddebb97171b64253ea0a2894ac40049bdd86cda392292315f3a3d490ca5d9628c890cfb669f0acb 8d507712152babd6d142ee682638da8495a6f3838136088df9424ef50d5ec28d815a198c9a4963610b22e49b4cdf95e9 83d4bc6b0be87c8a4f1e9c53f257719de0c73d85b490a41f7420e777311640937320557ff2f1d9bafd1daaa54f932356 82f5381c965b7a0718441131c4d13999f4cdce637698989a17ed97c8ea2e5bdb5d07719c5f7be8688edb081b23ede0f4 a6ebecab0b72a49dfd01d69fa37a7f74d34fb1d4fef0aa10e3d6fceb9eccd671225c230af89f6eb514250e41a5f91f52 846d185bdad6e11e604df7f753b7a08a28b643674221f0e750ebdb6b86ec584a29c869e131bca868972a507e61403f6a 85a98332292acb744bd1c0fd6fdcf1f889a78a2c9624d79413ffa194cc8dfa7821a4b60cde8081d4b5f71f51168dd67f 8f7d97c3b4597880d73200d074eb813d95432306e82dafc70b580b8e08cb8098b70f2d07b4b3ac6a4d77e92d57035031 8185439c8751e595825d7053518cbe121f191846a38d4dbcb558c3f9d7a3104f3153401adaaaf27843bbe2edb504bfe3 b3c00d8ece1518fca6b1215a139b0a0e26d9cba1b3a424f7ee59f30ce800a5db967279ed60958dd1f3ee69cf4dd1b204 a2e6cb6978e883f9719c3c0d44cfe8de0cc6f644b98f98858433bea8bbe7b612c8aca5952fccce4f195f9d54f9722dc2 99663087e3d5000abbec0fbda4e7342ec38846cc6a1505191fb3f1a337cb369455b7f8531a6eb8b0f7b2c4baf83cbe2b ab0836c6377a4dbc7ca6a4d6cf021d4cd60013877314dd05f351706b128d4af6337711ed3443cb6ca976f40d74070a9a 87abfd5126152fd3bac3c56230579b489436755ea89e0566aa349490b36a5d7b85028e9fb0710907042bcde6a6f5d7e3 974ba1033f75f60e0cf7c718a57ae1da3721cf9d0fb925714c46f027632bdd84cd9e6de4cf4d00bc55465b1c5ebb7384 a607b49d73689ac64f25cec71221d30d53e781e1100d19a2114a21da6507a60166166369d860bd314acb226596525670 a7c2b0b915d7beba94954f2aa7dd08ec075813661e2a3ecca5d28a0733e59583247fed9528eb28aba55b972cdbaf06eb b8b3123e44128cc8efbe3270f2f94e50ca214a4294c71c3b851f8cbb70cb67fe9536cf07d04bf7fe380e5e3a29dd3c15 a59a07e343b62ad6445a0859a32b58c21a593f9ddbfe52049650f59628c93715aa1f4e1f45b109321756d0eeec8a5429 94f51f8a4ed18a6030d0aaa8899056744bd0e9dc9ac68f62b00355cddab11da5da16798db75f0bfbce0e5bdfe750c0b6 97460a97ca1e1fa5ce243b81425edc0ec19b7448e93f0b55bc9785eedeeafe194a3c8b33a61a5c72990edf375f122777 8fa859a089bc17d698a7ee381f37ce9beadf4e5b44fce5f6f29762bc04f96faff5d58c48c73631290325f05e9a1ecf49 abdf38f3b20fc95eff31de5aa9ef1031abfa48f1305ee57e4d507594570401503476d3bcc493838fc24d6967a3082c7f b8914bfb82815abb86da35c64d39ab838581bc0bf08967192697d9663877825f2b9d6fbdcf9b410463482b3731361aef a8187f9d22b193a5f578999954d6ec9aa9b32338ccadb8a3e1ce5bad5ea361d69016e1cdfac44e9d6c54e49dd88561b9 aac262cb7cba7fd62c14daa7b39677cabc1ef0947dd06dd89cac8570006a200f90d5f0353e84f5ff03179e3bebe14231 a630ef5ece9733b8c46c0a2df14a0f37647a85e69c63148e79ffdcc145707053f9f9d305c3f1cf3c7915cb46d33abd07 b102c237cb2e254588b6d53350dfda6901bd99493a3fbddb4121d45e0b475cf2663a40d7b9a75325eda83e4ba1e68cb3 86a930dd1ddcc16d1dfa00aa292cb6c2607d42c367e470aa920964b7c17ab6232a7108d1c2c11fc40fb7496547d0bbf8 a832fdc4500683e72a96cce61e62ac9ee812c37fe03527ad4cf893915ca1962cee80e72d4f82b20c8fc0b764376635a1 88ad985f448dabb04f8808efd90f273f11f5e6d0468b5489a1a6a3d77de342992a73eb842d419034968d733f101ff683 98a8538145f0d86f7fbf9a81c9140f6095c5bdd8960b1c6f3a1716428cd9cca1bf8322e6d0af24e6169abcf7df2b0ff6 9048c6eba5e062519011e177e955a200b2c00b3a0b8615bdecdebc217559d41058d3315f6d05617be531ef0f6aef0e51 833bf225ab6fc68cdcacf1ec1b50f9d05f5410e6cdcd8d56a3081dc2be8a8d07b81534d1ec93a25c2e270313dfb99e3b a84bcd24c3da5e537e64a811b93c91bfc84d7729b9ead7f79078989a6eb76717d620c1fad17466a0519208651e92f5ff b7cdd0a3fbd79aed93e1b5a44ca44a94e7af5ed911e4492f332e3a5ed146c7286bde01b52276a2fcc02780d2109874dd 8a19a09854e627cb95750d83c20c67442b66b35896a476358f993ba9ac114d32c59c1b3d0b8787ee3224cf3888b56c64 a9abd5afb8659ee52ada8fa5d57e7dd355f0a7350276f6160bec5fbf70d5f99234dd179eb221c913e22a49ec6d267846 8c13c4274c0d30d184e73eaf812200094bbbd57293780bdadbceb262e34dee5b453991e7f37c7333a654fc71c69d6445 a4320d73296ff8176ce0127ca1921c450e2a9c06eff936681ebaffb5a0b05b17fded24e548454de89aca2dcf6d7a9de4 b2b8b3e15c1f645f07783e5628aba614e60157889db41d8161d977606788842b67f83f361eae91815dc0abd84e09abd5 ad26c3aa35ddfddc15719b8bb6c264aaec7065e88ac29ba820eb61f220fef451609a7bb037f3722d022e6c86e4f1dc88 b8615bf43e13ae5d7b8dd903ce37190800cd490f441c09b22aa29d7a29ed2c0417b7a08ead417868f1de2589deaadd80 8d3425e1482cd1e76750a76239d33c06b3554c3c3c87c15cb7ab58b1cee86a4c5c4178b44e23f36928365a1b484bde02 806893a62e38c941a7dd6f249c83af16596f69877cc737d8f73f6b8cd93cbc01177a7a276b2b8c6b0e5f2ad864db5994 86618f17fa4b0d65496b661bbb5ba3bc3a87129d30a4b7d4f515b904f4206ca5253a41f49fd52095861e5e065ec54f21 9551915da1304051e55717f4c31db761dcdcf3a1366c89a4af800a9e99aca93a357bf928307f098e62b44a02cb689a46 8f79c4ec0ec1146cb2a523b52fe33def90d7b5652a0cb9c2d1c8808a32293e00aec6969f5b1538e3a94cd1efa3937f86 a0c03e329a707300081780f1e310671315b4c6a4cedcb29697aedfabb07a9d5df83f27b20e9c44cf6b16e39d9ded5b98 86a7cfa7c8e7ce2c01dd0baec2139e97e8e090ad4e7b5f51518f83d564765003c65968f85481bbb97cb18f005ccc7d9f a33811770c6dfda3f7f74e6ad0107a187fe622d61b444bbd84fd7ef6e03302e693b093df76f6ab39bb4e02afd84a575a 85480f5c10d4162a8e6702b5e04f801874d572a62a130be94b0c02b58c3c59bdcd48cd05f0a1c2839f88f06b6e3cd337 8e181011564b17f7d787fe0e7f3c87f6b62da9083c54c74fd6c357a1f464c123c1d3d8ade3cf72475000b464b14e2be3 8ee178937294b8c991337e0621ab37e9ffa4ca2bdb3284065c5e9c08aad6785d50cf156270ff9daf9a9127289710f55b 8bd1e8e2d37379d4b172f1aec96f2e41a6e1393158d7a3dbd9a95c8dd4f8e0b05336a42efc11a732e5f22b47fc5c271d 8f3da353cd487c13136a85677de8cedf306faae0edec733cf4f0046f82fa4639db4745b0095ff33a9766aba50de0cbcf 8d187c1e97638df0e4792b78e8c23967dac43d98ea268ca4aabea4e0fa06cb93183fd92d4c9df74118d7cc27bf54415e a4c992f08c2f8bac0b74b3702fb0c75c9838d2ce90b28812019553d47613c14d8ce514d15443159d700b218c5a312c49 a6fd1874034a34c3ea962a316c018d9493d2b3719bb0ec4edbc7c56b240802b2228ab49bee6f04c8a3e9f6f24a48c1c2 b2efed8e799f8a15999020900dc2c58ece5a3641c90811b86a5198e593d7318b9d53b167818ccdfbe7df2414c9c34011 995ff7de6181ddf95e3ead746089c6148da3508e4e7a2323c81785718b754d356789b902e7e78e2edc6b0cbd4ff22c78 944073d24750a9068cbd020b834afc72d2dde87efac04482b3287b40678ad07588519a4176b10f2172a2c463d063a5cd 99db4b1bb76475a6fd75289986ef40367960279524378cc917525fb6ba02a145a218c1e9caeb99332332ab486a125ac0 89fce4ecd420f8e477af4353b16faabb39e063f3f3c98fde2858b1f2d1ef6eed46f0975a7c08f233b97899bf60ccd60a 8c09a4f07a02b80654798bc63aada39fd638d3e3c4236ccd8a5ca280350c31e4a89e5f4c9aafb34116e71da18c1226b8 85325cfa7ded346cc51a2894257eab56e7488dbff504f10f99f4cd2b630d913003761a50f175ed167e8073f1b6b63fb0 b678b4fbec09a8cc794dcbca185f133578f29e354e99c05f6d07ac323be20aecb11f781d12898168e86f2e0f09aca15e a249cfcbca4d9ba0a13b5f6aac72bf9b899adf582f9746bb2ad043742b28915607467eb794fca3704278f9136f7642be 9438e036c836a990c5e17af3d78367a75b23c37f807228362b4d13e3ddcb9e431348a7b552d09d11a2e9680704a4514f 925ab70450af28c21a488bfb5d38ac994f784cf249d7fd9ad251bb7fd897a23e23d2528308c03415074d43330dc37ef4 a290563904d5a8c0058fc8330120365bdd2ba1fdbaef7a14bc65d4961bb4217acfaed11ab82669e359531f8bf589b8db a7e07a7801b871fc9b981a71e195a3b4ba6b6313bc132b04796a125157e78fe5c11a3a46cf731a255ac2d78a4ae78cd0 b26cd2501ee72718b0eebab6fb24d955a71f363f36e0f6dff0ab1d2d7836dab88474c0cef43a2cc32701fca7e82f7df3 a1dc3b6c968f3de00f11275092290afab65b2200afbcfa8ddc70e751fa19dbbc300445d6d479a81bda3880729007e496 a9bc213e28b630889476a095947d323b9ac6461dea726f2dc9084473ae8e196d66fb792a21905ad4ec52a6d757863e7d b25d178df8c2df8051e7c888e9fa677fde5922e602a95e966db9e4a3d6b23ce043d7dc48a5b375c6b7c78e966893e8c3 a1c8d88d72303692eaa7adf68ea41de4febec40cc14ae551bb4012afd786d7b6444a3196b5d9d5040655a3366d96b7cd b22bd44f9235a47118a9bbe2ba5a2ba9ec62476061be2e8e57806c1a17a02f9a51403e849e2e589520b759abd0117683 b8add766050c0d69fe81d8d9ea73e1ed05f0135d093ff01debd7247e42dbb86ad950aceb3b50b9af6cdc14ab443b238f af2cf95f30ef478f018cf81d70d47d742120b09193d8bb77f0d41a5d2e1a80bfb467793d9e2471b4e0ad0cb2c3b42271 8af5ef2107ad284e246bb56e20fef2a255954f72de791cbdfd3be09f825298d8466064f3c98a50496c7277af32b5c0bc 85dc19558572844c2849e729395a0c125096476388bd1b14fa7f54a7c38008fc93e578da3aac6a52ff1504d6ca82db05 ae8c9b43c49572e2e166d704caf5b4b621a3b47827bb2a3bcd71cdc599bba90396fd9a405261b13e831bb5d44c0827d7 a7ba7efede25f02e88f6f4cbf70643e76784a03d97e0fbd5d9437c2485283ad7ca3abb638a5f826cd9f6193e5dec0b6c 94a9d122f2f06ef709fd8016fd4b712d88052245a65a301f5f177ce22992f74ad05552b1f1af4e70d1eac62cef309752 82d999b3e7cf563833b8bc028ff63a6b26eb357dfdb3fd5f10e33a1f80a9b2cfa7814d871b32a7ebfbaa09e753e37c02 aec6edcde234df502a3268dd2c26f4a36a2e0db730afa83173f9c78fcb2b2f75510a02b80194327b792811caefda2725 94c0bfa66c9f91d462e9194144fdd12d96f9bbe745737e73bab8130607ee6ea9d740e2cfcbbd00a195746edb6369ee61 ab7573dab8c9d46d339e3f491cb2826cabe8b49f85f1ede78d845fc3995537d1b4ab85140b7d0238d9c24daf0e5e2a7e 87e8b16832843251fe952dadfd01d41890ed4bb4b8fa0254550d92c8cced44368225eca83a6c3ad47a7f81ff8a80c984 9189d2d9a7c64791b19c0773ad4f0564ce6bea94aa275a917f78ad987f150fdb3e5e26e7fef9982ac184897ecc04683f b3661bf19e2da41415396ae4dd051a9272e8a2580b06f1a1118f57b901fa237616a9f8075af1129af4eabfefedbe2f1c af43c86661fb15daf5d910a4e06837225e100fb5680bd3e4b10f79a2144c6ec48b1f8d6e6b98e067d36609a5d038889a 82ac0c7acaa83ddc86c5b4249aae12f28155989c7c6b91e5137a4ce05113c6cbc16f6c44948b0efd8665362d3162f16a 8f268d1195ab465beeeb112cd7ffd5d5548559a8bc01261106d3555533fc1971081b25558d884d552df0db1cddda89d8 8ef7caa5521f3e037586ce8ac872a4182ee20c7921c0065ed9986c047e3dda08294da1165f385d008b40d500f07d895f 8c2f98f6880550573fad46075d3eba26634b5b025ce25a0b4d6e0193352c8a1f0661064027a70fe8190b522405f9f4e3 b7653f353564feb164f0f89ec7949da475b8dad4a4d396d252fc2a884f6932d027b7eb2dc4d280702c74569319ed701a a026904f4066333befd9b87a8fad791d014096af60cdd668ef919c24dbe295ff31f7a790e1e721ba40cf5105abca67f4 988f982004ada07a22dd345f2412a228d7a96b9cae2c487de42e392afe1e35c2655f829ce07a14629148ce7079a1f142 9616add009067ed135295fb74d5b223b006b312bf14663e547a0d306694ff3a8a7bb9cfc466986707192a26c0bce599f ad4c425de9855f6968a17ee9ae5b15e0a5b596411388cf976df62ecc6c847a6e2ddb2cea792a5f6e9113c2445dba3e5c b698ac9d86afa3dc69ff8375061f88e3b0cff92ff6dfe747cebaf142e813c011851e7a2830c10993b715e7fd594604a9 a386fa189847bb3b798efca917461e38ead61a08b101948def0f82cd258b945ed4d45b53774b400af500670149e601b7 905c95abda2c68a6559d8a39b6db081c68cef1e1b4be63498004e1b2f408409be9350b5b5d86a30fd443e2b3e445640a 9116dade969e7ce8954afcdd43e5cab64dc15f6c1b8da9d2d69de3f02ba79e6c4f6c7f54d6bf586d30256ae405cd1e41 a3084d173eacd08c9b5084a196719b57e47a0179826fda73466758235d7ecdb87cbcf097bd6b510517d163a85a7c7edd 85bb00415ad3c9be99ff9ba83672cc59fdd24356b661ab93713a3c8eab34e125d8867f628a3c3891b8dc056e69cd0e83 8d58541f9f39ed2ee4478acce5d58d124031338ec11b0d55551f00a5a9a6351faa903a5d7c132dc5e4bb026e9cbd18e4 a622adf72dc250e54f672e14e128c700166168dbe0474cecb340da175346e89917c400677b1bc1c11fcc4cc26591d9db b3f865014754b688ca8372e8448114fff87bf3ca99856ab9168894d0c4679782c1ced703f5b74e851b370630f5e6ee86 a7e490b2c40c2446fcd91861c020da9742c326a81180e38110558bb5d9f2341f1c1885e79b364e6419023d1cbdc47380 b3748d472b1062e54572badbb8e87ac36534407f74932e7fc5b8392d008e8e89758f1671d1e4d30ab0fa40551b13bb5e 89898a5c5ec4313aabc607b0049fd1ebad0e0c074920cf503c9275b564d91916c2c446d3096491c950b7af3ac5e4b0ed 8eb8c83fef2c9dd30ea44e286e9599ec5c20aba983f702e5438afe2e5b921884327ad8d1566c72395587efac79ca7d56 b92479599e806516ce21fb0bd422a1d1d925335ebe2b4a0a7e044dd275f30985a72b97292477053ac5f00e081430da80 a34ae450a324fe8a3c25a4d653a654f9580ed56bbea213b8096987bbad0f5701d809a17076435e18017fea4d69f414bc 81381afe6433d62faf62ea488f39675e0091835892ecc238e02acf1662669c6d3962a71a3db652f6fe3bc5f42a0e5dc5 a430d475bf8580c59111103316fe1aa79c523ea12f1d47a976bbfae76894717c20220e31cf259f08e84a693da6688d70 b842814c359754ece614deb7d184d679d05d16f18a14b288a401cef5dad2cf0d5ee90bad487b80923fc5573779d4e4e8 971d9a2627ff2a6d0dcf2af3d895dfbafca28b1c09610c466e4e2bff2746f8369de7f40d65b70aed135fe1d72564aa88 8f4ce1c59e22b1ce7a0664caaa7e53735b154cfba8d2c5cc4159f2385843de82ab58ed901be876c6f7fce69cb4130950 86cc9dc321b6264297987000d344fa297ef45bcc2a4df04e458fe2d907ad304c0ea2318e32c3179af639a9a56f3263cf 8229e0876dfe8f665c3fb19b250bd89d40f039bbf1b331468b403655be7be2e104c2fd07b9983580c742d5462ca39a43 99299d73066e8eb128f698e56a9f8506dfe4bd014931e86b6b487d6195d2198c6c5bf15cccb40ccf1f8ddb57e9da44a2 a3a3be37ac554c574b393b2f33d0a32a116c1a7cfeaf88c54299a4da2267149a5ecca71f94e6c0ef6e2f472b802f5189 a91700d1a00387502cdba98c90f75fbc4066fefe7cc221c8f0e660994c936badd7d2695893fde2260c8c11d5bdcdd951 8e03cae725b7f9562c5c5ab6361644b976a68bada3d7ca508abca8dfc80a469975689af1fba1abcf21bc2a190dab397d b01461ad23b2a8fa8a6d241e1675855d23bc977dbf4714add8c4b4b7469ccf2375cec20e80cedfe49361d1a30414ac5b a2673bf9bc621e3892c3d7dd4f1a9497f369add8cbaa3472409f4f86bd21ac67cfac357604828adfee6ada1835365029 a042dff4bf0dfc33c178ba1b335e798e6308915128de91b12e5dbbab7c4ac8d60a01f6aea028c3a6d87b9b01e4e74c01 86339e8a75293e4b3ae66b5630d375736b6e6b6b05c5cda5e73fbf7b2f2bd34c18a1d6cefede08625ce3046e77905cb8 af2ebe1b7d073d03e3d98bc61af83bf26f7a8c130fd607aa92b75db22d14d016481b8aa231e2c9757695f55b7224a27f a00ee882c9685e978041fd74a2c465f06e2a42ffd3db659053519925be5b454d6f401e3c12c746e49d910e4c5c9c5e8c 978a781c0e4e264e0dad57e438f1097d447d891a1e2aa0d5928f79a9d5c3faae6f258bc94fdc530b7b2fa6a9932bb193 aa4b7ce2e0c2c9e9655bf21e3e5651c8503bce27483017b0bf476be743ba06db10228b3a4c721219c0779747f11ca282 b003d1c459dacbcf1a715551311e45d7dbca83a185a65748ac74d1800bbeaba37765d9f5a1a221805c571910b34ebca8 95b6e531b38648049f0d19de09b881baa1f7ea3b2130816b006ad5703901a05da57467d1a3d9d2e7c73fb3f2e409363c a6cf9c06593432d8eba23a4f131bb7f72b9bd51ab6b4b772a749fe03ed72b5ced835a349c6d9920dba2a39669cb7c684 aa3d59f6e2e96fbb66195bc58c8704e139fa76cd15e4d61035470bd6e305db9f98bcbf61ac1b95e95b69ba330454c1b3 b57f97959c208361de6d7e86dff2b873068adb0f158066e646f42ae90e650079798f165b5cd713141cd3a2a90a961d9a a76ee8ed9052f6a7a8c69774bb2597be182942f08115baba03bf8faaeaee526feba86120039fe8ca7b9354c3b6e0a8e6 95689d78c867724823f564627d22d25010f278674c6d2d0cdb10329169a47580818995d1d727ce46c38a1e47943ebb89 ab676d2256c6288a88e044b3d9ffd43eb9d5aaee00e8fc60ac921395fb835044c71a26ca948e557fed770f52d711e057 96351c72785c32e5d004b6f4a1259fb8153d631f0c93fed172f18e8ba438fbc5585c1618deeabd0d6d0b82173c2e6170 93dd8d3db576418e22536eba45ab7f56967c6c97c64260d6cddf38fb19c88f2ec5cd0e0156f50e70855eee8a2b879ffd ad6ff16f40f6de3d7a737f8e6cebd8416920c4ff89dbdcd75eabab414af9a6087f83ceb9aff7680aa86bff98bd09c8cc 84de53b11671abc9c38710e19540c5c403817562aeb22a88404cdaff792c1180f717dbdfe8f54940c062c4d032897429 872231b9efa1cdd447b312099a5c164c560440a9441d904e70f5abfc3b2a0d16be9a01aca5e0a2599a61e19407587e3d 88f44ac27094a2aa14e9dc40b099ee6d68f97385950f303969d889ee93d4635e34dff9239103bdf66a4b7cbba3e7eb7a a59afebadf0260e832f6f44468443562f53fbaf7bcb5e46e1462d3f328ac437ce56edbca617659ac9883f9e13261fad7 b1990e42743a88de4deeacfd55fafeab3bc380cb95de43ed623d021a4f2353530bcab9594389c1844b1c5ea6634c4555 85051e841149a10e83f56764e042182208591396d0ce78c762c4a413e6836906df67f38c69793e158d64fef111407ba3 9778172bbd9b1f2ec6bbdd61829d7b39a7df494a818e31c654bf7f6a30139899c4822c1bf418dd4f923243067759ce63 9355005b4878c87804fc966e7d24f3e4b02bed35b4a77369d01f25a3dcbff7621b08306b1ac85b76fe7b4a3eb5f839b1 8f9dc6a54fac052e236f8f0e1f571ac4b5308a43acbe4cc8183bce26262ddaf7994e41cf3034a4cbeca2c505a151e3b1 8cc59c17307111723fe313046a09e0e32ea0cce62c13814ab7c6408c142d6a0311d801be4af53fc9240523f12045f9ef 8e6057975ed40a1932e47dd3ac778f72ee2a868d8540271301b1aa6858de1a5450f596466494a3e0488be4fbeb41c840 812145efbd6559ae13325d56a15940ca4253b17e72a9728986b563bb5acc13ec86453796506ac1a8f12bd6f9e4a288c3 911da0a6d6489eb3dab2ec4a16e36127e8a291ae68a6c2c9de33e97f3a9b1f00da57a94e270a0de79ecc5ecb45d19e83 b72ea85973f4b2a7e6e71962b0502024e979a73c18a9111130e158541fa47bbaaf53940c8f846913a517dc69982ba9e1 a7a56ad1dbdc55f177a7ad1d0af78447dc2673291e34e8ab74b26e2e2e7d8c5fe5dc89e7ef60f04a9508847b5b3a8188 b52503f6e5411db5d1e70f5fb72ccd6463fa0f197b3e51ca79c7b5a8ab2e894f0030476ada72534fa4eb4e06c3880f90 b51c7957a3d18c4e38f6358f2237b3904618d58b1de5dec53387d25a63772e675a5b714ad35a38185409931157d4b529 b86b4266e719d29c043d7ec091547aa6f65bbf2d8d831d1515957c5c06513b72aa82113e9645ad38a7bc3f5383504fa6 b95b547357e6601667b0f5f61f261800a44c2879cf94e879def6a105b1ad2bbf1795c3b98a90d588388e81789bd02681 a58fd4c5ae4673fa350da6777e13313d5d37ed1dafeeb8f4f171549765b84c895875d9d3ae6a9741f3d51006ef81d962 9398dc348d078a604aadc154e6eef2c0be1a93bb93ba7fe8976edc2840a3a318941338cc4d5f743310e539d9b46613d2 902c9f0095014c4a2f0dccaaab543debba6f4cc82c345a10aaf4e72511725dbed7a34cd393a5f4e48a3e5142b7be84ed a7c0447849bb44d04a0393a680f6cd390093484a79a147dd238f5d878030d1c26646d88211108e59fe08b58ad20c6fbd 80db045535d6e67a422519f5c89699e37098449d249698a7cc173a26ccd06f60238ae6cc7242eb780a340705c906790c 8e52b451a299f30124505de2e74d5341e1b5597bdd13301cc39b05536c96e4380e7f1b5c7ef076f5b3005a868657f17c 824499e89701036037571761e977654d2760b8ce21f184f2879fda55d3cda1e7a95306b8abacf1caa79d3cc075b9d27f 9049b956b77f8453d2070607610b79db795588c0cec12943a0f5fe76f358dea81e4f57a4692112afda0e2c05c142b26f 81911647d818a4b5f4990bfd4bc13bf7be7b0059afcf1b6839333e8569cdb0172fd2945410d88879349f677abaed5eb3 ad4048f19b8194ed45b6317d9492b71a89a66928353072659f5ce6c816d8f21e69b9d1817d793effe49ca1874daa1096 8d22f7b2ddb31458661abd34b65819a374a1f68c01fc6c9887edeba8b80c65bceadb8f57a3eb686374004b836261ef67 92637280c259bc6842884db3d6e32602a62252811ae9b019b3c1df664e8809ffe86db88cfdeb8af9f46435c9ee790267 a2f416379e52e3f5edc21641ea73dc76c99f7e29ea75b487e18bd233856f4c0183429f378d2bfc6cd736d29d6cadfa49 882cb6b76dbdc188615dcf1a8439eba05ffca637dd25197508156e03c930b17b9fed2938506fdd7b77567cb488f96222 b68b621bb198a763fb0634eddb93ed4b5156e59b96c88ca2246fd1aea3e6b77ed651e112ac41b30cd361fadc011d385e a3cb22f6b675a29b2d1f827cacd30df14d463c93c3502ef965166f20d046af7f9ab7b2586a9c64f4eae4fad2d808a164 8302d9ce4403f48ca217079762ce42cee8bc30168686bb8d3a945fbd5acd53b39f028dce757b825eb63af2d5ae41169d b2eef1fbd1a176f1f4cd10f2988c7329abe4eb16c7405099fb92baa724ab397bc98734ef7d4b24c0f53dd90f57520d04 a1bbef0bd684a3f0364a66bde9b29326bac7aa3dde4caed67f14fb84fed3de45c55e406702f1495a3e2864d4ee975030 976acdb0efb73e3a3b65633197692dedc2adaed674291ae3df76b827fc866d214e9cac9ca46baefc4405ff13f953d936 b9fbf71cc7b6690f601f0b1c74a19b7d14254183a2daaafec7dc3830cba5ae173d854bbfebeca985d1d908abe5ef0cda 90591d7b483598c94e38969c4dbb92710a1a894bcf147807f1bcbd8aa3ac210b9f2be65519aa829f8e1ccdc83ad9b8cf a30568577c91866b9c40f0719d46b7b3b2e0b4a95e56196ac80898a2d89cc67880e1229933f2cd28ee3286f8d03414d7 97589a88c3850556b359ec5e891f0937f922a751ac7c95949d3bbc7058c172c387611c0f4cb06351ef02e5178b3dd9e4 98e7bbe27a1711f4545df742f17e3233fbcc63659d7419e1ca633f104cb02a32c84f2fac23ca2b84145c2672f68077ab a7ddb91636e4506d8b7e92aa9f4720491bb71a72dadc47c7f4410e15f93e43d07d2b371951a0e6a18d1bd087aa96a5c4 a7c006692227a06db40bceac3d5b1daae60b5692dd9b54772bedb5fea0bcc91cbcdb530cac31900ffc70c5b3ffadc969 8d3ec6032778420dfa8be52066ba0e623467df33e4e1901dbadd586c5d750f4ccde499b5197e26b9ea43931214060f69 8d9a8410518ea64f89df319bfd1fc97a0971cdb9ad9b11d1f8fe834042ea7f8dce4db56eeaf179ff8dda93b6db93e5ce a3c533e9b3aa04df20b9ff635cb1154ce303e045278fcf3f10f609064a5445552a1f93989c52ce852fd0bbd6e2b6c22e 81934f3a7f8c1ae60ec6e4f212986bcc316118c760a74155d06ce0a8c00a9b9669ec4e143ca214e1b995e41271774fd9 ab8e2d01a71192093ef8fafa7485e795567cc9db95a93fb7cc4cf63a391ef89af5e2bfad4b827fffe02b89271300407f 83064a1eaa937a84e392226f1a60b7cfad4efaa802f66de5df7498962f7b2649924f63cd9962d47906380b97b9fe80e1 b4f5e64a15c6672e4b55417ee5dc292dcf93d7ea99965a888b1cc4f5474a11e5b6520eacbcf066840b343f4ceeb6bf33 a63d278b842456ef15c278b37a6ea0f27c7b3ffffefca77c7a66d2ea06c33c4631eb242bbb064d730e70a8262a7b848a 83a41a83dbcdf0d22dc049de082296204e848c453c5ab1ba75aa4067984e053acf6f8b6909a2e1f0009ed051a828a73b 819485b036b7958508f15f3c19436da069cbe635b0318ebe8c014cf1ef9ab2df038c81161b7027475bcfa6fff8dd9faf aa40e38172806e1e045e167f3d1677ef12d5dcdc89b43639a170f68054bd196c4fae34c675c1644d198907a03f76ba57 969bae484883a9ed1fbed53b26b3d4ee4b0e39a6c93ece5b3a49daa01444a1c25727dabe62518546f36b047b311b177c 80a9e73a65da99664988b238096a090d313a0ee8e4235bc102fa79bb337b51bb08c4507814eb5baec22103ec512eaab0 86604379aec5bddda6cbe3ef99c0ac3a3c285b0b1a15b50451c7242cd42ae6b6c8acb717dcca7917838432df93a28502 a23407ee02a495bed06aa7e15f94cfb05c83e6d6fba64456a9bbabfa76b2b68c5c47de00ba169e710681f6a29bb41a22 98cff5ecc73b366c6a01b34ac9066cb34f7eeaf4f38a5429bad2d07e84a237047e2a065c7e8a0a6581017dadb4695deb 8de9f68a938f441f3b7ab84bb1f473c5f9e5c9e139e42b7ccee1d254bd57d0e99c2ccda0f3198f1fc5737f6023dd204e b0ce48d815c2768fb472a315cad86aa033d0e9ca506f146656e2941829e0acb735590b4fbc713c2d18d3676db0a954ac 82f485cdefd5642a6af58ac6817991c49fac9c10ace60f90b27f1788cc026c2fe8afc83cf499b3444118f9f0103598a8 82c24550ed512a0d53fc56f64cc36b553823ae8766d75d772dacf038c460f16f108f87a39ceef7c66389790f799dbab3 859ffcf1fe9166388316149b9acc35694c0ea534d43f09dae9b86f4aa00a23b27144dda6a352e74b9516e8c8d6fc809c b8f7f353eec45da77fb27742405e5ad08d95ec0f5b6842025be9def3d9892f85eb5dd0921b41e6eff373618dba215bca 8ccca4436f9017e426229290f5cd05eac3f16571a4713141a7461acfe8ae99cd5a95bf5b6df129148693c533966145da a2c67ecc19c0178b2994846fea4c34c327a5d786ac4b09d1d13549d5be5996d8a89021d63d65cb814923388f47cc3a03 aa0ff87d676b418ec08f5cbf577ac7e744d1d0e9ebd14615b550eb86931eafd2a36d4732cc5d6fab1713fd7ab2f6f7c0 8aef4730bb65e44efd6bb9441c0ae897363a2f3054867590a2c2ecf4f0224e578c7a67f10b40f8453d9f492ac15a9b2d 86a187e13d8fba5addcfdd5b0410cedd352016c930f913addd769ee09faa6be5ca3e4b1bdb417a965c643a99bd92be42 a0a4e9632a7a094b14b29b78cd9c894218cdf6783e61671e0203865dc2a835350f465fbaf86168f28af7c478ca17bc89 a8c7b02d8deff2cd657d8447689a9c5e2cd74ef57c1314ac4d69084ac24a7471954d9ff43fe0907d875dcb65fd0d3ce5 97ded38760aa7be6b6960b5b50e83b618fe413cbf2bcc1da64c05140bcc32f5e0e709cd05bf8007949953fac5716bad9 b0d293835a24d64c2ae48ce26e550b71a8c94a0883103757fb6b07e30747f1a871707d23389ba2b2065fa6bafe220095 8f9e291bf849feaa575592e28e3c8d4b7283f733d41827262367ea1c40f298c7bcc16505255a906b62bf15d9f1ba85fb 998f4e2d12708b4fd85a61597ca2eddd750f73c9e0c9b3cf0825d8f8e01f1628fd19797dcaed3b16dc50331fc6b8b821 b30d1f8c115d0e63bf48f595dd10908416774c78b3bbb3194192995154d80ea042d2e94d858de5f8aa0261b093c401fd b5d9c75bb41f964cbff3f00e96d9f1480c91df8913f139f0d385d27a19f57a820f838eb728e46823cbff00e21c660996 a6edec90b5d25350e2f5f0518777634f9e661ec9d30674cf5b156c4801746d62517751d90074830ac0f4b09911c262f1 82f98da1264b6b75b8fbeb6a4d96d6a05b25c24db0d57ba3a38efe3a82d0d4e331b9fc4237d6494ccfe4727206457519 b89511843453cf4ecd24669572d6371b1e529c8e284300c43e0d5bb6b3aaf35aeb634b3cb5c0a2868f0d5e959c1d0772 a82bf065676583e5c1d3b81987aaae5542f522ba39538263a944bb33ea5b514c649344a96c0205a3b197a3f930fcda6c a37b47ea527b7e06c460776aa662d9a49ff4149d3993f1a974b0dd165f7171770d189b0e2ea54fd5fccb6a14b116e68a a1017677f97dda818274d47556d09d0e4ccacb23a252f82a6cfe78c630ad46fb9806307445a59fb61262182de3a2b29c b01e9fcac239ba270e6877b79273ddd768bf8a51d2ed8a051b1c11e18eff3de5920e2fcbfbd26f06d381eddd3b1f1e1b 82fcd53d803b1c8e4ed76adc339b7f3a5962d37042b9683aabac7513ac68775d4a566a9460183926a6a95dbe7d551a1f a763e78995d55cd21cdb7ef75d9642d6e1c72453945e346ab6690c20a4e1eeec61bb848ef830ae4b56182535e3c71d8f b769f4db602251d4b0a1186782799bdcef66de33c110999a5775c50b349666ffd83d4c89714c4e376f2efe021a5cfdb2 a59cbd1b785efcfa6e83fc3b1d8cf638820bc0c119726b5368f3fba9dce8e3414204fb1f1a88f6c1ff52e87961252f97 95c8c458fd01aa23ecf120481a9c6332ebec2e8bb70a308d0576926a858457021c277958cf79017ddd86a56cacc2d7db 82eb41390800287ae56e77f2e87709de5b871c8bdb67c10a80fc65f3acb9f7c29e8fa43047436e8933f27449ea61d94d b3ec25e3545eb83aed2a1f3558d1a31c7edde4be145ecc13b33802654b77dc049b4f0065069dd9047b051e52ab11dcdd b78a0c715738f56f0dc459ab99e252e3b579b208142836b3c416b704ca1de640ca082f29ebbcee648c8c127df06f6b1e a4083149432eaaf9520188ebf4607d09cf664acd1f471d4fb654476e77a9eaae2251424ffda78d09b6cb880df35c1219 8c52857d68d6e9672df3db2df2dbf46b516a21a0e8a18eec09a6ae13c1ef8f369d03233320dd1c2c0bbe00abfc1ea18b 8c856089488803066bff3f8d8e09afb9baf20cecc33c8823c1c0836c3d45498c3de37e87c016b705207f60d2b00f8609 831a3df39be959047b2aead06b4dcd3012d7b29417f642b83c9e8ce8de24a3dbbd29c6fdf55e2db3f7ea04636c94e403 aed84d009f66544addabe404bf6d65af7779ce140dc561ff0c86a4078557b96b2053b7b8a43432ffb18cd814f143b9da 93282e4d72b0aa85212a77b336007d8ba071eea17492da19860f1ad16c1ea8867ccc27ef5c37c74b052465cc11ea4f52 a7b78b8c8d057194e8d68767f1488363f77c77bddd56c3da2bc70b6354c7aa76247c86d51f7371aa38a4aa7f7e3c0bb7 b1c77283d01dcd1bde649b5b044eac26befc98ff57cbee379fb5b8e420134a88f2fc7f0bf04d15e1fbd45d29e7590fe6 a4aa8de70330a73b2c6458f20a1067eed4b3474829b36970a8df125d53bbdda4f4a2c60063b7cccb0c80fc155527652f 948a6c79ba1b8ad7e0bed2fae2f0481c4e41b4d9bbdd9b58164e28e9065700e83f210c8d5351d0212e0b0b68b345b3a5 86a48c31dcbbf7b082c92d28e1f613a2378a910677d7db3a349dc089e4a1e24b12eee8e8206777a3a8c64748840b7387 976adb1af21e0fc34148917cf43d933d7bfd3fd12ed6c37039dcd5a4520e3c6cf5868539ba5bf082326430deb8a4458d b93e1a4476f2c51864bb4037e7145f0635eb2827ab91732b98d49b6c07f6ac443111aa1f1da76d1888665cb897c3834e 8afd46fb23bf869999fa19784b18a432a1f252d09506b8dbb756af900518d3f5f244989b3d7c823d9029218c655d3dc6 83f1e59e3abeed18cdc632921672673f1cb6e330326e11c4e600e13e0d5bc11bdc970ae12952e15103a706fe720bf4d6 90ce4cc660714b0b673d48010641c09c00fc92a2c596208f65c46073d7f349dd8e6e077ba7dcef9403084971c3295b76 8b09b0f431a7c796561ecf1549b85048564de428dac0474522e9558b6065fede231886bc108539c104ce88ebd9b5d1b0 85d6e742e2fb16a7b0ba0df64bc2c0dbff9549be691f46a6669bca05e89c884af16822b85faefefb604ec48c8705a309 a87989ee231e468a712c66513746fcf03c14f103aadca0eac28e9732487deb56d7532e407953ab87a4bf8961588ef7b0 b00da10efe1c29ee03c9d37d5918e391ae30e48304e294696b81b434f65cf8c8b95b9d1758c64c25e534d045ba28696f 91c0e1fb49afe46c7056400baa06dbb5f6e479db78ee37e2d76c1f4e88994357e257b83b78624c4ef6091a6c0eb8254d 883fb797c498297ccbf9411a3e727c3614af4eccde41619b773dc7f3259950835ee79453debf178e11dec4d3ada687a0 a14703347e44eb5059070b2759297fcfcfc60e6893c0373eea069388eba3950aa06f1c57cd2c30984a2d6f9e9c92c79e afebc7585b304ceba9a769634adff35940e89cd32682c78002822aab25eec3edc29342b7f5a42a56a1fec67821172ad5 aea3ff3822d09dba1425084ca95fd359718d856f6c133c5fabe2b2eed8303b6e0ba0d8698b48b93136a673baac174fd9 af2456a09aa777d9e67aa6c7c49a1845ea5cdda2e39f4c935c34a5f8280d69d4eec570446998cbbe31ede69a91e90b06 82cada19fed16b891ef3442bafd49e1f07c00c2f57b2492dd4ee36af2bd6fd877d6cb41188a4d6ce9ec8d48e8133d697 82a21034c832287f616619a37c122cee265cc34ae75e881fcaea4ea7f689f3c2bc8150bbf7dbcfd123522bfb7f7b1d68 86877217105f5d0ec3eeff0289fc2a70d505c9fdf7862e8159553ef60908fb1a27bdaf899381356a4ef4649072a9796c 82b196e49c6e861089a427c0b4671d464e9d15555ffb90954cd0d630d7ae02eb3d98ceb529d00719c2526cd96481355a a29b41d0d43d26ce76d4358e0db2b77df11f56e389f3b084d8af70a636218bd3ac86b36a9fe46ec9058c26a490f887f7 a4311c4c20c4d7dd943765099c50f2fd423e203ccfe98ff00087d205467a7873762510cac5fdce7a308913ed07991ed7 b1f040fc5cc51550cb2c25cf1fd418ecdd961635a11f365515f0cb4ffb31da71f48128c233e9cc7c0cf3978d757ec84e a9ebae46f86d3bd543c5f207ed0d1aed94b8375dc991161d7a271f01592912072e083e2daf30c146430894e37325a1b9 826418c8e17ad902b5fe88736323a47e0ca7a44bce4cbe27846ec8fe81de1e8942455dda6d30e192cdcc73e11df31256 85199db563427c5edcbac21f3d39fec2357be91fb571982ddcdc4646b446ad5ced84410de008cb47b3477ee0d532daf8 b7eed9cd400b2ca12bf1d9ae008214b8561fb09c8ad9ff959e626ffde00fee5ff2f5b6612e231f2a1a9b1646fcc575e3 8b40bf12501dcbac78f5a314941326bfcddf7907c83d8d887d0bb149207f85d80cd4dfbd7935439ea7b14ea39a3fded7 83e3041af302485399ba6cd5120e17af61043977083887e8d26b15feec4a6b11171ac5c06e6ad0971d4b58a81ff12af3 8f5b9a0eecc589dbf8c35a65d5e996a659277ef6ea509739c0cb7b3e2da9895e8c8012de662e5b23c5fa85d4a8f48904 835d71ed5e919d89d8e6455f234f3ff215462c4e3720c371ac8c75e83b19dfe3ae15a81547e4dc1138e5f5997f413cc9 8b7d2e4614716b1db18e9370176ea483e6abe8acdcc3dcdf5fb1f4d22ca55d652feebdccc171c6de38398d9f7bfdec7a 93eace72036fe57d019676a02acf3d224cf376f166658c1bf705db4f24295881d477d6fdd7916efcfceff8c7a063deda b1ac460b3d516879a84bc886c54f020a9d799e7c49af3e4d7de5bf0d2793c852254c5d8fe5616147e6659512e5ccb012 acd0947a35cb167a48bcd9667620464b54ac0e78f9316b4aa92dcaab5422d7a732087e52e1c827faa847c6b2fe6e7766 94ac33d21c3d12ff762d32557860e911cd94d666609ddcc42161b9c16f28d24a526e8b10bb03137257a92cec25ae637d 832e02058b6b994eadd8702921486241f9a19e68ed1406dad545e000a491ae510f525ccf9d10a4bba91c68f2c53a0f58 9471035d14f78ff8f463b9901dd476b587bb07225c351161915c2e9c6114c3c78a501379ab6fb4eb03194c457cbd22bf ab64593e034c6241d357fcbc32d8ea5593445a5e7c24cac81ad12bd2ef01843d477a36dc1ba21dbe63b440750d72096a 9850f3b30045e927ad3ec4123a32ed2eb4c911f572b6abb79121873f91016f0d80268de8b12e2093a4904f6e6cab7642 987212c36b4722fe2e54fa30c52b1e54474439f9f35ca6ad33c5130cd305b8b54b532dd80ffd2c274105f20ce6d79f6e 8b4d0c6abcb239b5ed47bef63bc17efe558a27462c8208fa652b056e9eae9665787cd1aee34fbb55beb045c8bfdb882b a9f3483c6fee2fe41312d89dd4355d5b2193ac413258993805c5cbbf0a59221f879386d3e7a28e73014f10e65dd503d9 a2225da3119b9b7c83d514b9f3aeb9a6d9e32d9cbf9309cbb971fd53c4b2c001d10d880a8ad8a7c281b21d85ceca0b7c a050be52e54e676c151f7a54453bbb707232f849beab4f3bf504b4d620f59ed214409d7c2bd3000f3ff13184ccda1c35 adbccf681e15b3edb6455a68d292b0a1d0f5a4cb135613f5e6db9943f02181341d5755875db6ee474e19ace1c0634a28 8b6eff675632a6fad0111ec72aacc61c7387380eb87933fd1d098856387d418bd38e77d897e65d6fe35951d0627c550b aabe2328ddf90989b15e409b91ef055cb02757d34987849ae6d60bef2c902bf8251ed21ab30acf39e500d1d511e90845 92ba4eb1f796bc3d8b03515f65c045b66e2734c2da3fc507fdd9d6b5d1e19ab3893726816a32141db7a31099ca817d96 8a98b3cf353138a1810beb60e946183803ef1d39ac4ea92f5a1e03060d35a4774a6e52b14ead54f6794d5f4022b8685c 909f8a5c13ec4a59b649ed3bee9f5d13b21d7f3e2636fd2bb3413c0646573fdf9243d63083356f12f5147545339fcd55 9359d914d1267633141328ed0790d81c695fea3ddd2d406c0df3d81d0c64931cf316fe4d92f4353c99ff63e2aefc4e34 b88302031681b54415fe8fbfa161c032ea345c6af63d2fb8ad97615103fd4d4281c5a9cae5b0794c4657b97571a81d3b 992c80192a519038082446b1fb947323005b275e25f2c14c33cc7269e0ec038581cc43705894f94bad62ae33a8b7f965 a78253e3e3eece124bef84a0a8807ce76573509f6861d0b6f70d0aa35a30a123a9da5e01e84969708c40b0669eb70aa6 8d5724de45270ca91c94792e8584e676547d7ac1ac816a6bb9982ee854eb5df071d20545cdfd3771cd40f90e5ba04c8e 825a6f586726c68d45f00ad0f5a4436523317939a47713f78fd4fe81cd74236fdac1b04ecd97c2d0267d6f4981d7beb1 93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8 b5bfd7dd8cdeb128843bc287230af38926187075cbfbefa81009a2ce615ac53d2914e5870cb452d2afaaab24f3499f72185cbfee53492714734429b7b38608e23926c911cceceac9a36851477ba4c60b087041de621000edc98edada20c1def2 b5337ba0ce5d37224290916e268e2060e5c14f3f9fc9e1ec3af5a958e7a0303122500ce18f1a4640bf66525bd10e763501fe986d86649d8d45143c08c3209db3411802c226e9fe9a55716ac4a0c14f9dcef9e70b2bb309553880dc5025eab3cc b3c1dcdc1f62046c786f0b82242ef283e7ed8f5626f72542aa2c7a40f14d9094dd1ebdbd7457ffdcdac45fd7da7e16c51200b06d791e5e43e257e45efdf0bd5b06cd2333beca2a3a84354eb48662d83aef5ecf4e67658c851c10b13d8d87c874 954d91c7688983382609fca9e211e461f488a5971fd4e40d7e2892037268eacdfd495cfa0a7ed6eb0eb11ac3ae6f651716757e7526abe1e06c64649d80996fd3105c20c4c94bc2b22d97045356fe9d791f21ea6428ac48db6f9e68e30d875280 88a6b6bb26c51cf9812260795523973bb90ce80f6820b6c9048ab366f0fb96e48437a7f7cb62aedf64b11eb4dfefebb0147608793133d32003cb1f2dc47b13b5ff45f1bb1b2408ea45770a08dbfaec60961acb8119c47b139a13b8641e2c9487 85cd7be9728bd925d12f47fb04b32d9fad7cab88788b559f053e69ca18e463113ecc8bbb6dbfb024835f901b3a957d3108d6770fb26d4c8be0a9a619f6e3a4bf15cbfd48e61593490885f6cee30e4300c5f9cf5e1c08e60a2d5b023ee94fcad0 80477dba360f04399821a48ca388c0fa81102dd15687fea792ee8c1114e00d1bc4839ad37ac58900a118d863723acfbe08126ea883be87f50e4eabe3b5e72f5d9e041db8d9b186409fd4df4a7dde38c0e0a3b1ae29b098e5697e7f110b6b27e4 b7a6aec08715a9f8672a2b8c367e407be37e59514ac19dd4f0942a68007bba3923df22da48702c63c0d6b3efd3c2d04e0fe042d8b5a54d562f9f33afc4865dcbcc16e99029e25925580e87920c399e710d438ac1ce3a6dc9b0d76c064a01f6f7 ac1b001edcea02c8258aeffbf9203114c1c874ad88dae1184fadd7d94cd09053649efd0ca413400e6e9b5fa4eac33261000af88b6bd0d2abf877a4f0355d2fb4d6007adb181695201c5432e50b850b51b3969f893bddf82126c5a71b042b7686 90043fda4de53fb364fab2c04be5296c215599105ecff0c12e4917c549257125775c29f2507124d15f56e30447f367db0596c33237242c02d83dfd058735f1e3c1ff99069af55773b6d51d32a68bf75763f59ec4ee7267932ae426522b8aaab6 a8660ce853e9dc08271bf882e29cd53397d63b739584dda5263da4c7cc1878d0cf6f3e403557885f557e184700575fee016ee8542dec22c97befe1d10f414d22e84560741cdb3e74c30dda9b42eeaaf53e27822de2ee06e24e912bf764a9a533 8fe3921a96d0d065e8aa8fce9aa42c8e1461ca0470688c137be89396dd05103606dab6cdd2a4591efd6addf72026c12e065da7be276dee27a7e30afa2bd81c18f1516e7f068f324d0bad9570b95f6bd02c727cd2343e26db0887c3e4e26dceda 8ae1ad97dcb9c192c9a3933541b40447d1dc4eebf380151440bbaae1e120cc5cdf1bcea55180b128d8e180e3af623815191d063cc0d7a47d55fb7687b9d87040bf7bc1a7546b07c61db5ccf1841372d7c2fe4a5431ffff829f3c2eb590b0b710 8c2fa96870a88150f7876c931e2d3cc2adeaaaf5c73ef5fa1cf9dfa0991ae4819f9321af7e916e5057d87338e630a2f21242c29d76963cf26035b548d2a63d8ad7bd6efefa01c1df502cbdfdfe0334fb21ceb9f686887440f713bf17a89b8081 b9aa98e2f02bb616e22ee5dd74c7d1049321ac9214d093a738159850a1dbcc7138cb8d26ce09d8296368fd5b291d74fa17ac7cc1b80840fdd4ee35e111501e3fa8485b508baecda7c1ab7bd703872b7d64a2a40b3210b6a70e8a6ffe0e5127e3 9292db67f8771cdc86854a3f614a73805bf3012b48f1541e704ea4015d2b6b9c9aaed36419769c87c49f9e3165f03edb159c23b3a49c4390951f78e1d9b0ad997129b17cdb57ea1a6638794c0cca7d239f229e589c5ae4f9fe6979f7f8cba1d7 91cd9e86550f230d128664f7312591fee6a84c34f5fc7aed557bcf986a409a6de722c4330453a305f06911d2728626e611acfdf81284f77f60a3a1595053a9479964fd713117e27c0222cc679674b03bc8001501aaf9b506196c56de29429b46 a9516b73f605cc31b89c68b7675dc451e6364595243d235339437f556cf22d745d4250c1376182273be2d99e02c10eee047410a43eff634d051aeb784e76cb3605d8e079b9eb6ad1957dfdf77e1cd32ce4a573c9dfcc207ca65af6eb187f6c3d a9667271f7d191935cc8ad59ef3ec50229945faea85bfdfb0d582090f524436b348aaa0183b16a6231c00332fdac2826125b8c857a2ed9ec66821cfe02b3a2279be2412441bc2e369b255eb98614e4be8490799c4df22f18d47d24ec70bba5f7 a4371144d2aa44d70d3cb9789096d3aa411149a6f800cb46f506461ee8363c8724667974252f28aea61b6030c05930ac039c1ee64bb4bd56532a685cae182bf2ab935eee34718cffcb46cae214c77aaca11dbb1320faf23c47247db1da04d8dc 89a7eb441892260b7e81168c386899cd84ffc4a2c5cad2eae0d1ab9e8b5524662e6f660fe3f8bfe4c92f60b060811bc605b14c5631d16709266886d7885a5eb5930097127ec6fb2ebbaf2df65909cf48f253b3d5e22ae48d3e9a2fd2b01f447e 9648c42ca97665b5eccb49580d8532df05eb5a68db07f391a2340769b55119eaf4c52fe4f650c09250fa78a76c3a1e271799b8333cc2628e3d4b4a6a3e03da1f771ecf6516dd63236574a7864ff07e319a6f11f153406280d63af9e2b5713283 9663bf6dd446ea7a90658ee458578d4196dc0b175ef7fcfa75f44d41670850774c2e46c5a6be132a2c072a3c0180a24f0305d1acac49d2d79878e5cda80c57feda3d01a6af12e78b5874e2a4b3717f11c97503b41a4474e2e95b179113726199 b212aeb4814e0915b432711b317923ed2b09e076aaf558c3ae8ef83f9e15a83f9ea3f47805b2750ab9e8106cb4dc6ad003522c84b03dc02829978a097899c773f6fb31f7fe6b8f2d836d96580f216fec20158f1590c3e0d7850622e15194db05 925f005059bf07e9ceccbe66c711b048e236ade775720d0fe479aebe6e23e8af281225ad18e62458dc1b03b42ad4ca290d4aa176260604a7aad0d9791337006fbdebe23746f8060d42876f45e4c83c3643931392fde1cd13ff8bddf8111ef974 9553edb22b4330c568e156a59ef03b26f5c326424f830fe3e8c0b602f08c124730ffc40bc745bec1a22417adb22a1a960243a10565c2be3066bfdb841d1cd14c624cd06e0008f4beb83f972ce6182a303bee3fcbcabc6cfe48ec5ae4b7941bfc 935f5a404f0a78bdcce709899eda0631169b366a669e9b58eacbbd86d7b5016d044b8dfc59ce7ed8de743ae16c2343b50e2f925e88ba6319e33c3fc76b314043abad7813677b4615c8a97eb83cc79de4fedf6ccbcfa4d4cbf759a5a84e4d9742 a5b014ab936eb4be113204490e8b61cd38d71da0dec7215125bcd131bf3ab22d0a32ce645bca93e7b3637cf0c2db3d6601a0ddd330dc46f9fae82abe864ffc12d656c88eb50c20782e5bb6f75d18760666f43943abb644b881639083e122f557 935b7298ae52862fa22bf03bfc1795b34c70b181679ae27de08a9f5b4b884f824ef1b276b7600efa0d2f1d79e4a470d51692fd565c5cf8343dd80e5d3336968fc21c09ba9348590f6206d4424eb229e767547daefa98bc3aa9f421158dee3f2a 9830f92446e708a8f6b091cc3c38b653505414f8b6507504010a96ffda3bcf763d5331eb749301e2a1437f00e2415efb01b799ad4c03f4b02de077569626255ac1165f96ea408915d4cf7955047620da573e5c439671d1fa5c833fb11de7afe6 840dcc44f673fff3e387af2bb41e89640f2a70bcd2b92544876daa92143f67c7512faf5f90a04b7191de01f3e2b1bde00622a20dc62ca23bbbfaa6ad220613deff43908382642d4d6a86999f662efd64b1df448b68c847cfa87630a3ffd2ec76 92950c895ed54f7f876b2fda17ecc9c41b7accfbdd42c210cc5b475e0737a7279f558148531b5c916e310604a1de25a80940c94fe5389ae5d6a5e9c371be67bceea1877f5401725a6595bcf77ece60905151b6dfcb68b75ed2e708c73632f4fd 8010246bf8e94c25fd029b346b5fbadb404ef6f44a58fd9dd75acf62433d8cc6db66974f139a76e0c26dddc1f329a88214dbb63276516cf325c7869e855d07e0852d622c332ac55609ba1ec9258c45746a2aeb1af0800141ee011da80af175d4 b0f1bad257ebd187bdc3f37b23f33c6a5d6a8e1f2de586080d6ada19087b0e2bf23b79c1b6da1ee82271323f5bdf3e1b018586b54a5b92ab6a1a16bb3315190a3584a05e6c37d5ca1e05d702b9869e27f513472bcdd00f4d0502a107773097da 9636d24f1ede773ce919f309448dd7ce023f424afd6b4b69cb98c2a988d849a283646dc3e469879daa1b1edae91ae41f009887518e7eb5578f88469321117303cd3ac2d7aee4d9cb5f82ab9ae3458e796dfe7c24284b05815acfcaa270ff22e2 b373feb5d7012fd60578d7d00834c5c81df2a23d42794fed91aa9535a4771fde0341c4da882261785e0caca40bf83405143085e7f17e55b64f6c5c809680c20b050409bf3702c574769127c854d27388b144b05624a0e24a1cbcc4d08467005b b15680648949ce69f82526e9b67d9b55ce5c537dc6ab7f3089091a9a19a6b90df7656794f6edc87fb387d21573ffc847062623685931c2790a508cbc8c6b231dd2c34f4d37d4706237b1407673605a604bcf6a50cc0b1a2db20485e22b02c17e 8817e46672d40c8f748081567b038a3165f87994788ec77ee8daea8587f5540df3422f9e120e94339be67f186f50952504cb44f61e30a5241f1827e501b2de53c4c64473bcc79ab887dd277f282fbfe47997a930dd140ac08b03efac88d81075 a6e4ef6c1d1098f95aae119905f87eb49b909d17f9c41bcfe51127aa25fee20782ea884a7fdf7d5e9c245b5a5b32230b07e0dbf7c6743bf52ee20e2acc0b269422bd6cf3c07115df4aa85b11b2c16630a07c974492d9cdd0ec325a3fabd95044 8634aa7c3d00e7f17150009698ce440d8e1b0f13042b624a722ace68ead870c3d2212fbee549a2c190e384d7d6ac37ce14ab962c299ea1218ef1b1489c98906c91323b94c587f1d205a6edd5e9d05b42d591c26494a6f6a029a2aadb5f8b6f67 821a58092900bdb73decf48e13e7a5012a3f88b06288a97b855ef51306406e7d867d613d9ec738ebacfa6db344b677d21509d93f3b55c2ebf3a2f2a6356f875150554c6fff52e62e3e46f7859be971bf7dd9d5b3e1d799749c8a97c2e04325df 8dba356577a3a388f782e90edb1a7f3619759f4de314ad5d95c7cc6e197211446819c4955f99c5fc67f79450d2934e3c09adefc91b724887e005c5190362245eec48ce117d0a94d6fa6db12eda4ba8dde608fbbd0051f54dcf3bb057adfb2493 a32a690dc95c23ed9fb46443d9b7d4c2e27053a7fcc216d2b0020a8cf279729c46114d2cda5772fd60a97016a07d6c5a0a7eb085a18307d34194596f5b541cdf01b2ceb31d62d6b55515acfd2b9eec92b27d082fbc4dc59fc63b551eccdb8468 a040f7f4be67eaf0a1d658a3175d65df21a7dbde99bfa893469b9b43b9d150fc2e333148b1cb88cfd0447d88fa1a501d126987e9fdccb2852ecf1ba907c2ca3d6f97b055e354a9789854a64ecc8c2e928382cf09dda9abde42bbdf92280cdd96 864baff97fa60164f91f334e0c9be00a152a416556b462f96d7c43b59fe1ebaff42f0471d0bf264976f8aa6431176eb905bd875024cf4f76c13a70bede51dc3e47e10b9d5652d30d2663b3af3f08d5d11b9709a0321aba371d2ef13174dcfcaf 95a46f32c994133ecc22db49bad2c36a281d6b574c83cfee6680b8c8100466ca034b815cfaedfbf54f4e75188e661df901abd089524e1e0eb0bf48d48caa9dd97482d2e8c1253e7e8ac250a32fd066d5b5cb08a8641bdd64ecfa48289dca83a3 a2cce2be4d12144138cb91066e0cd0542c80b478bf467867ebef9ddaf3bd64e918294043500bf5a9f45ee089a8d6ace917108d9ce9e4f41e7e860cbce19ac52e791db3b6dde1c4b0367377b581f999f340e1d6814d724edc94cb07f9c4730774 b145f203eee1ac0a1a1731113ffa7a8b0b694ef2312dabc4d431660f5e0645ef5838e3e624cfe1228cfa248d48b5760501f93e6ab13d3159fc241427116c4b90359599a4cb0a86d0bb9190aa7fabff482c812db966fd2ce0a1b48cb8ac8b3bca adabe5d215c608696e03861cbd5f7401869c756b3a5aadc55f41745ad9478145d44393fec8bb6dfc4ad9236dc62b9ada0f7ca57fe2bae1b71565dbf9536d33a68b8e2090b233422313cc96afc7f1f7e0907dc7787806671541d6de8ce47c4cd0 ae7845fa6b06db53201c1080e01e629781817f421f28956589c6df3091ec33754f8a4bd4647a6bb1c141ac22731e3c1014865d13f3ed538dcb0f7b7576435133d9d03be655f8fbb4c9f7d83e06d1210aedd45128c2b0c9bab45a9ddde1c862a5 9159eaa826a24adfa7adf6e8d2832120ebb6eccbeb3d0459ffdc338548813a2d239d22b26451fda98cc0c204d8e1ac69150b5498e0be3045300e789bcb4e210d5cd431da4bdd915a21f407ea296c20c96608ded0b70d07188e96e6c1a7b9b86b a9fc6281e2d54b46458ef564ffaed6944bff71e389d0acc11fa35d3fcd8e10c1066e0dde5b9b6516f691bb478e81c6b20865281104dcb640e29dc116daae2e884f1fe6730d639dbe0e19a532be4fb337bf52ae8408446deb393d224eee7cfa50 84291a42f991bfb36358eedead3699d9176a38f6f63757742fdbb7f631f2c70178b1aedef4912fed7b6cf27e88ddc7eb0e2a6aa4b999f3eb4b662b93f386c8d78e9ac9929e21f4c5e63b12991fcde93aa64a735b75b535e730ff8dd2abb16e04 a1b7fcacae181495d91765dfddf26581e8e39421579c9cbd0dd27a40ea4c54af3444a36bf85a11dda2114246eaddbdd619397424bb1eb41b5a15004b902a590ede5742cd850cf312555be24d2df8becf48f5afba5a8cd087cb7be0a521728386 92feaaf540dbd84719a4889a87cdd125b7e995a6782911931fef26da9afcfbe6f86aaf5328fe1f77631491ce6239c5470f44c7791506c6ef1626803a5794e76d2be0af92f7052c29ac6264b7b9b51f267ad820afc6f881460521428496c6a5f1 a525c925bfae1b89320a5054acc1fa11820f73d0cf28d273092b305467b2831fab53b6daf75fb926f332782d50e2522a19edcd85be5eb72f1497193c952d8cd0bcc5d43b39363b206eae4cb1e61668bde28a3fb2fc1e0d3d113f6dfadb799717 98752bb6f5a44213f40eda6aa4ff124057c1b13b6529ab42fe575b9afa66e59b9c0ed563fb20dff62130c436c3e905ee17dd8433ba02c445b1d67182ab6504a90bbe12c26a754bbf734665c622f76c62fe2e11dd43ce04fd2b91a8463679058b a9aa9a84729f7c44219ff9e00e651e50ddea3735ef2a73fdf8ed8cd271961d8ed7af5cd724b713a89a097a3fe65a3c0202f69458a8b4c157c62a85668b12fc0d3957774bc9b35f86c184dd03bfefd5c325da717d74192cc9751c2073fe9d170e b221c1fd335a4362eff504cd95145f122bf93ea02ae162a3fb39c75583fc13a932d26050e164da97cff3e91f9a7f6ff80302c19dd1916f24acf6b93b62f36e9665a8785413b0c7d930c7f1668549910f849bca319b00e59dd01e5dec8d2edacc a71e2b1e0b16d754b848f05eda90f67bedab37709550171551050c94efba0bfc282f72aeaaa1f0330041461f5e6aa4d11537237e955e1609a469d38ed17f5c2a35a1752f546db89bfeff9eab78ec944266f1cb94c1db3334ab48df716ce408ef b990ae72768779ba0b2e66df4dd29b3dbd00f901c23b2b4a53419226ef9232acedeb498b0d0687c463e3f1eead58b20b09efcefa566fbfdfe1c6e48d32367936142d0a734143e5e63cdf86be7457723535b787a9cfcfa32fe1d61ad5a2617220 8d27e7fbff77d5b9b9bbc864d5231fecf817238a6433db668d5a62a2c1ee1e5694fdd90c3293c06cc0cb15f7cbeab44d0d42be632cb9ff41fc3f6628b4b62897797d7b56126d65b694dcf3e298e3561ac8813fbd7296593ced33850426df42db a92039a08b5502d5b211a7744099c9f93fa8c90cedcb1d05e92f01886219dd464eb5fb0337496ad96ed09c987da4e5f019035c5b01cc09b2a18b8a8dd419bc5895388a07e26958f6bd26751929c25f89b8eb4a299d822e2d26fec9ef350e0d3c 92dcc5a1c8c3e1b28b1524e3dd6dbecd63017c9201da9dbe077f1b82adc08c50169f56fc7b5a3b28ec6b89254de3e2fd12838a761053437883c3e01ba616670cea843754548ef84bcc397de2369adcca2ab54cd73c55dc68d87aec3fc2fe4f10 97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb ad3eb50121139aa34db1d545093ac9374ab7bca2c0f3bf28e27c8dcd8fc7cb42d25926fc0c97b336e9f0fb35e5a04c81 8029c8ce0d2dce761a7f29c2df2290850c85bdfaec2955626d7acc8864aeb01fe16c9e156863dc63b6c22553910e27c1 b1386c995d3101d10639e49b9e5d39b9a280dcf0f135c2e6c6928bb3ab8309a9da7178f33925768c324f11c3762cfdd5 9596d929610e6d2ed3502b1bb0f1ea010f6b6605c95d4859f5e53e09fa68dc71dfd5874905447b5ec6cd156a76d6b6e8 851e3c3d4b5b7cdbba25d72abf9812cf3d7c5a9dbdec42b6635e2add706cbeea18f985afe5247459f6c908620322f434 b10f4cf8ec6e02491bbe6d9084d88c16306fdaf399fef3cd1453f58a4f7633f80dc60b100f9236c3103eaf727468374f ade11ec630127e04d17e70db0237d55f2ff2a2094881a483797e8cddb98b622245e1f608e5dcd1172b9870e733b4a32f af58c8a2f58f904ce20db81005331bf2d251e227e7d1bef575d691bdca842e6233eb2e26c2e116a61a78594772b38d25 b3c1313c31ec82da5a7a09e9cf6656ca598c243345fe8d4828e520ade91787ffb8b9867db789b34ad67cef47b26ff86d a8ed8a235355948e0b04be080b7b3e145293accefb4704d1da9050796b2f6870516c1ebf77ae6a65359edcfd016c0f36 80e792d5ba24b8058f6d7291a2ec5cb68aab1e16e96d793128e86815631baf42c56b6205c19e25ce9727bd1fd6f9defb 816288c5d726b094e3fdf95cb8882f442c4d9d1101b92c7938a7dfd49bc50636d73ea1b05f75eb731c908c8fd8dee717 ae009128d128ba2e1519bfa7a0c01ed494a7d461c3aba60f8a301701fed61fe4e31d6c79ce189542ae51df91e73ce1b3 96a866d60a9007d05825c332476a83e869e15b11d7257172a67690ea9bd3efea44bf9c8d42191454eb04fcf110b16396 8b250a2a06419adb9b611e89f7f8f2990aa301949b533ad3bf17c4a61ab5f5be0b1d5e2b571864d13f1bb75805c7795d 8450f49facf2e620fa45ee90e1801178842d927a2a25fc6ed7ba99a4eec7ae40eebfee41028eaa84f107f4a777694976 91049080cf659c0985a22d1366e59191bb89663f922e8168b9b7d85c8a73d74a6d9dceefd855d3d858b493670c750581 a1e167aeb2008087f3195926f1985c0a459d6ec57237255b1473a96de4e2c1cf766127c862c7dc853a6909e67cb06cf7 b667c0d4e26e20698b07567358625d5f003839c92de8088e12dbd74a6f6a3156b4ea8d252c9ad62af5f6c4fec1cf6cc7 8e4b5e304c0b1b161ae3e4b68b5e3ac66c42acd7c1ee2458044f6527c508a93995e50894d72d57c1350f91afe72775ff 8c642640aa7915421cdc21fd639f88a42052b1cfa358ff7702e60793a92b7b5926dae15a0c8f8f59cd3013f01c159ba3 a356f35e713cfc283056bf539de54a21731e61efb4c47319f20de4a4b723d76a33b65f4a67d298b9ec5c2a1579418657 93ce204146ce95f484dc79c27919a16c9e3fc14a9111c6c63d44491158d5838117d20851cc3227a5e8ba6ccf79e77f39 b585664cbb9a84b52f89114e1cf0cf1171bea78a136dc1404ac88a11210b2debc3b7a55e702da93ff629095c134a295e b6dfd444ec7fdceb14c6328f26ca12c3f9fc4327d8d8c68948e92e7e61262b82d833a65a9e3af6353ffa832b6da25705 b4d4b8eb9ecfffe3f0d48fb4149c7b31aec1da7041ec03bd0750c52a2a7cbc3a7cfbf09d5bfdc56e3860826a62d0bb91 a4e248e3d61db52da9683fef188579c470d65e2df9064726847b1599fc774049ffdc6ef2ae578d5ed7874f1298ecdf69 a68a0fffc2e37d3183feb01b42234c0f4e510f9dc29d09c571e6da00fecad9da224cd0f31550070148667e226c4ca413 86adda2ffecb77236c18005051f31f9657a0d50fef2a1175dfda32e74d5d53df825c10f289eb0ad39df0c64fc9bc7729 998266d5c9c3764ed97d66fa9ed176af043999652bae19f0657c8328629d30af453230e3681c5a38e2f01e389ed8d825 a05261554d3c620af0c914cf27ab98f5d3593c33ab313c198e0c40d6c72022eb5943778cd4f73e9fe8383392a7004976 ad243fb3631bf90fedb9d679fd71fc0cf06bda028591ded2bd4c634ea7b3c2bd22eca2ab318fcdaa6c2cda1e63e1c57b 89b9859a04f903c95e97fb2951f01cc6418a2505eee0b5bc7266b4d33e01b69b9fe7dc56fa9ebb5856095be0925a422d a68d118343a5bbfbbab95ff9bfe53aeb7fdbaf16db983e6f4456366df2aa01fbdb6ee9901cb102fc7d2bd099be2f1f3e b49301f25d5a9dd2ec60ddb0b4b477291958487efea9e54dc0e4ef388f03b8bbadd13259d191f7a0b7513876767d8282 8b93df7fb4513f67749905fd43db78f7026589b704ebb9ea3255d0ad6415437799f40f02e07efccda1e6fd5e8cd0a721 ad88769ace96455da37c3c9019a9f523c694643be3f6b37b1e9dcc5053d1fe8e463abebdb1b3ef2f2fb801528a01c47c 80f0eb5dcbfaaf421bf59a8b9bd5245c4823c94510093e23e0b0534647fb5525a25ea3aeea0a927a1ee20c057f2c9234 b10ad82ea6a5aeabe345d00eb17910d6942b6862f7f3773c7d321194e67c9cced0b3310425662606634dcd7f8b976c04 82f6fd91f87822f6cc977808eeac77889f4a32fb0d618e784b2331263d0ffa820b3f70b069d32e0319c9e033ab75d3b4 9436d3dc6b5e25b1f695f8c6c1c553dab312ccace4dac3afddc141d3506467cd50cb04a49ea96ea7f5a8a7b0fc65ef37 8e0a9491651d52be8ebf4315fbbb410272f9a74b965d33b79ff1b9e1be3be59e43d9566773560e43280549c348e48f01 8809137e5d3a22400d6e645a9bd84e21c492371736c7e62c51cef50fee3aa7f2405724367a83fd051ff702d971167f67 b536a24f31a346de7f9863fc351fa602158404d2f94747eebe43abf1f21bf8f95a64146c02a4bec27b503f546789a388 b5cdf5a04fc12a0e0ef7545830061dff7fd8abea46e48fbe6235109e6c36ee6bffcb9529e2f3d0d701cf58bbfb6a4197 ab15377525753467d042b7931f66f862cbbb77464212c9aa72d4e5c04375ef55f619b3a446091c1ba1a3b5d9f05e538f 905a75b943ad017ff78ea6ddd1d28a45c7273ee1c2e5e3353685813793ead3370c09cabd903fcab9d8b1c6961372d486 8147df4324faddc02fb0896367a7647b719b6499a361aecfdd3a34296fa6768ad31c34f9e873fd1e683386c44651883e ac91d08570dd91f89d2e01dca67cdc83b640e20f073ea9f0734759c92182bb66c5d645f15ebd91ed705b66486ed2088d ac6295ef2513bbea7ef4cdcf37d280300c34e63c4b9704663d55891a61bf5c91b04cc1d202a3a0a7c4520c30edc277c7 b604be776a012095c0d4ebc77797dd8dec62a54c0559fb2185d7bac6b50d4e5fd471ac2d7f4523206d5d8178eabd9a87 80ead68def272ce3f57951145e71ed6dc26da98e5825ef439af577c0c5de766d4e39207f205d5d21db903d89f37bbb02 9950b4a830388c897158c7fe3921e2fe24beedc7c84e2024e8b92b9775f8f99593b54a86b8870ec5087734295ba06032 b89ba714adabf94e658a7d14ac8fc197376a416841c2a80e1a6dde4f438d5f747d1fb90b39e8ea435c59d6ecda13dea1 b0c78e7cc60bd05be46d48fbb0421a678c7f14b8d93730deb66fbe1647613b2c62b5075126d917047820c57fc3509cb9 a860c4acc5444e9ae987e8c93cb9a5f17d954d63c060cc616f724e26bc73d2c54cd36e0492d1fde173847278e55942ba 8fb8269c9d5c15428e8d45da1251e4c4a4b600d47da0caea29fef246854d8fb6acae86a8e6440d0c429d8dd9c2dfee0c 96c5d8eb6fd5c525b348ee4335d200139e437e4be83690af0f35b7f336a7cda8c6d2958647988b84da9f2dd7bbb7710b a7f62141c4346cc14e9823dc38ac7d587b0427022afc1498d12ee2c43f6ac3a82167057e670dd524b74137f8c3ceb56d 956aac50d06b46a3e94397f163f593f5010d366aa2d816c2205c7d0f47f90cf0f36c169e964f9bcf698d49182d47d91f b812899bcdc0e70d79ca729cb01104bf60e1357b9085a10f64f3ba9865d57e9abd0a505a502d4de07afb46f4d266be2f abce02c7e1372e25d40944dc9ece2904a8f59c8854c5f2875fe63ace8ce37d97881f4f9ab4f7bad070ec8e0daee58d3f 8fb13c515b2d6abb4e14ed753fad5cc36c3631dfe21a23d0f603aad719423dd5423157eefcbd9a9c6074e155b79eb38d a9ef67304dc297ab5af778cf8afa849eeac27db4b6978963e97b95ef7a8d3264d0d07775f728c298a2b6daed2ecf5053 a9b975520adb066e2ff2a4cde53284c23bc84261a22dc43b1634d99eff8e7892e46bb6e6da7319c9e72788aa9ea7a1ea a6eaea4ab4206294474d9b956d9d3188d558a5633de2bd05df0d3bac03dbcbe4ed85406349c1d2e660b77c6da1f5bf8c af4a19f77290dddee762e1e0d4bc9945aacea3f75756ae46cd3e58a8f74d1b5db73e4834687946b0f39191e32f2fed0c aafa6523f58f1a4cabc924c86d842816d606afeea21fa4b2b8b9573425810fdcc41c98888318e868f9c05e2be12178a3 8ef38fba0a3fa4ebe985239c8b759c22aaef0c57e6f39050a651c869487803b0d1e389c3d958fb5a7f37740f050ac69e b07dfc9f85913c608ca7596a2e361f05e4853fad00e796fd492d247de6414892ce160f627669b1ba933b6ad726415d4e 94da679ad1d78b2bff5283c938f17b2a7d6e9cbcdf59d340e6dfb652951c7a9e852ac0590f99cfee9631b9410f6f00ea 98a907c9c021a5b034d3720197c160a82c4b7146cb73d48efeed99b9d0c6b831812cf80ac7e19e85a676a8cd3ead72de adb746595466a12929019d0048cea33236b05c1229d2eba73b259a18a786f2bc3f05fc0598d8ce253cecb80bdf679aaf a2fbac016996d68f9027a157b0a3f6a336144a798d6113adfcda3a5d05b62c31f108f112aa915906aef22b7f83b9228b 81841dea1904406d1b6fa49b4b3f7f6cb40b7646cf44d36c9fa07e3dee29f8e47324b40d8356ddf653109673c3374e9b a3edbb8aac5e60c775775cbdb19067341b2e2530de48738e84c2c07151241ee31f0d8333bf20c2bc9dcb7b2e638a6b5e b8aa6890e22964828787ce86460d3a32f12a655bb5c28de500f2fcf6b61e3334640ec6ba96029a4912af0d18df4b4139 8ca43169f04243ad0fdb0152de17c60d9e31ee0ab520970fccd98590e05508821a183b4b367967e60d53c2c826ec5dbd b179fffd9df8c00486c5a8b9327d599f5a11745ef564f06e126849b06fe2f99273c81f65bc941efb0debaadfecbfec1c acf068f1c2b1926279cc82750ce21b0d6b0bfd0406f0d8bbfa959bd83935932957c7f6b8de318315bf0b75f6ee41a0f2 b97831da260919c856e9f71a41687f5979bc16f8a53b1037285b4a2f9ce93af5cfe70bf0ad484744827fb55c847b58eb aff50b0bd907383b0c241727af364fe084d021221bfb1b09fb6c1a7752eeba45d662493d590f1f182764b90b25f17906 aeeef044c14e3ad41e1235c9e816e1eb49087fd3abe877b89b3bade74459186126e160bb569bcd77779e701b19b5f71a 8483deb2b7001ca7c438fcdca8ca6aba96c9cbc4becfd9b16a6062705eae270011bcaedcae69bb54630d8c78129e57c7 aeee8d24be4ac0d9784c029e239fb5e64316ce29b88f47394cfaaa8bb966a72061bff72f99d02dc51c9705854686e77f 90ae09525a16bb2422169e15d6831c87968a14ebc0d1d27e11a759839c73c655b9d33ee5b12f275d6f440688146fbd2f a3a41fc7fefef101422465e506bea7f3ff23c26fe35f5732b86f5f2471fb93b37ebc339f84c6be1e8d22abc812c2e212 86f4b5293e8aea4af1f1fb05dcf99714cb3aff1cfc849b1bb73524061c921c9da9ad92579a852e1889da29d952f02fe5 8932ef39d4050a1e9dc0fd8afeaf159472d71c5c27f458c69d2730836606ea56e19c8c4febf2535f930d3260e9bc7637 86307b9f3696bb21c20e4558e30310389e7367803c353d437e9b696039a0ff054d9a4953b75237ab1d1dd6f71118c189 96e57730e683ef5b550c91de18b19ac73879f3e26234297db68d28747ed0953beb0f3913cfb720c602720bf9330685d8 b04a19ee70123782e47b238abde55baf60ac0c66292a998af0d14afc8bbeb1134e557b94cd17a020084631c09a0d3c02 829abc8718be8139569fcb2c398962f38f4201114d30e2b2fb23566f8a27a5c380f5605cec543415202a12ed859e33f6 a0744fa488c8fa92a722c5fc4ef5a47dfe824eccd87d26c8bab9c174cbb151d44b1b29082c48652f03d3177e5ec86001 81d4035ae9fd28bdcd78b135cb54955d3b685a527319df6ee7e904b8e6d796f5f5a5f5035ee1de750c4cb6050e452b9e b205e8c2ec24d7104fa0106c09ad34b5a912c1adef553fb718838dd627355993c2ec01055c11d00b2c75b68e9516d44b b12d09da7968fa7394e449624fc7174d1d76c069ccb03e140d4d87a2d3f6d1f7b9cfc930f0c80becc673406ebe63f08e b23752c158695da85048fdf38b395681cc0e8998630af8a9ed41efbda08c9964c2dc8ae6e53377264be4467d702c0de4 b0d84582fd73628d96b8c1ec96197697c41a963542451a2ade0890af0d33c7161d0f18e1a1ce2c168ca2dc1e9119d55e 8b877e618b469aa187632e410b125d2999d5738fd66d482000706b51fd904a0c7e7daa8c9b729fa33817bbc4154cba2a b1cfc8a7551b601723b937d497d01dec3ee7614c2bf13d430b1058d5ebc1406045009ff02c2ac15bf8cf16f860193d1e b6d9da84f97b21e13175bbb0b5cc8e79e88b470c87a3e115726c1bd98e0288526c58f3faaa8aa170ace0cd6a60852525 ad2e773c2d527671ca5fab7085dde4da31cd35f45d4315dd95d8893ff5fb900494dca08eccfc1a2fc7bf7c7fd2fcab97 8d5a79b34aeb761d4a0c73f09f02e9548e6d382c33ee6887a759ab05762b490b8a549ef2933c7e3a46415c154c0221c0 b6f2cbe81bd0a7298403be392f8456bed30aed7ef30216959357698f789affd2942ae5fbaf3f48ecebeb7c273b20cb57 b5b6c45d99cea7ce6a1dc134aff4a8f630f299b42bd59592a7592345f8cd35bcbee944e61b0723de732fcad6e4425b63 8077d64dfcb2418974e956ea6dbf8a4c05b25d2a025333ad7e2a379f1976dc036771403383a51bfa3476c9c619ef8bef ad2e0a9d479c77a5fb73b3613a177fdaad50dcb50fed50e756ba18164c153af30b07fb2565e80ff7469f1b0338b7b5de 81017d1d80a6b6df4e99d0d7f85a8180b5523e8fa2ea2672fddff604933f8a113cab27fce098dcb454d7d1f7ed266e04 852355479d68e76c7febf6dfe2ef8e80d575c0d3bd52c983803592021cfa898c571c0b884412c21e66f0dbfe03167b53 98e1bf8ad48421467c93b9f72b47dded7c41b4fcd36ea55ca43ab24b0d0b876f5a731f422579b7167c7138fad2121266 803369314abd5422019ed4b0ef652b4dbe97ef5a87b0ea373eec9628b64a12120b2c3d4eb53db405131ff786d14c7ac6 adf2613fc34f73e1160975c140e925ed84d254e03cc3bc7fc1d19957b499c9ba9d9e4c1639981b594a7095c0a52c6757 a2f6a68efdff6e4173c00692abcfdfcdaf6f8b62369afad3dafaae4f2f38c4860780b4624d185e20e4f4498b75b5fe94 8b1658aa0e119fb8401d486ed08d60240d26a8623ef9788e3b45ad09ae31259395b021bd16be395139cbb7149714e764 a7dd8bf21121285e00672ee8bb84e0cb39b2496fb53a26e35dfbca7f2b04e9a9ff9db15f53fe63fcbeafeb2deeaf2ca4 b6d8d709e44bc18f3b41d69608edce60c02bcba48d3b7e2fd420842657f0665a7343246dea149a25e8f3416284abae66 aaf744ca5e9bcb63e3e2939b7a1e96e4a93c88c76bec0cf4294dd7db95cdd3f6a7d92196e352d08680e2328bc4592899 84434b015a7c398d35f1ec71fce455d62ba4ed4f62da042ec31bb2b4db47073314354cd50bc322297a1cfe35138bf490 8d70b3a3cd9d5dfefdacfa418c0b775a112a47ce538d33a560a519660009c3f141fd6221c18539129e9c0acdaceeeb80 b8c6903412a800ec78a4c15f31c24385a267b0c0ece32fd31bbbb557fd70c3b2d60d8fc0f90fbd70f43baa1928ea30ba 8e391dd445ea06cabb433f057853f8159511b2f9bef41aed9ccd14e0a6fcd912bbaebd38fd5fb736cfde0fa34b7a4874 a40cd988f70613df32babbd1bbc2f1b29ff1ab0147b01161555a81d56c9621657999bcdb1df38485f687afc51d5d0f23 b6a008b4426b3d7b28ae04eee4698fc8ef6a35d89008ef5394da39ce582ce1a45dcfae9a33b90f6fa4237f3667803873 8987280debfb175c3b44a2f152ea82548e4f680966f1fcbee9bf7d714e31bf8080c33f52705ef3aeee70544b22516aba a78a51a2c11eea7680a5a0ae417a2981f8c69c396e06da621eadd7510a3664ade49d065617bec67b3de779548a4f4509 a4d9163f0a1bc048385e94d5e0bcafeee1b18f28eb23505623b9e8ef16f3df76408254dfbe790e45f2884198060d388d 83dcae2568a0c518793c0f6e38b42f9ceb50673d100b556a17ec8bd9faeec84afe50b8d72422c6b2356959667bb8e2de 874731941be4474b4576226e5906b5dee89fc9b56a9870dcc7289c1a7d494d345ba6aba31f7546a16f9963283c05f744 82c1cfab1f501189ac20147fc4631075dbf1abf9125b7d42fcb4f31cf73f3d6461b1bd08fdf6e45cc54bc08a7d5d51d1 b978228286f5d4a10ce027b6bea3021affcaa805340ca4b5192c69e8c56db59f48e4a14a284ec015f53baf97389f62b2 af125f4fdccd1c1b64fdffecb5ec7cf8c7392bbe476e1b89a5b5329c5ba4a526e58c11e72ab9de8a38d60af648d75adc 8411a41ec14295acab0d36389013535a80dfff6e024bffeb32fb3070762f61256419e8c51b2ad6de9dbe4f1e8e286912 8ea67a91112a41f9c65515cd496f4b0cdefa1400fc06568eef000c9eae6dc250fb7622eb3f2deca10b37287cd96fa463 8da99b6c55c31dee6a49aabb54da249d348a31d4416201a10c45a3b04b11e99d4ae9813632f0ee36c523b5cca62f6f49 8b44656341e039e2bd83a19c3bb9a88f6209482e274f8cd4f8557b728e5948dd80b5745f621b96f4562928689314e8c2 a02d424a615ba0dce8ed91f477e79852215a3a39d025059826fa278e7eebef19824b2a2844f5b3865a0f471b609a23f5 a1f115cebc3fff3bcf233da27cef19eae791660f155d088003460f75567a550bef0722885010ddc384acdeac635939dc b61a55ce9d143c17876776e064b58a10baf0ba13553c785c1e47f57b5f94c0cda8bc89d43d73386e57816c15b61a8ec8 b4073f47041e20a8e548c7fb00e07ba3b9056c34eb4ab63bb0e7b48f8e338e8b56a17611a1b5f4c03b352450b86f1d69 a7b1a07b213205b682fc5b6acb7e76fdf97b280c26621d8f3b76b7c1deb3511957da33a4e358c8e8f3d98b2a8855d67e b797e67c2670fbd9844e8a68c585f404b035dc14bd4ec75c3f95f932c777f9db5d5f5df7629164af488fc1213035cc5f 99618200797b945f595794d6468e5c618649554ad9ba896330f1cc844090eb956ae9fc23132912f9047085c5f0c3bf7b 81194aa1319abf534cb3927af9adfb178a99d0e3e8c99ab1105f1d3b4fed40ec2971caf1d6647acb0c8d681eca53097b 80673f18e4978dbc226a6cd4b128a1259d9a7f833879c6e2fbe24d69fef2c3c23a51a4f3e8d88fa4533434bbb0723661 8125bf6c7dbb2fb63aaa3f53283559f172c788223674adbeb6d5bd17cfe888e6b87a79aec774917f20ce911c1f85f8e7 884bcdb1878b14fc38adc9fb8b4dd0b3afde404fbeb664f26ddfebc81736018551f23e75ce4cfe4865f610bcd454fbd7 aec65c8d4be8316e98aa54888af01bc6703a0c5d04b69756ff39a0a947b66817ec59d76afe9f61a25749b5e890f03e02 aa457aaa1b014a4c5a8992847a187a23321bb43452c98745987d038e3b04046102ae859b7a8e980eea978a39d76a88ef a9832ee63b08e19123f719bfe2fe742125f32463efa966c7709a98ebfc65277670e9ea1fa2d2d78b96bdc7523b0c4c3e a87b6b1b7858f96d55064274f29fbde56067064962cf3c3e2ba3110b22ea633bc037a74d23543ce3307a46208855d74f 897cbe4ab68a753020fec732dfcc052c7ed9905342b5a6fe0aa25c631f9ad9b659e0ee75d46f0df6507b6720675ee28c 97c3b5f0d54c1fc45e79445c3ff30458959e406a069f5bbf7979d684195b4fa0406b87c1c008f4075bc9e602ed863152 921e65d582ea9322ddfad1c855331c3cac81f53c700b96db5305a643c084eb6793094e07944bfd41dc02c3b3cf671530 8f23ef1aca02a260a3b65d25b110f28d3bafca44727448c8f2d03c5e77eda620c1721b06681bd816ee6027664d76352a 946a89b132ec0795aea9ff9dde7b77e7feafffe6e4a2f093042a7e6c71cd6ab87ce0ca914a1b5fabad4e1f96a795f163 a01e2de9db33df6511172123ad6f7c64074237471df646b32dd9aff8c15278e2723108e4facaedca97e9f49503f8c792 99dcdcde45b2ea3f15279936feede5f7d3b63ca4972f335b0559c2fa6f9faabd8127aa892a36deb114357ca906553ed8 a3f8af37bfcf66b04d1896a4bd5d343f4733d4c3305369ac7e75a08f20f2004c10c642d2c7577f4e5c4d1f2cd851ac3b b7294d15a3d674a56099f97a1adc9e82c15e90832eaf1722df110fc2abc8634c51515e5ad8522015498a3753b1fa8c49 b4f27f5062ba7a04ea0048b3025b5e3d5b5d319a9e80310c808a5fb4e8e77b38c10a0f3172cb805cadbcc8bc66d36ec7 aefe5decee0ae2dc372cc6cf4217daf97c4c908d145f100f0daf1ccdfdf641c78432c2e473e7e4b77dcdf2d4c2bb05f0 acc84af7648a535ffd218c0cc95c8f7b092418c548815f1bafc286b1fe14f6ccb51b2044db3bff864d0bb70e88604084 84d8e3dac0df6a22beb03742e1d4af684f139f07e2ea0f7fb27fc2d7d4f1e89b5e89f71af32ff115ed5e6092133535f0 8ada001e1a03a823c4c056f636e77adc0f9dc08689d28de0d99e0feecab5db13abf37b41ec268dbdb42c75419a046c68 87dac6c798d1744dff81d8bc3e0e04f3c9bf260e811685ddb9a9a8d6eda73927439b344f9a818d2103fad633de5a4a17 ad9929a7d8a7d5d5954e48281a87e5c84f67e19110d73296b9989a09c76767a57a8115629239ffb4d99dfdf9c52ef6d9 81ac7cbeef8ec35a5c3b61cc887080c29e6cd3e08af37e45830d17400dbacfb374dd07bf370b979828c3875b2027d5c6 97f92c9182953b7e10f7a1bbb6b5b5c40b8275eb5a6eec1e29874c4712814749aa8c409651380216e1ff01d7b8511041 a09794d0bbe7db013045d3fd857c1544fe6231d21afa3495fa300371f6301a3a0f4b8ea175b281503dd06078ff371ae4 839bb58d320aa08116dd387a57a2b9bd9efc89c4cdfd82d0e47a00cabe644631d09be5436bd485df3b61b75ddf81a3ef b1cdaa344f783757e8b9c1f84421da3c5be4c69f019a8fd4c1aa5bf1a63e8970c99e35c22cf3b48a0e6738bc6ba7ce8d 92af68e3216c78998208fb24b5ba0e645d0d3f5e28222b805668d7e9cdd6c033d3b22fd6df4c2d745d7f910d133cd226 87640a4ea4e605e2204e5232b29a6c1c31152d83547eef14122cb76a0da52b8653801af48455a3ed713b9dcfee7b1ef1 8147e5bf0c8f4731155ca0517ef3fae5a32b4d5d2d98ed0007b23893d8dbb7f8a1199c50c1750c2fa7c9cebe594b1bb0 a76b4473c63c3ab6103c729afd2482822e4150f3155af39983b0ff0766c71cb622455ce6304e23853661eaa322219d18 b3e2f05ca551bc3adec0067e4034aaffd72e0b64ac18ae25452c996927976c6727966e26d213b032521889be2170800d a8414cd14cb3be658e9e0004ce511ef7063439b1cbc3166a11de030613fde4b59caad4e91d426927863c55382afbf476 b2f0f8ab99f4d0ea785ac84fdbc00b20217b1df59b30b51d9d209d489d53b69dd5d82cdacc16fd1dd15c3a4001595f50 8b2025d5fd658c9bbed619f3e3f6ac8efe7aeff8aa9401bd66a7ceb0062c44b353608ca073f95be99204f0a913bb77eb 94a46bc5a87291b42024b2137e623c70115b9c6b196604106bfbfa20f3f56ac7779763f56b580190d3cb2f1c648cada1 aca9355545118d0769cacf69c4b23d6d68d229cd8f68f1bc0c847c05569c5af6bbbd8c4dceb637b4a6b3b5c83841bf5e b0731992cab87c7116406b283a84707a34838bfa3284b0f6082dfabeaf41c5ac2b0ddc1b420547a1b0955aee92de2dc0 b671f77588c0f69f6830a5b28e7d07ed161b81fa9791bb3a24aae6638e3aa5e186df74978a82549c370c18ebee04d4f0 b5621ed841780f3e6681d880a76cf519cdd20d35197b112eeaa686764d57b5dfa78ffe1a294b6bc76b6e3949cd2a2369 afeba2524659d00caecf089645611553187a6ed7102050f6dd20f5a19bed08ac7065912d88371ee06242897d58d652a4 b78bfb83d44ced14a20135804aba3f00128c3ce1f302e95567ce4097b0d973414153fb305b9f156882a5a0554bf25973 98510aede95d26b1adf214053eae051ffaf24894e2fa37961a91d0ff5392dd09388196648d95b73e90bd88f2587cc4bf b35c682d49c295946b9f120fbc47b95abd9ee86d294abb003a92139fb825b509209562575015856a270eb3eea86397a7 b9641bf685571dd9c478dd2033a1f1b11cd3a662b26502c78595863b8e536a189674a9a85f7a253453ebfd1b99fbd841 b2ad37036a59b1c9b8457972665720a6868422ed8157b6810a9c0783006103be34ab732d7aeb8629653edd18fd0f1717 af0920cff05179a3896ea6ea322c39adf91ada5bc40fe3f6fb1b1b4e121e907c904bbaa8ca00468b3749f3da144d71f3 8e269672818ef1e2f9e0c8aa65c84442fcd9151d74bb8e870cee8c0e3fe24526e1a5388b430cef47b67f79b4e4056bcc aa29a16fe00ea3d143b1032b1dd26b8ce638f37f95c085c7e777e8e2784bd724bd5c38b1583c61a6ec7c451dd78fd3fb 87452b7435911cc5f513b0c81b15aa04972ecbe3d7bbd0a5d676c96a8a311301c0e07fac925c53a350b46fbd3d4d0fc1 869a81c351096f47748e41566ae7b77a454b1cdfaa41d34a5742f80df38fbf5cbb08924b6fdff58e3b18f05c62bbbbb1 8b7bc1b0486300981147a40a449ada9a41afc06d735cce8bf0fab3ee94ba2e2ea57b1397e3cd31bc295352beb8334ef7 93e93fc41adb2df279d95654921b4c2edf0d293dab58d0afefb221f777349ef88d0985b3447e3b935954a81f1580a92c 970fa7cdca8324faf3e62348bb50d78f580b4f43f2e1c11bd8382d48d0074a3c55c6407203a0c9cb1c5f2163ba421ef4 924983929e608d27e4a36d4ed919297869e3c64de51aca794d32d6e90aea546bf898d98ceca28a0b2187734821b78504 8d395332529c703d943d68415d443332b5c1342ca9d9a59bfa8bd4ab63e93358c4b0dde6ce1f2e8ea9dc8f52ad7ebd95 80200dda853e588256599e7f905add5d5ee7c74272780317694fbae39318ae9be05d5bcd7b20cf460069743f3d4ef240 a287d51d6359c9ef7c7ac1b20e479ce7d0146dba5606397bd04b7a622cec642508d5b45d51b31de71f9763595b6ac88e a320396c075175d6599225cf2e1de8c7cab549f6316c07feb0f6eaa21f06b2dd29ab14fbdf2af4543b4890ec0fd08a4d b1e9fe230418d20368691058adcbbe30011bab3000422f0371015ff8bd09c60fb5fa85d18550d35b1c900977ca48f58b 9718fc26a51783b971744933f20490e9b5cd9162f86b84788c4c5217f5409e37b5a39d628b18e5b35a757acf67596321 a0cf81fdb161f4f1b419c5e4caa36d4bdca2325f0cd25b119a30178016f171bd6fb88403e4e3aec026c4089f180d540e 8ab1e36bd04625ee794ef04c4dcb8e004d61aceb2b62438377f49ad95dcf025ba25eb799280004941e555bf7172af6fe 9257b9e3d14d37fc7efae49b0c68d36eaac546035f4a2654d566b3ce1b2c4564cbb03dc8ec66efceb768559a8a507a18 945d1123b839637ab5154a1972c3c83a0ff34a3b1a3465de6ef0416b1950f649869a3ef88d7f1036648ee385265ce2df 81449639d708860fc0229c94f754f7262e8a3c7f67960ff12dfd15df95f57a9ffcee2013e81978b7703dd42bd5d0816f a865481deaae5a690fd53892791e5fa729db283b75a525a11cdfee1ce17e8e7f0b449d25f20b3c1b43da128dbdf98a8b 98766812a65fcd25b853546e3bba618a3edc9fd61510e4f8ab60c038a7fa50d197abeec8776109df0f2119be9445ad00 b1b8dd5379d903dc41d74e999b1ab693607a0d2905692f4fb96adf08f738e5d31f9d00df28ccb8b5856145ca552c3e3c 99d20be7b511bec78a8ed03c207aa4aa9097ba39d85e18f1b8d52f65431ab7e9a773c7b9ac3e8d8b25458bc91bd00703 b1b7c3563fe8cb33c7d3e0b89d00bdd13e86452ff507c2e69db7b3af06f247f139155396e9b0278753310dc63940a10b b3dc9c08451b1de7c9969b1e47574bffff50490f4a16c51e12390195d9e9c72f794790caf7b0a835d64e01fec995d3ac aaaa4761a00022ede0809d7063d3532b7bfae90ff16f45e17a340ad4ebaa2fbac40728ccc5fbe36a67ab0e707566c5dc 8319a1903314eab01f5442d2aee6ae9c3f6edfda0d9a88b416d0f874d7d1d05d08bb482102f8ca70a4fa34836d0840c1 932949a6e9edfec344932a74d4f81eec3667ece1e8b8ca840ce07ffd4b5d6d8f01657c764d64ac1b9190f876b136490e 904db1568128487e312fe629dd8bb920cecafd3bb9cad8b63e269ae0129f2f5c80cd82f0d81e7feca9835c3945a72d28 a17280693d30dcd43c85de8f6b02d5f30cb9097274ad680cede1ef105c903615b4c40f3c6aaca478642de324972514e0 8d5f76e093aee71d0cdeb017fdfcb13bd068039746de90690ce150a0bfdbe7ddc4d539df0f82c2d2890a40b191900594 96fa1f2196a3883cdd73c66d28403cbbb58f6a939a3697ee0d308d8a076393cbb4be86255af986869230ee410c01bcfa a8b74438dc5cabd70a91bf25601af915c4418d074327a9b01e0190c27d3922c89bb9b41e0b366e82e313edda8f21983d ac9fdc1a9b2e3ff379eb2370979372e13c4177bf4574f1490fadf05a7073e6d61e703e2d8eed9ce984aba317d411e219 a45a6c9b958169f2f8df70143e6ac3e2f6f969a4eed6fd9f1c620711bc2454739bb69f0094079464790c5429c0d8aedd 8901cbdd1009864386577842c1e3d37835fddf834064d9613b4559ea9aef3084204e1f863c4306f874141f4374f449ff b6c582161691e3635536686825be9c4d7399d668a7675738417e0363e064dfd28acdbd8dbc9e34c1dab8a1990f1f0eba 89e89ddaf3cacc78428f3168549c161283ca8337345750667c98212717b21e7d994eae4e45bbddacc832a18df1d79276 84be275627eed8e1a73c7af8a20cee1ef5cc568cfeea7ec323d7f91b44e9653e9aeed47c1896a8240b99dde545f0e1fa a779a54ab4f40228f6e2539595fb8d509b70aab7c19e1928c1be69ec1dc19285c3898cf15e5f8b8bc725e13af177fe17 92e2a49d2b9b36349d442283b17d46f8f9bf5932c34223015ce62d2f285e7363b2c12232be4a838b5b6cf08e694c094c 8b4e28c6f3f36caa2cfb82ba88066c830f8017bd35608b077143dff236f3181230166f5a5c02fa0e5272297331726aed 85fd77d46162ffac4b8adb25baff0eb0512a53a3d01638b3a376ea34702279ce21c8e7d8884308c03e00c9bcc1a9fd29 aad5e46916ff1be29009b595d1d8fa160cc7aa01c7fbf3a68f445c87615790dcab1fcdbdceda533d182b6541f09f2f73 948df7654726250dae393325addd3c0a20431c81f00470962190335ea4b6d9f7463d6f308cda46b92084c1f24390b1da 8f577474dea132676504376c5542b730b6604fe3d965eaa194659fd11c52233bd0b11ab62e198c0f442327ff1c00e501 ae2f1001546db3e0c19700adad997cd9f765fe7a51a502cbcd9a2a07a3a5db79c8f603e05cf96d80b688cb6c9b6cd3ae 953b68e5d9561088dd20406ea7fb6894cba33868a38ace38fc30b5813140cb15dd6dd2171befae5b4df2e4a9658889d8 86c52901655ff11419b084a04da8fc3596eae59d81d3461601c0baff59ba59e3d1dd0b7ce719e741a3e97c013e898579 b9a72dd5eff73f9912a28b55de073568efb3eb0241a10b77a2bfd4f30c2aa4fbfe0c89eb345c9f07fb725660873cb515 8e7353f5f2932e4ffd95811caf46c9bd1a53643c27eb41a4ebd211f230955cd71a8b27e17cfe8aa708d8514c0de67a66 a096b8e66312a92fb10839ebe60189a8d1bd34dff55f7dfae85e4d2f53a1a4a88211c19fc84494f066358ddce82be131 931c5cd82719d76596832b007969b5f75d65cffabb41b9dac7910300db677c1309abe77eeb9837a68c760bb72013b73a 8ba10f5118d778085122065b55dd1918fddb650cce7854d15a8f0da747da44d7b12d44fc29ad7dc38f174be803db74c6 8c971deec679372a328587d91fd24ab91043e936ca709c333453d7afd43ee256d08c71cb89f0ab0e89ae119831df6d86 a2ac28a58034fbd8fd518f409221bad0efec52670880f202e09c0530e2aabc2171ed95e99891790596ffad163d86c110 b3354e3dfa8068aba4f3741152b9204baa4e342c1cc77e6dd1419cbaf8da1d118be605846b8609e997d6a62a11f3423a a12ab65a213c9d95c24865fddc2dffe0cf9fc527dd6bcdacc1bd7271e79929a4ab3427a231f4f49d0530474e6cbc88f9 90afd65b7e6973f8aafbe74da0f42441840d3c93bd69bc1bec8fa56824e7ca97ad1b427c8a85da7d588469bd4ccc50c3 a09175940c59489bac3d3da3a4091270d9118948cbbdd57f2bcc63fbf45b8010651c801d3e58dccf42733ce1d6b446a3 a843bbf286e3cecc1fe370ff1bcf5f1001bc2e95b34246625ff50d48ee62343e82fba2d25b8a4bd5f7b5ffe90920efa2 a3c4d1003219157fdbee2707ce07afa6c2a64ae8e450182c307ed7f070024071f30b12c4b0032960ff913c74e73a9976 b24af3f68d66f825d06fc3ff94fcccebe28b1a0d4ba29c48d3a3c953b9bf7ae6707f193fef25e2dcbd2b74e483c774f0 b0f657f7723184ef7d7e4381143f1ac8020d8c6c6f2dcbebb0eaf9870d61a81f2d452596503311e46d1b38f625d4756b b90091004fc8f6205c51bec68547ac82dba0f5525631e7632cf6efe54eecd9020729fbee6105d1b8012402d3b79c54aa 8e3fa187713c60eb0a416d6900a894cdf81e6b6b69dae0bb64f6287f3c3f030cfa85c665f7aace1eab4937f380b8f728 879bf0784ccf6725c9cd1ea8c49fde31c91c605de1ea664a33c2ce24c277ee45d20b66309f98d989acb2ff3b77e13101 af3f3a3ddc4e11abd627d5aef8adffa91c25df5f0c68b4d2b5d51e7d9af3395ba4f6f7ae2325a6672847e1ecc6cad628 973e667289e796d3a40f072e6fea575a9b371a9997cf8961677f8dd934619ddc47c1a3efe91bae9ef95acb11a8fe6d09 afa81c5606de82f46b93f4bb6db3fc0670f4e0d1091388b138a66b3827322d95a56168c951c30831d59eeadc227500bd b83eff77db5b4c18574662942eb36f6261c59f655f8a9c3d3731412d0f257c8e80aacc995c4b2303058a1ba32522a434 912e5ac9234b9445be8260393ff08e4859a7a385e800b74d1534eeb971f58f74cfb518dfdb89f8705d89fbf721439129 ab27c8ece4a51d23e22c2e22efa43487c941139b37ea1182e96efb54ca4809d8245eae0ebe8ba94f0ed4457896fe11b1 a6630585d104a745bc79dba266d9292bbdad346449c8ee8140a5e6e8a6194411df9cdbf3d3ef83468a536d4f052e9335 8b8c128244da48e7fec641a882d0005a2d05c7138d86a293e6a0a97c76bf632b44767d0ce44663c975e7f9f9679e25e3 87dbcaca67351a4e7d2297d7cdba4796d12f58857e7ee4abd0645563577ff33544a44cd84e50b3a3b420d6998de9b57c b859ba43df259d7f8e7fac70bfd7aae546d57a5dc90e107b174a95bf7fd3cf00f740c4434848e69b2a7e6061f66c1ef1 99d6e20978fefc40c6d310187eb2ad3a39296f189ee122ed64d74f81033c3069d44f7a9d3988a1df635b609603a17272 99a5ddf3420cc0c92b21f71a805245608d4995ead447d8f73a670d26d33e26920d5f07bfe1f6230bd5f15978055b4253 b936ac0944d3c5e4b494f48f158000abb37b80b5c763f77fe856398c664b0f1ddbcc0a9a2a672db9278f08b4bafbe2ec b4af85fbf4040e35a686dd016adec037c99b47cc2e4dfccaf7870ee9e8c97bff30f3035992def2a9d4af323c0b3af8ae a5ee32b8bd5f8fa9000da4da0bf00565659a43285393d37080b555d0166bde64d87317b2eab2d48a0e7b287caa989be2 894d4ad58ecb1c9ebc4f5a97407082e56cb7358d7a881ba7da72321c5027498454f2c7fa2bd5f67a4b11d38c7f14344a 965be9eeaa0d450dacc1b1cc2fbf0d5d4b0dd188f2c89aaa9260e7307a2a1eb22db6092fccb662269e9a1abfc547cabb 805893c424aec206260c1c2d2509d2cb9e67ee528bd5179a8417a667aa216a3f318ed118b50d28da18e36c01f0805e3f 972d7040d4963b35260ef0cc37cd01746f1a2a87cedc0dc7b0ee7e838c9e4573784ea743f563b5267eb3905d4fa961ba 8c7156991d4c2e561888feaecf501f721b4174e7d14109e9deeac5a9d748301c07e11fb2b04b09799f0d34ff42cb77d1 894722ac35af3d507e81d737d21e16c5ba04686f8f004aa75934aae5e17acd3e065b96e229eb011c2f34096f4c62048b 81237937c247c88e8e31e2c72412189fe59c1daf65c5513489d86cf29ee922c0bb08e5f7890f09f4ada7e5262083d266 8cf62cda2fe0d9a6b42aa2a1c483f4ad26378c7cc2c2d1510a76df7560b07dba8528b33aaacb15f7f20b9d4c7c9f61f6 aaf0921fb3e1920eee5d0acb59dcc268b42f4b435d60d25d30357edd7dd758d035919691bd15311d85489dfa2e5ee696 92cec07be2247ef42002ebcaf65ec855611b8e893a5675796f2225f55412201b0bf9f4761924d0c8377b9f131e09e39f 8e514a62ac1e91773d99588415426c97ad63e917c10d762fe06ace5277a5c3bf3730e4b9e5d116f8493b9ab8687b70e3 83932df2d923a5052468a3ea87f7b55c6a80ede3594046ee4fe233046570921822bc16555b92ba6aeabaef9b1dc0805a a2b5bfb249de3472113fd3f35bfabf3c21d5609da62a27ea6aab5f309c9068d94bc58ba03efb4ec11be06306d59e60e8 8106cf3ebe6f0507be8c6e8d137987315fe3689ecb75bb27980f36ba5efac504baccea0e7603549b6d126beccc278804 a73ee70b6fe8c082443972102c453fc0e386852476cf22224fc0bfe554735c12f96037fbf10922795f4502c4f052b5f4 932b27e175440169958504f3ed6400e7d6dcd5e716c19dcd0f15c56c04503ed133d5a993e111c016f141e32d68b29886 96f7ce4595318e0b4a6b368f788ff82226aac676aed4ace343867f751de414453a9aaaabef6e6224ce5aedc3d5cf77c4 a950c1e3bc9a14484997013d44d876374b939af437ae7c821c131fb886063ee9fe7214a25a0c7084f0b07b99412eff75 a9dba3886ed6855303106a1bdd26010f294218684e1c178afcfea3f37a2f04fd01724a31d82de3449046617e3507a115 87a2f776b32a6b550cf3ceeaf78db02819be74968d228b1d14e0d74a1cdf994bb500b7abef6619455e98d728701fac5c 8cd887b07e335edc0b27e6a660cebb64d210741395be431d79d570139687b056557159407459799a8197b6079644f666 b81a61fce00588909c13a90c1caa150f15788786af443ff60ce654b57147601f7e70b95659e01f470334a220b547611b 8aebc51141544c5f3d3b99422250424b9800031a8fdfbf22c430907a3a446fecaa2392105d66d64b1c8e847240da4a6a 90db7dc12baa02f3f86d3edadf9434e2b9318d4f6f0eca08276b765dbb38d8eb0d08be2fe70adf2bf16ceda5db08d3ca aa1839894152d548cc6ad963de20fb6fcc843bc9af2a2bf967c63626b8ad19e900894d6106265f38f3afccca317c22f0 848e27b741496988a582515c0c8847b2bfc6a001259396cdeea1e1b1d2828ca3a626693a1bf4adf3a3d7f8b1fa3d75fe a0aa11754d4ee136ac3ca609b17bcae77758763b2016544ca7921dddedd8aafcc7ad5f2b337c8bf53084eb8e43ea41fb b8713b7aa1c112178195fdcc9b7024f46e6bc04c4e76c41abe620aa265287809200d98eaed6c9703fa97e81d6964f0ec 8605b5b33309e9ea6823542b85383c496794b8481c577497aaf99ba90496e794dce405be615bf92c7b6361460e6b82e3 826fa34faa7f83e063a7bf172addfc07badabada59cfc6604fdf481d29085251c0a67a1355b2cbd374e2975934b84cb6 b45d131082dc16fa53af010d43eefb79200dc23d2f3ee26af95ac6a5cebc49c84a9ed293e534ed16ff3ef9a4a25456ec 91bd6ce3c5396a7a0de489e49f0cdf6dce1cd2d0be7a410326423c3185bd1125ce1e610768be7f15f4e44b62f8834fc3 903ffbe3d33fbf106c01c727dc3a385201a67ded70d4df623934882f69a3a96c909b027a124f3d70cb072b0046a149e8 b405359db9d9ef4821a181b440ef2918c240595141d861d19a85867a5afa74d2972d22c988775eab441e734700bae4a3 8abb756d027233c83751910a832b0ef4d28d100077f1c5d656720c94906f91d85dd0ea94b1cc0ed95b692efee14c786e a78ee77ab476a41a3454160ba7ca4085d8b1f7057c63e76db8b07cf20afdeddd2250cd00771a6329133bb4ad48ccc20a a41810271d8c37197aa9b3dfcefe3498e42f5978d3f3d59defff4676d6402d8575b40683834f184f143b6cfbfc859b3a 90c24a0750242660bcc6d487358a3cc015730538a0a8beb00ad5ac2ef33cb8ca8a62121e50bec8f3d2f43900f8e3134a 8b96c39695d864ef5796941754978a1fd612b369f6b77fe5ae6587beac936ee28190af8f0a3822b63060af35e49a5c8b acde2548883d0e63c0fc257bb9dadd919aba60a985b69ebcfa1bca78acca42fc1322ec30bcc8e7c188818f858d04ad33 895c86ae9ff8d95f2707d4838a3bc8ddb05b2611f0476f014b9c150d0e8332bc73285037a747426f09ac8179ba4e19fc 821761fe406e18bd86fa9ca9db99d382cd3b5c70c456f471fa3706d57763d147706304c75d54f51ce8f3115aa26e59d9 a803a80e3e8f47dc3c59ea23eafdec017458eac648b360cd42cbd075e0dde6f6f450b48c7646fb1e178c04f82ae51a12 91f40e1b6f588bd592829ce937996452c40be0fd6c43793c607866701ac6a8c7227e0891d45c6e7b1599382b0a3fbdbb 9408246d996a634a58689337f2526dfb3ba9ffef1d3ff91c32aa8cbbed900861ef25d6477308b67d76491edfcc70d65e a492325a427f3df1c9c690c5b553daa8ac41f62f5ae55f425539222bacf959e2f67afabbba1732e120d3e7a6dcdf7049 8fd0c3e15477cae228613a171b6e9ec29ddc63ef74854d99b638adeffe39f89f34346a42851e8445e855a9f2bbef0f57 b735ed01fafa051004dbaad5e8c9e2faca8f6049ef9b590f256ea4d75b04594af12764ad4e6031735eae36f83179db93 a7d35f43fca06c86b3425dcb68a87186834ba9740664fd657915771beca4cdc0fa2fc9b4c2e9d9bdad8ec33543ddfa59 a1156e71e2db1b17df5da28747c88e091bd687bfee59d89096437ab4dc9a543fe5c5272d5023d72adbaab397a6fc94d1 ab06a58bd81b33a411bade8d8c5232d38fadc2e38507159edea6e2e104b8ebd65ca02b05335118f691d44197b847a4dd 848b67a10f1e6ff8f5c228f226ef2ffeb67fb8f50925fc94cbb588d61896d9dc79726959e649898fd3354fe3ff7b7ee3 aa933397361f32b388edcf832f0db172a38e756b34d5f7a4a050fa7325058006c22cede26ee27917e8f1b0f301792bd7 89e49e7f02cfaae4a4b9c4180c9f6559d76e3a45774955859d4147970b1470dac37bdc9aedca1c32a20b045049161590 adc1825d5ab94fc719f25d8c9773f4d518134ed88eb13ac33cb910b2be3523ef9ef88d9e4aea2418b806e20108317bf6 96c4b444c8a023da644f3a343ebeeed19a8392d2ce175992461451c318a54273b76c3574d8f2dceda2947ddd34d1a674 8aa7e97e87c8c5b29bbd51a6d30396a6be1fb82b716ef83800f2c36d5b85467ade7e0f59d2db82c310fa92a9265f0b03 9146c32d99f02c3a6f764dcd9b4807f1585f528ac69dc4f84e4380f6fda4f9d5057c375671d51e7aca2b2b4140e83da0 a10760a533d9bc57536bcaf65f080302086aa50225437efd64e176841544711828c23a15c49c0dd1f357d3f10722ab72 acb0811777e17f7ae7aaba5f6fce81b759c067a4908730916195a2505c7450d0e6e2194c2ef0f241090597d58e70de47 b24f161e9bcdbad56665e2490b5e4c7768390d4668cd69a04ed74739062dbe832636dd33cda89e9b0afa8c77e93fc641 96b4d01106b831868a88ef016500ef2fa42d0ce87a37ca8ca4194a92a22c113edfe04eb2ca037329f3c1acc635148f55 aebbb95fb4f7adcc8e7a217aeb73f9e037cbb873d08c1cd9d68c6c6834511adf1af8b44567fee84327599bdcb734dedb a9bd8b17300532fb94d028659bcafbe7bbdf32f8945baf5db4cfaa1bac09e57c94cad0ba046b4514044b8fe81ea8596d a5557cbda599857c512533e7cadcf27bf8444daa0602aa7499cafc1cf1cf21f9d16429915db7485f0e9a1b5046cf01c5 8810307c40bc661c478a9747ebf2a30e5a5ead942d1ac0418db36ba5db0709c476f7d19685cabe6959e33ec1f3bff914 8829b741f41f2c32e10b252d9338deb486dba2f23996a44cf1dd888ad967a589d51329be34d764139f372a1043f6c2e5 a6b4728d18857c5fa082fa67bfb3b1d801e76b251b1e211a19c87cea5fe7ce757f943c85071f7a03a718388cd5690e95 86da7f397e2533cd487f962ae58e87bea2cd50af70ef2df9ea0f29f70b5843cde664d30ec207ab84fc817f3851277e02 8085776ef4ac6d42ab85b9d9135ecc6380720efd274f966544eeedf4684028197de76ecab919fa5414302597e1962bca b05a065c733033d223ba13d16baa7a97bd8c8b8b1f0e59a9bdd36ee17e9922d48eb39bd180c168b122088a77f0bf321a a89343fe44a93023dcc7ef71bd3bcb6786f68e1885ad260edc56a52445d34757f476395ba7ad35437f89bc573c7618dc a114a9cd6105b524f3969c69faa2e09afe21753a93361a296f9e0e3b4e3e63726ddf2e6bfd3ddc046043e50bd44e539e 8a5611fec539cf681c05636bb580f29acc06f628bb012649ffa41ea6c1521194a5643d5dd843f09b6eb2c3bdb4d41acd ade247c4011ec73ec90b72f35afa59a999e64ba5a7e664a4b30874fea53ba6a14a76a41b58a5f891a20d019e5f091bdb 905b5d96df388160ade1ffe210d0c6d1979081bc3de3b8d93ac0d677cc2fc2dc1ef6dcd49d3947055514292a3fa2932e a9520796ca9fccd11b7524d866507f731f0f88976f0de04286e68d7cf6dbd192d0d269f0cd60fd3d34011a9fe9e144c2 989a1edf4d7dae811eb57a865c8e64297837ffeeaae6ee6ac3af0f1044f023f1ca552bf00f1642491f0f0f20e820632e 879c8e63713f4935ed6e020559e140ea3073ced79d3096c152c430141272117b4fd9a9fc3eef012e81262df02ea14bd7 95074738ac1540c0312274333acd1ecad9c5509fee883c4d9295fa8d8200f6e637c363de395f9fa612f05c0dc58fae88 a770e4fc595269eb806b113ab3187ea75c8f96b57bf9fcfaf535f3eedc1d4d7e6285a20990575de0ff09f62d06ed0692 81283e5dfb6423439ff513eca1cc316941d196df8da2d1069d2d0b63f5289e630af2fd4119bc0144c002d33313372dab abd1b108e743887b78f698f2aba9d5492f87a22868d1351d705d93a1084fd45be67170c68a6e18b07f400d9a01cda8c2 8509c3f67b92908cea8144f4e2a71631a66a61ac3547601c788907e52e380e5fe8ae4110aed95d13c67d3bcdd5b55a61 8fa5a790ec5cce6d4114128c295390120869aac5490a82feebd3c37a167120df2e7fdfaf2a4050a7dfebf48fb093212f 944753e1ea7d8bc727d46a7702077dc01dc0c6574e8263a16579b57ee155ca5901f71bb347a01a9a922b329d3ff75135 b46bc1fd4590b7a6275e20036d247c5909fc549c78e95b64ae7ed96e3b05bb044840f19f7650ebfe7008ba09fa83c3c9 b1e47e4d88e59a06c465348c6cc4181d40f45b91e5e883966d370c26622c328415c6144aa2f61ddb88ec752482c550ca 8bd4f8e293e3f1815c7e67167618fb3b0ea76424bc0985908957cfcede36109378e41b4d89555b8c2541b4c447e00461 a70589a867b2bfb63d0106083d58475d506637148549ed35c83f14e5c8de996e1b1f3447ecc80cf5cd134ef4db9d2fb6 8048b80ba6131d07370162724127b0f7cb17fa7f71855e55e5a75bd0a9e4fd71b0d0ea2d16ec98858e458528df8d06b5 97326cb94bae7530f4ec3235770c5a7ba042759e789d91c31fedbd979e3c0e6a2c69e2af3c1979c6fe0094274dbd53ce a18e9c1d3eabd62af4e31a4b8e08494f4167fd4598c95d0123f39c46c53f9e93f76615900246e81a286c782ac37c569f 80309c59d4522b15aba617cd3c6238663e8b1c7ad84456346082c8f281140fc0edf9caa19de411c7e7fb809ca4fa3f4d 8e450c0990e2f65923f252311623038899eeff7b5c2da85b3a224e0ef7132588b291b782d53c477ecb70f34501466178 87843f96f41484e254e754c681a65681b9ae5c96c292140368743df9e60f7e2ada58ca2bb95fa39abe064b2ebf21eeba 858e8d5bf2a1cf26d8af5036b28b831d450a446026f58a1734b696c18f1f41482796b91cab0e5b443dd2f0b9cffa52b4 99627dd6bad8c05c5904cd23aa667d664da846496dbbb8452705c4ec01e1480e9c7295504a5a8529e4a0c842306b038d b64b33256c18b2c886a837a0c0730fdfe73befb0e2796207c4dc592c5a33cd51f8c2ef47c584dd5773abf9ce9c1b0082 944f6da2a1546f0bfc4d98c3e73c79e935e33d208b6be26b0b5f8df6d0e3b74a5bda649853b99281bd3a3ec799a7dd04 a266d165435784d4e884640155e35b2a911b3f89e1e715986de419b166a36a341ba724877d80583fa3da566f6a828971 adff2698409d0756e78c534032ee926560c13d578cb178d5073172d049ebbce32a92692f7e2033ec781b9b0d894ddce0 a91933f110756c699c28bf9e24fd405bf432002a28c4349e0ca995528e56a5a2d101b8d78afa90a178ff1a9bf2ba515c 8e77839c0eb4da2d01e4053912cd823eddffbdc6b9c42199fba707ca6ab49fc324288b57be959fbfb11d59085d49324a aa124517c76692036c737e987f27c2660514e12a953e63ff4bcb269dd18fc44dae95e282de8444bed09639ef6577af88 b285deae99688f1bd80f338772472fa2b35e68887c7eb52c4ef30fc733812444c5cd110050275ad999d5a9b57f782911 8877b0fa85b44ef31f50bdb70b879fa6df5eb1940e2b304fd0c8f08abb65f3118fa3d97ff93919038c1e452fb1160334 8a89f3b50dcbca655024542ca7d93df17deff5c7d01c7da2bdb69e76b3e0b4490d85c800fb3debb4b0b4d20c9527f7ad b7e5dbe36e985354ac2f4ab7730fea01b850af00767a6c4d8ee72e884d0fe539bb81f2e34638fcf5d07b7c8d605f4c06 a85a1d78f6d4f9d5d83ec0f2a426708342d4e4a5d15625554e8452f6a843d9aa4db0c7e68caebdaf767c5b3a6a6b2124 a518078a9dac63c5bf511b21ed8e50d1ccede27ebfe9d240937be813f5ee56aef93dc3bf7c08606be1e6172f13f352ce 91144eedebda4d1ad801654ef4ecd46683489b177ba1de7259f7dd8242c8c1700e15938e06c5d29aa69f4660564209a0 a16c4657bc29d1d3271f507847b5a4f6401cee4ad35583ad6b7a68e6c2b9b462d77b5dd359fd88ea91ce93bb99130173 85b855778f4b506880a2833b8468871c700440a87112fa6a83fd3ddb7e294b3a232d045dc37dfc7100b36f910d93c2ae 8d86bb149d31bfbf1fabcae1b8183d19087fd601c3826a72a95d2f9cedb8bb0203d1136a754aa2dd61f84b7f515acfa9 acfe7264eee24e14e9f95251cbcfdd7e7f7112955a1972058444df3c2d2a1070627baefada3574ebd39600f7f2ea7595 906bd14ecca20ac4ae44bff77cc94eb5a4ecc61eba130de9838e066e8766ed3b58705f32c650e1e222b3100691b3806b 8f2cbc7b8593c4be941dd01b80dc406fe9dfdf813ef87df911763f644f6309d659ea9e3830ff9155e21b195fc3c01c57 a68eb15ed78fae0060c6d20852db78f31bebb59d4ddc3c5bdd9a38dbe4efa99141b311473033ff8f8ea23af219bc8125 a95cb76c9d23fc478c7e8a73161f2ff409c1e28a2624c7d5e026e3cee9e488f22225a0c5907264545a73e83260e3a4ec b76f90e55fa37c9e2732fd6eba890dd9f1958c1a3e990bd0ce26055e22fe422d6f0bcc57a8a9890585717f0479180905 b80cc95f365fabd9602ec370ca67aa4fb1219a46e44adf039d63c432e786835bb6b80756b38f80d0864ecb80e4acb453 b753c86c82d98a5b04e89de8d005f513f5ea5ea5cf281a561d881ed9ad9d9a4be5febb6438e0dba3d377a7509d839df0 a664733f3b902fac4d1a65ea0d479bb2b54a4f0e2140ed258570da2e5907746e2ac173ace9120d8de4a5e29657ae6e05 9479722da1a53446e2559bb0e70c4e5bf3f86c0ce478eede6f686db23be97fcd496f00a9e174ceb89ab27f80621f9b80 b707fd21b75a8d244d8d578f3302d1b32bb2d09f2bd5247dff638d8b8b678c87d4feab83fe275c5553720a059d403836 93214c16831c6e1d6e5a1266f09f435bbed5030c3c4c96794b38d4a70871782002e558d960778e4465b1ff296ffedad8 8648f84e18eb63dad624e5fa0e7a28af2ee6d47c28f191be0918c412bf24b5460c04bf2b7a127c472914a0741843f78b b67f61e75d6b773a6b58b847d87084b94f3cdac3daa7bef75c2238903a84250355a986b158ff96ba276ca13a6035fdd6 ae9b094b7b5359ee4239d0858d3755a51aba19fce8ad82b0936cca48017523319c3309409ea6e9883a41bece2077e4d8 8d1d8e1fba8cebd7a0e1effea785a35e16b1a10842f43e2b161d75add11eccf8f942d2ae91c20eef6c1a0c813731ea9a b82bd387458e3603782d5e2dec32ae03890a3fc156d7138d953f98eff4200de27c224f626e3648e80cd3dfc684c4790f a6dd02a89ad1c84e25e91176c26355e21a01b126c1df4d22546159dab9d502dbc69bc0d793a017c1456516e4aa5fa53f a9ab74a5c5459b8500beb0ad13e9cfe2656e966dc9b4f3f98bec7588023b4ddebf74e4fc722d30423f639f4ee1b2587f b03e5f33ab7ecec12cbc547038d3fa4f7ea0437e571891c39660c38d148212d191be29e04eb2dc001b674219b7a15a9c 925df4fc6e898ca55090ad1a8f756cc5014167a042affda5b24896eeb6aac408545134920586a8e1a2b997de9758b78a 98c8580fb56ed329fad9665bdf5b1676934ddfb701a339cc52c2c051e006f8202e1b2b0f5de01127c2cacf3b84deb384 afc3765d374c60fac209abd976fe2c6f03ce5cc5c392f664bb8fac01be6d5a6e6251ac5fb54cfcd73e3b2db6af587cbb 8e7e98fb5a0b5b50d1a64a411f216c6738baaca97e06d1eba1c561e5c52809b9dab1da9f378b5f7d56a01af077e4f8cf b724bf90309651afb2c5babaa62dc6eac2b8a565701520fe0508cee937f4f7b6f483fc164b15d4be4e29414ce5d3c7d4 9665160e7bf73c94f956ecb8ba8c46fe43ae55c354ce36da40ccc7594beae21d48d9c34d1af15228c42d062a84353a0c 8600ab3aa86b408ee6e477c55572573ed8cfb23689bbdadf9fccb00161b921ec66427d9988763a7009b823fa79f8a187 b0d8d19fd1022e7bc628d456b9bd1a2584dce504eb0bf0802bdb1abd7a069abbeeccdb97ce688f3f84a229342dbc1c33 8f447d5e5a65bb4b717d6939cbd06485b1d9870fe43d12f2da93ca3bb636133a96e49f46d2658b6c59f0436d4eede857 b94e327d408d8553a54e263f6daa5f150f9067364ded7406dcb5c32db3c2dffd81d466ee65378db78d1c90bc20b08ab3 b58c02781b74ef6f57f9d0714a96161d6bfa04aa758473fb4d67cc02094cd0c0f29d0527c37679a62b98771420cf638b 8cfa0a687ea51561713e928271c43324b938aa11bb90f7ffaa0e4a779b3e98899f2af59364ce67b73a46a88748c76efa 95d6d39c814c5362df69116558d81ce6f1c65fb400fc62de037f670d85f23f392c1451d43341c59bc342bc31842c8582 af888b384c52d9e04e4db6c4e507c2037eb5857e9bcc33acf84fc3a02d93cbde8cce32141fce9f5fec715b5f24d56356 a7822bbc3c236fd58bd978f0fc15fe0b60933a0c953db6436a233441219418090ae0c07c490a6548e319029771cdaba7 8c53729f750922e5eb461774be8851a3f40fe42eed170881cc8024d590bf0a161d861f5c967144d15cdcdc3dc6b5cf88 a052a25a4aeab0d5bb79bc92a6ae14b5ad07d1baca73f4f6684ccecfc7ea69bc21eadeb9510452fdba116c0502dd698f 923946b83d37f60555dbac99f141f5a232728c6eb819a37e568c8c6e4d9e97a4229fb75d1de7e9d81f3356f69e6d36f1 8cab82cf7e415b64a63bd272fe514d8b1fa03ba29852ec8ef04e9c73d02a2b0d12092a8937756fdec02d27c8080fb125 b1123314852495e8d2789260e7b3c6f3e38cb068a47bdf54ed05f963258d8bcabaa36ccbea095ba008e07a2678ec85a7 a685b779514961e2652155af805996ceb15fb45c7af89c5896f161cac18e07b78c9776047c95b196362c9ad5430bcb22 b734dd88f6cc6329c1cb0316c08ade03369a11dc33191086c6a177cf24540c7ceee8199b7afa86c344d78d513f828e81 b0bf492fb136ecdb602c37636ed4deef44560ab752c0af5080a79c9f76a1f954eba60a0bf6ba8bd7b8cac21848c29741 a5c74682323e85ac20f912ab9c1d6e1b9246c4c829dca40c8a7d58ec07ea0ad3524be30623f351269552f49b65a1245c 837403b9cf830fb33ecc11a7c8433e07745973c36acdeb3fc9ea8f7d8d690d462e1250b7410f79f2f4180fe8f3962a4f b03d64b944d49c83608f2c5b9c14070c025f7568c4c33d4eeb1da31d07f0bc5897e498b35b50d557ee129f0c3c68e254 827272aab8bf757e2483156e00fbebe1093a58070dd3af9855bbf946c7abfb9c8a850a6a8acda8c620902f391f968b8f 84c4eb863a865282d321302d06b362f8bd11c2bb0090f90ebffedd3eb3e7af704cff00d39a6d48cbea4262942e95200b b044eb91653dc55dce75c8d636308a5a0dae1298de4382d318e934140a21ca90e8a210e06fdf93aadbbeab1c2ef3904a a8c08955a4378522e09a351ecb21b54025a90f2936b974068e80862803e7da2b5380c4b83b4b4aad0409df8d6c8cc0cb a763a5fb32bd6cb7d7c6199041f429782deacac22b6a8467077fab68824dd69343ebca63a11004c637b9cb3129dbf493 8c44c8afa9a623f05c2e2aba12e381abdb6753bb494da81f238452f24c758c0a0d517982f3999d2537b7279d381625ed 8613f47fda577cd3bda7c99b80cf4b2dd40699edfd3df78acb5e456dd41fd0773bc8da6c5e8cbf726a519b9fb7646ccc b21a30d49d7e1c52068482b837a4475568d0923d38e813cea429c1000b5f79b8905b08f6db237e2eccf7ef3e29848162 b9bdf4915f3fbb8d84cdfd0deedf2c9dc5b14f52bf299ef5dca2f816988e66322df078da2c54b934b69728fd3bef40b5 993b45f389f55eba8e5ba1042d9a87242c383a066cbf19bc871b090abe04de9ff6c1438cb091875d21b8c10fac51db58 a85a95d14633d52d499727f3939979a498c154fd7ebb444b08f637b32c1caf5cca5e933a2f5d94f26851ae162707b77d b9874c7c4be1c88a9646e0c2f467cd76bc21765b5ab85d551305f5ec0b4419e39d90703d4ac1bb01feb3b160517e97b7 ad6771177fc78812904c90594712956357de1533a07fec3082ba707f19c5866596d624efc3e11773b3100547d8f6c202 a79f31921134f7197f79c43a4b5d5b86736a8d3ad5af1bdf4ad8789c2bfe1c905199c5e9f21e9f446247224f82b334f8 a7f1b6c45321222a350a86543162c6e4e3d2a7c2dce41aeb94c42c02418f0892dbd70c31700245d78c4d125163b2cd5e 92abafe3ec9dbe55c193fb69042500067eb8f776e9bf0f1cb5ab8eb12e3d34986d1204136856fb115c12784c3b8dea6e 89bc761238a4d989006ca5af5303c910c584fe7e6f22aa9f65f0718a1bc171e452c43695e9f5a591725e870770c0eceb aa0e44c2b006a27d35e8087779411ba2f9f1966a0f5646ff6871bcf63a8b1a4a7638751b94c9b9798ccd491c940bc53f 8736fe82862b8106e7fdab7b5a964d87ec291a74b8eb1cb5a6c046a648c1b686064ef3d52297043b8940bfe870c712f8 956a3def1942f05144d8e9c3a82fd2d3610064b53b9eefde3d5594a8f705bf8f6849eb2c22181796beffeba43cc74ee4 af27416d00cf97d5a1f4a1b6b51c010884cceca294f1151c3b684a3f83c3c8a3c30771df1166d833cbddf6c873c400c3 aac3b8dca2336fc4ffc63c362df461289e4bbd3418c621bde6c581d3ecedf66e2b3e523d4db39e3d8ba014577bf85efd 94c3a8167f62074e5b28c2bffe4b6ce645439a9a0c5da3ca1b3ee956590a465d6f84a8a4dbbe9070ffbd6bbc734e4d62 95e23ba6986d25ed4451215da05bd72c5491528271726d79a94c8cb16aef1c85b190d6c5b8a3a1191c7cafbab1dccf0c 953e3dadb5ad68f7de31ac09692948655d174fe16d88b96930ef35b331da7f1dbc4c17863cd07b4ec3135b5205891a27 915d018f18b5d63cb3301c2bb5c6e85e75a88ba80663c964d06575b6bacbbe59139d030b218ce0998271d5b28c00b26d 8c871ba3dd138a908b2f7effeea0e71df096b23e0dd47cab10b9762b250abfd1221da94a8ee884e05bdf02271fb85a04 96bad5c6ebc3080ecbe337409ae398bbeada651221c42a43ea3b7c08c21841ddbcfde544c9b8d4772de6f2ce92c0b963 b5dbcd0b1c44c62108841558ec0a48df4b327a741e208c38b1c052321eda6e6ad01af71d49dfcdd445ab6fa6f0c34e6d 97dba59219b69e8aef2659d1f10bbea98d74aefff1f6451de3f41be39acbac0122b8ff58b02e90554469e88911ec3547 b7e5682ec306478be4858296f5d03364a61f3260636a4242f984d351a02e8723378496beb30c4ca22def9c9ca193ea70 9656a7a3df4d11df3d8bc35930dff70a5e78a488ca57bba20bb06814fc390fc6c7cb3f39b22134992aad196cced577de 8b269695aa63eb56d0324ba984279dc4c88e565321f1d61d553622bd4f1910d5eff68393d3a830eb924472bd478c2aa3 9177bcd04b28c87bc0440268b4c8995c6790cad6039594971b2c177f0e197055231e776927d3fa30d98fb897a2ba401f ae0e943973482001c4f214b9da82e1c27e38aa254d0555e016095c537c835d3702bc2de5c67b234ab151e02b3b7a43a6 82fc719a7d38bf4787fe1888019ad89fbf29beb951d2fece8686d2beb9119d0c8c6d13bc598748c72c70d73d488140ca b716dc66f87eb16b95df8066877353962d91bf98cf7346a7f27056c2a4956fb65e55cb512af278783887ab269e91cd76 81d58cd8bc6657362d724b966321cd29a1b5cdc4601a49fa06e07e1ad13b05e9f387ca4f053ed42396c508cd065c5219 b32ad0280df6651c27bb6ddbdc61d5eb8246722140a2e29c02b8b52127de57a970e1ded5c2a67f9491ae9667349f4c46 b68a2eb64cc43f423be8985b1a068e3814b0d6217837fb8fbfd9c786db9cca91885c86899c50a1242040b53bf304ced9 85887515d4e371eabb81194cbc070e0c422179e01dbda050b359bd5870449c7950e6b3947b7a4a0eb68199341cc89fc3 ac5fff3c27dfbab78eb8aad37ac31cc747a82401ebf3644a4f4f5aa98d37b8bf3b3f4bd8a3428b32a127c25c9e19d239 86fceaa6fbf8913553a9e1e907fcb1f1986d5e401a7eafd353beefd1899d571454fea96ff5b2a21254d9fb693ec94951 b6778bb296d3f0de2531b67d36fdbfa21475be0ca48b9dfcc38f396c41b557823735ed0b583e525a2bae1fe06e04058c 898088babeb5b9866537d6489f7514524c118704abd66b54210dc40a1c1ddb0a1edf7fe0b6e0db53b836f1828ecf939e b27854364b97274765f0fb8d1f80d3660d469785d1b68da05e2bd1e4b8cbbe04304804d4c8aabb44cf030eba6c496510 8c55bbf3603dc11cb78b6395ccbc01e08afcef13611f7c52956b7a65ccf9c70551bff3ae274367200be9fc2d5cb26506 947726f73cd6281cd448d94f21d3b91b96de7ad3ff039f9153befbb5f172db9f53cacb4f88c80a3db26e6a0f7a846eb0 a7b733a05e97528812d71cecb4f638a90d51acf6b8fcbc054787d6deb7e2595b7b8d1cbe1aa09d78375b5e684a2019bc 8d5ca6d161341461544c533314fe0a6655cde032c2d96f0e4ea7e41098b8b39fa075d38e2d8c74e2d0308f250d6cf353 b960e9f081393e2260b41f988935285586a26657a3d00b0692ea85420373b9f279b2f1bb2da2caae72dd2e314045f1bd 852a49c7388c10821b387c6d51617add97ba72485f52be95d347bac44c638c92e9c6a44ba0d32afc4d59178a497d944a 8412162a65147e1334ad5af512982b2b48eef565682b3f3e0bbe93fbc5e1103db9375a0c486bdb1b2c57e4cb3a8e7851 8f52c3eb5d4f1e1e82cfd2b291d4910195427603b796f6c311deb35ef14a01a57a9e6cad39619ad108f3e86f384f9e1c 88d221088f2bf0103c53e44d0d96cd7881ec2b0a965db9121a47481771a8b796edd5ac23c4f9c208a171dab301f7d3bb b49c3235e8b3617ed08a1891b9e2bcb33dbdacceb94ca96330555b7e00904fe6a749ced9312b8634f88bcb4e76f91cb1 a85834215e32f284d6dfb0cbfd97f6cffc7b9d354e8f8126d54598bb42d7f858a2b914cf84fa664069632db2ff89a332 aa3d48eb483c6120c27d9b3e3d0178c1c942632ff54b69f5b3cfbc6ad4ff5b2b9ce6eb771fd1eea8edf4a74c97027265 a446cfded353cdd9487783b45846402b973cdeddf87e2bf10cf4661610fff35743cc25e8d3b5771dcedfb46b018a5d18 80998377b3b393ef3073f1a655ad9d1e34980750e9a5cfb95f53a221b053ddb4d6985747217e9c920735b0c851d7551f a35ac469790fac6b8b07b486f36d0c02421a5f74ea2f0a20ffc5da8b622ac45dfccabfb737efa6e1689b4bd908234536 8fb1f6d8e9c463b16ac1d0f36e04544320d5a482dd6ffaec90ea0f02b4611aaca984828bf67f84dcc3506b69af0a00a1 b6e818d61aea62c5ed39c0a22ccbb327178feebdabda0c9927aa1549d2c5bb0637785c4aed2a6d9a7b4989fa8634c64a b4e7208d16018bf67caafe996d436113eac619732e3f529a6efb7e6f094d8ebea55b7be0e122be075770f5957b6ea6f0 b691d38b552befac61f6d367287c38d01fec73b7f2efdb6713ca30314a37fb7c177eb111fe6bee657f2681014e07630a 9817587e418e6e7e8e97ae27067f17b55d25dfb14e98f63f530620c855d9a348c9fa571c8508e2741f902f8b9fdc0c5c b6a6e5ca779ba140bf1d84cd5394ede8262f7479637ec0087a4b152243a1774ba916d8115ce759a3bebd1b409de5f2fc b53d1c84ad766ff794bf497db3228efd2cc8ed5fc1958d89c1126efdff361610ecb45ea8e329b39035ab00a66c1259c7 adc31333c507c8e0f4aa2934fcdca57fd9c786722a50dbd5404e129541f7ac182cc7373bf14e1e4e06e6cf94b31b90eb a82b7fde4642d982d95cec669efee140ad797a2442c7f6620580527d163accbf021b893446cbb8038ea82fe25b15d029 91f7acf8a8903979afa281646fdecb54aa4d2ed905748e156e92f0910de268fa29d67107d40863935d677d1de8039be2 86fea71c6d43a7d93216a92fc24dfce8521fd4534a9558b33762d002081247867a6eff54cad7116023277fb4049403ad 8ae5369a7f9f4c91f3be44b98089efd9c97c08f5bb4cd8b3150c115ecd86288fa0865a046a489c782973a111eb93966e b6fb9e829aa2c81c2d9eac72bb2fd7f3a08e0cd763532c2ce3287444d33cf48b3621f205e9603ec58525934b61a795a9 83e35ca808d84e41fc92115e9f6e283e928c3a614e6dfc48fe78c33b6411262e7bfa731eadb1e1937bc03cff60032e1d 832fca5196c95098ad47b7d24ba2f9d042e1c73ad2273edd1c2ce36386796ccc26e8567847697f3fcc2a0536a2a2087a 8fdb7038bc8f462ab2b76bf7053362f9c030019f1b6105cf42219a4e620ecc961e3eacb16a8e581a562a97f1418b0128 8d3a5a404b51b1ad8ce3b23970e0d5cc57b573922341008e3a952a1dd24a135e19e55b79d86a70cfd82e1c0e9630f874 ba00c025c1c21c57c03cdfc0bfd094b35422281ff0a64b68b240617aa58c6b18800af5f2047d3ff9068bbe987d6c7980 b468f0dd51964b3806b0aa04f3fe28a035e8f5567fc7d27555be33d02701a838b8dbfe1348b6422c4eac46d2c75c40c7 8a73a18c97da9958903c38584b08d0e7e26993a5d9b068a5e0e1ee0d8a873942745cf795f94f7a3d3ba88790a9fbb2f6 953a0a40c2c8102723736854d13b228698c14a02d85c8d2e61db1a768019ac305faf0d5db62ac976430ce087a5b20f1e 8998219da6b34f657cb8a621c890a52cb98c2bc0f26f26e2af666eebeadadc5e8bdf4f830a91d04aca8ce186190152c8 8941e08c3155ad432236ed05460420a05dd0aaab30477493ffb364b14c00ea5b9183d30d3442b6321d2d20c36e4f5c7e 93f293ff7fb56cf5b03aee6f3ad2ad78444398ed5b3be56d7bf5b56b5aa5a2b980d13895dd57a5726d1b067c20cc55e2 84a16f313e3f75e31824f58d19ab24c6611fb4c75140a7cadc3c166f68819547c1d0ff7f7d13f5d8ae30dff1d80e2aa4 b6e3e830b15039d3e28b08f5465bb089eade11ee3bd80afe39e010df7db1fcf0c56d698717677a41ddbc91eeaf6544d3 95e928e6dfff51351281568ae72da7d1edeb6e9fe01f30af0499e7505ba35a22b5bb919d41bb809a432dce83f3977663 aabeeb60ca46f9b0232ff82ea7766dcab8cc5aaf9d23539f30174f9486640bc9312868ca493b59b314519fc399973e47 b393a11e957d0bbb3ecf617b075b5906a3450b348e62916c04791b366f0a7397cccd6648440ac544bc30526e1f95aad8 abb5bfc3964a6d246da60bd809d0ea6daf4f8222efdc12ceb6730194e85f413ee7eb03bae300abf7ea900dbbc3d08971 96c1bd1d1d216a4bfbcf000c123f296c0d31e1684e9e3884c14df23bf528c8d599f82bb98fcea491716b617216a8e0be 92d1e570a56f1741fd9f3d9f488cc336421c6256c14a08d340a63720be49b0029e3780e3e193a2e22bf66cc652fa22a3 8769c08551e3a730e46f8e5d0db9cf38e565a001dfb50db3c30fa7fa0e98b19438edc23c6e03c8c144581b720d7b33a4 b850bd67fdf5d77d9288680b2f6b3bc0f210580447fb6c404eb01139a43fccb7ed20051999ae2323ea5a58de9676bfb4 80285da7a0aaf72c4528a137182d89a4db22a446e6c4a488cf3411937f4e83f7b00ec7549b0b4417682e283f91225dfe 80520368a80b97d80feb09dbc6908096c40ff7120f415702c1614d7112b0b57f6729581c71f4a3ce794ac959a46494ff 9817b4c27a490b1cd5a6337e7bc7e8005fa075dd980c6bf075ddfa46cd51cc307ad1d9f24e613b762a20fc6c877eab41 ad66bda1a3034ec5e420b78107896ecf36126ce3ef9705163db259072dfa438c6107717a33572272062b9f60cb89557c 876114ef078c2915288e29c9abe6b0ad6a756b5ee2930ba1b8a17257f3f0557602d1225e8aa41ce8606af71ada2a971b aa3d6cde4c3b9d3d5d0c77a33e67f182a3e1cf89b0921423b2024236171955b34afc52b1f25b1dad9da9b001371771d7 984d3e3a72412d290e3459339757af7520d1739c7af0cbcf659c71999328db44f407d92e8a69fea11625612c49eac927 ae890d0faf5bd3280dcad20a5f90e23a206661be8842375fea2ab22aadc500849ffbc52fe743b376d46bb926cedae6a6 b1f231f3f4d710c3fe80099faeb56dac67c1baf53b8fe67a9920fe4f90e52cb9a4bf19211249a6456613b28efe337f18 8caa54b418ba609d16520af3dff2e96d5f2eeb162c065a1763beb926547b2cfb3ae41d738db2c5681a9bc8bc9e6b9a1a 932157ff56c5ac29cf6cf44f450c882b3acfbb9f43d12d118da3d6256bde4e6eb3183aea304ab6967f37baa718ffec99 9360bed8fc5b6aac36aa69473040689bfc30411d20ffb7275ef39b9ff5789f9055d149383ce9f0f7709a1f9d683adbfe 98b5b33209068335da72782179d0c7aeeabe94b5560a19d72088fe8323e56db7ce65debe37a97536b6b8a0ca3b840b61 89a385c11be40064160b030a1bb28c3921fc8078522618a238c7ea0f86f34717ed9af9b4e2e20f5128e5f7fc66ad841e b615703cbc64b4192990cc7e4903b74aed6a0076ce113b59ef7719197ffa46fb29eb78ca56b49873487432d0625c0faa 90f0d77abae9d3ad73a218e5ccec505ad108ea098451461567ae8ef9661606ca8e78df53b5d628b20b7037bd24622330 92e0e7cc4dfadc5fa0ee6da0c8de0493030db6e54ba0317f52f232a6708b732068b6077bd13a17eb7eb40b88368085b5 a24dad20094985bfccc6df1343506ed3bf9dcbdf4b2085a87627a5d71f7568db067304e465f8f380c5c88e8a27291a01 8629a45a10619354c84bdc2f6c42f540eab5a46f53f2ae11970433d7a2aef007897590bf31dfba1c921614c6d6fe1687 84ac64040d4206f82b08c771f375da4b7d752e41d2aa0da20ce845f6bc1b880a855d3ee966bca19b8ec327b4b43e7f0e 9608e6050c25996c052509f43f24a85cdf184135f46eaac520a9a6e78e0d44a6cee50ebc054048c708aefde8cd6651c2 a32032b0e0d7cc35e480c328f315327f9385adb102a708c9ba637878deb74582ae26bb6d6e5f8c9e3a839b0e0154b82a b7e3c78d63acc6564a49e9f00b0a820b56d4f37a2374af1f7f1d016268011df9e7af0670ed2b0eee961f15aa948328dd 8b88bfdd353acc91ad0d308a43e5fb40da22c228f2fe093c6d6904d70f69c6203f56636ed898b05df51d33f1095ef609 b1d7a430c51fc857af55047683fc18c453b013527196c5e1bf776819a3dffca802217e9249ae03f084e2ea03ad67fcc2 80558e28a819ddb5e72e97c54be0f57c173ccf78038d360d190b7f1350a19577b8e3f43fa2f7bf113a228cd3b965b2e4 b4b2ec44e746c00dfc5661ba2514930934fc805cdc29adc531c02d28ce3cc754414b0485d4ee593232cd1175f357ad66 b57cee5d32835f76572330f61ccd25a203f0e4a7e5053d32965db283aad92f287645533e8e615137208383ec51b1fd99 930256086b419a8a6581c52590d0dbd9f8a3564c79424198fca3866b786df2f6098a18c50dc4abd20853a7184b1ce15d 8e75fd01181cffcd618a983492390f486e8c889972a46c1f34a4e1b38f384e8e4efc7e3c18533aa2057da9f9623e2238 b375d927dd988429f9e2764e5943916131092c394fce13b311baa10f34b023dd3571da02553176091a0738cc23771b9a b9e28e4c0d0477518034d000e32464852e6951c8db6f64ccdb1d2566f5094716213fbf2fc0e29ac88d0e79f725e3c926 963981e99392afbd2b8318d5a6b2b0cc69c7f2f2f13f4b38dddbfedb2b0eaf0584aecfcbda20a4c60789c15d77970a58 a7804e1977aa77c263c7c001afa6cf568032dea940e350d6a58ce4614f1a91c13ae1c78bfea740c229dce2444556976a 8787204177da3cde6d35cd3497fa8774d244f9faa9f4bd91b636a613a32ce2ea0326378cf9c4cf475e73ef751b355c4b 895aeef46a07152a04ec812f1aa1fd431389fa0ef6c6e96a5b833e70ea14073bc9984757a8ee456dbec9788e74e6f0ca 8d17f0e5826783440d1f0ec868003510a4d9952bfe4a638e44a36d94482ac18ba70ef7ff773bdf7a3b62d714dcf0fcba 810d5e36b31310b2e054a666d3b3f7ed16dfcb1765532d87ca2a3920316f0187303c27dd113db145d47e8961062a6c03 b4e2fb48ae04cf8580bb6a28095076c9b95e5f13122b917328f334d4ac8a8648ce442919e28319a40148987350ab5303 b85549a313544fa1eb3ceb78473b7d3d717fc85b808de7b79db7dbd0af838ebb020622a7503f1cbacab688dddb648f84 80665adee057088eae827a5fe904ec3ad77d8843cdce0322d535e0659b4abc74a4d7ddd8a94c27f2def5c34ac2c038ee ad72fc19c2ce99b5b717e35528fe7d3ac8add340b02ebeb4889d9a94c32f312a0b45ea84d21c54f84cc40ee4958b72e1 99d530c843dff89a47a5ee8c87303ab18f8a82b0d5b808fca050354b35da5c5a5594d55921c6362d6cc917d75bdc18dc 99c7286c293e1be21c5b2a669dfdfcd5aa587105d2886fc5a8eaf8984da4e907f7d7b8c2362d64a4f1621b077a2a08a0 b4a39e1a9ed5d80c9563c3ca3fadf76f5478c63a98f4346a61b930c9c733e002f3ff02bc16abfdb53d776184cc3f87ba 9378ea71b941979404c92d01fb70b33fa68d085bf15d60eb1c9fc2b5fcdee6379f5583389a3660a756a50019a2f19a69 b68e17344a2bc45b8e2e19466b86dc139afefbf9bad2e2e28276a725099ebac7f5763f3cb52002261e3abe45ef51eb1a 819e64dc412b2d194d693b9b3157c1070a226af35c629837df145ea12ad52fa8eabd65b025a63c1fb0726207a58cdde8 a5e8ff8748419466ff6df5d389125f3d46aedacf44eaf12cbfe2f68d218c7d5ab6de4a8279d13aecc25f3b1d98230894 91560d54a9715cfda9cf7133ae51c432d0bf7fcbaeb468004994e6838bfc5ddcfa30e4e780667d0c4c0376780b083017 ae8adb3309cc89d79a55ff74f129bb311fe4f5351a8b87600a87e0c3ba60825f71fccf67eadcf7e4b243c619417540fd 8d92cc1a6baa7bfa96fbce9940e7187b3d142f1888bdcb09bb5c8abf63355e9fb942ac4b4819d9be0e0e822d3e8e2e08 a6e8b79fdd90c34735bb8fbef02165ccbe55ea726dc203b15e7a015bf311c9cac56efd84d221cc55eaa710ee749dbdfe a409b151de37bddf39ce5f8aa3def60ee91d6f03ddd533fce9bf7bdbeac618cc982c4f1ffbf6e302b8353d8f28f8c479 b9693975ef82171b3b9fc318ca296e4fe6110b26cbdfd653418f7754563fa7b6e22d64f8025ee4243483fa321572bfe4 a039ebe0d9ee4a03ade08e2104ffd7169975b224061924cca2aae71464d250851e9f5f6f6cb288b5bf15df9e252712a6 b27834db422395bd330e53736a001341ce02c9b148c277dabac67dc422741bfa983c28d47c27e8214cd861f2bad8c6f6 a2bafaf4e2daf629fd27d7d5ac09fb5efc930ff2ae610f37519808683aa583fe1c6f37207daf73de1d8a164f79a0c981 b856cee1cfcf5e50db9af4ab0aed3db2f43c936eaea369b5bba65582f61f383c285efbda97b1c068c5d230cbe94f7722 a61ab205554c0550fa267e46a3d454cd1b0a631646b3df140623ff1bfffaa118e9abe6b62814968cc2a506e9c03ea9a0 8c78edcd106377b9cbdfa2abd5278724aed0d9e4ae5869b5d2b568fdabb7804c953bae96294fcc70ef3cd52ba2cbe4ed 8570869a9bbf6cc84966545a36586a60be4d694839f367b73dfc40b5f623fc4e246b39b9a3090694aa2e17e652d07fd1 a905b82c4da8d866a894da72315a95dc98faa3c7b3d809aef18f3b2be4801e736a1b79a406179e8cac8f74d27e71ac52 a8eb8679ff1a64908515f6720ff69434cb33d63aeb22d565fde506618908b1d37585e3bd4d044fd0838b55787af06b42 af4d86b2fbd1684a657dffe4210321a71e6ae560c144d44668d1f324dc9630e98348c3d444622a689327c1a59cc169dd 80359c6eab16954559ab0e6a1fee9a0526c45d3cae1a371159a2e3aa9b893afdc3a785c9559a5fd9cd8cd774234bf819 8d4e5ff81eb5d17bbe8ae6416538ca51a9427ce142b311f5cbb14febbbbb9c1ffc6489fd625b9266264c366c12a9d997 92e181c66489c5fa063ba2a1a354b6fd3439b8b4365a8c90e42e169bfaa1fb5766bf3e0fe804399d18bc8fbcafb5c3b1 a9ddf229360a095393885083716cb69c819b2d7cfb100e459c2e6beb999ff04446d1e4a0534832ae3b178cbe29f4f1d3 8e085ef7d919302a1cc797857b75cff194bdbc1c5216434fa808c3dea0cf666f39d9b00f6d12b409693d7a9bd50a912c 916dc4dc89e5e6acf69e4485a09fc66968f9b292eac61a146df1b750aa3da2425a0743d492179f90a543a0d4cd72c980 b9cbf17e32c43d7863150d4811b974882da338cf0ed1313765b431b89457021dd1e421eeaa52840ef00551bb630962dc a6fb875786daec1a91484481787093d8d691dd07e15c9c0c6ae0404bf9dc26083ed15d03c6d3fe03e29f28e20da21269 a870fcb54b9a029e8086de9b08da8782c64ad2cc2e7fdf955b913d294038bb8136193256b85267e75a4ca205808a76b4 99883f057e09b88bf0e316f9814c091837fd5c26eeb16fec108c9fed4b7a2bd1c783dac0e4242b5a906621ab606c1e50 85d89069ca3190577dab39bbec43c16bf6dbca439ad3eebd8f5e9f507d84c3c43e77fd6323224582566a3aa2c8018951 9363ba219e0003f6e8a9d8937b9e1449e4b2c5cd57194563b758bea39deab88778e8f8e4f7816970a617fb077e1e1d42 820622f25553c035326145c1d2d537dc9cfd064c2f5bdf6d4ec97814de5fe9a0fbd443345fa2ea0a9d40d81d3936aa56 87e31110aaf447e70c3316459250e4f7f8c24420c97828f9eb33b22107542c5535bdb48b0e58682dd842edea2886ff08 95bf80cac6f42029d843d1246588acb40a74802f9e94b2bf69b1833936767e701ef7b0e099e22ab9f20f8c0c4a794b6c a46ecf612b2763d099b27fb814bd8fdbaee51d6b9ac277ad6f28350b843ce91d701371adfaaf4509400dc11628089b58 8604decf299fb17e073969708be5befeb1090ab688ad9f3f97a0847a40ea9a11bbcfc7a91e8dc27bc67a155123f3bd02 8eb765c8dc509061825f3688cb2d78b6fef90cf44db33783d256f09be284bc7282205279725b78882688a514247c4976 b5c30b2244fa109d66b3a5270b178960fdec47d31e63db0b374b80d2b626409eb76d2e8d1ebf47ef96c166743032fc5e aab01e76290a7e936989530221646160bf8f64e61e79282e980c8c5dcaaa805ff096efd01d075a2c75917a3f4bf15041 b9d79671debd0b83d0c7c7c3e64c0fb1274300564b262771f839b49218501e7f38ef80cae1f7e5a3c34acdc74c89dab6 92c0eaceadf036b3b9dfd2712013aba3dd7c30b7760f501f52141618265baa31840fe77850a7014dc528f71f8cf39ce6 b3cdd098059980455dd5b1c04182df1bd12fa844a866f02a9f8a86aab95b59945baa9af99f687410bffc5b07153cb23c b361b73a62f71256b7f6ea8e0f6615e14fc5a06ee98b928ab3c9dd3eef9d9d30070e9855c82b7facb639cacb3401e01f b9c85fc0f25a3271cf28b1ca900078eaaa66cbab0a3e677606e898ac32781a2dfce4d9cbd07404599e2c3c02fa161c9d ac5b4fdac2a0b2e6430d9fc72bde4249d72183b197fc7347bb1546ae6f544426686bbe0caec3ee973b6836da5e831c44 b675aebf24b92e398e166f171a6df442b3f5919b6bee192f31675a5e8eeb77d34c6590a6f0c0857417e0f78cfb085db8 a9bef942044d8d62e6a40169f7dc7b49e40cd0d77f8678dd7c7bae6f46c46786f9b1e319a3fa408f22a54fd2a4d70804 a20d19cd917d5102ae9ca0cf532127d2b953aa3303310e8a8c4b3da025dded993a47e3a28e6b02acfadb6d65dc2d41a3 a47fdb04059b83b2afb86a47b2368bbd7247c337a36d3333b6e5ef2cc9476a92c4907e4c58a845c9ef9b497621e0b714 94a9e9ffc14b411e11a4ffa59878d59460263589003dc7b6915247c549f67feede279bf3645fdd92379022fb21e3caeb b92e1177dd9ecdaf1370c71b14954219cf0851f309bc216d5907a4e2e84e0df3457018224150c142cc6bf86644bb4b73 8bc57fadd68a265b7df9b42227a9c0968db7b1bb50dc12f7d755505779f1ff2c408672b3091e903366acc9ce15d19fb6 b6b5efbe1ac4e1bd2e8447c45000d09397b772ca5496acc447b881022608a41c4f60388814607a01890190105bee7be3 95f7c85fd614df968f8ccf8d086579c9e1cec4644ecf06da26e3511cb39635a7326b3cec47bd51cf5646f1c660425e9c b81765fb319bcdc74b4d608383ccb4af7dd84413b23af637be12e2827a75f7e4bcd14441cf979ed9038ae366fbb6f022 a120ea76cda8c6c50c97035078f6648afe6537809bdba26e7c9e61de8f3070d2347160f9d34010effbf2ec7e94f5749f 92c1b8631953b40d3cc77eee2c72a064b999c09a9b92c11d8fa7b4072966273901c9dba25f9f79f384d9f11a56f3fc7a a4b00dc0ab67b2300abc9c516e34daf444d6497b066a90cfe3381ed2812304ed37b14f3b948990443dc6c1cf1bed460c a9e9f7e13c9f031bc7b9e6f1417c7abcc38894fe7d3f54869ee277afd2efa3e6fb50757dd36c8c94d591e0abdea322cc 84f3e98f831792b5ad14bcfe62a4c9f296476c6087c4c1ec7767fc642fbca141ff6a3deeb8b4d4106a9cda5a9937eea0 8eb1a7931bbea9a714226fd74b0100ab88355287d9b0a349c095e9b5809b98f237ffd706bce7d67a770da355fb9cec7b 9738ef8739e1742c1f26b51a1621be0b89d37406a370c531e236f635c7064c661818817bb3858908986aa687b28b21be a9cf3ce8501b003ccaf57552a4c4ec31081e44526d3aa3791d3dc4a7e438a357c0956f93c500356186d8fd4588ffac5e a7af6a219cca59225839a9de5b19263cb23d75557d448bc7d677b62591a2e068c45e5f4457cceb3e9efa01d0601fc18a 972a24ece5eda7692cbb6fb727f92740451bc1281835e2a02931b2b05824a16b01dbe5edd03a0ed5b441ff25a5cc0188 b21d1ec7597ce95a42f759c9a8d79c8275d7e29047a22e08150f0f65014702f10b7edce8c03f6e7ab578ce8c3b0ec665 a13a1c7df341bd689e1f8116b7afc149c1ef39161e778aa7903e3df2569356ad31834fa58ceb191485585ce5ef6835c3 a57bdb08119dc3bc089b5b2b5383455c4de0c2fcdac2dcfa21c7ac5071a61635ff83eceb7412f53fab42d1a01991de32 b2968748fa4a6921ee752d97aa225d289f599a7db7a222450e69706533573ded450380c87f8cdd4a8b8c8db1b42b5c97 8718ec04e0d5f38e3034ecd2f13dfde840add500f43a5e13457a1c73db0d18138f938690c8c315b5bcbeb51e8b9a2781 82094789e26c4a04f2f30bdb97b9aecca9b756cbd28d22ab3c8bed8afc5b2963340ddfc5a5f505e679bf058cbc5dcbb8 a35b8a566dd6ab67eddc2467906bffc76c345d508e52e9e4bb407b4f2b2c5f39b31d5a4bf5022f87bf7181dc6be2fe41 a8c93b1e893d4777c0e3a1b4bef3be90c215781501407c4011457fc3240e13524b4d2bea64a6d0a3efe3f3b0dae9b8ab 877095ad18b1e5870818f7a606127ba1736a0b55b0dbcd281ec307c84b08afc0c9117e3a880fe48bfc225fbf37671a97 84405ee0421ed2db1add3593df8426a9c1fcc8063e875f5311a917febc193748678dd63171d0c21665fb68b6d786c378 a52cdc8209c3c310bed15a5db260c4f4d4857f19c10e4c4a4cfe9dfc324dfac851421bb801509cf8147f65068d21603c 8f8a028a70dda7285b664722387666274db92230b09b0672f1ead0d778cee79aae60688c3dfd3a8ed1efdeda5784c9d4 a0be42fecc86f245a45a8ed132d6efc4a0c4e404e1880d14601f5dce3f1c087d8480bad850d18b61629cf0d7b98e0ae0 83d157445fc45cb963b063f11085746e93ab40ece64648d3d05e33e686770c035022c14fdf3024b32b321abf498689ad 8a72bbf5a732e2d4f02e05f311027c509f228aef3561fc5edac3ef4f93313845d3a9f43c69f42e36f508efcc64a20be0 b9ca29b0ec8e41c6a02f54d8c16aebf377982488cbe2ed1753090f2db4f804f6269af03e015d647a82ef06ffaa8cba6c b4df3858d61bbb5ded1cf0be22a79df65ae956e961fbb56c883e1881c4c21fe642e3f5a0c108a882e553ac59595e3241 86457d8890ac8858d7bab180ef66851247c2bf5e52bf69a4051d1d015252c389684fcc30bb4b664d42fbf670574ab3a3 86d5576ea6dfa06d9ebce4cd885450f270c88a283e1e0d29cab27851c14ed2f00355e167b52e1539f1218ad11d8f13dd 883ad1364dc2a92388bfafaa9bc943c55b2f813525831e817a6208c666829a40455dde494eba054b2495a95f7ce69e8a 8942371e6925231c2c603b5f5a882d8404d39f0c7c4232557c2610b21c2c07f145466da798ea78b7932da2b774aa3128 a799eb71496783cc7faf12c9d9804bf6180699a004b2f07fc5cc36840f63ce7eee7dde9275819a9aa3f8d92dc0d47557 8eb3fb5c769548ee38c7882f51b959c5d5a42b5935269ccf987d6ddbb25a206e80c6000bcc328af149e0727c0b7c02c0 8f3910d64e421a8f2d8db4c7b352ba5b3fc519d5663973fea5962efe4364fb74448770df944ef37ffe0382648fb56946 b41413e0c26ff124cf334dab0dc8e538293d8d519d11cc2d10895a96b2064ac60c7da39f08589b38726cffa4c3f0bfef b46ef2eb10abae0f35fa4c9c7ee2665e8044b8d9f91988a241da40fd5bbc63166925582151941b400006e28bbc5ba22a b8baa8b4c420bb572a3b6b85479b67d994c49a7ebfe1274687d946a0d0b36dfed7630cfb897350fa166f5e2eff8f9809 964b46d359c687e0dcfbdab0c2797fc2bd1042af79b7418795b43d32ffca4de89358cee97b9b30401392ff54c7834f9f 8410d0203d382ebf07f200fd02c89b80676957b31d561b76563e4412bebce42ca7cafe795039f46baf5e701171360a85 b1a8d5d473c1a912ed88ea5cfa37c2aea5c459967546d8f2f5177e04e0813b8d875b525a79c29cb3009c20e7e7292626 afaab9a1637429251d075e0ba883380043eaf668e001f16d36737028fded6faa6eeed6b5bb340f710961cee1f8801c41 aef17650003b5185d28d1e2306b2f304279da50925f2704a6a3a68312f29fe5c2f2939f14e08b0ba9dee06ea950ad001 97bcc442f370804aa4c48c2f8318d6f3452da8389af9335e187482d2e2b83b9382e5c297dce1a0f02935e227b74e09a3 8a67a27b199f0bcd02d52a3e32f9b76a486b830ec481a49a4e11807e98408b7052b48581b5dd9f0b3e93052ec45dfb68 b113bf15f430923c9805a5df2709082ab92dcdf686431bbad8c5888ca71cc749290fa4d4388a955c6d6ee3a3b9bc3c53 8629ca24440740ce86c212afed406026f4ea077e7aa369c4151b6fa57bca7f33f9d026900e5e6e681ae669fd2bd6c186 933a528371dcecc1ec6ded66b1c7b516bd691b3b8f127c13f948bfbcda3f2c774c7e4a8fbee72139c152064232103bdf 8568ddd01f81a4df34e5fa69c7f4bb8c3c04274147498156aec2e3bd98ea3e57c8a23503925de8fa3de4184563a2b79e 8160874ec030f30fda8f55bcf62613994ff7ed831e4901c7560eac647182b4a9b43bfaff74b916602b9d6ae3bfcaf929 ae71c48d48cf9459800cdf9f8e96bc22e2d4e37259e5c92a2b24fbe2c6ca42675e312288603c81762f6ceb15400bc4c9 b05f39bb83fda73e0559db1fd4a71423938a87ad9f060d616d4f4a6c64bf99472a2cbfb95f88b9257c9630fc21a0b81f 80c8479a640ed7a39e67f2db5ad8dfd28979f5443e8e6c23da8087fc24134d4b9e7c94320ffa4154163270f621188c27 9969ba20ee29c64cb3285a3433a7e56a0fe4ddc6f3d93e147f49fe021bed4a9315266ebb2fb0eb3036bb02001ae015e6 a198c89fef2ab88e498703b9021becc940a80e32eb897563d65db57cc714eaa0e79092b09dd3a84cfab199250186edcc 8df14a3db8fe558a54d6120bad87405ba9415a92b08c498812c20416c291b09fed33d1e2fcf698eb14471f451e396089 81e245ef2649b8a5c8d4b27188dd7e985ef6639090bdc03462c081396cf7fc86ed7d01bfe7e649d2b399255e842bdc21 8659f622c7ab7b40061bcf7a10144b51ad3ab5348567195924f2944e8c4ce137a37f1ba328e4716c10806f3fb7271689 a575d610fc8fe09334ca619ecdadf02d468ca71dd158a5a913252ca55ea8d8f9ce4548937c239b9cb8ab752a4d5af24a 94744549cd9f29d99f4c8c663997bdfa90e975b31f1086214245de9c87b0c32209f515a0de64d72d5ef49c09b0a031fa 80a8677862b056df59e350c967a27436c671b65d58854e100115bac9824ba177e94c2a1bfcaa191a071b9cefdbee3989 91be9a5504ec99922440f92a43fe97ddce2f21b9d94cd3a94c085a89b70c903696cec203bbab6d0a70693ba4e558fb01 8c5a0087bcd370734d12d9b3ab7bc19e9a336d4b49fc42825b2bfedcd73bb85eb47bf8bb8552b9097cc0790e8134d08c 933aa9e6bd86df5d043e0577a48e17eea3352e23befdbb7d7dcac33b5703d5ace230443ac0a40e23bf95da4cc2313478 984b7ee4bd081ee06c484db6114c2ce0ba356988efb90f4c46ff85ed2865fb37f56a730166c29ef0ae3345a39cdeae7a ae830f908ea60276c6c949fb8813e2386cf8d1df26dcf8206aa8c849e4467243e074471380ed433465dc8925c138ea4c 874c1df98d45b510b4f22feff46a7e8ed22cfc3fad2ac4094b53b9e6477c8dfc604976ca3cee16c07906dece471aa6c6 a603eb60d4c0fb90fa000d2913689126849c0261e6a8649218270e22a994902965a4e7f8c9462447259495fe17296093 a7c73d759a8ad5e3a64c6d050740d444e8d6b6c9ade6fb31cb660fa93dc4a79091230baccb51c888da05c28cb26f6f3f a4411b79b6a85c79ea173bd9c23d49d19e736475f3d7d53213c5349ebb94a266d510d12ba52b2ac7a62deaaaec7339b8 943b84f8bbcee53b06266b5c4cd24d649d972593837fe82b0bf5d5e1bbc1a2bf148e1426c366d7c39ab566b10224cadc 8300012096a8b4cefecc080054bf3ceb0918162ba263c6848860423407796b5eb517170c0bad8e4905ac69a383055a21 8244a1e3ad41908c6f037e2f8db052e81f281646141334829f36c707f307448b9ab79a7f382a1e8d86f877c90b59271c 8eca1b74687802ecc36a5d39e4516a9dee3de61a2047252d9ed737b49e0090c386e9d792ac004c96337681c7f29a16ad b70fa47535f0524835039a20036c61e77f66146ad79d3d339214d8744742db41ceeb577c829d000011aeafbb12e09579 84b3abbce48689f3adbb99889c7fd1f3e15ab455d477e34f5151c5c1c358ed77a5b6a581879f7e0f1f34106e0792e547 ab45ecb58c0ef0dbce3d16afc6ac281e0d90ec48741ea96a141152647e98fcc87f3a3ff07ba81f3179118453ce123156 90d231a145ba36a59087e259bbfc019fa369201fcfeaa4347d5fd0a22cd8a716e5a797f3cc357f2779edb08f3b666169 a4f6074d23c6c97e00130bc05f25213ca4fa76c69ca1ace9dece904a2bdd9d987661f5d55023b50028c444af47ff7a08 933af884939ad0241f3f1f8e8be65f91d77ac0fb234e1134d92713b7cfb927f1933f164aec39177daa13b39c1370fac8 80d1db6933ce72091332ae47dc691acb2a9038f1239327b26d08ea9d40aa8f2e44410bbda64f2842a398cbe8f74f770f a7a08605be2241ccc00151b00b3196d9c0717c4150909a2e9cd05538781231762b6cc6994bebbd4cddae7164d048e7b2 96db0d839765a8fdbbac03430fa800519e11e06c9b402039e9ae8b6503840c7ecac44123df37e3d220ac03e77612f4e4 96d70f8e9acd5a3151a8a9100ad94f16c289a31d61df681c23b17f21749c9062622d0a90f6d12c52397b609c6e997f76 8cf8e22273f7459396ff674749ab7e24c94fe8ab36d45d8235e83be98d556f2b8668ba3a4ec1cb98fac3c0925335c295 97b7e796a822262abc1a1f5a54cb72a1ea12c6c5824ac34cd1310be02d858a3c3aa56a80f340439b60d100e59c25097d a48208328b08769737aa1a30482563a4a052aea736539eceab148fa6653a80cb6a80542e8b453f1f92a33d0480c20961 b612184941413fd6c85ff6aa517b58303b9938958aa85a85911e53ed308778624d77eadb27ccf970573e25d3dfd83df7 b3717068011648c7d03bbd1e2fc9521a86d2c3ae69113d732c2468880a3b932ebec93596957026477b02842ed71a331b a0ad363e1352dcf035b03830fef4e27d5fd6481d29d5e8c9d51e851e3862d63cdcbaf8e330d61c1b90886921dac2c6fd 8db409fdacfa4bfdaf01cc87c8e97b53ca3a6e3a526d794eaad1c2023f3df4b888f1bf19fee9a990fe6d5c7c3063f30c b34d6975310ab15938b75ef15020a165fc849949065d32d912554b51ffa1d3f428a6d1a396cb9329367670391de33842 9117285e9e6762853fc074b8a92b3923864de2c88c13cea7bab574aaf8cdd324843455d2c3f83c00f91f27c7ecc5592a b4b2e8f190ea0b60819894710c866bf8578dd1b231ae701d430797cc7ede6e216e8ca6a304f3af9484061563645bf2ab 8c493c6853ab135d96a464815dd06cad8b3e8b163849cdefc23d1f20211685753b3d3e147be43e61e92e35d35a0a0697 9864d7880f778c42d33cf102c425e380d999d55a975a29c2774cad920dfddb80087a446c4f32ed9a6ab5f22ec6f82af0 90f67fe26f11ca13e0c72b2c2798c0d0569ed6bc4ce5bbaf517c096e7296d5dd5685a25012f6c6d579af5b4f5d400b37 a228872348966f26e28a962af32e8fa7388d04bc07cfc0224a12be10757ac7ab16a3387c0b8318fcb0c67384b0e8c1a4 a9d9d64bba3c03b51acf70aeb746a2712ddafe3b3667ae3c25622df377c2b5504e7ab598263bec835ab972283c9a168b 932128971c9d333f32939a1b46c4f7cf7e9d8417bd08dc5bd4573ccbd6ec5b460ac8880fb7f142f7ef8a40eef76d0c6d 964115e7838f2f197d6f09c06fbb2301d6e27c0ecdf208350cf3b36c748436dac50f47f9f9ac651c09ab7ad7221c7e43 a5941f619e5f55a9cf6e7f1499b1f1bcddcc7cf5e274efedaaad73a75bc71b1fc5c29cd903f6c69dc9a366a6933ca9d1 a154bf5eaec096029e5fe7c8bf6c695ae51ace356bb1ad234747776c7e1b406dee2d58864c3f4af84ed69f310974125e b504e6209d48b0338ab1e4bdab663bac343bb6e0433466b70e49dc4464c1ec05f4a98111fd4450393607510ae467c915 813411918ea79bdde295393284dc378b9bdc6cfcb34678b9733ea8c041ac9a32c1e7906e814887469f2c1e39287e80f8 8be0369f94e4d72c561e6edb891755368660208853988647c55a8eed60275f2dd6ee27db976de6ecf54ac5c66aaf0ae6 a7e2701e55b1e7ea9294994c8ad1c080db06a6fc8710cd0c9f804195dce2a97661c566089c80652f27b39018f774f85e 956b537703133b6ddf620d873eac67af058805a8cc4beb70f9c16c6787bf3cc9765e430d57a84a4c3c9fbdd11a007257 835ae5b3bb3ee5e52e048626e3ddaa49e28a65cb94b7ecdc2e272ff603b7058f1f90b4c75b4b9558f23851f1a5547a35 85d67c371d1bf6dc72cca7887fa7c886ce988b5d77dc176d767be3205e80f6af2204d6530f7060b1f65d360a0eaeff30 a84a6647a10fcef8353769ef5f55a701c53870054691a6e9d7e748cbe417b3b41dbb881bae67adc12cb6596c0d8be376 87ffe271fc0964cb225551c7a61008d8bcb8b3d3942970dbcc2b9f4f9045a767971880368ea254e2038a3a0b94ecf236 964bb721c51d43ee7dd67c1a2b7dd2cc672ce8fad78c22dcddb43e6aab48d9a4a7dc595d702aa54a6fb0ffabf01f2780 a89b3f84bb7dcbe3741749776f5b78a269f6b1bebb8e95d3cc80b834fd2177c6be058d16cacfd0d5e1e35e85cde8b811 b4314538e003a1587b5592ff07355ea03239f17e75c49d51f32babe8e048b90b046a73357bcb9ce382d3e8fbe2f8e68b 86daf4bf201ae5537b5d4f4d734ed2934b9cf74de30513e3280402078f1787871b6973aa60f75858bdf696f19935a0e2 b1adf5d4f83f089dc4f5dae9dbd215322fa98c964e2eaa409bf8ca3fa5c627880a014ed209492c3894b3df1c117236c4 b508d52382c5bac5749bc8c89f70c650bb2ed3ef9dc99619468c387c1b6c9ff530a906dfa393f78f34c4f2f31478508a a8349a5865cb1f191bebb845dfbc25c747681d769dbffd40d8cedf9c9a62fa2cbc14b64bb6121120dab4e24bef8e6b37 af0500d4af99c83db8890a25f0be1de267a382ec5e9835e2f3503e1bac9412acf9ff83a7b9385708ef8187a38a37bc77 b76d57a1c1f85b8a8e1722a47057b4c572800957a6b48882d1fc21309c2e45f648a8db0fcff760d1dbc7732cf37c009b b93c996cec0d3714667b5a5a5f7c05a7dc00bbc9f95ac8e310626b9e41ae4cc5707fac3e5bd86e1e1f2f6d9627b0da94 93216fdb864217b4c761090a0921cf8d42649ab7c4da1e009ec5450432564cb5a06cb6e8678579202d3985bd9e941cef 8b8be41105186a339987ae3a5f075fbc91f34b9984d222dfed0f0f85d2f684b56a56ab5dc812a411570491743d6c8b18 959b72782a6b2469e77fe4d492674cc51db148119b0671bd5d1765715f49fa8a87e907646671161586e84979ef16d631 86b7fc72fb7e7904ea71d5e66ba0d5d898ace7850985c8cc4a1c4902c5bf94351d23ce62eed45e24321fb02adfa49fc8 a2f244e7c9aa272cb0d067d81d25e5a3045b80b5a520b49fd5996ece267a7f1bea42e53147bbf153d9af215ea605fc9e 81aa2efa5520eebc894ce909ba5ce3250f2d96baa5f4f186a0637a1eea0080dd3a96c2f9fadf92262c1c5566ddb79bab b607dd110cfe510d087bcff9a18480ba2912662256d0ab7b1d8120b22db4ad036b2266f46152754664c4e08d0fc583f6 8f588d5f4837e41312744caac5eee9ddc3ad7085871041694f0b5813edf83dc13af7970f7c9b6d234a886e07fa676a04 924921b903207783b31016cbec4e6c99e70f5244e775755c90d03a8b769738be3ba61577aca70f706a9c2b80040c9485 ae0a42a222f1a71cd0d3c69ffb2f04c13e1940cce8efabe032629f650be3ceed6abb79651dbb81cb39a33286eb517639 a07d7d76460f31f5f0e32e40a5ea908d9d2aebf111ac4fadee67ef6540b916733c35a777dcdc05f6417726ca1f2d57dd 88d7f8a31f8c99794291847d28745e5d0b5d3b9684ca4170b686ffbb5bb521a3ef6746c3c8db22e4250a0cdff7939d96 849573071fd98c020dc9a8622a9eff221cb9f889bde259e7127a8886b73bef7ad430b87750915658918dcfb6b7b4d8d3 b12d59f732fa47fad175d6263734da8db89230fd340a46ad1cdee51e577041a5c80bf24cd195593e637daf1a66ef5a98 abbcfb8a4a6d5e269ee1ac5e277df84416c73ca55ec88317f73608201af25af0cb65b943c54684a5651df3a26e3daca2 ab157f589bdbaf067a6a7ba7513df0492933855d39f3a081196cf2352e0ddc0162d476c433320366e3df601e0556278d a86c0619b92e5ae4f7daa876a2abc5ba189156afc2fa05eef464dfa342ba37fc670d0dc308ad3822fcb461ab001bac30 a3f292946476cfe8d5e544a5325439a00e0165a5f9bf3bb6a53f477baeac7697cc0377745536681aa116f326ce911390 8aecbbfd442a6a0f01c1c09db5d9d50213eb6f1ff6fab674cde3da06a4edff3ed317e804f78300c22ef70c336123e05d 834ed4b58211fcd647d7bf7c0a3ba9085184c5c856b085e8a0fcd5215c661ef43d36f3f0f6329a9f1370501b4e73b6e4 a114ea5ad2b402a0de6105e5730907f2f1e458d28ae35144cf49836e0ad21325fe3e755cfb67984ae0a32e65402aad1e a005f12bed97d71cee288b59afe9affb4d256888727343944a99913980df2c963fe02f218e6ea992f88db693a4498066 a010f286ab06b966e3b91ff8f1bdbe2fe9ab41a27bc392d5787aa02a46e5080e58c62c7d907818caae9f6a8b8123e381 857bd6df2ddef04dbc7c4f923e0b1696d3016c8bfed07fdfa28a3a3bd62d89b0f9df49aae81cbb6883d5e7b4fadae280 b3927030da445bc4756ac7230a5d87412a4f7510581fb422212ce2e8cf49689aca7ba71678743af06d4de4914c5aa4a0 b86403182c98fcce558d995f86752af316b3b2d53ba32075f71c7da2596747b7284c34a1a87de604fcc71e7e117a8add 98dd19b5527733041689b2a4568edaf6aa0fe1a3dd800c290cda157b171e053648a5772c5d3d4c80e5a795bc49adf12e 88a3c227bb7c9bff383f9ad3f7762245939a718ab85ae6e5e13180b12bf724d42054d3852b421c1cd1b3670baddecb63 b3cfd9ad66b52bbe57b5fff0fad723434d23761409b92c4893124a574acc1e6b1e14b4ec507661551cbbe05e16db362e 923e1bb482cf421dd77801f9780f49c3672b88508a389b94015fd907888dc647ee9ea8ec8d97131d235d066daf1f42b7 8d5e16240f04f92aa948181d421006bdbc7b215648fb6554193224d00cf337ebbb958f7548cf01b4d828acffb9fbc452 8b2b8f18ad0559746f6cda3acca294a1467fb1a3bc6b6371bc3a61a3bfe59418934fa8706f78b56005d85d9cb7f90454 a9316e2a94d6e31426d2ae7312878ba6baaac40f43e2b8a2fa3ab5a774c6918551554b2dbb23dc82f70ba3e0f60b5b0d 9593116d92cf06b8cd6905a2ce569ee6e69a506c897911f43ae80fc66c4914da209fc9347962034eebbc6e3e0fe59517 887d89d2b2d3c82b30e8f0acf15f0335532bd598b1861755498610cb2dd41ff5376b2a0bb757cb477add0ce8cfe7a9fc b514cfe17875ecb790ad055271cc240ea4bda39b6cfa6a212908849c0875cb10c3a07826550b24c4b94ea68c6bb9e614 a563d5187966d1257d2ed71d53c945308f709bcc98e3b13a2a07a1933dc17bcb34b30796bd68c156d91811fbd49da2cb a7195ccc53b58e65d1088868aeeb9ee208103e8197ad4c317235bb2d0ad3dc56cb7d9a7186416e0b23c226078095d44c a838e7a368e75b73b5c50fbfedde3481d82c977c3d5a95892ac1b1a3ea6234b3344ad9d9544b5a532ccdef166e861011 9468ed6942e6b117d76d12d3a36138f5e5fb46e3b87cf6bb830c9b67d73e8176a1511780f55570f52d8cdb51dcf38e8c 8d2fc1899bc3483a77298de0e033085b195caf0e91c8be209fd4f27b60029cbe1f9a801fbd0458b4a686609762108560 8f4e44f8ca752a56aa96f3602e9234ad905ad9582111daf96a8c4d6f203bf3948f7ce467c555360ad58376ee8effd2ba 8fb88640b656e8f1c7c966c729eb2ba5ccf780c49873f8b873c6971840db7d986bdf1332ba80f8a0bb4b4ee7401468fa b72aa3235868186913fb5f1d324e748cd3ce1a17d3d6e6ea7639a5076430fe0b08841c95feb19bb94181fe59c483a9eb b8b102690ebb94fc4148742e7e3fd00f807b745b02cbe92cd92992c9143b6db7bb23a70da64a8b2233e4a6e572fc2054 8c9ae291f6cd744e2c6afe0719a7fc3e18d79307f781921fb848a0bf222e233879c1eca8236b4b1be217f9440859b6ce a658ede47e14b3aad789e07f5374402f60e9cacb56b1b57a7c6044ca2418b82c98874e5c8c461898ebd69e38fecd5770 89c0cb423580e333923eb66bda690f5aca6ec6cba2f92850e54afd882ba608465a7dbb5aa077cd0ca65d9d00909348ab aed8e28d98d5508bd3818804cf20d296fe050b023db2ed32306f19a7a3f51c7aaafed9d0847a3d2cd5ba5b4dabbc5401 96a0fcd6235f87568d24fb57269a94402c23d4aa5602572ad361f3f915a5f01be4e6945d576d51be0d37c24b8b0f3d72 935d0c69edd5dfa8ed07c49661b3e725b50588f814eb38ea31bcc1d36b262fae40d038a90feff42329930f8310348a50 900518288aa8ea824c7042f76710f2ea358c8bb7657f518a6e13de9123be891fa847c61569035df64605a459dad2ecc8 947d743a570e84831b4fb5e786024bd752630429d0673bf12028eb4642beb452e133214aff1cfa578a8856c5ebcb1758 a787266f34d48c13a01b44e02f34a0369c36f7ec0aae3ec92d27a5f4a15b3f7be9b30b8d9dd1217d4eeedff5fd71b2e5 a24b797214707ccc9e7a7153e94521900c01a1acd7359d4c74b343bfa11ea2cdf96f149802f4669312cd58d5ab159c93 97f5ee9c743b6845f15c7f0951221468b40e1edaef06328653a0882793f91e8146c26ac76dd613038c5fdcf5448e2948 80abd843693aed1949b4ea93e0188e281334163a1de150c080e56ca1f655c53eb4e5d65a67bc3fc546ed4445a3c71d00 908e499eb3d44836808dacff2f6815f883aeced9460913cf8f2fbbb8fe8f5428c6fc9875f60b9996445a032fd514c70f ae1828ef674730066dc83da8d4dd5fa76fc6eb6fa2f9d91e3a6d03a9e61d7c3a74619f4483fe14cddf31941e5f65420a a9f4dbe658cd213d77642e4d11385a8f432245b098fccd23587d7b168dbeebe1cca4f37ee8d1725adb0d60af85f8c12f 93e20ee8a314b7772b2439be9d15d0bf30cd612719b64aa2b4c3db48e6df46cea0a22db08ca65a36299a48d547e826a7 a8746a3e24b08dffa57ae78e53825a9ddbbe12af6e675269d48bff4720babdc24f907fde5f1880a6b31c5d5a51fbb00e b5e94dfab3c2f5d3aea74a098546aa6a465aa1e3f5989377d0759d1899babf543ad688bb84811d3e891c8713c45886c5 a3929bada828bd0a72cda8417b0d057ecb2ddd8454086de235540a756e8032f2f47f52001eb1d7b1355339a128f0a53b b684231711a1612866af1f0b7a9a185a3f8a9dac8bde75c101f3a1022947ceddc472beb95db9d9d42d9f6ccef315edbc af7809309edbb8eb61ef9e4b62f02a474c04c7c1ffa89543d8c6bf2e4c3d3e5ecbd39ec2fc1a4943a3949b8a09d315a6 b6f6e224247d9528ef0da4ad9700bee6e040bbf63e4d4c4b5989d0b29a0c17f7b003c60f74332fefa3c8ddbd83cd95c1 adbcec190a6ac2ddd7c59c6933e5b4e8507ce5fd4e230effc0bd0892fc00e6ac1369a2115f3398dfc074987b3b005c77 8a735b1bd7f2246d3fa1b729aecf2b1df8e8c3f86220a3a265c23444bdf540d9d6fe9b18ed8e6211fad2e1f25d23dd57 96b1bf31f46766738c0c687af3893d098d4b798237524cb2c867ed3671775651d5852da6803d0ea7356a6546aa9b33f2 8036e4c2b4576c9dcf98b810b5739051de4b5dde1e3e734a8e84ab52bc043e2e246a7f6046b07a9a95d8523ec5f7b851 8a4f4c32ee2203618af3bb603bf10245be0f57f1cfec71037d327fa11c1283b833819cb83b6b522252c39de3ce599fa5 ad06ed0742c9838e3abaaffdb0ac0a64bad85b058b5be150e4d97d0346ed64fd6e761018d51d4498599669e25a6e3148 8d91cb427db262b6f912c693db3d0939b5df16bf7d2ab6a7e1bc47f5384371747db89c161b78ff9587259fdb3a49ad91 ae0a3f84b5acb54729bcd7ef0fbfdcf9ed52da595636777897268d66db3de3f16a9cf237c9f8f6028412d37f73f2dfad 8f774109272dc387de0ca26f434e26bc5584754e71413e35fa4d517ee0f6e845b83d4f503f777fe31c9ec05796b3b4bc a8670e0db2c537ad387cf8d75c6e42724fae0f16eca8b34018a59a6d539d3c0581e1066053a2ec8a5280ffabad2ca51f ac4929ed4ecad8124f2a2a482ec72e0ef86d6a4c64ac330dab25d61d1a71e1ee1009d196586ce46293355146086cabba 845d222cb018207976cc2975a9aa3543e46c861486136d57952494eb18029a1ebb0d08b6d7c67c0f37ee82a5c754f26f b99fa4a29090eac44299f0e4b5a1582eb89b26ed2d4988b36338b9f073851d024b4201cd39a2b176d324f12903c38bee 9138823bc45640b8f77a6464c171af2fe1700bdc2b7b88f4d66b1370b3eafe12f5fbb7b528a7e1d55d9a70ca2f9fc8e6 8ac387dc4cf52bc48a240f2965ab2531ae3b518d4d1f99c0f520a3d6eb3d5123a35ef96bed8fa71ee2f46793fa5b33b3 864adec6339d4c2ba2525621fceabd4c455902f6f690f31a26e55413e0722e5711c509dc47ce0bcc27bbdc7651768d2d a0a52edb72268a15201a968dabc26a22909620bda824bd548fb8c26cc848f704166ed730d958f0173bd3b0a672f367bd 949e445b0459983abd399571a1a7150aab3dd79f4b52a1cd5d733e436c71c1d4b74287c6b0ce6cc90c6711ba4c541586 858966355dac11369e3b6552f2b381665181693d5a32e596984da3314021710b25a37d8c548b08700eea13d86cb22f21 974bcbb8d38c5e6518745cc03ad436e585b61f31d705e7e2e5085da9655d768ac4d800904f892c3dab65d6223e3f1fd6 8092b6506b01308bf6187fde5ebd4fa7448c9a640961ba231be22ac5fa2c7635ef01e8b357722c7695d09b723101ea2a a5b8ef360bf28533ee17d8cd131fff661d265f609db49599085c0c7d83b0af409a1b5c28e3a5e5d7f8459a368aa121e8 b031b6d5e3ceab0f0c93314b3b675f55cf18cbc86f70444af266fe39cb22fd7dad75d8c84e07f1c1bfa2cb8283e1361a 93ad489e4f74658320c1cceed0137c023d3001a2c930ed87e6a21dbf02f2eb6ad1c1d8bcb3739c85dcfbecb040928707 b15e4ec2cdab0d34aec8d6c50338812eb6ecd588cf123a3e9d22a7ca23b5a98662af18289f09e6cdd85a39a2863c945c b304f71a9717cf40c22073f942618b44bf27cd5e2ed4a386ad45d75b0fcb5a8dafd35158211eaf639495c6f1a651cedb b82d78d3eaaa7c5101b7a5aae02bd4f002cd5802d18c3abcda0dd53b036661c6d3c8b79e0abe591eab90b6fdc5fef5e3 abbd1884243a35578b80914a5084449c237ee4e4660c279d1073a4d4217d1b55c6b7e9c087dfd08d94ac1416273d8d07 92f4b61c62502745e3e198ec29bca2e18696c69dcb914d1f3a73f4998d012b90caf99df46e9bb59942e43cce377fe8fd 906e79df98185820c8208844e1ba6bd86cb96965814b01310bd62f22cbec9b5d379b2ef16772d6fc45a421b60cfd68fe a0eae2784ef596e2eb270dd40c48d6c508e4394c7d6d08d4cc1b56fde42b604d10ba752b3a80f2c4a737e080ef51b44f 94c084985e276dc249b09029e49a4ef8a369cd1737b51c1772fbb458d61e3fe120d0f517976eba8ffa5711ba93e46976 83619a0157eff3f480ab91d1d6225fead74c96a6fd685333f1e8e4d746f6273e226bad14232f1d1168a274e889f202f1 a724fe6a83d05dbbf9bb3f626e96db2c10d6d5c650c0a909415fbda9b5711c8b26e377201fb9ce82e94fa2ab0bf99351 a8a10c1b91a3a1fa2d7fd1f78a141191987270b13004600601d0f1f357042891010717319489f681aa8a1da79f7f00d5 a398a2e95b944940b1f8a8e5d697c50e7aa03994a8a640dfad4ea65cfb199a4d97861a3ec62d1c7b2b8d6e26488ca909 a2eedfe5452513b2a938fffd560798ef81379c5a5032d5b0da7b3bb812addbaad51f564c15d9acbbfc59bb7eddd0b798 ab31c572f6f145a53e13b962f11320a1f4d411739c86c88989f8f21ab629639905b3eedb0628067942b0dc1814b678ca ad032736dd0e25652d3566f6763b48b34ea1507922ed162890cd050b1125ec03b6d41d34fccba36ec90336f7cdf788ed 83028a558a5847293147c483b74173eca28578186137df220df747fccd7d769528d7277336ea03c5d9cdd0bc5ae3d666 ab5d182cd1181de8e14d3ef615580217c165e470b7a094a276b78a3003089123db75c6e1650bf57d23e587c587cd7472 a4793e089fbdb1597654f43b4f7e02d843d4ab99ee54099c3d9f0bd5c0c5657c90bb076379a055b00c01b12843415251 98bdc52ee062035356fb2b5c3b41673198ddc60b2d1e546cb44e3bb36094ef3c9cf2e12bbc890feb7d9b15925439d1ea a4f90cca6f48024a0341bd231797b03693b34e23d3e5b712eb24aba37a27827319b2c16188f97c0636a0c115381dc659 8888e6c2e4a574d04ba5f4264e77abc24ccc195f1a7e3194169b8a2ceded493740c52db4f9833b3dbf4d67a3c5b252cb 83dc4e302b8b0a76dc0292366520b7d246d73c6aebe1bdd16a02f645c082197bcff24a4369deda60336172cefbcf09af a4eb2741699febfeb793914da3054337cc05c6fa00d740e5f97cb749ae16802c6256c9d4f0f7297dcdbb8b9f22fc0afa 8b65557d5be273d1cb992a25cfce40d460c3f288d5cb0a54bdef25cbd17cdea5c32ec966e493addf5a74fd8e95b23e63 97c6577e76c73837bcb398b947cb4d3323d511141e0ddd0b456f59fbb1e8f920a5c20d7827a24309145efddee786140f abcc0849ffe2a6a72157de907907b0a52deece04cf8317bee6fe1d999444b96e461eac95b6afde3d4fe530344086a625 9385c0115cb826a49df1917556efa47b5b5e4022b6a0d2082053d498ec9681da904ecf375368bb4e385833116ea61414 8b868c1841f0cdc175c90a81e610b0652c181db06731f5c8e72f8fafa0191620742e61a00db8215a991d60567b6a81ca a8df15406f31b8fcf81f8ff98c01f3df73bf9ec84544ddec396bdf7fafa6fe084b3237bf7ef08ad43b26517de8c3cd26 a9943d21e35464ce54d4cc8b135731265a5d82f9ccf66133effa460ffdb443cdb694a25320506923eede88d972241bf2 a1378ee107dd7a3abcf269fd828887c288363e9b9ca2711377f2e96d2ed5e7c5ec8d3f1da995a3dcbedf1752d9c088fc 8a230856f9227b834c75bdebc1a57c7298a8351874bf39805c3e0255d6fd0e846f7ad49709b65ec1fd1a309331a83935 877bcf42549d42610e1780e721f5800972b51ba3b45c95c12b34cb35eeaf7eac8fa752edd7b342411820cf9093fea003 84c7a0b63842e50905624f1d2662506b16d1f3ea201877dfc76c79181c338b498eceb7cad24c2142c08919120e62f915 8e18b1bd04b1d65f6ed349b5d33a26fe349219043ead0e350b50ae7a65d6ff5f985dd9d318d3b807d29faa1a7de4fe42 8ea7b5a7503e1f0b3c3cd01f8e50207044b0a9c50ed1697794048bbe8efd6659e65134d172fb22f95439e1644f662e23 b1954a2818cad1dad6d343a7b23afa9aa8ad4463edc4eb51e26e087c2010927535020d045d97d44086d76acdb5818cbf a5271ea85d0d21fa1ff59b027cf88847c0f999bbf578599083ff789a9b5228bc161e1c81deb97e74db1a82a0afd61c50 aa2fa4c05af3387e2c799315781d1910f69977ec1cfea57a25f1a37c63c4daaa3f0ecd400884a1673e17dd5300853bcf b1cd2a74ca0b8e6090da29787aef9b037b03b96607983a308b790133bd21297b21ca4e2edec890874096dbf54e9d04c3 801931607ec66a81272feaa984f0b949ad12d75ecf324ba96627bd4dc5ddead8ebf088f78e836b6587c2b6c0b3366b6c 95d79504710bdf0ad9b9c3da79068c30665818c2f0cdbba02cc0a5e46e29d596032ac984441b429bd62e34535c8d55b0 9857d41e25e67876510ff8dadf0162019590f902da1897da0ef6fc8556e3c98961edb1eb3a3a5c000f6c494413ded15e 8740c9ffe6bd179c19a400137c3bd3a593b85bd4c264e26b4dfb9e2e17ac73e5b52dfacc1dcb4033cfc0cd04785f4363 977f98f29d948b4097a4abdf9345f4c1fb0aa94ba0c6bf6faa13b76f3a3efc8f688e1fe96099b71b3e1c05041118c8d1 a364422b1239126e3e8d7b84953ce2181f9856319b0a29fcab81e17ac27d35798088859c1cfc9fc12b2dbbf54d4f70b3 a0f6ba637f0db7a48e07439bb92ddb20d590ce9e2ed5bab08d73aa22d82c32a9a370fe934cbe9c08aeb84b11adcf2e0e a2c548641bd5b677c7748327cca598a98a03a031945276be6d5c4357b6d04f8f40dd1c942ee6ec8499d56a1290ac134d 9863e9cc5fbcdbd105a41d9778d7c402686bfd2d81d9ed107b4fda15e728871c38647529693306855bee33a00d257a7e a54173bf47b976290c88fd41f99300135de222f1f76293757a438450880e6f13dbde3d5fe7afc687bdfbcfc4fbc1fc47 b8db413917c60907b73a997b5ab42939abd05552c56a13525e3253eb72b83f0d5cc52b695968a10005c2e2fe13290e61 a1f8388ef21697c94ba90b1a1c157f0dc138e502379e6fc5dc47890d284563e5db7716266e1b91927e5adf3cde4c0a72 9949013a59d890eb358eab12e623b2b5edb1acbee238dfad8b7253102abc6173922e188d5b89ec405aa377be8be5f16d a00fdb7710db992041f6ddb3c00099e1ce311dea43c252c58f560c0d499983a89de67803a8e57baa01ee9d0ee6fa1e44 a8b1bcbed1951c9cdb974b61078412881b830b48cd6b384db0c00fa68bcc3f4312f8e56c892ea99d3511857ef79d3db9 8f3ee78404edc08af23b1a28c2012cee0bdf3599a6cb4ea689fc47df4a765ef519191819a72562b91a0fbcdb896a937e 8155bbb7fa8d386848b0a87caae4da3dec1f3dade95c750a64a8e3555166ccc8799f638bd80ed116c74e3a995541587a abfe30adbc0a6f1fd95c630ed5dac891b85384fa9331e86b83217f29dff0bd7cad19d328485715a7e3df9a19069d4d2f 89d0783e496ee8dbb695764b87fb04cee14d4e96c4ba613a19736971c577d312079048142c12ce5b32b21e4d491d281b 856b8dbc9c5d8f56b6bb7d909f339ca6da9a8787bba91f09130a025ab6d29b64dbf728ba6ed26e160a23c1cdb9bc037b 8a30dd2ea24491141047a7dfe1a4af217661c693edf70b534d52ca547625c7397a0d721e568d5b8398595856e80e9730 ae7e1412feb68c5721922ed9279fb05549b7ef6812a4fd33dbbbd7effab756ab74634f195d0c072143c9f1fd0e1ee483 b7ce970e06fa9832b82eef572f2902c263fda29fdce9676f575860aae20863046243558ede2c92343616be5184944844 85ed0531f0e5c1a5d0bfe819d1aa29d6d5ff7f64ad8a0555560f84b72dee78e66931a594c72e1c01b36a877d48e017ca b8595be631dc5b7ea55b7eb8f2982c74544b1e5befc4984803b1c69727eac0079558182f109e755df3fd64bee00fcaa5 99e15a66e5b32468ef8813e106271df4f8ba43a57629162832835b8b89402eb32169f3d2c8de1eb40201ce10e346a025 844c6f5070a8c73fdfb3ed78d1eddca1be31192797ad53d47f98b10b74cc47a325d2bc07f6ee46f05e26cf46a6433efb 974059da7f13da3694ad33f95829eb1e95f3f3bfc35ef5ef0247547d3d8ee919926c3bd473ab8b877ff4faa07fcc8580 b6f025aecc5698f6243cc531782b760f946efebe0c79b9a09fe99de1da9986d94fa0057003d0f3631c39783e6d84c7d5 b0c5358bc9c6dfe181c5fdf853b16149536fbb70f82c3b00db8d854aefe4db26f87332c6117f017386af8b40288d08f9 a3106be5e52b63119040b167ff9874e2670bd059b924b9817c78199317deb5905ae7bff24a8ff170de54a02c34ff40a4 ad846eb8953a41c37bcd80ad543955942a47953cbc8fb4d766eac5307892d34e17e5549dc14467724205255bc14e9b39 b16607e7f0f9d3636e659e907af4a086ad4731488f5703f0917c4ce71a696072a14a067db71a3d103530920e1ec50c16 8ed820e27116e60c412c608582e9bb262eaaf197197c9b7df6d62b21a28b26d49ea6c8bb77dfde821869d9b58025f939 97bc25201d98cde389dd5c0c223a6f844393b08f75d3b63326343073e467ac23aacef630ddc68545ea874299ba4a3b4f b73c9695ad2eefd6cc989a251c433fab7d431f5e19f11d415a901762717d1004bb61e0cc4497af5a8abf2d567e59fef4 adaabe331eea932533a7cc0cf642e2a5e9d60bbc92dd2924d9b429571cbf0d62d32c207b346607a40643c6909b8727e2 a7b1bbfe2a5e9e8950c7cb4daab44a40c3ffab01dc012ed7fe445f4af47fa56d774a618fafe332ab99cac4dfb5cf4794 b4a3c454dcd5af850212e8b9ba5fe5c0d958d6b1cabbf6c6cfe3ccbc4d4c943309c18b047256867daf359006a23f3667 a5c0b32f6cef993834c1381ec57ad1b6f26ae7a8190dd26af0116e73dadc53bb0eeb1911419d609b79ce98b51fdc33bc ac2f52de3ecf4c437c06c91f35f7ac7d171121d0b16d294a317897918679f3b9db1cef3dd0f43adb6b89fe3030728415 94722ae6d328b1f8feaf6f0f78804e9b0219de85d6f14e8626c2845681841b2261d3e6a2c5b124086b7931bf89e26b46 a841a0602385d17afabca3a1bb6039167d75e5ec870fea60cfcaec4863039b4d745f1a008b40ec07bca4e42cb73f0d21 8c355f0a1886ffced584b4a002607e58ff3f130e9de827e36d38e57cb618c0cb0b2d2dea2966c461cb3a3887ede9aef1 a6a9817b0fc2fd1786f5ba1a7b3d8595310987fb8d62f50a752c6bb0b2a95b67d03a4adfd13e10aa6190a280b7ee9a67 a1d2e552581ecbafeaef08e389eaa0b600a139d446e7d0648ac5db8bbbf3c438d59497e3a2874fc692b4924b87ff2f83 a1b271c55389f25639fe043e831e2c33a8ba045e07683d1468c6edd81fedb91684e4869becfb164330451cfe699c31a8 8c263426e7f7e52f299d57d047a09b5eeb893644b86f4d149535a5046afd655a36d9e3fdb35f3201c2ccac2323a9582e b41c242a7f7880c714241a97d56cce658ee6bcb795aec057a7b7c358d65f809eb901e0d51256826727dc0dc1d1887045 93001b9445813c82f692f94c0dc1e55298f609936b743cf7aae5ebfa86204f38833d3a73f7b67314be67c06a1de5682d 82087536dc5e78422ad631af6c64c8d44f981c195ddea07d5af9bb0e014cdc949c6fa6e42fce823e0087fdb329d50a34 8e071861ceba2737792741c031f57e0294c4892684506b7c4a0fc8b2f9a0a6b0a5635de3d1e8716c34df0194d789ae86 b471c997e1e11774bd053f15609d58838a74073a6c089a7a32c37dd3f933badf98c7e5833263f3e77bc0d156a62dd750 8d2d8686fb065b61714414bb6878fff3f9e1e303c8e02350fd79e2a7f0555ded05557628152c00166ce71c62c4d2feaa ae4c75274d21c02380730e91de2056c0262ffcecf0cbdb519f0bdb0b5a10ae2d4996b3dc4b3e16dbaea7f0c63d497fef 97140d819e8ca6330e589c6debdee77041c5a9cedb9b8cbd9c541a49207eeb7f6e6b1c7e736ec8ba6b3ab10f7fcd443a af6659f31f820291a160be452e64d1293aa68b5074b4c066dac169b8d01d0179139504df867dc56e2a6120354fc1f5be a5e5d8088a368024617bfde6b731bf9eee35fc362bed3f5dfdd399e23a2495f97f17728fec99ca945b3282d1858aa338 a59cfc79d15dbdde51ab8e5129c97d3baba5a0a09272e6d2f3862370fdbaf90994e522e8bd99d6b14b3bb2e9e5545c6f a30499b068083b28d6c7ddcc22f6b39b5ec84c8ee31c5630822c50ea736bb9dca41c265cffc6239f1c9ef2fd21476286 88ffe103eca84bbe7d1e39a1aa599a5c7c9d5533204d5c4e085402a51441bb8efb8971efe936efbbfa05e5cb0d4b8017 b202356fbf95a4d699154639e8cb03d02112c3e0128aab54d604645d8510a9ba98936028349b661672c3a4b36b9cb45d 8b89bb6574bf3524473cff1ff743abcf1406bd11fb0a72070ccd7d8fce9493b0069fb0c6655252a5164aee9e446ea772 93247b1038fa7e26667ee6446561d4882dc808d1015daafb705935ddc3598bb1433182c756465960480f7b2de391649e b027f94d3358cbb8b6c8c227300293a0dee57bf2fee190a456ad82ecfb6c32f8090afa783e2ab16f8139805e1fb69534 a18bb1849b2f06c1d2214371031d41c76ffa803ee3aa60920d29dbf3db5fbfac2b7383d5d0080ba29ce25c7baa7c306b 827bf9fd647e238d5ac961c661e5bbf694b4c80b3af8079f94a2484cb8fba2c8cf60e472ebcd0b0024d98ae80ad2ff5a 838e891218c626a7f39b8fd546b013587408e8e366ecc636b54f97fa76f0a758bc1effa1d0f9b6b3bc1a7fcc505970a0 836523b5e8902d6e430c6a12cff01e417d2bd7b402e03904034e3b39755dee540d382778c1abe851d840d318ebedce7f 850a77dda9ac6c217e2ef00bf386a1adec18b7f462f52801c4f541215690502a77ef7519b690e22fdf54dc2109e0ca38 a8265c6ae7b29fc2bda6a2f99ced0c1945dd514b1c6ca19da84b5269514f48a4f7b2ccbab65c9107cfd5b30b26e5462f ab3d02ee1f1267e8d9d8f27cc388e218f3af728f1de811242b10e01de83471a1c8f623e282da5a284d77884d9b8cde0e 831edaf4397e22871ea5ddee1e7036bab9cc72f8d955c7d8a97f5e783f40532edbbb444d0520fefcffeab75677864644 80484487977e4877738744d67b9a35b6c96be579a9faa4a263e692295bb6e01f6e5a059181f3dd0278e2c3c24d10a451 aae65a18f28c8812617c11ecf30ad525421f31fb389b8b52d7892415e805a133f46d1feca89923f8f5b8234bd233486a b3a36fd78979e94288b4cefed82f043a7e24a4a8025479cc7eb39591e34603048a41ee606ee03c0b5781ebe26a424399 b748b3fc0d1e12e876d626a1ba8ad6ad0c1f41ea89c3948e9f7d2666e90173eb9438027fadcd741d3ae0696bd13840f1 acdd252d7c216c470683a140a808e011c4d5f1b4e91aeb947f099c717b6a3bad6651142cde988330827eb7d19d5fb25c b9a25556a6ca35db1ed59a1ec6f23343eab207a3146e4fc3324136e411c8dba77efd567938c63a39c2f1c676b07d8cdb a8db6aef8f5680d2bdb415d7bcaae11de1458678dcb8c90c441d5986c44f83a9e5855662d0c1aace999172d8628d8fe1 af58147108e9909c3a9710cc186eab598682dca4bfd22481e040b8c000593ecb22c4ede4253ac9504e964dfa95a9b150 8dd8bb70f1c9aec0fcc9478f24dfc9c3c36c0bf5ff7a67c017fa4dab2ec633fbd7bc9d8aa41ea63e2696971ed7e375f5 aa98d600b22aff993a4d7a3ccabd314e1825b200cb598f6b797d7e4d6a76d89e34a4d156c06bddfc62f2ef9b4c809d1d 8a8fc960d6c51294b8205d1dabe430bef59bda69824fa5c3c3105bef22ac77c36d2d0f38ffc95ce63731de5544ccbeff b6d1020efe01dc8032bd1b35e622325d7b9af9dcd5c9c87c48d7d6ebc58644454294c59b7f4b209204b5b1f899f473bf 8a750dc9fe4891f2dfe5759fb985939810e4cdc0b4e243ff324b6143f87676d8cb4bcb9dfb01b550801cedcaaa5349e2 98c13142d3a9c5f8d452245c40c6dae4327dd958e0fda85255ea0f87e0bcbaa42a3a0bd50407ed2b23f9f6317a8a4bc5 99f2b83d9ec4fc46085a6d2a70fd0345df10f4a724c1ba4dee082a1fde9e642e3091992ebf5f90a731abcb6ec11f6d9b b218546ab2db565b2489ea4205b79daa19ef2acbf772ccaaa5e40150e67ea466090d07198444b48e7109939aa2319148 84f9d1d868e4b55e535f1016558f1789df0daa0ead2d13153e02f715fe8049b1ce79f5bc1b0bbbb0b7e4dd3c04783f3f 80d870d212fbddfdda943e90d35a5a8aa0509a7a1e7f8909f2fcb09c51c3026be47cc7a22620a3063406872105b4f81a b5b15138ff6551fac535d4bbce2ea6adc516b6b7734b4601c66ec029da2615e3119dc9ad6a937344acfd7b50e4a1a2ae 95d2f97652086e7ceb54e1d32692b1c867ffba23c4325740c7f10d369283d1b389e8afa0df967831ade55696931e7934 8a5b580403e1a99cd208f707e8ce0d3f658c8280417683f69008d09cc74d835a85f7380f391b36ead9ac66d9eedd1cbe a8b0c90bff34c86720637b5a2081f0f144cfe2205c1176cacd87d348609bc67af68aed72414dc9aa6f44a82c92c2a890 865abbdd96c496892c165a8de0f9e73348bf24fce361d7a9048710178a3625881afb0006e9f5ee39124866b87904c904 ace67bb994adef4b6f841cdf349195608030044562780a7e9b00b58a4ff117268a03ff01e5a3a9d9d7eff1dd01f5f4bf b9371d59185b3d2d320d3fefeadb06ba2aa7d164352fb8dc37571509509fa214d736d244ac625a09a033a10d51611e2e a8ef992771422dcf2d6d84386fde9fe5dba88bfded3dfcd14074ca04331b4fd53a7f316615cdfaf10ed932cbb424a153 868cbc75f8f789ea45eded2768a1dac0763347e0d8e8028d316a21005f17be179d26d5965903e51b037f2f57fe41765d b607111bcdfd05fa144aa0281b13ee736079ebbbf384d938a60e5e3579639ed8ef8eb9ca184868cdb220a8e130d4a952 aca55702af5cae4cae65576769effd98858307a71b011841c563b97c2aa5aeb5c4f8645d254f631ed1582df3dbbf17da b9b5cbace76246e80c20dfcc6f1e2c757a22ab53f7fd9ff8a1d309538b55174e55e557a13bf68f095ff6a4fa637ef21a 8571b0a96871f254e2397c9be495c76379faf347801cb946b94e63212d6a0da61c80e5d7bebbabcd6eaa7f1029172fe5 902540326281e6dc9c20d9c4deaaf6fbbbcc3d1869bd0cf7f081c0525bea33df5cfa24ead61430fda47fb964fcc7994b 841af09279d3536a666fa072278950fabf27c59fc15f79bd52acb078675f8087f657929c97b4bc761cbade0ecb955541 a1f958b147ddf80ab2c0746ba11685c4bae37eb25bfa0442e7e1078a00d5311d25499da30f6d168cb9302ea1f2e35091 863d939381db37d5a5866964be3392a70be460f0353af799d6b3ed6307176972686bd378f8ad457435a4094d27e8dfb7 835cd4d7f36eff553d17483eb6c041b14280beb82c7c69bca115929658455a1931212976c619bafb8179aed9940a8cc6 8d0770e3cb8225e39c454a1fc76954118491b59d97193c72c174ecc7613051e5aed48a534016a8cf0795c524f771a010 91aa4edb82f6f40db2b7bd4789cc08786f6996ebed3cb6f06248e4884bc949793f04a4c5ea6eefe77984b1cc2a45d699 8fb494ca2449f659ff4838833507a55500a016be9293e76598bbae0a7cb5687e4693757c2b6d76e62bd6c7f19ed080bb b59b104449a880a282c1dd6a3d8debb1d8814ef35aab5673c1e500ee4cb0e840fb23e05fa5a0af92509c26b97f098f90 aca908e3bad65e854ae6be6c5db441a06bcd47f5abafdfa8f5a83c8cd3c6e08c33cab139c45887887a478338e19ceb9f 806f5d802040313a31964fc3eb0ee18ac91b348685bed93c13440984ee46f3d2da7194af18c63dea4196549129660a4e ae4b2dca75c28d8f23b3ab760b19d839f39ff5a3112e33cb44cff22492604a63c382b88ec67be4b0266924dd438c3183 99d1c29c6bd8bf384e79cd46e30b8f79f9cbc7d3bf980e9d6ffba048f0fc487cac45c364a8a44bb6027ad90721475482 a16e861c1af76d35528c25bf804bfc41c4e1e91b2927d07d8e96bffe3a781b4934e9d131ecf173be9399800b8269efac a253303234fb74f5829060cdcef1d98652441ab6db7344b1e470d195a95722675988048d840201c3b98e794b1e8b037c 905ac8a0ea9ce0eb373fb0f83dd4cbe20afb45b9d21ae307846fd4757d4d891b26a6711924e081e2b8151e14a496da18 b485315791e775b9856cc5a820b10f1fa5028d5b92c2f0e003ba55134e1eddb3eb25f985f2611a2257acf3e7cfdfab5e b6189c0458b9a043ebc500abc4d88083a3487b7ac47ed5e13ab2a41e0a1bee50d54a406063f92bc96959f19e822a89a7 a30e15f995fd099a223fc6dc30dad4b8d40bee00caa2bc3223ba6d53cd717c4968a3e90c4618c711ed37cc4cd4c56cf3 a1b1ed07fcc350bb12a09cd343768d208fc51a6b3486f0ece8f5a52f8a5810b4bc7ab75582ec0bc2770aed52f68eace5 88aa739fbae4bece147ba51a863e45d5f7203dbc3138975dc5aef1c32656feb35f014d626e0d5b3d8b1a2bda6f547509 ab570f3c8eabfca325b3a2ea775ef6b0c6e6138c39d53c2310329e8fb162869fde22b0e55688de9eb63d65c37598fca3 89d274762c02158e27cb37052e296a78f2b643eb7f9ae409f8dac5c587d8b4d82be4ef7c79344a08ebec16ac4a895714 99c411d2ad531e64f06e604d44c71c7c384424498ecd0a567d31ec380727fb605af76643d0d5513dd0a8d018076dd087 80d0777fa9f79f4a0f0f937d6de277eec22b3507e2e398f44b16e11e40edf5feff55b3b07a69e95e7e3a1621add5ed58 b2430a460783f44feb6e4e342106571ef81ad36e3ddd908ec719febeb7acaf4b833de34998f83a1dab8f0137a3744c11 b8f38ccfc7279e1e30ad7cefc3ea146b0e2dff62430c50a5c72649a4f38f2bac2996124b03af2079d942b47b078cc4f8 a178a450a62f30ec2832ac13bbc48789549c64fc9d607b766f6d7998558a0e2fad007ae0148fc5747189b713f654e6ba 98c5ede296f3016f6597f7ccc5f82c88fd38ed6dc3d6da3e4a916bfd7c4c95928722a1d02534fe89387c201d70aa6fd2 a8cc5e98573705d396576e022b2ba2c3e7c7ece45cd8605cb534b511763682582299e91b4bb4100c967019d9f15bbfaf 848480ea7b7d9536e469da721236d932870b7bbee31ccf7ae31b4d98d91413f59b94a1e0d1786ee7342295aa3734969c b88ea38f9ee432f49e09e4e013b19dff5a50b65453e17caf612155fff6622198f3cba43b2ea493a87e160935aaaf20a9 949376934a61e0ef8894339c8913b5f3b228fa0ae5c532ad99b8d783b9e4451e4588541f223d87273c0e96c0020d5372 96f90bb65ca6b476527d32c415814b9e09061648d34993f72f28fae7dc9c197e04ef979f804076d107bb218dfd9cb299 a4402da95d9942c8f26617e02a7cef0ebc4b757fac72f222a7958e554c82cc216444de93f659e4a1d643b3e55a95d526 81179cbc26a33f6d339b05ea3e1d6b9e1190bd44e94161ae36357b9cdf1e37d745d45c61735feed64371fe5384102366 ad4dc22bdbd60e147fdac57d98166de37c727f090059cfc33e5ee6cf85e23c2643996b75cf1b37c63f3dc9d3c57ffa18 8a9b1b93dc56e078ce3bb61c2b0088fd6c3e303ba6b943231cc79d4a8e8572f4109bbde5f5aa7333aae3287909cb0fe2 8876ef583bc1513322457a4807d03381ba1f4d13e179260eaa3bddfede8df677b02b176c6c9f74c8e6eab0e5edee6de6 b6c67e228bf190fbaeb2b7ec34d4717ce710829c3e4964f56ebb7e64dc85058c30be08030fa87cc94f1734c5206aef5f a00cb53b804ee9e85ce12c0103f12450d977bc54a41195819973c8a06dcb3f46f2bf83c3102db62c92c57ab4dd1e9218 a7675a64772eefddf8e94636fb7d1d28f277074327c02eea8fae88989de0c5f2dc1efed010f4992d57b5f59a0ab40d69 8d42bb915e0bf6a62bcdf2d9330eca9b64f9ec36c21ae14bf1d9b0805e5e0228b8a5872be61be8133ad06f11cb77c363 a5b134de0d76df71af3001f70e65c6d78bed571bc06bfddf40d0baad7ea2767608b1777b7ef4c836a8445949877eeb34 aeadbc771eaa5de3a353229d33ed8c66e85efbd498e5be467709cb7ff70d3f1a7640002568b0940e3abd7b2da81d2821 8c28da8e57a388007bd2620106f6226b011ee716a795c5d9f041c810edf9cf7345b2e2e7d06d8a6b6afa1ee01a5badc1 8ed070626a4d39ffd952ddb177bc68fd35b325312e7c11694c99b691f92a8ea7734aeb96cf9cc73e05b3c1b1dcad6978 ada83e18e4842f3d8871881d5dbc81aed88a1328298bfdc9e28275094bd88d71b02e7b8501c380fa8d93096cbc62f4fb 8befc3bec82dcf000a94603b4a35c1950ba5d00d4bed12661e4237afa75062aa5dcef8eac0b9803136c76d2dd424a689 97c6f36c91ca5ca9230bfcbf109d813728b965a29b62e5f54c8e602d14a52ac38fa1270de8bfe1ab365426f3fc3654c7 b01d192af3d8dbce2fe2fece231449e70eb9ac194ec98e758da11ca53294a0fa8c29b1d23a5d9064b938b259ea3b4fb5 819a2c20646178f2f02865340db1c3c6ebc18f4e6559dd93aa604388796a34bd9fed28ad3ccc8afc57a5b60bb5c4e4ec a9ffc877470afc169fecf9ec2dc33253b677371938b0c4ffa10f77bb80089afa2b4488437be90bb1bcf7586a6f4286e3 b533051c7ce7107176bcb34ad49fdb41fac32d145854d2fe0a561c200dcf242da484156177e2c8f411c3fdf1559ecf83 8fe2caff2e4241d353110a3618832f1443f7afe171fd14607009a4a0aa18509a4f1367b67913e1235ac19de15e732eb1 84705c6370619403b9f498059f9869fdf5f188d9d9231a0cb67b1da2e8c906ead51b934286497293698bba269c48aa59 899dddf312a37e3b10bdaaacc1789d71d710994b6ee2928ac982ad3fd8a4f6167672bc8bf3419412711c591afe801c28 b2f7916d946b903ded57b9d57025386143410a41a139b183b70aeca09cf43f5089ead1450fce4e6eb4fba2c8f5c5bbe5 8d5f742fe27a41623b5820914c5ca59f82246010fa974304204839880e5d0db8bc45ebab2ad19287f0de4ac6af25c09e b93d4a1f6f73ac34da5ffbd2a4199cf1d51888bc930dc3e481b78806f454fcb700b4021af7525b108d49ebbbaa936309 8606f8d9121512e0217a70249937e5c7f35fbfe019f02248b035fa3a87d607bc23ae66d0443e26a4324f1f8e57fd6a25 b21312cdec9c2c30dd7e06e9d3151f3c1aceeb0c2f47cf9800cce41521b9d835cb501f98b410dc1d49a310fdda9bc250 a56420b64286bdddda1e212bba268e9d1ba6bdb7132484bf7f0b9e38099b94a540884079b07c501c519b0813c184f6b4 80b2cf0e010118cb2260f9c793cef136f8fa7b5e2711703735524e71d43bce2d296c093be41f2f59118cac71f1c5a2ff adcb12d65163804d2f66b53f313f97152841c3625dbbda765e889b9937195c6fcd55d45cc48ebffabb56a5e5fe041611 8b8a42e50dc6b08ab2f69fc0f6d45e1ea3f11ba0c1008ee48448d79d1897356599e84f7f9d8a100329ed384d6787cfc4 aaa9c74afa2dec7eccfbd8bb0fc6f24ed04e74c9e2566c0755a00afdfdf3c4c7c59e2a037ec89c2f20af3fae1dd83b46 aa9f6e8fd59187171c6083ae433627d702eb78084f59010ff07aff8f821f7022ef5fbbe23d76814d811b720a8bfa6cc3 a56a3ded501659ad006d679af3287080b7ee8449e579406c2cae9706ef8bf19c1fc2eb2a6f9eaf2d3c7582cded73e477 81971e077c1da25845840222b4191e65f6d242b264af4e86800f80072d97d2a27a6adc87c3a1cb1b0dd63d233fbafa81 a6fa5453c4aaad2947969ee856616bf6448224f7c5bf578f440bcfc85a55beb40bef79df8096c4db59d1bd8ef33293ea 87c545adbfaaf71e0ab4bac9ae4e1419718f52b0060e8bb16b33db6d71b7248ae259d8dd4795b36a4bbb17f8fae9fd86 b4c7a9bc0910e905713291d549cec5309e2d6c9b5ea96954489b1dff2e490a6c8b1fa1e392232575f0a424ba94202f61 802350b761bcaba21b7afe82c8c6d36ee892b4524ab67e2161a91bbfa1d8e92e7e771efb1f22c14126218dd2cb583957 b4e7ddb9143d4d78ea8ea54f1c908879877d3c96ee8b5e1cb738949dcfceb3012a464506d8ae97aa99ea1de2abf34e3d a49a214065c512ad5b7cc45154657a206ef3979aa753b352f8b334411f096d28fd42bca17e57d4baaafb014ac798fc10 8a80c70a06792678a97fe307520c0bf8ed3669f2617308752a2ab3c76fdf3726b014335a9b4c9cbcfc1df3b9e983c56f a34721d9e2a0e4d08995a9d986dc9c266c766296d8d85e7b954651ad2ca07e55abb1b215898ee300da9b67114b036e0d 8cfce4564a526d7dca31e013e0531a9510b63845bbbd868d5783875ed45f92c1c369ce4a01d9d541f55f83c2c0a94f03 ab3f5f03a5afc727778eb3edf70e4249061810eba06dc3b96b718e194c89429c5bfbec4b06f8bce8a2118a2fdce67b59 aa80c2529fc19d428342c894d4a30cb876169b1a2df81a723ab313a071cba28321de3511a4de7846207e916b395abcc9 82b7828249bf535ef24547d6618164b3f72691c17ca1268a5ee9052dba0db2fdd9987c8e083307a54399eab11b0f76b1 8fbcb56b687adad8655a6cf43364a18a434bf635e60512fad2c435cf046f914228fb314f7d8d24d7e5e774fb5ffb1735 a3010a61a2642f5ebbce7b4bc5d6ecb3df98722a49eb1655fe43c1d4b08f11dfad4bcec3e3f162d4cc7af6a504f4d47c b3dcc0fdf531478e7c9ef53190aa5607fd053a7d2af6c24a15d74c279dbb47e3c803a1c6517d7e45d6534bb59e3527f5 8648f6316c898baaca534dff577c38e046b8dfa8f5a14ee7c7bc95d93ae42aa7794ba0f95688a13b554eeb58aeedf9ba 89fca6fc50407695e9315483b24f8b4e75936edf1475bcf609eed1c4370819abac0e6a7c3c44f669560367d805d9ba63 a367a17db374f34cd50f66fb31ba5b7de9dbe040f23db2dcc1d6811c0e863606f6c51850af203956f3399000f284d05f 91030f9ca0fff3e2dbd5947dcf2eba95eb3dbca92ee2df0ed83a1f73dbf274611af7daf1bb0c5c2ee46893ab87013771 84d56181f304ce94015ea575afeef1f84ea0c5dbb5d29fb41f25c7f26077b1a495aff74bd713b83bce48c62d7c36e42d 8fe2f84f178739c3e2a2f7dcac5351c52cbed5fa30255c29b9ae603ffd0c1a181da7fb5da40a4a39eec6ce971c328fcf a6f9b77b2fdf0b9ee98cb6ff61073260b134eb7a428e14154b3aa34f57628e8980c03664c20f65becfe50d2bdd2751d4 8c6760865445b9327c34d2a1247583694fbeb876055a6a0a9e5cb460e35d0b2c419e7b14768f1cc388a6468c94fd0a0f af0350672488a96fe0089d633311ac308978a2b891b6dbb40a73882f1bda7381a1a24a03e115ead2937bf9dcd80572ad a8e528ec2ee78389dd31d8280e07c3fdd84d49556a0969d9d5c134d9a55cd79e1d65463367b9512389f125ed956bc36a 942c66589b24f93e81fe3a3be3db0cd4d15a93fb75260b1f7419f58d66afaa57c8d2d8e6571536790e2b415eec348fd9 83fe4184b4b277d8bf65fb747b3c944170824b5832751057e43465526560f60da6e5bbee2f183cb20b896a20197168c7 88a71aada494e22c48db673d9e203eef7a4e551d25063b126017066c7c241ee82bedaa35741de4bd78a3dd8e21a8af44 8c642a3186ca264aac16ee5e27bd8da7e40e9c67ae159b5d32daa87b7de394bf2d7e80e7efb1a5506c53bfd6edd8c2c3 81855d6de9a59cef51bef12c72f07f1e0e8fe324fcc7ec3f850a532e96dcd434c247130610aaee413956f56b31cbb0dc a01e61390dcd56a58ad2fcdb3275704ddfbedef3ba8b7c5fce4814a6cdd03d19d985dba6fd3383d4db089444ea9b9b4d 96494e89cbf3f9b69488a875434302000c2c49b5d07e5ff048a5b4a8147c98291ae222529b61bb66f1903b2e988e5425 b9689b3e8dddc6ec9d5c42ba9877f02c1779b2c912bba5183778dc2f022b49aed21c61c8ec7e3c02d74fe3f020a15986 a2a85e213b80b0511395da318cbb9935c87b82c305f717a264155a28a2ea204e9e726bae04ce6f012e331bd6730cbb9d 91b70f44c7d8c5980ce77e9033a34b05781cbe773854d3f49d2905cc711a3d87c20d5d496801ad6fd82438874ce732b8 884596417ff741bb4d11925d73852ffeea7161c7f232be3bdce9e6bbe7884c3a784f8f1807356ae49d336b7b53a2b495 ae2aed8ab6951d8d768789f5bc5d638838d290d33ccc152edfb123e88ba04c6272b44294b0c460880451ad7b3868cc6a 89d8ebfb9beebc77189d27de31c55f823da87798a50bca21622cbf871e5d9f1d3182cf32ee9b90f157e6ce298e9efccf afd00a4db4c2ed93cf047378c9402914b6b3255779f3bb47ded4ab206acb7eaebba0fd7762928e681b1aebcfee994adc a2e49b6cd32e95d141ebc29f8c0b398bb5e1a04945f09e7e30a4062142111cd7aa712ac0e3e6394cfb73dd854f41ad77 ae8e714ab6e01812a4de5828d84060f626358bb2b955f6fb99ae887b0d5ce4f67ebc079ab9e27d189bf1d3f24f7c2014 a3100c1eebf46d604e75ebf78569c25acf938d112b29ccbe1a91582f6bd8ef5548ae3961c808d3fb73936ac244e28dbc a9a02dcff0e93d47ead9cdddc4759971c2d848580bf50e117eb100cafca6afeaa7b87208513d5f96b1e1440ffc1b0212 894ab01462137e1b0db7b84920a3b677fbb46c52b6f4c15320ef64f985e0fc05cec84cd48f389ce039779d5376966ea3 b1e40e8399ee793e5f501c9c43bde23538e3ce473c20a9f914f4a64f5b565748d13ab2406efe40a048965ee4476113e4 a5a7d97a19e636238968670a916d007bf2ce6ae8e352345d274101d0bbe3ac9b898f5b85814a7e4c433dd22ac2e000ff b6394c43b82923231d93fd0aa8124b757163ba62df369898b9481f0118cb85375d0caac979a198ece432dbb4eb7cc357 82d522ae3ff4fe2c607b34b42af6f39c0cf96fcfe1f5b1812fca21c8d20cece78376da86dcbd6cdb140e23c93ae0bcb2 b6e0d986383bc4955508d35af92f2993e7e89db745f4525948c5274cfd500880cb5a9d58a5b13d96f6368bb266a4433e b0b4325772ec156571d740c404e1add233fb693579f653b0fae0042b03157d3b904838f05c321d2d30f2dbd27c4d08ad ac41367250263a2099006ef80c30bac1d2f25731d4874be623b6e315c45b0dc9a65f530fce82fb3dc25bd0610008c760 b6c0b1ed7df53da04a6f3e796d3bfa186f9551c523bc67898bc0ecfc6b4a4a22f8c4d3bfc740ebf7b9fa5b0ea9431808 8e78fca17346601219d01e5cd6a4837161a7c8f86fe2a8d93574d8006da5f06ae7c48eea7d2b70992c2a69184619663c a21f91f47e04fafbfafacf3185b6863766a2d0c324ccac2c3853a4748af5897dbbe31d91473b480f646121339c9bae2d a464d68786ab1fc64bd8734fce0be6fbe8dc021d3e771ff492ada76eedff466577c25e282b7c8ab4c1fd95ef5ff3631e 829a24badc7714081e03509ccfb00818ce40430682c1c0e4a399cd10b690bda1f921aabcbf1edfb1d8a2e98e6c0cedd6 87ccf7e4bbcb818ef525435e7a7f039ecbb9c6670b0af163173da38cbdb07f18bc0b40b7e0c771a74e5a4bc8f12dfe2c 94087bd2af9dbeb449eb7f014cfbf3ee4348c0f47cde7dc0ad401a3c18481a8a33b89322227dee0822244965ae5a2abb 896b83ed78724dac8a3d5a75a99de8e056a083690152c303326aa833618b93ef9ec19ab8c6ef0efe9da2dbcccac54431 821e6a0d7ccf3c7bd6a6cc67cde6c5b92fb96542cb6b4e65a44bbc90bbc40c51ff9e04702cb69dd2452f39a2ff562898 b35b2096cda729090663a49cb09656c019fef1fc69a88496028d3a258ad2b3fd6d91ab832163eaa0077989f647e85e7e b7857ef62c56d8bce62476cdb2ab965eddff24d932e20fc992bd820598686defe6cc0a7232d2be342696c2990d80721a b343d974dfda3f6589043acd25d53aecf7c34b1e980ae135a55cda554ff55e531bc7c2dfe89b0d2c30e523c7b065dad1 8d139e16a73cd892b75f3f4e445a10d55d1118f8eeafc75b259d098338419e72e950df6ca49cb45677a3c4e16fb19cdc 817b8535bd759da392b2c5760c51b3952ecf663662a137c997f595c533cd561ed7e655673c11144242160e41d1f2dd71 817ee0f0819b0ccb794df17982d5b4332abff5fec5e23b69579db2767855642156d9b9acccf6ceab43332ccc8d2744dc 9835d2b652aec9b0eba0c8e3b6169567e257a6a3f274ec705dbc250ee63f0f8e4b342e47b9e0c280c778208483d47af8 b78c40177f54f0e6d03083a4f50d8e56b5aafdb90f1b047bb504777d6e27be5a58170330aee12fbaa5f1e9d4f944acfc ab8eebacf3806fac7ab951f6a9f3695545e2e3b839ca399a4ef360a73e77f089bb53d3d31dbd84ddfde55e5f013626e0 96c411fc6aecca39d07d2aff44d94b40814d8cfc4ee5a192fd23b54589b2801694d820a0dd217e44863ccff31dda891b 8249c424a0caf87d4f7ff255950bbc64064d4d1b093324bfe99583e8457c1f50e6996e3517bf281aa9b252c2a7c5a83a acf6ed86121821a3dd63f3875b185c5ebe024bdb37878c8a8d558943d36db0616545a60db90789c0925295f45d021225 a37f155621a789f774dd13e57016b8e91b3a2512b5c75377ec8871b22a66db99655d101f57acaecd93115297caabfc21 92e60ee245bd4d349f1c656e034b1a7f0c6415a39ac4c54d383112734305488b3b90b0145024255735e0a32f38dba656 acec614e562ccfc93366309cfdc78c7d7ee0a23e3a7782a4fc4807b8803e6ebfb894a489d03e9a3c817ff2ec14813eba b912f9dd26ed552cb14b007b893e6ed2494d12517e5761dbeb88521270144f8c3eb9571a0ad444b30a8a65e80bd95996 8375408dae79c547a29e9a9e5d4ec8241b36b82e45e4ca3b0c36d2227c02d17bb171528d3778eac3bbdc75d6c4e8a367 8c2d0e6e4406836da112edbbb63996408bb3cda4a2712fd245e4bb29a0100fdc89a2746d859b84a94565bc1cfa681813 a7431bf59e111c072d28c97626cd54fcdf018421d053a787d2aef454b91251ee8ff9d3702d06b088f92b9ad2bbebff15 8f3659b0fbeb90b7f30b7a49233325e806551a32911a654dca86e290b314483bbb33fe6482387bc48c35d85c1dd0441c 8dca5ba23f0bb76f7dacabf12886053552ba829a72827b472a2f01e19a893155cdce65f1fb670000f43e8c75ba015a31 8c1514c083c77624eeb5d995d60994a2866192e15c4474d0be4189fae0e9dbd62494ebb4c02fbc176b53be548abbc5a1 80498d2ed153381baf3b0f81da839ed0eea6af5796c422b8e59be805dba48c4395bb97824ac308170bb4f14f319c5ddf 84f5ebc3bf96362457993e9fa31493c31c4283075e2403f63d581b6b0db8a3df294b2085643f2007f4de38cb5d627776 958e6e38774da518193a98397978dbc73d1c3827b4996ec00b4183da2c305a187a0ada9aa306242814b229a395be83c9 ab8b8fbf73845615e7fab3e09e96cc181159eab09f36b4c1239b3c03313c9aeb4bbb51e16316fe338b2319ed2571b810 977e4e33b33bd53394e591eba4f9a183e13704c61e467d74b28f4ad0b69aa51501a5221cb1e0e42bcb548ca518caa619 a9bb7ecb9846cc30d04aad56d253c3df7004cebb272f6adf7b40a84adef9f57291e0d08d64c961b9fc406cdb198aab9b 8d2b72dc36406a545a9da44e1fddfb953d4894710ca026d6421a4ac91e02d0373a599f2acfe41d8258bc9679cf6f43d3 904192fc8fe250f61ecb8a36abbbccae85f592bbf00c10039c30b5a1c733d752a04e4fd8a1000c6578616f8a16aa83a3 87f5fdfe20bbbf931b529ec9be77bbfcc398cad9d932d29f62c846e08a91d2f47ae56ad5345122d62a56f629f9a76c4d 84cc3a53b2e7b7e03015f796b6cb7c32d6ded95c5b49c233ac27fafa792994b43c93cda6e618b66fce381f3db69838ba aab58da10d7bbe091788988d43d66a335644f3d0897bbc98df27dcc0c0fcee0ac72e24f1abdd77e25196a1d0d0728e98 a10ea8677c2b7da563d84aa91a314a54cab27bb417c257826ebdd3b045d2a0f12729fe630bbbf785d04874f99f26bee8 acc4970ef2a4435937a9b8a5a5a311226ca188d8f26af1adfcd6efb2376a59155b9a9ff1cff591bde4b684887d5da6e5 8dc7cf6fcca483c44eb55e7fb924bf3f76cf79b411ae4b01c6c968910877ac9c166b71350f4d935f19bdffb056477961 ac2dd1182ded2054c2f4dbf27b71a0b517fb57193733a4e4e56aca8a069cff5078ffd3fd033683d076c1c639a4de63c7 932ec87c450cd0dc678daf8c63cd1bf46124fa472934e517fbbfb78199f288ff7f354b36e0cc6c8739d3f496cfe0913b b0d631ced213e8492be60ea334dbe3b7799b86d85d5e8e70d02beef3ae87b1d76e1df3bdb5f7ba8a41904c96f6a64455 929d7239ead7575867e26b536b8badf2e11ca37840034d0e5c77039f8cce122eff5a1bf6e0bcadde6b3858e9f483d475 aaae5d372d02ee25b14de585af6fbc48f2c7cd2a6af4f08352951b45aa469599eff41e820df642ca1a0f881120e89dbe b23c411741a6b059f04fa4f5fd9dd10e2a64915f2de6ea31e39c32f2f347a776a953320e5f7613fcb1167efe502f5c5c a4581b0ae633fe29c6f09928e5efb16db019eeac57f79fef2fa1d3c9bee42ce0e852bc60b9d0133265373747e52a67a4 81b33afffd7b2575d4a9a1c5dd6eee675c084f82e06b9b3a52a3c9f76e087f12dca6e0ffddc42fb81ce1adb559d47a38 89cc890f06b424591556aabdfdbb36d7a23700425e90c9cfed7d3da226b4debe414ac5bdf175273828ce6c5355712514 a4399438be75cfae2bf825496704da5ed9001bed8538d8ac346c8cf0d4407808e9ee67573eb95fe1c6872ac21f639aaa ad537f7ce74a1ca9a46fc06f15c1c8a6c32363bd6ac78a3c579ed8f84252e38a914cac16709fe65360e822ef47896de4 8e53b69f5e3e86b86299452e20ea8068b49565d0d0ab5d50ce00158a18403ae44e1b078a3cfd3f919aa81eb049a30c6e a59f2542c67a430fd3526215c60c02353ee18af2ff87cb6231a2564fe59b8efec421f18d8b8cc7f084675ecf57b3fd05 b8d9bac93ef56cb4026dd1c731d92260a608fd55b8321e39166678e1dab834d0efddb717685da87786caeb1aaf258089 aa2df56f4c6fe9e0f899116c37302675f796a1608338700f05a13e779eb7cf278e01947864a8c2c74cc9d9a763804446 b0108ff2e327dcb6982961232bf7a9a0356d4297902f4b38d380ff1b954bfbcae0093df0f133dd9e84d5966c7b1aada7 b06b813b01fe7f8cf05b79dc95006f0c01d73101583d456278d71cd78638df2b1115897072b20947943fa263ddab0cd6 aa41e6c4d50da8abf0ea3c3901412fe9c9dff885383e2c0c0c50ed2f770ada888a27ea08bbb5342b5ff402e7b1230f12 a48635dbb7debac10cb93d422c2910e5358ba0c584b73f9845028af4a763fd20da8f928b54b27782b27ca47e631ebf38 80a574c208e994799e4fa9ef895163f33153bc6487491d817c4049e376054c641c4717bda8efbeb09152fa421a7268a7 b592bfd78ae228afc219c186589b9b0b5c571e314976d1ed5c1642db9159d577679a73c049cfc3dcfefcd5a4f174eeea aa1f08af3918c61eadf567a5b1a3cdcdfb1b925f23f1f9e3c47889762f4d979d64686ce1ce990055ef8c1030d98daa3b 857df4cfd56d41c6d0c7fcc1c657e83c888253bae58d33b86e0803a37461be5a57140a77fb4b61108d1d8565091ada1c 8fae66a72361df509d253012a94160d84d0b2260822c788927d32fd3c89500500908c8f850ef70df68ddaeb077fd0820 aa1dbefc9aef1e7b896ff7303837053c63cfb5c8a3d8204680d3228ac16c23636748fe59286468c99699ae668e769a0c b64b1cb2ba28665ed10bad1dddc42f3f97383c39bad463c6615b527302e2aaf93eb6062946d2150bd41c329697d101be b6d35e3b524186e9065cee73ea17c082feff1811b5ab5519dd7991cdff2f397e3a79655969755309bd08c7d5a66f5d78 a4dae7f584270743bbba8bb633bdb8bc4dcc43580e53d3e9e509ff6c327e384f14104b5bdfe5c662dc6568806950da37 aae84d3d9ad4e237b07c199813a42ed2af3bf641339c342d9abf7ebec29b5bd06249c4488ce5c9277d87f7b71b3ddd37 b82a463cf643821618a058bddf9f2acb34ac86a8de42a0fa18c9626e51c20351d27a9575398a31227e21e291b0da183e 8b6c921e8707aded3ea693f490322971b1a7f64786ef071bc9826c73a06bd8ae6bf21bc980425769627b529d30b253ce 80724937b27fc50f033c11c50835c632369f0905f413b1713a2b0a2274bec5d7a30438e94193d479ba6679dbe09a65ef a1d9b259a2ca9cff8af6678b3af0a290c2f51e9cf26d5fe3c6a4fa3d28cbf33cb709b7f78b4f61cb9419427983c61925 96a3e69a5ed7a98ce59c4481f2ffb75be9542122ad0eb4952c84d4536760df217854d4ec561ce2f4a79d3793c22fa4f4 990c4d9a4a22d63a8976d34833cafc35936b165f04aed3504e9b435f0de1be4c83b097bbaa062483cf3dee3833b4f5b6 b9bf5e4b270aec4a0dc219457b5fed984b548892c4b700482525ba1a7df19284464f841dab94abfabcaa9a7b7a757484 acaecf49cb4786d17cf867d7a93bd4ffee0781766e11b5c1b29089ae0024c859d11b45828fbff5330b888543264d74a9 b0e1a0865b1e6f9e4a0e31d0c885526ac06678acc526fda5124742a2c303bd0e8871a0cb7951ec8ed9540fc247c8d844 82b3d327b3d1a631758451e12870816956cd0cef91fcf313a90dd533d5291193a0ff3cc447054564ce68c9b027a7ffd7 a2843602abb98f0f83e000f3415039788da1e9a096bfe8fed6b99bab96df948c814560424ffebe755cb72f40436fb590 ab1c7b43cf838798d1e314bc26e04fc021e99a7bfbfc8ffde62fa8d7f92139de86a377289d5177021154229de01ede15 95e5cf5dd87ae3aed41b03c6c55f9dfad38dc126b17e7e587c156f7745c8da0bd1d60acb718fc1a03b61344f01e3de4d 86f021a3762bb47167f80d4ef1b1c873a91fe83409f9704f192efeebbc3ece0729cd2f92f63419907ea38ae47bc907d2 aaa1445dafbbcd645d4332d9806225e9346ee5ac6b22ad45e8922134fe12f3d433f567a6a4c19efdd9d5775a7de1e92f 8fd7e15688eef75df7b8bca3d61bc9fca4f56e047cdb6d0b864e7d1c4966eac27d6094b0c8482b49739f83ec51050198 80aab8b4d394eb011d4ec6a4c2815617308c9b847c6fa6a3d7e6af1c79420ef6ff2a13934a398581c40ee4cf1cac02ac 8970b97ac076a1d8a321ce00eada0edf974a46bf3cc26f6854e4218cdfc8d2b0c32199d9658f254b4fbae5a2c5535f41 a1aa2ec5b03df0a630e73dd048680ed6d3032c324941423f45cd1f16038789e5e75b876a13948732e9079a422f66a9fc b5fe5f5e2f2ae2beeb8e95859a02fc45f01f9fb0ebb2bd8ec9ec976b3e806228821a9775096d341d662bc536c4d89452 a2bc1f170b62d0d5788b02391337b2ab157c38e725694e80aeead7383e05599be0e2f0fa27ef05db007061809356e147 a8a69701d4a8d0d972390e9f831fd8e9f424b2c2ef069e56bd763e9e835b3ce5f7cf5de5e5c297c06ace4aa74df1067c b43d551af4ff3873557efe3f3fb98e5ede9008492f181f4796dd1a6bcda8b9445c155e8146966baa812afae1abe06b48 b4b1dae44fd596813f30602ab20e9b1fb20cb1bd650daacc97b7e054e5c0178b8131d439a9e5b142ca483cc012a362b3 b95b8a94c30a831eaaebea98c65cc5d0228c78afd6603d4aa426d8186aecc951f1a11c33951f51df04c7e6fa43ffb5ae b100059624cf9db371bec80013a57a8f296d006c139a8766308f1ea821c7eccc26cad65bc640ab3f6cef9062653bf17d 8e5a2cb76716e0000d13bce5ef87acac307362a6096f090f5f64e5c5c71a10fddfdee8435e7166ba8c3ad8c3f540f3e4 93d2c43e21588c1e83c4255c52604b4ac3f40e656352d1827e95dd5222a45aebff9674e34fbbe7ed21eca77bd9b8dcbc 8aeaed611546bb9073b07512a9a1f38a7f436ab45e11775a0f9754baaf63e9bcc7bb59b47546a5ded5e4ba2f698e3b5f af9e6792e74a1163fe27612f999a2f3cfa9048914c5bef69e3b2a75162bb0ce6ece81af699ad7f0c5278a8df0ba000d2 850bf2d5d34791c371a36404036ad6fdcd8fb62d1bb17a57e88bda7a78ea322397ce24d1abf4d0c89b9cf0b4cc42feb3 87f7e2a1625e2b7861b11d593aaac933ed08a7c768aebd00a45d893ed295bbb6ed865037b152bb574d70be006ddc1791 8dcce8f4ad163b29a2348ea15431c2c6ea1189ece88d2790e9f46b9125bd790b22503ec391bc2dee8f35419863b2c50c b4bf5266c37f12421dd684b29517982d5e4b65dfdfba5fc7bd7479fd854aabf250627498f1e1188a51c0a88d848ec951 8651623c690247f747af8fdffdc3e5f73d0662bc3279fa2423a3c654af9b6433b9e5e0155f1ce53857e67388e7e3401d b155120f196d52760129dde2e2b1990039b99484cdc948fa98095cd23da87679850f522e5955eae34ac267d2144160d3 aec8115e8d7b6601fbceeccf92e35845a06706d46acd188452c9f7d49abef14c6b3a9a9369a8bab2fd4eb9288e2aaca5 998a8ca4dc0f145f67a8c456f1d6a7323c4836fe036dcbb0f27eb1c596d121eb97369638a9908cfaf218c7706f266245 b235fbafac62802742ee3d26b1f4e887f7d2da4d711ba7f9bb6ca024de7beec1de66bb830ce96d69538f7dcb93c51b26 9258d2ddc21ab4e3edcde7eb7f6a382a29f1b626003cc6fdd8858be90f4ad13240072d8a8d44ef8de51ca4f477fa6c45 99d038487821c948142c678acd8c792960993dd8cb5e02cb229153a1ee9f88249f4ad9007f08e5d82e2a71fb96bb5f32 a88ee9dbc73d3d8e0f447b76fdb3a27936bde479a58d5799176885583dc93830ac58bca9087075950ea75100cf51af23 88b9b15816e5a0387153c1f4b90f613beb3ea4596037da01a81fdd2bcbd0baf5598db99f77e7694e5a0d35e822758108 907ae4b637d06b15846ee27d08c9c9af42df261c5bdd10cf5bc71f8e5ca34b33ac2405307023c50bdb8dc7b98a2cd5fe 9393d6900e1d2d1a1e42412fefd99578d9ac1d855c90a3e7930a739085496448609d674ca9b34016ad91f22d1cac538e a28ac56b216730b7dcdb5ab3fc22d424c21a677db99a9897a89ed253ea83acfd9d83125133f5be6d9cd92298df110af8 b027590ee8766f1e352f831fda732adbaf77152485223ad5489ef3b0ce2d2e9f98d547c111fe133847ebb738987fb928 a9cc08fbd5c3fee8f77cf6eb996a5cafa195df5134dab000e4d0312f970a5577942ee89794e618074f49841f1f933a42 a8b3535c3df0b1a409d3fc740527ee7dd5ac21756115cde6f87f98cc7623f50cfcf16790689cab113ee7c35a5bd4879f b61420227b97e5603ae8a716c6759b619f02b8fdc48acbf854352aa6519dad74b97bacc1723ca564cbf3ca48539ed773 853762498de80eebf955a6c8ddd259af463e4e25f0b6ba7b6a27b19bdbf4c585de55760a16e2d9345cdba6b2a02610f3 a711c1b13fc6c30745203c5d06390e6c82bd7c50f61734aa8d99c626faba30119bc910be63ec916c91ba53f8483c05a8 b488c0a793f4481f46b5875d96eecd73e46209a91677769f0890c5e002ecd7d4b1c9f4ba68c47fbed40e3857b1d8717a a651c5e812ae65b1c66d92c607e80be330737ea49c1dcfe019c0ecea0f41a320406935bb09206a4abff0d1c24599b9ad 85e34e7d96e4b97db98a43247b6c244383b11ca10bf4777364acf509a6faa618bc973e2136a4693fbc8ab597e308fd5a 99837214102b394fffa7f3883759554c6bb7a070f5c809303595a44195e02b9a169460dc6bbffb62bdc0e7ced5f0a5c1 a952f89c0afb4bdae8c62b89cc3cfb60d0576ba4fe01a5d99534792f38d8848d919b3fc7577435d8443a044d2ee0bcfa a1ac1f81acb29798acdfc493854663519e2d1b0e9d23d286ce33882c34b4c1c0bb43dd9638166d8026315a44d9ec92a8 ac9c58aa38219ae659d23007cc7b97fd25b7b610b2d81a8f9f94ddb089efc49c049a8ea4c56e6eaf7b6498f422a97b3c 87e61d501c242b484fb9a937ef21d485f6678d75257fc8fe831b528979068cadbe7e12b49c34058ec96d70a9d179ab14 aa45f6852f35cc8b65a4a8b5380641d2602a4fa4e3a035db9664df3ac2e170b1280c4a8b7b55161430063e54de4158a6 a46975614ddde6d134753c8d82c381966f87203d6e5a5fb99a93b0d43aa461466b37f07b8d0973a1abd6ee2b40f24348 8d35f97297773422351f4d99564c1359ef1a10cfb60aa0e6c8985a78f39b4268486312c8ebf9dd2ef50a771aa03158eb 8497c6242102d21e8b3ade9a9896c96308ab39171ab74cbd94e304c47598e2c2a7b0a0822492ac5c076ba91d4176481d 973f8fcb5f26915b3a3ef6fe58cc44bc7f4e115cd0ad9727d8d1b8113e126ae2e253a19922c5433be4ab2311a839c214 ae3ee9f1d765a9baf54b4617a289c3b24930aa8d57658a6b0b113bbf9b000c4a78499296c6f428bbb64755dfd4f795d2 a5be7a8e522ef3dcf9d2951220faf22bb865d050f4af2880b8483222ff7aad7c0866219fcc573df9d829c6efbb517f98 a5f3c7fabd7853a57695c5ad6d5b99167d08b5414e35ed1068ae386e0cb1ee2afbbe4d2b9024379b6fc3b10c39024d36 978d5592d4798c9e6baceff095413589461267d6a5b56cd558ec85011342da16f4365d879b905168256f61d36d891b1f b7b6eaffa095ecbd76d6e1e88ceebabaf674d9ef7e331e875c6d9b9faa1762c800ff1ea597c214c28080f67a50a96c1e 8a1ab53ae5ceaa42e06e58dd8faf6c215fc09ba111ca9eeb800612334d30d5971448be90fec62ed194328aadd8c8eecc a9ca532cac8ace9a9e845382f8a7840bf40cb426f2fcad8a2f40aadbb400b3a74021627cc9351b0966b841b30284962e 8dddeda8854c8e7ddc52676dd1d0fed1da610ed5415ddd7d25b835bd8420a6f83d7b67ec682270c9648b2e2186343591 888906aac64fd41d5c518a832d4e044fdc430cfe142fd431caf4676cafc58853ce576f098910d729011be0a9d50d67b5 96a3f886a2824e750b1e2ea5c587132f52a0c5e3ff192260d8783c666206bd8ebd539933816d7cdd97e4bc374e0b1edf a150a29ffb2632cc7ec560983d9804cd6da3596c0c25956d27eb04776508eae809659fc883834269437871735de5f9ed 81f7ad4d2959d9d4009d1dfbc6fee38f930f163eb5eac11e98dc38bd2f7f224e3f5c767583f8e52d58d34f3417a6cf90 97ccac905ea7d9c6349132dd0397b6a2de9e57fd2d70f55e50860e019de15c20171a50b28a5c00ef90d43b838253b3d1 95694f00c21e8a205d6cbda09956b5b6ec9242ec8c799a91f515b07dcc7de3b6f573e2c0ba149f5a83700cda2d1df0f5 82bbc3c4a3b3997584903db30fffd182a266c7d1df3e913f908d5a53122fa12cf5acd11d915d85d5bd110fcc43cee736 8d3f24b4949aa1b4162c28dfbb9f813dd1d8b330f71325448dc45ea34d59b69ca95059402aae011e1b5aba6e536bc6ec 92c734c19752d24782331e74c9af97a8399ddfdd32954e91cda7363dba876aca4f730b451c50a8913950420682da8121 8653d2c79f77b8c7dcdf7e8dee42433998aeedf1b583abfca686d47a854de1b75e9a4351580c96d1a2a9532659203361 886f0e414cb558c1a534a1916d3531320a9b6024639712ffe18164ce6313993a553e2b9aafe9c0716318f81a5d0bb1da b31b5efaba5a5020c3bcea0f54860e0688c2c3f27b9b0e44b45d745158f484e474d5d3b1a0044dd6753c7fb4bf8ace34 b2d615bbdfdc042d6f67a6170127392d99f0e77ae17b0e1be6786ff2f281795f1bf11f83f2e0f8723b5cdd1db1856e09 a6e014cca531e6ac2922239b5bee39d69d9ba6d0fa96a4b812217dd342657d35606f0b9c5a317efd423cdb1047815e3d a8921736b69c9fbb29f443715174bac753e908251804620c542fad6cfbfda7bdfe287f2902f30b043a8a4b4818cfdeef 8d73a9949a042ec2dcefa476e454cd9877eee543b1a6b3b96a78ffcff87421e8b26dd54d5b3192ac32073cb36497acc3 b936a71ee8df0e48867f3790adf55dc8efc6585024128de2495f8873bd00fd9fa0984472125e801ed9c3cdce6698f160 82f69c06209c28f64874e850601dda56af44ffc864f42efa8f9c6a0758207bf0a00f583840982dec0a517ab899a98e5b b7a0a14411101473406f30e82f14b13e6efc9699e7193c0be04bb43d1b49e8c54812ce0f9b39131a20379c4c39d3bbe3 81159c969f38107af3b858d7582b22925a7ccced02fae3698482d7e9cdc6c568e959651991c6cf16c53a997442054b61 8bf1116a206e0ce9199fcab6ed2b44a9e46e8143bff3ed3f1431f8d55508fe2728b8902670cfd8d9b316f575f288ed9d a279b2149824b64144eb92f5a36b22036d34a52bd5a66e5da4b61fbc95af6eda8e485c7914f448abd8674fc14d268d9d 8b98279b5f3588d1a2f8589d2756458690a502728800f8d94b28e00df842a101c96ab9c5aee87c5bbe65552c0c383b80 b4a27a351ec54420f94e0a0a79d7c7a7337940399646631baca93eeab5fd429d7fb39428be77dcbce64a13eaa3c8ca1d 90c08baa29ec8338ffce381eae3d23ce3f6ba54e5242dec21dc3caaed69cac13f2ab5e8d9d719bc95720fa182eee399c 85156d65bb4fef69ffd539ab918b3286105ca6f1c36a74351ab3310b339727483433e8f8784791f47b4ba35ca933c379 923005013c27209d07c06a6b92b0cbb248a69c5e15c600bbcc643e8dcd2402adebd94dd4cafb44ec422a127e9780aaec 863b23eb5463a6ef5a12039edc2f8e18e3c97b244841bc50af02459b1bcc558367edf2f6e4fe69f45f37887469dd536d 87a4a7708a112724ff9b69ebb25d623b5cae362ae0946daed2ec80e917800dbfcd69f999c253542533242e7b9a5cc959 8bf4347ceea7f94b53564f26b1a4749a16f13bf71a9e03a546f906f7c423089820ff217066159b0637d9d6824e9c101c ab07eef925d264145971628a39e4dd93ff849767f68ed06065802cf22756fc6bf384cf6d9ab174bfc1a87bcc37b037aa 8e3f10a42fad43887d522dc76b1480063267991c2457c39f1e790e0c16c03e38a4c8e79a0b7622892464957bf517ebd8 a8722fc7b1acf0be18f6ddf3ee97a5a9b02a98da5bc1126a8b7bf10d18ee415be9a85668eb604ef5a1f48659bc447eb5 878d6b2a9c0aca8e2bc2a5eb7dd8d842aa839bbd7754860c396a641d5794eab88a55f8448de7dbddf9e201cbc54fe481 ada881c167d39d368c1e9b283cf50491c6bfc66072815608ba23ab468cfbd31ca1bd7f140e158e0d9e4d7ebfa670bc2d a2b48578fa899d77a7ee1b9cb1e228b40c20b303b3d403fd6612649c81e7db5a7313ba9702adc89627b5fd7439f8b754 8e051280e10551558dcb5522120ac9216281c29071c0371aaa9bde52961fe26b21d78de3f98cb8cd63e65cff86d1b25c a7c5022047930c958e499e8051056c5244ae03beb60d4ba9fe666ab77a913a067324dfb6debcb4da4694645145716c9d 95cff6ec03e38c5ab0f6f8dccde252d91856093d8429b7494efc7772996e7985d2d6965307c7fdfa484559c129cca9f9 993eb550d5e8661791f63e2fa259ab1f78a0e3edad467eb419b076a70923fede2e00ddc48a961d20001aaae89fad11e8 abb2826e4d4b381d64787a09934b9c4fe1d5f5742f90858228e484f3c546e16ee8a2a0b0a952d834a93154a8b18f3d16 a922ca9f2061996e65ef38a7c5c7755e59d8d5ce27d577abcdd8165b23b4877398d735f9cb470a771335fc7d99ecb7fc 90f22862216f6bc1bbf5437740a47605d1ff5147b1f06f7b13fec446e4c5a4a4a84792cb244a1905f3478a36f8d7065b 87f3d9a86afef5b79ea1ca690ee1ee4bb9754b66f7c50a42ad6b99af7c222c853ca161f440a0a2a60b3b5a54e3493240 80a9ca9a2d33b9cf61976b3860d79f5d00de89a06ef043d2a52931809018aeb4ce70423cbef375b29c2c750c2c8704c2 b4e798ef1d615896108dae37ac50c1e859216ab6dbac11653e44d06ce5209057b4b0dd6d31dcfcda87664a23c8ef1cbd aaed6d1e7c5b1db06f80dae6c24857daadfb0268f20e48a98fba4b76de1ebf65fb84c3be95fd6a418b498f8285ec63bd aeceaa316c6369492c939f94809bc80e0857abac86c0d85be8066bbf61afbaaec67e28c572437a8d35c49dd596b3134f b791c3d53ed34a7d1c8aa89b7953e3684c3cd529230824dc529739a5fbe74b58b87f01e56e7a169f61c508237ef67160 9351f8c80634386c45c0050d2f813193f9d839173be941e2092d729be5403632a2f18dffdc323d69eb0dc31fa31c5866 97693184d5c0056ae244dfb6709cafa23a795dc22d497a307a7f9cf442d7452024023c54a8d6bda5d90a355ba2c84f3a 85362daa003d23511ca174a8caafe83d52b6436dc4e43c4c049e5388d9211b5cbef3885896914d86d39be0dd1f910511 a2511b5fa34b24eeb0e1bcbcf872a569d1ff5570fe7b0fb48f5542f7fe57bad808d34b50afa87580866a6cb0eba02f27 b382e3327eb1401f2d378dbb56ac7250adde0961bd718575a64d264ffd44772c20752d4035c3ba60eb435e160b375e20 afad8a5d40b536c0720556845a6b257ed42165c14fb4b4a874717d107752f49ed9380c5b048df3aca67287bb8fc411a8 8fad0c98434ca5373c2d767868f679b76b4a8d04bca8240ea3f388558262c2d61b73b16fc1160932652b5688c25fffcf 83898008b5cbb6f08f8ef3ec179427869682bb4e8d38f6e6a687a214d4a307436afc64ee67d70a5a8ba9730bf839aecc b85232e79913785fd82b06890706972b4ad7a309489930ae23390d51aa5189731f8a2df24800409a8c36b3dd6fc91275 a24ff26ec792f3701da4c5638c1fca4fa4dae95b01827d6200d583c4caf17ea3171393ba2a8c23d1ee8b88402916f176 adc5c7a7ff6b41d6cc386b7fc69d7bb04179bdf267864f9aa577f0f6a88438191fa81ebaf13055c2f2d7290be6421ace a05e835abd502d31454d40a019010ff90b6b0b1f993075a35c9907aeab7a342ac0ba6144dc9379aada6119157970e9b2 85ff07ba58463e7f153fc83f11302e9061e648a5cbd272bb0545030b20e11facd8b3ff90c9ac8c280a704fbda5c9d1b0 a6c735ada8f4587da8cdad7ea3ada01650b5a3ecab8d81daa7a5f5de51ef4a6592b524692584306f06be3f6701f2870c b138deee4e53ae8d677fae104f713ef1b8babfecec16b6a85785a66a72784eb09d44c3b63567222ade714e98f7d1604e ae79c1a49dafcdd972acd95d8ad0a35c02adc7fd736d4c44c3cd13df5789d339b5ea16bddbbd43e486a061ab31baa5c0 ab3cf2371a1d7dcd0ffe3869a0178230964b06694bf258b2073ea66a2afccd845b38485da83d02e1d607d4c5c36b78a8 ab9609f28a325fd01cb39540e3a714506c44e52ef28ee640f361deb5760aadbb23e804663b0fa20a66e239c33f8d8bb8 8ed95ea8e76e1b42823d7915a6aae77d93746f846bf602841dfce0e47543a36efb9ee7e5b42c73c3209d911225cc471b a80b6162036d43811482323f0ce59eb18740e33a63d7c7bbbf3be206985919e5342d53a69df537d43e8b7d7f51e8892f 93c03d0a5083408ba00c125a8a9385213d4c860072f0297857b1235045819b904e07f2425c13a661d0a01d2e53347f4b a6581200f00f96c461621e1d26b14a23687dd97eb9f7df4ba641a84340ee7306dc1796248fba4804f185947ad13b4385 8be174018fa40f7e0cedc5ae68f38969eb7695f2205e9c573641e533d56f68c20abf38a23d2f0dcac371e60b21b18615 857ad4ee3218c647c58f09b8ab22bcc8976f00a768ab1f708618e868e6143474be846422ce2710a0ed39b5155b6f13a1 a490bec40f322d599f26bcefcdddd8f2ef6576aa737d5ce7e8d5d422741abe749e3e6a48489aed8c560633f72857e3c2 a9c0ee339621f1c4a2410f9b4d2f03f1b558dae2973807b8bccd920e8feb7f65dfde3e79986b72ad21fcc4567240381d 8592251568e750a430f7d2c6ddbb3ec82a4dd9fd83efe389e69aa177fd97ac2c96c59a6e86db20d8e6f125d65b46c4d3 a4e2f4aa6a682913b423b097c4069c4e46a1f3af9556b1bfd0580d0fc01e3991488458049e0735b2a629684a79271c8f 8c4f6a3e738cf74112b08b1680be08158013ef8a515a81215d8a36c9b756786d1b4cb4563923463f3329292f4b48bf6d 8bace547353c02ea00dd547eeda7259aa354d4772dd5e0c486c723cf88627b7112e196b879c3c92a9561b674d9fc486d 8d372f4901e25e8db64fa098148d4a4e709b0e9dcb756d0f90dad99dea393054193ae1a33d292a3dd772ff7ba05e4b71 a8c7ea6a6a031ed23d65639f01f5423190775558f479700597df7ae7e338a6ae5e9b32f470aff20787ac8b7eec84df6c b6e9dcba240fdbbf66033410a79a2dd3e9e1ffdf2eae949b3a9ed720e939d92339991dc3e70a5ac7d5253f317daf0b7d 974dec4cd61af75721071752c664d9c2a5121f06ff1515c56139a177a3ca825f763b69d431d4607e393fa74dcc91cc58 958863e6ad583a9d370a6db3639066982e44766904e7afa849b132f6666b7d08ab931131b3bec7a506d6583e93d56767 8b93a33b5da9b3300c20a96d80b894e3789c77041183c2cb21751579c8c96857f60cfc2f075201b64e95a78985c5b321 b726cb9f7ef34ddbc2fad82b3b0af0b30cc913e26c5a614ae5c19cc9c55c8e6dae069db5315a8dcb6d987415bb550ca8 a730f515398a71bddd66cab2ff996659d4e47dfbb08ce7958a41021f76d269b91c7498b708cd14b183a8ef469c772803 a4eb3b18132eb0f5337f14e01d63ca0bec0db6a43870f800e5491db756c2f5fce519d8dba5528b4bcef550d06b33699c b1ab6621eec1ee6784e632e214693f39a14f3715991996b883d66200963e065c86fa0667f7bc36b93b40b5d90ff708c2 80486a26c3532ad6e19f76d8c9344e2626c07363fd495264927cb5935fa9565ece670dc98767afb04af6a9a5c9231075 8ee20e0df3c84a1c6b0e21bcc325cf99235b747ffe47f17fdfba548a358ca75cbcc331dd50db2311b400ae882256a608 aef4268959e5541e7ec69c921a1e81a8374d7e44bf1bb2debf4101cf3cd6b7d6ca7f441758b388de96b3e0edb5b97be9 8793629bd29d689ec94b016de8886cac6e2ca6638911babb22db4a787661422da0639a4e4089ebeb689d173abfe75950 b487b3551c20a29e9a5abbda8c50ff594826283e443c09e3ae09b914e46060b3f9abf70434444ce1487e2a74e562616b 8f11531cfc5997dd04b997cb87ba1831aa7041d5434fe72de66304e3f165d882fac891391fbb1eb955c65319e65293b6 b195136875fd02a75676c33cb3e60504d5964f7a9e81f4c8c8fd38af62e2145c55f765b3158664566191188ac678f381 b374174b0b3eb04fa49eb4ece45173f0db5d829eac370a20a62309566e0f98b18f72f3633626893c053b7be6bfbd2366 b2a2f6b0cf652775679b2d677048f2ed8c31a3269e6cddcc7a10e3e6fee89e486b50d9d55fbe452b79c4157c0270fb77 892177c364dc59032594e7a6fd032286ffdf4fa0b9e3baeb37ec839faebfd2fd46c57b2c9bfe9977b59c93a9cc0ead1d 8ab7c0038a7dbb2ef200dbbe9acbc875829ecad4883792d5c6ce283de67ccd9aa935a9cc7b30b2bd9de7fca7bf2a9a05 83745cfc78ca709835aa6c6a233c2b86fb31e3f9f6a8becf63e501f2841c4366fb7d131b746c9d3291afda714ff05579 a723dcb67925ef007e8339dc578d2622d9bb77cfda87cca0088854a59414c02338752c56116a6c1281917842e8467c38 8a098142da0af2254c425fdbbd0d1b1a17b2bd781391ab37f181775524b8563c64ab8a1602aee2ac6c0a82ba11a8b1d1 b13bd7529a9b351c5d395c794c28bcb0a3167f1c992e8c062eef47be9be27895945231d249c73a0b6949daa295e14944 a20dcd2fc2222eaae467d9f5db861040f58bcb991a26e5663ac3aa5e1ff13d0010657c5af586cc4621757add2b905073 b818f660c3cc4e9f273c25ceeabe562c8afa8ff88529c26f2cf45ae6b2813cca5f350e3cbd56f6257c4df41722dabd25 b225d5987108b24411bc389276f12509a45e86d5ad6b6d929af5274df0be11109c0fed329669a0acafdf3b0beaa8f2ec 91fcb6d04576d3c6bae947bb7843b430e5fb0592ae49b0a65dfa5791f4eaa4bf2c7f436c8de7360f217001c2b4e5c67a 8821f7a1424ca3fdc5d4a5606ad10dfaba6094cf36669fa9f84cf7617e50425405d14980780e1e18a1ecea7913cda896 990dcb7f38f56521a70cb71bf4522649fcd46ac052c7feabb0748dfcac9f9c0f95d29e070d32af3cd0adbf869535e17b b0fac1029fe2c1100f24e2f4bf10c7672199fce53513c7dde2e8d9b00702edf0143e0e1dc7ceae7dcc6994edc2422b6f a514ebb1a33451b4915c05114db0b10168393613744df848b24e43e09f0bda23baefd9d731075198aace586615ac7911 8b77f7953c2e67049fdca3653b8d8cf3f799677f79b954da02bdad8cc4d6c855c1c7c16b4f6f9ba35f46426ec28b2d84 875520cfbda16ec5b1d1d00f578a910d0fc052f17870ba093e22e310bb07648d34817cc2b8811b6f52de535f7046a0d0 b8c77b4be0b430851c4ff69e91cb770db1935d848198601393810ef395efab52deb9d5c6525472bab720273d5e0e7a79 b6d4d437146671bdea62fb6545395ea3df39f1cdef21b8476b68e7a25aa7354f847740576d6c9f187bbae9941f0ae450 95c642f1bccdb62cd6a2212dcdd6ff8d49aee426ca08b7cf3a9d15249d24a9eed5533f92a70c84498c0797f8a57efa27 b617978047ed0f748c305aa7f30c2dacd0db00baa67fe0c5ce346ef0e6991dc7e05f18dcb2702467421f8390f27aa815 86411c7a00b3e8b43bf22fb061b1f54ad9bbf632cd74395a478218389c0f544668acf3dd7726532d080ca7da9a5f8608 97bf684a8849626c4710a6992f6c11f6b5406fd4dfe9e6aa502425aaafe9827e2c435aaf9a5d3d2ba3a4c0e8aec79ba4 8b178e2a125b461d3180906ffba0af3dce614c64058501fdd35243ababf892d6fcdea4834ce42c25d5569452b782a709 8ebed2c8a25c61da6a6a8cb0d8f5ea179e28869753eacc728f2c076f7aed8598cd3aa0981f120f9e7ea55b3a689ae882 a6f235b8e655ca3d634740b53d8c0a757ecc75d2b8838b7948997c1985473d01943d935f687b86cee56cd47c8e773443 a7959c465a9646908b9d8032a589e41a7dd999f2ffc54bb42f22e5f8a4d8c493a31bcc7ea2cac6c8dbcc59acace7181b 96d0532df2e12da20a57cadb6cf5f6c4ee1aa4775629358c25f1d51677a3e96d1fe3b232532324b4f02f941952d4cc68 90f493473d686b639a30d1ddc9c72eae6e983f1236e162e58e967a477c0654973ea2e1bdf4ba1a44d7247bc1befc2cab 8b2d87876d9c4085102a07ebb41c565ba69acab99ffc03efc18f20e48d3f3bbe4fc6ddab9c78fe479d9ada80504d85ba 829a0fb3200a28e09cacd6c5346000e7786116ddfd898f37dfd17bef454a8abc0fe939ed8735c00769f7f2f33cd4f906 86194ec9e88ddb7150e8b03e7a535b6e99863fc6762835601efd03615aa97aaeb413cb210e86035086ed852b39c9d019 b02efd116a7189cb317ceae392bc301ae55470f0489fa89934e182aeb8c67e280299b975786fe9a470bff46827defb9b 87d7c3903bd22b12d815506f150373f518d47dfc6e5fd74347d88b518124c9923d1e4c98defeb3a45d53d50b423e2175 a1a430406b28254a7d6348bc98e697e9bab43839aa05d53faee97546f84541ea0b559162619b2045182938f69bf61cae 99d243c226c61c6697fb3d2594f3533fa5dfd7cfc87107908cacde337d7a077fa5a9dc702d26081b065edb1227498e65 800ee5006ab6217161f42db0cfc552a81728bb4fbd7af6e4620ea099a65ef6664184af3f65a07fcec7e965529c5b49bf 91bfd307579cadc8f81009558605be3edbcb8dbba271475803484017f40130b2b216aef4f620d960193be681877d3a53 96a060459dec458d19a6f8af6e49dc6c7c58c55dd18915c5fce5e0f4b4a422fce3b9632f6059388fe760289abf70f173 9921a37f3e657222c7fda3588418a9071409711d9f1fccede7494429f02a45fbc52d79fbb64e9ccd518f60d06d0520d3 81052b0d15773cb75975ca9230ebb2579700e489c7e3f07cd9cde206fef38b8139bd4976d2b4a7840495fc645f96df03 88ac37ba66d1de5e23878c992e4d54023729e97e77351f50dc5918d738b5a73faf1dc6feec7e85784761836ba1c6f778 ae1e6072c13060775f6086d1ae1f88b627ffcb810fc0e0e97deea1f3a15ef0aaa52a6dce2563e4beedadc131af2a8281 8b60a340f5e4f90badf83001b495ac9f13974c3d2054ddcb3e6b8ca99dec5cd63a263e05c282454191ab2e087d5a2911 832e2d56ba69dbf817b2b9dbd25c1538d5b8dbf5d9bc05e6be85054a423ebb66a71b157e166e0b9444ac171b34b7ccc9 8586036fc7dde1e7e3ecb61663130c4529866ae9f5f5095b9fccd24a4c70eea899aae5f10ea1ba66d1665b2d83be35b0 a77969453b5c083a207913272b5b69d4ccbd8718bdf54be8fbe11b4bd0a2168aae3ba8f9362afa69c0ffa28d7e5a2340 b7fe9568c214baad0ac5f83745611b481f744ec1c4fa78a549b180dcf79633e5ba75dc20055012a13d849eb7a9be57d3 b01cad1d2a6c51c0ce88243d1f52f95fb5ee315a905079688027511f0c4ecd0563a3a81846709d272fa5ccb9665e8043 8eae0a21adfc569aa57237654021c2bdb2c6f0f52ccc90a126682c21a1f9413c63d285f92b2b2f8649150a9284bf70b7 942acc947192b5f3cf60e92383e5d35f79e7a5904e8e9fd1c8a351676c83ad29b0afb6578d555457cf909f8f4d27adfd a74e092f8628fba9abcabc27e2e9f3d5a9a941dfe50a2dfde2ad179aabc73afd196676925c2d98643ab8b3d02bdb66ad 896159daa2afd757cf3f9d34af248ad68bb3c62e4c9ac49919422727479cf669098f270b9e645607a7d11adad4c889b2 a428d8370813d78e7a2a24eebd36e9da2f8bb3605e5a39b5fcda939b531c35a8ebaaa642ba556250a37bddeec90326fb a5fa04eb60a1d5ee9820e78f42f7be15e1c02757b539aead995768c6209684d6c183c71d282e0c12a4c15c03f9a89d4d 93c77d5d220e40affa7269a6915c076c9aef4db552c643ae5d560a79c955b491c6346ca4cf11cbb7fe1894e28d47b065 802e605d2de745eef6981d88e7a57ef4046a2062725e8080995374cea2b3273c27f35b7774d0dcba014710d8d6c501f2 82f7169e6ec9b3e2bd450f35ea2e66d06bcf900acf5b73139677b48e078ce2e16599103027b2326770c99c0a690f2015 b0c8581879439f9b997551233fe2de71aa03604f9cec37a7b18c5854342d9b67be468f3cac4bf6f64fe8a0066248c498 a3f626848a4db6e9fb01cac90d3362ec521e969ebd5228af694ea3671061476149f13d652942ac1e39f65591fed740f9 88a8e759b9cbe16a7c16e43f4afa2de6100d2eafa4dee75ccd653ec38c919013d0a6b35c1ee1eaee7c1985b58bcc9e92 a3d5fc7aaea072798490616552d947e95f49cf02a420314307aafb555287ec607d75589ba24b009cd68299dc6f7942fa a809cceeb84f9bcf3c3ddafde3041e7bc3b1d14df8830ab849002176a0725e6f16f70774d8962cb0b8ac0dc43c4ac66f b8f2e46c031cc8fa160a08c2ebdfa85345ed14771b06daa9636b0e7792b7fddbc501dfc85cc626a01104a43a7d3230c3 b5367e2a521c318b802ce16ceac80c4b8139f73ddb10ddf38433397cda70a86ea1f051cc55626a4e99d27f30f3975ff5 96d963660121c1441cd13141279cd371a6a0aa18b6a20761b18df60aa9c14e13489afd83695a0921d5232efe72045f07 80818d492fd85d666bd91aaf6257b86527fdd796773c793407df1d4a0f91d74649a6bab4d15155c36ed4c6e0a32c5636 931e22918905fd6c230d3d867ea42861f3074d320d14e1929031924c8ac209a5c552b679b24563bb12f9749b4ee983bd a4de2c333e74ed9bfa3c0bf6a0beb90427abd9aa4221294cda74331646b58ef46ed57cccc8798ba2b9309894b17cfd69 883881554c1d88c0ed8d3b6dec3d200f6fea69a77ace3e4d6f86b41506a23724b4394ec8384075f9c75c3868ba8a8e8e aa0539ecf6ec9bf06f24443027f8f24b6b3d8c5b2084248eecd4bcad3c9a69716e1a0d01057f09a65bff1006ac5e157a 856d74d44c943c9e809b42dc493dff20eca03cb0cf5ed45108c69b1f90d8592a53ae8100e99380a274fafad23e74cdfc 9188257446661c88da093b7c5ce998135913f63842d7c1586065377b169ee35b062d925367fb9b909ca971f1188667b1 8d3aa57cdafbe998938787479f5d590c1484c6dbe94e6c487e57a746ef5252be0eaa5976d6270de7db64b6b92e57a0f7 b8f4d6997240f9eda5aca0c43323a828d1563c491b3db2087f60ac4120a3fcd06075fb42bb19d0339ab5ee3fb7db25d2 ad247ea94b8ae1e81eae4c9fd7b39e6601b53cff47b2547ff90a3cca87192eae28408082774a1fd14bf9ab459b7a4f1f 9598598070f8bdbcc49056c40971e673726cd8c1bc4baa0b5124dfb5fb750e7baa7a7df18eae2bd91955ddcb1ec67955 b874131ab1608667fa60ea29092d090859eed1812e90c609afff96d79e82c5ba546f617f4c96fc32c9bba97431c1e9af b00750a9cdc75c2a54f0d3cc99b0fe02300754f25166f7ac85ff41ab5e9cfcca33a29be76a480f12a2d410c7cd5032e5 84b5bd1c90bb6c66755b28ba4af493ca1b0c3a4df9f436aac67d2e07289053f925cf6a149a84e74e1027dc8758150179 99caf64bd9d193ff306e8ab5da3f1bb2a190a60c3a82099b8d03d17fa810dc53d176c21379f479e828f60d25beb3ffd0 a8fd9de502f1c261d5733430e5a18d8b7892a98c9529a016fc2ee53892ae965dcd9c75850bcda4c7edb980b8d88e60ea 848c02cac636e047028a3fe8c1bf4066fb7591b96b0340f8fbd476ff01b35fa3e37d309333771a134f24800e5f3f9289 a1eab1a06dcca3439f0166441e7e7f2f5b56f5f8aa9f45e411c561f556e0fb71c514c06c26ac53b49a576caca5faac3d aa603f970dcbe953e700e61c151182c8d32cbbb53ceef572ac93383db33a4b098b5c7b267e42d514ca66b740c0925efe b55fd5301bd700ddb0b4f72fabe9a91ad49759506101fa802ed1677e9553595aa4d2c66f7574e78d21ce882ce0120ae7 829137bc4da7b4886d3d04d2c39cbf4b1dc40c813ac1adb425c7b9abf9142b516314cab79c68454df5d71994ce416144 b83a3a22735001f783dd48a01c4fb3598a51ff3987e842b8045c71c035b9e43645a55254ca5911a5676ef4a8af12d056 8ca8d463deb13f9eef5e533bc39efaeb0c15631282c5c0deee1673b0053a7cccd514af09801dd6c158caa159fe9351ac a9ffb1427828f3c456b9c8cc50782de1ab0029b9233a0fd998bad0fd014d27e15c4a32d1e16ad41bff748378b5abdf49 9627e29f725ddd86456aff813976bbc4a836f4deabf5ad9f73d1a260ceb30948824df9c8841e6b3c529652202be181b3 b52c988647fe3d9276eed3c262e1044f57fbb116c64cf4f207235c205b3fda0f3d789bf90f5217401b468d85fdfda404 833bbd6e2924f5c4446cb76b881d1434a5badce9eb9b003f85d076e297ad7ef45b822069fe54d17427a348c3263fb838 a067a36352db6f82a116cb87d3db5f60b18576852409e2076cbbfc7843af78866313a4969385a40271051dd195d51116 902b99545971f9a103f99d7399acc347ac46fe156166e51deefc0e92aebf5893460c69aeeae11f5af9f49418e289ce6c 9206a0e9ce9b9880f29ef0417c96931985f5d83bb17cebdbba4ff2af81a3d37155b04649426f698aed372e4f669599e6 b54a5d7c976e45c0b1d44433595eae9d1ae9aeabfd58cd5ecb0c5804756a7b01c9a517754423b4714a3695533a3114c8 91b612131e84580ece228b81ace83da0269b53f94d3c02a1a0879ebbd81bdc252064b3d03a7e140b43a90f237d9a45a0 a6cead3b8607eaeafe37135bd6de8fbd16f806c131eb71c8d36bfbe295d45b070255e50dabf076e2c3f6b8699be71d6a 931da21e67b11ba6ce438546a24d063bcd51aebe39b4220a78d9c0aab88b2d37969b5ef3502d835507f9c8d6d006714c 8fda408caa9daf01122a2308b7b9d328f52e1e2f138a8bec30492488f4d710e5e52524a6455a3a2ae2818ec8a610b650 ad8ad5c189644352d90c462731c46145410e5adf38682bb80f95495dd64d9d13782537d68690847bbb06c6be7175dbc7 87bb5cc466ade60feb0961421c3fabdc8a7e20f11df8437bfff63d3f8bd25305002a396c9d0fa4fb9a9986d4717f12c4 827cff72870ba00c29064a7d2b4973f322d6b6de7924c93d8bf8825e7a0e8478c7748f90f5c716bf83c55b2795d315d8 a225895a8e94229776ceb51b05356291f2dce748be17a60d5aeb33ef8507c368bafe5d1d6eea927f28b9d1422b661b9a 8e011323ce670ff51c964241a6b72e0e0ffbb3ff9bb2762492323fc3a4abf4718091be0945287c7329850e4f74462cde a2c03c2e5f4e9d3ef361f68b188451994ad1b24de9f323370559c8abfcdc7bffd289d92e78a5f6b104b0a12c84dab2ef a22b4771116ce22276fab1fec6826610707ce8a342f9f60b079c4e0259dac3cc41c96c560dfd0ada6edd2828f7c0e8d6 97c17441d0af9be83b42097aa8b7cec84a253b9a2b957214b8fa93c26d2add46144faffa7b8a55312059b10690f711f1 94bdf348849f31a2737cbae5e5848aee711067bac85c11c2e68b44c398cfafbf3493a3226cd1ddf7a916e7613fc7b6f6 838f59c6e8469a8ec6fd40b978a3607439aaebe1e50ff707eec72c0b8278af05b477bf12a384b56d03e3d4eb91e56f67 a1940f0db58185e2b3aedd2b0bc2b73b4a65c68e09b046f38e9dcd4e13c94f5406bea92635190bf315e48ec64eceef2f b2f4e0ae44e1f1210a91d8f280f17091fa994034ba8c991583f8182a323e9b3001a712e3584fc2d64ecbf2d319d076b2 9342b89c721338d02c7854cd7466fb24d93d7313b6114ea591e6607439c8ddb911d1cf35f01898e9c557982bdff8f9b6 8583fcab15be1dd14d5a415f4b14d706c8c62f058500f1344b37730c8be6741779691f87ded3cbcf6516468b373cafb0 8fa9587c7989646571ad9032f34cedd353caee14f5be5cde1e9e0a1710f90c08faf6fa96a60e1f150f761c9c8ae7417d 8d9ff904cc08141f5a9879f5f77dc600e6edbe859082231a4d819953890199bcc5f940b730ea688332f07e5279d49e1c b5f82b46e5ef9a2df8d144202d6e2e4f3bdae8e2048d2af5ea7deb3f722fbe6d370401954e74ff0d8cb1010ffb1f38d5 a3b5b57d435b06ed70530e060002a8fea71746ad07d969ca23f22b5e52624527595b6a6d54b4e953fb7b7596bac378f0 b90f89390df6d4b7879b915aa3c29b8d779d035033f8873bb7ac54a14ec98f0d08c0e3bf696e2ffa7b5730d736f571f8 8e81e371b92887e43d95c0dbdcc9575282b26ccebdc8cbf46587e4f2a83b61e9bc0c6d7d1f114b9d21e04fd6c180b12a 8d682947c51dffc6e0fe0a486293c9ed121f441805168236393087cf62f2a429cca60bf0e472564844347d32c6bea27e a8341ec7dd189fa7168759240224192c58209b53fc961c18082deba217928c399bde08ceae42bffd37c1135b4d14a845 a94bb076dcc5ee5ec82fac57c5b384c690df12631882bd1b960e1eb8c04f787bc22b7bac315b9dc5a8a098f17f051a0b ab64e1c6f01b87706c88a3bd974454a438722768de7340b834ccf93ea9880c14ee7c2181432acf51f980d56de73832ee b7b0058bb724d879e5ad7aed6230297c54cb599ef659e86bf2cc84c38225899fb388391df9b2e6fdf063171937fd8c72 ae856f4fb74c27cc98b67429186e7df4feb01278cd57bfd3170af6e52e0a23b9e926bf9565a890cfb4ae8f2d590b2cd5 804b9c6702f0596d328f92fc1ed5a30a7ba17b9204524135001b569233fc4937035031d079f52fd04968f37c24013898 84274ed1af6bd6a968583995622b4d18c6a2bc703ce0d0edce45bb736529b4836343dcd11911a94a134dca7877e6cab8 88808098463f7505034c3b6328c8a08186b33f7a981c08376e429dd64b79b97753170531ed078dd265ded4ec0a1ed8d5 92823bfb23a4eb84d3759e7d717f0c8641ece0927cd2ba8c728c26bb35df2629a838002f353c8d3d75eb19520aab5f25 8db36bae4d960cdb9c51f419d7ddc81f372e56be605bc96a9d4072b829f05527c37c8f255cc6115300a2a0d2e6568d89 a8fcdbd7f3b4d7ff04149a209feb75e97149e7efceaa42d66a6b8e432590fe7bd01f1a77fa8b47108f670b612e33fee9 a9f4c53c62db7e5dbdea6918862d3c6d24b5bd8732a218edf0ba61e9d1861182323d8ecd7bef8f895b42970b492f6e40 8b95bc7f07818f4d7b409aff8da0b2c2ae136cde386f53a71565cae9fd14c73c13cc1cfd79c0f97cd77839fb738c5b9a adbd1d11adc756b51a571ddbcbf4392415231ddad93da09acfafee03a9e4f9e1ce3826110619e5271feadfaffce3e793 95d327c8bb195cdf25fd79c98f9406a6b0316214b1630ebcce95bdaeffafa36fc1accc6882e0e5d13a8db5c0f3c0e61c 8cb2f1e2fb25558869afdacc7bb866544cfdd566cefcd048b48d458a886130bd086ecb7600a960a7f2563c61cb326510 b3aa8c4bf5b933d89cd74ca7f7176d6624d562d7d58b041328b49d7562a30b489cb606abb3c49e85baf04c28e9cd1f44 97f9053a85250c420599827297453c2cfde087065b823d9e43139e6a9cac3a2ec40a1b6e2f0726bdc870fff215462f0b 878d5dbe6b881389c2ca126ff66d87127c9aaa3f62f0d2c1ec0ea2b279ac95f8a06710dce166415db227655e2345a04d b2c33a6b4203e3ca5247f0890e475518317ffc44cfbb1da9a1ba02114e8b752bea618050b876de5cf3b1906140a64471 a56170c8313d2b5541a795bea9934d4425b185b5c409f0484df6f44f0e4bcbf50b860ff46b7245cd99c1cfa8fc1965b7 96e2b658e2876a14147385fc423d2702a3cb76962b6b437222cf9cea39ebf4bdc03bbf434b747866d4bf72b4ceefa639 89c4a74fa2f067e7ae49c84ef782c331bcc9245db7e941804e2e99d12e987b4d25cb827778ad4c3566c4fc68018650b6 a01d30cea7d01c80ff26650020fab02e78fc3842e2398a81b44b21d58d4e9816166ff4ed2418831fa995a28ff35cb6f1 b960c80b55a8845bbf24bc3f23b0110ca701f9544ab6a5bb7929330213cb471321e55c390ceca3e24bff69bdb0d331c0 802c5b13f22be7be0e5db11eb3be0f0ea7f9182c932265060ba05fba20ea093dd2810d3b969ee3e387e60fe6ee834e8d 92478f88ef7435d15e39a97916c736abb28ea318394b88678fddbbaab3eaf31776110936abad116a8ff6ca632dd12043 a6d3da0370c303001d5ed99d1db8bce1f26b0e442f0f042e36db9674e92dcd6e80465e772f1e669f99221caee3392fe9 938f04f70a8f947d6df2f0c0e9af3cce0c06edbb3c131970dd60884fc0b0a0959c504a2a36c3ff76dfe919905671626a a7117e55224230822e9983df2132347eb7208cb6798f291df926ab51e04b1a1f78d5568c9a8924ee6f57426134360f20 b91074c77ad93fe48dc2b10c0c5a62ca3ab7d98345b919c52d84a9dc419b59fc1b267e1c2d4b2e120016ef84bbdb0cbe aa175c6b6edf02fe8778762c9575581c0ee6efc9dbf99c291a41444a23a056b893be6c45333d907d0bbe9fb0eef84d08 ad36dcb4e2ab425aa339ae464b038d550cb11186741dcf257f1b8b80ed4f32ffabbece45e2dc1525d4c3eeed819ea04f 91cb35c1ffa9cd5aebef523edb8325078da3eb5cf9e95c675a76446fc7692aaee6f949de064ca2f3e0f082cc3fa93e20 82622f9410c143a86bc4d756b3c7b324dc295231ce865de020d61cc0868f2c150a473cea3a5b756b36771ce1032415a5 a5c29996ad3a53468ece9356a5b4ccb68971ea1c89cf39644f1da2d4a477c2ea99bf791ef902b87c225d8c53d67c4c92 92893eceed1af34fa92b23dcbab175b6a0188a27dbac9ad3317c4e39955a763cb383ab13fb1c519cde311d8a4d12e8b3 8a093cb191b94b0200e38d31955f9d240e2be1edcd6810a2396a061f17c3ddc9c4f4d56766ddff4e121be7110e03b869 93981473df0cb1f4b47c7d9b64e3123dcf1593845b401e619f5d7c70b5dbea375d1ca43fca65845fcf0a6b2e0af43791 a6beb6b0697070f9562910add88d9ba91992f8da127b27be81868b1596d1012f09ea7ed601b4a6474c921a1a1a6d866c 92026b1ee30f2ed61c9f30337c3356844217926aabdff383c19ca3c21e0bc49811ca5b308012bee4ef250cfae1615800 ac0ebaea6d35f84dac4ce648af096305ba68a7a0aea0a11ab2fbe3162075444a158433c98141bc92ef3b3400d6deb46a 83046f482dee24ac3ca83373f0d1b82ac1c4beda0f229a9011a81ec659ff5fc1fb105e219975b5c744308c77a24f71e4 aa5a312c47ff7248dcb9c6ffbe5a0628ccd565c07365c4413734d415cd4fb35772622ed833862dddff520a67c509c6a5 a02fb88805c34018ac33582e19ed0a7e4616acc3dd0867e5f21914c2031c05c6dca30b8b35b57c2b137750f3878a6f8c a60528f1f14bf0c496491d46a0fbbd6c343e4eb3f1631e92f96a3c5e5c684091aabe5801df7a67f7c6dfd1b0d35269d4 a1fd8e7fad8ca05a340c05a051bb0eb4197eed345f4104629a9e38e234b09d789cc5537024615feb4a6177d32d39e39e 8e70e36c1aa070815440e19443f1f04aae23b1b59fdbcba43b47b94a026c82c8f66c5dfe54f826f4d95ee1930cdb8008 8234c1969fa7e9079661e4ca309b71b1aaa10f4372be0b963205c23a81f5a3d52ec08ba9ff65b37f832b52d631580d61 a18cb4134127fb37c4abca328cd0047378a2e1423490af2bd3eba9ffcc99ca81a3c22404c0886f21f65c7b93c41d7981 b46fa45fe538816de776eec086e040005706cb3eca097e290abfb6864e745c879868aac8361894f3c3564373ef9ad55c b96ca43b96c59e95439f75d1e726a35a9362f0dbd34963b156e103e080a8126a8dc3501f9fd541ff3bcf4677f5c4a86b a8e8c87c7301613818d57387009e601a7ab5cbdc2890f63d985c30c74f9cea2d0584c116baf0d9cd5594386ee93fc661 b47e4f1b9153ef0981f813948150f283b47a7346fd9921d51fe8e4daedaef78ddeb4fd467c2ccb7cebd9816243da1c6e a370c202a99c8441ffe96fad0f801086d4d7cc7b960f6e98cca29ceedf492afddfd0f351c9c4d29ac008bc255ec1a2a8 8f5e6ce1655d1c059b006174e3f5a55c88e1821c97f9702ad8e8455d46c2a83ae4482f2d43edda74a835686ec45a8a15 a30421e694930a3b65d397b2720d5f8e1eec2b6e2bb5a28d3f9b0a84db9aabd83850268bae64c2b10e313cccf120151b 8abe87163046f7a9b18e2a3c0b66e258facc1b31431420e0b70354b7a60ebd250a784634a76692e7d6f4330b62114945 894f033cf077d4eb312e3258d9dca414356271abce1d6094ecce6d018c5fadb1c15d8d69451574ad0701a2876db191c5 b0923d64f88ffc872654e1a294bb1af8681689c21cf08f39afe51448a68e60a9a0a74ccce9969276a932a52c07d095a3 b9ca23b5be8725fae7fa710eefd45522889c50c29c26384e00b78a962384f0aeff9d15cb5910e9565da12a577eb7e5ba b242ccf292757197a9f470f2d80ccddc48c7f1235ba026bc68a93be2738bc968e8a200aff3e2f4807216442eb3fc50dc adc2c3b375b308524b79a024ff87d122055440643fea6fc0a651bdb312c7cbe6a456afa9d342bc76446d77d8daf08bc2 ab645955356c2ebf2f3df9da275e01daf0b44a52afc309277d6d9ad1b05484e5ae0d9d41ad485fe481e5e362826a86ae 8de96ac587a4449fcc8b7fd0a51b4b5185d9c2eb3434f94cbadd092de1e26b0f6b3f7b15a37e8424b1429121ddca0ecd 94c70ad4e9b871566f3da98170b665a09788d421818299857cde0853789fb943cbcf7d4b2c95246ea7b72edc56a8e36c b2574be63497843340700b701d5cc8be6d23125bd62058802ee67cce1f3b5f5602b27c93fea5611f27dc695ac563f042 869ec89da7850cedd88bcb3a50a15cece233119b31b64a61bf6b2310892ce42d8b473b584b11e61db29ed24ce8033f83 8fbaa269da8e28e9adf4c1b08f109da786dbe9cba871c32eecbfb10619b7a5d65a26f9bb33e201a8ed20b3de94003fbb 8bf7a059c37242caf7f821a6314e4e4adf799e0dd86b37892a7172598892c07272acebd05b534755c57b51556b2d610f b4e72645fca459898cdd9214892ed08b5c99f82049c0a30d72bac0b9717caa9c6cc16c3dc7aa6ea4d42dcd2a6c175df6 a39170da87a3495da55bbb9701c5461f3403447174ed6a4af75712f7ba4ac35f51a4234bc4b94da888a0959ee109c0c7 b45675b2774ea7696089dbf7a0afe6c22e85fd0e4ef3db508fbaf96c9d07f700c991789206da9309fd291be696357c5f b52899e3e3f6341eefcbe1291db6664bf3b6e8021d32fb9c3e37b6258a35c1da927747b2ce990937d6f4c6c3e7d020d2 84e5bdb3dfe19700d79dd3fabb0159ccfa084f7288db836c855b827613ce8071067c8d7ac5cc2b4e88ed7f84b690f6e1 801477d200b6d12fc6e0a9bab1c8211193ab06e44551e037a9b4c36fc2d4f67760b9ff4eba9a3bc7b6e177e891f64ff6 b6b71a5116d3c22af26a7530f535e9b7851f25a84e562a8f17a125d55b9b3fc1bd8cfe65bdcbeeb328409521e802051c 8687e21c34d7804c12489d30680d131ce2133e2981bfa993afd8a8eeda958ebd5e6881d342d725338659882d9f21cf98 a024e97a7c4de32b6383c34431994abc533ecdbd6be9bff836ec1af022f5a86773bf345c6f33273797a61fb70a8fd5d6 83f784f095da20ce5b31f54d6cb14b32a8a12675f0029289c9cd036b7c87a8077be2d04a62618685720e6ee69c875e97 b4e9dfe7cb9d9efd3fe00d99ae5e48769d4af4bf43d4e05c0b54c9cfd8bc854de96b8d3ebf4dcc06b9dac66b7471a0de a08b79f9d4673afcf7f38b57f484f88feb7c908f597663a2417f92c348150c2be6b5603f914eba0d9d5bdd4e5c5572c1 b0eaf919589988798cb01ba0610cd1b7fa3c08715675ece8ecd5f9ef6d5d7b2c4c8ae1ea7dfd202237171aa3e6f9de74 abff99a98baae4dd0954052503ce81827781694a5ea8c1149f96a3adde75dc2d630e138598cd2ae7fdc7a654aa17df8f 83e369b8680d8b9d995222b033b4f4f3e3b20e782113c941325c7fa9c742feef8747e4a212d9aa23285a259cc4faef8d b16d5855dd2716613697eba36e2fae0872aaea6999e91cf6552f93f9a0b85ed4f6ff922a91b50816bd6cf8e7a4513fc9 848373db600e32e741aa1d37726bbb28956783f89ce2d781e95fb1ee1adf4359968a141678af268077eae4c25503204e 93a0dd0fdac18a31875564505b4e28f9e8bb2915faae666538597731ac56cd77f23f2456461e2f672983fb24ad91f6e0 ab1ebbe49fa56524b564bc2e43784147073e6ea5d27a9540fbf2e04d0f87c645ed2fd28b3e4982cc4c0af1734ee47a6f b3ee30b733839edab6f61f0738e3f4afaeccf700d8dc7415684f193b36d70d07acd5780cf539f12e0fbf8d4683be773a 88388f2cbdec47a6b3ae460b69eb0d2130ac14de950c22fd86de03e40d02292bb93cebe62432da39d509c1289f785fef 9370c41a54b68ff486b4cc6329c3a851716ebf1d088d77a6c56dec93a18b8a77b596cde74cc17d2adb2b2f411a2e4bbb b9083b60dc16531f77b05a955b51a237a8f8c0173d72c352c5ca441b55abbc890b14937e457aaec4be5cbbf80cae0099 aafff8f6c6ebaad952c65054dfc7c829453ec735331bf8135e06406b7a9f740c9a200dc48bb2175516b41f77dc160121 b43d31fbbaf10526809e9e5bd8bb47a76e0fabd7852ee7744404559ab89f0f215ff518f3271a6aa972a459cab82ac558 b581ede48c6ef34e678f91dc4b89507413e00e70712e3e8c32a80eed770ec8d8b98caee9702d068aeaca6f704be57bd8 8cb0a137e68b001a5ccac61de27cac9fb78d4af7b2f5a00b8d95d33ac19cc50c69e760c5e0330a85c0ded1edce0fe6f9 b947fca07c7aa6c2bf13048275402b00b77b28f1d0ba4b589fbcede13f93b5b931c588560ab8ceba23bb8e748031b55d 81753cced5ff819901740a9a584334e355b497cb699f0be5a52cd555a4c9f149535c7bb355b54407f7f0ec27de6c2e19 b3d59273951ce97838c4853ec329782a255b5fc7c848e7992ded1be28a5ada7fa3254123afe32607b9991ec6e0659b08 86b253de246f82be1cb0cef01e87c3d022ca1829d2cc7e6a160a5afbd3ca6b94d75739b122e3bb16f8bde28a8f3223ba b728b659fa2d8487e061a37f7d14a4c2d70cc37497a8715695d8d332cb274deee2ce23b9b5f6a7408516c02c3d526a49 81277b46d98848a45abfbe39842495659dcbb80dee985a4fc91d77d52b815487aa8bb455f411fcce4c3879c7a075a93f b05b6f1fb4a6e654f0ee6b83e08b58b57059bb0b7c490405bc8d963c4a2d6be39c558917977e554e1e9e3169961cbf3e 88f75fa7d016fb6442551ec071cc1e2beeb3ccd213d16d744f573a82f5d70f41dd1b18af71d5f9e73d87f2f6b7dbe889 81a46434f1bbd65a661a0ff45a0295b8fd8a42a7969c5953721bc98698b64bddee3f806876d1e9983063fdd0c11f99df 8b4f6d33c510a4c9c7d623d9ae0c9aa631fcb987704726b2a4d8519372123bce3c439202f25b5b47045ec14ce39a21a8 8d5112b330fb63cf6ef3d2164b404c14ff9907d685015701399a260951912b19b8f270f869df317e9050a127763d7980 aadab394e84dfb82db15ecd2427f39b62352c3e1647c3bcd14fb24ae830ad0116f0fed87ddb63963b424a4741961386e 81ca4e5600d00a3bda24cbdea7a532a4cbbd893c10e7ff10667c15ffa8138b91667abe5466b31a3dcdd60155c48538c1 ad943af1b8a5fcfcf309ed8f2f916339f254cd555c71a407a47365a139306286a05a8314e1c70e20a65fccd75d36fa12 b16597a0b437060a390467bbfab94c0bdd695ae898894f4689f939e30cc2119cc08ecb594546304adf876f4e275ebcd9 a44a4e0a6693be356065891c27eefa040a1a79475be53d54d5fdcea7e0668ff9b35f850974000ed119f6865aa6faa721 adef27d1b6e6921f4eaf69c79e2e01f5174f7033eaafdd33edcfa5119af23f3a834ffe1bdf19576581b797abd1865b34 90c1e9202f3ffe28f8e1f58e9650dc4ff4dbc158005b6f2296ec36147e524b4f2f87f8aafc39db5b006fe0c491c92f45 ac817cd54288b6f7fe6338415344fc9e7b669414051631ab2f27851c052c044be06bf7235d668e194bef695923256368 ab14944ef653a14456d4ebc12e3196df3f1b4707c4e50b317b5ccc8ca3a0720f0330609f0e7e71793f6ca01583f38c70 ad5353f2f380837e5ffdf079350b3d42935a0517861d03af98db5ed3ea8501abd68885c8c65f5a66e944b1874826a450 8b5583863f84af8443ce8970b02e26cc5d959e47efbf8a66a54106ab165f1f76b36423aee74c7b5402fd1c4d7c1adfe6 b3b46037eed9fc30e4f8f0da8bdbdcc40a38e22e876ce9fde981883017854aba82c18eb00887d92ad847d30082fe7271 98a2b6fc90b7ad172e4368c1e54675b75c8bf2096d91c9f2b60b3397d3be3b705aed5389845dbd68f0f84438cd0f7687 b155e800852a5f90a2eac69cc4483428da1dc2c31588a13c924e60a7616ce9baeb7d4b829c772b260277cadd8ed84719 b8b92c520a1302b0cf7d993a52e1dacd7f27bda9868d59c55687d995ae676b7070af4c0792a9bc1c2635d44a4fee01bb 96dfe9bde526b8fc829eda825f55168b88e8f4e43d4d708cc3060df03437b46e12a8ac70d7788aa75760f6294d3e84d8 a3fa66c54e2fa084ced3bd838614c6c33042f492a5745d167a723c60d5e7d6020ffd1747981a23f8b68df21ad8f0fa77 b573ca10cc41fc04a642f6f62c355a4fda69b94b8e95dbb02fd1ccce4bce1191356e1fd66d372159944eb36a7071f005 acd0a1c9abddfd0ea223eda1722aaada362d34234455bd1c6be115d41e535b16f12ca428da7820a757fa4c98884a385d 96f242eee99c4db383b8754fa7987c0c159652e1866faec905a8d3f010e0a1ad05bd77b9ea8dfd653738959180f58430 9215a9b672a5d6e435e0e0a45156e0e20f75cbbdf1d14940fed3ddb63d433bef643796c7a4fff881829ebb2b2eba9460 b8ad9bfceaf08dc5a874387219ddd1170bc3a5e25ed72d321d59ae713be5ddf9fdfbd3aa7ab163be28dfa0dd14614e19 a19a1050590bc500b32c502f393e407abc3d8e683d6f6b978873aff3e3299b18b1f6b59e2b0fe237d819dbdfcfdc98ca a6870fb11d4429686e52e1f44c8dcfc7ea24a020df9570c021578dbc1f9bdc8cf797cb3a72d7fc52805dba35d59f2cd0 a7be733b64d5c06c127bd1c87250e42bfe30ca91ed8ce51e0b6e377f454e8f6fef7f99bff650695df2fd10c375da349b a1b97145dab30330eea2cdc8739b2446a3704b64505fcea3dd8a9b4a72edf222e98d967d6fd7f76794acfd97aa091065 b2127049907d2a3b654d1c940b740bfba3dbaf660f86ea79c2f909af7c9fe2a07a1caeb1be12370aeffaf8faa50f1582 8a207701214bb28e99b0784e9228b1c34afa701966267fe7110f6f29f5bb41eaae6cdb98844d0400787978fabd224de8 9925147a383b6f5f814520220ffdbf20b214225882c3ef49b1a1ca677709176ec82466fb9c4be2dfbe5640afb63b014a 8416ad93871623fb555b5390b80de99edaaf317350cc0c1ae9d54d59517074d40061f315cce8ba2026d9c1e6f6a1009f a315f943deebbf0a2cdbcf3f8323e215a406e9cbfbcc3f6288714cb3a6befb1bf71b2a21ff7a2ec4731c65044c45b6b5 8213e0c2539c24efd186ffa8b6dd401ad2233bc19166a0623b26dd1e93614bbf792823f5599ac116231e2efde9885709 8e5cafd2f34a127a4a896f05e4d929eef06972a1826b3566446942198df26d62f7679b987db2b3765d9d8058b1cd85c2 b5302b399c9cdf912fd59007ad4737255552663b1e56dbe64a7b2ddd88d2093c73ea319b45db2dd49d1e03f5bef1a0ae a0c2bcfbed4b008e1a56e5d2f2419aa59d7dd0ebd990f1c18588de702ad0fa79f445d69965fa9381e700eda13b309378 80a44eea1ffe24c26b16b8e2e70ee519258b9ad4b3e83cc4e5cca88ebc48d0160066f8b91d0581095b0de2428390c8b3 84a90cb9c7d2f799f1c4ed060387a4b793ab41c5c3eaffd3b60face9b9c3bae93cd2017283bf3de1e3dac63d0d84dd42 81d22febca276a05ba9bbc5591ee087b0491beb35b4d9f8fc0d041d642a574667ddc57660b20f5c568f7d61fdcb41bda a3ac965ac27a28e102a439b74fbfc157e75fd57620e4c0750a466165f8aeecb2191dcf8e656f7525aa50d9c7c69b0b5c 913c17434ff0d9fc52e2ece4fec71b37d4474a18f3ea26925c1be2b250434d49759f58033ba0fce1c6862c6197930dc4 ac430559c151a5e461f67b49c7786c97e1653fa8698e9759ddbdd99f5daf17fc5a012ae6330739440880728f24eba7c9 b10d8e9f8aed9361b042d1398ec74364f7c7c1cc5c7f917060572761138bdbe89bf409389ee3879f93bc8032dd67b308 937271005a4cc6a6ec134870c1b56471aa84ed4f4af1b3d5f334bc0c42762fae0c9a6a2828d3de6151a76dad7b72781c a10e4dcf51889f69e6bd4c052f8d4036b9571ced98a3d7d779cbcb9fa5c3a82228566ea7cc1d012bf56dea0a40c5a64c a0ed026528d9a8bb3201bc9dcd20598933e8c72fd315deea8da63d06e97392aa729d98a55a8a60fa4d5573513ba5c9fe b723fcd04cddbd4c36feae827a03746ffef251c4f4c55a88beedaeeee194430a99f566f483668a0d88b13e7a4a37f1de 84a2cdceed44828c7c05a6a762edec0165e434e7029df617d6646aba48776e6c3b823f40689cee136536f8c93e08a629 b786264e3a237ac3a1d56c9f4e87438dfed620c867100fd38b01287f5b755c7820937403bfb86644e082094d3e410a00 92cc35b2065fca157c7bba54410f8bd85907a01c9f760aa0ddb7a82cb55811d24cb4dc6b725367a6a1c293b809a48ead a12bbf22b117f00164a42515bc57cc9e6c43cc77fb737ee3d0c0cad94cb50cd3847d61cab469cf8ca76f7958bdcfc771 85985b00de533bde2a757eddf53be79ea39091d16af3fc92327bcd1cd59bf2bf4411a334da29ad775e8ffaf3cea7d7b8 af9eb24185b0d330d0ea1d0b0fa78af0dcf42ced81cb0128f16cafdea687a9c5582bb6d7c5744117b271cd0b3303f0b5 8c8aaa1d85ed6327f85d579767c7a9158d209171b3efcb3e8a9d9e534c078e821b6aade255101d2c9ef6d67ba66f10be a450518a03ffb40e1df89e0f88fd55b5b06f4872cdfb7ec55f40dc40d9424b3b289866336c195bdd54597d95569e0096 81e61cc69f93c435bd77f155e80626a9c764dd92b6c76af15c41346527948d8a6ca87d6351a0fe7987e2ee3aa66a9625 b615e0cebf4fdff4cb23a20c8389c370915ba26aa703b28efe4ab070b1603d1c5b6541684acf46b52a915f6aee447539 a7f51885c7a71885cc84ef734ecd107e8bf5f7a25131415f671d143cc1de92859e65001125323c7985799993af6c410d abfbf7a46f32066989c32f774edcc68163f085ca81e94fe8c9fb32f8d451bbb2c20ac45cd8d97f9e618ab40186933b1a 8cf35a522b5cac1934004aa9dd236bc77198d43272888afa860cfc79b4b28dabf7a3c74098f84510897566fdd609aa45 86aa927df78f7a06a4985eb0a4f0b93529cef14f9fd2812d46abffbf25e618ead14d99c70e3c3bb2e17f3f7fabc9c264 860f1b4f4a398e9a8bb4739587cf96979cfbbe1687b7e91e5bd1198db726391b09b1a261bf12e96698818f60b5bd3537 8e7c4ee19ff115881051e8637dce1f5d6c65e865d0c757e8ce41b6d7bcd86c7070cce60649692bbf28c868c7e2e1e2f4 acf7ba01b0220419f09169ac8d16e5cc13dce08e88c90b8fdfaa33aab417f011a20b79a178d8a9f7211589d2e0affd7d b404bde8e715aefbb9f20a353b911b79173ef3e2cf0aba98b5ae6190b90597d65043b0b4e014ad9ea6c77da2d213ea12 97e3615d1c77a402253bb55da2d1cdf82de316cefffe42b1022c94b4818d6dc4a313731db85321c537914bdf716a875c 940e950b96a4096a578c6874d747515936652b9b113a5f27f5a834a610867b05f9881e2679b0b289b8527baa0009b6dd 8de15a13ca236a3a285ce6e6826c502ae7365bbe468b6e8ac67b15b0bb49be0e996f1eec81ef69e4b7f54f8e4779a054 a12244777eacb08ecd42b5676b3a51153022ab97e9353ace0f47c6054c22de9ba60d2a60f59a36841c2a791cb1b7c288 94f7580203e39a2642ee2e7c969b9911f011d7f3a90c398e1302d26edb3df03df1d0c43baa1c6cf90dde95296d49e742 82ead33144aaecab965faf63af384565992f38fc1066e71e33d53f43ac93892e27fe78c4eaca1cccbc53364e26ff31e9 a0c129e9706d354249a7f8aa664ccd7ede89aa1445c5547410814b56d10dc086720953363ab1da8ff5f1ed5d8e575104 93b3057bf3f74edc95237781ae012cc4b1d3fd0455565ceaac7110290aa518ac32478ba4eb9851555fa87270fcc84f1f 949c2fd0b94f31f7cbf00c679bd3f6ec1a2f4056654708d39edf1a450b4e19a6e251d0bb24eb765087e698f61d3fca2c 99fd2e50e211ccb66b895eb2fc42f260f3ad5767f04c2fe238b81dae98aa6e3977443a51f4fe7b43f499caabe45699a5 84fe19626503218f327b5325bfd7c0c3d2614b47d34964aa0259d564e769c6c81502132cc1765b0b31fbe39852706927 b43287ec29d9010bec4284de58fed48dd1e129bac79f09d45153c9949131782f77b11b0c9f8ee06a39e5e9bbaa8e2c6d 908902f3ed45482df2f94415fc8e5a308057a40c8905d7cbbd58ec4848e19276577b7f7e69e5e684a8b981738e10f7ef 85cc7d9c1eae372b4f88758cd6e21604b4bc9f0794e1e74b6d9de96347f81944d01331385fae7a38e5f6096c1dc23465 af60288c702082fc258b3dbd6952c6b75c1641a623905f491b1e72f49b9d39b33d150a336450abd3911a4c128166acdf a7d8ac7e589558c4014369ab6f4c1f2196205b03e4278152ec0dbbd7ba54e803c3369a71d364a773aac8dbbd117e4a13 9833aed34e48c206e9328073597aee1123f5bec085339b4e6839a389a429bf3042798a31fac1464ce963204adface76b 84631a4f012bbb62133030224b57deb32dcf464cacc8ffde7775adbe68707263ab5527a1c75e597e03aa703ba658b889 a686a61f6467858a2a4c13e70ad81b1901290d3e51bbc0c6e366f9e652f575e91b11c75f640ccef8b0c6c1b05a43c9a0 b585f0ffd5144907703b41539bfad7f9f058f5985f63db911064ba6b07af8da2796b84b16db42b8d11135c3f846cd9e2 b525539516c7bb25f1d7e165f269dc8c9eedbba74df44887e178ab8fd798e2a31f39812ca922d6b64d91564f14012a64 91e480d7568fd2fae39c35b0a8d623e66a3160fee1dd4e9097255004938b11ac1cd3918dc6a1e5fbcb700c95a547e5e8 936ef55c69b842b6177de71fa48dc5442bf5132116b214302f8f242ca36a273a6bbfbfaf373777104dadbe8e7da5e970 8e950c0f6688abdff8a3b8bd77be6da6f2565c7b55711f5860ea62a3ab1d51aac31821c602bc11a45e33c69e7dde3ea4 90eed4595104a0527f8db1e028ff622ff70db4eae99cf47f6c2a0246ec7b103570a6a9a877e32e9647cc74969006743d b756344f6c4ea05b792e416d9bd9ce9dd4bd904e7622761f28a85628506bfc9d88a25e5f04db62fad30a92fb1d8d8556 ad79ba76534c1a02ac3e9b7308d390792984cd75b7e1d0e5e4ff123642d99d4ea1825643091aa8117336333c40d5bd94 832b08144887de0c0341d84f6945450af8d7a4eb32367d7703118186c1be525df9382ce61fed5f3b65a0bb3449185f7f a322fb944e46d8e47994820890c94af423674716da810ea1da71e0a7733ad72c22114ca39a4b59c98ce4291a5684c154 b982851a65140dbea79bd3b5487e236feccee051deddcc17c2853032efca289ddb6eaf64be3dd85a73012fdbe9d2d4f3 8eed5e230e201830b44b9fadca4e156fe1a16bf840cf29da0f381ea0587b20c226de2465c67e6268973e776809af68e1 81c8f1c04490f36e41a53ee1b5185cb8adbb37c258fd6c3be8c56835bf574c37183a94d55b6554fca35d6e6dd9af0133 8c4928724107cc16d36f2976677eac0b852fc4c3c0bb2f9cd4d59cd24a113faf33b2faf405c3fcce25be51d41e42c2c4 8e4ba842636fdfc4d71f0983538ea5037d420acd26abd12efca48c252eea85544b2fa9fccdfec4e7c2a6359baffa112d b4315b84700e26dec26f3488d308430fdff4809c10d4c24309627911cbb769ffaad0d1ecccd622dd02194eaf5ba59f91 ab888308f757faef32648c1db01650dbc9aea248b09d06e6efcc996d395f48ec96f2d54a02de441d753fe8737862d991 805094cfd77e207d5c75f3cad99f41f763ec15443052cfd758c6a82ba422d831a1103a7f9b100da49c28198279c3d3dc ad857f33243e4a2cd2a773700def21fc7f94939d1a6d2c2125ecd58fc206ccafb07a2c02a1cfce19857d3654aca2c70c a4d12d40149953daa70b89a329e918e9d93efb4e8004a9357fe76682dab9662c8507e16db83e849340f05cdb4933a373 a0dbac2ed4b5d03606524245e8a31080eb5bd3e9a0c51dad88c3b18e3e6bc5d64953a81c8e60425b80107ee6b62b1fb4 86da05355900f327164a78901f6e3db857531b33b1e855df1a67a9ba222c6b05fdb6b0ffbacaeb1ba5b45ff8979b6b68 932c9873aa3e226dd922b5a616c75153bd0390ce8f332a414b9c8cb6606c2501a37a2aa88097bc7d8e2c4261706eb38c accd9cdf07ccdd42033ce3b105e00bfd39e2304b1e3d66f8b1128645634452c20f759ec45adcef2fdf04408f62c4cc04 b75cfdfc1cb48918752eab17eb579820ee6e71e6667abdb64df834ffc8c1362fbbc23ca2c80dee248fe1fbb72d87dfc8 88b998c73b00638fde7d3dd650a08c5ab996dac6ac34251337fbff3fb5ae4a25dd20c1a16c987ad7ded19eca23cea891 8afef0956c942571a27f504553fb312cca9e50ce41b44e0466d0516c5abe4d8acf4594cdb03b1ccdbe3f2e6a9093b713 9042cd83c5ff261e9ebda26398caa16cac2cb840d19062fa8ae50e044c27104972948318f4c866dc4d578798272d3e49 ad536719a64570a2cd1d72b6590ea1d02c8c49f259a7867be26c8191445165954bcfad50ea12688ace3fdfb0e98143bd 97c86328d63d297b6bc9718dc1ad5a05b908a750d1c455c700d84315589128ce4eea958aef2bcf0fcf4adbd8e3ce58d1 8e592cf0802e6a9541eeb654dc55055e11f3d757847285197132935ca35bbb1a9156829a39384dfa6f645ff89eb36738 ac16c614998944f77590bf3913a010e13f2d3bbf6a172293baf5983506c1a2d89989fb72e598f5bba1ea10a691377c93 ab8e6f5b46baa6632de3621497bcbdd584decb999fe7d8a3364843a1e0b76497600630b6a24dd30119d8bcbfca29f335 abe1d3af5279e60122d9cea8cc6581c819d7a0e20e3715da0f6da7e02d13a7653db643bd946e2fa9ba338eca81fbe140 8c33bd831ecfb18d1d0713e16beba768e9c42df62170c1f8a16764912be77f2ac5915623d1d25e8c462aa9c2f6669ca4 903692becae4a6409f7bdb127d9b11de57a5739fe24218dcbaa0092648d5332dfeef29a908ee9e43e5e0a51a4c3639bc 92591e90347ae286acd365eba32cd9ad8f20f4c9cad2dc579b195147ff290adf0d776bcb3d4b04a25d68a941fc0c781b b64bbccf860299aec16e1f95c768a1f337c740bde612e6ba260e393edb8b04540127194761c42597abb9bcb771c576c3 9194f056ccfdfeb78a11c5347e2255d7a7ebd1251f9aebc0b58feb68d3e03a7dbbb74e3ef7309455853adfb4694bd01a aa4f15f6d6a53ae65b7f6f91e8981d07a5919d2138679a561f7bb608dc4596e45ca06c9441d51fb678b2ad89ae7a17ae 90e3d18507beb30bde08c5001faf489a19ab545c177efb3f73fbf5605f9a0abcdc8bfbc44f832d6028e3e0a834bea98f 8f31dc0118c8c88a6e79e502d10e57652b7aba8409a5bf572ca63fed6b7cbad7f28bbc92ac2264f649792fc1d0715085 a307d1067ea4c56437b6f8913aa8fcbf4a24580fc1e3336e7f6518f0f3adb9c4733090e459a3f737414ec0048179c30a b7cc41fdf89595cd81a821669be712cd75f3a6c7a18f95da7d7a73de4f51bb0b44771c1f7cd3cd949e6f711313308716 a9dc74e197fe60e8c0db06b18f8fe536381946edecdf31e9bd90e1ebfcad7f361544884e2fe83c23b5632912ec284faf 8b3e1e81326d611567e26ed29108f33ddb838c45bbd1355b3ae7e5d463612af64b63fff9fa8e6f2c14c8806021a5a080 92f6537bca12778866335acc1eb4c3dfc2c8e7e5cf03399743dcea46aa66cac92ac2963b0892784263ad0ebe26ffdbf6 b5cc0061f7a3e41513199c7dd91ac60d727366482a4c7328527f7bd4fc3509412f711bb722b4413b3736a219b843d15d b3e9711d68d2c6f6e2cc27e385d5f603d9a1c9a96edeefa1ffdf390439954d19504d6aadc566b47e229ad4940ef020d2 a09d0d3f0e5dc73a4a0827b72710b514bbfce4a7fcd5141d498a5aad6c38071077f50d3f91af897d9ab677b7041dedda b177fe260f3b86e9ac21f1bfbe2682ae5dd8c9aecebb84f37054bdab6e39094e611ce582210ceeddde66adf759dadb6d b0ac6595eba9f5dc4b2fd21856267cfbcfb5b12aa34ec69ca32b80071c5b652e85c25a224d80443d503bf25fbbfe07e9 81f3c0e11b196bd4a2e8f07f8c037002566dc9037da81f3988add458a520c24dd1be3d43d851e28c0c6a85de4b57a542 a44308c95615f7fedb2d2127012924468c015df9f48359cc2e36ab4223870b0bfc1e9040baabefdf5266f93afaad896b 8493ec4c32d5a13b81039f1b436eb83f259945dc950e3c6c2ccf5087ec56dd2f60890ed4edf01728b6a54950e19b35c6 a1a439ec2a6a95bdac9aaa925ff337ba956c0d236ab5318354270e73ed6b73b4ae2d27b4c1686cf97b6526d04e65be81 b4659b7b53c55a4b2bbe210b53520b392f893500e18990d843b72d7379d45fb44dd1dd2184348d6fd853d6b9ecc6b7c6 afb2c68d75d00130b0e1b4f250001920213121791698ec04262db714cf7b1408d39f6cc10421f954845aad5b8250b77e b22b843b40a97210f94043b552f348f66743055a3f274856a738e7d90a625b80e9bbb80cbbb450e1666eb56b8bd5c60f 800895ced82fe13d5fff65a93b0051c3df698bf1221b682accfdb63e3970f669ca37025750697f4e8ff2a3322ad57be4 b21f598c50d7b9f4a584d548f85e42055ef8e24991906d973749090261584c7f4f5e984b528926f7e75375dd84d51af8 849b1c68192d18274598dd6d0bf48fb5ee3b1ba25b331cff2d06f345bef3bed49760ca5690848cf33388f6a9a32cd646 aeb6fd9478b10ef456f6bbb1e6dd19b14475e65497772d12cfc097948383d3fbd191bf95f046b8bf1989954118e483d0 b1b5e0ea2835f7fc8b66e7731e392b43d16cbce04b52906b6751ab1b91978899db5fecbdabc23a19dabb253005468136 91b6b1284770cf6f7ef35bc0b872b76c7763ffcfa68f9c8cfabcb2f264a66d47598bb9293f6a40f4c3dd33c265f45176 b9ffed029846487c2cfb8a4bb61782bd8a878f3afdb73c377a0ebe63139fa070e3fcdc583eec3a53fdc5a421ff1fa877 998007249d041b0b40ff546131cfc86d0b3598dcedf9a8778a223f7ed68ba4833b97324cbb1de91292b8ff51beab44b3 8eb77ce9e0e406bf6f002870fb2fd1447646dd240df9bd485f8e0869298a1fc799d8a41b130c04370e9a9cc5c7540ca5 853db8157462c46f2af7e8f94f2ed1c9b9a7ba2896b4973296898ff3d523d6e29e0b63a5d26cecd5e490b33c87a4cecf b1436b6f3278768f0979ee852944258f2599977d255bea6fc912ba17c5dff5bdc850cf3e1fc52be9d6d188e868670f4f a76acbc5832019b3b35667ab027feff49f01199a80016620f5c463dfcbfb51bf276ed17b7b683158ba450660cc7973eb 94540cdb051faf3ae8b8c52662868c2dab66bd02505c4f5f8eb4d6b2e2e5fd9a610890c5dcf8fd887eee796d2b5753a8 aa35099666bceccf4eb3b65b13bba88e30a8be93693ab6761d8e5523343e8d6dd42d977e66499352fe4e9e9784a1dd0d 894471aad17be54319083c4b5e40adcfacf7c36c4aab0b671030b7ef321c53590a25eccd836efd20f32a93185fd315bb 8f52a9f705bb0dea958fcfbd52e2b6c08ad0f89a07a6b2942c1b4c37eead0d97a38a9e9aeb08d5d59b7fa2a9347f738b 9031c16b4f936c9cab55585dc5064739f696c3347ee2c0792320c9f749e760d120e396e8485ffc79d81c9f3337ad3d1c 82090a0d0d9b05459ec1c328ecd4707c333b784e3aaa0ef0072cee1eac83f9a653a75d83b9f63512a8c41200494826b4 92c3a9553001f9ea4d67236b8ad1a33275378202cc1babc03f313895458f4b2549bfbbbdd37bfb8fbff0decb6b9f820a 88651868f4da37338a22bc553388df5dd1dd0cb78c4d7d07c637d8f6faef4bed72476fdcd4304d5bedf3514011135f08 83fa0141bfebd88063f1d787719721b4c6b19ecf565b866de9d7d5d1a890e0e3d859b364bb65f8f8e688654456a40263 90a7fab753e5d56dfc0e53a6b4e6ab14508220f3a62b3f3f30570c4c9ad225e74122635826c92e8e3227ec45e551432a 8fa375b0345bf6e5e062d108f9feaec91029345ecac67ccf1264eac77b8654cbfdda1f10579f481889c0e210254eadde b83f06116da9daebdb013b26724523f077debaf6bc618b48a7a68858a98d275f7899c4ec73a0a827219b9248dd81c8c9 8be1cada55e0c5ebb4fd460b2d209ae5326285a20c8bdd54ed9d1a87302f4063c8730bfda52d9d40e0d6fe43a0628465 a68ad6f813743ec13a811f2ef3982c82d9d9ac1f7733936aa1e122f8dc7f4a305cc221579ab8fc170c3f123a1576f9ab 8878f1128214fdbbb8a0edd85223741e021508ab6d36c50d38680f2951ee713ea056ed03f62b9461897963d50ceefe0b acc0d43d1b0260528b7425b260a5dea445b232b37240759fc65fe26f7c9d8e51569c5722bc33e94de6492f4ba1783504 ad80b1dd717b076910ee5ceabcb762e75e4d094dc83b93b65c16de1f75bc712cef223c05d5579c1561829406c07a97d9 a6fc9803f9c09d95fc326cc284f42ea5566255eb215dba8a9afb0be155ea11bcc55938b2d16f01cd2f2eda218c715efb 83ad733dbdfbaae8095a403dbf09130513f4ed4f08dcf8dd76ce83d1ea72999b7eea3a7b731da0d2bc80a83c6ee0e3e0 8748912fbd08cb34a85416b0937d9c4327e9eed20d6e30aeb024a7253f14f1e0d774f3326e54738d71aae080e28da0fe 8997e78d8acf23051428af67183ae9b2c4aa42b503745ffe33df35a35103c589987e1473ab14dcd28ee78ebcb10d8e95 a2f340502a7eb3c4a36412e6f028321372c4fa18a4743945607424e932af1271fa3e6598a162c872072529576eba6283 868ccf19b5044ab93b45c9ed3ae34fcb504fe1453d6c4a1d12c325032cf01eb90356de82080ed897e97dba13cae33a02 ac8867005fe4354d67aa37b866a7e581d2f94f7bd0b9f4efb5c2d1370ec13147a60692051b02fd00ae60b512bce9b1ff 8fd01886b046819c83c12bb779e432b25ba13713f9227be702074ec3abb2bba6be37220a0a26a4bd4171b99b14e32bc4 a128981ed199f92b5959975c150a93a62fec50b61c80a3fa0634d90fc8058f76f5cbee77aae6889af12d296b30e613cd 81fe618552ff7a36c9235c6d4066cf2f930b5b38de4089e18166e4a06ca5723eadd1976d25e34b74b3ce942300b23e5b ab1223ea049e6e0fbf9b611de7fd7c15e5e9637cbd73aa0e36aea08a7503ba6804f2aa807186fdc9aa7f4f9195f72e24 b97285286981b2665f898abc13f3243b63005bef8db4cab3f658bf6167036b61af400f08db0fc3c640a9c623b760690d ae3ddff7c1f0fbb6a13dbbc667a61e863c2c7c51c2051e33cd61620142e7e30a7e0c4c1f8fbb512aa3a8640267c6ac26 99c2a89d5bef236060e51c4f952664094c20fbfca647e5d24a55c1fb8df2f3df58244fbbf3635db07b1c29ee3234fa6f a5010764d4b9cd3b410638334d1f70c5f4843f45b4f4a9316aaea5fbb2c510a97449dd7a07b49f47334a69d37d9955d3 86706d011dcdc9e9d165d01fea1df68dd74bedaf15a39f92893c030cafe96f4498c4c1fec2d2136354341b3f440a1462 88fd57eb62bd7dc35722f3a0576c2138403a2f663a2603482e8974a895cf56ddbb02657dc6b89eb2cf5c1f9d1aff6426 b0dfd4c68e3acb6bb8a776adaa421fc5e268ed4d5964bb90a727091e5113b55b3f9c6d33cedb3ee47ff7acc5df8b1749 93b92bc942e1a636fc5c2dc1840de5faf158a113d640d5a475b48e2c56ccccaf9db0e37e90ce74c4b3f5c9ac3b2eb523 b29a16fa1ea95cbfc1873c435ad40dc8495ba6341801b72bd95d908147dcffb1b4bb426dd635f3af4c88984f56594dd8 b8f367105e1a2d554ac30200c66aeb579d3d30a8953d20fb6ebba2d876ec39c52ea5d654f1bb89b8ddf3d9d651f31cdf b5fbc228c983d08adf8612eba5b3db3acff604439226f86aa133b02cce4ffde2f977c8dbb8b446b4375673f71634c89d a399bea37d3056e0559f6644faa0af93063b4b545d504d7e228d3dbbc294af83d3c4cf37fe026b63899b4e7d50fd08f5 928ef411a36414b24aea26fdbed4bdb1bb6bdc2d967e2553ce54c7c4e077e76869cea590257645c9129dd55ce025295c 9684a4adeed416a9ce82ad79b55c4a3adcfbd43950bc442ed8a340381caedb70f4baaaf821e3a152f483f965d8f56162 92558a37f214d6f4cb6d72cd2f4ad24dff9d17611b9e4a41ee5c741a5d1ca9e4053b0584533ef4da206110b5dc3e2a35 973bf0724d1785cc5e85d2a8ee8c354ad4cf557217ced0b7940f6f064024c20b2bfc5b144c820b5083da4bf70690de4d adaf1389dfa528210ca9c2657c5ff10d51f7e3b18e93a59c37211be0506c3576cb2c04ec80cd0f82605e53c5a3556620 85b58b223b09fda6f3ab674d75e780c49eb2167837243df049281e8f4fed653811138b398db9cdfe7405fdb8485602fe 849504d3db408d80745a07e850b0a804607b91a59922a5d3bc40da2748c029c029419cda38d2a4485cc0824c6b2504f0 a3f4afcb353bc2582a02be758ebf0cd18752410ca2e64231176bfa23828423e0a450a65f241a9ed8eab36cae8d9c567b ae362786cdf121206537af9590d330abbc6dc328b53cdd145dbed0e5df1364c816aae757c4c81f9d619e3698dd32bcdf 9024cfa5b0101eb02ab97866d5a3832944e5aa6888484cfba3d856576b920787b364fba5956bd7c68a305afedc958201 8a116df09fed923acefb2aecf38a4fbc4b973ee964d67f03791d70bee6356af43ffca117d4e9463ffaf0e0d5d5e5a69f 9163016175c73f1bbc912ddfe03bd4e1db19c64951c8909ee6befe71a1249d838e0db49f03670bb4c5c9b2ab0fb4fef3 8f6357318d8d16e7240a02b05ce5a4976b6079d49daa258789c6dbf4a47950ebe9de6411780fab06c7c1f35651433380 8e63cbae8be7341892dbedee3111adf0307c4ee9e375181aa53478f5ba9cdce164d6ae890e5f480119a3a51c6e989165 a9782f30674a4874d91bfba7eda63aeb5dbe66b040c768d6a925d8ee135f0655ea56276b105239cc0668fc91ddb68cd1 8d9d94b61ab84ec08665cbe0244ea41756785df019e453ef078c19380bd44c39d2958e8465c72eacf41eed5696037805 b1470e6f5d2e314474937cb5a3bc30c8bf5fc3f79014945f6ee895fe20028ffc272f9d3a7320aac93e36c96d8a5454e3 a444911bbafc71179766594f3606b6eaff041826607fd3192f62dec05cd0f01b78598609a530f6930e8440db66f76713 a9823d44e2638fca7bcc8796cc91c3eb17f46ad6db9f7f6510e093727614aa3a4f9b2c4011ef91dc1c2d224d08d8d05b ab86020972c359ab98294212558b4b14862040139876c67fc494184b5c9bcea1dbe32fe0c8dd9e60be9daa304acd599a b7e5cb685bbdcfdb1e48259a5d68d047846c8a35c5b3f90172fb183d1df40d22eaf0edaca2761a07c29c577000ccfed0 8c88319dae4b28989817e79e6667fd891181e8d2ed91b9c6b614985bca14b12982462ec58b17be0463c24bbb79dd62a1 8c1c6867e7107fb2178157c991b9c8b0f90c8d57a51220bf3650438ccabccf62da4db8a9916491e730ff3d0c106496e3 a00a79bd58da6528b9af033087260f9f3d00519eafb4746b355204ee994e89481591b508eaa5402821083e250d38467b 8785abd7c37690f6aa870ee5c799eef72e398a7898b6767f698515be277b9c2fc1af12ea89b0620a848221343a3b5ec3 8aadae68543db65cef71d0e230a09508d72061398ef2fabec0f856aacff2125b79c70e620744aaf331faf3dfc8afb9bc 8ff0cd437fcad9630b8a2333176a55e178db4142ec841581590594d74d5b53baeac5fb903fdf7bcf83e245b95b58285e af274e8fad6b190be4e5dc92d2705ba6ac0d7e1ea29e958a5cdd4cb764de46a56d9eef62c999a16e7c50a50b2d9fe3a8 865e6ec7d1aa848786d6a7a4e87a24d442311f0810b01ef5a74928ab59fdfd651e48880b49680047e5b0df6b3c7c2ecc 800706baaeb35bf3bc33bdea9a8b5cb00d82df407b3b7e1b781a9359cf44fb410ed311591080181b768aae223d9246aa a9496389d0780b309c6998374ae159f58a8d0fe9a1c24c36cebcb45b27d818e653b51a8ee1f01e30a9b2c46a548126ef b5fccf4fc3186661939fbee2e89c2aa0e3a6ad4907bcc98c7750520540c4c183b1bbfcdf47f2f1c5e75c3a30cdf30c75 a90028e39081b736e628c2230cc1338f9210ed01309a40fdf08d39c10cced2cdf71271013bea6dba3a0444fe47963106 a0815cbb325a8fecf2e1bcc5046644be32d43a8001bd5d8cf0022e4572cd0d481b3e717002f7ab21e16da5f5d16886d6 b2024787fcda52abc4138150f15e81f4a5be442929b1651ddccbfd558029912be4d61c3c9b467605fff640edf7392494 ab5aa60032304a584cc9245a33f528eae7157808dedd1ad83ebae00aadc25dbe1cd5917eb8b6b2c800df15e67bdd4c4d 866643847ef512c5119f2f6e4e3b8d3f4abb885f530bb16fcef0edb698a5b0768905e51536283925b6795a5e68b60ddc 806aa99c9a46ee11cc3ebf0db2344b7515db8c45b09a46a85f8b2082940a6f7263f3c9b12214116c88310e706f8e973a a6eada8b9ff3cd010f3174f3d894eb8bb19efdbff4c6d88976514a5b9968b0f1827d8ac4fe510fb0ba92b64583734a1e 98480db817c3abbc8b7baedf9bf5674ec4afcfd0cd0fd670363510a426dad1bcf1b1cb3bf0f1860e54530deb99460291 81ab480187af4a3dfbc87be29eca39b342a7e8e1d1df3fc61985e0e43d8d116b8eac2f1021bde4ae4e5e3606c1b67a21 8a37df12dc997bf9b800f8fd581a614a1d5e32b843f067d63d1ca7fde2e229d24413d3a8308ec1e8389bf88154adb517 b045a55ca0bb505bd5e8fcc4cfdd5e9af1a7d5fe7a797c7ede3f0b09712b37f493d3fcf6ef0e759d7e0157db1f583c95 ad502e53a50691238323642e1d8b519b3c2c2f0fd6a0dd29de231f453be730cf1adc672887d97df42af0a300f7631087 80597648f10c6d8fcd7421caf4e7f126179633078a1724817d2adc41b783723f302eabc947a7ba7767166dacf4ce8fa1 aefb56427966c81081999dffbe89f8a0c402041929cd4e83d6612866cfbb97744f4ab802578349fbecc641fa9955e81b a340e493fb3fb604eab864d4b18a6e40ba657003f1f88787e88e48b995da3d0ab4926ce438bdc8d100a41912a47dace0 a6d777bfc0895eac541a092e14499ff8bf7156689d916a678b50a1460583b38e68158984bea113a0a8e970d8a6799a85 90ce469410f0e8cfff40472817eb445770833cdcf2895a69bc32bcf959854d41712599ceb2b0422008d7300b05e62e02 815c51be91d8516d5adc2fd61b6600957ed07cf5fdc809aa652b059bea8ed179638a19077a3f040334032f0e7900ac8b b3ec6c0c3c007c49c6b7f7fc2ffd3d3a41cdff5ad3ac40831f53bfc0c799ffeed5f440a27acc5f64432e847cc17dd82e 823637abeab5fb19e4810b045254558d98828126e9a2d5895a34b9e4b4f49ab0a5b3ee2422f1f378995ea05df5516057 ac05412bcf46c254f6548d8107a63928bba19ab6889de5d331eb68cf4d8ce206055b83af4cb7c6c23b50188391e93f84 88514163c587068178302bc56e9a8b3ad2fa62afd405db92f2478bb730101358c99c0fe40020eeed818c4e251007de9c b1e657d0f7772795b3f5a84317b889e8ded7a08ea5beb2ab437bebf56bcb508ae7215742819ed1e4ae3969995fe3b35d a727d4f03027fe858656ca5c51240a65924915bd8bd7ffa3cfc8314a03594738234df717e78bb55a7add61a0a4501836 b601682830fc4d48ece2bdc9f1a1d5b9a2879c40c46135f00c2c3ae1187c821412f0f0cfbc83d4e144ddd7b702ca8e78 b5cfea436aa1f29c4446979272a8637cb277f282825674ddb3acac2c280662fb119e6b2bdd52c4b8dbf2c39b1d2070d6 85c211645ff746669f60aa314093703b9045966604c6aa75aae28422621b256c0c2be835b87e87a00d3f144e8ab7b5f0 867628d25bab4cb85d448fd50fdd117be1decdd57292e194a8baa0655978fae551912851660a1d5b9de7a2afbb88ef5c a4e79c55d1b13c959ff93ddcf1747722c6312a7941a3b49f79006b3165334bab369e5469f1bddebadb12bfaff53806d5 ac61f0973e84546487c5da7991209526c380e3731925b93228d93a93bce1283a3e0807152354f5fe7f3ea44fc447f8fe a1aa676735a73a671a4e10de2078fd2725660052aa344ca2eb4d56ee0fd04552fe9873ee14a85b09c55708443182183a 8e2f13269f0a264ef2b772d24425bef5b9aa7ea5bbfbefbcc5fd2a5efd4927641c3d2374d0548439a9f6302d7e4ba149 b0aacdaf27548d4f9de6e1ec3ad80e196761e3fb07c440909524a83880d78c93465aea13040e99de0e60340e5a5503cd a41b25ae64f66de4726013538411d0ac10fdb974420352f2adb6ce2dcad7b762fd7982c8062a9bac85cdfcc4b577fd18 b32d87d5d551f93a16ec983fd4ef9c0efcdae4f5e242ce558e77bcde8e472a0df666875af0aeec1a7c10daebebab76ea b8515795775856e25899e487bf4e5c2b49e04b7fbe40cb3b5c25378bcccde11971da280e8b7ba44d72b8436e2066e20f 91769a608c9a32f39ca9d14d5451e10071de2fd6b0baec9a541c8fad22da75ed4946e7f8b081f79cc2a67bd2452066a9 87b1e6dbca2b9dbc8ce67fd2f54ffe96dfcce9609210a674a4cb47dd71a8d95a5a24191d87ba4effa4a84d7db51f9ba0 a95accf3dbcbf3798bab280cabe46e3e3688c5db29944dbe8f9bd8559d70352b0cfac023852adc67c73ce203cbb00a81 a835f8ce7a8aa772c3d7cfe35971c33fc36aa3333b8fae5225787533a1e4839a36c84c0949410bb6aace6d4085588b1e 8ef7faa2cf93889e7a291713ab39b3a20875576a34a8072a133fed01046f8093ace6b858463e1e8a7f923d57e4e1bc38 969ecd85643a16d937f148e15fb56c9550aefd68a638425de5058333e8c0f94b1df338eaab1bd683190bfde68460622b 8982f4c76b782b9b47a9c5aeb135278e5c991b1558e47b79328c4fae4b30b2b20c01204ff1afb62b7797879d9dee48e2 b5098b7ba813178ced68f873c8c223e23a3283d9f1a061c95b68f37310bca4b2934a3a725fff1de1341c79bb3ba6007e 97b160787009f7b9649ed63db9387d48a669e17b2aba8656792eb4f5685bb8e6386f275476b4dfbb1b4cb0c2a69bc752 88b69369c71daad6b84fa51a0f64a6962d8c77e555b13c035ad6fa1038e7190af455b1bd61ae328b65d6a14cf3d5f0d5 af88b87801361f0de26bd2533554ee6f4d8067e3122b54161c313c52cc9eafea00661c5c43e2d533485d1f26da4e5510 98ab18e3bbcb23ac1e34439849e56009bb765ab2f2558ebfd0a57cbe742169f114bceb930533fb911b22cb5a8fe172bc 9027507f1725d81e5ac0f0854c89ab627df3020fe928cb8745f887bf3310086c58fca1119fd5cd18a7d3561c042d58de a676583f8a26e6f8991a0791916ce785b596ce372812f5eb7b4243ba9367ea95c797170fdac5b0c5e6b7f6519cc2b026 b91b0ab32638aef3365035a41c6068e36d2303bfee8640565e16c9a56c21703270fd45946ce663238a72c053eb3f2230 aaf4cd1ac0a30906dcd2b66b37848c6cc443da511e0b0367fd792887fdaf1500551590440e61d837dbee9d24c9801108 a06f20a02d3cd76029baad5a12592f181738378a83a95e90470fa7cc82a5ae9d2ed824a20eeb1e96e6edc0619f298688 a465d379c3481b294efc3f2f940b651c45579607cf72d143b99705eae42103a0279eb3595966453130e18935265e35d6 892a8af7816a806295278027a956663ea1297118ede0f2a7e670483b81fb14dccacc7a652e12f160e531d806ca5f2861 b480917c0e8b6e00de11b4416a20af6c48a343450a32ee43224559d30e1fecdece52cc699493e1754c0571b84f6c02c2 b3182da84c81e5a52e22cebed985b0efc3056350ec59e8646e7fd984cdb32e6ac14e76609d0ffaca204a7a3c20e9f95d a04ea6392f3b5a176fa797ddec3214946962b84a8f729ffbd01ca65767ff6237da8147fc9dc7dd88662ad0faefdb538c 95c0d10a9ba2b0eb1fd7aa60c743b6cf333bb7f3d7adedce055d6cd35b755d326bf9102afabb1634f209d8dacfd47f1a a1a583d28b07601541fa666767f4f45c954431f8f3cc3f96380364c5044ff9f64114160e5002fb2bbc20812b8cbd36cb a1a0708af5034545e8fcc771f41e14dff421eed08b4606f6d051f2d7799efd00d3a59a1b9a811fa4eddf5682e63102ea ab27c7f54096483dd85c866cfb347166abe179dc5ffaca0c29cf3bfe5166864c7fa5f954c919b3ba00bdbab38e03407d ac8c82271c8ca71125b380ed6c61b326c1cfe5664ccd7f52820e11f2bea334b6f60b1cf1d31599ed94d8218aa6fbf546 a015ea84237d6aa2adb677ce1ff8a137ef48b460afaca20ae826a53d7e731320ebdd9ee836de7d812178bec010dd6799 925418cda78a56c5b15d0f2dc66f720bda2885f15ffafb02ce9c9eed7167e68c04ad6ae5aa09c8c1c2f387aa39ad6d1b 87c00bba80a965b3742deacafb269ca94ead4eb57fdb3ed28e776b1d0989e1b1dba289019cfb1a0f849e58668a4f1552 948d492db131ca194f4e6f9ae1ea6ebc46ebbed5d11f1f305d3d90d6b4995b1218b9606d114f48282a15661a8a8051ca 8179617d64306417d6865add8b7be8452f1759721f97d737ef8a3c90da6551034049af781b6686b2ea99f87d376bce64 918e3da425b7c41e195ed7b726fa26b15a64299fe12a3c22f51a2a257e847611ac6cfcc99294317523fc491e1cbe60c4 a339682a37844d15ca37f753599d0a71eedfbbf7b241f231dd93e5d349c6f7130e0d0b97e6abd2d894f8b701da37cb11 8fc284f37bee79067f473bc8b6de4258930a21c28ac54aaf00b36f5ac28230474250f3aa6a703b6057f7fb79a203c2c1 a2c474e3a52a48cd1928e755f610fefa52d557eb67974d02287dbb935c4b9aab7227a325424fed65f8f6d556d8a46812 99b88390fa856aa1b8e615a53f19c83e083f9b50705d8a15922e7c3e8216f808a4cc80744ca12506b1661d31d8d962e4 a1cbd03e4d4f58fc4d48fa165d824b77838c224765f35d976d3107d44a6cf41e13f661f0e86f87589292721f4de703fb b3a5dde8a40e55d8d5532beaa5f734ee8e91eafad3696df92399ae10793a8a10319b6dc53495edcc9b5cfd50a389a086 996e25e1df5c2203647b9a1744bd1b1811857f742aee0801508457a3575666fcc8fc0c047c2b4341d4b507008cd674c2 93e0a66039e74e324ee6c38809b3608507c492ef752202fff0b2c0e1261ca28f1790b3af4fdb236f0ed7e963e05c1ec0 b6084e5818d2d860ac1606d3858329fbad4708f79d51a6f072dc370a21fdb1e1b207b74bc265a8547658bfb6a9569bb3 a5336126a99c0ecfc890584b2a167922a26cae652dfc96a96ab2faf0bf9842f166b39ceaf396cd3d300d0ebb2e6e0ebf b8b6f13ce9201decaba76d4eca9b9fa2e7445f9bc7dc9f82c262f49b15a40d45d5335819b71ff2ee40465da47d015c47 b45df257b40c68b7916b768092e91c72b37d3ed2a44b09bf23102a4f33348849026cb3f9fbb484adfea149e2d2a180ff a50d38ee017e28021229c4bb7d83dd9cdad27ab3aa38980b2423b96aa3f7dc618e3b23895b0e1379ca20299ff1919bbf 97542cf600d34e4fdc07d074e8054e950708284ed99c96c7f15496937242365c66e323b0e09c49c9c38113096640a1b6 822d198629697dcd663be9c95ff1b39419eae2463fa7e6d996b2c009d746bedc8333be241850153d16c5276749c10b20 9217bc14974766ebdfbf6b434dd84b32b04658c8d8d3c31b5ff04199795d1cfad583782fd0c7438df865b81b2f116f9c 93477879fa28a89471a2c65ef6e253f30911da44260833dd51030b7a2130a923770ebd60b9120f551ab373f7d9ed80aa 87d89ff7373f795a3a798f03e58a0f0f0e7deab8db2802863fab84a7be64ae4dcf82ece18c4ddbefccd356262c2e8176 a3ba26bd31d3cc53ceeced422eb9a63c0383cde9476b5f1902b7fe2b19e0bbf420a2172ac5c8c24f1f5c466eecc615d4 a0fe061c76c90d84bd4353e52e1ef4b0561919769dbabe1679b08ef6c98dcfb6258f122bb440993d976c0ab38854386b b3070aa470185cb574b3af6c94b4069068b89bb9f7ea7db0a668df0b5e6aabdfe784581f13f0cf35cd4c67726f139a8c 9365e4cdf25e116cbc4a55de89d609bba0eaf0df2a078e624765509f8f5a862e5da41b81883df086a0e5005ce1576223 a9036081945e3072fa3b5f022df698a8f78e62ab1e9559c88f9c54e00bc091a547467d5e2c7cbf6bc7396acb96dd2c46 8309890959fcc2a4b3d7232f9062ee51ece20c7e631a00ec151d6b4d5dfccf14c805ce5f9aa569d74fb13ae25f9a6bbe b1dc43f07303634157f78e213c2fae99435661cc56a24be536ccbd345ef666798b3ac53c438209b47eb62b91d6fea90a 84eb451e0a74ef14a2c2266ff01bd33d9a91163c71f89d0a9c0b8edfcfe918fc549565509cd96eed5720a438ff55f7f2 9863b85a10db32c4317b19cc9245492b9389b318cf128d9bbc7ec80a694fcbbd3c0d3189a8cad00cc9290e67e5b361ee 8a150ee474ebe48bdfcac1b29e46ac90dcded8abbe4807a165214e66f780f424be367df5ef1e94b09acf4a00cd2e614d a6677a373130b83e30849af12475e192f817ba4f3226529a9cca8baaefb8811db376e4a044b42bf1481268c249b1a66e b969cbf444c1297aa50d1dfa0894de4565161cb1fc59ba03af9655c5bf94775006fe8659d3445b546538a22a43be6b93 8383167e5275e0707e391645dc9dea9e8a19640ecfa23387f7f6fcaddff5cde0b4090dfad7af3c36f8d5c7705568e8d8 a353ddbc6b6837773e49bb1e33a3e00ca2fb5f7e1dba3a004b0de75f94a4e90860d082a455968851ef050ae5904452e0 adeccf320d7d2831b495479b4db4aa0e25c5f3574f65a978c112e9981b2663f59de4c2fa88974fdcabb2eedb7adab452 afa0eacc9fdbe27fb5e640ecad7ecc785df0daf00fc1325af716af61786719dd7f2d9e085a71d8dc059e54fd68a41f24 a5b803a5bbe0ca77c8b95e1e7bacfd22feae9f053270a191b4fd9bca850ef21a2d4bd9bcd50ecfb971bb458ff2354840 b023c9c95613d9692a301ef33176b655ba11769a364b787f02b42ceb72338642655ea7a3a55a3eec6e1e3b652c3a179e 8fa616aa7196fc2402f23a19e54620d4cf4cf48e1adfb7ea1f3711c69705481ddcc4c97236d47a92e974984d124589e5 a49e11e30cb81cb7617935e8a30110b8d241b67df2d603e5acc66af53702cf1e9c3ef4a9b777be49a9f0f576c65dcc30 8df70b0f19381752fe327c81cce15192389e695586050f26344f56e451df2be0b1cdf7ec0cba7ce5b911dcff2b9325ae 8fbbc21a59d5f5a14ff455ca78a9a393cab91deb61cf1c25117db2714d752e0054ed3e7e13dd36ad423815344140f443 a9a03285488668ab97836a713c6e608986c571d6a6c21e1adbd99ae4009b3dde43721a705d751f1bd4ebf1ea7511dfed b2f32b8e19e296e8402251df67bae6066aeefd89047586d887ffa2eacdf38e83d4f9dc32e553799024c7a41818945755 942cf596b2278ad478be5c0ab6a2ad0ceafe110263cc93d15b9a3f420932104e462cf37586c374f10b1040cb83b862e0 aaa077a55f501c875ceae0a27ef2b180be9de660ef3d6b2132eb17256771ce609d9bc8aaf687f2b56ae46af34ad12b30 90ac74885be1448101cf3b957d4486e379673328a006ea42715c39916e9334ea77117ff4a60d858e2ccce9694547a14f 9256cdfc2339e89db56fd04bd9b0611be0eefc5ee30711bcece4aadf2efcc5a6dcc0cfd5f733e0e307e3a58055dff612 a4c7384e208a0863f4c056248f595473dcde70f019ddaede45b8caf0752575c241bac6e436439f380ac88eee23a858e9 a3aa67391781e0736dddc389f86b430b2fc293b7bd56bfd5a8ec01d1dd52ed940593c3ad4ce25905061936da062b0af6 80299275ec322fbb66cc7dce4482ddd846534e92121186b6906c9a5d5834346b7de75909b22b98d73120caec964e7012 aa3a6cd88e5f98a12738b6688f54478815e26778357bcc2bc9f2648db408d6076ef73cced92a0a6b8b486453c9379f18 b07c444681dc87b08a7d7c86708b82e82f8f2dbd4001986027b82cfbed17b9043e1104ade612e8e7993a00a4f8128c93 af40e01b68d908ac2a55dca9b07bb46378c969839c6c822d298a01bc91540ea7a0c07720a098be9a3cfe9c27918e80e8 abd8947c3bbc3883c80d8c873f8e2dc9b878cbbb4fc4a753a68f5027de6d8c26aa8fbbafeb85519ac94e2db660f31f26 a234f9d1a8f0cb5d017ccca30b591c95ec416c1cb906bd3e71b13627f27960f61f41ed603ffbcf043fd79974ec3169a8 835aaf52a6af2bc7da4cf1586c1a27c72ad9de03c88922ad172dce7550d70f6f3efcc3820d38cd56ae3f7fc2f901f7a0 ae75db982a45ad01f4aa7bc50d642ff188219652bb8d521d13a9877049425d57852f3c9e4d340ffec12a4d0c639e7062 b88884aa9187c33dc784a96832c86a44d24e9ffe6315544d47fc25428f11337b9ffd56eb0a03ad709d1bf86175059096 8492ca5afcc6c0187b06453f01ed45fd57eb56facbeea30c93686b9e1dab8eaabd89e0ccb24b5f35d3d19cd7a58b5338 9350623b6e1592b7ea31b1349724114512c3cce1e5459cd5bddd3d0a9b2accc64ab2bf67a71382d81190c3ab7466ba08 98e8bf9bed6ae33b7c7e0e49fc43de135bffdba12b5dcb9ff38cb2d2a5368bb570fe7ee8e7fbe68220084d1d3505d5be ab56144393f55f4c6f80c67e0ab68f445568d68b5aa0118c0c666664a43ba6307ee6508ba0bb5eb17664817bc9749af0 827d5717a41b8592cfd1b796a30d6b2c3ca2cdc92455f9f4294b051c4c97b7ad6373f692ddafda67884102e6c2a16113 8445ce2bb81598067edaa2a9e356eda42fb6dc5dd936ccf3d1ff847139e6020310d43d0fec1fe70296e8f9e41a40eb20 9405178d965ee51e8d76d29101933837a85710961bb61f743d563ef17263f3c2e161d57e133afac209cdb5c46b105e31 b209f9ed324c0daa68f79800c0a1338bbaf6d37b539871cb7570f2c235caca238a2c4407961fcb7471a103545495ef2c 92ae6437af6bbd97e729b82f5b0d8fb081ca822f340e20fae1875bdc65694cd9b8c037a5a1d49aa9cae3d33f5bad414e 9445bdb666eae03449a38e00851629e29a7415c8274e93343dc0020f439a5df0009cd3c4f5b9ce5c0f79aefa53ceac99 93fdab5f9f792eada28f75e9ac6042a2c7f3142ba416bfdb1f90aa8461dbe4af524eee6db4f421cb70c7bc204684d043 a7f4dc949af4c3163953320898104a2b17161f7be5a5615da684f881633174fb0b712d0b7584b76302e811f3fac3c12f a8ac84da817b3066ba9789bf2a566ccf84ab0a374210b8a215a9dcf493656a3fa0ecf07c4178920245fee0e46de7c3ec 8e6a0ae1273acda3aa50d07d293d580414110a63bc3fb6330bb2ee6f824aff0d8f42b7375a1a5ba85c05bfbe9da88cb5 a5dea98852bd6f51a84fa06e331ea73a08d9d220cda437f694ad9ad02cf10657882242e20bdf21acbbaa545047da4ce5 b13f410bf4cfce0827a5dfd1d6b5d8eabc60203b26f4c88238b8000f5b3aaf03242cdeadc2973b33109751da367069e1 a334315a9d61b692ad919b616df0aa75a9f73e4ea6fc27d216f48964e7daebd84b796418580cf97d4f08d4a4b51037cd 8901ba9e963fcd2f7e08179b6d19c7a3b8193b78ca0e5cf0175916de873ca0d000cd7ac678c0473be371e0ac132f35a2 b11a445433745f6cb14c9a65314bbf78b852f7b00786501b05d66092b871111cd7bee25f702d9e550d7dd91601620abb 8c2f7b8e7b906c71f2f154cc9f053e8394509c37c07b9d4f21b4495e80484fc5fc8ab4bdc525bd6cfa9518680ba0d1a2 b9733cebe92b43b899d3d1bfbf4b71d12f40d1853b2c98e36e635fdd8a0603ab03119890a67127e6bc79afae35b0bef2 a560f6692e88510d9ba940371e1ada344caf0c36440f492a3067ba38e9b7011caac37ba096a8a4accb1c8656d3c019b3 ac18624339c1487b2626eef00d66b302bdb1526b6340d6847befe2fdfb2b410be5555f82939f8707f756db0e021ed398 afd9a3b8866a7fe4f7bc13470c0169b9705fcd3073685f5a6dcff3bdbbc2be50ac6d9908f9a10c5104b0bffc2bc14dad 97f15c92fe1f10949ed9def5dd238bc1429706e5037a0e0afb71c2d0e5845e2fed95a171c393e372077a7c7059f8c0e0 9453a1d4d09c309b70968ea527007d34df9c4cfd3048e5391aac5f9b64ca0c05dde5b8c949c481cfc83ef2e57b687595 b80e4b7c379ad435c91b20b3706253b763cbc980db78f782f955d2516af44c07bbfa5888cbf3a8439dc3907320feb25a 8939f458d28fefe45320b95d75b006e98330254056d063e4a2f20f04bcb25936024efe8d436d491ed34b482f9b9ae49c a9ead2e833f71f7e574c766440c4b3c9c3363698c7ade14499a56003a272832ee6d99440887fa43ccdf80265b9d56b97 b6547a36934f05ce7b779e68049d61351cf229ae72dc211cc96a2a471b2724782f9355fdb415ea6f0ea1eb84fe00e785 828bfb3099b7b650b29b0f21279f829391f64520a6ab916d1056f647088f1e50fac9253ef7464eceab5380035c5a59c4 8d714b9ea650be4342ff06c0256189e85c5c125adf6c7aeca3dba9b21d5e01a28b688fc2116ce285a0714a8f1425c0b8 8a82eda041b2e72a3d73d70d85a568e035fbd6dc32559b6c6cfdf6f4edcb59a6ba85b6294a721aa0a71b07714e0b99ae af5665ebc83d027173b14ffb0e05af0a192b719177889fadc9ac8c082fda721e9a75d9ce3f5602dbfd516600ee3b6405 a68fdddf03d77bebdb676e40d93e59bd854408793df2935d0a5600601f7691b879981a398d02658c2da39dbbf61ef96c 8c001ebc84fcf0470b837a08a7b6125126b73a2762db47bbdc38c0e7992b1c66bac7a64faa1bf1020d1c63b40adc3082 8553889b49f9491109792db0a69347880a9cf2911b4f16f59f7f424e5e6b553687d51282e8f95be6a543635247e2e2c2 a2c269d6370b541daf1f23cc6b5d2b03a5fa0c7538d53ae500ef875952fe215e74a5010329ff41461f4c58b32ad97b3d a5dae097285392b4eba83a9fd24baa03d42d0a157a37fae4b6efc3f45be86024b1182e4a6b6eadcf5efe37704c0a1ae5 89871a77d2032387d19369933cd50a26bda643e40cfd0ce73febe717a51b39fae981406fd41e50f4a837c02a99524ef9 8a76d495e90093ec2ac22f53759dc1cf36fbb8370fb586acbd3895c56a90bbf3796bcc4fc422ca4058adf337ead1402e ad4eb7576c4954d20623c1336c63662c2a6fb46ec6ef99b7f8e946aa47488dcb136eab60b35600f98c78c16c10c99013 894c2b120cec539feb1d281baaadde1e44beafedeeec29b804473fe024e25c1db652f151c956e88d9081fb39d27e0b19 9196bd5c100878792444c573d02b380a69e1b4b30cb59a48114852085058a5fd952df4afee3ecceb5c4ede21e1ed4a1a a996fffc910764ea87a1eedc3a3d600e6e0ff70e6a999cb435c9b713a89600fc130d1850174efe9fc18244bb7c6c5936 8591bb8826befa8bee9663230d9a864a5068589f059e37b450e8c85e15ce9a1992f0ce1ead1d9829b452997727edcf9d 9465e20bb22c41bf1fa728be8e069e25cda3f7c243381ca9973cbedad0c7b07d3dd3e85719d77cf80b1058ce60e16d68 926b5ce39b6e60b94878ffeae9ff20178656c375fb9cfe160b82318ca500eb3e2e3144608b6c3f8d6c856b8fe1e2fbcf a1ef29cbc83c45eb28ad468d0ce5d0fdd6b9d8191ba5ffa1a781c2b232ed23db6b7b04de06ef31763a6bfe377fa2f408 9328e63a3c8acf457c9f1f28b32d90d0eeadb0f650b5d43486a61d7374757a7ada5fc1def2a1e600fa255d8b3f48036f a9c64880fcb7654f4dd08f4c90baac95712dd6dd407e17ea60606e9a97dc8e54dd25cb72a9bf3fc61f8d0ad569fe369d a908eb7b940c1963f73046d6b35d40e09013bfbfbeb2ccd64df441867e202b0f3b625fa32dd04987c3d7851360abdffc b3947b5ed6d59e59e4472cdb1c3261de1b5278fb7cb9b5fca553f328b3b3e094596861ea526eca02395f7b7358155b7b 99da7f190d37bc58945f981cf484d40fcf0855cf8178e2ce8d057c7f0a9d9f77425fdbce9ef8366f44f671b20fd27d0b 913976d77d80e3657977df39571577fdf0be68ba846883705b454f8493578baa741cfaede53783e2c97cc08964395d83 8d754a61e5164a80b5090c13f3e936056812d4ae8dc5cc649e6c7f37464777249bc4ae760a9806939131f39d92cca5bf 82ffd098480828a90cb221a8c28584e15904bad477c13b2e2d6ef0b96a861ce4a309a328fe44342365349456ad7c654f 89ae3ce4b0357044579ca17be85d8361bb1ce3941f87e82077dd67e43ec0f95edd4bd3426225c90994a81a99e79490b7 a170892074016d57c9d8e5a529379d7e08d2c1158b9ac4487ac9b95266c4fd51cb18ae768a2f74840137eec05000dd5a aafd8acd1071103c7af8828a7a08076324d41ea530df90f7d98fafb19735fc27ead91b50c2ca45851545b41d589d0f77 8623c849e61d8f1696dc9752116a26c8503fd36e2cbbc9650feffdd3a083d8cdbb3b2a4e9743a84b9b2ad91ac33083f2 ac7166ddd253bb22cdbd8f15b0933c001d1e8bc295e7c38dc1d2be30220e88e2155ecd2274e79848087c05e137e64d01 a5276b216d3df3273bbfa46210b63b84cfe1e599e9e5d87c4e2e9d58666ecf1af66cb7ae65caebbe74b6806677215bd0 88792f4aa3597bb0aebadb70f52ee8e9db0f7a9d74f398908024ddda4431221a7783e060e0a93bf1f6338af3d9b18f68 8f5fafff3ecb3aad94787d1b358ab7d232ded49b15b3636b585aa54212f97dc1d6d567c180682cca895d9876cacb7833 ab7cb1337290842b33e936162c781aa1093565e1a5b618d1c4d87dd866daea5cebbcc486aaa93d8b8542a27d2f8694c7 88480a6827699da98642152ebc89941d54b4791fbc66110b7632fb57a5b7d7e79943c19a4b579177c6cf901769563f2f a725ee6d201b3a610ede3459660658ee391803f770acc639cfc402d1667721089fb24e7598f00e49e81e50d9fd8c2423 98924372da8aca0f67c8c5cad30fa5324519b014fae7849001dcd51b6286118f12b6c49061219c37714e11142b4d46de a62c27360221b1a7c99697010dfe1fb31ceb17d3291cf2172624ebeff090cbaa3c3b01ec89fe106dace61d934711d42d 825173c3080be62cfdc50256c3f06fe190bc5f190d0eb827d0af5b99d80936e284a4155b46c0d462ee574fe31d60983d a28980b97023f9595fadf404ed4aa36898d404fe611c32fd66b70252f01618896f5f3fda71aea5595591176aabf0c619 a50f5f9def2114f6424ff298f3b128068438f40860c2b44e9a6666f43c438f1780be73cf3de884846f1ba67f9bef0802 b1eee2d730da715543aeb87f104aff6122cb2bf11de15d2519ff082671330a746445777924521ec98568635f26988d0c 862f6994a1ff4adfd9fb021925cccf542fca4d4b0b80fb794f97e1eb2964ef355608a98eec6e07aadd4b45ee625b2a21 8ce69a18df2f9b9f6e94a456a7d94842c61dea9b00892da7cf5c08144de9be39b8c304aeca8b2e4222f87ba367e61006 b5f325b1cecd435f5346b6bc562d92f264f1a6d91be41d612df012684fdd69e86063db077bc11ea4e22c5f2a13ae7bee 85526870a911127835446cb83db8986b12d5637d59e0f139ad6501ac949a397a6c73bd2e7fba731b1bb357efe068242c 8552247d3f7778697f77389717def5a149fc20f677914048e1ed41553b039b5427badc930491c0bae663e67668038fd1 a545640ee5e51f3fe5de7050e914cfe216202056cd9d642c90e89a166566f909ee575353cb43a331fde17f1c9021414e 8b51229b53cff887d4cab573ba32ec52668d197c084414a9ee5589b285481cea0c3604a50ec133105f661321c3ca50f5 8cdc0b960522bed284d5c88b1532142863d97bbb7dc344a846dc120397570f7bd507ceb15ed97964d6a80eccfef0f28e a40683961b0812d9d53906e795e6470addc1f30d09affebf5d4fbbd21ddfa88ce441ca5ea99c33fd121405be3f7a3757 a527875eb2b99b4185998b5d4cf97dd0d4a937724b6ad170411fc8e2ec80f6cee2050f0dd2e6fee9a2b77252d98b9e64 84f3a75f477c4bc4574f16ebc21aaa32924c41ced435703c4bf07c9119dd2b6e066e0c276ff902069887793378f779e0 a3544bc22d1d0cab2d22d44ced8f7484bfe391b36991b87010394bfd5012f75d580596ffd4f42b00886749457bb6334b b81f6eb26934b920285acc20ceef0220dd23081ba1b26e22b365d3165ce2fbae733bbc896bd0932f63dcc84f56428c68 95e94d40a4f41090185a77bf760915a90b6a3e3ace5e53f0cb08386d438d3aa3479f0cd81081b47a9b718698817265cd b69bd1625b3d6c17fd1f87ac6e86efa0d0d8abb69f8355a08739109831baeec03fd3cd4c765b5ff8b1e449d33d050504 8448f4e4c043519d98552c2573b76eebf2483b82d32abb3e2bfc64a538e79e4f59c6ca92adff1e78b2f9d0a91f19e619 8f11c42d6a221d1fda50887fb68b15acdb46979ab21d909ed529bcad6ae10a66228ff521a54a42aca0dad6547a528233 a3adb18d7e4a882b13a067784cf80ea96a1d90f5edc61227d1f6e4da560c627688bdf6555d33fe54cab1bca242986871 a24d333d807a48dc851932ed21cbdd7e255bad2699909234f1706ba55dea4bb6b6f8812ffc0be206755868ba8a4af3f9 a322de66c22a606e189f7734dbb7fda5d75766d5e69ec04b4e1671d4477f5bcb9ff139ccc18879980ebc3b64ab4a2c49 88f54b6b410a1edbf125db738d46ee1a507e69bc5a8f2f443eb787b9aa7dbd6e55014ec1e946aabeb3e27a788914fb04 b32ee6da1dcd8d0a7fd7c1821bb1f1fe919c8922b4c1eeed56e5b068a5a6e68457c42b192cbaef5dc6d49b17fa45bc0f 8a44402da0b3a15c97b0f15db63e460506cb8bef56c457166aea5e8881087d8202724c539ef0feb97131919a73aefca8 b967e3fead6171fa1d19fd976535d428b501baff59e118050f9901a54b12cc8e4606348454c8f0fc25bd6644e0a5532e b7a0c9e9371c3efbbb2c6783ce2cc5f149135175f25b6d79b09c808bce74139020e77f0c616fa6dcb3d87a378532529d a54207782ffc909cd1bb685a3aafabbc4407cda362d7b3c1b14608b6427e1696817aeb4f3f85304ac36e86d3d8caa65b 98c1da056813a7bfebc81d8db7206e3ef9b51f147d9948c088976755826cc5123c239ca5e3fe59bed18b5d0a982f3c3f ae1c86174dfafa9c9546b17b8201719aecd359f5bbeb1900475041f2d5b8a9600d54d0000c43dd061cfda390585726ff a8ee5a8be0bd1372a35675c87bfd64221c6696dc16e2d5e0996e481fec5cdbcb222df466c24740331d60f0521285f7d3 8ddadbe3cf13af50d556ce8fc0dd77971ac83fad9985c3d089b1b02d1e3afc330628635a31707b32595626798ea22d45 a5c80254baf8a1628dc77c2445ebe21fbda0de09dd458f603e6a9851071b2b7438fe74214df293dfa242c715d4375c95 b9d83227ed2600a55cb74a7052003a317a85ca4bea50aa3e0570f4982b6fe678e464cc5156be1bd5e7bba722f95e92c5 b56085f9f3a72bea9aa3a8dc143a96dd78513fa327b4b9ba26d475c088116cab13843c2bff80996bf3b43d3e2bddb1d6 8fa9b39558c69a9757f1e7bc3f07295e4a433da3e6dd8c0282397d26f64c1ecd8eb3ba9824a7cacfb87496ebbb45d962 879c6d0cb675812ed9dee68c3479a499f088068501e2677caeae035e6f538da91a49e245f5fcce135066169649872bee 91aa9fd3fed0c2a23d1edda8a6542188aeb8abee8772818769bdee4b512d431e4625a343af5d59767c468779222cf234 a6be0bb2348c35c4143482c7ef6da9a93a5356f8545e8e9d791d6c08ed55f14d790d21ee61d3a56a2ae7f888a8fd46ca 808ee396a94e1b8755f2b13a6ffbedef9e0369e6c2e53627c9f60130c137299d0e4924d8ef367e0a7fad7f68a8c9193c ad1086028fcdac94d5f1e7629071e7e47e30ad0190ae59aaebfb7a7ef6202ab91323a503c527e3226a23d7937af41a52 9102bdaf79b907d1b25b2ec6b497e2d301c8eac305e848c6276b392f0ad734131a39cc02ed42989a53ca8da3d6839172 8c976c48a45b6bc7cd7a7acea3c2d7c5f43042863b0661d5cd8763e8b50730552187a8eecf6b3d17be89110208808e77 a2624c7e917e8297faa3af89b701953006bf02b7c95dfba00c9f3de77748bc0b13d6e15bb8d01377f4d98fb189538142 a405f1e66783cdcfe20081bce34623ec3660950222d50b7255f8b3cc5d4369aeb366e265e5224c0204911539f0fa165e 8d69bdcaa5d883b5636ac8f8842026fcc58c5e2b71b7349844a3f5d6fbecf44443ef4f768eac376f57fb763606e92c9f 82fce0643017d16ec1c3543db95fb57bfa4855cc325f186d109539fcacf8ea15539be7c4855594d4f6dc628f5ad8a7b0 8860e6ff58b3e8f9ae294ff2487f0d3ffae4cf54fd3e69931662dabc8efd5b237b26b3def3bcd4042869d5087d22afcf 88c80c442251e11c558771f0484f56dc0ed1b7340757893a49acbf96006aa73dfc3668208abea6f65375611278afb02a 8be3d18c6b4aa8e56fcd74a2aacb76f80b518a360814f71edb9ccf3d144bfd247c03f77500f728a62fca7a2e45e504c5 8b8ebf0df95c3f9b1c9b80469dc0d323784fd4a53f5c5357bb3f250a135f4619498af5700fe54ad08744576588b3dfff a8d88abdaadd9c2a66bc8db3072032f63ed8f928d64fdb5f810a65074efc7e830d56e0e738175579f6660738b92d0c65 a0a10b5d1a525eb846b36357983c6b816b8c387d3890af62efb20f50b1cb6dd69549bbef14dab939f1213118a1ae8ec2 8aadf9b895aeb8fdc9987daa937e25d6964cbd5ec5d176f5cdf2f0c73f6f145f0f9759e7560ab740bf623a3279736c37 99aeda8a495031cc5bdf9b842a4d7647c55004576a0edc0bd9b985d60182608361ed5459a9d4b21aa8e2bd353d10a086 832c8b3bfcd6e68eee4b100d58014522de9d4cefa99498bc06c6dca83741e4572e20778e0d846884b33439f160932bca 841f56ebefc0823ab484fc445d62f914e13957e47904419e42771aa605e33ab16c44f781f6f9aa42e3a1baf377f54b42 a6e40271d419e295a182725d3a9b541ffd343f23e37549c51ecaa20d13cf0c8d282d6d15b24def5702bfee8ba10b12ac 8ac00925ac6187a4c5cde48ea2a4eaf99a607e58b2c617ee6f01df30d03fafada2f0469178dd960d9d64cbd33a0087d8 b6b80916b540f8a0fe4f23b1a06e2b830008ad138271d5ba3cd16d6619e521fe2a7623c16c41cba48950793386eea942 8412c0857b96a650e73af9d93087d4109dd092ddf82188e514f18fcac644f44d4d62550bfa63947f2d574a2e9d995bbb b871395baa28b857e992a28ac7f6d95ec461934b120a688a387e78498eb26a15913b0228488c3e2360391c6b7260b504 926e2d25c58c679be77d0e27ec3b580645956ba6f13adcbc2ea548ee1b7925c61fcf74c582337a3b999e5427b3f752f2 a165fa43fecae9b913d5dcfc232568e3e7b8b320ce96b13800035d52844c38fd5dbf7c4d564241d860c023049de4bcbc b4976d7572fd9cc0ee3f24888634433f725230a7a2159405946a79315bc19e2fc371448c1c9d52bf91539fd1fe39574b a6b461eb72e07a9e859b9e16dfa5907f4ac92a5a7ca4368b518e4a508dc43f9b4be59db6849739f3ef4c44967b63b103 b976606d3089345d0bc501a43525d9dca59cf0b25b50dfc8a61c5bd30fac2467331f0638fab2dc68838aa6ee8d2b6bc9 b16ea61c855da96e180abf7647fa4d9dd6fd90adebadb4c5ed4d7cd24737e500212628fca69615d89cb40e9826e5a214 95a3e3162eb5ea27a613f8c188f2e0dcc5cbd5b68c239858b989b004d87113e6aa3209fa9fad0ee6ecef42814ba9db1a b6a026ab56d3224220e5bce8275d023c8d39d1bdf7eec3b0923429b7d5ef18cf613a3591d364be8727bb1fa0ba11eabb 949f117e2e141e25972ee9ccdd0b7a21150de7bbf92bbd89624a0c5f5a88da7b2b172ba2e9e94e1768081f260c2a2f8d b7c5e9e6630287d2a20a2dfb783ffe6a6ff104ff627c6e4e4342acc2f3eb6e60e9c22f465f8a8dc58c42f49840eca435 872be5a75c3b85de21447bb06ac9eb610f3a80759f516a2f99304930ddf921f34cbffc7727989cdd7181d5fc62483954 a50976ea5297d797d220932856afdd214d1248230c9dcd840469ecc28ea9f305b6d7b38339fedb0c00b5251d77af8c95 80b360f8b44914ff6f0ffbd8b5360e3cabe08639f6fe06d0c1526b1fe9fe9f18c497f1752580b30e950abd3e538ad416 a2f98f9bf7fac78c9da6bb41de267742a9d31cf5a04b2fb74f551084ec329b376f651a59e1ae919b2928286fb566e495 8b9d218a8a6c150631548e7f24bbd43f132431ae275c2b72676abbea752f554789c5ff4aac5c0eeee5529af7f2b509ef aa21a243b07e9c7b169598bf0b102c3c280861780f83121b2ef543b780d47aaa4b1850430ee7927f33ece9847c4e0e1a 8a6f90f4ce58c8aa5d3656fe4e05acccf07a6ec188a5f3cde7bf59a8ae468e66f055ac6dfc50b6e8e98f2490d8deedc5 8e39f77ca4b5149ffe9945ceac35d068760ba338d469d57c14f626dd8c96dbe993dd7011beff727c32117298c95ee854 83bd641c76504222880183edd42267e0582642c4993fe2c7a20ce7168e4c3cbf7586e1d2d4b08c84d9b0bf2f6b8800b8 a9d332993cf0c1c55130e5cf3a478eb5e0bfb49c25c07538accc692ef03d82b458750a7b991cc0b41b813d361a5d31e3 a0fc60e6a6015df9bee04cea8f20f01d02b14b6f7aa03123ab8d65da071b2d0df5012c2a69e7290baae6ed6dd29ebe07 a2949dde2e48788ceaac7ec7243f287ffe7c3e788cdba97a4ab0772202aeef2d50382bed8bf7eff5478243f7eabe0bda a7879373ea18572dba6cf29868ca955ffa55b8af627f29862f6487ee398b81fe3771d8721ca8e06716c5d91b9ac587cb b3c7081e2c5306303524fbe9fe5645111a57dffd4ec25b7384da12e56376a0150ab52f9d9cc6ca7bdd950695e39b766d a634a6a19d52dcb9f823352b36c345d2de54b75197bcd90528d27830bd6606d1a9971170de0849ed5010afa9f031d5be 88f2062f405fa181cfdb8475eaf52906587382c666ca09a9522537cfebbc7de8337be12a7fd0db6d6f2f7ab5aefab892 b1f0058c1f273191247b98783b2a6f5aa716cf799a8370627fc3456683f03a624d0523b63a154fe9243c0dfd5b37c460 ae39a227cc05852437d87be6a446782c3d7fbe6282e25cf57b6b6e12b189bdc0d4a6e2c3a60b3979256b6b5baf8f1c5f 802a1af228ab0c053b940e695e7ef3338f5be7acf4e5ed01ac8498e55b492d3a9f07996b1700a84e22f0b589638909cd a36490832f20e4b2f9e79ee358b66d413f034d6a387534b264cdeac2bca96e8b5bcbdd28d1e98c44498032a8e63d94d2 8728c9a87db2d006855cb304bba54c3c704bf8f1228ae53a8da66ca93b2dac7e980a2a74f402f22b9bc40cd726e9c438 a08f08ab0c0a1340e53b3592635e256d0025c4700559939aeb9010ed63f7047c8021b4210088f3605f5c14fb51d1c613 9670fd7e2d90f241e8e05f9f0b475aa260a5fb99aa1c9e61cd023cbad8ed1270ae912f168e1170e62a0f6d319cf45f49 a35e60f2dd04f098bf274d2999c3447730fe3e54a8aff703bc5a3c274d22f97db4104d61a37417d93d52276b27ef8f31 859df7a21bc35daec5695201bd69333dc4f0f9e4328f2b75a223e6615b22b29d63b44d338413ca97eb74f15563628cb7 b2b44ad3e93bc076548acdf2477803203108b89ecc1d0a19c3fb9814d6b342afc420c20f75e9c2188ad75fdb0d34bb2d 941173ee2c87765d10758746d103b667b1227301e1bcfecef2f38f9ab612496a9abd3050cef5537bf28cfecd2aacc449 92b0bea30ebed20ac30648efb37bac2b865daaa514316e6f5470e1de6cb84651ff77c127aa7beed4521bda5e8fc81122 af17bf813bb238cf8bb437433f816786612209180a6c0a1d5141292dc2d2c37164ef13bfc50c718bfcc6ce26369298a2 8461fd951bdfda099318e05cc6f75698784b033f15a71bce26165f0ce421fd632d50df9eeced474838c0050b596e672c 83281aa18ae4b01e8201e1f64248cc6444c92ee846ae72adb178cef356531558597d84ff93a05abf76bfe313eb7dbe86 b62b150f73999c341daa4d2f7328d2f6ca1ef3b549e01df58182e42927537fc7971c360fe8264af724f4c0247850ef12 a7022a201f79c012f982b574c714d813064838a04f56964d1186691413757befeeaada063e7884297606e0eea1b1ed43 a42ac9e8be88e143853fd8e6a9ff21a0461801f0ac76b69cca669597f9af17ecb62cccdcdcbe7f19b62ab93d7f838406 80f1ca73b6ba3a2fbae6b79b39c0be8c39df81862d46c4990c87cbf45b87996db7859d833abc20af2fcb4faf059c436a b355943e04132d5521d7bbe49aea26f6aa1c32f5d0853e77cc2400595325e923a82e0ff7601d1aee79f45fd8a254f6ae 87142c891d93e539b31d0b5ead9ea600b9c84db9be9369ff150a8312fe3d10513f4c5b4d483a82b42bc65c45dd9dd3bd 823c3d7f6dda98a9d8c42b3fee28d3154a95451402accadb6cf75fc45d2653c46a569be75a433094fa9e09c0d5cf1c90 b3c3497fe7356525c1336435976e79ec59c5624c2fb6185ee09ca0510d58b1e392965e25df8a74d90d464c4e8bb1422b 88c48d83e8ddc0d7eea051f3d0e21bc0d3a0bb2b6a39ece76750c1c90c382a538c9a35dc9478b8ceb8157dcccbbf187a 93da81a8939f5f58b668fefdc6f5f7eca6dc1133054de4910b651f8b4a3267af1e44d5a1c9e5964dc7ab741eb146894b 8b396e64985451ac337f16be61105106e262e381ea04660add0b032409b986e1ac64da3bc2feae788e24e9cb431d8668 9472068b6e331ea67e9b5fbf8057672da93c209d7ded51e2914dbb98dccd8c72b7079b51fd97a7190f8fc8712c431538 ac47e1446cb92b0a7406f45c708567f520900dfa0070d5e91783139d1bfc946d6e242e2c7b3bf4020500b9f867139709 896053706869fb26bb6f7933b3d9c7dd6db5c6bd1269c7a0e222b73039e2327d44bda7d7ae82bf5988808b9831d78bcd a55e397fa7a02321a9fe686654c86083ecedb5757586d7c0250ec813ca6d37151a12061d5feca4691a0fd59d2f0fdd81 ae23f08ac2b370d845036518f1bddb7fea8dc59371c288a6af310486effeb61963f2eef031ca90f9bdbcf0e475b67068 b5462921597a79f66c0fec8d4c7cfd89f427692a7ce30d787e6fd6acd2377f238ec74689a0fdbe8ef3c9c9bd24b908dc ae67e8ea7c46e29e6aae6005131c29472768326819aa294aaf5a280d877de377b44959adb1348fa3e929dcbc3ae1f2c0 84962b4c66500a20c4424191bdfb619a46cda35bdb34c2d61edcb0b0494f7f61dd5bf8f743302842026b7b7d49edd4b5 846f76286dc3cc59cb15e5dabb72a54a27c78190631df832d3649b2952fa0408ecde7d4dfdae7046c728efa29879fb51 8f76c854eaee8b699547e07ad286f7dadfa6974c1328d12502bd7630ae619f6129272fdd15e2137ffef0143c42730977 8007b163d4ea4ec6d79e7a2aa19d06f388da0b3a56f3ee121441584e22a246c0e792431655632bf6e5e02cb86914eebf ac4d2cecc1f33e6fb73892980b61e62095ddff5fd6167f53ca93d507328b3c05440729a277dc3649302045b734398af1 92d2a88f2e9c9875abaff0d42624ccb6d65401de7127b5d42c25e6adccd7a664504c5861618f9031ced8aeb08b779f06 a832c1821c1b220eb003fc532af02c81196e98df058cdcc9c9748832558362915ea77526937f30a2f74f25073cb89afb b6f947ab4cc2baec100ed8ec7739a2fd2f9504c982b39ab84a4516015ca56aea8eef5545cfc057dd44c69b42125fb718 b24afacf2e90da067e5c050d2a63878ee17aaf8fd446536f2462da4f162de87b7544e92c410d35bf2172465940c19349 b7a0aa92deac71eaab07be8fa43086e071e5580f5dbf9b624427bdd7764605d27303ae86e5165bed30229c0c11958c38 b0d1d5bfa1823392c5cf6ed927c1b9e84a09a24b284c2cd8fcb5fda8e392c7c59412d8f74eb7c48c6851dff23ae66f58 a24125ef03a92d2279fb384186ca0274373509cfec90b34a575490486098438932ee1be0334262d22d5f7d3db91efe67 83e08e5fba9e8e11c164373794f4067b9b472d54f57f4dbe3c241cf7b5b7374102de9d458018a8c51ab3aed1dddf146f 9453101b77bb915ed40990e1e1d2c08ea8ec5deb5b571b0c50d45d1c55c2e2512ec0ceca616ff0376a65678a961d344d 92a0516e9eb6ad233d6b165a8d64a062ce189b25f95d1b3264d6b58da9c8d17da2cd1f534800c43efcf2be73556cd2ff 958d0b5d7d8faf25d2816aa6a2c5770592ad448db778dd9b374085baa66c755b129822632eaabcb65ee35f0bf4b73634 90a749de8728b301ad2a6b044e8c5fd646ccd8d20220e125cba97667e0bb1d0a62f6e3143b28f3d93f69cdc6aa04122a 84bd34c8d8f74dec07595812058db24d62133c11afed5eb2a8320d3bfc28e442c7f0cfd51011b7b0bb3e5409cb7b6290 aecc250b556115d97b553ad7b2153f1d69e543e087890000eaa60f4368b736921d0342ce5563124f129096f5d5e2ca9d 977f17ac82ed1fbf422f9b95feb3047a182a27b00960296d804fd74d54bb39ad2c055e665c1240d2ad2e06a3d7501b00 af5be9846bd4879ebe0af5e7ad253a632f05aedfe306d31fe6debe701ba5aa4e33b65efc05043bc73aadb199f94baed4 9199e12ec5f2aaaeed6db5561d2dcc1a8fe9c0854f1a069cba090d2dff5e5ba52b10c841ccbd49006a91d881f206150d 8f4a96a96ed8ceaf3beba026c89848c9ca4e6452ce23b7cf34d12f9cc532984a498e051de77745bdc17c7c44c31b7c30 af3f2a3dbe8652c4bfca0d37fb723f0e66aab4f91b91a625114af1377ad923da8d36da83f75deb7a3219cd63135a3118 a6d46963195df8962f7aa791d104c709c38caa438ddd192f7647a884282e81f748c94cdf0bb25d38a7b0dc1b1d7bbcf7 86f3de4b22c42d3e4b24b16e6e8033e60120af341781ab70ae390cb7b5c5216f6e7945313c2e04261a51814a8cb5db92 b9f86792e3922896cfd847d8ff123ff8d69ecf34968fb3de3f54532f6cd1112b5d34eeabdca46ae64ad9f6e7e5b55edc 83edfbcbc4968381d1e91ab813b3c74ab940eaf6358c226f79182f8b21148ec130685fd91b0ea65916b0a50bccf524ea 93b61daca7a8880b7926398760f50016f2558b0bab74c21181280a1baf3414fc539911bb0b79c4288d29d3c4ad0f4417 ad541aeb83a47526d38f2e47a5ce7e23a9adabe5efeae03541026881e6d5ef07da3ac1a6ed466ca924fa8e7a91fcff88 ac4bba31723875025640ed6426003ed8529215a44c9ffd44f37e928feef9fc4dfa889088131c9be3da87e8f3fdf55975 88fa4d49096586bc9d29592909c38ea3def24629feacd378cc5335b70d13814d6dac415f8c699ee1bf4fe8b85eb89b38 b67d0b76cbd0d79b71f4673b96e77b6cda516b8faa1510cfe58ff38cc19000bb5d73ff8418b3dab8c1c7960cb9c81e36 98b4f8766810f0cfecf67bd59f8c58989eb66c07d3dfeee4f4bbce8fd1fce7cc4f69468372eaec7d690748543bd9691d 8445891af3c298b588dec443beacdf41536adb84c812c413a2b843fd398e484eb379075c64066b460839b5fe8f80177c b603635c3ed6fdc013e2a091fc5164e09acf5f6a00347d87c6ebadb1f44e52ff1a5f0466b91f3f7ffc47d25753e44b75 87ec2fc928174599a9dafe7538fec7dcf72e6873b17d953ed50708afff0da37653758b52b7cafa0bf50dfcf1eafbb46c b9dbd0e704d047a457d60efe6822dc679e79846e4cbcb11fa6c02079d65673ee19bbf0d14e8b7b200b9205f4738df7c7 9591ec7080f3f5ba11197a41f476f9ba17880f414d74f821a072ec5061eab040a2acba3d9856ff8555dfe5eaeb14ca19 b34c9d1805b5f1ce38a42b800dec4e7f3eb8c38e7d2b0a525378e048426fed150dbfe9cc61f5db82b406d1b9ff2d10bf a36fdc649dc08f059dfa361e3969d96b4cc4a1ebf10b0cd01a7dd708430979e8d870961fef85878f8779b8e23caafb18 88dfc739a80c16c95d9d6f73c3357a92d82fa8c3c670c72bee0f1e4bac9ec338e1751eb786eda3e10f747dd7a686900f 84a535ad04f0961756c61c70001903a9adf13126983c11709430a18133c4b4040d17a33765b4a06968f5d536f4bfb5c5 8c86d695052a2d2571c5ace744f2239840ef21bb88e742f050c7fa737cd925418ecef0971333eb89daa6b3ddfede268c 8e9a700157069dc91e08ddcbdde3a9ad570272ad225844238f1015004239c542fceb0acce6d116c292a55f0d55b6175e 84d659e7f94e4c1d15526f47bc5877a4ef761c2a5f76ec8b09c3a9a30992d41b0e2e38ed0c0106a6b6c86d670c4235f3 a99253d45d7863db1d27c0ab561fb85da8c025ba578b4b165528d0f20c511a9ca9aff722f4ff7004843f618eb8fced95 89a3cacb15b84b20e95cd6135550146bbe6c47632cc6d6e14d825a0c79b1e02b66f05d57d1260cb947dc4ae5b0283882 8385b1555e794801226c44bd5e878cbe68aeac0a19315625a8e5ea0c3526b58cdd4f53f9a14a167a5e8a293b530d615a b68c729e9df66c5cd22af4909fb3b0057b6a231c4a31cd6bf0fa0e53c5809419d15feb483de6e9408b052458e819b097 924f56eda269ec7ec2fc20c5731bf7f521546ddf573ccbe145592f1c9fee5134747eb648d9335119a8066ca50a1f7e50 b2100a26b9c3bec7ec5a53f0febbf56303f199be2f26b2d564cfee2adc65483b84192354f2865c2f4c035fa16252ae55 8f64dbed62e638563967ec1605a83216aed17eb99aa618c0543d74771ea8f60bbb850c88608d4f8584f922e30a8a0a72 b31b9e1ffe8d7260479c9413f8e680f3fe391ae8fcf44fcca3000d9b2473a40c1d32299f8f63865a57579a2d6c7e9f08 a5b1d136142eb23e322c6c07cb838a3f58ab6925472352ebd0bb47041a0d8729e1074ca223922f3a7a672ced7a1e562d 8d9470a5a15d833a447b5f108333d50f30aa7659e331c3f8080b1e928a99922edc650466a2f54f3d48afdb34bff42142 866368f5891564e5b2de37ad21ff0345c01129a14ea5667f9b64aad12d13ec034622872e414743af0bf20adb2041b497 88ef9c2ebf25fd0c04b7cfa35fbac2e4156d2f1043fa9f98998b2aa402c8f9a4f1039e782451a46840f3e0e4b3fa47d3 94ba04a4859273697e264a2d238dc5c9ff573ebc91e4796ea58eebe4080c1bf991255ab2ad8fb1e0301ce7b79cc6e69b 86b6bd0953309a086e526211bf1a99327269304aa74d8cdc994cee63c3a2d4b883e832b0635888dff2a13f1b02eb8df4 843ea6ea5f2c7a1fd50be56a5765dcce3ea61c99b77c1a729ee0cd8ec706385ac7062e603479d4c8d3527f030762d049 8d3675195a3b06f2d935d45becc59f9fa8fa440c8df80c029775e47fe9c90e20f7c8e4cc9a2542dd6bfe87536c428f0d 8978580b0c9b0aa3ab2d47e3cfd92fa891d3ddee57829ee4f9780e8e651900457d8e759d1a9b3e8f6ae366e4b57f2865 890112ec81d0f24b0dfbb4d228e418eff02ae63dc691caf59c1d103e1d194e6e2550e1bec41c0bfdb74fed454f621d0c 97da00bd4b19d1e88caff7f95b8b9a7d29bc0afe85d0c6a163b4b9ef336f0e90e2c49ce6777024bb08df908cc04ea1ca b458268d275a5211106ccaa8333ce796ef2939b1c4517e502b6462e1f904b41184a89c3954e7c4f933d68b87427a7bfd aac9c043ba8ba9283e8428044e6459f982413380ee7005a996dc3cc468f6a21001ecaa3b845ce2e73644c2e721940033 82145013c2155a1200246a1e8720adf8a1d1436b10d0854369d5b1b6208353e484dd16ce59280c6be84a223f2d45e5e2 b301bafa041f9b203a46beab5f16160d463aa92117c77a3dc6a9261a35645991b9bafcc186c8891ca95021bd35f7f971 a531b8d2ac3de09b92080a8d8857efa48fb6a048595279110e5104fee7db1dd7f3cfb8a9c45c0ed981cbad101082e335 a22ac1d627d08a32a8abd41504b5222047c87d558ffae4232cefdeb6a3dc2a8671a4d8ddfba2ff9068a9a3ffb0fe99b1 b8d9f0e383c35afb6d69be7ff04f31e25c74dd5751f0e51290c18814fbb49ee1486649e64355c80e93a3d9278bd21229 8165babccd13033a3614c878be749dfa1087ecbeee8e95abcfffe3aa06695711122cb94477a4d55cffd2febf0c1173de a4c1bc84ecb9d995d1d21c2804adf25621676d60334bd359dac3a2ec5dc8de567aa2831c10147034025fb3e3afb33c4b b77307cab8e7cb21e4038493058fb6db9e2ec91dda9d7f96f25acbc90309daf7b6d8a205682143ee35d675e9800c3b08 aaf7466083cd1f325ba860efe3faf4cebe6a5eecf52c3e8375d72043a5cfc8e6cb4b40f8e48f97266e84f0d488e8badf 9264a05a3abc2a5b4958f957f3a486a5eb3ddd10ff57aa6943c9430d0cfa01d63b72695b1ade50ac1b302d312175e702 b3f9e4c589ad28b1eceed99dc9980fac832524cfcbe4a486dfeedb4b97c080e24bdb3967e9ca63d2240e77f9addfaefd b2c1e253a78e7179e5d67204422e0debfa09c231970b1bfb70f31a8d77c7f5059a095ca79d2e9830f12c4a8f88881516 81865a8a25913d1072cb5fd9505c73e0fde45e4c781ddd20fb0a7560d8b1cd5e1f63881c6efc05360e9204dfa6c3ce16 ab71c2ea7fa7853469a2236dedb344a19a6130dc96d5fd6d87d42d3fffda172557d203b7688ce0f86acd913ce362e6cd 8aa2051bc3926c7bd63565f3782e6f77da824cb3b22bb056aa1c5bccfa274c0d9e49a91df62d0e88876e2bd7776e44b9 b94e7074167745323d1d353efe7cfb71f40a390e0232354d5dfd041ef523ac8f118fb6dcc42bf16c796e3f61258f36f8 8210fcf01267300cb1ccf650679cf6e1ee46df24ae4be5364c5ff715332746c113d680c9a8be3f17cacaeb3a7ba226ce 905ac223568eedc5acd8b54e892be05a21abbb4083c5dbec919129f9d9ffa2c4661d78d43bf5656d8d7aafa06f89d647 a6e93da7e0c998e6ce2592d1aa87d12bf44e71bec12b825139d56682cdce8f0ba6dbfe9441a9989e10578479351a3d9d acde928a5e2df0d65de595288f2b81838155d5673013100a49b0cb0eb3d633237af1378148539e33ccd1b9a897f0fec3 a6e1a47e77f0114be6ae7acd2a51e6a9e38415cce7726373988153cdd5d4f86ef58f3309adc5681af4a159300ed4e5b5 ad2b6a0d72f454054cb0c2ebc42cd59ff2da7990526bd4c9886003ba63b1302a8343628b8fe3295d3a15aa85150e0969 b0bc3aea89428d7918c2ee0cc57f159fba134dad224d0e72d21a359ca75b08fbb4373542f57a6408352033e1769f72c6 aad0497525163b572f135fad23fdd8763631f11deeaf61dea5c423f784fe1449c866040f303555920dc25e39cdb2e9b4 8ce5d8310d2e17342bf881d517c9afc484d12e1f4b4b08ad026b023d98cba410cd9a7cc8e2c3c63456652a19278b6960 8d9d57dbb24d68b6152337872bd5d422198da773174ade94b633f7c7f27670ff91969579583532ae7d8fe662c6d8a3b0 855a1c2d83becb3f02a8f9a83519d1cb112102b61d4cdd396844b5206e606b3fefdbcc5aa8751da2b256d987d74d9506 90eb7e6f938651f733cf81fcd2e7e8f611b627f8d94d4ac17ac00de6c2b841e4f80cada07f4063a13ae87b4a7736ca28 8161459a21d55e7f5f1cecfc1595c7f468406a82080bfa46d7fb1af4b5ec0cd2064c2c851949483db2aa376e9df418e6 8344ccd322b2072479f8db2ab3e46df89f536408cba0596f1e4ec6c1957ff0c73f3840990f9028ae0f21c1e9a729d7df 929be2190ddd54a5afe98c3b77591d1eae0ab2c9816dc6fe47508d9863d58f1ea029d503938c8d9e387c5e80047d6f1e 856e3d1f701688c650c258fecd78139ce68e19de5198cf1cd7bb11eba9d0f1c5af958884f58df10e3f9a08d8843f3406 8490ae5221e27a45a37ca97d99a19a8867bcc026a94f08bdccfbb4b6fa09b83c96b37ec7e0fd6ee05f4ae6141b6b64a8 b02dbd4d647a05ac248fda13708bba0d6a9cd00cae5634c1938b4c0abbb3a1e4f00f47aa416dcd00ffcdf166330bff9a 9076164bb99ca7b1a98d1e11cb2f965f5c22866658e8259445589b80e3cb3119c8710ede18f396ba902696785619079c aacf016920936dae63778ad171386f996f65fe98e83cfcdd75e23774f189303e65cc8ad334a7a62f9230ed2c6b7f6fa4 a8031d46c7f2474789123469ef42e81c9c35eb245d38d8f4796bba406c02b57053f5ec554d45373ab437869a0b1af3f0 a4b76cd82dc1f305a0ee053e9a4212b67f5acc5e69962a8640d190a176b73fbc2b0644f896ff3927cd708d524668ed09 b00b029c74e6fdf7fb94df95ef1ccad025c452c19cddb5dccfb91efdcb8a9a1c17847cfa4486eae4f510e8a6c1f0791a 9455e5235f29a73e9f1a707a97ddb104c55b9d6a92cc9952600d49f0447d38ea073ee5cf0d13f7f55f12b4a5132f4b10 ae118847542ed1084d269e8f3b503d0b6571a2c077def116ad685dcca2fca3dcb3f86e3f244284bdcd5ae7ac968d08a5 8dcb4965cd57e8b89cd71d6fc700d66caa805bfd29ab71357961527a7894e082d49145c2614b670dcb231ab9050d0663 add6ed14f3183f4acc73feea19b22c9a330e431c674e5034924da31b69e8c02d79b570d12ef771a04215c4809e0f8a80 96ae7e110412ee87d0478fdbdbaab290eb0b6edd741bb864961845e87fd44bcbe630371060b8104d8bf17c41f2e3fca0 a20db17f384e9573ca0928af61affab6ff9dd244296b69b026d737f0c6cd28568846eca8dadf903ee0eecbb47368351d 937bfdf5feb0797863bc7c1be4dcc4f2423787952a3c77dfa3bfe7356f5dbcc4daebde976b84fc6bd97d5124fb8f85c9 a7050cc780445c124e46bba1acc0347ddcfa09a85b35a52cc5808bf412c859c0c680c0a82218f15a6daeefe73f0d0309 a9d9b93450e7630f1c018ea4e6a5ca4c19baa4b662eadfbe5c798fe798d8a3775ed1eb12bd96a458806b37ab82bdc10a a52a4d5639e718380915daaefad7de60764d2d795443a3db7aeab5e16a1b8faa9441a4ccc6e809d8f78b0ac13eef3409 8e6f72b6664a8433b032849b03af68f9376b3c16c0bc86842c43fc7bf31e40bc9fc105952d5c5780c4afa19d7b802caa a107ae72f037000c6ee14093de8e9f2c92aa5f89a0a20007f4126419e5cb982469c32187e51a820f94805c9fccd51365 9708218f9a984fe03abc4e699a4f3378a06530414a2e95e12ca657f031ef2e839c23fd83f96a4ba72f8203d54a1a1e82 b9129770f4c5fcac999e98c171d67e148abd145e0bf2a36848eb18783bb98dff2c5cef8b7407f2af188de1fae9571b1c 88cc9db8ff27eb583871eeeb517db83039b85404d735517c0c850bdfa99ae1b57fd24cf661ab60b4726878c17e047f37 a358c9aadc705a11722df49f90b17a2a6ba057b2e652246dc6131aaf23af66c1ca4ac0d5f11073a304f1a1b006bc0aa5 ac79f25af6364a013ba9b82175ccee143309832df8f9c3f62c193660253679284624e38196733fb2af733488ab1a556e 82338e3ed162274d41a1783f44ae53329610134e6c62565353fbcc81131e88ce9f8a729d01e59e6d73695a378315111b aa5ddcabf580fd43b6b0c3c8be45ffd26c9de8fa8d4546bb92d34f05469642b92a237d0806a1ad354f3046a4fcf14a92 b308d2c292052a8e17862c52710140ffafa0b3dbedd6a1b6334934b059fe03e49883529d6baf8b361c6e67b3fbf70100 96d870a15c833dddd8545b695139733d4a4c07d6206771a1524500c12607048731c49ec4ac26f5acc92dd9b974b2172c 8e99ee9ed51956d05faaf5038bffd48a2957917a76d9974a78df6c1ff3c5423c5d346778f55de07098b578ad623a390e a19052d0b4b89b26172c292bbf6fd73e7486e7fd3a63c7a501bbd5cf7244e8e8ce3c1113624086b7cdf1a7693fdad8b5 958957caf99dc4bb6d3c0bc4821be10e3a816bd0ba18094603b56d9d2d1383ccc3ee8bc36d2d0aea90c8a119d4457eb4 8482589af6c3fc4aa0a07db201d8c0d750dd21ae5446ff7a2f44decf5bff50965fd6338745d179c67ea54095ecd3add4 8a088cc12cf618761eaa93da12c9158b050c86f10cd9f865b451c69e076c7e5b5a023e2f91c2e1eed2b40746ca06a643 85e81101590597d7671f606bd1d7d6220c80d3c62e9f20423e734482c94547714a6ac0307e86847cce91de46503c6a8a b1bd39b481fc452d9abf0fcb73b48c501aaae1414c1c073499e079f719c4e034da1118da4ff5e0ce1c5a71d8af3f4279 942ae5f64ac7a5353e1deb2213f68aa39daa16bff63eb5c69fc8d9260e59178c0452227b982005f720a3c858542246c8 99fea18230e39df925f98e26ff03ab959cae7044d773de84647d105dfa75fd602b4f519c8e9d9f226ec0e0de0140e168 97b9841af4efd2bfd56b9e7cd2275bc1b4ff5606728f1f2b6e24630dbe44bc96f4f2132f7103bca6c37057fc792aeaab 94cdad044a6ab29e646ed30022c6f9a30d259f38043afcea0feceef0edc5f45297770a30718cbfec5ae7d6137f55fe08 a533a5efa74e67e429b736bb60f2ccab74d3919214351fe01f40a191e3ec321c61f54dd236f2d606c623ad556d9a8b63 b7bd0bb72cd537660e081f420545f50a6751bb4dd25fde25e8218cab2885dd81ffe3b888d608a396dfcb78d75ba03f3f b1479e7aa34594ec8a45a97611d377206597149ece991a8cef1399738e99c3fa124a40396a356ab2ea135550a9f6a89f b75570fc94b491aef11f70ef82aeb00b351c17d216770f9f3bd87f3b5ac90893d70f319b8e0d2450dc8e21b57e26df94 a5e3f3ab112530fe5c3b41167f7db5708e65479b765b941ce137d647adb4f03781f7821bb4de80c5dc282c6d2680a13d b9b9c81b4cac7aca7e7c7baac2369d763dd9846c9821536d7467b1a7ec2e2a87b22637ab8bbeddb61879a64d111aa345 b1e3ee2c4dd03a60b2991d116c372de18f18fe279f712829b61c904103a2bd66202083925bc816d07884982e52a03212 a13f0593791dbbd360b4f34af42d5cc275816a8db4b82503fe7c2ff6acc22ae4bd9581a1c8c236f682d5c4c02cc274cc 86ba8238d3ed490abcc3f9ecc541305876315fb71bca8aaf87538012daab019992753bf1e10f8670e33bff0d36db0bf0 b65fbb89fafb0e2a66fe547a60246d00b98fe2cb65db4922d9cef6668de7b2f4bb6c25970f1e112df06b4d1d953d3f34 abb2d413e6f9e3c5f582e6020f879104473a829380b96a28123eb2bdd41a7a195f769b6ac70b35ba52a9fee9d6a289c3 88ec764573e501c9d69098a11ea1ad20cdc171362f76eb215129cfcca43460140741ea06cee65a1f21b708afb6f9d5b0 a7aaec27246a3337911b0201f4c5b746e45780598004dac15d9d15e5682b4c688158adffdef7179abb654f686e4c6adc a1128589258f1fbfa33341604c3cb07f2a30c651086f90dce63ae48b4f01782e27c3829de5102f847cde140374567c58 aaf2b149c1ca9352c94cc201125452b1ed7ca7c361ed022d626899426cb2d4cc915d76c58fa58b3ad4a6284a9ae1bc45 aaf5c71b18b27cd8fe1a9028027f2293f0753d400481655c0d88b081f150d0292fb9bd3e6acabb343a6afb4afdb103b5 947c0257d1fb29ecc26c4dc5eab977ebb47d698b48f9357ce8ff2d2ed461c5725228cc354a285d2331a60d20de09ff67 b73e996fa30f581699052ed06054c474ebdf3ae662c4dc6f889e827b8b6263df67aeff7f2c7f2919df319a99bdfdceb1 b696355d3f742dd1bf5f6fbb8eee234e74653131278861bf5a76db85768f0988a73084e1ae03c2100644a1fa86a49688 b0abca296a8898ac5897f61c50402bd96b59a7932de61b6e3c073d880d39fc8e109998c9dba666b774415edddcff1997 b7abe07643a82a7cb409ee4177616e4f91ec1cf733699bf24dec90da0617fe3b52622edec6e12f54897c4b288278e4f3 8a3fae76993edbc81d7b47f049279f4dd5c408133436605d934dee0eadde187d03e6483409713db122a2a412cd631647 82eb8e48becfdf06b2d1b93bf072c35df210cf64ed6086267033ad219bf130c55ee60718f28a0e1cad7bc0a39d940260 a88f783e32944a82ea1ea4206e52c4bcf9962b4232e3c3b45bd72932ee1082527bf80864ce82497e5a8e40f2a60962d0 830cf6b1e99430ae93a3f26fbfb92c741c895b017924dcd9e418c3dc4a5b21105850a8dd2536fa052667e508b90738f2 990dce4c2c6f44bb6870328fba6aa2a26b0b8b2d57bfb24acf398b1edc0f3790665275f650884bd438d5403973469fa2 a2e5b6232d81c94bcb7fed782e2d00ff70fc86a3abddbe4332cb0544b4e109ae9639a180ae4c1f416752ed668d918420 b4cdf7c2b3753c8d96d92eb3d5fa984fef5d346a76dc5016552069e3f110356b82e9585b9c2f5313c76ffaecef3d6fd8 83b23b87f91d8d602bff3a4aa1ead39fcc04b26cf113a9da6d2bd08ba7ea827f10b69a699c16911605b0126a9132140f 8aae7a2d9daa8a2b14f9168fe82933b35587a3e9ebf0f9c37bf1f8aa015f18fb116b7fba85a25c0b5e9f4b91ba1d350b 80d1163675145cc1fab9203d5581e4cd2bed26ad49f077a7927dec88814e0bed7912e6bbe6507613b8e393d5ee3be9be 93ddeb77b6a4c62f69b11cf36646ed089dcaa491590450456a525faf5659d810323b3effa0b908000887c20ac6b12c80 9406360a2b105c44c45ba440055e40da5c41f64057e6b35a3786526869b853472e615e6beb957b62698a2e8a93608e13 93bfc435ab9183d11e9ad17dac977a5b7e518db720e79a99072ce7e1b8fcb13a738806f414df5a3caa3e0b8a6ce38625 8a12402c2509053500e8456d8b77470f1bbb9785dd7995ebbbe32fd7171406c7ce7bd89a96d0f41dbc6194e8f7442f42 aab901e35bf17e6422722c52a9da8b7062d065169bf446ef0cbf8d68167a8b92dab57320c1470fee1f4fc6100269c6e2 8cad277d9e2ba086378190d33f1116ba40071d2cb78d41012ec605c23f13009e187d094d785012b9c55038ec96324001 85511c72e2894e75075436a163418279f660c417e1d7792edce5f95f2a52024d1b5677e2e150bf4339ad064f70420c60 85549ca8dcbe49d16d4b3e2b8a30495f16c0de35711978ada1e2d88ad28e80872fca3fb02deb951b8bcb01b6555492e4 8d379ab35194fe5edf98045a088db240a643509ddc2794c9900aa6b50535476daa92fd2b0a3d3d638c2069e535cd783b b45cfebe529556b110392cb64059f4eb4d88aaf10f1000fdd986f7f140fdd878ce529c3c69dfd2c9d06f7b1e426e38f3 ac009efd11f0c4cdd07dd4283a8181420a2ba6a4155b32c2fed6b9f913d98e057d0f5f85e6af82efc19eb4e2a97a82df b2c2cdffa82f614e9cb5769b7c33c7d555e264e604e9b6138e19bcfc49284721180b0781ecbf321d7e60259174da9c3c 95789960f848797abbe1c66ef05d01d920228ca1f698130c7b1e6ca73bfda82cee672d30a9787688620554e8886554ee 98444018fa01b7273d3370eeb01adc8db902d5a69b9afc0aa9eadfeb43c4356863f19078d3c0d74e80f06ecf5a5223f4 87d20b058050542f497c6645de59b8310f6eeec53acbc084e38b85414c3ea3016da3da690853498bde1c14de1db6f391 a5c12b3a40e54bee82a315c503c1ce431309a862458030dde02376745ec1d6b9c1dbeea481ae6883425e9dae608e444e b9daa3bf33f0a2979785067dcece83250e7bf6deb75bb1dbbab4af9e95ddfb3d38c288cbef3f80519a8916a77a43b56c b682ec3118f71bde6c08f06ea53378ea404f8a1c4c273dd08989f2df39d6634f6463be1d172ac0e06f0fa19ac4a62366 a4f94fd51ecf9d2065177593970854d3dce745eebb2a6d49c573cbf64a586ae949ddfa60466aaef0c0afb22bd92e0b57 86cd5609efd570c51adbc606c1c63759c5f4f025fcbefab6bc3045b6ad2423628c68f5931ff56fdda985168ce993cc24 981192e31e62e45572f933e86cdd5b1d28b1790b255c491c79bd9bb4964359b0e5f94f2ae0e00ef7fe7891b5c3904932 9898f52b57472ebc7053f7bf7ab6695ce8df6213fc7f2d6f6ea68b5baad86ec1371a29304cae1baadf15083296958d27 b676c4a8a791ae00a2405a0c88b9544878749a7235d3a5a9f53a3f822e0c5c1b147a7f3f0fc228049dc46e87aa6b6368 9976e10beff544e5c1645c81a807739eff90449df58ffdd8d1aa45dd50b4c62f9370538b9855a00dd596480f38ebe7a5 a0e91404894187ec23c16d39d647ada912a2c4febfd050a1ea433c4bfdc1568b4e97a78a89ba643aca3e2782033c3c58 91a6ea9a80476ed137eb81558ff1d55b8581663cccd41db4fc286876226b6515fd38661557419e1e46b6a3bc9cda3741 b9e8a1e23c60335a37a16f8085f80178a17d5e055d87ffe8cf63c532af923e5a5a2d76cf078164fb577996683796caa6 ad8e151d87a37e8df438d0a6a7c02c3f511143efb93fde8aef334d218cb25932baf9e97c2f36c633620a024a5626af3d 978f942f210e8a482015e6fdc35a4c967c67b66e6e2a17a05cc7a0f2163aed227b775d4352b0c3cca6cbf4bd5bafaf75 b5e2e3d8b2e871c07f5899e108e133f87479959b80cb8a103fbecde00ccdbfbd997540eef33079c5cc14b1c00c009fd1 88a164b3fefd36857f429ab10002243b053f5d386466dbb9e5135ed3c72dd369a5a25e5e2aaa11f25488535e044e2f12 a66091c0db4e7cf05a089ec2b9ff74744354d0196968201f5e201699144b52bb13b4e68e12502727163e6db96e3565f2 8e65aff8e37240461b7374c20bfd1d58b73a525c28994a98f723daed9486130b3189f8efe5c5efcd7f5390cc366038da 8b37c21dd7304c3aa366959ba8c77ea8b22164a67e136808b6f8e48604297f7429a6c6ecf67b1d09b8b7ec083eacd7e0 b689b1277ad050f53da91a702516a06d7406ff33a4714ea859b3b2b69f8d0aa8f983c7e039b19c0759a3815d841fa409 b17f7a0a182ed4937f88489e4c4e6163dcf49fd2ea4d9efbba8126c743bea951cd769752acd02e921774dc8ebcfae33b 8b7fab4f90be825ac5d782a438e55c0a86be1c314a5dbc3cc6ed60760a8a94ef296391f1f6363652200cce4c188dae67 ab8410c4eaa2bb43b0dd271aa2836061bc95cb600b0be331dada76ddb46711ff7a4ad8c466cc1078b9f9131f0dc9d879 9194bd7b3cc218624459d51c4d6dbc13da5d3de313448f8175650fa4cfab7cc4afcda5427b6676c3c13897dc638b401e 980f61a0f01349acd8fc9fdc88fc2c5813610c07eecb6ab14af0845a980792a60dadf13bb4437b0169ae3eff8f5984ce b783bee24acea9c99d16434195c6940cf01fc2db135e21f16acae45a509eca3af6b9232a8aa3a86f9715c5f6a85cb1c3 a3079931c4b90966d1faa948db847741878b5828bc60325f5ebe554dcab4adcc19ee8bce645e48a8f4a9413bb3c6a093 801f61ac9318f6e033a99071a46ae06ed249394638c19720831fff850226363a4ae8486dd00967746298ee9f1d65462f b34dbbed4f3bb91f28285c40f64ce60c691737cc2b2d2be5c7d0210611cd58341bb5bda51bb642d3ee2d80882e642a13 8750af19abfb915e63c81542b13d84526a0c809179bbcc1cd8a52b29f3aba3ae0f7cf6f4f01790bf64ef7db01d8ee887 a6ea10000eb2dd4efc242ac95bc3b3873cdd882fbeb7c9538c87e3143a263ca3a2e192b2159316a625cfb5fb0b6cdcb3 aa40ca54bc758a6c64cb932924917581062e088b3ad43976b28f2e11d8a7dea73f1fb50aeaa0e70182bb2dc07d805bb9 a4779dfd25b5ec9d75dfb54a4bb030364899a5e75c1492403acb19f2adc782c7ac4daeb66d2f5aeb74135afe9f318e3f b4551e2805d63ca453f4f38b1921ac87ff687e1d70575ad38f3469d6f0608ef76b7b1b98ae1e6b1e7d928773aaab6e3b 99490ee722f96aad2743b08dd37bfeb75a8c59efaee4c9b694eaa05eb8a6bb23861a4480544c7617d04d23fd5e2543b4 8a7050d964d295fff98ae30d77ce730a055719313457e773fcce94c4d71a9b7cf63db67e54a8aab20fb1335b0130b5d5 903144e6bbee0a4fec17ff80fef0d2103981140c3d41776cfb184ced17f480a687dd093f6b538584327e6142812e3cd5 a5b30f7c6939bdc24a84ae784add927fec798b5a5ee3dd156c652df020728dd6d43898be364cf5ee181725fbcffc0964 b43d97ec2bc66af92d921a5c5c20a03ef2be2bc2c9b345f46d8287409fcbfd88ebc49d4509d64468222cd1d2021bf236 82dc23c7f5086c9ac6b4566359bfb830d203544b0d8332a210775670f899cd9ff48b94bfeba40040c25664ebdd5cfad8 9294cd017fea581dabb73dcc8c619904d7e022b664b0a8502c9d30f3807668af279948e7e41030ae296d492225297e95 8d6c9dc636c8e884f9a4299e5cff06d044ebc94ad783a4b71788347ea4a336d4d048b8a9ecabae789e8fcdc459723dfb 801a80bc49e882ec81b04e37407713f033f7bdac79252dfa3dc8c5bd0229fcbd4019890e402cf843b9378df08f72ab84 b4313ca32569d973900f6196363c0b280ddfa1b47c88d019e5f399b805b444a777950fc21ae198fc23ece52674b94abf 96f06056fd255fdabf78986e315e7c4fdf5495cf850536b7976baa97a994cc6a99c34609c33a0f2facba5e6f1026dce6 983ed80220a5545ffd70ef5e6ac10217d82ec9cd8f9a27ee77a5ff4074092308c0e6396fc4e9932a77ddd474e61f8b55 872a059aa630af73c4abbd076e8b333a973ffc5bdecf5dcc0600b00162184213cb19d4f601795030033beb808d5810ce b040f318d9d3b8833da854014a44296dbd6762dd17cab13f91987256c54353b7f0800547cb645a7cc231997454209fdd a8c4731a555308e8ce0b8325eb7a4cbf6113d07e9f41932df04480b72628d313b941c7055f1cc2ac45c7353b56e96ca9 8c24031440b77637e045a52e5ea3f488926ab0b426148975edf066c40a4581beecc1bfb18fc4cf5f9f96dc6681b4bd28 b39254b475abf342f301298feaa17a4b3051f30ea23a18acf59e003e2704ac96fe40691f1da387913bdf7aee6389f9a8 a1dbf938b604ccc6d60881cc71f38df568aa02752aa44d123514154017503f6c1c335ae43e359f1487bc8934073cd9c1 8d52aa1be9f429ece0580498d8fe9fef46d4a11f49436a82b8927f9503dacc41245907f126594c1cd30701286f8c092c b826f396486942c0326d16f30a01b00a682c30a75553dc6ac34fd5b3e96b13c33b94738f522eebaffb59ff8c571c76e9 aa89f51cbf6e6c3e2aa2806187b69ab3361c84e89f393f3ed284fe84db46fc3944aa44f8928e3964f9c1a1ec27048f68 a254df0efa4203fb92b42a1cd81ca955922e14bf408262c8f7cb7dc703da0ca2c71556bd2d05b22ce9a90ad77309833d 93263c507e4d5f4e5df88e85b3d85c46ea729fb542a718b196333e2d9fb8a2e62dc1347cf146466a54ba12d200ef09d9 922e3c4a84246d89a07aa3e90f02e04b2cea9bebc0e68b742156f702aed31b28c6dfa7ac936ea2fc2e029adf68361f98 9a00628eeeda4ccbed3ef7834149aec4c77aac1a14bc2491ba5d1a4a2c5d29afb82ceaa5aac1c5ce1e42cdcaf53e30ba ab3a88df36d703920f6648a295a70ffa5316c96044f39ff132937bfda768937cb6a479e9ba4a4e66b377f3a9996a88c4 966b11526ab099d550ab33c6a9667e5cfdedf255da17a80a519d09acd78d2ea24ec18bd1ea7d8d63cf0a408f1c1fe0b3 b5c21b9817dc32f3df9d9988aa3560e1e840d586d01cd596bc0f850ab416b6013cbf7dbfd05ac981f26014c74bd2d2b2 9040abef5e2523e7f139c9f744a64b98fea3a57952059ffe4d5ed77fa87068203c090ef4e7f52c88fb82ea8a6fdca33e a0dcdaeb7d3f5d30d49c004c5f478818c470187f4b0b4856812dcd1b3a86de58a99acb8ceb44c6b80c3060cf967c43a4 b5f4be9a69e4a6719ea91104820df8623b6d1073e8ee4168de10a7e49c8babea772bcbc6b0908185e98d607e49cd3609 8634020a5a78650015763c06121c606d2dd7b324aa17387910513dd6480fb797df541fc15b70d269b2794ad190595084 9504d1d0fb31ff1926c89040c04d51fd1f5cddf9d7ca3d036e7fd17e7a0f767ef33cee1d8bf7e17e2bc40949e7630417 812c72846ef6d692cf11d8f8c3de8fa78cc287303315114492667b19c702cd24d462020f1276895df26e937c38f361f8 8c97aa5e9ef2aa9a1435ef9ddfe62e850f0360864ed5fb82bf9fef4ef04d8fb4f827dc078bc911ee275e4501edd6617c ac5f7af5e23c8e429aaa6b6825129922b59d25b4608f07b65f21388a9ac3aa89096712f320afe6d56e44e1f0d51a4eb9 a8c84d9a8593a0cb5be1e450960f59878a4e6b70da54a7613dfc25911b7cc9e6d789d39401b0a0d6471ab9dcdc707976 8c9d5fd89611392c0f085ffa4fa642a181f0b9b23593deb5e10fdd1642722ca75ef34a037e88a8d03f2888fe7461f27c 8c74b05f91fb95c85e7bd41f6d9a1e41e667e68f3d19b325c1f25df1767019919edab89b92af237896cbc4e6d6dc1854 a3caecb91640821f0b2c4981b23f2069df8d2b98ce026c1538bc096b292f5f956a5d52c1c8d6a8165a1608083ba6494b 8ae8e0c36f8b79a69176ff29855df45d0fcd9e4d1dbaed8899f8fcdece676e418ec034a6c161e2a894f0c834aaecbfd1 b88d18c67dc3b1b6ed60ee437c441c1ed14ecddebccf43683605716f30058b1aa4ba05ff10cd8171ee97d8f58d70c094 94f43d84dcdfd9cd19115c7d8e9c1e856828eafbfdec93b876cf0007e317e30b2ad951dbabc186aa6ef90fdee4d91990 b44e4723f41fc1d5b0057f371e3381ae02566590b3f964b6eb07b2104f66ff78410c407235fa98d04f635694f3baca09 addd8390173d29ca0811534d389253831fed75fed135398617836b6e70767269eacb1560b39a58f02042ca3b97fe59c4 80bdbdacc0c358c7ea52aeacdc5f9ceb6928bcf6e7dee7c17d8ae3bf7c2372aa7a0372363888968fc0921aaf4776d5d0 a486e2b6f04f403f9e609d69dfb3cfb992af56ecad1683271df3e3faa3b86638b81e73b39978fb829ee7133d72901f2d a19472da57457e10c6a6307895393ddaec8f523760d66937fe26a025817319e234eaf69756ffdf1b84c81733424a96d7 ad6a195397cbc2d75171f5e82090441eed60bd1ba42c39ef565b8b5a8281b04400678625b1dc46d617f694a7652a8e5d 8f98e721c06cec432e2221f2e1b06bb1469d916a8d88d6973acf68d1e003441d00390dafcead8ecdbf9eae4509baf5aa 91d62a0f9d13c59adfe1376ed6d057eae244d13c6b3d99be49a49e0075cf20f4085cf127774644ac93615be9ac9e5db6 af45dec199245e2b326a0d79c4899ed44b1c0219db42602a4a6184ace0ff831a3276297af28f92e8b008ba412318e33e 8754bde54e8d2d169e6a7d6f0eae6097bc0461c395192bd00dd6f105677ea56ab384c02553ea5eeac0a65adcb0df77ee b676afd2f5afc37a314c943d496e31b4885efcbcc2061036e370a74cfde5642bb035622d78d693bfc3136fc036c7edb4 aab6ffe6cc234397cf1822e02912bc282dfb314e92fb5a9e10d0c34ee9b5856d4b76e166bc2bb6fcdd66aabea35ec4ef ada6e62f90ee6b852ec4b72b22367acac2896f0df2c105beda27096583ddbedddc710d171330569f111c6e44a5b57ae7 802139dd15241a6de663d9b810121bdd9cf11f7f8c8ca6de63f4f8e731409e40d1fd3558b4f619ed42ee54929dff1c7e ad8e70531cec21b4e6f55be1751c2d025bd2d7d8158269b054cfe57fa29252d052ce4478ec7db6ec705789e2118d63b3 a8e4a4271769480e1b33a28c87a150ecc0b48bfe8a15ae04152197881de4ce4b03453aefe574842424edbbe4173e1a3a b98c65726296610cef16c5b58da5491acd33bd5c5c5af4d934a9840649ef85730fbce8018dee09ded14e278009ed094a 8e213a7861223287b860f040e5caaa563daa0b681e4e09ec79ad00cc459238e70bbeaf7486bbe182fc12650700034ec5 a2879f9e1a556cf89b9b5b3bd8646a8cce6b60bcbc8095df44637f66a2da5858eee2dc9091475a8f64bb5aff849389cd 8a17cdb4077b9b0bcf28b93294ac5ae4c8bba8839fce0f1012b53187ac008f9858b02925fbfc421f1123afcdbd8b7753 86fd9c11528aa43946e4415ff64a3ca6409ee6f807368c68997b18605da65e415ccd85ad913820d450cb386593de666d 8ed55923b963c3d85a91aca11c40ff9c6c7f1e2b9bc199d1a270e5fb16aa62dec0136e97866145ae9d58a493e8b1cbbb ae32af5b5d418668ae123c639b149e5eed602404e8516da4a61db944b537a3620545e8e3d38cf10cdaea980ab2f80973 95cb8d9e9d6762d78dde0ad73869ffaca904a7d763a378b8cc11a7933d3e7d1c8aec4271a079b1b00f8887ee5b1ea21f b5ea20b42a3ca247f00ab5328c05f0cf194973d5f7271c66c41c5055b1ffdca136be179709e0c1de209fbe07b9820bf3 98682f7cce471c92a8d6d15fee4ddf4d43dd97c3e3811d2913618ecacc6440b737717c07736ae4558c910e11ee98104e a67da2c7cbba48e929ca4e4b9a6299fe01ef79eff8cc5cd3fdbdc0721a68130e4079f30ae151a573a7dcca8ecf2e684e a9981c9f9dcbb3b0f6996f664fb2acd7573189f203be37b2b714662aa273551396abfb1f612ccde4e4c8127a050dbe4b 92d55eff8da600f886da9bf68e8eecf482faa4b268f3f286b3b3e5cc91b19604081498d4905b201bb4ec68e32b5591d9 963e3f1728de9d719c86d390f3eb9c3f99d1928347fab0abf10dbb37d76b59ddb64d4734c977863a6cd03ffece5ca895 93480e2de83c921056b6d8628ac37cd5ef7555ba43b0308fc13386cb0515d42c12ecd06057137aa71a7931beaf90b9ce 8feae57ff0e6a162cc81c99f45c6187d268fc0bee8c2bffc92142ef76c253d201f0e932943cf2fa312982b281ce1066b 8f8f4bd4200fb87afcd743274480220d77571928000d4197410dbb75439d368df6a06d941a6152206371d2ca9cac99e4 8ee7f11e79af4478e0a70eb424fe8078237ad99ba6d7e6bf1a8d5e44e40abd22d404bd39b718ad6fdf4c6601f2a47665 a98acfcec612b574943195b9ba95bebcc9c0b945c9f6b3e8760b2a4635909246a9d73b0b095c27b4ecb3339704e389b7 b520efd19f65e81dc285031ea3593f8c5dad793e4426beb9196ab46e45346f265fd71e50adb0da657977c60ed5724128 a3d9d0b7415280ce4dfa2429d47b2b8e37604a5157280a72cc81d541ffe44612dbb3ef7d03693fc42a569169d5842dc3 8c29e2d0b33801f6d9a9c065a76c5cad1fb0a001506b970307e21765ee97c732a4cbf1d7c1b72d95e0ad340b3b075224 839e21f292892a6eb596b9b1e9c4bd7c22a6fe71d3d04487c77840028d48392c5cbe73140a4e742338e0c8475cd0c1ad 8bea5c68e7743998619185bb662e958f1b4d3ca81019d84ac43c88911aab3abe4ee9bcc73cb95aa3ae87c0138801bde3 b8f262d21a94604049e008ce03dc857848168e1efca4522acb0ccc827ffb37f545e1947843a356563a76bc6489605b66 a7bd0842b0bb38d9943b82aa883f36f4eb8a6e8a7790d4f87faf306608f51d250a19b73984f1156cef5dd2581664614b a993e649bd953627a88a2539dac3a12ec7f37a4c65b01425d9d34edf7ee10a71aa98f65c9e013107f824faf8aee041a9 8e07eced75c67cb4d2ec01857f6ac1408482e6b31cb2faa249e8cf99f180575587df530c7782a7539b5221121ef48aa0 b2f4578f26c05ecb9e2669ca744eb19d4f737321ac7d04fafd18beb7866e0fec9dd063953ae1f077b44b9c6f54db1279 b6b3788a6c7bcaf467d19daf6ab884d549aa866970c05a9181f544ff190d043192c84fe437a75a30b78b425461cca062 a270684903c61544b85a7041e81f65e787e1c1e23e57538fa8a69836bed0ca1673861dd29f743a1280f2f38eddd3aa83 a9c2397c4773dcad2821266dadfd2401d013d9f35de6744f2ec201f3507700adb1e6ec4f5a453be4764da8bf68543f26 83a3025ed6fd5df9d98be32a74e10a0d9728b560942d33ba028536fb148fc34ae87e92be2df3e420a8dfec08da495982 90dc70c183a90bab988b4a85b7b921c8070af0e5f220364fe11afa0722990b2c971e1e98eef62d3287fedfd9411f1df7 82d940937a6c636224d04f8e2536f93dcf20dc97a5f188875ad76c21b804aef9af10839419b61143c1f88a695959a6b4 8017f9473ce49d498d6f168137e77e62fe553e5a51e75b519cf2cbd1ab9afdafad80fd5e6fd0860e640b0d78ca8ed947 80573a0ec049fe1f7b3013b2839e145cd87e07c0e43826a29ef8c92516f9a30896c2ffcf3ed77ed22a6cf3101b1789d5 953349abd2559f9824db07cec857ad54f1a05018f3076425f8dbae37f8d92a46af2c04ab7c8ec0250449541187696e98 ab7bd2c4f05ee9a9f252c4e16a20993a12c535c3809d124bae24642616521a9768d3f19eceaf8524583f47ae1f527684 9883b77ee834ee0112ca2f366d2a6fc213e0cf454e061438c2901a5ba35b7378f64da8adf6a476eb1562991ef5b4a5bc 89291811db308637356dbf7ed22cf07bfce33eb977734ee346e8c15a231b35d8b4443574f3fa97a40867b3e23b0bbfa4 93d753849d7d9588d39e38217500b123a6b628a873876612d9f98b5d611f52c89c573432d2176752b5d1cc2d94899b8b a45add3c4844db3b7a237295fc85fddc788ac1ec395a0524d2fc90a539571a247146aea4aa10eec30a95e9617c85b98d 90f94578842db7a4de672da1e483858ece5e466c73c12f725a0fc71f42ff880c9447a33fa9096839bee817536f2591e2 b2c1b6fb031bb30460f157356562b44b4de096a0a112eab4fb3cc500aad38bc770da1fc2e73caf687a0da5e8537049c0 afb15e15fd930929c0e3c66482068a5afe0c7b7f82e216a76c5eb1113625bfa0b045a52259d472284cfbaf4796c71456 ad222a9a3d907713418c151b8793d5e37634354322068f8206b9d0da1a3f53b0004193713d23ec35990639a1b6c2e075 b44a128dce97e8c4b178cdbca0a5c1b3f6e164490fac0fd68dbfe0aafa89920bb4ea420a8527e06c80dd19c2f135e3ef 8596e993ef18b8d94e9c42a90cb7060affc586b8e9b526820d25124285de5590134e2e86592e9dc4dd45ccf5d578fa60 b71bb0ad138141ed506b2253e84110d2db97cc2d24a3fd0d096b0022d9f38f87aa74e2f505074632d64e90bcc491aa30 84841eafd357309de47b92ca5ec163dec094a2e5271bc65898c31932e0160bee165e4decb23af339cfe09c83e1cc5441 8a2915ee39a6fd4a240b98533d7690ef1773ce578ed1fb05ed414ebe36f7ef289fa46f41768df57190438c356331e329 90bb337165386f1990cbd8ed2e8321ef21bc18125b015b4da0c37e5fcc446b26005379ee4fad8ce9348ceb4ab49e82e2 b707b50ea2ab05c6d183671587f25fe29eef23fe569d731459a1ac111a0b83a2cd65b88242876b34aeead3b05a15d745 ae1f159f79b7996315c4f9acce7e21a6ed59d4ef76331196fc86911fda3035edd5c11d568b105175a36c948d0263b382 922bc525bace05e5dff6b5cabde5469ddd2c1c601f7131abc04ecefdd35095e6ac015b1aec3c3b25c5dee8d139baf60d a7b060405b2740f82db64683187b1bb89e5f40c8438663c7cbc8ef2513929fe5f92625667a7f2f599a72a96b1fc8f08a b9dfe94a08651db5efefbb813269bce80d814e3089b80c0654491e438d820bf521f8a4a4477909344ba88f7683eebb43 841817a9729465743576950b6e8eea32ebf39cca99ace86c4792f9f35926e2d6830c52854a3b2eaeb61694e6845008bd 934128034bde8fc7b93b952aa56e0ed28b36cfa04cfa1f0d5b38266dd40beedff5e0bab86e4717b0fb56c56be2eae26b aee9d64caf28596308782cd8f3cf819506daf3378f86157ff775e618596411adf94efd0e9542787ca942066f02cbd332 85871184db314411a49575fee088c52ed5dba4e916ee001ec24d90898a0154d9790a06aa8a707ca7a8b986c0293b8d89 8d3d87edcc0187a099c97b581a598d357a41ac152303bb27c849eb78e72e15cb97cf9a0468fc36f245c3e152c76bb7dd 900475d165dec18b99eb7b5f9e9ad1d2d4f632e55fdcc4c5ecd7775fed462990e6aaafe9c669f40508f9b15f00bda31f a25b5954edd57e7811a0d18532043d975c7b44b80f65cd630935d7b16ada05f30fe2b7be7ae8a2f54c25957faf3f1950 a089019afa3a7a15f7e7874e73b6773c0a824e6d3379b4c928e173321fb165ad979a6be004d394c28d19d410b2655d3e b28f46797dee0c538bd3de815df641a0ef718ad3e52b2764aec380d6905b38b50ad6f60d0f68e096ca39960ba7734355 b0ac155d3d05851b04104e6b459f1a68e9e155437c92421a7c0e4dd511ef89cf71dfa3cc920769492ee283a65ebf029e 813c69a810745580d43d5b5480f0ba81000fbef0071e6b655c7346bef5ed774e9214a7816d40eb1774a5bd033767a046 b176345ca75c64f10ec33daa0dcf1f282b66a862fcd3d8d66c913f9a02db4c9d283dadc02eff13aaab94bc932a42234e 92560f67e5b995db4a489bb86ee78b4aee0800143b3535ad557a53e9e08716bd0202d9f5714722c2a5e8310046e3f5b3 8adb427bad9cc15fc6c457a96a6750dda8c46d859c5f69bf0e7ab8fc0964430b33967fd47cf0675b6ba1757f91255e6e b120f723b80389a025b2daa891b140b3d7b8d520ae2a6a313f6e3d365a217af73292dcb249dca1f414ec05e865e3cdc7 a61a5d261a8dfe5996c42ea0a5ae703a2adcfda80e86837074d868eee16f87d38da19596c48b55dbd7a7cbec1a9b4996 99dc921eacc6bb867c5825ad4c83bc4af9dd78a18b3d0e1a60ad493e3805b8fb9b7922b577da1adb3d805edfc128d51d 85455fa165a07282aaab4a5bfb88027f47b9532e4af8195c048515f88b0db7e80f42e7a385fd4944faaa7f2a6544ad17 96dff2d1c8a879d443fe576d46bcceaf5f4551d2e8aad9c1a30883637c91090de99ad5eec228eb5febf93911502d3cbb a87eb7f439377fb26c6bfe779701f4aea78dd7980b452a386afec62905e75217a1996c5234853432a62ef8bab21c31c3 b598278293823e9ccb638232a799211173b906444376337fdf044d0227d28fcc4c5867e6ecb3200e59ca0b139e71cac9 aa6fe147edc95027654d68140f428ec53cede3552c5f49c09d18bc6f6ae8c739a63042eb7291d14d717a4e1f0778abcb ae8ee18913d328b2fba71efe65526d3ee9c81beda53cf776baec4019ea30212010758cbb5dc85ed6620ce04b189f01f2 ae9fb686777e88dffdd42805fe4114aa0da1b350d92a27ff3f8a817fb25af1fcfc9a06155affe0273bf13caad16a5351 95d372ba3a2ee38371538f34aae91b4844488e273f70c02f1992370f89fc2343eff95692d52ce9f21206abbee4959958 b15260376f0a34ca2827ff53acd7eaaef94c9acc2f244b36500423069cb1cdaa57ac8dd74adb5b53d0fd4265fcbb28ea b0ffce6a8059537ef6affdbbc300547ef86e00109289239b0c6930456c562b4ed97f2e523963af17736dd71b46c44ac7 b5499a1277d34f9892f7579731ff53f423f2ffffa9ea43a6e929df8c525e301396249a2324818a6a03daa0e71fcd47b3 98dbfb8e97a377a25605a7665d4d53e66146204d8953afda661ae506858c5cd77ff7f21f5f10232e06dbc37378638948 84177e27e6da0e900c51f17077f5991e0e61bff00ca62c1623e627c5aea1b743f86eef6d55b13219a1947515150bade6 b50407bb5c61b057ab8935df94fd43ca04870015705b4f30ceac85c1035db0eb8293babc3d40e513b6fb6792ecbc27a9 988699a16917514e37f41ab5c24f4835ed8a2ca85d99972646fcc47c7e2a83c2816011144a8968a119657c4cda78d517 920c43fdcb738239ad542cb6504ab34498bce892311c781971d7db4dec70e288676de4d8697024b108cfa8757fa74035 aaa106329aac882e8d46b523f126a86d3cee2d888035ce65c0be4eaae3e92fd862f6ac2da458a835539cccafaba9e626 96e4c1562d14b7556f3d3e8a1b34ea4addc5a8170e1df541dc344728bcb74cd1630eb7ba4c70e9c68fd23c5c5d5a729b a616ac5016d4e68e03074273cd3df9693ee0ce3458e8758b117a5c1bc6306dd2c7fad96b1bb37219c57ac62c78ad7a3e 8db7d9b20abfb1445babd484ae9e38ff9153ac8492230d7591e14e3fca7388a5ca6ef7d92ed445c8943cf5263e4a6ad7 88464134221aa7134878eb10928f31c8bd752ab68c27c9061c1de3f145c85731a4b76acdc7e939b399b6e497f9e6c136 a5f7c794f70b7c191c835dded21d442b6514bab5e4d19b56f630b6a2f1a84a1d69102d7a0dcca256aab5882d3f30f3ca b96b6f98b6817b5fa6b1b1044e2411bdf08bf3ffaa9f38915d59e1d2b9bed8b3d645eee322ee611102ce308be19dbc15 92c26ade2e57257f498ac4ff0672d60b7ea26dad3eb39ed9a265162ccd205c36b882dba3689758c675f29e20836b62d9 8379a0299e75774930577071d258e89e471951642b98e5e664c148af584d80df4caa4bd370174dae258848c306f44be5 a0e53beda02bd82bf3d24bd1b65b656238128e734b6c7a65e3e45d3658d934f909c86ca4c3f2d19e0ac3c7aae58b342e 8ca5ceaeaf139188afd48f9bf034d8baf77bbf9669791c7e56ebf783394d7fcdf2a25fa4bdfcddfde649aa0dc67ccccd a8060e6448844e9db4e9fb4da1c04bcf88fda4542def5d223f62c161490cf1408a85b7c484341929c0f9ce2a1d63e84b af6e1a5ecf50b754bb9eb2723096c9e9a8e82c29e9dcaa8856ab70074430534c5395534e1c0ed9ce98f4b84d4082fa67 81c8dbbef98f1b561e531683d5ae0f9b27b7f45dc6b2f6d61119ca0d559bf4ceb676d320afc5aba1811eeef7547a59d8 85b46cd64d605c7090a2faf1a2aadf22403b3692b3de1d83e38b2de0108d90ac56be35b0dca92c7a41c4b179a3567268 8dd3cc3062ddbe17fd962c2452c2968c73739608f007ad81fa1788931c0e0dda65032f344a12249d743852eb1a6d52a9 8630f1707aea9c90937b915f1f3d9d7ba6bda6d7fdef7a40877a40c1ee52471fd888f84c2b2c30b125451b2834f90d3b b4a747e0bd4e1e0357861184dacec6714b2b7e4ee52fa227724369334cf54861d2f61724a4666dae249aa967d8e3972f a72de682e6f9490b808d58f34a0d67f25db393c6941f9342a375de9ca560e4c5825c83797d7df6ed812b71a25e582fff 8d5ea7d5c01f1f41fffe282a334262cc4c31b5dcf31f42cc31d6c8e37c9bd2f1620a45519dab71e108fe21211c275b6c 8ccdc7e3642c2894acbf9367f3e99c85963cea46dc5473d175339a2391be57dd8815feacadec766e13645971213b9eb8 858e9b5fc8c13b651ff8eb92324bdda281db4cf39f7e7bd0472908b3e50b761fa06687f3d46f4047643029dc3e0ceeaa ae20d36c70cd754128c07cbc18dcb8d58b17d7e83416e84964b71ccff9701f63d93b2b44ec3fddc13bbe42ebdd66221e 860dbf7013da7709e24b491de198cb2fa2ffd49a392a7714ad2ab69a656ca23f6eafa90d6fdc2aa04a70f2c056af2703 8f809e5119429840cb464ed0a1428762ba5e177a16c92581679d7a63f59e510fdc651c6cc84d11e3f663834fcafeafdd 8d8a8dce82c3c8ea7d1cb771865c618d1e3da2348e5d216c4cbbd0ac541107e19b8f8c826220ca631d6f0a329215a8d6 86e3115c895ae965b819e9161511540445e887815502562930cedc040b162ecb1e8bdc1b6705f74d52bf3e927bc6b057 b9833b81a14115865ca48c9c6a3855f985228e04cbc285f59bf163dca5e966d69579ea4dba530b1e53f20bd4dccdc919 a71f5801838a6dbb162aa6f0be7beea56fadac1a4bcd8113a0a74ab14fc470a03775908c76822d64eb52a79b35530c05 a77ab73ae94b6d3378884f57eee400eff4a2969aa26e76281f577a61257347de704794761ea1465dd22a6cc6304fbc4a acd1c5df3c487c04cf27f002e81f2348a0119349b3691012526a7b0d3bf911cdd3accbc9883112ed2ba852145e57fe68 8a28515a48832ac9eaf8a3fb3ad0829c46c944b4cb28acbcdbca1d0d4c3c623a36cda53a29291b8f2e0ea8ee056b1dee 846bafca11a7f45b674237359b2966b7bf5161916a18cf69f3ec42c855792d967d3bf3f3799b72d008766206bb7a1aa3 b24b341675b1db9a72c3405bbe4a95ccdfd18fa96f876ec946ccb5108f73e8816019998218a036b005ef9a458e75aeb3 b99c267b4a09193f3448bc8c323e91ef5b97e23aeff227033fe5f00e19bab5583f6e5fcb472ec84f12b13a54d5c0e286 a088aa478dbe45973b04ecafbcbd7ee85c9a77f594046545cdb83697a0c2b01b22b1af0b97dd75d387bb889e17f17aa7 a0c6b0cdff2d69964134a014e36c3709d9e63f6463c5cd7b01b6f0be673731b202d577539d89dd57a888326da1df95af b4e6dc4ef11b2b41794ece70a8968e56705199d183366759568b6fa845d2cae127486e926b5b27ae9118bb21d1682c1d a007804353f174098f02540a57e96227232444d5ae0a24232c244647148b6c049848cbd2b50d0a25af3ca9164bfff8ee 873fb034cc39c9cee553ece908fbf315f62efbc412b9afdde6a1889326b7f6f813e050b0601ba9921688e958cb75942e b5676c90f0106c40d8683299e59d564f505ec990230cb076caef3ae33f2021e6aa5c9b27bb8fead05fc076df034c28f5 b5a67fc4c5539ad1ddf946a063110f824f7f08d2e4d30762c9d437748c96c9147a88efc22260573803ab545c18b108f2 817ff2b748a949973a91b69b0ec38efbd945aeb26a176d19f0fb76e261c7526c759e6f5516f9ed34de6eb1ac7838c9cb 99b76bda3526a5d841e059010fdb14eb2fa035a7d10463373a062a98c3c1a123e2da0848421dd7546d776438fd05e304 aa0d363270f90d56bbee7ea577b0c358532bda36d9247af6c57d000044a97ba41e35bb0db438f4c94551c6350e4e0674 acdae205d05f54b9544be96c9032350511895ccf413dbbc56d1f03053185df22a6d5b7ffcc3fbe96c3e2ce898ccfa73e b091c220a1de18d384f50dd071dca4648ca4e708162c52a60e2cedc0188e77c54639f75bce9a468a64b2549119c07ded 878676133e5c700b1d4844564fa92a9930badb5293d882aa25ee6721a9f2cfab02088c31d62cf1342ae3edaea99a1ea0 9756d0793e6aba3b4dff48100bb49a5ec08ec733f966cb438379b91caf52fc2a5930830ec3f49aa15a02c82c1914dc7a 9722f760184d3b2d67cb2cea7fa41b1ff920a63446006bd98c6347c03d224d2d8328fa20ccd057690093d284b9a80360 b5a68489de4f253715a67f0879437bfe8f4dfc4e655ca344848980e6153b1d728acde028bb66fd626fa72eedd46ff683 a8cfc900b34835d9fd3add08044636f69614eff9ae929eac616c39bd760fd275ee89bf24b0f275dd77a66e54fd6b94e5 89967479bebf70b2893cad993bf7236a9efe4042d4408022fdbb47788fabedcec27d3bba99db778fcde41e43887e45af 889235938fcec60275c2cf0f19d73a44d03877d817b60bb26f4cbce09db0afae86d42d6847b21f07b650af9b9381fa82 b7fc321fa94557d8fbdd9fff55ab5c8788764614c1300d5ef1024290b2dbb9216bce15cb125da541f47b411a2e7e3c2d b11b0c4dc9477176b3cda6b17858dbd8c35a933ed31364801093f310af082cb5a61700f36851e94835c5d4625bf89e32 9874e54d2939ee0600f4194f183877c30da26d7515e9e268fea8d24a675dd2945d1565d9016b62b1baab875ac892f4d2 90df3a77280d6f1fa25a986309bba9d5b89c3cf13656c933069bc78e6c314058716b62eacfa7ab4aff43518b8b815698 962b08299a287d77f28d3609f39fd31bc0069f7d478de17539e61fcc517045050644b0307c917208b300ce5d32affcca b30eedca41afb6f083442aaa00f2e4d5dc0fda58e66aaf0f44e93d4af5c4bf8ea22afec888cacbf3fae26d88e8d344cc 847747a22fab3fe3c8cd67f3f1d54440f0b34ce7b513225dc8eb4fa789d7d9f3577631c0890a3d251e782a78418fecfa 8d1ef3cb5836e4039b34ee4e1b4820128eb1e8540e350309e4b8fea80f3ae803d1f25f4b9c115482b324adf7c8178bc7 8f8a2b0b0f24f09920b58c76f7d99ec2eb2e780b5a66f2f30a9ed267dcaea0ec63b472282076c7bf8548211376c72f6e 831ee6dc8889bbf4d345eaeb2f425959c112d2190764abbbe33bc44e1d9698af87ff5a54d01fac00cfee5878dee7c0f6 a7eb2479ac80d0ee23f2648fd46c5e819ad3a1f4752b613607ae712961b300e37f98704880ac0a75f700f87d67853c7a aa4d1b9cec62db549833000d51e83b930db21af1d37c250fdc15d97bc98de7a5af60dbf7268c8ec9c194d5d5ccda3c1d 87396fd7e78c4bcf270369c23bc533b7fb363ca50d67262937dab40c7f15bd8448a8ba42e93cf35fb8b22af76740d5e1 a958b2a9ffccbca13c0c408f41afcfc14d3c7a4d30ea496ce786927399baaf3514ff70970ef4b2a72740105b8a304509 a5963a9dd3fe5507e3453b3b8ed4b593a4d2ced75293aee21bfed7280283348d9e08bf8244c1fce459aa2470211d41ea 8b06ddc3359827558b2bb57caf78b3e5a319504f8047735fcc8ec0becf099c0104a60d4d86773e7b841eb5b6b3c0cc03 9437e7278283f6d4d1a53d976c3c2c85c5fe9b5aec7e29d54a5423e425b4be15400ed314f72e22e7c44ee4bacf0e681c b56067ee26a485ed532c16ec622bb09135a36c29b0451949aa36fee0b0954d4bf012e30d7e3fc56e9f153616b19349bc a5c72f7f5d9f5b35e789830a064a59c10175093a0ce17654da7048827d0b9709b443a947346b0e5d96b5ea89b8d7c575 a8318d01182d4c9af2847a29a6b947feef5795fc12e487a30001cc1ec482b48450c77af4837edfa1aedf69f0642c7e5e 82ea421c091552d3dafa7da161420cb5601b819e861dd2ba1a788c3d1b5e8fa75cc3f2b0db125dde8742eb45b335efa2 8679fd1c7771ea3b12006d4a972f4f2892e61f108107d4586f58ee7f2533d95d89b9695d369cdace665f19c6bc3bc85e b5ab3e8adee4c950fce4d33a0e2f85d3d886e60a6e2f4454b57bc68725f0cf246372d863167482cce1ea10a7c67c3af2 a85696927075ec188979180326c689016a0dc7a2f14ae02ea27c39ef91418cd44177d3fca5752cf6b298fd75fa012e26 a44f87b7232f102cd092f86c952a88afb635484a984da90a41a57a3d883c9469064bf105b9026024090486b6c6baa939 866ac91a437db945bbfdc11fcee583f3669fa0a78a7cecf50fbfa6ed1026d63ad6125deba8291452bf0c04f2a50e5981 b780d5a1e278fd4eef6139982e093ceafea16cb71d930768dea07c9689369ff589d0c7f47d5821d75fe93b28c5f41575 b025d0046e643506e66642c2c6a5397a8117bbfe086cee4175ff8b7120e4f1e6794e1e3f6ec11390993cca26d207ae43 a04a22b6e28c959ab265c7f48cde42bb6a00832c6beb2595b5df2879080a9424890960417d7d7ceb013d697d0ebf7267 81de9c656ac27f54d60d0252e33aff4e9e9e9c3363a50740baf15a2b9061f730a51ae1704e8c4a626153cf66d47f19b1 a15fab90599df889df11fa60c752948b68fba54005491180dafb66c5775547976d0eef33945e55d4818653e0818c6f92 b06f9be44ddb103a72fa4ebc242c8ee1975fe9bf9ef7124afeda9967ff3db644dbf31440151b824869406851a90984a2 99abdfe6806ae5efa2d11577da17bd874d847c5f810460148bc045bcf38c4fd564917eacb6ed61bb9164ed58055cd684 ac53231077f83f0ae5f25e52b70bb6105d561c0ba178040c11c3df8450c508ed5df34f067fdaacf716f90b4926f36df5 99e3f509af44fc8d4ebc693d3682db45fd282971659f142c1b9c61592573a008fc00502c6af296c59c2e3e43ed31ec7a 98f2f5819670aff9a344e1c401f9faf5db83f5c0953d3244cfa760762560e1c3a3c7692bb7107ea6eaf5247ac6fd7cc8 b5b9f90391cec935db8d2b142571650fcbb6f6eb65b89c9329e84b10bfa1c656026674d70280ade4ba87eeaf9333714d b0696b77ca8a0cdbe86cad12f358880926906fb50e14f55b1afc1e08478ae6376215cbb79bc9035de2808c7cd2b13b85 a51d746833062a65fd458a48a390631d5d59e98e2230b80d8f852cfc57d77f05eefcfd3c395ade1e86d4a39c2141365c 812d67654319f4ef3c9e4a2d4f027a4cb7768f1ea3f5fdde8d1b79187a4b874ff9a5c70f15b7efa079c2dc69d1b9b1fe 968978b653c6416bf810f6c2ffa3d1abbefbd06f66b6686e9a4fdce3f869e0ab1e43cce14dc83786596761c100ae17e1 98e1e6ab562ca7743783b802faeb0a24f1341abfb9655f106920aef08964a3c0e8083e1acda7ae28fed7cdd5478decb6 a91c0b982a0a7085a103600edf99e9d0bee4c4e7db6d9f8f376c215c7d42476218462a3765f2928e12c3dd49d688e4fd 8a43395b3124fab9e2438635bf88952e8e3084dad7ecb3a9927f9af0e0887bce4707084043671fc98ad03621e40a149e b0b37626143d4a8c6f5693d5f1fe871525b4dd946c4239cde032b91f60a4d7a930d7ba28959737550d71c4a870a3a3be b01c74acae1715c19df08d5f4a10e0c19d1356264eb17938d97127bf57e09ced05ba30d0fc1a9f32d6cff8b0d5f91c9a b4c2328eb8a5a673406faed8f0aebb8540d2791646e37ce46e0e382506570ca276eb6f8e166dbbf9e0a84064873473b9 85cb9f769a185e3538e4a4beda9a008694e1bf8dfeea9dc07c5c40a9ceb1d31fcb13cacfaa52849ba1894b5027cb8c30 8742f91cddc9a115ddc73982f980f750d82d3760f2d46ee4490d5b17c6c3bb57c7d4c7b8d6311b7b41e59464c009b6a5 948ef86d17128a061e1bdd3ea7fcc7348e3ec87ec35dc20a58dd757d5d18037fe5e052bb359e27ab4c2320d9a52a6a0b a70f6a214097c271e0d2d95e30fce72d38c30a2f186271fdff0e38e005aff5baed53739b8c4f9501aa7f529c5cb2da59 892a7574cf6704ad75b346c95ae6f2668904f1218c35b89b07a0c2dbf3c62173c348f6fd9473926eef56a37c0f635c04 837e85a41f39b4ded1420aa8fc3be46a7adb99305e0928c6d7643b7c44434b72984cea08eb68f5f803661df0db78c87d 94e495329f2aab3eeb68f347961d1006e69d990095877a4dcc376546233adf29a14bf6b16a0c39aa477e15368e87014c 851860a8fdf76a97048396553262637dade27f1f63f926997e74c7c72b14b10293eae7824e8dedffad1aead57c124f79 90481017a250972055ab1cf45ff17d2469517f10f18c9d4ef79a9bdc97a49093289bbacfefa8a1e491bbb75388b34ac0 983db15f7463df28091c691608ca9c51095530fa6b1b7b5b099c612e673d29e16787cc9ae1c64370ba6560582ce623c0 a477dab41014c778a1b78a7ce5936b7b842124509424e3bfc02cc58878c841c45f9e04ccc58b4f2ff8231488fff0b627 868ebba1c85d1f2a3bf34c0ab18721ea725378b24f6b6785637ee4019e65d4850e051c8408fe94a995cc918c7b193089 93cbf4238a37ccd4c8654f01a96af809a7d5b81b9e1eab04be2f861d9d2470996fb67367e5bf9dcd602dc11a3e4cf185 83113f4e696030cca9fdc2efc96ba179cf26887c677f76cde13820940ad6891cb106bb5b436d6b0f8867f2fd03933f7d 90c709f4e3359a6d215d03f45ad5cf8067aedd4aab03512dd62229696485a41dcd64e2acce327fda390e0352152fce13 9945cfced107a36f3cf028ba04c653360afc5013858b9a12fac48802efcbc198c9baf3a7f9b23dfdd5036e88bc7274c8 832ae60192b47fc735a8ddeaf68314b16256c90ab68099f58e43073e249c6939895c544a02fa34e40805bc6b5db33461 8b12c335818b643c1d22cbc2869606cf64e7ae54a7713617fc4dd3b2f052ebd6b920ca59ba2e9c7aa8cf71bb4f40f9e8 a2033eb7a373931c65d66989644aa0892ac3778b9a811b2f413d8bf534e282c339717979f9aa742162abb3468c195f87 aba2b4c37dea36bed6d39323e5f628ab607699c66767f9bf24ef5df1bfcad00c2664123c0d8d5bd782f1e14a06f4c769 b71963777535b4d407286d08f6f55da8f50418486392a0018ee10f9ae007a377b8b8336f33386b0eb01c45695c3ed2da 88dc87826941340913b564a4f9b74985a311371c8e7b47881235d81c081f1682bef313c2f86561a038757fb7d6a1a8dc 869e13e3fcf91396750150f9dc9307460494c1d365f57893fd06fb8acf87ac7dddc24e4320d9cad0414119013ea739b8 92194e292303d32b91ae9cecb8d6367c8799c2d928b2e2846dab1b901371a4e522fc4089aad8f4ee676f0614ff8b19d7 aa589a3e512cb4f8589bc61e826a06d9f9cb9fdfd57cf5c8a5a63841435b0548e30a424ca3d9ef52bf82cc83c6cb1134 81802e0194bc351b9a5e7a0a47911d3a0a331b280cf1936c6cf86b839d3a4ab64e800a3fe80ea6c72c3751356005a38b 88e5e9e3c802314ddd21cb86f2014948b7618502a70321c1caf72401654e361aac6990a674239afa1f46698545614c93 abac1e0f85d5c3ff6d54ed94930c81716d0ac92be49e3d393bed858833f4796c2b80bf7c943e7110de7b2d148463bfbf b7eb416004febd574aef281745464f93ef835fd65b77d460b6ad5d5a85a24b536b4dec800cfe80ae98489e54447e8bb6 b3fd8ed1c30e7c15b0bc0baf0d9d1ecad266bafb281cd4e37c55edc76c202fb1e4ea315a91a2848f40f481793ae35058 86ef674ddf4b7d303c68bbfb53db00b925ccbf11d7d775ca09e458f4ecd868ca828103e8e7cd9d99672a193e81b83923 95ef414e9f7e93f0aaaeb63cd84eb37fc059eb8b6eced2f01b24835b043b1afb3458069c45218da790c44de7246860c9 93ec8f84c20b7752bfc84bb88c11d5f76456136377272b9ac95d46c34fce6dcfc54c0e4f45186dd8df6e2f924f7726ab 95df5f3f677c03a238a76582d7cb22ed998b9f89aecf701475467616335c18e435283764fb733fb7099810fec35932ae 8cda640695c6bc1497d19b9edc5ff4ea94c1c135d86f573d744358758f6066c1458901f9367190dcd24432ae41684cf0 b19aedf5569435ff62019d71baa5e0a970c6d95fe4758081604f16b8e6120e6b557209cdea0ccd2efec6ff9e902d6ce6 b3041f21f07d52e6bd723068df610aa894dfdde88094897593e50c5694c23025e412ef87a9d16cadd1adbb1c6e89ced4 a7f8d6ab0a7beb4f8d1cfef6960ebdaa364239eca949b535607dee5caeff8e5dfc2a9cfb880cc4466780c696cff2c3a6 99a565b4796e2b990bfcb234772d93c5ffdbe10453b5aa94662272009a606ba6ea30cc0c3c26aa22982c1e90738418a5 90c54b55ff19157c1e679d8d4f7f0687a70a27d88f123179a973c62565adfcc9347cfe31f54539038cf2f34556c86870 8612f34bcd018d742202d77d7ce26cf9bc4e0d78e50ddf75250b9944583b2c6648f992b635ea13fdaae119764e7c28d5 a04fb38e5529bf9c76ec2b5e3a1ef3c6f9effb6246c7f67301cfed707356ba1bf774f2867c77a5805933f0c8ad0ec644 b4800e7b503da0164885d253135c3b989690794d145182572181995e6fa1989f3d0324993e871bbd5f48fadd869d8a18 9981cd4f28ae7b7dadf454fb3aec29746dc2e0ca3bd371b2a57cd2135a7d93559e02132528ccd2d305b639d7ac51613d a3ceec012dd1fbad3ef9f9f1d6fe7618e13d4d59e3f50540d2a57010d651092979c75442ec8b38a1ab678505e30b710d 8b97b8654d067fb4319a6e4ee439fb8de0f22fd9db5569ba0935a02235cb4edd40a4740836c303ec2394c59a0b96308b b3d1bf4410fec669a269622c3ce63282c9ac864620d7b46c9dfcec52d8e79b90c4c90a69c32763136a7f2d148493524e 93174eba1e03f879e44921084aa0ee3562e48c2be49085de96ed7621c768ff52324d14c8cc81f17d7ed50c38ffb2c964 aa2194cd0fb7aec3dac9a1bd8ea08be785926ed6812538be6d3c54218ea4b563646af1f5c5f95cb914f37edfae55137d 93f2c0dd59364f6061d3da189e04d6c64389a3563b062e8f969a982cd68cc55b4f38b21546c8a67c8df466ff4f61f9c5 aa7dd497cc949c10209c7010ba4ce8a1efd3cd806a849971e3e01716ea06a62e9d5e122ad1d2b8e5a535fae0a01a7761 ad402424b2a32bca775a66aa087580d7a81f0867f293f1c35580b9e87ccc5a2bab00c29a50fd0d7bd711085ae2248965 96237843d8e29ac77fc6ebf4acc12946ad11697de8e5f152fe5776f2475b790226a7d156ac48968dd68b89512dc55943 a45c25cdbb9fc327cc49a1666988af9ab4c5f79cea751437d576793a01c3eeea4c962c05c0947852fe0e4c63e1c84771 93dcf834a614a6f5484cc4ba059e733ab5dcc54253229df65ff5ad57b447353ebbc930736a4c96322e264e65736948dc b9a94f82a82c0c5a26f2c1d5381afec3645e8ee04c947dc3b7ad59a73018db1e9965ab3642f2bbf60f32c430b074fb22 94eab29b3524ccbe0c4b928e5fa5dd8f684074b332fcf301c634d11083653ffee4f7e92ddbcb87ed038024954ad1747b b8dca5f679931d6abef0674bad0639aefad64c2b80572d646aaab17adf5ca1ab2ebeecd5a526cadc230bec92ed933fc2 944d394958e539251b475c4304f103a09f62448b7d8a8eaef2f58e7de4f6e2e657d58d5b38e8513474115f323f6ec601 8a5ae1f13d433962d05df79d049b28e63fe72688fc3e6660aa28e0876a860c3dbc5fc889d79f5c4dec4b3a34cdf89277 afa5278724998eced338bb5932ecf1043d2be5dd93f4d231d05d2ea05b4455f2ffdc0eadcb335dcace96dd8b2b4926fb b91153a2f4647ae82fc4ee7396d2ca23270ec7f8884ce9eead7e9376270678edd42dd3d4d6c003dfc2dde9fd88cc6e7c adc932f1c679bf7889cb1ff4a2d2897d7973483fa283979a0ea3640c80ed106ea0934c1961dd42d74b22504be49851f2 a82e90761fae684d1415cee0649bb031bcb325ae0b28f128ab8e3650bccedd302a70de1a341ca8decfdda76f3349cad0 8ae353188b4b98835f4ef0333cccb9e29e1ac3ec11d554bc96f5880c101cb3c84b8eefe72f2287b0812735339fe66cfa b8b41135bb1a1ffb64afbd83e2189e755f2c350e1273cf47c38ae9b8c4800d831436a69458b8ef9fa8b95a148d8ec9fd 96f75a04d8752fa93dc1eaf85ad333cff4eeec902a345576139e16de3a88eeb71b6726224349bb9844065cc454d959e9 ab82b05e3923ad4c26f5727c60dc0d23063c03f5a4fd8077da66aa87042cad1bd99586d4ab35aa5e4ce6f4da6fecf3c1 a50c83db91c26ef7bf1720d8815b41bd056b49fd99710943679a162ccf46097a7a24585750ece886e38eb4fdb866fa37 a719f667914a84f62350dcc6f4f30b9ab428eac6837b70318c3ac491c1e69d48af5e1656c021818f377d911fe947c113 a148807aafddfa0a5624c7cb9e42468219e4bdb9994ec36bc19b6e6d7c4a54d3a0763d13ca80624af48bbd96d73afca5 aa012f205daf22a03e9fb13a63783dda7666f788a237232598d02a4d4becec7a699ab493f78d722ce68519262924c708 97fc15fab5952c5a2d698fd6f7ad48aff1c8aa589f7d3b14285fea5e858c471cf72f09a892e814104fa2b27eb9771e73 8da8840236812667c4c51c8fc8ab96d20dae8e2025290b9cde0147570a03384370b0fcbe20339c6aff09cca5d63e726f b477d85359a8e423fed73409f61417a806cb89c9a401967622aba32bf85b569e82bca1b3394c79e180114a0d60b97316 b3d6ee2ed1e4c5cf8ba2c3a4f329832e41c7fdcbcda8a3fcbe8f60967fdb1717665610b7c1ac65582534d269d762aa09 a0b3b30b1b830b8331ee19f96b4a4321a6b93a3395b95d3a895682c65ec6ea64774b878b93514eaf353f2e4be28617b8 a2b88e9617f4d30ef4e686d1932ad43cd555fadcb5102e51bea19e6fca649284ccf4debb37b5cb2090ef386fa5bf5327 8a4446f7e8463ea977a68d6217a9046ad4356d6fc1c18d46c5d2ab681ea977b8faff136d65abea6bbf8936369cb33117 91e7464bc56e03f436228104939ddd50caace5a38f68817bb2991e193b57adf6835152bbf3dbcdebf0382ac9823f60c9 961a441e6cdf8106c4f45e5b47190d35644faec701c9cfc41ced40cfdd1fa83752fd56c1ac49131a47f1970a8f825904 94b7b165cc71c2ae82976b8f03c035fb70e90028992b853aa902c0467b384c7bcf01d56166bec5def4453e4d0c907e52 a5d32cffabbf547f900026b34ef46f08075b7a244565f615370d2f04edf50b094c95088a4a139ce07caf55bcd99afa07 b4e06e73660745f75ab2f34d9f6d2675b58f80f911ab6dd4c5a6ce1095f9a2b50d86f6ff9a05394190bdf96af0827920 ad3fd8f83c0103b29d41319209dffca201d2b98094362da08da3fd6ff0ba96796b49d6bed525c9adb96c2954858e7f48 b0c27430695f0fd20ae31e1ec621da090094f2203e17411db9384695ffcf5c7c6badf461ba49ba70164aacebd6f278ee b9bc6e972fc3b532fd2b1eeafc4bceb77604885f32132af6a9a842fa2440df452f49ec0cd9d86da1180e8deb0723b260 9729e22d6104b0174c136a854920f542b384d375040adcebe36acc253bdb55845eb43e34dc5a7cc27d22c417973c24d0 a8b420b36d48786c9231d454468a6e855dd7f71dcfd095efc9855ee70dbece0f06ad277f7829c5813fc30524c3e40308 8757dff5499668c93fc5d9cea0a8db61817b8ed407200d623030b5849a913d12f8371b667cfde8d8082026eda7407e8c b859ad747ca5af661fbd03a1a282df6e84c224ecea645bc2d4ba5e35fa06cbf047387319fca0cbc76b712398c0798968 8e3173c27875f1460297af0fa736c945dc842ec3e476a973d3d5f790bf183ad3ffe96ac13868c5101d8e299890791864 a9d725e2b92c878be42b5eecc2c3081c63c7231ccc7e2dee17ca6a4caaeae22788fab1f1465fcbd7fc236613fc2bae4c 86f6c4f04a354cb2470ef91914816fd740f8d5795ce7ff981f55a2634695fde5951bbae7a4bbc4c63747040f8644170a 851773cb26f320f0c3f252d95ea7e058ffcc795dd0dc35e459aa1b6b448238909230d809e82022e64b7fca5d40b8324c 8962641e0306220d9892fe2d452caa286301a3c465185757be7bce2d9b2c9beb3040280099606cc86773e43941fd3439 8beb6e08c440b0de5fb85251d39d9e72db4e556a2dfe3dae59efd8b359d08492064cebd8d8993254b43bde8bd67d969a a7e047894466ffe3dec4ab8d5462f2b1d8ac0df006b1d2dd26caf499ea857d93a811cf42233f9e948c9cb903beec004c 92eedd95557a91691a5e2835170390ce2401e223da43b78615a804c49566f9d31cbb7f10c8a8390c4bdcf691544fdba9 a5e5b5d8fa65824e958bbae98d146b4b332f97ed50e0bc2c58851dc2c174ab71bcbb1ae015cd2955c26b368487dd862f 853a494eafb308175629d581ed04bed71bbc3af9ca4c0dc483d03d27c993a2bbd88cea47c2085a6928d166fe6938fb77 83f06b88d29afbfbe8f61811690322ac4fdd6abb9a23612162e7a2dd6bcbb5f14cee298ebebc1a382484f7346dc51e60 8c9cf05735ea5a0e563490bdc7ed29a4426643711c651e35c8551ca6f855c8458ae8f0933a022d0bb9a952edfed411f6 b906b48d807748a26cc2a8848455a76ce502261afe31f61777b71917bdf7de2fece419db636439478c7582058f626c29 97efe1fa7c9b25d8bea79d74b6cdcf88f63f1e865f54b58512a2e60428630b0b40b8b6af1b5f71df47520507548c3cad 8ef5ca6e753818906bb3fc71405928d8e4108854ef0ef01c1009071b353bc2852e771fcb619d5fea45590e8f61003d7f 8e4d901661e2913740d70ba4d0745df5e8c9c0a260149d9362beadc7e669630ba909ff0e8a6cc85c54d6b7435d0d351e b7c6ba3bebbd9592967954e3a480ee8df1d9f5965f04e7d78a5415b645128deae7ddaf6ed507c8877bfca91ce078e529 840bedb0ad4e25acf6cd25dee4f98fea495b2312dc5cb7a8388c5ab00b2acb9cd25da08e9fbead145a3107972b1ccd5d a8d4578dbafdb27f3911af59962d89e75dea74db55346720357790da677312c203107d9c7911535aa563446fde7d4c47 86d3b77f231bfa09251b7fd2ce09c27ac520ec35d783e912476f9a4863f83d269eb175790d6e735da9260293d707f8ee b34909f1cc033232652da0c34051a769dc76adb1aee00674a59dc1b860f6e610974c3b4bb69a69ccc73e01f042431242 90799854d0cf34e1d91ff8e101bc7c5007423d34d2f3bd9adea2ecac57e83f3a65a506bb93d4caea49b29f6d18149957 8ef94cde29b037e19a1ce7bf4418ad3c95cd9457412796ea385750c19a6690f13a3bb5bb6a9ee81e7a40face1e0a8bca 97053d21ae8d75972fb37f6fe516c38c32ab162fb56b9f510f954858f4e3ef6ac8c3a9557ed3f41b7b6aef05fe97f931 90a9f9f0f40991f3bddc58b92d40382147db22cce50d092d4a05aad251b46b94e71ec9f7107a180243288059fcc5ce29 a14265b1344ac2921b0f890d13bcfc432e4f648ce403e261fce4d3bb32ffee9e2794c02830346054f998e82784c77040 91928402ae121e56a3e64cd6f390127e6e92fbfb1967ec6efa4f52f3e8058f1f41a0f4fe96b5bcc11641c1139e790b2b 921c8c92b6d40da6c5a7b592acc74fc0f577d93767b9aa4a1cd302a72dbf503a1ea5b2c29fa0d0359bff3b8f252246d1 93ae0ebe0e8e133fd80cf67a499047e30ec4c4660ccec9d49098717ef57721a030f423e00c5e74af4ff4acf014a10497 82c865e21905aebfe0496af1c6ac7e342b5f446a9edb4f7da0f2fb0340abfd8e6fc545da874459d9aabe6bce0dd9bfcb aee3961d8d2687c0f134b9c28b920bdc4021d925fbe14323c84224a9fe161248789249fb85436a5891d0bbff42c2a3e9 91aee420b98b6949482b8ff4be996b97245b4e8f583a6e085226539074f42aa89818395efd1a6699735a569bfe19d623 a48eec22c192e495b01722d0016a54acc45ff837e2a95c4294ce81d5a4e43e0053a6f0ead8a4fb3ddd35faf6607275b0 a26e15937c11faa30ffa64817f035e294cab0e839f73d29de8a244ad039be4e221eb47ea08d9a4658b0152fc3caf6110 b84450f948aa7c8682fccb9cae84d8e3558adf2d0ca5fb81eb200415291158720f8f3470542ab5b88c6873ad08e7fa9a a8e8ec27d0608d020169a85d6ecdb40eb402f006a3b97afe32cc01987721b3a68a92ec693aeb4d357e189e05fadf699e ac87cd535ef5699312cc26f86adb71baa0be42e858bd5a2d94ac05737dac63430691e29b9a30d2559ad581a172519b2c a4481e67b524f8cddf2046625efd3d75efee6aab87ddd2c1b22835647e918157e5e924ac760db2195c86d326f3db1615 891f29ded231486ee826840c8895cb325f7e84a5a6d2eac246cb3573612cde274720233b1978318a57ed337a046330a6 906b6e750e6178289012769807d2598925d7e51c260c14497d8af978b1695990e3352e6e809a752f376597a68083870c b7a056898ee1e46f7f29702fb39232f678ec173eccd170303b3b0a30c8d8cf1a5321384e3513e3b03bb742c238deaa54 8f2f035fd96c3a336354c89ec9b8222803bf42e95fb2412c28d4e75eec99c1d4d402501ccae17357b757db8bdb0bfeab 81228625ffcedf977fba9cfa13f6edead3985e2651d5974789c394a69401cd7face9e20ae6694be4c0d4bab5e99c61a8 885a83eae25e61439ad809567a2ab148583402e01cfdd77b0e37ab4038935425c64b4e0886949bf06438c35e80aa13f4 8926387f48752f6933899c48e038cf14e7941ec6a58bcc0a436614b396296a17aa53e6873803dd3041dae470bd493fcb 95d0d3fa061f4d856eca78a569aa132db14cede7646f97e2aceb6da0c8ea53195d3b7a566fe5ec8c41b95ecdd89a1c6b a3c817f4062ed6aa94064ea695d76c1825f3bf77b310fe1db28b8bedc9aaacbf1019dbd128adfd53042fb943d863a2b7 af1208417aa584052da309169854149ede38a3ad63c76cad6e43afb6f1a7b854edf8310a0b00088c039259cedf0f859b 8b713fc3196bad35dbf364089049ada5477e540d78d76a5f0a9df98f7ba4a0e65dd0644509c149f9b07887298bf74b04 89c09c43c5b733c4a417cd9ebc0795cc3348b72778d31828a9171427779a82ef023c1a4fcfcdc919ae25056f9c826fde a0759c850ed320c8c874435e90ace6edfb8e7b3f2a09d942b8ad8339c508044ee2ee26c70f1b626ec49a77971433b6a8 b85cbc58d4fd52286e714ac4eaaa0b2743a1de06fa03ddf8f6668ec6f1d204acccce93b10620272afb8c0b49bc4b0a43 814e0a87384e159892a8d23036985fa3f489c53bce192e107bd2d64f57b1bf5ea0acc1ef46c7a42bbc5cd0924d92b4a0 aa6821da96ad89d7881b878e141076522f104ea9a5bbdd1fce9f641898f7d6232c518a87a0f666871d7e3165c26081e4 a9041d714bfc067b5427252186fa3557bad598fc0067dc8521aa9bc1ae298f6e96113db5ac9f6bade9a85d5a950c9755 b8669340f3064692625e1bf682d34fbe69a61689e3aa6d6a3e822c781d406b0300dba9c3f7b8152a8c2513f1310d4291 a78c53316ce768a1dc5968030bf4fc885f4029b1ddb6a5d84a61c85af686c73727f62823891edfcb6ccf4545de366cff ad1d3aa29ea28292ddd438c865e2b5d93f32cdf009e6d5f5dc726de996583925727e6348bf1c28c22dec0bd86aaf867f ae1447a2062e9e28af5f38aecc60fe150cd10c2edeaf2110034aa144f6235ed7fbce432a58805d4fe1f6b12652d6e1cd a32146634332d3303934550705353c6d4fae5fa5985105bba35041e74cd71e2aad67b45da171221f6ed80f36bf6dffa3 a232e8286184196ea77427b53d8b52c44d758ecc42d22556529db3136379b4989dec61cff610cc6cf6700a450a847a94 8a72c7255125a736da52dff5f77e44c3de29f88fc05f5ff9227c69df296930caaa11446595e6bea3bd946baac5ef957c 9688a981a9457678067f629f8efa6b522e7318b529f88d37ef56c5bf8f1c34fb9bb3a918ab73caab82bf5abb0c03518b 88286f3eabd71115fc3b17a6bf6981340a81cf7e5f96b0a1a016d4ec8c18fb486d46c70919123d0c189a6f5d6ff29a1e b535e701b40d793c02ac0d625ca91620d3f4a512aa9741f71389e58381008b2f93d597586d06213c4e103d67d0ddf6c5 80d0c9dd941e8d8d3700cc51a434a5aaa3308cf8ebfd14128ccfd258f826b27cc3cf5c3ad7851340393abb1eeab3a157 87049225fa2380d93f18d3d90cb0697a56b373b66d7f24ab209966aed8b55a2790194d5885399db29dd5b1f189eda64f a52df158ce8670e0290551e8878d63dd33b4759d6f50e448e63fc7fe6ea99dddb6f180be5fc0fc3918ce54c05f80b356 8b2a728b39c465fb0f60b0c486e5dc8d5845ccec03d3dd93b393cedeeb3fe1b44518359f1ed55fc770a8f74bfeb9923d 91fc05419dba718fa4a910dcf256ebea356bbea00522d8d5ec3e7ba4271a26035aac15e8d9f707969df1d655d92dac55 97c8779ae80c24c1f82d5a714762d6ee81069224e39515e41d8a71c9310dc5d1c55cc92bc5c6a4bd391ae4c321d1d4d2 b5e5aedba378c4484e3a7a4ed41b75b0844f674261c2501497de6f91f7274b5a4c1be0e055f2e0c0cab843d891169fbf 8a26212f27211b295beea500abc8e9d430a8500d3a350cc62f895d39e8b4668aa638c17633804ba353010000165637ae 864a95118e5d394e00e99efebd505df0125525c9ebe165764c453b80ad3edc730feebde3d93850745dfd88a27bb8f20b a092e0b78290e826cc1ae56afffdd08f7c10954f549a3ea6666f3db1b6cdaeb7df53db28dd2a92446342930fe60a27ce a1720224c0626a081b6c637b2a6d37da85d9a82241e5efef3bc15699b02a69f6304e43d8ff3144d60c16e00225d6b39e a7b3d098cebea9cf32e19c5195608182b6afe9d4af6b9df532c047eb7a941a971279b2ae6a4b80f2f9d9313a6d788ce3 a3d2451e6788944802c5077a778d7b7299dbb9d1612676bb6baae78f39976e0fd879493cc4a4d737b8174b472a456850 930121b73da844571b1411d56760e80923a4ee09917b3e9cff4d3dcb0bc27026ff2c4e2c44e7aca7d3f8383f129c7f9b b4b0119d163ee00a2b74bdf188a5cdcf054daaa48c483b94bbb4d09ff615afb4a91347db6363bc7535e2af9054ec2214 a5846decee706780201095a8cdd48fbf3d3a2eac8d089a818e5e22c29457494bbfb4399323b067f3d2be2197c33dbd98 96ba600df10ee7af5a9df29c0ca31dbed275d647faf9c66c7342de927ceb25b5bdd852dd7aae0228b27897f90fdd5d62 b6ac51ddc98edd9fb9f54ef84bf372a041d58dfdf0dfdbdc4b08ddc1a7ba93ddbb1413dda3c1545a3fd7386c6b85975c b35f3efd91a0723e0d486188ea9675a3462106470455118392d7610470b623caca2fa33829721c05fbeb0fabcf570bfc 87f49e85df5f8055714a8ce7adf37f6a278e64e76ed74c60abe3edfc3611ef5b0426d4c6da45e5f3b74d30be1dc6f539 8ff8bb06902a71b1e9177a77367318b2e3e0a88f5d74d6907ca9943f4f9f1ceb5f297132c2a025259d17a67e880d1bad 85eb6de6c70fe5c53ab0ab27aa0fec439f136c979c557d317337cafa6e6c5cb3169679c9169567dec5f6c72b3c057d83 ac18715ed1080771d760cb7066c6328faf65d9b30517903f8a5cad8d66d5c6381156b521107d7cd75ebb8c30e250706c b95b9eae4703727e4ac9ddf2ae675906487bb78905a5f9cba74a4cbfd118d96b7afb6ef3ed5edf14fd963b830d71338c a3b47b52fda16b62b11c8aa4daa56b0b669c4d5c56a3059b7d063284d8a91f6fff9ccccab23d6ceb9650483b2d353039 96a95b3f327df94c85e92f2e406f1649ac621533c256b062738f3c3ee137059a735a3e6072247acf57b1b0d8c219bd7f b19b33cc04570be94eae8e943d5bb17bb0c96e9de4ca84f9f41b37320a1a03d397d53747dc13275fef1b356de557214f a1faa3dcb931dd91507f3f12a17c43f6627fa2bc5c71fbdd27548e091eaaaba262477949cd51290e81196bffb954a492 b060a16079dca1d28a1fb33cbc26f368630ee042d980ce305230005d5b9ab533a7a695281ab76e9214458303932d8bbc b303783196a858fe45d67e0520c30576da605fd69964449c20009fbd5099cf1de52a32d326d7c3b864de07440195ef40 aa550a4c20d1003d137ffd8fbdc1196d09ad53cfa0e202302093a80fa3bbc4c9aff83f34f2151785cc1ce5f30255693b a7f8585f45566a351058e10c6f1ff4a7ba24811f1482a47202f581525615ca770da93f2f58878788b45b92cb446ef4ec 8206f63a9a5b59bd68e64a843e68fcdf706f4c13bbfcdfa9928298e5b9251006ae0bbd80c715aa3c9957d2c0148b5059 ac9490abe1241319658f1c2c645cfa01296f5d4106020c7894b7ba4a65cdd52f6c5401bd3b3cf1c9863e088cd8c9a16f 85dd6d9c80a1b58c24c4d2cb7590d33d2454f381f58e820979948e5831972360cde67bbd56e1860077ef5192fcacb904 8b0285944c676fe2519cb68da0973275fa29c0718d838d363ce46651b068d29f867cf9fe579ff8da0bb8b37d202bb23c 95147275da658d43a758b203b9ca1f1c1478853e9bf77b5218593142e2bd9c0bf46d2206ab64cef99295de6e9a268edc b8efa187fdd3e1f46c15cd596e9567690c10e253b5beaa5be8074b6ea4e6d3d06e0f2b05323453239e419ae1e7128521 8340464f52c92e31806fd3e8e65f56e27194d1f6daa4a0f0b3831e8102aba16f88bb5a621633ddb7dd0342e1d2d12343 8615d87dcab85a78dc052f05a01e751176b756b5dc9985014347454ce5752f459dd6464e1c5aff36cb6c51b783fa2692 80c6e35c0d3defbe4d3968792724a23f0b8830dd2fac58663583a49339ea20f1812cc4140e3ee867c7e716177319bbbe a7aa63dbfc201dde8f29bb6e23d7aa5020dd35bd18a0cc93c8a10c35d695913fe25b9e8cf9b5fd1899e9657b22bc8863 97c2a4ba80c4caba2e729a603d2faa0120915e3fe64cbb065f7ff33de5f877f1ec9461cf455e88ec9e9ded9393939dba a54bd1419f0e2d2d87757870f37c476c7e3a13502f1ada82fd7394fd29f8a00c4986473d753034d0954a2550badbac0b 8d3e2bf900d0d2b9b46e6e2f37620f0cc90526dbbcfaad4e4a37ed53f39fdd23bd3a6f21aa7e800eaec937d9710dd6e3 a88d2b1c7802b2dc216c2b6532406c091bfb12f29121b9a82c1154470e250188413ddd3e79f7e009ea987a4c45b332e5 8c552c2101dfdc3f99c2da436115452e4d364eefe029b12946f05673c5ce1cfb48d39a579625849236dc6c8e7277dd30 8415c252d52a26a6400c3189c928a98559bf24162ecf3eef1d10e439269c31d854b0b4f6ec7a2430e3f11b5d77de78d6 8b38905bad93a8d42339dbdb5e510003c51fcaf05e04f88fd7083753353bc1c4c00a5dd4a67431cd4456d0669c7040e2 b1d0ed8862250d0f0d9ef9dcf0cd16d84313d1a795dc0c08e0b150dadf9ce73d32d735e04632b289cafa69a6ee75dc89 9434e18a5fb631b10edb02057f2d1fe16000ee55ada3c26a079c9fc3943e29d6de99e52829fe7b333e962270c712e51e b1b9f3914007e6fca8ad3e7e848a1108988cb2318da36df24767d804e95d1272943fda948451135cc1b5052a3953b081 8c02947a76d7b6c0a700a83dfb971dc105bfe996e18c521445f036310914b349ab28e57571e36ae08d13a46fb01c2f43 893472fbc225f973a0ac6a0a0130b9cfb7ab6869dff80df71a62b1f6beb4afd069bbf35b4f327165bc31dff39e4fcaa4 a7c176c0903175f3540d62f9afee994d5d9bf37081e094644b22f017e94c515afefde7bb07f638342abef7de657f8848 860186c2b1d3b1e657729bc804275fb5f5ee89eaa60848fcabd3871289665ea9f0efc8a95792d884972bcfa2de96223b 865b38aea6386d0ac8f501a7d934e23d01dc50105324e354d4c4fa3cb1d4c29c26f4566df7b1a728e10cfaa9d24552e6 b4eea5548de6969dada658df604b5d9c49002e2258352838003e0fdf7b299d81fb025807a7f37cf5b547cebd7f2c1f93 8982de11ba68d63a649a3b296d4d56c71e3c3eec016db250d733ab7c3b9a620c09c5a5d0b64fd30d3bc03037ca4b17c9 84d8b8a10d67eda4716673167c360fc9b95717cf36ef1d5bc6f2ef5b9d2624f0e76c2a704d016adf03e775ea8e28d83a 834d03ebd51aff4d777714783e750b84c16cb6627f8311bd8ff17c3b97fc4a5bba57d6c8f6d74f195d3030bcb5f07612 aaf49e0def0c4d5f2c1e9c17b51e931d2f754b19e80070954980b6c160178349f6d3c8d4808801d362e77f41a0008918 8ef4115edec841854e89f2bbd11498dac7396bca35dda554290d3db1c459ffc17be671f4a46d29fa78cbd6064cc2da20 9641dc8a64f4acd38e343a3062787c48c312f1382f7e310ccea3e95e066ab6dc980f6ed90a633236a435e68bf6b3c625 8a84cfc2cbeb18a11dd6c2a0aebb3f6fd58a33bb4b26101e826add03748595022e816afac79a4e7c20b3805252839dca 9770782d729017659844421e1639ffcda66a2044df9e19769b90292df87dcb146b20c6b9141bb2302029d84a5310665d 98c7ec9696454868ac52799d1c098c15ec4e08b34884dda186ebfe87d32840b81fd3282295df141c91137faf4cc02da8 a3f6eb921247617292162dfc8eec5b830ddc294a0fb92f5b4828a541091ffdaff34c392c1d7168259d6204405d90ec72 b185f77a468f07a54222d968a95635234e74fc942485604909308a9028ed2753b15902b9134749f381f7cd6b89cc8c3d 867608a682d53bd691dbc92eeb460d1c300b362ca49c11a280f6768ccec217f1145f9d59fe50d994f715ce89d38a74e1 afaad630ad8827cd71aade80edf3d7aeb65a344878db12fa848759e6233f6fceca563aa437e506ea9e0f1e47b126d45b a12afbc84e3441594aecf85d089423dd3bb8bb33a1a384ddf7cc14caa72284caaa56aa179c15e3140fd56bb532491a67 98757b0b5e5837ddc156a4a01ce78f33bb1fce51e0c1254ee9b6d3942268d0feb50b93edbf6aa88f9ea7b3c0309830d8 89573f4a4ae752e9f964e42bec77d28a41840c28e4bcdf86a98a131d0b85367b885077823a6f916972de6ac110821bd2 a17f2745052de5de9c059307308fc49f56cb5230e7a41cb7e14a61c9efa742ee14c41023ce90c7f2261adc71e31045f8 914b07c53a41c0d480083f41a61c10429ea42dafea9a0db93862d2269ff69c41db8b110b4768687b88089b5e095523cf b380cc3e0d26370976fe891d24ea4eeb1b6be8cfce01f47fd68838a27190e644fd57b049d3aa0a9589370de20e276944 906385fdfad60feec79eb1c303e750c659ceb22d9c16a95faaae093daadd53e7aa039a45d57e20951d6e1ca0dc899ef2 b5211ceee31b194dba60b616bfd91536e71b9213a3aaaf5aaf9b2f4cbdeb05191861d78b97eec58e3c81abe4f0488c04 97878e9e38c2f69d697800e7a2f132fc4babaacf471c79c26a757f771606e55fe696ece68a3163a0ffeb2f72274cf214 959431c1f54c46500c05aaa9a2bc4230531dad97ae768fa92bb85436c0ecc6374cf20fb0ef82d122db116820a943b401 b69e5a1c6798f30d33e42cb8d124f025d2c77c993c4c7107a539aacddf44d8d4d2239e802ece32e60ee4dbfdce201bdb a8b09e5e9f802ad273b2efa02bcbc3d4a65ac68510510b9400a08d75b47b31c6f61ffdb3704abf535a3d6d9362fc6244 a41ace7f1efa930564544af9aa7d42a9f50f8ba834badcaf64b0801aaed0f1616b295284e74ca00c29a1e10c3de68996 a8f2aa0bbbc19420a7c7cec3e8d4229129b4eb08fff814d959300cd7a017ddb6548c9a6efebad567d5a6fde679a6ac6a 9683da74490a2161252d671d0bc16eb07110f7af171a1080dc4d9e4684854336a44c022efe3074eb29958ae8a1a14ace 8ef44d78d10795050c161b36afa9ab2f2f004ccf50fdeef42fe9cdc72ebb15a09389ca72a00001cd6d9b1d7b3bb766c3 adca54f3b14fb18298098970b0267301b7312afb75894deea1b2afa3e85b7a3b4efac9971ab54c5cbecba2da9f18507e ac5d4528f06fdccfc1370d5c3d03ed982fed0861a93a3f6453aa64e99360b124926d1892faaf72d89459e663721dfa99 98aa1c801bd615b8cba728fa993021e181e0ad717ba01c0290e7355694155407083eb53cb70819c4775da39d33224db7 8b3aea4c7c2bfe1020de3261ec085d79c7bf8a7903b825d2c70ebbb84af197bcc54e3653c5373a2045c3021526b63b66 a29f3de4cb3d99afff1daf7d431b38a33a9804fedc41626618928ed059df6f6fe9f298a046b594ffee951ed4d4e1400f 803fd346be540c5242667c18ee41b26bc812456ab13ff117196ed69b90ee608c8cb6554396b64066a546ec87a71ed6a9 a9c18d81ffd029c0339c72c499bb51685392253b996b6eabd8b76f05c6191ed8444a1397d63b9923743661a319517f7e a048d5c390d08f07161faac71c5994baf152c883b205f3bb10d3501709d6516ae54d491b486303a11b751857a31f0052 9156fb4803e40e28d8d57d928481a8de4373687288da44fe88c5676a8ae013ed1fcc09d56a31140bf74e7f767253810e 98e289c725b18e0085afdfaf2acbc674dae7b0a2ecc2537a7d0b87e20eb785404ab05973a787f0495d2adb3e5565c09b 8a7237b249325bd67cdc1f9fb278710069033c304afbf270b7ea24dbc10c8eabe559a484d3edc733c77b4384932deb41 9056f2e5b02e5c2e04a69fa1323bbf1859d143761268d18e74632e43800a2a9c76fd681e924a19bc141de0e128d3e462 b9f2bf9e4e7263014296a82b9ecbb05d3f1efa4b2e675e3b38d3eace59da06a89c859256e1b77847886d6aa15f98f649 83b22949cca19030289bbf7cd2a0d8b84e1d468e78bc85271a6753241b89122627632723bc293cf904a5eb2b5dc6c3ae a919aaf35dd0116168d2ee845122026416bec9633df113fbd913d8db5996221e234f98470d029a8ff182825b59fda20a 91726901f49d32b41afa15219073842278f60dcee223640903d871e318a1c2b541136b7b38a7b2ab7d31e4242fc29674 942b77666545bc9a858d36cfe857ab1a787c9528f4a0b87918a06bf510793264dcafd12ae6bd3ee300179dab7f40aed0 80adc1f2f9c47a96d416e44fcba41628abc0fae1f88f6a26aea4648419ab726f7fcc2187c7d5145e3d8f5a75c03937f4 8041e0f66ba9dcee01e336dd4d16ae5e4e1618512fc147cc8230003aa2940848162dc2187d4130bf550dc1f3559849d4 999e8adc51bab54386af1c5e8822986ad1b7ecaf1f8a4c2baa5bb2fe9d10710e49545c5a8bd89ed0e61a3d73a908e5ef 89272ffd39b6e9f99fafdd58bd9dc00f66f26a1d36b38a1ac6215e3546d966739eecda7fc236335479207cef95cce484 b8e0b7532af13f15dc04a0eb4ea8abd67e58f1b1c6ad2e70c0ffa04a5c18ec2018b5d7f4be2f9f86db5e0b3986f639d9 b96bd11b0f6ead4abd5fe1e4c6e995da7583b901afd01cc05e87d04663fb997997d6d39dd9fb067c62cb1b1cbb67516f 94ab08914088b973e8dbd5685decb95f3bf9e7e4700d50a05dbf5aaac9aea4be2c10c83096c02252e9238ceea1351d05 a188de419b062af21275d976494c131ba18d2b2ead8bdbfa38a777832448e64d4d9725c6a1d530ffb6513f18d5b68d9d 8f73c8c118fa25c76a4ec5611351953c491452743056a819c8c82ba4737a37d88da0b55f837e7239a5f46d2c05a1bbba 894a44769e0be1c26648b0d89c4c9f46dbdeb3a71b90c493093bee372bb9f2d3f319850fd886d51f4f58db0de5641742 87d239923b0db024a8d9b0281111d47b0761d81c50652268b074efa3ea70d793e30f874a91ce33a4acecd0cf38c01951 b1b48b75a97f9fc2dc9530dc69f6268829dd0ddd574516e7eb1b9f5c3a90058889a7bcf3d378738e6d4b02f5fbfa44db 83e3ee9526ffcb60c6e75b75550fc017912ec0daf96d0a0d5f58c1b229cce90c684ac7c3e17fb998def8e7e2e155d750 b9b7bba579e474b0abdc7775ff5f84c9f117c6ca17788cf5a5f01b2c35a14aa39036031c8d799fec2cfb371d9f7471fd 90d7faf4891fbc368a32f575dfb69f13e37161ab4f63a7139be103285a49490c2851a907f8d36e09e7d1a190dddbc6cd 968c8b9affe18fc34a4e21f0d8c5518341c566099e6b45b8721c9912bab3693c9cc343406fe90279692a1eef2a3f7311 8735baaf4704207550f77df73fb701d9a63329993a8cb355ccc0d80daf950145f37e9b4b22be2aba29898e974f9fd552 90f52b2dccf525b9191d836b205ffe966d9a94f6c5800f8f51f51f6c822619e5abdf1257ee523597858032d2e21014ec 831209f8f5257bb3eb452d3ee643d5f063299f8e4bfea91b47fc27453ac49fd0ba3cf9d493c24f2ca10d3c06d7c51cd6 a5a4db4571f69b0f60fb3e63af37c3c2f99b2add4fc0e5baf1a22de24f456e6146c8dc66a2ecaafeb71dce970083cd68 b63da69108fad437e48bd5c4fc6f7a06c4274afc904b77e3993db4575d3275fce6cffa1246de1346c10a617074b57c07 a449448d4156b6b701b1fa6e0fe334d7d5dd758432a0f91d785b4d45fb8a78e29d42631bc22aaa4ea26f8669e531fed7 aabe43de1350b6831ef03b0eef52c49ffb0ccd6189cce6f87f97c57a510ac0440806700ce2902e2e0b7a57b851405845 91015f144fe12d5d0b0808c61fa03efe0249058e1829bb18770242f5fb3811e4c8b57ff9cb43deccfc70552e4993892f 8e9c570811ce44133ce3e0a208053acb2493ef18aade57c319276ad532578a60d939ed0bde92f98b0e6a8d8aabd60111 8b21839b5dc1c9a38515c1076b45cedec245d1c185c0faac1d3d317f71f1bfebba57c2559bcdb413d9d7f0a2b07f3563 90413bbd162be1b711e9355d83769e6aac52fdfa74802d628ff009325aa174c68f5329ddd552ef93e8fdcb9b03b34af3 8b6b02e3f9dd1031ebd3df9a30432a3c86e64306062ef00a6d1243620d0cb66dc76f8d0d412eceff877ff8768c2696ce 9894b41d9fc715f8f6addace65451f41dc5ce7b983dd8cb33757b4d7259bef12f144e0077d0b662aa847d5a45f33c563 a353a9740f6188d73aa4175a6c5f97898a05ed7aae9d2a365f15b91dfa7c28b921fdef0a32d90b6fb82718b33d3ddb8d 984eab8faed87c403c9979f2d2340fb090cc26d00cb4092aeb187c3f4ee1df3f57cb8363f7764073188790b16dfc464b a5c5ae0ba435fb7f3ddd5ad962358da326239ff236fc3b51bd22e88296236b109951cee1b98f444302badc58d1b5bfbe 880be1006b0156f2788813432f450f613d235f41aba52a6000d2ad310408ad73d86b79f6081aef1e8c51010d404ba670 937da751aae68f865c7a33fa38d718f20e2a1c65cb18c8e08f8441f0cdc77662789d2793794dd0a427cad30cd0b33f42 9496fde66c834ff86f205897db12bbf9a9bb78d9ba8b5fb539cd0a2c927cc6b4120c017b0a652750b45edbe5f650e5dd 97a6f409ffeb593e149307a14bc47befb632412d70565c5f13d6b7d032acd2e3ed0f7b6af701b387f11d69ee4a8094d7 97ed94934263dc0260f4f7513745ed3483cdddb9adb85dc33193c3a8b4d52affaf1ded23b59c34651afbffe80d40dc36 b2b26378d44f916bcf999db218b9892e06de8075f205c7dafd6d37a252185c2d1b58e2e809c717963d25627e31f068e4 b8f9fa1fb45fb19a45223f7be06c37d3a3501dd227c3e15999d1c34b605f888123026590697d0ae24d6c421df8112520 997aa71e3b2e8c780f6855e94453c682bee1356b5ce804619ef14834475511105b1e4d01470fe4e2215dc72182d9909c ac2cb2a7cf55aaf990cfada0218453853047e813d3f51f5a623d09f4714da79de6592671358a5edf938a67f905b6cb5b 8d8340d0c3081cd30d34f3ff6191e1ff6ad7994b4ebac19e5936f1157ca84e1813228b7605ee226366d6bab1e2bf62a2 9693b17669086003cb46c75fed26ea83914a54901a145e18c799a777db1df9c9ca6b2ea3ee91e7b0ab848dc89cf77f19 a6b6b2a6cd8c4922d78c8ba379373b375d66ac6ea04b830a23d5a496cf714a9439d81c865da92d52600aa4e2e43afcf1 89cb665020abc3f5e11a03c7ba5ec9d890fa9ed2630f1443a8e45a28c32786ed980b5343ffffaea60eeff5b313bc0d66 b37b989106594221bc6cf33a1a83c3e65ecdef279e90333a9e105b8139dc28384bb2277edd4b77c9e59d15e6afe074c5 98ce5aee5918d18b2326b30c1ba41669cce20bc7a1d1b585363305fbdea66055164a7ac398ca0f0e670291a3061022eb b57f472d5f34beb4cf430d7c0f8ac5bd1c0621a284633ed36e6f7804bc2b7847f54b469c7ea163a436510d9e3b32f97e ae673a6579dbf0504c8fd0c8fc0252d2f7ae8da615a06f4d215c2f8a8f516201f24e5cc42967630c252905e5dbbd6377 97c1501835a31091a5a83f0546e01c85ee847a0ca52fb3cc0653f6a826e13d25ddc623a5dea139108f7270a1fd7043ea 9376ee667f3834f6c0da4324fdcca5c04712e0649877ee19da79a2d23be24640c38758fce562470ce2134ca34148ffe3 818af89c40379a10074cfaba6d5968ecf667f1a68a7edaa18e8977ccb34e0829f237c5634fbd079e7f22928b277f1096 b8e0af0be0a252b28df25d4a509f31878bcddf702af0e5553393c3dfd4a1f1247ad8dc2668bc8dedc9b41f6ad8e71b15 811667ffb60bc4316e44bd04573503f5b4dc44d1ec824393a699c950e5fa085b146537ddd6a08a3fede7700396a0df7d ad834cbf850b2f61ce799c4a0f8ab0c57039d4e1113933c50b0c00175171aadee84894d1376cf325bfd434c3deb44315 a8b7dfcdb40373ba4d55e751ccfb9070554434df9e359fc165284ee3dc35db6fb6055657ecf5a9e9b7b8e2e1abea4375 b56a5b9fd41c9d3f65532aa58bf71a38fcf07782e1ae0084dc537862fa02e6d66658b19d6f71c39cd5dbfac418da1837 a935af5ed224b9533b41a7e79f872f6851591da9e9d906050ccd1b2c772a1d6d010c5fc7160c4f8cd7d3aa14c3bcdc26 a81e580fc98692567b28323fc746f70c3139d989fb6aabf3529504d42d0620f05327e3385c2bd5faea010d60dd5c8bdf a8b352054cdcde8ddb24989329a249b71498a5593a13edad1e913c795dcad3d24789abca9c7ed1d57efcc9e3156da479 b0de8a2bd7f93284b2bc700e442f52ada16a22ad8d86329591547411c23fff0333b2ab0c9edf82bf7903ebf69916eed1 843e9781b653d1a427f3534b2e86add49d308ca247546f9fcf565f9e08df921e4d969e1b8ed83f3f849e98c0f63e39be 84a4098c5dca9f73e827d44025473096101affd7193c40a0307e3215e850e753e9a08e6e74a442d57626ff26df77faac b463eaaa2f3315b511c22a97fad353014d840a6a95fe0d457d0677e63e571407d7f5268f8775381a5e7adc3b4163eb88 ad0417edaa16cfddc288eef4173aa7057ca4f81e815541ac588ef5f24b98d56fed6845deb6ae1a9740a28bb1cd8780a7 9271963b8fb2288a96e07eac13c0543ec41abdc6d978bd7c44ae08251ea49994412b542c77c8208cd71fd8e7852d4a70 8b68b6db9044d8bafc155d69e0daba95cd59d6afebb085791e999afed4f33a2479c633d31d534ff767b8cd433d591a23 a6a06a0e433e385437d9996ce823abda9848754aa9cdd25ec8701af35c9ec15df999825669bbc2e17cedb597a96e8eeb 94d414bff8b6b8597634b77a77d1060db8e1af0d0ddfb737a9bf1c66c8430e93a425510af2464bce4a7b29bc66cf325b b6514049562af1c6fb7d0e8df6987b020f0b7a6e721f4862e36b1ba0e19af19414ede04b346be22d348b50875803d1bf a42c7fb34f2fbee8aaccd1d86672d0acdf4e6bb083ff0456512d7e1e43be041cc0924322fcd986e6e1bce5d5ecce6f92 867cbdd169a52440ae0a75d33a28c7d00aa92b4b65aaac5e62aa53a8fc367c08ab8828cc8fa18b6e7d1f908d158e3382 a6fe0b768fff3e4a6153e59a7b7508eb2ee8165eaf5274d41ac2812bd4563c4ca2b132f0e27ea2f1c98759cc3589b61c b3eb1dba43d10b9e17ffec8def053fc96f9883bacb49330a089a0ca5b9ab0182e8b5111ad4aa55c1ce1b6f4afa5c70a3 a1531351098bdfcda566ff4d811301c0305626c77f954a38420c490e7c684f517eb1a4e4bd2c3904a10bac889cba314a 92278d106ad2f27eacdb86bdb1faa0a07a93765bb79dcff191873c52253af83480114b2299ffe5324f9c31d0abbdbbd1 8900ba95a90c447fb6fa1f528af3d7a378aec25feb0620516b6b97e54b328fc31af42e46a8ad5e6e3029d83a6f2bbe5f 86053d481179c1ac910d5e7b9a5de82794b442f20e854583512ce1f9c3f09e71d1bf97d6700fe776debfe1527ab97a82 a32a60de492fc4340336416bccbd2591b5e414fca0aead82281212e24490acc01747537b3da783684e27aeb987245cc8 9820fe8e0338f21797143f368177e3669a1f3894b40ae9fa3b353125f7c8e85cc424dcf89878f2c7667f65db3b1e4165 934d64711b4348ac5e1395cc6a3215e5643b540f591380d254165486b0ec2a1d0d21c7d2c6310f9e0eed3d08ecf4b57c b9fd32d589432eddcb66dc30ad78981360915854cc44b2afeb826b5d48a08e377dc91be66f5bf1e783d1a8bb320f7ccb 98c972cf01efff4fc2e485b47572e2d8dde22461d127ef401b71a111b0603203971e3cde40912643affd7341cd27e57a 8db6c1620760063edabd376f4399b6e1355462e04f5c81cdcb3989fdc00f9a466bc85ed899e886c89c149adad69edbad ad7b7fda0aa6e2aa66a27235ac5cc680aa04b85dce329fc4be84f75c9c961120a3d9e446aa44539aaac8ea203eecb4eb 8ccb01eaf41d816ce69ebd57754859e263530915e775c4e7d9dac37b2457a9099b9ae9b4c6cb09eb5ff246e3c9320c59 b895b83b5f7ca46e02697dbaa6157df6c7571864c83e504a8c77d965bc2ba97bf9353a71c56a020df64498bd40e30b21 8018c07a81c522fbc25f2cb14f2321c61b98bd8962ed8eb7d5823dbe5d1958a5ec2fb5622fd0868e991bcb6cae016ea1 95b16364e94d01b3664812264d7185032722a4afc23bdd33bc16ae87ee61816c741657c37138d9312cebfb5fcfbb3b2d 94a709209990a8b09bfb4b9581ab471aae3a29526eae861108b28edb84aab6d28f1d7a25dddd8150b70af34bee4ca2e4 ae06c80839c5a13269b984ff4d8a5938c6f4d8d647b1b1daa8cf7f6145340b76a286cd615ec251a65501e6290162da50 875cbd0694eeb90d3567da9dc7f570d97b02bd9cf17bfa011efdd48f1d580608a3213bff4006603b8b4079fa66bded10 b27f88c455f025e1cd902097d6a224d76bdf9c9195adee30bef4a0b0411fff980787285896e1943a62271d0aca531446 8024880cde783cdb2b863e3dd856be92bacc5b2a1347e96e039fe34279ce528560d2df7d4d1624a4595dbafb40529697 8883d02c2a5c0e026d941c785128d4ac6f7a9de625ea735b7d6ff27a5ba10fa4d6370d450d99a855d919f40d64f86afc a1beb985c45fdc30ac536f1c385b40b6113ef6fabc2f76d255490fe529468847a776efa674ba8fed72180f07d3f701f1 ab83bd9b007561695210e3276fde72e507456ba277ad4c348a2aec7a6e9ebdc2277cb4bd0bca73bd79bd2240a1fc4456 8db27f516153812149854fd6bb1250e843a3ae1c9637df818b08bd016a769d0497ab6087fe3b2fd4080882713607bf46 b3891dde4e00d60386aeff161b4a0fbc30bb31ee7918ce5fc0b49aac3238a000ced192c9c4c08d90de3a0ba973d7cfd6 90a2049a15c02e59024a7a1cb0adea97501c60b1c7442fbbe560054c3d69264e69627ac57b7d9be01bef498bb2a60198 87df67a4bd72444b5faa4f3b067204c4927c869dd3b29ad192d859589a9b2c1d6d35ed68310081e140add254a9463092 8f80986a8dc8a0d6408ebbcb4f234e76413c11cb0d66067f9436bb232373100f20a4fded60f08dec3525315abfaa8523 b061e10beb12ba3683688a4ae3a91600d14878ef78a308d01b93e4918efc666450e3f7b0e56283468e218934231df98c 86b9e55f3783d62e381659d3e06699d788b88aab1ff99848db328a83c97d223f602201bf2127c5ecf419752fed0a224d 858d878e29925c87243e010020007f96fa33264e89c8693af12857b362aee3fac2244057e159651c476ebe1dfbd67bcb 8fd47cdef87d7a569ffce806d2c2dad100692d6c53e5f5dfc6e274f897dccadcee30fc6c6e61373961bbc1f3ecbfa698 892f2822daf3df3a759bef03168c1cb07408df62e024747a788e94d2da325f880bb9c6e136c7f6643f45b021c6ccb654 8714e37ac24f5a198f219e7c88a92172fc3db129e044e914663ac708d8101851e7c53fce79d32d0e6da74f2ccd1d30ff ae95e1dbba8b9e2c8dfbe1c202e9ccfd04fa396470035a699b902fbd86d5e6a31732a7c8cae00b9a4f6e51c8d560c7c3 b0cd058e77498e860fa20c5f8d9bd09bb249add1badf84ba8d1bd49e704b9b4bcd67a5c3d211840a2c8fefab3fea639b b78e468d3a7da0dd481f333ae56534e2ef97587be2e259a458e25aa37952aed1cc5f835640f812d8052f5bada8f57b12 835de7965c6b26e7ad1b92eb6f0261d1f376fa12d61eb618d9b342b597c9c117a5a8f6a36269aeea88072b4641e6b5bf b4d0eb99136b3643468c9c48a20fad62785a60fbdd3c054efac4bd1fa7979b4c9ca6c2c0b18069c0912bea2f19832790 a00c47315dc0700a850966836a95f3cebfde04dd094bde0742dee77b89a05b5ad655921f86fafd1e902938ff34d4c58d ab13fa0afaa92229a71ee91efae6d1b15f14b6eacefffb7401d41d0d6db24e24a8dbe8ee19b4680ecb69d2a0cb4e84e7 aa56c0fb18401210062dbc653df8e3732aa8921a1280e9737e99b26a0100a13a9cba8ad0317a69bba16193362ee0f030 8b410324a6406b345df0fa25f541ac20b7313fa55832752f70cf4c79f43b0bd3d5b4cdc447e6ba7bca08d0edffa8e29c 893362241ae412d9e5df46506407595c58ffbd7fb1fdaf0694c3432470599291238997abe118bf7737e56a4f5c9dc292 921618194a756be81cb49d6357cb392b32cc62d96c8ffb7e16d9659a0f226a0436bd378da7b835054dbe0de2c6372ef2 94a2904f10994928ff5367b777e1430047736fbece33442cf452018bfdeae62e84cd75cf80f8468285e347d504c94111 b4b81545b767f380bfe10e0fea9c3cc62ca8db40b43c83ffb245259378731298e3eb6c3bdc3a16932f88f5d8a86edc4d 936203c2453ff01c6fc635e4d54320d69e60047d805daae3b75633c2259108497b778f011e5a057249f11b2b888ea76c b90bf6378d29339443c3f2008b1e2b5f0345f86e393027f14a295e583bf6e6c2b10f54b6dcc42079ff0d356c405b03bb 916913f550d327de2d8d6c7723dcef2e3869efaf95fd963d95c8980b97748c61ad8e2e629cead8577266d93fe39203bd a033c6f3d5ecbabeb83eb363e54e5faa7ed2d7f4fb771b161762c4f003eac4e1afb236806b784baf2222cad54e2d3cd9 ab289d4a5771147e6c29ff9ac2bf65d70081ea6c6af2d9b728c3c144574a31b5fd8632af57c18c389aa2cd994938bb0b 9488da2019ff13e290eeac132b491df58b5b7b23c2898ff1a67bffd7e9c9464c39bc8177a57950fd28589e3d9ff9c6c4 a5abe42b2e0891851440fb2aa6c1d8a86b571bce8b80c8e9e2692e5cb6d45a1b2f055c9fc4c74a7cd292871604129ea9 90bfef698e83c2ba4dc9304aa01edd274169a978b7154bca518daef394f55857d0d1922ebef3d91fc5ecb3b895d9e0ec 92328f1372b6406ec80786041b6d57018b8507e3881a08727aadfecfdfcfb0824394cbb1150117ac5da5d71b89e895ae 9719751c5f7a65ae2bed8aff7b4b8c34539ff011b259b7ff54f63f9d987b3fbdce5c99534ed561aadaf07bb6e939e208 a151816774aa9379fccec21cf212429a1c68cf91b055cbb9d931f461a8d5616c693331a11ac5c6fcfbd17d84ee0b44e4 a72977b1285618a45943ad00f33f37102e2885eccd2f76785254eeca495068fb1d8d49865343e9e8313c6c2c3b2024da a6f5ad2e023a1585d90625c9f7094f0e8851c79f0eede8ec582ee8e063407cc5b8298e5fdc4c786e4fbbcecaf33e787e 82901e008febcea0c0a14ae21d985a397630e18ee6e346f4a449f23be228e8f338df567d30211a11180b94fbc5204bec b9b57fdb8d14d1be87a25f89553b3966eb7869e0519ffdf4cc4d51f4cec90d68f7b81cdc0450e04207276e9c63ace721 a06eabcf43585a001448f3dc30411f3d5b74fd0a695c81eda9981842ba2bb0081d3f5a8360aa18b6d43ef13ea78b293d 926fe48a7e8f07559b7237beff9504476dd97b5b4d67acd01a3633358a6ba4c7abed5c87683a11209aa2ee759888e00e a716cd3a84a963e2a5a46145b6ef4ebce705de52bf2945c374152a1e41c228a9c4eae0b6d1e222c1eea8b9c13c002177 8a9b5985df6fb32cdb06ba1591a977545444478f2fe985ed1b10de61c630f0a4693c2185d63f0dc0256b208072c43b17 a8eab26ae0ebcdf96a59fad1dc2d5e83b94abb2ea1774b607023f9d9e0fe065853b1e2242e794f989a80a47f550c0bd9 84adbf38164cd04f3d770a7f4b8eae7a5d25b4a803fb63c02b95b71b33e454319c44e07a760d22bf5f58e7e372d09a16 90f443a3ba1b9129a0bee400b5b29d42e50bb2aa56b0022bbfc3c6f8d69db40299871ec7c1b68421cc89e1af6b13a39a 81c5a94b379eb98c494a8d0067c748ba47e87a2ada0105202ed7651eb4e5111a0cd8569b06ae68d392c4fd74a37833d2 8f92324b14a1549ee0b186073a26691088e41556d33b54258fc6e0b000e9624156db4e97861a0ec22960e6c47ca8a1dd 8b021cd0fffe055068cc460aec3cc455952e2ac32be5fa060e0d1b6cf30ed15381618f801249e893b1b9f10dd82077b0 b3e9f0dcb3d6f0b138f589fa54dfb01f849890ab97016372d004aac55103f363a64bc0e606ddf75430f1534a30fc522d 8fdfe64af891db89b25daa859864d479cb7599486bd6f36e593f8f2f839f942261ffc3eed5001a93fde44cbcdc24c583 a9e4554373c5073e135874e2bacbee69c65308eb0785532fec6a37834e8d0b437b77a2f11cc63c87d7183b82cd9b6bc9 b4c47daca723ad7193ac5098cad4dcab654186ec5ea5c0fd014a3ac39726be954565a901694ba211820c011fa1c59e18 8835427e86cdceb4c11cbea331ed724e4e78af15e3bab5be54f6b926bf66b5d99bcc40dbc456d86342c9fa83a033c2d5 8ea84590a400cedba047c2661378921a42f5ca0421da58c1bcb37bc686a2aed98afab3fa5e6ba3a51029390ef3cdf4d4 b48551170fc479d69fffb00fae4fba301e92e37cae08f596db6f6489c3b7020edc074f9e8d7465b84e9dcef1b6b3aecc a6f318b1eaab00836a330710e88bfe400395b3081485f6a212e3cba9463f6fe7864ba4f71e57a411ecdf2bcb4d189f96 848d5137a39999141a79f4bdf91150796ba36352d8525821bf3bd6e070b352792d79147341b8254dd60fa8c36e9e2618 a8526f8904b1eac4ae2a25534aa91e8031e9aac7b8f58d8f49897e920c36c0232f4a30aa6eed305deb0f7793c115b267 b8b6a727c44c37a8388383e959d195d1d0e51a657d4ba360633d219d43c5df645383e2406c25f1d418e72b862c3a6e9b 92e64adf65b42c978f36dd03ab22ba983bfbb61944efccdb45b337ceb486beda99818bf20d32a545503c4572bb0a4983 9653bb83df66260a0bd059cd4244ef7c661b089e403d26ba777d2090783ff31f963f5d3a9c125b1ad1a1d19134f3fc8d a74e72355e71ae5eb36dc75191643500ca3e67f18833ee981010e7e7e60a68e1b01b05901eff05014b9ef29aa4829f45 8b2139a5da14524cf6acc593144db23db424b95b8c7041d8f6c7a14a6725dda1cd09c42bb3ae26a5a3650affaa742800 a60ddff4300ca44a7c7a00a1f98441ad1438e07c30275bc46551cee1b681926d2c825cc8f90399ee5f36bb9fbd07d3dd a04e5e9958867a5acc15fdea0d88951cfebd37c657102f6ba1dcdaa5e46cf1c823ad0d98718e88e436f260b770599102 95e977abeb70d46fe8d7584204770f14c856a77680607304ce58077550152733758e7a8b98b11b378540542b1175fecd 8c9ec93ed35a25ce00d61609e92d567459a45e39922ccd1c64ab512e292787125bd4164c00af4cf89fd3cf9deddcd8bb 819819ad0338250d9c89aceda9e217df12ac54e940c77fb8420575caa3fa78930689d0377ba88f16d38179a807135dc6 8baafb379d4150ac382b14a64788d819146480d7a1dccd3deef6889686ded375900f5df069843ef14d754ad3d7540401 ab827236996bb79b447714c6993af941c5ae66248df4d9a6f3650d44b853badb5c0cb67804210e07a7b9d66ca43092f6 927656c3eac8d2eb575e3daeb77f9605771170c325bee6aeade10c083d42bd8dcbf3bcc3d929ea437001c7cf9a95e2da af22b212d5ee44fd4197966b9690487c38a119cd6536cfb8c181f38a94610dd9e057f95774047a446504dd96dd11e326 a44bd94b9e01e3ba36340f2ac2201ecb477495d4f1fb6726a6b439302deabb5a35d237c6a6aeb7e3b0a65649f8656716 af367aeeae3bba14fbdb05bcc1a521000dd9d37f5c34ae56fb306d3dfda201d0329a8b6e89d98e15825cb3c6bfdb1194 abcc4fbdea43e50ded9e2fb01464f4e87fb136e960141e8d39214f92794cfab5634f22cd40b18d8c0e501f2307aad23e 920786cbd674348b9853689915dfcab02cce2a4596d117962bce36aadddf4bdd143891e22f2c8015517039a64e8aede3 8cde63b9bd57cb3ef743f1f3e8250669eed739e5fbd68c500a3cc0c12f93862a69aebcdbc69dd8f476c2eb307f572a53 b967e65a5f1cd8d5d570f5e87e7e186fba51b9504f8e466392a76d8a971fb91fd9b7565bcc1647f50d7d15e48b93bc95 8d5a87b25fedf5edd57d870304bfd9081dc78c3e3e3b38b997260a92edac7feccdaf24feb51822d2edc223b70bb4ed5f b6cd5d340a57f8ec73723c4f3ecd6601620dc8137a3e75a5d3c578bc79a9cae86b379950c644dee2ff99dad780d025c1 b6f0a8e754b7f52a85a2a2e6512cfd017f7fb0418d19bb318308951c4e242d3c65bbcb9748da9cbc91a738f9ca577332 a89dcf7d410bccec385400dd96b1cc6af89026a431d0f531aa992cbd7bc8bfd7c5f360bcb665bda1d72efa17bb982551 97788e7522427a46c4b6258d15623ef7a565712812fa80d001e1de8dc1791392702f3fa3cce5a8cd1c5755625a0ad10a b5338fb5e137ff625b27c5148298f27ce8f493e2527c5d0facaa49f29cae34580d0d6c3c1074a2e46cd8db3f56004ea9 8962f006d7b1095dd0dd132ffe7e87e328510c95ad893cf3b2ab21c177c5cf2c27f47d8856f87e9762c547be009d25c0 87fee9ce9c26aa476e67e0791a809e0a06a8a98facf3faea730d438d3e516cdf75d645fa75c906e4e44ab9237a22c016 b75ab972e1a1214bab0b38cc3e973d44bb233acda5b4291f5e110b6fb78fdcab93dc63f01168debd898e165f615be1f7 b5a0fb52bca279d3853761a94b206acaf313df33ae6303d9b71edae90b66fc507adbc60fb11e758888736c81d5d80c0a 849b8f0005010e684701cd3a4e59e8c89e5fec59af6d2de5b6332cde03b865ea84f07f0b80ec3404380b0e148fbd2c24 96e2b0b6fe78408f9208f809f5c40398100b2dac202c8c5c33c2189560dea868270a598c419871a5a2b67783354f6014 b234b81f996142d0df2c719760bf996544820a03195a6dc0ff6a72543692f5a369bf63d1f0b477ef2fe7b3234e41f685 b85e39bcf40da1a12a535740176f4de749a93824079deb5fdaa004f3282fdefaf5275e3418c88c419bd42a3dd2ed2b3b a27279304b89a18a4e2b443246f2368fb8b15f46a34533179b6bd2ef683f6e98e222b7a32880b39b8fac1afa90133803 8923c22cf15c9c1964213d725b337ece9ea854775a06f75f232c4859c7142a3942f418354e33066298aedfba3cb27e62 b109f714311fb9bc431ef57911e2cad6a3949455b9f23255cd7edea35be629e07f845fe53e2b12a32305ee2f4f264f27 b51e82ae5c7d48050e405897d0053e9ea4b2714d002e88f78c9a307cd50b9c6b3ee7cb86f86527be9d964b01895fab20 90db256931c7f98bcf3bffff4d496739185e7a20f329ee7bffd4e0850a37739948ec745285703967f4ca50ec370cf68b a0485ac0445d88dafac56bfba2563b020cfc370f54c1606c89d12cfd8a4d1336d2ba50306e476155a6f5b0e0a1f2d092 a00754c3462e74bda928da855bbf90f9077db395e32f03cce9b2955546d900b72330d247b7d607b65e130f5b0d883de0 8547d56727c3ad8b5c8ce622ed9ad86fe8cd78e6e4848c9845914b5063b17330bd10b46d8d3f18f83ca09ecb28d1afb2 95b937b2a979bce0e159ac75c7d5d659be8599c92305e73e942aab414793364a3ec28c7c1c8491a5750ba84a29828d8d b011e150f0294e45a0f4c69409999d0c2e602449dbd67ab95e8258466687cd733a0329083a31b03722f4e2580ddc95e9 924651a733ad5e5d9adadad3ea6a6babb8e455c8d5f2cb5bdc83fa422e7752592190ccedaa827b866861e73506a6968e a4d5180122f8e31503ae027e54da50f72f5cfb910a6f7309bd882b5cd666f454672591f1f20e461e182a47d03b47052a ab19ae659c4f73ea3d21895269dbec583c7029955a36469124ebe295027010faab56c4a475973497f28e9a77c03b8fd0 ae7ea1a803d0f439e91494f8f35fc1167dae23834c0c699ffe65d3da8b09f8df5a53195a99ca7b8558242279e69578fa b9d63cf0e30f9800101b43b980bcd2f229758e74b21ad5354866b4e684791c08a184330dc316228a0d67fe0210f2bc4d 8c41629744391ddb96dcbbf9cd99b13d36e57d65962e0aeb92ebccf1c4cc769626feb3ec0363def08eceb102b3dd4ad6 b2848ff24faf9e667a8c19d050a93896e9e75b86595f7b762c7c74ccdfb9db126ae094961fee7f5d1192776c1ac1a524 af013bc29206743ce934d5887b8d0fb3667c89bda465d2321835a3618513fba6a459dd7566268220ffce7e0c97e22b2c 8bb799e36db1132da8e8b028ea8487dd3266b4628c56dfae4ea275f3c47c78e3d7445ab8d0aaee4cbf42148b3a148175 ae2b81fd47c038b5195a52ab8431f0d3cab4cf24c4237252d955aad2156adc16dda9d3270157e0bfe5a44022e5c051ef 8e0129213b1698d2ec6df132356805a8633ba79e672e586dfef664ffccca71834253ba14f296da962651fcba2c002622 a1ae30b500ae77cd9bbb803d737b4a5991cc780618ac22b5cc179efd8fe10afb8c135457f2e7b86ded485ea12eae70e5 8a39723077b7c0df6e3bf6548afa3910c214ee275951fbe5155a39473be98099626ea14d844630a6fa90292b9594665d a628386c79b61aa7314b01d9814aeec20c2a66e3deda322a39957e7135c2e52b1da486d1b9cd61c87afb22c1d10f6462 97867f469b01249820aadd9a54e12d4fdadd4555f2d530450e1f8f6d2dae57360578e2c2c8ba41e3b5950df596537a98 97f192d0457c217affa5a24267dd16cb4c01de8fefde9df4884e1906d2f22e73382dcee6c7d910bf6430bb03f4a4f1e1 86d5b5739de8442dc74d0d8dc78e49210fe11bf8c6ff0f0faecbc47b64812d6b28c8afddf6d9c0212f1988451d6ccb1c 8ff3312ce9693cd4a9f4b8e75bd805f65b0790ee43fd9e075fe4cebc87185bdf161335049819f22530f54fed2779a5b9 8dc41d85548bee5d51941d55752a500bde3c5a8f3b362da4eec307a963968e26605048a111c9166d448b8dddf6f53892 996bdfd004b534151e309ac925fa5ee7801c9da4f6b4c43e156d1158b134535a2a3956e1255e0dd72ac2af6bddaebcaf aead652704b788bf4983c8f725c644c327a6e9f6683215f5c826c09f82fd2e40631791f51d14e6aded91fdc018d45501 991ffab58a82b98ed8fc7b00c3faca153589fe09cebf6a137ad506387a1ca4dba475b0e4a1b9bdad829f1422facaec39 9652e6c4ae084221d6bad855ec0bc11b5f855c6efba67f644e0902ab790a98861cecc6ce047c68273c3aa7eeb2f4c7d9 b88b816507aaeea6dc92b861eabdc96988b74d7883f20a4b30ba249158acaff3c50d261742fc9ad2e9eba888a8d59065 acd028a51e16c07a10d2073b9d03070457ac5f1246365295a1359d015c460b92b4861125fabe6f114de8197045df408d 806d3cd9d02d41c49179fe7dac5b05dcfc9a205a283135d4f008d0771c58e6f963d7ad0f6798606edda718eb5c7ff3ed b9b71f1657a6b206fc40159a941e127f252a7b324dea864ecd804f48c0ed86da9778a925fb65491204a92bc2a26fef32 80ed67bd0e74350c875abedc0e07fd42ce7cb926f0f3fb1949c6ac73f2300b5a14a5c6f6ff8aed99d5ea5029bb8e7ae6 9875f67a7a473714e4dd75ee0c763ddf88101532d9680724b3848fef69e218b04a96b90f88e0f4409aa40b9a21507ecc b4a2bb1b421e5243e5e7576a0672dc19f9f70315a03f6411c19f76616ffbb70fc5dc0e57fd4ab85e24ea2261b7ce38ab 879723002ce43e6c75ba2246f51436efe3376242beff987d025c3c4476495af32d52a54fad5d9ec329a442b93bcff1ce a4121efbefd9c3eb143619afa52a916f199c75024908047763b29466cdfc837c2fcc894aca63044c33c41c777e529b5b 895f637b497a9766714a3d9e3c275a1f0c9ddab105bf4c8b7e663f36cd79492022415bb4938c1a4849bda73106ace77c b119acb8b161ce4384a924645a248a656a831af526cd337d97e08405415b9dd22060849c76b88a4785eb5e7214961759 802e712f4c0a17009c4be6c1e5ba2ca3b82adcb68793ec81f4489b7985babd8a3873d544de63d5e5de0cb4dc5048c030 ab111051e4651b910c68ecfdc33f2d99e7bf4182df68cedbdbbcac219a543e04d93ecb2763fe32b40c095c7ca193c331 855c73ef6afc6bcaab4c1e6388519fd5cbb682f91995bebd558167715db454f38012291beccea8186a3fb7045c685b67 a29d02ec6d9baf84c19dfd0eb378307703bfafc0744b73335550f3cd1b647275e70215f02d1f4ab82a5df4d4e12dd938 91510a45b8a50cac982d2db8faf8318352418c3f1c59bc6bc95eab0089d5d3a3a215533c415380e50b7928b9d388ff89 8286e7a2751ca4e23ea7a15851ad96d2cadf5b47f39f43165dde40d38ddb33f63a07bc00600c22e41d68a66fd8a0fa51 a413d4e619b63799dd0f42ac57e99628d338b676d52aec2bb0d1bb39155ad9344b50cdfe1fe643ff041f1bc9e2cec833 85524e5bb43ae58784d7e0966a664717289e541c8fcaff651541718d79a718f040a70aa8daf735f6635dabfc85c00663 97f0d48a4028ff4266faf1c6997b6ad27404daa50ca4420c00b90f0b3e2d82ef8134d0a04108a74955e61e8dfeac082c 8df6145c6cc39034c2f7331d488b8a411931c8faa25d99c5432831292637fd983d4f6b1a6f55522b4a42a462d63c6845 98c2060f67a916991b391e67fcf23e5f305112807fe95bdddb8ce6c4084126557e4c5f003afb32e30bc6808b30d4b526 8964246b3c2b8f7312f0a99647c38ef41daf70d2b99b112412356e680185da6810ab8ee0855ad7409d334173bcc4438f b56c2c416a7069c14bdb3f2e208c5a6ad5aac1cbe5b1faf99dc89c7141d0259d1c6250be9d9195500c4a41182ad2ec3d b7864583a4cae3b1083dcdcff7f123d24a69920a57d6594d0b7219e31bf0e236682442b6499a1f6795cfeb4f5f236695 a064f94139bf1b70d476bde97099631b1284aa6b4d87f16bfc65c075e58b2f1b3c2d057605259f806e545674a1169881 80d1bc4acf14c0f487cd57c5d6157b7f38917e93cb660f1c25e474fcdcac3c3dfda50f6bcccfd6676bae25c4b6b5014e 8ad9a4976c4e3e282843518149fcf5d454240740f4b91466f6310b7216d23d70b9b47c42870293252f29f092f330967a 914197593d2d99d784c704cad7ecd3f0b9f55dce03fc928d13e1a1034566c4de754f1c2a5ade047b0956415fe40399ec 8d77f5e29c572ec3c0ca39cbae2072ba4102403265b3d8c347a00386da9c0b8688d6e3280c96037c300d57b3545f3773 abfdf79d935fd4f06a04938d6580a8cbf9735f0d498f49677f26e73d3b34b7075d525afcb4f14ef1632cb375bef7dd55 a97a8c446e3edc86efac7bda5e2e5d0158c909552a3bf86151df20ece63b8d18b608f477286fb1c7f05605ab7e6a7c2c 8618d946c7fd62486551c35486fa466bdfcdc63c941e4cff5a01fbbe566b7ea9dc763cbe73e2acae063060b619a212a9 8d03ee468070936004b06acf64b868963f721f37faa09887f8a82c155ad5c5732572a6855b531db58af03b1afe034a18 8d3247f75966ea63935ef6049f7c889c1651374adb446f49499fc9191dbcde7ea33cbc1f1e2d3d1756b6e69870404643 afc853c3a3facb4ba0267512b8242327cd88007cef3bf549184ee891b5ddc8c27267bae7700758ad5bc32753ebf55dae 80df863eaea289de5a2101f2288046fdbfaa64f2cf1d6419a0e0eb8c93e3880d3a3fdf4940f7524ea1514eef77fb514e 8434b5888c2b51d12d57da6fb7392fff29393c2e3bfee8e3f9d395e23ddc016f10ebe3e3182d9584fddbd93a6effcefc b78cbb4c9e80e3808c8f006dc3148a59a9cace55bcbb20dd27597557f931e5df7eb3efd18d880fe63466636701a8925e acb140e44098414ae513b6ef38480e4f6180c6d5f9d1ca40ae7fbadb8b046829f79c97fe2cc663cbccd5ccf3994180c6 936cb8dc959e1fc574f6bb31f28b756499532ebb79b2c97ff58b720d1cd50dc24b1c17d3beb853ba76cb8334106ce807 adda2116d9fab2c214ec10c0b75f7f1d75e0dd01e9c3e295a0a126af0ea2c66373d977f0aefdda2e569c0a25f4921d0e 89a5cefb80c92dcad7653b1545f11701d6312aef392986835d048f39d5bc062cabc8a9501c5439c2b922efc5f04954d0 b9acb52747ce7f759b9cdc781f54938968c7eeacb27c1a080474e59394a55ae1d5734caf22d80289d3392aab76441e89 8564f72ce60f15a4225f1a223d757ebd19300e341fd9c1fe5a8ece8776c69c601938fa2d5c21b0935bd2bb593293272b a5567d7b277c4ebf80e09c7e200c20d6cb27acbaa118c66ef71cbccb33ee3ddce0e0f57b77277ae1db9c66ed6e2d8f30 b82e9c2d8df1cdd3b2417bf316d53e9f3cb58473c4cb5383f521ef53e0af961ef916e4f6557a6d8b4655ec01415231cd aa816dfd2814c8a25bd2cbaf66303ee49784df471bac4b3188074ea30816f00f425234454d40d8ad8035aa925d74da36 9919f384df20faaa2d226b521cab207dd2b62420d25ebbda28c9b2ca76a2a52203b2ad7844c1a25f5c75f005c5a83149 b24a6aa35c2d0f87e36598b36224c64427cd69642b6f9c1bd478a62c70f8ee69f85028648f6603b4f04fb21355f2afb1 892e044bdb1276b455eac2204be105e1821f987c2570494b1f32aa09506caba7ed343cd09b1bc126fed5e0fda3d0eaad af0e01a3ad954dc048de18bc46bb1c4971db2467e839698e4dd05cd1adcb9261013fe9fd0cafb946c0b586f6aad86d4e ac152f0a9ace425378daf02510eb7923ff1ed2c0f8d1deb918e4efb63655de1ba58c96438e9aa23abdf2431dc771370d ad8c7419c097709347e2394195924e09617b47ac5c7a84aeb9deab8975f22155de0f70cf20d8a976551b14e3a2683a2b 808f14f67ae801536fb70a5898ab86e50ad35340cffd0648daed2f2c4564c9ad538034b2a179a6a8bfa27e9d93b4cbe0 80a74ab7ce4769db93cfa695a166db95f0a9c47885ff826ad5d93310f36d6b18b5351c67c858b9837b925e85a1995b63 95b88c3cdd64401c345828f4e4754b1a88b4875a14c08a668b90acd499b3b858842669ecd73a46c5d9f1de32ec1a0120 8ddbd770b7b18a5917eb43926fa05004e819f1d1ead05b915269e4a86b53e0633a90559007e59f6705a3769e2126ac56 ab6db5fc220754f19948bef98844e6e38dd623565d1695e1198040c228ac4fd863c1f168cac1d036bbfb718d9d8dd036 97bef628e977c069e60c395a17740e0e1bc1828f5607ae7f30ce5a0c95f02b53af2ad062700a75212e462aa22c3c5465 b68d465e04fd17ca98501e61eccb0ce30401855e98046e0c1debba71c2153d6a7a704aa36a6f12454696e78e87181cdc a79cfdd048f4181e005bd0fbac0a8424495474956b58ce858d2b700fb0f931c406282bd33bfa25c8991bc528d12a69c1 843f55fa0a6a0969daf2b48080738f30b269b2e7ec123a799e5b203c0b3b4b956dc95d095bc6550b0013918cdff8a225 b683cdf2823036827e5b454bfe04af9bec1850d25a7a7a44aee7696b6ff0468b7ed6885a41dde2b8f3ecc4aec880c3d2 8b500796e82acdc89778e0c0f230f744fb05f762000fee877bcf57e8fb703d212dbc2374887bdc2e7b7a273d83a85798 ac35a8ee87bafecb1a87f15abc7ccf4109aab4ac91d357821e417f9b1474d196c38cc41cd13667f68d1ffab5e79a6e92 b6e517739390cfed5b395d33b14bce7cd7aaece57fe79a7eb3cbf150dc10765c3ea9fef7976a21a2243687e6eea38ef6 b53901eeee26692273365b789f2a60afc9b5f0df229c6d21b07016cf4c0e7985beec748aeca52262f68084393ab038e1 ac4804f33d8ba2b4854ca3537bd8bf2dda72d4e94ff7ecaaf9bd3b7f098343d74d765471ef80072ae34f860b052cbfb1 8c6a30a93f1dde18039bbdd1ef294552bf79856e20bce863e4b8dd72d906be3ff22468ff3610e06b5a7d1745dde7ead9 88f0607fa3b7cefe20a02115572b16fc3222be86bb19e592c86c48afbe7e0dd523492b0c29a3bceb9a20f5538bc3134c a660b801bbddad725975ddf9a8f606f76ecef831f954be224d6178c368e1c72d346f00c4a4c95c289b62d36f2af323cf a75b9a6aea9542b698938dcd6cc2f6fe0c43e29f64b2f54aeb05d35fac73d41aa7fd750af4fa9333644aab8db90775b9 83e1b7129d963d1cd076c3baa5fe422148e939273db173e4d59d1858a7d841eacac7fe817d15ab8f8a493bf46c2045e6 9060a2e9c24de11f9c70e039b5ffe9e6d32f1ae39f3dda263610df2265d917679e689898e4a8bd84ad34613dca5e3761 b42fc8b863a2af15e04d1fe6693c09b46007c0b8298973fb4762b45b4590ad7fe0aa758918b2fe5ed1ed0359754fd955 83e6de7860fb256ecf7b47506a5e557d0fb0aefe57fb513c7dee2bd9604712d08ca26adca7ba9a54b712372a7c585a26 90586e9cbbf71475ecd3e7b5753b286804dcce61e165502a82b960099e79272de8b7494b8877b54ae838eb5d0f71af2f b2e4b0d21208f73b7b75e08df80cde20c4578e117d37092a490af82354e2afd3a7dbab46fa2d12fcb731cdaece69c2ba a010961239bb8809fc7fb4aa08fa30d33a130f9f417ee9ea60f587dcc5ef4e1b7abcdcbf8e848ecdcb7972ef6af46e78 8f511fd58d1e3403a5eefdc0a4ba6b8af848c7efddbf9575ee84449facde05ae9a24aa41a5725416467f6fbd11369c52 b24ebbd2d4482eb618cea1ac4fbfd9ed8c46c0988a27259300a7ce5ce1bb256aeca0357828cbbc4cf0dfafbf586040e1 b3ea29e9cca55250e9b7b9bd854edae40f0f0cc65fe478cd468795d1288cc20d7b34ced33bd1356f1f54a4291faa877d 8a8b20f222d9e65bbde33638033972e7d44c6a310b92a9d9c5273b324c4ad1a94f2a10cbce8300c34dbd9beb618c877d b2436a9a647dc3f12c550e4ddc5b010e6f9cb3f3504742d377384b625fc38f5b71710a49fb73ffaf95b9856047c98201 a13f8b77c70621e421be94c7412454adc1937b9e09845c2853ef72cdbe500e5c1bf08e3c8b8d6b8eff4bce5b8dec9213 b25de8780c80d779e6c2e3c4e839a5a107d55b9cccc3ad7c575f9fe37ef44b35db4c1b58f6114a5f2f9ca11e1eb9c5fa 96ba6ad4358c7a645e5edb07d23836cbd35c47d9a66937d09486570e68da3c8f72a578bd2e14188d3acc17e563a652d7 a7f55989814051fda73f83b5f1a3d5385cd31dc34baf94b37c208b3eaca008ff696fd7f41e2ecffc2dd586de905bf613 882d0c7c81e58eb9560349f35c35e4498dcde7af7be8d7974b79d262304c26ab67ffa5ed287bb193d5f0ab46b4096015 a607158f0c1fd0377a8ee5e9715ac230abf97406c19b233d22f5911ebe716967cc10425546dc44e40c38bd6c2b4bca2e 87e8cde50e5d852d3f073a43d652f7186bac7354612517cfaecd4a1b942f06fef6f14546279c0dc0262e2997b835b2a4 a1c93acc6db9d5ee426fb4a0b846bb7a7b8d5915bec777a9fe6907246b0beafb8938941c8c79ed6082155f75dbc1e332 b1e4f61457b86f76cd93eafd7536f72baf239ce5a62bd5a8085a34e90576b1e118e25002d2de49b01d6e9a245ee7d3a2 a0435fe9a4bd1031ec5973a103ec9396b2ce9fd982f6d9ed780fa80ac06a6e47a0a6eb2daf52df1dc9292db622ee9fa3 b66d8e8a1717e4bfa42083b6ef4490e090a73168b2912f2111743e089027be0a4945a229ecf5d0b5eec11b23f0e11303 8eb764f26904eea4f4169be6e75beaa6a39e4eb524625a15a78befe3d8e3cc82692d9b135590c20ed460d6e4ba630ef7 b7e4aea6bb09829e53fe83e53f49a7a331a6d7bf76e0073d758577e6d6fbe63dab642b23657355cad48896ad8715119c 8f94207982373a99ffa282673f192aa98d0c4461fb77c31dc4549628bd9687a249f1b3c66b1840929341e42516c5c64a a9c673cb247b13e17fa5e616f0399b7f5c7ad043e143e44ae68855a840870ab3d2aad737ebcf74c2cc9688d17ef3a794 b02635104dd28c02068985256975c0af783899eb996e37d021d9a35238deeea9e836760db21869be7b6c82aa687ded29 b33bc0966389710812b5f6698afa3e9c84839a1b85492ba11e6ded26695260abf66be6fb355d12d3a8524966f0f89e0f a79c0dd09506951c33da3cbc23843fd02d641fc24c640a205e6e8150240372847312b9381fb03c5d301fe4dbee8d0da2 b74de6f3a2c502b5b658ebe8a9b7edd78afd036f5a2736aa06502863b6865d131b9e3542e72a86fa2e1d2db4927661ed 99e365def1452ff9fb4b9eccd36ff4154d128469ba5bd73e83ae457ab53977cf6fc04a5d05bdcde357ab539e34bd9fe0 b4f2bfb95abb47c67870aa6ca38ac8f3ae1b1a2bed064b1be7ff90865ea12e4930fcf66429c7ecd1183fae4a01539386 ae4bde87f36b912e92398bf72e11d5389e93b2de1b277d7ed4b6fb5a9ab9f71a959ec3bcb734c11079440fe42b86fafd b826459e568efdeeb66688482b67ef5020787275123fd3192f979b6175e3b0ed59e17cb734a0a052bf13f0afc7bd237c a99dd735f4a7c85cb23dcc7f4835f9ab32026886909aaa95876b98029c37dc4d621726c872d3a9e50403443c958f4029 99083545034768010988bf8a9f34486c2cd9da27a1d10db3ab86eb69a1dd9c8ee723e7da4ef2aced63c1dbd53ccc52cb 8ac3209349f0142546c714ef7e9d1b094aab5469b8f080c0a37cb0362da5349e108760f272fbba770aa468e48d9a34c4 af5f48ed74b21e3f2c1430192adb4b804dc873cd7e8f07130c556c30e7b78df0ef5a14b205368848fa9185e5a68dee0d b8b741b65d68df89443523ba74203226f1e0d13bab073d183662d124e83e76cd318b2bfff09879c04d81b577ac895638 914abe4282d11176d4f2f08c6f15e6c2d0cde1ab4de00bbe888015c205f51929d97296a0a8d3ca5641f085a29ea89505 83ec306b2a9a6780efafe799df90b1aebdbff7d47921a136ea8a5648b9708a97231245a1082fea38e47ecafbbe000528 95d6b58d70b388dfcee4eda0c9805362ccfb60a87603add565b175b2c14ed92999dfdb0d3724ee3e5d30535f282641e9 97eeb4de607c8306e1d4e494f0d5db126d53fd04983ab5674ec5996b971899e734fa4011f2c889da21154ea1e76dbd2f 84ff21977fbd873ea06bec444d4ec9ff0e3902edc29dfa25f3bed269b3709e3116e99dc06cc3e77f53c53b736bf8fc29 8ecf483874a040a4a1c293af145094fedf203a5eb37c3e165857e108cce3e1210e0bfc0f26f4ae5e2194024929ba034d 97d9b92b2ef34609d69402167f81bce225ed3a95718a3b403f702b93e96a121a8f7f072d0ff47e8b25164e204d1576bf ab87c39cca1803b4e84b32e40ff30289e3cbbcfbe16a70f9e025643824752359be1f10c3e5398df402b6fec64d5a3537 af84ca57e6944332884b5c84750afe0d5950015e127acec161853d55d48fd864c7da8d59cc5aba4ceceac650b813fcc0 b1d23d98edbe7089ce0a8432e0eb3b427c350fb4bb39eb2aca3c2bef68c432078cb9b4b2c4966255e00e734fa616638b 8e2b5252e0ea96d40835ebfb5693af49946509975682d68651396d6bb1463f09e75fd0afa04ccea49893b5b9c3e77e40 8db25e762f1d4a89a9a1cbc61c01698e775906bc88a921b2905735457a35df9ab84bae12e1b1b8dafadd50212f1acda1 b5f7cd163a801770a4034e2b837e00191b0ac63a2b91032ae9a99ec182d748798df48a14644935fabdbac9a43a26749a 998e7232e5906843d6272d4e04f3f00ca41a57e6dcc393c68b5b5899e6d3f23001913a24383ed00955d5ec823dbd3844 ab2110a5174ae55ebb0a788f753597bd060ee8d6beafc5f7ce25046ea036dba939d67104bba91103d7838b50e36703d1 a211972a4f6a0303bec6c86f5c23c0d25ab4df0ba25876cbaad66ae010b5a00aa0c5daded85e4326261a17a563508a25 a49f53496a4041a01e07f2c2cf1e84e2ee726917bb103fd267451b9b7bb1331c0afde85a79a55409bfde27328b2a4745 934e915c67c7fc47adeabdde49f63f04644fe234672003be2aa0a2454dc8d9288f94293478936a450f2e3f249d395b5b b6e69e9d6808ff7f60a01b7aea6781495d7a20f5b547852d3f0af727a7434209d3015a9dd04cbe3e272918e32e345508 b348d3462092b5c6fead7e515e09611438db8d69650876dd3b56226e303252bbeb9e9f3b888fb911445b0c87132a1d0e 8d6510334a905efe5a32001e167f1ba06f9bc4af7ffbf11b7f7bf3c0076b5cca373d8c47e98c1ba8755bb22632bfe0e7 a2d5200f20985dcd473d119ee97e1c0fafafa0f191185bfed9cac429cef8198d17665dac4f70342eea66e6e4a7370d58 8dd7eb6b1841b3f33425a158d33a172b79b2dc8a01378e4174e67a1a4c8f4b887f02c7c3a8f354ed9eac718155bcdf37 b16ca19388642f71afcd9f7007b490d82f83210ac1a989da9d4bf4c419de07af8c048cd301ec7e01b9d06abda7c169d5 93cb2d847d1a88de8c1c9d5b3c83efd0b7afb3682942bd2c8ab5ef35b33dc31a097a3e181daab8630d4e840b677216dc a8b648c769e77a7b41c0c689fe2fba9bc585067e004bcb1732cb7b1618e97b317781c36c23a00680fc780b58c301a789 918c321100d57712866bdae84edf7e42df30a32853af257e0cb4da028842a43b49e775f3cecb85cd817269c728de7319 a7b0f6ce42e00c519e69b2c78fd9b75a2e7103e5892d3c1afd70c9b5b9e706180a4bf73dbb2d3eed52bfd521103ec5b3 90041994af3322b010891356afd8115340bd7fd7ba328716fbc4fe458236c8cad8c7564ae473d6091ec3a54bdab524c0 acb1ac83809573846231f9be2dc5f3e986cc36dd9574a620b1cced45bad0b11ea957ce8c6cbf964a0af916781c574f05 ac54677dc002698fc4d454c7beb862ad085d0514f92576f3485a44c0cb47afb9db2c085058918a3508f9b3de0137d97c 8dea56e1bfa150e442f8484b2952b116781d08cfa3072d08657cc09b0217276efc4ab6f5fd726bfd826f6976ced8da29 a2b09e25baf01d4364b5205fa0c4dea84ef8fe03709113b034f88a0f0a502a81bf92c1d4641e2ac9f3a6f4203d3645ee b95fe37aa351b4292691a9c2e547224c37ec2751a31ecce59810cb2ae0993da6fbe5efe0ab82f164462fa3764b6eb20f a3498947e91a3a540e86940be664fc82f1e83ff41a0d95eb84b925e820602a41b7393c8b458bd4ebbe574a754586787a aa2516d3620c832e5728fefdb1af0be30c871cbad4b166a7a4565af676e73bddc2f2f51acc603b3a022056daad2b330e a9251b56467fb55f64c70729e2ec77a59d7eac79cc0b4b25ee405ac02aea46bf1cbc858bc773934a6d9bea57cb528185 ae8c0a4ca7ba6bdca8764bac98df0581f00358db904e57867e6ffdf15542e55f7bad2dedac152ef88038b466ed901934 b0881e27e52cc6a57c4f3f278dffc7f63a9174b68bc867c16d8a151d9cc4d0aeb703d1074d1927faa9ffb43e10912c9a b67138465d6654ded486d18e682f11a238d6a65d90f23d6b13eb6a1b7471efbac9ada6345dfb13e5432196d2a256829a 944c69a6f1126edd38f6eef60b8a5bd17147ab511e44e8e0a442e87244d8f35236ee0b8d3dac0631f8598f16486a5f74 995679dbe03dec775da26708cb9200dabcad983825f1ba601eb9395f9da350ca71e8af61dbff4c668fd0eebac7e4e356 89de362f02dc14de6995d43cdea3c854a0986c605ba5eb5dacf24e3a85983229bc99a2fcf50aba3df59f0fb20daffe29 84607f0e2d078df22d0866285614f5d78cf7697c94a7d1b5e02b770101ceecbfd53806b377b124a7320d9fed65000b97 93e3faab60050dac76ab44a29bcd521813e76ec8e4ae22712d77bb489bb49f98f9087acfd6a77016a09a42ddedab2d73 b7d64a7a35f21747b8e6a874be31ba770c0d13cbd41448411994e8cebb59591295a26bacbf74ee91e248a5b111aacca0 8dcad429a2b0d66b9eb8c1c3924d7a72979727db6a535526a3518bed2a9532d12aad1c5a778824ca4cb98e3e513f85f8 980882895faa347bd2fd1dda7b8ee7ed49e69843afe646f677b371eecc7a10e0f4e40bb55f28995a40080df471876816 89e8e7fb51df79971e2f7bf65783614abbb0d7f3f1b4a15d3f0d160deafa7ed1c446d9a5ae1a77160d4dd94ceed8af13 93fda8d350392e9c4d4ffe6534f7e7be53f32483d9319093e8436fbb8166a3c01085dc858373e65c7f4d014e0dc2bab7 897521a87b7ebf7152de5260c0875e3c7df1c53e734c672569219ee6f9bd196c5ecef159b6a1d3b7cd95e91b9b8803ff b59affa408a0f7bd7930fa3b88750fd043ce672c10a3adeba95a12f23f0dda1793f761a86f7409ce1e6fd3b3b7195381 b4422ccc12f4fe99c530cda610053af9ffe635b633d52492fd81271d1f6f91b87171d572d5bd0e46ff63e221fb2fc4a5 a4542cdf3346ee0867c08d630c2aefc57442f1c05c0eba52d223bfdca5e9d0bb80775cff6ce2e28aa2730231fd7b1bb1 a7d297bb09118b914d286e5d1e87bdf13f7d174b988e38fb5427902e8e8c674072f36b19055a1070abcf357f8668f35b 9213b0ae24b7cb43ae95e25c09fead8bdbac55141694137d67eb5eab5e90a348a13d4d4d2cbc6436fc4f4f9f7334ced2 8aed71a0d116d832a372b42a0bb92a1980f3edf8189bdbaed7cde89fc0418b3ab21a04f5c6e1d3b8edf73f1f62bd6b15 a6c47d77d714c285c84c6b9458cbec5e3b191c0502dffd10ce049cf1ea27ddf868ef0cff13a2377289fa6c932b8e4f28 92f45622ec02483f2c1e07075a6695416d3768c8984856f284f40734346d56cb5b3322f20c2c9f0ef8e58ddc294a309a af6450d02b79ac9fc79f35655b58fd3619cd5d38c5317564b453f5f2d79d7a030bf767e399fe01b658a72fbd2cac2356 a3c01fed5240eb8a61ffa8ff4a120dbcebb53b8e19845949c77fb4f9b2c3dd52c7001df6219ad2f76c785a4ee0f64a2a af3136bfe8f774187bdf87555a1ac505322a956229a285d28bab1c88d4f4d12245af8dff35914a62e90e49f3dce6acb0 b20e21d28444fc96737958cd951858fda324b924b4d3d08932540fd4b87150f053db6985b96903906ce83dde0578cbb2 b7978101071268d1f485134b4dfd1e35f89b82c7d99ae91f58b6745f5e0273b7e06f3b23009033ecc3e41b2e9e85219b 9104b7d75245b784187175912cc0ad869e12f1983b98e052710fb33663224362bffd69ceed43e7d4ad7f998c0a699eb7 a7624cd71b92699ce3fde0e747976ee04ee820032ac45dd27d769edf3b3379a4b8db358e50c9d057c63b5a9b13d76bcd 9354a76f294005de8c59db10e638ae6e8c6d6b86a699d8da93143da8478d36116211c788d8285d8e01ea6647dfcaa1aa b85935c04cae14af9848db5339ab6420122c041075ec1549314e3c9c5a610d9b794ea3617c50ca7af6b4aec8b06bc7dd ad6835a62311c84b30ce90e86c91c0f31c4a44bf0a1db65bf331b7cf530cca0488efaac009ab9ed14c1d487da9e88feb 80339f0245cc37a42bd14cd58d2a8d50c554364d3a8485d0520ea6d2c83db3597bf51a858b10c838bfc8b6bc35619638 b370420ac1a011f6d8f930511b788708ccf2fe23ca7b775b65faa5f5a15c112a4667ed6496ae452baf2204e9ce0dbf09 8ceab3dadca807a1c8de58ac5788313419c37bc89603692c7a4d96e2311b7fe9e813cc691a7e25a242828cdf98f8bbcd ac1526ebc6bd4ac92ee1b239f915e494d0279fbd065e4cab1f1b8a1663f67daa89560f6c99bbc3e63fa845520316d2e6 8240ab0bc36a29d43ec3059c7e6355ff39567e135f93b243145d3ada97fd1c970743819e0d58bd5171967daec144e7a1 a99743192a6f1967511b2d3038cc73edacb7e85f84b2926d8880d932d2fa12f5215592311a7548494b68a87ec70c93eb 8ffffc31c235997e59ab33c2f79f468399eb52b776fd7968f37a73e41949111957434f2c0a27645ab34c741eb627cd1f 8949d955309415d6d2cf6ee682ccd0427565142c1bfe43b17c38de05cd7185c48549a35b67665a0380f51aef10b62a8e 9614f727a9dac8ecd22b5b81b6e14d34f516db23a1a7d81771ddaa11f516ed04d4e78b78fda5dc9c276a55372f44c4d4 aa85d3ef157407bd8aa74032f66bc375fddaff90c612470b5ff5d93659f8c3523b2d1b6937b3cc4201c2aa339621180e 86f8fe8bf4c262dc6a04620a848e3844f5e39a2e1700c960f20ee66d4a559a90141ef4e5091d0f32acb1e915af1e0472 b3af2eb785b00588371beb3b49536b7919a3f2175d4817de5dcbf7fcc20c512852ef0f313327fd0589b10173f77b92e0 8388703c512eea59190351f3bd2cce83ff8bcb3c5aefc114cccf9e9b3f78200d8034c3ebe60448aaf6c912f0ff8f0cc4 95d0dbbbf08ec1ed3975fe7dd542be0a05156a2b3db5092825d918a849411ee536ed958201f74a5513e9743674d6658d 8d1a48802f1a2db247e633ddf61d3ef7a2c062c48dda59bf858916e04f56651a7d51e367d6535964ebf3ae6d2b21b421 971436871bfe868f25247145a55802945409b3150008535b372c949760d7949dd2fdb40d9b96ae7473bc8f6e9b83ecdb 8ca431728ac0f156763090828a7b6d860bf591e5b9dd3bb3b7f3ba0ca74191f9710ee55efd32db7d18eab5b479cee8a4 81e28f1a506e84c2b9aba1df720cb50e0b597b2c22f98acc34e710c934cc6f97dcaf33d589e845c2c1f6d8716d05ccac 8f43b11d3f00c41d16c9bc9bc0c44227c056bd77de4f1ca9a799418c5601e744f99066bef47da2d9088ae88eb259327c 8d330aa52744c08ef98cc5599eec8b9b4dd18aa01b803f1d1ca0e29b74f1aa2886ed0224390fc377af25852851fbee03 a06f5b203b67134c685039ec2bdbcc787353e2575ce73a415db24a517c0c31b59d1de89f12b97cbef0219fb6a1e90a20 9269a5f49bbb8fec1a387b5d105df88a027de615d5ca6afae20fe89b11746f8d23880db78dac238c955fc8bb3de18046 af5074b3bc0656421c314547b45b5abd3045ca1b17f5e34ba39d8c1f7928a55d4ca5ea9c2ab59a55909b25255233e04e 8e7ee5d733c8e08f3fb7d85f0628de3de6835121672c65374905dc6d19e02fa2df14c13d5e9835dacd609a4df09abd26 a9b9aaf83d31e879dfb8e73a0708801b4dbdb5d7c8654b27d2c0f5797ebcacc8d00a82143e2060f0917c9d41f1a03de6 904872aa1c093cb00e1c8e369a3bdae6931c5b1ed705dd3bffba243dc4f42df3e7d7cf70303d513b34d2245743d765cf 8a4d6b3b1d6afe67383c66693f70b397e510be28e3d97dbc8ec543d699b6cbb0e72eb90a7f65e83cf9f7ef50fb18b128 a914de13916e6a0dc0e0fefecb3a443cca80d83276513b70c22c6e566a2d41acbd33a0e2836ee09abeffd3a4894e437e b9c408f5f05934b0aefab301ba22f8254c5ebbf5405b6aa788f76e4b328c150b395f441e3566015a0deb3eca89afe9ff 8d32aa2c81b2a8b89f347c2e0b6567b2117ddbb778fda8a3f19004b7f5aa9dd814b9b3ad35f9223715d2447b2d12f159 8230e8b9c84cada1bf14ea6aa9ecdadd978d893cf5962fee6c7167ed21239210ea491987f2c8f2e8cfea8c140704ca28 a5d7b6285fea51c6f21d0976a7c3a97baa3d733a201bfaac0994db6c65611d91c5fc0ebc2a7724ee02b371e575573649 a54f00a9530f6930069f5e3a8b8b1d52ee1def0aad1763e3c609ec07f25410969b43d5943a94c235ed5eb207b33a402e a8dc6e96399b81397734c61c3a8154e55a670fa25fa5854b3c66734cbb4ec0d8f6ba650ee3c71da3773ffc9e37abf8bd 8841fbfae1af4d400d49f74495f864804f043416c09c64705251d021b3ab7881f134a00b0241e61010617d04979d747d 95acea7ff4861cc969c1d8cc8775c5eae014ad6e2e0e2d0a911dd916c34ae69f53eef779cc24ff1eac18c2b478d3ba2b a5dce74abcfb8c68031b47364bd9baf71a91db01e45514ab6216f5eb582ef8fe9b06aaa02f17be8b93392d9b19ab9c06 89e111169e4ae2f4016c07c574a3bdacd8d2f359561fbbdaa3474de9bc24ef8936784dfe6fe0e29a13cac85a3e622b61 a4c511af6bdf3892939aab651828259e4ef6ebecfdd503ecc14e61001575b313a89e209cb55a77ec19a64d29ada066ef 923c62156fbf3a44926ffb5dc71f7cef602dbe941a98c61f019a27a18a50c16b6135b6099fe04a2e1dc88a6cad989fb7 afb9191c541b61afa0ef14652e563cc5a557842ce2afea13e21507dde0ebbe6da5233af949c998c00865c79bb3d45ec8 8a1f0ad65cb2b225931f41dc53547d756111ecbf5bc57c5ee2cc1ffd61b126d0389d311ffe26cf06eaead95af09c5ca3 9040b20b5ac2e1a9d30abf7a4eea1ec2db8f3077cb2cfc8736b37222d8d3937f5d9f421167086dc5551e9f0bd2522d07 b6d888b8c6bd448dccaf99c3f690d47f802e134709ce102fb6f6fc68156943c0762be6f386338163e01eed2d1dd5f734 b94f0e27bbcda793e4a272603b3dcc739d3bf3207798df7319f8dc9d37cbd850e3724bdd30498c929debad971950223c 9769827767be9d7bacba1b687289e0794c6fe630d33c9b607da1f6a65e3f34cb8bd65327d9287c8c5f3c8b5f6d3d133e aaac72c993aa2356c9a6a030950441de42b2d746bace29865382f0ef54835bc96958b2f00237d805ee6a69ca82117c1b a2b1f027d80c1b0e79bfc7dd252e095b436fba23a97a1b2b16cdd39fd39a49e06a1ca9a1345c4dbb3d601ffa99f42bdc b3fa0ad1478ca571e8aa230921f95d81aed7eca00275a51b33aadabd5cb9c530030691d1242a6ff24e2d4cfd72a47203 a43ed4368e78daad51b9bf1a685b1e1bfe05bed7340d4a00df718133f686690c99198b60031513328fc353c6825a5f2f 965e145711ecf998b01a18843cbb8db6b91ff46f668229281d4ca52236c4d40804ebc54276e9c168d2a2bfc299bcf397 ae18e6efc6f54c1d9230210ac859c2f19180f31d2e37a94da2983a4264dbb58ad328ab3cbc6884ce4637c8c2390f7fc1 83a9200486d4d85f5671643b6daf3d0290b2e41520fb7ea7030e7e342d7789023da6a293a3984308b27eb55f879ad99d b925fb6ca83479355a44abbcdf182bfac8a3c7cce6cfc7962be277ce34460eb837c561257569be3cb28023208dea80dd 9583dd991b62ae4bd5f379ccd3cec72cfae1c08137ddfbacc659a9641e7d5a82083de60005f74fc807bd2acd218d0789 ae73bc32e9ff5926e1e06c07a3963080881b976c9875777f8e4cf96af91bf41bdbed4bd77e91253b8ec3c15b4a6d3977 b2a3ea90aa398717ba7d8c46743e4c487b63c5abb140555d8d20e5115df2f70d3c84a2cb9a5e0536b2d93d24f271b38d 91d119d3bf1d34cd839eb69c6de998b78482ab66bc93fa97e31fb9592f36cdfcd673f52366f8c8e8877e313b92d4a2ad a1907e20120902cf68912cc3046f8806cabbd7673e80218814cb088e080dd93b5dccba395b13e0025f5755c183276c3a b2e2011df72504065ec4c12cbc2137b95cfcd1355509671feb7b00dbf7f8d500476a49754cb7fb9219cb5cba7c8afe01 a48589fb7a74a3dfd782cb3503e6294a81dbb6adb412887569f9408e9079371edbd9822388e0b7ec8d3297ba270f53ef a203909bfe196ac65ed3e6800d577b6ca5c8fe1d40f7f925a43852951e38883f2ffd250a9e16fab3ed3dc1249650247b 997ac293722a8b98f7e819f8e6c2d4c5bd1103b82d489d8b8aabeb905e95450b9b75bd61442cf68cc957212ec1c55617 9895a3de62395c33509b153b7820bd94fd2b011f0cac135fcf916482f1eda272ecc79f83a61837e99c3a3c4ab2c5c2a2 98c2ece4d49a64ec8e06407a0585081003bcef88af35210e22eab91169f8f0c044d611494b755e5bd915804b1d857747 8bc6dd083b36d076ddf0e0bb1bb87cfd059283ddabb3886f02eb7e27f1f0539b2819527b56b5c13436523c4603ac1d12 85ab8b7a696333c82dd5e179e12b2e127e67d911de609ff9a03cab95cbeedb1f364aa1f2b5e59353e4ba0d177f996151 a9478e214afa68c395aa2c7daf8ba1627feb71ad6d8bc7339734cdcdd5a42838e032736c28e6251c808d5a4875ef0d06 8c53f62cf06a35321c8af3871ee4459768d0745ebf48942b9f464206309f42fc7b2c50f196ae1e43b664f0e2e718a23a 8ba80662f6642d8866e832ec8082a4204ebc993fc304c4b794666856de0407620131a18dc053597bb40a3de0bf8aca22 8c8fac6b911785d1561a985580c03fb2ebc613ae33e486a92638aa7d4493374118d9a6d9d99121e29c68c3d67ee4e3f3 90f2c793eee07ad90157040b30558bb3b0164e8ddf856389d6742cf5bd1c712e4c6a8e5678da70a8e9e242ec7864117e 954abed8f6d58896b7f6438c9780236c1c83b02d60a29fa7361559e619e5bc9d67b3646ee39ffafe2b3019bb3357fb50 b79874f757a33085e1e751544de8fe3afbea92e0234f9c00254c2b36115a16ee46f085f22aa66e0c9177e5106f51b03b aa148b287cf4f60c64f774282b421aae075f0eaa93a45aab4927750f47e2ef0b811d1846bbb15eeb2f293c80a7612e83 a588d8825e7b0168d45499dcff6faf0dfe1ba4f090fdc7c06d50344960c0121f10ad109b0b9d13b06ef22de5a04eef87 8f61ec93d14ebfa9c31731f9ef0fb8907505fedc79378e9a3f65c27bed4d74b41e129c97672ce5f567d897befbceec8c a008218633f1da10efd01c155f7ed739faec902da6dc48e9f19ccbc8d32bb318d71806285cf2003de2c907bbdd4f8b22 88ad82c66f7085632d7e348d69da84200c53594553acf5432b50dd1e87f410c802dfea91be3cf804e3117ce13103f23e 8498dba17de0318af227a3f9ed86df37a5c33f9a538be9823f8dce4efc3579e8296cb3b7200cee7c5e0bfd9da23a4b69 b3c0342231dffe4c9bc7d9265597bc8cc4a82e2980ac6d1407108db5b00349dc91d5116fab51cf2802d58f05f653861d b3f2730455f9bf5a058598bc60f47740117ba51f6a767e1134516a4e42338b513f377027acf8825da5c4d047a62984fd 816360914fbc9d8b865157bfab07aeb7b90bb5a7c5cd64847b1c3184a52266cd3f8f8f3ef99309ba2edc4622304bacc0 8fd21b2315b44a52d60b39ebc45970a47b9495f42b88217ae057bebcd3ea0e2476c0c3d13de7f72016ae12ae966a008d b62014485bc217a0fe892ef1aef0e59604ad5a868face7a93f77a70ba3d7413443fbe7a44552a784d8eae1acb1d1c52b a905822507e431b35f56724f6c8d2e93b0607ed7a4533073a99cce2b7c1c35367382447073a53036dfdb0d04978ccf2a 81672e39c2b31845142963351de3d9cd04c67c806fdfe77467867463dbbd8a9b0e2400ccc55016e57cbedb02d83a0544 90919c970ec668de8ec48a2a73bb75cb94f0f8380c79a7909fd8084df61ecd631476ddd474b27103c6817c8f3f260db9 8fbe37dfb04bf1d3029f8070fd988fc5e4b585e61eab6a8b66caf0ffef979d3ed6a662cd99468ce98ec802e985da5fad 950939aabb90b57a3d667f9820880eb0c4fee5c27fe211ce8ecd34663c21b5543c810b3676111d079ac98644c75ee0ae b06201ec3c3cfdaf864a66af128effee8ec42d25f1e173c1edf9207979fa52c871757000c591d71a9b6cde40f5001a06 a79054e8febd0450c96ac7a5fd6bf419c4b17a5926f3bc23a8616f0cfbc2849d97470174cd1baa7c739b12615334b6b7 81c7391b2a1844ed26a84f054b5f03865b442b7a8d614cd44805b5705fe6a356ac182b66a3c8d415132e389efac5f6b2 825af1563d0fe53925ec9ac0df65d8211b333474e59359bf1bde8861eecd03f2ac74534d34b7e61031227c2fa7a74e1e b60dd9bf036f1825295cd2014ef1f6d520cf729b4d6cee0b42cb871b60ae539b27c83aa3f96ee3d490ec27ce7e915115 89ca43d5b7f3622b42df7887572297a7f52d5204d85e2e1ac6e5d7aa7f8aaea5e3a07280477d910db025d17cd2e7373b b93a2bc9b1b597f0e514fde76ce5bfb6e61eee39cbf1971ea6db38c3ecb055e7913ec8cd07fb0b0ffae3ca345883101c 8d45546bc30266b20c6c59fc4339eb633155aa58f115a8f976d13789eaae20a95b064fedead247c46665cc13ba856663 aa8eacfe00e8a4d9815de3f7619d9c420629ada6489933ca66a571bf6c044d08b391e0d9eec7d1cbebe8def1e7523f1e b32fefc59a0d0319ccb1946b351ed70445d78d9fbb536fa710d3162b9659f10288f12d82b32ecc026d55f16cbad55441 99c7c45c34044c056b24e8f57123ba5e2c2c039e9f038a66899362840cffe021733e078866a8708504cdc35816cb335d 80def162c134540d5ec071b25ccc3eef4efe158be453af41a310b7916c49ec0ce06bb43dfee96b6d77339e11587de448 b5f2fa4f68f6a26bcb70d8eab62ad73509c08ee7aa622a14b3d16973ffff508ce6f1aff9ced77b8dcfef7319245cf2de b4d0436019e779c789464716e1741c189e8945dab7f3072720bd9aa89882fa5b085a1755c48da21541f3cd70a41b0a71 931e798ef672e1472f4f84c727a101e70d77b3a9f0c0803a5220958d6bbeb8aeeb56c769ab472a3d6451249a13a3f56e 918c10a84de268aa8f1ba24b38fe55ff907be07b1e86b4a4adbf305c0d705c1cf5f65ce99e03e11676cedc89f1a4f331 8e55a8413b823715ccd92daee357cedd797e69a0e78b6fcdacb7318646b9903dfe05e5501f47b3c52e74055b9eb619a4 8b329bb63e6c985d7d072dff4680b3f8b1217ed20543277386bd30ec25240d9dc378837dcd5cf4fd9548658635f4c537 8c2be5386052b22986b33dbc63c5afacb6d0095495564ba4aa28fc8c880a3c78242fb083248d788ed928deb1e30a82c2 83a2b7bdfcbd25d6b059f27218e009ecb5ecc4da68ead885e00216411d8222062ca42f21c4d9cfa19c31522080af677b 9620334d2633e85646b2e2fc48dc6c3f09c64ef1706ed78a3bb6ce1f6b274a727364df71e97531dfdcb392f70f27f536 b6c84970ec04545121ec3b79376f4e45053c97e8bf2b11922cc2490a429c38735466097ecb81cc9d9692c74d2fb8abc8 8e55d707dcf265c5ae29a32c27ce66f200fddb724faa5bbf145ef42280ef645fa2f0cc3cfe2db8599b26c83b91e077df b910b96b763966402bbebd68a32c15a225ec21e1357fa298478c5981a4310e556103fef0c73bd8903e11c4ed2c065647 a8fd933a0e9fe8c459809bd93b8ce153e2af55df94b61a1490736b19c89469954da8b72dbd072d798fc06fc3d7a3d60a 811b279c113828e114fd82c2070caa7eb089a46c8cabf865f9c77354a77ebebe0c4c6400dda0e66dd017cfc44d76851d 8ed03e91c331afb3ad6e42767e1b3e8d3a35fb831805ff1b5fd3e91878e04027ff5af1165a3ac295f1578faf2c83b581 95bf53683d64a0621bf1ca6ee17446783f6c535b7a54d6ea57723487a215759a54f886597a55dfdd560424e368ab2759 a9bea378768fb1d7ba365a16531c51fc1975f1c73caf2a0891da28509805fa84e2a8db7c6ccfbc620e9002317abf174c b8308250891015deaf851c4e5a4cf4704d104f94064418488d7e3076d49f36240dcf6fdcf83f45fe8a1d97fb02e3db59 adcda6b63da21f4074f142f8e7f3a2274f624c733e3a4001054a1809711529c61356aa087f73aed877a58ccb41d38d12 b80e7869239ae26d1da2e6683f064d1dc93cf4a2b66e9439b3ad9b25324e969bf98014760d29e6b8de7ff152ef498d0f 8e9bf968911df3bb5e3a7655e9d8143e91ee87f14464d7ba9c86e1e31b03ab31b91eda121281b79cd974d9ed2657e33e 9007277e8335a43e6bc3c2f5f98c0ba7024a679b7156aeefe964f1a962e5ac82154ac39d1ffbad85a8f2440f3c1e354b 9422b9d670e997b7c919a429499f38e863c69c6a4d2bb28d85e36ae0895c620f68b71e39eba785e3d39a45be91507757 926094e01132938000d82dd9a571fef5ef104cd25b4015a25e3442af0329e585aaad5472f0e7a69899ba2d6f734b40aa 95552d8057f7e32c24d69e4d6c51c98403f198a20c5be8826254d19cab2f84d5758e2220cea7e38b7c8a7a23178fd564 8abcf8dcc8488bcc9ab23c51b9e7a0d91dfc7bebe88b7ed370ee68eceba643e939c5eae66a4aa5fe85120751780e351c a91bf8198f029e6a4cf6f0cc39b629e9aeff1c77b8739e1d5c73d8c1d3fb5c8f6f23e27b435bf10b5b4ec1cf6a7249ed b932d87ee3a4b81341511f90fe5aa36c571e8b914f25abcc33dd40ca67a3f6444fe9362c1434744e4af18d6e045c54a3 a8e960c2be9b1d805d387b3ebe2134d421a65f1fd4c1b4cccdce78f9926f139eea78e3afb449b3d6dd19b5d16ace48fe a7e2f57cce509fe66707eaba9b4c042c1be93fd6034a9b51d1d30c45c4363eac79d54663d525c9873ab0eec0b1cc4ed3 aa162a31c2078f4b080199debf24494a8dfdfb9d8fc85b198a861b12a629c73128c55a883e4c2de3dfed6e0e1b83eeab b5a4d075433eaf4115717a84b4dc37f843d44bba0bf820c92ecdedd5afb61be60f7708c8a151a678d9d5c0ae531bffb7 b56ab96f7a463c0079e05dc766f3a6a31cae5c5044947734ebe0a26e01367c6763cc8de6c2ee2f3b8218f05bef217474 b60792ac506b901065a8bc0180a86e028fe34b62ceae1ad640c759538ebf3a2ad9c8c927d662deed6f489ff3ff7813c4 8c8c2cdf075504d12d441a58542e1f8e4bdf92b3ee4775e836b2734c5ec1e3df919b931386417d04489a1dca806c87d2 8ed78e91e5c4a68894cefc2f7fa71f02e5e12d40f1bb74332139bc7be4d92c24e07d5ece0e82150ed474aa1337af4c18 87119c22ff8aa31150bde537d863cad661cc5159b12f084cc319224c533f0deb28526ed8568d00a1441e7d8bb4f05673 83a60ba5a9cccf22cebadf7318b706c9f29abd25db0e2fc1c802965351b53cbf316df72ee3e9b2d3ae7f3c4494cfdff1 b73b6a9fdd3e7463fbdaabc9a885b7c82201ad867d1bced1c2484300a01cbbb3f1e21afa95d4c7cbb6cb983416b63b90 b1d89ad16981ff9217708090d4017662d8838f21f3a3296cffe14590b533905fa06a20e40dd497bd291fa4dfd1bfc511 8abde560083e071a402e3c7bf31930f537f67d2a7bbc734a7480b1b760aa712ebd1cbcb65b00e11e384e980222fe14a9 89c731d8f31afea8bdc9c32527bdca257f2a840764d40f6e49403b8e75ae51017d505ea4fff91bf28b6f3a1bc65b8bbc 80e9ac8e077e86ad050ee73dfce268a69564ff1b8419e9c236d981fe7a5f0c2bc756e8603ec604b3b9e36da8fe10a49c b4f1eea0f304898b1323c6382732e6f40e556bfc68af9ce73f6d54e92f5f23cc4f78eb3f43d578d81e7627fb40f092b3 a0e3a8d1348f8f153e08ac4839232d75d1d6e81b5de184ec4724f8213baf98d3fe739a96f6b39d79a053b628c3a09981 a6915ba0b52ffe4a381bbb8ff3791d9d3b848bf89b3bacbb2a7d2e5ae21f1353cdc304b3cb6e82416f7e604035c27d7e b2c4c9cdfdd2fc9a340ba3ade9423344b9f429e8c7e20a8abbf26400376e312f3ae35d1c456be99dfb5c02fc8a36cbfa 9657d57ca0641825a0aa5687f3f87659d893f33aee819bafa5b1ca1db554811c1c844f971e278606e3a2f096defdc67c a4ad24d0a557704ada24d8e27a15604bca28679e260b2c69ccc8e6cae5499866724b700605a90df7dfb35130756939b9 b18d9ea6682f73a1f99a9a4fc98c38fcda02c1a18e8c5fc080cf935a2ac877dc5223fca273dcde190b906178d0fd05bc 8ea5fefad0799c885f50ff10d94bd0af5b99b0a446cd1f367ae5ff529cc47e09f3018115f3c0ccac2fa05bb65b84945e 92450d52e6c7d13ebfcdf5674d6761bbae2fc5aabc865d35d031b588c383e0a64cf69a73dc93948632e2b98f74a5ed86 a356f171a98df4ec5a96d556eaccc6ad34b4238aafcf0e94ece27cdbb491749fc9692e78b84dfe80bdef2914079d34b5 b918703a4d3507d266414712ba8eb7ad17da07cc5f952b5c62ef130cc6ed1ae3bf01237fc8848c179725bdddd465b301 ad2b0554570bfc9d97510cf59bc38e10ca54a93649c30ac9919bd0255e43bf525ab11b74f78a51ac0973cd0c5a5dcb54 a7ecaf4b631d179d32ac1632390d95196a0035e00da6c0e6e13b5c09ae44b15ae6c21538b5a31b73bc5f650ecd979b59 a37704eb4d728df2a367e59fcb6c26023136230e37f3b8a2f3ceeb1467f5cd30186fc0116f98b64a8146fd2c5903e8d9 b09373ce92314678299ae10ec1f93c702911beb4115c6b5ba6efbcab9c7afb599f59793912df70a98868bce6545a33dd b52a878a1393094fd2b93f2d1eccabf2830ab10800ba4cc24dcc7849cd0978733263aef2fcb766a7cb575a7a99383db8 8dac097e006fda4fb9d6d7ae52adabd9448ebc8d5bd5b38ac0c4ed38ceb510763174f7adfb0b473c38e52147ccab4239 86b19c41efb949937d74a7875549ee5e997f9fdac7f7198085afda233cf74341a38d0ca3767c76cd35f875b89a35f78c 99f0d927e5ad25cd134f1c70b72631cc6b5cb4ddb86c0642b900464e33d971213a5239dddaf71f7a42f2d6d02a12dcc6 8355c38806c335d747d4e97f0083fb96585677da18b409a85175ec35dc3f74671817b34203eb18c2f729717ce083ede8 abb3603adb061a036eae0afa5f23d79c3b62442e0e3bcdeef896f88995585c1105cd3065410368456a4d36b5b0485a83 9051c5c0011784885187d04749f774b9b4f6bc594b0e4e18226de79dedc4d7aefa3529c3d2c728e180f96f3e204d578b 91888213e7d321d0bfac884edbd5cb756b280753bb5f8bc6acfc208f525757beca24bdf86fc68d3d8736ef176a960b49 91258bd7ce6e3b7516fe2f5391a368d826da299e0e99b1f82eaa44b62b110ab696adc92debab8ba098a52f38dfb3c5d8 96e3907340dffa9da3602d3b94bacff7e1bb8649edd3b9bbd06e1bc6781e78f91ababab12c0b9be7c66dfedc7001b66e 9513555688fcfb12ba63952ab36a67b36affdd71f7b843e8eb99ccbd45421698024608233efbdc905eaeb26b334b33af 9913ca9bcf11eeb408da02e4317c5ca0010fb2f4490b282ddb758001c08b438c3b35351a8cbe10b7fffc1293ccd22d4b 85dc2471860ebca88e5a2766161fdd77f926d2a34825d1134a30418f91a741759668e32fd1e37c415d07ab5824338e8a 8b128917e828a0b5eb6fa8ed72b52fae2dfaf74febee69a2e2f87e8df702f0c5bc0fb620c8d1d2a07f35a15ec9c0f5a8 964c39e7840c130b01bb481ae7bfc92682b0f124c9c383f9dbf3027f2249151925f4faf36905af476a54778d69da3f48 80671ece658cf850e522d46d25678f934ce6df043f25f8707235125765d40c2eaaf39eda6092f75039b22cb58bf2c29d ad4bb0e79fdaa340b1347a46b0f64e801c72a89770dda0a6e4bfd35f2df5146fce9934e4baecb1c2671077c771eb8089 80b3bd3adc6cf198fcd997f8867d2839a2eb28f57390352ec423b8a14cc1f2ab21c6e286505d6a21fb134dcd8d8f11cf a26d46a6b8a75748895a1d599e7fd120d896340e79813167a400b2fe463452532a4cab419074663fe1d29fa716b76a33 82b1f3a8a1df29207d7ff020809113ab06080a7f0c631f76ad33f47cdfb6a567143144df97b4ed7f676d929195b04bba ad96633a3744648ff0a2e4491e8219c9c6ba6e655cb058c36320a8f72cd5f72c00bddf97083d07650ea9ddc005fc1ff4 91d0783788626c91662359dc3ff36a8bcc6831e3f4114f85c99910256b1d8f88a8612f53c7c417d55581dea486f38926 84edd9e87ff3d193ebb25f43474c33fe502a1e2100fd3f93fda6520f5e42214cc12e9f8045f99aa2423a0ee35e671854 b55e06a4b1fc3ff9a5520e0b7c8b5ac11b28385cce78d91ce93b82f1bd7f7afdd4195d0c13a76e80d0ed5a4f12325fa7 b0b15c7ddede2b81d9c835ecaa887650622e75d0d85f81b8bbec7ef24e9a31a9c9e3de1f382d8c76d878d1b01373f6c8 b1adb47c20f29784116b80f3670182d01b17612d5d91bd6502b0dcecdcf072541f582aafc5e7dd9a765cad52151684f4 8efd1018df9c9e9814a9c48f68c168551b999914a6719229f0c5bf0f20a288a2f5ba4a48ba966c5bffb0fbd346a4fcc6 b34ea2bd3269a4ddb2fbf2514401d2712fc46c22642f3557e3b9c7acbce9b454dcf789573ede9aa14f39605fdd03f8c4 a9e1428ce24eacfc460aec2e787c053327ba612f50d93510d58b2cb0f13291ca3d16358325ab3e86693fe686e4f526f7 91eac7361af4c66f725c153da665a3c55aca9ae73ead84ca2662cf736fe6a348a301be1954723206dda4a2120202954b a6f02db89739c686407825fa7e84000ceedb9bd943e8a0908fef6f0d35dbc33c336072ba65e33e15ecfcd5714d01c2f0 a25666faa12e843a80365c0fef7d328a480c6e3cb7f224763c11d8cbabd0e7e91a5b647585ee905cc036afca14842bae b4348576439cd2e48c01cb9cded7cc4a0ea364ab936dd679ddc7d58b48807e7fab070f2f1ea88595b11af4500849026a a8c6c731e0d0464ef7e4fc1b049065eb4ce100c01e1a376365c636a0b23851022bf55805963bc15eb57434a837e81167 b0952937b154e3a4c206f96cd96c76ba37624956b0e4d43470bdd97b4af878326b589e3eaee82fc192437123096799a2 97d07ec31ecc9923192e48d37df2cf08750050fb452dcfbdb350fbc43e146bae3590c5b732b31ebfa1ce5d884ad5ad57 a69359aebbfe4cbc4d39d178150039fbf284cbc0edc68a6bd635ee3a1c76569a4a575c907fff691b2a4d82a384c2945f b321c2c0f6b5902ee9056cce7404d858da9a573d27348c1a6bfea29b2746f2aee7abcb6192504e5a583b0caeaba117d7 a74e738aa6eb4eea58855ae6f422af22812fb388c83aacca5bd5fa4a88d4c01463174a229aea2830c348dd9ab9307854 94306a3b106bc1644346bc45c05cdc8287811d5c86cad691bde0c65d6a686eb9c0ce79ad91baa4547e5d058ae8bf7310 b64140fd77a07633e4ca8d60786452311dcdb8ce7095ba51dad8486f57c3bf4e69bced92603f71da992a48ad817ab275 affe7f4310f1dc68e5e3cd640bedf864f51bfb46bb752063bfc18e95930021f784e509261ff9c560f53000c361b142d1 b0d2fee222c6f963ba3385547f921a48964da031d737892604f8f2677d4905dbf615046db57eae6c6dd756709ae6932a 81700c66aad7c2e51168e028b0fe086dea75d3b17d93a4dc1f47a6a0f025df0bae1c8c997901837ad859a84197e7bb00 aa4ac5fdd602f8b79cace18690e67bad557a93d00c0e295074185e8c6b4059a65495d9971685de2fc01d2171ac8b706a a8becb3a64fdf35d65d2857898dcf8053b5057a73ab8c5bb5324af1a8015cff47efb85dc3eae7364cd5c850b7962bedf b72ea09bd0b72f8cde3466f359ea69b194ede93dced534efba1b9ebc6f3bd53942fe2965e992e82edb6050cac4ed88dd 85bb8dd7eef023a251fb6f220af54687747f4c91983ff728163c4618ffac40ee6edc29a0aa6d455276bbe017f63757c2 85a485254a11b4c4a943d9ec509c0dd1cbfc0ff5273a00cf5c9f0babec973efb15348e5d9451b548293d778e3a2b62a5 b109f3ac809391e772b589c196b013db69a9b2b10ac3898feb70b986973731f30722b573cd0c9324158ec20416825385 8a4eb579a840d438bed008644f373ea9ba2f28470d50cf1d70af38ba0e17326c948527b1719dd1bd9ac656ebd5aedd10 a52e9d66ead5ee1e02ce6108e4ded790d8ec83164a0fa275ab1f89a32200726c8e988d66df131df9e62dd80203c13dce b541cee9febf15d252475507e11d65c4b7819c26cf6d90352f5e8a8f5c63e254eddf22df0c35a7be5b244233e8e4ee5e 8153c297772adf4603c39349142f98cc15baeccaeae10c3230ee87d62255f6814d88d6ed208c368d2c02332426589748 970dc9782f1828474e9fab7dcdec19aa106725465a5844caed948eef5c9e48199c1b6bc1a637ed7864116927e84bc65a a975a920624967f4ecc77ea5d9869c434caa64c330024194615a8d0640c5d4d4fb139ea11a0c73a5c6ae6dd3fbf0ab5d 811f0f9e0c12acfb4b9dca359eaef3bed18083bad96188befc036ad3143b121fff4777ca6dc70a835bbc4921bd25f5ff 82341c6ebdb97c8b72910da95c7eebccd1308b6a92999886aab552f0642882d5c7cc60931577d200efd6066530c998dd 860f7162c2f5fd1c0953c6ce75bd8c52eaa48032b914410681b8cc05e00b64130d1f96ec5a52df66a04c78a9f9f42981 8a578e674875571fe1a0459843495a5ee1d9fb6cd684b244feb9488f999a46f43363938cd0542879ea18ed14fba10a6e 8df217aba4da6781f0f5139aced472025523ed6e17e504511c04b677ca8197488e237d8bb5dff7b6b3898cd5a6393dd5 b2c9230ad35d7b471d3aee6f771517cf3145ad26200bd6fe9c7cf28120e2945fed402e212d2330a692f97bb9ac4dcf12 b78b89e29e8b782603b222cc8724eeb83b2d9d56bc02f59a3c899ab76429dc721358b07dcdaf422f59520b7e7ab4fb55 82682a5617843c4ac8d4efb4c3ce715c76c1da2c3bab1ede387db503f3489c1bfdfc07d9231d96f955df84fd225bc81b b0f53725cc610e78b8e8a4e6823a2ffe44dd15a9a5bc8151ab7a3787ddd97e1d7f2f0e6efd2876e5f96417157143e3bf 92c5a93233085e2b244519078770c7192af62f3562113abc8902f9d72591eacf52bd15ce78653ab9170d5067606287f8 a43ef97dcd9b6ad288846bf31fccf78df72f94bc7ad768baf5bf0d5dfa27bd74ffcc6b6c6ed1d1f09e09be3afa5eaedf 817d43bd684a261fb30f709f7926cc4e1a31fd3a1a5e7e53ba4d664856827b340d7867e23d55617ab3514c8a26a7040d a599e22d3286b32fafaaf79bd5b0c5b72f6bf266ec68948478f055391336d756b58f9afea0167b961fd94234989f0f02 b70db7d8e8356df2e2070f8d658e560081442f3f3b95e20f4bf30106835d76161101163659d5d12cc0f335fb042dc66e b8f725b70c957aa3cd6b4bef0d9647393f7c9e0b7343e92439372f0e9aa3ceddd0cb9c30be331742b87c53f2eb030593 b2fb5e7762f26036e7e966f4454f886758804d1f4c2da17f3d13b0b67ca337f1fd89fd3cc798b07da6e05e8582c9537b a377f944dccc300921e238ed67989872338137fe57f04cb5a913c787842e08b8a1adcfb4d2200abdc911fc1c766a7092 b82e98a606071c2a33f2ad44e7ace6d9471d5434500de8307b5d4e0083e3a5cbc67f0609ca8055f0ea0ee7501b9ed916 8e58f9a04d33a41ace4944615041662dc35057e645f63e127cf0d70f96ac307d33a62ce98f164d6eed8536c1a747dcbe b5b11388071ffbf57ac47fc195736613b964ebb91cc8e2c17b32646f91d64ea506282b881897fca96c317364d3290de2 a40ee9b7551133856cfb3904837f9949a9558e59a418898affb78adf1500fd6ef6328fc4422161909aea2c79ad08c14b 81f9eb4ef28aacdb43e11dfc9aa92ba990be4d3c14b484fa677edad3a3fbfeaa859a7f9322b5e95818240d7326215abf 84939b2b6bc859437d1a7a8d6ec9a357c6b716c4b4cc22abc274af872655940cfc72c99f5d0283d90e05191fcdb1c232 b78a5b74a90a805410b6225fb9576d6d73752520f25cc3fd1edf8ea9f6559d3080f9acaa2246809b6a66879cd2ae446b 8d0a92baa88bf38dce5385ccf15d345b28e2e5d0a2d469e689353d80eaed8e8408933816d70ad752f226c59a0d5b5f0c a7e15f8a8c1655b7b346c9488cff278c793505379b781b31b273b4bf09b3bdfca1c8ab2334746075d636b2e05859f215 b70daf14f2adce03c7b92d6aa181f0c507a80a37493d8dd12419d5ed5f943a98099fefb46ac827d6e4efb9b8233c99d6 8c2480814661744d116fba7355bc6b1914975e44cf0e976d50b6a20092bb1c636b7b44ed3fe8d63b5555ffc89fa759d6 a6059528a4fed36abb74ab992b22a4f9bf1d05c5de2bfe6837b9af1adfed98bc37ed7481b5a99675d432743021fcfdb3 b7e19f1b25bc159e5a769811e773c3a8ffe8be8ac77ed0b711540915e5c6e7bafdb407cf9b85c551f67fd621ce8142a5 a2f66d4f7d16ed3e7ef5fc90b42676c61a98ff18bd26ccce91de03b6a0130c1db17a6bc57be135e410a76d2255b15813 a139c916927dc3d3fb83598da9217ca64f0ae127215332e9a7ed82be923b89a801c44580d5617297175f9dafb1c4eaf3 af08e1e1b04ec95366a12d99c80a9a9ac40ac984a575dd0230cdf4eb346a7686da55ef0a276f3356f814af31f9cbf1aa 98840aefe287369221c0721cd7c1b15b1d670c3cbbfda191cdb5434bcad757e59c30ec82b2d8c75947405888d44da435 b7c61c8d42daf2e278a12d8f6eed76090b71c82275f8b33504aba75d95103840e8acd083e97a5a5aa79897876a68940d a0264048d2a2061d32eee4f661957ff351e78436bf49ef973c059612874ce9c91970869d011dc13a5b7c754476880a68 897199a4d8db8aa2db5d9be3d4f4312e41fa0739eb06c62e2e046c4b9be829a447e5d47227e2d96195d3b7b66eb59da6 b512a9082881f5dc90b02f8bc4f38b133348c2e933813852f6a8e7d8c270c9ce68a5524af7d1d3123e53b2d02a53d465 80b332469254a96f53c95ec79bb5a8bb1c387d40e58b73d72f84384c696ba0d3c81d6ac90be2979c364c44294e90432e ab680c2e547ea5cbf95bf813020beb461d50ee4341dea944eb48f6a8584d35682d20186e3b190b849a1ba25625a7f499 9070581993a0531d6be372d370c2e4ab2ee53f30e04a75ae61ea0fc2c320914506c4d2d4b4487c1f8fa88356fc45c895 8424303dad6b4051ab633ad27ee51783b2ead61c5a6dae1eb3ed72fc1f36e2a9b1f315504a4bd90f9664091f2f403d4c 82225611eee626556553b9316dab4043aff241a81826a33aebd9864a91e299b765ba1fb43eea2c2047e6b75b6d7fe3de 8a3fb221c616ad55c352dd5e0c09ee892022013d6965aef40d4f277a42e9fa01226fe973cb99aaf6ffe4f4f348fb54d1 b07c07679aa51713e8a7d7bc304dc15ed5664b66bd371877023f3b110b3927e09e259ef22895c4001421a69c6c013cc6 83556c76bdac0dd8db6da231b863c335be076e7299802eebc259e0818c369f933a4a4b18e2df8ca07e82f60767b462e0 a516f659b7915d2f7cd0f0f5ea2491b15f0c84dcb191e7671b28adf7cf14a56d42cfc0da94b3c269b45c535f6eeded49 80d7cc6f26066f753041b17ff1bd27f6d4b5603a43729d33d596e21a67356db84ca9710158089def425f6afaf3207f9e b802a47f9009dbd48851209ea1e2739020e717f0ae80671d9f97a0e43de923273f66b7fcc136a064c8467372a5b02d28 ac92fec1864a8a911633f377df87aab56713876316d48240fefeee49ab97f7406c22e70f4938b5912c5c4e766146b7a5 89224225b9835d04428b0a74edbff53dee2be285ddd1e5a3a8c37307c0500578155f0c4052e4bc8be04c56862fac099d b1d3c8492fbf22ea60732745edd3b0163ba5a20d1a3315e3773f2540ee38cf308d42ec72cbb3e3dcea457d1d132c3904 8bd00e38ec30ee6c44a0e5b222f1f737c9ed2a4bb9225f1741d6334df966318c8a0fd2fbb109557fe8c9479694b8d8dc a930ce5454efc0b247dc148aff869963fc5c240241d5590415cbd36634801a04d3873d93635911bb9c0c42ecb005cc63 b83d4f80e9e0fa47b42175df74935ba8aad2e559b80e84478ab1685bc3eb65d51b93e5738d5ca968cc055ca0c552a03c b3ae21258f98051f13af3878b8103bc541fe6f20b1c3f8fb4689ddb8800b3c25cca9b55f0a4104bdf15dc4d5844abb8c 831ef8684c1cd446c58c59d0152aeade5cc305bca6aa296b92162615f052ba280fe289edd62fda6d9f0667c186445f52 97bf9659b14f133885916733b7d4ac7e215495953caba970fa259f7bf6b79e661090ec8d79e1c9ce8dfb17e8552f93af 84d5a89cc2332baaaf3d19627a65f4b107f8dd9228a1434b327732f59883bb54fb8ce60d6acd026ed4b0e94e545d1c33 8e66cb743f95ca5486400b0d89d02e20b98044be1e3a12983ff9fe086179e5a0ebf4dcd5098703191552e9aa660a6de5 87b4cfb35bacec805f8148786788db84eb8f4bcecdd0570ecb592c705450ce1a90b6d183d37ef58780ede3995be67497 a72a4fece5478011973afa543f6d8a8ea06a64b241cf7d8bd81fa3740ac2a4cf10e5120abcc1c1101f94da89507a40ca 89dc6001a96adcd2679916f43dd19ea00508c8d5dd6b0090eab7982fd2f3571b62f3029588a0649e73f49124525407ea 8ca75edf1259599e873530eff6151c822a4018e71a340534219ef8641cb6683215891df41d4e3c0ca2560e57a7aa913e 9282d32f868e5ee6f7fc229dda5b94b603476de30cec0a44a30edf396b52dc0ebd472b8f726d4b67d76179fecc1666a1 afa24704223707db89690bcf9761f07a093f6009ca9fc945e0a8801fc29f9f51292bf95243e466fe736088af36c55ca6 b51332508ddd9a2610edd2b0ad120272ca342e96c28baae37a2c4f07e689303a46c237712d07e446b1d67c75aa8ce32f 9219249f3799dfa4eb4770ee323f821e559e7406bb11b1f1889286221b22c8b40ccacbd9ac50ea3fa9ed754860bc24f0 993515270c128ede64fe6f06755259105d0ec74947b7eb05924a375fa5c6d14822f3d7d41dd04fa5df8aa2aa205a1dec a83be4c2511bae430034ab15b194ac719d7b7041f9c0e321317f513a97db39e97b9ee1df92a1962f265b7a3e98cdd753 8ac7feaecd26f7b99fda3ed0b8a08bd6dd33ed5ba687c913ec0ffc64bbbefcda6f265072add4d944f2005634601ce68b b4e3ac6b09299db9e1a469f3a0b2d8d724ee47a417a517bebc4c2ac3efc5cde086b57b9aa4efccdef2bcf8f456d973f6 9262a24a84fb7b2a84d700f98dcf3fefab8b47293778c20bfc356860cb84e0bf102bae9facd9986d92d1762e0a955836 97be2041c42bd25e5eb519279163b0857f8bef627492c27b1182f8bf0033769246be5886422cbd2409c08a2615352465 b0b87d059a00e3effa2e5e4925da913b245785f2932ac3ed364ad19a064d3561b8aa6afea22c951316074f0df179af36 891644b7b3321b06a2a40cd96c2b8b29d81cde5b48546483fdda439000982a9cbf1f6333fb6c089d39da6492cdfaefe9 8da9149b7f4783a24240b7b9c7e6df4abf8d699d3834e31ee591489bf4744141ab199c173db64397c1f9bd5f9c862ca1 8ad7f9fb2742654aa2964fd468e7645436cefd1308b064fd63fdf0d3adb4caf6cfe5426354f6cc284f208b03d6b2d918 8435e4668f7aeb027100d21e4e0b6ee22b401d21966a3736b95610de86c7e2f2c9ee5d0f901353675eee5ff458dad69e 9010895f045538bd11b47bb8996f27198c8d6cffd3220569e6b7407f68f35c47d1efdbcecbf9b5e241c3c2879a4f6936 92a9aa443b5ee7bf13b6f43f2d8d8db7f6f33fd4073a606ec5772421a55f464831419726130dd97829a7d4bfeb1ab078 843f3266560be6dcbe0258c3c7d7e332330e10630c069892954290288eda301e247f479505a8a1bf7e59c99ccafd104f 915bd1dad808f8a568725bd243f80b5476a2999d0ef60ea3ef6e754155bc4121b2b879d01570725b510c5a3f09cd83ef 97250d781815b1825be192714884630e9f564b9bd737d55b8ac79ab48d0fb3ca53bd21ead7b2fa82a05f24083f25645d 81e2d52333391ff2faab39611689a62d6ead77039e8703f4e012d53eea17a4d46f2e3342e44b6edbe73a542b461bda45 89c9f9fd5f638156b018831c1bb70c91215f4a2f5a73c84b1208bdf6ad652a55df7213336ce12bd910a0e1a726474f95 92bd02984d090ea7e2f3eb7d36d1e7b9d731b6b047e3cdd4af7cc4ee177415fea7a145205e484b366d84191f06af85c9 85a86fc61d5d916ccbb219db52953e1495230aaaca63237e9165276405f07ad9644e253ae394f1ccdd231944e7143313 a2ca5b3fbc9f3530f88c0ed7071ec3d89b272174c366eedb5d15d2b648c65d23c0faa4e92c776357e7c6883a0084d03c ad171f5badcc99c8ffc9d8b707d792046f86cd0aa478e0e2fbb32fe095f96cd134ca548d1f7713057694dc6b26465315 96bd15d57da9980870fbadc98c68db76824407dff2700c45b859bb70d98374d4a4ba99e3ed0b0c17f480fe08f16c6b8a 8300bac69ca088c3ff35749b437215e9e35a16393e9dc094f520516ba57a485def7029d30adfc72bca36eeb285c19301 8a09e20be64f346668fcc7b07fee9c0ea8094c935cbf4f3a4cdbb613d4b936c1edb9256b7c884efb72393d97c0da00e1 b1f85827ee6f041f93ab174d847a55710824fa131c9ade9561168c3962a25c617475ebc4105eba6e738961a754442bc8 a131558f92e215969f41b6a57d1e2f424149eea531723821dd4cf8c54325cbe66b002de2c8287de6b41ab4b5c35f060a 81ba492b8956f73557f361a856c6c884ebb300d828287d5699e22e0cfa75c8e77a61616551d0be5178263898c461d6f7 b2608f44d3c22fac8e13cb59e4ade8b9a98c4eb1ec0959ea400c97eb937ae3f66837e91917057148befade8389af2f6a a6ff0323b5a18a4becb2cc6b376086b47cb2baffbfd1b0f2229ef2286fb4a34c5cd83a5faed5def7bbad519fcab8a856 857d879cb9eff22501d883071382832730704bfcc5cd5b07cdce7ab8dc41c565a1eb0e7e4befce8e0e03a4975d3f11ef a2879a20c0360c516811c490289be7dfbf7dbd41d2f172c9239f99e3d091957e0446854f9d0f753d90384a80feb6fa56 83518624f33f19f87096a47d7b8e5f2d019b927e935a9021823fac6564c4f2328dcb172e25bb052748191e75ac682bd0 817ec79132faa4e2950665712b2c503d7fb542aa57b7b36e324f77cda79f8b77bde12314e2df65c5b5296a6bca9bb0b4 b2abf8fb7c3690816fa133d5b4aa509cd5a6e3257cfeb7513d1408b12371c4d58c44d123ac07360be0d0dd378e5bcf99 a9fe1e4fb1574c1affac5560939face1af6657f5d6abce08d32fc9d98ef03186dbb2dbb9fd1decd6d8f4e4687afecce9 89b2f41e51f33c3ca3e44b692e8a6681eb42a7f90b81c9e0a0bc538341df9e2039ee61f26d2ebe9e68df5ed1bccf8cdf 8b35aa7b1d9e2135b35a1d801f6c9f47c08a80e48603f3850b425f64e7fb9860d1adda04f92a1ba22d00dd0a26e781ca 960574978cadedbd4cd9f764bee92f94e08b7af65403de36b21bffc9424bcee845b3b028af2e9e545dd77cf1e69a6a7d 840aa0f34b5b6c39471f54d9e85f1eb946468c4fc01963a9027cd7864df01f73c2e864f1f07aeed4b1b1af72808dfa07 834464a84a11200e3c60f816044c254a7d9baed64aed45a17325cef7fd62338e0a26da78d199d30ac3411714dc813223 b4ac6fe2f5059546f4ad9a361426ead33237b6b9030b129bf0122085c85fe4ccb33cf90f5a7f23c5b708a5ac64b487f6 a12aa9035464795f2a67f3eaba478d5ebc838ed9e997c7dfa241e1ed60a94b367d3f969ccf0ef02028c35215698b309f ac8d926492ec2bb68c6d8aa9bce49085d3d266f3d5f1f924032b87c42b44e41da7c047eeb01e4618f9d0f123dcaa537d a5142425825d813ed8ce1849d81aa40b11f1cc3daa89a9f798dd83065c74820b4da6122b3308f528b074531df66e1a5e 87ff55c9f5aae079e7bf24084dd9c6b3bc260727d942d79cbe8dc13341d98525b4ece3ed8169994b56a387642f09134a 88e680f148ef2ecdcfed33b61f9e0224790fddc9069bd6999e9bede1791e761637c0fd60b52990b6c93e6e5429e483ce 94bc20bf5aac6e9f1060d02eacd06c42aeac9a1c5635b15a83985dfb03938ddb4999a822e865635201489c7f75601b29 849221cab7599f25f0b114df092bd5e8c2430503ae959bef1543a101de0790a78245db6a145e26f40b5f9bcf533219a3 88b6f2c2e7a7954fad11009d839ce50780921f80292320868d481e38d26aecd80fa607e82219a99532d88cf33b39f562 b0d82947dc23c0b88b86c321b582c15decdb825ed909a731b42d46bc895009515a3dc646c98dbec7d71b0722df82392e a2cfb9f7c1a76c8073363c1c3bebe5dc29fa76533caea41046c51ea9bbdc693a121b957cd96be5b6da18704d1865cff7 8f0ffab9a83355a22683a9d998d1c1089449eb308711eaad4265f05927ec6d0d1ca39217082a0b372e02234e78dbaaad ab024661e2b2937ad374c8cf2e3669f1dc55558a3a881e9ec4d461f27e0fa92e2bc88230f038bfb051cf2145ca747a07 b98d9b9ec9eefa56d38cca959ce1aee7b6d4b41a8dbbd34b3f50c0a5f97f84ed2502ded1ce8cdb5895872360d4ba6d61 851244158b3184a62d2c98d148e2b1102cf0d5500906bbc2deda95acc5e3bc4b4a3344febbb31ce05a56dfee86a74913 860d9e2cb886bd3620b5d7499d14b415532482569bd45fd76e3e8052d78a73ae4b2b41f139f9cfb136564108cd93c0f3 8305a052a0fb2bcd41f3aca075c5f7f233bd8f861451d03f3a6e6e31f7d08dd89fe1eb4dd7b238a78b12ddceaad9768c adb703e4778c7e14fb83541ab00b5fc344108243ec6827c5d9b302ee68321aa569da1718424e6a57979ab7536d5eb43b b1a754b87b9e21aeb86217ec5b4fadb7535344567f1bd15e88ec12a833fed68e26bfbe03b7709ce24ba6c925ea0a0e07 8c1e2f6bf820e1653f3b8213e9d959d8649196223c2aab57b7ebda094f4919f88d883bcc6a0cd0be335f26f5a2a9c962 a082deb9865fe8668e91db0e4fd7fb50fb3fdae3e7bf1217ce0aa6f286a624624cf936d762bb2b6c3fead6826694f846 a10540ca05fbcccdd0a2a66aabab3b36e9bb525794cbae68bc3dace6116f58942218e9d5e9af10d67b5f6fb6c774fdd4 b81d22c4ab0ccaf447cc5fc2ff3bd21746617e6773bf43257c0d80331be2e8437b88c9c45309ee46402b38d3d4911caf 84c7c6e924713cab3b149f641dabf63ad5abbc17c1d8ee7802a6630507aa1137f7e034ba1d12ec13f1e31efbab79bf13 8773b9d236e5fcfa8c32e471b555264692006bf9a869a3c327aed33da22dfbf5780ecea7158904d4d6ac4acfe9789388 a4c2c1bb7290eb7af2013f7dde78282148593f066b09faf42e61a3fcf81297caa5a00fdbf6b93609c8c5782a0f25341a a7bfa6e3f273da3dcfac7cb9906bbe9fa4fc2872b184d79813ee273e6cc4d7f37f46164362707a1976f5b6a2c5d7ed1a 8b71502019e4263fcda354a0fd10aaa7da47f4abb7a0c715c7b017e9eea14f2b64009b29b467394668c7ca995adedf82 ad7460fba7deccc3f9a7d204233de47ce30ffa55e1e164975cdf06480a6108720bc397b93ca8c959df77d44a1e1f05f4 a5b8df96ccb7b078a3918e74b1b10da21df982538d2c9313f5129b2797c8a6db9ff8707241ff72d3e9d5983397321736 aa6cfa6386660c01879656da6c4e72497690708bae6c5cd1d088f443cb5bbbe75561d6eec256a72b9728377eb83ef973 b9699ce7c5c878e44114ab7a598646c6c7616b8e08a9ef8ec291189ef9945c1a538d2abf1ce3b0da0f8eecb303b81b43 b8d0fd1d278f53c455de92ec4357885fc6648dc5f276930263da7dc885b4a9628a2113e28b66b1e64fd08189427c614f 84ad8d262f6ef5d93e82ff6f4af995148eedf6d8e079124daee9b99f506e2968922eac2c7d4aea741fceb7733f20b2d2 ab5e30ab54641e3a44450118b8235554e0fcfffdfbe1430ceb3f7ef33325725741995fbbbb0c16f0875aef0f1e0c98ec 80e2cf8bf386ebda46045852751611f2af80eca2e910d9ec5f6e2c7376611534604ceafa639272b3d503b02bd66525a6 aaac69af8fbb87da1c1b7c1b9e59942887ae839a91f0c1d191c40fe8163d7f1dbe984e4fd33619c73e63abfa7058f1e3 a6194224ad838ab86e84dc80e9b8abb121ae6c3c7fddc476463d81f14168131e429a9757e18219b3896a667edda2c751 b68f36aa57aedc7d65752b74761e49127afa65466005a42556230dd608ecc8f5efdb2ce90bb445a8466e1fc780eea8c3 886c3fa235d6977822846b3d6eccb77f1e2cd8ba3dc04780666cf070cae208b7513dc4525d19a3fb6385cb55f5048e2a a9801273ef850b99eb28f3dee84ba4c4017c95398730c447efe8c1146b0719f252709d3397ce60509e05da74ed0f373f a58c2a5dd13e08ffa26a6c5e5eb18bd8f761ab64a711e928e6101512401ef2b1c41f67ba6d0823e16e89395d6b03ebb7 91318b564ec8b2d8c347ca827d4d3a060272aec585e1acd693b2bafa750565c72fec6a52c73bb3ae964fdaa479700532 a058db5d76f329c7e6873e80c7b6a088974522390ccaf171896066f0476742fd87a12fe9606c20d80920786a88d42cec 9838e07f9ed8b3fbca701be0ef32a3f90752bbe325aca4eaea5150d99eb2243332745c9e544fd1bb17e7e917202edab9 85a9ae7dd354f36e73baa5ecf8465d03f0c53b24caf510036b3e796e4764a2bc17f0373013af5b9f1b8973226eb58cd1 896a4ff4508d069a7da6ef7bed66e1080991daee8b227f3c959b4f47feaf75fd1b9e03d0917b247c2db11e105395d685 a36d9a6a037bf498dfc0e535f2034e6cd433c7b52e520469811eb2e9f04499a6ce40257d2905300df7d81f38d1bba075 97aac3c5492aca879b4c06db1834b30b8850a244d29296046a84c637d9580c8521ab4752ef814c96f255a139660d7639 8552bf592a84ab4b356d01643c90347377ebf1f2b38a8c2e55a3f34537b8c7dcbd62e6776d6c2114f2bc2d4344d1567c 84474ad163db8e590943ccd1dc50b4f444beb8275919b33f53d42cba89831e9d42ce2de52b26f4412e2a0676ce913277 900799dfaf5eafeb297c7b4f892438bf2a65ce04034d66f8e5cc3836e4eaffe782fba4f4455a0fcab49102a240d1780e 817176415e35ad4a204b9fd5771bae6cc270f6ff050996cec89efbe461b2940ae5dd3c6c7d7e31b1da5285b207efed27 965e5791c927d47569bc54ec9b4c5305788aecd87a26e402aabeaeccc03480df46f0586ca2e2a9918885cd03332af166 b96d9ada4b5a04a94807d71726bd557de94fbd44042d7dba40560eebe8658d1da49eba54499360619f3b2c38e8b5ed6a a07b6d641a43e02e7868f30db4dd5069a2f221b4f122ce9b11eac04abadc4f25f3207f1d2d86c7935b1a3d9992ea9814 8250d4d8ccac846a4b1a9fa392d9279b5bf2283c8b95d8164c3c0d199fec8849eab85755f2a2a99d584a0407742e3200 8324cf49f56fc14162f9a9ebda1ebda0388d09d8688f1938aef7dbf9505fc119069efc552f68cc7cd9213f96fda2c6de a98e6f1e85268dccbe3bf4e92c9f455c58dcb53de1dba3b78589adf2e50e79f8e245f956e0d098eb46f5d3746826c6dd b103ec12f266b4153d67b54d8fc079357ee342cbe5008adc3e0689a7f788534c4601e60e939731f49e4a1e24fd589f82 b2d7681e866420413cc98eae67614d383943e3762d5742cb3c57e26157633c20880eea1209feaf68402d5d33dd699708 99fed0ae4112ec9ed74baac70d202a885aa51cb555a3886b49016744dd4017640dd5dd564998c4d842a9f38f3e004e68 95c35401314467219c8bfb1ccd1f1eae6ef4fa9e48fbea14f70d5315e67b16c46cd03554471840e4a5030b077d2a3856 8d029380e0c294400d6b8673a23aed43697cb6460fc1bcf217aca3b47cf240886644ed09521d6a05f6abf56f99722d84 8ef54d1dc0b84575d3a01ecba8a249739edfd25513714dd4d1941fbde99dbbc392f7eb9fb96690d7052609af23aa57f7 b8ad2b7af4812417aa8de8f33a26547f84bb84f39501d4b7c484cc8bb54c7e166c849b95240fbe459a4719a6e3bf1651 9858545de898721d19930d8b360cacc5ce262c8e004867a050f849f7a2f2aba968c28d51f24a9af56aaba23a9ded4349 94ea5043b70df1db63f9b66b4f9d8082776f721b559f27d37b45e0a84faf47f948d7c4532dfd854a4bac49fb2ec8e69e a2fd88d7b15e3c2778f6c74470d0f9e1a1f979a4d58bd205361eacadab9973d585a6508e685e640b272d6f8a448eae05 88defd6bccd55db8ca84e3c8d0fc55a3456b41788f1e209d0aec19c9c70febebf3ae32cacaa1dbbf796d7ddea4b17995 88b8cde2449d5ee7de2ee2f32e845d27e171a51ef64f1d3d8a5fd7dbb9f898ea70eb7f6410cddfd7b7ae70ea8073cc2e 8e044fff6ec557824866ac76301b6d93ed19b7177aa6baa95046330f5d69b572b59200e3653cf2f2b559455e782e8960 b5446b4d6741c824885790d2d26258729dc0ba2f469c85a47d38886d933b785a4f38a951d37f3ef4bd5091c03fa3a071 956c8afa8056e9a71ab2e8be5241ddbb3a8b3cff2110cb0e7389493d9fa45e6c4b769ebef540a952db6dcd8bd55baf64 925950cae25615246e29d594ebf34fa7d52f78a9867338648158f2131e6eb4dc17e18f9db8a5fdd76d017b3a9798b3a7 a17ea4b43211ba990270c21562690b3ef154a46c3d669c4674c80bd424cdfa95d8850c8e882b8d06504f929cba3d93af b315ec723973a138508afc387ef651fd8a8804f93975fc36c2eeb796a304eeb1508518d8703e666a74d14318253f526f a995742d7433b3f230e622de23cb2d81cac76de54831491cc29768eb4a56da60a5cbd573e1da81fddc359b489a98f85c adb2e89f0d15294d7118fc06d4fdbd9c51d3ecbcc23c69797e5b8197eea0d6cd1240910cf22fcab4ef1e2dc2dd99da91 b5ec9f9fcd0b5d176b643df989bb4c4c1c167112373d662fb414875662d1a93160dc0b5cdf540e8a30e5fcbe6cfbbd49 b1291b53f90aed275df8b540c74a1f9c6f582e16c5df9f5393a453a3e95624ab7552e93d6e2999784e164046e92ef219 8bc7b7b1a584a12d5ae63d0bbe4dc1b63c9df9c89bdd1095ff4b8e7c822bf8c1994c92310a3644033c7c9689f4b7d2b0 ad7fc45506a10ca48f991714ecc055cea376c0cbe667f3b40ee8dad8446218835439ae59bccc474cf47b053748ceba6d b134756828a5f5725c0b95109e09ca450e3834b127163a0aeeb544e63cc0cdcdf66f8ed98c331c7c98758f46af369a84 94535bf1636be0974b112fcec480ed8eafc529933f3065c40e417e608e43a392206cfde8bb5a87b720263446c90de663 a4df4f6efbc3701000fb072e5cbed2754b9ef5618386c51ff12f95d281d1b700fea81fc1365f4afc66a7c83bd0228fbf b0336b3552b721087c7e2194976a9119aee13ebed9f1c3c494353707fffde52d004a712965f460062ec9443620716302 99a39d1d1ee4283b75fa8c1fa42b6a3836b734be48bdd48050f9b05e48db6354fef509623c6ec8d447d630a9b3352b77 8e3dc3583d40956f9e784e8bbd0b5e65671d2ff2a7c387b20fcb7da9b969f2d122aaf7f054d450dc611737604548c03a b5068ec5b7bcb5d8583d51cb25345990f50d1f7b82fe535a6a6b17756355885047916f466ea3ab09eef5516bbf2dda90 a8284ec1eb1d21e693f31a6c074199ee85d8a8da2167bffab5fe240defa2773971c8437e358a18f7e58d1e2954f57f6f aa7415639d29081acbaac3e9c6b059d68e8702db3f430b86bb6e220d476fa74841c875e9d471c8a5423c58b6fee3cb54 8afcfe6f65fa6e07c2cb3e1756c0ef2c589830be96edd50c3c248e3b17f51a4b08ba92ef7eed7991d81667ddfbf2bf7f 83b9c8dec8ca8f9b85f0e36c08c5523cfeafb15a544398e6f93b48b5fc4b15a0bd05c0f176a9c2469664acab8dffb0a8 82a128a89ea46b9debe5c903b950c0ab30cd7570b979ca911500b5c2cca5c4ee6b2c2fa414b5f28e367f4671ffce60f4 b79fd0ccd2629a361cd6f9307c02ecd4d1f07e4ee03ce4b542997e055b07a026cbc0ba05fe3da309efc58db2e401a8fe b190751141093823b4b5324cc26c4f3258552f7893241201f2fca1ae9b1a1d4d4964a9abdde8642cf308ded61ce5ef09 935fd48b95aa6f9eada0cf9a25a573f0ffe039888b3410788c41d173747bf384c0ec40371bb4383ddcc7d9f2db3d386b b9affe100d878491ff345636ffd874ce1f27852a92417694afce4163e6a80c78b2f28d78102fd06c3283ef273ad37642 a877670276d49ec1d16c9f1671e43ade11c0c1a1413755f6b92be9ad56bc283e4bd2ad860367c675d5b32ff567301fc4 8c660d16464878590761bd1990fd0fc30766e7e49e97b82ec24346937856f43990e45aa8ad37283cb83fa16080d4a818 ae1412087da5a88f3ccc45b1483096aeb4dcf4f519ff3dbe613f63712f484bdd8b2c98a152a9db54cf1a239ae808f075 ad83cead97a9c3d26a141604268f8a627a100c3db7e5eefaf55a1787ddc1dd5ffc7544e4947784cb73b90d1729003c8f 97c3140ce435512a509e6ff3150da385fdf9e0883a5dc7cb83d616ec8d0a0014e4e0fa57a4d12c7997cd84e07d49a303 a353773ff68f1615454555bf658eabdcca40a9c7bced8537ea6fa8d54764fd1f032889e910d2a2a342835513352e2d2e 89e8df0c17a36ffe08149c2ef8b27306d04cdf437135aaeba697abc65e3c8e91bcf1817919a8a826acdbbe7dce79a18a 9928c2da15ac6cb20b15859c22508cfcd452c5643cd22eb84abf5f0a1a694fdefcd8fc329c9b40babc52630743d6b65a 99d837b556f8d13108eef6c26333a183f59383b39958dd807b10590c3d37f62ade6c4a320ca2e70567e0218b0ad5807d 9272da080e4aa18720b634640b01bf1fe506c7c8a89dee8759a53e2ca5cdbbd4a4f3aca54924c46b935362cf1eca066e b4d39752c882de1c1daf3854202c1d58c2bcf35c882006eb640fe54a97be2655281cdb91c30d1a41c698617c2cf64b01 8bf827f4a7d47e07374d338a3d8b5c2cc3183015b5a474b64b6086fcf0cdcf4852046c9e34d7917d69caa65a9f80346c 901bffc7db9c9416e06f593a76d14f6d9e5dea1c5f9557bd8c93b9e70aa4782bab3518775c2a5b285739323579f7cf0a af7e204388568627ca23e517bcf95112ca8afd4c6056b7f2c77c4da4b838c48791191565fd38398587761c8047d11c47 ab2576b5366e6bd88b347703f9549da7947520d4e9de95d7e49966d98249406ed9270fe69347c7752dad47e42c4ea2f4 b12e3b228b761dedd99d02928105494ded6d4fea3026d73d65ebffa2e85e2cd75b6d091135d418dd95ac102c22b5ee31 a20b4a752685d5e31ee7e2353c8a1b9a5265f12bb775004d282a3ecd9deda44831bac1ac5151646428b66909b2a423f5 91a1d4bc0062a86cc6786a96fd3eb4436d8a4a187b7cbba02190d1cd6ed3c3797d9ae7d6ddc413f1c94a21f62bd04ef5 977f18da1a5df5cfdd0276f583cfba2b2a0fc6139520664e20068f8dfdde33e29d179abfd722f142448f4677aa47be6c abc3ece90f0f7b1d80fd917de27ab0d88cca584ef959da520825e54cb5a71336b15f8b348532d08d47a6fa600527ef25 888d36a2c7cc13a1c1aa338a183a74a1f57713e76cb825f9837f43279ce4741999b76a16928147537bcc20f2e0195b0f af3f5dfdc2dcfe19de893f385f39f550cb1dab67c2e97f1d5fa735e5ec96d6680066803e8a0eb010dd4399f654195513 a0fb4e08ff56530a940a86c28830956eb6dec2f020f7faaea7566faf0a4fafe0cffe01480e87763ec22f201be51a6451 92343c5b107910b203c64a79c93d354f7ee5b7d1e62e56732386776e275285561cb887019cc00d3fdbe3b5d54460bec1 acfe7df83c4624188a1011ad88c1e1490d31a8a8c8016b40aebcdd7590d9c0793e80d2d7ce6a7048876621c252a06a5e a7da001dc1e33e0e129c192d469d2bd6e5d2982eb38f3ba78bae0670690c8e70f40e8114a57bd0718c870ca5dd25b648 a903de5ff97dc83628290d781e206ef9d7c6b6d00cadc5bacffb31dc8935623ab96ade616413cb196a50f533e63641d6 8f9658d42ad14a60bbf7263f6bd516cfee6b37b91a8f53715d69f718a090ad92484061c2cef999816760a78552fae45b 8c15b72b3d5fcb9ffd377fd67d9dfbdd706593fba9629002639973db12aac987bd1db70250ded31c88e19efff612cdb8 88a2a4034decd854fb557960194ff3404e239953818a8a891bf72a0b26a8e570a65c4a630884de991ae7452b3234f31a a09cae5c4c190537bf1dd75bd7bce56f7b799762af865bb9d1ee970f6a133c27cce0dd0f14a0e0516ceac41054e6998f 9760ebb1b40f9a97530c3b940d4ef772a225e5b63bf18283f8e302b9436c5209f6294980fd37058060e429fb7fdc3a56 adaa9400eb86d857dc591b25dbe3bc8f207b69e77b03cb5ee01f7e4b006b5c8f6ba2b51b5a45687479885708509363de 949efe6b00b3248846747a9ad4a934d6e4255994c2b540a59fbbde395fe96d69bb67908441cfadd8c8bbb561fe52da03 a19a45504b6b1dc3a0fe0e6a1384734a3dcd5a7cb8fb59eb70e49426c4fc44946547443d558e5719a04884ab3a2811ca 8934c9ee21e8d1435426fd0f64232a0670a7946ec524c054cd4f2cc8b1be9f89cc11002ca8aebae646a2050d91716b10 b1150ff8ffb34ffdcf7d603348c0aed61e5f90ee0a1b814079fc2a41325c75f2f9ee81542797ede3f947884266a772e0 86ce8cc7c1f92af68de2bca96ccb732f9b3374dad6657dfd523a95e8a931a0af2a80df74098514a06174406a40c16ba5 90faabb9ace9e13fd9584932846ab28a618f50958d2ce0d50310a50c3bc6b0da4338288e06e5fcbaa499f24a42c000d5 af4a935c2d8df73332a16dc6da490075cf93365bd0e53e2374ef397514c30c250bcac569b6df443985cf3720a4534889 b7f948ee90f394789eb0644d9f5ad0b700c8e44e5e9ed0e49da4cc18483676d25740710b1c15a557965da635f425b62e a917913091245beed6a997ff7043ecf60c4d655c4db0b1ef1c704fd9b0e1ea1335ce8b9f45d6e120f81805ce31555e30 a48099da8406399bfb1ba834f6f7d864111d0036969a5cb64089947a63dd9467d3857b605e9f57f5ad5f4ec915088d9b 9784c3f9be42eed354542b1446d734521f8e3f01cd9d495ae98f2e4a3a16767fe2ad909e0def5d9a6267f3fc6a172cd2 8d9afaa323847a3226ad7d7b60d87322ffcda2e4a8df89f58a076f7972d896588de685a2e155e243bcf9456b0a0d6d1f 994413faf0b843f4ec1842c706c45ea5f24351c68674a27887bc8b182eda756856e507a4e8bbfd937e2c4c581b629ee6 b3e72d9d1ddaa00c7d22f25462d6e9f2faf55e30d138dce8bb1517eb0b67132db758668aac26164fd934d732633bdea5 8e95875e338f714e9e293df104f0ad66833bbd7a49d53a4f7f5fd5b18a66a61aa0a0f65cc31d55e0c075e0d3e412cb90 b980091862b1a9f9334b428eae14bbf1cecb4849e3a5809773b0d071d609727270f6ad97f329eca896c178ce65883db9 915d7ae5ae780bdba27ba51a9788a8852a15355b569581d1f18f0d94bcdfed2c1ed5a4f58e049e9825cda11f92b2c2d4 83e581058edf9259d0b06128282327cacbb6afc939578223cbf93544599f799a8dce1fb21d52464f990a877086f42506 803612a38b6f6efb97941997e101ac1878e192456f8fbddb3359aa7f3023434ed8fa92e60ec8e7b4473b1948850e4311 864a1bf4ac046161617dde282e44ab3cc1843da01a09ca58aa00ed00eaea9351a07a9ec16d910819e7dcc28b8d2c8ada 922eb142845975d5f6f7dcfee6cac8c299b3730400e6bf82cc0bdd9888de21de9d9f1530640f702c003e1ed63b140cc7 a7db03c5be647dce1385ebc02f4825a654447fa8c4c8d4b22e635dbdd2b3ccdf219384e49a80cfb1e9e6182b6e4227ed a167289ff0f0967bbab6479e4a8a6f508b001bbe0d16cad36ab4c105ad44f3f180e39a6694e6cd53bc300fe64dac1e8c b7766431f6379ce62cba22ab938cdbb1b0c7903dfb43980a417e0ee96c10b86b447241e9dd4722fa716283061b847fb3 90cda18c5d66f5945c07c8c7dc453dee1370217ccb851bbea32578599aa669b4dd245dd8a9711b27c5df918eadf9746c ac690cd2af39932874385fbf73c22b5d0162f371c2d818ec8a83761e0a57d2db2fca1d757343e141e1a0348016d5fc44 abac820f170ae9daa820661f32a603ed81013c6130d1ca1659137d94835e1546c39a2be898b187108662cdcbb99d24fe b2ea5a5950096772f2b210d9f562f1a4cfacc021c2e3801ac3a935f2120d537471307d27b13d538dcbf877a35ff79a2e ad94af4d0699cd49ba8ca3f15945bd09f3f7d20c3aa282a3113cdf89f943d7793e59468386b067e3c1d53425dfe84db4 83788367ec97cc4bbc18241cbed465b19baa76fab51759355d5618067009298c79d0a62a22e2a1e6dc63c7b90f21a4a5 a3e142d879096d90b1e0a778e726351fa71996466c39ee58a964e6b5a29855123d4a8af47e159027e8e6be0ca93d9955 860831f8d3edaabd41be5d4d79c94921625252aaec806251fb508e364e39fde8808d38b10d557e487603a1b274c9bc3a 88da39f334bd656a73c414ec17dda532059183664bbbac44eb4686c2601629ef8ff9da992c337a842e3885b684dd0032 b50addbdf7164e8303f33de5ce854d6f023d39c1c1984b214d9e5fb6f6001cd5bdda816f048a438ff3d696872672f805 999e58c4c69a912b84561cb09610e415b43832beeb95897eca8c403ef4754f4277754d492eef3673afd4362f50060fc9 b88ea0f60f8119c5a1fd9294796d387472dfad22442b29659713d1d88e7d854cb7cf5c9ef773627781188626bb2fb573 a068b3844e9dbcf74b54fd55904d56af754d8ce4c619fead7a07f9bfb9d02118db7c512ccec2489d2a84374ec1d1fb6d 871dee023768636003c799e6f6fd8d31315a4c0da7286345cd64264a016693b3485e0732be1bbd34dd5fa04dfa58a983 8021e8f508680df12e4a5a1bd49f2d7142df65158b0a7198ffa83abd16053a542fb93ffc33e5279020ba8c6a26feacf2 b5d3cd64df5bc965228b0bd4ce9e5797c409f7b64a172ba165e44a8e4b38e3d5fabc3e0b9a19afbfe427f887c40a315d a54fdebbb594bafcefb1a03697711e0091c072e1cc24fb441fefd4e0a0518675a1d7b0966cb8294051d7ec0ac175d0cd 93922202337f72969d6d6e14a29c9c75e0420dfba712029941d1504b9f6f9761d706cbc0652cd09a1aa5d22aec766af1 9711ebf1c7c7426190d4afd5dd03b014a456bbd9d90ed101623866a280550df26a629dde400c03ee3699f7d827dc0bb9 b4d686d8bc5c1e822a50124c1cc23c6bc3a1577a3d0b8d4b70d1797418aaa763283c09e8a0d31ae6d4e6115f39e713c4 a533ea2ac683e4ba07e320501a5d82a1cfc4fa1d65451000c3043f0fdac0a765cc1125d6cc14fe69975f3b346be0fdde 94ee563134fe233a4a48cf1380df55ead2a8ec3bf58313c208659003fb615a71477e5c994dc4dcfb2a8c6f2d0cb27594 93e97d3f3f70664d0925be7aee3a358e95ae7da394220928ae48da7251e287a6dfbd3e04003a31fab771c874328ae005 b57440d34615e2e7b1f676f2a8e379e1d961209fe00a0cf6798f42b7c28dbd03172fce689305e5b83e54424bc3f4a47c 97644084c6f7b4162bc098bed781dd3af6e49e7661db510975528f1dea8154f3d87e979bcae90c3df3a7752eb0752889 a923b27b225b2a6dd5bdc2e3d295b101cac5b629a86c483577e073cea1c7d942c457d7ff66b42fcf33e26c510b180bc2 86698d3b3873ed3f8ab3269556f03ac8d53c6e2c47e5174ec5d14b3ed5c939750245441c00e2e9bb4d6f604179f255ef 87946826d3aa6c7d53435c78005509b178fdb9befc191c107aee0b48fbe4c88a54cebf1aae08c32c3df103c678bad0ca 860864896c32b5d4cb075176f4755ea87fea6b9cb541c255a83d56c0a4092f92396a3e2b357c71833979b23508865457 b78fa75d687349e28b4ddfe9e2d32bb6a3be13220b8f3ff1ded712088bd0643da9b72778bcca9e3b103b80097f48bdd0 8a188b940446598d1f0e8c6d81d3cada34c4c1ae0118ec7e0eacc70d1bced28ae34b99667d5793d9d315a414601c3b22 842ac6f7dc14191ab6dddffcbc7cb9effba42700a77584aa6a8e17a855cd444c5d138f9d61bf55f43c6ffbcc83f92bc9 b6742902c3d145a6af9738c01cf9880dd05c85f0d0ef7dbe93c06fdd6493333d218339ebc2a02be1895436a2f734a866 98bf18488483c627b7181b049d3e6f849fce1f15794de59dcde6e5a9b0d76fd484a46e48822a6a93001d3aa12f48bc6d 8769cac10bda8c53a1c19419ef073a5998f73dcf2ba1b849561615a17cbc0a49bfe3eb4ff8801dd36a22fa34b9a3a7e2 b45c084d58028fdfae792210fcd183abc4ffddeb4cf52ebf3f8a50e4c4eec2a2758f1241b0920bebcb24b757c778577c 85c1216eec8e1fbc1af9b36b93c5d073a81d5fba86a6daae38748ec1573eacc6bef209e76c87a6efbd7a3f80e11d4c3c b8007e34bb3f927ec06a050b51e633d7eb9e9a44715d5b39712e69c36177a03cd68391090cc3293098e54f6cf65f6caf 8e85527b27c9152b1ba3fdd532a76a79064ab097570508f233e09978761dfe3012d537411b47d0e4b65265eb32cea2ae 899779f3c31a20b76068ec8d59d97a64d2249588ddfd69dcbaac6bfaee8ce0ff3c5afc4e17c934ae7cd041b760eb555d a5dac3d8f5fbef018509612e25d179f60d2a62451c76426bf546e9666fcdc73263d34aa6fa7e2bfd4c9947bbf5095eff 896900eeef9be2b2e755128e7b1c436af6fb3984f1e66c444bc15fcf3959013b4902c381f0eab1247f878a6ebd1f4ee0 8cb17f4b0af2e9b2cbb56f46e6a5d6874ea0daf147aae77303020b4e592ddc92e0dd058def7da96258b3a68b223bf22d a1b6d3f09a9fa7ecc021ab7c5396541895da6e9bf1f9a156c08fc6f2b815a57f18c337ccfe540b62d79e0d261facb2be ae70888811434ef93da60aeee44f113510069fd21161e5bb787295492eb8df85103794663fc9305f04adcbcf11ff0c5e a84bbc8624100acfae080ba8cfb48fd4d0229a60b62d070bd08fade709efc6914dc232d3f7bed76a59204f9252321aad aea47d54652abd8ca213cfc623c8e30780f37b095b59ac4795252a29c2b6bc703a5203acff8831314478b8ee8771d4d7 8dd438eb8be14935f759aa93021c2b24e1d588f7a162c42c90ec3a647b0ff857f60e24c0a8953eb7bb04e04be70f11ce 922b07b5469680a10e7532766e099896f4dc3d70c522d8add18f5f7765d4ddb840df109146607b51ceddd2189fa7b9c0 83ef6ebd0ae6c569d580093e8b0b78daa964760556272d202d343e824c38eccb424262e5b7809d3c586f9e2e9c5c5f22 97f98bd357db6e093e967fe180cf67ed09fa711580a5ad48f07cf095b2e8fabbe6319f97d1f15d62c0ec2227569d8dbf a1953a4a22fe6c2beaf2a5e39666b0eb53018af6976e3a7aab5515550ff2efa89400605a43fb2c4ac1e51961dbd271d8 a5cbd67f4c0bc98e20aa74c09e6f5fb6f42c08e59aaa477b4b4e61434c8884bc14f17cf11faecf46dc4b6c055affbad2 87d96818f2c4f12fd7705cf4060a97bd28037c5ac0f0cc38f71189ec49361e438ce863e6617651977708094d5336d1da 85e7c2daae5fe59f8a1541c94df50402a671a17dbb8838113fa4b7aaff6114cf2bb5969410cf21e6a162857f2f7a83a8 a19575083e1731bb04bb4a49414e97aaadb36d883aa993d1f6847db50007315444814740e67e10177a14e0e074fd4c7d a00ebfb5bcc3a6da835078189038a1e56b7dab6be74332b5ff7440e53b0f9e1eb9973effecbbf37000021fcf50c7c1ff 8969d7943abd3b1375fdfc7d6124dde82b0f7193068ed6ec83bcf908734daf3487a6a30f7b322e54a4818ae5f86d91c0 b959c8d210fa43af9b20d1fe0ea8c4921280eb4544ef6ea913309ff9d61c9327096707e84dc1662960519be8e7d080a4 9011d8ac651c42e0cb03931a9e960f58e02524c6b666047525e3b9097e9f35fb2b4b278efcce2bd5ad463c6d7fd56694 937e3b22ed0fcdbd9ea5a1b97b84bbe86b7f5b2de3866a930611112f2217f4ee7d9822c4ab1253823f77bceeae0c8e10 828997e5d121f4c305e018a0a0ba338bd6a34a7b4dc3c5ceab098ee57490311c130e2c045b9238a83908d07098d9fc32 8d114808eac0f2e1a942d80dad16756ec24f0276763cd6771acb6049472e05a9bb1d3bbd5957f092936b415d25c746b0 a063c5c26267ae12887387cbebbe51fd31bc604630b3a6e8e177e71d4f26263be89112cd12d139dd4c39f55f0e496be0 ab1e1582c8d67196d10f969eeb44e6e16214f1316aa4a2a821f65ba5834326da6cba04373eabfd3b3072e79e5c9717e6 a17b1dbaa11d41457e71a9d45d032448091df7a006c1a7836557923ab1a8d7290ec92a7a02b7e2a29fcea8f8e374c096 a1ed7198da3591771c7c6802a1d547cf4fcd055ca9010756d2a89a49a3581dfe9886e02ee08c4a2f00b2688d0600509a af09aa60c0a185e19b3d99ffdc8c6196d8806169086c8ff577bf3801c8ab371e74165ba0f7329981e9252bfe965be617 98c04cc8bb26ffce187fa0051d068977c8f09303a08a575175072744e0a5fb61191b1769f663a426c30d405515329986 a542bf1c9c3262d488ea896f973d62923be982e572172e2461e0146190f2a531f62acd44a5e955a9f1e242b3e46d63ae aef7b7f30efd50e4a66c87482386f39f095bff6108e68f74fd3bb92156c71c75757912b111060cdee46a6b3452eed657 8afe1e0ccd00079702f16ab364a23bbbd3da1889d07c4f8cb04fd994bf9353216360dbd364492932bfe20b8b69ae8028 9896c690999db3c08cd7b25efb1b912c3e0f976db98a3e830f086aef93222d06ce570a7b2babcd7c81d8f9955169669c ac7bcab6a281468907ef1ea8a6c1cd624159c88839131bef6aa0c22f331fc87ec6128a2c2a333fb79df549e4587e1a12 987935c08a30b099d19f96901315a2e60591baf898581c40bf5eddcda806ff24a4536e30ed1e6c0b128a83fc77b6e81d a0a6945bbede3bb09a4a09ef27baa20619d3e15af5673b9350601bcebe952597c989870746cf75767ffb73b32c6c9c6f b0f5590079f0a0302b08a0cc1b7a5f39cc6900c2a5cdc7baa333d8328a731b2df5dbb67e27a154d3c44ed1a795fc4adb a7294bdeea210e528f277f3d50e89e6d79950494478998181ecb38de675020130256f2f2a075899170be964d478458b0 8ab3041b895a631869b439d5599a66facba919226ca9b39d915f19d59f9fc82393ea781377e9bd3bcc5a310e41376914 8da399b59151fd48b2579948bb82698e3c9804d70ec7d6f3cc7e82901f9f2de5ee850349a7d6f43e5e9ebd47bd78620f 80e8c32de83d1083916d768b11a982955614a345d26d85b457f2280ff6c52bb776958add7c1c8878f7d520d815b8e014 81bbec7bd99d2917d2dcd8a288722fb33ad5a4bf5416fba8609fa215fb80e0f873535349e7dc287f892aa56eb9e39c4a 9665796fe04c8519206fba58496bc84a8b9113e7ea8e152b65f7f732e88beea271dc97b1ea420dbc8257cc4b18a77463 a97e342aaaf693ddc87e02790278e4bb50117af4413cd703bdf3b7cad2d1facf31fde1303b43ab2e0265467474f97a8a 925549ebebed348886e37773b05cd8ad04906eca4536bfed951d1ee41b3d362ddc6e1a302c21ff3a2d1e70e95117922c 818fdf74d7903502101551bbf48d3c7819786b04b192d9e94362d2fcb85760d8b6f45165a5443aa5221bef400525ddb4 a9d29de7e8fd31b59f4a087168d062a478b1329cd3c81c31e56de4fb40de7a5be9a5269ef0be452c487443a0b097dd50 a85286ad573db4c9aa56221135da1e31d742e0f6ff01d6b159086d7258f78b08dad55ec8eb5c91ee9d3404b2eeb67e1e 92a79b37db5e777f9ebbebde24a95430a199e866e56597c7d0b0e7fb54c7b092c2f6cf61fb24470ddf250cf609898281 8d79f5ca67ed67d52c82949af342a9fc60fb793c47c76d84b4863c550796fcae2dd59e285897c6fb96fe31cee1efa62c 8ad2e0bda03415ab86324992bb62dfa3612d2d003765bcad1468087c27971d08bdbae5252681f0115a184f4885d444e4 a08815af979286538c31b4aa5ec805053790af1ca58a8c4341be51136d094a8a05e569d876a079033298ad355ccb7ca8 b96c2978d0165d619d08281d295e90df78bc2375d0afbc3142ebff9c2cd4b0f0aa97a9a0e3740bc4dce0ff8a9fac8252 b7752cd0e582f35ab0d0036ca9c0a9fe893a6ad325164d78d865a604a85d3d23729e0362553e8b8a3d51816beeaa30cf 99cef1fafc29e7adfe247c753c475ad4bda7a5f9558b79c86e8a65968ede67adb38dc30071925c9d66a13860027a6735 b9f6c65af178c791b6137d71980651fb09cb5b42f268999c728c6e129985a9c7d77b3dc3b50751bd29ec9ee0b3111dfc 8d73ae61fff5be883a281782698075c5650083f00399992688738856d76d159803be0059fbd9dec48f4f0432f0590bbb a8a4a2865226de9bbf19e12c7e75318439fa6cf1cbf344d5e79a8f363439d3bc5bcf4df91b54581e7866e46db04eaf0d 894582aeff222e145f092ba15c60d3207340c38f2c6792ee2ab4d82d50fb544ae366c2985cc2b6c2f970bcc5f4b46385 956014ba2d20a056fd86cb8c7ceeab9a2c6f905dae24fc1c5278fa5b84335148ebdefec5dcde8eb9b084700724fc93d7 af217fe2b654eff6d11a2a79fe0339a1d4cb3708b7be9f09d852158b5a44b4f9b04406d6d67c4f144fb6b69a41ae9d0f a90752a784bc00df94d960e523f5596695d16a534fc806179e0f878fc0e82a91b25e758e91a165debd815dd1af5f1028 a697606fb32979549ad822b31df8eaaf50de4ead984439a0a33e955937d326519bb9f62c8243ad37f764655f8d32cc80 a3ad4a30922e45a3e665551e5611384f1c2d414f6fa806184b0c826af05f014dc872585e255543794ee41e43cdadd856 b29c255843a82ea74a013bac6c36a694646e61e6b9cefc4c130e2ee261e3bb5da3e0fe3ee7e6fbb009deed0530bc1c82 87e1cc7febefa829cf050aa2aea59385d1048f8617abba691f7ea9ef58eb90ad12eeb9c439af228b0e34897ba1cf1b47 994d3222f89e9c8c154362190be7167c8c2662f0cfa9d50eb4d8175b255ff0de09dc548ee312fc8226963c8c16f43e8b 8f1a980be640820f2d1e953264ca4c30330878971669852be3d5d6b41c488be1628b935388bfa2bd4de484acb0fe661d 854d90d0721579c8c88e147a4aa83553c960617b18075f8224b975562dccb30b0e02e81fa9df7070f356a0eeffc3b14f 8e156da9d4330a03e32a25a2f0b861fd3ea5c719fa4f834119baab6e5fa5236a9baaf0d44147bf0841418900037f6eac 96586fc49e53a6799242ddf617000db5a0ad20c6cb1686af2102623d64a71aaddb8e468b15fa6d100d0384e448548db4 b44d8d85c8df95d504f82d597f8c515866d4d4a326fa1b816dcc5bb0cc4ef1a52647aa5d2e84c62e194c01cae0885d21 b75c43e676a7efd199f8b32ae31f176ec667e714df355e9eecee97246f72af5bef9c5b04c11e7e90fc37bb9163f957ec a49835ac0565a79f6a9078cf0443c5be20561a68b448289589721fded55188583f1d301925a34eea647f90a6e66c6774 b47c17ff6824a00b8f29df0adb7f06223208d062bd703b0f763c6eee4ae62d4217eef2da4f4dde33f0b469c2f2db9e42 957cf039cea6f6d41e368e2bd0cf77315938a0738f15ed9ca342f0a28658b763659ac1d1a85ecb362f13de12b77bb582 903a52f8d2439fa63f59e1e9aba864d87b0464ded63814474947112375236a6f84e8fa003cc4433c8208d80e05fbd1b0 8afd524209ff08d1eb6312b078f7afeb8e1155af649e930ab711dedda226dc2db6b0354aab9652eea7f433f90015bf7b a95c3c9277b11bc8fe191773bf567641be57c0549913b973fb18740ff9cd7b3f7ce198fa4dc1086b2b8a446012459193 9455ce8163fce04aeff61e7808ef3aac4725e51404f0858fe5d39d7344f55dcc7871ca332aa5cb1a63a4399529e48907 809fa35b6958f94e781f2c584438b33f5ed528a6b492d08960cf22ecf63ea3aa1e2d29bc879e17296e0a6cc495439cb6 b0f50774de212dd33e5837f6b496556215c665437e657f674fc5117e5c07dadbd0d057e6ac4c42d50a8eb81edfebf315 844c65e263891d0b2fea7db6934cc4b7fb6bee2c1d0b9ab4c47f2eb3e9c5d7197dad828d38c54139123740151420280b b13c78c9efcbb3b28eb3fe0b971380b7d5151c80948a99cd93c78b4c3ab0e86df6226a64d91e0a2ea4a1c0a46bc0404e 90300a541decad460c348b8f4257f7a29687b2362ebee8d92fd03cc0e85b285ccb0ab1cb2ff5e29c5cc5295e351017cd ac49b409ded770c6d74f6e70104c2cdc95b7b90609da0743c9923179e8e5201ead03becc0ab10d65b3d91a5be0d52371 a257b815bd8289dfdfc21af218aaba12ccfd84ebf77642cc4cf744d9b0174ca0b0d7ab2a545c2a314fd5f63c140f41ab a34778d8446e4d74d8fe33de64b2694ef1e50bc140e252af6eff3ce7b57acf8b6577a02ba94b74a8ae32e5113cf0a29b ab9e935bcf0d8607e3d66f013d9bce7909962cb7a81174923db02dc89e485c2b1c33d6065bdc7bbbe0450b5c49fbe640 94d2c5c5c309c9eac04be4636f61bc47fd9579b47aded57cc6c736fefb8dfd8f8a5de32210f7baf2052d04c0219d3b4b b8dda9046ae265214086355101be3460421f7cd0ed01bde9c1621da510941d42bc93cd8060fd73f374fb1b0a5f38d45e a6674649dab5f92ab9fa811d9da1d342cf89ff6eff13ad49f4d81de45438e81a384098d3ae5ccce4c67bda5dbe246d95 8d619f7564677bacba29c346c4ef67c211f7a3a14c73433dd1a7692e16a7e2562f1d0532454af62fc04c2fd2bb1789b0 a2b93d2fd4c707f5908f624a0fc889e20164d3c61850af9125f47a1719757a6ce6375aa1910eafa4c1e8b6e20c312775 a07d5585447654d82817ef4d199984542328b238157976eb9a267f0bdb2229acc25aee510be68f65a312b68fdd9e0447 8ef55cf95e2b24d8ec88e4136399a7763bd1b73d5e90ea45e9845123e9d39a625cc336e9b67988374b8ebcbc75f2ed21 b62c1fc32e27c767c461411b02fe9aa44a86586e1427406f4ef0b346d077db91952abce79318b382ec75b7be23058cac b252900345f5fa15a4b77fb6af6a2d04db16e878b7bd98005333f7f6e3c8e6e46cf38fc5d1b2bc399c5c2ff4af730dc6 a4ab5ac0cc15d3d17b1747c6e3133d586870eae0a0d9c8fa7fd990ebd4fbb62e9090557ca2792a6bc6271856aa3c9a05 8e706b3f2e902faee10b22742c6c33bea6f670a8937c243db96885143c1db5c979e33ab73a38359b52b8d668ccd092a9 8a6792190ee6c959d79f60c22980ca140c638d88d75660adaf9bcbe6dc4692ab5f01e0c460170f09f74d5e582e85ff1f 97ffeedfc94c98ec85ea937e064d7b290a326838e62cebd407facd1ab4f08d9c0c109d79af7cb6170fccfa6c8243c127 b79970b67c09453614ffd83a0c923c17f857c6ce3c87a356298f8351cab0def7ed83efd4f6638f48df67e07bef4ad9d8 b90f1931c7cf1822cc0a97401119910cdfd0482daf09a4d7612e4e05046295cfb4cc50d5214b31676bb1a1c9d15f9c7f 922921ad813c01fb5d12fa7fb7ed8e0b0abbf7b19affa190b36013c55b88fe3c7df0ae663c970eec7725ba37b95a7cb7 a124f33e7f28feabb4089a063a08d52b7395d24eecd06857a720439dd9414b7073bb86fbd0b04e7bfac62d3dc0fdb2f2 b252fe50bc6677c004550f240fe670974a33ffe7191ed7675da6ac36c780c2f8d02be7da5d92cbe2d0ce90147847f8b1 ae5f8c9c56070f919f3df2d2284348fa4b2e39881f7bc42c9b2f5b7cb1ebeef8ecac000f37329bbe04cc1680cefc7f4e b432a4575caf7337f11eecfcbd34a6705d0f82c216301725ceae2b3c9df20fa53d1ebef65513e305013d1e0c2df522b6 b7c016fbbc4614cdbb12db1c9ac41f9a45d5e5ce82594d568a30cd2c66c3cc9d91a2c959697b67c582a0913de661505d 8f6f3e5e0347dddc1b2a34ec0dbbbb7cafbf976f19c9c902efb5c1427d1bbd4b71abd9f3fba20dda75c35a39393c989f b0042a1d33a1ee9fdf3fad2299b8d70c4f1862d8393b5ebe3ac2189a2c5a58bb826128cd7a39b70d524a6dd976097e26 85297c4e8ae8d9b44c3fe51aa926c77d55db766c2a9f91b659040de36e34c9a4fc6f44380f8d61704498f6fd52395a49 8c61a988b6a00fe5a277450f30bf6daa932e42a2eae844568e3babf8815e09311f3c352dae6eb2d57a98d16b7beb2d22 990be28aaecd932e7edb2a97b9be2789a3905cb88737b1c79881302585801c69a3dd5fb230808b39db1352fc06e0b4a8 82fd14bdb335aa46f022dfe0ed4d631911e6b6f5eefb10d11e9e2e02a7df55012ed8162249d10b58eb76ced5a7b06cda ac39cb058df764e161db9c39b185f09aa210bddbd66f681f1697ddbe6b305735612d5dd321d3ffbb4876771bdb321e2f 858a3f7e57ccb81387caf8e89f9b6039e9aadeab06886d8688fe6427151a59ab2e77e85ba850c67d099965426c97779a b57fb9ea623cec432946819937c6bded0b5d03c8c67b52b44a4b67d34adfb055e6cabca67a48e4d859b4be45162c5083 b84d2990b563d6d7fe1f4c1894989db25b81745090b94b1fe2ef708ac3b2110ef93d647820b2a51fcf78e3f00fef5412 817d85b9f5e1521733d2b1fa6d4f4957ac445dc803f97fc495e20b819b14e651332f9e0573d684b854fd47824c53f0e8 b09e18e97e93a8523101af594422fb71afc5b8826002314269016fcc1b44002d91bcb7c90d923d460f0cc03bddfe9af1 b867cbede82102de7cf6cd0dae68506869576eaa66c3fc806e73585310602682fc912dc37adf5ff6f0f34a07831735b1 b1126255798368b692f2796a3470ed16e5ffdee2d8c9e0f7ee3d2e92950c3e6365c32895171c3494aff2a6d6356f7e25 b05f0a0996dec16335c770a5df3f0b08e20020c838c2caaa1d3a4a2490ede98552f5de349de2ce6e4c4a839731d80919 98c512bb91c8fa191120ddf5d63c88076581cf41e15eec3c168822f12b3dd0ce4d6df74a7e3093d3e35cad1cb3135421 84ce38fd97f7f90012c2c1e59a67bf9f465a7ccfb6f308bdd0446cc82b8a26ff7c30e5c7cc375011718cad1b31adaa9f 93139db52c9fb96dee97a0825f21e34c5d6d36838e1e42f4d12d01eacbe94426c85a811fe16ca78e89e08f1c27383d28 81454037b1e7a1765f67e4288b8742eebf6d864d9b0f508ab44fa3243168ce0ed30cb5f33dfcdb995cd2c2710ff97a6d 828deb2a26efb2ff1842f735e2cc27162360f619b6e3e27a85bedf384912d4726bb2759a3016937973092ece1bf90540 87e5a7d4e7bd301078f625d9a99b99e6e8e1207c9f8a679f8ebbbfb467bfa0b5f7ef4a4d577c7d2670efa88221153012 b9dc9d0ea48deee201e34379447bec789c8924aecd030eeb93db159af77eff230976ef60ea9f4b4a9e9e95c1f9f4284e aa6528268d46bf0627d87d58e243d3ac34b863513c725908a2617e4c6a46ccb1d8c8334bd6dd0eea7ffebec44259dae5 8d26c9ce07293f6a32a664d31e6df9a7ace47e6c38001635918efd9872aceab62de7757b13b783d422eb67bd28ce7bbb b0d3ca88d9829a7459b89b0dcbdb8bbb5180b00d750bd959bd110f53c2dd5d4db554b6005c4765fbe7ec5903669e5ebc a94d1c72bf3b2dc6bfebc9dee40f6a89a516b252bd9f4fad96f156e3dbfc151a9b8a02324d764c7656d59230a18eb61f 88996e79171e30b16505638d8ecb25afd875e5f3cc3e29860937f2b5e751c66e78dc77f744a0cc454a8a655142a93ffb af4d94f342665fe7ecda318de6cf1bc1c40c37dd83d060fedaf827459728152b5f0e280286ff5e6a0012036f6715f53f 96beaa7a2d565ec14a4e5cb895d33624c69da56b75c8d06ac729cb6d0cb64470ed4f9b0387083cd827b1609c8cabde8c 96b773fa2fcb7377bf71a7e286f37f1f24ee42cba5b4f33903c4566e5e5bcc501ea360e3c8435749107c3de84e272d8e a69ac6218454c3f40ad0beb48821a218fb0a4f33ebade986d2fffd9a3900d8cfa613bc71676c46cfeaa5f644d1f239a9 857f139c08fcc45370f448ce3e4915bcb30f23daa4134407fc6d78efac7d718b2cd89e9a743eec7bf2cc0eccf55eb907 adeeba36af137fd3c371a2adbefea614c3ae3a69f8755ce892d0dd7102fb60717f5245d30119c69c582804e7e56f1626 afa97ca3548b35aeda6bfed7fbb39af907ed82a09348004d5705b4bb000173270ce44eb5d181819088aa5a2f20a547a2 8423bd2d07073b0e87819b4e81997e4d3188b0a5592621a30981dc0a5a9d0578fde1638a364f015078a001afb00891c2 b92e9d4ec3966981ee574695d6e4865810b8e75313e48c1e4bc5eebae77eb28740e97ecc3e5c42040f9eb1ee4b13b0ea b07b218321d54cecfcd2ed54a5fd588a6be8d7a5b6a66dff7facfe061222c40553e076e57cbdfa0bdb08e0a009c94ba5 a71e1ae4d6096eac9ea4c21f621c875423de7c620544e520fb6ec3cb41a78554aedd79493cbd2c2ba4f0387f902ddd2a 807cdac291246a02f60c8937532c8969e689b1cfe811f239bfdee0791e7aa0545e9686cfb9ed0c1df84748e5efa5e3da a1faeb4504c057304d27d54fb3ec681462384a354a4f0b6c759d4fa313253a789250c6b0f44f751b0718592637438a19 996bcd3215182d49f1cd15a05e1e0a4bf57e264400bf14f7253c6611d2571de7130cce81fd28e0411e0a80e9054f4f98 89d15b38f14bcd46f4b2dcae82b0e7bf9a35e40bf57aa947e9c4a8f87a440b5cea95229708de08ca596762062c34aaa0 8d8ddcaf79374c750b8b0b3d196acb6bb921e51b4619876a29d09161ba82a42271066187211ef746f9f40a5ca17b75f7 a3dc7f70f3a6c7edc483e712770abbaa94bfa3174cfee872b2cc011b267e0ef9baa1ab49e4a6c6c30dbba0e0a1237117 aa9e958bbdcb192b19c43fc6fd34afcd754949fdada98e9f4848e8db0e23acb27d19dd073c951a8819000f2356aa22e1 a4714e45ec853eadfe5c3bee7f683b81f97857bbd7833192a48936dd1460aee68f700a21658658b74b737c4fecf90c7f a1ecab4215c1892e4a8ff3405d710163875e5dfef8a8cb84f5cac4e317d89c7696e3f496ed1747ca6f52b304190f4ba1 b9b48943eca3686219575026d395b969e6ff8159dc5317005df090e79d26901984e40ae4b1af060ed3ff6f42e0417d76 9644b9f90a66edb0396abd8c00066886f978ebf56fc22081031fbc9ce371bf9b04aa5a4ef59e59319b3a05bb7fb88b43 b2bb14f1c055a78596488e4e2d4135a6470c1ee43961952160b8498f674a4d23040606e937c02c1fc23dbd47e9bd4633 8c61f2fce9a42b94a389c7e52d7d093fc011099d0f4914f6d6f05b631df7b88182826edf9bbb1225971a080ca5c0d15a aa6a7b8499cc7d256043eacad18528d38bf3be970bea4c6d4cb886690280bdb373688ceba3e506471e1d9493dc76f3f4 8127703363b3b35b06762c2353d4de82b7b85bb860db1028d3640f46bdb78f2d104fa77ee3e0d9db83833d2b12a966f8 b7b01f5909f2c66ae0fab156be5d79954e3a304615e1fe55945049dd4bd95f973bb3821117eb54db7e9ed1ee9a527652 8be47ba5dfe212420649193490838670c40540e0ea24adbab18c4a66e7ac3dcf94f068dec2533b60e08c1f64e7533e54 905a6c7e24b86aa54a05c329a6b4616d335bb0b1f1e9987562eee0acf82ad302c7c44981a1dd6b24c6121ca12fb92996 86969ccfd91deed93b355a2c21319e3bb08cc652b741463bf68c626b7ba2afce3f7cc397f2fb74588c2893477c948ae2 b5a9d20eb12c331d0d300fd4b85b0ac0bb74573178a5fac8ec9dce5e95acba07fab444260355ece442a846737a2dcd1c a13497c11df21b11fc1a63b0ffdcf7f432da4dc2c98f8d07d36da4fa68aceb57af2158088e5b05e334fe0f264aeb7a97 882e4597cc66498a45e86a2ed9ee24652da4699af00ad35f73b5e74fde6ac3cee70630962d5ddd86162d4aaf11bbc11c b748858c2bafa4a14ce44af35195e9c52aa75e109719243bbe278095acbfd6a7ae7e084caf8dae6939039b5a4e8fd675 83a2e0524507e74f51fe976441108f8226ba1b3a33f4e16ec45c5661ce80cb1840a93d17122cb8ca9e0f80d14f69877d 846cd2946c93ee5f24243d9ebc69936b3a1a6d59f45fec6c79b1eddf15ce30a8e73ad03cf606ee66baea3d8ff115f70f 8d98d0a3a94f6efe158f8423c041b546416145c5c2254bfa157efea0d1c99fe58acc7df6424ef29f75960b18d664ea4e a39fa47e4b79f54dbf59d0b1726f1e78bc219fcfc56ad238c84b4b610e7892ff1e65d537baf5118a32f5e2eb80d5ee0c 8c30969a4519131de5e30121c84c04f67b98c8ad109fa4710dd3149cae303d51778add3f258f0482f1c89c169824dffc af7f80d141ceb78b4762015de17fef49d7ff6202d292e9604deb508272ee7569f7fd5be3b2438da1dfecf0c26533ef86 97cf82f70128251944d79b8845506975405bd720e150d836205b048ff36ba8801eb74cdcc6425f28f6bc0acec0a81463 8c276c876eb88688957d1868bf3a1462375e608ff72b49870a5dac82cbf6584e00e3f36f236f732348a47502ccf9539d 964765f1a5c8a41d8025ddf56dc01b78424703d8a64a4e5539e477cb2445cb541c70127c561e717256d13f91a830ba83 a2aacd9e21b8c8efaf2319611addea1b9f41430aee42e7f2a640cc693aa395287cc8fdc2806b76b577d84fbd05378ead ab11eabbf5be4345a77323a3b75f9ee93b011fd2a9d0154e88183cafe47f82a7888666af16b40d3cb677c94bcc755ff7 a0bfe715a7af5a29b1b6148b8cbee585d2b49fa6ce59bcd173ea3bbc60d71a62f9da27ffcbbd5a6da75502112fe44d70 902e6cc38ee42245103d90b65028a471bc7a48b825599d361aa81d8c56e0fcf9fbe8d4c13802040d2cfb85b7e022eea1 8832e2b5014fdef4003bdbb87e3298fdbdbbe49673f6b66e2373f1cb2605f9c4af2cdf9bfd45d1993208681d29ee1c9d a7d39d3fa1ec1e0c87730fa43d4900e91932d1cafb36c76b2934907becf7d15a1d84d7234591ad4c322b5a24673bba8d 836ed5f09d99624204aa3aa7ac601980fda223f3b4b96b4a8fb235c574a3545d518787c12f81bd5851987f2860d41886 94235e94445e6086f6e9331923262070a4c2ed930ec519eabb8a30133bd4fc6debb99185f4b668431fae1b485c5c81b7 9828ffe20b9405f117dac044159be2d3c6e2b50ecdd1651d6a73f7633e6e2a7ba3d783ae939973604446d3a1ef0fb20f 92f03dc365dfe9154743ca70e6dd2758f064e3286fc543cf8c50f68effdf7c554bd17b3507c6ff4127046d9bbb5522ef 91ed07df479d8eb3d31292a0e987672a7f3d45ecafe72935b7abbc3f23493605134ce573f309e226c9efe830b6868220 93bee582661e6d6cefeff29002afc2f36dd2c13dbf33f0574c35b290ddc426170a5f7f196369ad592efcd72cfb6f8fc0 89a51467d966f48fed15dea5a12dda54d0015f69e2169b5e34f44c7b5a5d4c282d6f138116a0cd06a8476980e420f8d8 b8ccebc14b6679ba2399370848864f15f63512fd6139df7359b7b93e82c1007fd85137ecb0597294b46643e1a9e7ab5e 841fa301567fc57b2cd09508ce75326684e12bfb8add671dc208f579b2500b93d5b641e9f59bba798ed4ed1259757f7d b3cb45c15eb00b4ccb7013299f761cb8fefc17adf6db50e9ecb8abe927a3bc7f28e359e64693813e078e1dac800ad55b 96e55d3b9f445f5679e34fa5425b3e87cb221cfbdd07f8353868c7f7f4ba388ee3841cb9a1d638583bc20d03a9d071f2 a7dee9377de740270c5b57cf86699004ba8dc2766af56b388b5cb0814ec71bb99ecf43ee3d82a552733854ecc7def0fe b129dfff23b3c1c95ddb214c4711961fcb129efe2b6557ec9e116ada909593d0d2eec2c628434493393c58c52aa86847 aed2670e201cb3e38a8be3c86735a4d76255e1e5a4c67b91df6ed262d09c8d10b0a3891da3e6ab934058cc9a7178931b b20b8921ae52e5b3c94fa3a8b46489044174f7b897779e7763d6eb419e808d76705b7e7ba5131576f425aa81b6b0de53 a7e45bbc3ba1bc36617291ba7663806e247f1b57a89e31520c64a90cbf8d426cac2e2f381338baf78c8f92fdbbcb7026 a99e651e73a507e9e663e2364fcc193ec77e8afdc08c2bed6ad864e49b537ec31e9114ee72291a7657899f2033a849e2 af966033636c2e9e8280d173f556fe07f8b6940bbcf6b2df7e2165c30bea66cced2596f6c17ca7c1aa0e614174953ba9 b69ca7a79e3d55ef21e0ebdc6f0c4bd17182d30cf6290cccca7d2551c91c12b966020d8e40e4ee4179488c9809c03ae4 b981cd36244e035fef043f70b1d7188d7cd045b4de0581c459fc5730e10eb7f3d5893b54cc4243849c0855e4e621167a b20fea858a36921b35a3051ce787b73f70fdecd3fef283c15a2eb1bffb1dcba5991eee4a047ce4e87802da923fd9457b b040e6f2e56dc1860274c263d4045837456f74b354a679f6b5ea70919835ebe5d32bf1f519e218730096c98ff396dc9d 8d2dd60e702c923a7204b530e7d6c193c6f93ca648c4f7bb38f4edbeb0aaed84184213afafb8db6aeb9197c24364276c 95dfa7348709e43d71285b28a0bfad3ca805b6ed4ae99753e9f736c79d58a35a3a50b42760ccdd03eda50f6e59494968 b8585632a13f18c139a411bb2f02df809591834d127cd1ff081e26d0abfe0e3fbb54abea26538b25a0dcb4d7e969590e b46ba47858a29c6d523c9982660949567666daf2582b93393a4802a9e077eedbc0d49d454731696bc8e46ca50c7caa40 84b756b901b98a4404e58d70f39f6ccac877146c866732ae65e7e82727448d1550343bf7cdff1bfd4ee1ed73793db255 83e5be888eaf877a2c755897410865f64a6d1169a8ccf0336092f3932abab915e542ab75a35ffe016042340d581ee987 8cb274fc39285aed451a7def72cfbf73168ee10be02affe355a2bf87cf361a81ad284e9334cf00c5bf99a13d9f75e116 91ff6220924b94ae13f50eeac16a159232e4f16a73fbd5c22c0e185cd1998403904d36bad203baa82b85819ee4a8ac10 87f46e08e09aea2ab37b55fc300689d9b58ff3e72f1cffe023386035888f714fac4673c7c5193d3f3f3c568c640694f0 835d7d84ca7641e1b15095830114aa6072fe12260d2202456cafe2308c22651af9ffbcf6b7e56af97167dd0c4e2a4cf2 91202183f79794f114fd9e3b9bd05553c0e8985919965101a57d97ef666b028863e6cea9735af016dc1864f1542dee51 81ab2b02a9b0a490a74ae615ddd4fe560734c1bfdde6b8dd13303c1481ba0e8ab14473535a93cfe4e824a0ab29445f8c 8a32d73f4fc006551d4e2c61eec6130355ec9b8c39a65c24ec1edc00e80155ca83a8ef2455e892521a3d47634d82a987 af70d7b8f13bc90193cc1cfb0c400c4224cf10f1887848aa93e6380f7087782fc41a159926ab53c53eb95c2383b1a849 989bf42f9d357c51774f1c7c0f7c0c46a8cb7398a74497141c32685be098e38b4230ffe833a6d880ec391a35b1a747b6 94cb6715ee95700020c630b8c19e35f231de970219bd7e6ba7ced01899197da473b6c45cacfab0d652ddaf547b4ea58c b12e3331f1f7d7458393a785e22e9a5e1d1daea521b4e78c0ee8ca59b41ade1735a29820e18f6afb2f2c3c56fecc16b6 ad4b7cf654349d136fb41fb0dd65b588199f68b462b05f5c4e5c2b468bfaa6c26329033e3c3f7873dc8ace89cf873ea5 a3279969e1ab596df0559ffc5ac7a6dc849680354e01c3f4fd34c6413a3f9f046f89c1e1be0b315d8b6dfab3d23d5c14 ac74cc5562836ed89d09a9ae6a3644c936d64bdda9e77659d9982f1be29541b03ef2723236d5465e398373ea19a4ccc6 98138ebce1af531dd8b631b3e74c84f0c700355a2a9bde31e5e51bb10c8bbd766559c63f6041f4002568803fe08438e0 9006445da131349fe5714e0777a4f82a82da343612589a0c1596393e8b6894ce1cf42784f95ff67a8384ffe1f1a4ad76 88502a84a85e4ce54cfed297b5d355867cc770a8ffd0714a6f23b1ab320a9903c6e42809e034bb67dbf94c4fc0d9c790 aa8b4bf123d1a6ccaa44b86be8f980005f2a0a388a76cb111b0e85cd072ef64167fb0c097c7b23c4bca64c0260f6cce0 ad49eb35dfea9feabb513a78dd1152ad7eba22fbb02a80cefc494a7037699c8df81202dfec12acc1b9e33ad680cb72d2 8694da730231b29afd5196371ddcb15b4dcc499574bdd063f4864ab80749833ea38ab8b0ca1629a367fe378e87a60a86 8eca7b488e810c479e7e32e24b8afcd837f7df183fe4f621a0336b53a9ed77603c84bdc365d8be68179a32b71a1deb7e 8875cd3e23c7e1af55af1b091025a08255743984186770bcd43f30b4a58d175cfdf1984bad97a15e08dac2da27198c3d abdafcf58ec72997e494d4714645f40d09dcd0fbd0733e640eca44eeea67c25bb0c270299c459991f2fae59d13b4f4d5 8f040970141e61489284f3efd907705eae6ec757fe8e1d284eac123d313e9ac1e8dc14ae3f04d281e1effc49d5d2f51d a7ff115f0d2dbf66c0e8770b3d05157b37357b9e33e9a447f0f3fa9da69ad04e371fd1e4848cfb9e8d05e3165bd969d8 a39b1a8c39d317fcc97bf6c396e6ed4a85640aeeadbf45166bd02bc3bdfb6266509159c03afd492e642384c635b824c0 a2e1b90f3dd2d0038eaa5be52127844ccf35d997143179d95ffd3749c0896398b130094d01eb1bb31ffe80ef34b42b48 a2bbe31f89b0c3c375ffaf63c8b7831860a921d5e388eb7907dbf61f2601ea40db86bb3952ecaa26a5eca4317a848ff9 87d885bb0f2ce04b40ce94d2557c15f1698dc652e938f9a2d69a73ccf4899e08eafa1a59a20cae92823795f5b94f04b9 8f7746370f8a24a2889d351f3e36b8a7d60e75e50e8f5abeea7dafc75441e95915721654e61ceac51bb6f112780d352c a7272847526ed3d9e0d0fea1d8685b07b5b908971490bf8a46748c8b1783c629b8644feb5bac772ae615daae383d5e72 978c9aa2996d8bd6fda7e0393fa8b38747f8f99712427705c00f6e9a12c36f8d8b4cedb03fcb9867155cbddb5200e6e1 a4dec4a2354b2b32434c5bcdc380bf84580c6f9940f94dc0498a5bfe89c675a0921e66b807a3d859a6059a464cb2a9ac 99459ddecc7abce437f68722dae556d8ffaf8ed974f459e52e6d4a64f176caa4d42c2f2ec57e8a5b5f2034638e8acb0a 928c68c0c9213fe6258ab5bb0c693d97203d15da359784de7824dec143212da57d062a1fc70a79172cee31adc7aff382 aad3f318f1622ea87e12541dfd982d71629b8f1ded4c301f9f6b6af9432716ad057773c33bdaa6f15dc151b0ee4505ea 8eb8e978f149a983fd6ad01773f9aacf57bd0cc622d8a301e404184b37e610123dd081faeda571a0ab1f149a3960af10 851e7191d7b94bd422bcece5b92609fc1b1c8556229bc53e32963b2d2fd1cacd8ce5da9040b599eca6e610540f8a7987 9414157fe9d50e5a0b5a7397417681bcb3a651eec1cab63f2a88d5df68ab1fef6e4c1d7ba657cbaf241a7cb790297633 b5cb2dafdc5408959780754a58b2da55b2a9136672ebca42f34da4e329ddc89360e7218cde3efdbf784ddb390deacc57 ac6b70f65503a8e94b773fda3e72615745824930114fe72b6d833484285462392617c1b2eea4a250fedbee88f503f3ba b0829a5312f9ac6c06fddee2f835a3452fe994f6d42c9edfc390d7d5b3240ca544433b544cbbddd6516b38a6d5d7c21d 95f8e2c59905957e34d53be3d6fb85732f834e2cb9ab4c333fea2f502452a87ccd035fc9075d7c0bd8530bb0a0c96527 b93f279b7045f2d97c674495f6e69a3e352f32f43cc60300193b936c2850b2805c15457251f7e3f633f435cb2b60405c 915abf16cba1a0b655b92a8a70c03e7fb306b86f3bbfb66967ca63e64c003b59c7a5953675efa4fa0bce9bed536b6700 ac2047f50a319d09df1ec44d71afdcec5ac3bd2765dc98aba347734aa780863545df9f6d71214d443e3f37edc0dae45a ad49c74ddb24c8a26b14ec08bc807313c77c5967fbb36237f55994d7511bbac8d7e7b9b8ec53eb1b3b066989f078dbd9 961483105f605e959213fe9e8a52b76dac62d7efd2319ec71fc4e92d68fbe44cd2f65d7adefb2eb64d591b91648b8085 b67fcafc97d8df2b3075bbff7b3d7471dbf1f3048f309e55d5e2c5bcbc7a73aebcb0697859be9f387cbc7ce98041e154 8da70ac16468cab6066992389cb37c79ff5e0babbe67d76878aef9408b9597a3dc2eb5de87428bc761a0d78957b0eb28 aec0ce89770d299b631f15ae12f94b1e1014ac57d38fcf037c2c7712d770d074affa06e97c60691bad8733874b6ad2ed 8b702c85fa4c915a09fc86507f44d7aeda0993b77af87780d70cc98d580c6e996b64b7c16cdb4dd4562cb0f75da36ee7 aaeb43aa472aac2253e211fd1066c3a5422ea041cef20168702d0618a1a742a44f7fb30a76677640fea1a24e7fae1996 a8820e92825d6e02b9b4ad5ebc86161d3244cddd3d244333ba1576b6ae10948145b68d9e926bf6b7a2c25dab4cf43f3e 8ffdae28a1f1d15d7ffa473628a66ee9a739073f59ba781248286b39cb8f7255f66d62337064246713cbb5017e615174 adfc5dd142b7911326d8424881d5d92006f3b17de4cce91674d6ea37f00fbb266c791ac13f6c7a0f61d04f2a952e6a04 87f98982444bf661f539bec73a10256f079a4baa88a1cea0351ae3de929e1c500485b2d1b5d933063cd7d9123d5050e4 8f217ba4dd404c5ee384f0c9a126686db001ff0344c01c82174c5e5ef89d1a241b146008c534b13a0da6c8afe7450fbb afc85476dddaf1cbb4ba8b22186789f3818c7964f9f613e55010278800cd95422702248bdf9c73760702ef24854795ec a59e0f6ac2ccdfbd01f002008034390c0ea78716f5e0de4e474e3558755705c9c7afb6e3c5c4370e7bbc85958a9c7a63 97c0695c58d792ec31d9b86d3b2fc1382f0855057b24d5f6a54c41f76f9e2f52882cadc89a8b2f121530e7f1393faa95 8e49112de0b2649c08a96cf737af68fa8055f1af594846a2d0534c94df6f926f200405edaa6e6ac9db7e380707a2571d 99a1bd83a7ac5f8d77ddf044c80ebfc5745b998714696d67b94d185c97e9d6db989bacac646d9def463127a8b2febc00 aba80725f9f9f7abe10760eca73ba427ca8df864a157122eb9af828a05b0199de3add02019a297750bdab5380e505c58 ae18f62573275c1eb268f74c5e54e8958547f9e7d1d36a05b084eb53e5704fafe2200b8aff95cc7e9af5be2391c42b7c 908b8031d09d22b2aefeaa876a998e0a97c7a1070aad9e9c97836cc5aa6d2d5ef94230e1222074837b5e21b4e6490f01 b3132282e8b41ca6789ec5c43c1fecf3a65b8eefbc2f3d10f746a843b9ba4ce6db664678e75e424f7b11a00c1440de15 a1eb49440cc106ebc09cf198c93e8070271eb5a936d31c04858a2b311a037350100c7957d5545c9653f396aa968b91f4 81df6ad1bdd5eee4cc2f94318467b8602d15cc1be2b48b09ade12cc46ee05cbaaf77a20397e5015030b1f1db5dd9dac0 87236c68a2a93c8442d15d7f1d1dc01d1fd123439c183e1d843f4ddd2bcf638c128f66f1ef9b710e5d1f64a52726007a 84f2e7f85563bb2f61b10a712c7605d63f79af5be0dba056814fd3efebc20e9c53227c56577b72c68d185571b775eff6 a36d4ae06688ece2927aeb2c7f058a3cd2aa1de1601282d4e688e1d76ef20728b892928deda2314eba41675eba3912f1 b8326dcbcdcfce017b263c456c47692fb476c4225c95981666fff0b7d4522fc23b7f12273f0f47cf0442662124e6648f 84c66463ab277cda2cc7007d0509269e89cdd41c5e0d3773a92615f0fc5da63811186b05d7a11088048a5d4834a7e0df b20d3571d970712ef4699b0e7034fd269c361f53e1572e2ea2676b4245e992d43b8b5931a801439a44d977a988cc360b 94dba6007e6d4998ca1eb84aa8e2a7e9f5c164b9d80df2825f2208ce5640a05aacac2e4f08918268990f43ae1ccab69a a1c25f0b3ef9d1982153207570d9ce8d692e1b6963b509958dc4d9bcd80074bb221c46804a6d9a29e76149cc7787c282 8857748fcdab1199fc96084323a81d3bd8b5a7f0b1abc5bc3b5252a19268344e2e7d2d086c90fc9b5fa4b92feedb93a4 8b9c1d841447354b6c086549e4d1d435ab64c13933488c34bc30f0f6eb36c5c5b838b7b6bb018542247edd1ada091045 8f5b655416da0e719a204fc567e93792c301acb4374cf7bbabc6ce51dbeaaadfd75c2db0e16ce073ab8e91fd3d7ea9d4 90f2846b19be46a75c5cd0cafefcf9192e6fd80c479e8d6320c4b8d8d7d96703c9e77ff31a67afa9858e6b7bde1f7cce a53e383947fd98aa1a55ac956214b46b20a52758461e8ba41341a23a835ebb713038bf048edb1202bbfd0b56a96bf292 9542d7debbcfb9cda6fa279c699a7b655c03b9a9b456a5d3cfc41a826c94eafa43e01155a29e39ff0bcd965f4c0c512d a43792864ec5fc549f7afc02622454afc0e425c310c4039ba615067243ebb26a4c7ebfd19bd4d57ff412a4bb2a7958a0 b85123950e30c048465bf32365d24a5d4b21fffc6183cdbf71643a07b87463989b72dd9a6a47f134856f704909a6b38f 944ea689aec1376f855c0bc9c51378ad06ff758a2c075b95a60b535b88b36eca0be11e4edb5152e98cb2137d6e749f27 a6bef52cda22325e4c62d323e2a0e3fa91c5552fcfce951edfd52ad6f652bfdcc2341f1cd349e6b5d447924dc569bfe2 b56bff8ffe981bfcb30791836da10b87f2ccbe17ed969e7f7a650af07d27ae0223805b1264d985148208483be50578a6 8b209cac898dd580c82d854a553e2517497ad1a4cd198e1360b8b50639b380aee70ee4b87625d9b2278228ff644cd25c 877cce233fec74c7158b3c5bf108365e98238418b8a71f058f1aca44a0fd3a1021e3e9025bd11fe244d9fe0f5034ce7f b1b871aeedb03d6f6accc99816b89f5958178738d8d8cd9717527d04363c80fdb5f6848122ae19fdbc450cfa11e753c8 858aca51b9e5b0a724e88688d5124eb24c9faf01a3d465e74d31de6da315f311143f22f60201ea09f62c92f61f09d889 8521d409615dfc8c8289e00f6aaa6297c2c4e1439b25952afd76aac641b81c70b9cef07cd58c1c0198382bddd2bd8544 88647c3e41666b88acca42505f1f5da226937e0522b538fe0cebb724e9a99730ca2522989e94a96cac94109aef675c0f b417fdaf719caf38854e89ce52031b30ce61a632e6c3135adec9002280e022d82ab0ea4ac5ebdb21f1f0169e4c37bcda 9367a6feb5e23ea2eab8ddd5e7bdf32b4d2419fad1c71a1ed327b77362d8942dad971a1c2e6f7073885149cdf0a0c339 a71c5c08d50c57d094d6a4f02e97d3799bada92f238ffc07bd223bbe8379507b7310d20b28f5bbbf331e5e153515e491 9630a9a3bcb044b51299c4d3d3388a4ff47308dd27be3229601985478c0f6b55faa7e20815d8694f910611396a9d0d45 b0bfaf56a5aa59b48960aa7c1617e832e65c823523fb2a5cd44ba606800501cf873e8db1d0dda64065285743dc40786e ================================================ FILE: src/ethereum_test_types/phase_manager.py ================================================ """Test phase management for Ethereum tests.""" from contextlib import contextmanager from enum import Enum from typing import ClassVar, Iterator, Optional class TestPhase(Enum): """Test phase for state and blockchain tests.""" SETUP = "setup" EXECUTION = "execution" class TestPhaseManager: """ Manages test phases for transactions and blocks. This singleton class provides context managers for "setup" and "execution" phases. Transactions automatically detect and tag themselves with the current phase. Usage: with TestPhaseManager.setup(): # Transactions created here have test_phase = "setup" setup_tx = Transaction(...) with TestPhaseManager.execution(): # Transactions created here have test_phase = "execution" benchmark_tx = Transaction(...) """ _current_phase: ClassVar[Optional[TestPhase]] = None @classmethod @contextmanager def setup(cls) -> Iterator[None]: """Context manager for the setup phase of a benchmark test.""" old_phase = cls._current_phase cls._current_phase = TestPhase.SETUP try: yield finally: cls._current_phase = old_phase @classmethod @contextmanager def execution(cls) -> Iterator[None]: """Context manager for the execution phase of a test.""" old_phase = cls._current_phase cls._current_phase = TestPhase.EXECUTION try: yield finally: cls._current_phase = old_phase @classmethod def get_current_phase(cls) -> Optional[TestPhase]: """Get the current test phase.""" return cls._current_phase @classmethod def reset(cls) -> None: """Reset the phase state to None (primarily for testing).""" cls._current_phase = None ================================================ FILE: src/ethereum_test_types/py.typed ================================================ ================================================ FILE: src/ethereum_test_types/receipt_types.py ================================================ """Transaction receipt and log types for Ethereum tests.""" from typing import List from pydantic import Field from ethereum_test_base_types import ( Address, Bloom, Bytes, CamelModel, Hash, HexNumber, ) class TransactionLog(CamelModel): """Transaction log.""" address: Address topics: List[Hash] data: Bytes block_number: HexNumber transaction_hash: Hash transaction_index: HexNumber block_hash: Hash log_index: HexNumber removed: bool class ReceiptDelegation(CamelModel): """Transaction receipt set-code delegation.""" from_address: Address = Field(..., alias="from") nonce: HexNumber target: Address class TransactionReceipt(CamelModel): """Transaction receipt.""" transaction_hash: Hash | None = None gas_used: HexNumber | None = None root: Bytes | None = None status: HexNumber | None = None cumulative_gas_used: HexNumber | None = None logs_bloom: Bloom | None = None logs: List[TransactionLog] | None = None contract_address: Address | None = None effective_gas_price: HexNumber | None = None block_hash: Hash | None = None transaction_index: HexNumber | None = None blob_gas_used: HexNumber | None = None blob_gas_price: HexNumber | None = None delegations: List[ReceiptDelegation] | None = None ================================================ FILE: src/ethereum_test_types/request_types.py ================================================ """Request types for Ethereum tests.""" from abc import abstractmethod from collections import defaultdict from typing import ClassVar, Dict, List, SupportsBytes from ethereum_test_base_types import ( Address, BLSPublicKey, BLSSignature, Bytes, CamelModel, Hash, HexNumber, ) class RequestBase: """Base class for requests.""" type: ClassVar[int] @abstractmethod def __bytes__(self) -> bytes: """Return request's attributes as bytes.""" ... class DepositRequest(RequestBase, CamelModel): """Deposit Request type.""" pubkey: BLSPublicKey """The public key of the beacon chain validator.""" withdrawal_credentials: Hash """The withdrawal credentials of the beacon chain validator.""" amount: HexNumber """The amount in gwei of the deposit.""" signature: BLSSignature """ The signature of the deposit using the validator's private key that matches the `pubkey`. """ index: HexNumber """The index of the deposit.""" type: ClassVar[int] = 0 def __bytes__(self) -> bytes: """Return deposit's attributes as bytes.""" return ( bytes(self.pubkey) + bytes(self.withdrawal_credentials) + self.amount.to_bytes(8, "little") + bytes(self.signature) + self.index.to_bytes(8, "little") ) class WithdrawalRequest(RequestBase, CamelModel): """Withdrawal Request type.""" source_address: Address = Address(0) """ The address of the execution layer account that made the withdrawal request. """ validator_pubkey: BLSPublicKey """ The current public key of the validator as it currently is in the beacon state. """ amount: HexNumber """The amount in gwei to be withdrawn on the beacon chain.""" type: ClassVar[int] = 1 def __bytes__(self) -> bytes: """Return withdrawal's attributes as bytes.""" return ( bytes(self.source_address) + bytes(self.validator_pubkey) + self.amount.to_bytes(8, "little") ) class ConsolidationRequest(RequestBase, CamelModel): """Consolidation Request type.""" source_address: Address = Address(0) """ The address of the execution layer account that made the consolidation request. """ source_pubkey: BLSPublicKey """ The public key of the source validator as it currently is in the beacon state. """ target_pubkey: BLSPublicKey """ The public key of the target validator as it currently is in the beacon state. """ type: ClassVar[int] = 2 def __bytes__(self) -> bytes: """Return consolidation's attributes as bytes.""" return bytes(self.source_address) + bytes(self.source_pubkey) + bytes(self.target_pubkey) def requests_list_to_bytes(requests_list: List[RequestBase] | Bytes | SupportsBytes) -> Bytes: """Convert list of requests to bytes.""" if not isinstance(requests_list, list): return Bytes(requests_list) return Bytes(b"".join([bytes(r) for r in requests_list])) class Requests: """Requests for the transition tool.""" requests_list: List[Bytes] def __init__( self, *requests: RequestBase, requests_lists: List[List[RequestBase] | Bytes] | None = None, ) -> None: """Initialize requests object.""" if requests_lists is not None: assert len(requests) == 0, "requests must be empty if list is provided" self.requests_list = [] for requests_list in requests_lists: self.requests_list.append(requests_list_to_bytes(requests_list)) return else: lists: Dict[int, List[RequestBase]] = defaultdict(list) for r in requests: lists[r.type].append(r) self.requests_list = [ Bytes(bytes([request_type]) + requests_list_to_bytes(lists[request_type])) for request_type in sorted(lists.keys()) ] def __bytes__(self) -> bytes: """Return requests hash.""" s: bytes = b"".join(r.sha256() for r in self.requests_list) return Bytes(s).sha256() ================================================ FILE: src/ethereum_test_types/tests/__init__.py ================================================ """Tests for the ethereum_test_types package.""" ================================================ FILE: src/ethereum_test_types/tests/test_blob_types.py ================================================ """Test suite for blobs.""" import copy import time from typing import Any import pytest from filelock import FileLock from ethereum_test_forks import ( Cancun, Osaka, Prague, ) from ethereum_test_forks.forks.transition import ( CancunToPragueAtTime15k, PragueToOsakaAtTime15k, ShanghaiToCancunAtTime15k, ) from ..blob_types import CACHED_BLOBS_DIRECTORY, Blob, clear_blob_cache def increment_counter(timeout: float = 10) -> int: """ Increment counter in file, creating if doesn't exist. This is needed because we require the unit test 'test_transition_fork_blobs' to run at the end without having to include another dependency for ordering tests. That test has to run at the end because it assumes that no json blobs not created by itself are created while it is running. The hardcoded counter value in the test above has to be updated if any new blob_related unit tests that create json blobs are added in the future. """ file_path = CACHED_BLOBS_DIRECTORY / "blob_unit_test_counter.txt" lock_file = file_path.with_suffix(".lock") with FileLock(lock_file, timeout=timeout): # Read current value or start at 0 if file_path.exists(): current_value = int(file_path.read_text().strip()) else: current_value = 0 # Increment and write back new_value = current_value + 1 file_path.write_text(str(new_value)) return new_value def wait_until_counter_reached(target: int, poll_interval: float = 0.1) -> int: """Wait until blob unit test counter reaches target value.""" file_path = CACHED_BLOBS_DIRECTORY / "blob_unit_test_counter.txt" lock_file = file_path.with_suffix(".lock") # Add lock file path while True: # Use FileLock when reading! with FileLock(lock_file, timeout=10): if file_path.exists(): try: current_value = int(file_path.read_text().strip()) if current_value == target: return current_value elif current_value > target: pytest.fail( f"The blob_unit_test lock counter is too high! " f"Expected {target}, but got {current_value}. " f"It probably reused an existing file that was not cleared. " f"Delete {file_path} manually to fix this." ) except Exception: current_value = 0 else: current_value = 0 time.sleep(poll_interval) @pytest.mark.parametrize("seed", [0, 10, 100]) @pytest.mark.parametrize("fork", [Cancun, Prague, Osaka]) def test_blob_creation_and_writing_and_reading( seed: int, fork: Any, ) -> None: # noqa: F811 """ Generates blobs for different forks and ensures writing to file and reading from file works as expected. """ timestamp = 100 b = Blob.from_fork(fork=fork, seed=seed, timestamp=timestamp) b.write_to_file() # read from file # determine what filename would be cell_proof_amount = str(fork.get_blob_constant("AMOUNT_CELL_PROOFS")) file_name = "blob_" + str(seed) + "_cell_proofs_" + cell_proof_amount + ".json" # read restored = Blob.from_file(file_name) # ensure file you read equals file you wrote assert b.model_dump() == restored.model_dump() increment_counter() @pytest.mark.parametrize( "corruption_mode", [ Blob.ProofCorruptionMode.CORRUPT_ALL_BYTES, Blob.ProofCorruptionMode.CORRUPT_FIRST_BYTE, Blob.ProofCorruptionMode.CORRUPT_LAST_BYTE, Blob.ProofCorruptionMode.CORRUPT_TO_ALL_ZEROES, ], ) @pytest.mark.parametrize("fork", [Cancun, Prague, Osaka]) def test_blob_proof_corruption( corruption_mode: Any, fork: Any, ) -> None: """ Generates blobs for different forks, corrupts their proofs and ensures that the corrupted proof is not equal to the correct proof. """ timestamp = 100 b = Blob.from_fork(fork=fork, timestamp=timestamp) old_valid_proof = copy.deepcopy(b.proof) # important to deepcopy b.corrupt_proof(corruption_mode) assert b.proof != old_valid_proof, ( f"Proof corruption mode {corruption_mode} for fork {fork.name()} failed, " "proof is unchanged!" ) increment_counter() @pytest.mark.parametrize("timestamp", [14999, 15000]) @pytest.mark.parametrize( "fork", [ShanghaiToCancunAtTime15k, CancunToPragueAtTime15k, PragueToOsakaAtTime15k] ) def test_transition_fork_blobs( fork: Any, timestamp: int, ) -> None: """ Generates blobs for transition forks (time 14999 is old fork, time 15000 is new fork). """ # line below guarantees that this test runs only after the other blob unit # tests are done wait_until_counter_reached(21) clear_blob_cache(CACHED_BLOBS_DIRECTORY) print(f"Original fork: {fork}, Timestamp: {timestamp}") pre_transition_fork = fork.transitions_from() # only reached if timestamp >= 15000 post_transition_fork_at_15k = fork.transitions_to() if not pre_transition_fork.supports_blobs() and timestamp < 15000: print( f"Skipping blob creation because pre-transition fork is {pre_transition_fork} " f"and timestamp is {timestamp}" ) return # b has already applied transition if requirements were met b = Blob.from_fork(fork=fork, timestamp=timestamp) print(f"Fork of created blob: {b.fork.name()}") if timestamp == 14999: # case: no transition yet assert b.fork.name() == pre_transition_fork.name(), ( f"Transition fork failure! Fork {fork.name()} at timestamp: {timestamp} should have " f"stayed at fork {pre_transition_fork.name()} but has unexpectedly transitioned " f"to {b.fork.name()}" ) elif timestamp == 15000: # case: transition to next fork has happened assert b.fork.name() == post_transition_fork_at_15k.name(), ( f"Transition fork failure! Fork {fork.name()} at timestamp: {timestamp} should have " f"transitioned to {post_transition_fork_at_15k.name()} but is still at {b.fork.name()}" ) # delete counter at last iteration (otherwise re-running all unit tests # will fail) if timestamp == 15_000 and pre_transition_fork == Prague: (CACHED_BLOBS_DIRECTORY / "blob_unit_test_counter.txt").unlink() ================================================ FILE: src/ethereum_test_types/tests/test_block_access_lists.py ================================================ """Unit tests for BlockAccessListExpectation validation.""" from typing import Any import pytest from ethereum_test_base_types import Address, StorageKey from ethereum_test_types.block_access_list import ( BalAccountAbsentValues, BalAccountChange, BalAccountExpectation, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageChange, BalStorageSlot, BlockAccessList, BlockAccessListExpectation, BlockAccessListValidationError, ) def test_address_exclusion_validation_passes() -> None: """Test that address exclusion works when address is not in BAL.""" alice = Address(0xA) bob = Address(0xB) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), ] ) expectation = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation(nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)]), bob: None, # expect Bob is not in BAL (correctly) } ) expectation.verify_against(actual_bal) def test_address_exclusion_validation_raises_when_address_is_present() -> None: """Test that validation fails when excluded address is in BAL.""" alice = Address(0xA) bob = Address(0xB) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), BalAccountChange( address=bob, balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), ] ) expectation = BlockAccessListExpectation( # explicitly expect Bob to NOT be in BAL (wrongly) account_expectations={bob: None}, ) with pytest.raises(BlockAccessListValidationError, match="should not be in BAL but was found"): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "empty_changes_definition,exception_message", [ [BalAccountExpectation(), "ambiguous. Use BalAccountExpectation.empty()"], [BalAccountExpectation.empty(), "No account changes expected for "], ], ids=["BalAccountExpectation()", "BalAccountExpectation.empty()"], ) def test_empty_account_changes_definitions( empty_changes_definition: Any, exception_message: str, ) -> None: """ Test that validation fails when expected empty changes but actual has changes. """ alice = Address(0xA) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), ] ) expectation = BlockAccessListExpectation( account_expectations={alice: empty_changes_definition} ) with pytest.raises(BlockAccessListValidationError, match=exception_message): expectation.verify_against(actual_bal) def test_empty_list_validation() -> None: """Test that empty list validates correctly.""" alice = Address(0xA) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[], balance_changes=[], code_changes=[], storage_changes=[], storage_reads=[], ), ] ) expectation = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[], balance_changes=[], code_changes=[], storage_changes=[], storage_reads=[], ), } ) expectation.verify_against(actual_bal) @pytest.mark.parametrize( "field,value", [ ["nonce_changes", BalNonceChange(tx_index=1, post_nonce=1)], ["balance_changes", BalBalanceChange(tx_index=1, post_balance=100)], ["code_changes", BalCodeChange(tx_index=1, new_code=b"code")], [ "storage_changes", BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ), ], ["storage_reads", 0x01], ], ) def test_empty_list_validation_fails(field: str, value: Any) -> None: """Test that validation fails when expecting empty but field has values.""" alice = Address(0xA) alice_acct_change = BalAccountChange( address=alice, storage_reads=[0x02], ) if field == "storage_reads": alice_acct_change.storage_reads = [value] # set another field to non-empty to avoid all-empty account change alice_acct_change.nonce_changes = [BalNonceChange(tx_index=1, post_nonce=1)] else: setattr(alice_acct_change, field, [value]) actual_bal = BlockAccessList([alice_acct_change]) alice_acct_expectation = BalAccountExpectation( storage_reads=[0x02], ) if field == "storage_reads": alice_acct_expectation.storage_reads = [] # match the filled field in actual to avoid all-empty # account expectation alice_acct_expectation.nonce_changes = [BalNonceChange(tx_index=1, post_nonce=1)] else: setattr(alice_acct_expectation, field, []) expectation = BlockAccessListExpectation(account_expectations={alice: alice_acct_expectation}) with pytest.raises( BlockAccessListValidationError, match=f"Expected {field} to be empty", ): expectation.verify_against(actual_bal) def test_partial_validation() -> None: """Test that unset fields are not validated.""" alice = Address(0xA) # Actual BAL has multiple types of changes actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], storage_reads=[0x01, 0x02], ), ] ) # Only validate nonce changes, ignore balance and storage expectation = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], # balance_changes and storage_reads not set and won't be # validated ), } ) expectation.verify_against(actual_bal) def test_storage_changes_validation() -> None: """Test storage changes validation.""" contract = Address(0xC) # Actual BAL with storage changes actual_bal = BlockAccessList( [ BalAccountChange( address=contract, storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ) ], ), ] ) # Expect the same storage changes expectation = BlockAccessListExpectation( account_expectations={ contract: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ) ], ), } ) expectation.verify_against(actual_bal) def test_missing_expected_address() -> None: """Test that validation fails when expected address is missing.""" alice = Address(0xA) bob = Address(0xB) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), ] ) expectation = BlockAccessListExpectation( account_expectations={ # wrongly expect Bob to be present bob: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), } ) with pytest.raises( BlockAccessListValidationError, match="Expected address .* not found in actual BAL" ): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "addresses,error_message", [ ( [ Address(0xB), Address(0xA), # should come first ], "BAL addresses are not in lexicographic order", ), ( [ Address(0x1), Address(0x3), Address(0x2), ], "BAL addresses are not in lexicographic order", ), ], ) def test_actual_bal_address_ordering_validation(addresses: Any, error_message: str) -> None: """Test that actual BAL must have addresses in lexicographic order.""" # Create BAL with addresses in the given order actual_bal = BlockAccessList( [BalAccountChange(address=addr, nonce_changes=[]) for addr in addresses] ) expectation = BlockAccessListExpectation(account_expectations={}) with pytest.raises(BlockAccessListValidationError, match=error_message): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "storage_slots,error_message", [ ( [StorageKey(0x02), StorageKey(0x01)], # 0x02 before 0x01 "Storage slots not in ascending order", ), ( [StorageKey(0x01), StorageKey(0x03), StorageKey(0x02)], "Storage slots not in ascending order", ), ], ) def test_actual_bal_storage_slot_ordering(storage_slots: Any, error_message: str) -> None: """Test that actual BAL must have storage slots in lexicographic order.""" addr = Address(0xA) actual_bal = BlockAccessList( [ BalAccountChange( address=addr, storage_changes=[ BalStorageSlot(slot=slot, slot_changes=[]) for slot in storage_slots ], ) ] ) expectation = BlockAccessListExpectation(account_expectations={}) with pytest.raises(BlockAccessListValidationError, match=error_message): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "storage_reads,error_message", [ ([StorageKey(0x02), StorageKey(0x01)], "Storage reads not in ascending order"), ( [StorageKey(0x01), StorageKey(0x03), StorageKey(0x02)], "Storage reads not in ascending order", ), ], ) def test_actual_bal_storage_reads_ordering(storage_reads: Any, error_message: str) -> None: """Test that actual BAL must have storage reads in lexicographic order.""" addr = Address(0xA) actual_bal = BlockAccessList([BalAccountChange(address=addr, storage_reads=storage_reads)]) expectation = BlockAccessListExpectation(account_expectations={}) with pytest.raises(BlockAccessListValidationError, match=error_message): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "field_name", ["nonce_changes", "balance_changes", "code_changes"], ) def test_actual_bal_tx_indices_ordering(field_name: str) -> None: """Test that actual BAL must have tx indices in ascending order.""" addr = Address(0xA) tx_indices = [2, 3, 1] # out of order changes: Any = [] if field_name == "nonce_changes": changes = [BalNonceChange(tx_index=idx, post_nonce=1) for idx in tx_indices] elif field_name == "balance_changes": changes = [BalBalanceChange(tx_index=idx, post_balance=100) for idx in tx_indices] elif field_name == "code_changes": changes = [BalCodeChange(tx_index=idx, new_code=b"code") for idx in tx_indices] actual_bal = BlockAccessList([BalAccountChange(address=addr, **{field_name: changes})]) expectation = BlockAccessListExpectation(account_expectations={}) with pytest.raises( BlockAccessListValidationError, match="Transaction indices not in ascending order", ): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "field_name", ["nonce_changes", "balance_changes", "code_changes"], ) def test_actual_bal_duplicate_tx_indices(field_name: str) -> None: """ Test that actual BAL must not have duplicate tx indices in change lists. """ addr = Address(0xA) # Duplicate tx_index=1 changes: Any = [] if field_name == "nonce_changes": changes = [ BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=1, post_nonce=2), # duplicate tx_index BalNonceChange(tx_index=2, post_nonce=3), ] elif field_name == "balance_changes": changes = [ BalBalanceChange(tx_index=1, post_balance=100), BalBalanceChange(tx_index=1, post_balance=200), # duplicate tx_index BalBalanceChange(tx_index=2, post_balance=300), ] elif field_name == "code_changes": changes = [ BalCodeChange(tx_index=1, new_code=b"code1"), BalCodeChange(tx_index=1, new_code=b""), # duplicate tx_index BalCodeChange(tx_index=2, new_code=b"code2"), ] actual_bal = BlockAccessList([BalAccountChange(address=addr, **{field_name: changes})]) expectation = BlockAccessListExpectation(account_expectations={}) with pytest.raises( BlockAccessListValidationError, match=f"Duplicate transaction indices in {field_name}.*Duplicates: \\[1\\]", ): expectation.verify_against(actual_bal) def test_actual_bal_storage_duplicate_tx_indices() -> None: """ Test that storage changes must not have duplicate tx indices within same slot. """ addr = Address(0xA) # Create storage changes with duplicate tx_index within the same slot actual_bal = BlockAccessList( [ BalAccountChange( address=addr, storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[ BalStorageChange(tx_index=1, post_value=0x100), BalStorageChange(tx_index=1, post_value=0x200), # duplicate tx_index BalStorageChange(tx_index=2, post_value=0x300), ], ) ], ) ] ) expectation = BlockAccessListExpectation(account_expectations={}) with pytest.raises( BlockAccessListValidationError, match="Duplicate transaction indices in storage slot.*Duplicates: \\[1\\]", ): expectation.verify_against(actual_bal) def test_expected_addresses_auto_sorted() -> None: """ Test that expected addresses are automatically sorted before comparison. The BAL *Expectation address order should not matter for the dict. We DO, however, validate that the actual BAL (from t8n) is sorted correctly. """ alice = Address(0xA) bob = Address(0xB) charlie = Address(0xC) actual_bal = BlockAccessList( [ BalAccountChange(address=alice, nonce_changes=[]), BalAccountChange(address=bob, nonce_changes=[]), BalAccountChange(address=charlie, nonce_changes=[]), ] ) # expectation order should not matter for the dict though we DO validate # that the _actual_ BAL (from t8n) is sorted correctly expectation = BlockAccessListExpectation( account_expectations={ charlie: BalAccountExpectation(nonce_changes=[]), alice: BalAccountExpectation(nonce_changes=[]), bob: BalAccountExpectation(nonce_changes=[]), } ) expectation.verify_against(actual_bal) @pytest.mark.parametrize( "expected_slots,should_pass", [ # Correct order - should pass ([StorageKey(0x01), StorageKey(0x02), StorageKey(0x03)], True), # Partial subset in correct order - should pass ([StorageKey(0x01), StorageKey(0x03)], True), # Out of order - should fail ([StorageKey(0x01), StorageKey(0x03), StorageKey(0x02)], False), # Wrong order from start - should fail ([StorageKey(0x02), StorageKey(0x01)], False), ], ) def test_expected_storage_slots_ordering(expected_slots: Any, should_pass: bool) -> None: """Test that expected storage slots must be defined in correct order.""" addr = Address(0xA) # Actual BAL with storage slots in correct order actual_bal = BlockAccessList( [ BalAccountChange( address=addr, storage_changes=[ BalStorageSlot(slot=StorageKey(0x01), slot_changes=[]), BalStorageSlot(slot=StorageKey(0x02), slot_changes=[]), BalStorageSlot(slot=StorageKey(0x03), slot_changes=[]), ], ) ] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( storage_changes=[ BalStorageSlot(slot=slot, slot_changes=[]) for slot in expected_slots ], ), } ) if should_pass: expectation.verify_against(actual_bal) else: with pytest.raises( BlockAccessListValidationError, match="not found or not in correct order", ): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "expected_reads,should_pass", [ # Correct order - should pass ([StorageKey(0x01), StorageKey(0x02), StorageKey(0x03)], True), # Partial subset in correct order - should pass ([StorageKey(0x02), StorageKey(0x03)], True), # Out of order - should fail ([StorageKey(0x03), StorageKey(0x02)], False), # Wrong order with all elements - should fail ([StorageKey(0x01), StorageKey(0x03), StorageKey(0x02)], False), ], ) def test_expected_storage_reads_ordering(expected_reads: Any, should_pass: bool) -> None: """Test that expected storage reads must be defined in correct order.""" addr = Address(0xA) # Actual BAL with storage reads in correct order actual_bal = BlockAccessList( [ BalAccountChange( address=addr, storage_reads=[StorageKey(0x01), StorageKey(0x02), StorageKey(0x03)], ) ] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation(storage_reads=expected_reads), } ) if should_pass: expectation.verify_against(actual_bal) else: with pytest.raises( BlockAccessListValidationError, match="not found or not in correct order", ): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "expected_tx_indices,should_pass", [ # Correct order - should pass ([1, 2, 3], True), # Partial subset in correct order - should pass ([1, 3], True), # Single element - should pass ([2], True), # Out of order - should fail ([2, 1], False), # Wrong order with all elements - should fail ([1, 3, 2], False), ], ) def test_expected_tx_indices_ordering(expected_tx_indices: Any, should_pass: bool) -> None: """Test that expected tx indices must be defined in correct order.""" addr = Address(0xA) # actual BAL with tx indices in correct order actual_bal = BlockAccessList( [ BalAccountChange( address=addr, nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=2, post_nonce=2), BalNonceChange(tx_index=3, post_nonce=3), ], ) ] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=idx, post_nonce=idx) for idx in expected_tx_indices ], ), } ) if should_pass: expectation.verify_against(actual_bal) else: with pytest.raises( BlockAccessListValidationError, match="not found or not in correct order", ): expectation.verify_against(actual_bal) @pytest.mark.parametrize("has_change_should_raise", [True, False]) def test_absent_values_nonce_changes(has_change_should_raise: bool) -> None: """Test nonce_changes_at_tx validator with present/absent changes.""" alice = Address(0xA) nonce_changes = [BalNonceChange(tx_index=1, post_nonce=1)] if has_change_should_raise: # add nonce change at tx 2 which should trigger failure nonce_changes.append(BalNonceChange(tx_index=2, post_nonce=2)) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=nonce_changes, ), ] ) expectation = BlockAccessListExpectation( account_expectations={ # no nonce changes at tx 2 alice: BalAccountExpectation( absent_values=BalAccountAbsentValues( nonce_changes=[BalNonceChange(tx_index=2, post_nonce=2)] ) ) } ) if has_change_should_raise: with pytest.raises(Exception, match="Unexpected nonce change found at tx 0x2"): expectation.verify_against(actual_bal) else: expectation.verify_against(actual_bal) @pytest.mark.parametrize("has_change_should_raise", [True, False]) def test_absent_values_balance_changes(has_change_should_raise: bool) -> None: """Test balance_changes_at_tx validator with present/absent changes.""" alice = Address(0xA) balance_changes = [BalBalanceChange(tx_index=1, post_balance=100)] if has_change_should_raise: # add balance change at tx 2 which should trigger failure balance_changes.append(BalBalanceChange(tx_index=2, post_balance=200)) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, balance_changes=balance_changes, ), ] ) expectation = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( absent_values=BalAccountAbsentValues( balance_changes=[BalBalanceChange(tx_index=2, post_balance=200)] ) ), } ) if has_change_should_raise: with pytest.raises( Exception, match="Unexpected balance change found at tx 0x2", ): expectation.verify_against(actual_bal) else: expectation.verify_against(actual_bal) @pytest.mark.parametrize("has_change_should_raise", [True, False]) def test_absent_values_storage_changes(has_change_should_raise: bool) -> None: """Test storage_changes_at_slots validator with present/absent changes.""" contract = Address(0xC) storage_changes = [ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x99)], ) ] if has_change_should_raise: storage_changes.append( BalStorageSlot( slot=0x42, slot_changes=[BalStorageChange(tx_index=1, post_value=0xBEEF)], ) ) actual_bal = BlockAccessList( [ BalAccountChange( address=contract, storage_changes=storage_changes, ), ] ) expectation = BlockAccessListExpectation( account_expectations={ # no storage changes at slot 0x42 contract: BalAccountExpectation( absent_values=BalAccountAbsentValues( storage_changes=[ BalStorageSlot( slot=0x42, slot_changes=[BalStorageChange(tx_index=1, post_value=0xBEEF)], ) ] ) ), } ) if has_change_should_raise: with pytest.raises(Exception, match="Unexpected storage change found at slot"): expectation.verify_against(actual_bal) else: expectation.verify_against(actual_bal) @pytest.mark.parametrize("has_read_should_raise", [True, False]) def test_absent_values_storage_reads(has_read_should_raise: bool) -> None: """Test storage_reads_at_slots validator with present/absent reads.""" contract = Address(0xC) # Create actual BAL with or without storage read at slot 0x42 storage_reads = [StorageKey(0x01)] if has_read_should_raise: storage_reads.append(StorageKey(0x42)) actual_bal = BlockAccessList( [ BalAccountChange( address=contract, storage_reads=storage_reads, ), ] ) expectation = BlockAccessListExpectation( account_expectations={ # no storage reads at slot 0x42 contract: BalAccountExpectation( absent_values=BalAccountAbsentValues(storage_reads=[StorageKey(0x42)]) ), } ) if has_read_should_raise: with pytest.raises(Exception, match="Unexpected storage read found at slot"): expectation.verify_against(actual_bal) else: expectation.verify_against(actual_bal) @pytest.mark.parametrize("has_change_should_raise", [True, False]) def test_absent_values_code_changes(has_change_should_raise: bool) -> None: """Test code_changes_at_tx validator with present/absent changes.""" alice = Address(0xA) code_changes = [BalCodeChange(tx_index=1, new_code=b"\x00")] if has_change_should_raise: # add code change at tx 2 which should trigger failure code_changes.append(BalCodeChange(tx_index=2, new_code=b"\x60\x00")) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, code_changes=code_changes, ), ] ) expectation = BlockAccessListExpectation( account_expectations={ # no code changes at tx 2 alice: BalAccountExpectation( absent_values=BalAccountAbsentValues( code_changes=[BalCodeChange(tx_index=2, new_code=b"\x60\x00")] ) ), } ) if has_change_should_raise: with pytest.raises(Exception, match="Unexpected code change found at tx 0x2"): expectation.verify_against(actual_bal) else: expectation.verify_against(actual_bal) def test_multiple_absent_valuess() -> None: """Test multiple absence validators working together.""" contract = Address(0xC) actual_bal = BlockAccessList( [ BalAccountChange( address=contract, nonce_changes=[], balance_changes=[], storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x99)], ) ], storage_reads=[StorageKey(0x01)], code_changes=[], ), ] ) # Test that multiple validators all pass expectation = BlockAccessListExpectation( account_expectations={ contract: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x99)], ) ], absent_values=BalAccountAbsentValues( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=0), BalNonceChange(tx_index=2, post_nonce=0), ], balance_changes=[ BalBalanceChange(tx_index=1, post_balance=0), BalBalanceChange(tx_index=2, post_balance=0), ], storage_changes=[ BalStorageSlot( slot=0x42, slot_changes=[BalStorageChange(tx_index=1, post_value=0)] ), BalStorageSlot( slot=0x43, slot_changes=[BalStorageChange(tx_index=1, post_value=0)] ), ], storage_reads=[StorageKey(0x42), StorageKey(0x43)], code_changes=[ BalCodeChange(tx_index=1, new_code=b""), BalCodeChange(tx_index=2, new_code=b""), ], ), ), } ) expectation.verify_against(actual_bal) def test_absent_values_with_multiple_tx_indices() -> None: """Test absence validators with multiple transaction indices.""" alice = Address(0xA) actual_bal = BlockAccessList( [ BalAccountChange( address=alice, nonce_changes=[ # nonce changes at tx 1 and 3 BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=3, post_nonce=2), ], ), ] ) expectation = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=3, post_nonce=2), ], absent_values=BalAccountAbsentValues( nonce_changes=[ BalNonceChange(tx_index=2, post_nonce=0), BalNonceChange(tx_index=4, post_nonce=0), ] ), ), } ) expectation.verify_against(actual_bal) expectation_fail = BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( absent_values=BalAccountAbsentValues( nonce_changes=[ # wrongly forbid change at txs 1 and 2 # (1 exists, so should fail) BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=2, post_nonce=0), ] ), ), } ) with pytest.raises(Exception, match="Unexpected nonce change found at tx 0x1"): expectation_fail.verify_against(actual_bal) def test_bal_account_absent_values_comprehensive() -> None: """Test comprehensive BalAccountAbsentValues usage.""" addr = Address(0xA) # Test forbidding nonce changes actual_bal = BlockAccessList( [BalAccountChange(address=addr, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)])] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( absent_values=BalAccountAbsentValues( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)] ) ), } ) with pytest.raises( BlockAccessListValidationError, match="Unexpected nonce change found at tx" ): expectation.verify_against(actual_bal) # Test forbidding balance changes actual_bal = BlockAccessList( [ BalAccountChange( address=addr, balance_changes=[BalBalanceChange(tx_index=2, post_balance=100)] ) ] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( absent_values=BalAccountAbsentValues( balance_changes=[BalBalanceChange(tx_index=2, post_balance=100)] ) ), } ) with pytest.raises( BlockAccessListValidationError, match="Unexpected balance change found at tx" ): expectation.verify_against(actual_bal) # Test forbidding code changes actual_bal = BlockAccessList( [ BalAccountChange( address=addr, code_changes=[BalCodeChange(tx_index=3, new_code=b"\x60\x00")] ) ] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( absent_values=BalAccountAbsentValues( code_changes=[BalCodeChange(tx_index=3, new_code=b"\x60\x00")] ) ), } ) with pytest.raises(BlockAccessListValidationError, match="Unexpected code change found at tx"): expectation.verify_against(actual_bal) # Test forbidding storage reads actual_bal = BlockAccessList( [BalAccountChange(address=addr, storage_reads=[StorageKey(0x42)])] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( absent_values=BalAccountAbsentValues(storage_reads=[StorageKey(0x42)]) ), } ) with pytest.raises( BlockAccessListValidationError, match="Unexpected storage read found at slot" ): expectation.verify_against(actual_bal) # Test forbidding storage changes actual_bal = BlockAccessList( [ BalAccountChange( address=addr, storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=99)] ) ], ) ] ) expectation = BlockAccessListExpectation( account_expectations={ addr: BalAccountExpectation( absent_values=BalAccountAbsentValues( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=99)] ) ] ) ), } ) with pytest.raises( BlockAccessListValidationError, match="Unexpected storage change found at slot" ): expectation.verify_against(actual_bal) @pytest.mark.parametrize( "field_name,field_value", [ ("nonce_changes", []), ("balance_changes", []), ("code_changes", []), ("storage_changes", []), ("storage_reads", []), ], ) def test_bal_account_absent_values_empty_list_validation_raises( field_name: str, field_value: Any ) -> None: """ Test that empty lists in BalAccountAbsentValues fields raise appropriate errors. """ with pytest.raises(ValueError, match="Empty lists are not allowed"): BalAccountAbsentValues(**{field_name: field_value}) def test_bal_account_absent_values_empty_slot_changes_raises() -> None: """ Test that empty slot_changes in storage_changes raises appropriate error. """ with pytest.raises(ValueError, match="Empty lists are not allowed"): BalAccountAbsentValues( storage_changes=[ BalStorageSlot( slot=0x42, slot_changes=[], # Empty list should raise error ) ] ) ================================================ FILE: src/ethereum_test_types/tests/test_eof_v1.py ================================================ """Test suite for `code.eof.v1` module.""" from typing import List, Tuple import pytest from ethereum_test_base_types import to_json from ethereum_test_base_types.pydantic import CopyValidateModel from ethereum_test_vm import Opcodes as Op from ..eof.v1 import AutoSection, Container, Section, SectionKind test_cases: List[Tuple[str, Container, str]] = [ ( "No sections", Container( auto_data_section=False, auto_type_section=AutoSection.NONE, sections=[], ), "ef0001 00", ), ( "Single code section", Container( sections=[ Section.Code("0x00"), ], ), "ef0001 01 0004 02 0001 0001 ff 0000 00 00800000 00", ), ( "Single code section, single container section", Container( sections=[ Section.Code("0x0A"), Section.Container("0x0B"), ], ), "ef0001 01 0004 02 0001 0001 03 0001 00000001 ff 0000 00 00800000 0A 0B", ), ( "Single code section, single container section, single data", Container( sections=[ Section.Code("0x0A"), Section.Container("0x0B"), Section.Data("0x0C"), ], ), "ef0001 01 0004 02 0001 0001 03 0001 00000001 ff 0001 00 00800000 0A 0B 0C", ), ( "Single code section, single container section, single data 2", Container( sections=[ Section.Code("0x0A"), Section.Data("0x0C"), Section.Container("0x0B"), ], ), "ef0001 01 0004 02 0001 0001 03 0001 00000001 ff 0001 00 00800000 0A 0B 0C", ), ( "Single code section, multiple container section, single data", Container( sections=[ Section.Code("0x0A"), Section.Container("0x0B"), Section.Data("0x0C"), Section.Container("0x0D"), ], ), "ef0001 01 0004 02 0001 0001 03 0002 00000001 00000001 ff 0001 00 00800000 0A 0B 0D 0C", ), ( "Single code section, multiple container sections", Container( sections=[ Section.Code("0x00"), Section.Container("0x0001"), Section.Container("0x00"), ], ), "ef0001 01 0004 02 0001 0001 03 0002 00000002 00000001 ff 0000 00 00800000 00 0001 00", ), ( "No code section", Container( sections=[Section.Data("0x00")], ), "ef0001 01 0000 ff 0001 00 00", ), ( "Single data section", Container( auto_type_section=AutoSection.NONE, sections=[ Section.Data("0x00"), ], ), "ef0001 ff 0001 00 00", ), ( "Custom invalid section", Container( auto_data_section=False, auto_type_section=AutoSection.NONE, sections=[ Section( kind=0xFE, data="0x00", ), ], ), "ef0001 fe 0001 00 00", ), ( "Multiple sections", Container( sections=[ Section.Code("0x0e"), Section.Data("0x0f"), ], ), "ef0001 01 0004 02 0001 0001 ff 0001 00 00800000 0e 0f", ), ( "Multiple type sections", Container( sections=[ Section( kind=SectionKind.TYPE, data="0x00000000", ), Section( kind=SectionKind.TYPE, data="0x00000000", ), Section.Code("0x00"), ], auto_type_section=AutoSection.NONE, ), "ef0001 01 0004 01 0004 02 0001 0001 ff 0000 00 00000000 00000000 00", ), ( "Invalid Magic", Container( magic=b"\xef\xfe", sections=[ Section.Code("0x00"), ], ), "effe01 01 0004 02 0001 0001 ff 0000 00 00800000 00", ), ( "Invalid Version", Container( version=b"\x02", sections=[ Section.Code("0x00"), ], ), "ef0002 01 0004 02 0001 0001 ff 0000 00 00800000 00", ), ( "Section Invalid size Version", Container( sections=[ Section.Code( "0x00", custom_size=0xFFFF, ), ], ), "ef0001 01 0004 02 0001 ffff ff 0000 00 00800000 00", ), ( "Nested EOF", Container( sections=[ Section.Code("0x00"), Section( kind=SectionKind.CONTAINER, data=Container( sections=[Section.Code("0x01")], ), ), ], ), "ef0001 01 0004 02 0001 0001 03 0001 00000014 ff 0000 00 00800000 00" "ef0001 01 0004 02 0001 0001 ff 0000 00 00800000 01", ), ( "Nested EOF in Data", Container( sections=[ Section.Code("0x00"), Section.Data( data=Container( sections=[Section.Code("0x01")], ), ), ], ), "ef0001 01 0004 02 0001 0001 ff 0014 00 00800000 00" "ef0001 01 0004 02 0001 0001 ff 0000 00 00800000 01", ), ( "Incomplete code section", Container( sections=[ Section.Code( code=b"", custom_size=0x02, ), ], ), "ef0001 01 0004 02 0001 0002 ff 0000 00 00800000", ), ( "Trailing bytes after code section", Container( sections=[ Section.Code("0x600000"), ], extra=bytes.fromhex("deadbeef"), ), "ef0001 01 0004 02 0001 0003 ff 0000 00 00800000 600000 deadbeef", ), ( "Multiple code sections", Container( sections=[ Section.Code("0x600000"), Section.Code("0x600000"), ], ), """ ef0001 01 0008 02 0002 0003 0003 ff 0000 00 00800000 00800000 600000 600000 """, ), ( "No section terminator", Container( sections=[ Section.Code("0x600000"), ], header_terminator=bytes(), ), "ef0001 01 0004 02 0001 0003 ff 0000 00800000 600000", ), ( "No auto type section", Container( auto_type_section=AutoSection.NONE, sections=[ Section.Code("0x00"), ], ), "ef0001 02 0001 0001 ff 0000 00 00", ), ( "Data section in types", Container( sections=[ Section.Code("0x00"), Section.Data( data="0x00", force_type_listing=True, ), ], ), """ ef0001 01 0008 02 0001 0001 ff 0001 00 00800000 00800000 00 00 """, ), ( "Code section inputs", Container( sections=[ Section.Code( "0x00", code_inputs=1, max_stack_height=1, ), ], ), """ ef0001 01 0004 02 0001 0001 ff 0000 00 01800000 00 """, ), ( "Code section inputs 2", Container( sections=[ Section.Code( "0x00", code_inputs=0xFF, max_stack_height=0xFF, ), ], ), """ ef0001 01 0004 02 0001 0001 ff 0000 00 ff800000 00 """, ), ( "Code section outputs", Container( sections=[ Section.Code( "0x00", code_outputs=1, ), ], ), """ ef0001 01 0004 02 0001 0001 ff 0000 00 00010000 00 """, ), ( "Code section outputs 2", Container( sections=[ Section.Code( "0x00", code_outputs=0xFF, ), ], ), """ ef0001 01 0004 02 0001 0001 ff 0000 00 00ff0000 00 """, ), ( "Code section max stack height", Container( sections=[ Section.Code( "0x00", max_stack_height=0x0201, ), ], ), """ ef0001 01 0004 02 0001 0001 ff 0000 00 00800201 00 """, ), ( "Code section max stack height 2", Container( sections=[ Section.Code( "0x00", max_stack_height=0xFFFF, ), ], ), """ ef0001 01 0004 02 0001 0001 ff 0000 00 0080FFFF 00 """, ), ( "Code section max stack height 3", Container( sections=[ Section.Code( "0x00", max_stack_height=0xFFFF, ), Section.Code("0x00"), ], ), """ ef0001 01 0008 02 0002 0001 0001 ff 0000 00 0080FFFF 00800000 00 00 """, ), ( "Custom type section", Container( sections=[ Section( kind=SectionKind.TYPE, data="0x00", ), Section.Code("0x00"), ], ), "ef0001 01 0001 02 0001 0001 ff 0000 00 00 00", ), ( "EIP-4750 Single code section oversized type", Container( sections=[ Section( kind=SectionKind.TYPE, data="0x0000000000", ), Section.Code("0x00"), ], ), "ef0001 01 0005 02 0001 0001 ff 0000 00 0000000000 00", ), ( "Empty type section", Container( sections=[ Section(kind=SectionKind.TYPE, data="0x"), Section.Code("0x00"), ], auto_type_section=AutoSection.NONE, ), "ef0001 01 0000 02 0001 0001 ff 0000 00 00", ), ( "Check that simple valid EOF1 deploys", Container( sections=[ Section.Code( "0x305000", code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, ), Section.Data("0xef"), ], auto_type_section=AutoSection.AUTO, ), """ # EOF deployed code ef0001 # Magic followed by version 010004 # One code segment 020001 # One code segment 0003 # code seg 0: 3 bytes ff0001 # One byte data segment 00 # End of header # Code segment 0 header 00 # Zero inputs 80 # Non-Returning Function 0001 # Max stack height 1 # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Data segment ef """, ), ( "Data Section custom_size parameter overwrites bytes size", Container( sections=[ Section.Code( "0x305000", code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, ), Section.Data("0x0bad", custom_size=4), ], auto_type_section=AutoSection.AUTO, ), """ # EOF deployed code ef0001 # Magic followed by version 010004 # One code segment 020001 # One code segment 0003 # code seg 0: 3 bytes ff0004 # Four byte data segment 00 # End of header # Code segment 0 header 00 # Zero inputs 80 # Non-Returning Function 0001 # Max stack height 1 # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Data segment 0bad # 2 bytes instead of four """, ), ( "Multiple code segments", Container( sections=[ Section.Code( "0x5f35e2030000000300060009e50001e50002e50003e3000400", code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, ), Section.Code( "0x5f5ff3", code_inputs=0, code_outputs=128, # Non returning max_stack_height=2, ), Section.Code( "0x5f5ffd", code_inputs=0, code_outputs=128, # Non returning max_stack_height=2, ), Section.Code( "0xfe", code_inputs=0, code_outputs=128, # Non returning max_stack_height=0, ), Section.Code( "0xe4", code_inputs=0, code_outputs=0, max_stack_height=0, ), Section.Data("0x0bad60a7", custom_size=4), ], auto_type_section=AutoSection.AUTO, ), """ # EOF deployed code EF0001 # Magic and Version ( 1 ) 010014 # Types length ( 20 ) 020005 # Total code sections ( 5 ) 0019 # Code section 0 , 25 bytes 0003 # Code section 1 , 3 bytes 0003 # Code section 2 , 3 bytes 0001 # Code section 3 , 1 bytes 0001 # Code section 4 , 1 bytes ff0004 # Data section length ( 4 ) 00 # Terminator (end of header) # Code 0 types 00 # 0 inputs 80 # 0 outputs (Non-returning function) 0001 # max stack: 1 # Code 1 types 00 # 0 inputs 80 # 0 outputs (Non-returning function) 0002 # max stack: 2 # Code 2 types 00 # 0 inputs 80 # 0 outputs (Non-returning function) 0002 # max stack: 2 # Code 3 types 00 # 0 inputs 80 # 0 outputs (Non-returning function) 0000 # max stack: 0 # Code 4 types 00 # 0 inputs 00 # 0 outputs 0000 # max stack: 0 # Code section 0 5f # [0] PUSH0 35 # [1] CALLDATALOAD e2030000000300060009 # [2] RJUMPV(0,3,6,9) e50001 # [12] JUMPF(1) e50002 # [15] JUMPF(2) e50003 # [18] JUMPF(3) e30004 # [21] CALLF(4) 00 # [24] STOP # Code section 1 5f # [0] PUSH0 5f # [1] PUSH0 f3 # [2] RETURN # Code section 2 5f # [0] PUSH0 5f # [1] PUSH0 fd # [2] REVERT # Code section 3 fe # [0] INVALID # Code section 4 e4 # [0] RETF # Data section 0bad60a7 """, ), ( "Custom Types Section overrides code", Container( sections=[ Section(kind=SectionKind.TYPE, data="0x00700002", custom_size=8), Section( kind=SectionKind.CODE, code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, data="0x305000", ), Section(kind=SectionKind.DATA, data="0x0bad60A7"), ], ), """ # EOF deployed code ef0001 # Magic followed by version 010008 # Two code segments 020001 # One code segment 0003 # code seg 0: 3 bytes ff0004 # Four byte data segment 00 # End of header # Code segment 0 header 00 # Zero inputs 70 # Non-Returning Function 0002 # Max stack height 1 # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Data segment 0bad60A7 # 4 bytes (valid) """, ), ( "Type section wrong order, but only in HEADER", Container( sections=[ Section( kind=SectionKind.CODE, code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, data="0x305000", ), Section( kind=SectionKind.TYPE, data="0x00800001", ), Section(kind=SectionKind.DATA, data="0xef"), ], auto_sort_sections=AutoSection.ONLY_BODY, ), """ # EOF deployed code ef0001 # Magic followed by version 020001 # One code segment 0003 # code seg 0: 3 bytes 010004 # One code segment ff0001 # One byte data segment 00 # End of header # Code segment 0 header 00 # Zero inputs 80 # Non-Returning Function 0001 # Max stack height 1 # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Data segment ef """, ), ( "Type section wrong order, but only in BODY", Container( sections=[ Section( kind=SectionKind.CODE, code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, data="0x305000", ), Section( kind=SectionKind.TYPE, data="0x00800001", ), Section(kind=SectionKind.DATA, data="0xef"), ], auto_sort_sections=AutoSection.ONLY_HEADER, ), """ # EOF deployed code ef0001 # Magic followed by version 010004 # One code segment 020001 # One code segment 0003 # code seg 0: 3 bytes ff0001 # One byte data segment 00 # End of header # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Code segment 0 header 00 # Zero inputs 80 # Non-Returning Function 0001 # Max stack height 1 # Data segment ef """, ), ( "Type section missing, but only in HEADER", Container( sections=[ Section( kind=SectionKind.CODE, code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, data="0x305000", ), Section(kind=SectionKind.DATA, data="0xef"), ], auto_type_section=AutoSection.ONLY_BODY, ), """ # EOF deployed code ef0001 # Magic followed by version 020001 # One code segment 0003 # code seg 0: 3 bytes ff0001 # One byte data segment 00 # End of header # Code segment 0 header 00 # Zero inputs 80 # Non-Returning Function 0001 # Max stack height 1 # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Data segment ef """, ), ( "Type section missing, but only in BODY", Container( sections=[ Section( kind=SectionKind.CODE, code_inputs=0, code_outputs=128, # Non returning max_stack_height=1, data="0x305000", ), Section(kind=SectionKind.DATA, data="0xef"), ], auto_type_section=AutoSection.ONLY_HEADER, ), """ # EOF deployed code ef0001 # Magic followed by version 010004 # Types section 020001 # One code segment 0003 # code seg 0: 3 bytes ff0001 # One byte data segment 00 # End of header # Code segment 0 header # Code segment 0 code 30 # 1 ADDRESS 50 # 2 POP 00 # 3 STOP # Data segment ef """, ), ( "Container.Init simple test", Container.Init(deploy_container=Container.Code(b"\0")), """ # EOF deployed code ef0001 # Magic followed by version 010004 # Types section 020001 # One code segment 0006 # code seg 0: 6 bytes 030001 # One container segment 00000014 # container seg 0: 20 bytes ff0000 # Zero byte data segment 00 # End of header 0080 0002 # Types section # Code segment 0 code 6000 # 1 PUSH1 0 6000 # 2 PUSH1 0 ee00 # 3 RETURNCODE[0] # Subcontainer 0 ef0001 # Magic followed by version 010004 # Types section 020001 # One code segment 0001 # code seg 0: 1 byte ff0000 # Zero byte data segment 00 # End of header 0080 0000 # Types section # Code segment 0 code 00 # 1 STOP """, ), ( "Container.Init initcode prefix", Container.Init(deploy_container=Container.Code(b"\0"), initcode_prefix=Op.SSTORE(0, 0)), """ # EOF deployed code ef0001 # Magic followed by version 010004 # Types section 020001 # One code segment 000b # code seg 0: 11 bytes 030001 # One container segment 00000014 # container seg 0: 20 bytes ff0000 # Zero byte data segment 00 # End of header 0080 0002 # Types section # Code segment 0 code 6000 # 1 PUSH1 0 6000 # 2 PUSH1 0 55 # 3 SSTORE 6000 # 4 PUSH1 0 6000 # 5 PUSH1 0 ee00 # 6 RETURNCODE[0] # Subcontainer 0 ef0001 # Magic followed by version 010004 # Types section 020001 # One code segment 0001 # code seg 0: 1 byte ff0000 # Zero byte data segment 00 # End of header 0080 0000 # Types section # Code segment 0 code 00 # 1 STOP """, ), ] @pytest.mark.parametrize( ["container", "hex_value"], [(x[1], x[2]) for x in test_cases], ids=[x[0] for x in test_cases], ) def test_eof_v1_assemble(container: Container, hex_value: str) -> None: """Test `ethereum_test.types.code`.""" expected_string = remove_comments_from_string(hex_value) expected_bytes = bytes.fromhex(expected_string.replace(" ", "").replace("\n", "")) assert bytes(container) == expected_bytes, f""" Container: {bytes(container).hex()} Expected : {expected_bytes.hex()} """ def remove_comments_from_string(input_string: str) -> str: """Remove comments from a string and leave only valid hex characters.""" # Split the string into individual lines lines = input_string.split("\n") # Process each line to remove text following a '#' cleaned_lines = [] for line in lines: # Find the index of the first '#' character comment_start = line.find("#") # If a '#' is found, slice up to that point; otherwise, take the whole # line if comment_start != -1: cleaned_line = line[:comment_start].rstrip() else: cleaned_line = line # Only add non-empty lines if needed if cleaned_line.strip(): cleaned_lines.append(cleaned_line) # Join the cleaned lines back into a single string cleaned_string = "\n".join(cleaned_lines) return cleaned_string @pytest.mark.parametrize( "model", [ Container(), ], ids=lambda model: model.__class__.__name__, ) def test_model_copy(model: CopyValidateModel) -> None: """Test that the copy method returns a correct copy of the model.""" assert to_json(model.copy()) == to_json(model) assert model.copy().model_fields_set == model.model_fields_set ================================================ FILE: src/ethereum_test_types/tests/test_helpers.py ================================================ """Test suite for `ethereum_test.helpers` module.""" import pytest from ethereum_test_base_types import Address from ..helpers import compute_create2_address, compute_create_address def test_address() -> None: """Test `ethereum_test.base_types.Address`.""" assert ( Address("0x0000000000000000000000000000000000000000") == "0x0000000000000000000000000000000000000000" ) assert Address(0) == "0x0000000000000000000000000000000000000000" assert Address(1) == "0x0000000000000000000000000000000000000001" assert Address(10) == "0x000000000000000000000000000000000000000a" assert ( Address("0x0000000000000000000000000000000000000010") == "0x0000000000000000000000000000000000000010" ) assert Address(2 ** (20 * 8) - 1) == "0xffffffffffffffffffffffffffffffffffffffff" assert Address(0) == Address(0) assert Address(0) != Address(1) @pytest.mark.parametrize( "address,nonce,expected_contract_address", [ pytest.param( "0x00caa64684700d2825da7cac6ba0c6ed9fd2a1bb", 0, "0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4", id="zero-nonce-0x-str-address", ), pytest.param( "00caa64684700d2825da7cac6ba0c6ed9fd2a1bb", 0, "0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4", id="zero-nonce-str-address", ), pytest.param( int("0x00caa64684700d2825da7cac6ba0c6ed9fd2a1bb", 16), 0, "0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4", id="zero-nonce-int-address", ), pytest.param( "0x9c33eacc2f50e39940d3afaf2c7b8246b681a374", 3, "0x7a250d5630b4cf539739df2c5dacb4c659f2488d", id="non-zero-nonce-0x-str-address", ), pytest.param( "0xba52c75764d6f594735dc735be7f1830cdf58ddf", 3515, "0x06012c8cf97bead5deae237070f9587f8e7a266d", id="large-nonce-0x-str-address", marks=pytest.mark.xfail( reason="Nonce too large to convert with hard-coded to_bytes length of 1" ), ), ], ) def test_compute_create_address( address: str | int, nonce: int, expected_contract_address: str ) -> None: """ Test `ethereum_test.helpers.compute_create_address` with some famous contracts: - https://etherscan.io/address/0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4 - https://etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d - https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d. """ assert compute_create_address(address=address, nonce=nonce) == expected_contract_address @pytest.mark.parametrize( "address,salt,initcode,expected_contract_address", [ pytest.param( "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0x00", "0x4d1a2e2bb4f88f0250f26ffff098b0b30b26bf38", ), pytest.param( "0xdeadbeef00000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0x00", "0xB928f69Bb1D91Cd65274e3c79d8986362984fDA3", ), pytest.param( "0xdeadbeef00000000000000000000000000000000", "0xfeed000000000000000000000000000000000000", "0x00", "0xD04116cDd17beBE565EB2422F2497E06cC1C9833", ), pytest.param( "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0xdeadbeef", "0x70f2b2914A2a4b783FaEFb75f459A580616Fcb5e", ), pytest.param( "0x00000000000000000000000000000000deadbeef", "0xcafebabe", "0xdeadbeef", "0x60f3f640a8508fC6a86d45DF051962668E1e8AC7", ), pytest.param( "0x00000000000000000000000000000000deadbeef", "0xcafebabe", ( "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef" ), "0x1d8bfDC5D46DC4f61D6b6115972536eBE6A8854C", ), pytest.param( "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0x", "0xE33C0C7F7df4809055C3ebA6c09CFe4BaF1BD9e0", ), ], ) def test_compute_create2_address( address: str | int, salt: str, initcode: str, expected_contract_address: str, ) -> None: """ Test `ethereum_test.helpers.compute_create2_address` using the CREATE2 geth test cases from: https://github.com/ethereum/go-ethereum/blob/2189773093b2fe6d161b6477589f964470ff5bce/core/vm/instructions_test.go. Note: `compute_create2_address` does not generate checksum addresses. """ salt_as_int = int(salt, 16) initcode_as_bytes = bytes.fromhex(initcode[2:]) assert ( compute_create2_address(address, salt_as_int, initcode_as_bytes) == expected_contract_address.lower() ) ================================================ FILE: src/ethereum_test_types/tests/test_phase_manager.py ================================================ """Test suite for TestPhaseManager functionality.""" import pytest from ethereum_test_base_types import Address from ethereum_test_tools import Transaction from ..phase_manager import TestPhase, TestPhaseManager @pytest.fixture(autouse=True) def reset_phase_manager() -> None: """Reset TestPhaseManager singleton state before each test.""" TestPhaseManager.reset() def test_test_phase_enum_values() -> None: """Test that TestPhase enum has correct values.""" assert TestPhase.SETUP.value == "setup" assert TestPhase.EXECUTION.value == "execution" def test_phase_manager_class_state() -> None: """Test TestPhaseManager uses class-level state.""" # All access is through class methods, no instance needed assert TestPhaseManager.get_current_phase() is None # Setting phase through class method with TestPhaseManager.setup(): assert TestPhaseManager.get_current_phase() == TestPhase.SETUP # Phase persists at class level assert TestPhaseManager.get_current_phase() is None def test_default_phase_is_none() -> None: """Test that default phase is None (no context set).""" assert TestPhaseManager.get_current_phase() is None def test_transaction_auto_detects_default_phase() -> None: """Test that transactions default to None when no phase set.""" tx = Transaction(to=Address(0x123), value=100, gas_limit=21000) assert tx.test_phase is None def test_transaction_auto_detects_setup_phase() -> None: """Test that transactions created in setup context get SETUP phase.""" with TestPhaseManager.setup(): tx = Transaction(to=Address(0x456), value=50, gas_limit=21000) assert tx.test_phase == TestPhase.SETUP def test_phase_context_switching() -> None: """Test that phase switching works correctly.""" # Start with no phase set (defaults to None) tx1 = Transaction(to=Address(0x100), value=100, gas_limit=21000) assert tx1.test_phase is None # Switch to SETUP with TestPhaseManager.setup(): assert TestPhaseManager.get_current_phase() == TestPhase.SETUP tx2 = Transaction(to=Address(0x200), value=200, gas_limit=21000) assert tx2.test_phase == TestPhase.SETUP # Back to None after context (transactions default to None) assert TestPhaseManager.get_current_phase() is None tx3 = Transaction(to=Address(0x300), value=300, gas_limit=21000) assert tx3.test_phase is None def test_nested_phase_contexts() -> None: """Test that nested phase contexts work correctly.""" with TestPhaseManager.setup(): tx1 = Transaction(to=Address(0x100), value=100, gas_limit=21000) assert tx1.test_phase == TestPhase.SETUP # Nested execution context with TestPhaseManager.execution(): tx2 = Transaction(to=Address(0x200), value=200, gas_limit=21000) assert tx2.test_phase == TestPhase.EXECUTION # Back to setup after nested context tx3 = Transaction(to=Address(0x300), value=300, gas_limit=21000) assert tx3.test_phase == TestPhase.SETUP @pytest.mark.parametrize( ["num_setup_txs", "num_exec_txs"], [ pytest.param(0, 1, id="exec_only"), pytest.param(1, 0, id="setup_only"), pytest.param(3, 5, id="mixed"), pytest.param(10, 10, id="many"), ], ) def test_multiple_transactions_phase_tagging(num_setup_txs: int, num_exec_txs: int) -> None: """Test that multiple transactions are correctly tagged by phase.""" setup_txs = [] exec_txs = [] # Create setup transactions with TestPhaseManager.setup(): for i in range(num_setup_txs): tx = Transaction(to=Address(0x1000 + i), value=i * 10, gas_limit=21000) setup_txs.append(tx) # Create execution transactions for i in range(num_exec_txs): tx = Transaction(to=Address(0x2000 + i), value=i * 20, gas_limit=21000) exec_txs.append(tx) # Verify all setup transactions have SETUP phase for tx in setup_txs: assert tx.test_phase == TestPhase.SETUP # Verify all execution transactions have None phase (no context set) for tx in exec_txs: assert tx.test_phase is None def test_phase_reset() -> None: """Test that reset() restores default phase.""" # Change phase with TestPhaseManager.setup(): pass # Manually set to SETUP TestPhaseManager._current_phase = TestPhase.SETUP assert TestPhaseManager.get_current_phase() == TestPhase.SETUP # Reset should restore None TestPhaseManager.reset() assert TestPhaseManager.get_current_phase() is None def test_class_state_shared() -> None: """Test that phase state is shared at class level.""" # Phase changes are visible globally since it's class-level state assert TestPhaseManager.get_current_phase() is None with TestPhaseManager.setup(): # All access to the class sees the same phase assert TestPhaseManager.get_current_phase() == TestPhase.SETUP # Transactions created during this context get SETUP phase tx = Transaction(to=Address(0x789), value=75, gas_limit=21000) assert tx.test_phase == TestPhase.SETUP # After context, phase returns to None assert TestPhaseManager.get_current_phase() is None ================================================ FILE: src/ethereum_test_types/tests/test_post_alloc.py ================================================ """Test suite for test spec submodules of the `ethereum_test` module.""" from typing import Type import pytest from ethereum_test_base_types import Account from ethereum_test_types import Alloc @pytest.fixture() def post(request: pytest.FixtureRequest) -> Alloc: """ Post state: Set from the test's indirectly parametrized `post` parameter. """ return Alloc.model_validate(request.param) @pytest.fixture() def alloc(request: pytest.FixtureRequest) -> Alloc: """ Alloc state: Set from the test's indirectly parametrized `alloc` parameter. """ return Alloc.model_validate(request.param) @pytest.mark.parametrize( ["post", "alloc", "expected_exception_type"], [ # Account should not exist but contained in alloc ( {"0x0000000000000000000000000000000000000000": Account.NONEXISTENT}, { "0x0000000000000000000000000000000000000000": { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 1}, } }, Alloc.UnexpectedAccountError, ), # Account should not exist but contained in alloc ( {"0x0000000000000000000000000000000000000000": Account.NONEXISTENT}, {"0x0000000000000000000000000000000000000000": {"nonce": "1"}}, Alloc.UnexpectedAccountError, ), # Account should not exist but contained in alloc ( {"0x0000000000000000000000000000000000000001": Account.NONEXISTENT}, {"0x0000000000000000000000000000000000000001": {"balance": "1"}}, Alloc.UnexpectedAccountError, ), # Account should not exist but contained in alloc ( {"0x000000000000000000000000000000000000000a": Account.NONEXISTENT}, {"0x000000000000000000000000000000000000000A": {"code": "0x00"}}, Alloc.UnexpectedAccountError, ), # Account should exist but not in alloc ( {"0x000000000000000000000000000000000000000A": Account()}, { "0x000000000000000000000000000000000000000B": { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 1}, } }, Alloc.MissingAccountError, ), # Account should exist and contained in alloc, but don't care about # values ( {"0x0000000000000000000000000000000000000001": Account()}, { "0x0000000000000000000000000000000000000001": { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 1}, } }, None, ), # Account should exist and contained in alloc, single incorrect value ( {"0x0000000000000000000000000000000000000001": Account(nonce=0)}, { "0x0000000000000000000000000000000000000001": { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 1}, } }, Account.NonceMismatchError, ), ], indirect=["post", "alloc"], ) def test_verify_post_alloc( post: Alloc, alloc: Alloc, expected_exception_type: Type[Exception] | None ) -> None: """Test `verify_post_alloc` method of `Alloc`.""" if expected_exception_type is None: post.verify_post_alloc(alloc) else: with pytest.raises(expected_exception_type) as _: post.verify_post_alloc(alloc) ================================================ FILE: src/ethereum_test_types/tests/test_transactions.py ================================================ """Test suite for transaction signing and serialization.""" from typing import Tuple import pytest from ethereum_test_base_types import AccessList, Hash from ..transaction_types import Transaction @pytest.mark.parametrize( [ "tx", "expected_signature", "expected_sender", "expected_serialized", ], [ ( Transaction( ty=0, nonce=0, gas_price=1000000000, protected=False, ), ( 27, 53278292994103027856810056625464356790495244130915206464977063215688423053889, 51913880459033617104276213638042305667358907564476883662899087493955291953870, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0xf86380843b9aca008252089400000000000000000000000000000000000000aa80801ba075ca71" "f8b7f1e95841db86704f4fe3da864694d135e0ed12ddf936f009541a41a072c6370f0c078df435b4" "041fe9e1fd596f7bcbd810993122b39a7f212617bace", ), ( Transaction( ty=0, nonce=0, gas_price=1000000000, protected=False, to=None, ), ( 27, 69580953802627422387708984158392304322597795331978871908970340300185024633230, 9987437858655471264845875982426404737641514329900923987672173898100072610198, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0xf84f80843b9aca008252088080801ba099d56c9a276e7b5c29f433bdc5ee0d551a242542445d2f" "f793be942cd4cc998ea01614b083596de05d65f22e0319d969a8465732ce5ad199c41c17fd72a651" "7996", ), ( Transaction( ty=0, nonce=0, gas_price=1000000000, protected=True, ), ( 37, 43493668498277122407922969255529421324465897185389682326746699251814478581534, 22805784714726510606244238945786421174106485654201651664508077741484361436093, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0xf86380843b9aca008252089400000000000000000000000000000000000000aa808025a060288b" "4319025f4955e36c53831871a91b2b59131b0355dbbc01a34f05b30f1ea0326b9de159e61d79e55c" "1844a8b0de520eef2fcb8b2992750c2f694d841ccbbd", ), ( Transaction( ty=1, nonce=0, gas_price=1000000000, ), ( 1, 64717097837956073364449107040675652683171442339602810813343912669101132492723, 16766093433587703483635506527630997640109434240457156669715758246025787266781, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01f8650180843b9aca008252089400000000000000000000000000000000000000aa8080c001a0" "8f14944d8d46e2b6280d61afee759646d42aa23189e0764ed409e68f45962fb3a0251145c8de5edc" "9a19b3244f37caca6858aec3a1056330e251491881cbd2d6dd", ), ( Transaction( ty=1, nonce=0, gas_price=1000000000, access_list=[], ), ( 1, 64717097837956073364449107040675652683171442339602810813343912669101132492723, 16766093433587703483635506527630997640109434240457156669715758246025787266781, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01f8650180843b9aca008252089400000000000000000000000000000000000000aa8080c001a0" "8f14944d8d46e2b6280d61afee759646d42aa23189e0764ed409e68f45962fb3a0251145c8de5edc" "9a19b3244f37caca6858aec3a1056330e251491881cbd2d6dd", ), ( Transaction( ty=1, nonce=0, gas_price=1000000000, access_list=[ AccessList( address="0x0000000000000000000000000000000000000123", storage_keys=[0x456, 0x789], ) ], ), ( 0, 66978004263684299215005885298552000328779940885769675563360335351527355325681, 56105983548446712608196400571580400910290560012106232439738315212890613615554, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01f8c10180843b9aca008252089400000000000000000000000000000000000000aa8080f85bf8" "59940000000000000000000000000000000000000123f842a0000000000000000000000000000000" "0000000000000000000000000000000456a000000000000000000000000000000000000000000000" "0000000000000000078980a0941434fdc19a5853453cad120ebdea00bc0fce323301794b908ca9f7" "a0661cf1a07c0adc80aec2b076a8dbfde04e0a51de29e9e904510f804cd57e153a804e0bc2", ), ( Transaction( ty=1, nonce=0, gas_price=1000000000, to=None, access_list=[AccessList(address=0x123, storage_keys=[0x456, 0x789])], ), ( 0, 16814800520830332761874524721118962980778925570205706327283408113434790879234, 38982159227826105391951884315531363239837729091757253660549724931098838198780, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01f8ad0180843b9aca00825208808080f85bf85994000000000000000000000000000000000000" "0123f842a00000000000000000000000000000000000000000000000000000000000000456a00000" "00000000000000000000000000000000000000000000000000000000078980a0252cd6ff24fb485a" "50aa3cc4e11947e257c325213a6d5c6ae2ea70cb68b26002a0562f1ec7bfd17a0cc72ae25192b8a7" "450b315a4a8bcea8f60281d3e72bd669fc", ), ( Transaction( ty=2, nonce=0, access_list=[AccessList(address=0x123, storage_keys=[0x456, 0x789])], max_fee_per_gas=10, max_priority_fee_per_gas=5, ), ( 0, 91749892362404225540206401600149574009569116775084797886968775355264509620768, 44616954018220623825844796436003012227293665710878821792267483622343477105629, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x02f8be0180050a8252089400000000000000000000000000000000000000aa8080f85bf8599400" "00000000000000000000000000000000000123f842a0000000000000000000000000000000000000" "0000000000000000000000000456a000000000000000000000000000000000000000000000000000" "0000000000078980a0cad8994ac160fd7e167715bbe20212939abdd5cd5a1f6c4dd6e5612cd8b332" "20a062a44d12b176bbd669d09d20d26281b5a693d8a52ab02a9d130201ee5db113dd", ), ( Transaction( ty=2, nonce=0, to=None, access_list=[AccessList(address=0x123, storage_keys=[0x456, 0x789])], max_fee_per_gas=10, max_priority_fee_per_gas=5, ), ( 0, 90322080068302816931882206183311797596224841408506356995778410737685074239457, 11150681916082931632476906514672946504836769153730288987778622018872414351162, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x02f8aa0180050a825208808080f85bf859940000000000000000000000000000000000000123f8" "42a00000000000000000000000000000000000000000000000000000000000000456a00000000000" "00000000000000000000000000000000000000000000000000078980a0c7b07c5552829e585f68e2" "eed4495ed6dfbe8cb1453edb2dc1e959d1087f5fe1a018a70ff379958b47e85172bc93fe5e47dc23" "d13e3b0e4a800f1f3a0766a0af3a", ), ( Transaction( ty=3, nonce=0, access_list=[AccessList(address=0x123, storage_keys=[0x456, 0x789])], max_fee_per_gas=10, max_priority_fee_per_gas=5, max_fee_per_blob_gas=100, blob_versioned_hashes=[], ), ( 0, 48031212734270141632897997738964470162703155533103542626635301519303700733477, 25274846027382763458393508666208718022841865508839207374090140639125166603463, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03f8c00180050a8252089400000000000000000000000000000000000000aa8080f85bf8599400" "00000000000000000000000000000000000123f842a0000000000000000000000000000000000000" "0000000000000000000000000456a000000000000000000000000000000000000000000000000000" "0000000000078964c080a06a30b3f8fd434b55ee40d662263ffa98ff9c31ca0f9bce61ca5de5019c" "4d5e25a037e10e4f6ca934236d6bf064134f7c3203b7308a16d5c43b3c9ce8b8a6fbbcc7", ), ( Transaction( ty=3, nonce=0, access_list=[AccessList(address=0x123, storage_keys=[0x456, 0x789])], max_fee_per_gas=10, max_priority_fee_per_gas=5, max_fee_per_blob_gas=100, blob_versioned_hashes=[Hash(0), Hash(0x01)], ), ( 1, 16459258601065735918558202846976552354069849089672096317954578689965269615539, 13812345945591193204859005420918043741474532833353814142223502482030426489098, ), "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03f901030180050a8252089400000000000000000000000000000000000000aa8080f85bf85994" "0000000000000000000000000000000000000123f842a00000000000000000000000000000000000" "000000000000000000000000000456a0000000000000000000000000000000000000000000000000" "000000000000078964f842a000000000000000000000000000000000000000000000000000000000" "00000000a0000000000000000000000000000000000000000000000000000000000000000101a024" "639c3863663bb71a82b48482fd92428a4e1e6962c8ebe467a72adf2dc283b3a01e8982c15e3b5b53" "e90ae56d2a6e93ebd918d778ff0cf7f4f8f96eb2f472810a", ), ], ids=[ "type-0-not-protected", "type-0-protected-contract-creation", "type-0-protected", "type-1", "type-1-access-list-empty", "type-1-access-list-filled", "type-1-access-list-filled-contract-creation", "type-2", "type-2-contract-creation", "type-3-minimal-empty-blobs", "type-3-minimal-two-blobs", ], ) def test_transaction_signing( tx: Transaction, expected_signature: Tuple[int, int, int], expected_sender: str, expected_serialized: str, ) -> None: """Test that transaction signing / serialization works as expected.""" tx = tx.with_signature_and_sender() signature = (tx.v, tx.r, tx.s) assert signature is not None assert signature == expected_signature assert tx.sender is not None assert tx.sender.hex() == expected_sender assert (tx.rlp().hex()) == expected_serialized ================================================ FILE: src/ethereum_test_types/tests/test_types.py ================================================ """Test suite for `ethereum_test` module.""" from typing import Any, Dict, List import pytest from ethereum_test_base_types import ( AccessList, Account, Address, Bytes, Storage, TestPrivateKey, ZeroPaddedHexNumber, to_json, ) from ethereum_test_base_types.pydantic import CopyValidateModel from ..account_types import EOA, Alloc from ..block_types import ( Environment, Withdrawal, ) from ..transaction_types import ( AuthorizationTuple, Transaction, ) def test_storage() -> None: """Test `ethereum_test.types.storage` parsing.""" s = Storage({"10": "0x10"}) # type: ignore[dict-item] assert 10 in s assert s[10] == 16 s = Storage({"10": "10"}) # type: ignore[dict-item] assert 10 in s assert s[10] == 10 s = Storage({10: 10}) # type: ignore[dict-item] assert 10 in s assert s[10] == 10 iter_s = iter(Storage({10: 20, "11": "21"})) # type: ignore[dict-item] assert next(iter_s) == 10 assert next(iter_s) == 11 s["10"] = "0x10" s["0x10"] = "10" assert s[10] == 16 assert s[16] == 10 assert "10" in s assert "0xa" in s assert 10 in s del s[10] assert "10" not in s assert "0xa" not in s assert 10 not in s s = Storage({-1: -1, -2: -2}) # type: ignore[dict-item] assert s[-1] == 2**256 - 1 assert s[-2] == 2**256 - 2 d = to_json(s) assert ( d["0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"] == "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) assert ( d["0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"] == "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" ) # Try to add a duplicate key (negative and positive number at the same # time) # same value, ok s[2**256 - 1] = 2**256 - 1 to_json(s) # Check store counter s = Storage({}) s.store_next(0x100) s.store_next("0x200") s.store_next(b"\x03\x00".rjust(32, b"\x00")) d = to_json(s) assert d == { "0x00": ("0x0100"), "0x01": ("0x0200"), "0x02": ("0x0300"), } @pytest.mark.parametrize( ["account"], [ pytest.param( Account(), id="no_fields", ), pytest.param( Account( nonce=0, ), id="zero_nonce", ), pytest.param( Account( balance=0, ), id="zero_balance", ), pytest.param( Account( code="", ), id="empty_code", ), pytest.param( Account( storage={}, ), id="empty_storage", ), pytest.param( Account( nonce=0, balance=0, code="", storage={ 1: 0, }, ), id="only_zero_storage_values", ), ], ) def test_empty_accounts(account: Account) -> None: """Test `ethereum_test.types.account` parsing.""" assert not bool(account) @pytest.mark.parametrize( ["account", "alloc_dict", "should_pass"], [ # All None: Pass ( Account(), {"nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 1}}, True, ), # Storage must be empty: Fail ( Account(storage={}), {"nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 1}}, False, ), # Storage must be empty: Pass ( Account(storage={}), {"nonce": "1", "code": "0x123", "balance": "1", "storage": {}}, True, ), # Storage must be empty: Pass ( Account(storage={}), { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 0, 1: 0}, }, True, ), # Storage must be empty: Pass ( Account(storage={0: 0}), { "nonce": "1", "code": "0x123", "balance": "1", "storage": {}, }, True, ), # Storage must not be empty: Pass ( Account(storage={1: 1}), { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 0, 1: 1}, }, True, ), # Storage must not be empty: Fail ( Account(storage={1: 1}), { "nonce": "1", "code": "0x123", "balance": "1", "storage": {0: 0, 1: 1, 2: 2}, }, False, ), # Code must be empty: Fail ( Account(code=""), { "nonce": "0", "code": "0x123", "balance": "0", "storage": {}, }, False, ), # Code must be empty: Pass ( Account(code=""), { "nonce": "1", "code": "0x", "balance": "1", "storage": {0: 0, 1: 1}, }, True, ), # Nonce must be empty: Fail ( Account(nonce=0), { "nonce": "1", "code": "0x", "balance": "0", "storage": {}, }, False, ), # Nonce must be empty: Pass ( Account(nonce=0), { "nonce": "0", "code": "0x1234", "balance": "1", "storage": {0: 0, 1: 1}, }, True, ), # Nonce must not be empty: Fail ( Account(nonce=1), { "code": "0x1234", "balance": "1", "storage": {0: 0, 1: 1}, }, False, ), # Nonce must not be empty: Pass ( Account(nonce=1), { "nonce": "1", "code": "0x", "balance": "0", "storage": {}, }, True, ), # Balance must be empty: Fail ( Account(balance=0), { "nonce": "0", "code": "0x", "balance": "1", "storage": {}, }, False, ), # Balance must be empty: Pass ( Account(balance=0), { "nonce": "1", "code": "0x1234", "balance": "0", "storage": {0: 0, 1: 1}, }, True, ), # Balance must not be empty: Fail ( Account(balance=1), { "nonce": "1", "code": "0x1234", "storage": {0: 0, 1: 1}, }, False, ), # Balance must not be empty: Pass ( Account(balance=1), { "nonce": "0", "code": "0x", "balance": "1", "storage": {}, }, True, ), ], ) def test_account_check_alloc( account: Account, alloc_dict: Dict[Any, Any], should_pass: bool ) -> None: """Test `Account.check_alloc` method.""" alloc_account = Account(**alloc_dict) if should_pass: account.check_alloc(Address(1), alloc_account) else: with pytest.raises(Exception) as _: account.check_alloc(Address(1), alloc_account) @pytest.mark.parametrize( ["alloc_1", "alloc_2", "expected_alloc"], [ pytest.param( Alloc(), Alloc(), Alloc(), id="empty_alloc", ), pytest.param( Alloc({0x1: {"nonce": 1}}), # type: ignore Alloc({0x2: {"nonce": 2}}), # type: ignore Alloc({0x1: Account(nonce=1), 0x2: Account(nonce=2)}), # type: ignore id="alloc_different_accounts", ), pytest.param( Alloc({0x2: {"nonce": 1}}), # type: ignore Alloc({"0x0000000000000000000000000000000000000002": {"nonce": 2}}), # type: ignore Alloc({0x2: Account(nonce=2)}), # type: ignore id="overwrite_account", ), pytest.param( Alloc({0x2: {"balance": 1}}), # type: ignore Alloc({"0x0000000000000000000000000000000000000002": {"nonce": 1}}), # type: ignore Alloc({0x2: Account(balance=1, nonce=1)}), # type: ignore id="mix_account", ), ], ) def test_alloc_append(alloc_1: Alloc, alloc_2: Alloc, expected_alloc: Alloc) -> None: """Test `ethereum_test.types.alloc` merging.""" assert Alloc.merge(alloc_1, alloc_2) == expected_alloc @pytest.mark.parametrize( ["account_1", "account_2", "expected_account"], [ pytest.param( Account(), Account(), Account(), id="empty_accounts", ), pytest.param( None, None, Account(), id="none_accounts", ), pytest.param( Account(nonce=1), Account(code="0x6000"), Account(nonce=1, code="0x6000"), id="accounts_with_different_fields", ), pytest.param( Account(nonce=1), Account(nonce=2), Account(nonce=2), id="accounts_with_different_nonce", ), ], ) def test_account_merge( account_1: Account | None, account_2: Account | None, expected_account: Account ) -> None: """Test `ethereum_test.types.account` merging.""" assert Account.merge(account_1, account_2) == expected_account CHECKSUM_ADDRESS = "0x8a0A19589531694250d570040a0c4B74576919B8" @pytest.mark.parametrize( ["can_be_deserialized", "model_instance", "json"], [ pytest.param( True, Address(CHECKSUM_ADDRESS), CHECKSUM_ADDRESS, marks=pytest.mark.xfail, id="address_with_checksum_address", ), pytest.param( True, Account(), { "nonce": "0x00", "balance": "0x00", "code": "0x", "storage": {}, }, id="account_1", ), pytest.param( True, Account( nonce=1, balance=2, code="0x1234", storage={ 0: 0, 1: 1, }, ), { "nonce": "0x01", "balance": "0x02", "code": "0x1234", "storage": { "0x00": "0x00", "0x01": "0x01", }, }, id="account_2", ), pytest.param( True, Withdrawal(index=0, validator_index=1, address=0x1234, amount=2), { "index": "0x0", "validatorIndex": "0x1", "address": "0x0000000000000000000000000000000000001234", "amount": "0x2", }, id="withdrawal", ), pytest.param( True, Environment(), { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentGasLimit": str(ZeroPaddedHexNumber(Environment().gas_limit)), "currentNumber": "0x01", "currentTimestamp": "0x03e8", "blockHashes": {}, "ommers": [], "parentUncleHash": ( "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" ), }, id="environment_1", ), pytest.param( True, Environment( fee_recipient=0x1234, difficulty=0x5, prev_randao=0x6, base_fee_per_gas=0x7, parent_difficulty=0x8, parent_timestamp=0x9, parent_base_fee_per_gas=0xA, parent_gas_used=0xB, parent_gas_limit=0xC, parent_ommers_hash=0xD, withdrawals=[Withdrawal(index=0, validator_index=1, address=0x1234, amount=2)], parent_blob_gas_used=0xE, parent_excess_blob_gas=0xF, blob_gas_used=0x10, excess_blob_gas=0x11, block_hashes={1: 2, 3: 4}, ), { "currentCoinbase": "0x0000000000000000000000000000000000001234", "currentGasLimit": str(ZeroPaddedHexNumber(Environment().gas_limit)), "currentNumber": "0x01", "currentTimestamp": "0x03e8", "currentDifficulty": "0x05", "currentRandom": "0x06", "currentBaseFee": "0x07", "parentDifficulty": "0x08", "parentTimestamp": "0x09", "parentBaseFee": "0x0a", "parentGasUsed": "0x0b", "parentGasLimit": "0x0c", "parentUncleHash": ( "0x000000000000000000000000000000000000000000000000000000000000000d" ), "withdrawals": [ { "index": "0x0", "validatorIndex": "0x1", "address": "0x0000000000000000000000000000000000001234", "amount": "0x2", }, ], "parentBlobGasUsed": "0x0e", "parentExcessBlobGas": "0x0f", "currentBlobGasUsed": "0x10", "currentExcessBlobGas": "0x11", "blockHashes": { "0x01": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x03": "0x0000000000000000000000000000000000000000000000000000000000000004", }, "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000004", "ommers": [], }, id="environment_2", ), pytest.param( True, Transaction().with_signature_and_sender(), { "type": "0x0", "chainId": "0x1", "nonce": "0x0", "to": "0x00000000000000000000000000000000000000aa", "value": "0x0", "input": "0x", "gas": "0x5208", "gasPrice": "0xa", "v": "0x26", "r": "0xcc61d852649c34cc0b71803115f38036ace257d2914f087bf885e6806a664fbd", "s": "0x2020cb35f5d7731ab540d62614503a7f2344301a86342f67daf011c1341551ff", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="transaction_t8n_default_args", ), pytest.param( True, Transaction( to=None, ).with_signature_and_sender(), { "type": "0x0", "chainId": "0x1", "nonce": "0x0", "to": None, "value": "0x0", "input": "0x", "gas": "0x5208", "gasPrice": "0xa", "v": "0x25", "r": "0x1cfe2cbb0c3577f74d9ae192a7f1ee2d670fe806a040f427af9cb768be3d07ce", "s": "0xcbe2d029f52dbf93ade486625bed0603945d2c7358b31de99fe8786c00f13da", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="transaction_t8n_to_none", ), pytest.param( True, Transaction( to="", ).with_signature_and_sender(), { "type": "0x0", "chainId": "0x1", "nonce": "0x0", "to": None, "value": "0x0", "input": "0x", "gas": "0x5208", "gasPrice": "0xa", "v": "0x25", "r": "0x1cfe2cbb0c3577f74d9ae192a7f1ee2d670fe806a040f427af9cb768be3d07ce", "s": "0xcbe2d029f52dbf93ade486625bed0603945d2c7358b31de99fe8786c00f13da", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="transaction_t8n_to_empty_str", ), pytest.param( True, Transaction( to=0x1234, data=b"\x01\x00", access_list=[ AccessList( address=0x1234, storage_keys=[0, 1], ) ], max_priority_fee_per_gas=10, max_fee_per_gas=20, max_fee_per_blob_gas=30, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), { "type": "0x3", "chainId": "0x1", "nonce": "0x0", "to": "0x0000000000000000000000000000000000001234", "accessList": [ { "address": "0x0000000000000000000000000000000000001234", "storageKeys": [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", ], } ], "value": "0x0", "input": "0x0100", "gas": "0x5208", "maxPriorityFeePerGas": "0xa", "maxFeePerGas": "0x14", "maxFeePerBlobGas": "0x1e", "blobVersionedHashes": [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", ], "v": "0x0", "r": "0x418bb557c43262375f80556cb09dac5e67396acf0eaaf2c2540523d1ce54b280", "s": "0x4fa36090ea68a1138043d943ced123c0b0807d82ff3342a6977cbc09230e927c", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", }, id="transaction_3", ), ], ) class TestPydanticModelConversion: """Test that Pydantic models are converted to and from JSON correctly.""" def test_json_serialization( self, can_be_deserialized: bool, model_instance: Any, json: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" del can_be_deserialized assert to_json(model_instance) == json def test_json_deserialization( self, can_be_deserialized: bool, model_instance: Any, json: str | Dict[str, Any] ) -> None: """Test that to_json returns the expected JSON for the given object.""" if not can_be_deserialized: pytest.skip(reason="The model instance in this case can not be deserialized") model_type = type(model_instance) assert model_type(**json) == model_instance @pytest.mark.parametrize( ["invalid_tx_args", "expected_exception", "expected_exception_substring"], [ pytest.param( {"gas_price": 1, "max_fee_per_gas": 2}, Transaction.InvalidFeePaymentError, "only one type of fee payment field can be used", id="gas-price-and-max-fee-per-gas", ), pytest.param( {"gas_price": 1, "max_priority_fee_per_gas": 2}, Transaction.InvalidFeePaymentError, "only one type of fee payment field can be used", id="gas-price-and-max-priority-fee-per-gas", ), pytest.param( {"gas_price": 1, "max_fee_per_blob_gas": 2}, Transaction.InvalidFeePaymentError, "only one type of fee payment field can be used", id="gas-price-and-max-fee-per-blob-gas", ), pytest.param( {"ty": 0, "v": 1, "secret_key": 2}, Transaction.InvalidSignaturePrivateKeyError, "can't define both 'signature' and 'private_key'", id="type0-signature-and-secret-key", ), ], ) def test_transaction_post_init_invalid_arg_combinations( # noqa: D103 invalid_tx_args: Any, expected_exception: Any, expected_exception_substring: str ) -> None: """ Test that Transaction.__post_init__ raises the expected exceptions for invalid constructor argument combinations. """ with pytest.raises(expected_exception) as exc_info: Transaction(**invalid_tx_args) assert expected_exception_substring in str(exc_info.value) @pytest.mark.parametrize( ["tx_args", "expected_attributes_and_values"], [ pytest.param( {"max_fee_per_blob_gas": 10}, [ ("ty", 3), ], id="max_fee_per_blob_gas-adds-ty-3", ), pytest.param( {}, [ ("gas_price", 10), ], id="no-fees-adds-gas_price", ), pytest.param( {}, [ ("secret_key", TestPrivateKey), ], id="no-signature-adds-secret_key", ), pytest.param( {"max_fee_per_gas": 10}, [ ("ty", 2), ], id="max_fee_per_gas-adds-ty-2", ), pytest.param( {"access_list": [AccessList(address=0x1234, storage_keys=[0, 1])]}, [ ("ty", 1), ], id="access_list-adds-ty-1", ), pytest.param( {"ty": 1}, [ ("access_list", []), ], id="ty-1-adds-empty-access_list", ), pytest.param( {"ty": 2}, [ ("max_priority_fee_per_gas", 0), ], id="ty-2-adds-max_priority_fee_per_gas", ), pytest.param( {"to": Address(1)}, [ ("to", Address(1)), ], id="non-zero-to", ), pytest.param( {"to": Address(0)}, [ ("to", Address(0)), ], id="zero-to", ), ], ) def test_transaction_post_init_defaults(tx_args: Any, expected_attributes_and_values: Any) -> None: """ Test that Transaction.__post_init__ sets the expected default values for missing fields. """ tx = Transaction(**tx_args) for attr, val in expected_attributes_and_values: assert hasattr(tx, attr) assert getattr(tx, attr) == val @pytest.mark.parametrize( ["withdrawals", "expected_root"], [ pytest.param( [], bytes.fromhex("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"), id="empty-withdrawals", ), pytest.param( [ Withdrawal( index=0, validator_index=1, address=0x1234, amount=2, ) ], bytes.fromhex("dc3ead883fc17ea3802cd0f8e362566b07b223f82e52f94c76cf420444b8ff81"), id="single-withdrawal", ), pytest.param( [ Withdrawal( index=0, validator_index=1, address=0x1234, amount=2, ), Withdrawal( index=1, validator_index=2, address=0xABCD, amount=0, ), ], bytes.fromhex("069ab71e5d228db9b916880f02670c85682c46641bb9c95df84acc5075669e01"), id="multiple-withdrawals", ), pytest.param( [ Withdrawal( index=0, validator_index=0, address=0x100, amount=0, ), Withdrawal( index=0, validator_index=0, address=0x200, amount=0, ), ], bytes.fromhex("daacd8fe889693f7d20436d9c0c044b5e92cc17b57e379997273fc67fd2eb7b8"), id="multiple-withdrawals", ), ], ) def test_withdrawals_root(withdrawals: List[Withdrawal], expected_root: bytes) -> None: """Test that withdrawals_root returns the expected hash.""" assert Withdrawal.list_root(withdrawals) == expected_root @pytest.mark.parametrize( "model", [ Environment(), ], ids=lambda model: model.__class__.__name__, ) def test_model_copy(model: CopyValidateModel) -> None: """Test that the copy method returns a correct copy of the model.""" assert to_json(model.copy()) == to_json(model) assert model.copy().model_fields_set == model.model_fields_set @pytest.mark.parametrize( "value, expected", [ pytest.param( Transaction().with_signature_and_sender(), Bytes( "0xf85f800a8252089400000000000000000000000000000000000000aa808026a0cc61d852649c34" "cc0b71803115f38036ace257d2914f087bf885e6806a664fbda02020cb35f5d7731ab540d6261450" "3a7f2344301a86342f67daf011c1341551ff" ), id="type-0-transaction", ), pytest.param( Transaction( access_list=[AccessList(address=0, storage_keys=[0, 1])], ).with_signature_and_sender(), Bytes( "0x01f8bd01800a8252089400000000000000000000000000000000000000aa8080f85bf859940000" "000000000000000000000000000000000000f842a000000000000000000000000000000000000000" "00000000000000000000000000a00000000000000000000000000000000000000000000000000000" "00000000000180a0d48930fdc0183ff3e5f5a6d87cbdb8a719bfcd0396d22ef360166fb4cc35e42e" "a063aba729e7a5f7b55c41b68dc6250769c98a25b5d21f5649576c5e79aa71a90e" ), id="type-1-transaction", ), pytest.param( Transaction( access_list=[AccessList(address=0, storage_keys=[0, 1])], max_fee_per_gas=10, max_priority_fee_per_gas=5, ).with_signature_and_sender(), Bytes( "0x02f8be0180050a8252089400000000000000000000000000000000000000aa8080f85bf8599400" "00000000000000000000000000000000000000f842a0000000000000000000000000000000000000" "0000000000000000000000000000a000000000000000000000000000000000000000000000000000" "0000000000000180a0759123c15b9b06a9a063c9e9568e52631e8161cf663a5035505896070f67c3" "21a0562291c94c89b5ab380c68fb8e254d34e373f4cd546a0ca3f40e455ce7072575" ), id="type-2-transaction", ), pytest.param( Transaction( access_list=[AccessList(address=1, storage_keys=[2, 3])], max_fee_per_gas=10, max_priority_fee_per_gas=5, max_fee_per_blob_gas=20, blob_versioned_hashes=[0, 1], ).with_signature_and_sender(), Bytes( "0x03f901030180050a8252089400000000000000000000000000000000000000aa8080f85bf85994" "0000000000000000000000000000000000000001f842a00000000000000000000000000000000000" "000000000000000000000000000002a0000000000000000000000000000000000000000000000000" "000000000000000314f842a000000000000000000000000000000000000000000000000000000000" "00000000a0000000000000000000000000000000000000000000000000000000000000000101a0cf" "df45e03bb79a725059abfdff26243794e4f2cedc31cb951bae0064cb0d18ffa07af8ae0e4eb39dad" "4f8210c49e3c81f4d2c50d0d94987122b788d17efa623de1" ), id="type-3-transaction", ), pytest.param( Transaction( access_list=[AccessList(address=0, storage_keys=[0, 1])], max_fee_per_gas=10, max_priority_fee_per_gas=5, authorization_list=[ AuthorizationTuple( address=0, signer=EOA(key=TestPrivateKey), ), ], ).with_signature_and_sender(), Bytes( "0x04f9011c0180050a8252089400000000000000000000000000000000000000aa8080f85bf85994" "0000000000000000000000000000000000000000f842a00000000000000000000000000000000000" "000000000000000000000000000000a0000000000000000000000000000000000000000000000000" "0000000000000001f85cf85a809400000000000000000000000000000000000000008080a0def12a" "a13571bba668b619dc7523da4a44b4373f26ff19356a6b58a66217839fa0130454fb52ed23b604de" "189d89b7b119698408a1cd80995959c8e3560aabb8ca80a051b5d457dfc118d4b0793c83c728c1ee" "b9890ee98391493e8bb1c31855bcf3eca05d1d0c49babee471a39d63c9d5ca15f8e71051cc87335f" "16d9bc7e4d56de278e" ), id="type-4-transaction", ), pytest.param( Transaction( access_list=[AccessList(address=0, storage_keys=[0, 1])], max_fee_per_gas=10, max_priority_fee_per_gas=5, authorization_list=[ AuthorizationTuple( address=0, secret_key=TestPrivateKey, ), ], ).with_signature_and_sender(), Bytes( "0x04f9011c0180050a8252089400000000000000000000000000000000000000aa8080f85bf85994" "0000000000000000000000000000000000000000f842a00000000000000000000000000000000000" "000000000000000000000000000000a0000000000000000000000000000000000000000000000000" "0000000000000001f85cf85a809400000000000000000000000000000000000000008080a0def12a" "a13571bba668b619dc7523da4a44b4373f26ff19356a6b58a66217839fa0130454fb52ed23b604de" "189d89b7b119698408a1cd80995959c8e3560aabb8ca80a051b5d457dfc118d4b0793c83c728c1ee" "b9890ee98391493e8bb1c31855bcf3eca05d1d0c49babee471a39d63c9d5ca15f8e71051cc87335f" "16d9bc7e4d56de278e" ), id="type-4-transaction-auth-secret-key", ), ], ) def test_serialization(value: Any, expected: Bytes) -> None: """Test `to_serializable_element` function.""" assert value.rlp().hex() == expected.hex() ================================================ FILE: src/ethereum_test_types/transaction_types.py ================================================ """Transaction-related types for Ethereum tests.""" from dataclasses import dataclass from enum import IntEnum from functools import cached_property from typing import Any, ClassVar, Dict, Generic, List, Literal, Sequence import ethereum_rlp as eth_rlp from coincurve.keys import PrivateKey, PublicKey from ethereum_types.numeric import Uint from pydantic import ( AliasChoices, BaseModel, ConfigDict, Field, computed_field, model_serializer, model_validator, ) from trie import HexaryTrie from ethereum_test_base_types import ( AccessList, Address, Bytes, CamelModel, Hash, HexNumber, NumberBoundTypeVar, RLPSerializable, SignableRLPSerializable, TestAddress, TestPrivateKey, ) from ethereum_test_exceptions import TransactionException from pytest_plugins.custom_logging import get_logger from .account_types import EOA from .blob_types import Blob from .chain_config_types import ChainConfigDefaults from .phase_manager import TestPhase, TestPhaseManager from .receipt_types import TransactionReceipt from .utils import int_to_bytes, keccak256 logger = get_logger(__name__) class TransactionType(IntEnum): """Transaction types.""" LEGACY = 0 ACCESS_LIST = 1 BASE_FEE = 2 BLOB_TRANSACTION = 3 SET_CODE = 4 @dataclass class TransactionDefaults: """Default values for transactions.""" gas_price = 10 max_fee_per_gas = 7 max_priority_fee_per_gas: int = 0 class AuthorizationTupleGeneric(CamelModel, Generic[NumberBoundTypeVar], SignableRLPSerializable): """Authorization tuple for transactions.""" chain_id: NumberBoundTypeVar = Field(0) # type: ignore address: Address nonce: NumberBoundTypeVar = Field(0) # type: ignore v: NumberBoundTypeVar = Field(default=0, validation_alias=AliasChoices("v", "yParity")) # type: ignore r: NumberBoundTypeVar = Field(0) # type: ignore s: NumberBoundTypeVar = Field(0) # type: ignore magic: ClassVar[int] = 0x05 rlp_fields: ClassVar[List[str]] = ["chain_id", "address", "nonce", "v", "r", "s"] rlp_signing_fields: ClassVar[List[str]] = ["chain_id", "address", "nonce"] def get_rlp_signing_prefix(self) -> bytes: """ Return a prefix that has to be appended to the serialized signing object. By default, an empty string is returned. """ return self.magic.to_bytes(1, byteorder="big") @model_serializer(mode="wrap", when_used="json-unless-none") def duplicate_v_as_y_parity(self, serializer: Any) -> Any: """ Add a duplicate 'yParity' field (same as `v`) in JSON fixtures. Background: https://github.com/erigontech/erigon/issues/14073 """ data = serializer(self) if "v" in data and data["v"] is not None: data["yParity"] = data["v"] return data class AuthorizationTuple(AuthorizationTupleGeneric[HexNumber]): """Authorization tuple for transactions.""" signer: EOA | None = None secret_key: Hash | None = None def model_post_init(self, __context: Any) -> None: """ Automatically signs the authorization tuple if a secret key or sender are provided. """ super().model_post_init(__context) self.sign() def sign(self: "AuthorizationTuple") -> None: """Signs the authorization tuple with a private key.""" signature_bytes: bytes | None = None rlp_signing_bytes = self.rlp_signing_bytes() if ( "v" not in self.model_fields_set and "r" not in self.model_fields_set and "s" not in self.model_fields_set ): signing_key: Hash | None = None if self.secret_key is not None: signing_key = self.secret_key elif self.signer is not None: eoa = self.signer assert eoa is not None, "signer must be set" signing_key = eoa.key assert signing_key is not None, "secret_key or signer must be set" signature_bytes = PrivateKey(secret=signing_key).sign_recoverable( rlp_signing_bytes, hasher=keccak256 ) self.v, self.r, self.s = ( HexNumber(signature_bytes[64]), HexNumber(int.from_bytes(signature_bytes[0:32], byteorder="big")), HexNumber(int.from_bytes(signature_bytes[32:64], byteorder="big")), ) self.model_fields_set.add("v") self.model_fields_set.add("r") self.model_fields_set.add("s") if self.signer is None: try: if not signature_bytes: signature_bytes = ( int(self.r).to_bytes(32, byteorder="big") + int(self.s).to_bytes(32, byteorder="big") + bytes([self.v]) ) public_key = PublicKey.from_signature_and_message( signature_bytes, rlp_signing_bytes.keccak256(), hasher=None ) self.signer = EOA( address=Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]) ) except Exception: # Signer remains `None` in this case pass class TransactionGeneric(BaseModel, Generic[NumberBoundTypeVar]): """ Generic transaction type used as a parent for Transaction and FixtureTransaction (blockchain). """ ty: NumberBoundTypeVar = Field(0, alias="type") # type: ignore chain_id: NumberBoundTypeVar = Field( default_factory=lambda: ChainConfigDefaults.chain_id, validate_default=True ) # type: ignore nonce: NumberBoundTypeVar = Field(0) # type: ignore gas_price: NumberBoundTypeVar | None = None max_priority_fee_per_gas: NumberBoundTypeVar | None = None max_fee_per_gas: NumberBoundTypeVar | None = None gas_limit: NumberBoundTypeVar = Field(21_000) # type: ignore to: Address | None = None value: NumberBoundTypeVar = Field(0) # type: ignore data: Bytes = Field(Bytes(b"")) access_list: List[AccessList] | None = None max_fee_per_blob_gas: NumberBoundTypeVar | None = None blob_versioned_hashes: Sequence[Hash] | None = None v: NumberBoundTypeVar = Field(0) # type: ignore r: NumberBoundTypeVar = Field(0) # type: ignore s: NumberBoundTypeVar = Field(0) # type: ignore sender: EOA | None = None def metadata_string(self) -> str | None: """Return the metadata field as a formatted json string or None.""" return None class TransactionValidateToAsEmptyString(CamelModel): """Handler to validate the `to` field from an empty string.""" @model_validator(mode="before") @classmethod def validate_to_as_empty_string(cls, data: Any) -> Any: """ If the `to` field is an empty string, set the model value to None. """ if ( isinstance(data, dict) and "to" in data and isinstance(data["to"], str) and data["to"] == "" ): data["to"] = None return data class TransactionFixtureConverter(TransactionValidateToAsEmptyString): """ Handler for serializing and validating the `to` field as an empty string. """ @model_serializer(mode="wrap", when_used="json-unless-none") def serialize_to_as_empty_string(self, serializer: Any) -> Any: """ Serialize the `to` field as the empty string if the model value is None. """ default = serializer(self) if default is not None and "to" not in default: default["to"] = "" return default class TransactionTransitionToolConverter(TransactionValidateToAsEmptyString): """ Handler for serializing and validating the `to` field as an empty string. """ @model_serializer(mode="wrap", when_used="json-unless-none") def serialize_to_as_none(self, serializer: Any) -> Any: """ Serialize the `to` field as `None` if the model value is None. This is required as we use `exclude_none=True` when serializing, but the t8n tool explicitly requires a value of `None` (respectively null), for if the `to` field should be unset (contract creation). """ default = serializer(self) if default is not None and "to" not in default: default["to"] = None return default class TransactionTestMetadata(CamelModel): """Represents the metadata for a transaction.""" test_id: str | None = None phase: str | None = None action: str | None = None # e.g. deploy / fund / execute target: str | None = None # account/contract label tx_index: int | None = None # index within this phase def to_json(self) -> str: """ Convert the transaction metadata into json string for it to be embedded in the request id. """ return self.model_dump_json(exclude_none=True, by_alias=True) class Transaction( TransactionGeneric[HexNumber], TransactionTransitionToolConverter, SignableRLPSerializable ): """Generic object that can represent all Ethereum transaction types.""" gas_limit: HexNumber = Field(HexNumber(21_000), serialization_alias="gas") to: Address | None = Field(Address(0xAA)) data: Bytes = Field(Bytes(b""), alias="input") authorization_list: List[AuthorizationTuple] | None = None initcodes: List[Bytes] | None = None secret_key: Hash | None = None error: List[TransactionException] | TransactionException | None = Field(None, exclude=True) protected: bool = Field(True, exclude=True) expected_receipt: TransactionReceipt | None = Field(None, exclude=True) zero: ClassVar[Literal[0]] = 0 metadata: TransactionTestMetadata | None = Field(None, exclude=True) test_phase: TestPhase | None = Field( default_factory=TestPhaseManager.get_current_phase, exclude=True ) model_config = ConfigDict(validate_assignment=True) class InvalidFeePaymentError(Exception): """Transaction described more than one fee payment type.""" def __str__(self) -> str: """Print exception string.""" return "only one type of fee payment field can be used in a single tx" class InvalidSignaturePrivateKeyError(Exception): """ Transaction describes both the signature and private key of source account. """ def __str__(self) -> str: """Print exception string.""" return "can't define both 'signature' and 'private_key'" def model_post_init(self, __context: Any) -> None: """Ensure transaction has no conflicting properties.""" super().model_post_init(__context) if self.gas_price is not None and ( self.max_fee_per_gas is not None or self.max_priority_fee_per_gas is not None or self.max_fee_per_blob_gas is not None ): raise Transaction.InvalidFeePaymentError() if "ty" not in self.model_fields_set: # Try to deduce transaction type from included fields if self.initcodes is not None: self.ty = HexNumber(6) elif self.authorization_list is not None: self.ty = HexNumber(4) elif self.max_fee_per_blob_gas is not None or self.blob_versioned_hashes is not None: self.ty = HexNumber(3) elif self.max_fee_per_gas is not None or self.max_priority_fee_per_gas is not None: self.ty = HexNumber(2) elif self.access_list is not None: self.ty = HexNumber(1) else: self.ty = HexNumber(0) if "v" in self.model_fields_set and self.secret_key is not None: raise Transaction.InvalidSignaturePrivateKeyError() if "v" not in self.model_fields_set and self.secret_key is None: if self.sender is not None: self.secret_key = self.sender.key else: self.secret_key = Hash(TestPrivateKey) self.sender = EOA(address=TestAddress, key=self.secret_key, nonce=0) # Set default values for fields that are required for certain tx types if self.ty <= 1 and self.gas_price is None: self.gas_price = HexNumber(TransactionDefaults.gas_price) if self.ty >= 1 and self.access_list is None: self.access_list = [] if self.ty < 1: assert self.access_list is None, "access_list must be None" if self.ty >= 2 and self.max_fee_per_gas is None: self.max_fee_per_gas = HexNumber(TransactionDefaults.max_fee_per_gas) if self.ty >= 2 and self.max_priority_fee_per_gas is None: self.max_priority_fee_per_gas = HexNumber(TransactionDefaults.max_priority_fee_per_gas) if self.ty < 2: assert self.max_fee_per_gas is None, "max_fee_per_gas must be None" assert self.max_priority_fee_per_gas is None, "max_priority_fee_per_gas must be None" if self.ty == 3 and self.max_fee_per_blob_gas is None: self.max_fee_per_blob_gas = HexNumber(1) if self.ty != 3: assert self.blob_versioned_hashes is None, "blob_versioned_hashes must be None" assert self.max_fee_per_blob_gas is None, "max_fee_per_blob_gas must be None" if self.ty == 4 and self.authorization_list is None: self.authorization_list = [] if self.ty != 4: assert self.authorization_list is None, "authorization_list must be None" if self.ty == 6 and self.initcodes is None: self.initcodes = [] if self.ty != 6: assert self.initcodes is None, "initcodes must be None" if "nonce" not in self.model_fields_set and self.sender is not None: self.nonce = HexNumber(self.sender.get_nonce()) def with_error( self, error: List[TransactionException] | TransactionException ) -> "Transaction": """Create a copy of the transaction with an added error.""" return self.copy(error=error) def with_nonce(self, nonce: int) -> "Transaction": """Create a copy of the transaction with a modified nonce.""" return self.copy(nonce=nonce) @cached_property def signature_bytes(self) -> Bytes: """Returns the serialized bytes of the transaction signature.""" assert "v" in self.model_fields_set, "transaction must be signed" v = int(self.v) if self.ty == 0: if self.protected: assert self.chain_id is not None v -= 35 + (self.chain_id * 2) else: v -= 27 return Bytes( self.r.to_bytes(32, byteorder="big") + self.s.to_bytes(32, byteorder="big") + bytes([v]) ) def sign(self: "Transaction") -> None: """Signs the authorization tuple with a private key.""" signature_bytes: bytes | None = None rlp_signing_bytes = self.rlp_signing_bytes() if ( "v" not in self.model_fields_set and "r" not in self.model_fields_set and "s" not in self.model_fields_set ): signing_key: Hash | None = None if self.secret_key is not None: signing_key = self.secret_key self.secret_key = None elif self.sender is not None: eoa = self.sender assert eoa is not None, "signer must be set" signing_key = eoa.key assert signing_key is not None, "secret_key or signer must be set" signature_bytes = PrivateKey(secret=signing_key).sign_recoverable( rlp_signing_bytes, hasher=keccak256 ) v, r, s = ( signature_bytes[64], int.from_bytes(signature_bytes[0:32], byteorder="big"), int.from_bytes(signature_bytes[32:64], byteorder="big"), ) if self.ty == 0: if self.protected: v += 35 + (self.chain_id * 2) else: # not protected v += 27 self.v, self.r, self.s = (HexNumber(v), HexNumber(r), HexNumber(s)) self.model_fields_set.add("v") self.model_fields_set.add("r") self.model_fields_set.add("s") if self.sender is None: try: if not signature_bytes: v = self.v if self.ty == 0: if v > 28: v -= 35 + (self.chain_id * 2) else: # not protected v -= 27 signature_bytes = ( int(self.r).to_bytes(32, byteorder="big") + int(self.s).to_bytes(32, byteorder="big") + bytes([v]) ) public_key = PublicKey.from_signature_and_message( signature_bytes, rlp_signing_bytes.keccak256(), hasher=None ) self.sender = EOA( address=Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]) ) except Exception: # Signer remains `None` in this case pass def with_signature_and_sender(self, *, keep_secret_key: bool = False) -> "Transaction": """Return signed version of the transaction using the private key.""" updated_values: Dict[str, Any] = {} if ( "v" in self.model_fields_set or "r" in self.model_fields_set or "s" in self.model_fields_set ): # Transaction already signed if self.sender is not None: return self public_key = PublicKey.from_signature_and_message( self.signature_bytes, self.rlp_signing_bytes().keccak256(), hasher=None ) updated_values["sender"] = Address( keccak256(public_key.format(compressed=False)[1:])[32 - 20 :] ) return self.copy(**updated_values) if self.secret_key is None: raise ValueError("secret_key must be set to sign a transaction") # Get the signing bytes signing_hash = self.rlp_signing_bytes().keccak256() # Sign the bytes signature_bytes = PrivateKey(secret=self.secret_key).sign_recoverable( signing_hash, hasher=None ) public_key = PublicKey.from_signature_and_message( signature_bytes, signing_hash, hasher=None ) sender = keccak256(public_key.format(compressed=False)[1:])[32 - 20 :] updated_values["sender"] = Address(sender) v, r, s = ( signature_bytes[64], int.from_bytes(signature_bytes[0:32], byteorder="big"), int.from_bytes(signature_bytes[32:64], byteorder="big"), ) if self.ty == 0: if self.protected: v += 35 + (self.chain_id * 2) else: # not protected v += 27 updated_values["v"] = HexNumber(v) updated_values["r"] = HexNumber(r) updated_values["s"] = HexNumber(s) updated_values["secret_key"] = None updated_tx: "Transaction" = self.model_copy(update=updated_values) # Remove the secret key if requested if keep_secret_key: updated_tx.secret_key = self.secret_key return updated_tx def get_rlp_signing_fields(self) -> List[str]: """ Return the list of values included in the envelope used for signing depending on the transaction type. """ field_list: List[str] if self.ty == 6: # EIP-7873: https://eips.ethereum.org/EIPS/eip-7873 field_list = [ "chain_id", "nonce", "max_priority_fee_per_gas", "max_fee_per_gas", "gas_limit", "to", "value", "data", "access_list", "initcodes", ] elif self.ty == 4: # EIP-7702: https://eips.ethereum.org/EIPS/eip-7702 field_list = [ "chain_id", "nonce", "max_priority_fee_per_gas", "max_fee_per_gas", "gas_limit", "to", "value", "data", "access_list", "authorization_list", ] elif self.ty == 3: # EIP-4844: https://eips.ethereum.org/EIPS/eip-4844 field_list = [ "chain_id", "nonce", "max_priority_fee_per_gas", "max_fee_per_gas", "gas_limit", "to", "value", "data", "access_list", "max_fee_per_blob_gas", "blob_versioned_hashes", ] elif self.ty == 2: # EIP-1559: https://eips.ethereum.org/EIPS/eip-1559 field_list = [ "chain_id", "nonce", "max_priority_fee_per_gas", "max_fee_per_gas", "gas_limit", "to", "value", "data", "access_list", ] elif self.ty == 1: # EIP-2930: https://eips.ethereum.org/EIPS/eip-2930 field_list = [ "chain_id", "nonce", "gas_price", "gas_limit", "to", "value", "data", "access_list", ] elif self.ty == 0: field_list = ["nonce", "gas_price", "gas_limit", "to", "value", "data"] if self.protected: # EIP-155: https://eips.ethereum.org/EIPS/eip-155 field_list.extend(["chain_id", "zero", "zero"]) else: raise NotImplementedError(f"signing for transaction type {self.ty} not implemented") for field in field_list: if field != "to": assert getattr(self, field) is not None, ( f"{field} must be set for type {self.ty} tx" ) return field_list def get_rlp_fields(self) -> List[str]: """ Return the list of values included in the list used for rlp encoding depending on the transaction type. """ fields = self.get_rlp_signing_fields() if self.ty == 0 and self.protected: fields = fields[:-3] return fields + ["v", "r", "s"] def get_rlp_prefix(self) -> bytes: """ Return the transaction type as bytes to be appended at the beginning of the serialized transaction if type is not 0. """ if self.ty > 0: return bytes([self.ty]) return b"" def get_rlp_signing_prefix(self) -> bytes: """ Return the transaction type as bytes to be appended at the beginning of the serialized transaction signing envelope if type is not 0. """ if self.ty > 0: return bytes([self.ty]) return b"" def metadata_string(self) -> str | None: """Return the metadata field as a formatted json string or None.""" if self.metadata is None: return None return self.metadata.to_json() @cached_property def hash(self) -> Hash: """Returns hash of the transaction.""" return self.rlp().keccak256() @cached_property def serializable_list(self) -> Any: """ Return list of values included in the transaction as a serializable object. """ return self.rlp() if self.ty > 0 else self.to_list(signing=False) @staticmethod def list_root(input_txs: List["Transaction"]) -> Hash: """Return transactions root of a list of transactions.""" t = HexaryTrie(db={}) for i, tx in enumerate(input_txs): t.set(eth_rlp.encode(Uint(i)), tx.rlp()) return Hash(t.root_hash) @staticmethod def list_blob_versioned_hashes(input_txs: List["Transaction"]) -> List[Hash]: """ Get list of ordered blob versioned hashes from a list of transactions. """ return [ blob_versioned_hash for tx in input_txs if tx.blob_versioned_hashes is not None for blob_versioned_hash in tx.blob_versioned_hashes ] @cached_property def created_contract(self) -> Address: """Return address of the contract created by the transaction.""" if self.to is not None: raise ValueError("transaction is not a contract creation") if self.sender is None: raise ValueError("sender address is None") hash_bytes = Bytes(eth_rlp.encode([self.sender, int_to_bytes(self.nonce)])).keccak256() return Address(hash_bytes[-20:]) class NetworkWrappedTransaction(CamelModel, RLPSerializable): """ Network wrapped transaction as defined in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#networking). < Osaka: rlp([tx_payload_body, blobs, commitments, proofs]) >= Osaka: rlp([tx_payload_body, wrapper_version, blobs, commitments, cell_proofs]) """ tx: Transaction blob_objects: Sequence[Blob] wrapper_version: int | None = None # only exists in >= osaka @computed_field # type: ignore[prop-decorator] @property def blobs(self) -> Sequence[Bytes]: """Return a list of blob data as bytes.""" return [blob.data for blob in self.blob_objects] @computed_field # type: ignore[prop-decorator] @property def commitments(self) -> Sequence[Bytes]: """Return a list of kzg commitments.""" return [blob.commitment for blob in self.blob_objects] @computed_field # type: ignore[prop-decorator] @property def proofs(self) -> Sequence[Bytes] | None: """Return a list of kzg proofs (returns None >= Osaka).""" if self.wrapper_version is not None: return None proofs: list[Bytes] = [] for blob in self.blob_objects: assert isinstance(blob.proof, Bytes) proofs.append(blob.proof) return proofs @computed_field # type: ignore[prop-decorator] @property def cell_proofs(self) -> Sequence[Bytes] | None: """Return a list of cells (returns None < Osaka).""" if self.wrapper_version is None: return None cells: list[Bytes] = [] for blob in self.blob_objects: assert isinstance(blob.proof, list) cells.extend(blob.proof) return cells def get_rlp_fields(self) -> List[str]: """ Return an ordered list of field names to be included in RLP serialization. Function can be overridden to customize the logic to return the fields. By default, rlp_fields class variable is used. The list can be nested list up to one extra level to represent nested fields. """ # only put a wrapper_version field for >=osaka (value 1), otherwise # omit field wrapper = [] if self.wrapper_version is not None: wrapper = ["wrapper_version"] rlp_proofs: list[str] = [] if self.proofs is not None: rlp_proofs = ["proofs"] rlp_cell_proofs: list[str] = [] if self.cell_proofs is not None: rlp_cell_proofs = ["cell_proofs"] rlp_fields: List[str] = [ # structure explained in # https://eips.ethereum.org/EIPS/eip-7594#Networking "tx", # tx_payload_body *wrapper, # wrapper_version, which is always 1 for osaka (was non- # existing before) "blobs", # Blob.data "commitments", *rlp_proofs, *rlp_cell_proofs, ] assert ("proofs" in rlp_fields) or ("cell_proofs" in rlp_fields), ( "Neither proofs nor cell_proofs are in rlp_fields. Critical error!" ) # logger.debug(f"Ended up with this rlp field list: {rlp_fields}") return rlp_fields def get_rlp_prefix(self) -> bytes: """ Return the transaction type as bytes to be appended at the beginning of the serialized transaction if type is not 0. """ if self.tx.ty > 0: return bytes([self.tx.ty]) return b"" ================================================ FILE: src/ethereum_test_types/trie.py ================================================ """ The state trie is the structure responsible for storing. """ import copy from dataclasses import dataclass, field from typing import ( Callable, Dict, Generic, List, Mapping, MutableMapping, Optional, Sequence, Tuple, TypeVar, cast, ) from Crypto.Hash import keccak from ethereum_rlp import Extended, rlp from ethereum_types.bytes import Bytes, Bytes20, Bytes32 from ethereum_types.frozen import slotted_freezable from ethereum_types.numeric import U256, Uint from typing_extensions import assert_type @slotted_freezable @dataclass class FrontierAccount: """State associated with an address.""" nonce: Uint balance: U256 code: Bytes def keccak256(buffer: Bytes) -> Bytes32: """Compute the keccak256 hash of the input `buffer`.""" k = keccak.new(digest_bits=256) return Bytes32(k.update(buffer).digest()) def encode_account(raw_account_data: FrontierAccount, storage_root: Bytes) -> Bytes: """ Encode `Account` dataclass. Storage is not stored in the `Account` dataclass, so `Accounts` cannot be encoded without providing a storage root. """ return rlp.encode( ( raw_account_data.nonce, raw_account_data.balance, storage_root, keccak256(raw_account_data.code), ) ) # note: an empty trie (regardless of whether it is secured) has root: # keccak256(RLP(b'')) == # 56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421 # also: # keccak256(RLP(())) == # 1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 # which is the sha3Uncles hash in block header with no uncles EMPTY_TRIE_ROOT = Bytes32( bytes.fromhex("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") ) Node = FrontierAccount | Bytes | Uint | U256 | None K = TypeVar("K", bound=Bytes) V = TypeVar( "V", Optional[FrontierAccount], Bytes, Uint, U256, ) @slotted_freezable @dataclass class LeafNode: """Leaf node in the Merkle Trie.""" rest_of_key: Bytes value: Extended @slotted_freezable @dataclass class ExtensionNode: """Extension node in the Merkle Trie.""" key_segment: Bytes subnode: Extended BranchSubnodes = Tuple[ Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, Extended, ] @slotted_freezable @dataclass class BranchNode: """Branch node in the Merkle Trie.""" subnodes: BranchSubnodes value: Extended InternalNode = LeafNode | ExtensionNode | BranchNode def encode_internal_node(node: Optional[InternalNode]) -> Extended: """ Encode a Merkle Trie node into its RLP form. The RLP will then be serialized into a `Bytes` and hashed unless it is less that 32 bytes when serialized. This function also accepts `None`, representing the absence of a node, which is encoded to `b""`. """ unencoded: Extended match node: case None: unencoded = b"" case LeafNode(): unencoded = ( nibble_list_to_compact(node.rest_of_key, True), node.value, ) case ExtensionNode(): unencoded = ( nibble_list_to_compact(node.key_segment, False), node.subnode, ) case BranchNode(): unencoded = list(node.subnodes) + [node.value] case _: raise AssertionError(f"Invalid internal node type {type(node)}!") encoded = rlp.encode(unencoded) if len(encoded) < 32: return unencoded else: return keccak256(encoded) def encode_node(node: Node, storage_root: Optional[Bytes] = None) -> Bytes: """ Encode a Node for storage in the Merkle Trie. Currently mostly an unimplemented stub. """ match node: case FrontierAccount(): assert storage_root is not None return encode_account(node, storage_root) case U256(): return rlp.encode(node) case Bytes(): return node case _: raise AssertionError(f"encoding for {type(node)} is not currently implemented") @dataclass(slots=True) class Trie(Generic[K, V]): """The Merkle Trie.""" secured: bool default: V _data: Dict[K, V] = field(default_factory=dict) def copy_trie(trie: Trie[K, V]) -> Trie[K, V]: """ Create a copy of `trie`. Since only frozen objects may be stored in tries, the contents are reused. """ return Trie(trie.secured, trie.default, copy.copy(trie._data)) def trie_set(trie: Trie[K, V], key: K, value: V) -> None: """ Store an item in a Merkle Trie. This method deletes the key if `value == trie.default`, because the Merkle Trie represents the default value by omitting it from the trie. """ if value == trie.default: if key in trie._data: del trie._data[key] else: trie._data[key] = value def trie_get(trie: Trie[K, V], key: K) -> V: """ Get an item from the Merkle Trie. This method returns `trie.default` if the key is missing. """ return trie._data.get(key, trie.default) def common_prefix_length(a: Sequence, b: Sequence) -> int: """Find the longest common prefix of two sequences.""" for i in range(len(a)): if i >= len(b) or a[i] != b[i]: return i return len(a) def nibble_list_to_compact(x: Bytes, is_leaf: bool) -> Bytes: """ Compresses nibble-list into a standard byte array with a flag. A nibble-list is a list of byte values no greater than `15`. The flag is encoded in high nibble of the highest byte. The flag nibble can be broken down into two two-bit flags. Highest nibble:: +---+---+----------+--------+ | _ | _ | is_leaf | parity | +---+---+----------+--------+ 3 2 1 0 The lowest bit of the nibble encodes the parity of the length of the remaining nibbles -- `0` when even and `1` when odd. The second lowest bit is used to distinguish leaf and extension nodes. The other two bits are not used. """ compact = bytearray() if len(x) % 2 == 0: # ie even length compact.append(16 * (2 * is_leaf)) for i in range(0, len(x), 2): compact.append(16 * x[i] + x[i + 1]) else: compact.append(16 * ((2 * is_leaf) + 1) + x[0]) for i in range(1, len(x), 2): compact.append(16 * x[i] + x[i + 1]) return Bytes(compact) def bytes_to_nibble_list(bytes_: Bytes) -> Bytes: """ Convert a `Bytes` into to a sequence of nibbles (bytes with value < 16). """ nibble_list = bytearray(2 * len(bytes_)) for byte_index, byte in enumerate(bytes_): nibble_list[byte_index * 2] = (byte & 0xF0) >> 4 nibble_list[byte_index * 2 + 1] = byte & 0x0F return Bytes(nibble_list) def _prepare_trie( trie: Trie[K, V], get_storage_root: Optional[Callable[[Bytes20], Bytes32]] = None, ) -> Mapping[Bytes, Bytes]: """ Prepare the trie for root calculation. Removes values that are empty, hashes the keys (if `secured == True`) and encodes all the nodes. """ mapped: MutableMapping[Bytes, Bytes] = {} for preimage, value in trie._data.items(): if isinstance(value, FrontierAccount): assert get_storage_root is not None address = Bytes20(preimage) encoded_value = encode_node(value, get_storage_root(address)) else: encoded_value = encode_node(value) if encoded_value == b"": raise AssertionError key: Bytes if trie.secured: # "secure" tries hash keys once before construction key = keccak256(preimage) else: key = preimage mapped[bytes_to_nibble_list(key)] = encoded_value return mapped def root( trie: Trie[K, V], get_storage_root: Optional[Callable[[Bytes20], Bytes32]] = None, ) -> Bytes32: """Compute the root of a modified merkle patricia trie (MPT).""" obj = _prepare_trie(trie, get_storage_root) root_node = encode_internal_node(patricialize(obj, Uint(0))) if len(rlp.encode(root_node)) < 32: return keccak256(rlp.encode(root_node)) else: assert isinstance(root_node, Bytes) return Bytes32(root_node) def patricialize(obj: Mapping[Bytes, Bytes], level: Uint) -> Optional[InternalNode]: """ Structural composition function. Used to recursively patricialize and merkleize a dictionary. Includes memoization of the tree structure and hashes. """ if len(obj) == 0: return None arbitrary_key = next(iter(obj)) # if leaf node if len(obj) == 1: leaf = LeafNode(arbitrary_key[level:], obj[arbitrary_key]) return leaf # prepare for extension node check by finding max j such that all keys in # obj have the same key[i:j] substring = arbitrary_key[level:] prefix_length = len(substring) for key in obj: prefix_length = min(prefix_length, common_prefix_length(substring, key[level:])) # finished searching, found another key at the current level if prefix_length == 0: break # if extension node if prefix_length > 0: prefix = arbitrary_key[int(level) : int(level) + prefix_length] return ExtensionNode( prefix, encode_internal_node(patricialize(obj, level + Uint(prefix_length))), ) branches: List[MutableMapping[Bytes, Bytes]] = [] for _ in range(16): branches.append({}) value = b"" for key in obj: if len(key) == level: # shouldn't ever have an account or receipt in an internal node if isinstance(obj[key], (FrontierAccount, Uint)): raise AssertionError value = obj[key] else: branches[key[level]][key] = obj[key] subnodes = tuple( encode_internal_node(patricialize(branches[k], level + Uint(1))) for k in range(16) ) return BranchNode( cast(BranchSubnodes, assert_type(subnodes, Tuple[Extended, ...])), value, ) ================================================ FILE: src/ethereum_test_types/utils.py ================================================ """Utility functions and sentinel classes for Ethereum test types.""" from typing import Any from ethereum_test_base_types import Bytes, Hash def keccak256(data: bytes) -> Hash: """Calculate keccak256 hash of the given data.""" return Bytes(data).keccak256() def int_to_bytes(value: int) -> bytes: """Convert integer to its big-endian representation.""" if value == 0: return b"" return int_to_bytes(value // 256) + bytes([value % 256]) # Sentinel classes class Removable: """ Sentinel class to detect if a parameter should be removed. (`None` normally means "do not modify"). """ def __eq__(self, other: Any) -> bool: """Return True for all Removable.""" if not isinstance(other, Removable): return NotImplemented return True ================================================ FILE: src/ethereum_test_vm/__init__.py ================================================ """Ethereum Virtual Machine related definitions and utilities.""" from .bytecode import Bytecode from .evm_types import EVMCodeType from .helpers import MemoryVariable, call_return_code from .opcodes import Macro, Macros, Opcode, OpcodeCallArg, Opcodes, UndefinedOpcodes __all__ = ( "Bytecode", "EVMCodeType", "Macro", "Macros", "MemoryVariable", "Opcode", "OpcodeCallArg", "Opcodes", "UndefinedOpcodes", "call_return_code", ) ================================================ FILE: src/ethereum_test_vm/bytecode.py ================================================ """Ethereum Virtual Machine bytecode primitives and utilities.""" from typing import Any, Self, SupportsBytes from pydantic import GetCoreSchemaHandler from pydantic_core.core_schema import ( PlainValidatorFunctionSchema, no_info_plain_validator_function, plain_serializer_function_ser_schema, ) from ethereum_test_base_types import Bytes, Hash class Bytecode: """ Base class to represent EVM bytecode. Stack calculations are automatically done after an addition operation between two bytecode objects. The stack height is not guaranteed to be correct, so the user must take this into consideration. Parameters ---------- - popped_stack_items: number of items the bytecode pops from the stack - pushed_stack_items: number of items the bytecode pushes to the stack - min_stack_height: minimum stack height required by the bytecode - max_stack_height: maximum stack height reached by the bytecode """ _name_: str = "" _bytes_: bytes popped_stack_items: int pushed_stack_items: int max_stack_height: int min_stack_height: int terminating: bool def __new__( cls, bytes_or_byte_code_base: "bytes | Bytecode | None" = None, *, popped_stack_items: int | None = None, pushed_stack_items: int | None = None, max_stack_height: int | None = None, min_stack_height: int | None = None, terminating: bool = False, name: str = "", ) -> Self: """Create new opcode instance.""" if bytes_or_byte_code_base is None: instance = super().__new__(cls) instance._bytes_ = b"" instance.popped_stack_items = 0 instance.pushed_stack_items = 0 instance.min_stack_height = 0 instance.max_stack_height = 0 instance.terminating = False instance._name_ = name return instance if isinstance(bytes_or_byte_code_base, Bytecode): # Required because Enum class calls the base class with the # instantiated object as parameter. obj = super().__new__(cls) obj._bytes_ = bytes_or_byte_code_base._bytes_ obj.popped_stack_items = bytes_or_byte_code_base.popped_stack_items obj.pushed_stack_items = bytes_or_byte_code_base.pushed_stack_items obj.min_stack_height = bytes_or_byte_code_base.min_stack_height obj.max_stack_height = bytes_or_byte_code_base.max_stack_height obj.terminating = bytes_or_byte_code_base.terminating obj._name_ = bytes_or_byte_code_base._name_ return obj if isinstance(bytes_or_byte_code_base, bytes): obj = super().__new__(cls) obj._bytes_ = bytes_or_byte_code_base assert popped_stack_items is not None assert pushed_stack_items is not None obj.popped_stack_items = popped_stack_items obj.pushed_stack_items = pushed_stack_items if min_stack_height is None: obj.min_stack_height = obj.popped_stack_items else: obj.min_stack_height = min_stack_height if max_stack_height is None: obj.max_stack_height = max(obj.popped_stack_items, obj.pushed_stack_items) else: obj.max_stack_height = max_stack_height obj.terminating = terminating obj._name_ = name return obj raise TypeError("Bytecode constructor '__new__' didn't return an instance!") def __bytes__(self) -> bytes: """Return the opcode byte representation.""" return self._bytes_ def __len__(self) -> int: """Return the length of the opcode byte representation.""" return len(self._bytes_) def __str__(self) -> str: """Return the name of the opcode, assigned at Enum creation.""" return self._name_ def __eq__(self, other: object) -> bool: """ Allow comparison between Bytecode instances and bytes objects. Raises: - NotImplementedError: if the comparison is not between an Bytecode or a bytes object. """ if isinstance(other, Bytecode): return ( bytes(self) == bytes(other) and self.popped_stack_items == other.popped_stack_items and self.pushed_stack_items == other.pushed_stack_items and self.max_stack_height == other.max_stack_height and self.min_stack_height == other.min_stack_height ) if isinstance(other, SupportsBytes) or isinstance(other, bytes): return bytes(self) == bytes(other) raise NotImplementedError(f"Unsupported type for comparison: {type(other)}") def __hash__(self) -> int: """Return the hash of the bytecode representation.""" return hash( ( bytes(self), self.popped_stack_items, self.pushed_stack_items, self.max_stack_height, self.min_stack_height, ) ) def __add__(self, other: "Bytecode | bytes | int | None") -> "Bytecode": """ Concatenate the bytecode representation with another bytecode object. """ if other is None or (isinstance(other, int) and other == 0): # Edge case for sum() function return self if isinstance(other, bytes): c = Bytecode(self) c._bytes_ += other c._name_ = "" return c assert isinstance(other, Bytecode), "Can only concatenate Bytecode instances" # Figure out the stack height after executing the two opcodes. a_pop, a_push = self.popped_stack_items, self.pushed_stack_items a_min, a_max = self.min_stack_height, self.max_stack_height b_pop, b_push = other.popped_stack_items, other.pushed_stack_items b_min, b_max = other.min_stack_height, other.max_stack_height # NOTE: "_pop" is understood as the number of elements required by an # instruction or bytecode to be popped off the stack before it starts # returning (pushing). # Auxiliary variables representing "stages" of the execution of # `c = a + b` bytecode: Assume starting point 0 as reference: a_start = 0 # A (potentially) pops some elements and reaches its "bottom", might be # negative: a_bottom = a_start - a_pop # After this A pushes some elements, then B pops and reaches its # "bottom": b_bottom = a_bottom + a_push - b_pop # C's bottom is either at the bottom of A or B: c_bottom = min(a_bottom, b_bottom) if c_bottom == a_bottom: # C pops the same as A to reach its bottom, then the rest of A and # B are C's "push" c_pop = a_pop c_push = a_push - b_pop + b_push else: # A and B are C's "pop" to reach its bottom, then pushes the same # as B c_pop = a_pop - a_push + b_pop c_push = b_push # C's minimum required stack is either A's or B's shifted by the net # stack balance of A c_min = max(a_min, b_min + a_pop - a_push) # C starts from c_min, then reaches max either in the spot where A # reached a_max or in the spot where B reached b_max, after A had # completed. c_max = max(c_min + a_max - a_min, c_min - a_pop + a_push + b_max - b_min) return Bytecode( bytes(self) + bytes(other), popped_stack_items=c_pop, pushed_stack_items=c_push, min_stack_height=c_min, max_stack_height=c_max, terminating=other.terminating, ) def __radd__(self, other: "Bytecode | int | None") -> "Bytecode": """ Concatenate the opcode byte representation with another bytes object. """ if other is None or (isinstance(other, int) and other == 0): # Edge case for sum() function return self assert isinstance(other, Bytecode), "Can only concatenate Bytecode instances" return other.__add__(self) def __mul__(self, other: int) -> "Bytecode": """ Concatenate another bytes object with the opcode byte representation. """ if other < 0: raise ValueError("Cannot multiply by a negative number") if other == 0: return Bytecode() output = self for _ in range(other - 1): output += self return output def hex(self) -> str: """ Return the hexadecimal representation of the opcode byte representation. """ return bytes(self).hex() def keccak256(self) -> Hash: """Return the keccak256 hash of the opcode byte representation.""" return Bytes(self._bytes_).keccak256() @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> PlainValidatorFunctionSchema: """ Provide Pydantic core schema for Bytecode serialization and validation. """ return no_info_plain_validator_function( cls, serialization=plain_serializer_function_ser_schema( lambda bytecode: "0x" + bytecode.hex(), info_arg=False, ), ) ================================================ FILE: src/ethereum_test_vm/evm_types.py ================================================ """EVM types definitions.""" from enum import Enum class EVMCodeType(str, Enum): """ Enum representing the type of EVM code that is supported in a given fork. """ LEGACY = "legacy" EOF_V1 = "eof_v1" def __str__(self) -> str: """Return the name of the EVM code type.""" return self.name ================================================ FILE: src/ethereum_test_vm/helpers.py ================================================ """Helper functions for the EVM.""" from .bytecode import Bytecode from .opcodes import Opcodes as Op class MemoryVariable(Bytecode): """ Variable abstraction to help keep track values that are stored in memory. To use, simply declare a variable with an unique offset that is not used by any other variable. The variable then can be used in-place to read the value from memory: ```python v = MemoryVariable(128) bytecode = Op.ADD(v, Op.CALLDATASIZE()) ``` The previous example is equivalent to: ```python bytecode = Op.ADD(Op.MLOAD(offset=128), Op.CALLDATASIZE()) ``` The variable also contains methods to add and subtract values from the memory offset. ```python v = MemoryVariable(128) bytecode = ( v.set(0xff) + v.add(1) + v.return_value() ) ``` The previous example is equivalent to: ```python bytecode = ( Op.MSTORE(offset=128, value=0xff) + Op.MSTORE(offset=128, value=Op.ADD(Op.MLOAD(offset=128), 1)) + Op.RETURN(offset=128, size=32) ) ``` """ offset: int def __new__(cls, offset: int) -> "MemoryVariable": """ Instantiate a new EVM memory variable. When used with normal bytecode, this class simply returns the MLOAD with the provided offset. """ instance = super().__new__(cls, Op.MLOAD(offset=offset)) instance.offset = offset return instance def set(self, value: int | Bytecode) -> Bytecode: """Set the given value at the memory location of this variable.""" return Op.MSTORE(offset=self.offset, value=value) def add(self, value: int | Bytecode) -> Bytecode: """In-place add the given value to the one currently in memory.""" return Op.MSTORE(offset=self.offset, value=Op.ADD(Op.MLOAD(offset=self.offset), value)) def sub(self, value: int | Bytecode) -> Bytecode: """ In-place subtract the given value from the one currently in memory. """ return Op.MSTORE(offset=self.offset, value=Op.SUB(Op.MLOAD(offset=self.offset), value)) def store_value(self, key: int | Bytecode) -> Bytecode: """Op.SSTORE the value that is currently in memory.""" return Op.SSTORE(key, Op.MLOAD(offset=self.offset)) def return_value(self) -> Bytecode: """Op.RETURN the value that is currently in memory.""" return Op.RETURN(offset=self.offset, size=32) def call_return_code(opcode: Op, success: bool, *, revert: bool = False) -> int: """Return return code for a CALL operation.""" if opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL]: return int(success) elif opcode in [Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]: if success: return 0 if revert: return 1 return 2 raise ValueError(f"Not a call opcode: {opcode}") ================================================ FILE: src/ethereum_test_vm/opcodes.py ================================================ """ Ethereum Virtual Machine opcode definitions. Acknowledgments: The individual opcode documentation below is due to the work by [smlXL](https://github.com/smlxl) on [evm.codes](https://www.evm.codes/), available as open source [github.com/smlxl/ evm.codes](https://github.com/smlxl/evm.codes) - thank you! And thanks to @ThreeHrSleep for integrating it in the docstrings. """ from enum import Enum from typing import Any, Callable, Iterable, List, Mapping, Optional, SupportsBytes from ethereum_test_base_types import to_bytes from .bytecode import Bytecode def _get_int_size(n: int) -> int: """Return size of an integer in bytes.""" if n < 0: # Negative numbers in the EVM are represented as two's complement # of 32 bytes return 32 byte_count = 0 while n: byte_count += 1 n >>= 8 return byte_count KW_ARGS_DEFAULTS_TYPE = Mapping[str, "int | bytes | str | Opcode | Bytecode"] def _stack_argument_to_bytecode( arg: "int | bytes | SupportsBytes | str | Opcode | Bytecode | Iterable[int]", ) -> Bytecode: """Convert stack argument in an opcode or macro to bytecode.""" if isinstance(arg, Bytecode): return arg # We are going to push a constant to the stack. data_size = 0 if isinstance(arg, int): signed = arg < 0 data_size = _get_int_size(arg) if data_size > 32: raise ValueError("Opcode stack data must be less than 32 bytes") elif data_size == 0: # Pushing 0 is done with the PUSH1 opcode # for compatibility reasons. data_size = 1 arg = arg.to_bytes( length=data_size, byteorder="big", signed=signed, ) else: arg = to_bytes(arg).lstrip(b"\0") # type: ignore if arg == b"": # Pushing 0 is done with the PUSH1 opcode for # compatibility reasons. arg = b"\x00" data_size = len(arg) assert isinstance(arg, bytes) assert data_size > 0 new_opcode = _push_opcodes_byte_list[data_size - 1][arg] return new_opcode class Opcode(Bytecode): """ Represents a single Opcode instruction in the EVM, with extra metadata useful to parametrize tests. Parameters ---------- - data_portion_length: number of bytes after the opcode in the bytecode that represent data - data_portion_formatter: function to format the data portion of the opcode, if any - stack_properties_modifier: function to modify the stack properties of the opcode after the data portion has been processed - kwargs: list of keyword arguments that can be passed to the opcode, in the order they are meant to be placed in the stack - kwargs_defaults: default values for the keyword arguments if any, otherwise 0 - unchecked_stack: whether the bytecode should ignore stack checks when being called """ data_portion_length: int data_portion_formatter: Optional[Callable[[Any], bytes]] stack_properties_modifier: Optional[Callable[[Any], tuple[int, int, int, int]]] kwargs: List[str] kwargs_defaults: KW_ARGS_DEFAULTS_TYPE unchecked_stack: bool = False def __new__( cls, opcode_or_byte: "int | bytes | Opcode", *, popped_stack_items: int = 0, pushed_stack_items: int = 0, max_stack_height: int | None = None, min_stack_height: int | None = None, data_portion_length: int = 0, data_portion_formatter: Any = None, stack_properties_modifier: Any = None, unchecked_stack: bool = False, terminating: bool = False, kwargs: List[str] | None = None, kwargs_defaults: Optional[KW_ARGS_DEFAULTS_TYPE] = None, ) -> "Opcode": """Create new opcode instance.""" if kwargs_defaults is None: kwargs_defaults = {} if type(opcode_or_byte) is Opcode: # Required because Enum class calls the base class # with the instantiated object as parameter. return opcode_or_byte elif isinstance(opcode_or_byte, int) or isinstance(opcode_or_byte, bytes): obj_bytes = ( bytes([opcode_or_byte]) if isinstance(opcode_or_byte, int) else opcode_or_byte ) if min_stack_height is None: min_stack_height = popped_stack_items if max_stack_height is None: max_stack_height = max( min_stack_height - popped_stack_items + pushed_stack_items, min_stack_height ) obj = super().__new__( cls, obj_bytes, popped_stack_items=popped_stack_items, pushed_stack_items=pushed_stack_items, max_stack_height=max_stack_height, min_stack_height=min_stack_height, terminating=terminating, ) obj.data_portion_length = data_portion_length obj.data_portion_formatter = data_portion_formatter obj.stack_properties_modifier = stack_properties_modifier obj.unchecked_stack = unchecked_stack if kwargs is None: obj.kwargs = [] else: obj.kwargs = kwargs obj.kwargs_defaults = kwargs_defaults return obj raise TypeError("Opcode constructor '__new__' didn't return an instance!") def __getitem__(self, *args: "int | bytes | str | Iterable[int]") -> "Opcode": """ Initialize a new instance of the opcode with the data portion set, and also clear the data portion variables to avoid reusing them. """ if self.data_portion_formatter is None and self.data_portion_length == 0: raise ValueError("Opcode does not have a data portion or has already been set") data_portion = bytes() if self.data_portion_formatter is not None: if len(args) == 1 and isinstance(args[0], Iterable) and not isinstance(args[0], bytes): data_portion = self.data_portion_formatter(*args[0]) else: data_portion = self.data_portion_formatter(*args) elif self.data_portion_length > 0: # For opcodes with a data portion, the first argument is the # data and the rest of the arguments form the stack. assert len(args) == 1, "Opcode with data portion requires exactly one argument" data = args[0] if isinstance(data, bytes) or isinstance(data, SupportsBytes) or isinstance(data, str): if isinstance(data, str): if data.startswith("0x"): data = data[2:] data = bytes.fromhex(data) elif isinstance(data, SupportsBytes): data = bytes(data) assert len(data) <= self.data_portion_length data_portion = data.rjust(self.data_portion_length, b"\x00") elif isinstance(data, int): signed = data < 0 data_portion = data.to_bytes( length=self.data_portion_length, byteorder="big", signed=signed, ) else: raise TypeError("Opcode data portion must be either an int or bytes/hex string") popped_stack_items = self.popped_stack_items pushed_stack_items = self.pushed_stack_items min_stack_height = self.min_stack_height max_stack_height = self.max_stack_height assert ( popped_stack_items is not None and pushed_stack_items is not None and min_stack_height is not None ) if self.stack_properties_modifier is not None: ( popped_stack_items, pushed_stack_items, min_stack_height, max_stack_height, ) = self.stack_properties_modifier(data_portion) new_opcode = Opcode( bytes(self) + data_portion, popped_stack_items=popped_stack_items, pushed_stack_items=pushed_stack_items, min_stack_height=min_stack_height, max_stack_height=max_stack_height, data_portion_length=0, data_portion_formatter=None, unchecked_stack=self.unchecked_stack, terminating=self.terminating, kwargs=self.kwargs, kwargs_defaults=self.kwargs_defaults, ) new_opcode._name_ = f"{self._name_}_0x{data_portion.hex()}" return new_opcode def __call__( self, *args_t: "int | bytes | str | Opcode | Bytecode | Iterable[int]", unchecked: bool = False, **kwargs: "int | bytes | str | Opcode | Bytecode", ) -> Bytecode: """ Make all opcode instances callable to return formatted bytecode, which constitutes a data portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally used to set up the stack. This useful to automatically format, e.g., call opcodes and their stack arguments as `Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0)`. Data sign is automatically detected but for this reason the range of the input must be: `[-2^(data_portion_bits-1), 2^(data_portion_bits)]` where: `data_portion_bits == data_portion_length * 8` For the stack, the arguments are set up in the opposite order they are given, so the first argument is the last item pushed to the stack. The resulting stack arrangement does not take into account opcode stack element consumption, so the stack height is not guaranteed to be correct and the user must take this into consideration. Integers can also be used as stack elements, in which case they are automatically converted to PUSH operations, and negative numbers always use a PUSH32 operation. Hex-strings will be automatically converted to bytes. """ args: List["int | bytes | str | Opcode | Bytecode | Iterable[int]"] = list(args_t) if self.has_data_portion(): if len(args) == 0: raise ValueError("Opcode with data portion requires at least one argument") assert type(self) is Opcode get_item_arg = args.pop() assert not isinstance(get_item_arg, Bytecode) return self[get_item_arg](*args) if self.kwargs is not None and len(kwargs) > 0: assert len(args) == 0, f"Cannot mix positional and keyword arguments {args} {kwargs}" # Validate that all provided kwargs are valid invalid_kwargs = set(kwargs.keys()) - set(self.kwargs) if invalid_kwargs: raise ValueError( f"Invalid keyword argument(s) {list(invalid_kwargs)} for opcode " f"{self._name_}. Valid arguments are: {self.kwargs}" f"Valid arguments are: {self.kwargs}" ) for kw in self.kwargs: args.append(kwargs[kw] if kw in kwargs else self.kwargs_defaults.get(kw, 0)) # The rest of the arguments form the stack. if len(args) != self.popped_stack_items and not (unchecked or self.unchecked_stack): raise ValueError( f"Opcode {self._name_} requires {self.popped_stack_items} stack elements, but " f"{len(args)} were provided. Use 'unchecked=True' parameter to ignore this check." ) pre_opcode_bytecode = Bytecode() while len(args) > 0: pre_opcode_bytecode += _stack_argument_to_bytecode(args.pop()) return pre_opcode_bytecode + self def __lt__(self, other: "Opcode") -> bool: """Compare two opcodes by their integer value.""" return self.int() < other.int() def __gt__(self, other: "Opcode") -> bool: """Compare two opcodes by their integer value.""" return self.int() > other.int() def int(self) -> int: """Return integer representation of the opcode.""" return int.from_bytes(self, byteorder="big") def has_data_portion(self) -> bool: """Return whether the opcode has a data portion.""" return self.data_portion_length > 0 or self.data_portion_formatter is not None OpcodeCallArg = int | bytes | str | Bytecode | Iterable[int] class Macro(Bytecode): """Represents opcode macro replacement, basically holds bytes.""" lambda_operation: Callable[..., Bytecode] | None def __new__( cls, macro_or_bytes: Optional["Bytecode | Macro"] = None, *, lambda_operation: Callable[..., Bytecode] | None = None, ) -> "Macro": """Create new opcode macro instance.""" if macro_or_bytes is None: macro_or_bytes = Bytecode() if isinstance(macro_or_bytes, Macro): # Required because Enum class calls the base class # with the instantiated object as parameter. return macro_or_bytes else: instance = super().__new__(cls, macro_or_bytes) instance.lambda_operation = lambda_operation return instance def __call__(self, *args_t: OpcodeCallArg, **kwargs: Any) -> Bytecode: """Perform macro operation if any. Otherwise is a no-op.""" del kwargs if self.lambda_operation is not None: return self.lambda_operation(*args_t) pre_opcode_bytecode = Bytecode() for arg in args_t: pre_opcode_bytecode += _stack_argument_to_bytecode(arg) return pre_opcode_bytecode + self # Constants RJUMPV_MAX_INDEX_BYTE_LENGTH = 1 RJUMPV_BRANCH_OFFSET_BYTE_LENGTH = 2 # TODO: Allowing Iterable here is a hacky way to support `range`, # because Python 3.11+ will allow `Op.RJUMPV[*range(5)]`. # This is a temporary solution until Python 3.11+ is the minimum required # version. def _rjumpv_encoder(*args: int | bytes | Iterable[int]) -> bytes: if len(args) == 1: if isinstance(args[0], bytes) or isinstance(args[0], SupportsBytes): return bytes(args[0]) elif isinstance(args[0], Iterable): int_args = list(args[0]) return b"".join( [(len(int_args) - 1).to_bytes(RJUMPV_MAX_INDEX_BYTE_LENGTH, "big")] + [ i.to_bytes(RJUMPV_BRANCH_OFFSET_BYTE_LENGTH, "big", signed=True) for i in int_args ] ) return b"".join( [(len(args) - 1).to_bytes(RJUMPV_MAX_INDEX_BYTE_LENGTH, "big")] + [ i.to_bytes(RJUMPV_BRANCH_OFFSET_BYTE_LENGTH, "big", signed=True) for i in args if isinstance(i, int) ] ) def _exchange_encoder(*args: int) -> bytes: assert 1 <= len(args) <= 2, f"Exchange opcode requires one or two arguments, got {len(args)}" if len(args) == 1: return int.to_bytes(args[0], 1, "big") # n = imm >> 4 + 1 # m = imm & 0xF + 1 # x = n + 1 # y = n + m + 1 # ... # n = x - 1 # m = y - x # m = y - n - 1 x, y = args assert 2 <= x <= 0x11 assert x + 1 <= y <= x + 0x10 n = x - 1 m = y - x imm = (n - 1) << 4 | m - 1 return int.to_bytes(imm, 1, "big") def _swapn_stack_properties_modifier(data: bytes) -> tuple[int, int, int, int]: imm = int.from_bytes(data, "big") n = imm + 1 min_stack_height = n + 1 return 0, 0, min_stack_height, min_stack_height def _dupn_stack_properties_modifier(data: bytes) -> tuple[int, int, int, int]: imm = int.from_bytes(data, "big") n = imm + 1 min_stack_height = n return 0, 1, min_stack_height, min_stack_height + 1 def _exchange_stack_properties_modifier(data: bytes) -> tuple[int, int, int, int]: imm = int.from_bytes(data, "big") n = (imm >> 4) + 1 m = (imm & 0x0F) + 1 min_stack_height = n + m + 1 return 0, 0, min_stack_height, min_stack_height class Opcodes(Opcode, Enum): """ Enum containing all known opcodes. Contains deprecated and not yet implemented opcodes. This enum is !! NOT !! meant to be iterated over by the tests. Instead, create a list with cherry-picked opcodes from this Enum within the test if iteration is needed. Do !! NOT !! remove or modify existing opcodes from this list. """ STOP = Opcode(0x00, terminating=True) """ STOP() ---- Description ---- Stop execution Inputs ---- - None Outputs ---- - None Fork ---- Frontier Gas ---- 0 Source: [evm.codes/#00](https://www.evm.codes/#00) """ ADD = Opcode(0x01, popped_stack_items=2, pushed_stack_items=1) """ ADD(a, b) = c ---- Description ---- Addition operation Inputs ---- - a: first integer value to add - b: second integer value to add Outputs ---- - c: integer result of the addition modulo 2**256 Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#01](https://www.evm.codes/#01) """ MUL = Opcode(0x02, popped_stack_items=2, pushed_stack_items=1) """ MUL(a, b) = c ---- Description ---- Multiplication operation Inputs ---- - a: first integer value to multiply - b: second integer value to multiply Outputs ---- - c: integer result of the multiplication modulo 2**256 Fork ---- Frontier Gas ---- 5 Source: [evm.codes/#02](https://www.evm.codes/#02) """ SUB = Opcode(0x03, popped_stack_items=2, pushed_stack_items=1) """ SUB(a, b) = c ---- Description ---- Subtraction operation Inputs ---- - a: first integer value - b: second integer value Outputs ---- - c: integer result of the subtraction modulo 2**256 Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#03](https://www.evm.codes/#03) """ DIV = Opcode(0x04, popped_stack_items=2, pushed_stack_items=1) """ DIV(a, b) = c ---- Description ---- Division operation Inputs ---- - a: numerator - b: denominator (must be non-zero) Outputs ---- - c: integer result of the division Fork ---- Frontier Gas ---- 5 Source: [evm.codes/#04](https://www.evm.codes/#04) """ SDIV = Opcode(0x05, popped_stack_items=2, pushed_stack_items=1) """ SDIV(a, b) = c ---- Description ---- Signed division operation Inputs ---- - a: signed numerator - b: signed denominator Outputs ---- - c: signed integer result of the division. If the denominator is 0, the result will be 0 ---- Fork ---- Frontier Gas ---- 5 Source: [evm.codes/#05](https://www.evm.codes/#05) """ MOD = Opcode(0x06, popped_stack_items=2, pushed_stack_items=1) """ MOD(a, b) = c ---- Description ---- Modulo operation Inputs ---- - a: integer numerator - b: integer denominator Outputs ---- - a % b: integer result of the integer modulo. If the denominator is 0, the result will be 0 Fork ---- Frontier Gas ---- 5 Source: [evm.codes/#06](https://www.evm.codes/#06) """ SMOD = Opcode(0x07, popped_stack_items=2, pushed_stack_items=1) """ SMOD(a, b) = c ---- Description ---- Signed modulo remainder operation Inputs ---- - a: integer numerator - b: integer denominator Outputs ---- - a % b: integer result of the signed integer modulo. If the denominator is 0, the result will be 0 Fork ---- Frontier Gas ---- 5 Source: [evm.codes/#07](https://www.evm.codes/#07) """ ADDMOD = Opcode(0x08, popped_stack_items=3, pushed_stack_items=1) """ ADDMOD(a, b, c) = d ---- Description ---- Modular addition operation with overflow check Inputs ---- - a: first integer value - b: second integer value - c: integer denominator Outputs ---- - (a + b) % N: integer result of the addition followed by a modulo. If the denominator is 0, the result will be 0 Fork ---- Frontier Gas ---- 8 Source: [evm.codes/#08](https://www.evm.codes/#08) """ MULMOD = Opcode(0x09, popped_stack_items=3, pushed_stack_items=1) """ MULMOD(a, b, N) = d ---- Description ---- Modulo multiplication operation Inputs ---- - a: first integer value to multiply - b: second integer value to multiply - N: integer denominator Outputs ---- - (a * b) % N: integer result of the multiplication followed by a modulo. If the denominator is 0, the result will be 0 Fork ---- Frontier Gas ---- 8 Source: [evm.codes/#09](https://www.evm.codes/#09) """ EXP = Opcode(0x0A, popped_stack_items=2, pushed_stack_items=1) """ EXP(a, exponent) = a ** exponent ---- Description ---- Exponential operation Inputs ---- - a: integer base - exponent: integer exponent Outputs ---- - a ** exponent: integer result of the exponential operation modulo 2**256 Fork ---- Frontier Gas ---- - static_gas = 10 - dynamic_gas = 50 * exponent_byte_size Source: [evm.codes/#0A](https://www.evm.codes/#0A) """ SIGNEXTEND = Opcode(0x0B, popped_stack_items=2, pushed_stack_items=1) """ SIGNEXTEND(b, x) = y ---- Description ---- Sign extension operation Inputs ---- - b: size in byte - 1 of the integer to sign extend - x: integer value to sign extend Outputs ---- - y: integer result of the sign extend Fork ---- Frontier Gas ---- 5 Source: [evm.codes/#0B](https://www.evm.codes/#0B) """ LT = Opcode(0x10, popped_stack_items=2, pushed_stack_items=1) """ LT(a, b) = a < b ---- Description ---- Less-than comparison Inputs ---- - a: left side integer value - b: right side integer value Outputs ---- - a < b: 1 if the left side is smaller, 0 otherwise Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#10](https://www.evm.codes/#10) """ GT = Opcode(0x11, popped_stack_items=2, pushed_stack_items=1) """ GT(a, b) = a > b ---- Description ---- Greater-than comparison Inputs ---- - a: left side integer - b: right side integer Outputs ---- - a > b: 1 if the left side is bigger, 0 otherwise Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#11](https://www.evm.codes/#11) """ SLT = Opcode(0x12, popped_stack_items=2, pushed_stack_items=1) """ SLT(a, b) = a < b ---- Description ---- Signed less-than comparison Inputs ---- - a: left side signed integer - b: right side signed integer Outputs ---- - a < b: 1 if the left side is smaller, 0 otherwise Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#12](https://www.evm.codes/#12) """ SGT = Opcode(0x13, popped_stack_items=2, pushed_stack_items=1) """ SGT(a, b) = a > b ---- Description ---- Signed greater-than comparison Inputs ---- - a: left side signed integer - b: right side signed integer Outputs ---- - a > b: 1 if the left side is bigger, 0 otherwise Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#13](https://www.evm.codes/#13) """ EQ = Opcode(0x14, popped_stack_items=2, pushed_stack_items=1) """ EQ(a, b) = a == b ---- Description ---- Equality comparison Inputs ---- - a: left side integer - b: right side integer Outputs ---- - a == b: 1 if the left side is equal to the right side, 0 otherwise Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#14](https://www.evm.codes/#14) """ ISZERO = Opcode(0x15, popped_stack_items=1, pushed_stack_items=1) """ ISZERO(a) = a == 0 ---- Description ---- Is-zero comparison Inputs ---- - a: integer Outputs ---- - a == 0: 1 if a is 0, 0 otherwise Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#15](https://www.evm.codes/#15) """ AND = Opcode(0x16, popped_stack_items=2, pushed_stack_items=1) """ AND(a, b) = a & b ---- Description ---- Bitwise AND operation Inputs ---- - a: first binary value - b: second binary value Outputs ---- - a & b: the bitwise AND result Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#16](https://www.evm.codes/#16) """ OR = Opcode(0x17, popped_stack_items=2, pushed_stack_items=1) """ OR(a, b) = a | b ---- Description ---- Bitwise OR operation Inputs ---- - a: first binary value - b: second binary value Outputs ---- - a | b: the bitwise OR result Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#17](https://www.evm.codes/#17) """ XOR = Opcode(0x18, popped_stack_items=2, pushed_stack_items=1) """ XOR(a, b) = a ^ b ---- Description ---- Bitwise XOR operation Inputs ---- - a: first binary value - b: second binary value Outputs ---- - a ^ b: the bitwise XOR result Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#18](https://www.evm.codes/#18) """ NOT = Opcode(0x19, popped_stack_items=1, pushed_stack_items=1) """ NOT(a) = ~a ---- Description ---- Bitwise NOT operation Inputs ---- - a: binary value Outputs ---- - ~a: the bitwise NOT result Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#19](https://www.evm.codes/#19) """ BYTE = Opcode(0x1A, popped_stack_items=2, pushed_stack_items=1) """ BYTE(i, x) = y ---- Description ---- Extract a byte from the given position in the value Inputs ---- - i: byte offset starting from the most significant byte - x: 32-byte value Outputs ---- - y: the indicated byte at the least significant position. If the byte offset is out of range, the result is 0 Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#1A](https://www.evm.codes/#1A) """ SHL = Opcode(0x1B, popped_stack_items=2, pushed_stack_items=1) """ SHL(shift, value) = value << shift ---- Description ---- Shift left operation Inputs ---- - shift: number of bits to shift to the left - value: 32 bytes to shift Outputs ---- - value << shift: the shifted value. If shift is bigger than 255, returns 0 Fork ---- Constantinople Gas ---- 3 Source: [evm.codes/#1B](https://www.evm.codes/#1B) """ SHR = Opcode(0x1C, popped_stack_items=2, pushed_stack_items=1) """ SHR(shift, value) = value >> shift ---- Description ---- Logical shift right operation Inputs ---- - shift: number of bits to shift to the right. - value: 32 bytes to shift Outputs ---- - value >> shift: the shifted value. If shift is bigger than 255, returns 0 Fork ---- Constantinople Gas ---- 3 Source: [evm.codes/#1C](https://www.evm.codes/#1C) """ SAR = Opcode(0x1D, popped_stack_items=2, pushed_stack_items=1) """ SAR(shift, value) = value >> shift ---- Description ---- Arithmetic shift right operation Inputs ---- - shift: number of bits to shift to the right - value: integer to shift Outputs ---- - value >> shift: the shifted value Fork ---- Constantinople Gas ---- 3 Source: [evm.codes/#1D](https://www.evm.codes/#1D) """ CLZ = Opcode(0x1E, popped_stack_items=1, pushed_stack_items=1) """ CLZ(value) = count_leading_zeros(value) ---- Description ---- Counts leading zeros (bitwise). Inputs ---- - value: integer to count zeros on Outputs ---- - zeros: leading zero bits Fork ---- Osaka Gas ---- 3 Source: [evm.codes/#1E](https://www.evm.codes/#1E) """ SHA3 = Opcode(0x20, popped_stack_items=2, pushed_stack_items=1, kwargs=["offset", "size"]) """ SHA3(offset, size) = hash ---- Description ---- Compute Keccak-256 hash Inputs ---- - offset: byte offset in the memory - size: byte size to read in the memory Outputs ---- - hash: Keccak-256 hash of the given data in memory Fork ---- Frontier Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 30 - dynamic_gas = 6 * minimum_word_size + memory_expansion_cost Source: [evm.codes/#20](https://www.evm.codes/#20) """ ADDRESS = Opcode(0x30, pushed_stack_items=1) """ ADDRESS() = address ---- Description ---- Get address of currently executing account Inputs ---- - None Outputs ---- - address: the 20-byte address of the current account Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#30](https://www.evm.codes/#30) """ BALANCE = Opcode(0x31, popped_stack_items=1, pushed_stack_items=1, kwargs=["address"]) """ BALANCE(address) = balance ---- Description ---- Get the balance of the specified account Inputs ---- - address: 20-byte address of the account to check Outputs ---- - balance: balance of the given account in wei. Returns 0 if the account doesn't exist Fork ---- Frontier Gas ---- - static_gas = 0 - dynamic_gas = 100 if warm_address, 2600 if cold_address Source: [evm.codes/#31](https://www.evm.codes/#31) """ ORIGIN = Opcode(0x32, pushed_stack_items=1) """ ORIGIN() = address ---- Description ---- Get execution origination address Inputs ---- - None Outputs ---- - address: the 20-byte address of the sender of the transaction. It can only be an account without code Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#32](https://www.evm.codes/#32) """ CALLER = Opcode(0x33, pushed_stack_items=1) """ CALLER() = address ---- Description ---- Get caller address Inputs ---- - None Outputs ---- - address: the 20-byte address of the caller account. This is the account that did the last call (except delegate call) Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#33](https://www.evm.codes/#33) """ CALLVALUE = Opcode(0x34, pushed_stack_items=1) """ CALLVALUE() = value ---- Description ---- Get deposited value by the instruction/transaction responsible for this execution Inputs ---- - None Outputs ---- - value: the value of the current call in wei Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#34](https://www.evm.codes/#34) """ CALLDATALOAD = Opcode(0x35, popped_stack_items=1, pushed_stack_items=1, kwargs=["offset"]) """ CALLDATALOAD(offset) = data[offset] ---- Description ---- Get input data of current environment Inputs ---- - offset: byte offset in the calldata Outputs ---- - data[offset]: 32-byte value starting from the given offset of the calldata. All bytes after the end of the calldata are set to 0 Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#35](https://www.evm.codes/#35) """ CALLDATASIZE = Opcode(0x36, pushed_stack_items=1) """ CALLDATASIZE() = size ---- Description ---- Get size of input data in current environment Inputs ---- - None Outputs ---- - size: byte size of the calldata Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#36](https://www.evm.codes/#36) """ CALLDATACOPY = Opcode(0x37, popped_stack_items=3, kwargs=["dest_offset", "offset", "size"]) """ CALLDATACOPY(dest_offset, offset, size) ---- Description ---- Copy input data in current environment to memory Inputs ---- - dest_offset: byte offset in the memory where the result will be copied - offset: byte offset in the calldata to copy - size: byte size to copy Outputs ---- - None Fork ---- Frontier Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 3 - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost Source: [evm.codes/#37](https://www.evm.codes/#37) """ CODESIZE = Opcode(0x38, pushed_stack_items=1) """ CODESIZE() = size ---- Description ---- Get size of code running in current environment Inputs ---- - None Outputs ---- - size: byte size of the code Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#38](https://www.evm.codes/#38) """ CODECOPY = Opcode(0x39, popped_stack_items=3, kwargs=["dest_offset", "offset", "size"]) """ CODECOPY(dest_offset, offset, size) ---- Description ---- Copy code running in current environment to memory Inputs ---- - dest_offset: byte offset in the memory where the result will be copied. - offset: byte offset in the code to copy. - size: byte size to copy Fork ---- Frontier Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 3 - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost Source: [evm.codes/#39](https://www.evm.codes/#39) """ GASPRICE = Opcode(0x3A, pushed_stack_items=1) """ GASPRICE() = price ---- Description ---- Get price of gas in current environment Outputs ---- - price: gas price in wei per gas Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#3A](https://www.evm.codes/#3A) """ EXTCODESIZE = Opcode(0x3B, popped_stack_items=1, pushed_stack_items=1, kwargs=["address"]) """ EXTCODESIZE(address) = size ---- Description ---- Get size of an account's code Inputs ---- - address: 20-byte address of the contract to query Outputs ---- - size: byte size of the code Fork ---- Frontier Gas ---- - static_gas = 0 - dynamic_gas = 100 if warm_address, 2600 if cold_address Source: [evm.codes/#3B](https://www.evm.codes/#3B) """ EXTCODECOPY = Opcode( 0x3C, popped_stack_items=4, kwargs=["address", "dest_offset", "offset", "size"] ) """ EXTCODECOPY(address, dest_offset, offset, size) ---- Description ---- Copy an account's code to memory Inputs ---- - address: 20-byte address of the contract to query - dest_offset: byte offset in the memory where the result will be copied - offset: byte offset in the code to copy - size: byte size to copy Outputs ---- - None Fork ---- Frontier Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 0 - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost + address_access_cost Source: [evm.codes/#3C](https://www.evm.codes/#3C) """ RETURNDATASIZE = Opcode(0x3D, pushed_stack_items=1) """ RETURNDATASIZE() = size ---- Description ---- Get size of output data from the previous call from the current environment Outputs ---- - size: byte size of the return data from the last executed sub context Fork ---- Byzantium Gas ---- 2 Source: [evm.codes/#3D](https://www.evm.codes/#3D) """ RETURNDATACOPY = Opcode(0x3E, popped_stack_items=3, kwargs=["dest_offset", "offset", "size"]) """ RETURNDATACOPY(dest_offset, offset, size) ---- Description ---- Copy output data from the previous call to memory Inputs ---- - dest_offset: byte offset in the memory where the result will be copied - offset: byte offset in the return data from the last executed sub context to copy - size: byte size to copy Fork ---- Byzantium Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 3 - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost Source: [evm.codes/#3E](https://www.evm.codes/#3E) """ EXTCODEHASH = Opcode(0x3F, popped_stack_items=1, pushed_stack_items=1, kwargs=["address"]) """ EXTCODEHASH(address) = hash ---- Description ---- Get hash of an account's code Inputs ---- - address: 20-byte address of the account Outputs ---- - hash: hash of the chosen account's code, the empty hash (0xc5d24601...) if the account has no code, or 0 if the account does not exist or has been destroyed Fork ---- Constantinople Gas ---- - static_gas = 0 - dynamic_gas = 100 if warm_address, 2600 if cold_address Source: [evm.codes/#3F](https://www.evm.codes/#3F) """ BLOCKHASH = Opcode(0x40, popped_stack_items=1, pushed_stack_items=1, kwargs=["block_number"]) """ BLOCKHASH(block_number) = hash ---- Description ---- Get the hash of one of the 256 most recent complete blocks Inputs ---- - blockNumber: block number to get the hash from. Valid range is the last 256 blocks (not including the current one). Current block number can be queried with NUMBER Outputs ---- - hash: hash of the chosen block, or 0 if the block number is not in the valid range Fork ---- Frontier Gas ---- 20 Source: [evm.codes/#40](https://www.evm.codes/#40) """ COINBASE = Opcode(0x41, pushed_stack_items=1) """ COINBASE() = address ---- Description ---- Get the block's beneficiary address Inputs ---- - None Outputs ---- - address: miner's 20-byte address Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#41](https://www.evm.codes/#41) """ TIMESTAMP = Opcode(0x42, pushed_stack_items=1) """ TIMESTAMP() = timestamp ---- Description ---- Get the block's timestamp Inputs ---- - None Outputs ---- - timestamp: unix timestamp of the current block Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#42](https://www.evm.codes/#42) """ NUMBER = Opcode(0x43, pushed_stack_items=1) """ NUMBER() = blockNumber ---- Description ---- Get the block's number Inputs ---- - None Outputs ---- - blockNumber: current block number Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#43](https://www.evm.codes/#43) """ PREVRANDAO = Opcode(0x44, pushed_stack_items=1) """ PREVRANDAO() = prevRandao ---- Description ---- Get the previous block's RANDAO mix Inputs ---- - None Outputs ---- - prevRandao: previous block's RANDAO mix Fork ---- Merge Gas ---- 2 Source: [evm.codes/#44](https://www.evm.codes/#44) """ GASLIMIT = Opcode(0x45, pushed_stack_items=1) """ GASLIMIT() = gasLimit ---- Description ---- Get the block's gas limit Inputs ---- - None Outputs ---- - gasLimit: gas limit Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#45](https://www.evm.codes/#45) """ CHAINID = Opcode(0x46, pushed_stack_items=1) """ CHAINID() = chainId ---- Description ---- Get the chain ID Inputs ---- - None Outputs ---- - chainId: chain id of the network Fork ---- Istanbul Gas ---- 2 Source: [evm.codes/#46](https://www.evm.codes/#46) """ SELFBALANCE = Opcode(0x47, pushed_stack_items=1) """ SELFBALANCE() = balance ---- Description ---- Get balance of currently executing account Inputs ---- - None Outputs ---- - balance: balance of the current account in wei Fork ---- Istanbul Gas ---- 5 Source: [evm.codes/#47](https://www.evm.codes/#47) """ BASEFEE = Opcode(0x48, pushed_stack_items=1) """ BASEFEE() = baseFee ---- Description ---- Get the base fee Outputs ---- - baseFee: base fee in wei Fork ---- London Gas ---- 2 Source: [evm.codes/#48](https://www.evm.codes/#48) """ BLOBHASH = Opcode(0x49, popped_stack_items=1, pushed_stack_items=1, kwargs=["index"]) """ BLOBHASH(index) = versionedHash ---- Description ---- Returns the versioned hash of a single blob contained in the type-3 transaction Inputs ---- - index: index of the blob Outputs ---- - versionedHash: versioned hash of the blob Fork ---- Cancun Gas ---- 3 Source: [eips.ethereum.org/EIPS/ eip-4844](https://eips.ethereum.org/EIPS/eip-4844) """ BLOBBASEFEE = Opcode(0x4A, popped_stack_items=0, pushed_stack_items=1) """ BLOBBASEFEE() = fee ---- Description ---- Returns the value of the blob base fee of the block it is executing in Inputs ---- - None Outputs ---- - baseFeePerBlobGas: base fee for the blob gas in wei Fork ---- Cancun Gas ---- 2 Source: [eips.ethereum.org/EIPS/eip-7516](https://eips.ethereum.org/ EIPS/eip-7516) """ POP = Opcode(0x50, popped_stack_items=1) """ POP() ---- Description ---- Remove item from stack Inputs ---- - None Outputs ---- - None Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#50](https://www.evm.codes/#50) """ MLOAD = Opcode(0x51, popped_stack_items=1, pushed_stack_items=1, kwargs=["offset"]) """ MLOAD(offset) = value ---- Description ---- Load word from memory Inputs ---- - offset: offset in the memory in bytes Outputs ---- - value: the 32 bytes in memory starting at that offset. If it goes beyond its current size (see MSIZE), writes 0s Fork ---- Frontier Gas ---- - static_gas = 3 - dynamic_gas = memory_expansion_cost Source: [evm.codes/#51](https://www.evm.codes/#51) """ MSTORE = Opcode(0x52, popped_stack_items=2, kwargs=["offset", "value"]) """ MSTORE(offset, value) ---- Description ---- Save word to memory Inputs ---- - offset: offset in the memory in bytes - value: 32-byte value to write in the memory Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 3 - dynamic_gas = memory_expansion_cost Source: [evm.codes/#52](https://www.evm.codes/#52) """ MSTORE8 = Opcode(0x53, popped_stack_items=2, kwargs=["offset", "value"]) """ MSTORE8(offset, value) ---- Description ---- Save byte to memory Inputs ---- - offset: offset in the memory in bytes - value: 1-byte value to write in the memory (the least significant byte of the 32-byte stack value) Fork ---- Frontier Gas ---- - static_gas = 3 - dynamic_gas = memory_expansion_cost Source: [evm.codes/#53](https://www.evm.codes/#53) """ SLOAD = Opcode(0x54, popped_stack_items=1, pushed_stack_items=1, kwargs=["key"]) """ SLOAD(key) = value ---- Description ---- Load word from storage Inputs ---- - key: 32-byte key in storage Outputs ---- - value: 32-byte value corresponding to that key. 0 if that key was never written before Fork ---- Frontier Gas ---- - static_gas = 0 - dynamic_gas = 100 if warm_address, 2600 if cold_address Source: [evm.codes/#54](https://www.evm.codes/#54) """ SSTORE = Opcode(0x55, popped_stack_items=2, kwargs=["key", "value"]) """ SSTORE(key, value) ---- Description ---- Save word to storage Inputs ---- - key: 32-byte key in storage - value: 32-byte value to store Outputs ---- - None Fork ---- Frontier Gas ---- ``` static_gas = 0 if value == current_value if key is warm base_dynamic_gas = 100 else base_dynamic_gas = 100 else if current_value == original_value if original_value == 0 base_dynamic_gas = 20000 else base_dynamic_gas = 2900 else base_dynamic_gas = 100 if key is cold: base_dynamic_gas += 2100 ``` Source: [evm.codes/#55](https://www.evm.codes/#55) """ JUMP = Opcode(0x56, popped_stack_items=1, kwargs=["pc"]) """ JUMP(pc) ---- Description ---- Alter the program counter Inputs ---- - pc: byte offset in the deployed code where execution will continue from. Must be a JUMPDEST instruction Outputs ---- - None Fork ---- Frontier Gas ---- 8 Source: [evm.codes/#56](https://www.evm.codes/#56) """ JUMPI = Opcode(0x57, popped_stack_items=2, kwargs=["pc", "condition"]) """ JUMPI(pc, condition) ---- Description ---- Conditionally alter the program counter Inputs ---- - pc: byte offset in the deployed code where execution will continue from. Must be a JUMPDEST instruction - condition: the program counter will be altered with the new value only if this value is different from 0. Otherwise, the program counter is simply incremented and the next instruction will be executed Fork ---- Frontier Gas ---- 10 Source: [evm.codes/#57](https://www.evm.codes/#57) """ PC = Opcode(0x58, pushed_stack_items=1) """ PC() = counter ---- Description ---- Get the value of the program counter prior to the increment corresponding to this instruction Inputs ---- - None Outputs ---- - counter: PC of this instruction in the current program. Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#58](https://www.evm.codes/#58) """ MSIZE = Opcode(0x59, pushed_stack_items=1) """ MSIZE() = size ---- Description ---- Get the size of active memory in bytes Outputs ---- - size: current memory size in bytes (higher offset accessed until now + 1) Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#59](https://www.evm.codes/#59) """ GAS = Opcode(0x5A, pushed_stack_items=1) """ GAS() = gas_remaining ---- Description ---- Get the amount of available gas, including the corresponding reduction for the cost of this instruction Inputs ---- - None Outputs ---- - gas: remaining gas (after this instruction) Fork ---- Frontier Gas ---- 2 Source: [evm.codes/#5A](https://www.evm.codes/#5A) """ JUMPDEST = Opcode(0x5B) """ JUMPDEST() ---- Description ---- Mark a valid destination for jumps Inputs ---- - None Outputs ---- - None Fork ---- Frontier Gas ---- 1 Source: [evm.codes/#5B](https://www.evm.codes/#5B) """ NOOP = Opcode(0x5B) """ NOOP() ---- Description ---- Synonym for JUMPDEST. Performs no operation. Inputs ---- - None Outputs ---- - None Fork ---- Frontier Gas ---- 1 Source: [evm.codes/#5B](https://www.evm.codes/#5B) """ TLOAD = Opcode(0x5C, popped_stack_items=1, pushed_stack_items=1, kwargs=["key"]) """ TLOAD(key) = value ---- Description ---- Load word from transient storage Inputs ---- - key: 32-byte key in transient storage Outputs ---- - value: 32-byte value corresponding to that key. 0 if that key was never written Fork ---- Cancun Gas ---- 100 Source: [eips.ethereum.org/EIPS/eip-1153](https://eips.ethereum.org/EIPS/eip-1153) """ TSTORE = Opcode(0x5D, popped_stack_items=2, kwargs=["key", "value"]) """ TSTORE(key, value) ---- Description ---- Save word to transient storage Inputs ---- - key: 32-byte key in transient storage - value: 32-byte value to store Fork ---- Cancun Gas ---- 100 Source: [eips.ethereum.org/EIPS/eip-1153](https://eips.ethereum.org/EIPS/ eip-1153) """ MCOPY = Opcode(0x5E, popped_stack_items=3, kwargs=["dest_offset", "offset", "size"]) """ MCOPY(dest_offset, offset, size) ---- Description ---- Copies areas in memory Inputs ---- - dest_offset: byte offset in the memory where the result will be copied - offset: byte offset in the calldata to copy - size: byte size to copy Outputs ---- - None Fork ---- Cancun Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 3 - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost Source: [eips.ethereum.org/EIPS/eip-5656](https://eips.ethereum.org/EIPS/ eip-5656) """ PUSH0 = Opcode(0x5F, pushed_stack_items=1) """ PUSH0() = value ---- Description ---- Place value 0 on stack Inputs ---- - None Outputs ---- - value: pushed value, equal to 0 Fork ---- Shanghai Gas ---- 2 Source: [evm.codes/#5F](https://www.evm.codes/#5F) """ PUSH1 = Opcode(0x60, pushed_stack_items=1, data_portion_length=1) """ PUSH1() = value ---- Description ---- Place 1 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#60](https://www.evm.codes/#60) """ PUSH2 = Opcode(0x61, pushed_stack_items=1, data_portion_length=2) """ PUSH2() = value ---- Description ---- Place 2 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#61](https://www.evm.codes/#61) """ PUSH3 = Opcode(0x62, pushed_stack_items=1, data_portion_length=3) """ PUSH3() = value ---- Description ---- Place 3 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#62](https://www.evm.codes/#62) """ PUSH4 = Opcode(0x63, pushed_stack_items=1, data_portion_length=4) """ PUSH4() = value ---- Description ---- Place 4 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#63](https://www.evm.codes/#63) """ PUSH5 = Opcode(0x64, pushed_stack_items=1, data_portion_length=5) """ PUSH5() = value ---- Description ---- Place 5 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#64](https://www.evm.codes/#64) """ PUSH6 = Opcode(0x65, pushed_stack_items=1, data_portion_length=6) """ PUSH6() = value ---- Description ---- Place 6 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#65](https://www.evm.codes/#65) """ PUSH7 = Opcode(0x66, pushed_stack_items=1, data_portion_length=7) """ PUSH7() = value ---- Description ---- Place 7 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#66](https://www.evm.codes/#66) """ PUSH8 = Opcode(0x67, pushed_stack_items=1, data_portion_length=8) """ PUSH8() = value ---- Description ---- Place 8 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#67](https://www.evm.codes/#67) """ PUSH9 = Opcode(0x68, pushed_stack_items=1, data_portion_length=9) """ PUSH9() = value ---- Description ---- Place 9 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#68](https://www.evm.codes/#68) """ PUSH10 = Opcode(0x69, pushed_stack_items=1, data_portion_length=10) """ PUSH10() = value ---- Description ---- Place 10 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#69](https://www.evm.codes/#69) """ PUSH11 = Opcode(0x6A, pushed_stack_items=1, data_portion_length=11) """ PUSH11() = value ---- Description ---- Place 11 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#6A](https://www.evm.codes/#6A) """ PUSH12 = Opcode(0x6B, pushed_stack_items=1, data_portion_length=12) """ PUSH12() = value ---- Description ---- Place 12 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#6B](https://www.evm.codes/#6B) """ PUSH13 = Opcode(0x6C, pushed_stack_items=1, data_portion_length=13) """ PUSH13() = value ---- Description ---- Place 13 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#6C](https://www.evm.codes/#6C) """ PUSH14 = Opcode(0x6D, pushed_stack_items=1, data_portion_length=14) """ PUSH14() = value ---- Description ---- Place 14 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#6D](https://www.evm.codes/#6D) """ PUSH15 = Opcode(0x6E, pushed_stack_items=1, data_portion_length=15) """ PUSH15() = value ---- Description ---- Place 15 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#6E](https://www.evm.codes/#6E) """ PUSH16 = Opcode(0x6F, pushed_stack_items=1, data_portion_length=16) """ PUSH16() = value ---- Description ---- Place 16 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#6F](https://www.evm.codes/#6F) """ PUSH17 = Opcode(0x70, pushed_stack_items=1, data_portion_length=17) """ PUSH17() = value ---- Description ---- Place 17 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#70](https://www.evm.codes/#70) """ PUSH18 = Opcode(0x71, pushed_stack_items=1, data_portion_length=18) """ PUSH18() = value ---- Description ---- Place 18 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#71](https://www.evm.codes/#71) """ PUSH19 = Opcode(0x72, pushed_stack_items=1, data_portion_length=19) """ PUSH19() = value ---- Description ---- Place 19 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#72](https://www.evm.codes/#72) """ PUSH20 = Opcode(0x73, pushed_stack_items=1, data_portion_length=20) """ PUSH20() = value ---- Description ---- Place 20 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#73](https://www.evm.codes/#73) """ PUSH21 = Opcode(0x74, pushed_stack_items=1, data_portion_length=21) """ PUSH21() = value ---- Description ---- Place 21 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#74](https://www.evm.codes/#74) """ PUSH22 = Opcode(0x75, pushed_stack_items=1, data_portion_length=22) """ PUSH22() = value ---- Description ---- Place 22 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#75](https://www.evm.codes/#75) """ PUSH23 = Opcode(0x76, pushed_stack_items=1, data_portion_length=23) """ PUSH23() = value ---- Description ---- Place 23 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#76](https://www.evm.codes/#76) """ PUSH24 = Opcode(0x77, pushed_stack_items=1, data_portion_length=24) """ PUSH24() = value ---- Description ---- Place 24 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#77](https://www.evm.codes/#77) """ PUSH25 = Opcode(0x78, pushed_stack_items=1, data_portion_length=25) """ PUSH25() = value ---- Description ---- Place 25 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#78](https://www.evm.codes/#78) """ PUSH26 = Opcode(0x79, pushed_stack_items=1, data_portion_length=26) """ PUSH26() = value ---- Description ---- Place 26 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#79](https://www.evm.codes/#79) """ PUSH27 = Opcode(0x7A, pushed_stack_items=1, data_portion_length=27) """ PUSH27() = value ---- Description ---- Place 27 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#7A](https://www.evm.codes/#7A) """ PUSH28 = Opcode(0x7B, pushed_stack_items=1, data_portion_length=28) """ PUSH28() = value ---- Description ---- Place 28 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#7B](https://www.evm.codes/#7B) """ PUSH29 = Opcode(0x7C, pushed_stack_items=1, data_portion_length=29) """ PUSH29() = value ---- Description ---- Place 29 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#7C](https://www.evm.codes/#7C) """ PUSH30 = Opcode(0x7D, pushed_stack_items=1, data_portion_length=30) """ PUSH30() = value ---- Description ---- Place 30 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#7D](https://www.evm.codes/#7D) """ PUSH31 = Opcode(0x7E, pushed_stack_items=1, data_portion_length=31) """ PUSH31() = value ---- Description ---- Place 31 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#7E](https://www.evm.codes/#7E) """ PUSH32 = Opcode(0x7F, pushed_stack_items=1, data_portion_length=32) """ PUSH32() = value ---- Description ---- Place 32 byte item on stack Inputs ---- - None Outputs ---- - value: pushed value, aligned to the right (put in the lowest significant bytes) Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#7F](https://www.evm.codes/#7F) """ DUP1 = Opcode(0x80, pushed_stack_items=1, min_stack_height=1) """ DUP1(value) = value, value ---- Description ---- Duplicate 1st stack item Inputs ---- - value: value to duplicate Outputs ---- - value: duplicated value - value: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#80](https://www.evm.codes/#80) """ DUP2 = Opcode(0x81, pushed_stack_items=1, min_stack_height=2) """ DUP2(v1, v2) = v2, v1, v2 ---- Description ---- Duplicate 2nd stack item Inputs ---- - v1: ignored value - v2: value to duplicate Outputs ---- - v2: duplicated value - v1: ignored value - v2: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#81](https://www.evm.codes/#81) """ DUP3 = Opcode(0x82, pushed_stack_items=1, min_stack_height=3) """ DUP3(v1, v2, v3) = v3, v1, v2, v3 ---- Description ---- Duplicate 3rd stack item Inputs ---- - v1: ignored value - v2: ignored value - v3: value to duplicate Outputs ---- - v3: duplicated value - v1: ignored value - v2: ignored value - v3: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#82](https://www.evm.codes/#82) """ DUP4 = Opcode(0x83, pushed_stack_items=1, min_stack_height=4) """ DUP4(v1, v2, v3, v4) = v4, v1, v2, v3, v4 ---- Description ---- Duplicate 4th stack item Inputs ---- - v1: ignored value - v2: ignored value - v3: ignored value - v4: value to duplicate Outputs ---- - v4: duplicated value - v1: ignored value - v2: ignored value - v3: ignored value - v4: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#83](https://www.evm.codes/#83) """ DUP5 = Opcode(0x84, pushed_stack_items=1, min_stack_height=5) """ DUP5(v1, v2, v3, v4, v5) = v5, v1, v2, v3, v4, v5 ---- Description ---- Duplicate 5th stack item Inputs ---- - v1: ignored value - v2: ignored value - v3: ignored value - v4: ignored value - v5: value to duplicate Outputs ---- - v5: duplicated value - v1: ignored value - v2: ignored value - v3: ignored value - v4: ignored value - v5: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#84](https://www.evm.codes/#84) """ DUP6 = Opcode(0x85, pushed_stack_items=1, min_stack_height=6) """ DUP6(v1, v2, ..., v5, v6) = v6, v1, v2, ..., v5, v6 ---- Description ---- Duplicate 6th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v5: ignored value - v6: value to duplicate Outputs ---- - v6: duplicated value - v1: ignored value - v2: ignored value - ... - v5: ignored value - v6: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#85](https://www.evm.codes/#85) """ DUP7 = Opcode(0x86, pushed_stack_items=1, min_stack_height=7) """ DUP7(v1, v2, ..., v6, v7) = v7, v1, v2, ..., v6, v7 ---- Description ---- Duplicate 7th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v6: ignored value - v7: value to duplicate Outputs ---- - v7: duplicated value - v1: ignored value - v2: ignored value - ... - v6: ignored value - v7: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#86](https://www.evm.codes/#86) """ DUP8 = Opcode(0x87, pushed_stack_items=1, min_stack_height=8) """ DUP8(v1, v2, ..., v7, v8) = v8, v1, v2, ..., v7, v8 ---- Description ---- Duplicate 8th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v7: ignored value - v8: value to duplicate Outputs ---- - v8: duplicated value - v1: ignored value - v2: ignored value - ... - v7: ignored value - v8: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#87](https://www.evm.codes/#87) """ DUP9 = Opcode(0x88, pushed_stack_items=1, min_stack_height=9) """ DUP9(v1, v2, ..., v8, v9) = v9, v1, v2, ..., v8, v9 ---- Description ---- Duplicate 9th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v8: ignored value - v9: value to duplicate Outputs ---- - v9: duplicated value - v1: ignored value - v2: ignored value - ... - v8: ignored value - v9: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#88](https://www.evm.codes/#88) """ DUP10 = Opcode(0x89, pushed_stack_items=1, min_stack_height=10) """ DUP10(v1, v2, ..., v9, v10) = v10, v1, v2, ..., v9, v10 ---- Description ---- Duplicate 10th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v9: ignored value - v10: value to duplicate Outputs ---- - v10: duplicated value - v1: ignored value - v2: ignored value - ... - v9: ignored value - v10: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#89](https://www.evm.codes/#89) """ DUP11 = Opcode(0x8A, pushed_stack_items=1, min_stack_height=11) """ DUP11(v1, v2, ..., v10, v11) = v11, v1, v2, ..., v10, v11 ---- Description ---- Duplicate 11th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v10: ignored value - v11: value to duplicate Outputs ---- - v11: duplicated value - v1: ignored value - v2: ignored value - ... - v10: ignored value - v11: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#8A](https://www.evm.codes/#8A) """ DUP12 = Opcode(0x8B, pushed_stack_items=1, min_stack_height=12) """ DUP12(v1, v2, ..., v11, v12) = v12, v1, v2, ..., v11, v12 ---- Description ---- Duplicate 12th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v11: ignored value - v12: value to duplicate Outputs ---- - v12: duplicated value - v1: ignored value - v2: ignored value - ... - v11: ignored value - v12: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#8B](https://www.evm.codes/#8B) """ DUP13 = Opcode(0x8C, pushed_stack_items=1, min_stack_height=13) """ DUP13(v1, v2, ..., v12, v13) = v13, v1, v2, ..., v12, v13 ---- Description ---- Duplicate 13th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v12: ignored value - v13: value to duplicate Outputs ---- - v13: duplicated value - v1: ignored value - v2: ignored value - ... - v12: ignored value - v13: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#8C](https://www.evm.codes/#8C) """ DUP14 = Opcode(0x8D, pushed_stack_items=1, min_stack_height=14) """ DUP14(v1, v2, ..., v13, v14) = v14, v1, v2, ..., v13, v14 ---- Description ---- Duplicate 14th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v13: ignored value - v14: value to duplicate Outputs ---- - v14: duplicated value - v1: ignored value - v2: ignored value - ... - v13: ignored value - v14: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#8D](https://www.evm.codes/#8D) """ DUP15 = Opcode(0x8E, pushed_stack_items=1, min_stack_height=15) """ DUP15(v1, v2, ..., v14, v15) = v15, v1, v2, ..., v14, v15 ---- Description ---- Duplicate 15th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v14: ignored value - v15: value to duplicate Outputs ---- - v15: duplicated value - v1: ignored value - v2: ignored value - ... - v14: ignored value - v15: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#8E](https://www.evm.codes/#8E) """ DUP16 = Opcode(0x8F, pushed_stack_items=1, min_stack_height=16) """ DUP16(v1, v2, ..., v15, v16) = v16, v1, v2, ..., v15, v16 ---- Description ---- Duplicate 16th stack item Inputs ---- - v1: ignored value - v2: ignored value - ... - v15: ignored value - v16: value to duplicate Outputs ---- - v16: duplicated value - v1: ignored value - v2: ignored value - ... - v15: ignored value - v16: original value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#8F](https://www.evm.codes/#8F) """ SWAP1 = Opcode(0x90, min_stack_height=2) """ SWAP1(v1, v2) = v2, v1 ---- Description ---- Exchange the top stack item with the second stack item. Inputs ---- - v1: value to swap - v2: value to swap Outputs ---- - v1: swapped value - v2: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#90](https://www.evm.codes/#90) """ SWAP2 = Opcode(0x91, min_stack_height=3) """ SWAP2(v1, v2, v3) = v3, v2, v1 ---- Description ---- Exchange 1st and 3rd stack items Inputs ---- - v1: value to swap - v2: ignored value - v3: value to swap Outputs ---- - v3: swapped value - v2: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#91](https://www.evm.codes/#91) """ SWAP3 = Opcode(0x92, min_stack_height=4) """ SWAP3(v1, v2, v3, v4) = v4, v2, v3, v1 ---- Description ---- Exchange 1st and 4th stack items Inputs ---- - v1: value to swap - v2: ignored value - v3: ignored value - v4: value to swap Outputs ---- - v4: swapped value - v2: ignored value - v3: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#92](https://www.evm.codes/#92) """ SWAP4 = Opcode(0x93, min_stack_height=5) """ SWAP4(v1, v2, ..., v4, v5) = v5, v2, ..., v4, v1 ---- Description ---- Exchange 1st and 5th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v4: ignored value - v5: value to swap Outputs ---- - v5: swapped value - v2: ignored value - ... - v4: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#93](https://www.evm.codes/#93) """ SWAP5 = Opcode(0x94, min_stack_height=6) """ SWAP5(v1, v2, ..., v5, v6) = v6, v2, ..., v5, v1 ---- Description ---- Exchange 1st and 6th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v5: ignored value - v6: value to swap Outputs ---- - v6: swapped value - v2: ignored value - ... - v5: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#94](https://www.evm.codes/#94) """ SWAP6 = Opcode(0x95, min_stack_height=7) """ SWAP6(v1, v2, ..., v6, v7) = v7, v2, ..., v6, v1 ---- Description ---- Exchange 1st and 7th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v6: ignored value - v7: value to swap Outputs ---- - v7: swapped value - v2: ignored value - ... - v6: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#95](https://www.evm.codes/#95) """ SWAP7 = Opcode(0x96, min_stack_height=8) """ SWAP7(v1, v2, ..., v7, v8) = v8, v2, ..., v7, v1 ---- Description ---- Exchange 1st and 8th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v7: ignored value - v8: value to swap Outputs ---- - v8: swapped value - v2: ignored value - ... - v7: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#96](https://www.evm.codes/#96) """ SWAP8 = Opcode(0x97, min_stack_height=9) """ SWAP8(v1, v2, ..., v8, v9) = v9, v2, ..., v8, v1 ---- Description ---- Exchange 1st and 9th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v8: ignored value - v9: value to swap Outputs ---- - v9: swapped value - v2: ignored value - ... - v8: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#97](https://www.evm.codes/#97) """ SWAP9 = Opcode(0x98, min_stack_height=10) """ SWAP9(v1, v2, ..., v9, v10) = v10, v2, ..., v9, v1 ---- Description ---- Exchange 1st and 10th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v9: ignored value - v10: value to swap Outputs ---- - v10: swapped value - v2: ignored value - ... - v9: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#98](https://www.evm.codes/#98) """ SWAP10 = Opcode(0x99, min_stack_height=11) """ SWAP10(v1, v2, ..., v10, v11) = v11, v2, ..., v10, v1 ---- Description ---- Exchange 1st and 11th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v10: ignored value - v11: value to swap Outputs ---- - v11: swapped value - v2: ignored value - ... - v10: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#99](https://www.evm.codes/#99) """ SWAP11 = Opcode(0x9A, min_stack_height=12) """ SWAP11(v1, v2, ..., v11, v12) = v12, v2, ..., v11, v1 ---- Description ---- Exchange 1st and 12th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v11: ignored value - v12: value to swap Outputs ---- - v12: swapped value - v2: ignored value - ... - v11: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#9A](https://www.evm.codes/#9A) """ SWAP12 = Opcode(0x9B, min_stack_height=13) """ SWAP12(v1, v2, ..., v12, v13) = v13, v2, ..., v12, v1 ---- Description ---- Exchange 1st and 13th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v12: ignored value - v13: value to swap Outputs ---- - v13: swapped value - v2: ignored value - ... - v12: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#9B](https://www.evm.codes/#9B) """ SWAP13 = Opcode(0x9C, min_stack_height=14) """ SWAP13(v1, v2, ..., v13, v14) = v14, v2, ..., v13, v1 ---- Description ---- Exchange 1st and 14th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v13: ignored value - v14: value to swap Outputs ---- - v14: swapped value - v2: ignored value - ... - v13: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#9C](https://www.evm.codes/#9C) """ SWAP14 = Opcode(0x9D, min_stack_height=15) """ SWAP14(v1, v2, ..., v14, v15) = v15, v2, ..., v14, v1 ---- Description ---- Exchange 1st and 15th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v14: ignored value - v15: value to swap Outputs ---- - v15: swapped value - v2: ignored value - ... - v14: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#9D](https://www.evm.codes/#9D) """ SWAP15 = Opcode(0x9E, min_stack_height=16) """ SWAP15(v1, v2, ..., v15, v16) = v16, v2, ..., v15, v1 ---- Description ---- Exchange 1st and 16th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v15: ignored value - v16: value to swap Outputs ---- - v16: swapped value - v2: ignored value - ... - v15: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#9E](https://www.evm.codes/#9E) """ SWAP16 = Opcode(0x9F, min_stack_height=17) """ SWAP16(v1, v2, ..., v16, v17) = v17, v2, ..., v16, v1 ---- Description ---- Exchange 1st and 17th stack items Inputs ---- - v1: value to swap - v2: ignored value - ... - v16: ignored value - v17: value to swap Outputs ---- - v17: swapped value - v2: ignored value - ... - v16: ignored value - v1: swapped value Fork ---- Frontier Gas ---- 3 Source: [evm.codes/#9F](https://www.evm.codes/#9F) """ LOG0 = Opcode(0xA0, popped_stack_items=2, kwargs=["offset", "size"]) """ LOG0(offset, size) ---- Description ---- Append log record with no topics Inputs ---- - offset: byte offset in the memory in bytes - size: byte size to copy Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 375 - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost Source: [evm.codes/#A0](https://www.evm.codes/#A0) """ LOG1 = Opcode(0xA1, popped_stack_items=3, kwargs=["offset", "size", "topic_1"]) """ LOG1(offset, size, topic_1) ---- Description ---- Append log record with one topic Inputs ---- - offset: byte offset in the memory in bytes - size: byte size to copy - topic_1: 32-byte value Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 375 - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost Source: [evm.codes/#A1](https://www.evm.codes/#A1) """ LOG2 = Opcode(0xA2, popped_stack_items=4, kwargs=["offset", "size", "topic_1", "topic_2"]) """ LOG2(offset, size, topic_1, topic_2) ---- Description ---- Append log record with two topics Inputs ---- - offset: byte offset in the memory in bytes - size: byte size to copy - topic_1: 32-byte value - topic_2: 32-byte value Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 375 - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost Source: [evm.codes/#A2](https://www.evm.codes/#A2) """ LOG3 = Opcode( 0xA3, popped_stack_items=5, kwargs=["offset", "size", "topic_1", "topic_2", "topic_3"] ) """ LOG3(offset, size, topic_1, topic_2, topic_3) ---- Description ---- Append log record with three topics Inputs ---- - offset: byte offset in the memory in bytes - size: byte size to copy - topic_1: 32-byte value - topic_2: 32-byte value - topic_3: 32-byte value Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 375 - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost Source: [evm.codes/#A3](https://www.evm.codes/#A3) """ LOG4 = Opcode( 0xA4, popped_stack_items=6, kwargs=["offset", "size", "topic_1", "topic_2", "topic_3", "topic_4"], ) """ LOG4(offset, size, topic_1, topic_2, topic_3, topic_4) ---- Description ---- Append log record with four topics Inputs ---- - offset: byte offset in the memory in bytes - size: byte size to copy - topic_1: 32-byte value - topic_2: 32-byte value - topic_3: 32-byte value - topic_4: 32-byte value Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 375 - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost Source: [evm.codes/#A4](https://www.evm.codes/#A4) """ RJUMP = Opcode(0xE0, data_portion_length=2) """ !!! Note: This opcode is under development RJUMP() ---- Description ---- Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/ eip-4200) """ DATALOAD = Opcode(0xD0, popped_stack_items=1, pushed_stack_items=1, kwargs=["offset"]) """ !!! Note: This opcode is under development DATALOAD(offset) ---- Description ---- Reads 32 bytes of data at offset onto the stack Inputs ---- - offset: offset within the data section to start copying Outputs ---- none Fork ---- EOF Fork Gas ---- 4 Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/ eip-7480) """ DATALOADN = Opcode(0xD1, pushed_stack_items=1, data_portion_length=2) """ !!! Note: This opcode is under development DATALOADN() ---- Description ---- Reads 32 bytes of data at offset onto the stack Immediates ---- 2 bytes forming a UInt16, which is the offset into the data section. Inputs ---- none Outputs ---- none Fork ---- EOF Fork Gas ---- 3 Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/ eip-7480) """ DATASIZE = Opcode(0xD2, pushed_stack_items=1) """ !!! Note: This opcode is under development DATASIZE() ---- Description ---- Returns the size of the data section Inputs ---- Outputs ---- The size of the data section. If there is no data section, returns 0. Fork ---- EOF Fork Gas ---- 2 Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/ eip-7480) """ DATACOPY = Opcode(0xD3, popped_stack_items=3, kwargs=["dest_offset", "offset", "size"]) """ !!! Note: This opcode is under development DATACOPY(dest_offset, offset, size) ---- Description ---- Copies data from the data section into call frame memory Inputs ---- - dest_offset: The offset within the memory section to start copying to - offset: The offset within the data section to start copying from - size: The number of bytes to copy Outputs ---- none Fork ---- EOF Fork Gas ---- - minimum_word_size = (size + 31) / 32 - static_gas = 3 - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/ eip-7480) """ RJUMPI = Opcode(0xE1, popped_stack_items=1, data_portion_length=2) """ !!! Note: This opcode is under development RJUMPI() ---- Description ---- Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/ eip-4200) """ RJUMPV = Opcode( 0xE2, popped_stack_items=1, data_portion_formatter=_rjumpv_encoder, ) """ !!! Note: This opcode is under development RJUMPV() ---- Description ---- Relative jump with variable offset. When calling this opcode to generate bytecode, the first argument is used to format the data portion of the opcode, and it can be either of two types: - A bytes type, and in this instance the bytes are used verbatim as the data portion. - An integer iterable, list or tuple or any other iterable, where each element is a jump offset. Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/ eip-4200) """ CALLF = Opcode(0xE3, data_portion_length=2, unchecked_stack=True) """ !!! Note: This opcode is under development CALLF() ---- Description ---- - deduct 5 gas - read uint16 operand idx - if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in an exceptional halt - if 1024 <= len(return_stack), execution results in an exceptional halt - push new element to return_stack (current_code_idx, pc+3) - update current_code_idx to idx and set pc to 0 Inputs ---- Any: The inputs are not checked because we cannot know how many inputs the callee function/section requires Outputs ---- Any: The outputs are variable because we cannot know how many outputs the callee function/section produces Fork ---- EOF Fork Gas ---- 5 Source: [ipsilon/eof/blob/main/spec/eof.md](https://github.com/ipsilon/eof/blob/ main/spec/eof.md) """ RETF = Opcode(0xE4, terminating=True) """ !!! Note: This opcode is under development RETF() ---- Description ---- Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- 3 """ JUMPF = Opcode(0xE5, data_portion_length=2, terminating=True, unchecked_stack=True) """ !!! Note: This opcode is under development JUMPF() ---- Description ---- - deduct 5 gas - read uint16 operand idx - if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in an exceptional halt - set current_code_idx to idx - set pc = 0 Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- 5 """ DUPN = Opcode( 0xE6, pushed_stack_items=1, data_portion_length=1, stack_properties_modifier=_dupn_stack_properties_modifier, ) """ !!! Note: This opcode is under development DUPN() ---- Description ---- - deduct 3 gas - read uint8 operand imm - n = imm + 1 - n‘th (1-based) stack item is duplicated at the top of the stack - Stack validation: stack_height >= n Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- """ SWAPN = Opcode( 0xE7, data_portion_length=1, stack_properties_modifier=_swapn_stack_properties_modifier ) """ !!! Note: This opcode is under development SWAPN() ---- Description ---- - deduct 3 gas - read uint8 operand imm - n = imm + 1 - n + 1th stack item is swapped with the top stack item (1-based). - Stack validation: stack_height >= n + 1 Inputs ---- Outputs ---- Fork ---- EOF Fork Gas ---- """ EXCHANGE = Opcode( 0xE8, data_portion_length=1, data_portion_formatter=_exchange_encoder, stack_properties_modifier=_exchange_stack_properties_modifier, ) """ !!! Note: This opcode is under development EXCHANGE[x, y] ---- Description ---- Exchanges two stack positions. Two nybbles, n is high 4 bits + 1, then m is 4 low bits + 1. Exchanges the n+1'th item with the n + m + 1 item. Inputs x and y when the opcode is used as `EXCHANGE[x, y]`, are equal to: - x = n + 1 - y = n + m + 1 Which each equals to 1-based stack positions swapped. Inputs ---- n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate, Outputs ---- n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate, Fork ---- EOF_FORK Gas ---- 3 """ EOFCREATE = Opcode( 0xEC, popped_stack_items=4, pushed_stack_items=1, data_portion_length=1, kwargs=["salt", "input_offset", "input_size", "value"], ) """ !!! Note: This opcode is under development EOFCREATE[initcontainer_index] (salt, input_offset, input_size, value) ---- Description ---- Inputs ---- Outputs ---- Fork ---- Gas ---- """ TXCREATE = Opcode( 0xED, popped_stack_items=5, pushed_stack_items=1, kwargs=["tx_initcode_hash", "salt", "input_offset", "input_size", "value"], ) """ !!! Note: This opcode is under development TXCREATE (tx_initcode_hash, salt, input_offset, input_size, value) ---- Description ---- Inputs ---- Outputs ---- Fork ---- Gas ---- """ RETURNCODE = Opcode( 0xEE, popped_stack_items=2, data_portion_length=1, terminating=True, kwargs=["auxdata_offset", "auxdata_size"], ) """ !!! Note: This opcode is under development RETURNCODE() ---- Description ---- Inputs ---- Outputs ---- Fork ---- Gas ---- """ CREATE = Opcode( 0xF0, popped_stack_items=3, pushed_stack_items=1, kwargs=["value", "offset", "size"] ) """ CREATE(value, offset, size) = address ---- Description ---- Create a new contract with the given code Inputs ---- - value: value in wei to send to the new account - offset: byte offset in the memory in bytes, the initialization code for the new account - size: byte size to copy (size of the initialization code) Outputs ---- - address: the address of the deployed contract, 0 if the deployment failed Fork ---- Frontier Gas ---- ``` minimum_word_size = (size + 31) / 32 init_code_cost = 2 * minimum_word_size code_deposit_cost = 200 * deployed_code_size static_gas = 32000 dynamic_gas = init_code_cost + memory_expansion_cost + deployment_code_execution_cost + code_deposit_cost ``` Source: [evm.codes/#F0](https://www.evm.codes/#F0) """ CALL = Opcode( 0xF1, popped_stack_items=7, pushed_stack_items=1, kwargs=["gas", "address", "value", "args_offset", "args_size", "ret_offset", "ret_size"], kwargs_defaults={"gas": GAS}, ) """ CALL(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success ---- Description ---- Message-call into an account Inputs ---- - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one - address: the account which context to execute - value: value in wei to send to the account - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context - ret_size: byte size to copy (size of the return data) Outputs ---- - success: return 0 if the sub context reverted, 1 otherwise Fork ---- Frontier Gas ---- ``` static_gas = 0 dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost + positive_value_cost + value_to_empty_account_cost ``` Source: [evm.codes/#F1](https://www.evm.codes/#F1) """ CALLCODE = Opcode( 0xF2, popped_stack_items=7, pushed_stack_items=1, kwargs=["gas", "address", "value", "args_offset", "args_size", "ret_offset", "ret_size"], kwargs_defaults={"gas": GAS}, ) """ CALLCODE(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success ---- Description ---- Message-call into this account with an alternative account's code. Executes code starting at the address to which the call is made. Inputs ---- - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one - address: the account which code to execute - value: value in wei to send to the account - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context - ret_size: byte size to copy (size of the return data) Outputs ---- - success: return 0 if the sub context reverted, 1 otherwise Fork ---- Frontier Gas ---- ``` static_gas = 0 dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost + positive_value_cost ``` Source: [evm.codes/#F2](https://www.evm.codes/#F2) """ RETURN = Opcode(0xF3, popped_stack_items=2, kwargs=["offset", "size"], terminating=True) """ RETURN(offset, size) ---- Description ---- Halt execution returning output data Inputs ---- - offset: byte offset in the memory in bytes, to copy what will be the return data of this context - size: byte size to copy (size of the return data) Outputs ---- - None Fork ---- Frontier Gas ---- - static_gas = 0 - dynamic_gas = memory_expansion_cost Source: [evm.codes/#F3](https://www.evm.codes/#F3) """ DELEGATECALL = Opcode( 0xF4, popped_stack_items=6, pushed_stack_items=1, kwargs=["gas", "address", "args_offset", "args_size", "ret_offset", "ret_size"], kwargs_defaults={"gas": GAS}, ) """ DELEGATECALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success ---- Description ---- Message-call into this account with an alternative account's code, but persisting the current values for sender and value Inputs ---- - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one - address: the account which code to execute - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context - ret_size: byte size to copy (size of the return data) Outputs ---- - success: return 0 if the sub context reverted, 1 otherwise Fork ---- Byzantium Gas ---- - static_gas = 0 - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost Source: [evm.codes/#F4](https://www.evm.codes/#F4) """ CREATE2 = Opcode( 0xF5, popped_stack_items=4, pushed_stack_items=1, kwargs=["value", "offset", "size", "salt"], ) """ CREATE2(value, offset, size, salt) = address ---- Description ---- Creates a new contract Inputs ---- - value: value in wei to send to the new account - offset: byte offset in the memory in bytes, the initialization code of the new account - size: byte size to copy (size of the initialization code) - salt: 32-byte value used to create the new account at a deterministic address Outputs ---- - address: the address of the deployed contract, 0 if the deployment failed Fork ---- Constantinople Gas ---- ``` minimum_word_size = (size + 31) / 32 init_code_cost = 2 * minimum_word_size hash_cost = 6 * minimum_word_size code_deposit_cost = 200 * deployed_code_size static_gas = 32000 dynamic_gas = init_code_cost + hash_cost + memory_expansion_cost + deployment_code_execution_cost + code_deposit_cost ``` Source: [evm.codes/#F5](https://www.evm.codes/#F5) """ EXTCALL = Opcode( 0xF8, popped_stack_items=4, pushed_stack_items=1, kwargs=["address", "args_offset", "args_size", "value"], ) """ EXTCALL(address, args_offset, args_size, value) = address ---- Description ---- Message-call into an account Inputs ---- - address: the account which context to execute - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) - value: value in wei to send to the account Outputs ---- - success: - `0` if the call was successful. - `1` if the call has reverted (also can be pushed earlier in a light failure scenario). - `2` if the call has failed. Fork ---- Prague Gas ---- ``` static_gas = 0 dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost + positive_value_cost + value_to_empty_account_cost ``` Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069) """ EXTDELEGATECALL = Opcode( 0xF9, popped_stack_items=3, pushed_stack_items=1, kwargs=["address", "args_offset", "args_size"], ) """ EXTDELEGATECALL(address, args_offset, args_size) = address ---- Description ---- Message-call into this account with an alternative account's code, but persisting the current values for sender and value Inputs ---- - address: the account which context to execute - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) Outputs ---- - success: - `0` if the call was successful. - `1` if the call has reverted (also can be pushed earlier in a light failure scenario). - `2` if the call has failed. Fork ---- Prague Gas ---- - static_gas = 0 - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069) """ STATICCALL = Opcode( 0xFA, popped_stack_items=6, pushed_stack_items=1, kwargs=["gas", "address", "args_offset", "args_size", "ret_offset", "ret_size"], kwargs_defaults={"gas": GAS}, ) """ STATICCALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success ---- Description ---- Static message-call into an account Inputs ---- - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one - address: the account which context to execute - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context - ret_size: byte size to copy (size of the return data) Outputs ---- - success: return 0 if the sub context reverted, 1 otherwise Fork ---- Byzantium Gas ---- - static_gas = 0 - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost Source: [evm.codes/#FA](https://www.evm.codes/#FA) """ EXTSTATICCALL = Opcode( 0xFB, popped_stack_items=3, pushed_stack_items=1, kwargs=["address", "args_offset", "args_size"], ) """ EXTSTATICCALL(address, args_offset, args_size) = address ---- Description ---- Static message-call into an account Inputs ---- - address: the account which context to execute - args_offset: byte offset in the memory in bytes, the calldata of the sub context - args_size: byte size to copy (size of the calldata) Outputs ---- - success: - `0` if the call was successful. - `1` if the call has reverted (also can be pushed earlier in a light failure scenario). - `2` if the call has failed. Fork ---- Prague Gas ---- - static_gas = 0 - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069) """ RETURNDATALOAD = Opcode(0xF7, popped_stack_items=1, pushed_stack_items=1, kwargs=["offset"]) """ RETURNDATALOAD(offset) ---- Description ---- Copy 32 bytes from returndata at offset onto the stack Inputs ---- - offset: byte offset in the return data from the last executed sub context to copy Fork ---- EOF Gas ---- 3 """ REVERT = Opcode(0xFD, popped_stack_items=2, kwargs=["offset", "size"], terminating=True) """ REVERT(offset, size) ---- Description ---- Halt execution reverting state changes but returning data and remaining gas Inputs ---- - offset: byte offset in the memory in bytes. The return data of the calling context - size: byte size to copy (size of the return data) Fork ---- Byzantium Gas ---- static_gas = 0 dynamic_gas = memory_expansion_cost Source: [evm.codes/#FD](https://www.evm.codes/#FD) """ INVALID = Opcode(0xFE, terminating=True) """ INVALID() ---- Description ---- Designated invalid instruction Inputs ---- None Outputs ---- None Fork ---- Frontier Gas ---- All the remaining gas in this context is consumed Source: [evm.codes/#FE](https://www.evm.codes/#FE) """ SELFDESTRUCT = Opcode(0xFF, popped_stack_items=1, kwargs=["address"]) """ SELFDESTRUCT(address) ---- Description ---- Halt execution and register the account for later deletion Inputs ---- - address: account to send the current balance to Fork ---- Frontier Gas ---- 5000 Source: [evm.codes/#FF](https://www.evm.codes/#FF) """ _push_opcodes_byte_list: List[Opcode] = [ Opcodes.PUSH1, Opcodes.PUSH2, Opcodes.PUSH3, Opcodes.PUSH4, Opcodes.PUSH5, Opcodes.PUSH6, Opcodes.PUSH7, Opcodes.PUSH8, Opcodes.PUSH9, Opcodes.PUSH10, Opcodes.PUSH11, Opcodes.PUSH12, Opcodes.PUSH13, Opcodes.PUSH14, Opcodes.PUSH15, Opcodes.PUSH16, Opcodes.PUSH17, Opcodes.PUSH18, Opcodes.PUSH19, Opcodes.PUSH20, Opcodes.PUSH21, Opcodes.PUSH22, Opcodes.PUSH23, Opcodes.PUSH24, Opcodes.PUSH25, Opcodes.PUSH26, Opcodes.PUSH27, Opcodes.PUSH28, Opcodes.PUSH29, Opcodes.PUSH30, Opcodes.PUSH31, Opcodes.PUSH32, ] def _mstore_operation(data: OpcodeCallArg = b"", offset: OpcodeCallArg = 0) -> Bytecode: """ Generate the bytecode that stores an arbitrary amount of data in memory. """ assert isinstance(offset, int) if isinstance(data, int): data = data.to_bytes(32, "big") data = to_bytes(data) # type: ignore bytecode = Bytecode() for i in range(0, len(data), 32): chunk = data[i : i + 32] if len(chunk) == 32: bytecode += Opcodes.MSTORE(offset, chunk) else: # We need to MLOAD the existing data at the offset and then # do a bitwise OR with the new data to store it in memory. bytecode += Opcodes.MLOAD(offset) # Create a mask to zero out the leftmost bytes of # the existing data. mask_size = 32 - len(chunk) bytecode += _push_opcodes_byte_list[mask_size - 1][-1] bytecode += Opcodes.AND bytecode += Opcodes.PUSH32[chunk.ljust(32, b"\x00")] bytecode += Opcodes.OR bytecode += _stack_argument_to_bytecode(offset) bytecode += Opcodes.MSTORE offset += len(chunk) return bytecode class Macros(Macro, Enum): """Enum containing all macros.""" OOG = Macro(Opcodes.SHA3(0, 100000000000)) """ OOG() ---- Halt execution by consuming all available gas. Inputs ---- - None. Any input arguments are ignored. Outputs ---- - None Fork ---- Frontier Gas ---- `SHA3(0, 100000000000)` results in 19073514453125027 gas used and an OOG exception. Note: If a value > `100000000000` is used as second argument, the resulting geth trace reports gas `30` and an OOG exception. `SHA3(0, SUB(0, 1))` causes a gas > u64 exception and an OOG exception. Bytecode ---- SHA3(0, 100000000000) """ MSTORE = Macro(lambda_operation=_mstore_operation) """ MSTORE(data, offset) ---- Place data of arbitrary length into memory at a given offset. Inputs ---- - data: The data to store in memory. Can be an integer or bytes. - offset: The offset in memory to store the data. Outputs ---- - None """ class UndefinedOpcodes(Opcode, Enum): """Enum containing all unknown opcodes (88 at the moment).""" OPCODE_0C = Opcode(0x0C) OPCODE_0D = Opcode(0x0D) OPCODE_0E = Opcode(0x0E) OPCODE_0F = Opcode(0x0F) OPCODE_1E = Opcode(0x1E) OPCODE_1F = Opcode(0x1F) OPCODE_21 = Opcode(0x21) OPCODE_22 = Opcode(0x22) OPCODE_23 = Opcode(0x23) OPCODE_24 = Opcode(0x24) OPCODE_25 = Opcode(0x25) OPCODE_26 = Opcode(0x26) OPCODE_27 = Opcode(0x27) OPCODE_28 = Opcode(0x28) OPCODE_29 = Opcode(0x29) OPCODE_2A = Opcode(0x2A) OPCODE_2B = Opcode(0x2B) OPCODE_2C = Opcode(0x2C) OPCODE_2D = Opcode(0x2D) OPCODE_2E = Opcode(0x2E) OPCODE_2F = Opcode(0x2F) OPCODE_4B = Opcode(0x4B) OPCODE_4C = Opcode(0x4C) OPCODE_4D = Opcode(0x4D) OPCODE_4E = Opcode(0x4E) OPCODE_4F = Opcode(0x4F) OPCODE_A5 = Opcode(0xA5) OPCODE_A6 = Opcode(0xA6) OPCODE_A7 = Opcode(0xA7) OPCODE_A8 = Opcode(0xA8) OPCODE_A9 = Opcode(0xA9) OPCODE_AA = Opcode(0xAA) OPCODE_AB = Opcode(0xAB) OPCODE_AC = Opcode(0xAC) OPCODE_AD = Opcode(0xAD) OPCODE_AE = Opcode(0xAE) OPCODE_AF = Opcode(0xAF) OPCODE_B0 = Opcode(0xB0) OPCODE_B1 = Opcode(0xB1) OPCODE_B2 = Opcode(0xB2) OPCODE_B3 = Opcode(0xB3) OPCODE_B4 = Opcode(0xB4) OPCODE_B5 = Opcode(0xB5) OPCODE_B6 = Opcode(0xB6) OPCODE_B7 = Opcode(0xB7) OPCODE_B8 = Opcode(0xB8) OPCODE_B9 = Opcode(0xB9) OPCODE_BA = Opcode(0xBA) OPCODE_BB = Opcode(0xBB) OPCODE_BC = Opcode(0xBC) OPCODE_BD = Opcode(0xBD) OPCODE_BE = Opcode(0xBE) OPCODE_BF = Opcode(0xBF) OPCODE_C0 = Opcode(0xC0) OPCODE_C1 = Opcode(0xC1) OPCODE_C2 = Opcode(0xC2) OPCODE_C3 = Opcode(0xC3) OPCODE_C4 = Opcode(0xC4) OPCODE_C5 = Opcode(0xC5) OPCODE_C6 = Opcode(0xC6) OPCODE_C7 = Opcode(0xC7) OPCODE_C8 = Opcode(0xC8) OPCODE_C9 = Opcode(0xC9) OPCODE_CA = Opcode(0xCA) OPCODE_CB = Opcode(0xCB) OPCODE_CC = Opcode(0xCC) OPCODE_CD = Opcode(0xCD) OPCODE_CE = Opcode(0xCE) OPCODE_CF = Opcode(0xCF) OPCODE_D4 = Opcode(0xD4) OPCODE_D5 = Opcode(0xD5) OPCODE_D6 = Opcode(0xD6) OPCODE_D7 = Opcode(0xD7) OPCODE_D8 = Opcode(0xD8) OPCODE_D9 = Opcode(0xD9) OPCODE_DA = Opcode(0xDA) OPCODE_DB = Opcode(0xDB) OPCODE_DC = Opcode(0xDC) OPCODE_DD = Opcode(0xDD) OPCODE_DE = Opcode(0xDE) OPCODE_DF = Opcode(0xDF) OPCODE_E9 = Opcode(0xE9) OPCODE_EA = Opcode(0xEA) OPCODE_EB = Opcode(0xEB) OPCODE_EF = Opcode(0xEF) OPCODE_F6 = Opcode(0xF6) OPCODE_FC = Opcode(0xFC) ================================================ FILE: src/ethereum_test_vm/py.typed ================================================ ================================================ FILE: src/ethereum_test_vm/tests/__init__.py ================================================ """Tests for the ethereum_test_vm package.""" ================================================ FILE: src/ethereum_test_vm/tests/test_vm.py ================================================ """Test suite for `ethereum_test_vm` module.""" import pytest from ethereum_test_base_types import Address from ..opcodes import Bytecode from ..opcodes import Macros as Om from ..opcodes import Opcodes as Op @pytest.mark.parametrize( "opcodes,expected", [ pytest.param(Op.PUSH1(0x01), b"\x60\x01", id="PUSH1(0x01)"), pytest.param(Op.PUSH1[0x01], b"\x60\x01", id="PUSH1[0x01]"), pytest.param(Op.PUSH1("0x01"), b"\x60\x01", id="PUSH1('0x01')"), pytest.param(Op.PUSH1["0x01"], b"\x60\x01", id="PUSH1['0x01']"), pytest.param(Op.PUSH1(0xFF), b"\x60\xff", id="PUSH1(0xFF)"), pytest.param(Op.PUSH1(-1), b"\x60\xff", id="PUSH1(-1)"), pytest.param(Op.PUSH1[-1], b"\x60\xff", id="PUSH1[-1]"), pytest.param(Op.PUSH1(-2), b"\x60\xfe", id="PUSH1(-2)"), pytest.param(Op.PUSH20(0x01), b"\x73" + b"\x00" * 19 + b"\x01", id="PUSH20(0x01)"), pytest.param(Op.PUSH20[0x01], b"\x73" + b"\x00" * 19 + b"\x01", id="PUSH20[0x01]"), pytest.param(Op.PUSH32(0xFF), b"\x7f" + b"\x00" * 31 + b"\xff", id="PUSH32(0xFF)"), pytest.param(Op.PUSH32(-1), b"\x7f" + b"\xff" * 32, id="PUSH32(-1)"), pytest.param( sum(Op.PUSH1(i) for i in range(0x2)), b"\x60\x00\x60\x01", id="sum(PUSH1(i) for i in range(0x2))", ), pytest.param( sum(Op.PUSH1[i] for i in range(0x2)), b"\x60\x00\x60\x01", id="sum(PUSH1[i] for i in range(0x2))", ), pytest.param( Op.SSTORE( -1, Op.CALL( Op.GAS, Op.ADDRESS, Op.PUSH1(0x20), 0, 0, 0x20, 0x1234, ), ), bytes( [ 0x61, 0x12, 0x34, 0x60, 0x20, 0x60, 0x00, 0x60, 0x00, 0x60, 0x20, 0x30, 0x5A, 0xF1, 0x7F, ] + [0xFF] * 32 + [0x55] ), id="SSTORE(-1, CALL(GAS, ADDRESS, PUSH1(0x20), 0, 0, 0x20, 0x1234))", ), pytest.param( Op.CALL(Op.GAS, Op.PUSH20(0x1234), 0, 0, 0, 0, 32), b"\x60\x20\x60\x00\x60\x00\x60\x00\x60\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x12\x34\x5a\xf1", id="CALL(GAS, PUSH20(0x1234), 0, 0, 0, 0, 32)", ), pytest.param( Op.CALL(Op.GAS, Address(0x1234), 0, 0, 0, 0, 32), b"\x60\x20\x60\x00\x60\x00\x60\x00\x60\x00\x61\x12\x34\x5a\xf1", id="CALL(GAS, Address(0x1234), 0, 0, 0, 0, 32)", ), pytest.param(Op.ADD(1, 2), bytes([0x60, 0x02, 0x60, 0x01, 0x01]), id="ADD(1, 2)"), pytest.param( Op.ADD(Op.ADD(1, 2), 3), bytes([0x60, 0x03, 0x60, 0x02, 0x60, 0x01, 0x01, 0x01]), id="ADD(ADD(1, 2), 3)", ), pytest.param( Op.CALL(1, 123, 4, 5, 6, 7, 8), b"\x60\x08\x60\x07\x60\x06\x60\x05\x60\x04\x60\x7b\x60\x01\xf1", id="CALL(1, 123, 4, 5, 6, 7, 8)", ), pytest.param( Op.CALL(1, Address(0x0123), 4, 5, 6, 7, 8), b"\x60\x08\x60\x07\x60\x06\x60\x05\x60\x04\x61\x01\x23\x60\x01\xf1", id="CALL(1, Address(0x0123), 4, 5, 6, 7, 8)", ), pytest.param( Op.CALL(1, 0x0123, 4, 5, 6, 7, 8), b"\x60\x08\x60\x07\x60\x06\x60\x05\x60\x04\x61\x01\x23\x60\x01\xf1", id="CALL(1, 0x0123, 4, 5, 6, 7, 8)", ), pytest.param( Op.CALL(1, 123, 4, 5, 6, 7, 8), b"\x60\x08\x60\x07\x60\x06\x60\x05\x60\x04\x60\x7b\x60\x01\xf1", id="CALL(1, 123, 4, 5, 6, 7, 8)", ), pytest.param( Op.CREATE(1, Address(12), 4, 5, 6, 7, 8, unchecked=True), b"\x60\x08\x60\x07\x60\x06\x60\x05\x60\x04\x60\x0c\x60\x01\xf0", id="CREATE(1, Address(12), 4, 5, 6, 7, 8, unchecked=True)", ), pytest.param( Om.OOG(), bytes([0x64, 0x17, 0x48, 0x76, 0xE8, 0x00, 0x60, 0x00, 0x20]), id="OOG()", ), pytest.param( Op.RJUMPV[1, 2, 3](Op.ORIGIN), bytes( [ Op.ORIGIN.int(), Op.RJUMPV.int(), 0x02, # Data portion, defined by the [1, 2, 3] argument 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, ] ), id="RJUMPV[1, 2, 3](ORIGIN)", ), pytest.param( Op.RJUMPV[b"\x00"], bytes( [ Op.RJUMPV.int(), 0x00, ] ), id="RJUMPV[b'\\x00']", ), pytest.param( Op.RJUMPV[-1, -2, -3], bytes( [ Op.RJUMPV.int(), 0x02, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFD, ] ), id="RJUMPV[-1, -2, -3]", ), pytest.param( Op.RJUMPV[range(5)], # TODO: on Python 3.11+: Op.RJUMPV[*range(5)] bytes( [ Op.RJUMPV.int(), 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, ] ), id="RJUMPV[range(5)]", ), pytest.param( Op.RJUMPV[1, 2, 3](Op.ORIGIN) + Op.STOP, bytes( [ Op.ORIGIN.int(), Op.RJUMPV.int(), 0x02, # Data portion, defined by the [1, 2, 3] argument 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, Op.STOP.int(), ] ), id="RJUMPV[1, 2, 3](ORIGIN) + STOP", ), pytest.param( Op.STOP * 2, bytes( [ Op.STOP.int(), Op.STOP.int(), ] ), id="STOP * 2", ), pytest.param( Op.RJUMPV[0, 3, 6, 9], bytes.fromhex("e2030000000300060009"), id="RJUMPV[0, 3, 6, 9]" ), pytest.param(Op.RJUMPV[2, 0], bytes.fromhex("e20100020000"), id="RJUMPV[2, 0]"), pytest.param( Op.RJUMPV[b"\x02\x00\x02\xff\xff"], bytes.fromhex("e2020002ffff"), id="RJUMPV[b'\\x02\\x00\\x02\\xFF\\xFF']", ), pytest.param( Op.EXCHANGE[0x2 + 0x0, 0x3 + 0x0], bytes.fromhex("e800"), id="EXCHANGE[0x2 + 0x0, 0x3 + 0x0]", ), pytest.param( Op.EXCHANGE[0x2 + 0x0, 0x3 + 0xF], bytes.fromhex("e80f"), id="EXCHANGE[0x2 + 0x0, 0x3 + 0xF]", ), pytest.param( Op.EXCHANGE[0x2 + 0xF, 0x3 + 0xF + 0x0], bytes.fromhex("e8f0"), id="EXCHANGE[0x2 + 0xF, 0x3 + 0xF + 0x0]", ), pytest.param( Op.EXCHANGE[0x2 + 0xF, 0x3 + 0xF + 0xF], bytes.fromhex("e8ff"), id="EXCHANGE[0x2 + 0xF, 0x3 + 0xF + 0xF]", ), pytest.param(Op.PUSH0 * 0, bytes(), id="PUSH0 * 0"), pytest.param( Op.CREATE(value=1, offset=2, size=3), b"\x60\x03\x60\x02\x60\x01\xf0", id="Op.CREATE(value=1, offset=2, size=3)", ), pytest.param( Op.CREATE2(value=1, offset=2, size=3), b"\x60\x00\x60\x03\x60\x02\x60\x01\xf5", id="Op.CREATE2(value=1, offset=2, size=3)", ), pytest.param( Op.CALL(address=1), b"\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x01\x5a\xf1", id="Op.CALL(address=1)", ), pytest.param( Op.STATICCALL(address=1), b"\x60\x00\x60\x00\x60\x00\x60\x00\x60\x01\x5a\xfa", id="Op.STATICCALL(address=1)", ), pytest.param( Op.CALLCODE(address=1), b"\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x01\x5a\xf2", id="Op.CALLCODE(address=1)", ), pytest.param( Op.DELEGATECALL(address=1), b"\x60\x00\x60\x00\x60\x00\x60\x00\x60\x01\x5a\xf4", id="Op.DELEGATECALL(address=1)", ), pytest.param( Op.EXTCALL(address=1), b"\x60\x00\x60\x00\x60\x00\x60\x01\xf8", id="Op.EXTCALL(address=1)", ), pytest.param( Op.EXTSTATICCALL(address=1), b"\x60\x00\x60\x00\x60\x01\xfb", id="Op.EXTSTATICCALL(address=1)", ), pytest.param( Op.EXTDELEGATECALL(address=1), b"\x60\x00\x60\x00\x60\x01\xf9", id="Op.EXTDELEGATECALL(address=1)", ), pytest.param( Om.MSTORE(b""), b"", id='Om.MSTORE(b"")', ), pytest.param( Om.MSTORE(bytes(range(32))), bytes(Op.MSTORE(0, bytes(range(32)))), id="Om.MSTORE(bytes(range(32)))", ), pytest.param( Om.MSTORE(bytes(range(64))), bytes(Op.MSTORE(0, bytes(range(32))) + Op.MSTORE(32, bytes(range(32, 64)))), id="Om.MSTORE(bytes(range(64)))", ), pytest.param( Om.MSTORE(bytes(range(33))), bytes( Op.MSTORE(0, bytes(range(32))) + Op.MLOAD(32) + Op.PUSH31[-1] + Op.AND + Op.PUSH32[b"\x20".ljust(32, b"\x00")] + Op.OR + Op.PUSH1(32) + Op.MSTORE ), id="Om.MSTORE(bytes(range(33)))", ), pytest.param( Om.MSTORE(bytes(range(63))), bytes( Op.MSTORE(0, bytes(range(32))) + Op.MLOAD(32) + Op.PUSH1[-1] + Op.AND + Op.PUSH32[bytes(range(32, 63)).ljust(32, b"\x00")] + Op.OR + Op.PUSH1(32) + Op.MSTORE ), id="Om.MSTORE(bytes(range(63)))", ), ], ) def test_opcodes(opcodes: bytes, expected: bytes) -> None: """Test that the `opcodes` are transformed into bytecode as expected.""" assert bytes(opcodes) == expected def test_opcodes_repr() -> None: """Test that the `repr` of an `Op` is the same as its name.""" assert f"{Op.CALL}" == "CALL" assert f"{Op.DELEGATECALL}" == "DELEGATECALL" assert f"{Om.OOG}" == "OOG" assert str(Op.ADD) == "ADD" assert f"{Op.DUPN[1]}" == "DUPN_0x01" assert f"{Op.DATALOADN[1]}" == "DATALOADN_0x0001" def test_macros() -> None: """Test opcode and macros interaction.""" assert (Op.PUSH1(1) + Om.OOG) == (Op.PUSH1(1) + Op.SHA3(0, 100000000000)) for opcode in Op: assert opcode != Om.OOG @pytest.mark.parametrize( "bytecode,expected_popped_items,expected_pushed_items," "expected_max_stack_height,expected_min_stack_height", [ pytest.param(Op.PUSH1 + Op.POP, 0, 0, 1, 0, id="PUSH1 + POP"), pytest.param(Op.PUSH1 + Op.PUSH1, 0, 2, 2, 0, id="PUSH1 + PUSH1"), pytest.param(Op.PUSH1 * 3, 0, 3, 3, 0, id="PUSH1 * 3"), pytest.param(Op.POP + Op.POP, 2, 0, 2, 2, id="POP + POP"), pytest.param(Op.POP * 3, 3, 0, 3, 3, id="POP * 3"), pytest.param((Op.POP * 3) + Op.PUSH1, 3, 1, 3, 3, id="(POP * 3) + PUSH1"), pytest.param(Op.SWAP2 + Op.POP * 3, 3, 0, 3, 3, id="SWAP2 + POP * 3"), pytest.param(Op.SWAP2 + Op.PUSH1 * 3, 0, 3, 6, 3, id="SWAP2 + PUSH1 * 3"), pytest.param(Op.SWAP1 + Op.SWAP2, 0, 0, 3, 3, id="SWAP1 + SWAP2"), pytest.param( Op.POP * 2 + Op.PUSH1 + Op.POP * 2 + Op.PUSH1 * 3, 3, 3, 3, 3, id="POP * 2 + PUSH1 + POP * 2 + PUSH1 * 3", ), pytest.param(Op.CALL(1, 2, 3, 4, 5, 6, 7), 0, 1, 7, 0, id="CALL(1, 2, 3, 4, 5, 6, 7)"), pytest.param( Op.POP(Op.CALL(1, 2, 3, 4, 5, 6, 7)), 0, 0, 7, 0, id="POP(CALL(1, 2, 3, 4, 5, 6, 7))" ), pytest.param( Op.PUSH0 * 2 + Op.PUSH0 + Op.ADD + Op.PUSH0 + Op.POP * 2, 0, 1, 3, 0, id="parens1" ), pytest.param( Op.PUSH0 * 2 + (Op.PUSH0 + Op.ADD + Op.PUSH0 + Op.POP * 2), 0, 1, 3, 0, id="parens2" ), pytest.param( Op.PUSH0 * 2 + Op.PUSH0 + (Op.ADD + Op.PUSH0 + Op.POP * 2), 0, 1, 3, 0, id="parens3" ), pytest.param( Op.PUSH0 * 2 + Op.PUSH0 + (Op.ADD + Op.PUSH0) + Op.POP * 2, 0, 1, 3, 0, id="parens4" ), pytest.param( Op.PUSH0 * 2 + (Op.PUSH0 + Op.ADD + Op.PUSH0) + Op.POP * 2, 0, 1, 3, 0, id="parens5" ), ], ) def test_bytecode_properties( bytecode: Bytecode, expected_popped_items: int, expected_pushed_items: int, expected_max_stack_height: int, expected_min_stack_height: int, ) -> None: """Test that the properties of the bytecode are as expected.""" assert bytecode.popped_stack_items == expected_popped_items, "Popped stack items mismatch" assert bytecode.pushed_stack_items == expected_pushed_items, "Pushed stack items mismatch" assert bytecode.max_stack_height == expected_max_stack_height, "Max stack height mismatch" assert bytecode.min_stack_height == expected_min_stack_height, "Min stack height mismatch" def test_opcode_comparison() -> None: """Test that the opcodes are comparable.""" assert Op.STOP < Op.ADD assert Op.ADD == Op.ADD assert Op.ADD != Op.STOP assert Op.ADD > Op.STOP def test_bytecode_concatenation_with_bytes() -> None: """ Test that the bytecode can be concatenated with bytes. Bytes work as verbatim code and don't affect the bytecode properties. """ base = Op.PUSH1[0xFF] + Op.NOT assert str(base) == "" code = base + b"\x01\x02" assert code == bytes([0x60, 0xFF, 0x19, 0x01, 0x02]) assert str(code) == "" assert code.popped_stack_items == base.popped_stack_items assert code.pushed_stack_items == base.pushed_stack_items assert code.max_stack_height == base.max_stack_height assert code.min_stack_height == base.min_stack_height assert code.terminating == base.terminating def test_opcode_kwargs_validation() -> None: """Test that invalid keyword arguments raise ValueError.""" # Test valid kwargs work Op.MSTORE(offset=0, value=1) Op.CALL(gas=1, address=2, value=3, args_offset=4, args_size=5, ret_offset=6, ret_size=7) # Test invalid kwargs raise ValueError with pytest.raises( ValueError, match=r"Invalid keyword argument\(s\) \['offest'\] for opcode MSTORE" ): Op.MSTORE(offest=0, value=1) # codespell:ignore offest with pytest.raises( ValueError, match=r"Invalid keyword argument\(s\) \['wrong_arg'\] for opcode MSTORE" ): Op.MSTORE(offset=0, value=1, wrong_arg=2) with pytest.raises( ValueError, match=r"Invalid keyword argument\(s\) \['addres'\] for opcode CALL" ): Op.CALL( gas=1, addres=2, # codespell:ignore value=3, args_offset=4, args_size=5, ret_offset=6, ret_size=7, ) # Test multiple invalid kwargs with pytest.raises(ValueError, match=r"Invalid keyword argument\(s\).*for opcode MSTORE"): Op.MSTORE(offest=0, valu=1, extra=2) # codespell:ignore offest,valu ================================================ FILE: src/pytest_plugins/__init__.py ================================================ """Package containing pytest plugins related to test filling.""" ================================================ FILE: src/pytest_plugins/concurrency.py ================================================ """ Pytest plugin to create a temporary folder for the session where multi-process tests can store data that is shared between processes. The provided `session_temp_folder` fixture is used, for example, by `consume` when running hive simulators to ensure that only one `test_suite` is created (used to create tests on the hive simulator) when they are being created using multiple workers with pytest-xdist. """ import os import shutil from pathlib import Path from tempfile import gettempdir as get_temp_dir from typing import Generator import pytest from filelock import FileLock @pytest.fixture(scope="session") def session_temp_folder_name(testrun_uid: str) -> str: """ Define the name of the temporary folder that will be shared among all the xdist workers to coordinate the tests. "testrun_uid" is a fixture provided by the xdist plugin, and is unique for each test run, so it is used to create the unique folder name. """ return f"pytest-{testrun_uid}" @pytest.fixture(scope="session") def session_temp_folder( session_temp_folder_name: str, ) -> Generator[Path, None, None]: """ Create a global temporary folder that will be shared among all the xdist workers to coordinate the tests. We also create a file to keep track of how many workers are still using the folder, so we can delete it when the last worker is done. """ session_temp_folder = Path(get_temp_dir()) / session_temp_folder_name session_temp_folder.mkdir(exist_ok=True) folder_users_file_name = "folder_users" folder_users_file = session_temp_folder / folder_users_file_name folder_users_lock_file = session_temp_folder / f"{folder_users_file_name}.lock" with FileLock(folder_users_lock_file): if folder_users_file.exists(): with folder_users_file.open("r") as f: folder_users = int(f.read()) else: folder_users = 0 folder_users += 1 with folder_users_file.open("w") as f: f.write(str(folder_users)) yield session_temp_folder with FileLock(folder_users_lock_file): with folder_users_file.open("r") as f: folder_users = int(f.read()) folder_users -= 1 if folder_users == 0: shutil.rmtree(session_temp_folder) else: with folder_users_file.open("w") as f: f.write(str(folder_users)) @pytest.fixture(scope="session") def worker_count() -> int: """Get the number of workers for the test.""" worker_count_env = os.environ.get("PYTEST_XDIST_WORKER_COUNT", "1") return max(int(worker_count_env), 1) ================================================ FILE: src/pytest_plugins/consume/__init__.py ================================================ """Pytest plugins for consume commands.""" ================================================ FILE: src/pytest_plugins/consume/consume.py ================================================ """ A pytest plugin providing common functionality for consuming test fixtures. """ import re import sys import tarfile from dataclasses import dataclass from io import BytesIO from pathlib import Path from typing import Any, Generator, List, Optional, Tuple from urllib.parse import urlparse import platformdirs import pytest import requests import rich from cli.gen_index import generate_fixtures_index from ethereum_test_fixtures import BaseFixture, FixtureFormat from ethereum_test_fixtures.consume import IndexFile, TestCases from ethereum_test_forks import get_forks, get_relative_fork_markers, get_transition_forks from ethereum_test_tools.utility.versioning import get_current_commit_hash_or_tag from .releases import ReleaseTag, get_release_page_url, get_release_url, is_release_url, is_url CACHED_DOWNLOADS_DIRECTORY = ( Path(platformdirs.user_cache_dir("ethereum-execution-spec-tests")) / "cached_downloads" ) def print_migration_warning(terminalreporter: Any = None) -> None: """Print migration warning about repository merge.""" lines = [ "", "=" * 80, "⚠️ IMPORTANT: Repository Migration in Progress - 'The Weld' ⚠️", "=" * 80, "", "This repository is being merged into ethereum/execution-specs (EELS) during the", "week of October 20-24, 2025.", "", "📅 Timeline:", " • Week of Oct 13-17: Closing PRs, porting issues to EELS", " • Week of Oct 20-24: Migration week - fixing CI and fixture building", " • Oct 24 (ETA): Weld finalized - all development moves to EELS", "", "👉 What This Means:", " • Test Contributors: After Oct 24, reopen draft PRs in EELS", " • All future test development happens in EELS after completion", " • Fixture releases continue as usual during transition", "", "For details: https://steel.ethereum.foundation/blog/2025-09-11_weld-announcement/", "=" * 80, "", ] if terminalreporter: for line in lines: if "⚠️" in line or "IMPORTANT" in line: terminalreporter.write_line(line, bold=True, yellow=True) elif line.startswith("="): terminalreporter.write_line(line, yellow=True) else: terminalreporter.write_line(line) else: for line in lines: print(line) def default_input() -> str: """ Directory (default) to consume generated test fixtures from. Defined as a function to allow for easier testing. """ return "./fixtures" def default_html_report_file_path() -> str: """ Filepath (default) to store the generated HTML test report. Defined as a function to allow for easier testing. """ return ".meta/report_consume.html" class FixtureDownloader: """Handles downloading and extracting fixture archives.""" def __init__(self, url: str, destination_folder: Path): # noqa: D107 self.url = url self.destination_folder = destination_folder self.parsed_url = urlparse(url) self.archive_name = self.strip_archive_extension(Path(self.parsed_url.path).name) def download_and_extract(self) -> Tuple[bool, Path]: """ Download the URL and extract it locally if it hasn't already been downloaded. """ if self.destination_folder.exists(): return True, self.detect_extracted_directory() return False, self.fetch_and_extract() @staticmethod def strip_archive_extension(filename: str) -> str: """Remove .tar.gz or .tgz extensions from filename.""" return filename.removesuffix(".tar.gz").removesuffix(".tgz") @staticmethod def get_cache_path(url: str, cache_folder: Path) -> Path: """Get the appropriate cache path for a given URL.""" parsed_url = urlparse(url) archive_name = FixtureDownloader.strip_archive_extension(Path(parsed_url.path).name) if is_release_url(url): version = Path(parsed_url.path).parts[-2] parts = parsed_url.path.strip("/").split("/") org_repo = ( f"{parts[0]}/{parts[1]}" if parsed_url.netloc == "github.com" and len(parts) >= 2 else "other" ) return cache_folder / org_repo / version / archive_name return cache_folder / "other" / archive_name def fetch_and_extract(self) -> Path: """Download and extract an archive from the given URL.""" self.destination_folder.mkdir(parents=True, exist_ok=True) response = requests.get(self.url) response.raise_for_status() with tarfile.open(fileobj=BytesIO(response.content), mode="r:gz") as tar: tar.extractall(path=self.destination_folder) return self.detect_extracted_directory() def detect_extracted_directory(self) -> Path: """ Detect a single top-level dir within the extracted archive, otherwise return destination_folder. """ # noqa: D200 extracted_dirs = [ d for d in self.destination_folder.iterdir() if d.is_dir() and d.name != ".meta" ] return extracted_dirs[0] if len(extracted_dirs) == 1 else self.destination_folder @dataclass class FixturesSource: """Represents the source of test fixtures.""" input_option: str path: Path url: str = "" release_page: str = "" is_local: bool = True is_stdin: bool = False was_cached: bool = False extract_to_local_path: bool = False @classmethod def from_input( cls, input_source: str, cache_folder: Optional[Path] = None, extract_to: Optional[Path] = None, ) -> "FixturesSource": """Determine the fixture source type and return an instance.""" if cache_folder is None: cache_folder = CACHED_DOWNLOADS_DIRECTORY if input_source == "stdin": return cls(input_option=input_source, path=Path(), is_local=False, is_stdin=True) if is_release_url(input_source): return cls.from_release_url(input_source, cache_folder, extract_to) if is_url(input_source): return cls.from_url(input_source, cache_folder, extract_to) if ReleaseTag.is_release_string(input_source): return cls.from_release_spec(input_source, cache_folder, extract_to) return cls.validate_local_path(Path(input_source)) @classmethod def from_release_url( cls, url: str, cache_folder: Optional[Path] = None, extract_to: Optional[Path] = None ) -> "FixturesSource": """Create a fixture source from a supported github repo release URL.""" if cache_folder is None: cache_folder = CACHED_DOWNLOADS_DIRECTORY destination_folder = extract_to or FixtureDownloader.get_cache_path(url, cache_folder) downloader = FixtureDownloader(url, destination_folder) # Skip cache check for extract_to (always download fresh) if extract_to is not None: was_cached = False path = downloader.fetch_and_extract() else: was_cached, path = downloader.download_and_extract() return cls( input_option=url, path=path, url=url, release_page="", is_local=False, was_cached=was_cached, extract_to_local_path=extract_to is not None, ) @classmethod def from_url( cls, url: str, cache_folder: Optional[Path] = None, extract_to: Optional[Path] = None ) -> "FixturesSource": """Create a fixture source from a direct URL.""" if cache_folder is None: cache_folder = CACHED_DOWNLOADS_DIRECTORY destination_folder = extract_to or FixtureDownloader.get_cache_path(url, cache_folder) downloader = FixtureDownloader(url, destination_folder) # Skip cache check for extract_to (always download fresh) if extract_to is not None: was_cached = False path = downloader.fetch_and_extract() else: was_cached, path = downloader.download_and_extract() return cls( input_option=url, path=path, url=url, release_page="", is_local=False, was_cached=was_cached, extract_to_local_path=extract_to is not None, ) @classmethod def from_release_spec( cls, spec: str, cache_folder: Optional[Path] = None, extract_to: Optional[Path] = None ) -> "FixturesSource": """ Create a fixture source from a release spec (e.g., develop@latest). """ if cache_folder is None: cache_folder = CACHED_DOWNLOADS_DIRECTORY url = get_release_url(spec) release_page = get_release_page_url(url) destination_folder = extract_to or FixtureDownloader.get_cache_path(url, cache_folder) downloader = FixtureDownloader(url, destination_folder) # Skip cache check for extract_to (always download fresh) if extract_to is not None: was_cached = False path = downloader.fetch_and_extract() else: was_cached, path = downloader.download_and_extract() return cls( input_option=spec, path=path, url=url, release_page=release_page, is_local=False, was_cached=was_cached, extract_to_local_path=extract_to is not None, ) @staticmethod def validate_local_path(path: Path) -> "FixturesSource": """ Validate that a local fixture path exists and contains JSON files. """ if not path.exists(): pytest.exit(f"Specified fixture directory '{path}' does not exist.") if not any(path.glob("**/*.json")): pytest.exit(f"Specified fixture directory '{path}' does not contain any JSON files.") return FixturesSource(input_option=str(path), path=path) class SimLimitBehavior: """Represents options derived from the `--sim.limit` argument.""" def __init__(self, pattern: str, collectonly: bool = False): # noqa: D107 self.pattern = pattern self.collectonly = collectonly @staticmethod def _escape_id(pattern: str) -> str: """ Escape regex char in the pattern; prepend and append '.*' (for `fill` IDs). The `pattern` is prefixed and suffixed with a wildcard match to allow `fill` test case IDs to be specified, otherwise the full `consume` test ID must be specified. """ return f".*{re.escape(pattern)}.*" @classmethod def from_string(cls, pattern: str) -> "SimLimitBehavior": """ Parse the `--sim.limit` argument and return a `SimLimitBehavior` instance. If `pattern`: - Is "collectonly", enable collection mode without filtering. - Starts with "collectonly:", enable collection mode and use the rest as a regex pattern. - Starts with "id:", treat the rest as a literal test ID and escape special regex chars. - Starts with "collectonly:id:", enable collection mode with a literal test ID. """ if pattern == "collectonly": return cls(pattern=".*", collectonly=True) if pattern.startswith("collectonly:id:"): literal_id = pattern.removeprefix("collectonly:id:") if not literal_id: raise ValueError("Empty literal ID provided.") return cls(pattern=cls._escape_id(literal_id), collectonly=True) if pattern.startswith("collectonly:"): return cls(pattern=pattern.removeprefix("collectonly:"), collectonly=True) if pattern.startswith("id:"): literal_id = pattern.removeprefix("id:") if not literal_id: raise ValueError("Empty literal ID provided.") return cls(pattern=cls._escape_id(literal_id)) return cls(pattern=pattern) def pytest_addoption(parser: pytest.Parser) -> None: # noqa: D103 consume_group = parser.getgroup( "consume", "Arguments related to consuming fixtures via a client" ) consume_group.addoption( "--input", action="store", dest="fixtures_source", default=None, help=( "Specify the JSON test fixtures source. Can be a local directory, a URL pointing to a " " fixtures.tar.gz archive, a release name and version in the form of `NAME@v1.2.3` " "(`stable` and `develop` are valid release names, and `latest` is a valid version), " "or the special keyword 'stdin'. " f"Defaults to the following local directory: '{default_input()}'." ), ) consume_group.addoption( "--cache-folder", action="store", dest="fixture_cache_folder", default=CACHED_DOWNLOADS_DIRECTORY, help=( "Specify the path where the downloaded fixtures are cached. " f"Defaults to the following directory: '{CACHED_DOWNLOADS_DIRECTORY}'." ), ) consume_group.addoption( "--extract-to", action="store", dest="extract_to_folder", default=None, help=( "Extract downloaded fixtures to the specified directory. Only valid with 'cache' " "command. When used, fixtures are extracted directly to this path instead of the " "user's execution-spec-tests cache directory." ), ) if "cache" in sys.argv: return consume_group.addoption( "--no-html", action="store_true", dest="disable_html", default=False, help=( "Don't generate an HTML test report (in the output directory). " "The --html flag can be used to specify a different path." ), ) consume_group.addoption( "--sim.limit", action="store", dest="sim_limit", type=SimLimitBehavior.from_string, default=SimLimitBehavior(".*"), help=( "Filter tests by either a regex pattern or a literal test case ID. To match a " "test case by its exact ID, prefix the ID with `id:`. The string following `id:` " "will be automatically escaped so that all special regex characters are treated as " "literals. Without the `id:` prefix, the argument is interpreted as a Python regex " "pattern. To see which test cases are matched, without executing them, prefix with " '`collectonly:`, e.g. `--sim.limit "collectonly:.*eip4788.*fork_Prague.*"`. ' "To list all available test case IDs, set the value to `collectonly`." ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: # noqa: D103 """ Pytest hook called after command line options have been parsed and before test collection begins. `@pytest.hookimpl(tryfirst=True)` is applied to ensure that this hook is called before the pytest-html plugin's pytest_configure to ensure that it uses the modified `htmlpath` option. """ print_migration_warning() # Validate --extract-to usage if config.option.extract_to_folder is not None and "cache" not in sys.argv: pytest.exit("The --extract-to flag is only valid with the 'cache' command.") fixtures_source: FixturesSource if config.option.fixtures_source is None: # NOTE: Setting the default value here is necessary for correct # stdin/piping behavior. fixtures_source = FixturesSource(input_option=default_input(), path=Path(default_input())) else: # NOTE: Setting `type=FixturesSource.from_input` in pytest_addoption() # causes the option to be evaluated twice which breaks the result of # `was_cached`; the work-around is to call it manually here. fixtures_source = FixturesSource.from_input( config.option.fixtures_source, Path(config.option.fixture_cache_folder), Path(config.option.extract_to_folder) if config.option.extract_to_folder is not None else None, ) config.fixtures_source = fixtures_source # type: ignore[attr-defined] config.fixture_source_flags = ["--input", fixtures_source.input_option] # type: ignore[attr-defined] if "cache" in sys.argv and not fixtures_source: pytest.exit("The --input flag is required when using the cache command.") if "cache" in sys.argv: reason = "" if fixtures_source.extract_to_local_path: reason += "Fixtures downloaded and extracted to specified directory." elif fixtures_source.was_cached: reason += "Fixtures already cached." elif not fixtures_source.is_local: reason += "Fixtures downloaded and cached." reason += f"\nPath: {fixtures_source.path}" reason += f"\nInput: {fixtures_source.url or fixtures_source.path}" if fixtures_source.release_page: reason += f"\nRelease page: {fixtures_source.release_page}" pytest.exit( returncode=0, reason=reason, ) if fixtures_source.is_stdin: config.test_cases = TestCases.from_stream(sys.stdin) # type: ignore[attr-defined] return index_file = fixtures_source.path / ".meta" / "index.json" index_file.parent.mkdir(parents=True, exist_ok=True) if not index_file.exists(): rich.print(f"Generating index file [bold cyan]{index_file}[/]...") generate_fixtures_index( fixtures_source.path, quiet_mode=False, force_flag=False, ) index = IndexFile.model_validate_json(index_file.read_text()) config.test_cases = index.test_cases # type: ignore[attr-defined] for fixture_format in BaseFixture.formats.values(): config.addinivalue_line( "markers", f"{fixture_format.format_name}: Tests in `{fixture_format.format_name}` format ", ) # All forked defined within EEST all_forks = {fork for fork in set(get_forks()) | get_transition_forks() if not fork.ignore()} # Append all forks within the index file (compatibility with # `ethereum/tests`) all_forks.update(getattr(index, "forks", [])) for fork in all_forks: config.addinivalue_line("markers", f"{fork}: Tests for the {fork} fork") if config.option.sim_limit: if config.option.dest_regex != ".*": pytest.exit( "Both the --sim.limit (via env var?) and the --regex flags are set. " "Please only set one of them." ) config.option.dest_regex = config.option.sim_limit.pattern if config.option.sim_limit.collectonly: config.option.collectonly = True config.option.verbose = -1 # equivalent to -q; only print test ids if config.option.collectonly or config.option.markers: return if not config.getoption("disable_html") and config.getoption("htmlpath") is None: # generate an html report by default, unless explicitly disabled config.option.htmlpath = Path(default_html_report_file_path()) def pytest_html_report_title(report: Any) -> None: """Set the HTML report title (pytest-html plugin).""" report.title = "Consume Test Report" def pytest_report_header(config: pytest.Config) -> List[str]: """Add the consume version and fixtures source to the report header.""" source = config.fixtures_source # type: ignore[attr-defined] lines = [ f"consume ref: {get_current_commit_hash_or_tag()}", f"fixtures: {source.path}", ] if not source.is_local and not source.is_stdin: lines.append(f"fixtures url: {source.url}") lines.append(f"fixtures release: {source.release_page}") return lines @pytest.fixture(scope="session") def fixture_source_flags(request: pytest.FixtureRequest) -> List[str]: """Return the input flags used to specify the JSON test fixtures source.""" return request.config.fixture_source_flags # type: ignore[attr-defined] @pytest.fixture(scope="session") def fixtures_source(request: pytest.FixtureRequest) -> FixturesSource: # noqa: D103 return request.config.fixtures_source # type: ignore[attr-defined] def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """ Generate test cases for every test fixture in all the JSON fixture files within the specified fixtures directory, or read from stdin if the directory is 'stdin'. """ if "cache" in sys.argv: return test_cases = metafunc.config.test_cases # type: ignore[attr-defined] supported_fixture_formats: List[FixtureFormat] = getattr( metafunc.config, "supported_fixture_formats", [] ) param_list = [] for test_case in test_cases: if test_case.format not in supported_fixture_formats: continue fork_markers = get_relative_fork_markers(test_case.fork, strict_mode=False) param = pytest.param( test_case, id=test_case.id, marks=[getattr(pytest.mark, m) for m in fork_markers] + [getattr(pytest.mark, test_case.format.format_name)], ) param_list.append(param) metafunc.parametrize("test_case", param_list) if "client_type" in metafunc.fixturenames: metafunc.parametrize( "client_type", metafunc.config.hive_execution_clients, # type: ignore[attr-defined] ids=[client.name for client in metafunc.config.hive_execution_clients], # type: ignore[attr-defined] ) @pytest.hookimpl(hookwrapper=True, trylast=True) def pytest_terminal_summary( terminalreporter: Any, exitstatus: int, config: pytest.Config, ) -> Generator[None, None, None]: """Print migration warning at end of test session.""" del exitstatus yield if not hasattr(config, "workerinput"): print_migration_warning(terminalreporter) ================================================ FILE: src/pytest_plugins/consume/direct/__init__.py ================================================ """Consume direct test functions.""" ================================================ FILE: src/pytest_plugins/consume/direct/conftest.py ================================================ """ A pytest plugin that configures the consume command to act as a test runner for "direct" client fixture consumer interfaces. For example, via go-ethereum's `evm blocktest` or `evm statetest` commands. """ import json import tempfile import warnings from pathlib import Path from typing import Any, Generator import pytest from ethereum_clis.ethereum_cli import EthereumCLI from ethereum_clis.fixture_consumer_tool import FixtureConsumerTool from ethereum_test_base_types import to_json from ethereum_test_fixtures import ( BaseFixture, BlockchainFixture, EOFFixture, StateFixture, ) from ethereum_test_fixtures.consume import TestCaseIndexFile, TestCaseStream from ethereum_test_fixtures.file import Fixtures from pytest_plugins.consume.consume import FixturesSource class CollectOnlyCLI(EthereumCLI): """A dummy CLI for use with `--collect-only`.""" def __init__(self) -> None: # noqa: D107 pass class CollectOnlyFixtureConsumer( FixtureConsumerTool, CollectOnlyCLI, fixture_formats=list(BaseFixture.formats.values()) ): """A dummy fixture consumer for use with `--collect-only`.""" def consume_fixture(self, *args: Any, **kwargs: Any) -> None: # noqa: D102 pass def pytest_addoption(parser: pytest.Parser) -> None: # noqa: D103 consume_group = parser.getgroup( "consume_direct", "Arguments related to consuming fixtures via a client" ) consume_group.addoption( "--bin", action="append", dest="fixture_consumer_bin", type=Path, default=[], help=( "Path to a geth evm executable that provides `blocktest` or `statetest`. " "Flag can be used multiple times to specify multiple fixture consumer binaries." ), ) consume_group.addoption( "--traces", action="store_true", dest="consumer_collect_traces", default=False, help="Collect traces of the execution information from the fixture consumer tool.", ) debug_group = parser.getgroup("debug", "Arguments defining debug behavior") debug_group.addoption( "--dump-dir", action="store", dest="base_dump_dir", type=Path, default=None, help="Path to dump the fixture consumer tool debug output.", ) def pytest_configure(config: pytest.Config) -> None: # noqa: D103 config.supported_fixture_formats = [StateFixture, BlockchainFixture, EOFFixture] # type: ignore[attr-defined] fixture_consumers = [] for fixture_consumer_bin_path in config.getoption("fixture_consumer_bin"): fixture_consumers.append( FixtureConsumerTool.from_binary_path( binary_path=Path(fixture_consumer_bin_path), trace=config.getoption("consumer_collect_traces"), ) ) if config.option.markers: return elif not fixture_consumers and config.option.collectonly: warnings.warn( ( "No fixture consumer binaries provided; using a dummy consumer for collect-only; " "all possible fixture formats will be collected. " "Specify fixture consumer(s) via `--bin` to see actual collection results." ), stacklevel=1, ) fixture_consumers = [CollectOnlyFixtureConsumer()] elif not fixture_consumers: pytest.exit( "No fixture consumer binaries provided; please specify a binary path via `--bin`." ) config.fixture_consumers = fixture_consumers # type: ignore[attr-defined] @pytest.fixture(scope="function") def test_dump_dir( request: pytest.FixtureRequest, fixture_path: Path, fixture_name: str ) -> Path | None: """The directory to write evm debug output to.""" base_dump_dir = request.config.getoption("base_dump_dir") if not base_dump_dir: return None if len(fixture_name) > 142: # ensure file name is not too long for eCryptFS fixture_name = fixture_name[:70] + "..." + fixture_name[-70:] return base_dump_dir / fixture_path.stem / fixture_name.replace("/", "-") @pytest.fixture def fixture_path( test_case: TestCaseIndexFile | TestCaseStream, fixtures_source: FixturesSource ) -> Generator[Path, None, None]: """ Path to the current JSON fixture file. If the fixture source is stdin, the fixture is written to a temporary json file. """ if fixtures_source.is_stdin: assert isinstance(test_case, TestCaseStream) temp_dir = tempfile.TemporaryDirectory() fixture_path = Path(temp_dir.name) / f"{test_case.id.replace('/', '_')}.json" fixtures = Fixtures({test_case.id: test_case.fixture}) with open(fixture_path, "w") as f: json.dump(to_json(fixtures), f, indent=4) yield fixture_path temp_dir.cleanup() else: assert isinstance(test_case, TestCaseIndexFile) yield fixtures_source.path / test_case.json_path @pytest.fixture(scope="function") def fixture_name(test_case: TestCaseIndexFile | TestCaseStream) -> str: """Name of the current fixture.""" return test_case.id def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """Parametrize test cases for every fixture consumer.""" metafunc.parametrize( "fixture_consumer", ( pytest.param(fixture_consumer, id=str(fixture_consumer.__class__.__name__)) for fixture_consumer in metafunc.config.fixture_consumers # type: ignore[attr-defined] ), ) ================================================ FILE: src/pytest_plugins/consume/direct/test_via_direct.py ================================================ """ Executes a JSON test fixture directly against a client using a dedicated client interface similar to geth's EVM 'blocktest' command. """ from pathlib import Path from ethereum_test_fixtures import FixtureConsumer from ethereum_test_fixtures.consume import TestCaseIndexFile, TestCaseStream def test_fixture( test_case: TestCaseIndexFile | TestCaseStream, fixture_consumer: FixtureConsumer, fixture_path: Path, test_dump_dir: Path | None, ) -> None: """ Generic test function used to call the fixture consumer with a given fixture file path and a fixture name (for a single test run). """ fixture_consumer.consume_fixture( test_case.format, fixture_path, fixture_name=test_case.id, debug_output_path=test_dump_dir, ) ================================================ FILE: src/pytest_plugins/consume/hive_engine_test/__init__.py ================================================ """Hive engine test consumer plugin.""" ================================================ FILE: src/pytest_plugins/consume/hive_simulators_reorg/__init__.py ================================================ """Hive simulators reorganization consumer plugin.""" ================================================ FILE: src/pytest_plugins/consume/releases.py ================================================ """Procedures to consume fixtures from Github releases.""" import json import os import re from dataclasses import dataclass from datetime import datetime from pathlib import Path from typing import List from urllib.parse import urlparse import platformdirs import requests from pydantic import BaseModel, Field, RootModel CACHED_RELEASE_INFORMATION_FILE = ( Path(platformdirs.user_cache_dir("ethereum-execution-spec-tests")) / "release_information.json" ) SUPPORTED_REPOS = ["ethereum/execution-spec-tests", "ethereum/tests", "ethereum/legacytests"] class NoSuchReleaseError(Exception): """Raised when a release does not exist.""" def __init__(self, release_string: str): """Initialize the exception.""" super().__init__(f"Unknown release source: {release_string}") class AssetNotFoundError(Exception): """Raised when a release has no assets.""" def __init__(self, release_string: str): """Initialize the exception.""" super().__init__(f"Asset not found: {release_string}") @dataclass(kw_only=True) class ReleaseTag: """A descriptor for a release.""" tag_name: str version: str | None @classmethod def from_string(cls, release_string: str) -> "ReleaseTag": """ Create a release descriptor from a string. The release source can be in the format `tag_name@version` or just `tag_name`. """ version: str | None if "@" in release_string: tag_name, version = release_string.split("@") if version == "" or version.lower() == "latest": version = None else: tag_name = release_string version = None return cls(tag_name=tag_name, version=version) @staticmethod def is_release_string(release_string: str) -> bool: """Check if the release string is in the correct format.""" return "@" in release_string def __eq__(self, value: object) -> bool: """ Check if the release descriptor matches the string value. Returns True if the value is the same as the tag name or the tag name and version. """ assert isinstance(value, str), f"Expected a string, but got: {value}" if self.version is not None: # normal release, e.g., stable@v4.0.0 normal_release_match = value == self.version # pre release, e.g., pectra-devnet-6@v1.0.0 pre_release_match = value == f"{self.tag_name}@{self.version}" return normal_release_match or pre_release_match return value.startswith(self.tag_name) @property def asset_name(self) -> str: """Get the asset name.""" return f"fixtures_{self.tag_name}.tar.gz" class Asset(BaseModel): """Information about a release asset.""" url: str = Field(..., alias="browser_download_url") id: int name: str content_type: str size: int class Assets(RootModel[List[Asset]]): """A list of assets and their information.""" root: List[Asset] def __contains__(self, release_descriptor: ReleaseTag) -> bool: """Check if the assets contain the release descriptor.""" return any(release_descriptor.asset_name == asset.name for asset in self.root) class ReleaseInformation(BaseModel): """Information about a release.""" url: str = Field(..., alias="html_url") id: int tag_name: str name: str created_at: datetime published_at: datetime assets: Assets def __contains__(self, release_descriptor: ReleaseTag) -> bool: """Check if the release information contains the release descriptor.""" if release_descriptor.version is not None: return release_descriptor == self.tag_name for asset in self.assets.root: if asset.name == release_descriptor.asset_name: return True return False def get_asset(self, release_descriptor: ReleaseTag) -> Asset: """Get the asset URL.""" for asset in self.assets.root: if asset.name == release_descriptor.asset_name: return asset raise AssetNotFoundError(release_descriptor.tag_name) class Releases(RootModel[List[ReleaseInformation]]): """A list of releases and their information.""" root: List[ReleaseInformation] def is_docker_or_ci() -> bool: """ Check if the code is running inside a Docker container or a CI environment. """ return "GITHUB_ACTIONS" in os.environ or Path("/.dockerenv").exists() def is_url(string: str) -> bool: """Check if a string is a remote URL.""" result = urlparse(string) return all([result.scheme, result.netloc]) def is_release_url(input_str: str) -> bool: """Check if the release string is a URL.""" if not is_url(input_str): return False repo_pattern = "|".join(re.escape(repo) for repo in SUPPORTED_REPOS) regex_pattern = rf"https://github\.com/({repo_pattern})/releases/download/" return re.match(regex_pattern, input_str) is not None def parse_release_information(release_information: List) -> List[ReleaseInformation]: """Parse the release information from the Github API.""" return Releases.model_validate(release_information).root def download_release_information(destination_file: Path | None) -> List[ReleaseInformation]: """ Download all releases from the GitHub API, handling pagination properly. GitHub's API returns releases in pages of 30 by default. This function follows the pagination links to ensure we get every release, which is crucial for finding older version or latest releases. """ all_releases = [] for repo in SUPPORTED_REPOS: current_url: str | None = f"https://api.github.com/repos/{repo}/releases" max_pages = 2 while current_url and max_pages > 0: max_pages -= 1 response = requests.get(current_url) response.raise_for_status() all_releases.extend(response.json()) current_url = None if "link" in response.headers: for link in requests.utils.parse_header_links(response.headers["link"]): if link["rel"] == "next": current_url = link["url"] break if destination_file: destination_file.parent.mkdir(parents=True, exist_ok=True) with open(destination_file, "w") as file: json.dump(all_releases, file) return parse_release_information(all_releases) def parse_release_information_from_file( release_information_file: Path, ) -> List[ReleaseInformation]: """Parse the release information from a file.""" with open(release_information_file, "r") as file: release_information = json.load(file) return parse_release_information(release_information) def get_release_url_from_release_information( release_string: str, release_information: List[ReleaseInformation] ) -> str: """Get the URL for a specific release.""" release_descriptor = ReleaseTag.from_string(release_string) for release in release_information: if release_descriptor in release: return release.get_asset(release_descriptor).url raise NoSuchReleaseError(release_string) def get_release_page_url(release_string: str) -> str: """ Return the GitHub Release page URL for a specific release descriptor. This function can handle: - A standard release string (e.g., "eip7692@latest") from execution-spec-tests only. - A direct asset download link (e.g., "https://github.com/ethereum/execution-spec-tests/releases/ download/v4.0.0/fixtures_eip7692.tar.gz"). """ release_information = get_release_information() # Case 1: If it's a direct GitHub Releases download link, find which # release in `release_information` has an asset with this exact URL. repo_pattern = "|".join(re.escape(repo) for repo in SUPPORTED_REPOS) regex_pattern = rf"https://github\.com/({repo_pattern})/releases/download/" if re.match(regex_pattern, release_string): for release in release_information: for asset in release.assets.root: if asset.url == release_string: return release.url # The HTML page for this release raise NoSuchReleaseError(f"No release found for asset URL: {release_string}") # Case 2: Otherwise, treat it as a release descriptor (e.g., # "eip7692@latest") release_descriptor = ReleaseTag.from_string(release_string) for release in release_information: if release_descriptor in release: return release.url # If nothing matched, raise raise NoSuchReleaseError(release_string) def get_release_information() -> List[ReleaseInformation]: """ Get the release information. First check if the cached release information file exists. If it does, but it is older than 4 hours, delete the file, unless running inside a CI environment or a Docker container. Then download the release information from the Github API and save it to the cache file. """ if CACHED_RELEASE_INFORMATION_FILE.exists(): last_modified = CACHED_RELEASE_INFORMATION_FILE.stat().st_mtime if (datetime.now().timestamp() - last_modified) < 4 * 60 * 60 or is_docker_or_ci(): return parse_release_information_from_file(CACHED_RELEASE_INFORMATION_FILE) CACHED_RELEASE_INFORMATION_FILE.unlink() if not CACHED_RELEASE_INFORMATION_FILE.exists(): return download_release_information(CACHED_RELEASE_INFORMATION_FILE) return parse_release_information_from_file(CACHED_RELEASE_INFORMATION_FILE) def get_release_url(release_string: str) -> str: """Get the URL for a specific release.""" release_information = get_release_information() return get_release_url_from_release_information(release_string, release_information) ================================================ FILE: src/pytest_plugins/consume/simulators/__init__.py ================================================ """Consume hive simulators test functions.""" ================================================ FILE: src/pytest_plugins/consume/simulators/base.py ================================================ """Common pytest fixtures for the Hive simulators.""" from pathlib import Path from typing import Dict, Literal import pytest from hive.client import Client from ethereum_test_fixtures import ( BaseFixture, ) from ethereum_test_fixtures.consume import TestCaseIndexFile, TestCaseStream from ethereum_test_fixtures.file import Fixtures from ethereum_test_rpc import EthRPC from ..consume import FixturesSource @pytest.fixture(scope="function") def eth_rpc(client: Client) -> EthRPC: """Initialize ethereum RPC client for the execution client under test.""" return EthRPC(f"http://{client.ip}:8545") @pytest.fixture(scope="function") def check_live_port(test_suite_name: str) -> Literal[8545, 8551]: """Port used by hive to check for liveness of the client.""" if test_suite_name == "eest/consume-rlp": return 8545 elif test_suite_name in {"eest/consume-engine", "eest/consume-sync"}: return 8551 raise ValueError( f"Unexpected test suite name '{test_suite_name}' while setting HIVE_CHECK_LIVE_PORT." ) class FixturesDict(Dict[Path, Fixtures]): """ A dictionary caches loaded fixture files to avoid reloading the same file multiple times. """ def __init__(self) -> None: """Initialize the dictionary that caches loaded fixture files.""" self._fixtures: Dict[Path, Fixtures] = {} def __getitem__(self, key: Path) -> Fixtures: """ Return the fixtures from the index file, if not found, load from disk. """ assert key.is_file(), f"Expected a file path, got '{key}'" if key not in self._fixtures: self._fixtures[key] = Fixtures.model_validate_json(key.read_text()) return self._fixtures[key] @pytest.fixture(scope="session") def fixture_file_loader() -> Dict[Path, Fixtures]: """ Return a singleton dictionary that caches loaded fixture files used in all tests. """ return FixturesDict() @pytest.fixture(scope="function") def fixture( fixtures_source: FixturesSource, fixture_file_loader: Dict[Path, Fixtures], test_case: TestCaseIndexFile | TestCaseStream, ) -> BaseFixture: """ Load the fixture from a file or from stream in any of the supported fixture formats. The fixture is either already available within the test case (if consume is taking input on stdin) or loaded from the fixture json file if taking input from disk (fixture directory with index file). """ fixture: BaseFixture if fixtures_source.is_stdin: assert isinstance(test_case, TestCaseStream), "Expected a stream test case" fixture = test_case.fixture else: assert isinstance(test_case, TestCaseIndexFile), "Expected an index file test case" fixtures_file_path = fixtures_source.path / test_case.json_path fixtures: Fixtures = fixture_file_loader[fixtures_file_path] fixture = fixtures[test_case.id] assert isinstance(fixture, test_case.format), ( f"Expected a {test_case.format.format_name} test fixture" ) return fixture ================================================ FILE: src/pytest_plugins/consume/simulators/engine/__init__.py ================================================ """Consume Engine test functions.""" ================================================ FILE: src/pytest_plugins/consume/simulators/engine/conftest.py ================================================ """ Pytest fixtures for the `consume engine` simulator. Configures the hive back-end & EL clients for each individual test execution. """ import io from typing import Mapping import pytest from hive.client import Client from ethereum_test_exceptions import ExceptionMapper from ethereum_test_fixtures import BlockchainEngineFixture from ethereum_test_rpc import EngineRPC pytest_plugins = ( "pytest_plugins.pytest_hive.pytest_hive", "pytest_plugins.consume.simulators.base", "pytest_plugins.consume.simulators.single_test_client", "pytest_plugins.consume.simulators.test_case_description", "pytest_plugins.consume.simulators.timing_data", "pytest_plugins.consume.simulators.exceptions", ) def pytest_configure(config: pytest.Config) -> None: """Set the supported fixture formats for the engine simulator.""" config.supported_fixture_formats = [BlockchainEngineFixture] # type: ignore[attr-defined] @pytest.fixture(scope="function") def engine_rpc(client: Client, client_exception_mapper: ExceptionMapper | None) -> EngineRPC: """Initialize engine RPC client for the execution client under test.""" if client_exception_mapper: return EngineRPC( f"http://{client.ip}:8551", response_validation_context={ "exception_mapper": client_exception_mapper, }, ) return EngineRPC(f"http://{client.ip}:8551") @pytest.fixture(scope="module") def test_suite_name() -> str: """The name of the hive test suite used in this simulator.""" return "eest/consume-engine" @pytest.fixture(scope="module") def test_suite_description() -> str: """The description of the hive test suite used in this simulator.""" return "Execute blockchain tests against clients using the Engine API." @pytest.fixture(scope="function") def client_files(buffered_genesis: io.BufferedReader) -> Mapping[str, io.BufferedReader]: """Define the files that hive will start the client with.""" files = {} files["/genesis.json"] = buffered_genesis return files ================================================ FILE: src/pytest_plugins/consume/simulators/exceptions.py ================================================ """Pytest plugin that defines options and fixtures for client exceptions.""" from typing import Dict, List import pytest from hive.client import ClientType from ethereum_test_exceptions import ExceptionMapper from ethereum_test_fixtures import ( BlockchainFixtureCommon, ) from .helpers.exceptions import EXCEPTION_MAPPERS def pytest_addoption(parser: pytest.Parser) -> None: """Hive simulator specific consume command line options.""" consume_group = parser.getgroup( "consume", "Arguments related to consuming fixtures via a client" ) consume_group.addoption( "--disable-strict-exception-matching", action="store", dest="disable_strict_exception_matching", default="", help=( "Comma-separated list of client names and/or forks which should NOT use strict " "exception matching." ), ) @pytest.fixture(scope="session") def client_exception_mapper_cache() -> Dict[str, ExceptionMapper | None]: """Cache for exception mappers by client type.""" return {} @pytest.fixture(scope="function") def client_exception_mapper( client_type: ClientType, client_exception_mapper_cache: Dict[str, ExceptionMapper | None] ) -> ExceptionMapper | None: """Return the exception mapper for the client type, with caching.""" if client_type.name not in client_exception_mapper_cache: for client in EXCEPTION_MAPPERS: if client in client_type.name: client_exception_mapper_cache[client_type.name] = EXCEPTION_MAPPERS[client] break else: client_exception_mapper_cache[client_type.name] = None return client_exception_mapper_cache[client_type.name] @pytest.fixture(scope="session") def disable_strict_exception_matching(request: pytest.FixtureRequest) -> List[str]: """ Return the list of clients or forks that should NOT use strict exception matching. """ config_string = request.config.getoption("disable_strict_exception_matching") return config_string.split(",") if config_string else [] @pytest.fixture(scope="function") def client_strict_exception_matching( client_type: ClientType, disable_strict_exception_matching: List[str], ) -> bool: """Return True if the client type should use strict exception matching.""" return not any( client.lower() in client_type.name.lower() for client in disable_strict_exception_matching ) @pytest.fixture(scope="function") def fork_strict_exception_matching( fixture: BlockchainFixtureCommon, disable_strict_exception_matching: List[str], ) -> bool: """Return True if the fork should use strict exception matching.""" # NOTE: `in` makes it easier for transition forks ("Prague" in # "CancunToPragueAtTime15k") return not any( s.lower() in str(fixture.fork).lower() for s in disable_strict_exception_matching ) @pytest.fixture(scope="function") def strict_exception_matching( client_strict_exception_matching: bool, fork_strict_exception_matching: bool, ) -> bool: """Return True if the test should use strict exception matching.""" return client_strict_exception_matching and fork_strict_exception_matching ================================================ FILE: src/pytest_plugins/consume/simulators/helpers/__init__.py ================================================ """Helper classes and functions for consume hive simulators.""" ================================================ FILE: src/pytest_plugins/consume/simulators/helpers/exceptions.py ================================================ """Custom exceptions utilized within consume simulators.""" import pprint from typing import Dict, List, Tuple from ethereum_clis.clis.besu import BesuExceptionMapper from ethereum_clis.clis.erigon import ErigonExceptionMapper from ethereum_clis.clis.ethereumjs import EthereumJSExceptionMapper from ethereum_clis.clis.ethrex import EthrexExceptionMapper from ethereum_clis.clis.geth import GethExceptionMapper from ethereum_clis.clis.nethermind import NethermindExceptionMapper from ethereum_clis.clis.nimbus import NimbusExceptionMapper from ethereum_clis.clis.reth import RethExceptionMapper from ethereum_test_exceptions import ExceptionMapper from ethereum_test_fixtures.blockchain import FixtureHeader class GenesisBlockMismatchExceptionError(Exception): """ Definers a mismatch exception between the client and fixture genesis blockhash. """ def __init__(self, *, expected_header: FixtureHeader, got_genesis_block: Dict[str, str]): """ Initialize the exception with the expected and received genesis block headers. """ message = ( "Genesis block hash mismatch.\n\n" f"Expected: {expected_header.block_hash}\n" f" Got: {got_genesis_block['hash']}." ) differences, unexpected_fields = self.compare_models( expected_header, FixtureHeader(**got_genesis_block) ) if differences: message += ( "\n\nGenesis block header field differences:\n" f"{pprint.pformat(differences, indent=4)}" ) elif unexpected_fields: message += ( "\n\nUn-expected genesis block header fields from client:\n" f"{pprint.pformat(unexpected_fields, indent=4)}" "\nIs the fork configuration correct?" ) else: message += ( "There were no differences in the expected and received genesis block headers." ) super().__init__(message) @staticmethod def compare_models(expected: FixtureHeader, got: FixtureHeader) -> Tuple[Dict, List]: """ Compare two FixtureHeader model instances and return their differences. """ differences = {} unexpected_fields = [] for (exp_name, exp_value), (got_name, got_value) in zip(expected, got, strict=False): if "rlp" in exp_name or "fork" in exp_name: # ignore rlp as not verbose enough continue if exp_value != got_value: differences[exp_name] = { "expected ": str(exp_value), "got (via rpc)": str(got_value), } if got_value is None: unexpected_fields.append(got_name) return differences, unexpected_fields EXCEPTION_MAPPERS: Dict[str, ExceptionMapper] = { "go-ethereum": GethExceptionMapper(), "nethermind": NethermindExceptionMapper(), "erigon": ErigonExceptionMapper(), "besu": BesuExceptionMapper(), "reth": RethExceptionMapper(), "nimbus": NimbusExceptionMapper(), "ethereumjs": EthereumJSExceptionMapper(), "ethrex": EthrexExceptionMapper(), } ================================================ FILE: src/pytest_plugins/consume/simulators/helpers/ruleset.py ================================================ """ Fork rules for consume hive simulators. TODO: Create the ruleset dynamically per fixture test case based on the fork. Remove this file afterwards. """ from typing import Dict, List from ethereum_test_forks import ( BPO1, BPO2, BPO3, BPO4, Amsterdam, Berlin, BerlinToLondonAt5, BPO1ToBPO2AtTime15k, BPO2ToBPO3AtTime15k, BPO3ToBPO4AtTime15k, Byzantium, Cancun, CancunToPragueAtTime15k, Constantinople, ConstantinopleFix, Fork, Frontier, Homestead, Istanbul, London, Osaka, OsakaToBPO1AtTime15k, Paris, ParisToShanghaiAtTime15k, Prague, PragueToOsakaAtTime15k, Shanghai, ShanghaiToCancunAtTime15k, ) def get_blob_schedule_entries(fork: Fork) -> Dict[str, int]: """ Generate blob schedule entries for each fork (and respective parent forks). Adds the following entries to the ruleset for the given fork (and parent forks): HIVE_{FORK}_BLOB_TARGET: target_blobs_per_block() HIVE_{FORK}_BLOB_MAX: max_blobs_per_block() HIVE_{FORK}_BLOB_BASE_FEE_UPDATE_FRACTION: blob_base_fee_update_ fraction() """ entries: Dict = {} forks_with_blobs: List[Fork] = [] current_fork = fork while current_fork.supports_blobs(): forks_with_blobs.append(current_fork) current_fork = current_fork.parent() # type: ignore for fork_to_process in forks_with_blobs: prefix = fork_to_process.__name__.upper() entries[f"HIVE_{prefix}_BLOB_TARGET"] = fork_to_process.target_blobs_per_block() entries[f"HIVE_{prefix}_BLOB_MAX"] = fork_to_process.max_blobs_per_block() entries[f"HIVE_{prefix}_BLOB_BASE_FEE_UPDATE_FRACTION"] = ( fork_to_process.blob_base_fee_update_fraction() ) return entries ruleset: Dict[Fork, Dict[str, int]] = { Frontier: { "HIVE_FORK_HOMESTEAD": 2000, "HIVE_FORK_DAO_BLOCK": 2000, "HIVE_FORK_TANGERINE": 2000, "HIVE_FORK_SPURIOUS": 2000, "HIVE_FORK_BYZANTIUM": 2000, "HIVE_FORK_CONSTANTINOPLE": 2000, "HIVE_FORK_PETERSBURG": 2000, "HIVE_FORK_ISTANBUL": 2000, "HIVE_FORK_BERLIN": 2000, "HIVE_FORK_LONDON": 2000, }, Homestead: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_DAO_BLOCK": 2000, "HIVE_FORK_TANGERINE": 2000, "HIVE_FORK_SPURIOUS": 2000, "HIVE_FORK_BYZANTIUM": 2000, "HIVE_FORK_CONSTANTINOPLE": 2000, "HIVE_FORK_PETERSBURG": 2000, "HIVE_FORK_ISTANBUL": 2000, "HIVE_FORK_BERLIN": 2000, "HIVE_FORK_LONDON": 2000, }, Byzantium: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 2000, "HIVE_FORK_PETERSBURG": 2000, "HIVE_FORK_ISTANBUL": 2000, "HIVE_FORK_BERLIN": 2000, "HIVE_FORK_LONDON": 2000, }, Constantinople: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 2000, "HIVE_FORK_ISTANBUL": 2000, "HIVE_FORK_BERLIN": 2000, "HIVE_FORK_LONDON": 2000, }, ConstantinopleFix: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 2000, "HIVE_FORK_BERLIN": 2000, "HIVE_FORK_LONDON": 2000, }, Istanbul: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 2000, "HIVE_FORK_LONDON": 2000, }, Berlin: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 2000, }, BerlinToLondonAt5: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 5, }, London: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, }, Paris: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, }, Shanghai: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, }, ParisToShanghaiAtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 15000, }, Cancun: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, **get_blob_schedule_entries(Cancun), }, ShanghaiToCancunAtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 15000, **get_blob_schedule_entries(Cancun), }, Prague: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, **get_blob_schedule_entries(Prague), }, CancunToPragueAtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 15000, **get_blob_schedule_entries(Prague), }, Osaka: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, **get_blob_schedule_entries(Osaka), }, PragueToOsakaAtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 15000, **get_blob_schedule_entries(Osaka), }, BPO1: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, **get_blob_schedule_entries(BPO1), }, OsakaToBPO1AtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 15000, **get_blob_schedule_entries(BPO1), }, BPO2: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 0, **get_blob_schedule_entries(BPO2), }, BPO1ToBPO2AtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 15000, **get_blob_schedule_entries(BPO2), }, BPO3: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 0, "HIVE_BPO3_TIMESTAMP": 0, **get_blob_schedule_entries(BPO3), }, BPO2ToBPO3AtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 0, "HIVE_BPO3_TIMESTAMP": 15000, **get_blob_schedule_entries(BPO3), }, BPO4: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 0, "HIVE_BPO3_TIMESTAMP": 0, "HIVE_BPO4_TIMESTAMP": 0, **get_blob_schedule_entries(BPO4), }, BPO3ToBPO4AtTime15k: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 0, "HIVE_BPO3_TIMESTAMP": 0, "HIVE_BPO4_TIMESTAMP": 15000, **get_blob_schedule_entries(BPO4), }, Amsterdam: { "HIVE_FORK_HOMESTEAD": 0, "HIVE_FORK_TANGERINE": 0, "HIVE_FORK_SPURIOUS": 0, "HIVE_FORK_BYZANTIUM": 0, "HIVE_FORK_CONSTANTINOPLE": 0, "HIVE_FORK_PETERSBURG": 0, "HIVE_FORK_ISTANBUL": 0, "HIVE_FORK_BERLIN": 0, "HIVE_FORK_LONDON": 0, "HIVE_FORK_MERGE": 0, "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, "HIVE_SHANGHAI_TIMESTAMP": 0, "HIVE_CANCUN_TIMESTAMP": 0, "HIVE_PRAGUE_TIMESTAMP": 0, "HIVE_OSAKA_TIMESTAMP": 0, "HIVE_BPO1_TIMESTAMP": 0, "HIVE_BPO2_TIMESTAMP": 0, "HIVE_BPO3_TIMESTAMP": 0, "HIVE_BPO4_TIMESTAMP": 0, "HIVE_AMSTERDAM_TIMESTAMP": 0, **get_blob_schedule_entries(Amsterdam), }, } ================================================ FILE: src/pytest_plugins/consume/simulators/helpers/timing.py ================================================ """Test timing class used to time tests.""" import time from typing import Any, List, Self class TimingData: """ The times taken to perform the various steps of a test case (seconds). """ name: str start_time: float | None end_time: float | None parent: "TimingData | None" timings: "List[TimingData]" def __init__(self, name: str, parent: "TimingData | None" = None): """Initialize the timing data.""" self.name = name self.start_time = None self.end_time = None self.parent = parent self.timings = [] @staticmethod def format_float(num: float | None, precision: int = 4) -> str | None: """Format a float to a specific precision in significant figures.""" if num is None: return None return f"{num:.{precision}f}" def __enter__(self) -> Self: """Start timing the test case.""" self.start_time = time.perf_counter() return self def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: """Record the time taken since the last time recorded.""" self.end_time = time.perf_counter() def time(self, sub_name: str) -> "TimingData": """Record the time taken in an execution section.""" new_timing = TimingData(sub_name, self) self.timings.append(new_timing) return new_timing def formatted(self, precision: int = 4, indent: int = 0) -> str: """Recursively format the timing data with correct indentation.""" assert self.start_time is not None assert self.end_time is not None formatted = ( f"{' ' * indent}{self.name}: " f"{TimingData.format_float(self.end_time - self.start_time, precision)}\n" ) for timing in self.timings: formatted += timing.formatted(precision, indent + 2) return formatted ================================================ FILE: src/pytest_plugins/consume/simulators/rlp/__init__.py ================================================ """Consume RLP test functions.""" ================================================ FILE: src/pytest_plugins/consume/simulators/rlp/conftest.py ================================================ """Pytest fixtures and classes for the `consume rlp` hive simulator.""" import io from typing import List, Mapping, cast import pytest from ethereum_test_base_types import Bytes from ethereum_test_fixtures import BlockchainFixture from ethereum_test_fixtures.consume import TestCaseIndexFile, TestCaseStream TestCase = TestCaseIndexFile | TestCaseStream pytest_plugins = ( "pytest_plugins.pytest_hive.pytest_hive", "pytest_plugins.consume.simulators.base", "pytest_plugins.consume.simulators.single_test_client", "pytest_plugins.consume.simulators.test_case_description", "pytest_plugins.consume.simulators.timing_data", "pytest_plugins.consume.simulators.exceptions", ) def pytest_configure(config: pytest.Config) -> None: """Set the supported fixture formats for the rlp simulator.""" config.supported_fixture_formats = [BlockchainFixture] # type: ignore[attr-defined] @pytest.fixture(scope="module") def test_suite_name() -> str: """The name of the hive test suite used in this simulator.""" return "eest/consume-rlp" @pytest.fixture(scope="module") def test_suite_description() -> str: """The description of the hive test suite used in this simulator.""" return "Execute blockchain tests by providing RLP-encoded blocks to a client upon start-up." @pytest.fixture(scope="function") def blocks_rlp(fixture: BlockchainFixture) -> List[Bytes]: """List of the fixture's blocks encoded as RLP.""" return [block.rlp for block in fixture.blocks] @pytest.fixture(scope="function") def buffered_blocks_rlp(blocks_rlp: List[bytes]) -> list[io.BufferedReader]: """ Convert the RLP-encoded blocks of the current test fixture to buffered readers. """ block_rlp_files: list[io.BufferedReader] = [] for _, block_rlp in enumerate(blocks_rlp): block_rlp_stream = io.BytesIO(block_rlp) block_rlp_files.append(io.BufferedReader(cast(io.RawIOBase, block_rlp_stream))) return block_rlp_files @pytest.fixture(scope="function") def client_files( buffered_genesis: io.BufferedReader, buffered_blocks_rlp: list[io.BufferedReader], ) -> Mapping[str, io.BufferedReader]: """ Define the files that hive will start the client with. The files are specified as a dictionary whose: - Keys are the target file paths in the client's docker container, and, - Values are in-memory buffered file objects. """ files = {f"/blocks/{i + 1:04d}.rlp": rlp for i, rlp in enumerate(buffered_blocks_rlp)} files["/genesis.json"] = buffered_genesis return files ================================================ FILE: src/pytest_plugins/consume/simulators/simulator_logic/__init__.py ================================================ """Defines the Pytest test functions used by Hive Consume Simulators.""" ================================================ FILE: src/pytest_plugins/consume/simulators/simulator_logic/test_via_engine.py ================================================ """ A hive based simulator that executes blocks against clients using the `engine_newPayloadVX` method from the Engine API. The simulator uses the `BlockchainEngineFixtures` to test against clients. Each `engine_newPayloadVX` is verified against the appropriate VALID/INVALID responses. """ import time from ethereum_test_exceptions import UndefinedException from ethereum_test_fixtures import BlockchainEngineFixture from ethereum_test_rpc import EngineRPC, EthRPC from ethereum_test_rpc.rpc_types import ForkchoiceState, JSONRPCError, PayloadStatusEnum from ....custom_logging import get_logger from ..helpers.exceptions import GenesisBlockMismatchExceptionError from ..helpers.timing import TimingData logger = get_logger(__name__) MAX_RETRIES = 30 DELAY_BETWEEN_RETRIES_IN_SEC = 1 class LoggedError(Exception): """Exception that uses the logger to log the failure.""" def __init__(self, *args: object) -> None: """Initialize the exception and log the failure.""" super().__init__(*args) logger.fail(str(self)) def test_blockchain_via_engine( timing_data: TimingData, eth_rpc: EthRPC, engine_rpc: EngineRPC, fixture: BlockchainEngineFixture, strict_exception_matching: bool, ) -> None: """ 1. Check the client genesis block hash matches `fixture.genesis.block_hash`. 2. Execute the test case fixture blocks against the client under test using the `engine_newPayloadVX` method from the Engine API. 3. For valid payloads a forkchoice update is performed to finalize the chain. """ # Send a initial forkchoice update with timing_data.time("Initial forkchoice update"): logger.info("Sending initial forkchoice update to genesis block...") for attempt in range(1, MAX_RETRIES + 1): forkchoice_response = engine_rpc.forkchoice_updated( forkchoice_state=ForkchoiceState( head_block_hash=fixture.genesis.block_hash, ), payload_attributes=None, version=fixture.payloads[0].forkchoice_updated_version, ) status = forkchoice_response.payload_status.status logger.info(f"Initial forkchoice update response attempt {attempt}: {status}") if status != PayloadStatusEnum.SYNCING: break if attempt < MAX_RETRIES: time.sleep(DELAY_BETWEEN_RETRIES_IN_SEC) if forkchoice_response.payload_status.status != PayloadStatusEnum.VALID: logger.error( f"Client failed to initialize properly after {MAX_RETRIES} attempts, " f"final status: {forkchoice_response.payload_status.status}" ) raise LoggedError( f"unexpected status on forkchoice updated to genesis: {forkchoice_response}" ) with timing_data.time("Get genesis block"): logger.info("Calling getBlockByNumber to get genesis block...") genesis_block = eth_rpc.get_block_by_number(0) assert genesis_block is not None, "genesis_block is None" if genesis_block["hash"] != str(fixture.genesis.block_hash): expected = fixture.genesis.block_hash got = genesis_block["hash"] logger.fail(f"Genesis block hash mismatch. Expected: {expected}, Got: {got}") raise GenesisBlockMismatchExceptionError( expected_header=fixture.genesis, got_genesis_block=genesis_block, ) with timing_data.time("Payloads execution") as total_payload_timing: logger.info(f"Starting execution of {len(fixture.payloads)} payloads...") for i, payload in enumerate(fixture.payloads): logger.info(f"Processing payload {i + 1}/{len(fixture.payloads)}...") with total_payload_timing.time(f"Payload {i + 1}") as payload_timing: with payload_timing.time(f"engine_newPayloadV{payload.new_payload_version}"): logger.info(f"Sending engine_newPayloadV{payload.new_payload_version}...") try: payload_response = engine_rpc.new_payload( *payload.params, version=payload.new_payload_version, ) logger.info(f"Payload response status: {payload_response.status}") expected_validity = ( PayloadStatusEnum.VALID if payload.valid() else PayloadStatusEnum.INVALID ) if payload_response.status != expected_validity: raise LoggedError( f"unexpected status: want {expected_validity}," f" got {payload_response.status}" ) if payload.error_code is not None: raise LoggedError( f"Client failed to raise expected Engine API error code: " f"{payload.error_code}" ) elif payload_response.status == PayloadStatusEnum.INVALID: if payload_response.validation_error is None: raise LoggedError( "Client returned INVALID but no validation error was provided." ) if isinstance(payload_response.validation_error, UndefinedException): message = ( "Undefined exception message: " f'expected exception: "{payload.validation_error}", ' f'returned exception: "{payload_response.validation_error}" ' f'(mapper: "{payload_response.validation_error.mapper_name}")' ) if strict_exception_matching: raise LoggedError(message) else: logger.warning(message) else: if ( payload.validation_error not in payload_response.validation_error ): message = ( "Client returned unexpected validation error: " f'got: "{payload_response.validation_error}" ' f'expected: "{payload.validation_error}"' ) if strict_exception_matching: raise LoggedError(message) else: logger.warning(message) except JSONRPCError as e: logger.info(f"JSONRPC error encountered: {e.code} - {e.message}") if payload.error_code is None: raise LoggedError(f"Unexpected error: {e.code} - {e.message}") from e if e.code != payload.error_code: raise LoggedError( f"Unexpected error code: {e.code}, expected: {payload.error_code}" ) from e if payload.valid(): with payload_timing.time( f"engine_forkchoiceUpdatedV{payload.forkchoice_updated_version}" ): # Send a forkchoice update to the engine version = payload.forkchoice_updated_version logger.info(f"Sending engine_forkchoiceUpdatedV{version}...") forkchoice_response = engine_rpc.forkchoice_updated( forkchoice_state=ForkchoiceState( head_block_hash=payload.params[0].block_hash, ), payload_attributes=None, version=payload.forkchoice_updated_version, ) status = forkchoice_response.payload_status.status logger.info(f"Forkchoice update response: {status}") if forkchoice_response.payload_status.status != PayloadStatusEnum.VALID: raise LoggedError( f"unexpected status: want {PayloadStatusEnum.VALID}," f" got {forkchoice_response.payload_status.status}" ) logger.info("All payloads processed successfully.") ================================================ FILE: src/pytest_plugins/consume/simulators/simulator_logic/test_via_rlp.py ================================================ """ A hive based simulator that executes RLP-encoded blocks against clients. The simulator uses the `BlockchainFixtures` to test this against clients. Clients consume the genesis and RLP-encoded blocks from input files upon start-up. """ import logging from ethereum_test_fixtures import BlockchainFixture from ethereum_test_fixtures.blockchain import FixtureBlock, FixtureHeader from ethereum_test_rpc import EthRPC from ..helpers.exceptions import GenesisBlockMismatchExceptionError from ..helpers.timing import TimingData logger = logging.getLogger(__name__) def test_via_rlp( timing_data: TimingData, eth_rpc: EthRPC, fixture: BlockchainFixture, ) -> None: """ 1. Check the client genesis block hash matches `fixture.genesis.block_hash`. 2. Check the client last block hash matches `fixture.last_block_hash`. """ with timing_data.time("Get genesis block"): logger.info("Calling getBlockByNumber to get genesis block...") genesis_block = eth_rpc.get_block_by_number(0) assert genesis_block, "`getBlockByNumber` didn't return a block." if genesis_block["hash"] != str(fixture.genesis.block_hash): raise GenesisBlockMismatchExceptionError( expected_header=fixture.genesis, got_genesis_block=genesis_block, ) with timing_data.time("Get latest block"): logger.info("Calling getBlockByNumber to get latest block...") block = eth_rpc.get_block_by_number("latest") assert block, "`getBlockByNumber` didn't return a block." if block["hash"] != str(fixture.last_block_hash): try: block_header = FixtureHeader.model_validate(block).model_dump() last_block = FixtureBlock.model_validate(fixture.blocks[-1]) last_block_header = last_block.header.model_dump() if block_header["number"] != last_block_header["number"]: # raise with clearer message if block number mismatches raise AssertionError( f"block number mismatch in last block: got " f"`{block_header['number']}`, " f"expected `{last_block_header['number']}``" ) # find all mismatched fields mismatches = [] for block_field, block_value in block_header.items(): fixture_value = last_block_header[block_field] if str(block_value) != str(fixture_value): mismatches.append( f" {block_field}: got `{block_value}`, expected `{fixture_value}`" ) raise AssertionError( "blockHash mismatch in last block - field mismatches:" "\n" + "\n".join(mismatches) ) except Exception: raise AssertionError( f"blockHash mismatch in last block: got `{block['hash']}`, " f"expected `{fixture.last_block_hash}`" ) from None ================================================ FILE: src/pytest_plugins/consume/simulators/simulator_logic/test_via_sync.py ================================================ """ A hive based simulator that executes blocks against clients using the `engine_newPayloadV*` method from the Engine API with sync testing. The simulator uses the `BlockchainEngineSyncFixtures` to test against clients with client synchronization. This simulator: 1. Spins up two clients: one as the client under test and another as the sync client 2. Executes payloads on the client under test 3. Has the sync client synchronize from the client under test 4. Verifies that the sync was successful """ import time import pytest from ethereum_test_exceptions import UndefinedException from ethereum_test_fixtures import BlockchainEngineSyncFixture from ethereum_test_rpc import AdminRPC, EngineRPC, EthRPC, NetRPC from ethereum_test_rpc.rpc_types import ( ForkchoiceState, JSONRPCError, PayloadStatusEnum, ) from ....custom_logging import get_logger from ..helpers.exceptions import GenesisBlockMismatchExceptionError from ..helpers.timing import TimingData logger = get_logger(__name__) class LoggedError(Exception): """Exception that uses the logger to log the failure.""" def __init__(self, *args: object) -> None: """Initialize the exception and log the failure.""" super().__init__(*args) logger.fail(str(self)) def test_blockchain_via_sync( timing_data: TimingData, eth_rpc: EthRPC, engine_rpc: EngineRPC, net_rpc: NetRPC, sync_eth_rpc: EthRPC, sync_engine_rpc: EngineRPC, sync_net_rpc: NetRPC, sync_admin_rpc: AdminRPC, client_enode_url: str, fixture: BlockchainEngineSyncFixture, strict_exception_matching: bool, ) -> None: """ Test blockchain synchronization between two clients. 1. Initialize the client under test with the genesis block 2. Execute all payloads on the client under test 3. Initialize the sync client with the genesis block 4. Send sync payload and forkchoice_updated to the sync client to trigger synchronization 5. Verify that the sync client successfully syncs to the same state """ # Initialize client under test with timing_data.time("Initialize client under test"): logger.info("Initializing client under test with genesis block...") # Send initial forkchoice update to client under test delay = 0.5 for attempt in range(3): forkchoice_response = engine_rpc.forkchoice_updated( forkchoice_state=ForkchoiceState( head_block_hash=fixture.genesis.block_hash, ), payload_attributes=None, version=fixture.payloads[0].forkchoice_updated_version, ) status = forkchoice_response.payload_status.status logger.info(f"Initial forkchoice update response attempt {attempt + 1}: {status}") if status != PayloadStatusEnum.SYNCING: break if attempt < 2: time.sleep(delay) delay *= 2 if forkchoice_response.payload_status.status != PayloadStatusEnum.VALID: logger.error( f"Client under test failed to initialize properly after 3 attempts, " f"final status: {forkchoice_response.payload_status.status}" ) raise LoggedError( f"unexpected status on forkchoice updated to genesis: {forkchoice_response}" ) # Verify genesis block on client under test with timing_data.time("Verify genesis on client under test"): logger.info("Verifying genesis block on client under test...") genesis_block = eth_rpc.get_block_by_number(0) assert genesis_block is not None, "genesis_block is None" if genesis_block["hash"] != str(fixture.genesis.block_hash): expected = fixture.genesis.block_hash got = genesis_block["hash"] logger.fail(f"Genesis block hash mismatch. Expected: {expected}, Got: {got}") raise GenesisBlockMismatchExceptionError( expected_header=fixture.genesis, got_genesis_block=genesis_block, ) # Execute all payloads on client under test last_valid_block_hash = fixture.genesis.block_hash with timing_data.time("Execute payloads on client under test") as total_payload_timing: logger.info(f"Starting execution of {len(fixture.payloads)} payloads...") for i, payload in enumerate(fixture.payloads): logger.info(f"Processing payload {i + 1}/{len(fixture.payloads)}...") with total_payload_timing.time(f"Payload {i + 1}") as payload_timing: with payload_timing.time(f"engine_newPayloadV{payload.new_payload_version}"): logger.info(f"Sending engine_newPayloadV{payload.new_payload_version}...") # Note: This is similar to the logic in test_via_engine.py try: payload_response = engine_rpc.new_payload( *payload.params, version=payload.new_payload_version, ) logger.info(f"Payload response status: {payload_response.status}") expected_validity = ( PayloadStatusEnum.VALID if payload.valid() else PayloadStatusEnum.INVALID ) if payload_response.status != expected_validity: raise LoggedError( f"unexpected status: want {expected_validity}," f" got {payload_response.status}" ) if payload.error_code is not None: raise LoggedError( f"Client failed to raise expected Engine API error code: " f"{payload.error_code}" ) elif payload_response.status == PayloadStatusEnum.INVALID: if payload_response.validation_error is None: raise LoggedError( "Client returned INVALID but no validation error was provided." ) if isinstance(payload_response.validation_error, UndefinedException): message = ( "Undefined exception message: " f'expected exception: "{payload.validation_error}", ' f'returned exception: "{payload_response.validation_error}" ' f'(mapper: "{payload_response.validation_error.mapper_name}")' ) if strict_exception_matching: raise LoggedError(message) else: logger.warning(message) else: if ( payload.validation_error not in payload_response.validation_error ): message = ( "Client returned unexpected validation error: " f'got: "{payload_response.validation_error}" ' f'expected: "{payload.validation_error}"' ) if strict_exception_matching: raise LoggedError(message) else: logger.warning(message) except JSONRPCError as e: logger.info(f"JSONRPC error encountered: {e.code} - {e.message}") if payload.error_code is None: raise LoggedError(f"Unexpected error: {e.code} - {e.message}") from e if e.code != payload.error_code: raise LoggedError( f"Unexpected error code: {e.code}, expected: {payload.error_code}" ) from e if payload.valid(): with payload_timing.time( f"engine_forkchoiceUpdatedV{payload.forkchoice_updated_version}" ): # Send a forkchoice update to the engine version = payload.forkchoice_updated_version logger.info(f"Sending engine_forkchoiceUpdatedV{version}...") forkchoice_response = engine_rpc.forkchoice_updated( forkchoice_state=ForkchoiceState( head_block_hash=payload.params[0].block_hash, ), payload_attributes=None, version=payload.forkchoice_updated_version, ) status = forkchoice_response.payload_status.status logger.info(f"Forkchoice update response: {status}") if forkchoice_response.payload_status.status != PayloadStatusEnum.VALID: raise LoggedError( f"unexpected status: want {PayloadStatusEnum.VALID}," f" got {forkchoice_response.payload_status.status}" ) last_valid_block_hash = payload.params[0].block_hash logger.info("All payloads processed successfully on client under test.") # sync_payload creates the final block that the sync client will sync to if not fixture.sync_payload: pytest.fail("Sync tests require a syncPayload that is not present in this test.") with timing_data.time("Send sync payload to client under test"): logger.info("Sending sync payload (empty block) to client under test...") try: sync_response = engine_rpc.new_payload( *fixture.sync_payload.params, version=fixture.sync_payload.new_payload_version, ) logger.info(f"Client sync payload response status: {sync_response.status}") if sync_response.status == PayloadStatusEnum.VALID: # Update forkchoice on client under test to include sync block forkchoice_response = engine_rpc.forkchoice_updated( forkchoice_state=ForkchoiceState( head_block_hash=fixture.sync_payload.params[0].block_hash, ), payload_attributes=None, version=fixture.sync_payload.forkchoice_updated_version, ) status = forkchoice_response.payload_status.status logger.info(f"Client forkchoice update to sync block: {status}") last_valid_block_hash = fixture.sync_payload.params[0].block_hash else: logger.error(f"Sync payload was not valid: {sync_response.status}") raise LoggedError(f"Sync payload validation failed: {sync_response.status}") except JSONRPCError as e: logger.error( f"Error sending sync payload to client under test: {e.code} - {e.message}" ) raise # Initialize sync client with timing_data.time("Initialize sync client"): logger.info("Initializing sync client with genesis block...") # Send initial forkchoice update to sync client delay = 0.5 for attempt in range(3): forkchoice_response = sync_engine_rpc.forkchoice_updated( forkchoice_state=ForkchoiceState( head_block_hash=fixture.genesis.block_hash, ), payload_attributes=None, version=fixture.payloads[0].forkchoice_updated_version, ) status = forkchoice_response.payload_status.status logger.info(f"Sync client forkchoice update response attempt {attempt + 1}: {status}") if status != PayloadStatusEnum.SYNCING: break if attempt < 2: time.sleep(delay) delay *= 2 if forkchoice_response.payload_status.status != PayloadStatusEnum.VALID: logger.error( f"Sync client failed to initialize properly after 3 attempts, " f"final status: {forkchoice_response.payload_status.status}" ) raise LoggedError( f"Unexpected status on sync client forkchoice updated to genesis: " f"{forkchoice_response}" ) # Add peer using admin_addPeer This seems to be required... TODO: we can # maybe improve flow here if not required logger.info(f"Adding peer: {client_enode_url}") assert sync_admin_rpc is not None, "sync_admin_rpc is required" try: add_result = sync_admin_rpc.add_peer(client_enode_url) logger.info(f"admin_addPeer result: {add_result}") except Exception as e: raise LoggedError(f"admin_addPeer failed: {e}") from e # quick sleep to allow for connection - TODO: is this necessary? time.sleep(1) try: sync_peer_count = sync_net_rpc.peer_count() client_peer_count = net_rpc.peer_count() logger.info( f"Peer count: sync_client={sync_peer_count}, client_under_test={client_peer_count}" ) if sync_peer_count == 0 and client_peer_count == 0: raise LoggedError("No P2P connection established between clients") except Exception as e: logger.warning(f"Could not verify peer connection: {e}") # Trigger sync by sending the target block via newPayload followed by # forkchoice update logger.info(f"Triggering sync to block {last_valid_block_hash}") # Find the last valid payload to send to sync client last_valid_payload = None if fixture.sync_payload and last_valid_block_hash == fixture.sync_payload.params[0].block_hash: last_valid_payload = fixture.sync_payload else: # Find the payload that matches last_valid_block_hash for payload in fixture.payloads: if payload.params[0].block_hash == last_valid_block_hash and payload.valid(): last_valid_payload = payload break if last_valid_payload: last_valid_block_forkchoice_state = ForkchoiceState( head_block_hash=last_valid_block_hash, safe_block_hash=last_valid_block_hash, finalized_block_hash=fixture.genesis.block_hash, ) try: # log version used for debugging version = last_valid_payload.new_payload_version logger.info(f"Sending target payload via engine_newPayloadV{version}") # send the payload to sync client assert sync_engine_rpc is not None, "sync_engine_rpc is required" sync_payload_response = sync_engine_rpc.new_payload( *last_valid_payload.params, version=last_valid_payload.new_payload_version, ) logger.info(f"Sync client newPayload response: {sync_payload_response.status}") # send forkchoice update pointing to latest block logger.info("Sending forkchoice update with last valid block to trigger sync...") sync_forkchoice_response = sync_engine_rpc.forkchoice_updated( forkchoice_state=last_valid_block_forkchoice_state, payload_attributes=None, version=last_valid_payload.forkchoice_updated_version, ) status = sync_forkchoice_response.payload_status.status logger.info(f"Sync trigger forkchoice response: {status}") if sync_forkchoice_response.payload_status.status == PayloadStatusEnum.SYNCING: logger.info("Sync client is now syncing!") elif sync_forkchoice_response.payload_status.status == PayloadStatusEnum.ACCEPTED: logger.info("Sync client accepted the block, may start syncing ancestors") # Give a moment for P2P connections to establish after sync starts time.sleep(1) # Check peer count after triggering sync Note: Reth does not # actually raise the peer count but doesn't seem to need this to # sync. try: assert sync_net_rpc is not None, "sync_net_rpc is required" client_peer_count = net_rpc.peer_count() sync_peer_count = sync_net_rpc.peer_count() if sync_peer_count > 0 or client_peer_count > 0: logger.debug( f"Peers connected: client_under_test={client_peer_count}, " f"sync_client={sync_peer_count}" ) except Exception as e: logger.debug(f"Could not check peer count: {e}") except Exception as e: logger.warning(f"Failed to trigger sync with newPayload/forkchoice update: {e}") else: logger.warning( f"Could not find payload for block {last_valid_block_hash} to send to sync client" ) # Wait for synchronization with continuous forkchoice updates with timing_data.time("Wait for synchronization"): # Get the target block number for logging target_block = eth_rpc.get_block_by_hash(last_valid_block_hash) target_block_number = int(target_block["number"], 16) if target_block else "unknown" logger.info( f"Waiting for sync client to reach block #{target_block_number} " f"(hash: {last_valid_block_hash})" ) # Start monitoring sync progress sync_start_time = time.time() last_forkchoice_time = time.time() forkchoice_interval = 2.0 # Send forkchoice updates every 2 seconds while time.time() - sync_start_time < 15: # 15 second timeout # Send periodic forkchoice updates to keep sync alive if time.time() - last_forkchoice_time >= forkchoice_interval: try: # Send forkchoice update to sync client to trigger/maintain # sync assert sync_engine_rpc is not None, "sync_engine_rpc is required" sync_fc_response = sync_engine_rpc.forkchoice_updated( forkchoice_state=last_valid_block_forkchoice_state, payload_attributes=None, version=fixture.sync_payload.forkchoice_updated_version if fixture.sync_payload else fixture.payloads[-1].forkchoice_updated_version, ) status = sync_fc_response.payload_status.status logger.debug(f"Periodic forkchoice update status: {status}") if status.VALID: break last_forkchoice_time = time.time() except Exception as fc_err: logger.debug(f"Periodic forkchoice update failed: {fc_err}") time.sleep(0.5) else: raise LoggedError( f"Sync client failed to synchronize to block {last_valid_block_hash} " f"within timeout" ) logger.info("Sync verification successful!") # Verify the final state but give a few tries assert eth_rpc is not None, "eth_rpc is required" assert sync_eth_rpc is not None, "sync_eth_rpc is required" for attempt in range(5): try: sync_block = sync_eth_rpc.get_block_by_hash(last_valid_block_hash) client_block = eth_rpc.get_block_by_hash(last_valid_block_hash) if sync_block is None or client_block is None: raise LoggedError( f"Failed to retrieve block {last_valid_block_hash} " f"on attempt {attempt + 1}" ) if sync_block["stateRoot"] != client_block["stateRoot"]: raise LoggedError( f"State root mismatch after sync. " f"Sync client: {sync_block['stateRoot']}, " f"Client under test: {client_block['stateRoot']}" ) if fixture.post_state_hash: if sync_block["stateRoot"] != str(fixture.post_state_hash): raise LoggedError( f"Final state root mismatch. " f"Expected: {fixture.post_state_hash}, " f"Got: {sync_block['stateRoot']}" ) break except Exception as e: if attempt < 4: time.sleep(1) continue raise e logger.info("Sync test completed successfully!") ================================================ FILE: src/pytest_plugins/consume/simulators/single_test_client.py ================================================ """ Common pytest fixtures for simulators with single-test client architecture. """ import io import json import logging from typing import Generator, Literal, cast import pytest from hive.client import Client, ClientType from hive.testing import HiveTest from ethereum_test_base_types import Number, to_json from ethereum_test_fixtures import BlockchainFixtureCommon from ethereum_test_fixtures.blockchain import FixtureHeader from .helpers.ruleset import ( ruleset, # TODO: generate dynamically ) from .helpers.timing import TimingData logger = logging.getLogger(__name__) @pytest.fixture(scope="function") def client_genesis(fixture: BlockchainFixtureCommon) -> dict: """ Convert the fixture genesis block header and pre-state to a client genesis state. """ genesis = to_json(fixture.genesis) alloc = to_json(fixture.pre) # NOTE: nethermind requires account keys without '0x' prefix genesis["alloc"] = {k.replace("0x", ""): v for k, v in alloc.items()} return genesis @pytest.fixture(scope="function") def environment( fixture: BlockchainFixtureCommon, check_live_port: Literal[8545, 8551], ) -> dict: """Define the environment that hive will start the client with.""" assert fixture.fork in ruleset, f"fork '{fixture.fork}' missing in hive ruleset" chain_id = str(Number(fixture.config.chain_id)) return { "HIVE_CHAIN_ID": chain_id, "HIVE_NETWORK_ID": chain_id, # Use same value for P2P network compatibility "HIVE_FORK_DAO_VOTE": "1", "HIVE_NODETYPE": "full", "HIVE_CHECK_LIVE_PORT": str(check_live_port), **{k: f"{v:d}" for k, v in ruleset[fixture.fork].items()}, } @pytest.fixture(scope="function") def buffered_genesis(client_genesis: dict) -> io.BufferedReader: """ Create a buffered reader for the genesis block header of the current test fixture. """ genesis_json = json.dumps(client_genesis) genesis_bytes = genesis_json.encode("utf-8") return io.BufferedReader(cast(io.RawIOBase, io.BytesIO(genesis_bytes))) @pytest.fixture(scope="function") def genesis_header(fixture: BlockchainFixtureCommon) -> FixtureHeader: """Provide the genesis header from the shared pre-state group.""" return fixture.genesis @pytest.fixture(scope="function") def client( hive_test: HiveTest, client_files: dict, # configured within: rlp/conftest.py & engine/conftest.py environment: dict, client_type: ClientType, total_timing_data: TimingData, ) -> Generator[Client, None, None]: """ Initialize the client with the appropriate files and environment variables. """ logger.info(f"Starting client ({client_type.name})...") logger.debug(f"Main client Network ID: {environment.get('HIVE_NETWORK_ID', 'NOT SET!')}") logger.debug(f"Main client Chain ID: {environment.get('HIVE_CHAIN_ID', 'NOT SET!')}") with total_timing_data.time("Start client"): client = hive_test.start_client( client_type=client_type, environment=environment, files=client_files ) error_message = ( f"Unable to connect to the client container ({client_type.name}) via Hive during test " "setup. Check the client or Hive server logs for more information." ) assert client is not None, error_message logger.info(f"Client ({client_type.name}) ready!") yield client logger.info(f"Stopping client ({client_type.name})...") with total_timing_data.time("Stop client"): client.stop() logger.info(f"Client ({client_type.name}) stopped!") ================================================ FILE: src/pytest_plugins/consume/simulators/sync/__init__.py ================================================ """Consume Sync test functions.""" ================================================ FILE: src/pytest_plugins/consume/simulators/sync/conftest.py ================================================ """ Pytest fixtures for the `consume sync` simulator. Configures the hive back-end & EL clients for each individual test execution. """ import io import json from typing import Dict, Generator, Mapping, cast import pytest from hive.client import Client, ClientType from hive.testing import HiveTest from ethereum_test_base_types import to_json from ethereum_test_exceptions import ExceptionMapper from ethereum_test_fixtures import BlockchainEngineSyncFixture from ethereum_test_rpc import AdminRPC, EngineRPC, EthRPC, NetRPC pytest_plugins = ( "pytest_plugins.pytest_hive.pytest_hive", "pytest_plugins.consume.simulators.base", "pytest_plugins.consume.simulators.single_test_client", "pytest_plugins.consume.simulators.test_case_description", "pytest_plugins.consume.simulators.timing_data", "pytest_plugins.consume.simulators.exceptions", ) def pytest_configure(config: pytest.Config) -> None: """Set the supported fixture formats for the engine sync simulator.""" config.supported_fixture_formats = [BlockchainEngineSyncFixture] # type: ignore[attr-defined] def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """Parametrize sync_client_type separately from client_type.""" if "sync_client_type" in metafunc.fixturenames: client_ids = [f"sync_{client.name}" for client in metafunc.config.hive_execution_clients] # type: ignore[attr-defined] metafunc.parametrize( "sync_client_type", metafunc.config.hive_execution_clients, # type: ignore[attr-defined] ids=client_ids, ) @pytest.hookimpl(trylast=True) def pytest_collection_modifyitems( session: pytest.Session, config: pytest.Config, items: list[pytest.Item] ) -> None: """Modify test IDs to show both client and sync client clearly.""" del session, config for item in items: # Auto-mark all verify_sync tests as flaky with 3 reruns if item.get_closest_marker("blockchain_test_sync"): item.add_marker(pytest.mark.flaky(reruns=3)) # Check if this test has both client_type and sync_client_type if ( hasattr(item, "callspec") and "client_type" in item.callspec.params and "sync_client_type" in item.callspec.params ): # Get the client names and remove fork suffix if present client_name = item.callspec.params["client_type"].name.replace("-", "_") sync_client_name = item.callspec.params["sync_client_type"].name.replace("-", "_") # Format: ``-{client}_sync_{sync_client}`` new_suffix = f"-{client_name}::sync_{sync_client_name}" # client_param- # tests/path/to/test.py::test_name[test_params]-sync_client_param # 1. Remove the client prefix from the beginning # 2. Replace the -client_param part at the end with our new format nodeid = item.nodeid prefix_index = item.nodeid.find("-tests/") if prefix_index != -1: nodeid = item.nodeid[prefix_index + 1 :] # Find the last hyphen followed by client name pattern and replace if "-" in nodeid: # Split by the last hyphen to separate the client suffix parts = nodeid.rsplit("]-", 1) assert len(parts) == 2, ( # expect "..._end_of_test]-client_name" suffix... f"Unexpected format to parse client name: {nodeid}" ) base = parts[0] if base.endswith("sync_test"): # Insert suffix before the closing bracket base = base + new_suffix + "]" item._nodeid = base else: item._nodeid = base + new_suffix @pytest.fixture(scope="function") def engine_rpc(client: Client, client_exception_mapper: ExceptionMapper | None) -> EngineRPC: """Initialize engine RPC client for the execution client under test.""" if client_exception_mapper: return EngineRPC( f"http://{client.ip}:8551", response_validation_context={ "exception_mapper": client_exception_mapper, }, ) return EngineRPC(f"http://{client.ip}:8551") @pytest.fixture(scope="function") def eth_rpc(client: Client) -> EthRPC: """Initialize eth RPC client for the execution client under test.""" return EthRPC(f"http://{client.ip}:8545") @pytest.fixture(scope="function") def net_rpc(client: Client) -> NetRPC: """Initialize net RPC client for the execution client under test.""" return NetRPC(f"http://{client.ip}:8545") @pytest.fixture(scope="function") def admin_rpc(client: Client) -> AdminRPC: """Initialize admin RPC client for the execution client under test.""" return AdminRPC(f"http://{client.ip}:8545") @pytest.fixture(scope="function") def sync_genesis(fixture: BlockchainEngineSyncFixture) -> Dict: """ Convert the fixture genesis block header and pre-state to a sync client genesis state. """ genesis = to_json(fixture.genesis) alloc = to_json(fixture.pre) # NOTE: nethermind requires account keys without '0x' prefix genesis["alloc"] = {k.replace("0x", ""): v for k, v in alloc.items()} return genesis @pytest.fixture(scope="function") def sync_buffered_genesis(sync_genesis: Dict) -> io.BufferedReader: """ Create a buffered reader for the genesis block header of the sync client. """ genesis_json = json.dumps(sync_genesis) genesis_bytes = genesis_json.encode("utf-8") return io.BufferedReader(cast(io.RawIOBase, io.BytesIO(genesis_bytes))) @pytest.fixture(scope="function") def sync_client_files(sync_buffered_genesis: io.BufferedReader) -> Mapping[str, io.BufferedReader]: """Define the files that hive will start the sync client with.""" files = {} files["/genesis.json"] = sync_buffered_genesis return files @pytest.fixture(scope="function") def client_enode_url(client: Client) -> str: """Get the enode URL from the client under test.""" import logging logger = logging.getLogger(__name__) enode = client.enode() logger.info(f"Client enode object: {enode}") # Build the enode URL string with container IP enode_url = f"enode://{enode.id}@{client.ip}:{enode.port}" logger.info(f"Client enode URL: {enode_url}") return enode_url @pytest.fixture(scope="function") def sync_client( hive_test: HiveTest, sync_client_files: Dict, environment: Dict, sync_client_type: ClientType, # Separate parametrization for sync client client_enode_url: str, # Get the enode URL from fixture ) -> Generator[Client, None, None]: """Start a sync client that will sync from the client under test.""" import logging logger = logging.getLogger(__name__) logger.info(f"Starting sync client setup for {sync_client_type.name}") # Start with the same environment as the main client sync_environment = environment.copy() # Only override what's necessary for sync client sync_environment["HIVE_MINER"] = "" # Disable mining on sync client # Set bootnode even though we also use admin_addPeer # Some clients use this for initial P2P configuration sync_environment["HIVE_BOOTNODE"] = client_enode_url # Ensure both network and chain IDs are properly set if "HIVE_NETWORK_ID" not in sync_environment and "HIVE_CHAIN_ID" in sync_environment: # Some clients need explicit HIVE_NETWORK_ID sync_environment["HIVE_NETWORK_ID"] = sync_environment["HIVE_CHAIN_ID"] logger.info(f"Starting sync client ({sync_client_type.name})") logger.info(f" Network ID: {sync_environment.get('HIVE_NETWORK_ID', 'NOT SET!')}") logger.info(f" Chain ID: {sync_environment.get('HIVE_CHAIN_ID', 'NOT SET!')}") # Debug: log all HIVE_ variables hive_vars = {k: v for k, v in sync_environment.items() if k.startswith("HIVE_")} logger.debug(f"All HIVE_ environment variables: {hive_vars}") # Use the separately parametrized sync client type sync_client = hive_test.start_client( client_type=sync_client_type, environment=sync_environment, files=sync_client_files, ) error_message = ( f"Unable to start sync client ({sync_client_type.name}) via Hive. " "Check the client or Hive server logs for more information." ) assert sync_client is not None, error_message logger.info(f"Sync client ({sync_client_type.name}) started with IP: {sync_client.ip}") yield sync_client # Cleanup sync_client.stop() @pytest.fixture(scope="function") def sync_client_exception_mapper( sync_client_type: ClientType, client_exception_mapper_cache: Dict[str, ExceptionMapper | None] ) -> ExceptionMapper | None: """Return the exception mapper for the sync client type, with caching.""" if sync_client_type.name not in client_exception_mapper_cache: from ..exceptions import EXCEPTION_MAPPERS for client in EXCEPTION_MAPPERS: if client in sync_client_type.name: client_exception_mapper_cache[sync_client_type.name] = EXCEPTION_MAPPERS[client] break else: client_exception_mapper_cache[sync_client_type.name] = None return client_exception_mapper_cache[sync_client_type.name] @pytest.fixture(scope="function") def sync_engine_rpc( sync_client: Client, sync_client_exception_mapper: ExceptionMapper | None ) -> EngineRPC: """Initialize engine RPC client for the sync client.""" if sync_client_exception_mapper: return EngineRPC( f"http://{sync_client.ip}:8551", response_validation_context={ "exception_mapper": sync_client_exception_mapper, }, ) return EngineRPC(f"http://{sync_client.ip}:8551") @pytest.fixture(scope="function") def sync_eth_rpc(sync_client: Client) -> EthRPC: """Initialize eth RPC client for the sync client.""" return EthRPC(f"http://{sync_client.ip}:8545") @pytest.fixture(scope="function") def sync_net_rpc(sync_client: Client) -> NetRPC: """Initialize net RPC client for the sync client.""" return NetRPC(f"http://{sync_client.ip}:8545") @pytest.fixture(scope="function") def sync_admin_rpc(sync_client: Client) -> AdminRPC: """Initialize admin RPC client for the sync client.""" return AdminRPC(f"http://{sync_client.ip}:8545") @pytest.fixture(scope="module") def test_suite_name() -> str: """The name of the hive test suite used in this simulator.""" return "eest/consume-sync" @pytest.fixture(scope="module") def test_suite_description() -> str: """The description of the hive test suite used in this simulator.""" return "Execute blockchain sync tests against clients using the Engine API." @pytest.fixture(scope="function") def client_files(buffered_genesis: io.BufferedReader) -> Mapping[str, io.BufferedReader]: """Define the files that hive will start the client with.""" files = {} files["/genesis.json"] = buffered_genesis return files ================================================ FILE: src/pytest_plugins/consume/simulators/test_case_description.py ================================================ """ Pytest fixtures that help create the test case "Description" displayed in the Hive UI. """ import logging import textwrap import urllib import warnings from typing import List import pytest from hive.client import ClientType from ethereum_test_fixtures import BaseFixture from ethereum_test_fixtures.consume import TestCaseIndexFile, TestCaseStream from ...pytest_hive.hive_info import ClientFile, HiveInfo logger = logging.getLogger(__name__) @pytest.fixture(scope="function") def hive_clients_yaml_target_filename() -> str: """Return the name of the target clients YAML file.""" return "clients_eest.yaml" @pytest.fixture(scope="function") def hive_clients_yaml_generator_command( client_type: ClientType, client_file: ClientFile, hive_clients_yaml_target_filename: str, hive_info: HiveInfo, ) -> str: """ Generate a shell command that creates a clients YAML file for the current client. """ try: if not client_file: raise ValueError("No client information available - try updating hive") client_config = [c for c in client_file.root if c.client in client_type.name] if not client_config: raise ValueError(f"Client '{client_type.name}' not found in client file") try: yaml_content = ClientFile(root=[client_config[0]]).yaml().replace(" ", " ") return f'echo "\\\n{yaml_content}" > {hive_clients_yaml_target_filename}' except Exception as e: raise ValueError(f"Failed to generate YAML: {str(e)}") from e except ValueError as e: error_message = str(e) warnings.warn( f"{error_message}. The Hive clients YAML generator command will not be available.", stacklevel=2, ) issue_title = f"Client {client_type.name} configuration issue" issue_body = f"Error: {error_message}\nHive version: {hive_info.commit}\n" issue_url = f"https://github.com/ethereum/execution-spec-tests/issues/new?title={urllib.parse.quote(issue_title)}&body={urllib.parse.quote(issue_body)}" return ( f"Error: {error_message}\n" f'Please create an issue to report this problem.' ) @pytest.fixture(scope="function") def filtered_hive_options(hive_info: HiveInfo) -> List[str]: """Filter Hive command options to remove unwanted options.""" logger.info("Hive info: %s", hive_info.command) unwanted_options = [ "--client", # gets overwritten: we specify a single client; the one # from the test case "--client-file", # gets overwritten: we'll write our own client file "--results-root", # use default value instead (or you have to pass it # to ./hiveview) "--sim.limit", # gets overwritten: we only run the current test case # id "--sim.parallelism", # skip; we'll only be running a single test ] command_parts = [] skip_next = False for part in hive_info.command: if skip_next: skip_next = False continue if part in unwanted_options: skip_next = True continue if any(part.startswith(f"{option}=") for option in unwanted_options): continue command_parts.append(part) return command_parts @pytest.fixture(scope="function") def hive_client_config_file_parameter(hive_clients_yaml_target_filename: str) -> str: """Return the hive client config file parameter.""" return f"--client-file {hive_clients_yaml_target_filename}" @pytest.fixture(scope="function") def hive_consume_command( test_case: TestCaseIndexFile | TestCaseStream, hive_client_config_file_parameter: str, filtered_hive_options: List[str], client_type: ClientType, ) -> str: """Command to run the test within hive.""" command_parts = filtered_hive_options.copy() command_parts.append(f"{hive_client_config_file_parameter}") command_parts.append(f"--client={client_type.name}") command_parts.append(f'--sim.limit="id:{test_case.id}"') return " ".join(command_parts) @pytest.fixture(scope="function") def hive_dev_command( client_type: ClientType, hive_client_config_file_parameter: str, ) -> str: """ Return the command used to instantiate hive alongside the `consume` command. """ return f"./hive --dev {hive_client_config_file_parameter} --client {client_type.name}" @pytest.fixture(scope="function") def eest_consume_command( test_suite_name: str, test_case: TestCaseIndexFile | TestCaseStream, fixture_source_flags: List[str], ) -> str: """Commands to run the test within EEST using a hive dev back-end.""" flags = " ".join(fixture_source_flags) return ( f"uv run consume {test_suite_name.split('-')[-1]} " f'{flags} --sim.limit="id:{test_case.id}" -v -s' ) @pytest.fixture(scope="function") def test_case_description( fixture: BaseFixture, test_case: TestCaseIndexFile | TestCaseStream, hive_clients_yaml_generator_command: str, hive_consume_command: str, hive_dev_command: str, eest_consume_command: str, ) -> str: """Create the description of the current blockchain fixture test case.""" test_url = fixture.info.get("url", "") if "description" not in fixture.info or fixture.info["description"] is None: test_docstring = "No documentation available." else: # this prefix was included in the fixture description field for # fixtures <= v4.3.0 test_docstring = fixture.info["description"].replace("Test function documentation:\n", "") # type: ignore description = textwrap.dedent(f""" Test Details {test_case.id} {f'[source]' if test_url else ""} {test_docstring} Run This Test Locally: To run this test in hive : {hive_clients_yaml_generator_command} {hive_consume_command} Advanced: Run the test against a hive developer backend using EEST's consume command Create the client YAML file, as above, then: 1. Start hive in dev mode: {hive_dev_command} 2. In the EEST repository root: {eest_consume_command} """) description = description.strip() description = description.replace("\n", "
") return description ================================================ FILE: src/pytest_plugins/consume/simulators/timing_data.py ================================================ """Pytest plugin that helps measure and log timing data in Hive simulators.""" from typing import Generator import pytest import rich from hive.client import Client from .helpers.timing import TimingData def pytest_addoption(parser: pytest.Parser) -> None: """Hive simulator specific consume command line options.""" consume_group = parser.getgroup( "consume", "Arguments related to consuming fixtures via a client" ) consume_group.addoption( "--timing-data", action="store_true", dest="timing_data", default=False, help="Log the timing data for each test case execution.", ) @pytest.fixture(scope="function", autouse=True) def total_timing_data(request: pytest.FixtureRequest) -> Generator[TimingData, None, None]: """Record timing data for various stages of executing test case.""" with TimingData("Total (seconds)") as total_timing_data: yield total_timing_data if request.config.getoption("timing_data"): rich.print(f"\n{total_timing_data.formatted()}") if hasattr(request.node, "rep_call"): # make available for test reports request.node.rep_call.timings = total_timing_data @pytest.fixture(scope="function", autouse=True) def timing_data( total_timing_data: TimingData, client: Client ) -> Generator[TimingData, None, None]: """Record timing data for the main execution of the test case.""" del client with total_timing_data.time("Test case execution") as timing_data: yield timing_data ================================================ FILE: src/pytest_plugins/consume/tests/__init__.py ================================================ """Tests for the consume plugin.""" ================================================ FILE: src/pytest_plugins/consume/tests/release_information.json ================================================ [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/192140551", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/192140551/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/192140551/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-5%40v1.0.0", "id": 192140551, "author": { "login": "marioevz", "id": 11726710, "node_id": "MDQ6VXNlcjExNzI2NzEw", "avatar_url": "https://avatars.githubusercontent.com/u/11726710?v=4", "gravatar_id": "", "url": "https://api.github.com/users/marioevz", "html_url": "https://github.com/marioevz", "followers_url": "https://api.github.com/users/marioevz/followers", "following_url": "https://api.github.com/users/marioevz/following{/other_user}", "gists_url": "https://api.github.com/users/marioevz/gists{/gist_id}", "starred_url": "https://api.github.com/users/marioevz/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/marioevz/subscriptions", "organizations_url": "https://api.github.com/users/marioevz/orgs", "repos_url": "https://api.github.com/users/marioevz/repos", "events_url": "https://api.github.com/users/marioevz/events{/privacy}", "received_events_url": "https://api.github.com/users/marioevz/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84Lc9UH", "tag_name": "pectra-devnet-5@v1.0.0", "target_commitish": "main", "name": "pectra-devnet-5@v1.0.0", "draft": false, "prerelease": true, "created_at": "2024-12-23T13:58:57Z", "published_at": "2024-12-23T17:47:33Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/215394109", "id": 215394109, "node_id": "RA_kwDOIQGLK84M1qc9", "name": "fixtures_pectra-devnet-5.tar.gz", "label": null, "uploader": { "login": "marioevz", "id": 11726710, "node_id": "MDQ6VXNlcjExNzI2NzEw", "avatar_url": "https://avatars.githubusercontent.com/u/11726710?v=4", "gravatar_id": "", "url": "https://api.github.com/users/marioevz", "html_url": "https://github.com/marioevz", "followers_url": "https://api.github.com/users/marioevz/followers", "following_url": "https://api.github.com/users/marioevz/following{/other_user}", "gists_url": "https://api.github.com/users/marioevz/gists{/gist_id}", "starred_url": "https://api.github.com/users/marioevz/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/marioevz/subscriptions", "organizations_url": "https://api.github.com/users/marioevz/orgs", "repos_url": "https://api.github.com/users/marioevz/repos", "events_url": "https://api.github.com/users/marioevz/events{/privacy}", "received_events_url": "https://api.github.com/users/marioevz/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 53020980, "download_count": 10, "created_at": "2024-12-23T17:37:55Z", "updated_at": "2024-12-23T17:38:02Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-5%40v1.0.0/fixtures_pectra-devnet-5.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-5@v1.0.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-5@v1.0.0", "body": "First EEST pre-release for Pectra Devnet-5.\r\n\r\n## Execution Layer EIP List for pectra-devnet-5\r\n\r\nThe list below links the specific commit versions of the EIPs included in devnet-5 and in this release: \r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/lightclient/EIPs/blob/4d485ae63022f60824bafdc715c049b8510d76eb/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable withdrawals](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-7251.md)\r\n- [EIP-7623: Increase calldata cost](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-7623.md) - :exclamation: new EIP\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-7685.md)\r\n- [EIP-7691: Blob throughput increase](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-7691.md) :exclamation: new EIP\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/e8ce6c1d95a6901505fcf2d4ada4245feb69ea7e/EIPS/eip-7702.md)\r\n\r\n## Breaking Changes\r\n\r\n#### Transaction Tests\r\n\r\nNew test format is included in this release called [Transaction Tests](https://eest.ethereum.org/main/consuming_tests/transaction_test/).\r\n\r\nThe fixtures of this type are included in folder `./fixtures/transaction_tests/`.\r\n\r\n### Important Notes\r\nNone" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/190023984", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/190023984/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/190023984/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.9-alpha-1", "id": 190023984, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84LU4kw", "tag_name": "verkle@v0.0.9-alpha-1", "target_commitish": "main", "name": "verkle@v0.0.9-alpha-1", "draft": false, "prerelease": true, "created_at": "2024-12-10T16:03:56Z", "published_at": "2024-12-10T18:01:25Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/212429636", "id": 212429636, "node_id": "RA_kwDOIQGLK84MqWtE", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 380857, "download_count": 1, "created_at": "2024-12-10T17:59:15Z", "updated_at": "2024-12-10T17:59:15Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.9-alpha-1/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/212429637", "id": 212429637, "node_id": "RA_kwDOIQGLK84MqWtF", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3161837, "download_count": 5, "created_at": "2024-12-10T17:59:15Z", "updated_at": "2024-12-10T17:59:15Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.9-alpha-1/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.9-alpha-1", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.9-alpha-1", "body": "**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.8...verkle@v0.0.9-alpha-1" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/188166169", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/188166169/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/188166169/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v2.1.0", "id": 188166169, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84LNzAZ", "tag_name": "eip7692@v2.1.0", "target_commitish": "main", "name": "eip7692@v2.1.0", "draft": false, "prerelease": true, "created_at": "2024-11-27T13:42:33Z", "published_at": "2024-11-29T10:15:52Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/209848063", "id": 209848063, "node_id": "RA_kwDOIQGLK84Mggb_", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 35294190, "download_count": 126, "created_at": "2024-11-29T09:32:05Z", "updated_at": "2024-11-29T09:32:06Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v2.1.0/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v2.1.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v2.1.0", "body": "## What's Changed (Only EOF-relevant changes listed)\r\n\r\n* new(tests): EOF - EIP-4750: Stack validation in CALLF by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/889\r\n* new(tests): EOF - EIP-5450: RJUMP* vs CALLF tests by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/833\r\n* bug(tests) - CALLF rule #4 applies to return stack, not operand stack by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/907\r\n* feat(exceptions,specs): class to verify exception strings by @winsvega in https://github.com/ethereum/execution-spec-tests/pull/795\r\n* new(tests): basic EOF execution tests by @chfast in https://github.com/ethereum/execution-spec-tests/pull/912\r\n* new(tests): EOF - EIP-4200: migrate remaining RJUMP* execution tests by @chfast in https://github.com/ethereum/execution-spec-tests/pull/916\r\n* refactor(tests): EOF - EIP-4750: parametrize CALLF execution tests by @chfast in https://github.com/ethereum/execution-spec-tests/pull/913\r\n* new(cli): Introduce eofwrap tool by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/896\r\n* new(tests): EOF - EIP-6206: Add stack overflow by rule check to JUMPF by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/902\r\n* new(tests): Explicit test for EXTDELEGATECALL value cost by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/911\r\n* new(tests): EOF - EIP-4750: add fibonacci and factorial tests for CALLF by @chfast in https://github.com/ethereum/execution-spec-tests/pull/915\r\n* new(tests): EOF - EIP-7692: migrate `CALLF` execution tests by @chfast in https://github.com/ethereum/execution-spec-tests/pull/914\r\n* new(tests): EOF - EIP-4200 EIP-6206 RJUMPI with JUMPF by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/928\r\n* feat(forks): Add gas costs functions by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/779\r\n* new(tests): EOF - EIP-3540: validation of opcodes by @chfast in https://github.com/ethereum/execution-spec-tests/pull/932\r\n* feat(docs): add prague-devnet-5 link; add EOF EIP links/info by @danceratopz in https://github.com/ethereum/execution-spec-tests/pull/957\r\n* feat(ci,eof): include eofwrap in EOF prerelease by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/962\r\n\r\n## New Contributors\r\n* @MaximeDavin made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/949\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v2.0.0...eip7692@v2.1.0", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/188166169/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0 }, "mentions_count": 7 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/186894334", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/186894334/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/186894334/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.8", "id": 186894334, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84LI8f-", "tag_name": "verkle@v0.0.8", "target_commitish": "main", "name": "verkle@v0.0.8", "draft": false, "prerelease": true, "created_at": "2024-11-22T11:08:22Z", "published_at": "2024-11-22T13:21:15Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/208335927", "id": 208335927, "node_id": "RA_kwDOIQGLK84MavQ3", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 380504, "download_count": 2, "created_at": "2024-11-22T13:03:52Z", "updated_at": "2024-11-22T13:03:53Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.8/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/208335928", "id": 208335928, "node_id": "RA_kwDOIQGLK84MavQ4", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3160592, "download_count": 15, "created_at": "2024-11-22T13:03:52Z", "updated_at": "2024-11-22T13:03:53Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.8/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.8", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.8", "body": "## What's Changed\r\nThis release includes extra tests that reproduce bugs found in some EL clients in the new devnet7:\r\n* verkle: add extra SSTORE test by @jsign in https://github.com/ethereum/execution-spec-tests/pull/936\r\n* verkle: add contract creation failure scenario by @jsign in https://github.com/ethereum/execution-spec-tests/pull/944\r\n\r\nPlease see PR descriptions to understand better what new tests try to cover.\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.7...verkle@v0.0.8", "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/183128740", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/183128740/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/183128740/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.7-alpha-8", "id": 183128740, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84K6lKk", "tag_name": "verkle@v0.0.7-alpha-8", "target_commitish": "main", "name": "verkle@v0.0.7-alpha-8", "draft": false, "prerelease": true, "created_at": "2024-11-01T14:13:01Z", "published_at": "2024-11-01T16:12:50Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/203411146", "id": 203411146, "node_id": "RA_kwDOIQGLK84MH87K", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 380886, "download_count": 3, "created_at": "2024-11-01T16:11:16Z", "updated_at": "2024-11-01T16:11:16Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.7-alpha-8/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/203411145", "id": 203411145, "node_id": "RA_kwDOIQGLK84MH87J", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3158358, "download_count": 9, "created_at": "2024-11-01T16:11:16Z", "updated_at": "2024-11-01T16:11:16Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.7-alpha-8/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.7-alpha-8", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.7-alpha-8", "body": "## What's Changed\r\n* feat(verkle): add parent root to witness by @spencer-tb in https://github.com/ethereum/execution-spec-tests/pull/910\r\n* verkle: parent state root field renaming by @jsign in https://github.com/ethereum/execution-spec-tests/pull/934\r\n\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.6...verkle@v0.0.7-alpha-8", "mentions_count": 2 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/183375211", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/183375211/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/183375211/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.7", "id": 183375211, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84K7hVr", "tag_name": "verkle@v0.0.7", "target_commitish": "main", "name": "verkle@v0.0.7", "draft": false, "prerelease": true, "created_at": "2024-11-01T16:27:53Z", "published_at": "2024-11-04T13:53:03Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/204012832", "id": 204012832, "node_id": "RA_kwDOIQGLK84MKP0g", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 380554, "download_count": 8, "created_at": "2024-11-04T13:47:54Z", "updated_at": "2024-11-04T13:47:54Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.7/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/204012833", "id": 204012833, "node_id": "RA_kwDOIQGLK84MKP0h", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3157499, "download_count": 9, "created_at": "2024-11-04T13:47:54Z", "updated_at": "2024-11-04T13:47:54Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.7/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.7", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.7", "body": "⚠️ **Note these tests are up to date with the latest devnet-7 spec!**\r\n\r\nA reasonable order of steps for client teams to start running tests can be found below, starting with the genesis tests from: `fixtures_verkle-genesis.tar.gz`\r\n- Run the EIP-6800 tests for a good first check, `fixtures/verkle/eip6800_genesis_verkle_tree/` within the extracted the fixture genesis tar.\r\n - Followed by EIP-4762 tests: `fixtures/verkle/eip4762_verkle_gas_witness/`.\r\n - And EIP-7709 tests: `fixtures/verkle/eip7709_blockhash_witness/`.\r\n- Run \"backfilled\" tests, all previous fork tests filled for Verkle, i.e all tests excluding`fixtures/verkle/*`.\r\n- (Optional) Run the `fixtures_verkle-conversion-stride-0.tar.gz` tests, as these contain basic pre-fork tests to make sure nothing is broken on the fork before Verkle.\r\n\r\nChanges:\r\n* The `parentStateRoot` field was added to the witness.\r\n* In backported tests, if the test is running in Overlay Tree mode, we won't generate a witness (since it doesn't make sense).\r\n* **Important note:** the backported tests under `tests/cancun/eip6780_selfdestruct` might fail for some clients. This is expected since there's an ongoing discussion on how to resolve a spec issue.\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nTest cases additionally include Shanghai genesis tests to assert that the fork before Verkle is not broken.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --from Shanghai --until EIP6800Transition --evm-bin= -n auto -m blockchain_test\r\n```" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/181327020", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/181327020/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/181327020/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.6", "id": 181327020, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KztSs", "tag_name": "verkle@v0.0.6", "target_commitish": "main", "name": "verkle@v0.0.6", "draft": false, "prerelease": true, "created_at": "2024-10-21T17:37:28Z", "published_at": "2024-10-22T22:29:59Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/201018032", "id": 201018032, "node_id": "RA_kwDOIQGLK84L-0qw", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 859314, "download_count": 12, "created_at": "2024-10-22T22:24:59Z", "updated_at": "2024-10-22T22:24:59Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.6/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/201018029", "id": 201018029, "node_id": "RA_kwDOIQGLK84L-0qt", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3140809, "download_count": 17, "created_at": "2024-10-22T22:24:59Z", "updated_at": "2024-10-22T22:24:59Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.6/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.6", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.6", "body": "⚠️ **Note these tests are up to date with the latest devnet-7 spec!**\r\n\r\n**This release is filled with a specific geth branch [`gballet/jsign-witness-fix`](https://github.com/gballet/go-ethereum/pull/495) aligned with devnet-7. It contains updates and fixes for the past genesis tests due to the addition of witness checks within the testing framework. These verify the correct behaviour of the witness for specific test cases if defined.**\r\n\r\nA reasonable order of steps for client teams to start running tests can be found below, starting with the genesis tests from: `fixtures_verkle-genesis.tar.gz`\r\n- Run the EIP-6800 tests for a good first check, `fixtures/verkle/eip6800_genesis_verkle_tree/` within the extracted the fixture genesis tar.\r\n - Followed by EIP-4762 tests: `fixtures/verkle/eip4762_verkle_gas_witness/`.\r\n - And EIP-7709 tests: `fixtures/verkle/eip7709_blockhash_witness/`.\r\n- Run \"backfilled\" tests, all previous fork tests filled for Verkle, i.e all tests excluding`fixtures/verkle/*`.\r\n- (Optional) Run the `fixtures_verkle-conversion-stride-0.tar.gz` tests, as these contain basic pre-fork tests to make sure nothing is broken on the fork before Verkle.\r\n\r\nChanges:\r\n* A SELFDESTRUCT test targeting insufficient gas case was improved.\r\n* There was a bug in Geth that generated incorrect filling for backported tests (i.e: Shanghai ones).\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nTest cases additionally include Shanghai genesis tests to assert that the fork before Verkle is not broken.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --from Shanghai --until EIP6800Transition --evm-bin= -n auto -m blockchain_test\r\n```\r\n" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/180476466", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/180476466/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/180476466/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.5", "id": 180476466, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84Kwdoy", "tag_name": "verkle@v0.0.5", "target_commitish": "main", "name": "verkle@v0.0.5", "draft": false, "prerelease": true, "created_at": "2024-10-16T13:14:57Z", "published_at": "2024-10-17T15:11:23Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/199780731", "id": 199780731, "node_id": "RA_kwDOIQGLK84L6Gl7", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 859332, "download_count": 11, "created_at": "2024-10-17T14:55:52Z", "updated_at": "2024-10-17T14:55:52Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.5/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/199780732", "id": 199780732, "node_id": "RA_kwDOIQGLK84L6Gl8", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3140759, "download_count": 45, "created_at": "2024-10-17T14:55:52Z", "updated_at": "2024-10-17T14:55:52Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.5/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.5", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.5", "body": "⚠️ **Note these tests are up to date with the latest devnet-7 spec!**\r\n\r\n**This release is filled with a specific geth branch [`gballet/jsign-witness-fix`](https://github.com/gballet/go-ethereum/pull/495) aligned with devnet-7. It contains updates and fixes for the past genesis tests due to the addition of witness checks within the testing framework. These verify the correct behaviour of the witness for specific test cases if defined.**\r\n\r\nA reasonable order of steps for client teams to start running tests can be found below, starting with the genesis tests from: `fixtures_verkle-genesis.tar.gz`\r\n- Run the EIP-6800 tests for a good first check, `fixtures/verkle/eip6800_genesis_verkle_tree/` within the extracted the fixture genesis tar.\r\n - Followed by EIP-4762 tests: `fixtures/verkle/eip4762_verkle_gas_witness/`.\r\n - And EIP-7709 tests: `fixtures/verkle/eip7709_blockhash_witness/`.\r\n- Run \"backfilled\" tests, all previous fork tests filled for Verkle, i.e all tests excluding`fixtures/verkle/*`.\r\n- (Optional) Run the `fixtures_verkle-conversion-stride-0.tar.gz` tests, as these contain basic pre-fork tests to make sure nothing is broken on the fork before Verkle.\r\n\r\nChanges:\r\n* new(tests): eip-4762 *CALL with insufficient gas by @jsign in https://github.com/ethereum/execution-spec-tests/pull/867\r\n* feat(verkle): add two-way exhaustive witness checks by @spencer-tb in https://github.com/ethereum/execution-spec-tests/pull/879\r\n* eip4762: enable calls with insufficient gas tests again by @jsign in https://github.com/ethereum/execution-spec-tests/pull/880\r\n* new(tests): eip-4762 contract creations with insufficient gas by @jsign in https://github.com/ethereum/execution-spec-tests/pull/873\r\n* new(tests): eip-4762 EXTCODEHASH with insufficient gas by @jsign in https://github.com/ethereum/execution-spec-tests/pull/874\r\n* new(tests): eip-4762 (EXT)CODECOPY with insufficient gas by @jsign in https://github.com/ethereum/execution-spec-tests/pull/868\r\n* new(tests): eip-4762 SELFDESTRUCT with insufficient gas by @jsign in https://github.com/ethereum/execution-spec-tests/pull/875\r\n* eip4762: SSTORE/SLOAD insufficient gas tests by @jsign in https://github.com/ethereum/execution-spec-tests/pull/884\r\n* Filling fixes by @jsign in https://github.com/ethereum/execution-spec-tests/pull/885\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.3...verkle@v0.0.4\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nTest cases additionally include Shanghai genesis tests to assert that the fork before Verkle is not broken.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --from Shanghai --until EIP6800Transition --evm-bin= -n auto -m blockchain_test\r\n```\r\n", "mentions_count": 2 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/180106863", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/180106863/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/180106863/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v2.0.0", "id": 180106863, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KvDZv", "tag_name": "eip7692@v2.0.0", "target_commitish": "main", "name": "eip7692@v2.0.0", "draft": false, "prerelease": true, "created_at": "2024-10-15T20:35:40Z", "published_at": "2024-10-15T21:34:53Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/199345084", "id": 199345084, "node_id": "RA_kwDOIQGLK84L4cO8", "name": "fixtures_eip7692-osaka.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 29598138, "download_count": 85, "created_at": "2024-10-15T21:01:23Z", "updated_at": "2024-10-15T21:01:24Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v2.0.0/fixtures_eip7692-osaka.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/199345083", "id": 199345083, "node_id": "RA_kwDOIQGLK84L4cO7", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3005939, "download_count": 5, "created_at": "2024-10-15T21:01:23Z", "updated_at": "2024-10-15T21:01:24Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v2.0.0/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v2.0.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v2.0.0", "body": "First EIP-7692 release filled for the `Osaka` fork.\r\n\r\nFilled tests in `tests/prague` and `tests/osaka` folders.\r\n\r\nPrague fork follows **devnet-3 specification** (see https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.5.0 for details).\r\n\r\n## What's Changed (Only EOF-relevant changes listed)\r\n* fix(tests): fix TSTORE EOF variant test by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/831\r\n* new(tests): EOF - EIP-6206: clarify \"non-returning instruction\" by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/837\r\n* feat(docs,tests): add links to the online test case docs in the EOF tracker by @danceratopz in https://github.com/ethereum/execution-spec-tests/pull/838\r\n* refactor(tests): unify EOF return code constants by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/834\r\n* new(tests): EOF validation tests of stack height with double RJUMPI by @chfast in https://github.com/ethereum/execution-spec-tests/pull/851\r\n* new(tests): EOF - EIP-4750: unreachable code sections by @chfast in https://github.com/ethereum/execution-spec-tests/pull/856\r\n* fix(fw): EOF - Fix EXCHANGE's data_portion_length by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/849\r\n* new(tests): EIP-7069 and EIP-7620 - failures and context vars by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/836\r\n* feat(forks,tests): Osaka by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/869\r\n* fix(github): Fix `eip7692-osaka` to also fill `tests/prague` by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/897\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.1.1...eip7692@v2.0.0", "mentions_count": 5 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/179885084", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/179885084/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/179885084/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-4%40v1.0.1", "id": 179885084, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KuNQc", "tag_name": "pectra-devnet-4@v1.0.1", "target_commitish": "main", "name": "pectra-devnet-4@v1.0.1", "draft": false, "prerelease": true, "created_at": "2024-10-14T17:38:34Z", "published_at": "2024-10-14T20:32:44Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/199069956", "id": 199069956, "node_id": "RA_kwDOIQGLK84L3ZEE", "name": "fixtures_pectra-devnet-4.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 20080350, "download_count": 5047, "created_at": "2024-10-14T19:47:27Z", "updated_at": "2024-10-14T19:47:28Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-4%40v1.0.1/fixtures_pectra-devnet-4.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-4@v1.0.1", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-4@v1.0.1", "body": "Second EEST pre-release for Pectra Devnet-4. Fixes a small issue on some negative tests that override the expected requests with an empty requests hash but the block does indeed contain transactions that trigger at least one request.\r\n\r\nFor a full description of the fixtures included please check [pectra-devnet-4@v1.0.0](https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-4%40v1.0.0) release notes.\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/pectra-devnet-4@v1.0.0...pectra-devnet-4@v1.0.1\r\n\r\n**Test Case Documentation**: https://eest.ethereum.org/pectra-devnet-4@v1.0.1/tests/prague/", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/179885084/reactions", "total_count": 2, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 2, "eyes": 0 } }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/179659615", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/179659615/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/179659615/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-4%40v1.0.0", "id": 179659615, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KtWNf", "tag_name": "pectra-devnet-4@v1.0.0", "target_commitish": "main", "name": "pectra-devnet-4@v1.0.0", "draft": false, "prerelease": true, "created_at": "2024-10-13T14:08:37Z", "published_at": "2024-10-14T04:00:43Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/198798555", "id": 198798555, "node_id": "RA_kwDOIQGLK84L2Wzb", "name": "fixtures_pectra-devnet-4.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 20080066, "download_count": 11, "created_at": "2024-10-13T16:16:57Z", "updated_at": "2024-10-13T16:16:58Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-4%40v1.0.0/fixtures_pectra-devnet-4.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-4@v1.0.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-4@v1.0.0", "body": "First EEST pre-release for Pectra Devnet-4.\r\n\r\n## Included Specification PRs\r\n\r\n- [x] https://github.com/ethereum/EIPs/pull/8889\r\n- [x] https://github.com/ethereum/EIPs/pull/8890\r\n- [x] https://github.com/lightclient/sys-asm/pull/20\r\n- [x] https://github.com/ethereum/EIPs/pull/8845\r\n- [x] https://github.com/ethereum/EIPs/pull/8929\r\n- [x] https://github.com/ethereum/EIPs/pull/8948\r\n- [x] https://github.com/ethereum/EIPs/pull/8950\r\n- [x] https://github.com/ethereum/EIPs/pull/8857\r\n- [x] https://github.com/ethereum/EIPs/pull/8856\r\n- [x] https://github.com/ethereum/EIPs/pull/8855\r\n- [x] https://github.com/ethereum/EIPs/pull/8854\r\n- [x] https://github.com/ethereum/execution-apis/pull/591\r\n- [x] https://github.com/ethereum/EIPs/pull/8934 (Also updates EIP-7251)\r\n- [x] https://github.com/ethereum/EIPs/pull/8938\r\n\r\n## New Tests\r\n\r\n- EIP-7685: Invalid request type in block\r\n- EIP-7002, EIP-7251: Add tests for system contracts execution pre-fork.\r\n- EIP-7702: Add deploy delegation-like contract test\r\n\r\n## Breaking Changes\r\n\r\n#### Blockchain Fixtures Changes\r\n\r\n- `blockHeader.requests_root` field has been renamed to `requests_hash` in the `blockchain_test` fixture type.\r\n- `FixtureBlockBase` and `FixtureExecutionPayload` fields `deposit_requests`, `withdrawal_requests` and `consolidation_requests` are replaced by a single field `requests` which contains a list of hex strings, each element represents the bytes of a flattened request.\r\n- Fourth parameter has been added to `FixtureEngineNewPayload.params` which represents the flattened requests.\r\n\r\n### Important Notes\r\n- EIP-2935 slow tests (256+ blocks) have been skipped.\r\n\r\n## Included EIP Versions\r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/9ccf12ceb3979bf0b31ad82a54a0470845c38c2d/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/f88a24b00b0ad92d5ba640f8427ab5001fc453ad/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/a7fb2260ae2ea39bdd31886832c9e45452d0e76a/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/a7fb2260ae2ea39bdd31886832c9e45452d0e76a/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/a7fb2260ae2ea39bdd31886832c9e45452d0e76a/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/a7fb2260ae2ea39bdd31886832c9e45452d0e76a/EIPS/eip-7702.md)", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/179659615/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0 } }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/177899690", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/177899690/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/177899690/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.4", "id": 177899690, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84Kmoiq", "tag_name": "verkle@v0.0.4", "target_commitish": "main", "name": "verkle@v0.0.4", "draft": false, "prerelease": true, "created_at": "2024-10-01T19:34:38Z", "published_at": "2024-10-01T22:30:31Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/196226600", "id": 196226600, "node_id": "RA_kwDOIQGLK84Lsi4o", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 850808, "download_count": 31, "created_at": "2024-10-01T22:05:30Z", "updated_at": "2024-10-01T22:05:30Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.4/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/196226599", "id": 196226599, "node_id": "RA_kwDOIQGLK84Lsi4n", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 3073513, "download_count": 37, "created_at": "2024-10-01T22:05:30Z", "updated_at": "2024-10-01T22:05:30Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.4/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.4", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.4", "body": "⚠️ **Note these tests are up to date with the latest devnet-7 spec!**\r\n\r\n**This release is filled with a specific geth branch [`gballet/jsign-witness-fix`](https://github.com/gballet/go-ethereum/pull/495) aligned with devnet-7. It contains updates and fixes for the past genesis tests due to the addition of witness checks within the testing framework. These verify the correct behaviour of the witness for specific test cases if defined.**\r\n\r\nA reasonable order of steps for client teams to start running tests can be found below, starting with the genesis tests from: `fixtures_verkle-genesis.tar.gz`\r\n- Run the EIP-6800 tests for a good first check, `fixtures/verkle/eip6800_genesis_verkle_tree/` within the extracted the fixture genesis tar.\r\n - Followed by EIP-4762 tests: `fixtures/verkle/eip4762_verkle_gas_witness/`.\r\n - And EIP-7709 tests: `fixtures/verkle/eip7709_blockhash_witness/`.\r\n- Run \"backfilled\" tests, all previous fork tests filled for Verkle, i.e all tests excluding`fixtures/verkle/*`.\r\n- (Optional) Run the `fixtures_verkle-conversion-stride-0.tar.gz` tests, as these contain basic pre-fork tests to make sure nothing is broken on the fork before Verkle.\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.3...verkle@v0.0.4\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nTest cases additionally include Shanghai genesis tests to assert that the fork before Verkle is not broken.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/a00d50aa1590d7bed660723e2aa2fc7e58d64559), fill with the following command:\r\n```\r\nfill --from Shanghai --until EIP6800Transition --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/176456969", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/176456969/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/176456969/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v1.1.1", "id": 176456969, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KhIUJ", "tag_name": "eip7692@v1.1.1", "target_commitish": "main", "name": "eip7692@v1.1.1", "draft": false, "prerelease": true, "created_at": "2024-09-23T16:06:58Z", "published_at": "2024-09-23T19:28:51Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/194417872", "id": 194417872, "node_id": "RA_kwDOIQGLK84LlpTQ", "name": "fixtures_eip7692-prague.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 29388774, "download_count": 14, "created_at": "2024-09-23T17:45:29Z", "updated_at": "2024-09-23T17:45:31Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.1.1/fixtures_eip7692-prague.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/194417871", "id": 194417871, "node_id": "RA_kwDOIQGLK84LlpTP", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2947021, "download_count": 155, "created_at": "2024-09-23T17:45:29Z", "updated_at": "2024-09-23T17:45:30Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.1.1/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v1.1.1", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v1.1.1", "body": "Filled using Besu commit https://github.com/hyperledger/besu/commit/0d6395515890280c29ee2402c03b1ee81bde3bab\r\n\r\n## What's Changed\r\n* new(tests): EOF - EIP-7620 EOFCREATE gas testing by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/785\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.1.0...eip7692@v1.1.1", "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/175961554", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/175961554/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/175961554/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v1.1.0", "id": 175961554, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KfPXS", "tag_name": "eip7692@v1.1.0", "target_commitish": "main", "name": "eip7692@v1.1.0", "draft": false, "prerelease": true, "created_at": "2024-09-19T18:04:52Z", "published_at": "2024-09-19T18:41:46Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/193660497", "id": 193660497, "node_id": "RA_kwDOIQGLK84LiwZR", "name": "fixtures_eip7692-prague.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 28430232, "download_count": 10, "created_at": "2024-09-19T18:23:47Z", "updated_at": "2024-09-19T18:23:48Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.1.0/fixtures_eip7692-prague.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/193660498", "id": 193660498, "node_id": "RA_kwDOIQGLK84LiwZS", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2734819, "download_count": 31, "created_at": "2024-09-19T18:23:47Z", "updated_at": "2024-09-19T18:23:47Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.1.0/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v1.1.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v1.1.0", "body": "Contains several EIP-7702 Devnet-3 tests parametrized to use EOF.\r\n\r\n## What's Changed\r\n* chore(tests): update EOF tests tracker by @chfast in https://github.com/ethereum/execution-spec-tests/pull/791\r\n* new(tests): EOF: more fuzzing discovered tests by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/789\r\n* fix(fw): DATALOAD pushed_stack_items by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/784\r\n* new(tests): EOF: tests for invalid non-returning sections by @chfast in https://github.com/ethereum/execution-spec-tests/pull/794\r\n* new(tests): EOF - EIP-7069 - expand EXT*CALL gas testing by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/771\r\n* fix(tests): EOF - Remove duplicate container tests, automatically check for duplicates by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/800\r\n* fix(fw): max stack height calculation in __add__ by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/810\r\n* new(test): EIP-7702 + EIP-1153: test that TransientStorage stays at correct address by @jochem-brouwer in https://github.com/ethereum/execution-spec-tests/pull/799\r\n* new(tests): TSTORE: ensure transient storage is cleared after transactions by @jochem-brouwer in https://github.com/ethereum/execution-spec-tests/pull/798\r\n* new(tests): EOF - EIP-7620: EOFCREATE referencing the same subcontainer twice by @MariusVanDerWijden in https://github.com/ethereum/execution-spec-tests/pull/809\r\n* new(tests): EOF - EIP-7620: Dangling data in subcontainer test by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/812\r\n* fix(fw): EOF - Accept `initcode_prefix` on EOF `Container.Init` by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/819\r\n* fix(tests): Fix Existing EOF + EIP-7702 Tests by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/821\r\n\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.0.9...eip7692@v1.1.0", "mentions_count": 6 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/174363281", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/174363281/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/174363281/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.5.0", "id": 174363281, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KZJKR", "tag_name": "pectra-devnet-3@v1.5.0", "target_commitish": "main", "name": "pectra-devnet-3@v1.5.0", "draft": false, "prerelease": true, "created_at": "2024-09-10T14:20:58Z", "published_at": "2024-09-10T15:14:09Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/191744130", "id": 191744130, "node_id": "RA_kwDOIQGLK84LbciC", "name": "fixtures_pectra-devnet-3.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 18524987, "download_count": 4146, "created_at": "2024-09-10T15:12:25Z", "updated_at": "2024-09-10T15:12:26Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-3%40v1.5.0/fixtures_pectra-devnet-3.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-3@v1.5.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-3@v1.5.0", "body": "Adds `tests/prague/eip7702_set_code_tx/test_set_code_txs.py::test_contract_creating_set_code_transaction` which is the contract creating type-4 transaction test.\r\n\r\n### Important Notes\r\n- EIP-2935 slow tests (256+ blocks) have been skipped.\r\n\r\n## Included EIPs\r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/032c46504b10568039ba300969010e77c795f43a/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/699cb15fc5ab7812d44266013876d9de81d05742/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/f3620fabfa303fd84ee84522c744ae4a4da65cdf/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/bc91716ef2863c3bcab0d4d8ff013e24bf4999c2/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/b27b3f1c1b8252d178c0a7d4bcf6480c8bcb2159/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/d87a570a5baedff7b0a71d79de3ff4f14cee0990/EIPS/eip-7702.md)\r\n\r\n## Missing EIPs\r\n- [EIP-7692: EVM Object Format (EOFv1) Meta](https://github.com/ethereum/EIPs/blob/ad9bf2bd83c1018f0a892e03ad3b524cc441257e/EIPS/eip-7692.md)\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/pectra-devnet-3@v1.4.0...pectra-devnet-3@v1.5.0", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/174363281/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/173852359", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/173852359/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/173852359/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v1.0.9", "id": 173852359, "author": { "login": "marioevz", "id": 11726710, "node_id": "MDQ6VXNlcjExNzI2NzEw", "avatar_url": "https://avatars.githubusercontent.com/u/11726710?v=4", "gravatar_id": "", "url": "https://api.github.com/users/marioevz", "html_url": "https://github.com/marioevz", "followers_url": "https://api.github.com/users/marioevz/followers", "following_url": "https://api.github.com/users/marioevz/following{/other_user}", "gists_url": "https://api.github.com/users/marioevz/gists{/gist_id}", "starred_url": "https://api.github.com/users/marioevz/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/marioevz/subscriptions", "organizations_url": "https://api.github.com/users/marioevz/orgs", "repos_url": "https://api.github.com/users/marioevz/repos", "events_url": "https://api.github.com/users/marioevz/events{/privacy}", "received_events_url": "https://api.github.com/users/marioevz/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KXMbH", "tag_name": "eip7692@v1.0.9", "target_commitish": "main", "name": "eip7692@v1.0.9", "draft": false, "prerelease": true, "created_at": "2024-09-05T20:24:52Z", "published_at": "2024-09-06T14:10:28Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/190869157", "id": 190869157, "node_id": "RA_kwDOIQGLK84LYG6l", "name": "fixtures_eip7692.tar.gz", "label": null, "uploader": { "login": "marioevz", "id": 11726710, "node_id": "MDQ6VXNlcjExNzI2NzEw", "avatar_url": "https://avatars.githubusercontent.com/u/11726710?v=4", "gravatar_id": "", "url": "https://api.github.com/users/marioevz", "html_url": "https://github.com/marioevz", "followers_url": "https://api.github.com/users/marioevz/followers", "following_url": "https://api.github.com/users/marioevz/following{/other_user}", "gists_url": "https://api.github.com/users/marioevz/gists{/gist_id}", "starred_url": "https://api.github.com/users/marioevz/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/marioevz/subscriptions", "organizations_url": "https://api.github.com/users/marioevz/orgs", "repos_url": "https://api.github.com/users/marioevz/repos", "events_url": "https://api.github.com/users/marioevz/events{/privacy}", "received_events_url": "https://api.github.com/users/marioevz/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2694137, "download_count": 147, "created_at": "2024-09-06T14:08:16Z", "updated_at": "2024-09-06T14:08:17Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.0.9/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v1.0.9", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v1.0.9", "body": "## Important Notes\r\n\r\nEIP-7702 breaks Prague+EOF tests at the moment, therefore this release does not contain them, but they should be expected at a later release.\r\n\r\n## What's Changed\r\n* fix(docs): Add some more cases to EOF tracker by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/747\r\n* new(tests): EOF - EIP-3540: Migrate validation tests: EIP3540/validInvalidFiller.yml by @chfast in https://github.com/ethereum/execution-spec-tests/pull/598\r\n* new(tests): EOF - EIP-7620: tests for msg.depth and static flag by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/732\r\n* new(tests): EOF - EIP-7069: Call Gas Testing for EXT*CALL by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/713\r\n* new(tests): EIP-7069 - EXTCALL with balance and other by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/755\r\n* new(tests): EOF - EIP-3540: Test types with 128 inputs by @gurukamath in https://github.com/ethereum/execution-spec-tests/pull/749\r\n* new(tests): EOF - EIP-3540: out of order container section by @chfast in https://github.com/ethereum/execution-spec-tests/pull/741\r\n* chore: simplify python project config by @danceratopz in https://github.com/ethereum/execution-spec-tests/pull/764\r\n* feat(tests): Add multiple exception support to EOF tests by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/759\r\n* new(tests): EOF - EIP-7620: migrate \"embedded container\" tests by @chfast in https://github.com/ethereum/execution-spec-tests/pull/763\r\n* new(tests): EIP-5656/7692 - use new marker to EOF-ize MCOPY test (2) by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/754\r\n* feat(tests): EOF - EIP-3540/EIP-4200: Move and rename oritests by @winsvega in https://github.com/ethereum/execution-spec-tests/pull/731\r\n* new(tests): EOF - Tests from Fuzzing by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/756\r\n* feat(docs/tests): EOF: Update tracker, add unimplemented tests by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/773\r\n* new(tests): EOF: Validate EOF only opcodes are invalid in legacy by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/768\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.0.8...eip7692@v1.0.9", "mentions_count": 8 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/172420698", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/172420698/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/172420698/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.4.0", "id": 172420698, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KRu5a", "tag_name": "pectra-devnet-3@v1.4.0", "target_commitish": "main", "name": "pectra-devnet-3@v1.4.0", "draft": false, "prerelease": true, "created_at": "2024-08-28T17:35:59Z", "published_at": "2024-08-28T18:35:05Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/188915076", "id": 188915076, "node_id": "RA_kwDOIQGLK84LQp2E", "name": "fixtures_pectra-devnet-3.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 18516050, "download_count": 117, "created_at": "2024-08-28T18:29:17Z", "updated_at": "2024-08-28T18:29:18Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-3%40v1.4.0/fixtures_pectra-devnet-3.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-3@v1.4.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-3@v1.4.0", "body": "Fixes to `test_set_code_using_invalid_signatures` where the test expected an invalid transaction in some cases where only an invalid authorization list element was expected (but a valid transaction): https://github.com/ethereum/execution-spec-tests/commit/e70d831d30a3e924ef6946b518efb18e10ca684a\r\n### Important Notes\r\n- EIP-2935 slow tests (256+ blocks) have been skipped.\r\n\r\n## Included EIPs\r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/032c46504b10568039ba300969010e77c795f43a/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/699cb15fc5ab7812d44266013876d9de81d05742/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/f3620fabfa303fd84ee84522c744ae4a4da65cdf/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/bc91716ef2863c3bcab0d4d8ff013e24bf4999c2/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/b27b3f1c1b8252d178c0a7d4bcf6480c8bcb2159/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/d87a570a5baedff7b0a71d79de3ff4f14cee0990/EIPS/eip-7702.md)\r\n\r\n## Missing EIPs\r\n- [EIP-7692: EVM Object Format (EOFv1) Meta](https://github.com/ethereum/EIPs/blob/ad9bf2bd83c1018f0a892e03ad3b524cc441257e/EIPS/eip-7692.md)\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/pectra-devnet-3@v1.3.0...pectra-devnet-3@v1.4.0" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/172389706", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/172389706/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/172389706/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.3.0", "id": 172389706, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KRnVK", "tag_name": "pectra-devnet-3@v1.3.0", "target_commitish": "main", "name": "pectra-devnet-3@v1.3.0", "draft": false, "prerelease": true, "created_at": "2024-08-27T18:27:56Z", "published_at": "2024-08-28T15:27:28Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/188881070", "id": 188881070, "node_id": "RA_kwDOIQGLK84LQhiu", "name": "fixtures_pectra-devnet-3.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 18509265, "download_count": 7, "created_at": "2024-08-28T15:22:25Z", "updated_at": "2024-08-28T15:22:25Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-3%40v1.3.0/fixtures_pectra-devnet-3.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-3@v1.3.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-3@v1.3.0", "body": "This is a hotfix release that contains no new tests but fixes an issue during filling where the system account (`0xfffffffffffffffffffffffffffffffffffffffe`) had its nonce increased in blockchain tests.\r\n\r\n### Important Notes\r\n- EIP-2935 slow tests (256+ blocks) have been skipped.\r\n\r\n## Included EIPs\r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/032c46504b10568039ba300969010e77c795f43a/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/699cb15fc5ab7812d44266013876d9de81d05742/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/f3620fabfa303fd84ee84522c744ae4a4da65cdf/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/bc91716ef2863c3bcab0d4d8ff013e24bf4999c2/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/b27b3f1c1b8252d178c0a7d4bcf6480c8bcb2159/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/d87a570a5baedff7b0a71d79de3ff4f14cee0990/EIPS/eip-7702.md)\r\n\r\n## Missing EIPs\r\n- [EIP-7692: EVM Object Format (EOFv1) Meta](https://github.com/ethereum/EIPs/blob/ad9bf2bd83c1018f0a892e03ad3b524cc441257e/EIPS/eip-7692.md)\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.0.8...pectra-devnet-3@v1.3.0" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/172219357", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/172219357/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/172219357/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.2.0", "id": 172219357, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KQ9vd", "tag_name": "pectra-devnet-3@v1.2.0", "target_commitish": "main", "name": "pectra-devnet-3@v1.2.0", "draft": false, "prerelease": true, "created_at": "2024-08-27T18:27:56Z", "published_at": "2024-08-27T19:27:24Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/188681921", "id": 188681921, "node_id": "RA_kwDOIQGLK84LPw7B", "name": "fixtures_pectra-devnet-3.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 18529117, "download_count": 13, "created_at": "2024-08-27T19:18:48Z", "updated_at": "2024-08-27T19:18:48Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-3%40v1.2.0/fixtures_pectra-devnet-3.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-3@v1.2.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-3@v1.2.0", "body": "Third release for Pectra Devnet-3, filled again using EthereumJS transition tool implementation which includes fixes to the state root expected in state tests (thanks again @jochem-brouwer!).\r\n\r\n### Fixes\r\n- In previous release, in the state tests, the system contracts' addresses were touched even though the contracts were not present in the pre-alloc.\r\n\r\n### Important Notes\r\n- EIP-2935 slow tests (256+ blocks) have been skipped.\r\n\r\n## Included EIPs\r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/032c46504b10568039ba300969010e77c795f43a/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/699cb15fc5ab7812d44266013876d9de81d05742/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/f3620fabfa303fd84ee84522c744ae4a4da65cdf/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/bc91716ef2863c3bcab0d4d8ff013e24bf4999c2/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/b27b3f1c1b8252d178c0a7d4bcf6480c8bcb2159/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/d87a570a5baedff7b0a71d79de3ff4f14cee0990/EIPS/eip-7702.md)\r\n\r\n## Missing EIPs\r\n- [EIP-7692: EVM Object Format (EOFv1) Meta](https://github.com/ethereum/EIPs/blob/ad9bf2bd83c1018f0a892e03ad3b524cc441257e/EIPS/eip-7692.md)\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/pectra-devnet-3@v1.1.0...pectra-devnet-3@v1.2.0", "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171954734", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171954734/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/171954734/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.3", "id": 171954734, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KP9Iu", "tag_name": "verkle@v0.0.3", "target_commitish": "main", "name": "verkle@v0.0.3", "draft": false, "prerelease": true, "created_at": "2024-08-26T13:37:20Z", "published_at": "2024-08-26T14:29:03Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/188383335", "id": 188383335, "node_id": "RA_kwDOIQGLK84LOoBn", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 809677, "download_count": 82, "created_at": "2024-08-26T14:00:11Z", "updated_at": "2024-08-26T14:00:11Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.3/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/188383334", "id": 188383334, "node_id": "RA_kwDOIQGLK84LOoBm", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 891973, "download_count": 87, "created_at": "2024-08-26T14:00:11Z", "updated_at": "2024-08-26T14:00:11Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.3/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.3", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.3", "body": "⚠️ **Note these tests are up to date with the latest devnet-7 spec!**\r\n\r\n**This release is equivalent to [verkle@v0.0.2](https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.2) but filled with the latest geth [`gballet/kaustinen-with-shapella`](https://github.com/gballet/go-ethereum/tree/kaustinen-with-shapella) branch aligned with devnet-7.**\r\n\r\nFrom the [VIC no 23 testing slides](https://hackmd.io/@jsign/verkle-testing#/4), a reasonable order of steps for client teams to start running tests can be found below, starting with the genesis tests from: `fixtures_verkle-genesis.tar.gz`\r\n- Run EIP-6800 tests (~23) for a good first check, `fixtures/verkle/eip6800_genesis_verkle_tree/` within the extracted the fixture genesis tar.\r\n- Run \"backfilled\" tests (~300), all tests excluding`fixtures/verkle/*`.\r\n- Wait for the next release to run additional tests after framework witness assertions verify the remaining test cases.\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.2...verkle@v0.0.3\r\n\r\n## 🌪️ Fixture Format Changes\r\n\r\nAll fixtures now contain a block witness although currently without the parent state root.\r\n```python\r\nclass Witness(CamelModel):\r\n state_diff: StateDiff\r\n verkle_proof: VerkleProof\r\n```\r\nClient test consumers can now utilize this to compare there computed block witness against the witness contained within the fixtures (computed from geth's t8n).\r\n\r\nFor more information on our witness definition please adhere to [`src/ethereum_test_types/verkle/types.py`](https://github.com/jsign/execution-spec-tests/blob/jsign-verkle-rebased-mainnet/src/ethereum_test_types/verkle/types.py).\r\n\r\nAdditionally the post state is removed. Future fixture releases will contain the post state as a VKT.\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/df132604b24104bcfcf838bf30495a279dd799f8), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nContains an improvement to the initial set of transition [tests](https://github.com/ethereum/execution-spec-tests/releases/tag/eip6800%40v0.0.1).\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nTest cases additionally include Shanghai genesis tests to assert that the fork before Verkle is not broken.\r\n\r\nThe next release will contain conversion tests with some stride enabled to dynamically validate the MPT conversion.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/commit/df132604b24104bcfcf838bf30495a279dd799f8), fill with the following command:\r\n```\r\nfill --from Shanghai --until EIP6800Transition --evm-bin= -n auto -m blockchain_test\r\n```\r\n\r\n\r\n", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171954734/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0 } }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171714751", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171714751/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/171714751/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.1.0", "id": 171714751, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KPCi_", "tag_name": "pectra-devnet-3@v1.1.0", "target_commitish": "main", "name": "pectra-devnet-3@v1.1.0", "draft": false, "prerelease": true, "created_at": "2024-08-23T16:53:12Z", "published_at": "2024-08-23T17:49:42Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/187907663", "id": 187907663, "node_id": "RA_kwDOIQGLK84LMz5P", "name": "fixtures_pectra-devnet-3.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 18636284, "download_count": 8, "created_at": "2024-08-23T17:44:22Z", "updated_at": "2024-08-23T17:44:23Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-3%40v1.1.0/fixtures_pectra-devnet-3.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-3@v1.1.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-3@v1.1.0", "body": "Second release for Pectra Devnet-3, filled again using EthereumJS transition tool implementation which included gas accounting fixes (thanks again @jochem-brouwer!).\r\n\r\n### Fixes\r\n- Added re-authorization gas costs tests, i.e. existing set-code in account receives a new delegation (https://github.com/ethereum/execution-spec-tests/commit/c27e01079951553ade21d5cf2ce705a8917f9865)\r\n- Fixed warm account costs to consider cost to access the delegated-to account (https://github.com/ethereum/execution-spec-tests/commit/59ec505058ef3cc93e3657d2a7453a643ef6e439)\r\n\r\n### Important Notes\r\n- EIP-2935 slow tests (256+ blocks) have been skipped.\r\n\r\n## Included EIPs\r\n\r\n- [EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/032c46504b10568039ba300969010e77c795f43a/EIPS/eip-2537.md)\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/699cb15fc5ab7812d44266013876d9de81d05742/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/f3620fabfa303fd84ee84522c744ae4a4da65cdf/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/bc91716ef2863c3bcab0d4d8ff013e24bf4999c2/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/b27b3f1c1b8252d178c0a7d4bcf6480c8bcb2159/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/d87a570a5baedff7b0a71d79de3ff4f14cee0990/EIPS/eip-7702.md)\r\n\r\n## Missing EIPs\r\n- [EIP-7692: EVM Object Format (EOFv1) Meta](https://github.com/ethereum/EIPs/blob/ad9bf2bd83c1018f0a892e03ad3b524cc441257e/EIPS/eip-7692.md)\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/pectra-devnet-3@v1.0.0...pectra-devnet-3@v1.1.0", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171714751/reactions", "total_count": 2, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 2, "eyes": 0 }, "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171316015", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171316015/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/171316015/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/pectra-devnet-3%40v1.0.0", "id": 171316015, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KNhMv", "tag_name": "pectra-devnet-3@v1.0.0", "target_commitish": "main", "name": "pectra-devnet-3@v1.0.0", "draft": false, "prerelease": true, "created_at": "2024-08-21T16:11:07Z", "published_at": "2024-08-21T17:01:28Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/187443215", "id": 187443215, "node_id": "RA_kwDOIQGLK84LLCgP", "name": "fixtures_pectra-devnet-3.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 16580317, "download_count": 10, "created_at": "2024-08-21T16:50:53Z", "updated_at": "2024-08-21T16:50:53Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-3%40v1.0.0/fixtures_pectra-devnet-3.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/pectra-devnet-3@v1.0.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/pectra-devnet-3@v1.0.0", "body": "First release for Pectra Devnet-3, filled using EthereumJS transition tool implementation (thanks @jochem-brouwer!).\r\n\r\n\r\n### Important Notes\r\n- EIP-2537 tests have been skipped for this release but will be available in a later release.\r\n- EIP-2935 slow tests (256+ blocks) have been skipped too.\r\n\r\n## Included EIPs\r\n\r\n- ~~[EIP-2537: Precompile for BLS12-381 curve operations](https://github.com/ethereum/EIPs/blob/032c46504b10568039ba300969010e77c795f43a/EIPS/eip-2537.md)~~ TESTS SKIPPED ONLY FOR THIS RELEASE, EIP STILL ENABLED IN DEVNET-3\r\n- [EIP-2935: Save historical block hashes in state](https://github.com/ethereum/EIPs/blob/45587bd019487b0bd59bec941bc0e2d708811cc8/EIPS/eip-2935.md)\r\n- [EIP-6110: Supply validator deposits on chain](https://github.com/ethereum/EIPs/blob/699cb15fc5ab7812d44266013876d9de81d05742/EIPS/eip-6110.md)\r\n- [EIP-7002: Execution layer triggerable exits](https://github.com/ethereum/EIPs/blob/f3620fabfa303fd84ee84522c744ae4a4da65cdf/EIPS/eip-7002.md)\r\n- [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://github.com/ethereum/EIPs/blob/bc91716ef2863c3bcab0d4d8ff013e24bf4999c2/EIPS/eip-7251.md)\r\n- [EIP-7685: General purpose execution layer requests](https://github.com/ethereum/EIPs/blob/b27b3f1c1b8252d178c0a7d4bcf6480c8bcb2159/EIPS/eip-7685.md)\r\n- [EIP-7702: Set EOA account code for one transaction](https://github.com/ethereum/EIPs/blob/d87a570a5baedff7b0a71d79de3ff4f14cee0990/EIPS/eip-7702.md)\r\n\r\n## Missing EIPs\r\n- [EIP-7692: EVM Object Format (EOFv1) Meta](https://github.com/ethereum/EIPs/blob/ad9bf2bd83c1018f0a892e03ad3b524cc441257e/EIPS/eip-7692.md)\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/v3.0.0...pectra-devnet-3@v1.0.0", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/171316015/reactions", "total_count": 4, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 4, "eyes": 0 }, "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/170379891", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/170379891/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/170379891/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v1.0.8", "id": 170379891, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KJ8pz", "tag_name": "eip7692@v1.0.8", "target_commitish": "main", "name": "eip7692@v1.0.8", "draft": false, "prerelease": true, "created_at": "2024-08-13T23:41:40Z", "published_at": "2024-08-15T16:17:27Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/186158058", "id": 186158058, "node_id": "RA_kwDOIQGLK84LGIvq", "name": "fixtures_eip7692-prague.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 11910702, "download_count": 10, "created_at": "2024-08-15T15:00:11Z", "updated_at": "2024-08-15T15:00:12Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.0.8/fixtures_eip7692-prague.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/186158059", "id": 186158059, "node_id": "RA_kwDOIQGLK84LGIvr", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2495738, "download_count": 220, "created_at": "2024-08-15T15:00:11Z", "updated_at": "2024-08-15T15:00:11Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.0.8/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v1.0.8", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v1.0.8", "body": "## What's Changed\r\n* new(tests): EOF - EIP-3540: Expand section size testing by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/705\r\n* new(tests) Deep and wide EOF subcontainers by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/718\r\n* fix(docs): Add more cases to EOF tracker by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/723\r\n* new(tests): EOF - EIP-7069: Add tests by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/722\r\n* fix(fixtures): Fix index generation for EOF tests by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/728\r\n* fix(docs): Add some execution cases to EOF test tracker by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/727\r\n* feat(fw,forks,tests): Add EVM code type marker by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/610\r\n* new(tests): EOF - EIP-7069: Add tests, part 2. by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/730\r\n* feat(fw): add optional `Container.expected_bytecode` by @chfast in https://github.com/ethereum/execution-spec-tests/pull/737\r\n* new(tests): migrate \"valid\" EOFCREATE validation by @chfast in https://github.com/ethereum/execution-spec-tests/pull/738\r\n* fix(docs): Add stack validation cases to EOF tracker by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/735\r\n* new(tests): EOF - EIP-3540: migrate tests for truncated sections by @chfast in https://github.com/ethereum/execution-spec-tests/pull/740\r\n* feat(plugins,forks,github): Allow dual-feature (Prague+Cancun) build on EOF releases by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/743\r\n* fix(docs): Add execution cases from evmone-generated tests to EOF tracker by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/742\r\n\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/v3.0.0...eip7692@v1.0.8", "mentions_count": 5 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/169640052", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/169640052/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/169640052/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.2", "id": 169640052, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KHIB0", "tag_name": "verkle@v0.0.2", "target_commitish": "main", "name": "verkle@v0.0.2", "draft": false, "prerelease": true, "created_at": "2024-08-10T18:46:36Z", "published_at": "2024-08-10T19:21:58Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/185158406", "id": 185158406, "node_id": "RA_kwDOIQGLK84LCUsG", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 1153328, "download_count": 2, "created_at": "2024-08-10T19:08:40Z", "updated_at": "2024-08-10T19:08:40Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.2/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/185158405", "id": 185158405, "node_id": "RA_kwDOIQGLK84LCUsF", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 941999, "download_count": 1, "created_at": "2024-08-10T19:08:40Z", "updated_at": "2024-08-10T19:08:40Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.2/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.2", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.2", "body": "\r\n⚠️ **Note these tests are up to date with the devnet-6 spec!**\r\n\r\n**This release is equivalent to [verkle@v0.0.1](https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.1) but with the addition of Shanghai genesis tests within the conversion fixture set.**\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/verkle@v0.0.1...verkle@v0.0.2\r\n\r\n## 🌪️ Fixture Format Changes\r\n\r\nAll fixtures now contain a block witness although currently without the parent state root.\r\n```python\r\nclass Witness(CamelModel):\r\n state_diff: StateDiff\r\n verkle_proof: VerkleProof\r\n```\r\nClient test consumers can now utilize this to compare there computed block witness against the witness present within the fixtures (computed from geth's t8n).\r\n\r\nFor more information on our witness definition please adhere to [`src/ethereum_test_types/verkle/types.py`](https://github.com/jsign/execution-spec-tests/blob/jsign-verkle-rebased-mainnet/src/ethereum_test_types/verkle/types.py).\r\n\r\nAdditionally the post state is removed. Future fixture releases will contain the post state as a VKT.\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/pull/466/commits/47addd7be52f2e07743aa2f4710236f463c5afdf), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin=/evm -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nContains an improvement to the initial set of transition [tests](https://github.com/ethereum/execution-spec-tests/releases/tag/eip6800%40v0.0.1).\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nTest cases additionally include Shanghai genesis tests to assert that the fork before Verkle is not broken.\r\n\r\nThe next release will contain conversion tests with some stride enabled to dynamically validate the MPT conversion.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/pull/466/commits/47addd7be52f2e07743aa2f4710236f463c5afdf), fill with the following command:\r\n```\r\nfill --from Shanghai --until EIP6800Transition --evm-bin=/evm -n auto -m blockchain_test\r\n```\r\n", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/169640052/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0 } }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/169420898", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/169420898/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/169420898/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/verkle%40v0.0.1", "id": 169420898, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84KGShi", "tag_name": "verkle@v0.0.1", "target_commitish": "main", "name": "verkle@v0.0.1", "draft": false, "prerelease": true, "created_at": "2024-08-08T22:23:18Z", "published_at": "2024-08-08T23:32:32Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/184817013", "id": 184817013, "node_id": "RA_kwDOIQGLK84LBBV1", "name": "fixtures_verkle-conversion-stride-0.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 908777, "download_count": 2, "created_at": "2024-08-08T22:45:40Z", "updated_at": "2024-08-08T22:45:40Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.1/fixtures_verkle-conversion-stride-0.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/184817014", "id": 184817014, "node_id": "RA_kwDOIQGLK84LBBV2", "name": "fixtures_verkle-genesis.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 941979, "download_count": 2, "created_at": "2024-08-08T22:45:40Z", "updated_at": "2024-08-08T22:45:41Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/verkle%40v0.0.1/fixtures_verkle-genesis.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/verkle@v0.0.1", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/verkle@v0.0.1", "body": "⚠️ **Note these tests are up to date with the devnet-6 spec!**\r\n\r\n## 🌪️ Fixture Format Changes\r\n\r\nAll fixtures now contain a block witness although currently without the parent state root.\r\n```python\r\nclass Witness(CamelModel):\r\n state_diff: StateDiff\r\n verkle_proof: VerkleProof\r\n```\r\nClient test consumers can now utilize this to compare there computed block witness against the witness present within the fixtures (computed from geth's t8n).\r\n\r\nFor more information on our witness definition please adhere to [`src/ethereum_test_types/verkle/types.py`](https://github.com/jsign/execution-spec-tests/blob/jsign-verkle-rebased-mainnet/src/ethereum_test_types/verkle/types.py).\r\n\r\nAdditionally the post state is removed. Future fixture releases will contain the post state as a VKT.\r\n\r\n## 🐘 Verkle Genesis Test Fixtures\r\n\r\nContains verkle specific test vectors from https://github.com/ethereum/execution-spec-tests/pull/659 including all existing EEST test cases filled for a verkle configured fork. Note these tests assume the MPT to VKT conversion has completed where we start at the Verkle fork.\r\n\r\nPlease use `fixtures_verkle-genesis.tar.gz`!\r\n\r\n### Generating Genesis Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/pull/466/commits/47addd7be52f2e07743aa2f4710236f463c5afdf), fill with the following command:\r\n```\r\nfill --fork Verkle --evm-bin=/evm -n auto -m blockchain_test\r\n```\r\n\r\n## 🔁 Verkle Conversion Test Fixtures - 0 Stride\r\n\r\nContains an improvement to the initial set of transition [tests](https://github.com/ethereum/execution-spec-tests/releases/tag/eip6800%40v0.0.1).\r\n\r\nThese aim to verify a basic fork transition from Shanghai to Verkle. 0 stride denotes that the initial MPT remains frozen. Thus the MPT is not being converted to a VKT within these tests. The intention is to check that **only blocks after the transition** update the VKT, isolating VKT fork transition issues without touching MPT stride conversion logic.\r\n\r\nThe next release will contain conversion tests with some stride enabled to dynamically validate the MPT conversion.\r\n\r\nPlease use `fixtures_verkle-conversion-stride-0.tar.gz`!\r\n\r\n### Generating Conversion Fixtures\r\n\r\nUsing the geth evm binary from this [commit](https://github.com/gballet/go-ethereum/pull/466/commits/47addd7be52f2e07743aa2f4710236f463c5afdf), fill with the following command:\r\n```\r\nfill --fork EIP6800Transition --evm-bin=/evm -n auto -m blockchain_test\r\n```\r\n" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166538302", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166538302/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/166538302/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/v3.0.0", "id": 166538302, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84J7Sw-", "tag_name": "v3.0.0", "target_commitish": "main", "name": " Petřín (v3.0.0)", "draft": false, "prerelease": false, "created_at": "2024-07-23T18:34:24Z", "published_at": "2024-07-23T23:43:55Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/183049828", "id": 183049828, "node_id": "RA_kwDOIQGLK84K6R5k", "name": "fixtures_develop.tar.gz", "label": null, "uploader": { "login": "spencer-tb", "id": 60348173, "node_id": "MDQ6VXNlcjYwMzQ4MTcz", "avatar_url": "https://avatars.githubusercontent.com/u/60348173?v=4", "gravatar_id": "", "url": "https://api.github.com/users/spencer-tb", "html_url": "https://github.com/spencer-tb", "followers_url": "https://api.github.com/users/spencer-tb/followers", "following_url": "https://api.github.com/users/spencer-tb/following{/other_user}", "gists_url": "https://api.github.com/users/spencer-tb/gists{/gist_id}", "starred_url": "https://api.github.com/users/spencer-tb/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/spencer-tb/subscriptions", "organizations_url": "https://api.github.com/users/spencer-tb/orgs", "repos_url": "https://api.github.com/users/spencer-tb/repos", "events_url": "https://api.github.com/users/spencer-tb/events{/privacy}", "received_events_url": "https://api.github.com/users/spencer-tb/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "content_type": "application/x-gzip", "state": "uploaded", "size": 21746751, "download_count": 3396, "created_at": "2024-07-31T20:47:41Z", "updated_at": "2024-07-31T20:48:01Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_develop.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/181430588", "id": 181430588, "node_id": "RA_kwDOIQGLK84K0Gk8", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2075015, "download_count": 8, "created_at": "2024-07-23T23:38:17Z", "updated_at": "2024-07-23T23:38:17Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_eip7692.tar.gz" }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/181430589", "id": 181430589, "node_id": "RA_kwDOIQGLK84K0Gk9", "name": "fixtures_stable.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2847936, "download_count": 24258, "created_at": "2024-07-23T23:38:17Z", "updated_at": "2024-07-23T23:38:17Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_stable.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/v3.0.0", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/v3.0.0", "body": "EEST's Petřín release adds many improvements and additions. Please read the breaking changes!\r\n\r\nA notable key package `ethereum_test_tools` is now fragmented into several fine grained packages that are suitable for use within other Python based repositories.\r\n\r\nThe consume simulator pytest plugin now contains 4 fixture runners:\r\n- `consume direct`: provides a pytest wrapper to execute multiple fixtures against client evm `statetest/blocktest` runners.\r\n- `consume rlp`: using hive as a back-end, executes fixture block rlps against fully instantiated clients, verifying the last block hash is expected.\r\n- `consume engine`: with a hive back-end, sends `engine_newPayloadVX` calls against fully instantiated clients validating each call response.\r\n- `consume all`: provides a wrapper surrounding all commands to execute consume direct, rlp and engine at once for the specified fixtures.\r\n\r\nWith a refined consume suite, testers can now `fill` and `consume` the generated fixtures extremely quickly to validate both the generated fixture and client implementation. This removes the cumbersome requirement of updating hive when verifying new fixtures.\r\n\r\nTo align the [execution-apis](https://github.com/ethereum/execution-apis/) engine specification with the `consume engine` plugin, the `blockchain_test_hive` fixture is renamed to `blockchain_test_engine` to align more with the sentiment of the spec. Similarly, the fixture format of the latter is changed to match the engine new payload `\"params\"` field defined in the spec.\r\n\r\n---\r\n\r\n### 💥 Breaking Changes\r\n\r\n- Cancun is now the latest deployed fork, and the development fork is now Prague ([#489](https://github.com/ethereum/execution-spec-tests/pull/489)).\r\n- Stable fixtures artifact `fixtures.tar.gz` has been renamed to `fixtures_stable.tar.gz` ([#573](https://github.com/ethereum/execution-spec-tests/pull/573))\r\n- The \"Blockchain Test Hive\" fixture format has been renamed to \"Blockchain Test Engine\" and updated to more closely resemble the `engine_newPayload` format in the `execution-apis` specification (https://github.com/ethereum/execution-apis/blob/main/src/engine/prague.md#request) and now contains a single `\"params\"` field instead of multiple fields for each parameter ([#687](https://github.com/ethereum/execution-spec-tests/pull/687)).\r\n- Output folder for fixtures has been renamed from \"blockchain_tests_hive\" to \"blockchain_tests_engine\" ([#687](https://github.com/ethereum/execution-spec-tests/pull/687)).\r\n\r\n### 🧪 Test Cases\r\n\r\n- ✨ Add tests for eof container's section bytes position smart fuzzing ([#592](https://github.com/ethereum/execution-spec-tests/pull/592)).\r\n- ✨ Add `test_create_selfdestruct_same_tx_increased_nonce` which tests self-destructing a contract with a nonce > 1 ([#478](https://github.com/ethereum/execution-spec-tests/pull/478)).\r\n- ✨ Add `test_double_kill` and `test_recreate` which test resurrection of accounts killed with `SELFDESTRUCT` ([#488](https://github.com/ethereum/execution-spec-tests/pull/488)).\r\n- ✨ Add eof example valid invalid tests from ori, fetch EOF Container implementation ([#535](https://github.com/ethereum/execution-spec-tests/pull/535)).\r\n- ✨ Add tests for [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537) ([#499](https://github.com/ethereum/execution-spec-tests/pull/499)).\r\n- ✨ [EIP-663](https://eips.ethereum.org/EIPS/eip-663): Add `test_dupn.py` and `test_swapn.py` ([#502](https://github.com/ethereum/execution-spec-tests/pull/502)).\r\n- ✨ Add tests for [EIP-6110: Supply validator deposits on chain](https://eips.ethereum.org/EIPS/eip-6110) ([#530](https://github.com/ethereum/execution-spec-tests/pull/530)).\r\n- ✨ Add tests for [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002) ([#530](https://github.com/ethereum/execution-spec-tests/pull/530)).\r\n- ✨ Add tests for [EIP-7685: General purpose execution layer requests](https://eips.ethereum.org/EIPS/eip-7685) ([#530](https://github.com/ethereum/execution-spec-tests/pull/530)).\r\n- ✨ Add tests for [EIP-2935: Serve historical block hashes from state](https://eips.ethereum.org/EIPS/eip-2935) ([#564](https://github.com/ethereum/execution-spec-tests/pull/564), [#585](https://github.com/ethereum/execution-spec-tests/pull/585)).\r\n- ✨ Add tests for [EIP-4200: EOF - Static relative jumps](https://eips.ethereum.org/EIPS/eip-4200) ([#581](https://github.com/ethereum/execution-spec-tests/pull/581), [#666](https://github.com/ethereum/execution-spec-tests/pull/666)).\r\n- ✨ Add tests for [EIP-7069: EOF - Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069) ([#595](https://github.com/ethereum/execution-spec-tests/pull/595)).\r\n- 🐞 Fix typos in self-destruct collision test from erroneous pytest parametrization ([#608](https://github.com/ethereum/execution-spec-tests/pull/608)).\r\n- ✨ Add tests for [EIP-3540: EOF - EVM Object Format v1](https://eips.ethereum.org/EIPS/eip-3540) ([#634](https://github.com/ethereum/execution-spec-tests/pull/634), [#668](https://github.com/ethereum/execution-spec-tests/pull/668)).\r\n- 🔀 Update EIP-7002 tests to match spec changes in [ethereum/execution-apis#549](https://github.com/ethereum/execution-apis/pull/549) ([#600](https://github.com/ethereum/execution-spec-tests/pull/600))\r\n- ✨ Convert a few eip1153 tests from ethereum/tests repo into .py ([#440](https://github.com/ethereum/execution-spec-tests/pull/440)).\r\n- ✨ Add tests for [EIP-7480: EOF - Data section access instructions](https://eips.ethereum.org/EIPS/eip-7480) ([#518](https://github.com/ethereum/execution-spec-tests/pull/518), [#664](https://github.com/ethereum/execution-spec-tests/pull/664)).\r\n- ✨ Add tests for subcontainer kind validation from [EIP-7620: EOF Contract Creation](https://eips.ethereum.org/EIPS/eip-7620) for the cases with deeply nested containers and non-first code sections ([#676](https://github.com/ethereum/execution-spec-tests/pull/676)).\r\n- ✨ Add tests for runtime stack overflow at CALLF instruction from [EIP-4750: EOF - Functions](https://eips.ethereum.org/EIPS/eip-4750) ([#678](https://github.com/ethereum/execution-spec-tests/pull/678)).\r\n- ✨ Add tests for runtime stack overflow at JUMPF instruction from [EIP-6206: EOF - JUMPF and non-returning functions](https://eips.ethereum.org/EIPS/eip-6206) ([#690](https://github.com/ethereum/execution-spec-tests/pull/690)).\r\n- ✨ Add tests for [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://eips.ethereum.org/EIPS/eip-7251) ([#642](https://github.com/ethereum/execution-spec-tests/pull/642))\r\n- ✨ Add tests for Devnet-1 version of [EIP-7702: Set EOA account code](https://eips.ethereum.org/EIPS/eip-7702) ([#621](https://github.com/ethereum/execution-spec-tests/pull/621))\r\n\r\n### 🛠️ Framework\r\n\r\n- 🐞 Fix incorrect `!=` operator for `FixedSizeBytes` ([#477](https://github.com/ethereum/execution-spec-tests/pull/477)).\r\n- ✨ Add Macro enum that represents byte sequence of Op instructions ([#457](https://github.com/ethereum/execution-spec-tests/pull/457))\r\n- ✨ Number of parameters used to call opcodes (to generate bytecode) is now checked ([#492](https://github.com/ethereum/execution-spec-tests/pull/492)).\r\n- ✨ Libraries have been refactored to use `pydantic` for type checking in most test types ([#486](https://github.com/ethereum/execution-spec-tests/pull/486), [#501](https://github.com/ethereum/execution-spec-tests/pull/501), [#508](https://github.com/ethereum/execution-spec-tests/pull/508)).\r\n- ✨ Opcodes are now subscriptable and it's used to define the data portion of the opcode: `Op.PUSH1(1) == Op.PUSH1[1] == b\"\\x60\\x01\"` ([#513](https://github.com/ethereum/execution-spec-tests/pull/513))\r\n- ✨ Added EOF fixture format ([#512](https://github.com/ethereum/execution-spec-tests/pull/512)).\r\n- ✨ Verify filled EOF fixtures using `evmone-eofparse` during `fill` execution ([#519](https://github.com/ethereum/execution-spec-tests/pull/519)).\r\n- ✨ Added `--traces` support when running with Hyperledger Besu ([#511](https://github.com/ethereum/execution-spec-tests/pull/511)).\r\n- ✨ Use pytest's \"short\" traceback style (`--tb=short`) for failure summaries in the test report for more compact terminal output ([#542](https://github.com/ethereum/execution-spec-tests/pull/542)).\r\n- ✨ The `fill` command now generates HTML test reports with links to the JSON fixtures and debug information ([#537](https://github.com/ethereum/execution-spec-tests/pull/537)).\r\n- ✨ Add an Ethereum RPC client class for use with consume commands ([#556](https://github.com/ethereum/execution-spec-tests/pull/556)).\r\n- ✨ Add a \"slow\" pytest marker, in order to be able to limit the filled tests until release ([#562](https://github.com/ethereum/execution-spec-tests/pull/562)).\r\n- ✨ Add a CLI tool that generates blockchain tests as Python from a transaction hash ([#470](https://github.com/ethereum/execution-spec-tests/pull/470), [#576](https://github.com/ethereum/execution-spec-tests/pull/576)).\r\n- ✨ Add more Transaction and Block exceptions from existing ethereum/tests repo ([#572](https://github.com/ethereum/execution-spec-tests/pull/572)).\r\n- ✨ Add \"description\" and \"url\" fields containing test case documentation and a source code permalink to fixtures during `fill` and use them in `consume`-generated Hive test reports ([#579](https://github.com/ethereum/execution-spec-tests/pull/579)).\r\n- ✨ Add git workflow evmone coverage script for any new lines mentioned in converted_ethereum_tests.txt ([#503](https://github.com/ethereum/execution-spec-tests/pull/503)).\r\n- ✨ Add a new covariant marker `with_all_contract_creating_tx_types` that allows automatic parametrization of a test with all contract-creating transaction types at the current executing fork ([#602](https://github.com/ethereum/execution-spec-tests/pull/602)).\r\n- ✨ Tests are now encouraged to declare a `pre: Alloc` parameter to get the pre-allocation object for the test, and use `pre.deploy_contract` and `pre.fund_eoa` to deploy contracts and fund accounts respectively, instead of declaring the `pre` as a dictionary or modifying its contents directly (see the [state test tutorial](https://eest.ethereum.org/main/tutorials/state_transition/) for an updated example) ([#584](https://github.com/ethereum/execution-spec-tests/pull/584)).\r\n- ✨ Enable loading of [ethereum/tests/BlockchainTests](https://github.com/ethereum/tests/tree/develop/BlockchainTests) ([#596](https://github.com/ethereum/execution-spec-tests/pull/596)).\r\n- 🔀 Refactor `gentest` to use `ethereum_test_tools.rpc.rpc` by adding to `get_transaction_by_hash`, `debug_trace_call` to `EthRPC` ([#568](https://github.com/ethereum/execution-spec-tests/pull/568)).\r\n- ✨ Write a properties file to the output directory and enable direct generation of a fixture tarball from `fill` via `--output=fixtures.tgz`([#627](https://github.com/ethereum/execution-spec-tests/pull/627)).\r\n- 🔀 `ethereum_test_tools` library has been split into multiple libraries ([#645](https://github.com/ethereum/execution-spec-tests/pull/645)).\r\n- ✨ Add the consume engine simulator and refactor the consume simulator suite. ([#691](https://github.com/ethereum/execution-spec-tests/pull/691)).\r\n\r\n### 📋 Misc\r\n\r\n- 🐞 Fix CI by using Golang 1.21 in Github Actions to build geth ([#484](https://github.com/ethereum/execution-spec-tests/pull/484)).\r\n- 💥 \"Merge\" has been renamed to \"Paris\" in the \"network\" field of the Blockchain tests, and in the \"post\" field of the State tests ([#480](https://github.com/ethereum/execution-spec-tests/pull/480)).\r\n- ✨ Port entry point scripts to use [click](https://click.palletsprojects.com) and add tests ([#483](https://github.com/ethereum/execution-spec-tests/pull/483)).\r\n- 💥 As part of the pydantic conversion, the fixtures have the following (possibly breaking) changes ([#486](https://github.com/ethereum/execution-spec-tests/pull/486)):\r\n - State test field `transaction` now uses the proper zero-padded hex number format for fields `maxPriorityFeePerGas`, `maxFeePerGas`, and `maxFeePerBlobGas`\r\n - Fixtures' hashes (in the `_info` field) are now calculated by removing the \"_info\" field entirely instead of it being set to an empty dict.\r\n- 🐞 Relax minor and patch dependency requirements to avoid conflicting package dependencies ([#510](https://github.com/ethereum/execution-spec-tests/pull/510)).\r\n- 🔀 Update all CI actions to use their respective Node.js 20 versions, ahead of their Node.js 16 version deprecations ([#527](https://github.com/ethereum/execution-spec-tests/pull/527)).\r\n- ✨ Releases now contain a `fixtures_eip7692.tar.gz` which contains all EOF fixtures ([#573](https://github.com/ethereum/execution-spec-tests/pull/573)).\r\n- ✨ Use `solc-select` for tox when running locally and within CI ([#604](https://github.com/ethereum/execution-spec-tests/pull/604)).\r\n\r\n\r\n## New Contributors\r\n* @raxhvl made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/482\r\n* @yperbasis made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/488\r\n* @redistay made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/493\r\n* @hanghuge made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/495\r\n* @gumb0 made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/559\r\n* @artemd24 made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/568\r\n* @pdobacz made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/614\r\n* @raymondnguyen8 made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/632\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/v2.1.1...v3.0.0", "reactions": { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166538302/reactions", "total_count": 2, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 2, "eyes": 0 }, "mentions_count": 8 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166305534", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166305534/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/166305534/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v1.0.7", "id": 166305534, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84J6Z7-", "tag_name": "eip7692@v1.0.7", "target_commitish": "main", "name": "eip7692@v1.0.7", "draft": false, "prerelease": true, "created_at": "2024-07-19T21:16:06Z", "published_at": "2024-07-19T21:33:40Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/180664153", "id": 180664153, "node_id": "RA_kwDOIQGLK84KxLdZ", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2075714, "download_count": 140, "created_at": "2024-07-19T21:23:37Z", "updated_at": "2024-07-19T21:23:38Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.0.7/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v1.0.7", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v1.0.7", "body": "## What's Changed\r\n* new(tests): EOF - EIP-6206: Runtime stack overflow at JUMPF by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/690\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.0.6...eip7692@v1.0.7", "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166305622", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/166305622/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/166305622/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692-prague%40v1.0.7", "id": 166305622, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84J6Z9W", "tag_name": "eip7692-prague@v1.0.7", "target_commitish": "main", "name": "eip7692-prague@v1.0.7", "draft": false, "prerelease": true, "created_at": "2024-07-19T21:16:26Z", "published_at": "2024-07-19T21:34:05Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/180664380", "id": 180664380, "node_id": "RA_kwDOIQGLK84KxLg8", "name": "fixtures_eip7692-prague.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 7797035, "download_count": 6, "created_at": "2024-07-19T21:24:33Z", "updated_at": "2024-07-19T21:24:33Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692-prague%40v1.0.7/fixtures_eip7692-prague.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692-prague@v1.0.7", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692-prague@v1.0.7", "body": "## What's Changed\r\n* new(tests): EOF - EIP-6206: Runtime stack overflow at JUMPF by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/690\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.0.6...eip7692-prague@v1.0.7", "mentions_count": 1 }, { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/165899819", "assets_url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/165899819/assets", "upload_url": "https://uploads.github.com/repos/ethereum/execution-spec-tests/releases/165899819/assets{?name,label}", "html_url": "https://github.com/ethereum/execution-spec-tests/releases/tag/eip7692%40v1.0.6", "id": 165899819, "author": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOIQGLK84J424r", "tag_name": "eip7692@v1.0.6", "target_commitish": "main", "name": "eip7692@v1.0.6", "draft": false, "prerelease": true, "created_at": "2024-07-17T17:31:27Z", "published_at": "2024-07-17T18:17:33Z", "assets": [ { "url": "https://api.github.com/repos/ethereum/execution-spec-tests/releases/assets/180177698", "id": 180177698, "node_id": "RA_kwDOIQGLK84KvUsi", "name": "fixtures_eip7692.tar.gz", "label": "", "uploader": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "content_type": "application/gzip", "state": "uploaded", "size": 2057949, "download_count": 14, "created_at": "2024-07-17T17:39:35Z", "updated_at": "2024-07-17T17:39:35Z", "browser_download_url": "https://github.com/ethereum/execution-spec-tests/releases/download/eip7692%40v1.0.6/fixtures_eip7692.tar.gz" } ], "tarball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/tarball/eip7692@v1.0.6", "zipball_url": "https://api.github.com/repos/ethereum/execution-spec-tests/zipball/eip7692@v1.0.6", "body": "## What's Changed\r\n* fix(tests): EOF - EIP-4200: Organize code_validation_jump.py tests by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/666\r\n* fix(tests): EOF - EIP-3540: EXTCODECOPY a hard-coded size for EOF target by @gurukamath in https://github.com/ethereum/execution-spec-tests/pull/667\r\n* new(tests): EOF - EIP-7480: Add tests for DATACOPY memory expansion by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/664\r\n* feat(fw): support invalid containers in EOFStateTest by @chfast in https://github.com/ethereum/execution-spec-tests/pull/665\r\n* fix(tests): EOF - EIP-3540: Organize code_validation.py tests by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/668\r\n* new(tests): EOF - EIP-7620: Add more tests for validating EOF subcontainer kinds by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/676\r\n* new(tests): EOF - EIP-7069: RETURNDATACOPY mem expansion and copy OOG by @pdobacz in https://github.com/ethereum/execution-spec-tests/pull/671\r\n* fix(cli): `RJUMPV` in `evm_bytes_to_python` by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/683\r\n* refactor(fw): Refactor `ethereum_test_tools` into separate libraries by @marioevz in https://github.com/ethereum/execution-spec-tests/pull/645\r\n* new(tests) EXT*CALL input data validation by @shemnon in https://github.com/ethereum/execution-spec-tests/pull/685\r\n* new(tests): EOF - EIP-4750: Runtime stack overflow at CALLF by @gumb0 in https://github.com/ethereum/execution-spec-tests/pull/678\r\n\r\n## New Contributors\r\n* @raymondnguyen8 made their first contribution in https://github.com/ethereum/execution-spec-tests/pull/632\r\n\r\n**Full Changelog**: https://github.com/ethereum/execution-spec-tests/compare/eip7692@v1.0.5...eip7692@v1.0.6", "mentions_count": 7 } ] ================================================ FILE: src/pytest_plugins/consume/tests/test_consume_args.py ================================================ """Test the consume plugins with various cli arguments.""" import re import shutil from pathlib import Path from typing import List import pytest from filelock import FileLock from pytest import Pytester, TempPathFactory from ethereum_clis import TransitionTool MINIMAL_TEST_FILE_NAME = "test_example.py" MINIMAL_TEST_CONTENTS = """ from ethereum_test_tools import Transaction def test_function(state_test, pre): tx = Transaction(to=0, gas_limit=21_000, sender=pre.fund_eoa()) state_test(pre=pre, post={}, tx=tx) """ @pytest.fixture def minimal_test_path(pytester: pytest.Pytester) -> Path: """ Minimal test file that's written to a file using pytester and ready to fill. """ tests_dir = pytester.mkdir("tests") test_file = tests_dir / MINIMAL_TEST_FILE_NAME test_file.write_text(MINIMAL_TEST_CONTENTS) return test_file @pytest.fixture(scope="module") def consume_test_case_ids() -> list[str]: """Hard-coded expected output of `consume direct --collectonly -q`.""" return [ f"src/pytest_plugins/consume/direct/test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/{MINIMAL_TEST_FILE_NAME}::test_function[fork_Cancun-blockchain_test_from_state_test]]", f"src/pytest_plugins/consume/direct/test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/{MINIMAL_TEST_FILE_NAME}::test_function[fork_Paris-blockchain_test_from_state_test]]", f"src/pytest_plugins/consume/direct/test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/{MINIMAL_TEST_FILE_NAME}::test_function[fork_Shanghai-blockchain_test_from_state_test]]", f"src/pytest_plugins/consume/direct/test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/{MINIMAL_TEST_FILE_NAME}::test_function[fork_Cancun-state_test]]", f"src/pytest_plugins/consume/direct/test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/{MINIMAL_TEST_FILE_NAME}::test_function[fork_Paris-state_test]]", f"src/pytest_plugins/consume/direct/test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/{MINIMAL_TEST_FILE_NAME}::test_function[fork_Shanghai-state_test]]", ] @pytest.fixture(scope="module") def fill_fork_from() -> str: """Specify the value for `fill`'s `--from` argument.""" return "Paris" @pytest.fixture(scope="module") def fill_fork_until() -> str: """Specify the value for `fill`'s `--until` argument.""" return "Cancun" @pytest.fixture(scope="module") def fixtures_dir(tmp_path_factory: TempPathFactory) -> Path: """Define the temporary test fixture directory for fill output.""" return tmp_path_factory.mktemp("fixtures") @pytest.fixture(autouse=True) def fill_tests( pytester: Pytester, fixtures_dir: Path, fill_fork_from: str, fill_fork_until: str, minimal_test_path: Path, default_t8n: TransitionTool, ) -> None: """ Run fill to generate test fixtures for use with testing consume. We only need to do this once so ideally the scope of this fixture should be "module", however the `pytester` fixture's scope is function and cannot be accessed from a higher scope fixture. Instead we use a file lock and only write the fixtures once to the directory. """ with FileLock(fixtures_dir.with_suffix(".lock")): meta_folder = fixtures_dir / ".meta" if not meta_folder.exists(): pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") args = [ "-c", "pytest-fill.ini", "-m", "not blockchain_test_engine", f"--from={fill_fork_from}", f"--until={fill_fork_until}", f"--output={str(fixtures_dir)}", f"--t8n-server-url={default_t8n.server_url}", str(minimal_test_path), ] fill_result = pytester.runpytest(*args) assert fill_result.ret == 0, f"Fill command failed:\n{str(fill_result.stdout)}" @pytest.fixture(autouse=True, scope="function") def test_fixtures(pytester: Pytester, fixtures_dir: Path, fill_tests: None) -> List[Path]: """ Copy test fixtures from the regular temp path to the pytester temporary dir. We intentionally copy the `.meta/index.json` file to test its compatibility with consume. """ del fill_tests test_fixtures = [] for json_file in fixtures_dir.rglob("*.json"): target_dir = Path(pytester.path) / json_file.parent if not target_dir.exists(): target_dir.mkdir(parents=True) pytester.copy_example(name=json_file.as_posix()) shutil.move(json_file.name, target_dir / json_file.name) if ".meta" not in str(json_file): test_fixtures.append(json_file) return test_fixtures @pytest.fixture(autouse=True) def copy_consume_test_paths(pytester: Pytester) -> None: """Specify and copy the consume test paths to the testdir.""" local_test_paths = [Path("src/pytest_plugins/consume/direct/test_via_direct.py")] for test_path in local_test_paths: target_dir = Path(pytester.path) / test_path.parent target_dir.mkdir(parents=True, exist_ok=True) pytester.copy_example(name=str(test_path)) pytester.copy_example(name=str(test_path.parent / "conftest.py")) shutil.move(test_path.name, target_dir / test_path.name) shutil.move("conftest.py", target_dir / "conftest.py") single_test_id = ( "src/pytest_plugins/consume/direct/" "test_via_direct.py::test_fixture[CollectOnlyFixtureConsumer-tests/" f"{MINIMAL_TEST_FILE_NAME}::test_function[fork_Shanghai-state_test]]" ) @pytest.mark.parametrize( "extra_args, expected_filter_pattern", [ pytest.param( ["--collect-only", "-q"], re.compile(r".*"), id="no_extra_args", ), pytest.param( ["--collect-only", "-q", "--sim.limit", ".*fork_Cancun.*"], re.compile(".*Cancun.*"), id="sim_limit_regex", ), pytest.param( ["--sim.limit", "collectonly:.*fork_Cancun.*"], re.compile(".*Cancun.*"), id="sim_limit_collect_only_regex", ), pytest.param( [ "--collect-only", "-q", "--sim.limit", f"id:{single_test_id}", ], re.compile(re.escape(f"{single_test_id}")), id="sim_limit_id", ), pytest.param( [ "--sim.limit", f"collectonly:id:{single_test_id}", ], re.compile( re.compile(re.escape(f"{single_test_id}")), ), id="sim_limit_collect_only_id", ), ], ) def test_consume_simlimit_collectonly( pytester: Pytester, fixtures_dir: Path, consume_test_case_ids: List[str], extra_args: List[str], expected_filter_pattern: re.Pattern, ) -> None: """Test consume's --sim.limit argument in collect-only mode.""" pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-consume.ini") consume_test_path = "src/pytest_plugins/consume/direct/test_via_direct.py" args = [ "-c", "pytest-consume.ini", "--input", str(fixtures_dir), consume_test_path, *extra_args, ] result = pytester.runpytest(*args) assert result.ret == 0 stdout_lines = str(result.stdout).splitlines() test_id_pattern = r"^(?:\s*)([^:\s]+\.py::[^:\s]+(?:::[^:\s]+)?)(?:\[[^\]]*\])?(?:\s*)$" collected_test_ids = [ line for line in stdout_lines if line.strip() and re.match(test_id_pattern, line) ] expected_collected_test_ids = [ line for line in consume_test_case_ids if expected_filter_pattern.search(line) ] assert set(collected_test_ids) == set(expected_collected_test_ids) ================================================ FILE: src/pytest_plugins/consume/tests/test_fixtures_source_input_types.py ================================================ """Test the simplified consume behavior for different input types.""" from pathlib import Path from unittest.mock import MagicMock, patch from ..consume import CACHED_DOWNLOADS_DIRECTORY, FixturesSource class TestSimplifiedConsumeBehavior: """Test suite for the simplified consume behavior.""" def test_fixtures_source_from_release_url_no_api_calls(self) -> None: """ Test that direct release URLs do not make API calls for release page. """ test_url = "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_develop.tar.gz" with patch("pytest_plugins.consume.consume.FixtureDownloader") as mock_downloader: mock_instance = MagicMock() mock_instance.download_and_extract.return_value = (False, Path("/tmp/test")) mock_downloader.return_value = mock_instance source = FixturesSource.from_release_url(test_url) # Verify no release page is set for direct URLs assert source.release_page == "" assert source.url == test_url assert source.input_option == test_url def test_fixtures_source_from_release_spec_makes_api_calls(self) -> None: """ Test that release specs still make API calls and get release page. """ test_spec = "stable@latest" with patch("pytest_plugins.consume.consume.get_release_url") as mock_get_url: mock_get_url.return_value = "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_stable.tar.gz" with patch("pytest_plugins.consume.consume.get_release_page_url") as mock_get_page: mock_get_page.return_value = ( "https://github.com/ethereum/execution-spec-tests/releases/tag/v3.0.0" ) with patch("pytest_plugins.consume.consume.FixtureDownloader") as mock_downloader: mock_instance = MagicMock() mock_instance.download_and_extract.return_value = (False, Path("/tmp/test")) mock_downloader.return_value = mock_instance source = FixturesSource.from_release_spec(test_spec) # Verify API calls were made and release page is set mock_get_url.assert_called_once_with(test_spec) mock_get_page.assert_called_once_with( "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_stable.tar.gz" ) assert ( source.release_page == "https://github.com/ethereum/execution-spec-tests/releases/tag/v3.0.0" ) def test_fixtures_source_from_regular_url_no_release_page(self) -> None: """Test that regular URLs (non-GitHub) don't have release page.""" test_url = "http://example.com/fixtures.tar.gz" with patch("pytest_plugins.consume.consume.FixtureDownloader") as mock_downloader: mock_instance = MagicMock() mock_instance.download_and_extract.return_value = (False, Path("/tmp/test")) mock_downloader.return_value = mock_instance source = FixturesSource.from_url(test_url) # Verify no release page for regular URLs assert source.release_page == "" assert source.url == test_url def test_output_formatting_without_release_page_for_direct_urls(self) -> None: """ Test output formatting when release page is empty for direct URLs. """ from unittest.mock import MagicMock from pytest import Config config = MagicMock(spec=Config) config.fixtures_source = MagicMock() config.fixtures_source.was_cached = False config.fixtures_source.is_local = False config.fixtures_source.path = Path("/tmp/test") config.fixtures_source.url = "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_develop.tar.gz" config.fixtures_source.release_page = "" # Empty for direct URLs # Simulate the output generation logic from pytest_configure reason = "" if config.fixtures_source.was_cached: reason += "Fixtures already cached." elif not config.fixtures_source.is_local: reason += "Fixtures downloaded and cached." reason += f"\nPath: {config.fixtures_source.path}" reason += f"\nInput: {config.fixtures_source.url or config.fixtures_source.path}" if config.fixtures_source.release_page: reason += f"\nRelease page: {config.fixtures_source.release_page}" assert "Release page:" not in reason assert "Path:" in reason assert "Input:" in reason def test_output_formatting_with_release_page_for_specs(self) -> None: """ Test output formatting when release page is present for release specs. """ from unittest.mock import MagicMock from pytest import Config config = MagicMock(spec=Config) config.fixtures_source = MagicMock() config.fixtures_source.was_cached = False config.fixtures_source.is_local = False config.fixtures_source.path = Path("/tmp/test") config.fixtures_source.url = "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_stable.tar.gz" config.fixtures_source.release_page = ( "https://github.com/ethereum/execution-spec-tests/releases/tag/v3.0.0" ) # Simulate the output generation logic from pytest_configure reason = "" if config.fixtures_source.was_cached: reason += "Fixtures already cached." elif not config.fixtures_source.is_local: reason += "Fixtures downloaded and cached." reason += f"\nPath: {config.fixtures_source.path}" reason += f"\nInput: {config.fixtures_source.url or config.fixtures_source.path}" if config.fixtures_source.release_page: reason += f"\nRelease page: {config.fixtures_source.release_page}" assert ( "Release page: https://github.com/ethereum/execution-spec-tests/releases/tag/v3.0.0" in reason ) class TestFixturesSourceFromInput: """Test the from_input method without no_api_calls parameter.""" def test_from_input_handles_release_url(self) -> None: """Test that from_input properly handles release URLs.""" test_url = "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_develop.tar.gz" with patch.object(FixturesSource, "from_release_url") as mock_from_release_url: mock_from_release_url.return_value = MagicMock() FixturesSource.from_input(test_url) mock_from_release_url.assert_called_once_with( test_url, CACHED_DOWNLOADS_DIRECTORY, None ) def test_from_input_handles_release_spec(self) -> None: """Test that from_input properly handles release specs.""" test_spec = "stable@latest" with patch.object(FixturesSource, "from_release_spec") as mock_from_release_spec: mock_from_release_spec.return_value = MagicMock() FixturesSource.from_input(test_spec) mock_from_release_spec.assert_called_once_with( test_spec, CACHED_DOWNLOADS_DIRECTORY, None ) def test_from_input_handles_regular_url(self) -> None: """Test that from_input properly handles regular URLs.""" test_url = "http://example.com/fixtures.tar.gz" with patch.object(FixturesSource, "from_url") as mock_from_url: mock_from_url.return_value = MagicMock() FixturesSource.from_input(test_url) mock_from_url.assert_called_once_with(test_url, CACHED_DOWNLOADS_DIRECTORY, None) def test_from_input_handles_extract_to_parameter(self) -> None: """Test that from_input properly passes extract_to parameter.""" test_url = "https://github.com/ethereum/execution-spec-tests/releases/download/v3.0.0/fixtures_develop.tar.gz" extract_to_path = Path("/custom/extract/path") with patch.object(FixturesSource, "from_release_url") as mock_from_release_url: mock_from_release_url.return_value = MagicMock() FixturesSource.from_input(test_url, extract_to=extract_to_path) mock_from_release_url.assert_called_once_with( test_url, CACHED_DOWNLOADS_DIRECTORY, extract_to_path ) ================================================ FILE: src/pytest_plugins/consume/tests/test_releases.py ================================================ """Test release parsing given the github repository release JSON data.""" from os.path import realpath from pathlib import Path from typing import List import pytest from ..releases import ( ReleaseInformation, get_release_url_from_release_information, parse_release_information_from_file, ) CURRENT_FILE = Path(realpath(__file__)) CURRENT_FOLDER = CURRENT_FILE.parent @pytest.fixture(scope="session") def release_information() -> List[ReleaseInformation]: """Return the release information from a file.""" return parse_release_information_from_file(CURRENT_FOLDER / "release_information.json") @pytest.mark.parametrize( "release_name,expected_release_download_url", [ ( "pectra-devnet-5", "pectra-devnet-5%40v1.0.0/fixtures_pectra-devnet-5.tar.gz", ), ( "pectra-devnet-4@v1.0.0", "pectra-devnet-4%40v1.0.0/fixtures_pectra-devnet-4.tar.gz", ), ( "stable", "v3.0.0/fixtures_stable.tar.gz", ), ( "develop", "v3.0.0/fixtures_develop.tar.gz", ), ( "eip7692-prague", "eip7692%40v1.1.1/fixtures_eip7692-prague.tar.gz", ), ], ) def test_release_parsing( release_name: str, expected_release_download_url: str, release_information: List[ReleaseInformation], ) -> None: """Test release parsing.""" assert ( "https://github.com/ethereum/execution-spec-tests/releases/download/" + expected_release_download_url ) == get_release_url_from_release_information(release_name, release_information) ================================================ FILE: src/pytest_plugins/custom_logging/__init__.py ================================================ """ Import the logging module content to make it available from pytest_plugins.logging. """ from .plugin_logging import ( FAIL_LEVEL, VERBOSE_LEVEL, ColorFormatter, EESTLogger, LogLevel, UTCFormatter, configure_logging, get_logger, ) __all__ = [ "VERBOSE_LEVEL", "FAIL_LEVEL", "EESTLogger", "UTCFormatter", "ColorFormatter", "LogLevel", "get_logger", "configure_logging", ] ================================================ FILE: src/pytest_plugins/custom_logging/plugin_logging.py ================================================ """ A Pytest plugin to configure logging for pytest sessions. Note: While pytest's builtin logging is generally amazing, it does not write timestamps when log output is written to pytest's caplog (the captured output for a test). And having timestamps in this output is the main use case for adding logging to our plugins. This output gets shown in the `FAILURES` summary section, which is shown as the "simulator log" in hive simulations. For this use case, timestamps are essential to verify timing issues against the clients log. This module provides both: 1. A standalone logging configuration system that can be used in any Python project 2. A pytest plugin that automatically configures logging for pytest sessions """ import functools import logging import os import sys from datetime import datetime, timezone from logging import LogRecord from pathlib import Path from typing import Any, ClassVar, Optional, cast import pytest from _pytest.terminal import TerminalReporter file_handler: Optional[logging.FileHandler] = None # Custom log levels VERBOSE_LEVEL = 15 # Between INFO (10) and DEBUG (20) FAIL_LEVEL = 35 # Between WARNING (30) and ERROR (40) # Add custom log levels to the logging module logging.addLevelName(VERBOSE_LEVEL, "VERBOSE") logging.addLevelName(FAIL_LEVEL, "FAIL") class EESTLogger(logging.Logger): """Define custom log levels via a dedicated Logger class.""" def verbose( self, msg: object, *args: Any, exc_info: BaseException | bool | None = None, stack_info: bool = False, stacklevel: int = 1, extra: Optional[dict[str, Any]] = None, ) -> None: """ Log a message with VERBOSE level severity (15). This level is between DEBUG (10) and INFO (20), intended for messages more detailed than INFO but less verbose than DEBUG. """ if stacklevel is None: stacklevel = 1 if self.isEnabledFor(VERBOSE_LEVEL): self._log(VERBOSE_LEVEL, msg, args, exc_info, extra, stack_info, stacklevel) def fail( self, msg: object, *args: Any, exc_info: BaseException | bool | None = None, stack_info: bool = False, stacklevel: int = 1, extra: Optional[dict[str, Any]] = None, ) -> None: """ Log a message with FAIL level severity (35). This level is between WARNING (30) and ERROR (40), intended for test failures and similar issues. """ if stacklevel is None: stacklevel = 1 if self.isEnabledFor(FAIL_LEVEL): self._log(FAIL_LEVEL, msg, args, exc_info, extra, stack_info, stacklevel) # Register the custom logger class logging.setLoggerClass(EESTLogger) def get_logger(name: str) -> EESTLogger: """Get a properly-typed logger with the EEST custom logging levels.""" return cast(EESTLogger, logging.getLogger(name)) # Module logger logger = get_logger(__name__) class UTCFormatter(logging.Formatter): """ Log formatter that formats UTC timestamps with milliseconds and +00:00 suffix. """ def formatTime(self, record: LogRecord, datefmt: str | None = None) -> str: # noqa: D102,N802 # camelcase required del datefmt dt = datetime.fromtimestamp(record.created, tz=timezone.utc) return dt.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] + "+00:00" class ColorFormatter(UTCFormatter): """ Formatter that adds ANSI color codes to log level names for terminal output. """ running_in_docker: ClassVar[bool] = Path("/.dockerenv").exists() COLORS = { logging.DEBUG: "\033[37m", # Gray VERBOSE_LEVEL: "\033[36m", # Cyan logging.INFO: "\033[36m", # Cyan logging.WARNING: "\033[33m", # Yellow FAIL_LEVEL: "\033[35m", # Magenta logging.ERROR: "\033[31m", # Red logging.CRITICAL: "\033[41m", # Red background } RESET = "\033[0m" def format(self, record: LogRecord) -> str: """Apply colorful formatting only when not running in Docker.""" # First make a copy of the record to avoid modifying the original record_copy = logging.makeLogRecord(record.__dict__) if not self.running_in_docker: color = self.COLORS.get(record_copy.levelno, self.RESET) record_copy.levelname = f"{color}{record_copy.levelname}{self.RESET}" return super().format(record_copy) class LogLevel: """Help parse a log-level provided on the command-line.""" @classmethod def from_cli(cls, value: str) -> int: """ Parse a logging level from CLI. Accepts standard level names (e.g. 'INFO', 'debug') or numeric values. """ try: return int(value) except ValueError: pass level_name = value.upper() if level_name in logging._nameToLevel: return logging._nameToLevel[level_name] valid = ", ".join(logging._nameToLevel.keys()) raise ValueError(f"Invalid log level '{value}'. Expected one of: {valid} or a number.") # ========================================================================= # Standalone logging configuration (usable without pytest) # ========================================================================= def configure_logging( log_level: int | str = "INFO", log_file: Optional[str | Path] = None, log_to_stdout: bool = True, log_format: str = "%(asctime)s [%(levelname)s] %(name)s: %(message)s", use_color: Optional[bool] = None, ) -> Optional[logging.FileHandler]: """ Configure logging with EEST custom log levels and formatters. This function can be used in any Python project to set up logging with the same settings as the pytest plugin. Args: log_level: The logging level to use (name or numeric value) log_file: Path to the log file (if None, no file logging is set up) log_to_stdout: Whether to log to stdout log_format: The log format string use_color: Whether to use colors in stdout output (auto-detected if None) Returns: The file handler if log_file is provided, otherwise None """ # Initialize root logger root_logger = logging.getLogger() # Convert log level if it's a string if isinstance(log_level, str): log_level = LogLevel.from_cli(log_level) # Set log level root_logger.setLevel(log_level) # Remove any existing handlers for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) # File handler (optional) file_handler_instance = None if log_file: log_path = Path(log_file) log_path.parent.mkdir(exist_ok=True, parents=True) file_handler_instance = logging.FileHandler(log_path, mode="w") file_handler_instance.setFormatter(UTCFormatter(fmt=log_format)) root_logger.addHandler(file_handler_instance) # Stdout handler (optional) if log_to_stdout: stream_handler = logging.StreamHandler(sys.stdout) # Determine whether to use color if use_color is None: use_color = not ColorFormatter.running_in_docker if use_color: stream_handler.setFormatter(ColorFormatter(fmt=log_format)) else: stream_handler.setFormatter(UTCFormatter(fmt=log_format)) root_logger.addHandler(stream_handler) logger.verbose("Logging configured successfully.") return file_handler_instance # ========================================================================== # Pytest plugin integration # ========================================================================== def pytest_addoption(parser: pytest.Parser) -> None: # noqa: D103 logging_group = parser.getgroup( "logging", "Arguments related to logging from test fixtures and tests." ) logging_group.addoption( "--eest-log-level", # --log-level is defined by pytest's built-in # logging "--eestloglevel", action="store", default="INFO", type=LogLevel.from_cli, dest="eest_log_level", help=( "The logging level to use in the test session: DEBUG, INFO, WARNING, ERROR or " "CRITICAL, default - INFO. An integer in [0, 50] may be also provided." ), ) @functools.cache def get_log_stem(argv0: str, argv1: Optional[str]) -> str: """Generate the stem (prefix-subcommand-timestamp) for log files.""" stem = Path(argv0).stem prefix = "pytest" if stem in ("", "-c", "__main__") else stem subcommand = argv1 if argv1 and not argv1.startswith("-") else None timestamp = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S") name_parts = [prefix] if subcommand: name_parts.append(subcommand) name_parts.append(timestamp) return "-".join(name_parts) def pytest_configure_node(node: Any) -> None: """Initialize a variable for use in the worker (xdist hook).""" potential_subcommand = None if len(sys.argv) > 1: potential_subcommand = sys.argv[1] node.workerinput["log_stem"] = get_log_stem(sys.argv[0], potential_subcommand) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Initialize logging for pytest sessions. This goes to a lot of effort to ensure that a log file is created per worker if xdist is used and that the timestamp used in the filename is the same across main and all workers. """ global file_handler # Determine log file path with consistent timestamp across workers potential_subcommand = None if len(sys.argv) > 1: potential_subcommand = sys.argv[1] log_stem = getattr(config, "workerinput", {}).get("log_stem") or get_log_stem( sys.argv[0], potential_subcommand ) worker_id = os.getenv("PYTEST_XDIST_WORKER", "main") log_filename = f"{log_stem}-{worker_id}.log" log_path = Path("logs") log_path.mkdir(exist_ok=True) log_file_path = log_path / log_filename # Store the log file path in the pytest config config.option.eest_log_file_path = log_file_path # Configure logging using the standalone function file_handler = configure_logging( log_level=config.getoption("eest_log_level"), log_file=log_file_path, log_to_stdout=True, ) def pytest_report_header(config: pytest.Config) -> list[str]: """Show the log file path in the test session header.""" if eest_log_file_path := config.option.eest_log_file_path: return [f"Log file: {eest_log_file_path}"] return [] def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None: """ Display the log file path in the terminal summary like the HTML report does. """ if terminalreporter.config.option.collectonly: return if eest_log_file_path := terminalreporter.config.option.eest_log_file_path: terminalreporter.write_sep("-", f"Log file: {eest_log_file_path.resolve()}", yellow=True) def log_only_to_file(level: int, msg: str, *args: Any) -> None: """Log a message only to the file handler, bypassing stdout.""" if not file_handler: return handler: logging.Handler = file_handler logger = logging.getLogger(__name__) if not logger.isEnabledFor(level): return record: LogRecord = logger.makeRecord( logger.name, level, fn=__file__, lno=0, msg=msg, args=args, exc_info=None, func=None, extra=None, ) handler.handle(record) def pytest_runtest_logstart(nodeid: str, location: tuple[str, int, str]) -> None: """Log test start to file.""" del location log_only_to_file(logging.INFO, f"ℹ️ - START TEST: {nodeid}") def pytest_runtest_logreport(report: pytest.TestReport) -> None: """Log test status and duration to file after it runs.""" if report.when != "call": return nodeid = report.nodeid duration = report.duration log_level = logging.INFO if hasattr(report, "wasxfail"): if report.skipped: status = "XFAIL" emoji = "💤" elif report.passed: status = "XPASS" emoji = "🚨" else: status = "XFAIL ERROR" emoji = "💣" log_level = logging.ERROR elif report.skipped: status = "SKIPPED" emoji = "⏭️" elif report.failed: status = "FAILED" emoji = "❌" log_level = FAIL_LEVEL else: status = "PASSED" emoji = "✅" log_only_to_file(log_level, f"{emoji} - {status} in {duration:.2f}s: {nodeid}") def pytest_runtest_logfinish(nodeid: str, location: tuple[str, int, str]) -> None: """Log end of test to file.""" del location log_only_to_file(logging.INFO, f"ℹ️ - END TEST: {nodeid}") ================================================ FILE: src/pytest_plugins/custom_logging/tests/__init__.py ================================================ """Test package for the logging module.""" ================================================ FILE: src/pytest_plugins/custom_logging/tests/test_logging.py ================================================ """ Tests for the logging module. These tests verify the functionality of the custom logging system, including both the standalone configuration and the pytest integration. """ import io import logging import re import tempfile from pathlib import Path from typing import Any from unittest.mock import MagicMock, patch import pytest from ..plugin_logging import ( FAIL_LEVEL, VERBOSE_LEVEL, ColorFormatter, EESTLogger, UTCFormatter, configure_logging, get_logger, ) class TestLoggerSetup: """Test the basic setup of loggers and custom levels.""" def test_custom_levels_registered(self) -> None: """Test that custom log levels are properly registered.""" assert logging.getLevelName(VERBOSE_LEVEL) == "VERBOSE" assert logging.getLevelName(FAIL_LEVEL) == "FAIL" assert logging.getLevelName("VERBOSE") == VERBOSE_LEVEL assert logging.getLevelName("FAIL") == FAIL_LEVEL def test_get_logger(self) -> None: """Test that get_logger returns a properly typed logger.""" logger = get_logger("test_logger") assert isinstance(logger, EESTLogger) assert logger.name == "test_logger" assert hasattr(logger, "verbose") assert hasattr(logger, "fail") class TestEESTLogger: """Test the custom logger methods.""" def setup_method(self) -> None: """Set up a logger and string stream for capturing log output.""" self.log_output = io.StringIO() self.logger = get_logger("test_eest_logger") # Remove any existing handlers for handler in self.logger.handlers[:]: self.logger.removeHandler(handler) # Configure a basic handler that writes to our string stream handler = logging.StreamHandler(self.log_output) handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s")) self.logger.addHandler(handler) self.logger.setLevel(logging.DEBUG) # Set to lowest possible level for testing def test_verbose_method(self) -> None: """Test the verbose() method logs at the expected level.""" self.logger.verbose("This is a verbose message") assert "VERBOSE: This is a verbose message" in self.log_output.getvalue() def test_fail_method(self) -> None: """Test the fail() method logs at the expected level.""" self.logger.fail("This is a fail message") assert "FAIL: This is a fail message" in self.log_output.getvalue() def test_standard_methods(self) -> None: """Test that standard log methods still work.""" self.logger.debug("Debug message") self.logger.info("Info message") self.logger.warning("Warning message") log_output = self.log_output.getvalue() assert "DEBUG: Debug message" in log_output assert "INFO: Info message" in log_output assert "WARNING: Warning message" in log_output class TestFormatters: """Test the custom log formatters.""" def test_utc_formatter(self) -> None: """Test that UTCFormatter formats timestamps correctly.""" formatter = UTCFormatter(fmt="%(asctime)s: %(message)s") record = logging.makeLogRecord( { "msg": "Test message", "created": 1609459200.0, # 2021-01-01 00:00:00 UTC } ) formatted = formatter.format(record) assert re.match(r"2021-01-01 00:00:00\.\d{3}\+00:00: Test message", formatted) def test_color_formatter(self, monkeypatch: pytest.MonkeyPatch) -> None: """Test that ColorFormatter adds color codes to the log level.""" # Create the formatter and test record formatter = ColorFormatter(fmt="[%(levelname)s] %(message)s") record = logging.makeLogRecord( { "levelno": logging.ERROR, "levelname": "ERROR", "msg": "Error message", } ) # Test case 1: When not running in Docker, colors should be applied # Override the class variable directly with monkeypatch monkeypatch.setattr(ColorFormatter, "running_in_docker", False) formatted = formatter.format(record) assert "\033[31mERROR\033[0m" in formatted # Red color for ERROR # Test case 2: When running in Docker, colors should not be applied monkeypatch.setattr(ColorFormatter, "running_in_docker", True) formatted = formatter.format(record) assert "\033[31mERROR\033[0m" not in formatted assert "ERROR" in formatted class TestStandaloneConfiguration: """Test the standalone logging configuration function.""" def test_configure_logging_defaults(self) -> None: """Test configure_logging with default parameters.""" with patch("sys.stdout", new=io.StringIO()): # Configure logging with default settings handler = configure_logging() # Should log to stdout by default root_logger = logging.getLogger() assert any(isinstance(h, logging.StreamHandler) for h in root_logger.handlers) # Should set INFO level by default assert root_logger.level == logging.INFO # Should not return a file handler assert handler is None def test_configure_logging_with_file(self) -> None: """Test configure_logging with file output.""" # Create a temporary directory for log files with tempfile.TemporaryDirectory() as temp_dir: log_file = Path(temp_dir) / "test.log" # Configure logging with a file handler = configure_logging(log_file=log_file, log_to_stdout=False) try: # Should return a file handler assert isinstance(handler, logging.FileHandler) # Should create the log file assert log_file.exists() # Log a message and check it appears in the file logger = get_logger("test_config") logger.info("Test log message") with open(log_file, "r") as f: log_content = f.read() assert "Test log message" in log_content finally: # Clean up if handler: handler.close() logging.getLogger().handlers = [] # Remove all handlers def test_configure_logging_with_level(self) -> None: """Test configure_logging with custom log level.""" # Test with string level name configure_logging(log_level="DEBUG", log_to_stdout=False) assert logging.getLogger().level == logging.DEBUG # Test with numeric level configure_logging(log_level=VERBOSE_LEVEL, log_to_stdout=False) assert logging.getLogger().level == VERBOSE_LEVEL # Clean up logging.getLogger().handlers = [] # Only the TestPytestIntegration class tests require pytest to run properly # We'll put the skip marker on that class instead of the whole module class TestPytestIntegration: """Test the pytest integration of the logging module.""" def test_pytest_configure(self, monkeypatch: pytest.MonkeyPatch) -> None: """Test that pytest_configure sets up logging correctly.""" from pytest_plugins.custom_logging.plugin_logging import pytest_configure # Create logs directory if it doesn't exist log_dir = Path("logs") if not log_dir.exists(): log_dir.mkdir() # Save the original handlers to restore later original_handlers = logging.getLogger().handlers.copy() try: # Remove existing handlers to start clean for handler in logging.getLogger().handlers[:]: logging.getLogger().removeHandler(handler) # Create a mock pytest config class MockConfig: def __init__(self) -> None: self.option = MagicMock() self.option.eest_log_level = logging.INFO self.workerinput: dict[str, Any] = {} def getoption(self, name: str) -> Any: if name == "eest_log_level": return logging.INFO # Set up environment monkeypatch.setattr("sys.argv", ["pytest"]) monkeypatch.setenv("PYTEST_XDIST_WORKER", "worker1") # Call pytest_configure config = MockConfig() pytest_configure(config) # type: ignore[arg-type] # Check that logging is configured assert hasattr(config.option, "eest_log_file_path") # Check that a file handler was added to the root logger file_handlers = [ h for h in logging.getLogger().handlers if isinstance(h, logging.FileHandler) ] assert len(file_handlers) > 0 # Find the log file handler's file log_file = Path(file_handlers[0].baseFilename) # Check that the log file was created assert log_file.exists() # Verify the file is in the logs directory assert log_file.parent.resolve() == log_dir.resolve() # Clean up the test log file log_file.unlink() finally: # Clean up: Remove any handlers we added for handler in logging.getLogger().handlers[:]: handler.close() logging.getLogger().removeHandler(handler) # Restore original handlers for handler in original_handlers: logging.getLogger().addHandler(handler) ================================================ FILE: src/pytest_plugins/eels_resolutions.json ================================================ { "EELSMaster": { "git_url": "https://github.com/ethereum/execution-specs.git", "branch": "forks/bpos", "commit": "7aacb2c54111391af5e98c505d5010b5698a770f" }, "Frontier": { "same_as": "EELSMaster" }, "Homestead": { "same_as": "EELSMaster" }, "Byzantium": { "same_as": "EELSMaster" }, "ConstantinopleFix": { "same_as": "EELSMaster" }, "Istanbul": { "same_as": "EELSMaster" }, "Berlin": { "same_as": "EELSMaster" }, "London": { "same_as": "EELSMaster" }, "Merge": { "same_as": "EELSMaster" }, "Shanghai": { "same_as": "EELSMaster" }, "Cancun": { "same_as": "EELSMaster" }, "Prague": { "same_as": "EELSMaster" }, "Osaka": { "same_as": "EELSMaster" }, "BPO1": { "same_as": "EELSMaster" }, "BPO2": { "same_as": "EELSMaster" }, "BPO3": { "same_as": "EELSMaster" }, "BPO4": { "same_as": "EELSMaster" }, "Amsterdam": { "git_url": "https://github.com/fselmo/execution-specs.git", "branch": "feat/amsterdam-fork-and-block-access-lists", "commit": "3496e719b515bc82f35c42f83e78d426d31283ba" } } ================================================ FILE: src/pytest_plugins/eels_resolver.py ================================================ """ Pytest plugin to help working with the `ethereum-spec-evm-resolver`. This plugin sets the `EELS_RESOLUTIONS_FILE` environment variable to the path of the `eels_resolutions.json` file in the pytest root directory. If the environment variable is already set, the plugin will not override it. """ import os import shutil from os.path import realpath from pathlib import Path import pytest from pytest_metadata.plugin import metadata_key CURRENT_FOLDER = Path(realpath(__file__)).parent @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Set the EELS_RESOLUTIONS_FILE environment variable. Args: config (pytest.Config): The pytest configuration object. """ evm_bin = config.getoption("evm_bin", default=None) if evm_bin and "resolver" not in str(evm_bin): # evm_bin is not set for the framework tests: always set the env var. return env_var_name = "EELS_RESOLUTIONS_FILE" eels_resolutions_file = os.getenv(env_var_name) if os.getenv("EELS_RESOLUTIONS"): # If the user sets this variable, assume they know what they're doing. return if eels_resolutions_file: file_path = Path(eels_resolutions_file) if not file_path.is_absolute(): raise ValueError(f"The path provided in {env_var_name} must be an absolute path.") if not file_path.exists(): raise FileNotFoundError( f"The file {file_path} does not exist. " f"Ensure the {env_var_name} points to an existing file." ) else: default_file_path = CURRENT_FOLDER / "eels_resolutions.json" os.environ[env_var_name] = str(default_file_path) eels_resolutions_file = str(default_file_path) if "Tools" in config.stash[metadata_key]: # don't overwrite existing tools metadata added by other plugins config.stash[metadata_key]["Tools"]["EELS Resolutions"] = str(eels_resolutions_file) else: config.stash[metadata_key]["Tools"] = {"EELS Resolutions": str(eels_resolutions_file)} config._eels_resolutions_file = eels_resolutions_file # type: ignore def pytest_report_header(config: pytest.Config, start_path: Path) -> str: """ Report the EELS_RESOLUTIONS_FILE path to the pytest report header. Args: config (pytest.Config): The pytest configuration object. start_path (Path): The starting directory for the test run. Returns: str: A string to add to the pytest report header. """ del start_path eels_resolutions_file = getattr(config, "_eels_resolutions_file", None) if eels_resolutions_file: return f"EELS resolutions file: {eels_resolutions_file}" return "" @pytest.fixture(scope="session", autouse=True) def output_metadata_dir_with_teardown( request: pytest.FixtureRequest, ) -> object: """ Session-scoped fixture that attempts to retrieve the filler's "output_metadata_dir" fixture value and copies the EELS resolutions file there, if `_eels_resolutions_file` is set on the config object. """ yield try: output_metadata_dir = request.getfixturevalue("output_metadata_dir") if output_metadata_dir.name == "stdout": return except pytest.FixtureLookupError: output_metadata_dir = None eels_resolutions_file = getattr(request.config, "_eels_resolutions_file", None) if output_metadata_dir and eels_resolutions_file: shutil.copy( Path(eels_resolutions_file), Path(output_metadata_dir) / Path(eels_resolutions_file).name, ) ================================================ FILE: src/pytest_plugins/execute/__init__.py ================================================ """ A pytest plugin that provides fixtures that execute tests in live devnets/testnets. """ ================================================ FILE: src/pytest_plugins/execute/eth_config/__init__.py ================================================ """Execute module to test the `eth_config` RPC endpoint.""" ================================================ FILE: src/pytest_plugins/execute/eth_config/eth_config.py ================================================ """Pytest plugin to test the `eth_config` RPC endpoint in a node.""" import re from os.path import realpath from pathlib import Path from typing import Dict, List from urllib.parse import urlparse import pytest import requests from ethereum_test_rpc import EthRPC from pytest_plugins.custom_logging import get_logger from .execute_types import Genesis, NetworkConfigFile CURRENT_FILE = Path(realpath(__file__)) CURRENT_FOLDER = CURRENT_FILE.parent DEFAULT_NETWORK_CONFIGS_FILE = CURRENT_FOLDER / "networks.yml" DEFAULT_NETWORKS = NetworkConfigFile.from_yaml(DEFAULT_NETWORK_CONFIGS_FILE) EXECUTION_CLIENTS = ["besu", "erigon", "geth", "nethermind", "nimbusel", "reth"] CONSENSUS_CLIENTS = ["grandine", "lighthouse", "lodestar", "nimbus", "prysm", "teku"] logger = get_logger(__name__) def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" eth_config_group = parser.getgroup("execute", "Arguments defining eth_config test behavior.") eth_config_group.addoption( "--network", action="store", dest="network", required=False, type=str, default=None, help=( "Name of the network to verify for the RPC client. Supported networks by default: " f"{', '.join(DEFAULT_NETWORKS.root.keys())}." ), ) eth_config_group.addoption( "--network-config-file", action="store", dest="network_config_file", required=False, type=Path, default=None, help="Path to the yml file that contains custom network configuration " "(e.g. ./src/pytest_plugins/execute/eth_config/networks.yml).\nIf no config is provided " "then majority mode will be used for devnet testing (clients that have a different " "response than the majority of clients will fail the test)", ) eth_config_group.addoption( "--clients", required=False, action="store", dest="clients", type=str, default=None, help="Comma-separated list of clients to be tested in majority mode. Example: " '"besu,erigon,geth,nethermind,nimbusel,reth"\nIf you do not pass a value, majority mode ' "testing will be disabled.", ) eth_config_group.addoption( "--genesis-config-file", action="store", dest="genesis_config_file", required=False, type=Path, default=None, help="Path to a genesis JSON file from which a custom network configuration " "must be derived.", ) eth_config_group.addoption( "--genesis-config-url", action="store", dest="genesis_config_url", required=False, type=str, default=None, help="URL to a genesis JSON file from which a custom network configuration " "must be derived.", ) eth_config_group.addoption( "--rpc-endpoint", required=True, action="store", dest="rpc_endpoint", help="RPC endpoint to the execution client that will be tested.", ) def pytest_configure(config: pytest.Config) -> None: """ Load the network configuration file and load the specific network to be used for the test. """ genesis_config_file = config.getoption("genesis_config_file") genesis_config_url = config.getoption("genesis_config_url") network_configs_path = config.getoption("network_config_file") network_name = config.getoption("network") rpc_endpoint = config.getoption("rpc_endpoint") # majority mode clients = config.getoption("clients") config.option.majority_clients = [] # List[str] if genesis_config_file and genesis_config_url: pytest.exit( "Cannot specify both the --genesis-config-file and --genesis-config-url flags." ) if (genesis_config_file or genesis_config_url) and network_name: pytest.exit( "Cannot specify a network name when using the --genesis-config-file or " "--genesis-config-url flag." ) # handle the one of the three flags that was passed # case 1: genesis_config_file if genesis_config_file: genesis_config_contents = genesis_config_file.read_text() genesis_config = Genesis.model_validate_json(genesis_config_contents) config.network = genesis_config.network_config() # type: ignore # case 2: genesis_config_url elif genesis_config_url: genesis_config_contents = requests.get(genesis_config_url).text genesis_config = Genesis.model_validate_json(genesis_config_contents) config.network = genesis_config.network_config() # type: ignore # case 3: network_name elif network_name: # load provided networks file if network_configs_path is None: network_configs_path = DEFAULT_NETWORK_CONFIGS_FILE if not network_configs_path.exists(): pytest.exit(f'Specified networks file "{network_configs_path}" does not exist.') try: network_configs = NetworkConfigFile.from_yaml(network_configs_path) except Exception as e: pytest.exit(f"Could not load file {network_configs_path}: {e}") if network_name not in network_configs.root: pytest.exit( f'Network "{network_name}" could not be found in file "{network_configs_path}".' ) config.network = network_configs.root[network_name] # type: ignore # determine whether to activate majority mode or not if clients: clients.replace(" ", "") clients = clients.split(",") for c in clients: if c not in EXECUTION_CLIENTS: pytest.exit(f"Unsupported client was passed: {c}") logger.info(f"Provided client list: {clients}") # activate majority mode if also URL condition is met if ".ethpandaops.io" in rpc_endpoint: logger.info("Ethpandaops RPC detected") logger.info("Toggling majority test on") config.option.majority_clients = clients # List[str] else: logger.info("Majority test mode is disabled because no --clients value was passed.") if config.getoption("collectonly", default=False): return # Test out the RPC endpoint to be able to fail fast if it's not working eth_rpc = EthRPC(rpc_endpoint) try: logger.debug("Will now perform a connection check (request chain_id)..") chain_id = eth_rpc.chain_id() logger.debug(f"Connection check ok (successfully got chain id {chain_id})") except Exception as e: pytest.exit(f"Could not connect to RPC endpoint {rpc_endpoint}: {e}") try: logger.debug("Will now briefly check whether eth_config is supported by target rpc..") eth_rpc.config() logger.debug("Connection check ok (successfully got eth_config response)") except Exception as e: pytest.exit(f"RPC endpoint {rpc_endpoint} does not support `eth_config`: {e}") @pytest.fixture(autouse=True, scope="session") def rpc_endpoint(request: pytest.FixtureRequest) -> str: """ Return remote RPC endpoint to be used to make requests to the execution client. """ return request.config.getoption("rpc_endpoint") def all_rpc_endpoints(config: pytest.Config) -> Dict[str, List[EthRPC]]: """ Derive a mapping of exec clients to the RPC URLs they are reachable at. """ rpc_endpoint = config.getoption("rpc_endpoint") # besu, erigon, .. el_clients: List[str] = config.getoption("majority_clients") if len(el_clients) == 0: endpoint_name = rpc_endpoint try: parsed = urlparse(rpc_endpoint) endpoint_name = parsed.hostname except Exception: pass return {endpoint_name: [EthRPC(rpc_endpoint)]} pattern = r"(.*?@rpc\.)([^-]+)-([^-]+)(-.*)" url_dict: Dict[str, List[EthRPC]] = { exec_client: [ EthRPC( re.sub( pattern, f"\\g<1>{consensus}-{exec_client}\\g<4>", rpc_endpoint, ) ) for consensus in CONSENSUS_CLIENTS ] for exec_client in el_clients } # url_dict looks like this: # { 'besu': [, # , ..], # 'erigon': ... ... } return url_dict def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """Generate tests for all clients under test.""" # all_rpc_endpoints is a dictionary with the name of the exec client as key # and the possible URLs to contact it (different cl combinations) as value # list all_rpc_endpoints_dict = all_rpc_endpoints(metafunc.config) if metafunc.definition.name == "test_eth_config_majority": if len(all_rpc_endpoints_dict) < 2: # The test function is not run because we only have a single # client, so no majority comparison logger.info( "Skipping eth_config majority because less than 2 exec clients were passed" ) metafunc.parametrize( ["all_rpc_endpoints"], [ pytest.param( all_rpc_endpoints_dict, id=metafunc.definition.name, marks=pytest.mark.skip("Only one client"), ) ], ) else: metafunc.parametrize( ["all_rpc_endpoints"], [ pytest.param( all_rpc_endpoints_dict, id=metafunc.definition.name, ) ], scope="function", ) else: metafunc.parametrize( ["eth_rpc"], [ pytest.param( rpc_endpoint, id=f"{metafunc.definition.name}[{endpoint_name}]", ) for endpoint_name, rpc_endpoint in all_rpc_endpoints_dict.items() ], scope="function", ) ================================================ FILE: src/pytest_plugins/execute/eth_config/execute_eth_config.py ================================================ """ Pytest test to verify a client's configuration using `eth_config` RPC endpoint. """ import json import time from hashlib import sha256 from typing import Dict, List import pytest from ethereum_test_rpc import EthConfigResponse, EthRPC from pytest_plugins.custom_logging import get_logger from .execute_types import NetworkConfig logger = get_logger(__name__) @pytest.fixture(scope="function") def eth_config_response(eth_rpc: List[EthRPC]) -> EthConfigResponse | None: """ Get the `eth_config` response from the client to be verified by all tests. """ for rpc in eth_rpc: try: response = rpc.config() if response is not None: return response except Exception: pass else: raise Exception("Could not connect to any RPC client.") @pytest.fixture(scope="function") def network(request: pytest.FixtureRequest) -> NetworkConfig: """Get the network that will be used to verify all tests.""" return request.config.network # type: ignore @pytest.fixture(scope="function") def current_time() -> int: """ Get the `eth_config` response from the client to be verified by all tests. """ return int(time.time()) @pytest.fixture(scope="function") def expected_eth_config(network: NetworkConfig, current_time: int) -> EthConfigResponse: """ Calculate the current fork value to verify against the client's response. """ return network.get_eth_config(current_time) def test_eth_config_current( eth_config_response: EthConfigResponse | None, expected_eth_config: EthConfigResponse, ) -> None: """Validate `current` field of the `eth_config` RPC endpoint.""" assert eth_config_response is not None, "Client did not return a valid `eth_config` response." assert eth_config_response.current is not None, ( "Client did not return a valid `current` fork config." ) expected_current = expected_eth_config.current assert eth_config_response.current == expected_current, ( "Client's `current` fork config does not match expected value: " f"{eth_config_response.current.model_dump_json(indent=2)} != " f"{expected_current.model_dump_json(indent=2)}" ) def test_eth_config_current_fork_id( eth_config_response: EthConfigResponse | None, expected_eth_config: EthConfigResponse, ) -> None: """Validate `forkId` field within the `current` configuration object.""" assert eth_config_response is not None, "Client did not return a valid `eth_config` response." assert eth_config_response.current is not None, ( "Client did not return a valid `current` fork config." ) assert eth_config_response.current.fork_id is not None, ( "Client did not return a valid `forkId` in the current fork config." ) assert eth_config_response.current.fork_id == expected_eth_config.current.fork_id, ( "Client's `current.forkId` does not match expected value: " f"{eth_config_response.current.fork_id} != " f"{expected_eth_config.current.fork_id}" ) def test_eth_config_next( eth_config_response: EthConfigResponse | None, expected_eth_config: EthConfigResponse, ) -> None: """Validate `next` field of the `eth_config` RPC endpoint.""" assert eth_config_response is not None, "Client did not return a valid `eth_config` response." expected_next = expected_eth_config.next if expected_next is None: assert eth_config_response.next is None, ( "Client returned a `next` fork config but expected None." ) else: assert eth_config_response.next is not None, ( "Client did not return a valid `next` fork config." ) assert eth_config_response.next == expected_next, ( "Client's `next` fork config does not match expected value: " f"{eth_config_response.next.model_dump_json(indent=2)} != " f"{expected_next.model_dump_json(indent=2)}" ) def test_eth_config_next_fork_id( eth_config_response: EthConfigResponse | None, expected_eth_config: EthConfigResponse, ) -> None: """Validate `forkId` field within the `next` configuration object.""" assert eth_config_response is not None, "Client did not return a valid `eth_config` response." expected_next = expected_eth_config.next if expected_next is None: assert eth_config_response.next is None, ( "Client returned a `next` fork config but expected None." ) else: assert eth_config_response.next is not None, ( "Client did not return a valid `next` fork config." ) expected_next_fork_id = expected_next.fork_id if expected_next_fork_id is None: assert eth_config_response.next.fork_id is None, ( "Client returned a `next.forkId` but expected None." ) else: received_fork_id = eth_config_response.next.fork_id assert received_fork_id is not None, "Client did not return a valid `next.forkId`." assert received_fork_id == expected_next_fork_id, ( "Client's `next.forkId` does not match expected value: " f"{received_fork_id} != " f"{expected_next_fork_id}" ) def test_eth_config_last( eth_config_response: EthConfigResponse | None, expected_eth_config: EthConfigResponse, ) -> None: """Validate `last` field of the `eth_config` RPC endpoint.""" expected_last = expected_eth_config.last assert eth_config_response is not None, "Client did not return a valid `eth_config` response." if expected_last is None: assert eth_config_response.last is None, ( "Client returned a `last` fork config but expected None." ) else: assert eth_config_response.last is not None, ( "Client did not return a valid `last` fork config." ) assert eth_config_response.last == expected_last, ( "Client's `last` fork config does not match expected value: " f"{eth_config_response.last.model_dump_json(indent=2)} != " f"{expected_last.model_dump_json(indent=2)}" ) def test_eth_config_last_fork_id( eth_config_response: EthConfigResponse | None, expected_eth_config: EthConfigResponse, ) -> None: """Validate `forkId` field within the `last` configuration object.""" assert eth_config_response is not None, "Client did not return a valid `eth_config` response." expected_last = expected_eth_config.last if expected_last is None: assert eth_config_response.last is None, ( "Client returned a `last` fork config but expected None." ) else: assert eth_config_response.last is not None, ( "Client did not return a valid `last` fork config." ) expected_last_fork_id = expected_last.fork_id if expected_last_fork_id is None: assert eth_config_response.last.fork_id is None, ( "Client returned a `last.forkId` but expected None." ) else: received_fork_id = eth_config_response.last.fork_id assert received_fork_id is not None, "Client did not return a valid `last.forkId`." assert received_fork_id == expected_last_fork_id, ( "Client's `last.forkId` does not match expected value: " f"{received_fork_id} != " f"{expected_last_fork_id}" ) def test_eth_config_majority( all_rpc_endpoints: Dict[str, List[EthRPC]], ) -> None: """ Queries devnet exec clients for their eth_config and fails if not all have the same response. """ responses = dict() # Dict[exec_client_name : response] # noqa: C408 client_to_url_used_dict = dict() # noqa: C408 for exec_client in all_rpc_endpoints.keys(): # try only as many consensus+exec client combinations until you receive # a response if all combinations for a given exec client fail we panic for eth_rpc_target in all_rpc_endpoints[exec_client]: try: response = eth_rpc_target.config(timeout=5) if response is None: logger.warning(f"Got 'None' as eth_config response from {eth_rpc_target}") continue except Exception as e: logger.warning( f"When trying to get eth_config from {eth_rpc_target} a problem occurred: {e}" ) continue response_str = json.dumps(response.model_dump(mode="json"), sort_keys=True) responses[exec_client] = response_str client_to_url_used_dict[exec_client] = ( eth_rpc_target.url ) # remember which cl+el combination was used logger.info(f"Response of {exec_client}: {response_str}\n\n") break # no need to gather more responses for this client assert len(responses.keys()) == len(all_rpc_endpoints.keys()), ( "Failed to get an eth_config response " f" from each specified execution client. Full list of execution clients is " f"{all_rpc_endpoints.keys()} but we were only able to gather eth_config responses " f"from: {responses.keys()}\n" "Will try again with a different consensus-execution client combination for " "this execution client" ) # determine hashes of client responses client_to_hash_dict = {} # Dict[exec_client : response hash] # noqa: C408 for client in responses.keys(): response_bytes = responses[client].encode("utf-8") response_hash = sha256(response_bytes).digest().hex() logger.info(f"Response hash of client {client}: {response_hash}") client_to_hash_dict[client] = response_hash # if not all responses have the same hash there is a critical consensus # issue expected_hash = "" for h in client_to_hash_dict.keys(): if expected_hash == "": expected_hash = client_to_hash_dict[h] continue assert client_to_hash_dict[h] == expected_hash, ( "Critical consensus issue: Not all eth_config responses are the " " same!\n" "Here is an overview of client response hashes:\n" + "\n\t".join(f"{k}: {v}" for k, v in client_to_hash_dict.items()) + "\n\n" "Here is an overview of which URLs were contacted:\n\t" + "\n\t".join(f"{k}: @{v.split('@')[1]}" for k, v in client_to_url_used_dict.items()) + "\n\n" # log which cl+el combinations were used without leaking full url "Here is a dump of all client responses:\n" + "\n\n".join(f"{k}: {v}" for k, v in responses.items()) ) assert expected_hash != "" logger.info("All clients returned the same eth_config response. Test has been passed!") ================================================ FILE: src/pytest_plugins/execute/eth_config/execute_types.py ================================================ """Types used to test `eth_config`.""" from binascii import crc32 from collections import defaultdict from functools import cached_property from pathlib import Path from typing import Annotated, Any, ClassVar, Dict, List, Self, Set import yaml from pydantic import BaseModel, BeforeValidator, Field, model_validator from ethereum_test_base_types import ( Address, Bytes, CamelModel, EthereumTestRootModel, ForkHash, Hash, HeaderNonce, HexNumber, Number, ) from ethereum_test_fixtures.blockchain import FixtureHeader from ethereum_test_forks import Fork, Frontier from ethereum_test_rpc import ( EthConfigResponse, ForkConfig, ForkConfigBlobSchedule, ) from ethereum_test_types import Alloc, Environment class AddressOverrideDict(EthereumTestRootModel): """ Dictionary with overrides to the default addresses specified for each fork. Required for testnets or devnets which have a different location of precompiles or system contracts. """ root: Dict[Address, Address] class ForkConfigBuilder(BaseModel): """Class to describe a current or next fork + bpo configuration.""" fork: Fork activation_time: int chain_id: int address_overrides: AddressOverrideDict blob_schedule: ForkConfigBlobSchedule | None = None @property def precompiles(self) -> Dict[str, Address]: """Get the precompiles.""" precompiles = {} for a in self.fork.precompiles(): label = a.label if a in self.address_overrides.root: a = self.address_overrides.root[a] precompiles[f"{label}"] = a return precompiles @property def system_contracts(self) -> Dict[str, Address]: """Get the system contracts.""" system_contracts = {} for a in self.fork.system_contracts(): label = a.label if a in self.address_overrides.root: a = self.address_overrides.root[a] system_contracts[f"{label}"] = a return system_contracts def get_config(self, fork_id: ForkHash) -> ForkConfig: """ Get the current and next fork configurations given the current time and the network configuration. """ return ForkConfig( activation_time=self.activation_time, blob_schedule=self.blob_schedule, chain_id=self.chain_id, fork_id=fork_id, precompiles=self.precompiles, system_contracts=self.system_contracts, ) def calculate_fork_id(genesis_hash: Hash, activation_times: Set[int]) -> ForkHash: """ Calculate the fork Id given the genesis hash and each fork activation times. """ buffer = bytes(genesis_hash) for activation_time in sorted(activation_times): if activation_time == 0: continue buffer += activation_time.to_bytes(length=8, byteorder="big") return ForkHash(crc32(buffer)) class ForkActivationTimes(EthereumTestRootModel[Dict[Fork, int]]): """Fork activation times.""" root: Dict[Fork, int] def forks_by_activation_time(self) -> Dict[int, Set[Fork]]: """Get the forks by activation time.""" forks_by_activation_time = defaultdict(set) for fork, activation_time in self.root.items(): forks_by_activation_time[activation_time].add(fork) return forks_by_activation_time def active_forks(self, current_time: int) -> List[Fork]: """Get the active forks.""" forks_by_activation_time = self.forks_by_activation_time() active_forks = [] for activation_time in sorted(forks_by_activation_time.keys()): if activation_time <= current_time: active_forks.extend(sorted(forks_by_activation_time[activation_time])) return active_forks def next_forks(self, current_time: int) -> List[Fork]: """Get the next forks.""" forks_by_activation_time = self.forks_by_activation_time() next_forks = [] for activation_time in sorted(forks_by_activation_time.keys()): if activation_time > current_time: next_forks.extend(sorted(forks_by_activation_time[activation_time])) return next_forks def active_fork(self, current_time: int) -> Fork: """Get the active fork.""" return self.active_forks(current_time)[-1] def next_fork(self, current_time: int) -> Fork | None: """Get the next fork.""" next_forks = self.next_forks(current_time) if next_forks: return next_forks[0] return None def last_fork(self, current_time: int) -> Fork | None: """Get the last fork.""" next_forks = self.next_forks(current_time) if next_forks: return next_forks[-1] return None def __getitem__(self, key: Fork) -> int: """Get the activation time for a given fork.""" return self.root[key] class NetworkConfig(CamelModel): """Ethereum network config.""" chain_id: HexNumber genesis_hash: Hash fork_activation_times: ForkActivationTimes blob_schedule: Dict[Fork, ForkConfigBlobSchedule] = Field(default_factory=dict) address_overrides: AddressOverrideDict = Field(default_factory=lambda: AddressOverrideDict({})) def get_eth_config(self, current_time: int) -> EthConfigResponse: """Get the current and next forks based on the given time.""" network_kwargs = { "chain_id": self.chain_id, "address_overrides": self.address_overrides, } activation_times = set(self.fork_activation_times.forks_by_activation_time().keys()) current_activation_times = { activation_time for activation_time in activation_times if activation_time <= current_time } next_activation_times = { activation_time for activation_time in activation_times if activation_time > current_time } active_fork = self.fork_activation_times.active_fork(current_time) current_config_builder: ForkConfigBuilder = ForkConfigBuilder( fork=active_fork, activation_time=self.fork_activation_times[active_fork], blob_schedule=self.blob_schedule.get(active_fork), **network_kwargs, ) current_config = current_config_builder.get_config( calculate_fork_id(self.genesis_hash, current_activation_times) ) kwargs = {"current": current_config} next_fork = self.fork_activation_times.next_fork(current_time) if next_fork: next_config_builder: ForkConfigBuilder = ForkConfigBuilder( fork=next_fork, activation_time=self.fork_activation_times[next_fork], blob_schedule=self.blob_schedule.get(next_fork), **network_kwargs, ) kwargs["next"] = next_config_builder.get_config( calculate_fork_id( self.genesis_hash, current_activation_times | {sorted(next_activation_times)[0]}, ) ) last_fork = self.fork_activation_times.last_fork(current_time) if last_fork: last_config_builder: ForkConfigBuilder = ForkConfigBuilder( fork=last_fork, activation_time=self.fork_activation_times[last_fork], blob_schedule=self.blob_schedule.get(last_fork), **network_kwargs, ) kwargs["last"] = last_config_builder.get_config( calculate_fork_id( self.genesis_hash, current_activation_times | next_activation_times, ) ) return EthConfigResponse(**kwargs) class NetworkConfigFile(EthereumTestRootModel): """Root model to describe a file that contains network configurations.""" root: Dict[str, NetworkConfig] @classmethod def from_yaml(cls, path: Path) -> Self: """Read the network configuration from a yaml file.""" with path.open("r") as file: config_data = yaml.safe_load(file) return cls.model_validate(config_data) class GenesisConfig(CamelModel): """Config model contained in a Geth-type genesis file.""" chain_id: int terminal_total_difficulty: int terminal_total_difficulty_passed: bool deposit_contract_address: Address = Address(0x00000000219AB540356CBB839CBE05303D7705FA) fork_activation_times: ForkActivationTimes blob_schedule: Dict[Fork, ForkConfigBlobSchedule] fork_synonyms: ClassVar[Dict[str, str | None]] = { # TODO: Ideally add fork synonyms, but not important for now. "eip150": None, "eip155": None, "eip158": None, "petersburg": None, "mergeNetsplit": "paris", } @property def address_overrides(self) -> AddressOverrideDict: """Get the address overrides.""" if self.deposit_contract_address == Address(0x00000000219AB540356CBB839CBE05303D7705FA): return AddressOverrideDict({}) return AddressOverrideDict( {Address(0x00000000219AB540356CBB839CBE05303D7705FA): self.deposit_contract_address} ) def fork(self) -> Fork: """Return the latest fork active at genesis.""" current_fork: Fork = Frontier for fork, activation_block_time in self.fork_activation_times.root.items(): if activation_block_time == 0 and fork > current_fork: current_fork = fork return current_fork @model_validator(mode="before") @classmethod def preprocess_fork_times_blocks(cls, data: Any) -> Any: """ Pre-process the dictionary to put fork block numbers and times in the correct format. Fork times and block numbers have the following format in the root of the object: ``` "berlinBlock": 0, "londonBlock": 0, ... "pragueTime": 0, "osakaTime": 1753379304, ``` This function strips the "*Block" and "*Time" part and moves the values. """ if isinstance(data, dict): fork_activation_times: Dict[str, int] = {} for key in list(data.keys()): assert isinstance(key, str) if key.endswith("Block") or key.endswith("Time"): if key.endswith("Block"): stripped_key = key.removesuffix("Block") else: stripped_key = key.removesuffix("Time") if stripped_key in cls.fork_synonyms: synonym = cls.fork_synonyms[stripped_key] if synonym: stripped_key = synonym else: continue fork_activation_times[stripped_key] = data.pop(key) if fork_activation_times: data["forkActivationTimes"] = fork_activation_times return data class Genesis(CamelModel): """Geth-type genesis file.""" config: GenesisConfig alloc: Alloc fee_recipient: Address = Field(validation_alias="coinbase") difficulty: HexNumber extra_data: Bytes gas_limit: HexNumber nonce: Annotated[HeaderNonce, BeforeValidator(lambda x: HexNumber(x))] mixhash: Hash timestamp: Number parent_hash: Hash base_fee_per_gas: HexNumber = HexNumber(10**9) number: HexNumber = HexNumber(0) @cached_property def hash(self) -> Hash: """Calculate the genesis hash.""" dumped_genesis = self.model_dump(mode="json", exclude={"config", "alloc"}) genesis_fork = self.config.fork() env = Environment(**dumped_genesis).set_fork_requirements(genesis_fork) genesis_header = FixtureHeader.genesis(genesis_fork, env, self.alloc.state_root()) genesis_header.extra_data = self.extra_data genesis_header.nonce = self.nonce return genesis_header.block_hash def network_config(self) -> NetworkConfig: """Get the network config.""" return NetworkConfig( chain_id=self.config.chain_id, genesis_hash=self.hash, fork_activation_times=self.config.fork_activation_times, blob_schedule=self.config.blob_schedule, address_overrides=self.config.address_overrides, ) ================================================ FILE: src/pytest_plugins/execute/eth_config/networks.yml ================================================ Mainnet: chainId: 0x1 genesisHash: 0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3 forkActivationTimes: Frontier: 0 Homestead: 1150000 DAOFork: 1920000 Tangerine: 2463000 SpuriousDragon: 2675000 Byzantium: 4370000 Constantinople: 7280000 Istanbul: 9069000 MuirGlacier: 9200000 Berlin: 12244000 London: 12965000 ArrowGlacier: 13773000 GrayGlacier: 15050000 Shanghai: 1681338455 Cancun: 1710338135 Prague: 1746612311 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Osaka: target: 6 max: 9 baseFeeUpdateFraction: 5007716 BPO1: target: 10 max: 15 baseFeeUpdateFraction: 8346193 BPO2: target: 14 max: 21 baseFeeUpdateFraction: 11684671 Sepolia: chainId: 0xaa36a7 genesisHash: 0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9 forkActivationTimes: Berlin: 0 London: 1735371 Shanghai: 1677557088 Cancun: 1706655072 Prague: 1741159776 Osaka: 1760427360 BPO1: 1761017184 BPO2: 1761607008 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Osaka: target: 6 max: 9 baseFeeUpdateFraction: 5007716 BPO1: target: 10 max: 15 baseFeeUpdateFraction: 8346193 BPO2: target: 14 max: 21 baseFeeUpdateFraction: 11684671 addressOverrides: 0x00000000219ab540356cbb839cbe05303d7705fa: 0x7f02c3e3c98b133055b8b348b2ac625669ed295d Hoodi: chainId: 0x88BB0 genesisHash: 0xbbe312868b376a3001692a646dd2d7d1e4406380dfd86b98aa8a34d1557c971b forkActivationTimes: Cancun: 0 Prague: 1742999832 Osaka: 1761677592 BPO1: 1762365720 BPO2: 1762955544 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Osaka: target: 6 max: 9 baseFeeUpdateFraction: 5007716 BPO1: target: 10 max: 15 baseFeeUpdateFraction: 8346193 BPO2: target: 14 max: 21 baseFeeUpdateFraction: 11684671 Holesky: chainId: 0x4268 genesisHash: 0xb5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde4 forkActivationTimes: Paris: 0 Shanghai: 1696000704 Cancun: 1707305664 Prague: 1740434112 Osaka: 1759308480 BPO1: 1759800000 BPO2: 1760389824 addressOverrides: 0x00000000219ab540356cbb839cbe05303d7705fa: 0x4242424242424242424242424242424242424242 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Osaka: target: 6 max: 9 baseFeeUpdateFraction: 5007716 BPO1: target: 10 max: 15 baseFeeUpdateFraction: 8346193 BPO2: target: 14 max: 21 baseFeeUpdateFraction: 11684671 ================================================ FILE: src/pytest_plugins/execute/eth_config/tests/__init__.py ================================================ """Unit tests for the `eth_config` pytest plugin package.""" ================================================ FILE: src/pytest_plugins/execute/eth_config/tests/genesis_example.json ================================================ { "config": { "chainId": 7023102237, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "berlinBlock": 0, "londonBlock": 0, "mergeNetsplitBlock": 0, "terminalTotalDifficulty": 0, "terminalTotalDifficultyPassed": true, "shanghaiTime": 0, "cancunTime": 0, "blobSchedule": { "cancun": { "target": 3, "max": 6, "baseFeeUpdateFraction": 3338477 }, "prague": { "target": 6, "max": 9, "baseFeeUpdateFraction": 5007716 }, "osaka": { "target": 6, "max": 9, "baseFeeUpdateFraction": 5007716 }, "bpo1": { "target": 9, "max": 12, "baseFeeUpdateFraction": 5007716 }, "bpo2": { "target": 12, "max": 15, "baseFeeUpdateFraction": 5007716 }, "bpo3": { "target": 15, "max": 18, "baseFeeUpdateFraction": 5007716 }, "bpo4": { "target": 6, "max": 9, "baseFeeUpdateFraction": 5007716 }, "bpo5": { "target": 15, "max": 20, "baseFeeUpdateFraction": 5007716 } }, "depositContractAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa", "pragueTime": 0, "osakaTime": 1753379304, "bpo1Time": 1753477608, "bpo2Time": 1753575912, "bpo3Time": 1753674216, "bpo4Time": 1753772520, "bpo5Time": 1753889256 }, "alloc": { "0x0000000000000000000000000000000000000000": { "balance": "1" }, "0x0000000000000000000000000000000000000001": { "balance": "1" }, "0x0000000000000000000000000000000000000002": { "balance": "1" }, "0x0000000000000000000000000000000000000003": { "balance": "1" }, "0x0000000000000000000000000000000000000004": { "balance": "1" }, "0x0000000000000000000000000000000000000005": { "balance": "1" }, "0x0000000000000000000000000000000000000006": { "balance": "1" }, "0x0000000000000000000000000000000000000007": { "balance": "1" }, "0x0000000000000000000000000000000000000008": { "balance": "1" }, "0x0000000000000000000000000000000000000009": { "balance": "1" }, "0x000000000000000000000000000000000000000a": { "balance": "1" }, "0x000000000000000000000000000000000000000b": { "balance": "1" }, "0x000000000000000000000000000000000000000c": { "balance": "1" }, "0x000000000000000000000000000000000000000d": { "balance": "1" }, "0x000000000000000000000000000000000000000e": { "balance": "1" }, "0x000000000000000000000000000000000000000f": { "balance": "1" }, "0x0000000000000000000000000000000000000010": { "balance": "1" }, "0x0000000000000000000000000000000000000011": { "balance": "1" }, "0x0000000000000000000000000000000000000012": { "balance": "1" }, "0x0000000000000000000000000000000000000013": { "balance": "1" }, "0x0000000000000000000000000000000000000014": { "balance": "1" }, "0x0000000000000000000000000000000000000015": { "balance": "1" }, "0x0000000000000000000000000000000000000016": { "balance": "1" }, "0x0000000000000000000000000000000000000017": { "balance": "1" }, "0x0000000000000000000000000000000000000018": { "balance": "1" }, "0x0000000000000000000000000000000000000019": { "balance": "1" }, "0x000000000000000000000000000000000000001a": { "balance": "1" }, "0x000000000000000000000000000000000000001b": { "balance": "1" }, "0x000000000000000000000000000000000000001c": { "balance": "1" }, "0x000000000000000000000000000000000000001d": { "balance": "1" }, "0x000000000000000000000000000000000000001e": { "balance": "1" }, "0x000000000000000000000000000000000000001f": { "balance": "1" }, "0x0000000000000000000000000000000000000020": { "balance": "1" }, "0x0000000000000000000000000000000000000021": { "balance": "1" }, "0x0000000000000000000000000000000000000022": { "balance": "1" }, "0x0000000000000000000000000000000000000023": { "balance": "1" }, "0x0000000000000000000000000000000000000024": { "balance": "1" }, "0x0000000000000000000000000000000000000025": { "balance": "1" }, "0x0000000000000000000000000000000000000026": { "balance": "1" }, "0x0000000000000000000000000000000000000027": { "balance": "1" }, "0x0000000000000000000000000000000000000028": { "balance": "1" }, "0x0000000000000000000000000000000000000029": { "balance": "1" }, "0x000000000000000000000000000000000000002a": { "balance": "1" }, "0x000000000000000000000000000000000000002b": { "balance": "1" }, "0x000000000000000000000000000000000000002c": { "balance": "1" }, "0x000000000000000000000000000000000000002d": { "balance": "1" }, "0x000000000000000000000000000000000000002e": { "balance": "1" }, "0x000000000000000000000000000000000000002f": { "balance": "1" }, "0x0000000000000000000000000000000000000030": { "balance": "1" }, "0x0000000000000000000000000000000000000031": { "balance": "1" }, "0x0000000000000000000000000000000000000032": { "balance": "1" }, "0x0000000000000000000000000000000000000033": { "balance": "1" }, "0x0000000000000000000000000000000000000034": { "balance": "1" }, "0x0000000000000000000000000000000000000035": { "balance": "1" }, "0x0000000000000000000000000000000000000036": { "balance": "1" }, "0x0000000000000000000000000000000000000037": { "balance": "1" }, "0x0000000000000000000000000000000000000038": { "balance": "1" }, "0x0000000000000000000000000000000000000039": { "balance": "1" }, "0x000000000000000000000000000000000000003a": { "balance": "1" }, "0x000000000000000000000000000000000000003b": { "balance": "1" }, "0x000000000000000000000000000000000000003c": { "balance": "1" }, "0x000000000000000000000000000000000000003d": { "balance": "1" }, "0x000000000000000000000000000000000000003e": { "balance": "1" }, "0x000000000000000000000000000000000000003f": { "balance": "1" }, "0x0000000000000000000000000000000000000040": { "balance": "1" }, "0x0000000000000000000000000000000000000041": { "balance": "1" }, "0x0000000000000000000000000000000000000042": { "balance": "1" }, "0x0000000000000000000000000000000000000043": { "balance": "1" }, "0x0000000000000000000000000000000000000044": { "balance": "1" }, "0x0000000000000000000000000000000000000045": { "balance": "1" }, "0x0000000000000000000000000000000000000046": { "balance": "1" }, "0x0000000000000000000000000000000000000047": { "balance": "1" }, "0x0000000000000000000000000000000000000048": { "balance": "1" }, "0x0000000000000000000000000000000000000049": { "balance": "1" }, "0x000000000000000000000000000000000000004a": { "balance": "1" }, "0x000000000000000000000000000000000000004b": { "balance": "1" }, "0x000000000000000000000000000000000000004c": { "balance": "1" }, "0x000000000000000000000000000000000000004d": { "balance": "1" }, "0x000000000000000000000000000000000000004e": { "balance": "1" }, "0x000000000000000000000000000000000000004f": { "balance": "1" }, "0x0000000000000000000000000000000000000050": { "balance": "1" }, "0x0000000000000000000000000000000000000051": { "balance": "1" }, "0x0000000000000000000000000000000000000052": { "balance": "1" }, "0x0000000000000000000000000000000000000053": { "balance": "1" }, "0x0000000000000000000000000000000000000054": { "balance": "1" }, "0x0000000000000000000000000000000000000055": { "balance": "1" }, "0x0000000000000000000000000000000000000056": { "balance": "1" }, "0x0000000000000000000000000000000000000057": { "balance": "1" }, "0x0000000000000000000000000000000000000058": { "balance": "1" }, "0x0000000000000000000000000000000000000059": { "balance": "1" }, "0x000000000000000000000000000000000000005a": { "balance": "1" }, "0x000000000000000000000000000000000000005b": { "balance": "1" }, "0x000000000000000000000000000000000000005c": { "balance": "1" }, "0x000000000000000000000000000000000000005d": { "balance": "1" }, "0x000000000000000000000000000000000000005e": { "balance": "1" }, "0x000000000000000000000000000000000000005f": { "balance": "1" }, "0x0000000000000000000000000000000000000060": { "balance": "1" }, "0x0000000000000000000000000000000000000061": { "balance": "1" }, "0x0000000000000000000000000000000000000062": { "balance": "1" }, "0x0000000000000000000000000000000000000063": { "balance": "1" }, "0x0000000000000000000000000000000000000064": { "balance": "1" }, "0x0000000000000000000000000000000000000065": { "balance": "1" }, "0x0000000000000000000000000000000000000066": { "balance": "1" }, "0x0000000000000000000000000000000000000067": { "balance": "1" }, "0x0000000000000000000000000000000000000068": { "balance": "1" }, "0x0000000000000000000000000000000000000069": { "balance": "1" }, "0x000000000000000000000000000000000000006a": { "balance": "1" }, "0x000000000000000000000000000000000000006b": { "balance": "1" }, "0x000000000000000000000000000000000000006c": { "balance": "1" }, "0x000000000000000000000000000000000000006d": { "balance": "1" }, "0x000000000000000000000000000000000000006e": { "balance": "1" }, "0x000000000000000000000000000000000000006f": { "balance": "1" }, "0x0000000000000000000000000000000000000070": { "balance": "1" }, "0x0000000000000000000000000000000000000071": { "balance": "1" }, "0x0000000000000000000000000000000000000072": { "balance": "1" }, "0x0000000000000000000000000000000000000073": { "balance": "1" }, "0x0000000000000000000000000000000000000074": { "balance": "1" }, "0x0000000000000000000000000000000000000075": { "balance": "1" }, "0x0000000000000000000000000000000000000076": { "balance": "1" }, "0x0000000000000000000000000000000000000077": { "balance": "1" }, "0x0000000000000000000000000000000000000078": { "balance": "1" }, "0x0000000000000000000000000000000000000079": { "balance": "1" }, "0x000000000000000000000000000000000000007a": { "balance": "1" }, "0x000000000000000000000000000000000000007b": { "balance": "1" }, "0x000000000000000000000000000000000000007c": { "balance": "1" }, "0x000000000000000000000000000000000000007d": { "balance": "1" }, "0x000000000000000000000000000000000000007e": { "balance": "1" }, "0x000000000000000000000000000000000000007f": { "balance": "1" }, "0x0000000000000000000000000000000000000080": { "balance": "1" }, "0x0000000000000000000000000000000000000081": { "balance": "1" }, "0x0000000000000000000000000000000000000082": { "balance": "1" }, "0x0000000000000000000000000000000000000083": { "balance": "1" }, "0x0000000000000000000000000000000000000084": { "balance": "1" }, "0x0000000000000000000000000000000000000085": { "balance": "1" }, "0x0000000000000000000000000000000000000086": { "balance": "1" }, "0x0000000000000000000000000000000000000087": { "balance": "1" }, "0x0000000000000000000000000000000000000088": { "balance": "1" }, "0x0000000000000000000000000000000000000089": { "balance": "1" }, "0x000000000000000000000000000000000000008a": { "balance": "1" }, "0x000000000000000000000000000000000000008b": { "balance": "1" }, "0x000000000000000000000000000000000000008c": { "balance": "1" }, "0x000000000000000000000000000000000000008d": { "balance": "1" }, "0x000000000000000000000000000000000000008e": { "balance": "1" }, "0x000000000000000000000000000000000000008f": { "balance": "1" }, "0x0000000000000000000000000000000000000090": { "balance": "1" }, "0x0000000000000000000000000000000000000091": { "balance": "1" }, "0x0000000000000000000000000000000000000092": { "balance": "1" }, "0x0000000000000000000000000000000000000093": { "balance": "1" }, "0x0000000000000000000000000000000000000094": { "balance": "1" }, "0x0000000000000000000000000000000000000095": { "balance": "1" }, "0x0000000000000000000000000000000000000096": { "balance": "1" }, "0x0000000000000000000000000000000000000097": { "balance": "1" }, "0x0000000000000000000000000000000000000098": { "balance": "1" }, "0x0000000000000000000000000000000000000099": { "balance": "1" }, "0x000000000000000000000000000000000000009a": { "balance": "1" }, "0x000000000000000000000000000000000000009b": { "balance": "1" }, "0x000000000000000000000000000000000000009c": { "balance": "1" }, "0x000000000000000000000000000000000000009d": { "balance": "1" }, "0x000000000000000000000000000000000000009e": { "balance": "1" }, "0x000000000000000000000000000000000000009f": { "balance": "1" }, "0x00000000000000000000000000000000000000a0": { "balance": "1" }, "0x00000000000000000000000000000000000000a1": { "balance": "1" }, "0x00000000000000000000000000000000000000a2": { "balance": "1" }, "0x00000000000000000000000000000000000000a3": { "balance": "1" }, "0x00000000000000000000000000000000000000a4": { "balance": "1" }, "0x00000000000000000000000000000000000000a5": { "balance": "1" }, "0x00000000000000000000000000000000000000a6": { "balance": "1" }, "0x00000000000000000000000000000000000000a7": { "balance": "1" }, "0x00000000000000000000000000000000000000a8": { "balance": "1" }, "0x00000000000000000000000000000000000000a9": { "balance": "1" }, "0x00000000000000000000000000000000000000aa": { "balance": "1" }, "0x00000000000000000000000000000000000000ab": { "balance": "1" }, "0x00000000000000000000000000000000000000ac": { "balance": "1" }, "0x00000000000000000000000000000000000000ad": { "balance": "1" }, "0x00000000000000000000000000000000000000ae": { "balance": "1" }, "0x00000000000000000000000000000000000000af": { "balance": "1" }, "0x00000000000000000000000000000000000000b0": { "balance": "1" }, "0x00000000000000000000000000000000000000b1": { "balance": "1" }, "0x00000000000000000000000000000000000000b2": { "balance": "1" }, "0x00000000000000000000000000000000000000b3": { "balance": "1" }, "0x00000000000000000000000000000000000000b4": { "balance": "1" }, "0x00000000000000000000000000000000000000b5": { "balance": "1" }, "0x00000000000000000000000000000000000000b6": { "balance": "1" }, "0x00000000000000000000000000000000000000b7": { "balance": "1" }, "0x00000000000000000000000000000000000000b8": { "balance": "1" }, "0x00000000000000000000000000000000000000b9": { "balance": "1" }, "0x00000000000000000000000000000000000000ba": { "balance": "1" }, "0x00000000000000000000000000000000000000bb": { "balance": "1" }, "0x00000000000000000000000000000000000000bc": { "balance": "1" }, "0x00000000000000000000000000000000000000bd": { "balance": "1" }, "0x00000000000000000000000000000000000000be": { "balance": "1" }, "0x00000000000000000000000000000000000000bf": { "balance": "1" }, "0x00000000000000000000000000000000000000c0": { "balance": "1" }, "0x00000000000000000000000000000000000000c1": { "balance": "1" }, "0x00000000000000000000000000000000000000c2": { "balance": "1" }, "0x00000000000000000000000000000000000000c3": { "balance": "1" }, "0x00000000000000000000000000000000000000c4": { "balance": "1" }, "0x00000000000000000000000000000000000000c5": { "balance": "1" }, "0x00000000000000000000000000000000000000c6": { "balance": "1" }, "0x00000000000000000000000000000000000000c7": { "balance": "1" }, "0x00000000000000000000000000000000000000c8": { "balance": "1" }, "0x00000000000000000000000000000000000000c9": { "balance": "1" }, "0x00000000000000000000000000000000000000ca": { "balance": "1" }, "0x00000000000000000000000000000000000000cb": { "balance": "1" }, "0x00000000000000000000000000000000000000cc": { "balance": "1" }, "0x00000000000000000000000000000000000000cd": { "balance": "1" }, "0x00000000000000000000000000000000000000ce": { "balance": "1" }, "0x00000000000000000000000000000000000000cf": { "balance": "1" }, "0x00000000000000000000000000000000000000d0": { "balance": "1" }, "0x00000000000000000000000000000000000000d1": { "balance": "1" }, "0x00000000000000000000000000000000000000d2": { "balance": "1" }, "0x00000000000000000000000000000000000000d3": { "balance": "1" }, "0x00000000000000000000000000000000000000d4": { "balance": "1" }, "0x00000000000000000000000000000000000000d5": { "balance": "1" }, "0x00000000000000000000000000000000000000d6": { "balance": "1" }, "0x00000000000000000000000000000000000000d7": { "balance": "1" }, "0x00000000000000000000000000000000000000d8": { "balance": "1" }, "0x00000000000000000000000000000000000000d9": { "balance": "1" }, "0x00000000000000000000000000000000000000da": { "balance": "1" }, "0x00000000000000000000000000000000000000db": { "balance": "1" }, "0x00000000000000000000000000000000000000dc": { "balance": "1" }, "0x00000000000000000000000000000000000000dd": { "balance": "1" }, "0x00000000000000000000000000000000000000de": { "balance": "1" }, "0x00000000000000000000000000000000000000df": { "balance": "1" }, "0x00000000000000000000000000000000000000e0": { "balance": "1" }, "0x00000000000000000000000000000000000000e1": { "balance": "1" }, "0x00000000000000000000000000000000000000e2": { "balance": "1" }, "0x00000000000000000000000000000000000000e3": { "balance": "1" }, "0x00000000000000000000000000000000000000e4": { "balance": "1" }, "0x00000000000000000000000000000000000000e5": { "balance": "1" }, "0x00000000000000000000000000000000000000e6": { "balance": "1" }, "0x00000000000000000000000000000000000000e7": { "balance": "1" }, "0x00000000000000000000000000000000000000e8": { "balance": "1" }, "0x00000000000000000000000000000000000000e9": { "balance": "1" }, "0x00000000000000000000000000000000000000ea": { "balance": "1" }, "0x00000000000000000000000000000000000000eb": { "balance": "1" }, "0x00000000000000000000000000000000000000ec": { "balance": "1" }, "0x00000000000000000000000000000000000000ed": { "balance": "1" }, "0x00000000000000000000000000000000000000ee": { "balance": "1" }, "0x00000000000000000000000000000000000000ef": { "balance": "1" }, "0x00000000000000000000000000000000000000f0": { "balance": "1" }, "0x00000000000000000000000000000000000000f1": { "balance": "1" }, "0x00000000000000000000000000000000000000f2": { "balance": "1" }, "0x00000000000000000000000000000000000000f3": { "balance": "1" }, "0x00000000000000000000000000000000000000f4": { "balance": "1" }, "0x00000000000000000000000000000000000000f5": { "balance": "1" }, "0x00000000000000000000000000000000000000f6": { "balance": "1" }, "0x00000000000000000000000000000000000000f7": { "balance": "1" }, "0x00000000000000000000000000000000000000f8": { "balance": "1" }, "0x00000000000000000000000000000000000000f9": { "balance": "1" }, "0x00000000000000000000000000000000000000fa": { "balance": "1" }, "0x00000000000000000000000000000000000000fb": { "balance": "1" }, "0x00000000000000000000000000000000000000fc": { "balance": "1" }, "0x00000000000000000000000000000000000000fd": { "balance": "1" }, "0x00000000000000000000000000000000000000fe": { "balance": "1" }, "0x00000000000000000000000000000000000000ff": { "balance": "1" }, "0x00000000219ab540356cBB839Cbe05303d7705Fa": { "balance": "0", "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" } }, "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02": { "balance": "0", "nonce": "1", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500" }, "0x0000F90827F1C53a10cb7A02335B175320002935": { "balance": "0", "nonce": "1", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500" }, "0x00000961Ef480Eb55e80D19ad83579A64c007002": { "balance": "0", "nonce": "1", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "0x0000BBdDc7CE488642fb579F8B00f3a590007251": { "balance": "0", "nonce": "1", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "0x454b0EA7d8aD3C56D0CF2e44Ed97b2Feab4D7AF2": { "balance": "1000000000000000000000000000" }, "0xd3248BA3E5492D767F8e427Cb9C7B9D5C3972D7B": { "balance": "1000000000000000000000000000" }, "0xAD01b55d7c3448B8899862eb335FBb17075d8DE2": { "balance": "1000000000000000000000000000" }, "0x7e454a14B8e7528465eeF86f0DC1da4f235d9D79": { "balance": "1000000000000000000000000000" }, "0x7a40026A3b9A41754a95EeC8c92C6B99886f440C": { "balance": "1000000000000000000000000000" }, "0x8c4D8CDD1f474510Dd70D66F2785a3a38a29AC1A": { "balance": "1000000000000000000000000000" }, "0xfC7360b3b28cf4204268A8354dbEc60720d155D2": { "balance": "1000000000000000000000000000" }, "0x2F7626bBDb8c0f9071bC98046Ef6fDed2167F97F": { "balance": "1000000000000000000000000000" }, "0x752CE31Dec0dde7D1563CdF6438d892De2D4FBee": { "balance": "1000000000000000000000000000" }, "0x455f42d91096c4Aa708D7Cbcb2DC499dE89C402c": { "balance": "1000000000000000000000000000" }, "0x85154341488732D57a97F54AB9706Bc4B71B8636": { "balance": "1000000000000000000000000000" }, "0x6a9CcA73d4Ff3a249fa778C7651f4Df8B9fFa0Df": { "balance": "1000000000000000000000000000" }, "0xee2d0567AAe8080CA269b7908F4aF8BBb59A6804": { "balance": "1000000000000000000000000000" }, "0xDd8D4027078a471816e4Ef7F69aFc0A5d2947dDc": { "balance": "1000000000000000000000000000" }, "0x20466E9A67f299F6056bE52A50ea324FA6Bd05D5": { "balance": "1000000000000000000000000000" }, "0x03F24BB0C9cfb30217Ff992A36ae9230F2A1697f": { "balance": "1000000000000000000000000000" }, "0x032d8372C519c3927b87BDe4479E846a81EF2d10": { "balance": "1000000000000000000000000000" }, "0xF863DF14954df73804b3150F3754a8F98CBB1D0d": { "balance": "1000000000000000000000000000" }, "0xbe918A6aef1920F3706E23d153146aA6C5982620": { "balance": "1000000000000000000000000000" }, "0xA0c7edA3CE474BC670A11EA9537cBEfd36331123": { "balance": "1000000000000000000000000000" }, "0xF03b43BeB861044492Eb43E247bEE2AC6C80c651": { "balance": "1000000000000000000000000000" } }, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x0", "extraData": "", "gasLimit": "0x2aea540", "nonce": "0x1234", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "1753280940" } ================================================ FILE: src/pytest_plugins/execute/eth_config/tests/test_execute_eth_config.py ================================================ """Unit tests for the `eth_config` execute tests.""" import json from os.path import realpath from pathlib import Path import pytest import yaml from ethereum_test_base_types import ForkHash from ethereum_test_rpc import EthConfigResponse from ..execute_types import NetworkConfig, NetworkConfigFile EXPECTED_CANCUN = json.loads(""" { "activationTime": 0, "blobSchedule": { "baseFeeUpdateFraction": 3338477, "max": 6, "target": 3 }, "chainId": "0x88bb0", "forkId": "0xbef71d30", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02" } } """) EXPECTED_CANCUN_FORK_ID = ForkHash("0xbef71d30") EXPECTED_PRAGUE = json.loads(""" { "activationTime": 1742999832, "blobSchedule": { "baseFeeUpdateFraction": 5007716, "max": 9, "target": 6 }, "chainId": "0x88bb0", "forkId": "0x0929e24e", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": "0x0000bbddc7ce488642fb579f8b00f3a590007251", "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa", "HISTORY_STORAGE_ADDRESS": "0x0000f90827f1c53a10cb7a02335b175320002935", "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": "0x00000961ef480eb55e80d19ad83579a64c007002" } } """) EXPECTED_PRAGUE_FORK_ID = ForkHash("0x0929e24e") EXPECTED_BPO1 = json.loads(""" { "activationTime": 1753477608, "blobSchedule": { "baseFeeUpdateFraction": 5007716, "max": 12, "target": 9 }, "chainId": "0x88bb0", "forkId": "0x5e2e4e84", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "P256VERIFY": "0x0000000000000000000000000000000000000100", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": "0x0000bbddc7ce488642fb579f8b00f3a590007251", "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa", "HISTORY_STORAGE_ADDRESS": "0x0000f90827f1c53a10cb7a02335b175320002935", "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": "0x00000961ef480eb55e80d19ad83579a64c007002" } } """) EXPECTED_BPO1_FORK_ID = ForkHash("0x5e2e4e84") EXPECTED_BPO2 = json.loads(""" { "activationTime": 1753575912, "blobSchedule": { "baseFeeUpdateFraction": 5007716, "max": 15, "target": 12 }, "chainId": "0x88bb0", "forkId": "0x9d7b6bfb", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "P256VERIFY": "0x0000000000000000000000000000000000000100", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": "0x0000bbddc7ce488642fb579f8b00f3a590007251", "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa", "HISTORY_STORAGE_ADDRESS": "0x0000f90827f1c53a10cb7a02335b175320002935", "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": "0x00000961ef480eb55e80d19ad83579a64c007002" } } """) EXPECTED_BPO2_FORK_ID = ForkHash("0x9d7b6bfb") EXPECTED_BPO3 = json.loads(""" { "activationTime": 1753674216, "blobSchedule": { "baseFeeUpdateFraction": 5007716, "max": 18, "target": 15 }, "chainId": "0x88bb0", "forkId": "0xbebdd3a1", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "P256VERIFY": "0x0000000000000000000000000000000000000100", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": "0x0000bbddc7ce488642fb579f8b00f3a590007251", "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa", "HISTORY_STORAGE_ADDRESS": "0x0000f90827f1c53a10cb7a02335b175320002935", "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": "0x00000961ef480eb55e80d19ad83579a64c007002" } } """) EXPECTED_BPO3_FORK_ID = ForkHash("0xbebdd3a1") EXPECTED_BPO4 = json.loads(""" { "activationTime": 1753772520, "blobSchedule": { "baseFeeUpdateFraction": 5007716, "max": 9, "target": 6 }, "chainId": "0x88bb0", "forkId": "0x190c2054", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "P256VERIFY": "0x0000000000000000000000000000000000000100", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": "0x0000bbddc7ce488642fb579f8b00f3a590007251", "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa", "HISTORY_STORAGE_ADDRESS": "0x0000f90827f1c53a10cb7a02335b175320002935", "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": "0x00000961ef480eb55e80d19ad83579a64c007002" } } """) EXPECTED_BPO4_FORK_ID = ForkHash("0x190c2054") EXPECTED_BPO5 = json.loads(""" { "activationTime": 1753889256, "blobSchedule": { "baseFeeUpdateFraction": 5007716, "max": 20, "target": 15 }, "chainId": "0x88bb0", "forkId": "0xd3a4880b", "precompiles": { "BLAKE2F": "0x0000000000000000000000000000000000000009", "BLS12_G1ADD": "0x000000000000000000000000000000000000000b", "BLS12_G1MSM": "0x000000000000000000000000000000000000000c", "BLS12_G2ADD": "0x000000000000000000000000000000000000000d", "BLS12_G2MSM": "0x000000000000000000000000000000000000000e", "BLS12_MAP_FP2_TO_G2": "0x0000000000000000000000000000000000000011", "BLS12_MAP_FP_TO_G1": "0x0000000000000000000000000000000000000010", "BLS12_PAIRING_CHECK": "0x000000000000000000000000000000000000000f", "BN254_ADD": "0x0000000000000000000000000000000000000006", "BN254_MUL": "0x0000000000000000000000000000000000000007", "BN254_PAIRING": "0x0000000000000000000000000000000000000008", "ECREC": "0x0000000000000000000000000000000000000001", "ID": "0x0000000000000000000000000000000000000004", "KZG_POINT_EVALUATION": "0x000000000000000000000000000000000000000a", "MODEXP": "0x0000000000000000000000000000000000000005", "P256VERIFY": "0x0000000000000000000000000000000000000100", "RIPEMD160": "0x0000000000000000000000000000000000000003", "SHA256": "0x0000000000000000000000000000000000000002" }, "systemContracts": { "BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS": "0x0000bbddc7ce488642fb579f8b00f3a590007251", "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa", "HISTORY_STORAGE_ADDRESS": "0x0000f90827f1c53a10cb7a02335b175320002935", "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS": "0x00000961ef480eb55e80d19ad83579a64c007002" } } """) EXPECTED_BPO5_FORK_ID = ForkHash("0xd3a4880b") CURRENT_FILE = Path(realpath(__file__)) CURRENT_FOLDER = CURRENT_FILE.parent STATIC_NETWORK_CONFIGS = """ # Static network configs so updates to the network configs don't break the tests. Mainnet: chainId: 0x1 genesisHash: 0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3 forkActivationTimes: Frontier: 0 Homestead: 1150000 DAOFork: 1920000 Tangerine: 2463000 SpuriousDragon: 2675000 Byzantium: 4370000 Constantinople: 7280000 Istanbul: 9069000 MuirGlacier: 9200000 Berlin: 12244000 London: 12965000 ArrowGlacier: 13773000 GrayGlacier: 15050000 Shanghai: 1681338455 Cancun: 1710338135 Prague: 1746612311 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Sepolia: chainId: 0xaa36a7 genesisHash: 0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9 forkActivationTimes: Berlin: 0 London: 1735371 Shanghai: 1677557088 Cancun: 1706655072 Prague: 1741159776 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 addressOverrides: 0x00000000219ab540356cbb839cbe05303d7705fa: 0x7f02c3e3c98b133055b8b348b2ac625669ed295d Hoodi: chainId: 0x88BB0 genesisHash: 0xbbe312868b376a3001692a646dd2d7d1e4406380dfd86b98aa8a34d1557c971b forkActivationTimes: Cancun: 0 Prague: 1742999832 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Holesky: chainId: 0x4268 genesisHash: 0xb5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde4 forkActivationTimes: Paris: 0 Shanghai: 1696000704 Cancun: 1707305664 Prague: 1740434112 addressOverrides: 0x00000000219ab540356cbb839cbe05303d7705fa: 0x4242424242424242424242424242424242424242 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 # Test-only network configs. HoodiWithBPOs: chainId: 0x88BB0 genesisHash: 0xbbe312868b376a3001692a646dd2d7d1e4406380dfd86b98aa8a34d1557c971b forkActivationTimes: Cancun: 0 Prague: 1742999832 Osaka: 1753477608 BPO1: 1753575912 BPO2: 1753674216 BPO3: 1753772520 BPO4: 1753889256 blobSchedule: Cancun: target: 3 max: 6 baseFeeUpdateFraction: 3338477 Prague: target: 6 max: 9 baseFeeUpdateFraction: 5007716 Osaka: target: 9 max: 12 baseFeeUpdateFraction: 5007716 BPO1: target: 12 max: 15 baseFeeUpdateFraction: 5007716 BPO2: target: 15 max: 18 baseFeeUpdateFraction: 5007716 BPO3: target: 6 max: 9 baseFeeUpdateFraction: 5007716 BPO4: target: 15 max: 20 baseFeeUpdateFraction: 5007716 """ # W505 @pytest.fixture(scope="session") def network_configs() -> NetworkConfigFile: """Get the file contents from the provided network configs file.""" return NetworkConfigFile(root=yaml.safe_load(STATIC_NETWORK_CONFIGS)) @pytest.fixture def network(request: pytest.FixtureRequest, network_configs: NetworkConfigFile) -> NetworkConfig: """Get the network that is under test.""" network_name = request.param assert network_name in network_configs.root, ( f"Network {network_name} could not be found in network_configs." ) return network_configs.root[network_name] @pytest.fixture def eth_config(network: NetworkConfig, current_time: int) -> EthConfigResponse: """ Get the `eth_config` response from the client to be verified by all tests. """ return network.get_eth_config(current_time) @pytest.mark.parametrize( [ "network", "current_time", "expected_eth_config", ], [ pytest.param( "Hoodi", 0, EthConfigResponse( current=EXPECTED_CANCUN, next=EXPECTED_PRAGUE, last=EXPECTED_PRAGUE, ), id="Hoodi_cancun", ), pytest.param( "Hoodi", 1753477608, EthConfigResponse( current=EXPECTED_PRAGUE, ), id="Hoodi_prague", ), pytest.param( "HoodiWithBPOs", 1742999832, EthConfigResponse( current=EXPECTED_PRAGUE, next=EXPECTED_BPO1, last=EXPECTED_BPO5, ), id="Hoodi_prague_with_bpos_1", ), pytest.param( "HoodiWithBPOs", 1753575912, EthConfigResponse( current=EXPECTED_BPO2, next=EXPECTED_BPO3, last=EXPECTED_BPO5, ), id="Hoodi_prague_with_bpos_2", ), pytest.param( "HoodiWithBPOs", 1753674216, EthConfigResponse( current=EXPECTED_BPO3, next=EXPECTED_BPO4, last=EXPECTED_BPO5, ), id="Hoodi_prague_with_bpos_3", ), pytest.param( "HoodiWithBPOs", 1753772520, EthConfigResponse( current=EXPECTED_BPO4, next=EXPECTED_BPO5, last=EXPECTED_BPO5, ), id="Hoodi_prague_with_bpos_4", ), pytest.param( "HoodiWithBPOs", 1753889256, EthConfigResponse( current=EXPECTED_BPO5, ), id="Hoodi_prague_with_bpos_5", ), ], indirect=["network"], ) def test_fork_config_from_fork( eth_config: EthConfigResponse, expected_eth_config: EthConfigResponse, ) -> None: """Test the `fork_config_from_fork` function.""" current_config, next_config = (eth_config.current, eth_config.next) assert current_config.model_dump( mode="json", by_alias=True ) == expected_eth_config.current.model_dump(mode="json", by_alias=True), ( f"Expected {expected_eth_config.current.model_dump_json()} but got " f"{current_config.model_dump_json()}" ) assert current_config.fork_id == expected_eth_config.current.fork_id, ( f"Expected {expected_eth_config.current.fork_id} but got {current_config.fork_id}" ) if expected_eth_config.next is not None: assert next_config is not None, "Expected next to be not None" assert next_config.model_dump( mode="json", by_alias=True ) == expected_eth_config.next.model_dump(mode="json", by_alias=True), ( f"Expected {expected_eth_config.next.model_dump_json()} but got " f"{next_config.model_dump_json()}" ) assert next_config.fork_id == expected_eth_config.next.fork_id, ( f"Expected {expected_eth_config.next.fork_id} but got {next_config.fork_id}" ) else: assert next_config is None, "Expected next to be None" if expected_eth_config.last is not None: assert eth_config.last is not None, "Expected last to be not None" assert eth_config.last.model_dump( mode="json", by_alias=True ) == expected_eth_config.last.model_dump(mode="json", by_alias=True), ( f"Expected {expected_eth_config.last.model_dump_json()} but got " f"{eth_config.last.model_dump_json()}" ) assert eth_config.last.fork_id == expected_eth_config.last.fork_id, ( f"Expected {expected_eth_config.last.fork_id} but got {eth_config.last.fork_id}" ) else: assert eth_config.last is None, "Expected last to be None" @pytest.mark.parametrize( [ "network", "current_time", "expected_current_fork_id", "expected_next_fork_id", "expected_last_fork_id", ], [ pytest.param( "Mainnet", 1746612310, # Right before Prague activation ForkHash(0x9F3D2254), ForkHash(0xC376CF8B), ForkHash(0xC376CF8B), id="mainnet_cancun", ), pytest.param( "Sepolia", 1741159775, # Right before Prague activation ForkHash(0x88CF81D9), ForkHash(0xED88B5FD), ForkHash(0xED88B5FD), id="sepolia_cancun", ), pytest.param( "Holesky", 1740434111, # Right before Prague activation ForkHash(0x9B192AD0), ForkHash(0xDFBD9BED), ForkHash(0xDFBD9BED), id="holesky_cancun", ), pytest.param( "Hoodi", 1742999831, # Right before Prague activation ForkHash(0xBEF71D30), ForkHash(0x0929E24E), ForkHash(0x0929E24E), id="hoodi_prague", ), ], indirect=["network"], ) def test_fork_ids( eth_config: EthConfigResponse, expected_current_fork_id: ForkHash, expected_next_fork_id: ForkHash | None, expected_last_fork_id: ForkHash | None, ) -> None: """Test various configurations of fork Ids for different timestamps.""" assert expected_current_fork_id == eth_config.current.fork_id, ( f"Unexpected current fork id: {eth_config.current.fork_id} != {expected_current_fork_id}" ) if expected_next_fork_id is not None: assert eth_config.next is not None, "Expected next to be not None" assert expected_next_fork_id == eth_config.next.fork_id, ( f"Unexpected next fork id: {eth_config.next.fork_id} != {expected_next_fork_id}" ) else: assert eth_config.next is None, "Expected next to be None" if expected_last_fork_id is not None: assert eth_config.last is not None, "Expected last to be not None" assert expected_last_fork_id == eth_config.last.fork_id, ( f"Unexpected last fork id: {eth_config.last.fork_id} != {expected_last_fork_id}" ) else: assert eth_config.last is None, "Expected last to be None" ================================================ FILE: src/pytest_plugins/execute/eth_config/tests/test_genesis.py ================================================ """Test parsing a genesis file to generate a network configuration.""" from os.path import realpath from pathlib import Path import pytest from ethereum_test_base_types import Hash from ethereum_test_forks import ( BPO1, BPO2, BPO3, BPO4, BPO5, Berlin, Byzantium, Cancun, Constantinople, Homestead, Istanbul, London, Osaka, Paris, Prague, Shanghai, ) from ethereum_test_rpc import ( ForkConfigBlobSchedule, ) from ..execute_types import ForkActivationTimes, Genesis, NetworkConfig CURRENT_FILE = Path(realpath(__file__)) CURRENT_FOLDER = CURRENT_FILE.parent @pytest.fixture def genesis_contents(genesis_file_name: str) -> str: """Read the genesis file contents.""" genesis_path = CURRENT_FOLDER / genesis_file_name return genesis_path.read_text() @pytest.mark.parametrize( "genesis_file_name,expected_hash,expected_network_config", [ pytest.param( "genesis_example.json", Hash(0x3A8C8CEF63859865AA1D40DED77B083EEF06A1702B8188D5586434B9C3ADC4BE), NetworkConfig( chain_id=7023102237, genesis_hash=Hash( 0x3A8C8CEF63859865AA1D40DED77B083EEF06A1702B8188D5586434B9C3ADC4BE ), fork_activation_times=ForkActivationTimes( root={ Homestead: 0, Byzantium: 0, Constantinople: 0, Istanbul: 0, Berlin: 0, London: 0, Paris: 0, Shanghai: 0, Cancun: 0, Prague: 0, Osaka: 1753379304, BPO1: 1753477608, BPO2: 1753575912, BPO3: 1753674216, BPO4: 1753772520, BPO5: 1753889256, }, ), blob_schedule={ Cancun: ForkConfigBlobSchedule(target=3, max=6, baseFeeUpdateFraction=3338477), Prague: ForkConfigBlobSchedule(target=6, max=9, baseFeeUpdateFraction=5007716), Osaka: ForkConfigBlobSchedule(target=6, max=9, baseFeeUpdateFraction=5007716), BPO1: ForkConfigBlobSchedule(target=9, max=12, baseFeeUpdateFraction=5007716), BPO2: ForkConfigBlobSchedule(target=12, max=15, baseFeeUpdateFraction=5007716), BPO3: ForkConfigBlobSchedule(target=15, max=18, baseFeeUpdateFraction=5007716), BPO4: ForkConfigBlobSchedule(target=6, max=9, baseFeeUpdateFraction=5007716), BPO5: ForkConfigBlobSchedule(target=15, max=20, baseFeeUpdateFraction=5007716), }, ), ), ], ) def test_genesis_parsing( genesis_contents: str, expected_hash: Hash, expected_network_config: NetworkConfig, ) -> None: """ Verify genesis config file is parsed and correctly converted into a network configuration. """ parsed_genesis = Genesis.model_validate_json(genesis_contents) assert parsed_genesis.hash == expected_hash, ( f"Unexpected genesis hash: {parsed_genesis.hash}, expected: {expected_hash}" ) network_config = parsed_genesis.network_config() assert network_config == expected_network_config, ( f"Unexpected network config: {network_config}, expected: {expected_network_config}" ) ================================================ FILE: src/pytest_plugins/execute/execute.py ================================================ """ Test execution plugin for pytest, to run Ethereum tests using in live networks. """ import os from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, Generator, List, Type import pytest from pytest_metadata.plugin import metadata_key from ethereum_test_execution import BaseExecute from ethereum_test_forks import Fork from ethereum_test_rpc import EngineRPC, EthRPC from ethereum_test_tools import BaseTest from ethereum_test_types import ChainConfigDefaults, EnvironmentDefaults, TransactionDefaults from ..shared.execute_fill import ALL_FIXTURE_PARAMETERS from ..shared.helpers import ( get_spec_format_for_item, is_help_or_collectonly_mode, labeled_format_parameter_set, ) from ..spec_version_checker.spec_version_checker import EIPSpecTestItem from .pre_alloc import Alloc def print_migration_warning(terminalreporter: Any = None) -> None: """Print migration warning about repository merge.""" lines = [ "", "=" * 80, "⚠️ IMPORTANT: Repository Migration in Progress - 'The Weld' ⚠️", "=" * 80, "", "This repository is being merged into ethereum/execution-specs (EELS) during the", "week of October 20-24, 2025.", "", "📅 Timeline:", " • Week of Oct 13-17: Closing PRs, porting issues to EELS", " • Week of Oct 20-24: Migration week - fixing CI and fixture building", " • Oct 24 (ETA): Weld finalized - all development moves to EELS", "", "👉 What This Means:", " • Test Contributors: After Oct 24, reopen draft PRs in ethereum/execution-specs", " • All future test development happens in EELS after completion", " • Fixture releases continue as usual during transition", "", "For details: https://steel.ethereum.foundation/blog/2025-09-11_weld-announcement/", "=" * 80, "", ] if terminalreporter: for line in lines: if "⚠️" in line or "IMPORTANT" in line: terminalreporter.write_line(line, bold=True, yellow=True) elif line.startswith("="): terminalreporter.write_line(line, yellow=True) else: terminalreporter.write_line(line) else: for line in lines: print(line) def default_html_report_file_path() -> str: """ File (default) to store the generated HTML test report. Defined as a function to allow for easier testing. """ return "./execution_results/report_execute.html" def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" execute_group = parser.getgroup("execute", "Arguments defining test execution behavior") execute_group.addoption( "--default-gas-price", action="store", dest="default_gas_price", type=int, default=10**9, help=("Default gas price used for transactions, unless overridden by the test."), ) execute_group.addoption( "--default-max-fee-per-gas", action="store", dest="default_max_fee_per_gas", type=int, default=10**9, help=("Default max fee per gas used for transactions, unless overridden by the test."), ) execute_group.addoption( "--default-max-priority-fee-per-gas", action="store", dest="default_max_priority_fee_per_gas", type=int, default=10**9, help=( "Default max priority fee per gas used for transactions, " "unless overridden by the test." ), ) execute_group.addoption( "--transaction-gas-limit", action="store", dest="transaction_gas_limit", default=EnvironmentDefaults.gas_limit // 4, type=int, help=( "Maximum gas used to execute a single transaction. " "Will be used as ceiling for tests that attempt to consume the entire block gas limit." f"(Default: {EnvironmentDefaults.gas_limit // 4})" ), ) execute_group.addoption( "--transactions-per-block", action="store", dest="transactions_per_block", type=int, default=None, help=("Number of transactions to send before producing the next block."), ) execute_group.addoption( "--get-payload-wait-time", action="store", dest="get_payload_wait_time", type=float, default=0.3, help=("Time to wait after sending a forkchoice_updated before getting the payload."), ) execute_group.addoption( "--chain-id", action="store", dest="chain_id", required=False, type=int, default=None, help="ID of the chain where the tests will be executed.", ) report_group = parser.getgroup("tests", "Arguments defining html report behavior") report_group.addoption( "--no-html", action="store_true", dest="disable_html", default=False, help=( "Don't generate an HTML test report. " "The --html flag can be used to specify a different path." ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Pytest hook called after command line options have been parsed and before test collection begins. Couple of notes: 1. Register the plugin's custom markers and process command-line options. Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers 2. `@pytest.hookimpl(tryfirst=True)` is applied to ensure that this hook is called before the pytest-html plugin's pytest_configure to ensure that it uses the modified `htmlpath` option. """ print_migration_warning() # Modify the block gas limit if specified. if config.getoption("transaction_gas_limit"): EnvironmentDefaults.gas_limit = config.getoption("transaction_gas_limit") if is_help_or_collectonly_mode(config): return config.engine_rpc_supported = False # type: ignore[attr-defined] if config.getoption("disable_html") and config.getoption("htmlpath") is None: # generate an html report by default, unless explicitly disabled config.option.htmlpath = Path(default_html_report_file_path()) command_line_args = "execute " + " ".join(config.invocation_params.args) config.stash[metadata_key]["Command-line args"] = f"{command_line_args}" # Configuration for the forks pytest plugin config.skip_transition_forks = True # type: ignore[attr-defined] config.single_fork_mode = True # type: ignore[attr-defined] # Configure the chain ID for the tests. rpc_chain_id = config.getoption("rpc_chain_id", None) chain_id = config.getoption("chain_id") if rpc_chain_id is not None or chain_id is not None: if rpc_chain_id is not None and chain_id is not None: if chain_id != rpc_chain_id: pytest.exit( "Conflicting chain ID configuration. " "The --rpc-chain-id flag is deprecated and will be removed in a future " "release. Use --chain-id instead." ) if rpc_chain_id is not None: ChainConfigDefaults.chain_id = rpc_chain_id if chain_id is not None: ChainConfigDefaults.chain_id = chain_id def pytest_metadata(metadata: dict[str, Any]) -> None: """Add or remove metadata to/from the pytest report.""" metadata.pop("JAVA_HOME", None) def pytest_html_results_table_header(cells: list[str]) -> None: """Customize the table headers of the HTML report table.""" cells.insert(3, 'Sender') cells.insert(4, 'Funded Accounts') cells.insert( 5, 'Deployed Contracts' ) del cells[-1] # Remove the "Links" column def pytest_html_results_table_row(report: Any, cells: list[str]) -> None: """Customize the table rows of the HTML report table.""" if hasattr(report, "user_properties"): user_props = dict(report.user_properties) if "sender_address" in user_props and user_props["sender_address"] is not None: sender_address = user_props["sender_address"] cells.insert(3, f"{sender_address}") else: cells.insert(3, "Not available") if "funded_accounts" in user_props and user_props["funded_accounts"] is not None: funded_accounts = user_props["funded_accounts"] cells.insert(4, f"{funded_accounts}") else: cells.insert(4, "Not available") del cells[-1] # Remove the "Links" column @pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport( item: pytest.Item, call: pytest.CallInfo[None] ) -> Generator[None, Any, None]: """ Make each test's fixture json path available to the test report via user_properties. This hook is called when each test is run and a report is being made. """ outcome = yield report = outcome.get_result() if call.when == "call": for property_name in ["sender_address", "funded_accounts"]: if hasattr(item.config, property_name): report.user_properties.append((property_name, getattr(item.config, property_name))) def pytest_html_report_title(report: Any) -> None: """Set the HTML report title (pytest-html plugin).""" report.title = "Execute Test Report" @pytest.fixture(scope="session") def transactions_per_block( request: pytest.FixtureRequest, ) -> int: """ Return the number of transactions to send before producing the next block. """ if transactions_per_block := request.config.getoption("transactions_per_block"): return transactions_per_block # Get the number of workers for the test worker_count_env = os.environ.get("PYTEST_XDIST_WORKER_COUNT") if not worker_count_env: return 1 return max(int(worker_count_env), 1) @pytest.fixture(scope="session") def default_gas_price(request: pytest.FixtureRequest) -> int: """Return default gas price used for transactions.""" gas_price = request.config.getoption("default_gas_price") assert gas_price > 0, "Gas price must be greater than 0" return gas_price @pytest.fixture(scope="session") def default_max_fee_per_gas( request: pytest.FixtureRequest, ) -> int: """Return default max fee per gas used for transactions.""" return request.config.getoption("default_max_fee_per_gas") @pytest.fixture(scope="session") def default_max_priority_fee_per_gas( request: pytest.FixtureRequest, ) -> int: """Return default max priority fee per gas used for transactions.""" return request.config.getoption("default_max_priority_fee_per_gas") @pytest.fixture(autouse=True, scope="session") def modify_transaction_defaults( default_gas_price: int, default_max_fee_per_gas: int, default_max_priority_fee_per_gas: int, ) -> None: """ Modify transaction defaults to values better suited for live networks. """ TransactionDefaults.gas_price = default_gas_price TransactionDefaults.max_fee_per_gas = default_max_fee_per_gas TransactionDefaults.max_priority_fee_per_gas = default_max_priority_fee_per_gas @dataclass(kw_only=True) class Collector: """ A class that collects transactions and post-allocations for every test case. """ eth_rpc: EthRPC collected_tests: Dict[str, BaseExecute] = field(default_factory=dict) def collect(self, test_name: str, execute_format: BaseExecute) -> None: """Collect transactions and post-allocations for the test case.""" self.collected_tests[test_name] = execute_format @pytest.fixture(scope="session") def collector( request: pytest.FixtureRequest, eth_rpc: EthRPC, ) -> Generator[Collector, None, None]: """ Return configured fixture collector instance used for all tests in one test module. """ del request collector = Collector(eth_rpc=eth_rpc) yield collector def base_test_parametrizer(cls: Type[BaseTest]) -> Any: """ Generate pytest.fixture for a given BaseTest subclass. Implementation detail: All spec fixtures must be scoped on test function level to avoid leakage between tests. """ cls_fixture_parameters = [p for p in ALL_FIXTURE_PARAMETERS if p in cls.model_fields] @pytest.fixture( scope="function", name=cls.pytest_parameter_name(), ) def base_test_parametrizer_func( request: Any, fork: Fork, pre: Alloc, eth_rpc: EthRPC, engine_rpc: EngineRPC | None, collector: Collector, ) -> Type[BaseTest]: """ Fixture used to instantiate an auto-fillable BaseTest object from within a test function. Every test that defines a test filler must explicitly specify its parameter name (see `pytest_parameter_name` in each implementation of BaseTest) in its function arguments. When parametrize, indirect must be used along with the fixture format as value. """ execute_format = request.param assert execute_format in BaseExecute.formats.values() assert issubclass(execute_format, BaseExecute) if execute_format.requires_engine_rpc: assert engine_rpc is not None, "Engine RPC is required for this format." class BaseTestWrapper(cls): # type: ignore def __init__(self, *args: Any, **kwargs: Any) -> None: kwargs["t8n_dump_dir"] = None if "pre" not in kwargs: kwargs["pre"] = pre elif kwargs["pre"] != pre: raise ValueError("The pre-alloc object was modified by the test.") # Set default for expected_benchmark_gas_used if "expected_benchmark_gas_used" not in kwargs: kwargs["expected_benchmark_gas_used"] = request.getfixturevalue( "gas_benchmark_value" ) kwargs |= { p: request.getfixturevalue(p) for p in cls_fixture_parameters if p not in kwargs } request.node.config.sender_address = str(pre._sender) super(BaseTestWrapper, self).__init__(*args, **kwargs) self._request = request # wait for pre-requisite transactions to be included in blocks pre.wait_for_transactions() for deployed_contract, expected_code in pre._deployed_contracts: actual_code = eth_rpc.get_code(deployed_contract) if actual_code != expected_code: raise Exception( f"Deployed test contract didn't match expected code at address " f"{deployed_contract} (not enough gas_limit?).\n" f"Expected: {expected_code}\n" f"Actual: {actual_code}" ) request.node.config.funded_accounts = ", ".join( [str(eoa) for eoa in pre._funded_eoa] ) execute = self.execute(fork=fork, execute_format=execute_format) execute.execute(fork=fork, eth_rpc=eth_rpc, engine_rpc=engine_rpc, request=request) collector.collect(request.node.nodeid, execute) return BaseTestWrapper return base_test_parametrizer_func # Dynamically generate a pytest fixture for each test spec type. for cls in BaseTest.spec_types.values(): # Fixture needs to be defined in the global scope so pytest can detect it. globals()[cls.pytest_parameter_name()] = base_test_parametrizer(cls) def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """ Pytest hook used to dynamically generate test cases for each fixture format a given test spec supports. """ engine_rpc_supported = metafunc.config.engine_rpc_supported # type: ignore for test_type in BaseTest.spec_types.values(): if test_type.pytest_parameter_name() in metafunc.fixturenames: parameter_set = [] for format_with_or_without_label in test_type.supported_execute_formats: param = labeled_format_parameter_set(format_with_or_without_label) if format_with_or_without_label.requires_engine_rpc and not engine_rpc_supported: param.marks.append(pytest.mark.skip(reason="Engine RPC is not supported")) # type: ignore parameter_set.append(param) metafunc.parametrize( [test_type.pytest_parameter_name()], parameter_set, scope="function", indirect=True, ) def pytest_collection_modifyitems( items: List[pytest.Item], ) -> None: """ Remove transition tests and add the appropriate execute markers to the test. """ items_for_removal = [] for i, item in enumerate(items): if isinstance(item, EIPSpecTestItem): continue params: Dict[str, Any] = item.callspec.params # type: ignore if "fork" not in params or params["fork"] is None: items_for_removal.append(i) continue fork: Fork = params["fork"] spec_type, execute_format = get_spec_format_for_item(params) assert issubclass(execute_format, BaseExecute) markers = list(item.iter_markers()) if spec_type.discard_execute_format_by_marks(execute_format, fork, markers): items_for_removal.append(i) continue for marker in markers: if marker.name == "execute": for mark in marker.args: item.add_marker(mark) elif marker.name == "valid_at_transition_to": items_for_removal.append(i) continue elif marker.name == "pre_alloc_modify": item.add_marker(pytest.mark.skip(reason="Pre-alloc modification not supported")) if "yul" in item.fixturenames: # type: ignore item.add_marker(pytest.mark.yul_test) for i in reversed(items_for_removal): items.pop(i) ================================================ FILE: src/pytest_plugins/execute/execute_recover.py ================================================ """Pytest test to recover funds from a failed remote execution.""" import pytest from ethereum_test_base_types import Address from ethereum_test_rpc import EthRPC from ethereum_test_types import EOA, Transaction @pytest.fixture(scope="session") def gas_price(eth_rpc: EthRPC) -> int: """Get the gas price for the funding transactions.""" return eth_rpc.gas_price() def test_recover_funds( destination: Address, index: int, eoa: EOA, gas_price: int, eth_rpc: EthRPC, ) -> None: """Recover funds from a failed remote execution.""" del index remaining_balance = eth_rpc.get_balance(eoa) refund_gas_limit = 21_000 tx_cost = refund_gas_limit * gas_price if remaining_balance < tx_cost: pytest.skip(f"Balance {remaining_balance} is less than the transaction cost {tx_cost}") refund_tx = Transaction( sender=eoa, to=destination, gas_limit=refund_gas_limit, gas_price=gas_price, value=remaining_balance - tx_cost, ).with_signature_and_sender() eth_rpc.send_wait_transaction(refund_tx) print(f"Recovered {remaining_balance} from {eoa} to {destination}") ================================================ FILE: src/pytest_plugins/execute/pre_alloc.py ================================================ """Pre-allocation fixtures using for test filling.""" from itertools import count from pathlib import Path from random import randint from typing import Any, Dict, Generator, Iterator, List, Literal, Self, Tuple import pytest import yaml from pydantic import PrivateAttr from ethereum_test_base_types import ( Bytes, EthereumTestRootModel, Number, StorageRootType, ZeroPaddedHexNumber, ) from ethereum_test_base_types.conversions import ( BytesConvertible, FixedSizeBytesConvertible, NumberConvertible, ) from ethereum_test_forks import Fork from ethereum_test_rpc import EthRPC from ethereum_test_rpc.rpc_types import TransactionByHashResponse from ethereum_test_tools import ( EOA, Account, Address, AuthorizationTuple, Initcode, Storage, Transaction, ) from ethereum_test_tools import Alloc as BaseAlloc from ethereum_test_tools import Opcodes as Op from ethereum_test_types import ChainConfig, TransactionTestMetadata from ethereum_test_types.eof.v1 import Container from ethereum_test_vm import Bytecode, EVMCodeType, Opcodes MAX_BYTECODE_SIZE = 24576 MAX_INITCODE_SIZE = MAX_BYTECODE_SIZE * 2 class AddressStubs(EthereumTestRootModel[Dict[str, Address]]): """ Address stubs class. The key represents the label that is used in the test to tag the contract, and the value is the address where the contract is already located at in the current network. """ root: Dict[str, Address] def __contains__(self, item: str) -> bool: """Check if an item is in the address stubs.""" return item in self.root def __getitem__(self, item: str) -> Address: """Get an item from the address stubs.""" return self.root[item] @classmethod def model_validate_json_or_file(cls, json_data_or_path: str) -> Self: """ Try to load from file if the value resembles a path that ends with .json/.yml and the file exists. """ lower_json_data_or_path = json_data_or_path.lower() if ( lower_json_data_or_path.endswith(".json") or lower_json_data_or_path.endswith(".yml") or lower_json_data_or_path.endswith(".yaml") ): path = Path(json_data_or_path) if path.is_file(): path_suffix = path.suffix.lower() if path_suffix == ".json": return cls.model_validate_json(path.read_text()) elif path_suffix in [".yml", ".yaml"]: loaded_yaml = yaml.safe_load(path.read_text()) if loaded_yaml is None: return cls(root={}) return cls.model_validate(loaded_yaml) if json_data_or_path.strip() == "": return cls(root={}) return cls.model_validate_json(json_data_or_path) def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" pre_alloc_group = parser.getgroup( "pre_alloc", "Arguments defining pre-allocation behavior during test execution" ) pre_alloc_group.addoption( "--eoa-start", action="store", dest="eoa_iterator_start", default=randint(0, 2**256), type=int, help="The start private key from which tests will deploy EOAs.", ) pre_alloc_group.addoption( "--evm-code-type", action="store", dest="evm_code_type", default=None, type=EVMCodeType, choices=list(EVMCodeType), help="Type of EVM code to deploy in each test by default.", ) pre_alloc_group.addoption( "--eoa-fund-amount-default", action="store", dest="eoa_fund_amount_default", default=10**18, type=int, help="The default amount of wei to fund each EOA in each test with.", ) pre_alloc_group.addoption( "--skip-cleanup", action="store_true", dest="skip_cleanup", default=False, help="Skip cleanup phase after each test.", ) @pytest.hookimpl(trylast=True) def pytest_report_header(config: pytest.Config) -> list[str]: """Pytest hook called to obtain the report header.""" bold = "\033[1m" reset = "\033[39;49m" eoa_start = config.getoption("eoa_iterator_start") header = [ (bold + f"Start seed for EOA: {hex(eoa_start)} " + reset), ] return header @pytest.fixture(scope="session") def address_stubs( request: pytest.FixtureRequest, ) -> AddressStubs | None: """ Return an address stubs object. If the address stubs are not supported by the subcommand, return None. """ return request.config.getoption("address_stubs", None) @pytest.fixture(scope="session") def skip_cleanup(request: pytest.FixtureRequest) -> bool: """Return whether to skip cleanup phase after each test.""" return request.config.getoption("skip_cleanup") @pytest.fixture(scope="session") def eoa_iterator(request: pytest.FixtureRequest) -> Iterator[EOA]: """Return an iterator that generates EOAs.""" eoa_start = request.config.getoption("eoa_iterator_start") print(f"Starting EOA index: {hex(eoa_start)}") return iter(EOA(key=i, nonce=0) for i in count(start=eoa_start)) class Alloc(BaseAlloc): """A custom class that inherits from the original Alloc class.""" _fork: Fork = PrivateAttr() _sender: EOA = PrivateAttr() _eth_rpc: EthRPC = PrivateAttr() _txs: List[Transaction] = PrivateAttr(default_factory=list) _deployed_contracts: List[Tuple[Address, Bytes]] = PrivateAttr(default_factory=list) _funded_eoa: List[EOA] = PrivateAttr(default_factory=list) _evm_code_type: EVMCodeType | None = PrivateAttr(None) _chain_id: int = PrivateAttr() _node_id: str = PrivateAttr("") _address_stubs: AddressStubs = PrivateAttr() def __init__( self, *args: Any, fork: Fork, sender: EOA, eth_rpc: EthRPC, eoa_iterator: Iterator[EOA], chain_id: int, eoa_fund_amount_default: int, evm_code_type: EVMCodeType | None = None, node_id: str = "", address_stubs: AddressStubs | None = None, **kwargs: Any, ) -> None: """Initialize the pre-alloc with the given parameters.""" super().__init__(*args, **kwargs) self._fork = fork self._sender = sender self._eth_rpc = eth_rpc self._eoa_iterator = eoa_iterator self._evm_code_type = evm_code_type self._chain_id = chain_id self._eoa_fund_amount_default = eoa_fund_amount_default self._node_id = node_id self._address_stubs = address_stubs or AddressStubs(root={}) # always refresh _sender nonce from RPC ("pending") before building tx def _refresh_sender_nonce(self) -> None: """ Synchronize self._sender.nonce with the node's view. Prefer 'pending' to account for in-flight transactions. """ try: rpc_nonce = self._eth_rpc.get_transaction_count(self._sender, block_number="pending") except TypeError: # If EthRPC.get_transaction_count has no 'block' kwarg rpc_nonce = self._eth_rpc.get_transaction_count(self._sender) self._sender.nonce = Number(rpc_nonce) def __setitem__( self, address: Address | FixedSizeBytesConvertible, account: Account | None, ) -> None: """Set account associated with an address.""" raise ValueError("Tests are not allowed to set pre-alloc items in execute mode") def code_pre_processor( self, code: Bytecode | Container, *, evm_code_type: EVMCodeType | None, ) -> Bytecode | Container: """Pre-processes the code before setting it.""" if evm_code_type is None: evm_code_type = self._evm_code_type if evm_code_type == EVMCodeType.EOF_V1: if not isinstance(code, Container): if isinstance(code, Bytecode) and not code.terminating: return Container.Code(code + Opcodes.STOP) return Container.Code(code) return code def deploy_contract( self, code: BytesConvertible, *, storage: Storage | StorageRootType | None = None, balance: NumberConvertible = 0, nonce: NumberConvertible = 1, address: Address | None = None, evm_code_type: EVMCodeType | None = None, label: str | None = None, stub: str | None = None, ) -> Address: """Deploy a contract to the allocation.""" if storage is None: storage = {} assert address is None, "address parameter is not supported" if not isinstance(storage, Storage): storage = Storage(storage) # type: ignore if stub is not None and self._address_stubs is not None: if stub not in self._address_stubs: raise ValueError(f"Stub name {stub} not found in address stubs") contract_address = self._address_stubs[stub] code = self._eth_rpc.get_code(contract_address) if code == b"": raise ValueError(f"Stub {stub} at {contract_address} has no code") balance = self._eth_rpc.get_balance(contract_address) nonce = self._eth_rpc.get_transaction_count(contract_address) super().__setitem__( contract_address, Account( nonce=nonce, balance=balance, code=code, storage={}, ), ) return contract_address initcode_prefix = Bytecode() deploy_gas_limit = 21_000 + 32_000 if len(storage.root) > 0: initcode_prefix += sum(Op.SSTORE(key, value) for key, value in storage.root.items()) deploy_gas_limit += len(storage.root) * 22_600 assert isinstance(code, Bytecode) or isinstance(code, Container), ( f"incompatible code type: {type(code)}" ) code = self.code_pre_processor(code, evm_code_type=evm_code_type) assert len(code) <= MAX_BYTECODE_SIZE, f"code too large: {len(code)} > {MAX_BYTECODE_SIZE}" deploy_gas_limit += len(bytes(code)) * 200 initcode: Bytecode | Container if evm_code_type == EVMCodeType.EOF_V1: assert isinstance(code, Container) initcode = Container.Init(deploy_container=code, initcode_prefix=initcode_prefix) else: initcode = Initcode(deploy_code=code, initcode_prefix=initcode_prefix) memory_expansion_gas_calculator = self._fork.memory_expansion_gas_calculator() deploy_gas_limit += memory_expansion_gas_calculator(new_bytes=len(bytes(initcode))) assert len(initcode) <= MAX_INITCODE_SIZE, ( f"initcode too large {len(initcode)} > {MAX_INITCODE_SIZE}" ) calldata_gas_calculator = self._fork.calldata_gas_calculator(block_number=0, timestamp=0) deploy_gas_limit += calldata_gas_calculator(data=initcode) # Limit the gas limit deploy_gas_limit = min(deploy_gas_limit * 2, 30_000_000) print(f"Deploying contract with gas limit: {deploy_gas_limit}") self._refresh_sender_nonce() deploy_tx = Transaction( sender=self._sender, to=None, data=initcode, value=balance, gas_limit=deploy_gas_limit, ).with_signature_and_sender() deploy_tx.metadata = TransactionTestMetadata( test_id=self._node_id, phase="setup", action="deploy_contract", target=label, tx_index=len(self._txs), ) self._eth_rpc.send_transaction(deploy_tx) self._txs.append(deploy_tx) contract_address = deploy_tx.created_contract self._deployed_contracts.append((contract_address, Bytes(code))) assert Number(nonce) >= 1, "impossible to deploy contract with nonce lower than one" super().__setitem__( contract_address, Account( nonce=nonce, balance=balance, code=code, storage=storage, ), ) contract_address.label = label return contract_address def fund_eoa( self, amount: NumberConvertible | None = None, label: str | None = None, storage: Storage | None = None, delegation: Address | Literal["Self"] | None = None, nonce: NumberConvertible | None = None, ) -> EOA: """ Add a previously unused EOA to the pre-alloc with the balance specified by `amount`. """ assert nonce is None, "nonce parameter is not supported for execute" eoa = next(self._eoa_iterator) eoa.label = label # Send a transaction to fund the EOA if amount is None: amount = self._eoa_fund_amount_default fund_tx: Transaction | None = None if delegation is not None or storage is not None: if storage is not None: sstore_address = self.deploy_contract( code=( sum(Op.SSTORE(key, value) for key, value in storage.root.items()) + Op.STOP ) ) self._refresh_sender_nonce() set_storage_tx = Transaction( sender=self._sender, to=eoa, authorization_list=[ AuthorizationTuple( chain_id=self._chain_id, address=sstore_address, nonce=eoa.nonce, signer=eoa, ), ], gas_limit=100_000, ).with_signature_and_sender() eoa.nonce = Number(eoa.nonce + 1) set_storage_tx.metadata = TransactionTestMetadata( test_id=self._node_id, phase="setup", action="eoa_storage_set", target=label, tx_index=len(self._txs), ) self._eth_rpc.send_transaction(set_storage_tx) self._txs.append(set_storage_tx) self._refresh_sender_nonce() if delegation is not None: if not isinstance(delegation, Address) and delegation == "Self": delegation = eoa # TODO: This tx has side-effects on the EOA state because of # the delegation fund_tx = Transaction( sender=self._sender, to=eoa, value=amount, authorization_list=[ AuthorizationTuple( chain_id=self._chain_id, address=delegation, nonce=eoa.nonce, signer=eoa, ), ], gas_limit=100_000, ).with_signature_and_sender() eoa.nonce = Number(eoa.nonce + 1) else: fund_tx = Transaction( sender=self._sender, to=eoa, value=amount, authorization_list=[ AuthorizationTuple( chain_id=self._chain_id, # Reset delegation to an address without code address=0, nonce=eoa.nonce, signer=eoa, ), ], gas_limit=100_000, ).with_signature_and_sender() eoa.nonce = Number(eoa.nonce + 1) else: if Number(amount) > 0: self._refresh_sender_nonce() fund_tx = Transaction( sender=self._sender, to=eoa, value=amount, ).with_signature_and_sender() if fund_tx is not None: fund_tx.metadata = TransactionTestMetadata( test_id=self._node_id, phase="setup", action="fund_eoa", target=label, tx_index=len(self._txs), ) self._eth_rpc.send_transaction(fund_tx) self._txs.append(fund_tx) super().__setitem__( eoa, Account( nonce=eoa.nonce, balance=amount, ), ) self._funded_eoa.append(eoa) return eoa def fund_address(self, address: Address, amount: NumberConvertible) -> None: """ Fund an address with a given amount. If the address is already present in the pre-alloc the amount will be added to its existing balance. """ self._refresh_sender_nonce() fund_tx = Transaction( sender=self._sender, to=address, value=amount, ).with_signature_and_sender() fund_tx.metadata = TransactionTestMetadata( test_id=self._node_id, phase="setup", action="fund_address", target=address.label, tx_index=len(self._txs), ) self._eth_rpc.send_transaction(fund_tx) self._txs.append(fund_tx) if address in self: account = self[address] if account is not None: current_balance = account.balance or 0 account.balance = ZeroPaddedHexNumber(current_balance + Number(amount)) return super().__setitem__(address, Account(balance=amount)) def empty_account(self) -> Address: """ Add a previously unused account guaranteed to be empty to the pre-alloc. This ensures the account has: - Zero balance - Zero nonce - No code - No storage This is different from precompiles or system contracts. The function does not send any transactions, ensuring that the account remains "empty." Returns: Address: The address of the created empty account. """ eoa = next(self._eoa_iterator) super().__setitem__( eoa, Account( nonce=0, balance=0, ), ) return Address(eoa) def wait_for_transactions(self) -> List[TransactionByHashResponse]: """Wait for all transactions to be included in blocks.""" return self._eth_rpc.wait_for_transactions(self._txs) @pytest.fixture(autouse=True) def evm_code_type(request: pytest.FixtureRequest) -> EVMCodeType: """Return default EVM code type for all tests (LEGACY).""" parameter_evm_code_type = request.config.getoption("evm_code_type") if parameter_evm_code_type is not None: assert type(parameter_evm_code_type) is EVMCodeType, "Invalid EVM code type" return parameter_evm_code_type return EVMCodeType.LEGACY @pytest.fixture(scope="session") def eoa_fund_amount_default(request: pytest.FixtureRequest) -> int: """Get the gas price for the funding transactions.""" return request.config.option.eoa_fund_amount_default @pytest.fixture(autouse=True, scope="function") def pre( fork: Fork, sender_key: EOA, eoa_iterator: Iterator[EOA], eth_rpc: EthRPC, evm_code_type: EVMCodeType, chain_config: ChainConfig, eoa_fund_amount_default: int, default_gas_price: int, address_stubs: AddressStubs | None, skip_cleanup: bool, request: pytest.FixtureRequest, ) -> Generator[Alloc, None, None]: """Return default pre allocation for all tests (Empty alloc).""" # FIXME: Static tests dont have a fork so we need to get it from the node. actual_fork = fork if actual_fork is None: assert hasattr(request.node, "fork") actual_fork = request.node.fork # Record the starting balance of the sender sender_test_starting_balance = eth_rpc.get_balance(sender_key) # Prepare the pre-alloc pre = Alloc( fork=fork, sender=sender_key, eth_rpc=eth_rpc, eoa_iterator=eoa_iterator, evm_code_type=evm_code_type, chain_id=chain_config.chain_id, eoa_fund_amount_default=eoa_fund_amount_default, node_id=request.node.nodeid, address_stubs=address_stubs, ) # Yield the pre-alloc for usage during the test yield pre if not skip_cleanup: # Refund all EOAs (regardless of whether the test passed or failed) refund_txs = [] for idx, eoa in enumerate(pre._funded_eoa): remaining_balance = eth_rpc.get_balance(eoa) eoa.nonce = Number(eth_rpc.get_transaction_count(eoa)) refund_gas_limit = 21_000 tx_cost = refund_gas_limit * default_gas_price if remaining_balance < tx_cost: continue refund_tx = Transaction( sender=eoa, to=sender_key, gas_limit=21_000, gas_price=default_gas_price, value=remaining_balance - tx_cost, ).with_signature_and_sender() refund_tx.metadata = TransactionTestMetadata( test_id=request.node.nodeid, phase="cleanup", action="refund_from_eoa", target=eoa.label, tx_index=idx, ) refund_txs.append(refund_tx) eth_rpc.send_wait_transactions(refund_txs) # Record the ending balance of the sender sender_test_ending_balance = eth_rpc.get_balance(sender_key) used_balance = sender_test_starting_balance - sender_test_ending_balance print(f"Used balance={used_balance / 10**18:.18f}") ================================================ FILE: src/pytest_plugins/execute/recover.py ================================================ """Pytest plugin to recover funds from a failed remote execution.""" import pytest from ethereum_test_base_types import Address, HexNumber from ethereum_test_types import EOA def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" recover_group = parser.getgroup("execute", "Arguments defining fund recovery behavior.") recover_group.addoption( "--start-eoa-index", action="store", dest="start_eoa_index", type=HexNumber, required=True, default=None, help=("Starting private key index to use for EOA generation."), ) recover_group.addoption( "--destination", action="store", dest="destination", type=Address, required=True, default=None, help=("Address to send the recovered funds to."), ) recover_group.addoption( "--max-index", action="store", dest="max_index", type=int, default=100, help=("Maximum private key index to use for EOA generation."), ) @pytest.fixture(scope="session") def destination(request: pytest.FixtureRequest) -> Address: """Get the destination address.""" return request.config.option.destination def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """Pytest hook used to dynamically generate test cases.""" max_index = metafunc.config.option.max_index start_eoa_index = metafunc.config.option.start_eoa_index print(f"Generating {max_index} test cases starting from index {start_eoa_index}") indexes_keys = [(index, EOA(key=start_eoa_index + index)) for index in range(max_index)] metafunc.parametrize( ["index", "eoa"], indexes_keys, ids=[f"{index}-{eoa}" for index, eoa in indexes_keys], ) ================================================ FILE: src/pytest_plugins/execute/rpc/__init__.py ================================================ """RPC plugins to execute tests in different environments.""" ================================================ FILE: src/pytest_plugins/execute/rpc/chain_builder_eth_rpc.py ================================================ """ Chain builder Ethereum RPC that can drive the chain when new transactions are submitted. """ import time from pathlib import Path from typing import Any, Dict, Iterator, List from filelock import FileLock from pydantic import RootModel from typing_extensions import Self from ethereum_test_base_types import HexNumber from ethereum_test_forks import Fork from ethereum_test_rpc import EngineRPC from ethereum_test_rpc import EthRPC as BaseEthRPC from ethereum_test_rpc.rpc_types import ( ForkchoiceState, PayloadAttributes, PayloadStatusEnum, TransactionByHashResponse, ) from ethereum_test_tools import ( Address, Hash, Transaction, ) from ethereum_test_types.trie import keccak256 class HashList(RootModel[List[Hash]]): """Hash list class.""" root: List[Hash] def append(self, item: Hash) -> None: """Append an item to the list.""" self.root.append(item) def clear(self) -> None: """Clear the list.""" self.root.clear() def remove(self, item: Hash) -> None: """Remove an item from the list.""" self.root.remove(item) def __contains__(self, item: Hash) -> bool: """Check if an item is in the list.""" return item in self.root def __len__(self) -> int: """Get the length of the list.""" return len(self.root) def __iter__(self) -> Iterator[Hash]: # type: ignore """Iterate over the list.""" return iter(self.root) class AddressList(RootModel[List[Address]]): """Address list class.""" root: List[Address] def append(self, item: Address) -> None: """Append an item to the list.""" self.root.append(item) def clear(self) -> None: """Clear the list.""" self.root.clear() def remove(self, item: Address) -> None: """Remove an item from the list.""" self.root.remove(item) def __contains__(self, item: Address) -> bool: """Check if an item is in the list.""" return item in self.root def __len__(self) -> int: """Get the length of the list.""" return len(self.root) def __iter__(self) -> Iterator[Address]: # type: ignore """Iterate over the list.""" return iter(self.root) class PendingTxHashes: """ A class to manage the pending transaction hashes in a multi-process environment. It uses a lock file to ensure that only one process can access the pending hashes file at a time. """ pending_hashes_file: Path pending_hashes_lock: Path pending_tx_hashes: HashList | None lock: FileLock | None def __init__(self, temp_folder: Path): """Initialize the pending transaction hashes manager.""" self.pending_hashes_file = temp_folder / "pending_tx_hashes" self.pending_hashes_lock = temp_folder / "pending_tx_hashes.lock" self.pending_tx_hashes = None self.lock = None def __enter__(self) -> Self: """Lock the pending hashes file and load it.""" assert self.lock is None, "Lock already acquired" self.lock = FileLock(self.pending_hashes_lock, timeout=-1) self.lock.acquire() assert self.pending_tx_hashes is None, "Pending transaction hashes already loaded" if self.pending_hashes_file.exists(): with open(self.pending_hashes_file, "r") as f: self.pending_tx_hashes = HashList.model_validate_json(f.read()) else: self.pending_tx_hashes = HashList([]) return self def __exit__(self, exc_type: object, exc_value: object, traceback: object) -> None: """Flush the pending hashes to the file and release the lock.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None, "Pending transaction hashes not loaded" with open(self.pending_hashes_file, "w") as f: f.write(self.pending_tx_hashes.model_dump_json()) self.lock.release() self.lock = None self.pending_tx_hashes = None def append(self, tx_hash: Hash) -> None: """Add a transaction hash to the pending list.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None, "Pending transaction hashes not loaded" self.pending_tx_hashes.append(tx_hash) def clear(self) -> None: """Remove a transaction hash from the pending list.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None self.pending_tx_hashes.clear() def remove(self, tx_hash: Hash) -> None: """Remove a transaction hash from the pending list.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None, "Pending transaction hashes not loaded" self.pending_tx_hashes.remove(tx_hash) def __contains__(self, tx_hash: Hash) -> bool: """Check if a transaction hash is in the pending list.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None, "Pending transaction hashes not loaded" return tx_hash in self.pending_tx_hashes def __len__(self) -> int: """Get the number of pending transaction hashes.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None, "Pending transaction hashes not loaded" return len(self.pending_tx_hashes) def __iter__(self) -> Iterator[Hash]: """Iterate over the pending transaction hashes.""" assert self.lock is not None, "Lock not acquired" assert self.pending_tx_hashes is not None, "Pending transaction hashes not loaded" return iter(self.pending_tx_hashes) class ChainBuilderEthRPC(BaseEthRPC, namespace="eth"): """ Special type of Ethereum RPC client that also has access to the Engine API and automatically coordinates block generation based on the number of pending transactions or a block generation interval. """ fork: Fork engine_rpc: EngineRPC transactions_per_block: int get_payload_wait_time: float pending_tx_hashes: PendingTxHashes def __init__( self, *, rpc_endpoint: str, fork: Fork, engine_rpc: EngineRPC, transactions_per_block: int, session_temp_folder: Path, get_payload_wait_time: float, initial_forkchoice_update_retries: int = 5, transaction_wait_timeout: int = 60, ): """Initialize the Ethereum RPC client for the hive simulator.""" super().__init__( rpc_endpoint, transaction_wait_timeout=transaction_wait_timeout, ) self.fork = fork self.engine_rpc = engine_rpc self.transactions_per_block = transactions_per_block self.pending_tx_hashes = PendingTxHashes(session_temp_folder) self.get_payload_wait_time = get_payload_wait_time # Send initial forkchoice updated only if we are the first worker base_name = "eth_rpc_forkchoice_updated" base_file = session_temp_folder / base_name base_error_file = session_temp_folder / f"{base_name}.err" base_lock_file = session_temp_folder / f"{base_name}.lock" with FileLock(base_lock_file): if base_error_file.exists(): raise Exception("Error occurred during initial forkchoice_updated") if not base_file.exists(): base_error_file.touch() # Assume error # Get the head block hash head_block = self.get_block_by_number("latest") assert head_block is not None # Send initial forkchoice updated forkchoice_state = ForkchoiceState( head_block_hash=head_block["hash"], ) forkchoice_version = self.fork.engine_forkchoice_updated_version() assert forkchoice_version is not None, ( "Fork does not support engine forkchoice_updated" ) for _ in range(initial_forkchoice_update_retries): response = self.engine_rpc.forkchoice_updated( forkchoice_state, None, version=forkchoice_version, ) if response.payload_status.status == PayloadStatusEnum.VALID: break time.sleep(0.5) else: raise Exception("Initial forkchoice_updated was invalid") base_error_file.unlink() # Success base_file.touch() def generate_block(self: "ChainBuilderEthRPC") -> None: """Generate a block using the Engine API.""" # Get the head block hash head_block = self.get_block_by_number("latest") assert head_block is not None forkchoice_state = ForkchoiceState( head_block_hash=head_block["hash"], ) parent_beacon_block_root = ( Hash(0) if self.fork.header_beacon_root_required(block_number=0, timestamp=0) else None ) payload_attributes = PayloadAttributes( timestamp=HexNumber(head_block["timestamp"]) + 1, prev_randao=Hash(0), suggested_fee_recipient=Address(0), withdrawals=[] if self.fork.header_withdrawals_required() else None, parent_beacon_block_root=parent_beacon_block_root, target_blobs_per_block=( self.fork.target_blobs_per_block(block_number=0, timestamp=0) if self.fork.engine_payload_attribute_target_blobs_per_block( block_number=0, timestamp=0 ) else None ), max_blobs_per_block=( self.fork.max_blobs_per_block(block_number=0, timestamp=0) if self.fork.engine_payload_attribute_max_blobs_per_block( block_number=0, timestamp=0 ) else None ), ) forkchoice_updated_version = self.fork.engine_forkchoice_updated_version() assert forkchoice_updated_version is not None, ( "Fork does not support engine forkchoice_updated" ) response = self.engine_rpc.forkchoice_updated( forkchoice_state, payload_attributes, version=forkchoice_updated_version, ) assert response.payload_status.status == PayloadStatusEnum.VALID, "Payload was invalid" assert response.payload_id is not None, "payload_id was not returned by the client" time.sleep(self.get_payload_wait_time) get_payload_version = self.fork.engine_get_payload_version() assert get_payload_version is not None, "Fork does not support engine get_payload" new_payload = self.engine_rpc.get_payload( response.payload_id, version=get_payload_version, ) new_payload_args: List[Any] = [new_payload.execution_payload] if new_payload.blobs_bundle is not None: new_payload_args.append(new_payload.blobs_bundle.blob_versioned_hashes()) if parent_beacon_block_root is not None: new_payload_args.append(parent_beacon_block_root) if new_payload.execution_requests is not None: new_payload_args.append(new_payload.execution_requests) new_payload_version = self.fork.engine_new_payload_version() assert new_payload_version is not None, "Fork does not support engine new_payload" new_payload_response = self.engine_rpc.new_payload( *new_payload_args, version=new_payload_version ) assert new_payload_response.status == PayloadStatusEnum.VALID, "Payload was invalid" new_forkchoice_state = ForkchoiceState( head_block_hash=new_payload.execution_payload.block_hash, ) response = self.engine_rpc.forkchoice_updated( new_forkchoice_state, None, version=forkchoice_updated_version, ) assert response.payload_status.status == PayloadStatusEnum.VALID, "Payload was invalid" for tx in new_payload.execution_payload.transactions: tx_hash = Hash(keccak256(tx)) if tx_hash in self.pending_tx_hashes: self.pending_tx_hashes.remove(tx_hash) def send_transaction(self, transaction: Transaction) -> Hash: """`eth_sendRawTransaction`: Send a transaction to the client.""" returned_hash = super().send_transaction(transaction) with self.pending_tx_hashes: self.pending_tx_hashes.append(transaction.hash) if len(self.pending_tx_hashes) >= self.transactions_per_block: self.generate_block() return returned_hash def wait_for_transaction(self, transaction: Transaction) -> TransactionByHashResponse: """ Wait for a specific transaction to be included in a block. Waits for a specific transaction to be included in a block by polling `eth_getTransactionByHash` until it is confirmed or a timeout occurs. Args: transaction: The transaction to track. Returns: The transaction details after it is included in a block. """ return self.wait_for_transactions([transaction])[0] def wait_for_transactions( self, transactions: List[Transaction] ) -> List[TransactionByHashResponse]: """ Wait for all transactions in the provided list to be included in a block. Waits for all transactions in the provided list to be included in a block by polling `eth_getTransactionByHash` until they are confirmed or a timeout occurs. Args: transactions: A list of transactions to track. Returns: A list of transaction details after they are included in a block. Raises: Exception: If one or more transactions are not included in a block within the timeout period. """ tx_hashes = [tx.hash for tx in transactions] responses: List[TransactionByHashResponse] = [] pending_responses: Dict[Hash, TransactionByHashResponse] = {} start_time = time.time() pending_transactions_handler = PendingTransactionHandler(self) while True: tx_id = 0 pending_responses = {} while tx_id < len(tx_hashes): tx_hash = tx_hashes[tx_id] tx = self.get_transaction_by_hash(tx_hash) assert tx is not None, f"Transaction {tx_hash} not found" if tx.block_number is not None: responses.append(tx) tx_hashes.pop(tx_id) else: pending_responses[tx_hash] = tx tx_id += 1 if not tx_hashes: return responses pending_transactions_handler.handle() if (time.time() - start_time) > self.transaction_wait_timeout: break time.sleep(0.1) missing_txs_strings = [ f"{tx.hash} ({tx.model_dump_json()})" for tx in transactions if tx.hash in tx_hashes ] pending_tx_responses_string = "\n".join( [f"{tx_hash}: {tx.model_dump_json()}" for tx_hash, tx in pending_responses.items()] ) raise Exception( f"Transactions {', '.join(missing_txs_strings)} were not included in a block " f"within {self.transaction_wait_timeout} seconds:\n" f"{pending_tx_responses_string}" ) class PendingTransactionHandler: """ Manages block generation based on the number of pending transactions or a block generation interval. Attributes: block_generation_interval: The number of iterations after which a block is generated if no new transactions are added (default: 10). """ chain_builder_eth_rpc: ChainBuilderEthRPC block_generation_interval: int last_pending_tx_hashes_count: int | None = None i: int = 0 def __init__( self, chain_builder_eth_rpc: ChainBuilderEthRPC, block_generation_interval: int = 10 ): """Initialize the pending transaction handler.""" self.chain_builder_eth_rpc = chain_builder_eth_rpc self.block_generation_interval = block_generation_interval def handle(self) -> None: """ Handle pending transactions and generate blocks if necessary. If the number of pending transactions reaches the limit, a block is generated. If no new transactions have been added to the pending list and the block generation interval has been reached, a block is generated to avoid potential deadlock. """ with self.chain_builder_eth_rpc.pending_tx_hashes: if ( len(self.chain_builder_eth_rpc.pending_tx_hashes) >= self.chain_builder_eth_rpc.transactions_per_block ): self.chain_builder_eth_rpc.generate_block() else: if ( self.last_pending_tx_hashes_count is not None and len(self.chain_builder_eth_rpc.pending_tx_hashes) == self.last_pending_tx_hashes_count and self.i % self.block_generation_interval == 0 ): # If no new transactions have been added to the pending # list, generate a block to avoid potential deadlock. self.chain_builder_eth_rpc.generate_block() self.last_pending_tx_hashes_count = len(self.chain_builder_eth_rpc.pending_tx_hashes) self.i += 1 ================================================ FILE: src/pytest_plugins/execute/rpc/hive.py ================================================ """Pytest plugin to run the test-execute in hive-mode.""" import io import json from dataclasses import asdict, replace from pathlib import Path from random import randint from typing import Generator, Mapping, Tuple, cast import pytest from filelock import FileLock from hive.client import Client, ClientType from hive.simulation import Simulation from hive.testing import HiveTest, HiveTestResult, HiveTestSuite from ethereum_test_base_types import EmptyOmmersRoot, EmptyTrieRoot, to_json from ethereum_test_fixtures.blockchain import FixtureHeader from ethereum_test_forks import Fork from ethereum_test_rpc import EngineRPC, EthRPC from ethereum_test_tools import ( EOA, Account, Alloc, Environment, Hash, Withdrawal, ) from ethereum_test_types import ChainConfig, Requests from ...consume.simulators.helpers.ruleset import ruleset from .chain_builder_eth_rpc import ChainBuilderEthRPC def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" hive_rpc_group = parser.getgroup( "hive_rpc", "Arguments defining the hive RPC client properties for the test." ) hive_rpc_group.addoption( "--sender-key-initial-balance", action="store", dest="sender_key_initial_balance", type=int, default=10**26, help=( "Initial balance of each sender key. There is one sender key per worker process " "(`-n` option)." ), ) hive_rpc_group.addoption( "--tx-wait-timeout", action="store", dest="tx_wait_timeout", type=int, default=10, # Lowered from Remote RPC because of the consistent block production help="Maximum time in seconds to wait for a transaction to be included in a block", ) @pytest.hookimpl(trylast=True) def pytest_configure(config: pytest.Config) -> None: # noqa: D103 config.test_suite_scope = "session" # type: ignore config.engine_rpc_supported = True # type: ignore @pytest.fixture(scope="session") def seed_sender(session_temp_folder: Path) -> EOA: """Determine the seed sender account for the client's genesis.""" base_name = "seed_sender" base_file = session_temp_folder / base_name base_lock_file = session_temp_folder / f"{base_name}.lock" with FileLock(base_lock_file): if base_file.exists(): with base_file.open("r") as f: seed_sender_key = Hash(f.read()) seed_sender = EOA(key=seed_sender_key) else: seed_sender = EOA(key=randint(0, 2**256)) with base_file.open("w") as f: f.write(str(seed_sender.key)) return seed_sender @pytest.fixture(scope="session") def base_pre( request: pytest.FixtureRequest, seed_sender: EOA, worker_count: int, ) -> Alloc: """Pre-allocation for the client's genesis.""" sender_key_initial_balance = request.config.getoption("sender_key_initial_balance") return Alloc( {seed_sender: Account(balance=(worker_count * sender_key_initial_balance) + 10**18)} ) @pytest.fixture(scope="session") def base_pre_genesis( session_fork: Fork, base_pre: Alloc, ) -> Tuple[Alloc, FixtureHeader]: """Create a genesis block from the blockchain test definition.""" env = Environment().set_fork_requirements(session_fork) assert env.withdrawals is None or len(env.withdrawals) == 0, ( "withdrawals must be empty at genesis" ) assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(0), ( "parent_beacon_block_root must be empty at genesis" ) pre_alloc = Alloc.merge( Alloc.model_validate(session_fork.pre_allocation_blockchain()), base_pre, ) if empty_accounts := pre_alloc.empty_accounts(): raise Exception(f"Empty accounts in pre state: {empty_accounts}") state_root = pre_alloc.state_root() block_number = 0 timestamp = 1 genesis = FixtureHeader( parent_hash=0, ommers_hash=EmptyOmmersRoot, fee_recipient=0, state_root=state_root, transactions_trie=EmptyTrieRoot, receipts_root=EmptyTrieRoot, logs_bloom=0, difficulty=0x20000 if env.difficulty is None else env.difficulty, number=block_number, gas_limit=env.gas_limit, gas_used=0, timestamp=timestamp, extra_data=b"\x00", prev_randao=0, nonce=0, base_fee_per_gas=env.base_fee_per_gas, blob_gas_used=env.blob_gas_used, excess_blob_gas=env.excess_blob_gas, withdrawals_root=( Withdrawal.list_root(env.withdrawals) if env.withdrawals is not None else None ), parent_beacon_block_root=env.parent_beacon_block_root, requests_hash=Requests() if session_fork.header_requests_required(block_number=block_number, timestamp=timestamp) else None, ) return (pre_alloc, genesis) @pytest.fixture(scope="session") def client_genesis(base_pre_genesis: Tuple[Alloc, FixtureHeader]) -> dict: """ Convert the fixture's genesis block header and pre-state to a client genesis state. """ genesis = to_json(base_pre_genesis[1]) # NOTE: to_json() excludes None values alloc = to_json(base_pre_genesis[0]) # NOTE: nethermind requires account keys without '0x' prefix genesis["alloc"] = {k.replace("0x", ""): v for k, v in alloc.items()} return genesis @pytest.fixture(scope="session") def buffered_genesis(client_genesis: dict) -> io.BufferedReader: """ Create a buffered reader for the genesis block header of the current test fixture. """ genesis_json = json.dumps(client_genesis) genesis_bytes = genesis_json.encode("utf-8") return io.BufferedReader(cast(io.RawIOBase, io.BytesIO(genesis_bytes))) @pytest.fixture(scope="session") def client_files( buffered_genesis: io.BufferedReader, ) -> Mapping[str, io.BufferedReader]: """ Define the files that hive will start the client with. For this type of test, only the genesis is passed """ files = {} files["/genesis.json"] = buffered_genesis return files @pytest.fixture(scope="session") def environment(session_fork: Fork, chain_config: ChainConfig) -> dict: """ Define the environment that hive will start the client with using the fork rules specific for the simulator. """ assert session_fork in ruleset, f"fork '{session_fork}' missing in hive ruleset" return { "HIVE_CHAIN_ID": str(chain_config.chain_id), "HIVE_FORK_DAO_VOTE": "1", "HIVE_NODETYPE": "full", **{k: f"{v:d}" for k, v in ruleset[session_fork].items()}, } @pytest.fixture(scope="session") def test_suite_name() -> str: """The name of the hive test suite used in this simulator.""" return "eest/execute, hive mode" @pytest.fixture(scope="session") def test_suite_description() -> str: """The description of the hive test suite used in this simulator.""" return "Execute EEST tests using hive endpoint." @pytest.fixture(autouse=True, scope="session") def base_hive_test( request: pytest.FixtureRequest, test_suite: HiveTestSuite, session_temp_folder: Path ) -> Generator[HiveTest, None, None]: """ Test (base) used to deploy the main client to be used throughout all tests. """ base_name = "base_hive_test" base_file = session_temp_folder / base_name base_lock_file = session_temp_folder / f"{base_name}.lock" with FileLock(base_lock_file): if base_file.exists(): with open(base_file, "r") as f: test = HiveTest(**json.load(f)) else: test = test_suite.start_test( name="Base Hive Test", description=( "Base test used to deploy the main client to be used throughout all tests." ), ) with open(base_file, "w") as f: json.dump(asdict(test), f) users_file_name = f"{base_name}_users" users_file = session_temp_folder / users_file_name users_lock_file = session_temp_folder / f"{users_file_name}.lock" with FileLock(users_lock_file): if users_file.exists(): with open(users_file, "r") as f: users = json.load(f) else: users = 0 users += 1 with open(users_file, "w") as f: json.dump(users, f) yield test test_pass = True test_details = "All tests have completed" if request.session.testsfailed > 0: test_pass = False test_details = "One or more tests have failed" with FileLock(users_lock_file): with open(users_file, "r") as f: users = json.load(f) users -= 1 with open(users_file, "w") as f: json.dump(users, f) if users == 0: test.end(result=HiveTestResult(test_pass=test_pass, details=test_details)) base_file.unlink() users_file.unlink() @pytest.fixture(scope="session") def client_type(simulator: Simulation) -> ClientType: """Type of client to be used in the test.""" return simulator.client_types()[0] @pytest.fixture(autouse=True, scope="session") def client( base_hive_test: HiveTest, client_files: dict, environment: dict, client_type: ClientType, session_temp_folder: Path, ) -> Generator[Client, None, None]: """ Initialize the client with the appropriate files and environment variables. """ base_name = "hive_client" base_file = session_temp_folder / base_name base_error_file = session_temp_folder / f"{base_name}.err" base_lock_file = session_temp_folder / f"{base_name}.lock" client: Client | None = None with FileLock(base_lock_file): if not base_error_file.exists(): if base_file.exists(): with open(base_file, "r") as f: client = Client(**json.load(f)) else: base_error_file.touch() # Assume error client = base_hive_test.start_client( client_type=client_type, environment=environment, files=client_files ) if client is not None: base_error_file.unlink() # Success with open(base_file, "w") as f: json.dump( asdict(replace(client, config=None)), # type: ignore f, ) error_message = ( f"Unable to connect to the client container ({client_type.name}) via Hive during test " "setup. Check the client or Hive server logs for more information." ) assert client is not None, error_message users_file_name = f"{base_name}_users" users_file = session_temp_folder / users_file_name users_lock_file = session_temp_folder / f"{users_file_name}.lock" with FileLock(users_lock_file): if users_file.exists(): with open(users_file, "r") as f: users = json.load(f) else: users = 0 users += 1 with open(users_file, "w") as f: json.dump(users, f) yield client with FileLock(users_lock_file): with open(users_file, "r") as f: users = json.load(f) users -= 1 with open(users_file, "w") as f: json.dump(users, f) if users == 0: client.stop() base_file.unlink() users_file.unlink() @pytest.fixture(scope="session") def engine_rpc(client: Client) -> EngineRPC | None: """Return the engine RPC client.""" return EngineRPC(f"http://{client.ip}:8551") @pytest.fixture(autouse=True, scope="session") def eth_rpc( request: pytest.FixtureRequest, client: Client, engine_rpc: EngineRPC, session_fork: Fork, transactions_per_block: int, session_temp_folder: Path, ) -> EthRPC: """Initialize ethereum RPC client for the execution client under test.""" get_payload_wait_time = request.config.getoption("get_payload_wait_time") tx_wait_timeout = request.config.getoption("tx_wait_timeout") return ChainBuilderEthRPC( rpc_endpoint=f"http://{client.ip}:8545", fork=session_fork, engine_rpc=engine_rpc, transactions_per_block=transactions_per_block, session_temp_folder=session_temp_folder, get_payload_wait_time=get_payload_wait_time, transaction_wait_timeout=tx_wait_timeout, ) ================================================ FILE: src/pytest_plugins/execute/rpc/remote.py ================================================ """Pytest plugin to run the execute in remote-rpc-mode.""" from pathlib import Path import pytest from ethereum_test_forks import Fork from ethereum_test_rpc import EngineRPC, EthRPC from ethereum_test_types.chain_config_types import ChainConfigDefaults from ..pre_alloc import AddressStubs from .chain_builder_eth_rpc import ChainBuilderEthRPC def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" remote_rpc_group = parser.getgroup("remote_rpc", "Arguments defining remote RPC configuration") remote_rpc_group.addoption( "--rpc-endpoint", required=True, action="store", dest="rpc_endpoint", help="RPC endpoint to an execution client", ) remote_rpc_group.addoption( "--rpc-chain-id", action="store", dest="rpc_chain_id", required=False, type=int, default=None, help="DEPRECATED: ID of the chain where the tests will be executed. " "This flag is deprecated and will be removed in a future release." "Use --chain-id instead.", ) remote_rpc_group.addoption( "--tx-wait-timeout", action="store", dest="tx_wait_timeout", type=int, default=60, help="Maximum time in seconds to wait for a transaction to be included in a block", ) remote_rpc_group.addoption( "--address-stubs", action="store", dest="address_stubs", default=AddressStubs(root={}), type=AddressStubs.model_validate_json_or_file, help="The address stubs for contracts that have already been placed in the chain and to " "use for the test. Can be a JSON formatted string or a path to a YAML or JSON file.", ) engine_rpc_group = parser.getgroup("engine_rpc", "Arguments defining engine RPC configuration") engine_rpc_group.addoption( "--engine-endpoint", required=False, action="store", default=None, dest="engine_endpoint", help="Engine endpoint to an execution client, which implies that the execute command " "will be used to drive the chain. If not provided, it's assumed that the execution client" "is connected to a beacon node and the chain progresses automatically. If provided, the" "JWT secret must be provided as well.", ) engine_rpc_group.addoption( "--engine-jwt-secret", required=False, action="store", default=None, dest="engine_jwt_secret", help="JWT secret to be used to authenticate with the engine endpoint. Provided string " "will be converted to bytes using the UTF-8 encoding.", ) engine_rpc_group.addoption( "--engine-jwt-secret-file", required=False, action="store", default=None, dest="engine_jwt_secret_file", help="Path to a file containing the JWT secret to be used to authenticate with the engine" "endpoint. The file must contain only the JWT secret as a hex string.", ) def pytest_configure(config: pytest.Config) -> None: """Check if a chain ID configuration is provided.""" if config.getoption("rpc_chain_id") is None and config.getoption("chain_id") is None: pytest.exit("No chain ID configuration found. Please use --chain-id.") # Verify the chain ID configuration is consistent with the remote RPC # endpoint rpc_endpoint = config.getoption("rpc_endpoint") eth_rpc = EthRPC(rpc_endpoint) remote_chain_id = eth_rpc.chain_id() if remote_chain_id != ChainConfigDefaults.chain_id: pytest.exit( f"Chain ID obtained from the remote RPC endpoint ({remote_chain_id}) does not match " f"the configured chain ID ({ChainConfigDefaults.chain_id})." "Please check if the chain ID is correctly configured with the --chain-id flag." ) engine_endpoint = config.getoption("engine_endpoint") engine_rpc = None if engine_endpoint is not None: jwt_secret = config.getoption("engine_jwt_secret") jwt_secret_file = config.getoption("engine_jwt_secret_file") if jwt_secret is None and jwt_secret_file is None: pytest.exit( "JWT secret must be provided if engine endpoint is provided. " "Please check if the JWT secret is correctly configured with the " "--engine-jwt-secret or --engine-jwt-secret-file flag." ) elif jwt_secret_file is not None: with open(jwt_secret_file, "r") as f: jwt_secret = f.read().strip() if jwt_secret.startswith("0x"): jwt_secret = jwt_secret[2:] try: jwt_secret = bytes.fromhex(jwt_secret) except ValueError: pytest.exit( "JWT secret must be a hex string if provided as a file. " "Please check if the JWT secret is correctly configured with the " "--engine-jwt-secret-file flag." ) if isinstance(jwt_secret, str): jwt_secret = jwt_secret.encode("utf-8") assert isinstance(jwt_secret, bytes), ( f"JWT secret must be a bytes object, got {type(jwt_secret)}" ) engine_rpc = EngineRPC(engine_endpoint, jwt_secret=jwt_secret) # TODO: Perform a request to the engine endpoint to verify that the JWT # secret is valid. Potentially could be `engine_getClientVersionV1` but # need to implement this in rpc.py. config.engine_rpc = engine_rpc # type: ignore @pytest.fixture(scope="session") def engine_rpc(request: pytest.FixtureRequest) -> EngineRPC | None: """Execute remote command does not have access to the engine RPC.""" return request.config.engine_rpc # type: ignore @pytest.fixture(autouse=True, scope="session") def rpc_endpoint(request: pytest.FixtureRequest) -> str: """ Return remote RPC endpoint to be used to make requests to the execution client. """ return request.config.getoption("rpc_endpoint") @pytest.fixture(autouse=True, scope="session") def eth_rpc( request: pytest.FixtureRequest, rpc_endpoint: str, engine_rpc: EngineRPC | None, session_fork: Fork, transactions_per_block: int, session_temp_folder: Path, ) -> EthRPC: """Initialize ethereum RPC client for the execution client under test.""" tx_wait_timeout = request.config.getoption("tx_wait_timeout") if engine_rpc is None: return EthRPC(rpc_endpoint, transaction_wait_timeout=tx_wait_timeout) get_payload_wait_time = request.config.getoption("get_payload_wait_time") return ChainBuilderEthRPC( rpc_endpoint=rpc_endpoint, fork=session_fork, engine_rpc=engine_rpc, transactions_per_block=transactions_per_block, session_temp_folder=session_temp_folder, get_payload_wait_time=get_payload_wait_time, transaction_wait_timeout=tx_wait_timeout, ) ================================================ FILE: src/pytest_plugins/execute/rpc/remote_seed_sender.py ================================================ """Seed sender on a remote execution client.""" import pytest from ethereum_test_base_types import Hash, Number from ethereum_test_rpc import EthRPC from ethereum_test_types import EOA def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" remote_seed_sender_group = parser.getgroup( "remote_seed_sender", "Arguments for the remote seed sender", ) remote_seed_sender_group.addoption( "--rpc-seed-key", action="store", required=True, dest="rpc_seed_key", help=( "Seed key used to fund all sender keys. This account must have a balance of at least " "`sender_key_initial_balance` * `workers` + gas fees. It should also be " "exclusively used by this command because the nonce is only checked once and if " "it's externally increased, the seed transactions might fail." ), ) @pytest.fixture(scope="session") def seed_sender(request: pytest.FixtureRequest, eth_rpc: EthRPC) -> EOA: """Create seed sender account by checking its balance and nonce.""" rpc_seed_key = Hash(request.config.getoption("rpc_seed_key")) # check the nonce through the rpc client seed_sender = EOA(key=rpc_seed_key) seed_sender.nonce = Number(eth_rpc.get_transaction_count(seed_sender)) return seed_sender ================================================ FILE: src/pytest_plugins/execute/sender.py ================================================ """Sender mutex class that allows sending transactions one at a time.""" from pathlib import Path from typing import Generator, Iterator import pytest from filelock import FileLock from pytest_metadata.plugin import metadata_key from ethereum_test_base_types import Number, Wei from ethereum_test_rpc import EthRPC from ethereum_test_tools import EOA, Transaction def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" sender_group = parser.getgroup( "sender", "Arguments for the sender key fixtures", ) sender_group.addoption( "--seed-account-sweep-amount", action="store", dest="seed_account_sweep_amount", type=Wei, default=None, help="Amount of wei to sweep from the seed account to the sender account. " "Default=None (Entire balance)", ) sender_group.addoption( "--sender-funding-txs-gas-price", action="store", dest="sender_funding_transactions_gas_price", type=Wei, default=None, help=("Gas price set for the funding transactions of each worker's sender key."), ) sender_group.addoption( "--sender-fund-refund-gas-limit", action="store", dest="sender_fund_refund_gas_limit", type=Wei, default=21_000, help=("Gas limit set for the funding transactions of each worker's sender key."), ) @pytest.fixture(scope="session") def sender_funding_transactions_gas_price( request: pytest.FixtureRequest, default_gas_price: int ) -> int: """Get the gas price for the funding transactions.""" gas_price: int | None = request.config.option.sender_funding_transactions_gas_price if gas_price is None: gas_price = default_gas_price assert gas_price > 0, "Gas price must be greater than 0" return gas_price @pytest.fixture(scope="session") def sender_fund_refund_gas_limit(request: pytest.FixtureRequest) -> int: """Get the gas limit of the funding transactions.""" return request.config.option.sender_fund_refund_gas_limit @pytest.fixture(scope="session") def seed_account_sweep_amount(request: pytest.FixtureRequest) -> int | None: """Get the seed account sweep amount.""" return request.config.option.seed_account_sweep_amount @pytest.fixture(scope="session") def sender_key_initial_balance( seed_sender: EOA, eth_rpc: EthRPC, session_temp_folder: Path, worker_count: int, sender_funding_transactions_gas_price: int, sender_fund_refund_gas_limit: int, seed_account_sweep_amount: int | None, ) -> int: """ Calculate the initial balance of each sender key. The way to do this is to fetch the seed sender balance and divide it by the number of workers. This way we can ensure that each sender key has the same initial balance. We also only do this once per session, because if we try to fetch the balance again, it could be that another worker has already sent a transaction and the balance is different. It's not really possible to calculate the transaction costs of each test that each worker is going to run, so we can't really calculate the initial balance of each sender key based on that. """ base_name = "sender_key_initial_balance" base_file = session_temp_folder / base_name base_lock_file = session_temp_folder / f"{base_name}.lock" with FileLock(base_lock_file): if base_file.exists(): with base_file.open("r") as f: sender_key_initial_balance = int(f.read()) else: if seed_account_sweep_amount is None: seed_account_sweep_amount = eth_rpc.get_balance(seed_sender) seed_sender_balance_per_worker = seed_account_sweep_amount // worker_count assert seed_sender_balance_per_worker > 100, "Seed sender balance too low" # Subtract the cost of the transaction that is going to be sent to # the seed sender sender_key_initial_balance = seed_sender_balance_per_worker - ( sender_fund_refund_gas_limit * sender_funding_transactions_gas_price ) with base_file.open("w") as f: f.write(str(sender_key_initial_balance)) return sender_key_initial_balance @pytest.fixture(scope="session") def sender_key( request: pytest.FixtureRequest, seed_sender: EOA, sender_key_initial_balance: int, eoa_iterator: Iterator[EOA], eth_rpc: EthRPC, session_temp_folder: Path, sender_funding_transactions_gas_price: int, sender_fund_refund_gas_limit: int, ) -> Generator[EOA, None, None]: """ Get the sender keys for all tests. The seed sender is going to be shared among different processes, so we need to lock it before we produce each funding transaction. """ # For the seed sender we do need to keep track of the nonce because it is # shared among different processes, and there might not be a new block # produced between the transactions. seed_sender_nonce_file_name = "seed_sender_nonce" seed_sender_lock_file_name = f"{seed_sender_nonce_file_name}.lock" seed_sender_nonce_file = session_temp_folder / seed_sender_nonce_file_name seed_sender_lock_file = session_temp_folder / seed_sender_lock_file_name sender = next(eoa_iterator) # prepare funding transaction with FileLock(seed_sender_lock_file): if seed_sender_nonce_file.exists(): with seed_sender_nonce_file.open("r") as f: seed_sender.nonce = Number(f.read()) fund_tx = Transaction( sender=seed_sender, to=sender, gas_limit=sender_fund_refund_gas_limit, gas_price=sender_funding_transactions_gas_price, value=sender_key_initial_balance, ).with_signature_and_sender() eth_rpc.send_transaction(fund_tx) with seed_sender_nonce_file.open("w") as f: f.write(str(seed_sender.nonce)) eth_rpc.wait_for_transaction(fund_tx) yield sender # refund seed sender remaining_balance = eth_rpc.get_balance(sender) sender.nonce = Number(eth_rpc.get_transaction_count(sender)) used_balance = sender_key_initial_balance - remaining_balance request.config.stash[metadata_key]["Senders"][str(sender)] = ( f"Used balance={used_balance / 10**18:.18f}" ) refund_gas_limit = sender_fund_refund_gas_limit # double the gas price to ensure the transaction is included and overwrites # any other transaction that might have been sent by the sender. refund_gas_price = sender_funding_transactions_gas_price * 2 tx_cost = refund_gas_limit * refund_gas_price if (remaining_balance - 1) < tx_cost: return # Update the nonce of the sender in case one of the pre-alloc transactions # failed sender.nonce = Number(eth_rpc.get_transaction_count(sender)) refund_tx = Transaction( sender=sender, to=seed_sender, gas_limit=refund_gas_limit, gas_price=refund_gas_price, value=remaining_balance - tx_cost - 1, ).with_signature_and_sender() eth_rpc.send_wait_transaction(refund_tx) def pytest_sessionstart(session: pytest.Session) -> None: """Reset the sender info before the session starts.""" session.config.stash[metadata_key]["Senders"] = {} ================================================ FILE: src/pytest_plugins/execute/tests/__init__.py ================================================ """Unit tests for the execute pytest plugin.""" ================================================ FILE: src/pytest_plugins/execute/tests/test_pre_alloc.py ================================================ """Test the pre-allocation models used during test execution.""" from typing import Any import pytest from ethereum_test_base_types import Address from ..pre_alloc import AddressStubs @pytest.mark.parametrize( "input_value,expected", [ pytest.param( "{}", AddressStubs({}), id="empty_address_stubs_string", ), pytest.param( '{"some_address": "0x0000000000000000000000000000000000000001"}', AddressStubs({"some_address": Address("0x0000000000000000000000000000000000000001")}), id="address_stubs_string_with_some_address", ), ], ) def test_address_stubs(input_value: Any, expected: AddressStubs) -> None: """Test the address stubs.""" assert AddressStubs.model_validate_json_or_file(input_value) == expected @pytest.mark.parametrize( "file_name,file_contents,expected", [ pytest.param( "empty.json", "{}", AddressStubs({}), id="empty_address_stubs_json", ), pytest.param( "empty.yaml", "", AddressStubs({}), id="empty_address_stubs_yaml", ), pytest.param( "one_address.json", '{"DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cbb839cbe05303d7705fa"}', AddressStubs( { "DEPOSIT_CONTRACT_ADDRESS": Address( "0x00000000219ab540356cbb839cbe05303d7705fa" ), } ), id="single_address_json", ), pytest.param( "one_address.yaml", "DEPOSIT_CONTRACT_ADDRESS: 0x00000000219ab540356cbb839cbe05303d7705fa", AddressStubs( { "DEPOSIT_CONTRACT_ADDRESS": Address( "0x00000000219ab540356cbb839cbe05303d7705fa" ), } ), id="single_address_yaml", ), ], ) def test_address_stubs_from_files( pytester: pytest.Pytester, file_name: str, file_contents: str, expected: AddressStubs, ) -> None: """Test the address stubs.""" filename = pytester.path.joinpath(file_name) filename.write_text(file_contents) assert AddressStubs.model_validate_json_or_file(str(filename)) == expected ================================================ FILE: src/pytest_plugins/filler/__init__.py ================================================ """A pytest plugin to fill tests and generate JSON fixtures.""" from .fixture_output import FixtureOutput __all__ = [ "FixtureOutput", ] ================================================ FILE: src/pytest_plugins/filler/eip_checklist.py ================================================ """ Pytest plugin for generating EIP test completion checklists. This plugin collects checklist markers from tests and generates a filled checklist for each EIP based on the template at docs/writing_tests/checklist_templates/eip_testing_checklist_template.md """ import logging import re from dataclasses import dataclass, field from pathlib import Path from typing import ClassVar, Dict, List, Set, Tuple, Type import pytest from .gen_test_doc.page_props import EipChecklistPageProps logger = logging.getLogger("mkdocs") def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options for checklist generation.""" group = parser.getgroup("checklist", "EIP checklist generation options") group.addoption( "--checklist-output", action="store", dest="checklist_output", type=Path, default=Path("./checklists"), help="Directory to output the generated checklists", ) group.addoption( "--checklist-eip", action="append", dest="checklist_eips", type=int, default=[], help="Generate checklist only for specific EIP(s)", ) group.addoption( "--checklist-doc-gen", action="store_true", dest="checklist_doc_gen", default=False, help="Generate checklists for documentation (uses mkdocs_gen_files)", ) TITLE_LINE = "# EIP Execution Layer Testing Checklist Template" PERCENTAGE_LINE = "| TOTAL_CHECKLIST_ITEMS | COVERED_CHECKLIST_ITEMS | PERCENTAGE |" TEMPLATE_PATH = ( Path(__file__).parents[3] / "docs" / "writing_tests" / "checklist_templates" / "eip_testing_checklist_template.md" ) TEMPLATE_CONTENT = TEMPLATE_PATH.read_text() EXTERNAL_COVERAGE_FILE_NAME = "eip_checklist_external_coverage.txt" NOT_APPLICABLE_FILE_NAME = "eip_checklist_not_applicable.txt" WARNINGS_LINE = "" @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: # noqa: D103 config.pluginmanager.register(EIPChecklistCollector(), "eip-checklist-collector") @dataclass(kw_only=True) class EIPItem: """Represents an EIP checklist item.""" id: str line_number: int description: str tests: Set[str] not_applicable_reason: str = "" external_coverage_reason: str = "" @classmethod def from_checklist_line(cls, *, line: str, line_number: int) -> "EIPItem | None": """Create an EIP item from a checklist line.""" match = re.match(r"\|\s*`([^`]+)`\s*\|\s*([^|]+)\s*\|", line) if not match: return None return cls( id=match.group(1), line_number=line_number, description=match.group(2), tests=set(), ) @property def covered(self) -> bool: """Return True if the item is covered by at least one test.""" return len(self.tests) > 0 or self.external_coverage @property def external_coverage(self) -> bool: """Return True if the item is covered by an external test/procedure.""" return self.external_coverage_reason != "" @property def not_applicable(self) -> bool: """Return True if the item is not applicable.""" return self.not_applicable_reason != "" def __str__(self) -> str: """Return a string representation of the EIP item.""" status = " " tests = "" if self.external_coverage: status = "✅" tests = self.external_coverage_reason elif self.covered: if self.not_applicable: status = "❓" else: status = "✅" tests = ", ".join(sorted(self.tests)) elif self.not_applicable: status = "N/A" tests = self.not_applicable_reason return f"| `{self.id}` | {self.description} | {status} | {tests} |" TEMPLATE_ITEMS: Dict[str, EIPItem] = {} # Parse the template to extract checklist item IDs and descriptions for i, line in enumerate(TEMPLATE_CONTENT.splitlines()): # Match lines that contain checklist items with IDs in backticks if item := EIPItem.from_checklist_line(line=line, line_number=i + 1): TEMPLATE_ITEMS[item.id] = item def template_items() -> Dict[str, EIPItem]: """Return a copy of the template items.""" new_items = {} for test_id, item in TEMPLATE_ITEMS.items(): new_items[test_id] = EIPItem( id=item.id, line_number=item.line_number, description=item.description, tests=set(), ) return new_items ALL_IDS = set(TEMPLATE_ITEMS.keys()) def resolve_id(item_id: str) -> Set[str]: """Resolve an item ID to a set of checklist IDs.""" covered_ids = { checklist_id for checklist_id in ALL_IDS if checklist_id == item_id or checklist_id.startswith(item_id + "/") } return covered_ids ALL_CHECKLIST_WARNINGS: Dict[str, Type["ChecklistWarning"]] = {} @dataclass(kw_only=True) class ChecklistWarning: """Represents an EIP checklist warning.""" title: ClassVar[str] = "" details: List[str] def __init_subclass__(cls) -> None: """Register the checklist warning subclass.""" super().__init_subclass__() assert cls.title, "Title must be set" if cls.title in ALL_CHECKLIST_WARNINGS: raise ValueError(f"Duplicate checklist warning class: {cls}") ALL_CHECKLIST_WARNINGS[cls.title] = cls def lines(self) -> List[str]: """Return the lines of the checklist warning.""" return ["", f"### {self.title}", ""] + self.details + [""] @classmethod def from_items(cls, all_items: Dict[str, EIPItem]) -> "ChecklistWarning | None": """Generate a checklist warning from a list of items.""" raise NotImplementedError(f"from_items not implemented for {cls}") class ConflictingChecklistItemsWarning(ChecklistWarning): """Represents a conflicting checklist items warning.""" title: ClassVar[str] = "Conflicting Checklist Items" @classmethod def from_items(cls, all_items: Dict[str, EIPItem]) -> ChecklistWarning | None: """ Generate a conflicting checklist items warning from a list of items. """ conflicting_items = [ item for item in all_items.values() if item.not_applicable and item.covered ] if not conflicting_items: return None details = [ "The following checklist items were marked both as not applicable and covered:", "", "| ID | Description | Not Applicable | Tests |", "|---|---|---|---|", ] for item in conflicting_items: details.append( f"| {item.id} | {item.description} | " + f"{item.not_applicable_reason} | {', '.join(sorted(item.tests))} |" ) return cls(details=details) @dataclass(kw_only=True) class EIP: """Represents an EIP and its checklist.""" number: int items: Dict[str, EIPItem] = field(default_factory=template_items) path: Path | None = None def add_covered_test(self, checklist_id: str, node_id: str) -> None: """Add a covered test to the EIP.""" self.items[checklist_id].tests.add(node_id) @property def covered_items(self) -> int: """Return the number of covered items.""" return sum(1 for item in self.items.values() if item.covered and not item.not_applicable) return sum(1 for item in self.items.values() if item.covered and not item.not_applicable) @property def total_items(self) -> int: """Return the number of total items.""" return sum(1 for item in self.items.values() if not item.not_applicable) @property def percentage(self) -> float: """Return the percentage of covered items.""" return self.covered_items / self.total_items * 100 if self.total_items else 0 @property def completeness_emoji(self) -> str: """Return the completeness emoji.""" return "🟢" if self.percentage == 100 else "🟡" if self.percentage > 50 else "🔴" @property def warnings(self) -> List[ChecklistWarning]: """Return the detected inconsistencies in the checklist.""" warnings = [] for warning_cls in ALL_CHECKLIST_WARNINGS.values(): if warning := warning_cls.from_items(self.items): warnings.append(warning) return warnings def mark_not_applicable(self) -> None: """Read the not-applicable items from the EIP.""" if self.path is None: return not_applicable_path = self.path / NOT_APPLICABLE_FILE_NAME if not not_applicable_path.exists(): return with not_applicable_path.open() as f: for line in f: line = line.strip() if not line: continue assert "=" in line item_id, reason = line.split("=", 1) item_id = item_id.strip() reason = reason.strip() assert reason, f"Reason is empty for {line}" assert item_id, f"Item ID is empty for {line}" ids = resolve_id(item_id) if not ids: logger.warning( f"Item ID {item_id} not found in the checklist template, " f"for EIP {self.number}" ) continue for id_covered in ids: self.items[id_covered].not_applicable_reason = reason def mark_external_coverage(self) -> None: """Read the externally covered items from the EIP.""" if self.path is None: return external_coverage_path = self.path / EXTERNAL_COVERAGE_FILE_NAME if not external_coverage_path.exists(): return with external_coverage_path.open() as f: for line in f: line = line.strip() if not line: continue assert "=" in line item_id, reason = line.split("=", 1) item_id = item_id.strip() reason = reason.strip() assert item_id, f"Item ID is empty for {line}" assert reason, f"Reason is empty for {line}" ids = resolve_id(item_id) if not ids: logger.warning( f"Item ID {item_id} not found in the checklist template, " f"for EIP {self.number}" ) continue for id_covered in ids: self.items[id_covered].external_coverage_reason = reason def generate_filled_checklist_lines(self) -> List[str]: """Generate the filled checklist lines for a specific EIP.""" # Create a copy of the template content lines = TEMPLATE_CONTENT.splitlines() self.mark_not_applicable() self.mark_external_coverage() for checklist_item in self.items.values(): # Find the line with this item ID lines[checklist_item.line_number - 1] = str(checklist_item) lines[lines.index(PERCENTAGE_LINE)] = ( f"| {self.total_items} | {self.covered_items} | {self.completeness_emoji} " f"{self.percentage:.2f}% |" ) # Replace the title line with the EIP number lines[lines.index(TITLE_LINE)] = f"# EIP-{self.number} Test Checklist" # Last, add the warnings if there are any, this must be the last thing # we do to avoid shifting the lines below the percentage line if self.warnings: warnings_line_idx = lines.index(WARNINGS_LINE) warnings_lines = ["", "## ⚠️ Checklist Warnings ⚠️", ""] for warning in self.warnings: warnings_lines.extend(warning.lines()) lines[warnings_line_idx:warnings_line_idx] = warnings_lines return lines def generate_filled_checklist(self, output_dir: Path) -> Path: """Generate a filled checklist for a specific EIP.""" lines = self.generate_filled_checklist_lines() output_dir = output_dir / f"eip{self.number}_checklist.md" # Write the filled checklist output_dir.parent.mkdir(exist_ok=True, parents=True) output_dir.write_text("\n".join(lines)) return output_dir class EIPChecklistCollector: """Collects and manages EIP checklist items from test markers.""" def __init__(self: "EIPChecklistCollector") -> None: """Initialize the EIP checklist collector.""" self.eips: Dict[int, EIP] = {} def extract_eip_from_path(self, test_path: Path) -> Tuple[int | None, Path | None]: """Extract EIP number from test file path.""" # Look for patterns like eip1234_ or eip1234/ in the path for part_idx, part in enumerate(test_path.parts): match = re.match(r"eip(\d+)", part) if match: eip = int(match.group(1)) eip_path = test_path.parents[len(test_path.parents) - part_idx - 2] return eip, eip_path return None, None def get_eip_from_item(self, item: pytest.Item) -> EIP | None: """Get the EIP for a test item.""" test_path = Path(item.location[0]) for part_idx, part in enumerate(test_path.parts): match = re.match(r"eip(\d+)", part) if match: eip = int(match.group(1)) if eip not in self.eips: self.eips[eip] = EIP( number=eip, path=test_path.parents[len(test_path.parents) - part_idx - 2], ) else: if self.eips[eip].path is None: self.eips[eip].path = test_path.parents[ len(test_path.parents) - part_idx - 2 ] return self.eips[eip] return None def get_eip(self, eip: int) -> EIP: """Get the EIP for a given EIP number.""" if eip not in self.eips: self.eips[eip] = EIP(number=eip, path=None) return self.eips[eip] def collect_from_item(self, item: pytest.Item, primary_eip: EIP | None) -> None: """Collect checklist markers from a test item.""" for marker in item.iter_markers("eip_checklist"): if not marker.args: pytest.fail( f"eip_checklist marker on {item.nodeid} must have at least one argument " "(item_id)" ) additional_eips = marker.kwargs.get("eip", []) if not isinstance(additional_eips, list): additional_eips = [additional_eips] eips: List[EIP] = [primary_eip] if primary_eip else [] if additional_eips: if any(not isinstance(eip, int) for eip in additional_eips): pytest.fail( "EIP numbers must be integers. Found non-integer EIPs in " f"{item.nodeid}: {additional_eips}" ) eips += [self.get_eip(eip) for eip in additional_eips] for item_id in marker.args: item_id = str(item_id) covered_ids = resolve_id(item_id.strip()) if not covered_ids: logger.warning( f"Item ID {item_id} not found in the checklist template, " f"for test {item.nodeid}" ) continue for id_covered in covered_ids: for eip in eips: eip.add_covered_test(id_covered, item.nodeid) @pytest.hookimpl(tryfirst=True) def pytest_runtestloop(self, session: pytest.Session) -> bool: """Skip test execution, only generate checklists.""" session.testscollected = 0 return True def pytest_collection_modifyitems( self, config: pytest.Config, items: List[pytest.Item] ) -> None: """Collect checklist markers during test collection.""" for item in items: eip = self.get_eip_from_item(item) if item.get_closest_marker("derived_test") or item.get_closest_marker("skip"): continue self.collect_from_item(item, eip) # Check which mode we are in checklist_doc_gen = config.getoption("checklist_doc_gen", False) checklist_output = config.getoption("checklist_output", Path("checklists")) checklist_eips = config.getoption("checklist_eips", []) checklist_props = {} # Generate a checklist for each EIP for eip in self.eips.values(): # Skip if specific EIPs were requested and this isn't one of them if checklist_eips and eip.number not in checklist_eips: continue if checklist_doc_gen: assert eip.path is not None checklist_path = eip.path / "checklist.md" checklist_props[checklist_path] = EipChecklistPageProps( title=f"EIP-{eip.number} Test Checklist", source_code_url="", target_or_valid_fork="mainnet", path=checklist_path, pytest_node_id="", package_name="checklist", eip=eip.number, lines=eip.generate_filled_checklist_lines(), ) else: checklist_path = eip.generate_filled_checklist(checklist_output) print(f"\nGenerated EIP-{eip.number} checklist: {checklist_path}") if checklist_doc_gen: config.checklist_props = checklist_props # type: ignore ================================================ FILE: src/pytest_plugins/filler/filler.py ================================================ """ Top-level pytest configuration file providing: - Command-line options, - Test-fixtures that can be used by all test cases, and that modifies pytest hooks in order to fill test specs for all tests and writes the generated fixtures to file. """ import configparser import datetime import json import os import warnings from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, Generator, List, Self, Set, Type import pytest import xdist from _pytest.compat import NotSetType from _pytest.terminal import TerminalReporter from filelock import FileLock from pytest_metadata.plugin import metadata_key from cli.gen_index import generate_fixtures_index from ethereum_clis import TransitionTool from ethereum_clis.clis.geth import FixtureConsumerTool from ethereum_test_base_types import Account, Address, Alloc, ReferenceSpec from ethereum_test_fixtures import ( BaseFixture, FixtureCollector, FixtureConsumer, FixtureFillingPhase, LabeledFixtureFormat, PreAllocGroup, PreAllocGroups, TestInfo, ) from ethereum_test_forks import Fork, get_transition_fork_predecessor, get_transition_forks from ethereum_test_specs import BaseTest from ethereum_test_specs.base import OpMode from ethereum_test_tools.utility.versioning import ( generate_github_url, get_current_commit_hash_or_tag, ) from ethereum_test_types import EnvironmentDefaults from ..shared.execute_fill import ALL_FIXTURE_PARAMETERS from ..shared.helpers import ( get_spec_format_for_item, is_help_or_collectonly_mode, labeled_format_parameter_set, ) from ..spec_version_checker.spec_version_checker import get_ref_spec_from_module from .fixture_output import FixtureOutput def print_migration_warning(terminalreporter: Any = None) -> None: """Print migration warning about repository merge.""" lines = [ "", "=" * 80, "⚠️ IMPORTANT: Repository Migration in Progress - 'The Weld' ⚠️", "=" * 80, "", "This repository is being merged into ethereum/execution-specs (EELS) during the", "week of October 20-24, 2025.", "", "📅 Timeline:", " • Week of Oct 13-17: Closing PRs, porting issues to EELS", " • Week of Oct 20-24: Migration week - fixing CI and fixture building", " • Oct 24 (ETA): Weld finalized - all development moves to EELS", "", "👉 What This Means:", " • Test Contributors: After Oct 24, reopen draft PRs in ethereum/execution-specs", " • All future test development happens in EELS after completion", " • Fixture releases continue as usual during transition", "", "For details: https://steel.ethereum.foundation/blog/2025-09-11_weld-announcement/", "=" * 80, "", ] if terminalreporter: for line in lines: if "⚠️" in line or "IMPORTANT" in line: terminalreporter.write_line(line, bold=True, yellow=True) elif line.startswith("="): terminalreporter.write_line(line, yellow=True) else: terminalreporter.write_line(line) else: for line in lines: print(line) @dataclass(kw_only=True) class PhaseManager: """ Manages the execution phase for fixture generation. The filler plugin supports two-phase execution for pre-allocation group generation: - Phase 1: Generate pre-allocation groups (pytest run with --generate-pre-alloc-groups). - Phase 2: Fill fixtures using pre-allocation groups (pytest run with --use-pre-alloc-groups). Note: These are separate pytest runs orchestrated by the CLI wrapper. Each run gets a fresh PhaseManager instance (no persistence between phases). """ current_phase: FixtureFillingPhase previous_phases: Set[FixtureFillingPhase] = field(default_factory=set) @classmethod def from_config(cls, config: pytest.Config) -> "Self": """ Create a PhaseManager from pytest configuration. Flag logic: - use_pre_alloc_groups: We're in phase 2 (FILL) after phase 1 (PRE_ALLOC_GENERATION). - generate_pre_alloc_groups or generate_all_formats: We're in phase 1 (PRE_ALLOC_GENERATION). - Otherwise: Normal single-phase filling (FILL). Note: generate_all_formats triggers PRE_ALLOC_GENERATION because the CLI passes it to phase 1 to ensure all formats are considered for grouping. """ generate_pre_alloc = config.getoption("generate_pre_alloc_groups", False) use_pre_alloc = config.getoption("use_pre_alloc_groups", False) generate_all = config.getoption("generate_all_formats", False) if use_pre_alloc: # Phase 2: Using pre-generated groups return cls( current_phase=FixtureFillingPhase.FILL, previous_phases={FixtureFillingPhase.PRE_ALLOC_GENERATION}, ) elif generate_pre_alloc or generate_all: # Phase 1: Generating pre-allocation groups return cls(current_phase=FixtureFillingPhase.PRE_ALLOC_GENERATION) else: # Normal single-phase filling return cls(current_phase=FixtureFillingPhase.FILL) @property def is_pre_alloc_generation(self) -> bool: """Check if we're in the pre-allocation generation phase.""" return self.current_phase == FixtureFillingPhase.PRE_ALLOC_GENERATION @property def is_fill_after_pre_alloc(self) -> bool: """Check if we're filling after pre-allocation generation.""" return ( self.current_phase == FixtureFillingPhase.FILL and FixtureFillingPhase.PRE_ALLOC_GENERATION in self.previous_phases ) @property def is_single_phase_fill(self) -> bool: """Check if we're in single-phase fill mode (no pre-allocation).""" return ( self.current_phase == FixtureFillingPhase.FILL and FixtureFillingPhase.PRE_ALLOC_GENERATION not in self.previous_phases ) @dataclass(kw_only=True) class FormatSelector: """ Handles fixture format selection based on the current phase and format capabilities. This class encapsulates the complex logic for determining which fixture formats should be generated in each phase of the two-phase execution model. """ phase_manager: PhaseManager generate_all_formats: bool def should_generate(self, fixture_format: Type[BaseFixture] | LabeledFixtureFormat) -> bool: """ Determine if a fixture format should be generated in the current phase. Args: fixture_format: The fixture format to check (may be wrapped in LabeledFixtureFormat). Returns: True if the format should be generated in the current phase. """ format_phases = fixture_format.format_phases if self.phase_manager.is_pre_alloc_generation: return self._should_generate_pre_alloc(format_phases) else: # FILL phase return self._should_generate_fill(format_phases) def _should_generate_pre_alloc(self, format_phases: Set[FixtureFillingPhase]) -> bool: """ Determine if format should be generated during pre-alloc generation phase. """ # Only generate formats that need pre-allocation groups return FixtureFillingPhase.PRE_ALLOC_GENERATION in format_phases def _should_generate_fill(self, format_phases: Set[FixtureFillingPhase]) -> bool: """Determine if format should be generated during fill phase.""" if FixtureFillingPhase.PRE_ALLOC_GENERATION in self.phase_manager.previous_phases: # Phase 2: After pre-alloc generation if self.generate_all_formats: # Generate all formats, including those that don't need pre- # alloc return True else: # Only generate formats that needed pre-alloc groups return FixtureFillingPhase.PRE_ALLOC_GENERATION in format_phases else: # Single phase: Only generate fill-only formats return format_phases == {FixtureFillingPhase.FILL} @dataclass(kw_only=True) class FillingSession: """ Manages all state for a single pytest fill session. This class serves as the single source of truth for all filler state management, including phase management, format selection, and pre-allocation groups. Important: Each pytest run gets a fresh FillingSession instance. There is no persistence between phase 1 (generate pre-alloc) and phase 2 (use pre-alloc) except through file I/O. """ fixture_output: FixtureOutput phase_manager: PhaseManager format_selector: FormatSelector pre_alloc_groups: PreAllocGroups | None @classmethod def from_config(cls, config: pytest.Config) -> "Self": """ Initialize a filling session from pytest configuration. Args: config: The pytest configuration object. """ phase_manager = PhaseManager.from_config(config) instance = cls( fixture_output=FixtureOutput.from_config(config), phase_manager=phase_manager, format_selector=FormatSelector( phase_manager=phase_manager, generate_all_formats=config.getoption("generate_all_formats", False), ), pre_alloc_groups=None, ) # Initialize pre-alloc groups based on phase instance._initialize_pre_alloc_groups() return instance def _initialize_pre_alloc_groups(self) -> None: """Initialize pre-allocation groups based on the current phase.""" if self.phase_manager.is_pre_alloc_generation: # Phase 1: Create empty container for collecting groups self.pre_alloc_groups = PreAllocGroups(root={}) elif self.phase_manager.is_fill_after_pre_alloc: # Phase 2: Load pre-alloc groups from disk self._load_pre_alloc_groups_from_folder() def _load_pre_alloc_groups_from_folder(self) -> None: """Load pre-allocation groups from the output folder.""" pre_alloc_folder = self.fixture_output.pre_alloc_groups_folder_path if pre_alloc_folder.exists(): self.pre_alloc_groups = PreAllocGroups.from_folder(pre_alloc_folder, lazy_load=True) else: raise FileNotFoundError( f"Pre-allocation groups folder not found: {pre_alloc_folder}. " "Run phase 1 with --generate-pre-alloc-groups first." ) def should_generate_format( self, fixture_format: Type[BaseFixture] | LabeledFixtureFormat ) -> bool: """ Determine if a fixture format should be generated in the current session. Args: fixture_format: The fixture format to check. Returns: True if the format should be generated. """ return self.format_selector.should_generate(fixture_format) def get_pre_alloc_group(self, hash_key: str) -> PreAllocGroup: """ Get a pre-allocation group by hash. Args: hash_key: The hash of the pre-alloc group. Returns: The pre-allocation group. Raises: ValueError: If pre-alloc groups not initialized or hash not found. """ if self.pre_alloc_groups is None: raise ValueError("Pre-allocation groups not initialized") if hash_key not in self.pre_alloc_groups: pre_alloc_path = self.fixture_output.pre_alloc_groups_folder_path / hash_key raise ValueError( f"Pre-allocation hash {hash_key} not found in pre-allocation groups. " f"Please check the pre-allocation groups file at: {pre_alloc_path}. " "Make sure phase 1 (--generate-pre-alloc-groups) was run before phase 2." ) return self.pre_alloc_groups[hash_key] def update_pre_alloc_group(self, hash_key: str, group: PreAllocGroup) -> None: """ Update or add a pre-allocation group. Args: hash_key: The hash of the pre-alloc group. group: The pre-allocation group. Raises: ValueError: If not in pre-alloc generation phase. """ if not self.phase_manager.is_pre_alloc_generation: raise ValueError("Can only update pre-alloc groups in generation phase") if self.pre_alloc_groups is None: self.pre_alloc_groups = PreAllocGroups(root={}) self.pre_alloc_groups[hash_key] = group def save_pre_alloc_groups(self) -> None: """Save pre-allocation groups to disk.""" if self.pre_alloc_groups is None: return pre_alloc_folder = self.fixture_output.pre_alloc_groups_folder_path pre_alloc_folder.mkdir(parents=True, exist_ok=True) self.pre_alloc_groups.to_folder(pre_alloc_folder) def aggregate_pre_alloc_groups(self, worker_groups: PreAllocGroups) -> None: """ Aggregate pre-alloc groups from a worker process (xdist support). Args: worker_groups: Pre-alloc groups from a worker process. """ if self.pre_alloc_groups is None: self.pre_alloc_groups = PreAllocGroups(root={}) for hash_key, group in worker_groups.items(): if hash_key in self.pre_alloc_groups: # Merge if exists (should not happen in practice) existing = self.pre_alloc_groups[hash_key] if existing.pre != group.pre: raise ValueError( f"Conflicting pre-alloc groups for hash {hash_key}: " f"existing={self.pre_alloc_groups[hash_key].pre}, new={group.pre}" ) else: self.pre_alloc_groups[hash_key] = group def calculate_post_state_diff(post_state: Alloc, genesis_state: Alloc) -> Alloc: """ Calculate the state difference between post_state and genesis_state. This function enables significant space savings in Engine X fixtures by storing only the accounts that changed during test execution, rather than the full post-state which may contain thousands of unchanged accounts. Returns an Alloc containing only the accounts that: - Changed between genesis and post state (balance, nonce, storage, code) - Were created during test execution (new accounts) - Were deleted during test execution (represented as None) Args: post_state: Final state after test execution genesis_state: Genesis pre-allocation state Returns: Alloc containing only the state differences for efficient storage """ diff: Dict[Address, Account | None] = {} # Find all addresses that exist in either state all_addresses = set(post_state.root.keys()) | set(genesis_state.root.keys()) for address in all_addresses: genesis_account = genesis_state.root.get(address) post_account = post_state.root.get(address) # Account was deleted (exists in genesis but not in post) if genesis_account is not None and post_account is None: diff[address] = None # Account was created (doesn't exist in genesis but exists in post) elif genesis_account is None and post_account is not None: diff[address] = post_account # Account was modified (exists in both but different) elif genesis_account != post_account: diff[address] = post_account # Account unchanged - don't include in diff return Alloc(diff) def default_output_directory() -> str: """ Directory (default) to store the generated test fixtures. Defined as a function to allow for easier testing. """ return "./fixtures" def default_html_report_file_path() -> str: """ File path (default) to store the generated HTML test report. Defined as a function to allow for easier testing. """ return ".meta/report_fill.html" def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" evm_group = parser.getgroup("evm", "Arguments defining evm executable behavior") evm_group.addoption( "--evm-bin", action="store", dest="evm_bin", type=Path, default=None, help=( "Path to an evm executable (or name of an executable in the PATH) that provides `t8n`." " Default: `ethereum-spec-evm-resolver`." ), ) evm_group.addoption( "--t8n-server-url", action="store", dest="t8n_server_url", type=str, default=None, help=( "[INTERNAL USE ONLY] URL of the t8n server to use. Used by framework tests/ci; not " "intended for regular CLI use." ), ) evm_group.addoption( "--traces", action="store_true", dest="evm_collect_traces", default=None, help="Collect traces of the execution information from the transition tool.", ) evm_group.addoption( "--verify-fixtures", action="store_true", dest="verify_fixtures", default=False, help=( "Verify generated fixture JSON files using geth's evm blocktest command. " "By default, the same evm binary as for the t8n tool is used. A different (geth) evm " "binary may be specified via --verify-fixtures-bin, this must be specified if filling " "with a non-geth t8n tool that does not support blocktest." ), ) evm_group.addoption( "--verify-fixtures-bin", action="store", dest="verify_fixtures_bin", type=Path, default=None, help=( "Path to an evm executable that provides the `blocktest` command. " "Default: The first (geth) 'evm' entry in PATH." ), ) test_group = parser.getgroup("tests", "Arguments defining filler location and output") test_group.addoption( "--filler-path", action="store", dest="filler_path", default="./tests/", type=Path, help="Path to filler directives", ) test_group.addoption( "--output", action="store", dest="output", type=Path, default=Path(default_output_directory()), help=( "Directory path to store the generated test fixtures. Must be empty if it exists. " "If the specified path ends in '.tar.gz', then the specified tarball is additionally " "created (the fixtures are still written to the specified path without the '.tar.gz' " f"suffix). Tarball output automatically enables --generate-all-formats. " f"Can be deleted. Default: '{default_output_directory()}'." ), ) test_group.addoption( "--clean", action="store_true", dest="clean", default=False, help="Clean (remove) the output directory before filling fixtures.", ) test_group.addoption( "--single-fixture-per-file", action="store_true", dest="single_fixture_per_file", default=False, help=( "Don't group fixtures in JSON files by test function; write each fixture to its own " "file. This can be used to increase the granularity of --verify-fixtures." ), ) test_group.addoption( "--no-html", action="store_true", dest="disable_html", default=False, help=( "Don't generate an HTML test report (in the output directory). " "The --html flag can be used to specify a different path." ), ) test_group.addoption( "--build-name", action="store", dest="build_name", default=None, type=str, help="Specify a build name for the fixtures.ini file, e.g., 'stable'.", ) test_group.addoption( "--skip-index", action="store_false", dest="generate_index", default=True, help="Skip generating an index file for all produced fixtures.", ) test_group.addoption( "--block-gas-limit", action="store", dest="block_gas_limit", default=EnvironmentDefaults.gas_limit, type=int, help=( "Default gas limit used ceiling used for blocks and tests that attempt to " f"consume an entire block's gas. (Default: {EnvironmentDefaults.gas_limit})" ), ) test_group.addoption( "--generate-pre-alloc-groups", action="store_true", dest="generate_pre_alloc_groups", default=False, help="Generate pre-allocation groups (phase 1 only).", ) test_group.addoption( "--use-pre-alloc-groups", action="store_true", dest="use_pre_alloc_groups", default=False, help="Fill tests using existing pre-allocation groups (phase 2 only).", ) test_group.addoption( "--generate-all-formats", action="store_true", dest="generate_all_formats", default=False, help=( "Generate all fixture formats including BlockchainEngineXFixture. " "This enables two-phase execution: Phase 1 generates pre-allocation groups, " "phase 2 generates all supported fixture formats." ), ) optimize_gas_group = parser.getgroup( "optimize gas", "Arguments defining test gas optimization behavior.", ) optimize_gas_group.addoption( "--optimize-gas", action="store_true", dest="optimize_gas", default=False, help=( "Attempt to optimize the gas used in every transaction for the filled tests, " "then print the minimum amount of gas at which the test still produces a correct " "post state and the exact same trace." ), ) optimize_gas_group.addoption( "--optimize-gas-output", action="store", dest="optimize_gas_output", default=Path("optimize-gas-output.json"), type=Path, help=( "Path to the JSON file that is output to the gas optimization. " "Requires `--optimize-gas`." ), ) optimize_gas_group.addoption( "--optimize-gas-max-gas-limit", action="store", dest="optimize_gas_max_gas_limit", default=None, type=int, help=( "Maximum gas limit for gas optimization, if reached the search will stop and " "fail for that given test. Requires `--optimize-gas`." ), ) optimize_gas_group.addoption( "--optimize-gas-post-processing", action="store_true", dest="optimize_gas_post_processing", default=False, help=( "Post process the traces during gas optimization in order to Account for " "opcodes that put the current gas in the stack, in order to remove " "remaining-gas from the comparison." ), ) debug_group = parser.getgroup("debug", "Arguments defining debug behavior") debug_group.addoption( "--evm-dump-dir", "--t8n-dump-dir", action="store", dest="base_dump_dir", default=None, help=( "Path to dump the transition tool debug output. " "Only creates debug output when explicitly specified." ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Pytest hook called after command line options have been parsed and before test collection begins. Couple of notes: 1. Register the plugin's custom markers and process command-line options. Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers 2. `@pytest.hookimpl(tryfirst=True)` is applied to ensure that this hook is called before the pytest-html plugin's pytest_configure to ensure that it uses the modified `htmlpath` option. """ if not is_help_or_collectonly_mode(config): print_migration_warning() # Register custom markers # Modify the block gas limit if specified. if config.getoption("block_gas_limit"): EnvironmentDefaults.gas_limit = config.getoption("block_gas_limit") # Initialize fixture output configuration config.fixture_output = FixtureOutput.from_config( # type: ignore[attr-defined] config ) # Initialize filling session config.filling_session = FillingSession.from_config( # type: ignore[attr-defined] config ) if is_help_or_collectonly_mode(config): return try: # Check whether the directory exists and is not empty; if --clean is # set, it will delete it config.fixture_output.create_directories( # type: ignore[attr-defined] is_master=not hasattr(config, "workerinput") ) except ValueError as e: pytest.exit(str(e), returncode=pytest.ExitCode.USAGE_ERROR) if ( not config.getoption("disable_html") and config.getoption("htmlpath") is None and config.filling_session.phase_manager.current_phase # type: ignore[attr-defined] != FixtureFillingPhase.PRE_ALLOC_GENERATION ): config.option.htmlpath = ( config.fixture_output.directory # type: ignore[attr-defined] / default_html_report_file_path() ) config.gas_optimized_tests = {} # type: ignore[attr-defined] if config.getoption("optimize_gas", False): if config.getoption("optimize_gas_post_processing"): config.op_mode = ( # type: ignore[attr-defined] OpMode.OPTIMIZE_GAS_POST_PROCESSING ) else: config.op_mode = OpMode.OPTIMIZE_GAS # type: ignore[attr-defined] config.collect_traces = ( # type: ignore[attr-defined] config.getoption("evm_collect_traces") or config.getoption("optimize_gas", False) ) # Instantiate the transition tool here to check that the binary path/trace # option is valid. This ensures we only raise an error once, if # appropriate, instead of for every test. evm_bin = config.getoption("evm_bin") trace = config.getoption("evm_collect_traces") t8n_server_url = config.getoption("t8n_server_url") kwargs = { "trace": trace, } if t8n_server_url is not None: kwargs["server_url"] = t8n_server_url if evm_bin is None: assert TransitionTool.default_tool is not None, "No default transition tool found" t8n = TransitionTool.default_tool(**kwargs) else: t8n = TransitionTool.from_binary_path(binary_path=evm_bin, **kwargs) if ( isinstance(config.getoption("numprocesses"), int) and config.getoption("numprocesses") > 0 and not t8n.supports_xdist ): pytest.exit( f"The {t8n.__class__.__name__} t8n tool does not work well with the xdist plugin;" "use -n=0.", returncode=pytest.ExitCode.USAGE_ERROR, ) config.t8n = t8n # type: ignore[attr-defined] if "Tools" not in config.stash[metadata_key]: config.stash[metadata_key]["Tools"] = { "t8n": t8n.version(), } else: config.stash[metadata_key]["Tools"]["t8n"] = t8n.version() args = ["fill"] + [str(arg) for arg in config.invocation_params.args] for i in range(len(args)): if " " in args[i]: args[i] = f'"{args[i]}"' command_line_args = " ".join(args) config.stash[metadata_key]["Command-line args"] = f"{command_line_args}" @pytest.hookimpl(trylast=True) def pytest_report_header(config: pytest.Config) -> List[str]: """Add lines to pytest's console output header.""" if is_help_or_collectonly_mode(config): return [] t8n_version = config.stash[metadata_key]["Tools"]["t8n"] return [(f"{t8n_version}")] @pytest.hookimpl(tryfirst=True) def pytest_report_teststatus(report: Any, config: pytest.Config) -> tuple[str, str, str] | None: """ Modify test results in pytest's terminal output. We use this: 1. To disable test session progress report if we're writing the JSON fixtures to stdout to be read by a consume command on stdin. I.e., don't write this type of output to the console: ```text ...x... ``` """ if config.fixture_output.is_stdout: # type: ignore[attr-defined] return report.outcome, "", report.outcome.upper() return None @pytest.hookimpl(hookwrapper=True, trylast=True) def pytest_terminal_summary( terminalreporter: TerminalReporter, exitstatus: int, config: pytest.Config, ) -> Generator[None, None, None]: """ Modify pytest's terminal summary to emphasize that no tests were ran. Emphasize that fixtures have only been filled; they must now be executed to actually run the tests. """ del exitstatus yield if config.fixture_output.is_stdout or hasattr(config, "workerinput"): # type: ignore[attr-defined] return print_migration_warning(terminalreporter) stats = terminalreporter.stats if "passed" in stats and stats["passed"]: # Custom message for Phase 1 (pre-allocation group generation) session_instance: FillingSession = config.filling_session # type: ignore[attr-defined] if session_instance.phase_manager.is_pre_alloc_generation: # Generate summary stats pre_alloc_groups: PreAllocGroups if config.pluginmanager.hasplugin("xdist"): # Load pre-allocation groups from disk pre_alloc_groups = PreAllocGroups.from_folder( config.fixture_output.pre_alloc_groups_folder_path, # type: ignore[attr-defined] lazy_load=False, ) else: assert session_instance.pre_alloc_groups is not None pre_alloc_groups = session_instance.pre_alloc_groups total_groups = len(pre_alloc_groups.root) total_accounts = sum(group.pre_account_count for group in pre_alloc_groups.values()) terminalreporter.write_sep( "=", f" Phase 1 Complete: Generated {total_groups} pre-allocation groups " f"({total_accounts} total accounts) ", bold=True, green=True, ) else: # Normal message for fixture generation # append / to indicate this is a directory output_dir = str(config.fixture_output.directory) + "/" # type: ignore[attr-defined] terminalreporter.write_sep( "=", ( f' No tests executed - the test fixtures in "{output_dir}" may now be ' "executed against a client " ), bold=True, yellow=True, ) def pytest_metadata(metadata: Any) -> None: """Add or remove metadata to/from the pytest report.""" metadata.pop("JAVA_HOME", None) def pytest_html_results_table_header(cells: Any) -> None: """Customize the table headers of the HTML report table.""" cells.insert(3, 'JSON Fixture File') cells.insert(4, 'EVM Dump Dir') del cells[-1] # Remove the "Links" column def pytest_html_results_table_row(report: Any, cells: Any) -> None: """Customize the table rows of the HTML report table.""" if hasattr(report, "user_properties"): user_props = dict(report.user_properties) if ( report.passed and "fixture_path_absolute" in user_props and "fixture_path_relative" in user_props ): fixture_path_absolute = user_props["fixture_path_absolute"] fixture_path_relative = user_props["fixture_path_relative"] fixture_path_link = ( f'{fixture_path_relative}' ) cells.insert(3, f"{fixture_path_link}") elif report.failed: cells.insert(3, "Fixture unavailable") if "evm_dump_dir" in user_props: if user_props["evm_dump_dir"] is None: cells.insert( 4, "For t8n debug info use --evm-dump-dir=path --traces" ) else: evm_dump_dir = user_props.get("evm_dump_dir") if evm_dump_dir == "N/A": evm_dump_entry = "N/A" else: evm_dump_entry = f'{evm_dump_dir}' cells.insert(4, f"{evm_dump_entry}") del cells[-1] # Remove the "Links" column @pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport(item: Any, call: Any) -> Generator[None, None, None]: """ Make each test's fixture json path available to the test report via user_properties. This hook is called when each test is run and a report is being made. """ outcome = yield report = outcome.get_result() # type: ignore[attr-defined] if call.when == "call": if hasattr(item.config, "fixture_path_absolute") and hasattr( item.config, "fixture_path_relative" ): report.user_properties.append( ("fixture_path_absolute", item.config.fixture_path_absolute) ) report.user_properties.append( ("fixture_path_relative", item.config.fixture_path_relative) ) if hasattr(item.config, "evm_dump_dir") and hasattr(item.config, "fixture_format"): if item.config.fixture_format in [ "state_test", "blockchain_test", "blockchain_test_engine", "blockchain_test_sync", ]: report.user_properties.append(("evm_dump_dir", item.config.evm_dump_dir)) else: # not yet for EOF report.user_properties.append(("evm_dump_dir", "N/A")) def pytest_html_report_title(report: Any) -> None: """Set the HTML report title (pytest-html plugin).""" report.title = "Fill Test Report" @pytest.fixture(autouse=True, scope="session") def evm_bin(request: pytest.FixtureRequest) -> Path | None: """Return configured evm tool binary path used to run t8n.""" return request.config.getoption("evm_bin") @pytest.fixture(autouse=True, scope="session") def verify_fixtures_bin(request: pytest.FixtureRequest) -> Path | None: """ Return configured evm tool binary path used to run statetest or blocktest. """ return request.config.getoption("verify_fixtures_bin") @pytest.fixture(autouse=True, scope="session") def t8n(request: pytest.FixtureRequest) -> Generator[TransitionTool, None, None]: """Return configured transition tool.""" t8n: TransitionTool = request.config.t8n # type: ignore if not t8n.exception_mapper.reliable: warnings.warn( f"The t8n tool that is currently being used to fill tests ({t8n.__class__.__name__}) " "does not provide reliable exception messages. This may lead to false positives when " "writing tests and extra care should be taken when writing tests that produce " "exceptions.", stacklevel=2, ) yield t8n t8n.shutdown() @pytest.fixture(scope="session") def do_fixture_verification( request: pytest.FixtureRequest, verify_fixtures_bin: Path | None ) -> bool: """ Return True if evm statetest or evm blocktest should be ran on the generated fixture JSON files. """ do_fixture_verification = False if verify_fixtures_bin: do_fixture_verification = True if request.config.getoption("verify_fixtures"): do_fixture_verification = True return do_fixture_verification @pytest.fixture(autouse=True, scope="session") def evm_fixture_verification( request: pytest.FixtureRequest, do_fixture_verification: bool, evm_bin: Path | None, verify_fixtures_bin: Path | None, ) -> Generator[FixtureConsumer | None, None, None]: """ Return configured evm binary for executing statetest and blocktest commands used to verify generated JSON fixtures. """ if not do_fixture_verification: yield None return reused_evm_bin = False if not verify_fixtures_bin and evm_bin: verify_fixtures_bin = evm_bin reused_evm_bin = True if not verify_fixtures_bin: return try: evm_fixture_verification = FixtureConsumerTool.from_binary_path( binary_path=Path(verify_fixtures_bin), trace=request.config.collect_traces, # type: ignore[attr-defined] ) except Exception: if reused_evm_bin: pytest.exit( "The binary specified in --evm-bin could not be recognized as a known " "FixtureConsumerTool. Either remove --verify-fixtures or set " "--verify-fixtures-bin to a known fixture consumer binary.", returncode=pytest.ExitCode.USAGE_ERROR, ) else: pytest.exit( "Specified binary in --verify-fixtures-bin could not be recognized as a known " "FixtureConsumerTool. Please see `GethFixtureConsumer` for an example " "of how a new fixture consumer can be defined.", returncode=pytest.ExitCode.USAGE_ERROR, ) yield evm_fixture_verification @pytest.fixture(scope="session") def base_dump_dir(request: pytest.FixtureRequest) -> Path | None: """Path to base directory to dump the evm debug output.""" base_dump_dir_str = request.config.getoption("base_dump_dir") if base_dump_dir_str: return Path(base_dump_dir_str) return None @pytest.fixture(scope="session") def fixture_output(request: pytest.FixtureRequest) -> FixtureOutput: """Return the fixture output configuration.""" return request.config.fixture_output # type: ignore[attr-defined] @pytest.fixture(scope="session") def is_output_tarball(fixture_output: FixtureOutput) -> bool: """Return True if the output directory is a tarball.""" return fixture_output.is_tarball @pytest.fixture(scope="session") def output_dir(fixture_output: FixtureOutput) -> Path: """Return directory to store the generated test fixtures.""" return fixture_output.directory @pytest.fixture(scope="session", autouse=True) def create_properties_file(request: pytest.FixtureRequest, fixture_output: FixtureOutput) -> None: """ Create ini file with fixture build properties in the fixture output directory. """ if fixture_output.is_stdout: return fixture_properties = { "timestamp": datetime.datetime.now().isoformat(), } if build_name := request.config.getoption("build_name"): fixture_properties["build"] = build_name if github_ref := os.getenv("GITHUB_REF"): fixture_properties["ref"] = github_ref if github_sha := os.getenv("GITHUB_SHA"): fixture_properties["commit"] = github_sha command_line_args = request.config.stash[metadata_key]["Command-line args"] command_line_args = command_line_args.replace("", "").replace("", "") fixture_properties["command_line_args"] = command_line_args config = configparser.ConfigParser(interpolation=None) config["fixtures"] = fixture_properties environment_properties = {} for key, val in request.config.stash[metadata_key].items(): if key.lower() == "command-line args": continue if key.lower() in ["ci", "python", "platform"]: environment_properties[key] = val elif isinstance(val, dict): config[key.lower()] = val else: warnings.warn( f"Fixtures ini file: Skipping metadata key {key} with value {val}.", stacklevel=2 ) config["environment"] = environment_properties ini_filename = fixture_output.metadata_dir / "fixtures.ini" with open(ini_filename, "w") as f: f.write("; This file describes fixture build properties\n\n") config.write(f) @pytest.fixture(scope="function") def dump_dir_parameter_level( request: pytest.FixtureRequest, base_dump_dir: Path | None, filler_path: Path ) -> Path | None: """ Directory to dump evm transition tool debug output on a test parameter level. Example with --evm-dump-dir=/tmp/evm: -> /tmp/evm/shanghai__eip3855_push0__test_push0__test_push0_key_sstore/fork_shangh ai/ """ evm_dump_dir = node_to_test_info(request.node).get_dump_dir_path( base_dump_dir, filler_path, level="test_parameter", ) # NOTE: Use str for compatibility with pytest-dist if evm_dump_dir: request.node.config.evm_dump_dir = str(evm_dump_dir) else: request.node.config.evm_dump_dir = None return evm_dump_dir def get_fixture_collection_scope(fixture_name: str, config: pytest.Config) -> str: """ Return the appropriate scope to write fixture JSON files. See: https://docs.pytest.org/en/stable/how-to/fixtures.html#dynamic-scope """ del fixture_name if config.fixture_output.is_stdout: # type: ignore[attr-defined] return "session" if ( config.fixture_output.single_fixture_per_file # type: ignore ): return "function" return "module" @pytest.fixture(autouse=True, scope="module") def reference_spec(request: pytest.FixtureRequest) -> None | ReferenceSpec: """ Pytest fixture that returns the reference spec defined in a module. See `get_ref_spec_from_module`. """ if hasattr(request, "module"): return get_ref_spec_from_module(request.module) return None @pytest.fixture(scope=get_fixture_collection_scope) # type: ignore[arg-type] def fixture_collector( request: pytest.FixtureRequest, do_fixture_verification: bool, evm_fixture_verification: FixtureConsumer, filler_path: Path, base_dump_dir: Path | None, fixture_output: FixtureOutput, ) -> Generator[FixtureCollector, None, None]: """ Return configured fixture collector instance used for all tests in one test module. """ # Dynamically load the 'static_filler' and 'solc' plugins if needed if request.config.getoption("fill_static_tests_enabled"): request.config.pluginmanager.import_plugin("pytest_plugins.filler.static_filler") request.config.pluginmanager.import_plugin("pytest_plugins.solc.solc") fixture_collector = FixtureCollector( output_dir=fixture_output.directory, fill_static_tests=request.config.getoption("fill_static_tests_enabled"), single_fixture_per_file=fixture_output.single_fixture_per_file, filler_path=filler_path, base_dump_dir=base_dump_dir, ) yield fixture_collector fixture_collector.dump_fixtures() if do_fixture_verification: fixture_collector.verify_fixture_files(evm_fixture_verification) @pytest.fixture(autouse=True, scope="session") def filler_path(request: pytest.FixtureRequest) -> Path: """Return directory containing the tests to execute.""" return request.config.getoption("filler_path") def node_to_test_info(node: pytest.Item) -> TestInfo: """Return test info of the current node item.""" return TestInfo( name=node.name, id=node.nodeid, original_name=node.originalname, # type: ignore module_path=Path(node.path), ) @pytest.fixture(scope="session") def commit_hash_or_tag() -> str: """Cache the git commit hash or tag for the entire test session.""" return get_current_commit_hash_or_tag() @pytest.fixture(scope="function") def fixture_source_url( request: pytest.FixtureRequest, commit_hash_or_tag: str, ) -> str: """Return URL to the fixture source.""" if hasattr(request.node, "github_url"): return request.node.github_url function_line_number = request.function.__code__.co_firstlineno module_relative_path = os.path.relpath(request.function.__code__.co_filename) github_url = generate_github_url( module_relative_path, branch_or_commit_or_tag=commit_hash_or_tag, line_number=function_line_number, ) test_module_relative_path = os.path.relpath(request.module.__file__) if module_relative_path != test_module_relative_path: # This can be the case when the test function's body only contains pass # and the entire test logic is implemented as a test generator from the # framework. test_module_github_url = generate_github_url( test_module_relative_path, branch_or_commit_or_tag=commit_hash_or_tag, ) github_url += f" called via `{request.node.originalname}()` in {test_module_github_url}" return github_url def base_test_parametrizer(cls: Type[BaseTest]) -> Any: """ Generate pytest.fixture for a given BaseTest subclass. Implementation detail: All spec fixtures must be scoped on test function level to avoid leakage between tests. """ cls_fixture_parameters = [p for p in ALL_FIXTURE_PARAMETERS if p in cls.model_fields] @pytest.fixture( scope="function", name=cls.pytest_parameter_name(), ) def base_test_parametrizer_func( request: pytest.FixtureRequest, t8n: TransitionTool, fork: Fork, reference_spec: ReferenceSpec, pre: Alloc, output_dir: Path, dump_dir_parameter_level: Path | None, fixture_collector: FixtureCollector, test_case_description: str, fixture_source_url: str, gas_benchmark_value: int, witness_generator: Any, ) -> Any: """ Fixture used to instantiate an auto-fillable BaseTest object from within a test function. Every test that defines a test filler must explicitly specify its parameter name (see `pytest_parameter_name` in each implementation of BaseTest) in its function arguments. When parametrize, indirect must be used along with the fixture format as value. """ if hasattr(request.node, "fixture_format"): fixture_format = request.node.fixture_format else: fixture_format = request.param assert issubclass(fixture_format, BaseFixture) if fork is None: assert hasattr(request.node, "fork") fork = request.node.fork class BaseTestWrapper(cls): # type: ignore def __init__(self, *args: Any, **kwargs: Any) -> None: kwargs["t8n_dump_dir"] = dump_dir_parameter_level if "pre" not in kwargs: kwargs["pre"] = pre if "expected_benchmark_gas_used" not in kwargs: kwargs["expected_benchmark_gas_used"] = gas_benchmark_value kwargs |= { p: request.getfixturevalue(p) for p in cls_fixture_parameters if p not in kwargs } super(BaseTestWrapper, self).__init__(*args, **kwargs) self._request = request self._operation_mode = ( request.config.op_mode # type: ignore[attr-defined] ) if ( self._operation_mode == OpMode.OPTIMIZE_GAS or self._operation_mode == OpMode.OPTIMIZE_GAS_POST_PROCESSING ): self._gas_optimization_max_gas_limit = request.config.getoption( "optimize_gas_max_gas_limit", None ) # Get the filling session from config session: FillingSession = request.config.filling_session # type: ignore # Phase 1: Generate pre-allocation groups if session.phase_manager.is_pre_alloc_generation: # Use the original update_pre_alloc_groups method which # returns the groups self.update_pre_alloc_groups( session.pre_alloc_groups, fork, request.node.nodeid ) return # Skip fixture generation in phase 1 # Phase 2: Use pre-allocation groups (only for # BlockchainEngineXFixture) pre_alloc_hash = None if FixtureFillingPhase.PRE_ALLOC_GENERATION in fixture_format.format_phases: pre_alloc_hash = self.compute_pre_alloc_group_hash(fork=fork) group = session.get_pre_alloc_group(pre_alloc_hash) self.pre = group.pre try: fixture = self.generate( t8n=t8n, fork=fork, fixture_format=fixture_format, ) finally: if ( request.config.op_mode # type: ignore[attr-defined] == OpMode.OPTIMIZE_GAS or request.config.op_mode # type: ignore[attr-defined] == OpMode.OPTIMIZE_GAS_POST_PROCESSING ): gas_optimized_tests = ( request.config.gas_optimized_tests # type: ignore ) assert gas_optimized_tests is not None # Force adding something to the list, even if it's # None, to keep track of failed tests in the output # file. gas_optimized_tests[request.node.nodeid] = self._gas_optimization # Post-process for Engine X format (add pre_hash and state # diff) if ( FixtureFillingPhase.PRE_ALLOC_GENERATION in fixture_format.format_phases and pre_alloc_hash is not None ): fixture.pre_hash = pre_alloc_hash # Calculate state diff for efficiency if hasattr(fixture, "post_state") and fixture.post_state is not None: group = session.get_pre_alloc_group(pre_alloc_hash) fixture.post_state_diff = calculate_post_state_diff( fixture.post_state, group.pre ) fixture.fill_info( t8n.version(), test_case_description, fixture_source_url=fixture_source_url, ref_spec=reference_spec, _info_metadata=t8n._info_metadata, ) # Generate witness data if witness functionality is enabled via # the witness plugin if witness_generator is not None: witness_generator(fixture) fixture_path = fixture_collector.add_fixture( node_to_test_info(request.node), fixture, ) # NOTE: Use str for compatibility with pytest-dist request.node.config.fixture_path_absolute = str(fixture_path.absolute()) request.node.config.fixture_path_relative = str( fixture_path.relative_to(output_dir) ) request.node.config.fixture_format = fixture_format.format_name return BaseTestWrapper return base_test_parametrizer_func # Dynamically generate a pytest fixture for each test spec type. for cls in BaseTest.spec_types.values(): # Fixture needs to be defined in the global scope so pytest can detect it. globals()[cls.pytest_parameter_name()] = base_test_parametrizer(cls) def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """ Pytest hook used to dynamically generate test cases for each fixture format a given test spec supports. NOTE: The static test filler does NOT use this hook. See FillerFile.collect() in ./static_filler.py for more details. """ session: FillingSession = metafunc.config.filling_session # type: ignore[attr-defined] for test_type in BaseTest.spec_types.values(): if test_type.pytest_parameter_name() in metafunc.fixturenames: parameters = [] for i, format_with_or_without_label in enumerate(test_type.supported_fixture_formats): if not session.should_generate_format(format_with_or_without_label): continue parameter = labeled_format_parameter_set(format_with_or_without_label) if i > 0: parameter.marks.append(pytest.mark.derived_test) # type: ignore parameters.append(parameter) metafunc.parametrize( [test_type.pytest_parameter_name()], parameters, scope="function", indirect=True, ) def pytest_collection_modifyitems( config: pytest.Config, items: List[pytest.Item | pytest.Function] ) -> None: """ Remove pre-Paris tests parametrized to generate hive type fixtures; these can't be used in the Hive Pyspec Simulator. Replaces the test ID for state tests that use a transition fork with the base fork. These can't be handled in this plugins pytest_generate_tests() as the fork parametrization occurs in the forks plugin. """ del config items_for_removal = [] for i, item in enumerate(items): item.name = item.name.strip().replace(" ", "-") params: Dict[str, Any] | None = None if isinstance(item, pytest.Function): params = item.callspec.params elif hasattr(item, "params"): params = item.params if not params or "fork" not in params or params["fork"] is None: items_for_removal.append(i) continue fork: Fork = params["fork"] spec_type, fixture_format = get_spec_format_for_item(params) if isinstance(fixture_format, NotSetType): items_for_removal.append(i) continue assert issubclass(fixture_format, BaseFixture) if not fixture_format.supports_fork(fork): items_for_removal.append(i) continue markers = list(item.iter_markers()) # Automatically apply pre_alloc_group marker to slow tests that are not # benchmark tests has_slow_marker = any(marker.name == "slow" for marker in markers) has_benchmark_marker = any(marker.name == "benchmark" for marker in markers) has_pre_alloc_group_marker = any(marker.name == "pre_alloc_group" for marker in markers) if has_slow_marker and not has_benchmark_marker and not has_pre_alloc_group_marker: # Add pre_alloc_group marker to isolate slow non-benchmark tests pre_alloc_marker = pytest.mark.pre_alloc_group( "separate", reason=( "Non-benchmark tests marked as slow should be generated " "with their own pre-alloc-group" ), ) item.add_marker(pre_alloc_marker) # Re-collect markers after adding the new one markers = list(item.iter_markers()) # Both the fixture format itself and the spec filling it have a chance # to veto the filling of a specific format. if fixture_format.discard_fixture_format_by_marks(fork, markers): items_for_removal.append(i) continue if spec_type.discard_fixture_format_by_marks(fixture_format, fork, markers): items_for_removal.append(i) continue for marker in markers: if marker.name == "fill": for mark in marker.args: item.add_marker(mark) if "yul" in item.fixturenames: # type: ignore item.add_marker(pytest.mark.yul_test) # Update test ID for state tests that use a transition fork if fork in get_transition_forks(): has_state_test = any(marker.name == "state_test" for marker in markers) has_valid_transition = any( marker.name == "valid_at_transition_to" for marker in markers ) if has_state_test and has_valid_transition: base_fork = get_transition_fork_predecessor(fork) item._nodeid = item._nodeid.replace( f"fork_{fork.name()}", f"fork_{base_fork.name()}", ) for i in reversed(items_for_removal): items.pop(i) def pytest_sessionfinish(session: pytest.Session, exitstatus: int) -> None: """ Perform session finish tasks. - Save pre-allocation groups (phase 1) - Remove any lock files that may have been created. - Generate index file for all produced fixtures. - Create tarball of the output directory if the output is a tarball. """ del exitstatus # Save pre-allocation groups after phase 1 fixture_output: FixtureOutput = session.config.fixture_output # type: ignore[attr-defined] session_instance: FillingSession = session.config.filling_session # type: ignore[attr-defined] if session_instance.phase_manager.is_pre_alloc_generation: session_instance.save_pre_alloc_groups() return if session.config.getoption("optimize_gas", False): output_file = Path(session.config.getoption("optimize_gas_output")) lock_file_path = output_file.with_suffix(".lock") assert hasattr(session.config, "gas_optimized_tests") gas_optimized_tests: Dict[str, int] = session.config.gas_optimized_tests with FileLock(lock_file_path): if output_file.exists(): gas_optimized_tests = json.loads(output_file.read_text()) | gas_optimized_tests output_file.write_text(json.dumps(gas_optimized_tests, indent=2, sort_keys=True)) if xdist.is_xdist_worker(session): return if fixture_output.is_stdout or is_help_or_collectonly_mode(session.config): return # Remove any lock files that may have been created. for file in fixture_output.directory.rglob("*.lock"): file.unlink() # Generate index file for all produced fixtures. if ( session.config.getoption("generate_index") and not session_instance.phase_manager.is_pre_alloc_generation ): generate_fixtures_index(fixture_output.directory, quiet_mode=True, force_flag=False) # Create tarball of the output directory if the output is a tarball. fixture_output.create_tarball() ================================================ FILE: src/pytest_plugins/filler/fixture_output.py ================================================ """Fixture output configuration for generated test fixtures.""" import shutil import tarfile from pathlib import Path import pytest from pydantic import BaseModel, Field from ethereum_test_fixtures.blockchain import BlockchainEngineXFixture class FixtureOutput(BaseModel): """Represents the output destination for generated test fixtures.""" output_path: Path = Field(description="Directory path to store the generated test fixtures") single_fixture_per_file: bool = Field( default=False, description=( "Don't group fixtures in JSON files by test function; " "write each fixture to its own file" ), ) clean: bool = Field( default=False, description="Clean (remove) the output directory before filling fixtures.", ) generate_pre_alloc_groups: bool = Field( default=False, description="Generate pre-allocation groups (phase 1).", ) use_pre_alloc_groups: bool = Field( default=False, description="Use existing pre-allocation groups (phase 2).", ) should_generate_all_formats: bool = Field( default=False, description="Generate all fixture formats including BlockchainEngineXFixture.", ) @property def directory(self) -> Path: """Return the actual directory path where fixtures will be written.""" return self.strip_tarball_suffix(self.output_path) @property def metadata_dir(self) -> Path: """Return metadata directory to store fixture meta files.""" if self.is_stdout: return self.directory return self.directory / ".meta" @property def is_tarball(self) -> bool: """Return True if the output should be packaged as a tarball.""" path = self.output_path return path.suffix == ".gz" and path.with_suffix("").suffix == ".tar" @property def is_stdout(self) -> bool: """Return True if the fixture output is configured to be stdout.""" return self.directory.name == "stdout" @property def pre_alloc_groups_folder_path(self) -> Path: """Return the path for pre-allocation groups folder.""" engine_x_dir = BlockchainEngineXFixture.output_base_dir_name() return self.directory / engine_x_dir / "pre_alloc" @property def should_auto_enable_all_formats(self) -> bool: """ Check if all formats should be auto-enabled due to tarball output. """ return self.is_tarball @staticmethod def strip_tarball_suffix(path: Path) -> Path: """Strip the '.tar.gz' suffix from the output path.""" if str(path).endswith(".tar.gz"): return path.with_suffix("").with_suffix("") return path def is_directory_empty(self) -> bool: """Check if the output directory is empty.""" if not self.directory.exists(): return True return not any(self.directory.iterdir()) def is_directory_usable_for_phase(self) -> bool: """Check if the output directory is usable for the current phase.""" if not self.directory.exists(): return True if self.generate_pre_alloc_groups: # Phase 1: Directory must be completely empty return self.is_directory_empty() elif self.use_pre_alloc_groups: # Phase 2: Only pre-allocation groups must exist, no other files # allowed if not self.pre_alloc_groups_folder_path.exists(): return False # Check that only the pre-allocation group files exist existing_files = {f for f in self.directory.rglob("*") if f.is_file()} allowed_files = set(self.pre_alloc_groups_folder_path.rglob("*.json")) return existing_files == allowed_files else: # Normal filling: Directory must be empty return self.is_directory_empty() def get_directory_summary(self) -> str: """Return a summary of directory contents for error reporting.""" if not self.directory.exists(): return "directory does not exist" items = list(self.directory.iterdir()) if not items: return "empty directory" dirs = [d.name for d in items if d.is_dir()] files = [f.name for f in items if f.is_file()] max_dirs = 4 summary_parts = [] if dirs: summary_parts.append( f"{len(dirs)} directories" + ( f" ({', '.join(dirs[:max_dirs])}" + (f"... and {len(dirs) - max_dirs} more" if len(dirs) > max_dirs else "") + ")" if dirs else "" ) ) if files: summary_parts.append( f"{len(files)} files" + ( f" ({', '.join(files[:3])}" + (f"... and {len(files) - 3} more" if len(files) > 3 else "") + ")" if files else "" ) ) return " and ".join(summary_parts) def create_directories(self, is_master: bool) -> None: """ Create output and metadata directories if needed. If clean flag is set, remove and recreate the directory. Otherwise, verify the directory is empty before proceeding. """ if self.is_stdout: return # Only the master process should delete/create directories if using # pytest-xdist if not is_master: return if self.directory.exists() and self.clean: shutil.rmtree(self.directory) if self.directory.exists() and not self.is_directory_usable_for_phase(): summary = self.get_directory_summary() if self.generate_pre_alloc_groups: raise ValueError( f"Output directory '{self.directory}' must be completely empty for " f"pre-allocation group generation (phase 1). Contains: {summary}. " "Use --clean to remove all existing files." ) elif self.use_pre_alloc_groups: if not self.pre_alloc_groups_folder_path.exists(): raise ValueError( "Pre-allocation groups folder not found at " f"'{self.pre_alloc_groups_folder_path}'. " "Run phase 1 with --generate-pre-alloc-groups first." ) else: raise ValueError( f"Output directory '{self.directory}' is not empty. " f"Contains: {summary}. Use --clean to remove all existing files " "or specify a different output directory." ) # Create directories self.directory.mkdir(parents=True, exist_ok=True) self.metadata_dir.mkdir(parents=True, exist_ok=True) # Create pre-allocation groups directory for phase 1 if self.generate_pre_alloc_groups: self.pre_alloc_groups_folder_path.parent.mkdir(parents=True, exist_ok=True) def create_tarball(self) -> None: """Create tarball of the output directory if configured to do so.""" if not self.is_tarball: return with tarfile.open(self.output_path, "w:gz") as tar: for file in self.directory.rglob("*"): if file.suffix in {".json", ".ini"}: arcname = Path("fixtures") / file.relative_to(self.directory) tar.add(file, arcname=arcname) @classmethod def from_config(cls, config: pytest.Config) -> "FixtureOutput": """Create a FixtureOutput instance from pytest configuration.""" output_path = Path(config.getoption("output")) should_generate_all_formats = config.getoption("generate_all_formats") # Auto-enable --generate-all-formats for tarball output # Use same logic as is_tarball property if output_path.suffix == ".gz" and output_path.with_suffix("").suffix == ".tar": should_generate_all_formats = True return cls( output_path=output_path, single_fixture_per_file=config.getoption("single_fixture_per_file"), clean=config.getoption("clean"), generate_pre_alloc_groups=config.getoption("generate_pre_alloc_groups"), use_pre_alloc_groups=config.getoption("use_pre_alloc_groups"), should_generate_all_formats=should_generate_all_formats, ) ================================================ FILE: src/pytest_plugins/filler/gen_test_doc/__init__.py ================================================ """A pytest plugin to generate test case documentation for mkdocs.""" ================================================ FILE: src/pytest_plugins/filler/gen_test_doc/gen_test_doc.py ================================================ """ A pytest plugin that generates test case documentation for use in mkdocs. It generates the top-level "Test Case Reference" section in EEST's mkdocs site. Note: ---- - No output directory is specified for the generated output; file IO occurs via the `mkdocs-gen-files` plugin. `mkdocs serve` writes intermediate files to our local `docs/` directory and then copies it to the site directory. We modify `docs/navigation.md` and write all other output underneath `docs/tests`. If mkdocs is interrupted, these intermediate artifacts are left in `docs/`. Usage: ------ !!! note "Ensuring a clean build" In case mkdocs has polluted the `docs/` directory with intermediate files, run: ```console git restore docs/navigation.md # Careful if you have local modifications! rm -rf docs/tests docs/docs site ``` To test doc generation, run the plugin without mkdocs: ```console uv run fill -p pytest_plugins.filler.gen_test_doc.gen_test_doc --gen-docs \ --fork= tests ``` Or to build and view the site: ```console uv run mkdocs serve ``` """ import glob import logging import os import sys import textwrap from collections import defaultdict from pathlib import Path from typing import Any, Dict, List, Set, Tuple, cast import mkdocs_gen_files # type: ignore[unused-ignore, import-not-found] import pytest from jinja2 import Environment, FileSystemLoader, StrictUndefined from pytest import Item from ethereum_test_forks import get_forks from ethereum_test_specs import BaseTest from ethereum_test_tools.utility.versioning import ( generate_github_url, get_current_commit_hash_or_tag, ) from .page_props import ( DirectoryPageProps, FunctionPageProps, FunctionPagePropsLookup, MarkdownPageProps, ModulePageProps, ModulePagePropsLookup, PageProps, PagePropsLookup, TestCase, TestFunction, sanitize_string_title, ) logger = logging.getLogger("mkdocs") docstring_test_function_history: Dict[str, str] = {} def pytest_addoption(parser: pytest.Parser) -> None: # noqa: D103 gen_docs = parser.getgroup( "gen_docs", "Arguments related to generating test case documentation" ) gen_docs.addoption( "--gen-docs", action="store_true", dest="gen_docs", default=False, help="Generate documentation for all collected tests for use in for mkdocs", ) gen_docs.addoption( "--gen-docs-target-fork", action="store", dest="gen_docs_target_fork", default=None, help=( "The default fork to use generated in generated doc pages. Should be the name of the " "next upcoming fork." ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: # noqa: D103 if config.getoption("gen_docs"): config.option.disable_html = True config.pluginmanager.register(TestDocsGenerator(config), "test-case-doc-generator") def get_test_function_id(item: Item) -> str: """Get the test function's ID from the item.""" return item.nodeid.split("[")[0] def get_test_function_name(item: Item) -> str: """Get the test function's name from the item.""" return item.name.split("[")[0] def get_test_case_id(item: Item) -> str: """Get the test case's ID from the item.""" return item.nodeid.split("[")[-1].rstrip("]") def get_test_function_import_path(item: pytest.Item) -> str: """ Retrieve the fully qualified import path for an item's test function. This is used in jinja2 templates to get the test function, respectively the test function's class, documentation with mkdocstrings. """ item = cast(pytest.Function, item) # help mypy infer type module_name = item.module.__name__ if hasattr(item.obj, "__self__"): # it's a method bound to a class test_class = item.obj.__self__.__class__.__name__ test_function = item.obj.__name__ full_path = f"{module_name}.{test_class}" else: # it's a standalone function, no class test_function = item.obj.__name__ full_path = f"{module_name}.{test_function}" return full_path def get_import_path(path: Path) -> str: """ Get the import path for a given path. - For modules, strip the file extension. - For directories (i.e., packages such as `tests.berlin`), `with_suffix()` is ignored. To do: ------ - This should be combined with `get_test_function_import_path`. """ return str(path.with_suffix("")).replace("/", ".") def create_github_issue_url(title: str) -> str: """Create a GitHub issue URL for the given title.""" url_base = "https://github.com/ethereum/execution-spec-tests/issues/new?" title = title.replace(" ", "%20") labels = "scope:docs,type:bug" return f"{url_base}title={title}&labels={labels}" def get_docstring_one_liner(item: pytest.Item) -> str: """ Extract either the first 100 characters or the first line of the docstring from the function associated with the given pytest.Item. """ item = cast(pytest.Function, item) # help mypy infer type func_obj = item.obj docstring = func_obj.__doc__ test_function_name = get_test_function_name(item) if not docstring: github_issue_url = create_github_issue_url( f"docs(bug): No docstring available for `{test_function_name}`" ) logger.warning(f"No docstring available for `{test_function_name}`.") return f"[📖🐛 No docstring available]({github_issue_url})" docstring = docstring.strip() test_function_id = get_test_function_id(item) if ( docstring in docstring_test_function_history and docstring_test_function_history[docstring] != test_function_id ): logger.info( f"Duplicate docstring for {test_function_id}: " f"{docstring_test_function_history[docstring]} and {test_function_id}" ) else: docstring_test_function_history[docstring] = test_function_id lines = docstring.splitlines() bad_oneliner_issue_url = create_github_issue_url( f"docs(bug): Bad docstring oneliner for `{test_function_name}`" ) report_bad_oneliner_link = f"([📖🐛?]({bad_oneliner_issue_url}))" if lines: first_line = lines[0].strip() if len(first_line) <= 100: return ( first_line if not first_line.endswith(":") else first_line + report_bad_oneliner_link ) else: return first_line[:100] + f"... {report_bad_oneliner_link}" else: return docstring[:100] + f"... {report_bad_oneliner_link}" def get_test_function_test_type(item: pytest.Item) -> str: """Get the test type for the test function based on its fixtures.""" test_types: List[str] = [ spec_type.pytest_parameter_name() for spec_type in BaseTest.spec_types.values() ] item = cast(pytest.Function, item) # help mypy infer type fixture_names = item.fixturenames for test_type in test_types: if test_type in fixture_names: return test_type logger.warning(f"Could not determine the test function type for {item.nodeid}") return f"unknown ([📖🐛]({create_github_issue_url('docs(bug): unknown test function type')}))" class TestDocsGenerator: """Pytest plugin class for generating test case documentation.""" def __init__(self, config: pytest.Config) -> None: """Initialize the plugin with the given pytest config.""" self.config = config self.target_fork: str = config.getoption("gen_docs_target_fork") self.deployed_forks = [fork.name() for fork in get_forks() if fork.is_deployed()] self._setup_logger() self.jinja2_env = Environment( loader=FileSystemLoader("docs/templates"), trim_blocks=True, undefined=StrictUndefined, ) self.source_dir = Path("tests") self.ref = get_current_commit_hash_or_tag() self.top_level_nav_entry = "Test Case Reference" # intermediate collected pages and their properties self.function_page_props: FunctionPagePropsLookup = {} self.module_page_props: ModulePagePropsLookup = {} # the complete set of pages and their properties self.page_props: PagePropsLookup = {} @pytest.hookimpl(hookwrapper=True, trylast=True) def pytest_collection_modifyitems( self, config: pytest.Config, items: List[pytest.Item] ) -> object: """Generate html doc for each test item that pytest has collected.""" yield self.add_global_page_props_to_env() functions = defaultdict(list) for item in items: # group test case by test function functions[get_test_function_id(item)].append(item) if hasattr(config, "checklist_props"): checklist_props = config.checklist_props self.page_props = {**self.page_props, **checklist_props} # the heavy work self.create_function_page_props(functions) self.create_module_page_props() # add the pages to the page_props dict self.page_props = {**self.page_props, **self.function_page_props, **self.module_page_props} # this adds pages for the intermediate directory structure (tests, # tests/berlin) self.add_directory_page_props() # add other interesting pages self.add_spec_page_props() self.add_markdown_page_props() # write pages and navigation menu self.write_pages() self.update_mkdocs_nav() @pytest.hookimpl(tryfirst=True) def pytest_runtestloop(self, session: pytest.Session) -> bool: """Skip test execution, only generate docs.""" session.testscollected = 0 return True def pytest_terminal_summary( self, terminalreporter: Any, exitstatus: int, config: pytest.Config, ) -> None: """Add a summary line for the docs.""" del exitstatus, config terminalreporter.write_sep("=", f"{len(self.page_props)} doc pages generated", bold=True) def _setup_logger(self) -> None: """ Configure the mkdocs logger and adds a StreamHandler if outside mkdocs. We use the mkdocs logger to report warnings if conditions are invalid - this will inform the user and fail the build with `mkdocs build --strict`. """ if not logger.hasHandlers() or logger.level == logging.NOTSET: stream_handler = logging.StreamHandler(sys.stdout) stream_handler.setLevel(logging.INFO) logger.addHandler(stream_handler) logger.setLevel(logging.INFO) def get_doc_site_base_url(self) -> str: """ Return site's base in its URL for inclusion of local files. This is required in order to include docs/javascripts/site.js, for example, in the standalone html pages. Github pages deploys to a sub-directory "execution-spec-tests" and mike deploys a version of the site underneath a sub-directory named after the version, e.g.: - https://eest.ethereum.org/main/ - https://eest.ethereum.org/v4.1.0/ We need to be able to include the javascript available at: - https://eest.ethereum.org/main/javascripts/site.js """ ci = os.getenv("CI", None) github_ref_name = os.getenv("GITHUB_REF_NAME", None) doc_version = os.getenv("GEN_TEST_DOC_VERSION", None) if ci and github_ref_name: return f"/execution-spec-tests/{github_ref_name}/" if ci and not github_ref_name: raise Exception("Failed to determine target doc version (no GITHUB_REF_NAME env?).") if ("--strict" in sys.argv or "deploy" in sys.argv) and not doc_version: # assume we're trying to deploy manually via mike (locally) raise Exception( "Failed to determine target doc version during strict build (set " "GEN_TEST_DOC_VERSION env var)." ) # local test build, e.g. via `uv run mkdocs serve` return "/execution-spec-tests/" def add_global_page_props_to_env(self) -> None: """Populate global page properties used in j2 templates.""" global_page_props = { "target_fork": self.target_fork, "base_url": self.get_doc_site_base_url(), "deployed_forks": self.deployed_forks, "short_git_ref": get_current_commit_hash_or_tag(shorten_hash=True), } self.jinja2_env.globals.update(global_page_props) def create_function_page_props(self, test_functions: Dict["str", List[Item]]) -> None: """ Traverse all test items and create a lookup of doc pages & required props. To do: Needs refactor. """ skip_params = ["fork"] + [ spec_type.pytest_parameter_name() for spec_type in BaseTest.spec_types.values() ] for function_id, function_items in test_functions.items(): assert all(isinstance(item, pytest.Function) for item in function_items) # help mypy infer type items = cast(List[pytest.Function], function_items) # extract parametrized test cases for each test function test_cases = [] if getattr(items[0], "callspec", None): for item in items: param_set = item.callspec.params # Don't show skipped parameters as columns in the test case # table keys = [key for key in param_set.keys() if key not in skip_params] values = [param_set[key] for key in keys] # TODO: This formatting of bytes objects should be moved # elsewhere values = [ ( " ".join( f"{chunk}" for chunk in textwrap.wrap(value.hex(), 32) ) if isinstance(value, bytes) else str(value) ) for value in values ] fork = item.callspec.params.get("fork").name() # type: ignore test_type = get_test_function_test_type(item) test_type_value = item.callspec.params.get(test_type) fixture_type = test_type_value.format_name # type: ignore test_cases.append( TestCase( full_id=item.nodeid, abbreviated_id=item.nodeid.split("[")[-1].rstrip("]"), fork=fork, fixture_type=fixture_type, params=dict(zip(keys, values, strict=False)), ) ) module_relative_path = Path(items[0].module.__file__).relative_to(Path.cwd()) source_url = generate_github_url( str(module_relative_path), branch_or_commit_or_tag=self.ref, line_number=items[0].function.__code__.co_firstlineno, ) valid_from_marker = items[0].get_closest_marker("valid_from") if not valid_from_marker: valid_from_fork = "Frontier" else: # NOTE: The EOF tests cases contain two fork names in their # valid_from marker, separated by a comma. Take the last. valid_from_fork = valid_from_marker.args[0].split(",")[-1] target_or_valid_fork = ( self.target_fork if valid_from_fork in self.deployed_forks else valid_from_fork ) test_type = get_test_function_test_type(items[0]) test_case_count = len( [ case for case in test_cases if case.fork == target_or_valid_fork and case.fixture_type == test_type ] ) is_benchmark = items[0].get_closest_marker("benchmark") is not None is_stateful = items[0].get_closest_marker("stateful") is not None self.function_page_props[function_id] = FunctionPageProps( title=get_test_function_name(items[0]), source_code_url=source_url, target_or_valid_fork=target_or_valid_fork, path=module_relative_path, pytest_node_id=function_id, package_name=get_test_function_import_path(items[0]), test_case_count=test_case_count, cases=test_cases, fixture_formats=sorted({case.fixture_type for case in test_cases}), test_type=test_type, docstring_one_liner=get_docstring_one_liner(items[0]), html_static_page_target=f"./{get_test_function_name(items[0])}.html", mkdocs_function_page_target=f"./{get_test_function_name(items[0])}/", is_benchmark=is_benchmark, is_stateful=is_stateful, ) def create_module_page_props(self) -> None: """Discover the test module doc pages and extract their properties.""" for _function_id, function_page in self.function_page_props.items(): if str(function_page.path) not in self.module_page_props: module_path = function_page.path self.module_page_props[str(function_page.path)] = ModulePageProps( title=sanitize_string_title(function_page.path.stem), source_code_url=function_page.source_code_url, target_or_valid_fork=function_page.target_or_valid_fork, path=module_path, pytest_node_id=str(module_path), package_name=get_import_path(module_path), is_benchmark=function_page.is_benchmark, is_stateful=function_page.is_stateful, test_functions=[ TestFunction( name=function_page.title, test_type=function_page.test_type, test_case_count=function_page.test_case_count, docstring_one_liner=function_page.docstring_one_liner, ) ], ) else: existing_module_page = self.module_page_props[str(function_page.path)] if function_page.is_benchmark: existing_module_page.is_benchmark = True if function_page.is_stateful: existing_module_page.is_stateful = True existing_module_page.test_functions.append( TestFunction( name=function_page.title, test_type=function_page.test_type, test_case_count=function_page.test_case_count, docstring_one_liner=function_page.docstring_one_liner, ) ) def add_directory_page_props(self) -> None: """ Discover the intermediate directory pages and extract their properties. These directories may not have any test modules within them, e.g., tests/berlin/. """ sub_paths: Set[Path] = set() for module_page in self.module_page_props.values(): module_path_parts = module_page.path.parent.parts sub_paths.update( Path(*module_path_parts[: i + 1]) for i in range(len(module_path_parts)) ) for directory in sub_paths: directory_fork_name = ( directory.relative_to(self.source_dir).parts[0].capitalize() if directory != self.source_dir else self.target_fork ) if directory_fork_name in self.deployed_forks: fork = self.target_fork else: fork = directory_fork_name is_benchmark = any( module_page.is_benchmark for module_page in self.module_page_props.values() if directory in module_page.path.parents or module_page.path.parent == directory ) is_stateful = any( module_page.is_stateful for module_page in self.module_page_props.values() if directory in module_page.path.parents or module_page.path.parent == directory ) self.page_props[str(directory)] = DirectoryPageProps( title=sanitize_string_title(str(directory.name)), path=directory, pytest_node_id=str(directory), source_code_url=generate_github_url( str(directory), branch_or_commit_or_tag=self.ref ), # TODO: This won't work in all cases; should be from the # development fork Currently breaks for # `tests/unscheduled/eip7692_eof_v1/index.md` target_or_valid_fork=fork.capitalize() if fork else "Unknown", # init.py will be used for docstrings package_name=get_import_path(directory), is_benchmark=is_benchmark, is_stateful=is_stateful, ) def find_files_within_collection_scope(self, file_pattern: str) -> List[Path]: """ Find all files that match the scope of the collected test modules. This to avoid adding matching files in uncollected test directories. Note: could be optimized! """ files = [] for module_page in self.module_page_props.values(): # all files found in and under the modules' directory files += glob.glob(f"{module_page.path.parent}/**/{file_pattern}", recursive=True) for parent in module_page.path.parent.parents: if parent == self.source_dir: break # add files in a module's parent directory files += glob.glob(f"{parent}/{file_pattern}") return [Path(file) for file in set(files)] def add_spec_page_props(self) -> None: """ Add page path properties for spec files discovered in the collection scope. """ for spec_path in self.find_files_within_collection_scope("spec.py"): self.page_props[str(spec_path)] = ModulePageProps( title="Spec", path=spec_path, source_code_url=generate_github_url( str(spec_path), branch_or_commit_or_tag=self.ref ), pytest_node_id=str(spec_path), package_name=get_import_path(spec_path), target_or_valid_fork="", test_functions=[], ) def add_markdown_page_props(self) -> None: """ Add page path properties for markdown files discovered in the collection scope. """ for md_path in self.find_files_within_collection_scope("*.md"): self.page_props[str(md_path)] = MarkdownPageProps( title=md_path.stem, path=md_path, source_code_url=generate_github_url( str(md_path), branch_or_commit_or_tag=self.ref ), # abuse: not a test, but used in source code link pytest_node_id=str(md_path), target_or_valid_fork="", package_name="", ) def update_mkdocs_nav(self) -> None: """ Add the generated 'Test Case Reference' entries to the mkdocs navigation menu. """ fork_order = {fork.name().lower(): i for i, fork in enumerate(reversed(get_forks()))} def sort_by_fork_deployment_and_path(x: PageProps) -> Tuple[Any, ...]: """ Key function used to sort navigation menu entries for test case ref docs. Nav entries / output files contain special cases such as: - ("Test Case Reference",) -> tests/index.md - ("Test Case Reference", "Berlin") -> tests/berlin/index.md - ("Test Case Reference", "EIP-7692 EOF V1", tracker.md") tests/unscheduled/eip7692_eof_v1/tracker.md - ("Test Case Reference", "Shanghai", "EIP-3855 PUSH0", "Spec") -> tests/shanghai/eip3855_push0/spec.py This function provides and ordering to sort nav men entries as follows: 1. Forks are listed in the chronological order that they were deployed. 2. Special files listed first (before test pages): "*.md" and `Spec.py`, 3. The page's corresponding file path under `./tests/`. """ length = len(x.path.parts) if length > 1: # the fork folder from the relative path fork = str(x.path.parts[1]).lower() # unscheduled features added to the end if fork not in fork_order: return (999, str(x.path)) if length == 1: return (0,) elif length == 2: return (1, fork_order[fork]) elif x.path.name == "spec.py": return (2, fork_order[fork], length, 0, x.path) elif x.path.suffix == ".md": return (2, fork_order[fork], length, 1, x.path) else: return (2, fork_order[fork], length, 2, x.path) nav = mkdocs_gen_files.Nav() for page in sorted(self.page_props.values(), key=sort_by_fork_deployment_and_path): nav[page.nav_entry(self.top_level_nav_entry)] = str(page.target_output_file) with mkdocs_gen_files.open("navigation.md", "a") as nav_file: nav_file.writelines(nav.build_literate_nav()) def write_pages(self) -> None: """Write all pages to the target directory.""" for page in self.page_props.values(): page.write_page(mkdocs_gen_files, self.jinja2_env) # type: ignore[arg-type, unused-ignore] ================================================ FILE: src/pytest_plugins/filler/gen_test_doc/page_props.py ================================================ """ Classes and helpers used for templates, navigation menus and file output. The dataclass fields are used to define the page properties fields which are used in the jinja2 templates when generating site content (located in docs/templates). The classes also define each page's navigation menu entry and target output file. A few helpers are defined with EEST logic in order to sanitize strings from file paths for use in navigation menu. """ import re from abc import abstractmethod from dataclasses import asdict, dataclass, field from pathlib import Path from typing import IO, Any, ContextManager, Dict, List, Protocol from jinja2 import Environment from ethereum_test_tools import Opcodes def apply_name_filters(input_string: str) -> str: """ Apply a list of capitalizations/regexes to names used in titles & nav menus. Note: As of 2024-10-08, with 634 doc pages, this function constitutes ~2.0s of the total runtime (~5.5s). This seems to be insignificant with the time taken by mkdocstrings to include the docstrings in the final output (which) is a separate mkdocs "build-step" occurs outside the scope of this plugin. """ word_replacements = { "acl": "ACL", "bls 12": "BLS12", "bls12 g1add": "BLS12_G1ADD", "bls12 g1msm": "BLS12_G1MSM", "bls12 g1mul": "BLS12_G1MUL", "bls12 g2add": "BLS12_G2ADD", "bls12 g2msm": "BLS12_G2MSM", "bls12 g2mul": "BLS12_G2MUL", "bls12 map fp2 to g2": "BLS12_MAP_FP2_TO_G2", "bls12 map fp to g1": "BLS12_MAP_FP_TO_G1", "bls12 pairing": "BLS12_PAIRING_CHECK", "eips": "EIPs", "eof": "EOF", "vm": "VM", } # adding these is the expensive part opcode_replacements = {str(opcode): str(opcode) for opcode in Opcodes if str(opcode) != "GAS"} all_replacements = {**word_replacements, **opcode_replacements} for word, replacement in all_replacements.items(): input_string = re.sub(rf"(?i)\b{re.escape(word)}\b", replacement, input_string) regex_patterns = [ (r"eip-?([1-9]{1,5})", r"EIP-\1"), # Matches "eip-123" or "eip123" ] for pattern, replacement in regex_patterns: input_string = re.sub(pattern, replacement, input_string, flags=re.IGNORECASE) return input_string def snake_to_capitalize(string: str) -> str: # noqa: D103 """ Convert valid identifiers to a capitalized string, otherwise leave as-is. """ if string.isidentifier(): return " ".join(word.capitalize() for word in string.split("_")) return string def sanitize_string_title(string: str) -> str: """Sanitize a string to be used as a title.""" return apply_name_filters(snake_to_capitalize(string)) def nav_path_to_sanitized_str_tuple(nav_path: Path) -> tuple: """ Convert a nav path to a tuple of sanitized strings for use in mkdocs navigation. """ return tuple(sanitize_string_title(part) for part in nav_path.parts) class FileOpener(Protocol): """ Protocol to replace `mkdocs_gen_files` so it doesn't have to be imported/installed for unit tests. """ def open(self, path: Path, mode: str) -> ContextManager[IO[Any]]: """Open a file for writing.""" raise NotImplementedError @dataclass class PagePropsBase: """ Common test reference doc page properties and definitions. The dataclass attributes are made directly available in the jinja2 found in `docs/templates/*.j2`. """ title: str source_code_url: str target_or_valid_fork: str path: Path pytest_node_id: str package_name: str is_benchmark: bool = False is_stateful: bool = False @property @abstractmethod def template(self) -> str: """Get the jinja2 template used to render this page.""" raise NotImplementedError @property @abstractmethod def target_output_file(self) -> Path: """Get the target output file for this page.""" raise NotImplementedError def nav_entry(self, top_level_nav_entry: str) -> tuple: """Get the mkdocs navigation entry for this page.""" if len(self.path.parts) == 1: return (top_level_nav_entry,) path = top_level_nav_entry / Path(*self.path.parts[1:]).with_suffix("") return nav_path_to_sanitized_str_tuple(path) def write_page(self, file_opener: FileOpener, jinja2_env: Environment) -> None: """Write the page to the target directory.""" template = jinja2_env.get_template(self.template) rendered_content = template.render(**asdict(self)) with file_opener.open(self.target_output_file, "w") as destination: for line in rendered_content.splitlines(keepends=True): destination.write(line) @dataclass class EipChecklistPageProps(PagePropsBase): """Properties used to generate the EIP checklist page.""" eip: int = 0 lines: List[str] = field(default_factory=list) @property def template(self) -> str: """Get the jinja2 template used to render this page.""" raise Exception("EipChecklistPageProps does not have a template") @property def target_output_file(self) -> Path: """Get the target output file for this page.""" return self.path def write_page(self, file_opener: FileOpener, jinja2_env: Environment) -> None: """Write the page to the target directory.""" del jinja2_env with file_opener.open(self.target_output_file, "w") as destination: destination.write("\n".join(self.lines)) @dataclass class TestCase: """ Properties used to define a single test case in test function parameter tables. """ full_id: str abbreviated_id: str fork: str fixture_type: str params: Dict[str, Any] @dataclass class FunctionPageProps(PagePropsBase): """ Definitions used for to generate test function (markdown) pages and their corresponding static HTML pages. """ test_case_count: int = 0 fixture_formats: List[str] = field(default_factory=list) test_type: str = "" docstring_one_liner: str = "" html_static_page_target: str = "" mkdocs_function_page_target: str = "" cases: List[TestCase] = field(default_factory=list) @property def template(self) -> str: """Get the filename of the jinja2 template used to render this page.""" return "function.md.j2" @property def target_output_file(self) -> Path: """Get the target output file for this page.""" return self.path.with_suffix("") / f"{self.title}.md" def nav_entry(self, top_level_nav_entry: str) -> tuple: """Get the mkdocs navigation entry for this page.""" nav_path_prefix = super().nav_entry(top_level_nav_entry) # already sanitized return (*nav_path_prefix, f"{self.title}") def write_page(self, file_opener: FileOpener, jinja2_env: Environment) -> None: """ Test functions also get a static HTML page with parametrized test cases. This is intended for easier viewing (without mkdocs styling) of the data-table that documents the parametrized test cases. """ super().write_page(file_opener, jinja2_env) if not self.cases: return html_template = jinja2_env.get_template("function.html.j2") rendered_html_content = html_template.render(**asdict(self)) html_output_file = self.target_output_file.with_suffix(".html") with file_opener.open(html_output_file, "w") as destination: for line in rendered_html_content.splitlines(keepends=True): destination.write(line) @dataclass class TestFunction: """ Properties used to build the test function overview table in test module pages. """ name: str test_type: str test_case_count: int docstring_one_liner: str @dataclass class ModulePageProps(PagePropsBase): """ Definitions used for test modules, e.g., `tests/berlin/eip2930_access_list/test_acl.py`. """ test_functions: List[TestFunction] = field(default_factory=list) @property def template(self) -> str: """Get the filename of the jinja2 template used to render this page.""" return "module.md.j2" @property def target_output_file(self) -> Path: """Get the target output file for this page.""" if self.path.suffix == "spec.py": return self.path.with_suffix(".md") return self.path.with_suffix("") / "index.md" @dataclass class DirectoryPageProps(PagePropsBase): """ Definitions used for parent directories in test paths, e.g., `tests/berlin`. """ @property def template(self) -> str: """Get the filename of the jinja2 template used to render this page.""" return "directory.md.j2" @property def target_output_file(self) -> Path: """Get the target output file for this page.""" return self.path / "index.md" @dataclass class MarkdownPageProps(PagePropsBase): """ Definitions used to verbatim include markdown files included in test paths. """ @property def template(self) -> str: """Get the filename of the jinja2 template used to render this page.""" return "markdown_header.md.j2" @property def target_output_file(self) -> Path: """Get the target output file for this page.""" return self.path def write_page(self, file_opener: FileOpener, jinja2_env: Environment) -> None: """ Write the page to the target directory. We read the md file and write it with `mkdocs_gen_files`. """ template = jinja2_env.get_template(self.template) rendered_content = template.render(**asdict(self)) with open(self.path, "r") as md_source: with file_opener.open(self.target_output_file, "w") as destination: for line in rendered_content.splitlines(keepends=True): destination.write(line) for line in md_source: destination.write(line) PageProps = ( DirectoryPageProps | ModulePageProps | FunctionPageProps | MarkdownPageProps | EipChecklistPageProps ) PagePropsLookup = Dict[str, PageProps] ModulePagePropsLookup = Dict[str, ModulePageProps] FunctionPagePropsLookup = Dict[str, FunctionPageProps] ================================================ FILE: src/pytest_plugins/filler/ported_tests.py ================================================ """ A pytest plugin that shows `ported_from` marker information. This plugin extracts and displays information from @pytest.mark.ported_from markers, showing either the static filler file paths or associated PR URLs. Usage: ------ # Show static filler file paths: # uv run fill --show-ported-from tests/ # Show PR URLs instead: # uv run fill --show-ported-from=prs tests/ The plugin will: 1. Collect all test items with @pytest.mark.ported_from markers 2. Extract either the file paths (first positional argument) or PR URLs (pr keyword argument) 3. Output a deduplicated, sorted list, one per line 4. Skip test execution (collection only) 5. Exclude tests with coverage_missed_reason from output Marker Format: -------------- @pytest.mark.ported_from( ["path/to/static_filler1.json", "path/to/static_filler2.json"], pr=[ "https://github.com/ethereum/execution-spec-tests/pull/1234", "https://github.com/ethereum/execution-spec-tests/pull/5678", ], coverage_missed_reason="Optional reason for accepted coverage miss", ) """ import re from typing import List, Set from urllib.parse import urlparse import pytest from _pytest.terminal import TerminalReporter def convert_to_filled(file_path: str) -> str | None: """Convert source link to filler to filled test path.""" path = urlparse(file_path).path if "/src/" in path: path = path.split("/src/", 1)[1] if path.endswith((".sh", ".js")): return None # Remove "Filler" from the path components path = path.replace("TestsFiller", "Tests") # Replace file extension to .json path = re.sub(r"Filler\.(yml|yaml|json)$", ".json", path) return path def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" ported_from_group = parser.getgroup( "ported_from", "Arguments for showing ported_from marker information" ) ported_from_group.addoption( "--show-ported-from", action="store", dest="show_ported_from", default=None, nargs="?", const="paths", help=( "Show information from @pytest.mark.ported_from markers. " "Use '--show-ported-from' or '--show-ported-from=paths' to show static filler paths. " "Use '--show-ported-from=prs' to show PR URLs." ), ) ported_from_group.addoption( "--skip-coverage-missed-reason", action="store_true", dest="skip_coverage_missed_reason", default=False, help=( "When using --show-ported-from, exclude tests that have " "coverage_missed_reason in their @pytest.mark.ported_from marker. " "These are tests that were intentionally not ported from the original " "static filler files, typically because they are redundant or obsolete. " "This helps filter out accepted coverage gaps when analyzing test coverage." ), ) ported_from_group.addoption( "--ported-from-output-file", action="store", dest="ported_from_output_file", default=None, help="Output file for ported_from information.", ) ported_from_group.addoption( "--links-as-filled", action="store_true", dest="links_as_filled", default=False, help=( "Convert URLs or paths to filled test file paths for coverage script. " "Used in combination with --show-ported-from." ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """Register the plugin if the CLI option is provided.""" if config.getoption("show_ported_from"): config.pluginmanager.register(PortedFromDisplay(config), "ported-from-display") class PortedFromDisplay: """Pytest plugin class for displaying ported_from marker information.""" def __init__(self, config: pytest.Config) -> None: """Initialize the plugin with the given pytest config.""" self.config = config self.show_mode = config.getoption("show_ported_from") self.links_as_filled = config.getoption("links_as_filled") self.ported_from_output_file = config.getoption("ported_from_output_file") self.skip_coverage_missed_reason = config.getoption("skip_coverage_missed_reason") @pytest.hookimpl(hookwrapper=True, trylast=True) def pytest_collection_modifyitems( self, session: pytest.Session, config: pytest.Config, items: List[pytest.Item], ) -> object: """Extract ported_from information from collected test items.""" del session yield # Only run on master node when using pytest-xdist if hasattr(config, "workerinput"): return paths: Set[str] = set() prs: Set[str] = set() for item in items: ported_from_marker = item.get_closest_marker("ported_from") if ported_from_marker: # Skip tests with coverage_missed_reason if ( "coverage_missed_reason" in ported_from_marker.kwargs and self.skip_coverage_missed_reason ): continue # Extract paths (first positional argument) if ported_from_marker.args: first_arg = ported_from_marker.args[0] if isinstance(first_arg, list): paths.update(first_arg) elif isinstance(first_arg, str): paths.add(first_arg) # Extract PRs (keyword argument 'pr') if "pr" in ported_from_marker.kwargs: pr_arg = ported_from_marker.kwargs["pr"] if isinstance(pr_arg, list): prs.update(pr_arg) elif isinstance(pr_arg, str): prs.add(pr_arg) # Output results based on mode if self.show_mode == "prs": outputs = sorted(prs) else: # default to "paths" outputs = sorted(paths) output_lines: List[str] = [] if self.links_as_filled: for output in outputs: converted_link_output = convert_to_filled(output) if converted_link_output is not None: output_lines.append(converted_link_output) else: output_lines.extend(outputs) if self.ported_from_output_file: with open(self.ported_from_output_file, "w") as f: f.write("\n".join(output_lines)) else: for line in output_lines: print(line) @pytest.hookimpl(tryfirst=True) def pytest_runtestloop(self, session: pytest.Session) -> bool: """Skip test execution, only show ported_from information.""" del session return True def pytest_terminal_summary( self, terminalreporter: TerminalReporter, exitstatus: int, config: pytest.Config, ) -> None: """Add a summary line.""" del exitstatus if config.getoption("verbose") < 0: return mode_desc = "PR URLs" if self.show_mode == "prs" else "static filler paths" terminalreporter.write_sep("=", f"ported_from {mode_desc} displayed", bold=True) ================================================ FILE: src/pytest_plugins/filler/pre_alloc.py ================================================ """Pre-alloc specifically conditioned for test filling.""" import inspect from enum import IntEnum from functools import cache from hashlib import sha256 from itertools import count from typing import Any, Iterator, List, Literal import pytest from pydantic import PrivateAttr from ethereum_test_base_types import ( Account, Address, Number, Storage, StorageRootType, TestPrivateKey, TestPrivateKey2, ZeroPaddedHexNumber, ) from ethereum_test_base_types.conversions import ( BytesConvertible, FixedSizeBytesConvertible, NumberConvertible, ) from ethereum_test_fixtures import LabeledFixtureFormat from ethereum_test_forks import Fork from ethereum_test_specs import BaseTest from ethereum_test_types import EOA from ethereum_test_types import Alloc as BaseAlloc from ethereum_test_types.eof.v1 import Container from ethereum_test_vm import Bytecode, EVMCodeType, Opcodes CONTRACT_START_ADDRESS_DEFAULT = 0x1000000000000000000000000000000000001000 CONTRACT_ADDRESS_INCREMENTS_DEFAULT = 0x100 def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" pre_alloc_group = parser.getgroup( "pre_alloc", "Arguments defining pre-allocation behavior during test filling." ) pre_alloc_group.addoption( "--strict-alloc", action="store_true", dest="strict_alloc", default=False, help=("[DEBUG ONLY] Disallows deploying a contract in a predefined address."), ) pre_alloc_group.addoption( "--ca-start", "--contract-address-start", action="store", dest="test_contract_start_address", default=f"{CONTRACT_START_ADDRESS_DEFAULT}", type=str, help="The starting address from which tests will deploy contracts.", ) pre_alloc_group.addoption( "--ca-incr", "--contract-address-increment", action="store", dest="test_contract_address_increments", default=f"{CONTRACT_ADDRESS_INCREMENTS_DEFAULT}", type=str, help="The address increment value to each deployed contract by a test.", ) pre_alloc_group.addoption( "--evm-code-type", action="store", dest="evm_code_type", default=None, type=EVMCodeType, choices=list(EVMCodeType), help="Type of EVM code to deploy in each test by default.", ) class AllocMode(IntEnum): """Allocation mode for the state.""" PERMISSIVE = 0 STRICT = 1 DELEGATION_DESIGNATION = b"\xef\x01\x00" class Alloc(BaseAlloc): """Allocation of accounts in the state, pre and post test execution.""" _alloc_mode: AllocMode = PrivateAttr() _contract_address_iterator: Iterator[Address] = PrivateAttr() _eoa_iterator: Iterator[EOA] = PrivateAttr() _evm_code_type: EVMCodeType | None = PrivateAttr(None) _fork: Fork = PrivateAttr() def __init__( self, *args: Any, alloc_mode: AllocMode, contract_address_iterator: Iterator[Address], eoa_iterator: Iterator[EOA], fork: Fork, evm_code_type: EVMCodeType | None = None, **kwargs: Any, ) -> None: """Initialize allocation with the given properties.""" super().__init__(*args, **kwargs) self._alloc_mode = alloc_mode self._contract_address_iterator = contract_address_iterator self._eoa_iterator = eoa_iterator self._evm_code_type = evm_code_type self._fork = fork def __setitem__( self, address: Address | FixedSizeBytesConvertible, account: Account | None, ) -> None: """Set account associated with an address.""" if self._alloc_mode == AllocMode.STRICT: raise ValueError("Cannot set items in strict mode") super().__setitem__(address, account) def code_pre_processor( self, code: BytesConvertible, *, evm_code_type: EVMCodeType | None ) -> BytesConvertible: """Pre-processes the code before setting it.""" if evm_code_type is None: evm_code_type = self._evm_code_type if evm_code_type == EVMCodeType.EOF_V1: if not isinstance(code, Container): if isinstance(code, Bytecode) and not code.terminating: return Container.Code(code + Opcodes.STOP) return Container.Code(code) return code def deploy_contract( self, code: BytesConvertible, *, storage: Storage | StorageRootType | None = None, balance: NumberConvertible = 0, nonce: NumberConvertible = 1, address: Address | None = None, evm_code_type: EVMCodeType | None = None, label: str | None = None, stub: str | None = None, ) -> Address: """ Deploy a contract to the allocation. Warning: `address` parameter is a temporary solution to allow tests to hard-code the contract address. Do NOT use in new tests as it will be removed in the future! """ del stub if storage is None: storage = {} if address is not None: assert self._alloc_mode == AllocMode.PERMISSIVE, "address parameter is not supported" assert address not in self, f"address {address} already in allocation" contract_address = address else: contract_address = next(self._contract_address_iterator) if self._alloc_mode == AllocMode.STRICT: assert Number(nonce) >= 1, "impossible to deploy contract with nonce lower than one" code = self.code_pre_processor(code, evm_code_type=evm_code_type) code_bytes = bytes(code) if not isinstance(code, (bytes, str)) else code max_code_size = self._fork.max_code_size() assert len(code_bytes) <= max_code_size, ( f"code too large: {len(code_bytes)} > {max_code_size}" ) super().__setitem__( contract_address, Account( nonce=nonce, balance=balance, code=code, storage=storage, ), ) if label is None: # Try to deduce the label from the code frame = inspect.currentframe() if frame is not None: caller_frame = frame.f_back if caller_frame is not None: code_context = inspect.getframeinfo(caller_frame).code_context if code_context is not None: line = code_context[0].strip() if "=" in line: label = line.split("=")[0].strip() contract_address.label = label return contract_address def fund_eoa( self, amount: NumberConvertible | None = None, label: str | None = None, storage: Storage | None = None, delegation: Address | Literal["Self"] | None = None, nonce: NumberConvertible | None = None, ) -> EOA: """ Add a previously unused EOA to the pre-alloc with the balance specified by `amount`. If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be returned. """ del label eoa = next(self._eoa_iterator) if amount is None: amount = self._eoa_fund_amount_default if ( Number(amount) > 0 or storage is not None or delegation is not None or (nonce is not None and Number(nonce) > 0) ): if storage is None and delegation is None: nonce = Number(0 if nonce is None else nonce) account = Account( nonce=nonce, balance=amount, ) if nonce > 0: eoa.nonce = nonce else: # Type-4 transaction is sent to the EOA to set the storage, so # the nonce must be 1 if not isinstance(delegation, Address) and delegation == "Self": delegation = eoa # If delegation is None but storage is not, realistically the # nonce should be 2 because the account must have delegated to # set the storage and then again to reset the delegation (but # can be overridden by the test for a non-realistic scenario) real_nonce = 2 if delegation is None else 1 nonce = Number(real_nonce if nonce is None else nonce) account = Account( nonce=nonce, balance=amount, storage=storage if storage is not None else {}, code=DELEGATION_DESIGNATION + bytes(delegation) if delegation is not None else b"", ) eoa.nonce = nonce super().__setitem__(eoa, account) return eoa def fund_address(self, address: Address, amount: NumberConvertible) -> None: """ Fund an address with a given amount. If the address is already present in the pre-alloc the amount will be added to its existing balance. """ if address in self: account = self[address] if account is not None: current_balance = account.balance or 0 account.balance = ZeroPaddedHexNumber(current_balance + Number(amount)) return super().__setitem__(address, Account(balance=amount)) def empty_account(self) -> Address: """ Add a previously unused account guaranteed to be empty to the pre-alloc. This ensures the account has: - Zero balance - Zero nonce - No code - No storage This is different from precompiles or system contracts. The function does not send any transactions, ensuring that the account remains "empty." Returns: Address: The address of the created empty account. """ eoa = next(self._eoa_iterator) return Address(eoa) @pytest.fixture(scope="session") def alloc_mode(request: pytest.FixtureRequest) -> AllocMode: """Return allocation mode for the tests.""" if request.config.getoption("strict_alloc"): return AllocMode.STRICT return AllocMode.PERMISSIVE @pytest.fixture(scope="session") def contract_start_address(request: pytest.FixtureRequest) -> int: """Return starting address for contract deployment.""" return int(request.config.getoption("test_contract_start_address"), 0) @pytest.fixture(scope="session") def contract_address_increments(request: pytest.FixtureRequest) -> int: """Return address increment for contract deployment.""" return int(request.config.getoption("test_contract_address_increments"), 0) def sha256_from_string(s: str) -> int: """Return SHA-256 hash of a string.""" return int.from_bytes(sha256(s.encode("utf-8")).digest(), "big") ALL_FIXTURE_FORMAT_NAMES: List[str] = [] for spec in BaseTest.spec_types.values(): for labeled_fixture_format in spec.supported_fixture_formats: name = ( labeled_fixture_format.label if isinstance(labeled_fixture_format, LabeledFixtureFormat) else labeled_fixture_format.format_name.lower() ) if name not in ALL_FIXTURE_FORMAT_NAMES: ALL_FIXTURE_FORMAT_NAMES.append(name) # Sort by length, from longest to shortest, since some fixture format names # contain others so we are always sure to catch the longest one first. ALL_FIXTURE_FORMAT_NAMES.sort(key=len, reverse=True) @pytest.fixture(scope="function") def node_id_for_entropy(request: pytest.FixtureRequest, fork: Fork | None) -> str: """ Return the node id with the fixture format name and fork name stripped. Used in cases where we are filling for pre-alloc groups, and we take the name of the test as source of entropy to get a deterministic address when generating the pre-alloc grouping. Removing the fixture format and the fork name from the node id before hashing results in the contracts and senders addresses being the same across fixture types and forks for the same test. """ node_id: str = request.node.nodeid if fork is None: # FIXME: Static tests don't have a fork, so we need to get it from the # node. assert hasattr(request.node, "fork") fork = request.node.fork for fixture_format_name in ALL_FIXTURE_FORMAT_NAMES: if fixture_format_name in node_id: parts = request.node.nodeid.split("::") test_file_path = parts[0] test_name = "::".join(parts[1:]) stripped_test_name = test_name.replace(fixture_format_name, "").replace( fork.name(), "" ) return f"{test_file_path}::{stripped_test_name}" raise Exception(f"Fixture format name not found in test {node_id}") @pytest.fixture(scope="function") def contract_address_iterator( request: pytest.FixtureRequest, contract_start_address: int, contract_address_increments: int, node_id_for_entropy: str, ) -> Iterator[Address]: """Return iterator over contract addresses with dynamic scoping.""" if request.config.getoption( # TODO: Ideally, we should check the fixture format instead of checking # parameters. "generate_pre_alloc_groups", default=False, ) or request.config.getoption("use_pre_alloc_groups", default=False): # Use a starting address that is derived from the test node contract_start_address = sha256_from_string(node_id_for_entropy) return iter( Address((contract_start_address + (i * contract_address_increments)) % 2**160) for i in count() ) @cache def eoa_by_index(i: int) -> EOA: """Return EOA by index.""" return EOA(key=TestPrivateKey + i if i != 1 else TestPrivateKey2, nonce=0) @pytest.fixture(scope="function") def eoa_iterator( request: pytest.FixtureRequest, node_id_for_entropy: str, ) -> Iterator[EOA]: """Return iterator over EOAs copies with dynamic scoping.""" if request.config.getoption( # TODO: Ideally, we should check the fixture format instead of checking # parameters. "generate_pre_alloc_groups", default=False, ) or request.config.getoption("use_pre_alloc_groups", default=False): # Use a starting address that is derived from the test node eoa_start_pk = sha256_from_string(node_id_for_entropy) return iter( EOA( key=(eoa_start_pk + i) % 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141, nonce=0, ) for i in count() ) return iter(eoa_by_index(i).copy() for i in count()) @pytest.fixture(autouse=True) def evm_code_type(request: pytest.FixtureRequest) -> EVMCodeType: """Return default EVM code type for all tests (LEGACY).""" parameter_evm_code_type = request.config.getoption("evm_code_type") if parameter_evm_code_type is not None: assert type(parameter_evm_code_type) is EVMCodeType, "Invalid EVM code type" return parameter_evm_code_type return EVMCodeType.LEGACY @pytest.fixture(scope="function") def pre( alloc_mode: AllocMode, contract_address_iterator: Iterator[Address], eoa_iterator: Iterator[EOA], evm_code_type: EVMCodeType, fork: Fork | None, request: pytest.FixtureRequest, ) -> Alloc: """Return default pre allocation for all tests (Empty alloc).""" # FIXME: Static tests dont have a fork so we need to get it from the node. actual_fork = fork if actual_fork is None: assert hasattr(request.node, "fork") actual_fork = request.node.fork return Alloc( alloc_mode=alloc_mode, contract_address_iterator=contract_address_iterator, eoa_iterator=eoa_iterator, fork=actual_fork, evm_code_type=evm_code_type, ) ================================================ FILE: src/pytest_plugins/filler/static_filler.py ================================================ """ Static filler pytest plugin that reads test cases from static files and fills them into test fixtures. """ import inspect import itertools import json import warnings from pathlib import Path from typing import Any, Callable, Dict, Generator, List, Self, Tuple, Type import pytest import yaml from _pytest.fixtures import TopRequest from _pytest.mark import ParameterSet from _pytest.python import Module from ethereum_test_fixtures import BaseFixture, LabeledFixtureFormat from ethereum_test_forks import Fork, get_closest_fork from ethereum_test_specs import BaseStaticTest, BaseTest from ethereum_test_tools.tools_code.yul import Yul from ..forks.forks import ValidityMarker from ..shared.helpers import labeled_format_parameter_set def get_test_id_from_arg_names_and_values( arg_names: List[str], arg_values: List[Any] | Tuple[Any, ...] ) -> str: """Get the test id from argument names and values.""" return "-".join( [ f"{arg_name}={arg_value}" for arg_name, arg_value in zip(arg_names, arg_values, strict=True) ] ) def get_argument_names_and_values_from_parametrize_mark( mark: pytest.Mark, ) -> Tuple[List[str], List[ParameterSet]]: """Get the argument names and values from a parametrize mark.""" if mark.name != "parametrize": raise Exception("Mark is not a parametrize mark") kwargs_dict = dict(mark.kwargs) ids: Callable | List[str] | None = kwargs_dict.pop("ids") if "ids" in kwargs_dict else None marks: List[pytest.Mark] = kwargs_dict.pop("marks") if "marks" in kwargs_dict else [] if kwargs_dict: raise Exception("Mark has kwargs which is not supported") args = mark.args if not isinstance(args, tuple): raise Exception("Args is not a tuple") if len(args) != 2: raise Exception("Args does not have 2 elements") arg_names = args[0] if isinstance(args[0], list) else args[0].split(",") arg_values = [] for arg_index, arg_value in enumerate(args[1]): if not isinstance(arg_value, ParameterSet): original_arg_value = arg_value if not isinstance(arg_value, tuple) and not isinstance(arg_value, list): arg_value = (arg_value,) test_id: str = get_test_id_from_arg_names_and_values(arg_names, arg_value) if ids: if callable(ids): test_id = ids(original_arg_value) else: test_id = ids[arg_index] arg_values.append(ParameterSet(arg_value, marks, id=test_id)) else: arg_values.append(arg_value) return arg_names, arg_values def get_all_combinations_from_parametrize_marks( parametrize_marks: List[pytest.Mark], ) -> Tuple[List[str], List[ParameterSet]]: """Get all combinations of arguments from multiple parametrize marks.""" assert parametrize_marks, "No parametrize marks found" list_of_values: List[List[ParameterSet]] = [] all_argument_names = [] for mark in parametrize_marks: arg_names, arg_values = get_argument_names_and_values_from_parametrize_mark(mark) list_of_values.append(arg_values) all_argument_names.extend(arg_names) all_value_combinations: List[ParameterSet] = [] # use itertools to get all combinations test_ids = set() for combination in itertools.product(*list_of_values): values: List[Any] = [] marks: List[pytest.Mark | pytest.MarkDecorator] = [] for param_set in combination: values.extend(param_set.values) marks.extend(param_set.marks) test_id = "-".join([param.id or "" for param in combination]) # type: ignore[misc] if test_id in test_ids: current_int = 2 while f"{test_id}-{current_int}" in test_ids: current_int += 1 test_id = f"{test_id}-{current_int}" all_value_combinations.append( ParameterSet( values=values, marks=marks, id=test_id, ) ) test_ids.add(test_id) return all_argument_names, all_value_combinations def pytest_collect_file(file_path: Path, parent: Module) -> pytest.Collector | None: """ Pytest hook that collects test cases from static files and fills them into test fixtures. """ fill_static_tests_enabled = parent.config.getoption("fill_static_tests_enabled") if not fill_static_tests_enabled: return None if not BaseStaticTest.formats: # No formats registered, so no need to collect any files. return None if file_path.suffix in (".json", ".yml", ".yaml"): init_file = file_path.parent / "__init__.py" module = Module.from_parent( parent=parent, path=init_file, nodeid=str(init_file), ) return FillerFile.from_parent(module, path=file_path) return None class NoIntResolver(yaml.SafeLoader): """Class that tells yaml to not resolve int values.""" pass # Remove the implicit resolver for integers # Because yaml treat unquoted numbers 000001000 as oct numbers # Treat all numbers as str instead for ch in list(NoIntResolver.yaml_implicit_resolvers): resolvers = NoIntResolver.yaml_implicit_resolvers[ch] NoIntResolver.yaml_implicit_resolvers[ch] = [ (tag, regexp) for tag, regexp in resolvers if tag != "tag:yaml.org,2002:int" ] class FillerFile(pytest.File): """ Filler file that reads test cases from static files and fills them into test fixtures. """ def collect(self: "FillerFile") -> Generator["FillerTestItem", None, None]: """Collect test cases from a single static file.""" if not self.path.stem.endswith("Filler"): return with open(self.path, "r") as file: try: loaded_file = ( json.load(file) if self.path.suffix == ".json" else yaml.load(file, Loader=NoIntResolver) ) for key in loaded_file: filler = BaseStaticTest.model_validate(loaded_file[key]) func = filler.fill_function() function_marks: List[pytest.Mark] = [] if hasattr(func, "pytestmark"): function_marks = func.pytestmark[:] parametrize_marks: List[pytest.Mark] = [ mark for mark in function_marks if mark.name == "parametrize" ] func_parameters = inspect.signature(func).parameters fixture_formats: List[Type[BaseFixture] | LabeledFixtureFormat] = [] spec_parameter_name = "" for test_type in BaseTest.spec_types.values(): if test_type.pytest_parameter_name() in func_parameters: assert not spec_parameter_name, "Multiple spec parameters found" spec_parameter_name = test_type.pytest_parameter_name() session = self.config.filling_session # type: ignore[attr-defined] fixture_formats.extend( fixture_format for fixture_format in test_type.supported_fixture_formats if session.should_generate_format(fixture_format) ) test_fork_set = ValidityMarker.get_test_fork_set_from_markers( iter(function_marks) ) if not test_fork_set: pytest.fail( "The test function's " f"'{key}' fork validity markers generate " "an empty fork range. Please check the arguments to its " f"markers: @pytest.mark.valid_from and " f"@pytest.mark.valid_until." ) intersection_set = test_fork_set & self.config.selected_fork_set # type: ignore extra_function_marks: List[pytest.Mark] = [ mark for mark in function_marks if mark.name != "parametrize" and not ValidityMarker.is_validity_or_filter_marker(mark.name) ] for format_with_or_without_label in fixture_formats: fixture_format_parameter_set = labeled_format_parameter_set( format_with_or_without_label ) fixture_format = ( format_with_or_without_label.format if isinstance(format_with_or_without_label, LabeledFixtureFormat) else format_with_or_without_label ) for fork in sorted(intersection_set): params: Dict[str, Any] = {spec_parameter_name: fixture_format} fixturenames = [ spec_parameter_name, ] marks: List[pytest.Mark] = [ mark # type: ignore for mark in fixture_format_parameter_set.marks if mark.name != "parametrize" ] test_id = f"fork_{fork.name()}-{fixture_format_parameter_set.id}" if "fork" in func_parameters: params["fork"] = fork if "pre" in func_parameters: fixturenames.append("pre") if "request" in func_parameters: fixturenames.append("request") if parametrize_marks: parameter_names, parameter_set_list = ( get_all_combinations_from_parametrize_marks(parametrize_marks) ) for parameter_set in parameter_set_list: # Copy and extend the params with the # parameter set case_marks = ( marks[:] + [ mark for mark in parameter_set.marks if mark.name != "parametrize" ] + extra_function_marks ) case_params = params.copy() | dict( zip(parameter_names, parameter_set.values, strict=True) ) yield FillerTestItem.from_parent( self, original_name=key, func=func, params=case_params, fixturenames=fixturenames, name=f"{key}[{test_id}-{parameter_set.id}]", fork=fork, fixture_format=fixture_format, marks=case_marks, ) else: yield FillerTestItem.from_parent( self, original_name=key, func=func, params=params, fixturenames=fixturenames, name=f"{key}[{test_id}]", fork=fork, fixture_format=fixture_format, marks=marks, ) except Exception as e: pytest.fail(f"Error loading file {self.path} as a test: {e}") warnings.warn(f"Error loading file {self.path} as a test: {e}", stacklevel=1) return class FillerTestItem(pytest.Item): """Filler test item produced from a single test from a static file.""" originalname: str func: Callable params: Dict[str, Any] fixturenames: List[str] github_url: str = "" fork: Fork fixture_format: Type[BaseFixture] def __init__( self, *args: Any, original_name: str, func: Callable, params: Dict[str, Any], fixturenames: List[str], fork: Fork, fixture_format: Type[BaseFixture], marks: List[pytest.Mark], **kwargs: Any, ) -> None: """Initialize the filler test item.""" super().__init__(*args, **kwargs) self.originalname = original_name self.func = func self.params = params self.fixturenames = fixturenames self.fork = fork self.fixture_format = fixture_format for marker in marks: if type(marker) is pytest.Mark: self.own_markers.append(marker) else: self.add_marker(marker) # type: ignore def setup(self) -> None: """Resolve and apply fixtures before test execution.""" self._fixtureinfo = self.session._fixturemanager.getfixtureinfo( self, None, None, ) request = TopRequest( self, # type: ignore[arg-type] _ispytest=True, ) for fixture_name in self.fixturenames: if fixture_name == "request": self.params[fixture_name] = request else: self.params[fixture_name] = request.getfixturevalue(fixture_name) def runtest(self) -> None: """Execute the test logic for this specific static test.""" self.func(**self.params) def reportinfo(self) -> Tuple[Path, int, str]: """Provide information for test reporting.""" return self.fspath, 0, f"Static file test: {self.name}" @pytest.fixture def yul(fork: Fork, request: pytest.FixtureRequest) -> Type[Yul]: """ Fixture that allows contract code to be defined with Yul code. This fixture defines a class that wraps the ::ethereum_test_tools.Yul class so that upon instantiation within the test case, it provides the test case's current fork parameter. The forks is then available for use in solc's arguments for the Yul code compilation. Test cases can override the default value by specifying a fixed version with the @pytest.mark.compile_yul_with(FORK) marker. """ solc_target_fork: Fork | None marker = request.node.get_closest_marker("compile_yul_with") assert hasattr(request.config, "solc_version"), "solc_version not set in pytest config." if marker: if not marker.args[0]: pytest.fail( f"{request.node.name}: Expected one argument in 'compile_yul_with' marker." ) for fork in request.config.all_forks: # type: ignore if fork.name() == marker.args[0]: solc_target_fork = fork break else: pytest.fail(f"{request.node.name}: Fork {marker.args[0]} not found in forks list.") else: solc_target_fork = get_closest_fork(fork) assert solc_target_fork is not None, "No fork supports provided solc version." if solc_target_fork != fork and request.config.getoption("verbose") >= 1: warnings.warn( f"Compiling Yul for {solc_target_fork.name()}, not {fork.name()}.", stacklevel=2 ) class YulWrapper(Yul): def __new__(cls, *args: Any, **kwargs: Any) -> Self: kwargs["fork"] = solc_target_fork return super(YulWrapper, cls).__new__(cls, *args, **kwargs) return YulWrapper ================================================ FILE: src/pytest_plugins/filler/tests/__init__.py ================================================ """Filler tests.""" ================================================ FILE: src/pytest_plugins/filler/tests/conftest.py ================================================ """Local pytest configuration for filler tests.""" import os import sysconfig import pytest @pytest.fixture(autouse=True) def monkeypatch_path_for_entry_points( monkeypatch: pytest.MonkeyPatch, ) -> None: """ Monkeypatch the PATH to add the "bin" directory where entrypoints are installed. This would typically be in the venv in which pytest is running these tests and fill, which, with uv, is `./.venv/bin`. This is required in order for fill to locate the ethereum-spec-evm-resolver "binary" (entrypoint) when being executed using pytester. """ bin_dir = sysconfig.get_path("scripts") monkeypatch.setenv("PATH", f"{bin_dir}:{os.environ['PATH']}") ================================================ FILE: src/pytest_plugins/filler/tests/test_benchmarking.py ================================================ """Test the benchmarking pytest plugin for gas benchmark values.""" import textwrap from pathlib import Path import pytest test_module_dummy = textwrap.dedent( """\ import pytest from ethereum_test_tools import Environment @pytest.mark.valid_at("Istanbul") def test_dummy_benchmark_test(state_test, gas_benchmark_value) -> None: state_test( env=env,pre={},post={},tx=None) """ ) test_module_without_fixture = textwrap.dedent( """\ import pytest from ethereum_test_tools import Environment @pytest.mark.valid_at("Istanbul") def test_dummy_no_benchmark_test(state_test) -> None: state_test(env=env, pre={}, post={}, tx=None) """ ) def setup_test_directory_structure( pytester: pytest.Pytester, test_content: str, test_filename: str ) -> Path: """ Set up the common test directory structure used across multiple tests. Args: pytester: The pytest Pytester fixture test_content: The content to write to the test file test_filename: The name of the test file to create Returns: The path to the created test module file """ tests_dir = pytester.mkdir("tests") istanbul_tests_dir = tests_dir / "istanbul" istanbul_tests_dir.mkdir() dummy_dir = istanbul_tests_dir / "dummy_test_module" dummy_dir.mkdir() test_module = dummy_dir / test_filename test_module.write_text(test_content) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") return test_module def test_gas_benchmark_option_added(pytester: pytest.Pytester) -> None: """Test that the --gas-benchmark-values option is properly added.""" pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Command: pytest -p pytest_plugins.filler.benchmarking --help result = pytester.runpytest("-c", "pytest-fill.ini", "--help") assert result.ret == 0 assert any("--gas-benchmark-values" in line for line in result.outlines) assert any("Specify gas benchmark values for tests" in line for line in result.outlines) def test_benchmarking_mode_configured_with_option(pytester: pytest.Pytester) -> None: """ Test that fill_mode is set to BENCHMARKING when --gas-benchmark-values is used. """ setup_test_directory_structure(pytester, test_module_dummy, "test_dummy_benchmark.py") # Test with gas benchmark values result = pytester.runpytest( "-c", "pytest-fill.ini", "--fork", "Istanbul", "--gas-benchmark-values", "10,20,30", "tests/istanbul/dummy_test_module/", "--collect-only", "-q", ) assert result.ret == 0 assert any("9 tests collected" in line for line in result.outlines) # Check that the test names include the benchmark gas values assert any("benchmark-gas-value_10M" in line for line in result.outlines) assert any("benchmark-gas-value_20M" in line for line in result.outlines) assert any("benchmark-gas-value_30M" in line for line in result.outlines) def test_benchmarking_mode_not_configured_without_option(pytester: pytest.Pytester) -> None: """ Test that fill_mode is not set to BENCHMARKING when --gas-benchmark-values is not used. """ setup_test_directory_structure(pytester, test_module_dummy, "test_dummy_benchmark.py") # Test without gas benchmark values result = pytester.runpytest( "-c", "pytest-fill.ini", "--fork", "Istanbul", "tests/istanbul/dummy_test_module/", "--collect-only", "-q", ) assert result.ret == 0 # Should generate normal test variants (3) without parametrization assert any("3 tests collected" in line for line in result.outlines) assert not any("benchmark-gas-value_10M" in line for line in result.outlines) assert not any("benchmark-gas-value_20M" in line for line in result.outlines) assert not any("benchmark-gas-value_30M" in line for line in result.outlines) ================================================ FILE: src/pytest_plugins/filler/tests/test_collect_only.py ================================================ """Test the fill command's --collect-only pytest option.""" import textwrap import pytest test_module_dummy = textwrap.dedent( """\ import pytest from ethereum_test_tools import Environment @pytest.mark.valid_at("Istanbul") def test_dummy_collect_only_test(state_test) -> None: state_test(env=Environment(), pre={}, post={}, tx=None) """ ) def test_collect_only_output(pytester: pytest.Pytester) -> None: """Test that --collect-only option produces expected output.""" tests_dir = pytester.mkdir("tests") istanbul_tests_dir = tests_dir / "istanbul" istanbul_tests_dir.mkdir() dummy_dir = istanbul_tests_dir / "dummy_test_module" dummy_dir.mkdir() test_module = dummy_dir / "test_dummy_collect.py" test_module.write_text(test_module_dummy) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest( "-c", "pytest-fill.ini", "--fork", "Istanbul", "tests/istanbul/dummy_test_module/", "--collect-only", "-q", ) assert result.ret == 0, f"Fill command failed:\n{result.outlines}" assert any( "tests/istanbul/dummy_test_module/test_dummy_collect.py::test_dummy_collect_only_test[fork_Istanbul-state_test]" in line for line in result.outlines ), f"Expected test output: {result.outlines}" assert any( "tests/istanbul/dummy_test_module/test_dummy_collect.py::test_dummy_collect_only_test[fork_Istanbul-blockchain_test_from_state_test]" in line for line in result.outlines ), f"Expected test output: {result.outlines}" # fill generates 3 test variants: state_test, # blockchain_test_from_state_test, blockchain_test_engine_from_state_test assert any("3 tests collected" in line for line in result.outlines) ================================================ FILE: src/pytest_plugins/filler/tests/test_eip_checklist.py ================================================ """Test the EIP checklist plugin functionality.""" import re import textwrap from typing import Any def test_eip_checklist_collection(testdir: Any) -> None: """Test that checklist markers are collected correctly.""" # Create the test in an EIP-specific directory tests_dir = testdir.mkdir("tests") prague_tests_dir = tests_dir.mkdir("prague") eip_7702_tests_dir = prague_tests_dir.mkdir("eip7702_set_code_tx") test_7702_module = eip_7702_tests_dir.join("test_eip7702.py") test_7702_module.write( textwrap.dedent( """ import pytest from ethereum_test_tools import StateTestFiller from ethereum_test_checklists import EIPChecklist REFERENCE_SPEC_GIT_PATH = "N/A" REFERENCE_SPEC_VERSION = "N/A" @pytest.mark.valid_at("Prague") @EIPChecklist.TransactionType.Test.IntrinsicValidity.GasLimit.Exact() def test_exact_gas(state_test: StateTestFiller) -> None: pass @pytest.mark.valid_at("Prague") @EIPChecklist.TransactionType.Test.Signature.Invalid.V.Two(eip=[2930]) def test_invalid_v(state_test: StateTestFiller) -> None: pass """ ) ) eip_7702_external_coverage_file = eip_7702_tests_dir.join( "eip_checklist_external_coverage.txt" ) eip_7702_external_coverage_file.write( textwrap.dedent( """ general/code_coverage/eels = DEBUG EXTERNAL COVERAGE REASON """ ) ) berlin_tests_dir = tests_dir.mkdir("berlin") eip_2930_tests_dir = berlin_tests_dir.mkdir("eip2930_access_list") test_2930_module = eip_2930_tests_dir.join("test_eip2930.py") test_2930_module.write( textwrap.dedent( """ import pytest from ethereum_test_tools import StateTestFiller REFERENCE_SPEC_GIT_PATH = "N/A" REFERENCE_SPEC_VERSION = "N/A" @pytest.mark.valid_at("Berlin") def test_berlin_one(state_test: StateTestFiller) -> None: pass """ ) ) test_2930_n_a_file = eip_2930_tests_dir.join("eip_checklist_not_applicable.txt") test_2930_n_a_file.write( textwrap.dedent( """ system_contract = DEBUG NOT APPLICABLE REASON """ ) ) # Run pytest with checklist-only mode testdir.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = testdir.runpytest( "-c", "pytest-fill.ini", "-p", "pytest_plugins.filler.eip_checklist", "--collect-only", "--checklist-output", str(testdir.tmpdir / "checklists"), str(tests_dir), ) result.assert_outcomes( passed=0, failed=0, skipped=0, errors=0, ) # Check that checklists were generated checklist_dir = testdir.tmpdir / "checklists" assert checklist_dir.exists() checklist_file = checklist_dir / "eip7702_checklist.md" assert checklist_file.exists() # Verify the checklist contains the expected markers content = checklist_file.readlines() assert any(re.search(r"✅.*test_exact_gas", line) for line in content) assert any(re.search(r"✅.*test_invalid_v", line) for line in content) assert any(re.search(r"✅.*DEBUG EXTERNAL COVERAGE REASON", line) for line in content) checklist_file = checklist_dir / "eip2930_checklist.md" assert checklist_file.exists() content = checklist_file.readlines() assert not any(re.search(r"✅.*test_exact_gas", line) for line in content) assert any(re.search(r"✅.*test_invalid_v", line) for line in content) assert any(re.search(r"N/A.*DEBUG NOT APPLICABLE REASON", line) for line in content) ================================================ FILE: src/pytest_plugins/filler/tests/test_filler.py ================================================ """ Test the filler plugin. """ import configparser import json import os import textwrap from datetime import datetime from pathlib import Path import pytest from ethereum_test_tools import Environment from ethereum_clis import ExecutionSpecsTransitionTool, TransitionTool from ..filler import default_output_directory # flake8: noqa def get_all_files_in_directory(base_dir: str) -> list[Path]: # noqa: D103 base_path = Path(base_dir) return [f.relative_to(os.getcwd()) for f in base_path.rglob("*") if f.is_file()] def count_keys_in_fixture(file_path: Path) -> int: # noqa: D103 with open(file_path, "r") as f: data = json.load(f) if not isinstance(data, dict): # Ensure the loaded data is a dictionary raise ValueError( f"Expected a dictionary in {file_path}, but got {type(data).__name__}." ) return len(data) test_module_paris = textwrap.dedent( """\ import pytest from ethereum_test_tools import Account, Environment, TestAddress, Transaction @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") def test_paris_one(state_test) -> None: state_test(env=Environment(), pre={TestAddress: Account(balance=1_000_000)}, post={}, tx=Transaction()) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") def test_paris_two(state_test) -> None: state_test(env=Environment(), pre={TestAddress: Account(balance=1_000_000)}, post={}, tx=Transaction()) """ ) test_count_paris = 4 test_module_shanghai = textwrap.dedent( """\ import pytest from ethereum_test_tools import Account, Environment, TestAddress, Transaction @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") def test_shanghai_one(state_test) -> None: state_test(env=Environment(), pre={TestAddress: Account(balance=1_000_000)}, post={}, tx=Transaction()) @pytest.mark.parametrize("x", [1, 2, 3]) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") def test_shanghai_two(state_test, x) -> None: state_test(env=Environment(), pre={TestAddress: Account(balance=1_000_000)}, post={}, tx=Transaction()) """ ) test_count_shanghai = 8 total_test_count = test_count_paris + test_count_shanghai @pytest.mark.parametrize( "args, expected_fixture_files, expected_fixture_counts", [ pytest.param( [], [ Path("fixtures/blockchain_tests/paris/module_paris/paris_one.json"), Path("fixtures/blockchain_tests_engine/paris/module_paris/paris_one.json"), Path("fixtures/state_tests/paris/module_paris/paris_one.json"), Path("fixtures/blockchain_tests/paris/module_paris/paris_two.json"), Path("fixtures/blockchain_tests_engine/paris/module_paris/paris_two.json"), Path("fixtures/state_tests/paris/module_paris/paris_two.json"), Path("fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one.json"), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one.json" ), Path("fixtures/state_tests/shanghai/module_shanghai/shanghai_one.json"), Path("fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two.json"), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two.json" ), Path("fixtures/state_tests/shanghai/module_shanghai/shanghai_two.json"), ], [2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6], id="default-args", ), pytest.param( ["--skip-index"], [ Path("fixtures/blockchain_tests/paris/module_paris/paris_one.json"), Path("fixtures/blockchain_tests_engine/paris/module_paris/paris_one.json"), Path("fixtures/state_tests/paris/module_paris/paris_one.json"), Path("fixtures/blockchain_tests/paris/module_paris/paris_two.json"), Path("fixtures/blockchain_tests_engine/paris/module_paris/paris_two.json"), Path("fixtures/state_tests/paris/module_paris/paris_two.json"), Path("fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one.json"), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one.json" ), Path("fixtures/state_tests/shanghai/module_shanghai/shanghai_one.json"), Path("fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two.json"), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two.json" ), Path("fixtures/state_tests/shanghai/module_shanghai/shanghai_two.json"), ], [2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6], id="skip-index", ), pytest.param( ["--build-name", "test_build"], [ Path("fixtures/blockchain_tests/paris/module_paris/paris_one.json"), Path("fixtures/blockchain_tests_engine/paris/module_paris/paris_one.json"), Path("fixtures/state_tests/paris/module_paris/paris_one.json"), Path("fixtures/blockchain_tests/paris/module_paris/paris_two.json"), Path("fixtures/blockchain_tests_engine/paris/module_paris/paris_two.json"), Path("fixtures/state_tests/paris/module_paris/paris_two.json"), Path("fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one.json"), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one.json" ), Path("fixtures/state_tests/shanghai/module_shanghai/shanghai_one.json"), Path("fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two.json"), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two.json" ), Path("fixtures/state_tests/shanghai/module_shanghai/shanghai_two.json"), ], [2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6], id="build-name-in-fixtures-ini-file", ), pytest.param( ["--single-fixture-per-file"], [ Path( "fixtures/blockchain_tests/paris/module_paris/paris_one__fork_Paris_blockchain_test_from_state_test.json" ), Path( "fixtures/state_tests/paris/module_paris/paris_one__fork_Paris_state_test.json" ), Path( "fixtures/blockchain_tests_engine/paris/module_paris/paris_one__fork_Paris_blockchain_test_engine_from_state_test.json" ), Path( "fixtures/blockchain_tests/paris/module_paris/paris_one__fork_Shanghai_blockchain_test_from_state_test.json" ), Path( "fixtures/state_tests/paris/module_paris/paris_one__fork_Shanghai_state_test.json" ), Path( "fixtures/blockchain_tests_engine/paris/module_paris/paris_one__fork_Shanghai_blockchain_test_engine_from_state_test.json" ), Path( "fixtures/blockchain_tests/paris/module_paris/paris_two__fork_Paris_blockchain_test_from_state_test.json" ), Path( "fixtures/state_tests/paris/module_paris/paris_two__fork_Paris_state_test.json" ), Path( "fixtures/blockchain_tests_engine/paris/module_paris/paris_two__fork_Paris_blockchain_test_engine_from_state_test.json" ), Path( "fixtures/blockchain_tests/paris/module_paris/paris_two__fork_Shanghai_blockchain_test_from_state_test.json" ), Path( "fixtures/state_tests/paris/module_paris/paris_two__fork_Shanghai_state_test.json" ), Path( "fixtures/blockchain_tests_engine/paris/module_paris/paris_two__fork_Shanghai_blockchain_test_engine_from_state_test.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one__fork_Paris_blockchain_test_from_state_test.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_one__fork_Paris_state_test.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one__fork_Paris_blockchain_test_engine_from_state_test.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one__fork_Shanghai_blockchain_test_from_state_test.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_one__fork_Shanghai_state_test.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one__fork_Shanghai_blockchain_test_engine_from_state_test.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_from_state_test_x_1.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_state_test_x_1.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_engine_from_state_test_x_1.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_from_state_test_x_2.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_state_test_x_2.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_engine_from_state_test_x_2.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_from_state_test_x_3.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_state_test_x_3.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_engine_from_state_test_x_3.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_from_state_test_x_1.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_state_test_x_1.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_engine_from_state_test_x_1.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_from_state_test_x_2.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_state_test_x_2.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_engine_from_state_test_x_2.json" ), Path( "fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_from_state_test_x_3.json" ), Path( "fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_state_test_x_3.json" ), Path( "fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_engine_from_state_test_x_3.json" ), ], [1] * 36, id="single-fixture-per-file", ), pytest.param( ["--single-fixture-per-file", "--output", "other_fixtures"], [ Path( "other_fixtures/blockchain_tests/paris/module_paris/paris_one__fork_Paris_blockchain_test_from_state_test.json" ), Path( "other_fixtures/state_tests/paris/module_paris/paris_one__fork_Paris_state_test.json" ), Path( "other_fixtures/blockchain_tests_engine/paris/module_paris/paris_one__fork_Paris_blockchain_test_engine_from_state_test.json" ), Path( "other_fixtures/blockchain_tests/paris/module_paris/paris_one__fork_Shanghai_blockchain_test_from_state_test.json" ), Path( "other_fixtures/state_tests/paris/module_paris/paris_one__fork_Shanghai_state_test.json" ), Path( "other_fixtures/blockchain_tests_engine/paris/module_paris/paris_one__fork_Shanghai_blockchain_test_engine_from_state_test.json" ), Path( "other_fixtures/blockchain_tests/paris/module_paris/paris_two__fork_Paris_blockchain_test_from_state_test.json" ), Path( "other_fixtures/state_tests/paris/module_paris/paris_two__fork_Paris_state_test.json" ), Path( "other_fixtures/blockchain_tests_engine/paris/module_paris/paris_two__fork_Paris_blockchain_test_engine_from_state_test.json" ), Path( "other_fixtures/blockchain_tests/paris/module_paris/paris_two__fork_Shanghai_blockchain_test_from_state_test.json" ), Path( "other_fixtures/state_tests/paris/module_paris/paris_two__fork_Shanghai_state_test.json" ), Path( "other_fixtures/blockchain_tests_engine/paris/module_paris/paris_two__fork_Shanghai_blockchain_test_engine_from_state_test.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one__fork_Paris_blockchain_test_from_state_test.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_one__fork_Paris_state_test.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one__fork_Paris_blockchain_test_engine_from_state_test.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_one__fork_Shanghai_blockchain_test_from_state_test.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_one__fork_Shanghai_state_test.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_one__fork_Shanghai_blockchain_test_engine_from_state_test.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_from_state_test_x_1.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_state_test_x_1.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_engine_from_state_test_x_1.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_from_state_test_x_2.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_state_test_x_2.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_engine_from_state_test_x_2.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_from_state_test_x_3.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Paris_state_test_x_3.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Paris_blockchain_test_engine_from_state_test_x_3.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_from_state_test_x_1.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_state_test_x_1.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_engine_from_state_test_x_1.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_from_state_test_x_2.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_state_test_x_2.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_engine_from_state_test_x_2.json" ), Path( "other_fixtures/blockchain_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_from_state_test_x_3.json" ), Path( "other_fixtures/state_tests/shanghai/module_shanghai/shanghai_two__fork_Shanghai_state_test_x_3.json" ), Path( "other_fixtures/blockchain_tests_engine/shanghai/module_shanghai/shanghai_two__fork_Shanghai_blockchain_test_engine_from_state_test_x_3.json" ), ], [1] * 36, id="single-fixture-per-file_custom_output_dir", ), ], ) def test_fixture_output_based_on_command_line_args( testdir: pytest.Testdir, args: list[str], expected_fixture_files: list[Path], expected_fixture_counts: list[int], default_t8n: TransitionTool, ) -> None: """ Test: - fixture files are created at the expected paths. - no other files are present in the output directory. - each fixture file contains the expected number of fixtures. The modules above generate the following test cases: tests/paris/test_module_paris.py::test_paris_one[fork_Paris] PASSED tests/paris/test_module_paris.py::test_paris_one[fork_Shanghai] PASSED tests/paris/test_module_paris.py::test_paris_two[fork_Paris] PASSED tests/paris/test_module_paris.py::test_paris_two[fork_Shanghai] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_one[fork_Paris] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_one[fork_Shanghai] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_two[fork_Paris-x=1] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_two[fork_Paris-x=2] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_two[fork_Paris-x=3] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_two[fork_Shanghai-x=1] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_two[fork_Shanghai-x=2] PASSED tests/shanghai/test_module_shanghai.py::test_shanghai_two[fork_Shanghai-x=3] PASSED """ tests_dir = testdir.mkdir("tests") paris_tests_dir = tests_dir.mkdir("paris") test_module = paris_tests_dir.join("test_module_paris.py") test_module.write(test_module_paris) shanghai_tests_dir = tests_dir.mkdir("shanghai") test_module = shanghai_tests_dir.join("test_module_shanghai.py") test_module.write(test_module_shanghai) testdir.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") args.append("-c") args.append("pytest-fill.ini") args.append("-v") args.append("--no-html") args.append("--t8n-server-url") assert default_t8n.server_url is not None args.append(default_t8n.server_url) result = testdir.runpytest(*args) result.assert_outcomes( passed=total_test_count * 3, failed=0, skipped=0, errors=0, ) if "--output" in args: output_dir = Path(args[args.index("--output") + 1]).absolute() else: output_dir = Path(default_output_directory()).absolute() assert output_dir.exists() all_files = get_all_files_in_directory(str(output_dir)) meta_dir = os.path.join(output_dir, ".meta") assert os.path.exists(meta_dir), f"The directory {meta_dir} does not exist" expected_ini_file = "fixtures.ini" expected_index_file = "index.json" expected_resolver_file = None resolver_file = None if TransitionTool.default_tool == ExecutionSpecsTransitionTool: expected_resolver_file = "eels_resolutions.json" ini_file = None index_file = None for file in all_files: if file.name == expected_ini_file: ini_file = file elif file.name == expected_index_file: index_file = file elif expected_resolver_file and file.name == expected_resolver_file: resolver_file = file assert resolver_file.exists(), f"{resolver_file} does not exist" expected_additional_files = {expected_ini_file, expected_index_file} if resolver_file: expected_additional_files.add(str(expected_resolver_file)) all_fixtures = [file for file in all_files if file.name not in expected_additional_files] for fixture_file, fixture_count in zip(expected_fixture_files, expected_fixture_counts): assert fixture_file.exists(), f"{fixture_file} does not exist" assert fixture_count == count_keys_in_fixture(fixture_file), ( f"Fixture count mismatch for {fixture_file}" ) assert set(all_fixtures) == set(expected_fixture_files), ( f"Unexpected files in directory: {set(all_fixtures) - set(expected_fixture_files)}" ) assert ini_file is not None, f"No {expected_ini_file} file was found in {meta_dir}" config = configparser.ConfigParser() ini_file_text = ini_file.read_text() ini_file_text = ini_file_text.replace(default_t8n.server_url, "t8n_server_path") config.read_string(ini_file_text) if "--skip-index" not in args: assert index_file is not None, f"No {expected_index_file} file was found in {meta_dir}" properties = {key: value for key, value in config.items("fixtures")} assert "timestamp" in properties timestamp = datetime.fromisoformat(properties["timestamp"]) assert timestamp.year == datetime.now().year if "--build-name" in args: assert "build" in properties build_name = args[args.index("--build-name") + 1] assert properties["build"] == build_name test_module_environment_variables = textwrap.dedent( """\ import pytest from ethereum_test_tools import Account, Environment, Transaction @pytest.mark.parametrize("block_gas_limit", [Environment().gas_limit]) @pytest.mark.valid_at("Cancun") def test_max_gas_limit(state_test, pre, block_gas_limit) -> None: env = Environment() assert block_gas_limit == {expected_gas_limit} tx = Transaction(gas_limit=block_gas_limit, sender=pre.fund_eoa()) state_test(env=env, pre=pre, post={{}}, tx=tx) """ ) @pytest.mark.parametrize( "args, expected_fixture_files, expected_fixture_counts, expected_gas_limit", [ pytest.param( [], [ Path( "fixtures/state_tests/cancun/module_environment_variables/max_gas_limit.json" ), ], [1], Environment().gas_limit, id="default-args", ), pytest.param( ["--block-gas-limit", str(Environment().gas_limit * 2)], [ Path( "fixtures/state_tests/cancun/module_environment_variables/max_gas_limit.json" ), ], [1], Environment().gas_limit * 2, id="higher-gas-limit", ), ], ) def test_fill_variables( testdir: pytest.Testdir, args: list[str], expected_fixture_files: list[Path], expected_fixture_counts: list[int], expected_gas_limit: int, default_t8n: TransitionTool, ) -> None: """ Test filling tests that depend on variables such as the max block gas limit. """ tests_dir = testdir.mkdir("tests") cancun_tests_dir = tests_dir.mkdir("cancun") test_module = cancun_tests_dir.join("test_module_environment_variables.py") test_module.write( test_module_environment_variables.format(expected_gas_limit=expected_gas_limit) ) testdir.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") args.append("-c") args.append("pytest-fill.ini") args.append("-v") args.append("-m") args.append("state_test") args.append("--no-html") args.append("--t8n-server-url") assert default_t8n.server_url is not None args.append(default_t8n.server_url) result = testdir.runpytest(*args) result.assert_outcomes( passed=1, failed=0, skipped=0, errors=0, ) if "--output" in args: output_dir = Path(args[args.index("--output") + 1]).absolute() else: output_dir = Path(default_output_directory()).absolute() assert output_dir.exists() all_files = get_all_files_in_directory(str(output_dir)) meta_dir = os.path.join(output_dir, ".meta") assert os.path.exists(meta_dir), f"The directory {meta_dir} does not exist" expected_ini_file = "fixtures.ini" expected_index_file = "index.json" expected_resolver_file = None resolver_file = None if TransitionTool.default_tool == ExecutionSpecsTransitionTool: expected_resolver_file = "eels_resolutions.json" ini_file = None index_file = None for file in all_files: if file.name == expected_ini_file: ini_file = file elif file.name == expected_index_file: index_file = file elif expected_resolver_file and file.name == expected_resolver_file: resolver_file = file assert resolver_file.exists(), f"{resolver_file} does not exist" expected_additional_files = {expected_ini_file, expected_index_file} if resolver_file: expected_additional_files.add(str(expected_resolver_file)) all_fixtures = [file for file in all_files if file.name not in expected_additional_files] for fixture_file, fixture_count in zip(expected_fixture_files, expected_fixture_counts): assert fixture_file.exists(), f"{fixture_file} does not exist" assert fixture_count == count_keys_in_fixture(fixture_file), ( f"Fixture count mismatch for {fixture_file}" ) assert set(all_fixtures) == set(expected_fixture_files), ( f"Unexpected files in directory: {set(all_fixtures) - set(expected_fixture_files)}" ) assert ini_file is not None, f"No {expected_ini_file} file was found in {meta_dir}" config = configparser.ConfigParser() ini_file_text = ini_file.read_text() ini_file_text = ini_file_text.replace(default_t8n.server_url, "t8n_server_path") config.read_string(ini_file_text) if "--skip-index" not in args: assert index_file is not None, f"No {expected_index_file} file was found in {meta_dir}" properties = {key: value for key, value in config.items("fixtures")} assert "timestamp" in properties timestamp = datetime.fromisoformat(properties["timestamp"]) assert timestamp.year == datetime.now().year if "--build-name" in args: assert "build" in properties build_name = args[args.index("--build-name") + 1] assert properties["build"] == build_name ================================================ FILE: src/pytest_plugins/filler/tests/test_filling_session.py ================================================ """Unit tests for the FillingSession class.""" from pathlib import Path from typing import Any from unittest.mock import patch import pytest from ethereum_test_base_types import Alloc from ethereum_test_fixtures import ( FixtureFillingPhase, PreAllocGroup, PreAllocGroups, ) from ethereum_test_forks import Prague from ethereum_test_types import Environment from ..filler import FillingSession class MockConfig: """Mock pytest config for testing.""" def __init__(self, **options: Any) -> None: """Initialize with option values.""" self._options = options self.op_mode = "fill" # Default operation mode def getoption(self, name: str, default: Any = None) -> Any: """Mock getoption method.""" return self._options.get(name, default) class MockFixtureOutput: """Mock fixture output for testing.""" def __init__(self, pre_alloc_folder_exists: bool = True) -> None: """Initialize with test conditions.""" self._folder_exists = pre_alloc_folder_exists self.pre_alloc_groups_folder_path = Path("/tmp/test_pre_alloc") @classmethod def from_config(cls, config: Any) -> "MockFixtureOutput": """Mock factory method.""" del config return cls() class TestFillingSession: """Test cases for FillingSession class.""" def test_init_normal_fill(self) -> None: """Test initialization for normal single-phase fill.""" config = MockConfig() with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] assert session.phase_manager.is_single_phase_fill assert session.pre_alloc_groups is None def test_init_pre_alloc_generation(self) -> None: """Test initialization for pre-alloc generation phase.""" config = MockConfig(generate_pre_alloc_groups=True) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] assert session.phase_manager.is_pre_alloc_generation assert session.pre_alloc_groups is not None assert len(session.pre_alloc_groups.root) == 0 def test_init_use_pre_alloc(self) -> None: """Test initialization for phase 2 (using pre-alloc groups).""" config = MockConfig(use_pre_alloc_groups=True) # Mock the file system operations test_group = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) mock_groups = PreAllocGroups(root={"test_hash": test_group}) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): with patch.object(Path, "exists", return_value=True): with patch.object(PreAllocGroups, "from_folder", return_value=mock_groups): session = FillingSession.from_config(config) # type: ignore[arg-type] assert session.phase_manager.is_fill_after_pre_alloc assert session.pre_alloc_groups is mock_groups def test_init_use_pre_alloc_missing_folder(self) -> None: """Test initialization fails when pre-alloc folder is missing.""" config = MockConfig(use_pre_alloc_groups=True) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): with patch.object(Path, "exists", return_value=False): with pytest.raises( FileNotFoundError, match="Pre-allocation groups folder not found" ): FillingSession.from_config(config) # type: ignore[arg-type] def test_should_generate_format(self) -> None: """Test format generation decision.""" config = MockConfig() with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] # Mock fixture format class MockFormat: format_phases = {FixtureFillingPhase.FILL} assert session.should_generate_format(MockFormat()) # type: ignore[arg-type] def test_should_generate_format_with_generate_all(self) -> None: """Test format generation with generate_all_formats flag.""" config = MockConfig(generate_all_formats=True, use_pre_alloc_groups=True) mock_groups = PreAllocGroups(root={}) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): with patch.object(Path, "exists", return_value=True): with patch.object(PreAllocGroups, "from_folder", return_value=mock_groups): session = FillingSession.from_config(config) # type: ignore[arg-type] # Mock fixture format that normally wouldn't generate in phase 2 class MockFormat: format_phases = {FixtureFillingPhase.FILL} # Should generate because generate_all=True assert session.should_generate_format(MockFormat()) # type: ignore[arg-type] def test_get_pre_alloc_group(self) -> None: """Test getting a pre-alloc group by hash.""" config = MockConfig(use_pre_alloc_groups=True) test_group = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) mock_groups = PreAllocGroups(root={"test_hash": test_group}) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): with patch.object(Path, "exists", return_value=True): with patch.object(PreAllocGroups, "from_folder", return_value=mock_groups): session = FillingSession.from_config(config) # type: ignore[arg-type] assert session.get_pre_alloc_group("test_hash") is test_group def test_get_pre_alloc_group_not_found(self) -> None: """Test getting a non-existent pre-alloc group.""" config = MockConfig(use_pre_alloc_groups=True) mock_groups = PreAllocGroups(root={}) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): with patch.object(Path, "exists", return_value=True): with patch.object(PreAllocGroups, "from_folder", return_value=mock_groups): session = FillingSession.from_config(config) # type: ignore[arg-type] with pytest.raises(ValueError, match="Pre-allocation hash .* not found"): session.get_pre_alloc_group("missing_hash") def test_get_pre_alloc_group_not_initialized(self) -> None: """Test getting pre-alloc group when not initialized.""" config = MockConfig() # Normal fill, no pre-alloc groups with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] with pytest.raises(ValueError, match="Pre-allocation groups not initialized"): session.get_pre_alloc_group("any_hash") def test_update_pre_alloc_group(self) -> None: """Test updating a pre-alloc group.""" config = MockConfig(generate_pre_alloc_groups=True) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] test_group = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) session.update_pre_alloc_group("test_hash", test_group) assert "test_hash" in session.pre_alloc_groups # type: ignore[operator] assert session.pre_alloc_groups["test_hash"] is test_group # type: ignore[index] def test_update_pre_alloc_group_wrong_phase(self) -> None: """Test updating pre-alloc group in wrong phase.""" config = MockConfig() # Normal fill with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] test_group = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) with pytest.raises( ValueError, match="Can only update pre-alloc groups in generation phase" ): session.update_pre_alloc_group("test_hash", test_group) def test_save_pre_alloc_groups(self) -> None: """Test saving pre-alloc groups to disk.""" config = MockConfig(generate_pre_alloc_groups=True) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] # Add a test group test_group = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) session.update_pre_alloc_group("test_hash", test_group) # Mock file operations with patch.object(Path, "mkdir") as mock_mkdir: with patch.object(PreAllocGroups, "to_folder") as mock_to_folder: session.save_pre_alloc_groups() mock_mkdir.assert_called_once_with(parents=True, exist_ok=True) mock_to_folder.assert_called_once() def test_save_pre_alloc_groups_none(self) -> None: """Test saving when no pre-alloc groups exist.""" config = MockConfig() # Normal fill with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] # Should not raise, just return session.save_pre_alloc_groups() def test_aggregate_pre_alloc_groups(self) -> None: """Test aggregating pre-alloc groups from workers (xdist).""" config = MockConfig(generate_pre_alloc_groups=True) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] # Worker groups to aggregate group1 = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) group2 = PreAllocGroup( pre=Alloc().model_dump(mode="json"), environment=Environment().model_dump(mode="json"), network=Prague.name(), ) worker_groups = PreAllocGroups(root={"hash1": group1, "hash2": group2}) session.aggregate_pre_alloc_groups(worker_groups) assert "hash1" in session.pre_alloc_groups # type: ignore[operator] assert "hash2" in session.pre_alloc_groups # type: ignore[operator] def test_aggregate_pre_alloc_groups_conflict(self) -> None: """Test aggregating conflicting pre-alloc groups.""" config = MockConfig(generate_pre_alloc_groups=True) with patch("pytest_plugins.filler.filler.FixtureOutput", MockFixtureOutput): session = FillingSession.from_config(config) # type: ignore[arg-type] # Add initial group alloc1 = Alloc().model_dump(mode="json") group1 = PreAllocGroup( pre=alloc1, environment=Environment().model_dump(mode="json"), network=Prague.name(), ) session.update_pre_alloc_group("hash1", group1) # Try to aggregate conflicting group with same hash but different pre alloc2_dict = Alloc().model_dump(mode="json") alloc2_dict["0x1234567890123456789012345678901234567890"] = None # Make it different group2 = PreAllocGroup( pre=alloc2_dict, environment=Environment().model_dump(mode="json"), network=Prague.name(), ) worker_groups = PreAllocGroups(root={"hash1": group2}) with pytest.raises(ValueError, match="Conflicting pre-alloc groups"): session.aggregate_pre_alloc_groups(worker_groups) ================================================ FILE: src/pytest_plugins/filler/tests/test_format_selector.py ================================================ """Unit tests for the FormatSelector class.""" from typing import List, Set, Tuple from ethereum_test_fixtures import BaseFixture, FixtureFillingPhase, LabeledFixtureFormat from ..filler import FormatSelector, PhaseManager class TestFormatSelector: """Test cases for FormatSelector class.""" def test_init(self) -> None: """Test basic initialization.""" phase_manager = PhaseManager(current_phase=FixtureFillingPhase.FILL) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) assert format_selector.phase_manager is phase_manager def test_should_generate_pre_alloc_phase_with_pre_alloc_format(self) -> None: """Test pre-alloc phase with format that supports pre-alloc.""" phase_manager = PhaseManager(current_phase=FixtureFillingPhase.PRE_ALLOC_GENERATION) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) # MySub = type("MySub", (BaseClass,), {"MY_CLASSVAR": 42}) format_with_pre_alloc = type( "MockFixtureFormat", (BaseFixture,), { "format_phases": { FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL, } }, ) assert format_selector.should_generate(format_with_pre_alloc) def test_should_generate_pre_alloc_phase_without_pre_alloc_format(self) -> None: """Test pre-alloc phase with format that doesn't support pre-alloc.""" phase_manager = PhaseManager(current_phase=FixtureFillingPhase.PRE_ALLOC_GENERATION) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) format_without_pre_alloc = type( "MockFixtureFormat", (BaseFixture,), {"format_phases": {FixtureFillingPhase.FILL}}, ) assert not format_selector.should_generate(format_without_pre_alloc) def test_should_generate_single_phase_fill_only_format(self) -> None: """Test single-phase fill with fill-only format.""" phase_manager = PhaseManager(current_phase=FixtureFillingPhase.FILL) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) fill_only_format = type( "MockFixtureFormat", (BaseFixture,), {"format_phases": {FixtureFillingPhase.FILL}}, ) assert format_selector.should_generate(fill_only_format) def test_should_generate_single_phase_pre_alloc_format(self) -> None: """Test single-phase fill with format that supports pre-alloc.""" phase_manager = PhaseManager(current_phase=FixtureFillingPhase.FILL) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) format_with_pre_alloc = type( "MockFixtureFormat", (BaseFixture,), { "format_phases": { FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL, } }, ) # Should not generate because it needs pre-alloc but we're in single # phase assert not format_selector.should_generate(format_with_pre_alloc) def test_should_generate_phase2_with_pre_alloc_format(self) -> None: """ Test phase 2 (after pre-alloc) with format that supports pre-alloc. """ phase_manager = PhaseManager( current_phase=FixtureFillingPhase.FILL, previous_phases={FixtureFillingPhase.PRE_ALLOC_GENERATION}, ) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) format_with_pre_alloc = type( "MockFixtureFormat", (BaseFixture,), { "format_phases": { FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL, } }, ) # Should generate in phase 2 assert format_selector.should_generate(format_with_pre_alloc) def test_should_generate_phase2_without_pre_alloc_format(self) -> None: """Test phase 2 (after pre-alloc) with fill-only format.""" phase_manager = PhaseManager( current_phase=FixtureFillingPhase.FILL, previous_phases={FixtureFillingPhase.PRE_ALLOC_GENERATION}, ) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) fill_only_format = type( "MockFixtureFormat", (BaseFixture,), {"format_phases": {FixtureFillingPhase.FILL}}, ) # Should not generate because it doesn't need pre-alloc assert not format_selector.should_generate(fill_only_format) def test_should_generate_phase2_with_generate_all(self) -> None: """Test phase 2 with --generate-all-formats flag.""" phase_manager = PhaseManager( current_phase=FixtureFillingPhase.FILL, previous_phases={FixtureFillingPhase.PRE_ALLOC_GENERATION}, ) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=True) fill_only_format = type( "MockFixtureFormat", (BaseFixture,), {"format_phases": {FixtureFillingPhase.FILL}}, ) format_with_pre_alloc = type( "MockFixtureFormat", (BaseFixture,), { "format_phases": { FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL, } }, ) # With generate_all=True, both formats should be generated assert format_selector.should_generate(fill_only_format) assert format_selector.should_generate(format_with_pre_alloc) def test_should_generate_labeled_format(self) -> None: """Test with LabeledFixtureFormat wrapper.""" phase_manager = PhaseManager(current_phase=FixtureFillingPhase.FILL) format_selector = FormatSelector(phase_manager=phase_manager, generate_all_formats=False) fill_only_format = type( "MockFixtureFormat", (BaseFixture,), {"format_phases": {FixtureFillingPhase.FILL}}, ) labeled_format = LabeledFixtureFormat( fill_only_format, "mock_labeled_format", "A mock labeled fixture format", ) assert format_selector.should_generate(labeled_format) def test_comprehensive_scenarios(self) -> None: """ Test comprehensive scenarios covering all phase and format combinations. """ # Test matrix: (current_phase, previous_phases, format_phases, # generate_all) -> expected test_cases: List[ Tuple[ FixtureFillingPhase, Set[FixtureFillingPhase], Set[FixtureFillingPhase], bool, bool ] ] = [ # Pre-alloc generation phase ( FixtureFillingPhase.PRE_ALLOC_GENERATION, set(), {FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL}, False, True, ), ( FixtureFillingPhase.PRE_ALLOC_GENERATION, set(), {FixtureFillingPhase.FILL}, False, False, ), # Single-phase fill (FixtureFillingPhase.FILL, set(), {FixtureFillingPhase.FILL}, False, True), ( FixtureFillingPhase.FILL, set(), {FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL}, False, False, ), # Phase 2 without generate_all ( FixtureFillingPhase.FILL, {FixtureFillingPhase.PRE_ALLOC_GENERATION}, {FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL}, False, True, ), ( FixtureFillingPhase.FILL, {FixtureFillingPhase.PRE_ALLOC_GENERATION}, {FixtureFillingPhase.FILL}, False, False, ), # Phase 2 with generate_all ( FixtureFillingPhase.FILL, {FixtureFillingPhase.PRE_ALLOC_GENERATION}, {FixtureFillingPhase.PRE_ALLOC_GENERATION, FixtureFillingPhase.FILL}, True, True, ), ( FixtureFillingPhase.FILL, {FixtureFillingPhase.PRE_ALLOC_GENERATION}, {FixtureFillingPhase.FILL}, True, True, ), ] for current, previous, format_phases, gen_all, expected in test_cases: phase_manager = PhaseManager(current_phase=current, previous_phases=previous) format_selector = FormatSelector( phase_manager=phase_manager, generate_all_formats=gen_all ) fixture_format = type( "MockFixtureFormat", (BaseFixture,), {"format_phases": format_phases}, ) result = format_selector.should_generate(fixture_format) assert result == expected, ( f"Failed for phase={current}, previous={previous}, " f"format_phases={format_phases}, generate_all={gen_all}" ) ================================================ FILE: src/pytest_plugins/filler/tests/test_generate_all_formats.py ================================================ """Test the --generate-all-formats functionality.""" from typing import Any from pytest_plugins.filler.fixture_output import FixtureOutput def test_fixture_output_with_generate_all_formats() -> None: """ Test that FixtureOutput properly handles the should_generate_all_formats parameter. """ # Test with should_generate_all_formats=True fixture_output = FixtureOutput( output_path="/tmp/test", should_generate_all_formats=True, ) assert fixture_output.should_generate_all_formats is True # Test with should_generate_all_formats=False (default) fixture_output = FixtureOutput( output_path="/tmp/test", ) assert fixture_output.should_generate_all_formats is False def test_fixture_output_from_config_includes_generate_all_formats() -> None: """ Test that FixtureOutput.from_config includes the should_generate_all_formats option. """ # Mock pytest config object class MockConfig: def getoption(self, option: str) -> Any: option_values = { "output": "/tmp/test", "single_fixture_per_file": False, "clean": False, "generate_pre_alloc_groups": False, "use_pre_alloc_groups": False, "generate_all_formats": True, # Test the new option } return option_values.get(option, False) config = MockConfig() fixture_output = FixtureOutput.from_config( config # type: ignore ) assert fixture_output.should_generate_all_formats is True assert fixture_output.output_path.name == "test" def test_tarball_output_auto_enables_generate_all_formats() -> None: """ Test that tarball output (.tar.gz) automatically enables should_generate_all_formats. """ # Mock pytest config object with tarball output class MockConfig: def getoption(self, option: str) -> Any: option_values = { "output": "/tmp/fixtures.tar.gz", # Tarball output "single_fixture_per_file": False, "clean": False, "generate_pre_alloc_groups": False, "use_pre_alloc_groups": False, "generate_all_formats": False, # Explicitly False } return option_values.get(option, False) config = MockConfig() fixture_output = FixtureOutput.from_config( config # type: ignore ) # Should auto-enable should_generate_all_formats due to tarball output assert fixture_output.should_generate_all_formats is True assert fixture_output.is_tarball is True def test_regular_output_does_not_auto_enable_generate_all_formats() -> None: """ Test that regular directory output doesn't auto-enable should_generate_all_formats. """ # Mock pytest config object with regular output class MockConfig: def getoption(self, option: str) -> Any: option_values = { "output": "/tmp/fixtures", # Regular directory output "single_fixture_per_file": False, "clean": False, "generate_pre_alloc_groups": False, "use_pre_alloc_groups": False, "generate_all_formats": False, # Explicitly False } return option_values.get(option, False) config = MockConfig() fixture_output = FixtureOutput.from_config( config # type: ignore ) # Should remain False for regular directory output assert fixture_output.should_generate_all_formats is False assert fixture_output.is_tarball is False def test_explicit_generate_all_formats_overrides_tarball_auto_enable() -> None: """ Test that explicitly setting should_generate_all_formats=True works with tarball output. """ # Mock pytest config object with tarball output and explicit flag class MockConfig: def getoption(self, option: str) -> Any: option_values = { "output": "/tmp/fixtures.tar.gz", # Tarball output "single_fixture_per_file": False, "clean": False, "generate_pre_alloc_groups": False, "use_pre_alloc_groups": False, "generate_all_formats": True, # Explicitly True } return option_values.get(option, False) config = MockConfig() fixture_output = FixtureOutput.from_config( config # type: ignore ) # Should be True (both explicitly set and auto-enabled) assert fixture_output.should_generate_all_formats is True assert fixture_output.is_tarball is True ================================================ FILE: src/pytest_plugins/filler/tests/test_output_directory.py ================================================ """Test the filler plugin's output directory handling.""" from pathlib import Path from typing import Any, Callable from unittest.mock import patch import pytest from pytest import TempPathFactory from ethereum_clis import TransitionTool from ..fixture_output import FixtureOutput MINIMAL_TEST_FILE_NAME = "test_example.py" MINIMAL_TEST_CONTENTS = """ from ethereum_test_tools import Transaction def test_function(state_test, pre) -> None: tx = Transaction(to=0, gas_limit=21_000, sender=pre.fund_eoa()) state_test(pre=pre, post={}, tx=tx) """ @pytest.fixture def minimal_test_path(pytester: pytest.Pytester) -> Path: """ Minimal test file that's written to a file using pytester and ready to fill. """ tests_dir = pytester.mkdir("tests") test_file = tests_dir / MINIMAL_TEST_FILE_NAME test_file.write_text(MINIMAL_TEST_CONTENTS) return test_file @pytest.fixture(scope="module") def fill_fork_from() -> str: """Specify the value for `fill`'s `--from` argument.""" return "Paris" @pytest.fixture(scope="module") def fill_fork_until() -> str: """Specify the value for `fill`'s `--until` argument.""" return "Cancun" @pytest.fixture def run_fill( pytester: pytest.Pytester, minimal_test_path: Path, fill_fork_from: str, fill_fork_until: str, default_t8n: TransitionTool, ) -> Callable[..., pytest.RunResult]: """ Create a function to run the fill command with various output directory scenarios. """ def _run_fill( output_dir: Path, clean: bool = False, expect_failure: bool = False, disable_capture_output: bool = False, ) -> pytest.RunResult: """ Run the fill command with the specified output directory and clean flag. """ pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") args = [ "-c", "pytest-fill.ini", "-m", "(not blockchain_test_engine) and (not eip_version_check)", f"--from={fill_fork_from}", f"--until={fill_fork_until}", f"--output={str(output_dir)}", f"--t8n-server-url={default_t8n.server_url}", str(minimal_test_path), ] if clean: args.append("--clean") if disable_capture_output: # Required for tests on stdout args.append("-s") result = pytester.runpytest(*args) if expect_failure: assert result.ret != 0, "Fill command was expected to fail but succeeded" else: assert result.ret == 0, f"Fill command failed:\n{result.outlines}" return result return _run_fill def test_fill_to_empty_directory(tmp_path_factory: TempPathFactory, run_fill: Any) -> None: """Test filling to a new, empty directory.""" output_dir = tmp_path_factory.mktemp("empty_fixtures") run_fill(output_dir) assert any(output_dir.glob("state_tests/**/*.json")), "No fixture files were created" assert (output_dir / ".meta").exists(), "Metadata directory was not created" def test_fill_to_nonexistent_directory(tmp_path_factory: TempPathFactory, run_fill: Any) -> None: """Test filling to a nonexistent directory.""" base_dir = tmp_path_factory.mktemp("base") output_dir = base_dir / "nonexistent_fixtures" run_fill(output_dir) assert any(output_dir.glob("state_tests/**/*.json")), "No fixture files were created" assert (output_dir / ".meta").exists(), "Metadata directory was not created" def test_fill_to_nonempty_directory_fails( tmp_path_factory: TempPathFactory, run_fill: Any ) -> None: """Test filling to a non-empty directory fails without --clean.""" # Create a directory with a file output_dir = tmp_path_factory.mktemp("nonempty_fixtures") (output_dir / "existing_file.txt").write_text("This directory is not empty") result: pytest.RunResult = run_fill(output_dir, expect_failure=True) outlines = result.errlines assert isinstance(outlines, list) assert any("is not empty" in line for line in outlines), ( f"Expected error about non-empty directory: {outlines}" ) assert any("Use --clean" in line for line in outlines), ( f"Expected suggestion to use --clean flag: {outlines}" ) def test_fill_to_nonempty_directory_with_clean( tmp_path_factory: TempPathFactory, run_fill: Any ) -> None: """Test filling to a non-empty directory succeeds with --clean.""" # Create a directory with a file output_dir = tmp_path_factory.mktemp("nonempty_fixtures_clean") (output_dir / "existing_file.txt").write_text("This directory will be cleaned") run_fill(output_dir, clean=True) # Verify the existing file was removed assert not (output_dir / "existing_file.txt").exists(), "Existing file was not removed" assert any(output_dir.glob("state_tests/**/*.json")), "No fixture files were created" def test_fill_to_directory_with_meta_fails( tmp_path_factory: TempPathFactory, run_fill: Any ) -> None: """ Test filling to a directory with .meta subdirectory fails without --clean. """ # Create a directory with .meta output_dir = tmp_path_factory.mktemp("directory_with_meta") meta_dir = output_dir / ".meta" meta_dir.mkdir() (meta_dir / "existing_meta_file.txt").write_text("This is metadata") result: pytest.RunResult = run_fill(output_dir, expect_failure=True) assert any("is not empty" in line for line in result.errlines), ( "Expected error about non-empty directory" ) def test_fill_to_directory_with_meta_with_clean( tmp_path_factory: TempPathFactory, run_fill: Any ) -> None: """Test filling to a directory with .meta succeeds with --clean.""" # Create a directory with .meta output_dir = tmp_path_factory.mktemp("directory_with_meta_clean") meta_dir = output_dir / ".meta" meta_dir.mkdir() (meta_dir / "existing_meta_file.txt").write_text("This is metadata") run_fill(output_dir, clean=True) assert any(output_dir.glob("state_tests/**/*.json")), "No fixture files were created" assert not (meta_dir / "existing_meta_file.txt").exists(), "Existing meta file was not removed" def test_fill_stdout_always_works(tmp_path_factory: TempPathFactory, run_fill: Any) -> None: """Test filling to stdout always works regardless of output state.""" stdout_path = Path("stdout") # create a directory called "stdout" - it should not have any effect output_dir = tmp_path_factory.mktemp(stdout_path.name, numbered=False) assert str(output_dir.stem) == "stdout" meta_dir = output_dir / ".meta" meta_dir.mkdir() (meta_dir / "existing_meta_file.txt").write_text("This is metadata") result: pytest.RunResult = run_fill(stdout_path, disable_capture_output=True) assert any( "test_example.py::test_function[fork_Cancun-state_test]" in line for line in result.outlines ), f"Expected JSON output for state test: {result.outlines}" assert not any(stdout_path.glob("*.json")), "Fixture files were created when stdout is used" def test_fill_to_tarball_directory(tmp_path_factory: TempPathFactory, run_fill: Any) -> None: """Test filling to a tarball output.""" output_dir = tmp_path_factory.mktemp("tarball_fixtures") tarball_path = output_dir / "fixtures.tar.gz" run_fill(tarball_path) assert tarball_path.exists(), "Tarball was not created" extracted_dir = output_dir / "fixtures" assert extracted_dir.exists(), "Extracted directory doesn't exist" assert any(extracted_dir.glob("state_tests/**/*.json")), "No fixture files were created" # New tests for the is_master functionality def test_create_directories_skips_when_not_master() -> None: """ Test that create_directories skips operations when not the master process. """ fixture_output = FixtureOutput( output_path=Path("/fake/path"), clean=True, ) # Mock directory operations to ensure they aren't called with ( patch.object(FixtureOutput, "is_directory_empty") as mock_is_empty, patch.object(Path, "exists", return_value=True), patch.object(Path, "mkdir") as mock_mkdir, patch("shutil.rmtree") as mock_rmtree, ): # Call with is_master=False (worker process) fixture_output.create_directories(is_master=False) # Verify no directory operations occurred mock_is_empty.assert_not_called() mock_mkdir.assert_not_called() mock_rmtree.assert_not_called() def test_create_directories_operates_when_master() -> None: """ Test that create_directories performs operations when is the master process. """ fixture_output = FixtureOutput( output_path=Path("/fake/path"), clean=True, ) # Mock directory operations with ( patch.object(FixtureOutput, "is_directory_empty", return_value=True), patch.object(Path, "exists", return_value=True), patch.object(Path, "mkdir") as mock_mkdir, patch("shutil.rmtree") as mock_rmtree, ): # Call with is_master=True (master process) fixture_output.create_directories(is_master=True) # Verify directory operations occurred mock_rmtree.assert_called_once() mock_mkdir.assert_called() def test_create_directories_checks_empty_when_master() -> None: """Test that directory emptiness is checked only when is_master=True.""" fixture_output = FixtureOutput( output_path=Path("/fake/path"), clean=False, # Don't clean, so we'll check if empty ) # Mock directory operations with ( patch.object(FixtureOutput, "is_directory_empty", return_value=False) as mock_is_empty, patch.object( FixtureOutput, "get_directory_summary", return_value="not empty" ) as mock_summary, patch.object(Path, "exists", return_value=True), patch.object(Path, "mkdir"), ): # Call with is_master=True and expect an error about non-empty # directory with pytest.raises(ValueError, match="not empty"): fixture_output.create_directories(is_master=True) # Verify emptiness check was performed mock_is_empty.assert_called_once() mock_summary.assert_called_once() def test_stdout_skips_directory_operations_regardless_of_master() -> None: """ Test that stdout output skips directory operations regardless of is_master value. """ fixture_output = FixtureOutput( output_path=Path("stdout"), clean=True, ) # Mock directory operations to ensure they aren't called with ( patch.object(FixtureOutput, "is_directory_empty") as mock_is_empty, patch.object(Path, "exists") as mock_exists, patch.object(Path, "mkdir") as mock_mkdir, patch("shutil.rmtree") as mock_rmtree, ): # Should skip operations even with is_master=True fixture_output.create_directories(is_master=True) # Verify no directory operations occurred mock_is_empty.assert_not_called() mock_exists.assert_not_called() mock_mkdir.assert_not_called() mock_rmtree.assert_not_called() ================================================ FILE: src/pytest_plugins/filler/tests/test_phase_manager.py ================================================ """Unit tests for the PhaseManager class.""" from typing import Any import pytest from ethereum_test_fixtures import FixtureFillingPhase from ..filler import PhaseManager class MockConfig: """Mock pytest config for testing.""" def __init__( self, generate_pre_alloc_groups: bool = False, use_pre_alloc_groups: bool = False, generate_all_formats: bool = False, ) -> None: """Initialize with flag values.""" self._options = { "generate_pre_alloc_groups": generate_pre_alloc_groups, "use_pre_alloc_groups": use_pre_alloc_groups, "generate_all_formats": generate_all_formats, } def getoption(self, name: str, default: Any = None) -> Any: """Mock getoption method.""" return self._options.get(name, default) class TestPhaseManager: """Test cases for PhaseManager class.""" def test_init(self) -> None: """Test basic initialization.""" phase_manager = PhaseManager( current_phase=FixtureFillingPhase.FILL, previous_phases={FixtureFillingPhase.PRE_ALLOC_GENERATION}, ) assert phase_manager.current_phase == FixtureFillingPhase.FILL assert phase_manager.previous_phases == {FixtureFillingPhase.PRE_ALLOC_GENERATION} def test_from_config_normal_fill(self) -> None: """Test normal single-phase filling (no flags set).""" config = MockConfig() phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) assert phase_manager.current_phase == FixtureFillingPhase.FILL assert phase_manager.previous_phases == set() assert phase_manager.is_single_phase_fill assert not phase_manager.is_pre_alloc_generation assert not phase_manager.is_fill_after_pre_alloc def test_from_config_generate_pre_alloc(self) -> None: """Test phase 1: generate pre-allocation groups.""" config = MockConfig(generate_pre_alloc_groups=True) phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) assert phase_manager.current_phase == FixtureFillingPhase.PRE_ALLOC_GENERATION assert phase_manager.previous_phases == set() assert phase_manager.is_pre_alloc_generation assert not phase_manager.is_single_phase_fill assert not phase_manager.is_fill_after_pre_alloc def test_from_config_use_pre_alloc(self) -> None: """Test phase 2: use pre-allocation groups.""" config = MockConfig(use_pre_alloc_groups=True) phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) assert phase_manager.current_phase == FixtureFillingPhase.FILL assert phase_manager.previous_phases == {FixtureFillingPhase.PRE_ALLOC_GENERATION} assert phase_manager.is_fill_after_pre_alloc assert not phase_manager.is_pre_alloc_generation assert not phase_manager.is_single_phase_fill def test_from_config_generate_all_formats(self) -> None: """Generate_all_formats should trigger PRE_ALLOC_GENERATION phase.""" config = MockConfig(generate_all_formats=True) phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) assert phase_manager.current_phase == FixtureFillingPhase.PRE_ALLOC_GENERATION assert phase_manager.previous_phases == set() assert phase_manager.is_pre_alloc_generation assert not phase_manager.is_single_phase_fill assert not phase_manager.is_fill_after_pre_alloc def test_from_config_generate_all_and_pre_alloc(self) -> None: """Test both generate_all_formats and generate_pre_alloc_groups set.""" config = MockConfig(generate_pre_alloc_groups=True, generate_all_formats=True) phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) assert phase_manager.current_phase == FixtureFillingPhase.PRE_ALLOC_GENERATION assert phase_manager.previous_phases == set() assert phase_manager.is_pre_alloc_generation def test_from_config_use_pre_alloc_with_generate_all(self) -> None: """Test phase 2 with generate_all_formats (passed by CLI).""" config = MockConfig(use_pre_alloc_groups=True, generate_all_formats=True) phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) # use_pre_alloc_groups takes precedence assert phase_manager.current_phase == FixtureFillingPhase.FILL assert phase_manager.previous_phases == {FixtureFillingPhase.PRE_ALLOC_GENERATION} assert phase_manager.is_fill_after_pre_alloc def test_all_flag_combinations(self) -> None: """ Test all 8 possible flag combinations to ensure correct phase determination. """ test_cases = [ # (generate_pre_alloc, use_pre_alloc, generate_all) -> # (current_phase, has_previous) # Normal fill (False, False, False, FixtureFillingPhase.FILL, False), # Generate all triggers phase 1 (False, False, True, FixtureFillingPhase.PRE_ALLOC_GENERATION, False), (False, True, False, FixtureFillingPhase.FILL, True), # Phase 2 # Phase 2 with generate all (False, True, True, FixtureFillingPhase.FILL, True), (True, False, False, FixtureFillingPhase.PRE_ALLOC_GENERATION, False), # Phase 1 # Phase 1 with generate all (True, False, True, FixtureFillingPhase.PRE_ALLOC_GENERATION, False), # Invalid but use_pre_alloc wins (True, True, False, FixtureFillingPhase.FILL, True), # Invalid but use_pre_alloc wins (True, True, True, FixtureFillingPhase.FILL, True), ] for gen_pre, use_pre, gen_all, expected_phase, has_previous in test_cases: config = MockConfig( generate_pre_alloc_groups=gen_pre, use_pre_alloc_groups=use_pre, generate_all_formats=gen_all, ) phase_manager = PhaseManager.from_config( config # type: ignore[arg-type] ) assert phase_manager.current_phase == expected_phase, ( f"Failed for flags: generate_pre_alloc={gen_pre}, " f"use_pre_alloc={use_pre}, generate_all={gen_all}" ) if has_previous: assert FixtureFillingPhase.PRE_ALLOC_GENERATION in phase_manager.previous_phases else: assert phase_manager.previous_phases == set() if __name__ == "__main__": pytest.main([__file__, "-v"]) ================================================ FILE: src/pytest_plugins/filler/tests/test_pre_alloc.py ================================================ """Test the pre-allocation methods in the filler module.""" from itertools import count import pytest from ethereum_test_base_types import Address, TestPrivateKey, TestPrivateKey2 from ethereum_test_forks import Fork, Prague from ethereum_test_types import EOA from ethereum_test_vm import EVMCodeType from ethereum_test_vm import Opcodes as Op from ..pre_alloc import ( CONTRACT_ADDRESS_INCREMENTS_DEFAULT, CONTRACT_START_ADDRESS_DEFAULT, Alloc, AllocMode, ) def create_test_alloc( alloc_mode: AllocMode = AllocMode.PERMISSIVE, fork: Fork = Prague, evm_code_type: EVMCodeType = EVMCodeType.LEGACY, ) -> Alloc: """Create a test Alloc instance with default iterators.""" contract_iter = iter( Address(CONTRACT_START_ADDRESS_DEFAULT + (i * CONTRACT_ADDRESS_INCREMENTS_DEFAULT)) for i in count() ) eoa_iter = iter( EOA(key=TestPrivateKey + i if i != 1 else TestPrivateKey2, nonce=0).copy() for i in count() ) return Alloc( alloc_mode=alloc_mode, contract_address_iterator=contract_iter, eoa_iterator=eoa_iter, fork=fork, evm_code_type=evm_code_type, ) def test_alloc_deploy_contract_basic() -> None: """Test basic `Alloc.deploy_contract` functionality.""" pre = create_test_alloc() contract_1 = pre.deploy_contract(Op.SSTORE(0, 1) + Op.STOP) contract_2 = pre.deploy_contract(Op.SSTORE(0, 2) + Op.STOP) # Contracts should be deployed to different addresses assert contract_1 != contract_2 assert contract_1 in pre assert contract_2 in pre # Check that addresses follow expected pattern assert contract_1 == Address(CONTRACT_START_ADDRESS_DEFAULT) assert contract_2 == Address( CONTRACT_START_ADDRESS_DEFAULT + CONTRACT_ADDRESS_INCREMENTS_DEFAULT ) # Check accounts exist and have code pre_contract_1_account = pre[contract_1] pre_contract_2_account = pre[contract_2] assert pre_contract_1_account is not None assert pre_contract_2_account is not None assert pre_contract_1_account.code is not None assert pre_contract_2_account.code is not None assert len(pre_contract_1_account.code) > 0 assert len(pre_contract_2_account.code) > 0 def test_alloc_deploy_contract_with_balance() -> None: """Test `Alloc.deploy_contract` with balance.""" pre = create_test_alloc() balance = 10**18 contract = pre.deploy_contract(Op.STOP, balance=balance) assert contract in pre account = pre[contract] assert account is not None assert account.balance == balance def test_alloc_deploy_contract_with_storage() -> None: """Test `Alloc.deploy_contract` with storage.""" pre = create_test_alloc() storage = {0: 42, 1: 100} contract = pre.deploy_contract( Op.STOP, storage=storage, # type: ignore ) assert contract in pre account = pre[contract] assert account is not None assert account.storage is not None assert account.storage[0] == 42 assert account.storage[1] == 100 def test_alloc_fund_eoa_basic() -> None: """Test basic `Alloc.fund_eoa` functionality.""" pre = create_test_alloc() eoa_1 = pre.fund_eoa(10**18) eoa_2 = pre.fund_eoa(2 * 10**18) # EOAs should be different assert eoa_1 != eoa_2 assert eoa_1 in pre assert eoa_2 in pre # Check balances account_1 = pre[eoa_1] account_2 = pre[eoa_2] assert account_1 is not None assert account_2 is not None assert account_1.balance == 10**18 assert account_2.balance == 2 * 10**18 def test_alloc_fund_address() -> None: """Test `Alloc.fund_address` functionality.""" pre = create_test_alloc() address = Address(0x1234567890123456789012345678901234567890) amount = 5 * 10**18 pre.fund_address(address, amount) assert address in pre account = pre[address] assert account is not None assert account.balance == amount def test_alloc_empty_account() -> None: """Test `Alloc.empty_account` functionality.""" pre = create_test_alloc() empty_addr = pre.empty_account() # Check that we get a valid address (address generation works) assert isinstance(empty_addr, Address) # Note: empty_account() only returns address, doesn't add to pre @pytest.mark.parametrize("evm_code_type", [EVMCodeType.LEGACY, EVMCodeType.EOF_V1]) def test_alloc_deploy_contract_code_types(evm_code_type: EVMCodeType) -> None: """Test `Alloc.deploy_contract` with different EVM code types.""" pre = create_test_alloc(evm_code_type=evm_code_type) contract = pre.deploy_contract(Op.SSTORE(0, 1) + Op.STOP) assert contract in pre account = pre[contract] assert account is not None assert account.code is not None if evm_code_type == EVMCodeType.LEGACY: # Legacy bytecode should be raw opcodes assert account.code == bytes.fromhex("600160005500") elif evm_code_type == EVMCodeType.EOF_V1: # EOF v1 should have the EOF container header assert account.code.startswith(b"\xef\x00\x01") @pytest.mark.parametrize("alloc_mode", [AllocMode.STRICT, AllocMode.PERMISSIVE]) def test_alloc_modes(alloc_mode: AllocMode) -> None: """Test different allocation modes.""" pre = create_test_alloc(alloc_mode=alloc_mode) assert pre._alloc_mode == alloc_mode # Test that we can deploy contracts regardless of mode contract = pre.deploy_contract(Op.STOP) assert contract in pre def test_global_address_allocation_consistency() -> None: """Test that address allocation produces consistent results.""" # Create two alloc instances with same parameters pre1 = create_test_alloc() pre2 = create_test_alloc() # Deploy contracts and check they get the same addresses contract1_pre1 = pre1.deploy_contract(Op.STOP) contract1_pre2 = pre2.deploy_contract(Op.STOP) # Should get same starting address assert contract1_pre1 == contract1_pre2 assert contract1_pre1 == Address(CONTRACT_START_ADDRESS_DEFAULT) # Second contracts should also match contract2_pre1 = pre1.deploy_contract(Op.STOP) contract2_pre2 = pre2.deploy_contract(Op.STOP) assert contract2_pre1 == contract2_pre2 assert contract2_pre1 == Address( CONTRACT_START_ADDRESS_DEFAULT + CONTRACT_ADDRESS_INCREMENTS_DEFAULT ) def test_alloc_deploy_contract_nonce() -> None: """Test that deployed contracts have correct nonce.""" pre = create_test_alloc() contract = pre.deploy_contract(Op.STOP) account = pre[contract] assert account is not None assert account.nonce == 1 # Deployed contracts should have nonce 1 def test_alloc_fund_eoa_returns_eoa_object() -> None: """Test that fund_eoa returns proper EOA object with private key access.""" pre = create_test_alloc() eoa = pre.fund_eoa(10**18) # Should be able to access private key (EOA object) assert hasattr(eoa, "key") assert eoa.key is not None # Should also be in pre-allocation assert eoa in pre account = pre[eoa] assert account is not None assert account.balance == 10**18 def test_alloc_multiple_contracts_sequential_addresses() -> None: """Test that multiple contracts get sequential addresses.""" pre = create_test_alloc() contracts = [] for i in range(5): contract = pre.deploy_contract(Op.PUSH1(i) + Op.STOP) contracts.append(contract) # Check addresses are sequential for i, contract in enumerate(contracts): expected_addr = Address( CONTRACT_START_ADDRESS_DEFAULT + (i * CONTRACT_ADDRESS_INCREMENTS_DEFAULT) ) assert contract == expected_addr assert contract in pre ================================================ FILE: src/pytest_plugins/filler/tests/test_prealloc_group.py ================================================ """Test the pre_alloc_group marker functionality.""" import textwrap from pathlib import Path from typing import Any, ClassVar, Dict, List from unittest.mock import Mock import pytest from ethereum_clis import TransitionTool from ethereum_test_fixtures import BaseFixture, PreAllocGroups from ethereum_test_forks import Fork, Prague from ethereum_test_specs.base import BaseTest from ethereum_test_types import Alloc, Environment from ..filler import default_output_directory class MockTest(BaseTest): """Mock test class for testing.""" pre: Alloc genesis_environment: Environment def __init__( self, pre: Alloc, genesis_environment: Environment, request: Mock | None = None ) -> None: """Initialize mock test.""" super().__init__( # type: ignore pre=pre, genesis_environment=genesis_environment, ) self._request = request def generate(self, *args: Any, **kwargs: Any) -> BaseFixture: """Mock generate method.""" raise NotImplementedError("This is a mock test class") def get_genesis_environment(self, fork: Fork) -> Environment: """Return the genesis environment.""" return self.genesis_environment.set_fork_requirements(fork) def test_pre_alloc_group_separate() -> None: """Test that pre_alloc_group("separate") forces unique grouping.""" # Create mock environment and pre-allocation env = Environment() pre = Alloc() fork = Prague # Create test without marker test1 = MockTest(pre=pre, genesis_environment=env) hash1 = test1.compute_pre_alloc_group_hash(fork) # Create test with "separate" marker mock_request = Mock() mock_request.node = Mock() mock_request.node.nodeid = "test_module.py::test_function" mock_marker = Mock() mock_marker.args = ("separate",) mock_request.node.get_closest_marker = Mock(return_value=mock_marker) test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request) hash2 = test2.compute_pre_alloc_group_hash(fork) # Hashes should be different due to "separate" marker assert hash1 != hash2 # Create another test without marker - should match first test test3 = MockTest(pre=pre, genesis_environment=env) hash3 = test3.compute_pre_alloc_group_hash(fork) assert hash1 == hash3 def test_pre_alloc_group_custom_salt() -> None: """Test that custom group names create consistent grouping.""" env = Environment() pre = Alloc() fork = Prague # Create test with custom group "eip1234" mock_request1 = Mock() mock_request1.node = Mock() mock_request1.node.nodeid = "test_module.py::test_function1" mock_marker1 = Mock() mock_marker1.args = ("eip1234",) mock_request1.node.get_closest_marker = Mock(return_value=mock_marker1) test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request1) hash1 = test1.compute_pre_alloc_group_hash(fork) # Create another test with same custom group "eip1234" mock_request2 = Mock() mock_request2.node = Mock() mock_request2.node.nodeid = "test_module.py::test_function2" # Different nodeid mock_marker2 = Mock() mock_marker2.args = ("eip1234",) # Same group mock_request2.node.get_closest_marker = Mock(return_value=mock_marker2) test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request2) hash2 = test2.compute_pre_alloc_group_hash(fork) # Hashes should be the same - both in "eip1234" group assert hash1 == hash2 # Create test with different custom group "eip5678" mock_request3 = Mock() mock_request3.node = Mock() mock_request3.node.nodeid = "test_module.py::test_function3" mock_marker3 = Mock() mock_marker3.args = ("eip5678",) # Different group mock_request3.node.get_closest_marker = Mock(return_value=mock_marker3) test3 = MockTest(pre=pre, genesis_environment=env, request=mock_request3) hash3 = test3.compute_pre_alloc_group_hash(fork) # Hash should be different - different custom group assert hash1 != hash3 assert hash2 != hash3 def test_pre_alloc_group_separate_different_nodeids() -> None: """Test that different tests with "separate" get different hashes.""" env = Environment() pre = Alloc() fork = Prague # Create test with "separate" and nodeid1 mock_request1 = Mock() mock_request1.node = Mock() mock_request1.node.nodeid = "test_module.py::test_function1" mock_marker1 = Mock() mock_marker1.args = ("separate",) mock_request1.node.get_closest_marker = Mock(return_value=mock_marker1) test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request1) hash1 = test1.compute_pre_alloc_group_hash(fork) # Create test with "separate" and nodeid2 mock_request2 = Mock() mock_request2.node = Mock() mock_request2.node.nodeid = "test_module.py::test_function2" mock_marker2 = Mock() mock_marker2.args = ("separate",) mock_request2.node.get_closest_marker = Mock(return_value=mock_marker2) test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request2) hash2 = test2.compute_pre_alloc_group_hash(fork) # Hashes should be different due to different nodeids assert hash1 != hash2 def test_no_pre_alloc_group_marker() -> None: """Test normal grouping without pre_alloc_group marker.""" env = Environment() pre = Alloc() fork = Prague # Create test without marker but with request object mock_request = Mock() mock_request.node = Mock() mock_request.node.nodeid = "test_module.py::test_function" mock_request.node.get_closest_marker = Mock(return_value=None) # No marker test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request) hash1 = test1.compute_pre_alloc_group_hash(fork) # Create test without any request test2 = MockTest(pre=pre, genesis_environment=env) hash2 = test2.compute_pre_alloc_group_hash(fork) # Hashes should be the same - both have no marker assert hash1 == hash2 def test_pre_alloc_group_with_reason() -> None: """Test that reason kwarg is accepted but doesn't affect grouping.""" env = Environment() pre = Alloc() fork = Prague # Create test with custom group and reason mock_request1 = Mock() mock_request1.node = Mock() mock_request1.node.nodeid = "test_module.py::test_function1" mock_marker1 = Mock() mock_marker1.args = ("hardcoded_addresses",) mock_marker1.kwargs = {"reason": "Uses legacy hardcoded addresses for backwards compatibility"} mock_request1.node.get_closest_marker = Mock(return_value=mock_marker1) test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request1) hash1 = test1.compute_pre_alloc_group_hash(fork) # Create another test with same group but different reason mock_request2 = Mock() mock_request2.node = Mock() mock_request2.node.nodeid = "test_module.py::test_function2" mock_marker2 = Mock() mock_marker2.args = ("hardcoded_addresses",) mock_marker2.kwargs = {"reason": "Different reason but same group"} mock_request2.node.get_closest_marker = Mock(return_value=mock_marker2) test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request2) hash2 = test2.compute_pre_alloc_group_hash(fork) # Hashes should be the same - reason doesn't affect grouping assert hash1 == hash2 class FormattedTest: """Represents a single formatted test.""" kwargs: Dict[str, str] template: ClassVar[str] def __init__(self, **kwargs: str) -> None: # noqa: D107 self.kwargs = kwargs def format(self) -> str: # noqa: D102 return self.template.format(**self.kwargs) class StateTest(FormattedTest): # noqa: D101 template: ClassVar[str] = textwrap.dedent( """\ import pytest from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction ) from ethereum_test_vm import Opcodes as Op @pytest.mark.valid_from("Istanbul") def test_chainid(state_test: StateTestFiller, pre: Alloc) -> None: contract_address = pre.deploy_contract(Op.SSTORE(1, Op.CHAINID) + Op.STOP) sender = pre.fund_eoa() tx = Transaction( ty=0x0, chain_id=0x01, to=contract_address, gas_limit=100_000, sender=sender, ) post = {{ contract_address: Account(storage={{"0x01": "0x01"}}), }} state_test(env={env}, pre=pre, post=post, tx=tx) """ ) class BlockchainTest(FormattedTest): # noqa: D101 template: ClassVar[str] = textwrap.dedent( """\ import pytest from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Environment, Transaction ) from ethereum_test_vm import Opcodes as Op @pytest.mark.valid_from("Istanbul") def test_chainid_blockchain(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: contract_address = pre.deploy_contract(Op.SSTORE(1, Op.CHAINID) + Op.STOP) sender = pre.fund_eoa() tx = Transaction( ty=0x0, chain_id=0x01, to=contract_address, gas_limit=100_000, sender=sender, ) post = {{ contract_address: Account(storage={{"0x01": "0x01"}}), }} blockchain_test( genesis_environment={env}, pre=pre, post=post, blocks=[Block(txs=[tx])], ) """ ) @pytest.mark.parametrize( "test_definitions,expected_different_pre_alloc_groups", [ # Environment fields not affecting the pre-alloc groups pytest.param( [ BlockchainTest(env="Environment()"), StateTest(env="Environment()"), ], 1, id="different_types_default_environment", ), pytest.param( [ StateTest(env="Environment(fee_recipient=pre.fund_eoa(amount=0))"), StateTest(env="Environment(fee_recipient=1)"), StateTest(env="Environment(fee_recipient=2)"), ], 1, id="different_fee_recipients", ), pytest.param( [ StateTest(env="Environment(fee_recipient=1)"), BlockchainTest(env="Environment(fee_recipient=1)"), ], 2, id="different_fee_recipients_different_types", ), pytest.param( [ StateTest(env="Environment(prev_randao=1)"), StateTest(env="Environment(prev_randao=2)"), ], 1, id="different_prev_randaos", ), pytest.param( [ StateTest(env="Environment(prev_randao=1)"), BlockchainTest(env="Environment(prev_randao=2)"), ], 2, id="different_prev_randaos_different_types", ), pytest.param( [ StateTest(env="Environment(timestamp=1)"), StateTest(env="Environment(timestamp=2)"), ], 1, id="different_timestamps", ), pytest.param( [ StateTest(env="Environment(extra_data='0x01')"), StateTest(env="Environment(extra_data='0x02')"), ], 1, id="different_extra_data", ), pytest.param( [ StateTest(env="Environment(extra_data='0x01')"), BlockchainTest(env="Environment(extra_data='0x02')"), ], 2, id="different_extra_data_different_types", marks=pytest.mark.xfail( reason="Extra data is excluded=True in the Environment model, so it does not " "propagate correctly to the genesis header without a lot of code changes.", ), ), # Environment fields affecting the pre-alloc groups pytest.param( [ StateTest(env="Environment(gas_limit=100_000_000)"), StateTest(env="Environment(gas_limit=200_000_000)"), ], 2, id="different_gas_limits", ), pytest.param( [ StateTest(env="Environment(number=10)"), StateTest(env="Environment(number=20)"), ], 2, id="different_block_numbers", ), pytest.param( [ StateTest(env="Environment(base_fee_per_gas=10)"), StateTest(env="Environment(base_fee_per_gas=20)"), ], 2, id="different_base_fee", ), pytest.param( [ StateTest(env="Environment(excess_blob_gas=10)"), StateTest(env="Environment(excess_blob_gas=20)"), ], 2, id="different_excess_blob_gas", ), ], ) def test_pre_alloc_grouping_by_test_type( pytester: pytest.Pytester, default_t8n: TransitionTool, test_definitions: List[FormattedTest], expected_different_pre_alloc_groups: int, ) -> None: """ Test pre-alloc grouping when filling state tests, and the effect of the `state_test.env`. """ tests_dir = Path(pytester.mkdir("tests")) for i, test in enumerate(test_definitions): test_module = tests_dir / f"test_{i}.py" test_module.write_text(test.format()) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") args = [ "-c", "pytest-fill.ini", "--generate-pre-alloc-groups", "--fork=Cancun", "--t8n-server-url", ] assert default_t8n.server_url is not None args.append(default_t8n.server_url) result = pytester.runpytest(*args) result.assert_outcomes( passed=len(test_definitions), failed=0, skipped=0, errors=0, ) output_dir = ( Path(default_output_directory()).absolute() / "blockchain_tests_engine_x" / "pre_alloc" ) assert output_dir.exists() groups = PreAllocGroups.from_folder(output_dir, lazy_load=False) if ( len([f for f in output_dir.iterdir() if f.name.endswith(".json")]) != expected_different_pre_alloc_groups ): error_message = ( f"Expected {expected_different_pre_alloc_groups} different pre-alloc groups, " f"but got {len(groups)}" ) for group_hash, group in groups.items(): error_message += f"\n{group_hash}: \n" error_message += f"tests: {group.test_ids}\n" error_message += ( f"env: {group.environment.model_dump_json(indent=2, exclude_none=True)}\n" ) raise AssertionError(error_message) for group_hash, group in groups.items(): assert group.environment.fee_recipient == group.genesis.fee_recipient, ( f"Fee recipient mismatch for group {group_hash}: {group.environment.fee_recipient} != " f"{group.genesis.fee_recipient}" ) assert group.environment.prev_randao == group.genesis.prev_randao, ( f"Prev randao mismatch for group {group_hash}: {group.environment.prev_randao} != " f"{group.genesis.prev_randao}" ) assert group.environment.extra_data == group.genesis.extra_data, ( f"Extra data mismatch for group {group_hash}: {group.environment.extra_data} != " f"{group.genesis.extra_data}" ) assert group.environment.number == group.genesis.number, ( f"Number mismatch for group {group_hash}: {group.environment.number} != " f"{group.genesis.number}" ) assert group.environment.timestamp == group.genesis.timestamp, ( f"Timestamp mismatch for group {group_hash}: {group.environment.timestamp} != " f"{group.genesis.timestamp}" ) assert group.environment.difficulty == group.genesis.difficulty, ( f"Difficulty mismatch for group {group_hash}: {group.environment.difficulty} != " f"{group.genesis.difficulty}" ) assert group.environment.gas_limit == group.genesis.gas_limit, ( f"Gas limit mismatch for group {group_hash}: {group.environment.gas_limit} != " f"{group.genesis.gas_limit}" ) assert group.environment.base_fee_per_gas == group.genesis.base_fee_per_gas, ( f"Base fee per gas mismatch for group {group_hash}: " f"{group.environment.base_fee_per_gas} != " f"{group.genesis.base_fee_per_gas}" ) assert group.environment.excess_blob_gas == group.genesis.excess_blob_gas, ( f"Excess blob gas mismatch for group {group_hash}: " f"{group.environment.excess_blob_gas} != " f"{group.genesis.excess_blob_gas}" ) assert group.environment.blob_gas_used == group.genesis.blob_gas_used, ( f"Blob gas used mismatch for group {group_hash}: {group.environment.blob_gas_used} != " f"{group.genesis.blob_gas_used}" ) assert ( group.environment.parent_beacon_block_root == group.genesis.parent_beacon_block_root ), ( f"Parent beacon block root mismatch for group {group_hash}: " f"{group.environment.parent_beacon_block_root} != " f"{group.genesis.parent_beacon_block_root}" ) ================================================ FILE: src/pytest_plugins/filler/tests/test_prealloc_group_usage_example.py ================================================ """ Example usage of the pre_alloc_group marker. This file demonstrates how tests would use the marker in practice. Note: This is just documentation, not executable tests. """ import pytest # Example 1: Test that deploys beacon root contract with hardcoded deployer @pytest.mark.pre_alloc_group( "separate", reason="Deploys beacon root contract using actual hardcoded deployer address", ) def test_beacon_root_contract_deployment() -> None: """ Test beacon root contract deployment with the official deployer address. """ # This test uses the actual beacon root deployer address (e.g., # 0x4242...4242) which could conflict with dynamically allocated addresses # in other tests pass # Example 2: Test with custom consolidation contract @pytest.mark.pre_alloc_group( "custom_consolidation", reason="Deploys custom consolidation contract with different bytecode", ) def test_custom_consolidation_contract() -> None: """Test that deploys a modified consolidation contract.""" # This test deploys a consolidation contract with custom bytecode that # differs from the standard implementation, requiring isolation from other # consolidation tests pass # Example 3: Group related tests that need custom contracts @pytest.mark.pre_alloc_group( "custom_consolidation", reason="Uses same custom consolidation contract setup", ) def test_custom_consolidation_edge_cases() -> None: """Test edge cases with the custom consolidation contract.""" # This test can share the pre-allocation with # test_custom_consolidation_contract since they both use the same custom # contract setup pass # Example 4: Test without marker - uses default grouping def test_normal_consolidation() -> None: """Test that uses standard consolidation contract and default grouping.""" # This test uses dynamic allocation and standard contracts, # so it can be grouped normally with other tests pass ================================================ FILE: src/pytest_plugins/filler/tests/test_slow_marker_pre_alloc.py ================================================ """Test automatic pre_alloc_group marker application to slow tests.""" import textwrap from typing import Any from ethereum_clis import TransitionTool def test_slow_marker_gets_pre_alloc_group(pytester: Any, default_t8n: TransitionTool) -> None: """ Test that slow tests without benchmark marker get pre_alloc_group automatically. """ test_module = textwrap.dedent( """\ import pytest from ethereum_test_tools import Alloc, StateTestFiller, Transaction @pytest.mark.slow @pytest.mark.valid_from("Cancun") def test_slow_without_benchmark(state_test: StateTestFiller, pre: Alloc) -> None: sender = pre.fund_eoa() contract = pre.deploy_contract(code=b"") tx = Transaction(sender=sender, to=contract, gas_limit=100000) state_test(pre=pre, tx=tx, post={}) """ ) # Create test directory structure tests_dir = pytester.mkdir("tests") cancun_dir = tests_dir / "cancun" cancun_dir.mkdir() test_file = cancun_dir / "test_slow.py" test_file.write_text(test_module) # Copy the pytest configuration pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Run pytest with our plugin and check collection args = [ "-c", "pytest-fill.ini", "--collect-only", "-q", "--t8n-server-url", default_t8n.server_url, "tests/cancun/test_slow.py", ] result = pytester.runpytest(*args) # The test should be collected successfully result.stdout.fnmatch_lines(["*test_slow_without_benchmark*"]) def test_slow_with_benchmark_no_pre_alloc(pytester: Any, default_t8n: TransitionTool) -> None: """ Test that slow tests WITH benchmark marker do NOT get pre_alloc_group. """ test_module = textwrap.dedent( """\ import pytest from ethereum_test_tools import Alloc, StateTestFiller, Transaction @pytest.mark.slow @pytest.mark.benchmark @pytest.mark.valid_from("Cancun") def test_slow_with_benchmark(state_test: StateTestFiller, pre: Alloc) -> None: sender = pre.fund_eoa() contract = pre.deploy_contract(code=b"") tx = Transaction(sender=sender, to=contract, gas_limit=100000) state_test(pre=pre, tx=tx, post={}) """ ) # Create test directory structure tests_dir = pytester.mkdir("tests") benchmark_dir = tests_dir / "benchmark" benchmark_dir.mkdir() test_file = benchmark_dir / "test_slow_benchmark.py" test_file.write_text(test_module) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Run with collection only to verify test is collected args = [ "-c", "pytest-fill.ini", "--collect-only", "-q", "--t8n-server-url", default_t8n.server_url, "tests/benchmark/test_slow_benchmark.py", ] result = pytester.runpytest(*args) # The test should be collected result.stdout.fnmatch_lines(["*test_slow_with_benchmark*"]) def test_slow_with_existing_pre_alloc_unchanged( pytester: Any, default_t8n: TransitionTool ) -> None: """ Test that slow tests with existing pre_alloc_group marker are unchanged. """ test_module = textwrap.dedent( """\ import pytest from ethereum_test_tools import Alloc, StateTestFiller, Transaction @pytest.mark.slow @pytest.mark.pre_alloc_group("custom_group", reason="Custom reason") @pytest.mark.valid_from("Cancun") def test_slow_with_existing_pre_alloc(state_test: StateTestFiller, pre: Alloc) -> None: sender = pre.fund_eoa() contract = pre.deploy_contract(code=b"") tx = Transaction(sender=sender, to=contract, gas_limit=100000) state_test(pre=pre, tx=tx, post={}) """ ) # Create test directory structure tests_dir = pytester.mkdir("tests") cancun_dir = tests_dir / "cancun" cancun_dir.mkdir() test_file = cancun_dir / "test_existing_pre_alloc.py" test_file.write_text(test_module) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Run with collection only to verify test is collected args = [ "-c", "pytest-fill.ini", "--collect-only", "-q", "--t8n-server-url", default_t8n.server_url, "tests/cancun/test_existing_pre_alloc.py", ] result = pytester.runpytest(*args) # The test should be collected successfully result.stdout.fnmatch_lines(["*test_slow_with_existing_pre_alloc*"]) def test_non_slow_no_pre_alloc(pytester: Any, default_t8n: TransitionTool) -> None: """Test that tests without slow marker do not get pre_alloc_group.""" test_module = textwrap.dedent( """\ import pytest from ethereum_test_tools import Alloc, StateTestFiller, Transaction @pytest.mark.valid_from("Cancun") def test_normal_speed(state_test: StateTestFiller, pre: Alloc) -> None: sender = pre.fund_eoa() contract = pre.deploy_contract(code=b"") tx = Transaction(sender=sender, to=contract, gas_limit=100000) state_test(pre=pre, tx=tx, post={}) """ ) # Create test directory structure tests_dir = pytester.mkdir("tests") cancun_dir = tests_dir / "cancun" cancun_dir.mkdir() test_file = cancun_dir / "test_normal.py" test_file.write_text(test_module) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Run with collection only to verify test is collected args = [ "-c", "pytest-fill.ini", "--collect-only", "-q", "--t8n-server-url", default_t8n.server_url, "tests/cancun/test_normal.py", ] result = pytester.runpytest(*args) # The test should be collected successfully result.stdout.fnmatch_lines(["*test_normal_speed*"]) def test_integration_with_fill(pytester: Any, default_t8n: TransitionTool) -> None: """ Integration test using actual fill command to verify marker application. """ test_module = textwrap.dedent( """\ import pytest from ethereum_test_tools import ( Account, Alloc, StateTestFiller, Transaction, ) @pytest.mark.slow @pytest.mark.valid_from("Cancun") def test_slow_for_integration(state_test: StateTestFiller, pre: Alloc) -> None: '''Test that should get pre_alloc_group marker automatically.''' sender = pre.fund_eoa() contract = pre.deploy_contract(code=b"") tx = Transaction(sender=sender, to=contract, gas_limit=100000) state_test(pre=pre, tx=tx, post={}) """ ) # Create proper directory structure for tests tests_dir = pytester.mkdir("tests") cancun_tests_dir = tests_dir / "cancun" cancun_tests_dir.mkdir() slow_test_dir = cancun_tests_dir / "slow_test_module" slow_test_dir.mkdir() test_module_file = slow_test_dir / "test_slow_integration.py" test_module_file.write_text(test_module) # Copy pytest configuration pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Run fill command args = [ "-c", "pytest-fill.ini", "-v", "--no-html", "--t8n-server-url", default_t8n.server_url, "tests/cancun/slow_test_module/", ] # The test generates 3 formats (state_test, blockchain_test, # blockchain_test_engine). # But it also runs on multiple forks (Cancun and # Prague), so expect more tests. # This is fine - the important thing is that they all pass. result = pytester.runpytest(*args) # Verify that tests passed (don't care about exact count due to fork # variations) assert result.ret == 0, "Fill command should succeed" ================================================ FILE: src/pytest_plugins/filler/tests/test_verify_sync_marker.py ================================================ """Test blockchain sync fixture generation with verify_sync pytest marker.""" import textwrap from typing import Any from ethereum_clis import TransitionTool test_module_with_verify_sync = textwrap.dedent( """\ import pytest from ethereum_test_tools import ( Account, BlockException, Block, Environment, Header, TestAddress, Transaction, ) TEST_ADDRESS = Account(balance=1_000_000) @pytest.mark.valid_at("Cancun") def test_verify_sync_default(blockchain_test) -> None: blockchain_test( pre={TestAddress: TEST_ADDRESS}, post={}, blocks=[Block(txs=[Transaction()])] ) @pytest.mark.valid_at("Cancun") @pytest.mark.verify_sync def test_verify_sync_with_marker(blockchain_test) -> None: blockchain_test( pre={TestAddress: TEST_ADDRESS}, post={}, blocks=[Block(txs=[Transaction()])] ) @pytest.mark.valid_at("Cancun") @pytest.mark.parametrize( "has_exception", [ pytest.param(False, id="no_exception", marks=pytest.mark.verify_sync), pytest.param( True, id="with_exception", marks=pytest.mark.exception_test ), ] ) def test_verify_sync_with_param_marks(blockchain_test, has_exception) -> None: blockchain_test( pre={TestAddress: TEST_ADDRESS}, post={}, blocks=[ Block( txs=[Transaction()], rlp_modifier=Header(gas_limit=0) if has_exception else None, exception=BlockException.INCORRECT_BLOCK_FORMAT if has_exception else None, ) ], ) """ ) def test_verify_sync_marker( pytester: Any, default_t8n: TransitionTool, ) -> None: """ Test blockchain sync fixture generation with verify_sync marker. The test module has 3 test functions (4 test cases with parametrization): - test_verify_sync_default: generates all formats except sync (no verify_sync marker) - test_verify_sync_with_marker: generates all formats including sync (has verify_sync marker) - test_verify_sync_with_param_marks: tests parametrized marks with verify_sync (2 cases) Each test generates fixture formats: - BlockchainFixture (always) - BlockchainEngineFixture (always) - BlockchainEngineSyncFixture (only when marked with verify_sync marker) Expected outcomes: - 4 test cases total - Each generates BlockchainFixture (4) and BlockchainEngineFixture (4) = 8 fixtures - Sync fixtures: - test_verify_sync_with_marker: 1 sync fixture ✓ - test_verify_sync_with_param_marks[no_exception]: 1 sync fixture ✓ - Total sync fixtures: 2 - Not generated (due to exception_test marker): - test_verify_sync_with_param_marks[with_exception]: sync fixture not generated Final counts: - Passed: 8 (base fixtures) + 2 (sync fixtures) = 10 passed - Skipped: 0 skipped - Failed: 0 failed """ # Create proper directory structure for tests tests_dir = pytester.mkdir("tests") cancun_tests_dir = tests_dir / "cancun" cancun_tests_dir.mkdir() verify_sync_test_dir = cancun_tests_dir / "verify_sync_test_module" verify_sync_test_dir.mkdir() test_module = verify_sync_test_dir / "test_verify_sync_marker.py" test_module.write_text(test_module_with_verify_sync) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") # Add the test directory to the arguments args = [ "-c", "pytest-fill.ini", "-v", "--no-html", "--t8n-server-url", default_t8n.server_url, "tests/cancun/verify_sync_test_module/", ] expected_outcomes = {"passed": 10, "failed": 0, "skipped": 0, "errors": 0} result = pytester.runpytest(*args) result.assert_outcomes(**expected_outcomes) ================================================ FILE: src/pytest_plugins/filler/witness.py ================================================ """ Pytest plugin for witness functionality. Provides --witness command-line option that checks for the witness-filler tool in PATH and generates execution witness data for blockchain test fixtures when enabled. """ import shutil import subprocess from typing import Callable, List import pytest from ethereum_test_base_types import EthereumTestRootModel from ethereum_test_fixtures.blockchain import BlockchainFixture, FixtureBlock, WitnessChunk from ethereum_test_forks import Paris class WitnessFillerResult(EthereumTestRootModel[List[WitnessChunk]]): """ Model that defines the expected result from the `witness-filler` command. """ root: List[WitnessChunk] class Merge(Paris): """ Paris fork that serializes as 'Merge' for witness-filler compatibility. IMPORTANT: This class MUST be named 'Merge' (not 'MergeForWitness' or similar) because the class name is used directly in Pydantic serialization, and witness-filler expects exactly 'Merge' for this fork. """ pass def pytest_addoption(parser: pytest.Parser) -> None: """Add witness command-line options to pytest.""" witness_group = parser.getgroup("witness", "Arguments for witness functionality") witness_group.addoption( "--witness", "--witness-the-fitness", action="store_true", dest="witness", default=False, help=( "Generate execution witness data for blockchain test fixtures using the " "witness-filler tool (must be installed separately)." ), ) def pytest_configure(config: pytest.Config) -> None: """ Pytest hook called after command line options have been parsed. If --witness is enabled, checks that the witness-filler tool is available in PATH. """ if config.getoption("witness"): # Check if witness-filler binary is available in PATH if not shutil.which("witness-filler"): pytest.exit( "witness-filler tool not found in PATH. Please build and install witness-filler " "from https://github.com/kevaundray/reth.git before using --witness flag.\n" "Example: cargo install --git https://github.com/kevaundray/reth.git " "witness-filler", 1, ) @pytest.fixture def witness_generator( request: pytest.FixtureRequest, ) -> Callable[[BlockchainFixture], None] | None: """ Provide a witness generator function if --witness is enabled. Returns: None if witness functionality is disabled. Callable that generates witness data for a BlockchainFixture if enabled. """ if not request.config.getoption("witness"): return None def generate_witness(fixture: BlockchainFixture) -> None: """ Generate witness data for a blockchain fixture using the witness-filler tool. """ if not isinstance(fixture, BlockchainFixture): return None # Hotfix: witness-filler expects "Merge" but execution-spec-tests uses # "Paris" original_fork = None if fixture.fork is Paris: original_fork = fixture.fork fixture.fork = Merge try: result = subprocess.run( ["witness-filler"], input=fixture.model_dump_json(by_alias=True), text=True, capture_output=True, ) finally: if original_fork is not None: fixture.fork = original_fork if result.returncode != 0: raise RuntimeError( f"witness-filler tool failed with exit code {result.returncode}. " f"stderr: {result.stderr}" ) try: result_model = WitnessFillerResult.model_validate_json(result.stdout) witnesses = result_model.root for i, witness in enumerate(witnesses): if i < len(fixture.blocks): block = fixture.blocks[i] if isinstance(block, FixtureBlock): block.execution_witness = witness except Exception as e: raise RuntimeError( f"Failed to parse witness data from witness-filler tool. " f"Output was: {result.stdout[:500]}{'...' if len(result.stdout) > 500 else ''}" ) from e return generate_witness ================================================ FILE: src/pytest_plugins/fix_package_test_path.py ================================================ """ Pytest plugin to fix the test IDs for all pytest command that use a command-logic test file. """ from typing import List import pytest def pytest_collection_modifyitems(items: List[pytest.Item]) -> None: """ Modify collected item names to remove the test runner function from the name. """ for item in items: original_name = item.originalname # type: ignore remove = f"{original_name}[" if item.name.startswith(remove): item.name = item.name.removeprefix(remove)[:-1] if remove in item.nodeid: item._nodeid = item.nodeid[item.nodeid.index(remove) + len(remove) : -1] ================================================ FILE: src/pytest_plugins/forks/__init__.py ================================================ """ A pytest plugin to configure the forks in the test session. It parametrizes tests based on the user-provided fork range the tests' specified validity markers. """ ================================================ FILE: src/pytest_plugins/forks/forks.py ================================================ """Pytest plugin to enable fork range configuration for the test session.""" import itertools import re import sys import textwrap from abc import ABC, abstractmethod from dataclasses import dataclass, field from types import FunctionType from typing import Any, Callable, ClassVar, Dict, Iterable, Iterator, List, Set, Tuple, Type import pytest from _pytest.mark.structures import ParameterSet from pytest import Mark, Metafunc from ethereum_clis import TransitionTool from ethereum_test_forks import ( ALL_FORKS, ALL_FORKS_WITH_TRANSITIONS, Fork, ForkSetAdapter, InvalidForkError, get_deployed_forks, get_selected_fork_set, get_transition_forks, transition_fork_to, ) from pytest_plugins.custom_logging import get_logger logger = get_logger(__name__) def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" fork_group = parser.getgroup("Forks", "Specify the fork range to generate fixtures for") fork_group.addoption( "--forks", action="store_true", dest="show_fork_help", default=False, help="Display forks supported by the test framework and exit.", ) fork_group.addoption( "--fork", action="store", dest="single_fork", default="", help="Only fill tests for the specified fork.", ) fork_group.addoption( "--from", action="store", dest="forks_from", default="", help="Fill tests from and including the specified fork.", ) fork_group.addoption( "--until", action="store", dest="forks_until", default="", help="Fill tests until and including the specified fork.", ) @dataclass(kw_only=True) class ForkCovariantParameter: """Value list for a fork covariant parameter in a given fork.""" names: List[str] values: List[ParameterSet] class ForkParametrizer: """A parametrizer for a test case that is parametrized by the fork.""" fork: Fork fork_covariant_parameters: List[ForkCovariantParameter] = field(default_factory=list) def __init__( self, fork: Fork, marks: List[pytest.MarkDecorator | pytest.Mark] | None = None, fork_covariant_parameters: List[ForkCovariantParameter] | None = None, ): """ Initialize a new fork parametrizer object for a given fork. Args: fork: The fork for which the test cases will be parametrized. marks: A list of pytest marks to apply to all the test cases parametrized by the fork. fork_covariant_parameters: A list of fork covariant parameters for the test case, for unit testing purposes only. """ if marks is None: marks = [] self.fork_covariant_parameters = [ ForkCovariantParameter( names=["fork"], values=[ pytest.param( fork, marks=marks, ) ], ) ] if fork_covariant_parameters is not None: self.fork_covariant_parameters.extend(fork_covariant_parameters) self.fork = fork @property def argnames(self) -> List[str]: """Return the parameter names for the test case.""" argnames = [] for p in self.fork_covariant_parameters: argnames.extend(p.names) return argnames @property def argvalues(self) -> List[ParameterSet]: """Return the parameter values for the test case.""" parameter_set_combinations = itertools.product( # Add the values for each parameter, all of them are lists of at # least one element. *[p.values for p in self.fork_covariant_parameters], ) parameter_set_list: List[ParameterSet] = [] for parameter_set_combination in parameter_set_combinations: params: List[Any] = [] marks: List[pytest.Mark | pytest.MarkDecorator] = [] test_id: str | None = None for p in parameter_set_combination: assert isinstance(p, ParameterSet) params.extend(p.values) if p.marks: marks.extend(p.marks) if p.id: if test_id is None: test_id = f"fork_{self.fork.name()}-{p.id}" else: test_id = f"{test_id}-{p.id}" parameter_set_list.append(pytest.param(*params, marks=marks, id=test_id)) return parameter_set_list class CovariantDescriptor: """ A descriptor for a parameter that is covariant with the fork: the parametrized values change depending on the fork. """ argnames: List[str] = [] fn: Callable[[Fork], List[Any] | Iterable[Any]] | None = None selector: Callable[..., bool] | None = None marks: None | pytest.Mark | pytest.MarkDecorator | List[pytest.Mark | pytest.MarkDecorator] = ( None ) def __init__( self, argnames: List[str] | str, fn: Callable[[Fork], List[Any] | Iterable[Any]] | None = None, *, selector: Callable[..., bool] | None = None, marks: None | pytest.Mark | pytest.MarkDecorator | List[pytest.Mark | pytest.MarkDecorator] = None, ): """ Initialize a new covariant descriptor. Args: argnames: The names of the parameters that are covariant with the fork. fn: A function that takes the fork as the single parameter and returns the values for the parameter for each fork. selector: A function that filters the values for the parameter. marks: A list of pytest marks to apply to the test cases parametrized by the parameter. """ self.argnames = ( [argname.strip() for argname in argnames.split(",")] if isinstance(argnames, str) else argnames ) self.fn = fn self.selector = selector self.marks = marks def process_value( self, parameters_values: Any | List[Any] | Tuple[Any] | ParameterSet, ) -> ParameterSet | None: """ Process a value for a covariant parameter. The `selector` is applied to parameters_values in order to filter them. """ if isinstance(parameters_values, ParameterSet): return parameters_values if len(self.argnames) == 1: # Wrap values that are meant for a single parameter in a list parameters_values = [parameters_values] marks = self.marks if self.selector is None or self.selector( *parameters_values[: self.selector.__code__.co_argcount] ): if isinstance(marks, FunctionType): marks = marks(*parameters_values[: marks.__code__.co_argcount]) assert not isinstance(marks, FunctionType), "marks must be a list or None" if marks is None: marks = [] elif not isinstance(marks, list): marks = [marks] return pytest.param(*parameters_values, marks=marks) return None def process_values(self, values: Iterable[Any]) -> List[ParameterSet]: """ Filter the values for the covariant parameter. I.e. if the marker has an argument, the argument is interpreted as a lambda function that filters the values. """ processed_values: List[ParameterSet] = [] for value in values: processed_value = self.process_value(value) if processed_value is not None: processed_values.append(processed_value) return processed_values def add_values(self, fork_parametrizer: ForkParametrizer) -> None: """Add the values for the covariant parameter to the parametrizer.""" if self.fn is None: return fork = fork_parametrizer.fork values = self.fn(fork) values = self.process_values(values) assert len(values) > 0 fork_parametrizer.fork_covariant_parameters.append( ForkCovariantParameter(names=self.argnames, values=values) ) class CovariantDecorator(CovariantDescriptor): """ A marker used to parametrize a function by a covariant parameter with the values returned by a fork method. The decorator must be subclassed with the appropriate class variables before initialization. Attributes: marker_name: Name of the marker. description: Description of the marker. fork_attribute_name: Name of the method to call on the fork to get the values. marker_parameter_names: Names of the parameters to be parametrized in the test function. indirect: Whether the parameters should be passed through fixtures (indirect parametrization). """ marker_name: ClassVar[str] description: ClassVar[str] fork_attribute_name: ClassVar[str] marker_parameter_names: ClassVar[List[str]] indirect: ClassVar[bool] def __init__(self, metafunc: Metafunc): """ Initialize the covariant decorator. The decorator must already be subclassed with the appropriate class variables before initialization. Args: metafunc: The metafunc object that pytest uses when generating tests. """ self.metafunc = metafunc m = metafunc.definition.iter_markers(self.marker_name) if m is None: return marker_list = list(m) assert len(marker_list) <= 1, f"Multiple markers {self.marker_name} found" if len(marker_list) == 0: return marker = marker_list[0] assert marker is not None assert len(marker.args) == 0, "Only keyword arguments are supported" kwargs = dict(marker.kwargs) selector = kwargs.pop("selector", lambda _: True) assert isinstance(selector, FunctionType), "selector must be a function" marks = kwargs.pop("marks", None) if len(kwargs) > 0: raise ValueError(f"Unknown arguments to {self.marker_name}: {kwargs}") def fn(fork: Fork) -> List[Any]: return getattr(fork, self.fork_attribute_name)(block_number=0, timestamp=0) super().__init__( argnames=self.marker_parameter_names, fn=fn, selector=selector, marks=marks, ) def covariant_decorator( *, marker_name: str, description: str, fork_attribute_name: str, argnames: List[str], indirect: bool = False, ) -> Type[CovariantDecorator]: """Generate a new covariant decorator subclass.""" return type( marker_name, (CovariantDecorator,), { "marker_name": marker_name, "description": description, "fork_attribute_name": fork_attribute_name, "marker_parameter_names": argnames, "indirect": indirect, }, ) fork_covariant_decorators: List[Type[CovariantDecorator]] = [ covariant_decorator( marker_name="with_all_tx_types", description="marks a test to be parametrized for all tx types at parameter named tx_type" " of type int", fork_attribute_name="tx_types", argnames=["tx_type"], ), covariant_decorator( marker_name="with_all_contract_creating_tx_types", description="marks a test to be parametrized for all tx types that can create a contract" " at parameter named tx_type of type int", fork_attribute_name="contract_creating_tx_types", argnames=["tx_type"], ), covariant_decorator( marker_name="with_all_typed_transactions", description="marks a test to be parametrized with default typed transactions named " "typed_transaction", fork_attribute_name="tx_types", argnames=["typed_transaction"], # indirect means the values from `tx_types` will be passed to the # `typed_transaction` fixture which will then be used in the test indirect=True, ), covariant_decorator( marker_name="with_all_precompiles", description="marks a test to be parametrized for all precompiles at parameter named" " precompile of type int", fork_attribute_name="precompiles", argnames=["precompile"], ), covariant_decorator( marker_name="with_all_evm_code_types", description="marks a test to be parametrized for all EVM code types at parameter named" " `evm_code_type` of type `EVMCodeType`, such as `LEGACY` and `EOF_V1`", fork_attribute_name="evm_code_types", argnames=["evm_code_type"], ), covariant_decorator( marker_name="with_all_call_opcodes", description="marks a test to be parametrized for all *CALL opcodes at parameter named" " call_opcode, and also the appropriate EVM code type at parameter named evm_code_type", fork_attribute_name="call_opcodes", argnames=["call_opcode", "evm_code_type"], ), covariant_decorator( marker_name="with_all_create_opcodes", description="marks a test to be parametrized for all *CREATE* opcodes at parameter named" " create_opcode, and also the appropriate EVM code type at parameter named evm_code_type", fork_attribute_name="create_opcodes", argnames=["create_opcode", "evm_code_type"], ), covariant_decorator( marker_name="with_all_system_contracts", description="marks a test to be parametrized for all system contracts at parameter named" " system_contract of type int", fork_attribute_name="system_contracts", argnames=["system_contract"], ), ] def pytest_configure(config: pytest.Config) -> None: """ Register the plugin's custom markers and process command-line options. Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/ writing_plugins.html# registering-custom-markers """ config.addinivalue_line( "markers", ( "valid_at_transition_to(fork, subsequent_forks: bool = False, " "until: str | None = None): specifies a test case is only valid " "at the specified fork transition boundaries" ), ) config.addinivalue_line( "markers", "valid_from(fork): specifies from which fork a test case is valid", ) config.addinivalue_line( "markers", "valid_until(fork): specifies until which fork a test case is valid", ) config.addinivalue_line( "markers", "valid_at(fork): specifies at which fork a test case is valid", ) config.addinivalue_line( "markers", ( "parametrize_by_fork(names, values_fn): parametrize a test case by fork using the " "specified names and values returned by the function values_fn(fork)" ), ) for d in fork_covariant_decorators: config.addinivalue_line("markers", f"{d.marker_name}: {d.description}") available_forks_help = textwrap.dedent( f"""\ Available forks: {", ".join(fork.name() for fork in ALL_FORKS)} """ ) available_forks_help += textwrap.dedent( f"""\ Available transition forks: {", ".join([fork.name() for fork in get_transition_forks()])} """ ) def get_fork_option(config: pytest.Config, option_name: str, parameter_name: str) -> Set[Fork]: """Post-process get option to allow for external fork conditions.""" config_str = config.getoption(option_name) try: return ForkSetAdapter.validate_python(config_str) except InvalidForkError: print( f"Error: Unsupported fork provided to {parameter_name}:", config_str, "\n", file=sys.stderr, ) print(available_forks_help, file=sys.stderr) pytest.exit("Invalid command-line options.", returncode=pytest.ExitCode.USAGE_ERROR) single_fork = get_fork_option(config, "single_fork", "--fork") forks_from = get_fork_option(config, "forks_from", "--from") forks_until = get_fork_option(config, "forks_until", "--until") show_fork_help = config.getoption("show_fork_help") dev_forks_help = textwrap.dedent( "To run tests for a fork under active development, it must be " "specified explicitly via --until=FORK.\n" "Tests are only ran for deployed mainnet forks by default, i.e., " f"until {get_deployed_forks()[-1].name()}.\n" ) if show_fork_help: print(available_forks_help) print(dev_forks_help) pytest.exit("After displaying help.", returncode=0) if single_fork and (forks_from or forks_until): print( "Error: --fork cannot be used in combination with --from or --until", file=sys.stderr ) pytest.exit("Invalid command-line options.", returncode=pytest.ExitCode.USAGE_ERROR) transition_forks = not getattr(config, "skip_transition_forks", False) selected_fork_set = get_selected_fork_set( single_fork=single_fork, forks_from=forks_from, forks_until=forks_until, transition_forks=transition_forks, ) if getattr(config, "single_fork_mode", False) and len(selected_fork_set) != 1: pytest.exit( f""" Expected exactly one fork to be specified, got {len(selected_fork_set)} ({selected_fork_set}). Make sure to specify exactly one fork using the --fork command line argument. """, returncode=pytest.ExitCode.USAGE_ERROR, ) config.selected_fork_set = selected_fork_set # type: ignore if not selected_fork_set: print( f"Error: --from {','.join(fork.name() for fork in forks_from)} " f"--until {','.join(fork.name() for fork in forks_until)} " "creates an empty fork range.", file=sys.stderr, ) pytest.exit( "Command-line options produce empty fork range.", returncode=pytest.ExitCode.USAGE_ERROR, ) config.unsupported_forks: Set[Fork] = set() # type: ignore t8n: TransitionTool | None = getattr(config, "t8n", None) if t8n: config.unsupported_forks = frozenset( # type: ignore fork for fork in selected_fork_set if not t8n.is_fork_supported(fork) ) logger.debug(f"List of unsupported forks: {list(config.unsupported_forks)}") # type: ignore @pytest.hookimpl(trylast=True) def pytest_report_header(config: pytest.Config, start_path: Any) -> List[str]: """Pytest hook called to obtain the report header.""" del start_path bold = "\033[1m" warning = "\033[93m" reset = "\033[39;49m" header = [ ( bold + "Generating fixtures for: " + ", ".join([f.name() for f in sorted(config.selected_fork_set)]) # type: ignore[attr-defined] + reset ), ] if all(fork.is_deployed() for fork in config.selected_fork_set): # type: ignore[attr-defined] header += [ ( bold + warning + "Only generating fixtures with stable/deployed forks: " "Specify an upcoming fork via --until=fork to " "add forks under development." + reset ) ] return header @pytest.fixture(autouse=True) def fork(request: pytest.FixtureRequest) -> None: """Parametrize test cases by fork.""" pass @pytest.fixture(scope="session") def session_fork(request: pytest.FixtureRequest) -> Fork | None: """ Session-wide fork object used if the plugin is configured in single-fork mode. """ if hasattr(request.config, "single_fork_mode") and request.config.single_fork_mode: return list(request.config.selected_fork_set)[0] # type: ignore raise AssertionError( "Plugin used `session_fork` fixture without the correct configuration (single_fork_mode)." ) ALL_VALIDITY_MARKERS: Dict[str, "Type[ValidityMarker]"] = {} MARKER_NAME_REGEX = re.compile(r"(? None: """Register the validity marker subclass.""" super().__init_subclass__(**kwargs) if marker_name is None: # Use the class name converted to underscore: # https://stackoverflow.com/a/1176023 marker_name = MARKER_NAME_REGEX.sub("_", cls.__name__).lower() cls.marker_name = marker_name cls.mutually_exclusive = mutually_exclusive if mutually_exclusive else [] cls.flag = flag if marker_name in ALL_VALIDITY_MARKERS: raise ValueError(f"Duplicate validity marker class: {cls}") ALL_VALIDITY_MARKERS[marker_name] = cls def __post_init__(self) -> None: """Post-initialize the validity marker.""" if self.flag: return if self.mark is None: raise Exception(f"Marker error '{self.marker_name}'") if len(self.mark.args) == 0: raise Exception(f"Missing fork argument with '{self.marker_name}' marker") def process_fork_arguments(self, *fork_args: str) -> Set[Fork]: """Process the fork arguments.""" fork_set = ForkSetAdapter.validate_python(fork_args) if len(fork_set) != len(fork_args): raise Exception(f"Duplicate argument specified in '{self.marker_name}'") return fork_set @staticmethod def get_all_validity_markers(markers: Iterator[pytest.Mark]) -> List["ValidityMarker"]: """Get all the validity markers applied to the test function.""" markers_dict: Dict[str, ValidityMarker] = {} for marker in markers: for marker_name in ALL_VALIDITY_MARKERS: if marker.name == marker_name: if marker_name in markers_dict: raise Exception(f"Too many '{marker_name}' markers applied to test") cls = ALL_VALIDITY_MARKERS[marker.name] markers_dict[marker_name] = cls(mark=marker) for cls in ALL_VALIDITY_MARKERS.values(): if cls.flag and cls.marker_name not in markers_dict: markers_dict[cls.marker_name] = cls(mark=None) for marker_name, validity_marker in markers_dict.items(): for incompatible_marker in validity_marker.mutually_exclusive: if incompatible_marker.marker_name in markers_dict: raise Exception( f"The markers '{incompatible_marker.marker_name}' and " f"'{marker_name}' can't be combined. " ) return list(markers_dict.values()) @staticmethod def get_test_fork_set(validity_markers: List["ValidityMarker"]) -> Set[Fork]: """ Get the set of forks where a test is valid from the validity markers and filters. """ if not len( [validity_marker for validity_marker in validity_markers if not validity_marker.flag] ): # Limit to non-transition forks if no validity markers were applied test_fork_set = set(ALL_FORKS) else: # Start with all forks and transitions if any validity markers were # applied test_fork_set = set(ALL_FORKS_WITH_TRANSITIONS) for v in validity_markers: # Apply the validity markers to the test function if applicable test_fork_set = v.process(test_fork_set) return test_fork_set @staticmethod def get_test_fork_set_from_markers(markers: Iterator[pytest.Mark]) -> Set[Fork]: """ Get the set of forks where a test is valid using the markers applied to the test. """ return ValidityMarker.get_test_fork_set(ValidityMarker.get_all_validity_markers(markers)) @staticmethod def get_test_fork_set_from_metafunc( metafunc: Metafunc, ) -> Set[Fork]: """ Get the set of forks where a test is valid using its pytest meta-function. """ return ValidityMarker.get_test_fork_set_from_markers(metafunc.definition.iter_markers()) @staticmethod def is_validity_or_filter_marker(name: str) -> bool: """Check if a marker is a validity or filter marker.""" return name in ALL_VALIDITY_MARKERS def process(self, forks: Set[Fork]) -> Set[Fork]: """Process the fork arguments.""" if self.mark is None: fork_set = self._process_with_marker_args() else: fork_set = self._process_with_marker_args(*self.mark.args, **self.mark.kwargs) if self.flag: return forks - fork_set return forks & fork_set @abstractmethod def _process_with_marker_args(self, *args: Any, **kwargs: Any) -> Set[Fork]: """ Process the fork arguments as specified for the marker. Method must be implemented by the subclass. If the validity marker is of flag type, the returned forks will be subtracted from the fork set, otherwise the returned forks will be intersected with the current set. """ pass class ValidFrom(ValidityMarker): """ Marker used to specify the fork from which the test is valid. The test will not be filled for forks before the specified fork. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.valid_from("London") def test_something_only_valid_after_london( state_test: StateTestFiller, pre: Alloc ): pass ``` In this example, the test will only be filled for the London fork and after, e.g. London, Paris, Shanghai, Cancun, etc. """ def _process_with_marker_args(self, *fork_args: str) -> Set[Fork]: """Process the fork arguments.""" forks: Set[Fork] = self.process_fork_arguments(*fork_args) resulting_set: Set[Fork] = set() for fork in forks: resulting_set |= {f for f in ALL_FORKS if f >= fork} return resulting_set class ValidUntil(ValidityMarker): """ Marker to specify the fork until which the test is valid. The test will not be filled for forks after the specified fork. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.valid_until("London") def test_something_only_valid_until_london( state_test: StateTestFiller, pre: Alloc ): pass ``` In this example, the test will only be filled for the London fork and before, e.g. London, Berlin, Istanbul, etc. """ def _process_with_marker_args(self, *fork_args: str) -> Set[Fork]: """Process the fork arguments.""" forks: Set[Fork] = self.process_fork_arguments(*fork_args) resulting_set: Set[Fork] = set() for fork in forks: resulting_set |= {f for f in ALL_FORKS if f <= fork} return resulting_set class ValidAt(ValidityMarker): """ Marker to specify each fork individually for which the test is valid. ```python import pytest from ethereum_test_tools import Alloc, StateTestFiller @pytest.mark.valid_at("London", "Cancun") def test_something_only_valid_at_london_and_cancun( state_test: StateTestFiller, pre: Alloc ): pass ``` In this example, the test will only be filled for the London and Cancun forks. """ def _process_with_marker_args(self, *fork_args: str) -> Set[Fork]: """Process the fork arguments.""" return self.process_fork_arguments(*fork_args) class ValidAtTransitionTo(ValidityMarker, mutually_exclusive=[ValidAt, ValidFrom, ValidUntil]): """ Marker to specify that a test is only meant to be filled at the transition to the specified fork. The test usually starts at the fork prior to the specified fork at genesis and at block 5 (for pre-merge forks) or at timestamp 15,000 (for post-merge forks) the fork transition occurs. ```python import pytest from ethereum_test_tools import Alloc, BlockchainTestFiller @pytest.mark.valid_at_transition_to("London") def test_something_that_happens_during_the_fork_transition_to_london( blockchain_test: BlockchainTestFiller, pre: Alloc ): pass ``` In this example, the test will only be filled for the fork that transitions to London at block number 5, `BerlinToLondonAt5`, and no other forks. To see or add a new transition fork, see the `ethereum_test_forks.forks.transition` module. Note that the test uses a `BlockchainTestFiller` fixture instead of a `StateTestFiller`, as the transition forks are used to test changes throughout the blockchain progression, and not just the state change of a single transaction. This marker also accepts the following keyword arguments: - `subsequent_transitions`: Force the test to also fill for subsequent fork transitions. - `until`: Implies `subsequent_transitions` and puts a limit on which transition fork will the test filling will be limited to. For example: ```python @pytest.mark.valid_at_transition_to("Cancun", subsequent_transitions=True) ``` produces tests on `ShanghaiToCancunAtTime15k` and `CancunToPragueAtTime15k`, and any transition fork after that. And: ```python @pytest.mark.valid_at_transition_to("Cancun", subsequent_transitions=True, until="Prague") ``` produces tests on `ShanghaiToCancunAtTime15k` and `CancunToPragueAtTime15k`, but no forks after Prague. """ def _process_with_marker_args( self, *fork_args: str, subsequent_forks: bool = False, until: str | None = None ) -> Set[Fork]: """Process the fork arguments.""" forks: Set[Fork] = self.process_fork_arguments(*fork_args) until_forks: Set[Fork] | None = ( None if until is None else self.process_fork_arguments(until) ) if len(forks) == 0: raise Exception("Missing fork argument with 'valid_at_transition_to' marker.") if len(forks) > 1: raise Exception("Too many forks specified to 'valid_at_transition_to' marker.") resulting_set: Set[Fork] = set() for fork in forks: resulting_set |= transition_fork_to(fork) if subsequent_forks: for transition_forks in (transition_fork_to(f) for f in ALL_FORKS if f > fork): for transition_fork in transition_forks: if transition_fork and ( until_forks is None or any(transition_fork <= until_fork for until_fork in until_forks) ): resulting_set.add(transition_fork) return resulting_set class ValidForBPOForks(ValidityMarker, marker_name="valid_for_bpo_forks", flag=True): """ Marker to specify that a test is valid for BPO forks. ```python import pytest from ethereum_test_tools import Alloc, BlockchainTestFiller @pytest.mark.valid_for_bpo_forks() def test_something_in_a_bpo_fork( blockchain_test: BlockchainTestFiller, pre: Alloc ): pass ``` """ def _process_with_marker_args(self) -> Set[Fork]: """Process the fork arguments.""" include_bpo_forks = self.mark is not None if include_bpo_forks: return set() resulting_set: Set[Fork] = set() for fork in ALL_FORKS: if fork.bpo_fork(): resulting_set.add(fork) resulting_set |= transition_fork_to(fork) return resulting_set def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """Pytest hook used to dynamically generate test cases.""" test_name = metafunc.function.__name__ try: test_fork_set = ValidityMarker.get_test_fork_set_from_metafunc(metafunc) except Exception as e: pytest.fail(f"Error generating tests for {test_name}: {e}") if not test_fork_set: pytest.fail( "The test function's " f"'{test_name}' fork validity markers generate " "an empty fork range. Please check the arguments to its " f"markers: @pytest.mark.valid_from and " f"@pytest.mark.valid_until." ) # Get the intersection between the test's validity marker and the current # filling parameters. intersection_set = test_fork_set & metafunc.config.selected_fork_set # type: ignore if "fork" not in metafunc.fixturenames: return pytest_params: List[Any] if not intersection_set: if metafunc.config.getoption("verbose") >= 2: pytest_params = [ pytest.param( None, marks=[ pytest.mark.skip( reason=( f"{test_name} is not valid for any any of forks specified on " "the command-line." ) ) ], ) ] metafunc.parametrize("fork", pytest_params, scope="function") else: unsupported_forks: Set[Fork] = metafunc.config.unsupported_forks # type: ignore pytest_params = [ ( ForkParametrizer( fork=fork, marks=[ pytest.mark.skip( reason=( f"Fork '{fork}' unsupported by " f"{metafunc.config.t8n.__class__.__name__}." # type: ignore ) ) ], ) if fork in sorted(unsupported_forks) else ForkParametrizer(fork=fork) ) for fork in sorted(intersection_set) ] add_fork_covariant_parameters(metafunc, pytest_params) parametrize_fork(metafunc, pytest_params) def add_fork_covariant_parameters( metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer] ) -> None: """ Iterate over the fork covariant descriptors and add their values to the test function. """ # Process all covariant decorators uniformly for covariant_descriptor in fork_covariant_decorators: if list(metafunc.definition.iter_markers(covariant_descriptor.marker_name)): for fork_parametrizer in fork_parametrizers: covariant_descriptor(metafunc=metafunc).add_values( fork_parametrizer=fork_parametrizer ) # Handle custom parametrize_by_fork markers for marker in metafunc.definition.iter_markers(): if marker.name == "parametrize_by_fork": descriptor = CovariantDescriptor( *marker.args, **marker.kwargs, ) for fork_parametrizer in fork_parametrizers: descriptor.add_values(fork_parametrizer=fork_parametrizer) def parameters_from_fork_parametrizer_list( fork_parametrizers: List[ForkParametrizer], ) -> Tuple[List[str], List[ParameterSet]]: """Get the parameters from the fork parametrizers.""" param_names: List[str] = [] param_values: List[ParameterSet] = [] for fork_parametrizer in fork_parametrizers: if not param_names: param_names = fork_parametrizer.argnames else: assert param_names == fork_parametrizer.argnames param_values.extend(fork_parametrizer.argvalues) # Remove duplicate parameters param_1 = 0 while param_1 < len(param_names): param_2 = param_1 + 1 while param_2 < len(param_names): if param_names[param_1] == param_names[param_2]: i = 0 while i < len(param_values): if param_values[i].values[param_1] != param_values[i].values[param_2]: del param_values[i] else: param_values[i] = pytest.param( *param_values[i].values[:param_2], *param_values[i].values[(param_2 + 1) :], id=param_values[i].id, marks=param_values[i].marks, ) i += 1 del param_names[param_2] else: param_2 += 1 param_1 += 1 return param_names, param_values def parametrize_fork(metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]) -> None: """Add the fork parameters to the test function.""" param_names, param_values = parameters_from_fork_parametrizer_list(fork_parametrizers) # Collect all parameters that should be indirect from the decorators indirect = [] for covariant_descriptor in fork_covariant_decorators: if ( list(metafunc.definition.iter_markers(covariant_descriptor.marker_name)) and covariant_descriptor.indirect ): # Add all argnames from this decorator to indirect list indirect.extend(covariant_descriptor.marker_parameter_names) metafunc.parametrize(param_names, param_values, scope="function", indirect=indirect) ================================================ FILE: src/pytest_plugins/forks/tests/__init__.py ================================================ """Tests for the forks plugin.""" ================================================ FILE: src/pytest_plugins/forks/tests/test_bad_command_line_options.py ================================================ """ Test the correct error is produced with bad/invalid command-line arguments. """ import pytest invalid_cli_option_test_cases = ( ( "from_nonexistent_fork", ( ("--from", "Marge"), # codespell:ignore marge "Unsupported fork provided to --from: Marge", # codespell:ignore marge ), ), ( "until_nonexistent_fork", ( ("--until", "Shangbye"), "Unsupported fork provided to --until: Shangbye", ), ), ( "fork_nonexistent_fork", ( ("--fork", "Cantcun"), "Unsupported fork provided to --fork: Cantcun", ), ), ( "fork_and_from", ( ("--fork", "Frontier", "--from", "Frontier"), "--fork cannot be used in combination with --from or --until", ), ), ( "fork_and_until", ( ("--fork", "Frontier", "--until", "Frontier"), "--fork cannot be used in combination with --from or --until", ), ), ( "invalid_fork_range", ( ("--from", "Paris", "--until", "Frontier"), "--from Paris --until Frontier creates an empty fork range", ), ), ) @pytest.mark.parametrize( "options, error_string", [test_case for _, test_case in invalid_cli_option_test_cases], ids=[test_id for test_id, _ in invalid_cli_option_test_cases], ) def test_bad_options(pytester: pytest.Pytester, options: tuple, error_string: str) -> None: """ Test that a test with an invalid command-line options: - Creates an outcome with exactly one error. - Triggers the expected error string in pytest's console output. Each invalid marker/marker combination is tested with one test in its own test session. """ pytester.makepyfile( """ def test_should_not_run(state_test): assert 0 """ ) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest("-c", "pytest-fill.ini", "-v", *options) assert result.ret == pytest.ExitCode.USAGE_ERROR assert error_string in "\n".join(result.stderr.lines) ================================================ FILE: src/pytest_plugins/forks/tests/test_bad_validity_markers.py ================================================ """ Test the correct error is produced with bad/invalid validity markers. """ import pytest invalid_merge_marker = "Marge" # codespell:ignore marge invalid_validity_marker_test_cases = ( ( "too_many_valid_from_markers", ( """ import pytest @pytest.mark.valid_from("Paris") @pytest.mark.valid_from("Paris") def test_case(state_test): assert 0 """, "Too many 'valid_from' markers applied to test", ), ), ( "too_many_valid_until_markers", ( """ import pytest @pytest.mark.valid_until("Paris") @pytest.mark.valid_until("Paris") def test_case(state_test): assert 0 """, "Too many 'valid_until' markers applied to test", ), ), ( "too_many_valid_at_transition_to_markers", ( """ import pytest @pytest.mark.valid_at_transition_to("Paris") @pytest.mark.valid_at_transition_to("Paris") def test_case(state_test): assert 0 """, "Too many 'valid_at_transition_to' markers applied to test", ), ), ( "valid_from_no_args", ( """ import pytest @pytest.mark.valid_from() def test_case(state_test): assert 0 """, "Missing fork argument with 'valid_from' marker", ), ), ( "valid_until_no_args", ( """ import pytest @pytest.mark.valid_until() def test_case(state_test): assert 0 """, "Missing fork argument with 'valid_until' marker", ), ), ( "valid_at_transition_to_no_args", ( """ import pytest @pytest.mark.valid_at_transition_to() def test_case(state_test): assert 0 """, "Missing fork argument with 'valid_at_transition_to' marker", ), ), ( "valid_from_duplicate_arg", ( """ import pytest @pytest.mark.valid_from("Paris", "Paris") def test_case(state_test): assert 0 """, "Duplicate argument specified in 'valid_from'", ), ), ( "valid_until_duplicate_arg", ( """ import pytest @pytest.mark.valid_until("Paris", "Paris") def test_case(state_test): assert 0 """, "Duplicate argument specified in 'valid_until'", ), ), ( "valid_at_transition_duplicate_arg", ( """ import pytest @pytest.mark.valid_at_transition_to("Paris", "Paris") def test_case(state_test): assert 0 """, "Duplicate argument specified in 'valid_at_transition_to'", ), ), ( "valid_from_nonexistent_fork", ( f""" import pytest @pytest.mark.valid_from("{invalid_merge_marker}") def test_case(state_test): assert 0 """, f"Invalid fork '{invalid_merge_marker}'", ), ), ( "valid_until_nonexistent_fork", ( """ import pytest @pytest.mark.valid_until("Shangbye") def test_case(state_test): assert 0 """, "Invalid fork 'Shangbye'", ), ), ( "valid_at_transition_to_nonexistent_fork", ( """ import pytest @pytest.mark.valid_at_transition_to("Cantcun") def test_case(state_test): assert 0 """, "Invalid fork 'Cantcun'", ), ), ( "valid_at_transition_to_until_nonexistent_fork", ( """ import pytest @pytest.mark.valid_at_transition_to("Shanghai", until="Cantcun") def test_case(state_test): assert 0 """, "Invalid fork 'Cantcun'", ), ), ( "valid_at_transition_to_and_valid_from", ( """ import pytest @pytest.mark.valid_at_transition_to("Cancun") @pytest.mark.valid_from("Paris") def test_case(state_test): assert 0 """, "The markers 'valid_from' and 'valid_at_transition_to' can't be combined", ), ), ( "valid_at_transition_to_and_valid_until", ( """ import pytest @pytest.mark.valid_at_transition_to("Shanghai") @pytest.mark.valid_until("Cancun") def test_case(state_test): assert 0 """, "The markers 'valid_until' and 'valid_at_transition_to' can't be combined", ), ), ( "invalid_validity_range", ( """ import pytest @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Frontier") def test_case(state_test): assert 0 """, "fork validity markers generate an empty fork range", ), ), ) @pytest.mark.parametrize( "test_function, error_string", [test_case for _, test_case in invalid_validity_marker_test_cases], ids=[test_id for test_id, _ in invalid_validity_marker_test_cases], ) def test_invalid_validity_markers( pytester: pytest.Pytester, error_string: str, test_function: str ) -> None: """ Test that a test with an invalid marker cases: - Creates an outcome with exactly one error. - Triggers the expected error string in pytest's console output. Each invalid marker/marker combination is tested with one test in its own test session. """ pytester.makepyfile(test_function) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest("-c", "pytest-fill.ini") result.assert_outcomes( passed=0, failed=0, skipped=0, errors=1, ) assert error_string in "\n".join(result.stdout.lines) ================================================ FILE: src/pytest_plugins/forks/tests/test_covariant_markers.py ================================================ """Test fork covariant markers and their effect on test parametrization.""" import pytest @pytest.mark.parametrize( "test_function,outcomes,error_string", [ pytest.param( """ import pytest @pytest.mark.with_all_tx_types() @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_tx_types", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type != 0) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_tx_types_with_selector", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types( marks=lambda tx_type: pytest.mark.skip("incompatible") if tx_type == 1 else None, ) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): assert tx_type != 1 """, {"passed": 2, "xpassed": 0, "failed": 0, "skipped": 1, "errors": 0}, None, id="with_all_tx_types_with_marks_lambda", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types(marks=pytest.mark.skip("incompatible")) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): assert False """, {"passed": 0, "xpassed": 0, "failed": 0, "skipped": 3, "errors": 0}, None, id="with_all_tx_types_with_marks_lambda", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types(marks=[pytest.mark.skip("incompatible")]) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): assert False """, {"passed": 0, "xpassed": 0, "failed": 0, "skipped": 3, "errors": 0}, None, id="with_all_tx_types_with_marks_lambda", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types( marks=( lambda tx_type: [pytest.mark.xfail, pytest.mark.slow] if tx_type == 1 else None ), ) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(request, state_test, tx_type): mark_names = [mark.name for mark in request.node.iter_markers()] assert "state_test" in mark_names if tx_type == 1: assert "slow" in mark_names """, {"passed": 2, "xpassed": 1, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_tx_types_with_marks_lambda_multiple_marks", ), pytest.param( """ import pytest @pytest.mark.with_all_contract_creating_tx_types() @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_contract_creating_tx_types", ), pytest.param( """ import pytest @pytest.mark.with_all_contract_creating_tx_types() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_contract_creating_tx_types", ), pytest.param( """ import pytest @pytest.mark.with_all_precompiles() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, precompile): pass """, {"passed": 10, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_precompiles", ), pytest.param( """ import pytest @pytest.mark.with_all_evm_code_types() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, evm_code_type): pass """, {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_evm_code_types", ), pytest.param( """ import pytest @pytest.mark.with_all_call_opcodes() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, call_opcode): pass """, {"passed": 4, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_call_opcodes", ), pytest.param( """ import pytest from ethereum_test_tools import EVMCodeType @pytest.mark.with_all_call_opcodes( selector=(lambda _, evm_code_type: evm_code_type == EVMCodeType.LEGACY) ) @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, call_opcode): pass """, {"passed": 4, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_call_opcodes_with_selector_for_evm_code_type", ), pytest.param( """ import pytest from ethereum_test_tools import Opcodes as Op @pytest.mark.with_all_call_opcodes(selector=lambda call_opcode: call_opcode == Op.CALL) @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, call_opcode): pass """, {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_call_opcodes_with_selector", ), pytest.param( """ import pytest @pytest.mark.with_all_create_opcodes() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, create_opcode): pass """, {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_create_opcodes", ), pytest.param( """ import pytest @pytest.mark.with_all_call_opcodes() @pytest.mark.with_all_precompiles() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, call_opcode, precompile): pass """, {"passed": 4 * 10, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_call_opcodes_and_precompiles", ), pytest.param( """ import pytest @pytest.mark.with_all_call_opcodes() @pytest.mark.with_all_create_opcodes() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, call_opcode, create_opcode): pass """, {"passed": 2 * 4, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_call_opcodes_and_create_opcodes", ), pytest.param( """ import pytest @pytest.mark.with_all_system_contracts() @pytest.mark.valid_from("Cancun") @pytest.mark.valid_until("Cancun") @pytest.mark.state_test_only def test_case(state_test, system_contract): pass """, {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_system_contracts", ), pytest.param( """ import pytest from ethereum_test_tools import Transaction @pytest.mark.with_all_typed_transactions @pytest.mark.valid_from("Berlin") @pytest.mark.valid_until("Berlin") @pytest.mark.state_test_only def test_case(state_test, typed_transaction): assert isinstance(typed_transaction, Transaction) assert typed_transaction.ty in [0, 1] # Berlin supports types 0 and 1 """, {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_typed_transactions_berlin", ), pytest.param( """ import pytest from ethereum_test_tools import Transaction @pytest.mark.with_all_typed_transactions() @pytest.mark.valid_from("London") @pytest.mark.valid_until("London") @pytest.mark.state_test_only def test_case(state_test, typed_transaction, pre): assert isinstance(typed_transaction, Transaction) assert typed_transaction.ty in [0, 1, 2] # London supports types 0, 1, 2 """, {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_typed_transactions_london", ), pytest.param( """ import pytest from ethereum_test_tools import Transaction from ethereum_test_base_types import AccessList # Override the type 3 transaction fixture @pytest.fixture def type_3_default_transaction(pre): sender = pre.fund_eoa() return Transaction( ty=3, sender=sender, max_fee_per_gas=10**10, max_priority_fee_per_gas=10**9, max_fee_per_blob_gas=10**8, gas_limit=300_000, data=b"\\xFF" * 50, access_list=[ AccessList(address=0x1111, storage_keys=[10, 20]), ], blob_versioned_hashes=[ 0x0111111111111111111111111111111111111111111111111111111111111111, ], ) @pytest.mark.with_all_typed_transactions() @pytest.mark.valid_at("Cancun") @pytest.mark.state_test_only def test_case(state_test, typed_transaction, pre): assert isinstance(typed_transaction, Transaction) if typed_transaction.ty == 3: # Verify our override worked assert typed_transaction.data == b"\\xFF" * 50 assert len(typed_transaction.blob_versioned_hashes) == 1 """, {"passed": 4, "failed": 0, "skipped": 0, "errors": 0}, None, id="with_all_typed_transactions_with_override", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types(invalid_parameter="invalid") @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 0, "failed": 0, "skipped": 0, "errors": 1}, "Unknown arguments to with_all_tx_types", id="invalid_covariant_marker_parameter", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types(selector=None) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 0, "failed": 0, "skipped": 0, "errors": 1}, "selector must be a function", id="invalid_selector", ), pytest.param( """ import pytest @pytest.mark.with_all_tx_types(lambda tx_type: tx_type != 0) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Paris") @pytest.mark.state_test_only def test_case(state_test, tx_type): pass """, {"passed": 0, "failed": 0, "skipped": 0, "errors": 1}, "Only keyword arguments are supported", id="selector_as_positional_argument", ), pytest.param( """ import pytest def covariant_function(fork): return [1, 2] if fork.name() == "Paris" else [3, 4, 5] @pytest.mark.parametrize_by_fork( argnames=["test_parameter"], fn=covariant_function, ) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") @pytest.mark.state_test_only def test_case(state_test, test_parameter): pass """, {"passed": 5, "failed": 0, "skipped": 0, "errors": 0}, None, id="custom_covariant_marker", ), pytest.param( """ import pytest def covariant_function(fork): return [[1, 2], [3, 4]] if fork.name() == "Paris" else [[4, 5], [5, 6], [6, 7]] @pytest.mark.parametrize_by_fork("test_parameter,test_parameter_2", covariant_function) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") @pytest.mark.state_test_only def test_case(state_test, test_parameter, test_parameter_2): pass """, {"passed": 5, "failed": 0, "skipped": 0, "errors": 0}, None, id="multi_parameter_custom_covariant_marker", ), pytest.param( """ import pytest def covariant_function(fork): return [ pytest.param(1, id="first_value"), 2, ] if fork.name() == "Paris" else [ pytest.param(3, id="third_value"), 4, 5, ] @pytest.mark.parametrize_by_fork("test_parameter",covariant_function) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") @pytest.mark.state_test_only def test_case(state_test, test_parameter): pass """, {"passed": 5, "failed": 0, "skipped": 0, "errors": 0}, None, id="custom_covariant_marker_pytest_param_id", ), pytest.param( """ import pytest def covariant_function(fork): return [ pytest.param(1, 2, id="first_test"), pytest.param(3, 4, id="second_test"), ] if fork.name() == "Paris" else [ pytest.param(4, 5, id="fourth_test"), pytest.param(5, 6, id="fifth_test"), pytest.param(6, 7, id="sixth_test"), ] @pytest.mark.parametrize_by_fork(argnames=[ "test_parameter", "test_parameter_2" ], fn=covariant_function) @pytest.mark.valid_from("Paris") @pytest.mark.valid_until("Shanghai") @pytest.mark.state_test_only def test_case(state_test, test_parameter, test_parameter_2): pass """, {"passed": 5, "failed": 0, "skipped": 0, "errors": 0}, None, id="multi_parameter_custom_covariant_marker_pytest_param_id", ), ], ) def test_fork_covariant_markers( pytester: pytest.Pytester, test_function: str, outcomes: dict, error_string: str | None ) -> None: """ Test fork covariant markers in an isolated test session, i.e., in a `fill` execution. In the case of an error, check that the expected error string is in the console output. """ pytester.makepyfile(test_function) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest("-c", "pytest-fill.ini") result.assert_outcomes(**outcomes) if outcomes["errors"]: assert error_string is not None assert error_string in "\n".join(result.stdout.lines) ================================================ FILE: src/pytest_plugins/forks/tests/test_fork_parametrizer_types.py ================================================ """Test the types used to parametrize forks.""" from typing import List import pytest from _pytest.mark.structures import ParameterSet from ethereum_test_forks import Frontier from ..forks import ( ForkCovariantParameter, ForkParametrizer, parameters_from_fork_parametrizer_list, ) @pytest.mark.parametrize( "fork_parametrizers,expected_names,expected_parameter_sets", [ pytest.param( [ForkParametrizer(fork=Frontier)], ["fork"], [pytest.param(Frontier)], id="only_fork", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter(names=["some_value"], values=[pytest.param(1)]) ], ) ], ["fork", "some_value"], [pytest.param(Frontier, 1)], id="fork_with_single_covariant_parameter", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter( names=["some_value"], values=[pytest.param(1), pytest.param(2)], ) ], ) ], ["fork", "some_value"], [pytest.param(Frontier, 1), pytest.param(Frontier, 2)], id="fork_with_single_covariant_parameter_multiple_values", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter( names=["some_value"], values=[ pytest.param(1, marks=[pytest.mark.some_mark]), pytest.param(2), ], ) ], ) ], ["fork", "some_value"], [pytest.param(Frontier, 1, marks=[pytest.mark.some_mark]), pytest.param(Frontier, 2)], id="fork_with_single_covariant_parameter_multiple_values_one_mark", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter(names=["some_value"], values=[pytest.param(1)]), ForkCovariantParameter(names=["another_value"], values=[pytest.param(2)]), ], ) ], ["fork", "some_value", "another_value"], [pytest.param(Frontier, 1, 2)], id="fork_with_multiple_covariant_parameters", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter(names=["some_value"], values=[pytest.param(1)]), ForkCovariantParameter( names=["another_value"], values=[pytest.param(2), pytest.param(3)], ), ], ) ], ["fork", "some_value", "another_value"], [pytest.param(Frontier, 1, 2), pytest.param(Frontier, 1, 3)], id="fork_with_multiple_covariant_parameters_multiple_values", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter( names=["some_value", "another_value"], values=[ pytest.param(1, "a"), pytest.param(2, "b"), ], ) ], ) ], ["fork", "some_value", "another_value"], [pytest.param(Frontier, 1, "a"), pytest.param(Frontier, 2, "b")], id="fork_with_single_multi_value_covariant_parameter_multiple_values", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter( names=["some_value", "another_value"], values=[ pytest.param(1, "a"), pytest.param(2, "b"), ], ), ForkCovariantParameter( names=["yet_another_value", "last_value"], values=[ pytest.param(3, "x"), pytest.param(4, "y"), ], ), ], ) ], ["fork", "some_value", "another_value", "yet_another_value", "last_value"], [ pytest.param(Frontier, 1, "a", 3, "x"), pytest.param(Frontier, 1, "a", 4, "y"), pytest.param(Frontier, 2, "b", 3, "x"), pytest.param(Frontier, 2, "b", 4, "y"), ], id="fork_with_multiple_multi_value_covariant_parameter_multiple_values", ), pytest.param( [ ForkParametrizer( fork=Frontier, fork_covariant_parameters=[ ForkCovariantParameter( names=["shared_value", "different_value_1"], values=[ pytest.param(1, "a"), pytest.param(2, "b"), ], ), ForkCovariantParameter( names=["shared_value", "different_value_2"], values=[ pytest.param(1, "x"), pytest.param(2, "y"), ], ), ], ) ], ["fork", "shared_value", "different_value_1", "different_value_2"], [ pytest.param(Frontier, 1, "a", "x"), pytest.param(Frontier, 2, "b", "y"), ], id="fork_with_multiple_multi_value_covariant_parameter_shared_values", ), ], ) def test_fork_parametrizer( fork_parametrizers: List[ForkParametrizer], expected_names: List[str], expected_parameter_sets: List[ParameterSet], ) -> None: """ Test the fork parametrizer correctly parametrizes using the fork name. """ argnames, values = parameters_from_fork_parametrizer_list(fork_parametrizers) assert argnames == expected_names assert len(values) == len(expected_parameter_sets) for i in range(len(values)): assert len(values[i].values) == len(expected_parameter_sets[i].values) for j in range(len(values[i].values)): assert values[i].values[j] == expected_parameter_sets[i].values[j] assert len(values[i].marks) == len(expected_parameter_sets[i].marks) for j in range(len(values[i].marks)): assert values[i].marks[j] == expected_parameter_sets[i].marks[j] # type: ignore ================================================ FILE: src/pytest_plugins/forks/tests/test_forks.py ================================================ """Test the forks plugin.""" import pytest from ethereum_test_fixtures import LabeledFixtureFormat from ethereum_test_forks import ArrowGlacier, Fork, forks_from_until, get_deployed_forks, get_forks from ethereum_test_tools import StateTest @pytest.fixture def fork_map() -> dict[str, Fork]: """Lookup fork.name() : fork class.""" return {fork.name(): fork for fork in get_forks()} def test_no_options_no_validity_marker(pytester: pytest.Pytester) -> None: """ Test test parametrization with: - no fork command-line options, - no fork validity marker. """ pytester.makepyfile( f""" import pytest def test_all_forks({StateTest.pytest_parameter_name()}): pass """ ) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest("-c", "pytest-fill.ini", "-v") all_forks = get_deployed_forks() forks_under_test = forks_from_until(all_forks[0], all_forks[-1]) expected_skipped = 2 # eels doesn't support Constantinople expected_passed = ( len(forks_under_test) * len(StateTest.supported_fixture_formats) - expected_skipped ) stdout = "\n".join(result.stdout.lines) for test_fork in forks_under_test: for fixture_format in StateTest.supported_fixture_formats: if isinstance(fixture_format, LabeledFixtureFormat): fixture_format_label = fixture_format.label fixture_format = fixture_format.format else: fixture_format_label = fixture_format.format_name.lower() if ( not fixture_format.supports_fork(test_fork) or "blockchain_test_engine_x" in fixture_format_label ): expected_passed -= 1 assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" not in stdout continue assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" in stdout result.assert_outcomes( passed=expected_passed, failed=0, skipped=expected_skipped, errors=0, ) @pytest.mark.parametrize("fork", ["London", "Paris"]) def test_from_london_option_no_validity_marker( pytester: pytest.Pytester, fork_map: dict[str, Fork], fork: str ) -> None: """ Test test parametrization with: - --from London command-line option, - no until command-line option, - no fork validity marker. """ pytester.makepyfile( f""" import pytest def test_all_forks({StateTest.pytest_parameter_name()}): pass """ ) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest("-c", "pytest-fill.ini", "-v", "--from", fork) all_forks = get_deployed_forks() forks_under_test = forks_from_until(fork_map[fork], all_forks[-1]) expected_passed = len(forks_under_test) * len(StateTest.supported_fixture_formats) stdout = "\n".join(result.stdout.lines) for test_fork in forks_under_test: for fixture_format in StateTest.supported_fixture_formats: if isinstance(fixture_format, LabeledFixtureFormat): fixture_format_label = fixture_format.label fixture_format = fixture_format.format else: fixture_format_label = fixture_format.format_name.lower() if ( not fixture_format.supports_fork(test_fork) or "blockchain_test_engine_x" in fixture_format_label ): expected_passed -= 1 assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" not in stdout continue assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" in stdout result.assert_outcomes( passed=expected_passed, failed=0, skipped=0, errors=0, ) def test_from_london_until_shanghai_option_no_validity_marker( pytester: pytest.Pytester, fork_map: dict[str, Fork] ) -> None: """ Test test parametrization with: - --from London command-line option, - --until Shanghai command-line option, - no fork validity marker. """ pytester.makepyfile( f""" import pytest def test_all_forks({StateTest.pytest_parameter_name()}): pass """ ) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest( "-c", "pytest-fill.ini", "-v", "--from", "London", "--until", "shanghai" ) forks_under_test = forks_from_until(fork_map["London"], fork_map["Shanghai"]) expected_passed = len(forks_under_test) * len(StateTest.supported_fixture_formats) stdout = "\n".join(result.stdout.lines) if ArrowGlacier in forks_under_test: forks_under_test.remove(ArrowGlacier) expected_passed -= len(StateTest.supported_fixture_formats) for test_fork in forks_under_test: for fixture_format in StateTest.supported_fixture_formats: if isinstance(fixture_format, LabeledFixtureFormat): fixture_format_label = fixture_format.label fixture_format = fixture_format.format else: fixture_format_label = fixture_format.format_name.lower() if ( not fixture_format.supports_fork(test_fork) or "blockchain_test_engine_x" in fixture_format_label ): expected_passed -= 1 assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" not in stdout continue assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" in stdout result.assert_outcomes( passed=expected_passed, failed=0, skipped=0, errors=0, ) def test_from_paris_until_paris_option_no_validity_marker( pytester: pytest.Pytester, fork_map: dict[str, Fork] ) -> None: """ Test test parametrization with: - --from Paris command-line option, - --until Paris command-line option, - no fork validity marker. """ pytester.makepyfile( f""" import pytest def test_all_forks({StateTest.pytest_parameter_name()}): pass """ ) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest( "-c", "pytest-fill.ini", "-v", "--from", "paris", "--until", "paris" ) forks_under_test = forks_from_until(fork_map["Paris"], fork_map["Paris"]) expected_passed = len(forks_under_test) * len(StateTest.supported_fixture_formats) stdout: str = "\n".join(result.stdout.lines) assert len(stdout) > 0, "stdout is empty string" for test_fork in forks_under_test: for fixture_format in StateTest.supported_fixture_formats: if isinstance(fixture_format, LabeledFixtureFormat): fixture_format_label = fixture_format.label fixture_format = fixture_format.format else: fixture_format_label = fixture_format.format_name.lower() if "blockchain_test_engine_x" in fixture_format_label: expected_passed -= 1 assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" not in stdout continue assert f":test_all_forks[fork_{test_fork}-{fixture_format_label}]" in stdout result.assert_outcomes( passed=expected_passed, failed=0, skipped=0, errors=0, ) ================================================ FILE: src/pytest_plugins/forks/tests/test_markers.py ================================================ """Test fork markers and their effect on test parametrization.""" from typing import List import pytest from ethereum_clis import TransitionTool def generate_test(**kwargs: str) -> str: """Generate a test function with the given fork markers.""" markers = [f"@pytest.mark.{key}({value})" for key, value in kwargs.items()] marker_lines = "\n".join(markers) return f""" import pytest {marker_lines} @pytest.mark.state_test_only def test_case(state_test): pass """ @pytest.mark.parametrize( "test_function,pytest_args,outcomes", [ pytest.param( generate_test( valid_until='"Cancun"', ), [], {"passed": 10, "failed": 0, "skipped": 1, "errors": 0}, id="valid_until", ), pytest.param( generate_test( valid_until='"Cancun"', ), ["--from=Berlin"], {"passed": 5, "failed": 0, "skipped": 0, "errors": 0}, id="valid_until,--from", ), pytest.param( generate_test( valid_from='"Paris"', ), ["--until=Prague"], {"passed": 4, "failed": 0, "skipped": 0, "errors": 0}, id="valid_from", ), pytest.param( generate_test( valid_from='"Paris"', valid_until='"Cancun"', ), [], {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, id="valid_from_until", ), pytest.param( generate_test( valid_from='"Paris"', valid_until='"Cancun"', ), ["--until=Prague"], {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, id="valid_from_until,--until=Prague", ), pytest.param( generate_test( valid_from='"Paris"', valid_until='"Cancun"', ), ["--until=Shanghai"], {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, id="valid_from_until,--until=Shanghai", ), pytest.param( generate_test( valid_at_transition_to='"Shanghai"', ), [], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to", ), pytest.param( generate_test( valid_at_transition_to='"Shanghai"', ), ["--until=Prague"], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to,--until=Prague", ), pytest.param( generate_test( valid_at_transition_to='"Shanghai"', ), ["--until=Berlin"], {"passed": 0, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to,--until=Berlin", ), pytest.param( generate_test( valid_at_transition_to='"Paris", subsequent_forks=True', ), ["--until=Prague"], {"passed": 3, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to,subsequent_forks=True", ), pytest.param( generate_test( valid_at_transition_to='"Paris", subsequent_forks=True, until="Cancun"', ), ["--until=Prague"], {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to,subsequent_forks=True,until", ), pytest.param( generate_test( valid_at_transition_to='"Cancun"', ), ["--fork=ShanghaiToCancunAtTime15k"], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to,--fork=transition_fork_only", ), pytest.param( generate_test( valid_from='"Osaka"', valid_until='"BPO1"', ), ["--until=BPO1"], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_until_bpo_fork_without_bpo_test_marker", ), pytest.param( generate_test( valid_from='"Osaka"', valid_until='"BPO1"', valid_for_bpo_forks="", ), ["--until=BPO1"], {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, id="valid_until_bpo_fork_with_bpo_test_marker", ), pytest.param( generate_test( valid_at_transition_to='"Osaka", subsequent_forks=True, until="BPO1"', ), ["--until=BPO1"], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_without_bpo_test_marker", ), pytest.param( generate_test( valid_at_transition_to='"Osaka", subsequent_forks=True, until="BPO1"', valid_for_bpo_forks="", ), ["--until=BPO1"], {"passed": 2, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_with_bpo_test_marker", ), pytest.param( generate_test( valid_at_transition_to='"Cancun"', ), ["--fork=Cancun"], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to_with_exact_fork", ), pytest.param( generate_test( valid_at_transition_to='"Cancun"', ), ["--from=Cancun", "--until=Prague"], {"passed": 1, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_to_from_fork_until_later_fork", ), pytest.param( generate_test( valid_at_transition_to='"BPO1"', valid_for_bpo_forks="", ), ["--fork=Osaka"], {"passed": 0, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_with_bpo_test_marker_fork_parent", ), pytest.param( generate_test( valid_at_transition_to='"BPO1"', valid_for_bpo_forks="", ), ["--from=Osaka", "--until=Osaka"], {"passed": 0, "failed": 0, "skipped": 0, "errors": 0}, id="valid_at_transition_with_bpo_test_marker_from_parent", ), ], ) def test_fork_markers( pytester: pytest.Pytester, test_function: str, outcomes: dict, pytest_args: List[str], default_t8n: TransitionTool, ) -> None: """ Test fork markers in an isolated test session, i.e., in a `fill` execution. In the case of an error, check that the expected error string is in the console output. """ pytester.makepyfile(test_function) pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") assert default_t8n.server_url is not None result = pytester.runpytest( "-c", "pytest-fill.ini", "-v", *pytest_args, "--t8n-server-url", default_t8n.server_url, ) result.assert_outcomes(**outcomes) ================================================ FILE: src/pytest_plugins/help/__init__.py ================================================ """ Pytest plugin that prints help defined in other execution-spec-tests plugins. """ ================================================ FILE: src/pytest_plugins/help/help.py ================================================ """ A small pytest plugin that shows the a concise help string that only contains the options defined by the plugins defined in execution-spec-tests. """ import argparse from pathlib import Path import pytest def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest for specific help commands.""" help_group = parser.getgroup("help_options", "Help options for different commands") help_group.addoption( "--check-eip-versions-help", action="store_true", dest="show_check_eip_versions_help", default=False, help="Show help options only for the check_eip_versions command and exit.", ) help_group.addoption( "--fill-help", action="store_true", dest="show_fill_help", default=False, help="Show help options only for the fill command and exit.", ) help_group.addoption( "--consume-help", action="store_true", dest="show_consume_help", default=False, help="Show help options specific to the consume command and exit.", ) help_group.addoption( "--execute-remote-help", action="store_true", dest="show_execute_help", default=False, help="Show help options specific to the execute's command remote and exit.", ) help_group.addoption( "--execute-hive-help", action="store_true", dest="show_execute_hive_help", default=False, help="Show help options specific to the execute's command hive and exit.", ) help_group.addoption( "--execute-recover-help", action="store_true", dest="show_execute_recover_help", default=False, help="Show help options specific to the execute's command recover and exit.", ) help_group.addoption( "--execute-eth-config-help", action="store_true", dest="show_execute_eth_config_help", default=False, help="Show help options specific to the execute's command eth_config and exit.", ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Handle specific help flags by displaying the corresponding help message. """ if config.getoption("show_check_eip_versions_help"): show_specific_help( config, "pytest-check-eip-versions.ini", [ "spec_version_checker", "EIP spec version", ], ) elif config.getoption("show_fill_help"): show_specific_help( config, "pytest-fill.ini", [ "evm", "solc", "fork range", "filler location", "defining debug", "pre-allocation behavior during test filling", "ported", "witness", ], ) elif config.getoption("show_consume_help"): show_specific_help( config, "pytest-consume.ini", [ "consuming", ], ) elif config.getoption("show_execute_help"): show_specific_help( config, "pytest-execute.ini", [ "execute", "remote RPC configuration", "pre-allocation behavior during test execution", "sender key fixtures", "remote seed sender", ], ) elif config.getoption("show_execute_hive_help"): show_specific_help( config, "pytest-execute-hive.ini", [ "execute", "hive RPC client", "pre-allocation behavior during test execution", "sender key fixtures", "remote seed sender", ], ) elif config.getoption("show_execute_recover_help"): show_specific_help( config, "pytest-execute-recover.ini", [ "fund recovery", "remote RPC configuration", "remote seed sender", ], ) elif config.getoption("show_execute_eth_config_help"): show_specific_help( config, "pytest-execute-eth-config.ini", [ "eth_config", ], ) def show_specific_help(config: pytest.Config, expected_ini: str, substrings: list[str]) -> None: """ Print help options filtered by specific substrings from the given configuration. """ pytest_ini = Path(config.inifile) # type: ignore if pytest_ini.name != expected_ini: raise ValueError( f"Unexpected {expected_ini}!={pytest_ini.name} file option generating help." ) test_parser = argparse.ArgumentParser() for group in config._parser.optparser._action_groups: title: str | None = group.title if title and any(substring in title for substring in substrings): new_group = test_parser.add_argument_group(group.title, group.description) for action in group._group_actions: kwargs = { "default": action.default, "help": action.help, "required": action.required, } if isinstance(action, argparse._StoreTrueAction): kwargs["action"] = "store_true" else: kwargs["type"] = action.type if action.nargs: kwargs["nargs"] = action.nargs new_group.add_argument(*action.option_strings, **kwargs) print(test_parser.format_help()) pytest.exit("After displaying help.", returncode=pytest.ExitCode.OK) ================================================ FILE: src/pytest_plugins/help/tests/test_help.py ================================================ """Test the help plugin.""" from typing import Any import pytest FILL_TEST_ARGS = ( "--evm-bin", "--traces", "--filler-path", "--output", "--forks", "--fork", "--from", "--until", "--help", ) @pytest.mark.parametrize("help_flag", ["--fill-help"]) def test_local_arguments_present_in_fill_help(pytester: Any, help_flag: str) -> None: """ Test that locally defined command-line flags appear in the help if our custom help flag is used. """ pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-fill.ini") result = pytester.runpytest("-c", "pytest-fill.ini", help_flag) for test_arg in FILL_TEST_ARGS: assert test_arg in "\n".join(result.stdout.lines) CONSUME_TEST_ARGS = ( "--input", "--no-html", "--help", ) @pytest.mark.parametrize( "command, help_flag", [ ("direct", "--consume-help"), ("rlp", "--consume-help"), ("engine", "--consume-help"), ], ) def test_local_arguments_present_in_base_consume_help( pytester: Any, help_flag: str, command: str ) -> None: """ Test that locally defined command-line flags appear in the help for consume subcommands. """ pytester.copy_example(name="src/cli/pytest_commands/pytest_ini_files/pytest-consume.ini") result = pytester.runpytest("-c", "pytest-consume.ini", command, help_flag) for test_arg in CONSUME_TEST_ARGS: assert test_arg in "\n".join(result.stdout.lines) ================================================ FILE: src/pytest_plugins/py.typed ================================================ ================================================ FILE: src/pytest_plugins/pytest_hive/hive_info.py ================================================ """Hive instance information structures.""" from typing import Any, Dict, List, Optional import yaml from pydantic import BaseModel, Field, RootModel from typing_extensions import Self from ethereum_test_base_types import CamelModel class YAMLModel(BaseModel): """A helper class for YAML serialization of pydantic models.""" def yaml(self, **kwargs: Any) -> str: """Return the YAML representation of the model.""" return yaml.dump(self.model_dump(), **kwargs) @classmethod def parse_yaml(cls, yaml_string: str) -> Self: """Parse a YAML string into a model instance.""" data = yaml.safe_load(yaml_string) return cls(**data) class ClientConfig(YAMLModel): """ Client configuration for YAML serialization. Represents a single client entry in the clients.yaml file. """ client: str nametag: Optional[str] = None dockerfile: Optional[str] = None build_args: Optional[Dict[str, str]] = Field(default_factory=lambda: {}) class ClientFile(RootModel, YAMLModel): """ Represents the entire clients.yaml file structure. The clients.yaml file is a list of client configurations. """ root: List[ClientConfig] class HiveInfo(CamelModel): """Hive instance information.""" command: List[str] client_file: ClientFile = Field(default_factory=lambda: ClientFile(root=[])) commit: str date: str ================================================ FILE: src/pytest_plugins/pytest_hive/pytest_hive.py ================================================ """ A pytest plugin providing common functionality for Hive simulators. Simulators using this plugin must define two pytest fixtures: 1. `test_suite_name`: The name of the test suite. 2. `test_suite_description`: The description of the test suite. These fixtures are used when creating the hive test suite. Log Capture Architecture: ------------------------- This module implements a log capture approach that ensures all logs, including those generated during fixture teardown, are properly captured and included in the test results. The key insight is that we need to ensure that test finalization happens *before* the test suite is finalized, but *after* all fixtures have been torn down so we can capture their logs. This is accomplished through the fixture teardown mechanism in pytest: 1. Since the `hive_test` fixture depends on the `test_suite` fixture, pytest guarantees that the teardown of `hive_test` runs before the teardown of `test_suite` 2. All logs are processed and the test is finalized in the teardown phase of the `hive_test` fixture using the pytest test report data 3. This sequencing ensures that all logs are captured and the test is properly finalized before its parent test suite is finalized This approach relies on the pytest fixture dependency graph and teardown ordering to ensure proper sequencing, which is more reliable than using hooks which might run in an unpredictable order relative to fixture teardown. """ import json import os import warnings from dataclasses import asdict from pathlib import Path from typing import Any, Generator, List import pytest from filelock import FileLock from hive.client import ClientRole from hive.simulation import Simulation from hive.testing import HiveTest, HiveTestResult, HiveTestSuite from ..custom_logging import get_logger from .hive_info import ClientFile, HiveInfo logger = get_logger(__name__) def pytest_configure(config: pytest.Config) -> None: # noqa: D103 hive_simulator_url = config.getoption("hive_simulator") if hive_simulator_url is None: pytest.exit( "The HIVE_SIMULATOR environment variable is not set.\n\n" "If running locally, start hive in --dev mode, for example:\n" "./hive --dev --client go-ethereum\n\n" "and set the HIVE_SIMULATOR to the reported URL. For example, in bash:\n" "export HIVE_SIMULATOR=http://127.0.0.1:3000\n" "or in fish:\n" "set -x HIVE_SIMULATOR http://127.0.0.1:3000" ) # TODO: Try and get these into fixtures; this is only here due to the # "dynamic" parametrization of client_type with hive_execution_clients. config.hive_simulator_url = hive_simulator_url # type: ignore[attr-defined] config.hive_simulator = Simulation(url=hive_simulator_url) # type: ignore[attr-defined] try: config.hive_execution_clients = config.hive_simulator.client_types( # type: ignore[attr-defined] role=ClientRole.ExecutionClient ) except Exception as e: message = ( f"Error connecting to hive simulator at {hive_simulator_url}.\n\n" "Did you forget to start hive in --dev mode?\n" "./hive --dev --client go-ethereum\n\n" ) if config.option.verbose > 0: message += f"Error details:\n{str(e)}" else: message += "Re-run with -v for more details." pytest.exit(message) def pytest_addoption(parser: pytest.Parser) -> None: # noqa: D103 pytest_hive_group = parser.getgroup("pytest_hive", "Arguments related to pytest hive") pytest_hive_group.addoption( "--hive-simulator", action="store", dest="hive_simulator", default=os.environ.get("HIVE_SIMULATOR"), help=( "The Hive simulator endpoint, e.g. http://127.0.0.1:3000. By default, the value is " "taken from the HIVE_SIMULATOR environment variable." ), ) def get_hive_info(simulator: Simulation) -> HiveInfo | None: """Fetch and return the Hive instance information.""" try: hive_info = simulator.hive_instance() return HiveInfo(**hive_info) except Exception as e: warnings.warn( f"Error fetching hive information: {str(e)}\n\n" "Hive might need to be updated to a newer version.", stacklevel=2, ) return None @pytest.hookimpl(trylast=True) def pytest_report_header(config: pytest.Config, start_path: Path) -> List[str] | None: """Add lines to pytest's console output header.""" del start_path if config.option.collectonly: return None header_lines = [f"hive simulator: {config.hive_simulator_url}"] # type: ignore[attr-defined] if hive_info := get_hive_info(config.hive_simulator): # type: ignore[attr-defined] hive_command = " ".join(hive_info.command) header_lines += [ f"hive command: {hive_command}", f"hive commit: {hive_info.commit}", f"hive date: {hive_info.date}", ] for client in hive_info.client_file.root: header_lines += [ f"hive client ({client.client}): {client.model_dump_json(exclude_none=True)}", ] return header_lines @pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport( item: pytest.Item, call: pytest.CallInfo[None] ) -> Generator[None, Any, None]: """ Make the setup, call, and teardown results available in the teardown phase of a test fixture (i.e., after yield has been called). This is used to get the test result and pass it to the hive test suite. Available as: - result_setup - setup result - result_call - test result - result_teardown - teardown result """ del call outcome = yield report = outcome.get_result() setattr(item, f"result_{report.when}", report) @pytest.fixture(scope="session") def simulator(request: pytest.FixtureRequest) -> Simulation: """Return the Hive simulator instance.""" return request.config.hive_simulator # type: ignore[attr-defined] @pytest.fixture(scope="session") def hive_info(simulator: Simulation) -> HiveInfo | None: """Fetch and return the Hive instance information.""" return get_hive_info(simulator) @pytest.fixture(scope="session") def client_file(hive_info: HiveInfo | None) -> ClientFile: """Return the client file used when launching hive.""" if hive_info is None: return ClientFile(root=[]) return hive_info.client_file def get_test_suite_scope(fixture_name: str, config: pytest.Config) -> str: """ Return the appropriate scope of the test suite. See: https://docs.pytest.org/en/stable/how-to/fixtures.html#dynamic-scope """ del fixture_name if hasattr(config, "test_suite_scope"): return config.test_suite_scope return "module" @pytest.fixture(scope=get_test_suite_scope) # type: ignore[arg-type] def test_suite( simulator: Simulation, session_temp_folder: Path, test_suite_name: str, test_suite_description: str, ) -> Generator[HiveTestSuite, None, None]: """Defines a Hive test suite and cleans up after all tests have run.""" suite_file_name = f"test_suite_{test_suite_name}" suite_file = session_temp_folder / suite_file_name suite_lock_file = session_temp_folder / f"{suite_file_name}.lock" with FileLock(suite_lock_file): if suite_file.exists(): with open(suite_file, "r") as f: suite = HiveTestSuite(**json.load(f)) else: suite = simulator.start_suite( name=test_suite_name, description=test_suite_description, ) with open(suite_file, "w") as f: json.dump(asdict(suite), f) users_file_name = f"test_suite_{test_suite_name}_users" users_file = session_temp_folder / users_file_name users_lock_file = session_temp_folder / f"{users_file_name}.lock" with FileLock(users_lock_file): if users_file.exists(): with open(users_file, "r") as f: users = json.load(f) else: users = 0 users += 1 with open(users_file, "w") as f: json.dump(users, f) yield suite with FileLock(users_lock_file): with open(users_file, "r") as f: users = json.load(f) users -= 1 with open(users_file, "w") as f: json.dump(users, f) if users == 0: suite.end() suite_file.unlink() users_file.unlink() @pytest.fixture(scope="function") def hive_test( request: pytest.FixtureRequest, test_suite: HiveTestSuite ) -> Generator[HiveTest, None, None]: """ Propagate the pytest test case and its result to the hive server. This fixture handles both starting the test and ending it with all logs, including those generated during teardown of other fixtures. The approach of processing teardown logs directly in the teardown phase of this fixture ensures that the test gets properly finalized before the test suite is torn down. """ try: test_case_description = request.getfixturevalue("test_case_description") except pytest.FixtureLookupError: pytest.exit( "Error: The 'test_case_description' fixture has not been defined by the simulator " "or pytest plugin using this plugin!" ) test_parameter_string = request.node.name test: HiveTest = test_suite.start_test( name=test_parameter_string, description=test_case_description, ) yield test try: # Collect all logs from all phases captured = [] setup_out = "" call_out = "" for phase in ("setup", "call", "teardown"): report = getattr(request.node, f"result_{phase}", None) if report: stdout = report.capstdout or "None" stderr = report.capstderr or "None" # Remove setup output from call phase output if phase == "setup": setup_out = stdout if phase == "call": call_out = stdout # If call output starts with setup output, strip it if call_out.startswith(setup_out): stdout = call_out.removeprefix(setup_out) captured.append( f"# Captured Output from Test {phase.capitalize()}\n\n" f"## stdout:\n{stdout}\n" f"## stderr:\n{stderr}\n" ) captured_output = "\n".join(captured) if hasattr(request.node, "result_call") and request.node.result_call.passed: test_passed = True test_result_details = "Test passed.\n\n" + captured_output elif hasattr(request.node, "result_call") and not request.node.result_call.passed: test_passed = False test_result_details = "Test failed.\n\n" + captured_output test_result_details = request.node.result_call.longreprtext + "\n" + captured_output elif hasattr(request.node, "result_setup") and not request.node.result_setup.passed: test_passed = False test_result_details = ( "Test setup failed.\n\n" + request.node.result_setup.longreprtext + "\n" + captured_output ) elif hasattr(request.node, "result_teardown") and not request.node.result_teardown.passed: test_passed = False test_result_details = ( "Test teardown failed.\n\n" + request.node.result_teardown.longreprtext + "\n" + captured_output ) else: test_passed = False test_result_details = ( "Test failed for unknown reason (setup or call status unknown).\n\n" + captured_output ) test.end(result=HiveTestResult(test_pass=test_passed, details=test_result_details)) logger.verbose(f"Finished processing logs for test: {request.node.nodeid}") except Exception as e: logger.verbose(f"Error processing logs for test {request.node.nodeid}: {str(e)}") test_passed = False test_result_details = f"Exception whilst processing test result: {str(e)}" test.end(result=HiveTestResult(test_pass=test_passed, details=test_result_details)) ================================================ FILE: src/pytest_plugins/shared/benchmarking.py ================================================ """The module contains the pytest hooks for the gas benchmark values.""" import pytest from ethereum_test_tools import Environment from ethereum_test_types import EnvironmentDefaults from .execute_fill import OpMode def pytest_addoption(parser: pytest.Parser) -> None: """Add command line options for gas benchmark values.""" evm_group = parser.getgroup("evm", "Arguments defining evm executable behavior") evm_group.addoption( "--gas-benchmark-values", action="store", dest="gas_benchmark_value", type=str, default=None, help="Specify gas benchmark values for tests as a comma-separated list.", ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """Configure the fill and execute mode to benchmarking.""" if config.getoption("gas_benchmark_value"): config.op_mode = OpMode.BENCHMARKING # type: ignore[attr-defined] def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: """Generate tests for the gas benchmark values.""" if "gas_benchmark_value" in metafunc.fixturenames: gas_benchmark_values = metafunc.config.getoption("gas_benchmark_value") if gas_benchmark_values: gas_values = [int(x.strip()) for x in gas_benchmark_values.split(",")] gas_parameters = [ pytest.param(gas_value * 1_000_000, id=f"benchmark-gas-value_{gas_value}M") for gas_value in gas_values ] metafunc.parametrize("gas_benchmark_value", gas_parameters, scope="function") @pytest.fixture(scope="function") def gas_benchmark_value(request: pytest.FixtureRequest) -> int: """Return a single gas benchmark value for the current test.""" if hasattr(request, "param"): return request.param return EnvironmentDefaults.gas_limit BENCHMARKING_MAX_GAS = 1_000_000_000_000 @pytest.fixture def genesis_environment(request: pytest.FixtureRequest) -> Environment: # noqa: D103 """ Return an Environment instance with appropriate gas limit based on test type. """ if request.node.get_closest_marker("benchmark") is not None: return Environment(gas_limit=BENCHMARKING_MAX_GAS) return Environment() @pytest.fixture def env(request: pytest.FixtureRequest) -> Environment: # noqa: D103 """ Return an Environment instance with appropriate gas limit based on test type. """ if request.node.get_closest_marker("benchmark") is not None: return Environment(gas_limit=BENCHMARKING_MAX_GAS) return Environment() ================================================ FILE: src/pytest_plugins/shared/execute_fill.py ================================================ """ Shared pytest fixtures and hooks for EEST generation modes (fill and execute). """ from typing import List import pytest from ethereum_test_execution import BaseExecute, LabeledExecuteFormat from ethereum_test_fixtures import BaseFixture, LabeledFixtureFormat from ethereum_test_specs import BaseTest from ethereum_test_specs.base import OpMode from ethereum_test_types import EOA, Alloc, ChainConfig from ..spec_version_checker.spec_version_checker import EIPSpecTestItem ALL_FIXTURE_PARAMETERS = { "gas_benchmark_value", "genesis_environment", "env", } """ List of test parameters that have a default fixture value which can be retrieved and used for the test instance if it was not explicitly specified when calling from the test function. All parameter names included in this list must define a fixture in one of the plugins. """ @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Pytest hook called after command line options have been parsed and before test collection begins. Couple of notes: 1. Register the plugin's custom markers and process command-line options. Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers 2. `@pytest.hookimpl(tryfirst=True)` is applied to ensure that this hook is called before the pytest-html plugin's pytest_configure to ensure that it uses the modified `htmlpath` option. """ if config.pluginmanager.has_plugin("pytest_plugins.filler.filler"): for fixture_format in BaseFixture.formats.values(): config.addinivalue_line( "markers", (f"{fixture_format.format_name.lower()}: {fixture_format.description}"), ) for label, labeled_fixture_format in LabeledFixtureFormat.registered_labels.items(): config.addinivalue_line( "markers", (f"{label}: {labeled_fixture_format.description}"), ) elif config.pluginmanager.has_plugin("pytest_plugins.execute.execute"): for execute_format in BaseExecute.formats.values(): config.addinivalue_line( "markers", (f"{execute_format.format_name.lower()}: {execute_format.description}"), ) for label, labeled_execute_format in LabeledExecuteFormat.registered_labels.items(): config.addinivalue_line( "markers", (f"{label}: {labeled_execute_format.description}"), ) else: raise Exception("Neither the filler nor the execute plugin is loaded.") for spec_type in BaseTest.spec_types.values(): for marker, description in spec_type.supported_markers.items(): config.addinivalue_line( "markers", (f"{marker}: {description}"), ) if not hasattr(config, "op_mode"): config.op_mode = OpMode.CONSENSUS # type: ignore[attr-defined] config.addinivalue_line( "markers", "yul_test: a test case that compiles Yul code.", ) config.addinivalue_line( "markers", "compile_yul_with(fork): Always compile Yul source using the corresponding evm version.", ) config.addinivalue_line( "markers", "fill: Markers to be added in fill mode only.", ) config.addinivalue_line( "markers", "execute: Markers to be added in execute mode only.", ) config.addinivalue_line( "markers", "benchmark: Tests relevant to benchmarking EVMs.", ) config.addinivalue_line( "markers", "stateful: Tests for stateful benchmarking scenarios.", ) config.addinivalue_line( "markers", "exception_test: Negative tests that include an invalid block or transaction.", ) config.addinivalue_line( "markers", "eip_checklist(item_id, eip=None): Mark a test as implementing a specific checklist item. " "The first positional parameter is the checklist item ID. " "The optional 'eip' keyword parameter specifies additional EIPs covered by the test.", ) config.addinivalue_line( "markers", "derived_test: Mark a test as a derived test (E.g. a BlockchainTest that is derived " "from a StateTest).", ) config.addinivalue_line( "markers", "tagged: Marks a static test as tagged. Tags are used to generate dynamic " "addresses for static tests at fill time. All tagged tests are compatible with " "dynamic address generation.", ) config.addinivalue_line( "markers", "untagged: Marks a static test as untagged. Tags are used to generate dynamic " "addresses for static tests at fill time. Untagged tests are incompatible with " "dynamic address generation.", ) config.addinivalue_line( "markers", "verify_sync: Marks a test to be run with `consume sync`, verifying blockchain " "engine tests and having hive clients sync after payload execution.", ) config.addinivalue_line( "markers", "pre_alloc_group: Control shared pre-allocation grouping (use " '"separate" for isolated group or custom string for named groups)', ) config.addinivalue_line( "markers", "pre_alloc_modify: Marks a test to apply plugin-specific pre_alloc_group modifiers", ) config.addinivalue_line( "markers", "slow: Marks a test as slow (deselect with '-m \"not slow\"')", ) config.addinivalue_line( "markers", "ported_from: Marks a test as ported from ethereum/tests", ) config.addinivalue_line( "markers", "valid_for_bpo_forks: Marks a test as valid for BPO forks", ) config.addinivalue_line( "markers", "mainnet: Specialty tests crafted for running on mainnet and sanity checking.", ) @pytest.fixture(scope="function") def test_case_description(request: pytest.FixtureRequest) -> str: """ Fixture to extract and combine docstrings from the test class and the test function. """ description_unavailable = ( "No description available - add a docstring to the python test class or function." ) test_class_doc = "" test_function_doc = "" if hasattr(request.node, "cls"): test_class_doc = f"Test class documentation:\n{request.cls.__doc__}" if request.cls else "" if hasattr(request.node, "function"): test_function_doc = f"{request.function.__doc__}" if request.function.__doc__ else "" if not test_class_doc and not test_function_doc: return description_unavailable combined_docstring = f"{test_class_doc}\n\n{test_function_doc}".strip() return combined_docstring def pytest_make_parametrize_id(config: pytest.Config, val: str, argname: str) -> str: """ Pytest hook called when generating test ids. We use this to generate more readable test ids for the generated tests. """ del config return f"{argname}_{val}" SPEC_TYPES_PARAMETERS: List[str] = list(BaseTest.spec_types.keys()) def pytest_runtest_call(item: pytest.Item) -> None: """Pytest hook called in the context of test execution.""" if isinstance(item, EIPSpecTestItem): return class InvalidFillerError(Exception): def __init__(self, message: str): super().__init__(message) if not isinstance(item, pytest.Function): return if "state_test" in item.fixturenames and "blockchain_test" in item.fixturenames: raise InvalidFillerError( "A filler should only implement either a state test or a blockchain test; not both." ) # Check that the test defines either test type as parameter. if not any(i for i in item.funcargs if i in SPEC_TYPES_PARAMETERS): pytest.fail( "Test must define either one of the following parameters to " + "properly generate a test: " + ", ".join(SPEC_TYPES_PARAMETERS) ) # Global `sender` fixture that can be overridden by tests. @pytest.fixture def sender(pre: Alloc) -> EOA: """Fund an EOA from pre-alloc.""" return pre.fund_eoa() @pytest.fixture(scope="session") def chain_config() -> ChainConfig: """Return chain configuration.""" return ChainConfig() def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" static_filler_group = parser.getgroup("static", "Arguments defining static filler behavior") static_filler_group.addoption( "--fill-static-tests", action="store_true", dest="fill_static_tests_enabled", default=None, help=("Enable reading and filling from static test files."), ) ================================================ FILE: src/pytest_plugins/shared/helpers.py ================================================ """Helpers for pytest plugins.""" from typing import Any, Dict, Tuple, Type import pytest from _pytest.mark.structures import ParameterSet from ethereum_test_execution import ExecuteFormat, LabeledExecuteFormat from ethereum_test_fixtures import FixtureFormat, LabeledFixtureFormat from ethereum_test_tools import BaseTest def is_help_or_collectonly_mode(config: pytest.Config) -> bool: """Check if pytest is running in a help or collectonly mode.""" return ( config.getoption("markers", default=False) or config.getoption("collectonly", default=False) or config.getoption("show_ported_from", default=False) or config.getoption("links_as_filled", default=False) or config.getoption("help", default=False) or config.pluginmanager.has_plugin("pytest_plugins.filler.eip_checklist") or config.pluginmanager.has_plugin("pytest_plugins.filler.gen_test_doc.gen_test_doc") ) def labeled_format_parameter_set( format_with_or_without_label: LabeledExecuteFormat | LabeledFixtureFormat | ExecuteFormat | FixtureFormat, ) -> ParameterSet: """ Return a parameter set from a fixture/execute format and parses a label if there's any. The label will be used in the test id and also will be added as a marker to the generated test case when filling/executing the test. """ if isinstance(format_with_or_without_label, LabeledExecuteFormat) or isinstance( format_with_or_without_label, LabeledFixtureFormat ): return pytest.param( format_with_or_without_label.format, id=format_with_or_without_label.label, marks=[ getattr( pytest.mark, format_with_or_without_label.format_name.lower(), ), getattr( pytest.mark, format_with_or_without_label.label.lower(), ), ], ) else: return pytest.param( format_with_or_without_label, id=format_with_or_without_label.format_name.lower(), marks=[ getattr( pytest.mark, format_with_or_without_label.format_name.lower(), ) ], ) def get_spec_format_for_item( params: Dict[str, Any], ) -> Tuple[Type[BaseTest], Any]: """Return the spec type and execute format for the given test item.""" for spec_type in BaseTest.spec_types.values(): if spec_type.pytest_parameter_name() in params: return spec_type, params[spec_type.pytest_parameter_name()] raise ValueError("No spec type format found in the test item.") ================================================ FILE: src/pytest_plugins/shared/transaction_fixtures.py ================================================ """ Pytest plugin providing default transaction fixtures for each transaction type. Each fixture can be overridden in test files to customize transaction behavior. """ import pytest from ethereum_test_base_types import AccessList from ethereum_test_forks import Fork from ethereum_test_tools import Opcodes as Op from ethereum_test_types import EOA, Alloc, AuthorizationTuple, Transaction, add_kzg_version @pytest.fixture def type_0_default_transaction(sender: EOA) -> Transaction: """Type 0 (legacy) default transaction available in all forks.""" return Transaction( ty=0, sender=sender, gas_price=10**9, gas_limit=100_000, data=b"\x00" * 100, protected=True, ) @pytest.fixture def type_1_default_transaction(sender: EOA) -> Transaction: """Type 1 (access list) default transaction introduced in Berlin fork.""" return Transaction( ty=1, sender=sender, gas_price=10**9, gas_limit=100_000, data=b"\x00" * 100, access_list=[ AccessList(address=0x1234, storage_keys=[0, 1, 2]), AccessList(address=0x5678, storage_keys=[3, 4, 5]), AccessList(address=0x9ABC, storage_keys=[]), ], ) @pytest.fixture def type_2_default_transaction(sender: EOA) -> Transaction: """Type 2 (dynamic fee) default transaction introduced in London fork.""" return Transaction( ty=2, sender=sender, max_fee_per_gas=10**10, max_priority_fee_per_gas=10**9, gas_limit=100_000, data=b"\x00" * 200, access_list=[ AccessList(address=0x2468, storage_keys=[10, 20, 30]), AccessList(address=0xACE0, storage_keys=[40, 50]), ], ) @pytest.fixture def type_3_default_transaction(sender: EOA) -> Transaction: """Type 3 (blob) default transaction introduced in Cancun fork.""" return Transaction( ty=3, sender=sender, max_fee_per_gas=10**10, max_priority_fee_per_gas=10**9, max_fee_per_blob_gas=10**9, gas_limit=100_000, data=b"\x00" * 150, access_list=[ AccessList(address=0x3690, storage_keys=[100, 200]), AccessList(address=0xBEEF, storage_keys=[300]), ], blob_versioned_hashes=add_kzg_version( [ 0x1111111111111111111111111111111111111111111111111111111111111111, 0x2222222222222222222222222222222222222222222222222222222222222222, ], 0x01, ), ) @pytest.fixture def type_4_default_transaction(sender: EOA, pre: Alloc) -> Transaction: """Type 4 (set code) default transaction introduced in Prague fork.""" # Create authorized accounts with funds auth_signer1 = pre.fund_eoa(amount=10**18) auth_signer2 = pre.fund_eoa(amount=10**18) # Create target addresses that will be authorized target1 = pre.deploy_contract(Op.SSTORE(0, 1)) target2 = pre.deploy_contract(Op.SSTORE(0, 1)) return Transaction( ty=4, sender=sender, max_fee_per_gas=10**10, max_priority_fee_per_gas=10**9, gas_limit=150_000, data=b"\x00" * 200, access_list=[ AccessList(address=0x4567, storage_keys=[1000, 2000, 3000]), AccessList(address=0xCDEF, storage_keys=[4000, 5000]), ], authorization_list=[ AuthorizationTuple( chain_id=1, address=target1, nonce=0, signer=auth_signer1, ), AuthorizationTuple( chain_id=1, address=target2, nonce=0, signer=auth_signer2, ), ], ) @pytest.fixture def typed_transaction(request: pytest.FixtureRequest, fork: Fork) -> Transaction: """ Fixture that provides a Transaction object based on the parametrized tx type. This fixture works with the @pytest.mark.with_all_typed_transactions marker, which parametrizes the test with all transaction types supported by the fork. The actual transaction type value comes from the marker's parametrization. """ # The marker parametrizes 'typed_transaction' with tx type integers # Get the parametrized tx_type value if hasattr(request, "param"): # When parametrized by the marker, request.param contains the tx type tx_type = request.param else: raise ValueError( "`typed_transaction` fixture must be used with " "`@pytest.mark.with_all_typed_transactions` marker" ) fixture_name = f"type_{tx_type}_default_transaction" # Check if fixture exists - try to get it first try: # This will find fixtures defined in the test file or plugin return request.getfixturevalue(fixture_name) except pytest.FixtureLookupError as e: # Get all supported tx types for better error message supported_types = fork.tx_types() raise NotImplementedError( f"Fork {fork} supports transaction type {tx_type} but " f"fixture '{fixture_name}' is not implemented!\n" f"Fork {fork} supports transaction types: {supported_types}\n" f"Please add the missing fixture to " f"src/pytest_plugins/shared/transaction_fixtures.py" ) from e ================================================ FILE: src/pytest_plugins/solc/__init__.py ================================================ """A pytest plugin that provides solc functionality to fill/execute tests.""" ================================================ FILE: src/pytest_plugins/solc/solc.py ================================================ """Pytest plugin for configuring and verifying the solc compiler.""" import subprocess from shutil import which import pytest from pytest_metadata.plugin import metadata_key from semver import Version SOLC_EXPECTED_MIN_VERSION: Version = Version.parse("0.8.24") def pytest_addoption(parser: pytest.Parser) -> None: """Add command-line options to pytest.""" solc_group = parser.getgroup("solc", "Arguments defining the solc executable") solc_group.addoption( "--solc-bin", action="store", dest="solc_bin", type=str, default=None, help=( "Path to a solc executable (for Yul source compilation). Default: solc binary in PATH." ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """Ensure that solc is available and get its version.""" solc_bin = config.getoption("solc_bin") # Use provided solc binary or find it in PATH if solc_bin: if not which(solc_bin): pytest.exit( f"Specified solc binary not found: {solc_bin}", returncode=pytest.ExitCode.USAGE_ERROR, ) else: solc_bin = which("solc") if not solc_bin: pytest.exit( "solc binary not found in PATH. Please install solc and ensure it's in your PATH.", returncode=pytest.ExitCode.USAGE_ERROR, ) # Get solc version using subprocess try: result = subprocess.run( [solc_bin, "--version"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, check=True, ) except subprocess.CalledProcessError as e: pytest.exit( f"Failed to get solc version. Command output: {e.stdout}", returncode=pytest.ExitCode.USAGE_ERROR, ) except subprocess.TimeoutExpired: pytest.exit("Timeout while getting solc version.", returncode=pytest.ExitCode.USAGE_ERROR) except Exception as e: pytest.exit( f"Unexpected error while getting solc version: {e}", returncode=pytest.ExitCode.USAGE_ERROR, ) # Parse version from output version_output = result.stdout version_line = None # Look for version in output (format: "Version: X.Y.Z+commit.hash") for line in version_output.split("\n"): if line.startswith("Version:"): version_line = line break if not version_line: pytest.exit( f"Could not parse solc version from output:\n{version_output}", returncode=pytest.ExitCode.USAGE_ERROR, ) # Extract version number try: # --version format is typically something like # "0.8.24+commit.e11b9ed9.Linux.g++" version_str = version_line.split()[1].split("+")[0] solc_version_semver = Version.parse(version_str) except (IndexError, ValueError) as e: pytest.exit( f"Failed to parse solc version from: {version_line}\nError: {e}", returncode=pytest.ExitCode.USAGE_ERROR, ) # Store version in metadata if "Tools" not in config.stash[metadata_key]: config.stash[metadata_key]["Tools"] = { "solc": str(solc_version_semver), } else: config.stash[metadata_key]["Tools"]["solc"] = str(solc_version_semver) # Check minimum version requirement solc_version_semver = Version.parse(str(solc_version_semver).split()[0].split("-")[0]) if solc_version_semver < SOLC_EXPECTED_MIN_VERSION: pytest.exit( f"Unsupported solc version: {solc_version_semver}. Minimum required version is " f"{SOLC_EXPECTED_MIN_VERSION}", returncode=pytest.ExitCode.USAGE_ERROR, ) # Store for later use config.solc_version = solc_version_semver # type: ignore config.option.solc_bin = solc_bin # save for fixture if config.getoption("verbose") > 0: print(f"Using solc version {solc_version_semver} from {solc_bin}") @pytest.fixture(autouse=True, scope="session") def solc_bin(request: pytest.FixtureRequest) -> str | None: """Return configured solc binary path.""" return request.config.getoption("solc_bin") or which("solc") @pytest.hookimpl(trylast=True) def pytest_report_header(config: pytest.Config, start_path: object) -> list[str] | None: """Add lines to pytest's console output header.""" del start_path if config.option.collectonly: return None solc_version = config.stash[metadata_key]["Tools"]["solc"] solc_path = config.option.solc_bin or which("solc") return [f"solc: {solc_version}", f"solc path: {solc_path}"] ================================================ FILE: src/pytest_plugins/spec_version_checker/__init__.py ================================================ """ A pytest plugin that verifies the tested version of an EIP specification against the latest version from the [ethereum/EIPs](https://github.com/ethereum/EIPs) Github repository. """ ================================================ FILE: src/pytest_plugins/spec_version_checker/spec_version_checker.py ================================================ """ A pytest plugin that checks that the spec version specified in test/filler modules matches that of https://github.com/ethereum/EIPs. """ import os import re import textwrap from types import ModuleType from typing import Any, List, Optional, Set import pytest from _pytest.nodes import Item, Node from _pytest.python import Module from ethereum_test_tools import ReferenceSpec, ReferenceSpecTypes GITHUB_TOKEN_HELP = textwrap.dedent( "Either set the GITHUB_TOKEN environment variable or specify one via --github-token. " "The Github CLI can be used: `--github-token $(gh auth token)` (https://cli.github.com/) " "or a PAT can be generated at https://github.com/settings/personal-access-tokens/new." ) def pytest_addoption(parser: pytest.Parser) -> None: """Add Github token option to pytest command line options.""" group = parser.getgroup( "spec_version_checker", "Arguments defining the EIP spec version checker" ) group.addoption( "--github-token", action="store", dest="github_token", default=None, help=( "Specify a Github API personal access token (PAT) to avoid rate limiting. " f"{GITHUB_TOKEN_HELP}" ), ) @pytest.hookimpl(tryfirst=True) def pytest_configure(config: pytest.Config) -> None: """ Register the plugin's custom markers and process command-line options. Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers """ config.addinivalue_line( "markers", "eip_version_check: a test that tests the reference spec defined in an EIP test module.", ) github_token = config.getoption("github_token") or os.environ.get("GITHUB_TOKEN") if not github_token: pytest.exit( "A Github personal access token (PAT) is required but has not been provided. " f"{GITHUB_TOKEN_HELP}" ) config.github_token = github_token # type: ignore[attr-defined] def get_ref_spec_from_module( module: ModuleType, github_token: Optional[str] = None ) -> None | ReferenceSpec: """ Return the reference spec object defined in a module. Args: module: The module to extract reference spec from github_token: Optional GitHub token for API authentication Raises: Exception: If the module path contains "eip" and the module does not define a reference spec. Returns: spec_obj: Return None if the module path does not contain "eip", i.e., the module is not required to define a reference spec, otherwise, return the ReferenceSpec object as defined by the module. """ if not is_test_for_an_eip(str(module.__file__)): return None module_dict = module.__dict__ parseable_ref_specs = [ ref_spec_type for ref_spec_type in ReferenceSpecTypes if ref_spec_type.parseable_from_module(module_dict) ] if len(parseable_ref_specs) > 0: module_dict = module.__dict__ try: spec_obj = parseable_ref_specs[0].parse_from_module( module_dict, github_token=github_token ) except Exception as e: raise Exception(f"Error in spec_version_checker: {e} (this test is generated).") from e else: raise Exception("Test doesn't define REFERENCE_SPEC_GIT_PATH and REFERENCE_SPEC_VERSION") return spec_obj def is_test_for_an_eip(input_string: str) -> bool: """Return True if `input_string` contains an EIP number, i.e., eipNNNN.""" pattern = re.compile(r".*eip\d{1,4}", re.IGNORECASE) if pattern.match(input_string): return True return False def test_eip_spec_version(module: ModuleType, github_token: Optional[str] = None) -> None: """ Test that the ReferenceSpec object as defined in the test module is not outdated when compared to the remote hash from ethereum/EIPs. Args: module: Module to test github_token: Optional GitHub token for API authentication """ ref_spec = get_ref_spec_from_module(module, github_token=github_token) assert ref_spec, "No reference spec object defined" message = ( "The version of the spec referenced in " f"{module} does not match that from ethereum/EIPs, " f"tests might be outdated: Spec: {ref_spec.name()}. " f"Referenced version: {ref_spec.known_version()}. " f"Latest version: {ref_spec.latest_version()}. The " f"version was retrieved from {ref_spec.api_url()}." ) try: is_up_to_date = not ref_spec.is_outdated() except Exception as e: raise Exception( f"Error in spec_version_checker: {e} (this test is generated). " f"Reference spec URL: {ref_spec.api_url()}." ) from e assert is_up_to_date, message class EIPSpecTestItem(Item): """Custom pytest test item to test EIP spec versions.""" module: ModuleType github_token: Optional[str] def __init__(self, name: str, parent: Node, **kwargs: Any): """ Initialize the test item. Args: name: Name of the test parent: Parent node **kwargs: Additional keyword arguments """ super().__init__(name, parent, **kwargs) self.module = None # type: ignore self.github_token = None @classmethod def from_parent(cls, parent: Node, **kw: Any) -> "EIPSpecTestItem": """ Public constructor to define new tests. https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent. Args: parent: The parent Node kw: Additional keyword arguments (module, github_token) """ module = kw.pop("module", None) github_token = kw.pop("github_token", None) kw["name"] = "test_eip_spec_version" item = super(EIPSpecTestItem, cls).from_parent(parent, **kw) item.module = module item.github_token = github_token return item def runtest(self) -> None: """Define the test to execute for this item.""" test_eip_spec_version(self.module, github_token=self.github_token) def reportinfo(self) -> tuple[str, int, str]: """ Get location information for this test item to use test reports. Returns: A tuple of (path, line_number, description) """ return "spec_version_checker", 0, f"{self.name}" def pytest_collection_modifyitems(config: pytest.Config, items: List[Item]) -> None: """ Insert a new test EIPSpecTestItem for every test module with 'eip' in its path. """ github_token = config.github_token if hasattr(config, "github_token") else None modules: Set[Module] = {item.parent for item in items if isinstance(item.parent, Module)} new_test_eip_spec_version_items = [ EIPSpecTestItem.from_parent(parent=module, module=module.obj, github_token=github_token) for module in sorted(modules, key=lambda module: module.path) if is_test_for_an_eip(str(module.path)) ] for item in new_test_eip_spec_version_items: item.add_marker("eip_version_check", append=True) items.extend(new_test_eip_spec_version_items) ================================================ FILE: stubs/joblib/__init__.pyi ================================================ from typing import Any, Callable class Memory: def __init__(self, location: str, verbose: int = ...) -> None: ... def cache(self, func: Callable[..., Any]) -> Callable[..., Any]: ... ================================================ FILE: stubs/jwt/__init__.pyi ================================================ from .encode import encode __all__ = ("encode",) ================================================ FILE: stubs/jwt/encode.pyi ================================================ from typing import Any, Dict def encode(payload: Dict[Any, Any], key: bytes, algorithm: str) -> str: ... ================================================ FILE: stubs/pytest_metadata/__init__.pyi ================================================ ================================================ FILE: stubs/pytest_metadata/plugin.pyi ================================================ from _pytest.stash import StashKey metadata_key: StashKey ================================================ FILE: stubs/trie/__init__.pyi ================================================ from .hexary import HexaryTrie as HexaryTrie __all__ = ("HexaryTrie",) ================================================ FILE: stubs/trie/hexary.pyi ================================================ from typing import Dict class HexaryTrie: db: Dict root_hash: bytes def __init__(self, db: Dict) -> None: ... def set(self, key: bytes, value: bytes) -> None: ... ================================================ FILE: stubs/xdist/__init__.pyi ================================================ from .methods import is_xdist_worker __all__ = ("is_xdist_worker",) ================================================ FILE: stubs/xdist/methods.pyi ================================================ import pytest def is_xdist_worker(session: pytest.Session) -> bool: ... ================================================ FILE: tests/__init__.py ================================================ """ Cross-client test cases organized by fork. Each directory underneath `tests/` contains test cases corresponding [to the fork](https://ethereum.org/en/history) in which the functionality-under-test was introduced. """ ================================================ FILE: tests/amsterdam/__init__.py ================================================ """ Test cases for EVM functionality introduced in Amsterdam, [EIP-7773: Hardfork Meta - Glamsterdam](https://eip.directory/eips/eip-7773). """ ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/__init__.py ================================================ """Tests for [EIP-7928: Block-level Access Lists](https://eips.ethereum.org/EIPS/eip-7928).""" ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/spec.py ================================================ """Reference spec for [EIP-7928: Block-level Access Lists.](https://eips.ethereum.org/EIPS/eip-7928).""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Reference specification.""" git_path: str version: str ref_spec_7928 = ReferenceSpec( git_path="EIPS/eip-7928.md", version="e7f0963a024b3d0dedc4488a7553bf7c70dedb3e", ) @dataclass(frozen=True) class Spec: """Constants and parameters from EIP-7928.""" # RLP encoding is used for block access list data structures BAL_ENCODING_FORMAT: str = "RLP" # Maximum limits for block access list data structures TARGET_MAX_GAS_LIMIT = 600_000_000 MAX_TXS: int = 30_000 MAX_SLOTS: int = 300_000 MAX_ACCOUNTS: int = 300_000 # TODO: Use this as a function of the current fork. MAX_CODE_SIZE: int = 24_576 # 24 KiB # Type size constants ADDRESS_SIZE: int = 20 # Ethereum address size in bytes STORAGE_KEY_SIZE: int = 32 # Storage slot key size in bytes STORAGE_VALUE_SIZE: int = 32 # Storage value size in bytes HASH_SIZE: int = 32 # Hash size in bytes # Numeric type limits MAX_TX_INDEX: int = 2**16 - 1 # uint16 max value MAX_BALANCE: int = 2**128 - 1 # uint128 max value MAX_NONCE: int = 2**64 - 1 # uint64 max value ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists.py ================================================ """Tests for EIP-7928 using the consistent data class pattern.""" from typing import Callable, Dict import pytest from ethereum_test_base_types import AccessList, Address, Hash from ethereum_test_forks import Fork from ethereum_test_specs.blockchain import Header from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Initcode, Transaction, compute_create_address, ) from ethereum_test_types import Environment from ethereum_test_types.block_access_list import ( BalAccountExpectation, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageChange, BalStorageSlot, BlockAccessListExpectation, ) from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_7928 REFERENCE_SPEC_GIT_PATH = ref_spec_7928.git_path REFERENCE_SPEC_VERSION = ref_spec_7928.version pytestmark = pytest.mark.valid_from("Amsterdam") def test_bal_nonce_changes( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """Ensure BAL captures changes to nonce.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) tx = Transaction( sender=alice, to=bob, value=100, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), bob: Account(balance=100), }, ) def test_bal_balance_changes( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Ensure BAL captures changes to balance.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator( calldata=b"", contract_creation=False, access_list=[], ) tx_gas_limit = intrinsic_gas_cost + 1000 # add a small buffer tx = Transaction( sender=alice, to=bob, value=100, gas_limit=tx_gas_limit, gas_price=1_000_000_000, ) alice_account = pre[alice] assert alice_account is not None, "Alice account should exist" alice_initial_balance = alice_account.balance # Account for both the value sent and gas cost (gas_price * gas_used) alice_final_balance = alice_initial_balance - 100 - (intrinsic_gas_cost * 1_000_000_000) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], balance_changes=[ BalBalanceChange(tx_index=1, post_balance=alice_final_balance) ], ), bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1, balance=alice_final_balance), bob: Account(balance=100), }, ) def test_bal_code_changes( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """Ensure BAL captures changes to account code.""" runtime_code = Op.STOP runtime_code_bytes = bytes(runtime_code) init_code = ( Op.PUSH1(len(runtime_code_bytes)) # size = 1 + Op.DUP1 # duplicate size for return + Op.PUSH1(0x0C) # offset in init code where runtime code starts + Op.PUSH1(0x00) # dest offset + Op.CODECOPY # copy runtime code to memory + Op.PUSH1(0x00) # memory offset for return + Op.RETURN # return runtime code + runtime_code # the actual runtime code to deploy ) init_code_bytes = bytes(init_code) # Factory contract that uses CREATE to deploy factory_code = ( # Push init code to memory Op.PUSH32(init_code_bytes) + Op.PUSH1(0x00) + Op.MSTORE # Store at memory position 0 # CREATE parameters: value, offset, size + Op.PUSH1(len(init_code_bytes)) # size of init code + Op.PUSH1(32 - len(init_code_bytes)) # offset in memory (account for padding) + Op.PUSH1(0x00) # value = 0 (no ETH sent) + Op.CREATE # Deploy the contract + Op.STOP ) factory_contract = pre.deploy_contract(code=factory_code) alice = pre.fund_eoa() tx = Transaction( sender=alice, to=factory_contract, gas_limit=500000, ) created_contract = compute_create_address(address=factory_contract, nonce=1) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), factory_contract: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=2)], ), created_contract: BalAccountExpectation( code_changes=[BalCodeChange(tx_index=1, new_code=runtime_code_bytes)], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), factory_contract: Account(nonce=2), # incremented by CREATE to 2 created_contract: Account( code=runtime_code_bytes, storage={}, ), }, ) @pytest.mark.parametrize("self_destruct_in_same_tx", [True, False], ids=["same_tx", "new_tx"]) @pytest.mark.parametrize("pre_funded", [True, False], ids=["pre_funded", "not_pre_funded"]) def test_bal_self_destruct( pre: Alloc, blockchain_test: BlockchainTestFiller, self_destruct_in_same_tx: bool, pre_funded: bool, ) -> None: """Ensure BAL captures balance changes caused by `SELFDESTRUCT`.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) selfdestruct_code = ( Op.SLOAD(0x01) # Read from storage slot 0x01 + Op.SSTORE(0x02, 0x42) # Write to storage slot 0x02 + Op.SELFDESTRUCT(bob) ) # A pre existing self-destruct contract with initial storage kaboom = pre.deploy_contract(code=selfdestruct_code, storage={0x01: 0x123}) # A template for self-destruct contract self_destruct_init_code = Initcode(deploy_code=selfdestruct_code) template = pre.deploy_contract(code=self_destruct_init_code) transfer_amount = expected_recipient_balance = 100 pre_fund_amount = 10 if self_destruct_in_same_tx: # The goal is to create a self-destructing contract in the same # transaction to trigger deletion of code as per EIP-6780. # The factory contract below creates a new self-destructing # contract and calls it in this transaction. bytecode_size = len(self_destruct_init_code) factory_bytecode = ( # Clone template memory Op.EXTCODECOPY(template, 0, 0, bytecode_size) # Fund 100 wei and deploy the clone + Op.CREATE(transfer_amount, 0, bytecode_size) # Call the clone, which self-destructs + Op.CALL(100_000, Op.DUP6, 0, 0, 0, 0, 0) + Op.STOP ) factory = pre.deploy_contract(code=factory_bytecode) kaboom_same_tx = compute_create_address(address=factory, nonce=1) # Determine which account will be self-destructed self_destructed_account = kaboom_same_tx if self_destruct_in_same_tx else kaboom if pre_funded: expected_recipient_balance += pre_fund_amount pre.fund_address(address=self_destructed_account, amount=pre_fund_amount) tx = Transaction( sender=alice, to=factory if self_destruct_in_same_tx else kaboom, value=transfer_amount, gas_limit=1_000_000, gas_price=0xA, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), bob: BalAccountExpectation( balance_changes=[ BalBalanceChange(tx_index=1, post_balance=expected_recipient_balance) ] ), self_destructed_account: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=0)] if pre_funded else [], # Accessed slots for same-tx are recorded as reads (0x02) storage_reads=[0x01, 0x02] if self_destruct_in_same_tx else [0x01], # Storage changes are recorded for non-same-tx # self-destructs storage_changes=[ BalStorageSlot( slot=0x02, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)] ) ] if not self_destruct_in_same_tx else [], code_changes=[], # should not be present nonce_changes=[], # should not be present ), } ), ) post: Dict[Address, Account] = { alice: Account(nonce=1), bob: Account(balance=expected_recipient_balance), } # If the account was self-destructed in the same transaction, # we expect the account to non-existent and its balance to be 0. if self_destruct_in_same_tx: post.update( { factory: Account( nonce=2, # incremented after CREATE balance=0, # spent on CREATE code=factory_bytecode, ), kaboom_same_tx: Account.NONEXISTENT, # type: ignore # The pre-existing contract remains unaffected kaboom: Account(balance=0, code=selfdestruct_code, storage={0x01: 0x123}), } ) else: post.update( { # This contract was self-destructed in a separate tx. # From EIP 6780: `SELFDESTRUCT` does not delete any data # (including storage keys, code, or the account itself). kaboom: Account( balance=0, code=selfdestruct_code, storage={0x01: 0x123, 0x2: 0x42} ), } ) blockchain_test( pre=pre, blocks=[block], post=post, ) @pytest.mark.parametrize( "account_access_opcode", [ pytest.param(lambda target_addr: Op.BALANCE(target_addr), id="balance"), pytest.param(lambda target_addr: Op.EXTCODESIZE(target_addr), id="extcodesize"), pytest.param(lambda target_addr: Op.EXTCODECOPY(target_addr, 0, 0, 32), id="extcodecopy"), pytest.param(lambda target_addr: Op.EXTCODEHASH(target_addr), id="extcodehash"), pytest.param(lambda target_addr: Op.CALL(0, target_addr, 0, 0, 0, 0, 0), id="call"), pytest.param( lambda target_addr: Op.CALLCODE(0, target_addr, 0, 0, 0, 0, 0), id="callcode" ), pytest.param( lambda target_addr: Op.DELEGATECALL(0, target_addr, 0, 0, 0, 0), id="delegatecall" ), pytest.param( lambda target_addr: Op.STATICCALL(0, target_addr, 0, 0, 0, 0), id="staticcall" ), ], ) def test_bal_account_access_target( pre: Alloc, blockchain_test: BlockchainTestFiller, account_access_opcode: Callable[[Address], Op], ) -> None: """Ensure BAL captures target address of account access opcodes.""" alice = pre.fund_eoa() target_contract = pre.deploy_contract(code=Op.STOP) oracle_contract = pre.deploy_contract( balance=100, code=account_access_opcode(target_contract), ) tx = Transaction(sender=alice, to=oracle_contract, gas_limit=5_000_000, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)] ), target_contract: BalAccountExpectation.empty(), oracle_contract: BalAccountExpectation.empty(), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) def test_bal_call_with_value_transfer( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """ Ensure BAL captures balance changes from CALL opcode with value transfer. """ alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) # Oracle contract that uses CALL to transfer 100 wei to Bob oracle_code = Op.CALL(0, bob, 100, 0, 0, 0, 0) oracle_contract = pre.deploy_contract(code=oracle_code, balance=200) tx = Transaction(sender=alice, to=oracle_contract, gas_limit=1_000_000, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), oracle_contract: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) def test_bal_callcode_with_value_transfer( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """ Ensure BAL captures balance changes from CALLCODE opcode with value transfer. """ alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) # TargetContract sends 100 wei to bob target_code = Op.CALL(0, bob, 100, 0, 0, 0, 0) target_contract = pre.deploy_contract(code=target_code) # Oracle contract that uses CALLCODE to execute TargetContract's code oracle_code = Op.CALLCODE(50_000, target_contract, 100, 0, 0, 0, 0) oracle_contract = pre.deploy_contract(code=oracle_code, balance=200) tx = Transaction(sender=alice, to=oracle_contract, gas_limit=1_000_000, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), oracle_contract: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), target_contract: BalAccountExpectation.empty(), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) @pytest.mark.parametrize( "delegated_opcode", [ pytest.param( lambda target_addr: Op.DELEGATECALL(50000, target_addr, 0, 0, 0, 0), id="delegatecall" ), pytest.param( lambda target_addr: Op.CALLCODE(50000, target_addr, 0, 0, 0, 0, 0), id="callcode" ), ], ) def test_bal_delegated_storage_writes( pre: Alloc, blockchain_test: BlockchainTestFiller, delegated_opcode: Callable[[Address], Op], ) -> None: """ Ensure BAL captures delegated storage writes via DELEGATECALL and CALLCODE. """ alice = pre.fund_eoa() # TargetContract that writes 0x42 to slot 0x01 target_code = Op.SSTORE(0x01, 0x42) target_contract = pre.deploy_contract(code=target_code) # Oracle contract that uses delegated opcode to execute # TargetContract's code oracle_code = delegated_opcode(target_contract) oracle_contract = pre.deploy_contract(code=oracle_code) tx = Transaction( sender=alice, to=oracle_contract, gas_limit=1_000_000, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), oracle_contract: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ) ], ), target_contract: BalAccountExpectation.empty(), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) @pytest.mark.parametrize( "delegated_opcode", [ pytest.param( lambda target_addr: Op.DELEGATECALL(50000, target_addr, 0, 0, 0, 0), id="delegatecall" ), pytest.param( lambda target_addr: Op.CALLCODE(50000, target_addr, 0, 0, 0, 0, 0), id="callcode" ), ], ) def test_bal_delegated_storage_reads( pre: Alloc, blockchain_test: BlockchainTestFiller, delegated_opcode: Callable[[Address], Op], ) -> None: """ Ensure BAL captures delegated storage reads via DELEGATECALL and CALLCODE. """ alice = pre.fund_eoa() # TargetContract that reads from slot 0x01 target_code = Op.SLOAD(0x01) + Op.STOP target_contract = pre.deploy_contract(code=target_code) # Oracle contract with storage slot 0x01 = 0x42, # uses delegated opcode to execute TargetContract's code oracle_code = delegated_opcode(target_contract) oracle_contract = pre.deploy_contract(code=oracle_code, storage={0x01: 0x42}) tx = Transaction( sender=alice, to=oracle_contract, gas_limit=1_000_000, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), oracle_contract: BalAccountExpectation( storage_reads=[0x01], ), target_contract: BalAccountExpectation.empty(), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) def test_bal_block_rewards( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Ensure BAL captures fee recipient balance changes from block rewards.""" alice_initial_balance = 1_000_000 alice = pre.fund_eoa(amount=alice_initial_balance) bob = pre.fund_eoa(amount=0) charlie = pre.fund_eoa(amount=0) # fee recipient intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas = intrinsic_gas_calculator( calldata=b"", contract_creation=False, access_list=[], ) tx_gas_limit = intrinsic_gas + 1000 # add a small buffer gas_price = 0xA tx = Transaction( sender=alice, to=bob, value=100, gas_limit=tx_gas_limit, gas_price=gas_price, ) # EIP-1559 fee calculation: # - Total gas cost total_gas_cost = intrinsic_gas * gas_price # - Tip portion genesis_env = Environment(base_fee_per_gas=0x7) base_fee_per_gas = fork.base_fee_per_gas_calculator()( parent_base_fee_per_gas=int(genesis_env.base_fee_per_gas or 0), parent_gas_used=0, parent_gas_limit=genesis_env.gas_limit, ) tip_to_charlie = (gas_price - base_fee_per_gas) * intrinsic_gas alice_final_balance = alice_initial_balance - 100 - total_gas_cost block = Block( txs=[tx], fee_recipient=charlie, # Set Charlie as the fee recipient header_verify=Header(base_fee_per_gas=base_fee_per_gas), expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], balance_changes=[ BalBalanceChange(tx_index=1, post_balance=alice_final_balance) ], ), bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=100)], ), charlie: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=tip_to_charlie)], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={}, genesis_environment=genesis_env, ) def test_bal_2930_account_listed_but_untouched( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """Ensure BAL excludes untouched access list accounts.""" alice = pre.fund_eoa() bob = pre.fund_eoa() oracle = pre.deploy_contract(code=Op.STOP) access_list = AccessList( address=oracle, storage_keys=[Hash(0x1)], ) gas_limit = 1_000_000 tx = Transaction(ty=1, sender=alice, to=bob, gas_limit=gas_limit, access_list=[access_list]) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), # The address excluded from BAL since state is not accessed oracle: None, } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), }, ) def test_bal_2930_slot_listed_but_untouched( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Ensure BAL excludes untouched access list storage slots.""" alice = pre.fund_eoa() pure_calculator = pre.deploy_contract( # Pure add operation Op.ADD(35, 7) ) access_list = AccessList( address=pure_calculator, storage_keys=[Hash(0x1)], ) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() gas_limit = ( intrinsic_gas_calculator( calldata=b"", contract_creation=False, access_list=[access_list], ) + 1000 ) # intrinsic + buffer tx = Transaction( ty=1, sender=alice, to=pure_calculator, gas_limit=gas_limit, access_list=[access_list] ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), # The account was loaded. pure_calculator: BalAccountExpectation.empty(), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), }, ) def test_bal_2930_slot_listed_and_unlisted_writes( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """ Ensure BAL includes storage writes regardless of access list presence. """ alice = pre.fund_eoa() storage_writer = pre.deploy_contract(code=Op.SSTORE(0x01, 0x42) + Op.SSTORE(0x02, 0x43)) # Access list only includes slot 0x01, but contract writes to both # 0x01 and 0x02 access_list = AccessList( address=storage_writer, storage_keys=[Hash(0x01)], ) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() gas_limit = ( intrinsic_gas_calculator( calldata=b"", contract_creation=False, access_list=[access_list], ) + 50000 ) # intrinsic + buffer for storage writes tx = Transaction( ty=1, sender=alice, to=storage_writer, gas_limit=gas_limit, access_list=[access_list] ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), storage_writer: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ), BalStorageSlot( slot=0x02, slot_changes=[BalStorageChange(tx_index=1, post_value=0x43)], ), ], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), storage_writer: Account(storage={0x01: 0x42, 0x02: 0x43}), }, ) def test_bal_2930_slot_listed_and_unlisted_reads( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Ensure BAL includes storage reads regardless of access list presence.""" alice = pre.fund_eoa() storage_reader = pre.deploy_contract( code=Op.SLOAD(0x01) + Op.SLOAD(0x02), storage={0x01: 0x42, 0x02: 0x43}, # Pre-populate storage with values ) # Access list only includes slot 0x01, but contract reads from both # 0x01 and 0x02 access_list = AccessList( address=storage_reader, storage_keys=[Hash(0x01)], ) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() gas_limit = ( intrinsic_gas_calculator( calldata=b"", contract_creation=False, access_list=[access_list], ) + 50000 ) # intrinsic + buffer for storage reads tx = Transaction( ty=1, sender=alice, to=storage_reader, gas_limit=gas_limit, access_list=[access_list] ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), storage_reader: BalAccountExpectation( storage_reads=[0x01, 0x02], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), storage_reader: Account(storage={0x01: 0x42, 0x02: 0x43}), }, ) def test_bal_self_transfer( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Test that BAL correctly handles self-transfers.""" start_balance = 1_000_000 alice = pre.fund_eoa(amount=start_balance) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() tx = Transaction( sender=alice, to=alice, gas_limit=intrinsic_gas_cost, value=100, gas_price=0xA ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], balance_changes=[ BalBalanceChange( tx_index=1, post_balance=start_balance - intrinsic_gas_cost * int(tx.gas_price or 0), ) ], ) } ), ) blockchain_test(pre=pre, blocks=[block], post={}) def test_bal_zero_value_transfer( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Test that BAL correctly handles zero-value transfers.""" start_balance = 1_000_000 alice = pre.fund_eoa(amount=start_balance) bob = pre.fund_eoa(amount=100) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() tx = Transaction(sender=alice, to=bob, gas_limit=intrinsic_gas_cost, value=0, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], balance_changes=[ BalBalanceChange( tx_index=1, post_balance=start_balance - intrinsic_gas_cost * int(tx.gas_price or 0), ) ], ), # Include the address; omit from balance_changes. bob: BalAccountExpectation(balance_changes=[]), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) @pytest.mark.parametrize( "initial_balance,transfer_amount,transfer_mechanism", [ pytest.param(0, 0, "call", id="zero_balance_zero_transfer_call"), pytest.param(0, 0, "selfdestruct", id="zero_balance_zero_transfer_selfdestruct"), pytest.param(1, 1, "call", id="nonzero_balance_net_zero"), pytest.param(100, 50, "call", id="larger_balance_net_zero"), ], ) def test_bal_net_zero_balance_transfer( pre: Alloc, blockchain_test: BlockchainTestFiller, initial_balance: int, transfer_amount: int, transfer_mechanism: str, ) -> None: """ Test that BAL does not record balance changes when net change is zero. A contract starts with `initial_balance`, receives `transfer_amount` (increasing its balance), then sends `transfer_amount` to a recipient (decreasing its balance back to `initial_balance`). The net change is zero, so BAL should not record any balance changes for this contract. The contract verifies this by reading its own balance with SELFBALANCE, storing it in slot 0, then sending that amount to the recipient. """ alice = pre.fund_eoa() recipient = pre.fund_eoa(amount=0) net_zero_bal_contract_code = ( Op.SSTORE(0, Op.SELFBALANCE) + Op.SELFDESTRUCT(recipient) if transfer_mechanism == "selfdestruct" # store current balance in slot 0 else ( Op.SSTORE(0, Op.SELFBALANCE) # send only the `transfer_amount` received to recipient (net zero) + Op.CALL(0, recipient, Op.CALLVALUE, 0, 0, 0, 0) + Op.STOP ) ) net_zero_bal_contract = pre.deploy_contract( code=net_zero_bal_contract_code, balance=initial_balance ) tx = Transaction( sender=alice, to=net_zero_bal_contract, value=transfer_amount, gas_limit=1_000_000, gas_price=0xA, ) expected_balance_in_slot = initial_balance + transfer_amount block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), net_zero_bal_contract: BalAccountExpectation( # receives transfer_amount and sends transfer_amount away # (net-zero change) balance_changes=[], storage_reads=[0x00] if expected_balance_in_slot == 0 else [], storage_changes=[ BalStorageSlot( slot=0x00, slot_changes=[ BalStorageChange(tx_index=1, post_value=expected_balance_in_slot) ], ) ] if expected_balance_in_slot > 0 else [], ), # recipient receives transfer_amount recipient: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=transfer_amount)] if transfer_amount > 0 else [], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ net_zero_bal_contract: Account( balance=initial_balance, storage={0x00: expected_balance_in_slot} if expected_balance_in_slot > 0 else {}, ), recipient: Account(balance=transfer_amount) if transfer_amount > 0 else Account.NONEXISTENT, }, ) def test_bal_pure_contract_call( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Test that BAL captures contract access for pure computation calls.""" alice = pre.fund_eoa() pure_contract = pre.deploy_contract(code=Op.ADD(0x3, 0x2)) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() gas_limit = intrinsic_gas_calculator() + 5_000 # Buffer tx = Transaction(sender=alice, to=pure_contract, gas_limit=gas_limit, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), # Ensure called contract is tracked pure_contract: BalAccountExpectation.empty(), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) def test_bal_noop_storage_write( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, ) -> None: """Test that BAL correctly handles no-op storage write.""" alice = pre.fund_eoa() storage_contract = pre.deploy_contract(code=Op.SSTORE(0x01, 0x42), storage={0x01: 0x42}) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() gas_limit = ( intrinsic_gas_calculator() # Sufficient gas for write + fork.gas_costs().G_COLD_SLOAD + fork.gas_costs().G_COLD_ACCOUNT_ACCESS + fork.gas_costs().G_STORAGE_SET + fork.gas_costs().G_BASE * 10 # Buffer for push ) tx = Transaction(sender=alice, to=storage_contract, gas_limit=gas_limit, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), storage_contract: BalAccountExpectation( storage_reads=[0x01], storage_changes=[], ), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) @pytest.mark.parametrize( "abort_opcode", [ pytest.param(Op.REVERT(0, 0), id="revert"), pytest.param(Op.INVALID, id="invalid"), ], ) def test_bal_aborted_storage_access( pre: Alloc, blockchain_test: BlockchainTestFiller, abort_opcode: Op ) -> None: """Ensure BAL captures storage access in aborted transactions correctly.""" alice = pre.fund_eoa() storage_contract = pre.deploy_contract( code=Op.SLOAD(0x01) + Op.SSTORE(0x02, 0x42) + abort_opcode, storage={0x01: 0x10}, # Pre-existing value in slot 0x01 ) tx = Transaction(sender=alice, to=storage_contract, gas_limit=5_000_000, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)] ), storage_contract: BalAccountExpectation( storage_changes=[], storage_reads=[0x01, 0x02], ), } ), ) blockchain_test( pre=pre, blocks=[block], post={}, ) @pytest.mark.parametrize( "account_access_opcode", [ pytest.param(lambda target_addr: Op.BALANCE(target_addr), id="balance"), pytest.param(lambda target_addr: Op.EXTCODESIZE(target_addr), id="extcodesize"), pytest.param(lambda target_addr: Op.EXTCODECOPY(target_addr, 0, 0, 32), id="extcodecopy"), pytest.param(lambda target_addr: Op.EXTCODEHASH(target_addr), id="extcodehash"), pytest.param(lambda target_addr: Op.CALL(0, target_addr, 50, 0, 0, 0, 0), id="call"), pytest.param( lambda target_addr: Op.CALLCODE(0, target_addr, 50, 0, 0, 0, 0), id="callcode" ), pytest.param( lambda target_addr: Op.DELEGATECALL(0, target_addr, 0, 0, 0, 0), id="delegatecall" ), pytest.param( lambda target_addr: Op.STATICCALL(0, target_addr, 0, 0, 0, 0), id="staticcall" ), ], ) @pytest.mark.parametrize( "abort_opcode", [ pytest.param(Op.REVERT(0, 0), id="revert"), pytest.param(Op.INVALID, id="invalid"), ], ) def test_bal_aborted_account_access( pre: Alloc, blockchain_test: BlockchainTestFiller, account_access_opcode: Callable[[Address], Op], abort_opcode: Op, ) -> None: """Ensure BAL captures account access in aborted transactions.""" alice = pre.fund_eoa() target_contract = pre.deploy_contract(code=Op.STOP) abort_contract = pre.deploy_contract( balance=100, code=account_access_opcode(target_contract) + abort_opcode, ) tx = Transaction(sender=alice, to=abort_contract, gas_limit=5_000_000, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)] ), target_contract: BalAccountExpectation.empty(), abort_contract: BalAccountExpectation.empty(), } ), ) blockchain_test( pre=pre, blocks=[block], post={}, ) def test_bal_fully_unmutated_account( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """ Test that BAL captures account that has zero net mutations. oracle account: 1. Storage read and write the same value (no net change). 2. Receives `0` value transfer (no net change). """ alice = pre.fund_eoa() # Deploy Oracle contract with pre-existing storage value oracle = pre.deploy_contract( code=Op.SSTORE(0x01, 0x42) + Op.STOP, storage={0x01: 0x42}, # Pre-existing value ) tx = Transaction(sender=alice, to=oracle, gas_limit=1_000_000, value=0, gas_price=0xA) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), oracle: BalAccountExpectation( storage_changes=[], # No net storage changes storage_reads=[0x01], # But storage was accessed balance_changes=[], # No net balance changes ), } ), ) blockchain_test(pre=pre, blocks=[block], post={}) ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists_eip7702.py ================================================ """Tests for the effects of EIP-7702 transactions on EIP-7928.""" import pytest from ethereum_test_tools import ( Account, Alloc, AuthorizationTuple, Block, BlockchainTestFiller, Transaction, ) from ethereum_test_types.block_access_list import ( BalAccountExpectation, BalBalanceChange, BalCodeChange, BalNonceChange, BalStorageChange, BalStorageSlot, BlockAccessListExpectation, ) from ethereum_test_vm import Opcodes as Op from ...prague.eip7702_set_code_tx.spec import Spec as Spec7702 from .spec import ref_spec_7928 REFERENCE_SPEC_GIT_PATH = ref_spec_7928.git_path REFERENCE_SPEC_VERSION = ref_spec_7928.version pytestmark = pytest.mark.valid_from("Amsterdam") @pytest.mark.parametrize( "self_funded", [ pytest.param(False, id="sponsored"), pytest.param(True, id="self_funded"), ], ) def test_bal_7702_delegation_create( pre: Alloc, blockchain_test: BlockchainTestFiller, self_funded: bool, ) -> None: """Ensure BAL captures creation of EOA delegation.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) if not self_funded: relayer = pre.fund_eoa() sender = relayer else: sender = alice oracle = pre.deploy_contract(code=Op.STOP) tx = Transaction( sender=sender, to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( address=oracle, nonce=1 if self_funded else 0, signer=alice, ) ], ) account_expectations = { alice: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=2 if self_funded else 1)], code_changes=[ BalCodeChange(tx_index=1, new_code=Spec7702.delegation_designation(oracle)) ], ), bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10)] ), # Oracle must not be present in BAL - the account is never accessed oracle: None, } # For sponsored variant, relayer must also be included in BAL if not self_funded: account_expectations[relayer] = BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations=account_expectations ), ) post = { alice: Account( nonce=2 if self_funded else 1, code=Spec7702.delegation_designation(oracle) ), # Bob receives 10 wei bob: Account(balance=10), } # For sponsored variant, include relayer in post state if not self_funded: post.update({relayer: Account(nonce=1)}) blockchain_test( pre=pre, blocks=[block], post=post, ) @pytest.mark.parametrize( "self_funded", [ pytest.param(False, id="sponsored"), pytest.param(True, id="self_funded"), ], ) def test_bal_7702_delegation_update( pre: Alloc, blockchain_test: BlockchainTestFiller, self_funded: bool, ) -> None: """Ensure BAL captures update of existing EOA delegation.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) if not self_funded: relayer = pre.fund_eoa() sender = relayer else: sender = alice oracle1 = pre.deploy_contract(code=Op.STOP) oracle2 = pre.deploy_contract(code=Op.STOP) ## Perhaps create pre existing delegation, ## see `test_bal_7702_delegated_storage_access` since ## `test_bal_7702_delegation_create` already tests creation tx_create = Transaction( sender=sender, to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( address=oracle1, nonce=1 if self_funded else 0, signer=alice, ) ], ) tx_update = Transaction( nonce=2 if self_funded else 1, sender=sender, to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( address=oracle2, nonce=3 if self_funded else 1, signer=alice, ) ], ) account_expectations = { alice: BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=2 if self_funded else 1), BalNonceChange(tx_index=2, post_nonce=4 if self_funded else 2), ], code_changes=[ BalCodeChange(tx_index=1, new_code=Spec7702.delegation_designation(oracle1)), BalCodeChange(tx_index=2, new_code=Spec7702.delegation_designation(oracle2)), ], ), bob: BalAccountExpectation( balance_changes=[ BalBalanceChange(tx_index=1, post_balance=10), BalBalanceChange(tx_index=2, post_balance=20), ] ), # Both delegation targets must not be present in BAL # the account is never accessed oracle1: None, oracle2: None, } # For sponsored variant, relayer must also be included in BAL if not self_funded: account_expectations[relayer] = BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=2, post_nonce=2), ], ) block = Block( txs=[tx_create, tx_update], expected_block_access_list=BlockAccessListExpectation( account_expectations=account_expectations ), ) post = { # Finally Alice's account should be delegated to oracle2 alice: Account( nonce=4 if self_funded else 2, code=Spec7702.delegation_designation(oracle2) ), # Bob receives 20 wei in total bob: Account(balance=20), } # For sponsored variant, include relayer in post state if not self_funded: post.update({relayer: Account(nonce=2)}) blockchain_test( pre=pre, blocks=[block], post=post, ) @pytest.mark.parametrize( "self_funded", [ pytest.param(False, id="sponsored"), pytest.param(True, id="self_funded"), ], ) def test_bal_7702_delegation_clear( pre: Alloc, blockchain_test: BlockchainTestFiller, self_funded: bool, ) -> None: """Ensure BAL captures clearing of EOA delegation.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) if not self_funded: relayer = pre.fund_eoa() sender = relayer else: sender = alice oracle = pre.deploy_contract(code=Op.STOP) abyss = Spec7702.RESET_DELEGATION_ADDRESS ## Perhaps create pre existing delegation, ## see `test_bal_7702_delegated_storage_access` since ## `test_bal_7702_delegation_create` already tests creation tx_create = Transaction( sender=sender, to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( address=oracle, nonce=1 if self_funded else 0, signer=alice, ) ], ) tx_clear = Transaction( nonce=2 if self_funded else 1, sender=sender, to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( address=abyss, nonce=3 if self_funded else 1, signer=alice, ) ], ) account_expectations = { alice: BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=2 if self_funded else 1), BalNonceChange(tx_index=2, post_nonce=4 if self_funded else 2), ], code_changes=[ BalCodeChange(tx_index=1, new_code=Spec7702.delegation_designation(oracle)), BalCodeChange(tx_index=2, new_code=""), ], ), bob: BalAccountExpectation( balance_changes=[ BalBalanceChange(tx_index=1, post_balance=10), BalBalanceChange(tx_index=2, post_balance=20), ] ), # Both delegation targets must not be present in BAL # the account is never accessed oracle: None, abyss: None, } # For sponsored variant, relayer must also be included in BAL if not self_funded: account_expectations[relayer] = BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=2, post_nonce=2), ], ) block = Block( txs=[tx_create, tx_clear], expected_block_access_list=BlockAccessListExpectation( account_expectations=account_expectations ), ) post = { # Finally Alice's account should NOT have any code alice: Account(nonce=4 if self_funded else 2, code=""), # Bob receives 20 wei in total bob: Account(balance=20), } # For sponsored variant, include relayer in post state if not self_funded: post.update({relayer: Account(nonce=2)}) blockchain_test( pre=pre, blocks=[block], post=post, ) def test_bal_7702_delegated_storage_access( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """ Ensure BAL captures storage operations when calling a delegated EIP-7702 account. """ # Oracle contract that reads from slot 0x01 and writes to slot 0x02 oracle = pre.deploy_contract(code=Op.SLOAD(0x01) + Op.PUSH1(0x42) + Op.PUSH1(0x02) + Op.SSTORE) bob = pre.fund_eoa() alice = pre.deploy_contract(nonce=0x1, code=Spec7702.delegation_designation(oracle), balance=0) tx = Transaction( sender=bob, to=alice, # Bob calls Alice (delegated account) value=10, gas_limit=1_000_000, gas_price=0xA, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ alice: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10)], storage_changes=[ BalStorageSlot( slot=0x02, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ) ], storage_reads=[0x01], ), bob: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), # Oracle appears in BAL due to account access # (delegation target) oracle: BalAccountExpectation.empty(), } ), ) post = { alice: Account( balance=10, storage={0x02: 0x42}, ), bob: Account(nonce=1), } blockchain_test( pre=pre, blocks=[block], post=post, ) def test_bal_7702_invalid_nonce_authorization( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """Ensure BAL handles failed authorization due to wrong nonce.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) relayer = pre.fund_eoa() oracle = pre.deploy_contract(code=Op.STOP) tx = Transaction( sender=relayer, # Sponsored transaction to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( address=oracle, nonce=5, # Wrong nonce - Alice's actual nonce is 0 signer=alice, ) ], ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ # Ensuring silent fail bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10)] ), relayer: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), # Alice's account was marked warm but no changes were made alice: BalAccountExpectation.empty(), # Oracle must NOT be present - authorization failed so # account is never accessed oracle: None, } ), ) post = { relayer: Account(nonce=1), bob: Account(balance=10), } blockchain_test( pre=pre, blocks=[block], post=post, ) def test_bal_7702_invalid_chain_id_authorization( pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """Ensure BAL handles failed authorization due to wrong chain id.""" alice = pre.fund_eoa() bob = pre.fund_eoa(amount=0) relayer = pre.fund_eoa() oracle = pre.deploy_contract(code=Op.STOP) tx = Transaction( sender=relayer, # Sponsored transaction to=bob, value=10, gas_limit=1_000_000, gas_price=0xA, authorization_list=[ AuthorizationTuple( chain_id=999, # Wrong chain id address=oracle, nonce=0, signer=alice, ) ], ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ # Alice's account must not be read because # authorization fails before loading her account alice: None, # Ensuring silent fail bob: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10)] ), relayer: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), # Oracle must NOT be present - authorization failed so # account never accessed oracle: None, } ), ) post = { relayer: Account(nonce=1), bob: Account(balance=10), } blockchain_test( # Set chain id here # so this test holds if the default is # ever changed chain_id=1, pre=pre, blocks=[block], post=post, ) @pytest.mark.with_all_call_opcodes def test_bal_7702_delegated_via_call_opcode( pre: Alloc, blockchain_test: BlockchainTestFiller, call_opcode: Op, ) -> None: """ Ensure BAL captures delegation target when a contract uses *CALL opcodes to call a delegated account. """ # `oracle` contract that just returns successfully oracle = pre.deploy_contract(code=Op.STOP) # `alice` is a delegated account pointing to oracle alice = pre.deploy_contract( nonce=1, code=Spec7702.delegation_designation(oracle), balance=0, ) # caller contract that uses `call_opcode` to call `alice` caller = pre.deploy_contract(code=(call_opcode(address=alice) + Op.STOP)) bob = pre.fund_eoa() tx = Transaction( sender=bob, to=caller, # `bob` calls caller contract gas_limit=10_000_000, gas_price=0xA, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ bob: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), caller: BalAccountExpectation.empty(), # `alice` is accessed due to being the call target alice: BalAccountExpectation.empty(), # `oracle` appears in BAL due to delegation target access oracle: BalAccountExpectation.empty(), } ), ) post = {bob: Account(nonce=1)} blockchain_test( pre=pre, blocks=[block], post=post, ) ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists_invalid.py ================================================ """ Test cases for invalid Block Access Lists. These tests verify that clients properly reject blocks with corrupted BALs. """ import pytest from ethereum_test_exceptions import BlockException from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Storage, Transaction, ) from ethereum_test_tools import ( Opcodes as Op, ) from ethereum_test_types.block_access_list import ( BalAccountChange, BalAccountExpectation, BalBalanceChange, BalNonceChange, BalStorageChange, BalStorageSlot, BlockAccessListExpectation, ) from ethereum_test_types.block_access_list.modifiers import ( append_account, duplicate_account, modify_balance, modify_nonce, modify_storage, remove_accounts, remove_balances, remove_nonces, reverse_accounts, swap_tx_indices, ) from .spec import ref_spec_7928 REFERENCE_SPEC_GIT_PATH = ref_spec_7928.git_path REFERENCE_SPEC_VERSION = ref_spec_7928.version @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_missing_nonce( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL is missing required nonce changes. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), receiver: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INVALID_BLOCK_ACCESS_LIST, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), } ).modify(remove_nonces(sender)), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_nonce_value( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL contains incorrect nonce value. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), # Unchanged receiver: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INVALID_BLOCK_ACCESS_LIST, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), } ).modify(modify_nonce(sender, tx_index=1, nonce=42)), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_storage_value( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL contains incorrect storage values. """ sender = pre.fund_eoa(amount=10**18) # Simple storage contract with canary values storage = Storage({1: 0, 2: 0, 3: 0}) # type: ignore contract = pre.deploy_contract( code=Op.SSTORE(1, 1) + Op.SSTORE(2, 2) + Op.SSTORE(3, 3), storage=storage.canary(), ) tx = Transaction( sender=sender, to=contract, gas_limit=100_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), contract: Account(storage=storage.canary()), }, blocks=[ Block( txs=[tx], exception=BlockException.INVALID_BLOCK_ACCESS_LIST, expected_block_access_list=BlockAccessListExpectation( account_expectations={ contract: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x01)], ), BalStorageSlot( slot=0x02, slot_changes=[BalStorageChange(tx_index=1, post_value=0x02)], ), BalStorageSlot( slot=0x03, slot_changes=[BalStorageChange(tx_index=1, post_value=0x03)], ), ], ), } ).modify( # Corrupt storage value for slot 0x02 modify_storage(contract, tx_index=1, slot=0x02, value=0xFF) ), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_tx_order( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL has incorrect transaction ordering. """ sender1 = pre.fund_eoa(amount=10**18) sender2 = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx1 = Transaction( sender=sender1, to=receiver, value=10**15, gas_limit=21_000, ) tx2 = Transaction( sender=sender2, to=receiver, value=2 * 10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender1: Account(balance=10**18, nonce=0), sender2: Account(balance=10**18, nonce=0), receiver: None, }, blocks=[ Block( txs=[tx1, tx2], exception=BlockException.INVALID_BLOCK_ACCESS_LIST, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender1: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), sender2: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=2, post_nonce=1)], ), receiver: BalAccountExpectation( balance_changes=[ BalBalanceChange(tx_index=1, post_balance=10**15), BalBalanceChange(tx_index=2, post_balance=3 * 10**15), ], ), } ).modify(swap_tx_indices(1, 2)), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_account( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL contains accounts that don't exist. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) phantom = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), receiver: None, phantom: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INVALID_BAL_EXTRA_ACCOUNT, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), } ).modify( append_account( BalAccountChange( address=phantom, nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ) ) ), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_duplicate_account( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL contains duplicate account entries. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), receiver: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INCORRECT_BLOCK_FORMAT, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), receiver: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10**15)], ), } ).modify(duplicate_account(sender)), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_account_order( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL has incorrect account ordering. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), receiver: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INCORRECT_BLOCK_FORMAT, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), receiver: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10**15)], ), } ).modify(reverse_accounts()), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_complex_corruption( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """Test complex BAL corruption with multiple transformations.""" sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) storage = Storage({1: 0, 2: 0}) # type: ignore contract = pre.deploy_contract( code=Op.SSTORE(1, 1) + Op.SSTORE(2, 2), storage=storage.canary(), ) tx1 = Transaction( sender=sender, to=contract, gas_limit=100_000, ) tx2 = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), contract: Account(storage=storage.canary()), receiver: None, }, blocks=[ Block( txs=[tx1, tx2], exception=BlockException.INVALID_BLOCK_ACCESS_LIST, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[ BalNonceChange(tx_index=1, post_nonce=1), BalNonceChange(tx_index=2, post_nonce=2), ], ), contract: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x01)], ), BalStorageSlot( slot=0x02, slot_changes=[BalStorageChange(tx_index=1, post_value=0x02)], ), ], ), receiver: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=2, post_balance=10**15)], ), } ).modify( remove_nonces(sender), modify_storage(contract, tx_index=1, slot=0x01, value=0xFF), remove_balances(receiver), swap_tx_indices(1, 2), ), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_missing_account( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL is missing an entire account. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), receiver: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INVALID_BAL_MISSING_ACCOUNT, expected_block_access_list=BlockAccessListExpectation( account_expectations={ sender: BalAccountExpectation( nonce_changes=[BalNonceChange(tx_index=1, post_nonce=1)], ), receiver: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10**15)], ), } ).modify(remove_accounts(receiver)), ) ], ) @pytest.mark.valid_from("Amsterdam") @pytest.mark.exception_test def test_bal_invalid_balance_value( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test that clients reject blocks where BAL contains incorrect balance value. """ sender = pre.fund_eoa(amount=10**18) receiver = pre.fund_eoa(amount=0) tx = Transaction( sender=sender, to=receiver, value=10**15, gas_limit=21_000, ) blockchain_test( pre=pre, post={ sender: Account(balance=10**18, nonce=0), receiver: None, }, blocks=[ Block( txs=[tx], exception=BlockException.INVALID_BLOCK_ACCESS_LIST, expected_block_access_list=BlockAccessListExpectation( account_expectations={ receiver: BalAccountExpectation( balance_changes=[BalBalanceChange(tx_index=1, post_balance=10**15)], ), } ).modify(modify_balance(receiver, tx_index=1, balance=999999)), ) ], ) ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists_opcodes.py ================================================ """ Tests for EIP-7928 Block Access Lists with single-opcode success and OOG scenarios. Block access lists (BAL) are generated via a client's state tracing journal. Residual journal entries may persist when opcodes run out of gas, resulting in a bloated BAL payload. Issues identified in: https://github.com/paradigmxyz/reth/issues/17765 https://github.com/bluealloy/revm/pull/2903 These tests ensure out-of-gas operations are not recorded in BAL, preventing consensus issues. """ from enum import Enum import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Transaction, ) from ethereum_test_tools import ( Opcodes as Op, ) from ethereum_test_types.block_access_list import ( BalAccountExpectation, BalStorageChange, BalStorageSlot, BlockAccessListExpectation, ) from ethereum_test_vm import Bytecode from .spec import ref_spec_7928 REFERENCE_SPEC_GIT_PATH = ref_spec_7928.git_path REFERENCE_SPEC_VERSION = ref_spec_7928.version pytestmark = pytest.mark.valid_from("Amsterdam") class OutOfGasAt(Enum): """ Enumeration of specific gas boundaries where OOG can occur. """ EIP_2200_STIPEND = "oog_at_eip2200_stipend" EIP_2200_STIPEND_PLUS_1 = "oog_at_eip2200_stipend_plus_1" EXACT_GAS_MINUS_1 = "oog_at_exact_gas_minus_1" @pytest.mark.parametrize( "out_of_gas_at", [ OutOfGasAt.EIP_2200_STIPEND, OutOfGasAt.EIP_2200_STIPEND_PLUS_1, OutOfGasAt.EXACT_GAS_MINUS_1, None, # no oog, successful sstore ], ids=lambda x: x.value if x else "successful_sstore", ) def test_bal_sstore_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, out_of_gas_at: OutOfGasAt | None, ) -> None: """ Test BAL recording with SSTORE at various OOG boundaries and success. 1. OOG at EIP-2200 stipend check & implicit SLOAD -> no BAL changes 2. OOG post EIP-2200 stipend check & implicit SLOAD -> storage read in BAL 3. OOG at exact gas minus 1 -> storage read in BAL 4. exact gas (success) -> storage write in BAL """ alice = pre.fund_eoa() gas_costs = fork.gas_costs() # Create contract that attempts SSTORE to cold storage slot 0x01 storage_contract_code = Bytecode(Op.SSTORE(0x01, 0x42)) storage_contract = pre.deploy_contract(code=storage_contract_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - PUSH1 (value and slot) = G_VERY_LOW * 2 # - SSTORE cold (to zero slot) = G_STORAGE_SET + G_COLD_SLOAD sload_cost = gas_costs.G_COLD_SLOAD sstore_cost = gas_costs.G_STORAGE_SET sstore_cold_cost = sstore_cost + sload_cost push_cost = gas_costs.G_VERY_LOW * 2 stipend = gas_costs.G_CALL_STIPEND if out_of_gas_at == OutOfGasAt.EIP_2200_STIPEND: # 2300 after PUSHes (fails stipend check: 2300 <= 2300) tx_gas_limit = intrinsic_gas_cost + push_cost + stipend elif out_of_gas_at == OutOfGasAt.EIP_2200_STIPEND_PLUS_1: # 2301 after PUSHes (passes stipend, does SLOAD, fails charge_gas) tx_gas_limit = intrinsic_gas_cost + push_cost + stipend + 1 elif out_of_gas_at == OutOfGasAt.EXACT_GAS_MINUS_1: # fail at charge_gas() at exact gas - 1 (boundary condition) tx_gas_limit = intrinsic_gas_cost + push_cost + sstore_cold_cost - 1 else: # exact gas for successful SSTORE tx_gas_limit = intrinsic_gas_cost + push_cost + sstore_cold_cost tx = Transaction( sender=alice, to=storage_contract, gas_limit=tx_gas_limit, ) # Storage read recorded only if we pass the stipend check and reach # implicit SLOAD (STIPEND_PLUS_1 and EXACT_GAS_MINUS_1) expect_storage_read = out_of_gas_at in ( OutOfGasAt.EIP_2200_STIPEND_PLUS_1, OutOfGasAt.EXACT_GAS_MINUS_1, ) expect_storage_write = out_of_gas_at is None block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ storage_contract: BalAccountExpectation( storage_changes=[ BalStorageSlot( slot=0x01, slot_changes=[BalStorageChange(tx_index=1, post_value=0x42)], ), ] if expect_storage_write else [], storage_reads=[0x01] if expect_storage_read else [], ) } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), storage_contract: Account(storage={0x01: 0x42} if expect_storage_write else {}), }, ) @pytest.mark.parametrize( "fails_at_sload", [True, False], ids=["oog_at_sload", "successful_sload"], ) def test_bal_sload_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, fails_at_sload: bool, ) -> None: """ Ensure BAL handles SLOAD and OOG during SLOAD appropriately. """ alice = pre.fund_eoa() gas_costs = fork.gas_costs() # Create contract that attempts SLOAD from cold storage slot 0x01 storage_contract_code = Bytecode( Op.PUSH1(0x01) # Storage slot (cold) + Op.SLOAD # Load value from slot - this will OOG + Op.STOP ) storage_contract = pre.deploy_contract(code=storage_contract_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - PUSH1 (slot) = G_VERY_LOW # - SLOAD cold = G_COLD_SLOAD push_cost = gas_costs.G_VERY_LOW sload_cold_cost = gas_costs.G_COLD_SLOAD tx_gas_limit = intrinsic_gas_cost + push_cost + sload_cold_cost if fails_at_sload: # subtract 1 gas to ensure OOG at SLOAD tx_gas_limit -= 1 tx = Transaction( sender=alice, to=storage_contract, gas_limit=tx_gas_limit, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ storage_contract: BalAccountExpectation( storage_reads=[] if fails_at_sload else [0x01], ) } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), storage_contract: Account(storage={}), }, ) @pytest.mark.parametrize( "fails_at_balance", [True, False], ids=["oog_at_balance", "successful_balance"] ) def test_bal_balance_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, fails_at_balance: bool, ) -> None: """Ensure BAL handles BALANCE and OOG during BALANCE appropriately.""" alice = pre.fund_eoa() bob = pre.fund_eoa() gas_costs = fork.gas_costs() # Create contract that attempts to check Bob's balance balance_checker_code = Bytecode( Op.PUSH20(bob) # Bob's address + Op.BALANCE # Check balance (cold access) + Op.STOP ) balance_checker = pre.deploy_contract(code=balance_checker_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - PUSH20 = G_VERY_LOW # - BALANCE cold = G_COLD_ACCOUNT_ACCESS push_cost = gas_costs.G_VERY_LOW balance_cold_cost = gas_costs.G_COLD_ACCOUNT_ACCESS tx_gas_limit = intrinsic_gas_cost + push_cost + balance_cold_cost if fails_at_balance: # subtract 1 gas to ensure OOG at BALANCE tx_gas_limit -= 1 tx = Transaction( sender=alice, to=balance_checker, gas_limit=tx_gas_limit, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ balance_checker: BalAccountExpectation.empty(), # Bob should only appear in BAL if BALANCE succeeded **({bob: None} if fails_at_balance else {bob: BalAccountExpectation.empty()}), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), bob: Account(), balance_checker: Account(), }, ) @pytest.mark.parametrize( "fails_at_extcodesize", [True, False], ids=["oog_at_extcodesize", "successful_extcodesize"] ) def test_bal_extcodesize_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, fails_at_extcodesize: bool, ) -> None: """ Ensure BAL handles EXTCODESIZE and OOG during EXTCODESIZE appropriately. """ alice = pre.fund_eoa() gas_costs = fork.gas_costs() # Create target contract with some code target_contract = pre.deploy_contract(code=Bytecode(Op.STOP)) # Create contract that checks target's code size codesize_checker_code = Bytecode( Op.PUSH20(target_contract) # Target contract address + Op.EXTCODESIZE # Check code size (cold access) + Op.STOP ) codesize_checker = pre.deploy_contract(code=codesize_checker_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - PUSH20 = G_VERY_LOW # - EXTCODESIZE cold = G_COLD_ACCOUNT_ACCESS push_cost = gas_costs.G_VERY_LOW extcodesize_cold_cost = gas_costs.G_COLD_ACCOUNT_ACCESS tx_gas_limit = intrinsic_gas_cost + push_cost + extcodesize_cold_cost if fails_at_extcodesize: # subtract 1 gas to ensure OOG at EXTCODESIZE tx_gas_limit -= 1 tx = Transaction( sender=alice, to=codesize_checker, gas_limit=tx_gas_limit, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ codesize_checker: BalAccountExpectation.empty(), # Target should only appear if EXTCODESIZE succeeded **( {target_contract: None} if fails_at_extcodesize else {target_contract: BalAccountExpectation.empty()} ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), codesize_checker: Account(), target_contract: Account(), }, ) @pytest.mark.parametrize("fails_at_call", [True, False], ids=["oog_at_call", "successful_call"]) def test_bal_call_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, fails_at_call: bool, ) -> None: """Ensure BAL handles CALL and OOG during CALL appropriately.""" alice = pre.fund_eoa() bob = pre.fund_eoa() gas_costs = fork.gas_costs() # Create contract that attempts to call Bob call_contract_code = Bytecode( Op.PUSH1(0) # retSize + Op.PUSH1(0) # retOffset + Op.PUSH1(0) # argsSize + Op.PUSH1(0) # argsOffset + Op.PUSH1(0) # value + Op.PUSH20(bob) # address + Op.PUSH2(0xFFFF) # gas (provide enough for the call) + Op.CALL # Call (cold account access) + Op.STOP ) call_contract = pre.deploy_contract(code=call_contract_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - 7 PUSH operations = G_VERY_LOW * 7 # - CALL cold = G_COLD_ACCOUNT_ACCESS (minimum for account access) push_cost = gas_costs.G_VERY_LOW * 7 call_cold_cost = gas_costs.G_COLD_ACCOUNT_ACCESS tx_gas_limit = intrinsic_gas_cost + push_cost + call_cold_cost if fails_at_call: # subtract 1 gas to ensure OOG at CALL tx_gas_limit -= 1 tx = Transaction( sender=alice, to=call_contract, gas_limit=tx_gas_limit, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ call_contract: BalAccountExpectation.empty(), # Bob should only appear if CALL succeeded **({bob: None} if fails_at_call else {bob: BalAccountExpectation.empty()}), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), call_contract: Account(), }, ) @pytest.mark.parametrize( "fails_at_delegatecall", [True, False], ids=["oog_at_delegatecall", "successful_delegatecall"] ) def test_bal_delegatecall_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, fails_at_delegatecall: bool, ) -> None: """ Ensure BAL handles DELEGATECALL and OOG during DELEGATECALL appropriately. """ alice = pre.fund_eoa() gas_costs = fork.gas_costs() # Create target contract target_contract = pre.deploy_contract(code=Bytecode(Op.STOP)) # Create contract that attempts delegatecall to target delegatecall_contract_code = Bytecode( Op.PUSH1(0) # retSize + Op.PUSH1(0) # retOffset + Op.PUSH1(0) # argsSize + Op.PUSH1(0) # argsOffset + Op.PUSH20(target_contract) # address + Op.PUSH2(0xFFFF) # gas (provide enough for the call) + Op.DELEGATECALL # Delegatecall (cold account access) + Op.STOP ) delegatecall_contract = pre.deploy_contract(code=delegatecall_contract_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - 6 PUSH operations = G_VERY_LOW * 6 # - DELEGATECALL cold = G_COLD_ACCOUNT_ACCESS push_cost = gas_costs.G_VERY_LOW * 6 delegatecall_cold_cost = gas_costs.G_COLD_ACCOUNT_ACCESS tx_gas_limit = intrinsic_gas_cost + push_cost + delegatecall_cold_cost if fails_at_delegatecall: # subtract 1 gas to ensure OOG at DELEGATECALL tx_gas_limit -= 1 tx = Transaction( sender=alice, to=delegatecall_contract, gas_limit=tx_gas_limit, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ delegatecall_contract: BalAccountExpectation.empty(), # Target should only appear if DELEGATECALL succeeded **( {target_contract: None} if fails_at_delegatecall else {target_contract: BalAccountExpectation.empty()} ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), delegatecall_contract: Account(), target_contract: Account(), }, ) @pytest.mark.parametrize( "fails_at_extcodecopy", [True, False], ids=["oog_at_extcodecopy", "successful_extcodecopy"] ) def test_bal_extcodecopy_and_oog( pre: Alloc, blockchain_test: BlockchainTestFiller, fork: Fork, fails_at_extcodecopy: bool, ) -> None: """ Ensure BAL handles EXTCODECOPY and OOG during EXTCODECOPY appropriately. """ alice = pre.fund_eoa() gas_costs = fork.gas_costs() # Create target contract with some code target_contract = pre.deploy_contract(code=Bytecode(Op.PUSH1(0x42) + Op.STOP)) # Create contract that attempts to copy code from target extcodecopy_contract_code = Bytecode( Op.PUSH1(0) # size - copy 0 bytes to minimize memory expansion cost + Op.PUSH1(0) # codeOffset + Op.PUSH1(0) # destOffset + Op.PUSH20(target_contract) # address + Op.EXTCODECOPY # Copy code (cold access + base cost) + Op.STOP ) extcodecopy_contract = pre.deploy_contract(code=extcodecopy_contract_code) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_calculator() # Costs: # - 4 PUSH operations = G_VERY_LOW * 4 # - EXTCODECOPY cold = G_COLD_ACCOUNT_ACCESS + (G_COPY * words) # where words = ceil32(size) // 32 = ceil32(0) // 32 = 0 push_cost = gas_costs.G_VERY_LOW * 4 extcodecopy_cold_cost = gas_costs.G_COLD_ACCOUNT_ACCESS # + (G_COPY * 0) = 0 tx_gas_limit = intrinsic_gas_cost + push_cost + extcodecopy_cold_cost if fails_at_extcodecopy: # subtract 1 gas to ensure OOG at EXTCODECOPY tx_gas_limit -= 1 tx = Transaction( sender=alice, to=extcodecopy_contract, gas_limit=tx_gas_limit, ) block = Block( txs=[tx], expected_block_access_list=BlockAccessListExpectation( account_expectations={ extcodecopy_contract: BalAccountExpectation.empty(), # Target should only appear if EXTCODECOPY succeeded **( {target_contract: None} if fails_at_extcodecopy else {target_contract: BalAccountExpectation.empty()} ), } ), ) blockchain_test( pre=pre, blocks=[block], post={ alice: Account(nonce=1), extcodecopy_contract: Account(), target_contract: Account(), }, ) ================================================ FILE: tests/amsterdam/eip7928_block_level_access_lists/test_cases.md ================================================ # EIP-7928 Block Access Lists (BAL) Test Cases | Function Name | Goal | Setup | Expectation | Status | |---------------|------|-------|-------------|--------| | `test_bal_nonce_changes` | Ensure BAL captures changes to nonce | Alice sends 100 wei to Bob | BAL MUST include changes to Alice's nonce. | ✅ Completed | | `test_bal_balance_changes` | Ensure BAL captures changes to balance | Alice sends 100 wei to Bob | BAL MUST include balance change for Alice, Bob, and Coinbase | ✅ Completed | | `test_bal_code_changes` | Ensure BAL captures changes to account code | Alice deploys factory contract that creates new contract | BAL MUST include code changes for newly deployed contract | ✅ Completed | | `test_bal_self_destruct` | Ensure BAL captures storage access and balance changes caused by `SELFDESTRUCT` | Parameterized test: Alice interacts with a contract (either existing or created same-tx) that reads from storage slot 0x01, writes to storage slot 0x02, then executes `SELFDESTRUCT` with Bob as recipient. Contract may be pre-funded with 10 wei | BAL MUST include Alice's nonce change (increment) and Bob's balance change (100 or 110 depending on pre-funding). For the self-destructing contract: storage_reads=[0x01], empty storage_changes=[], and if pre-funded, balance_changes with post_balance=0; if not pre-funded, no balance change recorded. MUST NOT have code_changes or nonce_changes entries | ✅ Completed | | `test_bal_account_access_target` | Ensure BAL captures target addresses of account access opcodes | Alice calls `Oracle` contract which uses account access opcodes (`BALANCE`, `EXTCODESIZE`, `EXTCODECOPY`, `EXTCODEHASH`, `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`) on `TargetContract`. | BAL MUST include Alice, `Oracle`, and `TargetContract` with empty changes for `TargetContract` and nonce changes for Alice. | ✅ Completed | | `test_bal_call_with_value_transfer` | Ensure BAL captures balance changes from `CALL` opcode with value transfer | Alice calls `Oracle` contract (200 wei balance) which uses `CALL` opcode to transfer 100 wei to Bob (0 wei balance). | BAL MUST include Alice (nonce changes), Oracle (balance change to 100 wei), and Bob (balance change to 100 wei). | ✅ Completed | | `test_bal_callcode_with_value_transfer` | Ensure BAL captures balance changes from `CALLCODE` opcode with value transfer | Alice calls `Oracle` contract (200 wei balance) which uses `CALLCODE` opcode to execute `TargetContract`'s code with 100 wei value transfer to Bob (0 wei balance). | BAL MUST include Alice (nonce changes), `Oracle` (balance change to 100 wei), Bob (balance change to 100 wei), and `TargetContract` (empty changes). | ✅ Completed | | `test_bal_delegated_storage_writes` | Ensure BAL captures delegated storage writes via `DELEGATECALL` and `CALLCODE` | Alice calls `Oracle` contract which uses `DELEGATECALL`/`CALLCODE` to `TargetContract` that writes `0x42` to slot `0x01`. | BAL MUST include Alice (nonce changes), `Oracle` (storage changes for slot `0x01` = `0x42`), and `TargetContract` (empty changes). | ✅ Completed | | `test_bal_delegated_storage_reads` | Ensure BAL captures delegated storage reads via `DELEGATECALL` and `CALLCODE` | Alice calls `Oracle` contract (with slot `0x01` = `0x42`) which uses `DELEGATECALL`/`CALLCODE` to `TargetContract` that reads from slot `0x01`. | BAL MUST include Alice (nonce changes), `Oracle` (storage reads for slot `0x01`), and `TargetContract` (empty changes). | ✅ Completed | | `test_bal_block_rewards` | BAL tracks fee recipient balance changes from block rewards | Alice sends 100 wei to Bob with Charlie as fee recipient | BAL MUST include fee recipient Charlie with `balance_changes` reflecting transaction fees collected from the block. | ✅ Completed | | `test_bal_2930_account_listed_but_untouched` | Ensure BAL excludes listed but untouched account | Alice sends a simple eth transfer tx to Bob with EIP-2930 access list including `Oracle` | BAL MUST NOT include any entry for `Oracle` because it wasn't accessed. | ✅ Completed | | `test_bal_2930_slot_listed_but_untouched` | Ensure BAL excludes listed but untouched storage slots | Alice sends tx with EIP-2930 access list including `(PureCalculator, slot=0x01)`; PureCalculator executes pure arithmetic (adding two numbers) without touching slot `0x01` | BAL MUST NOT include any entry for PureCalculator's slot `0x01` because it doesn't access state | ✅ Completed | | `test_bal_2930_slot_listed_and_unlisted_writes` | Ensure BAL includes storage writes regardless of access list presence | Alice sends tx with EIP-2930 access list including `(StorageWriter, slot=0x01)`; StorageWriter executes `SSTORE` to slots `0x01` and `0x02` | BAL MUST include `storage_changes` for StorageWriter's slots `0x01` and `0x02` | ✅ Completed | | `test_bal_2930_slot_listed_and_unlisted_reads` | Ensure BAL includes storage reads regardless of access list presence | Alice sends tx with EIP-2930 access list including `(StorageReader, slot=0x01)`; StorageReader executes `SLOAD` from slots `0x01` and `0x02` | BAL MUST include `storage_reads` for StorageReader's slots `0x01` and `0x02` | ✅ Completed | | `test_bal_self_transfer` | BAL handles self-transfers correctly | Alice sends `100 wei` to Alice | BAL **MUST** include one entry for Alice with `balance_changes` reflecting gas cost only (value cancels out) and nonce change. | ✅ Completed | | `test_bal_zero_value_transfer` | BAL handles zero-value transfers correctly | Alice sends `0 wei` to Bob | BAL **MUST** include Alice with `balance_changes` (gas cost only) and nonce change, and Bob in `account_changes` with empty `balance_changes`. | ✅ Completed | | `test_bal_noop_storage_write` | Ensure BAL includes storage read but not write for no-op writes where pre-state equals post-state | Contract with pre-existing storage value `0x42` in slot `0x01`; transaction executes `SSTORE(0x01, 0x42)` (writing same value) | BAL **MUST** include the contract address with `storage_reads` for slot `0x01` since it was accessed, but **MUST NOT** include it in `storage_changes` (no actual state change). | ✅ Completed | | `test_bal_fully_unmutated_account` | Ensure BAL captures account that has zero net mutations | Alice sends 0 wei to `Oracle` which writes same pre-existing value to storage | BAL MUST include Alice with `nonce_changes` and balance changes (gas), `Oracle` with `storage_reads` for accessed slot but empty `storage_changes`. | ✅ Completed | | `test_bal_net_zero_balance_transfer` | BAL includes accounts with net-zero balance change but excludes them from balance changes | Contract receives and sends same amount to recipient using CALL or SELFDESTRUCT | BAL **MUST** include contract in `account_changes` without `balance_changes` (net zero). BAL **MUST** record non-zero `balance_changes` for recipient. | ✅ Completed | | `test_bal_system_contracts_2935_4788` | BAL includes pre-exec system writes for parent hash & beacon root | Build a block with `N` normal txs; 2935 & 4788 active | BAL MUST include `HISTORY_STORAGE_ADDRESS` (EIP-2935) and `BEACON_ROOTS_ADDRESS` (EIP-4788) with `storage_changes` to ring-buffer slots; each write uses `tx_index = N` (system op). | 🟡 Planned | | `test_bal_system_dequeue_withdrawals_eip7002` | BAL tracks post-exec system dequeues for withdrawals | Pre-populate EIP-7002 withdrawal requests; produce a block where dequeues occur | BAL MUST include the 7002 system contract with `storage_changes` (queue head/tail slots 0–3) using `tx_index = len(txs)` and balance changes for withdrawal recipients. | 🟡 Planned | | `test_bal_system_dequeue_consolidations_eip7251` | BAL tracks post-exec system dequeues for consolidations | Pre-populate EIP-7251 consolidation requests; produce a block where dequeues occur | BAL MUST include the 7251 system contract with `storage_changes` (queue slots 0–3) using `tx_index = len(txs)`. | 🟡 Planned | | `test_bal_aborted_storage_access` | Ensure BAL captures storage access in aborted transactions correctly | Alice calls contract that reads storage slot `0x01`, writes to slot `0x02`, then aborts with `REVERT`/`INVALID` | BAL MUST include storage_reads for slots `0x01` and `0x02` (aborted writes become reads), empty storage_changes. Only nonce changes for Alice. | ✅ Completed | | `test_bal_aborted_account_access` | Ensure BAL captures account access in aborted transactions for all account accessing opcodes | Alice calls `AbortContract` that performs account access operations (`BALANCE`, `EXTCODESIZE`, `EXTCODECOPY`, `EXTCODEHASH`, `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`) on `TargetContract` and aborts via `REVERT`/`INVALID` | BAL MUST include Alice, `TargetContract`, and `AbortContract` in account_changes and nonce changes for Alice. | ✅ Completed | | `test_bal_pure_contract_call` | Ensure BAL captures contract access for pure computation calls | Alice calls `PureContract` that performs pure arithmetic (ADD operation) without storage or balance changes | BAL MUST include Alice and `PureContract` in `account_changes`, and `nonce_changes` for Alice. | ✅ Completed | | `test_bal_create2_to_A_read_then_selfdestruct` | BAL records balance change for A and storage access (no persistent change) | Tx0: Alice sends ETH to address **A**. Tx1: Deployer `CREATE2` a contract **at A**; contract does `SLOAD(B)` and immediately `SELFDESTRUCT(beneficiary=X)` in the same tx. | BAL **MUST** include **A** with `balance_changes` (funding in Tx0 and transfer on selfdestruct in Tx1). BAL **MUST** include storage key **B** as an accessed `StorageKey`, and **MUST NOT** include **B** under `storage_changes` (no persistence due to same-tx create+destruct). | 🟡 Planned | | `test_bal_create2_to_A_write_then_selfdestruct` | BAL records balance change for A and storage access even if a write occurred (no persistent change) | Tx0: Alice sends ETH to **A**. Tx1: Deployer `CREATE2` contract **at A**; contract does `SSTORE(B, v)` (optionally `SLOAD(B)`), then `SELFDESTRUCT(beneficiary=Y)` in the same tx. | BAL **MUST** include **A** with `balance_changes` (Tx0 fund; Tx1 outflow to `Y`). BAL **MUST** include **B** as `StorageKey` accessed, and **MUST NOT** include **B** under `storage_changes` (ephemeral write discarded because the contract was created and destroyed in the same tx). | 🟡 Planned | | `test_bal_precompile_funded_then_called` | BAL records precompile with balance change (fund) and access (call) | **Tx0**: Alice sends `1 ETH` to `ecrecover` (0x01). **Tx1**: Alice (or Bob) calls `ecrecover` with valid input and `0 ETH`. | BAL **MUST** include address `0x01` with `balance_changes` (from Tx0). No `storage_changes` or `code_changes`. | 🟡 Planned | | `test_bal_precompile_call_only` | BAL records precompile when called with no balance change | Alice calls `ecrecover` (0x01) with a valid input, sending **0 ETH**. | BAL **MUST** include address `0x01` in access list, with **no** `balance_changes`, `storage_changes`, or `code_changes`. | 🟡 Planned | | `test_bal_7702_delegated_create` | BAL tracks EIP-7702 delegation indicator write and contract creation | Alice sends a type-4 (7702) tx authorizing herself to delegate to `Deployer` code which executes `CREATE` | BAL MUST include for **Alice**: `code_changes` (delegation indicator), `nonce_changes` (increment from 7702 processing), and `balance_changes` (post-gas). For **Child**: `code_changes` (runtime bytecode) and `nonce_changes = 1`. | 🟡 Planned | | `test_bal_7702_delegation_create` | Ensure BAL captures creation of EOA delegation | Alice authorizes delegation to contract `Oracle`. Transaction sends 10 wei to Bob. Two variants: (1) Self-funded: Alice sends 7702 tx herself. (2) Sponsored: `Relayer` sends 7702 tx on Alice's behalf. | BAL **MUST** include Alice: `code_changes` (delegation designation `0xef0100\|\|address(Oracle)`),`nonce_changes` (increment). Bob: `balance_changes` (receives 10 wei). For sponsored variant, BAL **MUST** also include `Relayer`:`nonce_changes`.`Oracle` **MUST NOT** be present in BAL - the account is never accessed. | ✅ Completed | | `test_bal_7702_delegation_update` | Ensure BAL captures update of existing EOA delegation | Alice first delegates to `Oracle1`, then in second tx updates delegation to `Oracle2`. Each transaction sends 10 wei to Bob. Two variants: (1) Self-funded: Alice sends both 7702 txs herself. (2) Sponsored: `Relayer` sends both 7702 txs on Alice's behalf. | BAL **MUST** include Alice: first tx has `code_changes` (delegation designation `0xef0100\|\|address(Oracle1)`),`nonce_changes`. Second tx has`code_changes` (delegation designation `0xef0100\|\|address(Oracle2)`),`nonce_changes`. Bob:`balance_changes` (receives 10 wei on each tx). For sponsored variant, BAL **MUST** also include `Relayer`:`nonce_changes` for both transactions. `Oracle1` and `Oracle2` **MUST NOT** be present in BAL - accounts are never accessed. | ✅ Completed | | `test_bal_7702_delegation_clear` | Ensure BAL captures clearing of EOA delegation | Alice first delegates to `Oracle`, then in second tx clears delegation by authorizing to `0x0` address. Each transaction sends 10 wei to Bob. Two variants: (1) Self-funded: Alice sends both 7702 txs herself. (2) Sponsored: `Relayer` sends both 7702 txs on Alice's behalf. | BAL **MUST** include Alice: first tx has `code_changes` (delegation designation `0xef0100\|\|address(Oracle)`), `nonce_changes`. Second tx has `code_changes` (empty code - delegation cleared), `nonce_changes`. Bob: `balance_changes` (receives 10 wei on each tx). For sponsored variant, BAL **MUST** also include `Relayer`: `nonce_changes` for both transactions. `Oracle` and `0x0` address **MUST NOT** be present in BAL - accounts are never accessed. | ✅ Completed | | `test_bal_7702_delegated_storage_access` | Ensure BAL captures storage operations when calling a delegated EIP-7702 account | Alice has delegated her account to `Oracle`. `Oracle` contract contains code that reads from storage slot `0x01` and writes to storage slot `0x02`. Bob sends 10 wei to Alice (the delegated account), which executes `Oracle`'s code. | BAL **MUST** include Alice: `balance_changes` (receives 10 wei), `storage_changes` for slot `0x02` (write operation performed in Alice's storage), `storage_reads` for slot `0x01` (read operation from Alice's storage). Bob: `nonce_changes` (sender), `balance_changes` (loses 10 wei plus gas costs). `Oracle` (account access). | ✅ Completed | | `test_bal_7702_invalid_nonce_authorization` | Ensure BAL handles failed authorization due to wrong nonce | `Relayer` sends sponsored transaction to Bob (10 wei transfer succeeds) but Alice's authorization to delegate to `Oracle` uses incorrect nonce, causing silent authorization failure | BAL **MUST** include Alice with empty changes (account access), Bob with `balance_changes` (receives 10 wei), Relayer with `nonce_changes`. **MUST NOT** include `Oracle` (authorization failed, no delegation) | ✅ Completed | | `test_bal_7702_invalid_chain_id_authorization` | Ensure BAL handles failed authorization due to wrong chain id | `Relayer` sends sponsored transaction to Bob (10 wei transfer succeeds) but Alice's authorization to delegate to `Oracle` uses incorrect chain id, causing authorization failure before account access | BAL **MUST** include Bob with `balance_changes` (receives 10 wei), Relayer with `nonce_changes`. **MUST NOT** include Alice (authorization fails before loading account) or `Oracle` (authorization failed, no delegation) | ✅ Completed | | `test_bal_7702_delegated_via_call_opcode` | Ensure BAL captures delegation target when a contract uses *CALL opcodes to call a delegated account | Pre-deployed contract `Alice` delegated to `Oracle`. `Caller` contract uses CALL/CALLCODE/DELEGATECALL/STATICCALL to call `Alice`. Bob sends transaction to `Caller`. | BAL **MUST** include Bob: `nonce_changes`. `Caller`: empty changes (account access). `Alice`: empty changes (account access - delegated account being called). `Oracle`: empty changes (delegation target access). | ✅ Completed | | `test_bal_sstore_and_oog` | Ensure BAL handles OOG during SSTORE execution at various gas boundaries (EIP-2200 stipend and implicit SLOAD) | Alice calls contract that attempts `SSTORE` to cold slot `0x01`. Parameterized: (1) OOG at EIP-2200 stipend check (2300 gas after PUSH opcodes) - fails before implicit SLOAD, (2) OOG at stipend + 1 (2301 gas) - passes stipend check but fails after implicit SLOAD, (3) OOG at exact gas - 1, (4) Successful SSTORE with exact gas. | For case (1): BAL **MUST NOT** include slot `0x01` in `storage_reads` or `storage_changes` (fails before implicit SLOAD). For cases (2) and (3): BAL **MUST** include slot `0x01` in `storage_reads` (implicit SLOAD occurred) but **MUST NOT** include in `storage_changes` (write didn't complete). For case (4): BAL **MUST** include slot `0x01` in `storage_changes` only (successful write; read is filtered by builder). | ✅ Completed | | `test_bal_sload_and_oog` | Ensure BAL handles OOG during SLOAD execution correctly | Alice calls contract that attempts `SLOAD` from cold slot `0x01`. Parameterized: (1) OOG at SLOAD opcode (insufficient gas), (2) Successful SLOAD execution. | For OOG case: BAL **MUST NOT** contain slot `0x01` in `storage_reads` since storage wasn't accessed. For success case: BAL **MUST** contain slot `0x01` in `storage_reads`. | ✅ Completed | | `test_bal_balance_and_oog` | Ensure BAL handles OOG during BALANCE opcode execution correctly | Alice calls contract that attempts `BALANCE` opcode on cold target account. Parameterized: (1) OOG at BALANCE opcode (insufficient gas), (2) Successful BALANCE execution. | For OOG case: BAL **MUST NOT** include target account (wasn't accessed). For success case: BAL **MUST** include target account in `account_changes`. | ✅ Completed | | `test_bal_extcodesize_and_oog` | Ensure BAL handles OOG during EXTCODESIZE opcode execution correctly | Alice calls contract that attempts `EXTCODESIZE` opcode on cold target contract. Parameterized: (1) OOG at EXTCODESIZE opcode (insufficient gas), (2) Successful EXTCODESIZE execution. | For OOG case: BAL **MUST NOT** include target contract (wasn't accessed). For success case: BAL **MUST** include target contract in `account_changes`. | ✅ Completed | | `test_bal_call_and_oog` | Ensure BAL handles OOG during CALL opcode execution correctly | Alice calls contract that attempts `CALL` to cold target contract. Parameterized: (1) OOG at CALL opcode (insufficient gas), (2) Successful CALL execution. | For OOG case: BAL **MUST NOT** include target contract (wasn't accessed). For success case: BAL **MUST** include target contract in `account_changes`. | ✅ Completed | | `test_bal_delegatecall_and_oog` | Ensure BAL handles OOG during DELEGATECALL opcode execution correctly | Alice calls contract that attempts `DELEGATECALL` to cold target contract. Parameterized: (1) OOG at DELEGATECALL opcode (insufficient gas), (2) Successful DELEGATECALL execution. | For OOG case: BAL **MUST NOT** include target contract (wasn't accessed). For success case: BAL **MUST** include target contract in `account_changes`. | ✅ Completed | | `test_bal_extcodecopy_and_oog` | Ensure BAL handles OOG during EXTCODECOPY opcode execution correctly | Alice calls contract that attempts `EXTCODECOPY` from cold target contract. Parameterized: (1) OOG at EXTCODECOPY opcode (insufficient gas), (2) Successful EXTCODECOPY execution. | For OOG case: BAL **MUST NOT** include target contract (wasn't accessed). For success case: BAL **MUST** include target contract in `account_changes`. | ✅ Completed | | `test_bal_oog_7702_delegated_cold_cold` | Ensure BAL handles OOG during EIP-7702 delegated account loading when both accounts are cold | Alice calls cold delegated account Bob (7702) which delegates to cold `TargetContract` with insufficient gas for second cold load | BAL **MUST** include Bob in `account_changes` (first cold load succeeds) but **MUST NOT** include `TargetContract` (second cold load fails due to OOG) | 🟡 Planned | | `test_bal_oog_7702_delegated_warm_cold` | Ensure BAL handles OOG during EIP-7702 delegated account loading when first account is warm, second is cold | Alice calls warm delegated account Bob (7702) which delegates to cold `TargetContract` with insufficient gas for second cold load | BAL **MUST** include Bob in `account_changes` (warm load succeeds) but **MUST NOT** include `TargetContract` (cold load fails due to OOG) | 🟡 Planned | | `test_bal_invalid_missing_nonce` | Verify clients reject blocks with BAL missing required nonce changes | Alice sends transaction to Bob; BAL modifier removes Alice's nonce change entry | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate that all sender accounts have nonce changes recorded. | ✅ Completed | | `test_bal_invalid_nonce_value` | Verify clients reject blocks with incorrect nonce values in BAL | Alice sends transaction to Bob; BAL modifier changes Alice's nonce to incorrect value | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate nonce values match actual state transitions. | ✅ Completed | | `test_bal_invalid_storage_value` | Verify clients reject blocks with incorrect storage values in BAL | Alice calls contract that writes to storage; BAL modifier changes storage value to incorrect value | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate storage change values match actual state transitions. | ✅ Completed | | `test_bal_invalid_tx_order` | Verify clients reject blocks with incorrect transaction indices in BAL | Alice sends transaction; BAL modifier swaps transaction indices incorrectly | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate transaction ordering matches actual block execution order. | ✅ Completed | | `test_bal_invalid_account` | Verify clients reject blocks with incorrect account addresses in BAL | Alice sends transaction; BAL modifier includes wrong account address | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate all account addresses in BAL were actually accessed. | ✅ Completed | | `test_bal_invalid_duplicate_account` | Verify clients reject blocks with duplicate account entries in BAL | Alice sends transaction; BAL modifier duplicates Alice's account entry | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** ensure each account appears at most once in BAL. | ✅ Completed | | `test_bal_invalid_account_order` | Verify clients reject blocks with incorrect account ordering in BAL | Alice sends transaction to Bob; BAL modifier reverses account order (BAL requires sorted order) | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate accounts are in canonical sorted order. | ✅ Completed | | `test_bal_invalid_complex_corruption` | Verify clients reject blocks with multiple BAL corruptions | Alice calls contract with storage writes; BAL has multiple issues: wrong account, missing nonce, wrong storage value | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** detect any corruption regardless of other issues. | ✅ Completed | | `test_bal_invalid_missing_account` | Verify clients reject blocks with missing required account entries in BAL | Alice sends transaction to Bob; BAL modifier removes Bob's account entry (recipient should be included) | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate all accessed accounts are present. | ✅ Completed | | `test_bal_invalid_balance_value` | Verify clients reject blocks with incorrect balance values in BAL | Alice sends value to Bob; BAL modifier changes balance to incorrect value | Block **MUST** be rejected with `INVALID_BLOCK_ACCESS_LIST` exception. Clients **MUST** validate balance change values match actual state transitions. | ✅ Completed | | `test_bal_empty_block_no_coinbase` | Verify BAL correctly handles empty blocks without including coinbase | Block with 0 transactions, no withdrawals. System contracts may perform operations (EIP-2935 parent hash, EIP-4788 beacon root if active). | BAL **MUST NOT** include the coinbase/fee recipient (receives no fees). BAL **MAY** include system contract addresses (EIP-2935 `HISTORY_STORAGE_ADDRESS`, EIP-4788 `BEACON_ROOTS_ADDRESS`) with `storage_changes` at `tx_index=0` (pre-execution system operations). Maximum 4 system contract addresses if all active. | 🟡 Planned | | `test_bal_empty_block_withdrawal_to_coinbase` | Verify BAL includes coinbase when it receives EIP-4895 withdrawal even in empty block | Block with 0 transactions but contains EIP-4895 withdrawal(s) with coinbase as recipient. System contracts may perform operations. | BAL **MUST** include coinbase with `balance_changes` at `tx_index=1` (post-execution: len(txs)+1 = 0+1). BAL **MAY** include system contract addresses with `storage_changes` at `tx_index=0` (pre-execution system operations). This confirms that coinbase inclusion depends on actual state changes, not transaction presence. | 🟡 Planned | ================================================ FILE: tests/benchmark/__init__.py ================================================ """ Benchmark tests for EVMs. Benchmark tests aim to maximize the usage of a specific opcode, precompile, or operation within a transaction or block. These can be executed against EVM implementations to ensure they handle pathological cases efficiently and correctly, allowing Ethereum to safely [Scale the L1](https://protocol.ethereum.foundation/). """ ================================================ FILE: tests/benchmark/conftest.py ================================================ """Pytest configuration for benchmark tests.""" from pathlib import Path from typing import Any import pytest from ethereum_test_forks import Fork DEFAULT_BENCHMARK_FORK = "Prague" def pytest_generate_tests(metafunc: Any) -> None: """ Modify test generation to enforce default benchmark fork for benchmark tests. """ benchmark_dir = Path(__file__).parent test_file_path = Path(metafunc.definition.fspath) # Check if this test is in the benchmark directory is_in_benchmark_dir = benchmark_dir in test_file_path.parents if is_in_benchmark_dir: # Add benchmark marker if no valid_from marker exists existing_markers = list(metafunc.definition.iter_markers()) has_valid_from = any(marker.name == "valid_from" for marker in existing_markers) if not has_valid_from: benchmark_marker = pytest.mark.valid_from(DEFAULT_BENCHMARK_FORK) metafunc.definition.add_marker(benchmark_marker) def pytest_collection_modifyitems(config: Any, items: Any) -> None: """Add the `benchmark` marker to all tests under `./tests/benchmark`.""" benchmark_dir = Path(__file__).parent benchmark_marker = pytest.mark.benchmark gen_docs = config.getoption("--gen-docs", default=False) if gen_docs: for item in items: if ( benchmark_dir in Path(item.fspath).parents and not item.get_closest_marker("benchmark") and not item.get_closest_marker("stateful") ): item.add_marker(benchmark_marker) return marker_expr = config.getoption("-m", default="") run_benchmarks = ( marker_expr and "benchmark" in marker_expr and "not benchmark" not in marker_expr ) run_stateful_tests = ( marker_expr and "stateful" in marker_expr and "not stateful" not in marker_expr ) items_for_removal = [] for i, item in enumerate(items): is_in_benchmark_dir = benchmark_dir in Path(item.fspath).parents has_stateful_marker = item.get_closest_marker("stateful") is_benchmark_test = ( is_in_benchmark_dir and not has_stateful_marker ) or item.get_closest_marker("benchmark") if is_benchmark_test: if is_in_benchmark_dir and not item.get_closest_marker("benchmark"): item.add_marker(benchmark_marker) if not run_benchmarks: items_for_removal.append(i) elif run_benchmarks: items_for_removal.append(i) elif is_in_benchmark_dir and has_stateful_marker and not run_stateful_tests: items_for_removal.append(i) for i in reversed(items_for_removal): items.pop(i) @pytest.fixture def tx_gas_limit_cap(fork: Fork, gas_benchmark_value: int) -> int: """Return the transaction gas limit cap.""" return fork.transaction_gas_limit_cap() or gas_benchmark_value ================================================ FILE: tests/benchmark/helpers.py ================================================ """Helper functions for the EVM benchmark worst-case tests.""" from ethereum_test_forks import Fork from ethereum_test_tools import Bytecode from ethereum_test_vm import Opcodes as Op def code_loop_precompile_call(calldata: Bytecode, attack_block: Bytecode, fork: Fork) -> Bytecode: """Create a code loop that calls a precompile with the given calldata.""" max_code_size = fork.max_code_size() # The attack contract is: CALLDATA_PREP + #JUMPDEST + [attack_block]* + # JUMP(#) jumpdest = Op.JUMPDEST jump_back = Op.JUMP(len(calldata)) max_iters_loop = (max_code_size - len(calldata) - len(jumpdest) - len(jump_back)) // len( attack_block ) code = calldata + jumpdest + sum([attack_block] * max_iters_loop) + jump_back if len(code) > max_code_size: # Must never happen, but keep it as a sanity check. raise ValueError(f"Code size {len(code)} exceeds maximum code size {max_code_size}") return code ================================================ FILE: tests/benchmark/stateful/__init__.py ================================================ """Benchmark state tests package.""" ================================================ FILE: tests/benchmark/stateful/bloatnet/README.md ================================================ # BloatNet Single-Opcode Benchmarks This directory contains benchmarks for testing single EVM opcodes (SLOAD, SSTORE) under state-heavy conditions using pre-deployed contracts. ## Test Setup ### Prerequisites 1. Pre-deployed ERC20 contracts on the target network 2. A JSON file containing contract addresses (stubs) ### Address Stubs Format Create a JSON file (`stubs.json`) mapping test-specific stub names to deployed contract addresses: ```json { "test_sload_empty_erc20_balanceof_USDT": "0x1234567890123456789012345678901234567890", "test_sload_empty_erc20_balanceof_USDC": "0x2345678901234567890123456789012345678901", "test_sload_empty_erc20_balanceof_DAI": "0x3456789012345678901234567890123456789012", "test_sload_empty_erc20_balanceof_WETH": "0x4567890123456789012345678901234567890123", "test_sload_empty_erc20_balanceof_WBTC": "0x5678901234567890123456789012345678901234", "test_sstore_erc20_approve_USDT": "0x1234567890123456789012345678901234567890", "test_sstore_erc20_approve_USDC": "0x2345678901234567890123456789012345678901", "test_sstore_erc20_approve_DAI": "0x3456789012345678901234567890123456789012", "test_sstore_erc20_approve_WETH": "0x4567890123456789012345678901234567890123", "test_sstore_erc20_approve_WBTC": "0x5678901234567890123456789012345678901234"" } ``` **Naming Convention:** - Stub names MUST start with the test function name - Format: `{test_function_name}_{identifier}` - Example: `test_sload_empty_erc20_balanceof_USDT` ### Running the Tests #### Execute Mode (Against Live Network) ```bash # Run with specific number of contracts (e.g., only the 5-contract variant) PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run execute \ --address-stubs /path/to/stubs.json \ --fork=Prague \ tests/benchmark/stateful/bloatnet/test_single_opcode.py::test_sload_empty_erc20_balanceof \ -k "[5]" \ -v # Run all parametrized variants (1, 5, 10, 20 contracts) PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run execute \ --address-stubs /path/to/stubs.json \ --fork=Prague \ tests/benchmark/stateful/bloatnet/test_single_opcode.py \ -v ``` ## Test Parametrization Both tests are parametrized with `num_contracts = [1, 5, 10, 20, 100]`, generating 5 test variants each: - **1 contract**: Baseline single-contract performance - **5 contracts**: Small-scale multi-contract scenario - **10 contracts**: Medium-scale multi-contract scenario - **20 contracts**: Large-scale multi-contract scenario - **100 contracts**: Very large-scale multi-contract stress test ### How Stub Filtering Works 1. Test extracts its function name (e.g., `test_sload_empty_erc20_balanceof`) 2. Filters stubs starting with that name from `stubs.json` 3. Selects the **first N** matching stubs based on `num_contracts` parameter 4. Errors if insufficient matching stubs found ================================================ FILE: tests/benchmark/stateful/bloatnet/__init__.py ================================================ """Bloatnet benchmark tests package.""" ================================================ FILE: tests/benchmark/stateful/bloatnet/test_bloatnet.py ================================================ """ abstract: Tests benchmark worst-case bloatnet scenarios. Tests benchmark worst-case bloatnet scenarios. Tests running worst-case bloatnet scenarios for benchmarking purposes. """ ================================================ FILE: tests/benchmark/stateful/bloatnet/test_multi_opcode.py ================================================ """ abstract: BloatNet bench cases extracted from https://hackmd.io/9icZeLN7R0Sk5mIjKlZAHQ. The idea of all these tests is to stress client implementations to find out where the limits of processing are focusing specifically on state-related operations. """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Transaction, While, ) from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from pytest_plugins.execute.pre_alloc import AddressStubs REFERENCE_SPEC_GIT_PATH = "DUMMY/bloatnet.md" REFERENCE_SPEC_VERSION = "1.0" # BLOATNET ARCHITECTURE: # # [Initcode Contract] [Factory Contract] [24KB Contracts] # (9.5KB) (116B) (N x 24KB each) # │ │ │ # │ EXTCODECOPY │ CREATE2(salt++) │ # └──────────────► ├──────────────────► Contract_0 # ├──────────────────► Contract_1 # ├──────────────────► Contract_2 # └──────────────────► Contract_N # # [Attack Contract] ──STATICCALL──► [Factory.getConfig()] # │ returns: (N, hash) # └─► Loop(i=0 to N): # 1. Generate CREATE2 addr: keccak256(0xFF|factory|i|hash)[12:] # 2. BALANCE(addr) → 2600 gas (cold access) # 3. EXTCODESIZE(addr) → 100 gas (warm access) # # HOW IT WORKS: # 1. Factory uses EXTCODECOPY to load initcode, avoiding PC-relative jumps # 2. Each CREATE2 deployment produces unique 24KB bytecode (via ADDRESS) # 3. All contracts share same initcode hash for deterministic addresses # 4. Attack rapidly accesses all contracts, stressing client's state handling @pytest.mark.parametrize( "balance_first", [True, False], ids=["balance_extcodesize", "extcodesize_balance"], ) @pytest.mark.valid_from("Prague") def test_bloatnet_balance_extcodesize( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, balance_first: bool, ) -> None: """ BloatNet test using BALANCE + EXTCODESIZE with "on-the-fly" CREATE2 address generation. This test: 1. Assumes contracts are already deployed via the factory (salt 0 to N-1) 2. Generates CREATE2 addresses dynamically during execution 3. Calls BALANCE and EXTCODESIZE (order controlled by balance_first param) 4. Maximizes cache eviction by accessing many contracts """ gas_costs = fork.gas_costs() # Calculate gas costs intrinsic_gas = fork.transaction_intrinsic_cost_calculator()(calldata=b"") # Cost per contract access with CREATE2 address generation cost_per_contract = ( gas_costs.G_KECCAK_256 # SHA3 static cost for address generation (30) + gas_costs.G_KECCAK_256_WORD * 3 # SHA3 dynamic cost (85 bytes = 3 words * 6) + gas_costs.G_COLD_ACCOUNT_ACCESS # Cold access (2600) + gas_costs.G_BASE # POP first result (2) + gas_costs.G_WARM_ACCOUNT_ACCESS # Warm access (100) + gas_costs.G_BASE # POP second result (2) + gas_costs.G_BASE # DUP1 before first op (3) + gas_costs.G_VERY_LOW * 4 # PUSH1 operations (4 * 3) + gas_costs.G_LOW # MLOAD for salt (3) + gas_costs.G_VERY_LOW # ADD for increment (3) + gas_costs.G_LOW # MSTORE salt back (3) + 10 # While loop overhead ) # Calculate how many contracts to access based on available gas available_gas = gas_benchmark_value - intrinsic_gas - 1000 # Reserve for cleanup contracts_needed = int(available_gas // cost_per_contract) # Deploy factory using stub contract - NO HARDCODED VALUES # The stub "bloatnet_factory" must be provided via --address-stubs flag # The factory at that address MUST have: # - Slot 0: Number of deployed contracts # - Slot 1: Init code hash for CREATE2 address calculation factory_address = pre.deploy_contract( code=Bytecode(), # Required parameter, but will be ignored for stubs stub="bloatnet_factory", ) # Log test requirements - deployed count read from factory storage print( f"Test needs {contracts_needed} contracts for " f"{gas_benchmark_value / 1_000_000:.1f}M gas. " f"Factory storage will be checked during execution." ) # Define operations that differ based on parameter balance_op = Op.POP(Op.BALANCE) extcodesize_op = Op.POP(Op.EXTCODESIZE) benchmark_ops = ( (balance_op + extcodesize_op) if balance_first else (extcodesize_op + balance_op) ) # Build attack contract that reads config from factory and performs attack attack_code = ( # Call getConfig() on factory to get num_deployed and init_code_hash Op.STATICCALL( gas=Op.GAS, address=factory_address, args_offset=0, args_size=0, ret_offset=96, ret_size=64, ) # Check if call succeeded + Op.ISZERO + Op.PUSH2(0x1000) # Jump to error handler if failed (far jump) + Op.JUMPI # Load results from memory # Memory[96:128] = num_deployed_contracts # Memory[128:160] = init_code_hash + Op.MLOAD(96) # Load num_deployed_contracts + Op.MLOAD(128) # Load init_code_hash # Setup memory for CREATE2 address generation # Memory layout at 0: 0xFF + factory_addr(20) + salt(32) + hash(32) + Op.MSTORE(0, factory_address) # Store factory address at memory position 0 + Op.MSTORE8(11, 0xFF) # Store 0xFF prefix at position (32 - 20 - 1) + Op.MSTORE(32, 0) # Store salt at position 32 # Stack now has: [num_contracts, init_code_hash] + Op.PUSH1(64) # Push memory position + Op.MSTORE # Store init_code_hash at memory[64] # Stack now has: [num_contracts] # Main attack loop - iterate through all deployed contracts + While( body=( # Generate CREATE2 addr: keccak256(0xFF+factory+salt+hash) Op.SHA3(11, 85) # Generate CREATE2 address from memory[11:96] # The address is now on the stack + Op.DUP1 # Duplicate for second operation + benchmark_ops # Execute operations in specified order # Increment salt for next iteration + Op.MSTORE(32, Op.ADD(Op.MLOAD(32), 1)) # Increment and store salt ), # Continue while we haven't reached the limit condition=Op.DUP1 + Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) + Op.POP # Clean up counter ) # Deploy attack contract attack_address = pre.deploy_contract(code=attack_code) # Run the attack attack_tx = Transaction( to=attack_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) # Post-state: just verify attack contract exists post = { attack_address: Account(storage={}), } blockchain_test( pre=pre, blocks=[Block(txs=[attack_tx])], post=post, ) @pytest.mark.parametrize( "balance_first", [True, False], ids=["balance_extcodecopy", "extcodecopy_balance"], ) @pytest.mark.valid_from("Prague") def test_bloatnet_balance_extcodecopy( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, balance_first: bool, ) -> None: """ BloatNet test using BALANCE + EXTCODECOPY with on-the-fly CREATE2 address generation. This test forces actual bytecode reads from disk by: 1. Assumes contracts are already deployed via the factory 2. Generating CREATE2 addresses dynamically during execution 3. Using BALANCE and EXTCODECOPY (order controlled by balance_first param) 4. Reading 1 byte from the END of the bytecode to force full contract load """ gas_costs = fork.gas_costs() max_contract_size = fork.max_code_size() # Calculate costs intrinsic_gas = fork.transaction_intrinsic_cost_calculator()(calldata=b"") # Cost per contract with EXTCODECOPY and CREATE2 address generation cost_per_contract = ( gas_costs.G_KECCAK_256 # SHA3 static cost for address generation (30) + gas_costs.G_KECCAK_256_WORD * 3 # SHA3 dynamic cost (85 bytes = 3 words * 6) + gas_costs.G_COLD_ACCOUNT_ACCESS # Cold access (2600) + gas_costs.G_BASE # POP first result (2) + gas_costs.G_WARM_ACCOUNT_ACCESS # Warm access base (100) + gas_costs.G_COPY * 1 # Copy cost for 1 byte (3) + gas_costs.G_BASE * 2 # DUP1 before first op, DUP4 for address (6) + gas_costs.G_VERY_LOW * 8 # PUSH operations (8 * 3 = 24) + gas_costs.G_LOW * 2 # MLOAD for salt twice (6) + gas_costs.G_VERY_LOW * 2 # ADD operations (6) + gas_costs.G_LOW # MSTORE salt back (3) + gas_costs.G_BASE # POP after second op (2) + 10 # While loop overhead ) # Calculate how many contracts to access available_gas = gas_benchmark_value - intrinsic_gas - 1000 contracts_needed = int(available_gas // cost_per_contract) # Deploy factory using stub contract - NO HARDCODED VALUES # The stub "bloatnet_factory" must be provided via --address-stubs flag # The factory at that address MUST have: # - Slot 0: Number of deployed contracts # - Slot 1: Init code hash for CREATE2 address calculation factory_address = pre.deploy_contract( code=Bytecode(), # Required parameter, but will be ignored for stubs stub="bloatnet_factory", ) # Log test requirements - deployed count read from factory storage print( f"Test needs {contracts_needed} contracts for " f"{gas_benchmark_value / 1_000_000:.1f}M gas. " f"Factory storage will be checked during execution." ) # Define operations that differ based on parameter balance_op = Op.POP(Op.BALANCE) extcodecopy_op = ( Op.PUSH1(1) # size (1 byte) + Op.PUSH2(max_contract_size - 1) # code offset (last byte) + Op.ADD(Op.MLOAD(32), 96) # unique memory offset + Op.DUP4 # address (duplicated earlier) + Op.EXTCODECOPY + Op.POP # clean up address ) benchmark_ops = ( (balance_op + extcodecopy_op) if balance_first else (extcodecopy_op + balance_op) ) # Build attack contract that reads config from factory and performs attack attack_code = ( # Call getConfig() on factory to get num_deployed and init_code_hash Op.STATICCALL( gas=Op.GAS, address=factory_address, args_offset=0, args_size=0, ret_offset=96, ret_size=64, ) # Check if call succeeded + Op.ISZERO + Op.PUSH2(0x1000) # Jump to error handler if failed (far jump) + Op.JUMPI # Load results from memory # Memory[96:128] = num_deployed_contracts # Memory[128:160] = init_code_hash + Op.MLOAD(96) # Load num_deployed_contracts + Op.MLOAD(128) # Load init_code_hash # Setup memory for CREATE2 address generation # Memory layout at 0: 0xFF + factory_addr(20) + salt(32) + hash(32) + Op.MSTORE(0, factory_address) # Store factory address at memory position 0 + Op.MSTORE8(11, 0xFF) # Store 0xFF prefix at position (32 - 20 - 1) + Op.MSTORE(32, 0) # Store salt at position 32 # Stack now has: [num_contracts, init_code_hash] + Op.PUSH1(64) # Push memory position + Op.MSTORE # Store init_code_hash at memory[64] # Stack now has: [num_contracts] # Main attack loop - iterate through all deployed contracts + While( body=( # Generate CREATE2 address Op.SHA3(11, 85) # Generate CREATE2 address from memory[11:96] # The address is now on the stack + Op.DUP1 # Duplicate for later operations + benchmark_ops # Execute operations in specified order # Increment salt for next iteration + Op.MSTORE(32, Op.ADD(Op.MLOAD(32), 1)) # Increment and store salt ), # Continue while counter > 0 condition=Op.DUP1 + Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) + Op.POP # Clean up counter ) # Deploy attack contract attack_address = pre.deploy_contract(code=attack_code) # Run the attack attack_tx = Transaction( to=attack_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) # Post-state post = { attack_address: Account(storage={}), } blockchain_test( pre=pre, blocks=[Block(txs=[attack_tx])], post=post, ) @pytest.mark.parametrize( "balance_first", [True, False], ids=["balance_extcodehash", "extcodehash_balance"], ) @pytest.mark.valid_from("Prague") def test_bloatnet_balance_extcodehash( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, balance_first: bool, ) -> None: """ BloatNet test using BALANCE + EXTCODEHASH with on-the-fly CREATE2 address generation. This test: 1. Assumes contracts are already deployed via the factory 2. Generates CREATE2 addresses dynamically during execution 3. Calls BALANCE and EXTCODEHASH (order controlled by balance_first param) 4. Forces client to compute code hash for 24KB bytecode """ gas_costs = fork.gas_costs() # Calculate gas costs intrinsic_gas = fork.transaction_intrinsic_cost_calculator()(calldata=b"") # Cost per contract access with CREATE2 address generation cost_per_contract = ( gas_costs.G_KECCAK_256 # SHA3 static cost for address generation (30) + gas_costs.G_KECCAK_256_WORD * 3 # SHA3 dynamic cost (85 bytes = 3 words * 6) + gas_costs.G_COLD_ACCOUNT_ACCESS # Cold access (2600) + gas_costs.G_BASE # POP first result (2) + gas_costs.G_WARM_ACCOUNT_ACCESS # Warm access (100) + gas_costs.G_BASE # POP second result (2) + gas_costs.G_BASE # DUP1 before first op (3) + gas_costs.G_VERY_LOW * 4 # PUSH1 operations (4 * 3) + gas_costs.G_LOW # MLOAD for salt (3) + gas_costs.G_VERY_LOW # ADD for increment (3) + gas_costs.G_LOW # MSTORE salt back (3) + 10 # While loop overhead ) # Calculate how many contracts to access based on available gas available_gas = gas_benchmark_value - intrinsic_gas - 1000 # Reserve for cleanup contracts_needed = int(available_gas // cost_per_contract) # Deploy factory using stub contract factory_address = pre.deploy_contract( code=Bytecode(), stub="bloatnet_factory", ) # Log test requirements print( f"Test needs {contracts_needed} contracts for " f"{gas_benchmark_value / 1_000_000:.1f}M gas. " f"Factory storage will be checked during execution." ) # Define operations that differ based on parameter balance_op = Op.POP(Op.BALANCE) extcodehash_op = Op.POP(Op.EXTCODEHASH) benchmark_ops = ( (balance_op + extcodehash_op) if balance_first else (extcodehash_op + balance_op) ) # Build attack contract that reads config from factory and performs attack attack_code = ( # Call getConfig() on factory to get num_deployed and init_code_hash Op.STATICCALL( gas=Op.GAS, address=factory_address, args_offset=0, args_size=0, ret_offset=96, ret_size=64, ) # Check if call succeeded + Op.ISZERO + Op.PUSH2(0x1000) # Jump to error handler if failed + Op.JUMPI # Load results from memory + Op.MLOAD(96) # Load num_deployed_contracts + Op.MLOAD(128) # Load init_code_hash # Setup memory for CREATE2 address generation + Op.MSTORE(0, factory_address) + Op.MSTORE8(11, 0xFF) + Op.MSTORE(32, 0) # Initial salt + Op.PUSH1(64) + Op.MSTORE # Store init_code_hash # Main attack loop + While( body=( # Generate CREATE2 address Op.SHA3(11, 85) + Op.DUP1 # Duplicate for second operation + benchmark_ops # Execute operations in specified order # Increment salt + Op.MSTORE(32, Op.ADD(Op.MLOAD(32), 1)) ), condition=Op.DUP1 + Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) + Op.POP # Clean up counter ) # Deploy attack contract attack_address = pre.deploy_contract(code=attack_code) # Run the attack attack_tx = Transaction( to=attack_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) # Post-state post = { attack_address: Account(storage={}), } blockchain_test( pre=pre, blocks=[Block(txs=[attack_tx])], post=post, ) # ERC20 function selectors BALANCEOF_SELECTOR = 0x70A08231 # balanceOf(address) APPROVE_SELECTOR = 0x095EA7B3 # approve(address,uint256) @pytest.mark.valid_from("Prague") @pytest.mark.parametrize("num_contracts", [1, 5, 10, 20, 100]) @pytest.mark.parametrize( "sload_percent,sstore_percent", [ pytest.param(50, 50, id="50-50"), pytest.param(70, 30, id="70-30"), pytest.param(90, 10, id="90-10"), ], ) def test_mixed_sload_sstore( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, address_stubs: AddressStubs, num_contracts: int, sload_percent: int, sstore_percent: int, request: pytest.FixtureRequest, ) -> None: """ BloatNet mixed SLOAD/SSTORE benchmark with configurable operation ratios. This test: 1. Filters stubs matching test name prefix (e.g., test_mixed_sload_sstore_*) 2. Uses first N contracts based on num_contracts parameter 3. Divides gas budget evenly across all selected contracts 4. For each contract, divides gas into SLOAD and SSTORE portions by percentage 5. Executes balanceOf (SLOAD) and approve (SSTORE) calls per the ratio 6. Stresses clients with combined read/write operations on large contracts """ # Extract test function name for stub filtering test_name = request.node.name.split("[")[0] # Remove parametrization suffix # Filter stubs that match the test name prefix matching_stubs = [ stub_name for stub_name in address_stubs.root.keys() if stub_name.startswith(test_name) ] # Validate we have enough stubs if len(matching_stubs) < num_contracts: pytest.fail( f"Not enough matching stubs for test '{test_name}'. " f"Required: {num_contracts}, Found: {len(matching_stubs)}. " f"Matching stubs: {matching_stubs}" ) # Select first N stubs selected_stubs = matching_stubs[:num_contracts] gas_costs = fork.gas_costs() # Calculate gas costs intrinsic_gas = fork.transaction_intrinsic_cost_calculator()(calldata=b"") # Fixed overhead for SLOAD loop sload_loop_overhead = ( # Attack contract loop overhead gas_costs.G_VERY_LOW * 2 # MLOAD counter (3*2) + gas_costs.G_VERY_LOW * 2 # MSTORE selector (3*2) + gas_costs.G_VERY_LOW * 3 # MLOAD + MSTORE address (3*3) + gas_costs.G_BASE # POP (2) + gas_costs.G_BASE * 3 # SUB + MLOAD + MSTORE for counter decrement (2*3) + gas_costs.G_BASE * 2 # ISZERO * 2 for loop condition (2*2) + gas_costs.G_MID # JUMPI (8) ) # ERC20 balanceOf internal gas sload_erc20_internal = ( gas_costs.G_VERY_LOW # PUSH4 selector (3) + gas_costs.G_BASE # EQ selector match (2) + gas_costs.G_MID # JUMPI to function (8) + gas_costs.G_JUMPDEST # JUMPDEST at function start (1) + gas_costs.G_VERY_LOW * 2 # CALLDATALOAD arg (3*2) + gas_costs.G_KECCAK_256 # keccak256 static (30) + gas_costs.G_KECCAK_256_WORD * 2 # keccak256 dynamic for 64 bytes (2*6) + gas_costs.G_COLD_SLOAD # Cold SLOAD - always cold for random addresses (2100) + gas_costs.G_VERY_LOW * 3 # MSTORE result + RETURN setup (3*3) ) # Fixed overhead for SSTORE loop sstore_loop_overhead = ( # Attack contract loop body operations gas_costs.G_VERY_LOW # MSTORE selector at memory[32] (3) + gas_costs.G_LOW # MLOAD counter (5) + gas_costs.G_VERY_LOW # MSTORE spender at memory[64] (3) + gas_costs.G_BASE # POP call result (2) # Counter decrement + gas_costs.G_LOW # MLOAD counter (5) + gas_costs.G_VERY_LOW # PUSH1 1 (3) + gas_costs.G_VERY_LOW # SUB (3) + gas_costs.G_VERY_LOW # MSTORE counter back (3) # While loop condition check + gas_costs.G_LOW # MLOAD counter (5) + gas_costs.G_BASE # ISZERO (2) + gas_costs.G_BASE # ISZERO (2) + gas_costs.G_MID # JUMPI back to loop start (8) ) # ERC20 approve internal gas # Cold SSTORE: 22100 = 20000 base + 2100 cold access sstore_erc20_internal = ( gas_costs.G_VERY_LOW # PUSH4 selector (3) + gas_costs.G_BASE # EQ selector match (2) + gas_costs.G_MID # JUMPI to function (8) + gas_costs.G_JUMPDEST # JUMPDEST at function start (1) + gas_costs.G_VERY_LOW # CALLDATALOAD spender (3) + gas_costs.G_VERY_LOW # CALLDATALOAD amount (3) + gas_costs.G_KECCAK_256 # keccak256 static (30) + gas_costs.G_KECCAK_256_WORD * 2 # keccak256 dynamic for 64 bytes (12) + gas_costs.G_COLD_SLOAD # Cold SLOAD for allowance check (2100) + gas_costs.G_STORAGE_SET # SSTORE base cost (20000) + gas_costs.G_COLD_SLOAD # Additional cold storage access (2100) + gas_costs.G_VERY_LOW # PUSH1 1 for return value (3) + gas_costs.G_VERY_LOW # MSTORE return value (3) + gas_costs.G_VERY_LOW # PUSH1 32 for return size (3) + gas_costs.G_VERY_LOW # PUSH1 0 for return offset (3) ) # Calculate gas budget per contract available_gas = gas_benchmark_value - intrinsic_gas gas_per_contract = available_gas // num_contracts # For each contract, split gas by percentage sload_gas_per_contract = (gas_per_contract * sload_percent) // 100 sstore_gas_per_contract = (gas_per_contract * sstore_percent) // 100 # Account for cold/warm transitions in CALL costs # First SLOAD call is COLD (2600), rest are WARM (100) sload_warm_cost = sload_loop_overhead + gas_costs.G_WARM_ACCOUNT_ACCESS + sload_erc20_internal cold_warm_diff = gas_costs.G_COLD_ACCOUNT_ACCESS - gas_costs.G_WARM_ACCOUNT_ACCESS sload_calls_per_contract = int((sload_gas_per_contract - cold_warm_diff) // sload_warm_cost) # First SSTORE call is COLD (2600), rest are WARM (100) sstore_warm_cost = ( sstore_loop_overhead + gas_costs.G_WARM_ACCOUNT_ACCESS + sstore_erc20_internal ) sstore_calls_per_contract = int((sstore_gas_per_contract - cold_warm_diff) // sstore_warm_cost) # Deploy selected ERC20 contracts using stubs erc20_addresses = [] for stub_name in selected_stubs: addr = pre.deploy_contract( code=Bytecode(), stub=stub_name, ) erc20_addresses.append(addr) # Log test requirements print( f"Total gas budget: {gas_benchmark_value / 1_000_000:.1f}M gas. " f"~{gas_per_contract / 1_000_000:.1f}M gas per contract " f"({sload_percent}% SLOAD, {sstore_percent}% SSTORE). " f"Per contract: {sload_calls_per_contract} balanceOf calls, " f"{sstore_calls_per_contract} approve calls." ) # Build attack code that loops through each contract attack_code: Bytecode = ( Op.JUMPDEST # Entry point + Op.MSTORE(offset=0, value=BALANCEOF_SELECTOR) # Store selector once for all contracts ) for erc20_address in erc20_addresses: # For each contract, execute SLOAD operations (balanceOf) attack_code += ( # Initialize counter in memory[32] = number of balanceOf calls Op.MSTORE(offset=32, value=sload_calls_per_contract) # Loop for balanceOf calls + While( condition=Op.MLOAD(32) + Op.ISZERO + Op.ISZERO, body=( # Call balanceOf(address) on ERC20 contract # args_offset=28 reads: selector from MEM[28:32] + address # from MEM[32:64] Op.CALL( address=erc20_address, value=0, args_offset=28, args_size=36, ret_offset=0, ret_size=0, ) + Op.POP # Discard CALL success status # Decrement counter + Op.MSTORE(offset=32, value=Op.SUB(Op.MLOAD(32), 1)) ), ) ) # For each contract, execute SSTORE operations (approve) # Reuse the same memory layout as balanceOf attack_code += ( # Store approve selector at memory[0] (reusing same slot) Op.MSTORE(offset=0, value=APPROVE_SELECTOR) # Initialize counter in memory[32] = number of approve calls # (reusing same slot) + Op.MSTORE(offset=32, value=sstore_calls_per_contract) # Loop for approve calls + While( condition=Op.MLOAD(32) + Op.ISZERO + Op.ISZERO, body=( # Store spender at memory[64] (counter as spender/amount) Op.MSTORE(offset=64, value=Op.MLOAD(32)) # Call approve(spender, amount) on ERC20 contract # args_offset=28 reads: selector from MEM[28:32] + # spender from MEM[32:64] + amount from MEM[64:96] # Note: counter at MEM[32:64] is reused as spender, # and value at MEM[64:96] serves as the amount + Op.CALL( address=erc20_address, value=0, args_offset=28, args_size=68, ret_offset=0, ret_size=0, ) + Op.POP # Discard CALL success status # Decrement counter + Op.MSTORE(offset=32, value=Op.SUB(Op.MLOAD(32), 1)) ), ) ) # Deploy attack contract attack_address = pre.deploy_contract(code=attack_code) # Run the attack attack_tx = Transaction( to=attack_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) # Post-state post = { attack_address: Account(storage={}), } blockchain_test( pre=pre, blocks=[Block(txs=[attack_tx])], post=post, ) ================================================ FILE: tests/benchmark/stateful/bloatnet/test_single_opcode.py ================================================ """ abstract: BloatNet single-opcode benchmark cases for state-related operations. These tests focus on individual EVM opcodes (SLOAD, SSTORE) to measure their performance when accessing many storage slots across pre-deployed contracts. Unlike multi-opcode tests, these isolate single operations to benchmark specific state-handling bottlenecks. """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Transaction, While, ) from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from pytest_plugins.execute.pre_alloc import AddressStubs REFERENCE_SPEC_GIT_PATH = "DUMMY/bloatnet.md" REFERENCE_SPEC_VERSION = "1.0" # ERC20 function selectors BALANCEOF_SELECTOR = 0x70A08231 # balanceOf(address) APPROVE_SELECTOR = 0x095EA7B3 # approve(address,uint256) ALLOWANCE_SELECTOR = 0xDD62ED3E # allowance(address,address) # SLOAD BENCHMARK ARCHITECTURE: # # [Pre-deployed ERC20 Contract] ──── Storage slots for balances # │ # ��� balanceOf(address) → SLOAD(keccak256(address || slot)) # │ # [Attack Contract] ──CALL──► ERC20.balanceOf(random_address) # │ # └─► Loop(i=0 to N): # 1. Generate random address from counter # 2. CALL balanceOf(random_address) → forces cold SLOAD # 3. Most addresses have zero balance → empty storage slots # # WHY IT STRESSES CLIENTS: # - Each balanceOf() call forces a cold SLOAD on a likely-empty slot # - Storage slot = keccak256(address || balances_slot) # - Random addresses ensure maximum cache misses # - Tests client's sparse storage handling efficiency # SSTORE BENCHMARK ARCHITECTURE: # # [Pre-deployed ERC20 Contract] ──── Storage slots for allowances # │ # │ approve(spender, amount) # │ → SSTORE(keccak256(spender || slot), amount) # │ # [Attack Contract] # ──CALL──► ERC20.approve(counter_as_spender, counter_as_amount) # │ # └─► Loop(i=0 to N): # 1. Use counter as both spender address and amount # 2. CALL approve(counter, counter) → forces cold SSTORE # 3. Writes to new allowance slots in sparse storage # # WHY IT STRESSES CLIENTS: # - Each approve() call forces an SSTORE to a new storage slot # - Storage slot = keccak256( # msg.sender || keccak256(spender || allowances_slot) # ) # - Sequential counter ensures unique storage locations # - Tests client's ability to handle many storage writes # - Simulates real-world contract state accumulation over time @pytest.mark.valid_from("Prague") @pytest.mark.parametrize("num_contracts", [1, 5, 10, 20, 100]) def test_sload_empty_erc20_balanceof( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, address_stubs: AddressStubs, num_contracts: int, request: pytest.FixtureRequest, ) -> None: """ BloatNet SLOAD benchmark using ERC20 balanceOf queries on random addresses. This test: 1. Filters stubs matching test name prefix (e.g., test_sload_empty_erc20_balanceof_*) 2. Uses first N contracts based on num_contracts parameter 3. Splits gas budget evenly across the selected contracts 4. Queries balanceOf() incrementally starting by 0 and increasing by 1 (thus forcing SLOADs to non-existing addresses) """ # Extract test function name for stub filtering test_name = request.node.name.split("[")[0] # Remove parametrization suffix # Filter stubs that match the test name prefix matching_stubs = [ stub_name for stub_name in address_stubs.root.keys() if stub_name.startswith(test_name) ] # Validate we have enough stubs if len(matching_stubs) < num_contracts: pytest.fail( f"Not enough matching stubs for test '{test_name}'. " f"Required: {num_contracts}, Found: {len(matching_stubs)}. " f"Matching stubs: {matching_stubs}" ) # Select first N stubs selected_stubs = matching_stubs[:num_contracts] gas_costs = fork.gas_costs() # Calculate gas costs intrinsic_gas = fork.transaction_intrinsic_cost_calculator()(calldata=b"") # Fixed overhead per iteration (loop mechanics, independent of warm/cold) loop_overhead = ( # Attack contract loop overhead gas_costs.G_VERY_LOW * 2 # MLOAD counter (3*2) + gas_costs.G_VERY_LOW * 2 # MSTORE selector (3*2) + gas_costs.G_VERY_LOW * 3 # MLOAD + MSTORE address (3*3) + gas_costs.G_BASE # POP (2) + gas_costs.G_BASE * 3 # SUB + MLOAD + MSTORE for counter decrement (2*3) + gas_costs.G_BASE * 2 # ISZERO * 2 for loop condition (2*2) + gas_costs.G_MID # JUMPI (8) ) # ERC20 internal gas (same for all calls) erc20_internal_gas = ( gas_costs.G_VERY_LOW # PUSH4 selector (3) + gas_costs.G_BASE # EQ selector match (2) + gas_costs.G_MID # JUMPI to function (8) + gas_costs.G_JUMPDEST # JUMPDEST at function start (1) + gas_costs.G_VERY_LOW * 2 # CALLDATALOAD arg (3*2) + gas_costs.G_KECCAK_256 # keccak256 static (30) + gas_costs.G_KECCAK_256_WORD * 2 # keccak256 dynamic for 64 bytes (2*6) + gas_costs.G_COLD_SLOAD # Cold SLOAD - always cold for random addresses (2100) + gas_costs.G_VERY_LOW * 3 # MSTORE result + RETURN setup (3*3) # RETURN costs 0 gas ) # Calculate gas budget per contract available_gas = gas_benchmark_value - intrinsic_gas gas_per_contract = available_gas // num_contracts # For each contract: first call is COLD (2600), subsequent are WARM (100) # Solve for calls_per_contract: # gas_per_contract = cold_call + (calls-1) * warm_call # Simplifies to: gas = cold_warm_diff + calls * warm_call_cost warm_call_cost = loop_overhead + gas_costs.G_WARM_ACCOUNT_ACCESS + erc20_internal_gas cold_warm_diff = gas_costs.G_COLD_ACCOUNT_ACCESS - gas_costs.G_WARM_ACCOUNT_ACCESS calls_per_contract = int((gas_per_contract - cold_warm_diff) // warm_call_cost) # Deploy selected ERC20 contracts using stubs # In execute mode: stubs point to already-deployed contracts on chain # In fill mode: empty bytecode is deployed as placeholder erc20_addresses = [] for stub_name in selected_stubs: addr = pre.deploy_contract( code=Bytecode(), # Required parameter, ignored for stubs in execute mode stub=stub_name, ) erc20_addresses.append(addr) # Log test requirements print( f"Total gas budget: {gas_benchmark_value / 1_000_000:.1f}M gas. " f"~{gas_per_contract / 1_000_000:.1f}M gas per contract, " f"{calls_per_contract} balanceOf calls per contract." ) # Build attack code that loops through each contract attack_code: Bytecode = ( Op.JUMPDEST # Entry point + Op.MSTORE(offset=0, value=BALANCEOF_SELECTOR) # Store selector once for all contracts ) for erc20_address in erc20_addresses: # For each contract, initialize counter and loop attack_code += ( # Initialize counter in memory[32] = number of calls Op.MSTORE(offset=32, value=calls_per_contract) # Loop for this specific contract + While( condition=Op.MLOAD(32) + Op.ISZERO + Op.ISZERO, # Continue while counter > 0 body=( # Call balanceOf(address) on ERC20 contract # args_offset=28 reads: selector from MEM[28:32] + address # from MEM[32:64] Op.CALL( address=erc20_address, value=0, args_offset=28, args_size=36, ret_offset=0, ret_size=0, ) + Op.POP # Discard CALL success status # Decrement counter: counter - 1 + Op.MSTORE(offset=32, value=Op.SUB(Op.MLOAD(32), 1)) ), ) ) # Deploy attack contract attack_address = pre.deploy_contract(code=attack_code) # Run the attack attack_tx = Transaction( to=attack_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) # Post-state post = { attack_address: Account(storage={}), } blockchain_test( pre=pre, blocks=[Block(txs=[attack_tx])], post=post, ) @pytest.mark.valid_from("Prague") @pytest.mark.parametrize("num_contracts", [1, 5, 10, 20, 100]) def test_sstore_erc20_approve( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, address_stubs: AddressStubs, num_contracts: int, request: pytest.FixtureRequest, ) -> None: """ BloatNet SSTORE benchmark using ERC20 approve to write to storage. This test: 1. Filters stubs matching test name prefix (e.g., test_sstore_erc20_approve_*) 2. Uses first N contracts based on num_contracts parameter 3. Splits gas budget evenly across the selected contracts 4. Calls approve(spender, amount) incrementally (counter as spender) 5. Forces SSTOREs to allowance mapping storage slots """ # Extract test function name for stub filtering test_name = request.node.name.split("[")[0] # Remove parametrization suffix # Filter stubs that match the test name prefix matching_stubs = [ stub_name for stub_name in address_stubs.root.keys() if stub_name.startswith(test_name) ] # Validate we have enough stubs if len(matching_stubs) < num_contracts: pytest.fail( f"Not enough matching stubs for test '{test_name}'. " f"Required: {num_contracts}, Found: {len(matching_stubs)}. " f"Matching stubs: {matching_stubs}" ) # Select first N stubs selected_stubs = matching_stubs[:num_contracts] gas_costs = fork.gas_costs() # Calculate gas costs intrinsic_gas = fork.transaction_intrinsic_cost_calculator()(calldata=b"") # Per-contract fixed overhead (setup + teardown) memory_expansion_cost = 15 # Memory expansion to 160 bytes (5 words) overhead_per_contract = ( gas_costs.G_VERY_LOW # MSTORE to initialize counter (3) + memory_expansion_cost # Memory expansion (15) + gas_costs.G_JUMPDEST # JUMPDEST at loop start (1) + gas_costs.G_LOW # MLOAD for While condition check (5) + gas_costs.G_BASE # ISZERO (2) + gas_costs.G_BASE # ISZERO (2) + gas_costs.G_MID # JUMPI (8) + gas_costs.G_BASE # POP to clean up counter at end (2) ) # = 38 # Fixed overhead per iteration (loop mechanics, independent of warm/cold) loop_overhead = ( # Attack contract loop body operations gas_costs.G_VERY_LOW # MSTORE selector at memory[32] (3) + gas_costs.G_LOW # MLOAD counter (5) + gas_costs.G_VERY_LOW # MSTORE spender at memory[64] (3) + gas_costs.G_BASE # POP call result (2) # Counter decrement: MSTORE(0, SUB(MLOAD(0), 1)) + gas_costs.G_LOW # MLOAD counter (5) + gas_costs.G_VERY_LOW # PUSH1 1 (3) + gas_costs.G_VERY_LOW # SUB (3) + gas_costs.G_VERY_LOW # MSTORE counter back (3) # While loop condition check + gas_costs.G_LOW # MLOAD counter (5) + gas_costs.G_BASE # ISZERO (2) + gas_costs.G_BASE # ISZERO (2) + gas_costs.G_MID # JUMPI back to loop start (8) ) # ERC20 internal gas (same for all calls) # Note: SSTORE cost is 22100 for cold slot, zero-to-non-zero # (20000 base + 2100 cold access) erc20_internal_gas = ( gas_costs.G_VERY_LOW # PUSH4 selector (3) + gas_costs.G_BASE # EQ selector match (2) + gas_costs.G_MID # JUMPI to function (8) + gas_costs.G_JUMPDEST # JUMPDEST at function start (1) + gas_costs.G_VERY_LOW # CALLDATALOAD spender (3) + gas_costs.G_VERY_LOW # CALLDATALOAD amount (3) + gas_costs.G_KECCAK_256 # keccak256 static (30) + gas_costs.G_KECCAK_256_WORD * 2 # keccak256 dynamic for 64 bytes (12) + gas_costs.G_COLD_SLOAD # Cold SLOAD for allowance check (2100) + gas_costs.G_STORAGE_SET # SSTORE base cost (20000) + gas_costs.G_COLD_SLOAD # Additional cold storage access (2100) + gas_costs.G_VERY_LOW # PUSH1 1 for return value (3) + gas_costs.G_VERY_LOW # MSTORE return value (3) + gas_costs.G_VERY_LOW # PUSH1 32 for return size (3) + gas_costs.G_VERY_LOW # PUSH1 0 for return offset (3) # RETURN costs 0 gas ) # Calculate total gas needed total_overhead = intrinsic_gas + (overhead_per_contract * num_contracts) available_gas_for_iterations = gas_benchmark_value - total_overhead # For each contract: first call is COLD (2600), subsequent are WARM (100) # Solve for calls per contract accounting for cold/warm transition warm_call_cost = loop_overhead + gas_costs.G_WARM_ACCOUNT_ACCESS + erc20_internal_gas cold_warm_diff = gas_costs.G_COLD_ACCOUNT_ACCESS - gas_costs.G_WARM_ACCOUNT_ACCESS # Per contract: gas_available = cold_warm_diff + calls * warm_call_cost gas_per_contract = available_gas_for_iterations // num_contracts calls_per_contract = int((gas_per_contract - cold_warm_diff) // warm_call_cost) # Deploy selected ERC20 contracts using stubs erc20_addresses = [] for stub_name in selected_stubs: addr = pre.deploy_contract( code=Bytecode(), stub=stub_name, ) erc20_addresses.append(addr) # Log test requirements print( f"Total gas budget: {gas_benchmark_value / 1_000_000:.1f}M gas. " f"Intrinsic: {intrinsic_gas}, Overhead per contract: {overhead_per_contract}, " f"Warm call cost: {warm_call_cost}. " f"{calls_per_contract} approve calls per contract ({num_contracts} contracts)." ) # Build attack code that loops through each contract attack_code: Bytecode = ( Op.JUMPDEST # Entry point + Op.MSTORE(offset=0, value=APPROVE_SELECTOR) # Store selector once for all contracts ) for erc20_address in erc20_addresses: # For each contract, initialize counter and loop attack_code += ( # Initialize counter in memory[32] = number of calls Op.MSTORE(offset=32, value=calls_per_contract) # Loop for this specific contract + While( condition=Op.MLOAD(32) + Op.ISZERO + Op.ISZERO, # Continue while counter > 0 body=( # Store spender at memory[64] (counter as spender/amount) Op.MSTORE(offset=64, value=Op.MLOAD(32)) # Call approve(spender, amount) on ERC20 contract # args_offset=28 reads: selector from MEM[28:32] + # spender from MEM[32:64] + amount from MEM[64:96] # Note: counter at MEM[32:64] is reused as spender, # and value at MEM[64:96] serves as the amount + Op.CALL( address=erc20_address, value=0, args_offset=28, args_size=68, # 4 bytes selector + 32 bytes spender + 32 bytes amount ret_offset=0, ret_size=0, ) + Op.POP # Discard CALL success status # Decrement counter: counter - 1 + Op.MSTORE(offset=32, value=Op.SUB(Op.MLOAD(32), 1)) ), ) ) # Deploy attack contract attack_address = pre.deploy_contract(code=attack_code) # Run the attack attack_tx = Transaction( to=attack_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) # Post-state post = { attack_address: Account(storage={}), } blockchain_test( pre=pre, blocks=[Block(txs=[attack_tx])], post=post, ) ================================================ FILE: tests/benchmark/stateful/conftest.py ================================================ """Pytest configuration for state tests.""" from pathlib import Path from typing import Any import pytest DEFAULT_BENCHMARK_FORK = "Prague" def pytest_generate_tests(metafunc: Any) -> None: """ Add default valid_from marker to state tests without explicit fork specification. """ state_dir = Path(__file__).parent test_file_path = Path(metafunc.definition.fspath) if state_dir in test_file_path.parents: has_valid_from = any( marker.name == "valid_from" for marker in metafunc.definition.iter_markers() ) if not has_valid_from: metafunc.definition.add_marker(pytest.mark.valid_from(DEFAULT_BENCHMARK_FORK)) def pytest_collection_modifyitems(config: Any, items: Any) -> None: """Manage stateful test markers and filtering.""" state_dir = Path(__file__).parent gen_docs = config.getoption("--gen-docs", default=False) if gen_docs: _add_stateful_markers_for_docs(items, state_dir) return marker_expr = config.getoption("-m", default="") items_to_remove = [] for i, item in enumerate(items): item_path = Path(item.fspath) is_in_state_dir = state_dir in item_path.parents # Add stateful marker to tests in state directory that don't have it if is_in_state_dir and not item.get_closest_marker("stateful"): item.add_marker(pytest.mark.stateful) has_stateful_marker = item.get_closest_marker("stateful") run_stateful = ( marker_expr and ("stateful" in marker_expr) and ("not stateful" not in marker_expr) ) # When not running stateful tests, remove all stateful tests if not run_stateful and has_stateful_marker: items_to_remove.append(i) for i in reversed(items_to_remove): items.pop(i) def _add_stateful_markers_for_docs(items: Any, state_dir: Any) -> None: """Add stateful markers for documentation generation.""" for item in items: item_path = Path(item.fspath) if state_dir in item_path.parents and not item.get_closest_marker("stateful"): item.add_marker(pytest.mark.stateful) ================================================ FILE: tests/benchmark/test_worst_blocks.py ================================================ """ Tests that benchmark EVMs in worst-case block scenarios. """ import math import random from typing import Generator, Tuple import pytest from ethereum_test_base_types import Account from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Address, Alloc, AuthorizationTuple, BenchmarkTestFiller, Block, BlockchainTestFiller, Hash, Transaction, ) from ethereum_test_vm import Opcodes as Op @pytest.fixture def iteration_count(intrinsic_cost: int, gas_benchmark_value: int) -> int: """ Calculate the number of iterations based on the gas limit and intrinsic cost. """ return gas_benchmark_value // intrinsic_cost @pytest.fixture def transfer_amount() -> int: """Ether to transfer in each transaction.""" return 1 @pytest.fixture def intrinsic_cost(fork: Fork) -> int: """Transaction intrinsic cost.""" intrinsic_cost = fork.transaction_intrinsic_cost_calculator() return intrinsic_cost() def get_distinct_sender_list(pre: Alloc) -> Generator[Address, None, None]: """Get a list of distinct sender accounts.""" while True: yield pre.fund_eoa() def get_distinct_receiver_list(pre: Alloc) -> Generator[Address, None, None]: """Get a list of distinct receiver accounts.""" while True: yield pre.fund_eoa(0) def get_single_sender_list(pre: Alloc) -> Generator[Address, None, None]: """Get a list of single sender accounts.""" sender = pre.fund_eoa() while True: yield sender def get_single_receiver_list(pre: Alloc) -> Generator[Address, None, None]: """Get a list of single receiver accounts.""" receiver = pre.fund_eoa(0) while True: yield receiver @pytest.fixture def ether_transfer_case( case_id: str, pre: Alloc, ) -> Tuple[Generator[Address, None, None], Generator[Address, None, None]]: """Generate the test parameters based on the case ID.""" if case_id == "a_to_a": """Sending to self.""" senders = get_single_sender_list(pre) receivers = senders elif case_id == "a_to_b": """One sender → one receiver.""" senders = get_single_sender_list(pre) receivers = get_single_receiver_list(pre) elif case_id == "diff_acc_to_b": """Multiple senders → one receiver.""" senders = get_distinct_sender_list(pre) receivers = get_single_receiver_list(pre) elif case_id == "a_to_diff_acc": """One sender → multiple receivers.""" senders = get_single_sender_list(pre) receivers = get_distinct_receiver_list(pre) elif case_id == "diff_acc_to_diff_acc": """Multiple senders → multiple receivers.""" senders = get_distinct_sender_list(pre) receivers = get_distinct_receiver_list(pre) else: raise ValueError(f"Unknown case: {case_id}") return senders, receivers @pytest.mark.parametrize( "case_id", ["a_to_a", "a_to_b", "diff_acc_to_b", "a_to_diff_acc", "diff_acc_to_diff_acc"], ) def test_block_full_of_ether_transfers( benchmark_test: BenchmarkTestFiller, pre: Alloc, case_id: str, ether_transfer_case: Tuple[Generator[Address, None, None], Generator[Address, None, None]], iteration_count: int, transfer_amount: int, intrinsic_cost: int, ) -> None: """ Single test for ether transfer scenarios. Scenarios: - a_to_a: one sender → one sender - a_to_b: one sender → one receiver - diff_acc_to_b: multiple senders → one receiver - a_to_diff_acc: one sender → multiple receivers - diff_acc_to_diff_acc: multiple senders → multiple receivers """ senders, receivers = ether_transfer_case # Create a single block with all transactions txs = [] balances: dict[Address, int] = {} for _ in range(iteration_count): receiver = next(receivers) balances[receiver] = balances.get(receiver, 0) + transfer_amount txs.append( Transaction( to=receiver, value=transfer_amount, gas_limit=intrinsic_cost, sender=next(senders), ) ) # Only include post state for non a_to_a cases post_state = ( {} if case_id == "a_to_a" else {receiver: Account(balance=balance) for receiver, balance in balances.items()} ) benchmark_test( pre=pre, post=post_state, blocks=[Block(txs=txs)], expected_benchmark_gas_used=iteration_count * intrinsic_cost, ) @pytest.fixture def total_cost_floor_per_token() -> int: """Total cost floor per token.""" return 10 @pytest.fixture def total_cost_standard_per_token() -> int: """Total cost floor per token.""" return 4 def calldata_generator( gas_amount: int, zero_byte: int, total_cost_floor_per_token: int, ) -> bytes: """Calculate the calldata based on the gas amount and zero byte.""" # Gas cost calculation based on EIP-7683: (https://eips.ethereum.org/EIPS/eip-7683) # # tx.gasUsed = 21000 + max( # STANDARD_TOKEN_COST * tokens_in_calldata # + execution_gas_used # + isContractCreation * (32000 + # INITCODE_WORD_COST * words(calldata)), # TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata) # # Simplified in this test case: # - No execution gas used (no opcodes are executed) # - Not a contract creation (no initcode) # # Therefore: # max_token_cost = max(STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN) # tx.gasUsed = 21000 + tokens_in_calldata * max_token_cost # # Since max(STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN) = 10: # tx.gasUsed = 21000 + tokens_in_calldata * 10 # # Token accounting: # tokens_in_calldata = zero_bytes + 4 * non_zero_bytes # # So we calculate how many bytes we can fit into calldata based on # available gas. max_tokens_in_calldata = gas_amount // total_cost_floor_per_token num_of_bytes = max_tokens_in_calldata if zero_byte else max_tokens_in_calldata // 4 byte_data = b"\x00" if zero_byte else b"\xff" return byte_data * num_of_bytes @pytest.mark.parametrize("zero_byte", [True, False]) def test_block_full_data( benchmark_test: BenchmarkTestFiller, pre: Alloc, zero_byte: bool, intrinsic_cost: int, total_cost_floor_per_token: int, gas_benchmark_value: int, tx_gas_limit_cap: int, total_cost_standard_per_token: int, fork: Fork, ) -> None: """Test a block with empty payload.""" iteration_count = math.ceil(gas_benchmark_value / tx_gas_limit_cap) gas_remaining = gas_benchmark_value total_gas_used = 0 txs = [] for _ in range(iteration_count): gas_available = min(tx_gas_limit_cap, gas_remaining) - intrinsic_cost data = calldata_generator( gas_available, zero_byte, total_cost_floor_per_token, ) total_gas_used += fork.transaction_intrinsic_cost_calculator()(calldata=data) gas_remaining -= gas_available + intrinsic_cost txs.append( Transaction( to=pre.fund_eoa(), data=data, gas_limit=gas_available + intrinsic_cost, sender=pre.fund_eoa(), ) ) benchmark_test( blocks=[Block(txs=txs)], expected_benchmark_gas_used=total_gas_used, ) def test_block_full_access_list_and_data( benchmark_test: BenchmarkTestFiller, pre: Alloc, intrinsic_cost: int, total_cost_standard_per_token: int, fork: Fork, gas_benchmark_value: int, tx_gas_limit_cap: int, ) -> None: """ Test a block with access lists (60% gas) and calldata (40% gas) using random mixed bytes. """ iteration_count = math.ceil(gas_benchmark_value / tx_gas_limit_cap) gas_remaining = gas_benchmark_value total_gas_used = 0 txs = [] for _ in range(iteration_count): gas_available = min(tx_gas_limit_cap, gas_remaining) - intrinsic_cost # Split available gas: 60% for access lists, 40% for calldata gas_for_access_list = int(gas_available * 0.6) gas_for_calldata = int(gas_available * 0.4) # Access list gas costs from fork's gas_costs gas_costs = fork.gas_costs() gas_per_address = gas_costs.G_ACCESS_LIST_ADDRESS gas_per_storage_key = gas_costs.G_ACCESS_LIST_STORAGE # Calculate number of storage keys we can fit gas_after_address = gas_for_access_list - gas_per_address num_storage_keys = gas_after_address // gas_per_storage_key # Create access list with 1 address and many storage keys access_address = Address("0x1234567890123456789012345678901234567890") storage_keys = [] for i in range(num_storage_keys): # Generate random-looking storage keys storage_keys.append(Hash(i)) access_list = [ AccessList( address=access_address, storage_keys=storage_keys, ) ] # Calculate calldata with 29% of gas for zero bytes and 71% for # non-zero bytes # Token accounting: tokens_in_calldata = zero_bytes + 4 * # non_zero_bytes # We want to split the gas budget: # - 29% of gas_for_calldata for zero bytes # - 71% of gas_for_calldata for non-zero bytes max_tokens_in_calldata = gas_for_calldata // total_cost_standard_per_token # Calculate how many tokens to allocate to each type tokens_for_zero_bytes = int(max_tokens_in_calldata * 0.29) tokens_for_non_zero_bytes = max_tokens_in_calldata - tokens_for_zero_bytes # Convert tokens to actual byte counts # Zero bytes: 1 token per byte # Non-zero bytes: 4 tokens per byte num_zero_bytes = tokens_for_zero_bytes # 1 token = 1 zero byte num_non_zero_bytes = tokens_for_non_zero_bytes // 4 # 4 tokens = 1 non-zero byte # Create calldata with mixed bytes calldata = bytearray() # Add zero bytes calldata.extend(b"\x00" * num_zero_bytes) # Add non-zero bytes (random values from 0x01 to 0xff) rng = random.Random(42) # For reproducibility for _ in range(num_non_zero_bytes): calldata.append(rng.randint(1, 255)) # Shuffle the bytes to mix zero and non-zero bytes calldata_list = list(calldata) rng.shuffle(calldata_list) shuffled_calldata = bytes(calldata_list) txs.append( Transaction( to=pre.fund_eoa(amount=0), data=shuffled_calldata, gas_limit=gas_available + intrinsic_cost, sender=pre.fund_eoa(), access_list=access_list, ) ) gas_remaining -= gas_for_access_list + intrinsic_cost total_gas_used += fork.transaction_intrinsic_cost_calculator()( calldata=shuffled_calldata, access_list=access_list, ) benchmark_test( blocks=[Block(txs=txs)], expected_benchmark_gas_used=total_gas_used, ) @pytest.mark.parametrize("empty_authority", [True, False]) @pytest.mark.parametrize("zero_delegation", [True, False]) def test_worst_case_auth_block( blockchain_test: BlockchainTestFiller, pre: Alloc, intrinsic_cost: int, gas_benchmark_value: int, fork: Fork, empty_authority: bool, zero_delegation: bool, ) -> None: """Test an auth block.""" gas_costs = fork.gas_costs() iteration_count = (gas_benchmark_value - intrinsic_cost) // gas_costs.G_AUTHORIZATION code = Op.STOP * fork.max_code_size() auth_target = Address(0) if zero_delegation else pre.deploy_contract(code=code) auth_tuples = [] for _ in range(iteration_count): signer = ( pre.fund_eoa(amount=0, delegation=None) if empty_authority else pre.fund_eoa(amount=0, delegation=auth_target) ) auth_tuple = AuthorizationTuple(address=auth_target, nonce=signer.nonce, signer=signer) auth_tuples.append(auth_tuple) tx = Transaction( to=pre.empty_account(), gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), authorization_list=auth_tuples, ) gas_used = fork.transaction_intrinsic_cost_calculator()( authorization_list_or_count=auth_tuples ) refund = 0 if not empty_authority: refund = min( gas_used // 5, (gas_costs.G_AUTHORIZATION - gas_costs.R_AUTHORIZATION_EXISTING_AUTHORITY) * iteration_count, ) blockchain_test( pre=pre, post={}, blocks=[Block(txs=[tx])], expected_benchmark_gas_used=gas_used - refund, ) ================================================ FILE: tests/benchmark/test_worst_bytecode.py ================================================ """ Tests that benchmark EVMs in worst-case opcode scenarios. """ import math import pytest from ethereum_test_benchmark.benchmark_code_generator import JumpLoopGenerator from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, BenchmarkTestFiller, Block, BlockchainTestFiller, Bytecode, Environment, Hash, Transaction, While, compute_create2_address, ) from ethereum_test_types.helpers import compute_create_address from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "TODO" REFERENCE_SPEC_VERSION = "TODO" XOR_TABLE_SIZE = 256 XOR_TABLE = [Hash(i).sha256() for i in range(XOR_TABLE_SIZE)] @pytest.mark.parametrize( "opcode", [ Op.EXTCODESIZE, Op.EXTCODEHASH, Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, Op.EXTCODECOPY, ], ) def test_worst_bytecode_single_opcode( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, opcode: Op, env: Environment, gas_benchmark_value: int, ) -> None: """ Test a block execution where a single opcode execution maxes out the gas limit, and the opcodes access a huge amount of contract code. We first use a single block to deploy a factory contract that will be used to deploy a large number of contracts. This is done to avoid having a big pre-allocation size for the test. The test is performed in the last block of the test, and the entire block gas limit is consumed by repeated opcode executions. """ # The attack gas limit is the gas limit which the target tx will use The # test will scale the block gas limit to setup the contracts accordingly to # be able to pay for the contract deposit. This has to take into account # the 200 gas per byte, but also the quadratic memory expansion costs which # have to be paid each time the memory is being setup attack_gas_limit = gas_benchmark_value max_contract_size = fork.max_code_size() gas_costs = fork.gas_costs() # Calculate the absolute minimum gas costs to deploy the contract This does # not take into account setting up the actual memory (using KECCAK256 and # XOR) so the actual costs of deploying the contract is higher memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() memory_gas_minimum = memory_expansion_gas_calculator(new_bytes=len(bytes(max_contract_size))) code_deposit_gas_minimum = ( fork.gas_costs().G_CODE_DEPOSIT_BYTE * max_contract_size + memory_gas_minimum ) intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() # Calculate the loop cost of the attacker to query one address loop_cost = ( gas_costs.G_KECCAK_256 # KECCAK static cost + math.ceil(85 / 32) * gas_costs.G_KECCAK_256_WORD # KECCAK dynamic # cost for CREATE2 + gas_costs.G_VERY_LOW * 3 # ~MSTOREs+ADDs + gas_costs.G_COLD_ACCOUNT_ACCESS # Opcode cost + 30 # ~Gluing opcodes ) # Calculate the number of contracts to be targeted num_contracts = ( # Base available gas = GAS_LIMIT - intrinsic - (out of loop MSTOREs) attack_gas_limit - intrinsic_gas_cost_calc() - gas_costs.G_VERY_LOW * 4 ) // loop_cost # Set the block gas limit to a relative high value to ensure the code # deposit tx fits in the block (there is enough gas available in the block # to execute this) minimum_gas_limit = code_deposit_gas_minimum * 2 * num_contracts if env.gas_limit < minimum_gas_limit: raise Exception( f"`BENCHMARKING_MAX_GAS` ({env.gas_limit}) is no longer enough to support this test, " f"which requires {minimum_gas_limit} gas for its setup. Update the value or consider " "optimizing gas usage during the setup phase of this test." ) # The initcode will take its address as a starting point to the input to # the keccak hash function. It will reuse the output of the hash function # in a loop to create a large amount of seemingly random code, until it # reaches the maximum contract size. initcode = ( Op.MSTORE(0, Op.ADDRESS) + While( body=( Op.SHA3(Op.SUB(Op.MSIZE, 32), 32) # Use a xor table to avoid having to call the "expensive" sha3 # opcode as much + sum( (Op.PUSH32[xor_value] + Op.XOR + Op.DUP1 + Op.MSIZE + Op.MSTORE) for xor_value in XOR_TABLE ) + Op.POP ), condition=Op.LT(Op.MSIZE, max_contract_size), ) # Despite the whole contract has random bytecode, we make the first # opcode be a STOP so CALL-like attacks return as soon as possible, # while EXTCODE(HASH|SIZE) work as intended. + Op.MSTORE8(0, 0x00) + Op.RETURN(0, max_contract_size) ) initcode_address = pre.deploy_contract(code=initcode) # The factory contract will simply use the initcode that is already # deployed, and create a new contract and return its address if successful. factory_code = ( Op.EXTCODECOPY( address=initcode_address, dest_offset=0, offset=0, size=Op.EXTCODESIZE(initcode_address), ) + Op.MSTORE( 0, Op.CREATE2( value=0, offset=0, size=Op.EXTCODESIZE(initcode_address), salt=Op.SLOAD(0), ), ) + Op.SSTORE(0, Op.ADD(Op.SLOAD(0), 1)) + Op.RETURN(0, 32) ) factory_address = pre.deploy_contract(code=factory_code) # The factory caller will call the factory contract N times, creating N new # contracts. Calldata should contain the N value. factory_caller_code = Op.CALLDATALOAD(0) + While( body=Op.POP(Op.CALL(address=factory_address)), condition=Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) factory_caller_address = pre.deploy_contract(code=factory_caller_code) contracts_deployment_tx = Transaction( to=factory_caller_address, gas_limit=env.gas_limit, gas_price=10**6, data=Hash(num_contracts), sender=pre.fund_eoa(), ) post = {} deployed_contract_addresses = [] for i in range(num_contracts): deployed_contract_address = compute_create2_address( address=factory_address, salt=i, initcode=initcode, ) post[deployed_contract_address] = Account(nonce=1) deployed_contract_addresses.append(deployed_contract_address) attack_call = Bytecode() if opcode == Op.EXTCODECOPY: attack_call = Op.EXTCODECOPY(address=Op.SHA3(32 - 20 - 1, 85), dest_offset=96, size=1000) else: # For the rest of the opcodes, we can use the same generic attack call # since all only minimally need the `address` of the target. attack_call = Op.POP(opcode(address=Op.SHA3(32 - 20 - 1, 85))) attack_code = ( # Setup memory for later CREATE2 address generation loop. # 0xFF+[Address(20bytes)]+[seed(32bytes)]+[initcode keccak(32bytes)] Op.MSTORE(0, factory_address) + Op.MSTORE8(32 - 20 - 1, 0xFF) + Op.MSTORE(32, 0) + Op.MSTORE(64, initcode.keccak256()) # Main loop + While( body=attack_call + Op.MSTORE(32, Op.ADD(Op.MLOAD(32), 1)), ) ) if len(attack_code) > max_contract_size: # TODO: A workaround could be to split the opcode code into multiple # contracts and call them in sequence. raise ValueError( f"Code size {len(attack_code)} exceeds maximum code size {max_contract_size}" ) opcode_address = pre.deploy_contract(code=attack_code) opcode_tx = Transaction( to=opcode_address, gas_limit=attack_gas_limit, gas_price=10**9, sender=pre.fund_eoa(), ) blockchain_test( pre=pre, post=post, blocks=[ Block(txs=[contracts_deployment_tx]), Block(txs=[opcode_tx]), ], exclude_full_post_state_in_output=True, ) @pytest.mark.parametrize( "pattern", [ Op.STOP, Op.JUMPDEST, Op.PUSH1[bytes(Op.JUMPDEST)], Op.PUSH2[bytes(Op.JUMPDEST + Op.JUMPDEST)], Op.PUSH1[bytes(Op.JUMPDEST)] + Op.JUMPDEST, Op.PUSH2[bytes(Op.JUMPDEST + Op.JUMPDEST)] + Op.JUMPDEST, ], ids=lambda x: x.hex(), ) def test_worst_initcode_jumpdest_analysis( benchmark_test: BenchmarkTestFiller, fork: Fork, pattern: Bytecode, ) -> None: """ Test the jumpdest analysis performance of the initcode. This benchmark places a very long initcode in the memory and then invoke CREATE instructions with this initcode up to the block gas limit. The initcode itself has minimal execution time but forces the EVM to perform the full jumpdest analysis on the parametrized byte pattern. The initicode is modified by mixing-in the returned create address between CREATE invocations to prevent caching. """ initcode_size = fork.max_initcode_size() # Expand the initcode pattern to the transaction data so it can be used in # CALLDATACOPY in the main contract. TODO: tune the tx_data_len param. tx_data_len = 1024 tx_data = pattern * (tx_data_len // len(pattern)) tx_data += (tx_data_len - len(tx_data)) * bytes(Op.JUMPDEST) assert len(tx_data) == tx_data_len assert initcode_size % len(tx_data) == 0 # Prepare the initcode in memory. code_prepare_initcode = sum( ( Op.CALLDATACOPY(dest_offset=i * len(tx_data), offset=0, size=Op.CALLDATASIZE) for i in range(initcode_size // len(tx_data)) ), Bytecode(), ) # At the start of the initcode execution, jump to the last opcode. # This forces EVM to do the full jumpdest analysis. initcode_prefix = Op.JUMP(initcode_size - 1) code_prepare_initcode += Op.MSTORE( 0, Op.PUSH32[bytes(initcode_prefix).ljust(32, bytes(Op.JUMPDEST))] ) # Make sure the last opcode in the initcode is JUMPDEST. code_prepare_initcode += Op.MSTORE(initcode_size - 32, Op.PUSH32[bytes(Op.JUMPDEST) * 32]) attack_block = ( Op.PUSH1[len(initcode_prefix)] + Op.MSTORE + Op.CREATE(value=Op.PUSH0, offset=Op.PUSH0, size=Op.MSIZE) ) setup = code_prepare_initcode + Op.PUSH0 benchmark_test( code_generator=JumpLoopGenerator( setup=setup, attack_block=attack_block, tx_kwargs={"data": tx_data}, ), ) @pytest.mark.parametrize( "opcode", [ Op.CREATE, Op.CREATE2, ], ) @pytest.mark.parametrize( "max_code_size_ratio, non_zero_data, value", [ # To avoid a blowup of combinations, the value dimension is only # explored for the non-zero data case, so isn't affected by code size # influence. pytest.param(0, False, 0, id="0 bytes without value"), pytest.param(0, False, 1, id="0 bytes with value"), pytest.param(0.25, True, 0, id="0.25x max code size with non-zero data"), pytest.param(0.25, False, 0, id="0.25x max code size with zero data"), pytest.param(0.50, True, 0, id="0.50x max code size with non-zero data"), pytest.param(0.50, False, 0, id="0.50x max code size with zero data"), pytest.param(0.75, True, 0, id="0.75x max code size with non-zero data"), pytest.param(0.75, False, 0, id="0.75x max code size with zero data"), pytest.param(1.00, True, 0, id="max code size with non-zero data"), pytest.param(1.00, False, 0, id="max code size with zero data"), ], ) def test_worst_create( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, opcode: Op, max_code_size_ratio: float, non_zero_data: bool, value: int, ) -> None: """ Test the CREATE and CREATE2 performance with different configurations. """ max_code_size = fork.max_code_size() code_size = int(max_code_size * max_code_size_ratio) # Deploy the initcode template which has following design: # ``` # PUSH3(code_size) # [CODECOPY(DUP1) -- Conditional that non_zero_data is True] # RETURN(0, DUP1) # [] -- Conditional that non_zero_data is True] # ``` code = ( Op.PUSH3(code_size) + (Op.CODECOPY(size=Op.DUP1) if non_zero_data else Bytecode()) + Op.RETURN(0, Op.DUP1) ) if non_zero_data: # Pad to code_size. code += bytes([i % 256 for i in range(code_size - len(code))]) initcode_template_contract = pre.deploy_contract(code=code) # Create the benchmark contract which has the following design: # ``` # PUSH(value) # [EXTCODECOPY(full initcode_template_contract) # -> Conditional that non_zero_data is True] # # JUMPDEST (#) # (CREATE|CREATE2) # (CREATE|CREATE2) # ... # JUMP(#) # ``` setup = ( Op.PUSH3(code_size) + Op.PUSH1(value) + Op.EXTCODECOPY( address=initcode_template_contract, size=Op.DUP2, # DUP2 refers to the EXTCODESIZE value above. ) ) if opcode == Op.CREATE2: # For CREATE2, we provide an initial salt. setup += Op.PUSH1(42) attack_block = ( # For CREATE: # - DUP2 refers to the EXTOCODESIZE value pushed in code_prefix. # - DUP3 refers to PUSH1(value) above. Op.POP(Op.CREATE(value=Op.DUP3, offset=0, size=Op.DUP2)) if opcode == Op.CREATE # For CREATE2: we manually push the arguments because we leverage the # return value of previous CREATE2 calls as salt for the next CREATE2 # call. # - DUP4 is targeting the PUSH1(value) from the code_prefix. # - DUP3 is targeting the EXTCODESIZE value pushed in code_prefix. else Op.DUP3 + Op.PUSH0 + Op.DUP4 + Op.CREATE2 ) code = JumpLoopGenerator(setup=setup, attack_block=attack_block).generate_repeated_code( repeated_code=attack_block, setup=setup, fork=fork ) tx = Transaction( # Set enough balance in the pre-alloc for `value > 0` configurations. to=pre.deploy_contract(code=code, balance=1_000_000_000 if value > 0 else 0), sender=pre.fund_eoa(), ) benchmark_test(tx=tx) @pytest.mark.parametrize( "opcode", [ Op.CREATE, Op.CREATE2, ], ) def test_worst_creates_collisions( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, opcode: Op, gas_benchmark_value: int, ) -> None: """Test the CREATE and CREATE2 collisions performance.""" # We deploy a "proxy contract" which is the contract that will be called in # a loop using all the gas in the block. This "proxy contract" is the one # executing CREATE2 failing with a collision. The reason why we need a # "proxy contract" is that CREATE(2) failing with a collision will consume # all the available gas. If we try to execute the CREATE(2) directly # without being wrapped **and capped in gas** in a previous CALL, we would # run out of gas very fast! # The proxy contract calls CREATE(2) with empty initcode. The current call # frame gas will be exhausted because of the collision. For this reason the # caller will carefully give us the minimal gas necessary to execute the # CREATE(2) and not waste any extra gas in the CREATE(2)-failure. # Note that these CREATE(2) calls will fail because in (**) below we pre- # alloc contracts with the same address as the ones that CREATE(2) will try # to create. proxy_contract = pre.deploy_contract( code=Op.CREATE2(value=Op.PUSH0, salt=Op.PUSH0, offset=Op.PUSH0, size=Op.PUSH0) if opcode == Op.CREATE2 else Op.CREATE(value=Op.PUSH0, offset=Op.PUSH0, size=Op.PUSH0) ) gas_costs = fork.gas_costs() # The CALL to the proxy contract needs at a minimum gas corresponding to # the CREATE(2) plus extra required PUSH0s for arguments. min_gas_required = gas_costs.G_CREATE + gas_costs.G_BASE * (3 if opcode == Op.CREATE else 4) setup = Op.PUSH20(proxy_contract) + Op.PUSH3(min_gas_required) attack_block = Op.POP( # DUP7 refers to the PUSH3 above. # DUP7 refers to the proxy contract address. Op.CALL(gas=Op.DUP7, address=Op.DUP7) ) # (**) We deploy the contract that CREATE(2) will attempt to create so any # attempt will fail. if opcode == Op.CREATE2: addr = compute_create2_address(address=proxy_contract, salt=0, initcode=[]) pre.deploy_contract(address=addr, code=Op.INVALID) else: # Heuristic to have an upper bound. max_contract_count = 2 * gas_benchmark_value // gas_costs.G_CREATE for nonce in range(max_contract_count): addr = compute_create_address(address=proxy_contract, nonce=nonce) pre.deploy_contract(address=addr, code=Op.INVALID) benchmark_test( code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block), ) ================================================ FILE: tests/benchmark/test_worst_compute.py ================================================ """ Tests that benchmark EVMs in worst-case compute scenarios. """ import math import operator import random from enum import Enum, auto from typing import Any, Dict, cast import pytest from _pytest.mark import ParameterSet from py_ecc.bn128 import G1, G2, multiply from ethereum_test_base_types.base_types import Bytes from ethereum_test_benchmark import ExtCallGenerator, JumpLoopGenerator from ethereum_test_forks import Fork from ethereum_test_tools import ( Address, Alloc, BenchmarkTestFiller, Block, Bytecode, Transaction, add_kzg_version, ) from ethereum_test_types import TransactionType from ethereum_test_vm import Opcode from ethereum_test_vm import Opcodes as Op from ..byzantium.eip198_modexp_precompile.test_modexp import ModExpInput from ..cancun.eip4844_blobs.spec import Spec as BlobsSpec from ..istanbul.eip152_blake2.common import Blake2bInput from ..istanbul.eip152_blake2.spec import Spec as Blake2bSpec from ..osaka.eip7951_p256verify_precompiles import spec as p256verify_spec from ..osaka.eip7951_p256verify_precompiles.spec import FieldElement from ..prague.eip2537_bls_12_381_precompiles import spec as bls12381_spec from ..prague.eip2537_bls_12_381_precompiles.spec import BytesConcatenation REFERENCE_SPEC_GIT_PATH = "TODO" REFERENCE_SPEC_VERSION = "TODO" KECCAK_RATE = 136 def neg(x: int) -> int: """Negate the given integer in the two's complement 256-bit range.""" assert 0 <= x < 2**256 return 2**256 - x def make_dup(index: int) -> Opcode: """ Create a DUP instruction which duplicates the index-th (counting from 0) element from the top of the stack. E.g. make_dup(0) → DUP1. """ assert 0 <= index < 16 return Opcode(0x80 + index, pushed_stack_items=1, min_stack_height=index + 1) @pytest.mark.parametrize( "opcode", [ Op.ADDRESS, Op.ORIGIN, Op.CALLER, Op.CODESIZE, Op.GASPRICE, Op.COINBASE, Op.TIMESTAMP, Op.NUMBER, Op.PREVRANDAO, Op.GASLIMIT, Op.CHAINID, Op.BASEFEE, Op.BLOBBASEFEE, Op.GAS, # Note that other 0-param opcodes are covered in separate tests. ], ) def test_worst_zero_param( benchmark_test: BenchmarkTestFiller, pre: Alloc, opcode: Op, ) -> None: """Test running a block with as many zero-parameter opcodes as possible.""" benchmark_test( pre=pre, post={}, code_generator=ExtCallGenerator(attack_block=opcode), ) @pytest.mark.parametrize("calldata_length", [0, 1_000, 10_000]) def test_worst_calldatasize( benchmark_test: BenchmarkTestFiller, calldata_length: int, ) -> None: """Test running a block with as many CALLDATASIZE as possible.""" benchmark_test( code_generator=JumpLoopGenerator( attack_block=Op.POP(Op.CALLDATASIZE), tx_kwargs={"data": b"\x00" * calldata_length}, ), ) @pytest.mark.parametrize("non_zero_value", [True, False]) @pytest.mark.parametrize("from_origin", [True, False]) def test_worst_callvalue( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, non_zero_value: bool, from_origin: bool, ) -> None: """ Test running a block with as many CALLVALUE opcodes as possible. The `non_zero_value` parameter controls whether opcode must return non-zero value. The `from_origin` parameter controls whether the call frame is the immediate from the transaction or a previous CALL. """ code_address = JumpLoopGenerator(attack_block=Op.POP(Op.CALLVALUE)).deploy_contracts( pre=pre, fork=fork ) if from_origin: tx_to = code_address else: entry_code = ( Op.JUMPDEST + Op.CALL(address=code_address, value=1 if non_zero_value else 0) + Op.JUMP(Op.PUSH0) ) tx_to = pre.deploy_contract(code=entry_code, balance=1_000_000) tx = Transaction( to=tx_to, value=1 if non_zero_value and from_origin else 0, sender=pre.fund_eoa(), ) benchmark_test(tx=tx) class ReturnDataStyle(Enum): """Helper enum to specify return data is returned to the caller.""" RETURN = auto() REVERT = auto() IDENTITY = auto() @pytest.mark.parametrize( "return_data_style", [ ReturnDataStyle.RETURN, ReturnDataStyle.REVERT, ReturnDataStyle.IDENTITY, ], ) @pytest.mark.parametrize("returned_size", [1, 0]) def test_worst_returndatasize_nonzero( benchmark_test: BenchmarkTestFiller, pre: Alloc, returned_size: int, return_data_style: ReturnDataStyle, ) -> None: """ Test running a block which execute as many RETURNDATASIZE opcodes which return a non-zero buffer as possible. The `returned_size` parameter indicates the size of the returned data buffer. The `return_data_style` indicates how returned data is produced for the opcode caller. """ setup = Bytecode() if return_data_style != ReturnDataStyle.IDENTITY: setup += Op.STATICCALL( address=pre.deploy_contract( code=Op.REVERT(0, returned_size) if return_data_style == ReturnDataStyle.REVERT else Op.RETURN(0, returned_size) ) ) else: setup += Op.MSTORE8(0, 1) + Op.STATICCALL( address=0x04, # Identity precompile args_size=returned_size, ) benchmark_test( code_generator=JumpLoopGenerator(setup=setup, attack_block=Op.POP(Op.RETURNDATASIZE)), ) def test_worst_returndatasize_zero(benchmark_test: BenchmarkTestFiller) -> None: """ Test running a block with as many RETURNDATASIZE opcodes as possible with a zero buffer. """ benchmark_test( code_generator=ExtCallGenerator(attack_block=Op.RETURNDATASIZE), ) @pytest.mark.parametrize("mem_size", [0, 1, 1_000, 100_000, 1_000_000]) def test_worst_msize( benchmark_test: BenchmarkTestFiller, mem_size: int, ) -> None: """ Test running a block with as many MSIZE opcodes as possible. The `mem_size` parameter indicates by how much the memory is expanded. """ benchmark_test( code_generator=ExtCallGenerator( setup=Op.MLOAD(Op.SELFBALANCE) + Op.POP, attack_block=Op.MSIZE, contract_balance=mem_size, ), ) def test_worst_keccak( benchmark_test: BenchmarkTestFiller, fork: Fork, gas_benchmark_value: int, ) -> None: """Test running a block with as many KECCAK256 permutations as possible.""" # Intrinsic gas cost is paid once. intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() available_gas = gas_benchmark_value - intrinsic_gas_calculator() gsc = fork.gas_costs() mem_exp_gas_calculator = fork.memory_expansion_gas_calculator() # Discover the optimal input size to maximize keccak-permutations, # not to maximize keccak calls. # The complication of the discovery arises from # the non-linear gas cost of memory expansion. max_keccak_perm_per_block = 0 optimal_input_length = 0 for i in range(1, 1_000_000, 32): iteration_gas_cost = ( 2 * gsc.G_VERY_LOW # PUSHN + PUSH1 + gsc.G_KECCAK_256 # KECCAK256 static cost + math.ceil(i / 32) * gsc.G_KECCAK_256_WORD # KECCAK256 dynamic # cost + gsc.G_BASE # POP ) # From the available gas, we subtract the mem expansion costs # considering we know the current input size length i. available_gas_after_expansion = max(0, available_gas - mem_exp_gas_calculator(new_bytes=i)) # Calculate how many calls we can do. num_keccak_calls = available_gas_after_expansion // iteration_gas_cost # KECCAK does 1 permutation every 136 bytes. num_keccak_permutations = num_keccak_calls * math.ceil(i / KECCAK_RATE) # If we found an input size that is better (reg permutations/gas), then # save it. if num_keccak_permutations > max_keccak_perm_per_block: max_keccak_perm_per_block = num_keccak_permutations optimal_input_length = i # max_iters_loop contains how many keccak calls can be done per loop. The # loop is as big as possible bounded by the maximum code size. # # The loop structure is: JUMPDEST + [attack iteration] + PUSH0 + JUMP # # Now calculate available gas for [attack iteration]: # Numerator = max_code_size-3. (JUMPDEST, PUSH0 and JUMP) # Denominator = (PUSHN + PUSH1 + KECCAK256 + POP) + PUSH1_DATA + # PUSHN_DATA # TODO: the testing framework uses PUSH1(0) instead of PUSH0 which is # suboptimal for the # attack, whenever this is fixed adjust accordingly. benchmark_test( code_generator=JumpLoopGenerator( setup=Op.PUSH20[optimal_input_length], attack_block=Op.POP(Op.SHA3(Op.PUSH0, Op.DUP1)), ), ) @pytest.mark.parametrize( "address,static_cost,per_word_dynamic_cost,bytes_per_unit_of_work", [ pytest.param(0x02, 60, 12, 64, id="SHA2-256"), pytest.param(0x03, 600, 120, 64, id="RIPEMD-160"), pytest.param(0x04, 15, 3, 1, id="IDENTITY"), ], ) def test_worst_precompile_only_data_input( benchmark_test: BenchmarkTestFiller, fork: Fork, address: Address, static_cost: int, per_word_dynamic_cost: int, bytes_per_unit_of_work: int, gas_benchmark_value: int, ) -> None: """ Test running a block with as many precompile calls which have a single `data` input. """ # Intrinsic gas cost is paid once. intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() available_gas = gas_benchmark_value - intrinsic_gas_calculator() gsc = fork.gas_costs() mem_exp_gas_calculator = fork.memory_expansion_gas_calculator() # Discover the optimal input size to maximize precompile work, not # precompile calls. max_work = 0 optimal_input_length = 0 for input_length in range(1, 1_000_000, 32): parameters_gas = ( gsc.G_BASE # PUSH0 = arg offset + gsc.G_BASE # PUSH0 = arg size + gsc.G_BASE # PUSH0 = arg size + gsc.G_VERY_LOW # PUSH0 = arg offset + gsc.G_VERY_LOW # PUSHN = address + gsc.G_BASE # GAS ) iteration_gas_cost = ( parameters_gas + +static_cost # Precompile static cost + math.ceil(input_length / 32) * per_word_dynamic_cost # Precompile dynamic cost + gsc.G_BASE # POP ) # From the available gas, we subtract the mem expansion costs # considering we know the current input size length. available_gas_after_expansion = max( 0, available_gas - mem_exp_gas_calculator(new_bytes=input_length) ) # Calculate how many calls we can do. num_calls = available_gas_after_expansion // iteration_gas_cost total_work = num_calls * math.ceil(input_length / bytes_per_unit_of_work) # If we found an input size that is better (reg permutations/gas), then # save it. if total_work > max_work: max_work = total_work optimal_input_length = input_length attack_block = Op.POP(Op.STATICCALL(Op.GAS, address, 0, optimal_input_length, 0, 0)) benchmark_test( code_generator=JumpLoopGenerator( setup=Op.CODECOPY(0, 0, optimal_input_length), attack_block=attack_block ), ) def create_modexp_test_cases() -> list[ParameterSet]: """Create test cases for the MODEXP precompile.""" test_cases = [ # (base, exponent, modulus, test_id) (8 * "ff", 112 * "ff", 7 * "ff" + "00", "mod_even_8b_exp_896"), (16 * "ff", 40 * "ff", 15 * "ff" + "00", "mod_even_16b_exp_320"), (24 * "ff", 21 * "ff", 23 * "ff" + "00", "mod_even_24b_exp_168"), (32 * "ff", 5 * "ff", 31 * "ff" + "00", "mod_even_32b_exp_40"), (32 * "ff", 12 * "ff", 31 * "ff" + "00", "mod_even_32b_exp_96"), (32 * "ff", 32 * "ff", 31 * "ff" + "00", "mod_even_32b_exp_256"), (64 * "ff", 64 * "ff", 63 * "ff" + "00", "mod_even_64b_exp_512"), (128 * "ff", 128 * "ff", 127 * "ff" + "00", "mod_even_128b_exp_1024"), (256 * "ff", 128 * "ff", 255 * "ff" + "00", "mod_even_256b_exp_1024"), (512 * "ff", 128 * "ff", 511 * "ff" + "00", "mod_even_512b_exp_1024"), (1024 * "ff", 128 * "ff", 1023 * "ff" + "00", "mod_even_1024b_exp_1024"), (32 * "ff", 12 * "ff", 31 * "ff" + "01", "mod_odd_32b_exp_96"), (32 * "ff", 32 * "ff", 31 * "ff" + "01", "mod_odd_32b_exp_256"), (64 * "ff", 64 * "ff", 63 * "ff" + "01", "mod_odd_64b_exp_512"), (128 * "ff", 128 * "ff", 127 * "ff" + "01", "mod_odd_128b_exp_1024"), (256 * "ff", 128 * "ff", 255 * "ff" + "01", "mod_odd_256b_exp_1024"), (512 * "ff", 128 * "ff", 511 * "ff" + "01", "mod_odd_512b_exp_1024"), (1024 * "ff", 128 * "ff", 1023 * "ff" + "01", "mod_odd_1024b_exp_1024"), (32 * "ff", 8 * "12345670", 31 * "ff" + "01", "mod_odd_32b_exp_cover_windows"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L38 (192 * "FF", "03", 6 * ("00" + 31 * "FF"), "mod_min_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L40 (8 * "FF", "07" + 75 * "FF", 7 * "FF", "mod_min_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L42 (40 * "FF", "01" + 3 * "FF", "00" + 38 * "FF", "mod_min_gas_balanced"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L44 (32 * "FF", 5 * "FF", ("00" + 31 * "FF"), "mod_exp_208_gas_balanced"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L46 (8 * "FF", 81 * "FF", 7 * "FF", "mod_exp_215_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L48 (8 * "FF", 112 * "FF", 7 * "FF", "mod_exp_298_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L50 (16 * "FF", 40 * "FF", 15 * "FF", "mod_pawel_2"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L52 (24 * "FF", 21 * "FF", 23 * "FF", "mod_pawel_3"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L54 (32 * "FF", 12 * "FF", "00" + 31 * "FF", "mod_pawel_4"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L56 (280 * "FF", "03", 8 * ("00" + 31 * "FF") + 23 * "FF", "mod_408_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L58 (16 * "FF", "15" + 37 * "FF", 15 * "FF", "mod_400_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L60 (48 * "FF", "07" + 4 * "FF", "00" + 46 * "FF", "mod_408_gas_balanced"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L62 (344 * "FF", "03", 10 * ("00" + 31 * "FF") + 23 * "FF", "mod_616_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L64 (16 * "FF", "07" + 56 * "FF", 15 * "FF", "mod_600_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L66 (48 * "FF", "07" + 6 * "FF", "00" + 46 * "FF", "mod_600_gas_balanced"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L68 (392 * "FF", "03", 12 * ("00" + 31 * "FF") + 7 * "FF", "mod_800_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L70 (16 * "FF", "01" + 75 * "FF", 15 * "FF", "mod_800_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L72 (56 * "FF", 6 * "FF", "00" + 54 * "FF", "mod_767_gas_balanced"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L74 (16 * "FF", 80 * "FF", 15 * "FF", "mod_852_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L76 (408 * "FF", "03", 12 * ("00" + 31 * "FF") + 23 * "FF", "mod_867_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L78 (56 * "FF", "2b" + 7 * "FF", "00" + 54 * "FF", "mod_996_gas_balanced"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L80 (448 * "FF", "03", 14 * ("00" + 31 * "FF"), "mod_1045_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L82 (32 * "FF", 16 * "FF", "00" + 31 * "FF", "mod_677_gas_base_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L84 (24 * "FF", 32 * "FF", 23 * "FF", "mod_765_gas_exp_heavy"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/Modexp.cs#L86 (32 * "FF", 32 * "FF", "00" + 31 * "FF", "mod_1360_gas_balanced"), (8 * "FF", 81 * "FF", 7 * "FF", "mod_8_exp_648"), (8 * "FF", "FF" + 111 * "FF", 7 * "FF", "mod_8_exp_896"), (32 * "FF", 4 * "FF", "00" + 31 * "FF", "mod_32_exp_32"), (32 * "FF", "0D" + 4 * "FF", "00" + 31 * "FF", "mod_32_exp_36"), (32 * "FF", 5 * "FF", "00" + 31 * "FF", "mod_32_exp_40"), (32 * "FF", 8 * "FF", "00" + 31 * "FF", "mod_32_exp_64"), (32 * "FF", "01" + 8 * "FF", "00" + 31 * "FF", "mod_32_exp_65"), (32 * "FF", 16 * "FF", "00" + 31 * "FF", "mod_32_exp_128"), (256 * "FF", "03" + 0 * "FF", 8 * ("00" + 31 * "FF"), "mod_256_exp_2"), (264 * "FF", "03" + 0 * "FF", 8 * ("00" + 31 * "FF") + 7 * "FF", "mod_264_exp_2"), (1024 * "FF", "03", 32 * ("00" + 31 * "FF"), "mod_1024_exp_2"), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L122 ( "03", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "mod_vul_example_1", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L124 ( "", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "mod_vul_example_2", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L126 ( "e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5", "02", "fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", "mod_vul_nagydani_1_square", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L128 ( "e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5", "03", "fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", "mod_vul_nagydani_1_qube", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L130 ( "e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5", "010001", "fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", "mod_vul_nagydani_1_pow_0x10001", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L132 ( "cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51", "02", "e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", "mod_vul_nagydani_2_square", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L134 ( "cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51", "03", "e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", "mod_vul_nagydani_2_qube", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L136 ( "cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51", "010001", "e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", "mod_vul_nagydani_2_pow_0x10001", ), ( "c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb", "02", "d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", "mod_vul_nagydani_3_square", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L140 ( "c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb", "03", "d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", "mod_vul_nagydani_3_qube", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L142 ( "c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb", "010001", "d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", "mod_vul_nagydani_3_pow_0x10001", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L144 ( "db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81", "02", "df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", "mod_vul_nagydani_4_square", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L146 ( "db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81", "03", "df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", "mod_vul_nagydani_4_qube", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L148 ( "db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81", "010001", "df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", "mod_vul_nagydani_4_pow_0x10001", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L150 ( "c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf", "02", "e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", "mod_vul_nagydani_5_square", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L152 ( "c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf", "03", "e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", "mod_vul_nagydani_5_qube", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L154 ( "c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf", "010001", "e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", "mod_vul_nagydani_5_pow_0x10001", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L156 ( "ffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000007d7d7d83828282348286877d7d827d407d797d7d7d7d7d7d7d7d7d7d7d5b00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000007d7d", "7d83828282348286877d7d82", "mod_vul_marius_1_even", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L158 ( "ffffffffffffffff76ffffffffffffff", "1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c76ec7c7c7c7ffffffffffffffc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7ffffffffffffc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c76ec7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7ffff", "ffffff3f000000000000000000000000", "mod_vul_guido_1_even", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L160 ( "e0060000a921212121212121ff000021", "2b212121ffff1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00feffff212121212121ffffffff1fe1e0e0e01e1f1f169f1f1f1f490afcefffffffffffffffff82828282828282828282828282828282828282828200ffff28ff2b212121ffff1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1fffffffffff0afceffffff7ffffffffff7c8282828282a1828282828282828282828282828200ffff28ff2b212121ffff1f1f1f1f1f1fd11f1f1f1f1f1f1f1f1f1f1fffffffffffffffff21212121212121fb2121212121ffff1f1f1f1f1f1f1f1fffaf", "82828282828200ffff28ff2b21828200", "mod_vul_guido_2_even", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L162 ( "0193585a48e18aad777e9c1b54221a0f58140392e4f091cd5f42b2e8644a9384fbd58ae1edec2477ebf7edbf7c0a3f8bd21d1890ee87646feab3c47be716f842cc3da9b940af312dc54450a960e3fc0b86e56abddd154068e10571a96fff6259431632bc15695c6c8679057e66c2c25c127e97e64ee5de6ea1fc0a4a0e431343fed1daafa072c238a45841da86a9806680bc9f298411173210790359209cd454b5af7b4d5688b4403924e5f863d97e2c5349e1a04b54fcf385b1e9d7714bab8fbf5835f6ff9ed575e77dff7af5cbb641db5d537933bae1fa6555d6c12d6fb31ca27b57771f4aebfbe0bf95e8990c0108ffe7cbdaf370be52cf3ade594543af75ad9329d2d11a402270b5b9a6bf4b83307506e118fca4862749d04e916fc7a039f0d13f2a02e0eedb800199ec95df15b4ccd8669b52586879624d51219e72102fad810b5909b1e372ddf33888fb9beb09b416e4164966edbabd89e4a286be36277fc576ed519a15643dac602e92b63d0b9121f0491da5b16ef793a967f096d80b6c81ecaaffad7e3f06a4a5ac2796f1ed9f68e6a0fd5cf191f0c5c2eec338952ff8d31abc68bf760febeb57e088995ba1d7726a2fdd6d8ca28a181378b8b4ab699bfd4b696739bbf17a9eb2df6251143046137fdbbfacac312ebf67a67da9741b59600000000000", "04", "19a2917c61722b0713d3b00a2f0e1dd5aebbbe09615de424700eea3c3020fe6e9ea5de9fa1ace781df28b21f746d2ab61d0da496e08473c90ff7dfe25b43bcde76f4bafb82e0975bea75f5a0591dba80ba2fff80a07d8853bea5be13ab326ba70c57b153acc646151948d1cf061ca31b02d4719fac710e7c723ca44f5b1737824b7ccc74ba5bff980aabdbf267621cafc3d6dcc29d0ca9c16839a92ed34de136da7900aa3ee43d21aa57498981124357cf0ca9b86f9a8d3f9c604ca00c726e48f7a9945021ea6dfff92d6b2d6514693169ca133e993541bfa4c4c191de806aa80c48109bcfc9901eccfdeb2395ab75fe63c67de900829d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "mod_vul_guido_3_even", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L166 ( "ffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffff", "mod_vul_pawel_1_exp_heavy", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L168 ( "ffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffff", "mod_vul_pawel_2_exp_heavy", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L170 ( "ffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffff", "mod_vul_pawel_3_exp_heavy", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L172 ( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "mod_vul_pawel_4_exp_heavy", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L174 ( "29356abadad68ad986c416de6f620bda0e1818b589e84f853a97391694d35496", "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f", "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", "mod_vul_common_1360n1", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L176 ( "d41afaeaea32f7409827761b68c41b6e535da4ede1f0800bfb4a6aed18394f6b", "ffffffff00000001000000000000000000000000fffffffffffffffffffffffd", "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", "mod_vul_common_1360n2", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L178 ( "1a5be8fae3b3fda9ea329494ae8689c04fae4978ecccfa6a6bfb9f04b25846c0", "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff", "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001", "mod_vul_common_1349n1", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L182 ( "0000000000000000000000000000000000000000000000000000000000000003", "0000000001000000000000022000000000000000000000000000000000000000", "0800000000000011000000000000000000000000000000000000000000000001", "mod_vul_common_1152n1", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L184 ( "1fb473dd1171cf88116aa77ab3612c2c7d2cf466cc2386cc456130e2727c70b4", "0000000000000000000000000000000000000000000000000000000001000000", "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001", "mod_vul_common_200n1", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L186 ( "1951441010b2b95a6e47a6075066a50a036f5ba978c050f2821df86636c0facb", "0000000000000000000000000000000000000000000000000000000000ffffff", "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001", "mod_vul_common_200n2", ), # Ported from https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCases/ModexpVulnerability.cs#L188 ( "288254ba43e713afbe36c9f03b54c00fae4c0a82df1cf165eb46a21c20a48ca2", "0000000000000000000000000000000000000000000000000000000000ffffff", "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001", "mod_vul_common_200n3", ), ( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "mod_vul_zkevm_worst_case", ), ] special_cases = [ pytest.param( ModExpInput.from_bytes( "000000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000017bffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffe" ), id="mod_vul_pawel_3_exp_8", ), ] regular_cases = [ pytest.param( ModExpInput( base=base, exponent=exponent, modulus=modulus, ), id=test_id, ) for base, exponent, modulus, test_id in test_cases ] return regular_cases + special_cases @pytest.mark.parametrize( ["mod_exp_input"], create_modexp_test_cases(), ) def test_worst_modexp( benchmark_test: BenchmarkTestFiller, mod_exp_input: ModExpInput, ) -> None: """ Test running a block with as many calls to the MODEXP (5) precompile as possible. All the calls have the same parametrized input. """ attack_block = Op.POP( Op.STATICCALL(Op.GAS, 0x5, Op.PUSH0, Op.CALLDATASIZE, Op.PUSH0, Op.PUSH0) ) benchmark_test( code_generator=JumpLoopGenerator( setup=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE), attack_block=attack_block, tx_kwargs={"data": bytes(mod_exp_input).rstrip(b"\x00")}, ), ) @pytest.mark.parametrize( "precompile_address,parameters", [ pytest.param( 0x01, [ # The inputs below are a valid signature, thus ECRECOVER call # won't be short-circuited by validations and do actual work. "38D18ACB67D25C8BB9942764B62F18E17054F66A817BD4295423ADF9ED98873E", "000000000000000000000000000000000000000000000000000000000000001B", "38D18ACB67D25C8BB9942764B62F18E17054F66A817BD4295423ADF9ED98873E", "789D1DD423D25F0772D2748D60F7E4B81BB14D086EBA8E8E8EFB6DCFF8A4AE02", ], id="ecrecover", ), pytest.param( 0x06, [ "18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9", "063C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266", "07C2B7F58A84BD6145F00C9C2BC0BB1A187F20FF2C92963A88019E7C6A014EED", "06614E20C147E940F2D70DA3F74C9A17DF361706A4485C742BD6788478FA17D7", ], id="bn128_add", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L326 pytest.param( 0x06, [ "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", ], id="bn128_add_infinities", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L329 pytest.param( 0x06, [ "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000002", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000002", ], id="bn128_add_1_2", ), pytest.param( 0x07, [ "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3", "1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", ], id="bn128_mul", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L335 pytest.param( 0x07, [ "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000002", ], id="bn128_mul_infinities_2_scalar", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L338 pytest.param( 0x07, [ "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "25f8c89ea3437f44f8fc8b6bfbb6312074dc6f983809a5e809ff4e1d076dd585", ], id="bn128_mul_infinities_32_byte_scalar", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L341 pytest.param( 0x07, [ "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000002", "0000000000000000000000000000000000000000000000000000000000000002", ], id="bn128_mul_1_2_2_scalar", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L344 pytest.param( 0x07, [ "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000002", "25f8c89ea3437f44f8fc8b6bfbb6312074dc6f983809a5e809ff4e1d076dd585", ], id="bn128_mul_1_2_32_byte_scalar", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L347 pytest.param( 0x07, [ "089142debb13c461f61523586a60732d8b69c5b38a3380a74da7b2961d867dbf", "2d5fc7bbc013c16d7945f190b232eacc25da675c0eb093fe6b9f1b4b4e107b36", "0000000000000000000000000000000000000000000000000000000000000002", ], id="bn128_mul_32_byte_coord_and_2_scalar", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L350 pytest.param( 0x07, [ "089142debb13c461f61523586a60732d8b69c5b38a3380a74da7b2961d867dbf", "2d5fc7bbc013c16d7945f190b232eacc25da675c0eb093fe6b9f1b4b4e107b36", "25f8c89ea3437f44f8fc8b6bfbb6312074dc6f983809a5e809ff4e1d076dd585", ], id="bn128_mul_32_byte_coord_and_scalar", ), pytest.param( 0x08, [ # First pairing "1C76476F4DEF4BB94541D57EBBA1193381FFA7AA76ADA664DD31C16024C43F59", "3034DD2920F673E204FEE2811C678745FC819B55D3E9D294E45C9B03A76AEF41", "209DD15EBFF5D46C4BD888E51A93CF99A7329636C63514396B4A452003A35BF7", "04BF11CA01483BFA8B34B43561848D28905960114C8AC04049AF4B6315A41678", "2BB8324AF6CFC93537A2AD1A445CFD0CA2A71ACD7AC41FADBF933C2A51BE344D", "120A2A4CF30C1BF9845F20C6FE39E07EA2CCE61F0C9BB048165FE5E4DE877550", # Second pairing "111E129F1CF1097710D41C4AC70FCDFA5BA2023C6FF1CBEAC322DE49D1B6DF7C", "103188585E2364128FE25C70558F1560F4F9350BAF3959E603CC91486E110936", "198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2", "1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED", "090689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B", "12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA", ], id="bn128_two_pairings", ), pytest.param( 0x08, [ # First pairing "1C76476F4DEF4BB94541D57EBBA1193381FFA7AA76ADA664DD31C16024C43F59", "3034DD2920F673E204FEE2811C678745FC819B55D3E9D294E45C9B03A76AEF41", "209DD15EBFF5D46C4BD888E51A93CF99A7329636C63514396B4A452003A35BF7", "04BF11CA01483BFA8B34B43561848D28905960114C8AC04049AF4B6315A41678", "2BB8324AF6CFC93537A2AD1A445CFD0CA2A71ACD7AC41FADBF933C2A51BE344D", "120A2A4CF30C1BF9845F20C6FE39E07EA2CCE61F0C9BB048165FE5E4DE877550", ], id="bn128_one_pairing", ), # Ported from # https://github.com/NethermindEth/nethermind/blob/ceb8d57b8530ce8181d7427c115ca593386909d6/tools/EngineRequestsGenerator/TestCase.cs#L353 pytest.param(0x08, [], id="ec_pairing_zero_input"), pytest.param( 0x08, [ # First pairing "2cf44499d5d27bb186308b7af7af02ac5bc9eeb6a3d147c186b21fb1b76e18da", "2c0f001f52110ccfe69108924926e45f0b0c868df0e7bde1fe16d3242dc715f6", "1fb19bb476f6b9e44e2a32234da8212f61cd63919354bc06aef31e3cfaff3ebc", "22606845ff186793914e03e21df544c34ffe2f2f3504de8a79d9159eca2d98d9", "2bd368e28381e8eccb5fa81fc26cf3f048eea9abfdd85d7ed3ab3698d63e4f90", "2fe02e47887507adf0ff1743cbac6ba291e66f59be6bd763950bb16041a0a85e", # Second pairing "0000000000000000000000000000000000000000000000000000000000000013", "0644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451", "971ff0471b09fa93caaf13cbf443c1aede09cc4328f5a62aad45f40ec133eb40", "91058a3141822985733cbdddfed0fd8d6c104e9e9eff40bf5abfef9ab163bc72", "a23af9a5ce2ba2796c1f4e453a370eb0af8c212d9dc9acd8fc02c2e907baea22", "3a8eb0b0996252cb548a4487da97b02422ebc0e834613f954de6c7e0afdc1fc0", ], id="ec_pairing_2_sets", ), pytest.param( 0x08, [""], id="ec_pairing_1_pair", ), pytest.param( 0x08, [ # First pairing "2371e7d92e9fc444d0e11526f0752b520318c80be68bf0131704b36b7976572e", "2dca8f05ed5d58e0f2e13c49ae40480c0f99dfcd9268521eea6c81c6387b66c4", "051a93d697db02afd3dcf8414ecb906a114a2bfdb6b06c95d41798d1801b3cbd", "2e275fef7a0bdb0a2aea77d8ec5817e66e199b3d55bc0fa308dcdda74e85060b", "1c7e33c2a72d6e12a31eababad3dbc388525135628102bb64742d9e325f43410", "115dc41fa10b2dbf99036f252ad6f00e8876b22f02cb4738dc4413b22ea9b2df", # Second pairing "09a760ea8f9bd87dc258a949395a03f7d2500c6e72c61f570986328a096b610a", "148027063c072345298117eb2cb980ad79601db31cc69bba6bcbe4937ada6720", "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", ], id="ec_pairing_2_pair", ), pytest.param( 0x08, [ # First pairing "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "0ef4aac9b7954d5fc6eafae7f4f4c2a732ab05b45f8d50d102cee4973f36eb2c", "23db7d30c99e0a2a7f3bb5cd1f04635aaea58732b58887df93d9239c28230d28", "2bd99d31a5054f2556d226f2e5ef0e075423d8604178b2e2c08006311caee54f", "0f11afb0c6073d12d21b13f4f78210e8ca9a66729206d3fcc2c1b04824c425f2", # Second pairing "0000000000000000000000000000000000000000000000000000000000000000", "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", # Third pairing "0000000000000000000000000000000000000000000000000000000000000000", "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", ], id="ec_pairing_3_pair", ), pytest.param( 0x08, [ # First pairing "24ab69f46f3e3333027d67d51af71571141bd5652b9829157a3c5d1268461984", "0f0e1495665bccf97d627b714e8a49e9c77c21e8d5b383ad7dde7e50040d0f62", "2cab595b9d579f8b82e433249b83ae1d7b62d7073a4f67cb3aeb9b316988907f", "1326d1905ffde0c77e8ebd98257aa239b05ae76c8ec7723ec19bbc8282b0debe", "130502106676b537e01cc356765e91c005d6c4bd1a75f5f6d41d2556c73e56ac", "2dc4cb08068b4aa5f14b7f1096ab35d5c13d78319ec7e66e9f67a1ff20cbbf03", # Second pairing "1459f4140b271cbc8746de9dfcb477d5b72d50ef95bec5fef4a68dd69ddfdb2e", "2c589584551d16a9723b5d356d1ee2066d10381555cdc739e39efca2612fc544", "229ab0abdb0a7d1a5f0d93fb36ce41e12a31ba52fd9e3c27bebce524ab6c4e9b", "00f8756832b244377d06e2d00eeb95ec8096dcfd81f4e4931b50fea23c04a2fe", "29605352ce973ec48d1ab2c8355643c999b70ff771946078b519c556058c3d56", "059a65ae6e0189d4e04a966140aa40f781a1345824a90a91bb035e12ad29af1d", # Third pairing "1459f4140b271cbc8746de9dfcb477d5b72d50ef95bec5fef4a68dd69ddfdb2e", "2c589584551d16a9723b5d356d1ee2066d10381555cdc739e39efca2612fc544", "229ab0abdb0a7d1a5f0d93fb36ce41e12a31ba52fd9e3c27bebce524ab6c4e9b", "00f8756832b244377d06e2d00eeb95ec8096dcfd81f4e4931b50fea23c04a2fe", "29605352ce973ec48d1ab2c8355643c999b70ff771946078b519c556058c3d56", "059a65ae6e0189d4e04a966140aa40f781a1345824a90a91bb035e12ad29af1d", # Fourth pairing "24ab69f46f3e3333027d67d51af71571141bd5652b9829157a3c5d1268461984", "0f0e1495665bccf97d627b714e8a49e9c77c21e8d5b383ad7dde7e50040d0f62", "2cab595b9d579f8b82e433249b83ae1d7b62d7073a4f67cb3aeb9b316988907f", "1326d1905ffde0c77e8ebd98257aa239b05ae76c8ec7723ec19bbc8282b0debe", "130502106676b537e01cc356765e91c005d6c4bd1a75f5f6d41d2556c73e56ac", "2dc4cb08068b4aa5f14b7f1096ab35d5c13d78319ec7e66e9f67a1ff20cbbf03", ], id="ec_pairing_4_pair", ), pytest.param( 0x08, [ # First pairing "1147057b17237df94a3186435acf66924e1d382b8c935fdd493ceb38c38def73", "03cd046286139915160357ce5b29b9ea28bfb781b71734455d20ef1a64be76ca", "0daa7cc4983cf74c94607519df747f61e317307c449bafb6923f6d6a65299a7e", "1d48db8f275830859fd61370addbc5d5ef3f0ce7491d16918e065f7e3727439d", "1ca8ac2f4a0f540e5505edbe1d15d13899a2a0dfccb012d068134ac66edec625", "2162c315417d1d12c9d7028c5619015391003a9006d4d8979784c7af2c4537a3", # Second pairing "0d221a19ca86dafa8cb804daff78fd3d1bed30aa32e7d4029b1aa69afda2d750", "018628c766a98de1d0cca887a6d90303e68a7729490f25f937b76b57624ba0be", "14550ccf7139312da6fa9eb1259c6365b0bd688a27473ccb42bc5cd6f14c8abd", "165f8721ee9f614382c8c7edb103c941d3a55c1849c9787f34317777d5d9365b", "0d19da7439edb573a1b3e357faade63d5d68b6031771fd911459b7ab0bda9d3f", "25a50a44d10c99c5f107e3b3874f717873cb2d4674699a468204df27c0c50a9a", # Third pairing "0d7136c59b907615e1b45cf730fbfd6cf38b7e126e85e52be804620a23ace4fb", "03e80c29d24ed5cc407329ae093bb1be00f9e3c9332f532bc3658937110d7607", "2129813bd7247065ac58eac42c81e874044e199f48c12aa749a9fe6bb6e4bddc", "1b72b9ab4579283e62445555d5b2921424213d09a776152361c46988b82be8a7", "111bc8198f932e379b8f9825f01af0f5e5cacbf8bfe274bf674f6eaa6e338e04", "259f58d438fd6391e158c991e155966218e6a432703a84068a32543965749857", # Fourth pairing "1ba47a91d487cce77aa78390a295df54d9351637d67810c400415fb374278e3f", "24318bbc05a4e4d779b9498075841c360c6973c1c51dea254281829bbc9aef33", "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", # Fifth pairing "1e219772c16eee72450bbf43e9cadae7bf6b2e6ae6637cfeb1d1e8965287acfb", "0347e7bf4245debd3d00b6f51d2d50fd718e6769352f4fe1db0efe492fed2fc3", "24fdcc7d4ed0953e3dad500c7ef9836fc61ded44ba454ec76f0a6d0687f4c1b4", "282b18f7e59c1db4852e622919b2ce9aa5980ca883eac312049c19a3deb79f6d", "0c9d6ce303b7811dd7ea506c8fa124837405bd209b8731bda79a66eb7206277b", "1ac5dac62d2332faa8069faca3b0d27fcdf95d8c8bafc9074ee72b5c1f33aa70", ], id="ec_pairing_5_pair", ), pytest.param( 0x08, [ "0000000000000000000000000000000000000000000000000000000000000000", ], id="ec_pairing_1_pair_empty", ), pytest.param( Blake2bSpec.BLAKE2_PRECOMPILE_ADDRESS, [ Blake2bInput(rounds=0xFFFF, f=True).create_blake2b_tx_data(), ], id="blake2f", ), pytest.param( BlobsSpec.POINT_EVALUATION_PRECOMPILE_ADDRESS, [ "01E798154708FE7789429634053CBF9F99B619F9F084048927333FCE637F549B", "564C0A11A0F704F4FC3E8ACFE0F8245F0AD1347B378FBF96E206DA11A5D36306", "24D25032E67A7E6A4910DF5834B8FE70E6BCFEEAC0352434196BDF4B2485D5A1", "8F59A8D2A1A625A17F3FEA0FE5EB8C896DB3764F3185481BC22F91B4AAFFCCA25F26936857BC3A7C2539EA8EC3A952B7", "873033E038326E87ED3E1276FD140253FA08E9FC25FB2D9A98527FC22A2C9612FBEAFDAD446CBC7BCDBDCD780AF2C16A", ], id="point_evaluation", ), pytest.param( bls12381_spec.Spec.G1ADD, [ bls12381_spec.Spec.G1, bls12381_spec.Spec.P1, ], id="bls12_g1add", ), pytest.param( bls12381_spec.Spec.G1MSM, [ (bls12381_spec.Spec.P1 + bls12381_spec.Scalar(bls12381_spec.Spec.Q)) * (len(bls12381_spec.Spec.G1MSM_DISCOUNT_TABLE) - 1), ], id="bls12_g1msm", ), pytest.param( bls12381_spec.Spec.G2ADD, [ bls12381_spec.Spec.G2, bls12381_spec.Spec.P2, ], id="bls12_g2add", ), pytest.param( bls12381_spec.Spec.G2MSM, [ # TODO: the //2 is required due to a limitation of the max # contract size limit. In a further iteration we can insert the # inputs as calldata or storage and avoid having to do PUSHes # which has this limitation. This also applies to G1MSM. (bls12381_spec.Spec.P2 + bls12381_spec.Scalar(bls12381_spec.Spec.Q)) * (len(bls12381_spec.Spec.G2MSM_DISCOUNT_TABLE) // 2), ], id="bls12_g2msm", ), pytest.param( bls12381_spec.Spec.PAIRING, [ bls12381_spec.Spec.G1, bls12381_spec.Spec.G2, ], id="bls12_pairing_check", ), pytest.param( bls12381_spec.Spec.MAP_FP_TO_G1, [ bls12381_spec.FP(bls12381_spec.Spec.P - 1), ], id="bls12_fp_to_g1", ), pytest.param( bls12381_spec.Spec.MAP_FP2_TO_G2, [ bls12381_spec.FP2((bls12381_spec.Spec.P - 1, bls12381_spec.Spec.P - 1)), ], id="bls12_fp_to_g2", ), pytest.param( p256verify_spec.Spec.P256VERIFY, [ p256verify_spec.Spec.H0, p256verify_spec.Spec.R0, p256verify_spec.Spec.S0, p256verify_spec.Spec.X0, p256verify_spec.Spec.Y0, ], id="p256verify", marks=[pytest.mark.eip_checklist("precompile/test/excessive_gas_usage", eip=[7951])], ), pytest.param( p256verify_spec.Spec.P256VERIFY, [ "235060CAFE19A407880C272BC3E73600E3A12294F56143ED61929C2FF4525ABB", "182E5CBDF96ACCB859E8EEA1850DE5FF6E430A19D1D9A680ECD5946BBEA8A32B", "76DDFAE6797FA6777CAAB9FA10E75F52E70A4E6CEB117B3C5B2F445D850BD64C", "3828736CDFC4C8696008F71999260329AD8B12287846FEDCEDE3BA1205B12729", "3E5141734E971A8D55015068D9B3666760F4608A49B11F92E500ACEA647978C7", ], id="p256verify_wrong_endianness", ), pytest.param( p256verify_spec.Spec.P256VERIFY, [ "BB5A52F42F9C9261ED4361F59422A1E30036E7C32B270C8807A419FECA605023", "000000000000000000000000000000004319055358E8617B0C46353D039CDAAB", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254E", "0AD99500288D466940031D72A9F5445A4D43784640855BF0A69874D2DE5FE103", "C5011E6EF2C42DCD50D5D3D29F99AE6EBA2C80C9244F4C5422F0979FF0C3BA5E", ], id="p256verify_modular_comp_x_coordinate_exceeds_n", ), ], ) def test_worst_precompile_fixed_cost( benchmark_test: BenchmarkTestFiller, fork: Fork, precompile_address: Address, parameters: list[str] | list[BytesConcatenation] | list[bytes], ) -> None: """Test running a block filled with a precompile with fixed cost.""" if precompile_address not in fork.precompiles(): pytest.skip("Precompile not enabled") concatenated_bytes: bytes if all(isinstance(p, str) for p in parameters): parameters_str = cast(list[str], parameters) concatenated_hex_string = "".join(parameters_str) concatenated_bytes = bytes.fromhex(concatenated_hex_string) elif all(isinstance(p, (bytes, BytesConcatenation, FieldElement)) for p in parameters): parameters_bytes_list = [ bytes(p) for p in cast(list[BytesConcatenation | bytes | FieldElement], parameters) ] concatenated_bytes = b"".join(parameters_bytes_list) else: raise TypeError( "parameters must be a list of strings (hex) " "or a list of byte-like objects (bytes, BytesConcatenation or FieldElement)." ) padding_length = (32 - (len(concatenated_bytes) % 32)) % 32 input_bytes = concatenated_bytes + b"\x00" * padding_length setup = Bytecode() for i in range(0, len(input_bytes), 32): chunk = input_bytes[i : i + 32] value_to_store = int.from_bytes(chunk, "big") setup += Op.MSTORE(i, value_to_store) attack_block = Op.POP( Op.STATICCALL(Op.GAS, precompile_address, 0, len(concatenated_bytes), 0, 0) ) benchmark_test( code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block), ) def test_worst_jumps( benchmark_test: BenchmarkTestFiller, pre: Alloc, ) -> None: """Test running a JUMP-intensive contract.""" tx = Transaction( to=pre.deploy_contract(code=(Op.JUMPDEST + Op.JUMP(Op.PUSH0))), sender=pre.fund_eoa(), ) benchmark_test(tx=tx) def test_worst_jumpi_fallthrough( benchmark_test: BenchmarkTestFiller, ) -> None: """Test running a JUMPI-intensive contract with fallthrough.""" benchmark_test( code_generator=JumpLoopGenerator(attack_block=Op.JUMPI(Op.PUSH0, Op.PUSH0)), ) def test_worst_jumpis( benchmark_test: BenchmarkTestFiller, pre: Alloc, ) -> None: """Test running a JUMPI-intensive contract.""" tx = Transaction( to=pre.deploy_contract(code=(Op.JUMPDEST + Op.JUMPI(Op.PUSH0, Op.NUMBER))), sender=pre.fund_eoa(), ) benchmark_test(tx=tx) def test_worst_jumpdests( benchmark_test: BenchmarkTestFiller, ) -> None: """Test running a JUMPDEST-intensive contract.""" benchmark_test(code_generator=JumpLoopGenerator(attack_block=Op.JUMPDEST)) DEFAULT_BINOP_ARGS = ( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F, 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001, ) @pytest.mark.parametrize( "opcode,opcode_args", [ ( Op.ADD, DEFAULT_BINOP_ARGS, ), ( Op.MUL, DEFAULT_BINOP_ARGS, ), ( # This has the cycle of 2, after two SUBs values are back to # initials. Op.SUB, DEFAULT_BINOP_ARGS, ), ( # This has the cycle of 2: # v[0] = a // b # v[1] = a // v[0] = a // (a // b) = b # v[2] = a // b Op.DIV, ( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F, # We want the first divisor to be slightly bigger than 2**128: # this is the worst case for the division algorithm with # optimized paths for division by 1 and 2 words. 0x100000000000000000000000000000033, ), ), ( # This has the cycle of 2, see above. Op.DIV, ( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F, # We want the first divisor to be slightly bigger than 2**64: # this is the worst case for the division algorithm with an # optimized path for division by 1 word. 0x10000000000000033, ), ), ( # Same as DIV-0, but the numerator made positive, and the divisor # made negative. Op.SDIV, ( 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD, ), ), ( # Same as DIV-1, but the numerator made positive, and the divisor # made negative. Op.SDIV, ( 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFCD, ), ), ( # This scenario is not suitable for MOD because the values quickly # become 0. Op.MOD, DEFAULT_BINOP_ARGS, ), ( # This scenario is not suitable for SMOD because the values quickly # become 0. Op.SMOD, DEFAULT_BINOP_ARGS, ), ( # This keeps the values unchanged, pow(2**256-1, 2**256-1, 2**256) # == 2**256-1. Op.EXP, ( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, ), ), ( # Not great because we always sign-extend the 4 bytes. Op.SIGNEXTEND, ( 3, 0xFFDADADA, # Negative to have more work. ), ), ( Op.LT, # Keeps getting result 1. (0, 1), ), ( Op.GT, # Keeps getting result 0. (0, 1), ), ( Op.SLT, # Keeps getting result 1. (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 1), ), ( Op.SGT, # Keeps getting result 0. (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 1), ), ( # The worst case is if the arguments are equal (no early return), # so let's keep it comparing ones. Op.EQ, (1, 1), ), ( Op.AND, DEFAULT_BINOP_ARGS, ), ( Op.OR, DEFAULT_BINOP_ARGS, ), ( Op.XOR, DEFAULT_BINOP_ARGS, ), ( Op.BYTE, # Keep extracting the last byte: 0x2F. (31, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F), ), ( Op.SHL, # Shift by 1 until getting 0. (1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F), ), ( Op.SHR, # Shift by 1 until getting 0. (1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F), ), ( Op.SAR, # Shift by 1 until getting -1. (1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F), ), ], ids=lambda param: "" if isinstance(param, tuple) else param, ) def test_worst_binop_simple( benchmark_test: BenchmarkTestFiller, opcode: Op, opcode_args: tuple[int, int], ) -> None: """ Test running a block with as many binary instructions (takes two args, produces one value) as possible. The execution starts with two initial values on the stack, and the stack is balanced by the DUP2 instruction. """ tx_data = b"".join(arg.to_bytes(32, byteorder="big") for arg in opcode_args) setup = Op.CALLDATALOAD(0) + Op.CALLDATALOAD(32) + Op.DUP2 + Op.DUP2 attack_block = Op.DUP2 + opcode cleanup = Op.POP + Op.POP + Op.DUP2 + Op.DUP2 benchmark_test( code_generator=JumpLoopGenerator( setup=setup, attack_block=attack_block, cleanup=cleanup, tx_kwargs={"data": tx_data}, ), ) @pytest.mark.parametrize("opcode", [Op.ISZERO, Op.NOT]) def test_worst_unop( benchmark_test: BenchmarkTestFiller, opcode: Op, ) -> None: """ Test running a block with as many unary instructions (takes one arg, produces one value) as possible. """ benchmark_test( code_generator=JumpLoopGenerator(setup=Op.PUSH0, attack_block=opcode), ) # `key_mut` indicates the key isn't fixed. @pytest.mark.parametrize("key_mut", [True, False]) # `val_mut` indicates that at the end of each big-loop, the value of the target # key changes. @pytest.mark.parametrize("val_mut", [True, False]) def test_worst_tload( benchmark_test: BenchmarkTestFiller, key_mut: bool, val_mut: bool, ) -> None: """Test running a block with as many TLOAD calls as possible.""" start_key = 41 code_key_mut = Bytecode() code_val_mut = Bytecode() setup = Bytecode() if key_mut and val_mut: setup = Op.PUSH1(start_key) attack_block = Op.POP(Op.TLOAD(Op.DUP1)) code_key_mut = Op.POP + Op.GAS code_val_mut = Op.TSTORE(Op.DUP2, Op.GAS) if key_mut and not val_mut: attack_block = Op.POP(Op.TLOAD(Op.GAS)) if not key_mut and val_mut: attack_block = Op.POP(Op.TLOAD(Op.CALLVALUE)) code_val_mut = Op.TSTORE(Op.CALLVALUE, Op.GAS) # CALLVALUE configured in the tx if not key_mut and not val_mut: attack_block = Op.POP(Op.TLOAD(Op.CALLVALUE)) cleanup = code_key_mut + code_val_mut tx_value = start_key if not key_mut and val_mut else 0 benchmark_test( code_generator=JumpLoopGenerator( setup=setup, attack_block=attack_block, cleanup=cleanup, tx_kwargs={ "value": tx_value, }, ), ) @pytest.mark.parametrize("key_mut", [True, False]) @pytest.mark.parametrize("dense_val_mut", [True, False]) def test_worst_tstore( benchmark_test: BenchmarkTestFiller, key_mut: bool, dense_val_mut: bool, ) -> None: """Test running a block with as many TSTORE calls as possible.""" init_key = 42 setup = Op.PUSH1(init_key) # If `dense_val_mut` is set, we use GAS as a cheap way of always # storing a different value than # the previous one. attack_block = Op.TSTORE(Op.DUP2, Op.GAS if dense_val_mut else Op.DUP1) # If `key_mut` is True, we mutate the key on every iteration of the # big loop. cleanup = Op.POP + Op.GAS if key_mut else Bytecode() benchmark_test( code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block, cleanup=cleanup), ) @pytest.mark.parametrize("shift_right", [Op.SHR, Op.SAR]) def test_worst_shifts( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, shift_right: Op, gas_benchmark_value: int, ) -> None: """ Test running a block with as many shift instructions with non-trivial arguments. This test generates left-right pairs of shifts to avoid zeroing the argument. The shift amounts are randomly pre-selected from the constant pool of 15 values on the stack. """ max_code_size = fork.max_code_size() def to_signed(x: int) -> int: return x if x < 2**255 else x - 2**256 def to_unsigned(x: int) -> int: return x if x >= 0 else x + 2**256 def shr(x: int, s: int) -> int: return x >> s def shl(x: int, s: int) -> int: return x << s def sar(x: int, s: int) -> int: return to_unsigned(to_signed(x) >> s) match shift_right: case Op.SHR: shift_right_fn = shr case Op.SAR: shift_right_fn = sar case _: raise ValueError(f"Unexpected shift op: {shift_right}") rng = random.Random(1) # Use random with a fixed seed. initial_value = 2**256 - 1 # The initial value to be shifted; should be # negative for SAR. # Create the list of shift amounts with 15 elements (max reachable by DUPs # instructions). For the worst case keep the values small and omit values # divisible by 8. shift_amounts = [x + (x >= 8) + (x >= 15) for x in range(1, 16)] code_prefix = sum(Op.PUSH1[sh] for sh in shift_amounts) + Op.JUMPDEST + Op.CALLDATALOAD(0) code_suffix = Op.POP + Op.JUMP(len(shift_amounts) * 2) code_body_len = max_code_size - len(code_prefix) - len(code_suffix) def select_shift_amount(shift_fn: Any, v: Any) -> Any: """Select a shift amount that will produce a non-zero result.""" while True: index = rng.randint(0, len(shift_amounts) - 1) sh = shift_amounts[index] new_v = shift_fn(v, sh) % 2**256 if new_v != 0: return new_v, index code_body = Bytecode() v = initial_value while len(code_body) <= code_body_len - 4: v, i = select_shift_amount(shl, v) code_body += make_dup(len(shift_amounts) - i) + Op.SHL v, i = select_shift_amount(shift_right_fn, v) code_body += make_dup(len(shift_amounts) - i) + shift_right code = code_prefix + code_body + code_suffix assert len(code) == max_code_size - 2 tx = Transaction( to=pre.deploy_contract(code=code), data=initial_value.to_bytes(32, byteorder="big"), gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) benchmark_test(tx=tx) @pytest.mark.parametrize( "blob_index, blobs_present", [ pytest.param(0, 0, id="no blobs"), pytest.param(0, 1, id="one blob and accessed"), pytest.param(1, 1, id="one blob but access non-existent index"), pytest.param(5, 6, id="six blobs, access latest"), ], ) def test_worst_blobhash( fork: Fork, benchmark_test: BenchmarkTestFiller, blob_index: int, blobs_present: bool, ) -> None: """Test running a block with as many BLOBHASH instructions as possible.""" tx_kwargs: Dict[str, Any] = {} if blobs_present > 0: tx_kwargs["ty"] = TransactionType.BLOB_TRANSACTION tx_kwargs["max_fee_per_blob_gas"] = fork.min_base_fee_per_blob_gas() tx_kwargs["blob_versioned_hashes"] = add_kzg_version( [i.to_bytes() * 32 for i in range(blobs_present)], BlobsSpec.BLOB_COMMITMENT_VERSION_KZG, ) benchmark_test( code_generator=ExtCallGenerator( attack_block=Op.BLOBHASH(blob_index), tx_kwargs=tx_kwargs, ), ) @pytest.mark.parametrize("mod_bits", [255, 191, 127, 63]) @pytest.mark.parametrize("op", [Op.MOD, Op.SMOD]) def test_worst_mod( benchmark_test: BenchmarkTestFiller, mod_bits: int, op: Op, ) -> None: """ Test running a block with as many MOD instructions with arguments of the parametrized range. The test program consists of code segments evaluating the "MOD chain": mod[0] = calldataload(0) mod[1] = numerators[indexes[0]] % mod[0] mod[2] = numerators[indexes[1]] % mod[1] ... The "numerators" is a pool of 15 constants pushed to the EVM stack at the program start. The order of accessing the numerators is selected in a way the mod value remains in the range as long as possible. """ # For SMOD we negate both numerator and modulus. The underlying # computation is the same, # just the SMOD implementation will have to additionally handle the # sign bits. # The result stays negative. should_negate = op == Op.SMOD num_numerators = 15 numerator_bits = 256 if not should_negate else 255 numerator_max = 2**numerator_bits - 1 numerator_min = 2 ** (numerator_bits - 1) # Pick the modulus min value so that it is _unlikely_ to drop to the lower # word count. assert mod_bits >= 63 mod_min = 2 ** (mod_bits - 63) # Select the random seed giving the longest found MOD chain. You can look # for a longer one by increasing the numerators_min_len. This will activate # the while loop below. match op, mod_bits: case Op.MOD, 255: seed = 20393 numerators_min_len = 750 case Op.MOD, 191: seed = 25979 numerators_min_len = 770 case Op.MOD, 127: seed = 17671 numerators_min_len = 750 case Op.MOD, 63: seed = 29181 numerators_min_len = 730 case Op.SMOD, 255: seed = 4015 numerators_min_len = 750 case Op.SMOD, 191: seed = 17355 numerators_min_len = 750 case Op.SMOD, 127: seed = 897 numerators_min_len = 750 case Op.SMOD, 63: seed = 7562 numerators_min_len = 720 case _: raise ValueError(f"{mod_bits}-bit {op} not supported.") while True: rng = random.Random(seed) # Create the list of random numerators. numerators = [rng.randint(numerator_min, numerator_max) for _ in range(num_numerators)] # Create the random initial modulus. initial_mod = rng.randint(2 ** (mod_bits - 1), 2**mod_bits - 1) # Evaluate the MOD chain and collect the order of accessing numerators. mod = initial_mod indexes = [] while mod >= mod_min: # Compute results for each numerator. results = [n % mod for n in numerators] # And pick the best one. i = max(range(len(results)), key=results.__getitem__) mod = results[i] indexes.append(i) # Disable if you want to find longer MOD chains. assert len(indexes) > numerators_min_len if len(indexes) > numerators_min_len: break seed += 1 print(f"{seed=}") # TODO: Don't use fixed PUSH32. Let Bytecode helpers to select optimal # push opcode. setup = sum((Op.PUSH32[n] for n in numerators), Bytecode()) attack_block = ( Op.CALLDATALOAD(0) + sum(make_dup(len(numerators) - i) + op for i in indexes) + Op.POP ) input_value = initial_mod if not should_negate else neg(initial_mod) benchmark_test( code_generator=JumpLoopGenerator( setup=setup, attack_block=attack_block, tx_kwargs={"data": input_value.to_bytes(32, byteorder="big")}, ), ) @pytest.mark.parametrize("opcode", [Op.MLOAD, Op.MSTORE, Op.MSTORE8]) @pytest.mark.parametrize("offset", [0, 1, 31]) @pytest.mark.parametrize("offset_initialized", [True, False]) @pytest.mark.parametrize("big_memory_expansion", [True, False]) def test_worst_memory_access( benchmark_test: BenchmarkTestFiller, opcode: Op, offset: int, offset_initialized: bool, big_memory_expansion: bool, ) -> None: """ Test running a block with as many memory access instructions as possible. """ mem_exp_code = Op.MSTORE8(10 * 1024, 1) if big_memory_expansion else Bytecode() offset_set_code = Op.MSTORE(offset, 43) if offset_initialized else Bytecode() setup = mem_exp_code + offset_set_code + Op.PUSH1(42) + Op.PUSH1(offset) attack_block = Op.POP(Op.MLOAD(Op.DUP1)) if opcode == Op.MLOAD else opcode(Op.DUP2, Op.DUP2) benchmark_test( code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block), ) @pytest.mark.parametrize("mod_bits", [255, 191, 127, 63]) @pytest.mark.parametrize("op", [Op.ADDMOD, Op.MULMOD]) def test_worst_modarith( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, mod_bits: int, op: Op, gas_benchmark_value: int, ) -> None: """ Test running a block with as many "op" instructions with arguments of the parametrized range. The test program consists of code segments evaluating the "op chain": mod[0] = calldataload(0) mod[1] = (fixed_arg op args[indexes[0]]) % mod[0] mod[2] = (fixed_arg op args[indexes[1]]) % mod[1] The "args" is a pool of 15 constants pushed to the EVM stack at the program start. The "fixed_arg" is the 0xFF...FF constant added to the EVM stack by PUSH32 just before executing the "op". The order of accessing the numerators is selected in a way the mod value remains in the range as long as possible. """ fixed_arg = 2**256 - 1 num_args = 15 max_code_size = fork.max_code_size() # Pick the modulus min value so that it is _unlikely_ to drop to the lower # word count. assert mod_bits >= 63 mod_min = 2 ** (mod_bits - 63) # Select the random seed giving the longest found op chain. You can look # for a longer one by increasing the op_chain_len. This will activate the # while loop below. op_chain_len = 666 match op, mod_bits: case Op.ADDMOD, 255: seed = 4 case Op.ADDMOD, 191: seed = 2 case Op.ADDMOD, 127: seed = 2 case Op.ADDMOD, 63: seed = 64 case Op.MULMOD, 255: seed = 5 case Op.MULMOD, 191: seed = 389 case Op.MULMOD, 127: seed = 5 case Op.MULMOD, 63: # For this setup we were not able to find an op-chain longer than # 600. seed = 4193 op_chain_len = 600 case _: raise ValueError(f"{mod_bits}-bit {op} not supported.") while True: rng = random.Random(seed) args = [rng.randint(2**255, 2**256 - 1) for _ in range(num_args)] initial_mod = rng.randint(2 ** (mod_bits - 1), 2**mod_bits - 1) # Evaluate the op chain and collect the order of accessing numerators. op_fn = operator.add if op == Op.ADDMOD else operator.mul mod = initial_mod indexes: list[int] = [] while mod >= mod_min and len(indexes) < op_chain_len: results = [op_fn(a, fixed_arg) % mod for a in args] # And pick the best one. i = max(range(len(results)), key=results.__getitem__) mod = results[i] indexes.append(i) # Disable if you want to find longer op chains. assert len(indexes) == op_chain_len if len(indexes) == op_chain_len: break seed += 1 print(f"{seed=}") code_constant_pool = sum((Op.PUSH32[n] for n in args), Bytecode()) code_segment = ( Op.CALLDATALOAD(0) + sum(make_dup(len(args) - i) + Op.PUSH32[fixed_arg] + op for i in indexes) + Op.POP ) # Construct the final code. Because of the usage of PUSH32 the code segment # is very long, so don't try to include multiple of these. code = code_constant_pool + Op.JUMPDEST + code_segment + Op.JUMP(len(code_constant_pool)) assert (max_code_size - len(code_segment)) < len(code) <= max_code_size tx = Transaction( to=pre.deploy_contract(code=code), data=initial_mod.to_bytes(32, byteorder="big"), gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) benchmark_test(tx=tx) def test_empty_block( benchmark_test: BenchmarkTestFiller, ) -> None: """Test running an empty block as a baseline for fixed proving costs.""" benchmark_test( blocks=[Block(txs=[])], expected_benchmark_gas_used=0, ) def test_amortized_bn128_pairings( benchmark_test: BenchmarkTestFiller, fork: Fork, gas_benchmark_value: int, ) -> None: """Test running a block with as many BN128 pairings as possible.""" base_cost = 45_000 pairing_cost = 34_000 size_per_pairing = 192 gsc = fork.gas_costs() intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() mem_exp_gas_calculator = fork.memory_expansion_gas_calculator() # This is a theoretical maximum number of pairings that can be done in a # block. It is only used for an upper bound for calculating the optimal # number of pairings below. maximum_number_of_pairings = (gas_benchmark_value - base_cost) // pairing_cost # Discover the optimal number of pairings balancing two dimensions: # 1. Amortize the precompile base cost as much as possible. # 2. The cost of the memory expansion. max_pairings = 0 optimal_per_call_num_pairings = 0 for i in range(1, maximum_number_of_pairings + 1): # We'll pass all pairing arguments via calldata. available_gas_after_intrinsic = gas_benchmark_value - intrinsic_gas_calculator( calldata=[0xFF] * size_per_pairing * i # 0xFF is to indicate non- # zero bytes. ) available_gas_after_expansion = max( 0, available_gas_after_intrinsic - mem_exp_gas_calculator(new_bytes=i * size_per_pairing), ) # This is ignoring "glue" opcodes, but helps to have a rough idea of # the right cutting point. approx_gas_cost_per_call = gsc.G_WARM_ACCOUNT_ACCESS + base_cost + i * pairing_cost num_precompile_calls = available_gas_after_expansion // approx_gas_cost_per_call num_pairings_done = num_precompile_calls * i # Each precompile call # does i pairings. if num_pairings_done > max_pairings: max_pairings = num_pairings_done optimal_per_call_num_pairings = i setup = Op.CALLDATACOPY(size=Op.CALLDATASIZE) attack_block = Op.POP(Op.STATICCALL(Op.GAS, 0x08, 0, Op.CALLDATASIZE, 0, 0)) benchmark_test( code_generator=JumpLoopGenerator( setup=setup, attack_block=attack_block, tx_kwargs={"data": _generate_bn128_pairs(optimal_per_call_num_pairings, 42)}, ), ) def _generate_bn128_pairs(n: int, seed: int = 0) -> Bytes: rng = random.Random(seed) calldata = Bytes() for _ in range(n): priv_key_g1 = rng.randint(1, 2**32 - 1) priv_key_g2 = rng.randint(1, 2**32 - 1) point_x_affine = multiply(G1, priv_key_g1) point_y_affine = multiply(G2, priv_key_g2) assert point_x_affine is not None, "G1 multiplication resulted in point at infinity" assert point_y_affine is not None, "G2 multiplication resulted in point at infinity" g1_x_bytes = point_x_affine[0].n.to_bytes(32, "big") g1_y_bytes = point_x_affine[1].n.to_bytes(32, "big") g1_serialized = g1_x_bytes + g1_y_bytes g2_x_c1_bytes = point_y_affine[0].coeffs[1].n.to_bytes(32, "big") # type: ignore g2_x_c0_bytes = point_y_affine[0].coeffs[0].n.to_bytes(32, "big") # type: ignore g2_y_c1_bytes = point_y_affine[1].coeffs[1].n.to_bytes(32, "big") # type: ignore g2_y_c0_bytes = point_y_affine[1].coeffs[0].n.to_bytes(32, "big") # type: ignore g2_serialized = g2_x_c1_bytes + g2_x_c0_bytes + g2_y_c1_bytes + g2_y_c0_bytes pair_calldata = g1_serialized + g2_serialized calldata = Bytes(calldata + pair_calldata) return calldata @pytest.mark.parametrize( "calldata", [ pytest.param(b"", id="empty"), pytest.param(b"\x00", id="zero-loop"), pytest.param(b"\x00" * 31 + b"\x20", id="one-loop"), ], ) def test_worst_calldataload( benchmark_test: BenchmarkTestFiller, calldata: bytes, ) -> None: """Test running a block with as many CALLDATALOAD as possible.""" benchmark_test( code_generator=JumpLoopGenerator( setup=Op.PUSH0, attack_block=Op.CALLDATALOAD, tx_kwargs={"data": calldata}, ), ) @pytest.mark.parametrize( "opcode", [ Op.SWAP1, Op.SWAP2, Op.SWAP3, Op.SWAP4, Op.SWAP5, Op.SWAP6, Op.SWAP7, Op.SWAP8, Op.SWAP9, Op.SWAP10, Op.SWAP11, Op.SWAP12, Op.SWAP13, Op.SWAP14, Op.SWAP15, Op.SWAP16, ], ) def test_worst_swap( benchmark_test: BenchmarkTestFiller, opcode: Opcode, ) -> None: """Test running a block with as many SWAP as possible.""" benchmark_test( code_generator=JumpLoopGenerator( attack_block=opcode, setup=Op.PUSH0 * opcode.min_stack_height ), ) @pytest.mark.parametrize( "opcode", [ pytest.param(Op.DUP1), pytest.param(Op.DUP2), pytest.param(Op.DUP3), pytest.param(Op.DUP4), pytest.param(Op.DUP5), pytest.param(Op.DUP6), pytest.param(Op.DUP7), pytest.param(Op.DUP8), pytest.param(Op.DUP9), pytest.param(Op.DUP10), pytest.param(Op.DUP11), pytest.param(Op.DUP12), pytest.param(Op.DUP13), pytest.param(Op.DUP14), pytest.param(Op.DUP15), pytest.param(Op.DUP16), ], ) def test_worst_dup( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, opcode: Op, ) -> None: """Test running a block with as many DUP as possible.""" max_stack_height = fork.max_stack_height() min_stack_height = opcode.min_stack_height code = Op.PUSH0 * min_stack_height + opcode * (max_stack_height - min_stack_height) target_contract_address = pre.deploy_contract(code=code) attack_block = Op.POP(Op.STATICCALL(Op.GAS, target_contract_address, 0, 0, 0, 0)) benchmark_test( code_generator=JumpLoopGenerator(attack_block=attack_block), ) @pytest.mark.parametrize( "opcode", [ pytest.param(Op.PUSH0), pytest.param(Op.PUSH1), pytest.param(Op.PUSH2), pytest.param(Op.PUSH3), pytest.param(Op.PUSH4), pytest.param(Op.PUSH5), pytest.param(Op.PUSH6), pytest.param(Op.PUSH7), pytest.param(Op.PUSH8), pytest.param(Op.PUSH9), pytest.param(Op.PUSH10), pytest.param(Op.PUSH11), pytest.param(Op.PUSH12), pytest.param(Op.PUSH13), pytest.param(Op.PUSH14), pytest.param(Op.PUSH15), pytest.param(Op.PUSH16), pytest.param(Op.PUSH17), pytest.param(Op.PUSH18), pytest.param(Op.PUSH19), pytest.param(Op.PUSH20), pytest.param(Op.PUSH21), pytest.param(Op.PUSH22), pytest.param(Op.PUSH23), pytest.param(Op.PUSH24), pytest.param(Op.PUSH25), pytest.param(Op.PUSH26), pytest.param(Op.PUSH27), pytest.param(Op.PUSH28), pytest.param(Op.PUSH29), pytest.param(Op.PUSH30), pytest.param(Op.PUSH31), pytest.param(Op.PUSH32), ], ) def test_worst_push( benchmark_test: BenchmarkTestFiller, opcode: Op, ) -> None: """Test running a block with as many PUSH as possible.""" benchmark_test( code_generator=ExtCallGenerator( attack_block=opcode[1] if opcode.has_data_portion() else opcode ), ) @pytest.mark.parametrize( "opcode", [Op.RETURN, Op.REVERT], ) @pytest.mark.parametrize( "return_size, return_non_zero_data", [ pytest.param(0, False, id="empty"), pytest.param(1024, True, id="1KiB of non-zero data"), pytest.param(1024, False, id="1KiB of zero data"), pytest.param(1024 * 1024, True, id="1MiB of non-zero data"), pytest.param(1024 * 1024, False, id="1MiB of zero data"), ], ) def test_worst_return_revert( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, opcode: Op, return_size: int, return_non_zero_data: bool, ) -> None: """Test running a block with as many RETURN or REVERT as possible.""" max_code_size = fork.max_code_size() # Create the contract that will be called repeatedly. # The bytecode of the contract is: # ``` # [CODECOPY(returned_size) -- Conditional if return_non_zero_data] # opcode(returned_size) # # ``` # Filling the contract up to the max size is a cheap way of leveraging # CODECOPY to return non-zero bytes if requested. Note that since this # is a pre-deploy this cost isn't # relevant for the benchmark. mem_preparation = Op.CODECOPY(size=return_size) if return_non_zero_data else Bytecode() executable_code = mem_preparation + opcode(size=return_size) code = executable_code if return_non_zero_data: code += Op.INVALID * (max_code_size - len(executable_code)) target_contract_address = pre.deploy_contract(code=code) attack_block = Op.POP(Op.STATICCALL(address=target_contract_address)) benchmark_test( code_generator=JumpLoopGenerator(attack_block=attack_block), ) @pytest.mark.valid_from("Osaka") def test_worst_clz_same_input(benchmark_test: BenchmarkTestFiller) -> None: """Test running a block with as many CLZ with same input as possible.""" magic_value = 248 # CLZ(248) = 248 benchmark_test( code_generator=JumpLoopGenerator(setup=Op.PUSH1(magic_value), attack_block=Op.CLZ), ) @pytest.mark.valid_from("Osaka") def test_worst_clz_diff_input( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Test running a block with as many CLZ with different input as possible. """ max_code_size = fork.max_code_size() code_prefix = Op.JUMPDEST code_suffix = Op.PUSH0 + Op.JUMP available_code_size = max_code_size - len(code_prefix) - len(code_suffix) code_seq = Bytecode() for i in range(available_code_size): value = (2**256 - 1) >> (i % 256) clz_op = Op.CLZ(value) + Op.POP if len(code_seq) + len(clz_op) > available_code_size: break code_seq += clz_op attack_code = code_prefix + code_seq + code_suffix assert len(attack_code) <= max_code_size tx = Transaction( to=pre.deploy_contract(code=attack_code), sender=pre.fund_eoa(), ) benchmark_test(tx=tx) ================================================ FILE: tests/benchmark/test_worst_memory.py ================================================ """ Tests that benchmark EVMs in the worst-case memory opcodes. """ from enum import auto import pytest from ethereum_test_base_types.base_types import Bytes from ethereum_test_benchmark.benchmark_code_generator import JumpLoopGenerator from ethereum_test_forks import Fork from ethereum_test_tools import ( Alloc, BenchmarkTestFiller, Bytecode, Transaction, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "TODO" REFERENCE_SPEC_VERSION = "TODO" class CallDataOrigin: """Enum for calldata origins.""" TRANSACTION = auto() CALL = auto() @pytest.mark.parametrize( "origin", [ pytest.param(CallDataOrigin.TRANSACTION, id="transaction"), pytest.param(CallDataOrigin.CALL, id="call"), ], ) @pytest.mark.parametrize( "size", [ pytest.param(0, id="0 bytes"), pytest.param(100, id="100 bytes"), pytest.param(10 * 1024, id="10KiB"), pytest.param(1024 * 1024, id="1MiB"), ], ) @pytest.mark.parametrize( "fixed_src_dst", [ True, False, ], ) @pytest.mark.parametrize( "non_zero_data", [ True, False, ], ) def test_worst_calldatacopy( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, origin: CallDataOrigin, size: int, fixed_src_dst: bool, non_zero_data: bool, gas_benchmark_value: int, ) -> None: """Test running a block filled with CALLDATACOPY executions.""" if size == 0 and non_zero_data: pytest.skip("Non-zero data with size 0 is not applicable.") # If `non_zero_data` is True, we fill the calldata with deterministic # random data. Note that if `size == 0` and `non_zero_data` is a skipped # case. data = Bytes([i % 256 for i in range(size)]) if non_zero_data else Bytes() intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() min_gas = intrinsic_gas_calculator(calldata=data) if min_gas > gas_benchmark_value: pytest.skip("Minimum gas required for calldata ({min_gas}) is greater than the gas limit") # We create the contract that will be doing the CALLDATACOPY multiple # times. # # If `non_zero_data` is True, we leverage CALLDATASIZE for the copy # length. Otherwise, since we # don't send zero data explicitly via calldata, PUSH the target size and # use DUP1 to copy it. setup = Bytecode() if non_zero_data or size == 0 else Op.PUSH3(size) src_dst = 0 if fixed_src_dst else Op.MOD(Op.GAS, 7) attack_block = Op.CALLDATACOPY( src_dst, src_dst, Op.CALLDATASIZE if non_zero_data or size == 0 else Op.DUP1 ) code_address = JumpLoopGenerator(setup=setup, attack_block=attack_block).deploy_contracts( pre=pre, fork=fork ) tx_target = code_address # If the origin is CALL, we need to create a contract that will call the # target contract with the calldata. if origin == CallDataOrigin.CALL: # If `non_zero_data` is False we leverage just using zeroed memory. # Otherwise, we copy the calldata received from the transaction. setup = ( Op.CALLDATACOPY(Op.PUSH0, Op.PUSH0, Op.CALLDATASIZE) if non_zero_data else Bytecode() ) + Op.JUMPDEST arg_size = Op.CALLDATASIZE if non_zero_data else size attack_block = Op.STATICCALL( address=code_address, args_offset=Op.PUSH0, args_size=arg_size ) tx_target = JumpLoopGenerator(setup=setup, attack_block=attack_block).deploy_contracts( pre=pre, fork=fork ) tx = Transaction( to=tx_target, gas_limit=gas_benchmark_value, data=data, sender=pre.fund_eoa(), ) benchmark_test(tx=tx) @pytest.mark.parametrize( "max_code_size_ratio", [ pytest.param(0, id="0 bytes"), pytest.param(0.25, id="0.25x max code size"), pytest.param(0.50, id="0.50x max code size"), pytest.param(0.75, id="0.75x max code size"), pytest.param(1.00, id="max code size"), ], ) @pytest.mark.parametrize( "fixed_src_dst", [ True, False, ], ) def test_worst_codecopy( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, max_code_size_ratio: float, fixed_src_dst: bool, ) -> None: """Test running a block filled with CODECOPY executions.""" max_code_size = fork.max_code_size() size = int(max_code_size * max_code_size_ratio) setup = Op.PUSH32(size) src_dst = 0 if fixed_src_dst else Op.MOD(Op.GAS, 7) attack_block = Op.CODECOPY(src_dst, src_dst, Op.DUP1) # DUP1 copies size. code = JumpLoopGenerator(setup=setup, attack_block=attack_block).generate_repeated_code( repeated_code=attack_block, setup=setup, fork=fork ) # The code generated above is not guaranteed to be of max_code_size, so # we pad it since # a test parameter targets CODECOPYing a contract with max code size. # Padded bytecode values # are not relevant. code += Op.INVALID * (max_code_size - len(code)) assert len(code) == max_code_size, ( f"Code size {len(code)} is not equal to max code size {max_code_size}." ) tx = Transaction( to=pre.deploy_contract(code=code), sender=pre.fund_eoa(), ) benchmark_test(tx=tx) @pytest.mark.parametrize( "size", [ pytest.param(0, id="0 bytes"), pytest.param(100, id="100 bytes"), pytest.param(10 * 1024, id="10KiB"), pytest.param(1024 * 1024, id="1MiB"), ], ) @pytest.mark.parametrize( "fixed_dst", [ True, False, ], ) def test_worst_returndatacopy( benchmark_test: BenchmarkTestFiller, pre: Alloc, size: int, fixed_dst: bool, ) -> None: """Test running a block filled with RETURNDATACOPY executions.""" # Create the contract that will RETURN the data that will be used for # RETURNDATACOPY. # Random-ish data is injected at different points in memory to avoid # making the content # predictable. If `size` is 0, this helper contract won't be used. code = ( Op.MSTORE8(0, Op.GAS) + Op.MSTORE8(size // 2, Op.GAS) + Op.MSTORE8(size - 1, Op.GAS) + Op.RETURN(0, size) ) helper_contract = pre.deploy_contract(code=code) returndata_gen = Op.STATICCALL(address=helper_contract) if size > 0 else Bytecode() dst = 0 if fixed_dst else Op.MOD(Op.GAS, 7) # We create the contract that will be doing the RETURNDATACOPY multiple # times. returndata_gen = Op.STATICCALL(address=helper_contract) if size > 0 else Bytecode() attack_block = Op.RETURNDATACOPY(dst, Op.PUSH0, Op.RETURNDATASIZE) # The attack loop is constructed as: # ``` # JUMPDEST(#) # RETURNDATACOPY(...) # RETURNDATACOPY(...) # ... # STATICCALL(address=helper_contract) # JUMP(#) # ``` # The goal is that once per (big) loop iteration, the helper contract is # called to # generate fresh returndata to continue calling RETURNDATACOPY. benchmark_test( code_generator=JumpLoopGenerator( setup=returndata_gen, attack_block=attack_block, cleanup=returndata_gen ), ) @pytest.mark.parametrize( "size", [ pytest.param(0, id="0 bytes"), pytest.param(100, id="100 bytes"), pytest.param(10 * 1024, id="10KiB"), pytest.param(1024 * 1024, id="1MiB"), ], ) @pytest.mark.parametrize( "fixed_src_dst", [ True, False, ], ) def test_worst_mcopy( benchmark_test: BenchmarkTestFiller, size: int, fixed_src_dst: bool, ) -> None: """Test running a block filled with MCOPY executions.""" src_dst = 0 if fixed_src_dst else Op.MOD(Op.GAS, 7) attack_block = Op.MCOPY(src_dst, src_dst, size) mem_touch = ( Op.MSTORE8(0, Op.GAS) + Op.MSTORE8(size // 2, Op.GAS) + Op.MSTORE8(size - 1, Op.GAS) if size > 0 else Bytecode() ) benchmark_test( code_generator=JumpLoopGenerator( setup=mem_touch, attack_block=attack_block, cleanup=mem_touch ), ) ================================================ FILE: tests/benchmark/test_worst_opcode.py ================================================ """ Tests benchmark worst-case opcode scenarios. """ import pytest from ethereum_test_benchmark.benchmark_code_generator import JumpLoopGenerator from ethereum_test_tools import ( BenchmarkTestFiller, Bytecode, ) from ethereum_test_vm import Opcode from ethereum_test_vm import Opcodes as Op @pytest.mark.parametrize( "opcode", [ pytest.param(Op.LOG0, id="log0"), pytest.param(Op.LOG1, id="log1"), pytest.param(Op.LOG2, id="log2"), pytest.param(Op.LOG3, id="log3"), pytest.param(Op.LOG4, id="log4"), ], ) @pytest.mark.parametrize( "size,non_zero_data", [ pytest.param(0, False, id="0_bytes_data"), pytest.param(1024 * 1024, False, id="1_MiB_zeros_data"), # 1 MiB pytest.param(1024 * 1024, True, id="1_MiB_non_zero_data"), # 1 MiB ], ) @pytest.mark.parametrize( "zeros_topic", [pytest.param(True, id="zeros_topic"), pytest.param(False, id="non_zero_topic")] ) @pytest.mark.parametrize("fixed_offset", [True, False]) def test_worst_log_opcodes( benchmark_test: BenchmarkTestFiller, opcode: Opcode, zeros_topic: bool, size: int, fixed_offset: bool, non_zero_data: bool, ) -> None: """Test running a block with as many LOG opcodes as possible.""" setup = Bytecode() # For non-zero data, load into memory. if non_zero_data: setup += Op.CODECOPY(dest_offset=0, offset=0, size=Op.CODESIZE) # Push the size value onto the stack and access it using the DUP opcode. setup += Op.PUSH3(size) # For non-zeros topic, push a non-zero value for topic. setup += Op.PUSH0 if zeros_topic else Op.PUSH32(2**256 - 1) topic_count = len(opcode.kwargs or []) - 2 offset = Op.PUSH0 if fixed_offset else Op.MOD(Op.GAS, 7) # Calculate the appropriate DUP opcode based on topic count # 0 topics -> DUP1, 1 topic -> DUP2, N topics -> DUP(N+1) size_op = getattr(Op, f"DUP{topic_count + 2}") attack_block = Op.DUP1 * topic_count + size_op + offset + opcode benchmark_test( code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block), ) ================================================ FILE: tests/benchmark/test_worst_stateful_opcodes.py ================================================ """ Tests that benchmark EVMs for worst-case stateful opcodes. """ import math from enum import auto import pytest from ethereum_test_benchmark.benchmark_code_generator import ExtCallGenerator, JumpLoopGenerator from ethereum_test_forks import Fork from ethereum_test_specs import StateTestFiller from ethereum_test_specs.benchmark import BenchmarkTestFiller from ethereum_test_tools import ( Account, Address, Alloc, Block, Bytecode, Environment, Hash, Transaction, While, compute_create2_address, compute_create_address, ) from ethereum_test_types import TestPhaseManager from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "TODO" REFERENCE_SPEC_VERSION = "TODO" @pytest.mark.parametrize( "opcode", [ Op.BALANCE, ], ) @pytest.mark.parametrize( "absent_accounts", [ True, False, ], ) def test_worst_address_state_cold( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, opcode: Op, absent_accounts: bool, env: Environment, gas_benchmark_value: int, ) -> None: """ Test running a block with as many stateful opcodes accessing cold accounts. """ attack_gas_limit = gas_benchmark_value gas_costs = fork.gas_costs() intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() # For calculation robustness, the calculation below ignores "glue" opcodes # like PUSH and POP. It should be considered a worst-case number of # accounts, and a few of them might not be targeted before the attacking # transaction runs out of gas. num_target_accounts = ( attack_gas_limit - intrinsic_gas_cost_calc() ) // gas_costs.G_COLD_ACCOUNT_ACCESS blocks = [] post = {} # Setup The target addresses are going to be constructed (in the case of # absent=False) and called as addr_offset + i, where i is the index of the # account. This is to avoid collisions with the addresses indirectly # created by the testing framework. addr_offset = int.from_bytes(pre.fund_eoa(amount=0)) if not absent_accounts: factory_code = Op.PUSH4(num_target_accounts) + While( body=Op.POP(Op.CALL(address=Op.ADD(addr_offset, Op.DUP6), value=10)), condition=Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) factory_address = pre.deploy_contract(code=factory_code, balance=10**18) setup_tx = Transaction( to=factory_address, gas_limit=env.gas_limit, sender=pre.fund_eoa(), ) blocks.append(Block(txs=[setup_tx])) for i in range(num_target_accounts): addr = Address(i + addr_offset + 1) post[addr] = Account(balance=10) # Execution op_code = Op.PUSH4(num_target_accounts) + While( body=Op.POP(opcode(Op.ADD(addr_offset, Op.DUP1))), condition=Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) op_address = pre.deploy_contract(code=op_code) op_tx = Transaction( to=op_address, gas_limit=attack_gas_limit, sender=pre.fund_eoa(), ) blocks.append(Block(txs=[op_tx])) benchmark_test( post=post, blocks=blocks, ) @pytest.mark.parametrize( "opcode", [ Op.BALANCE, Op.EXTCODESIZE, Op.EXTCODEHASH, Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, ], ) @pytest.mark.parametrize( "absent_target", [ True, False, ], ) def test_worst_address_state_warm( benchmark_test: BenchmarkTestFiller, pre: Alloc, opcode: Op, absent_target: bool, ) -> None: """ Test running a block with as many stateful opcodes doing warm access for an account. """ # Setup target_addr = Address(100_000) post = {} if not absent_target: code = Op.STOP + Op.JUMPDEST * 100 target_addr = pre.deploy_contract(balance=100, code=code) post[target_addr] = Account(balance=100, code=code) # Execution setup = Op.MSTORE(0, target_addr) attack_block = Op.POP(opcode(address=Op.MLOAD(0))) benchmark_test( post=post, code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block), ) class StorageAction: """Enum for storage actions.""" READ = auto() WRITE_SAME_VALUE = auto() WRITE_NEW_VALUE = auto() class TransactionResult: """Enum for the possible transaction outcomes.""" SUCCESS = auto() OUT_OF_GAS = auto() REVERT = auto() @pytest.mark.parametrize( "storage_action,tx_result", [ pytest.param( StorageAction.READ, TransactionResult.SUCCESS, id="SSLOAD", ), pytest.param( StorageAction.WRITE_SAME_VALUE, TransactionResult.SUCCESS, id="SSTORE same value", ), pytest.param( StorageAction.WRITE_SAME_VALUE, TransactionResult.REVERT, id="SSTORE same value, revert", ), pytest.param( StorageAction.WRITE_SAME_VALUE, TransactionResult.OUT_OF_GAS, id="SSTORE same value, out of gas", ), pytest.param( StorageAction.WRITE_NEW_VALUE, TransactionResult.SUCCESS, id="SSTORE new value", ), pytest.param( StorageAction.WRITE_NEW_VALUE, TransactionResult.REVERT, id="SSTORE new value, revert", ), pytest.param( StorageAction.WRITE_NEW_VALUE, TransactionResult.OUT_OF_GAS, id="SSTORE new value, out of gas", ), ], ) @pytest.mark.parametrize( "absent_slots", [ True, False, ], ) def test_worst_storage_access_cold( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, storage_action: StorageAction, absent_slots: bool, env: Environment, gas_benchmark_value: int, tx_result: TransactionResult, ) -> None: """ Test running a block with as many cold storage slot accesses as possible. """ gas_costs = fork.gas_costs() intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() loop_cost = gas_costs.G_COLD_SLOAD # All accesses are always cold if storage_action == StorageAction.WRITE_NEW_VALUE: if not absent_slots: loop_cost += gas_costs.G_STORAGE_RESET else: loop_cost += gas_costs.G_STORAGE_SET elif storage_action == StorageAction.WRITE_SAME_VALUE: if absent_slots: loop_cost += gas_costs.G_STORAGE_SET else: loop_cost += gas_costs.G_WARM_SLOAD elif storage_action == StorageAction.READ: loop_cost += 0 # Only G_COLD_SLOAD is charged # Contract code execution_code_body = Bytecode() if storage_action == StorageAction.WRITE_SAME_VALUE: # All the storage slots in the contract are initialized to their index. # That is, storage slot `i` is initialized to `i`. execution_code_body = Op.SSTORE(Op.DUP1, Op.DUP1) loop_cost += gas_costs.G_VERY_LOW * 2 elif storage_action == StorageAction.WRITE_NEW_VALUE: # The new value 2^256-1 is guaranteed to be different from the initial # value. execution_code_body = Op.SSTORE(Op.DUP2, Op.NOT(0)) loop_cost += gas_costs.G_VERY_LOW * 3 elif storage_action == StorageAction.READ: execution_code_body = Op.POP(Op.SLOAD(Op.DUP1)) loop_cost += gas_costs.G_VERY_LOW + gas_costs.G_BASE # Add costs jump-logic costs loop_cost += ( gas_costs.G_JUMPDEST # Prefix Jumpdest + gas_costs.G_VERY_LOW * 7 # ISZEROs, PUSHs, SWAPs, SUB, DUP + gas_costs.G_HIGH # JUMPI ) prefix_cost = ( gas_costs.G_VERY_LOW # Target slots push ) suffix_cost = 0 if tx_result == TransactionResult.REVERT: suffix_cost = ( gas_costs.G_VERY_LOW * 2 # Revert PUSHs ) num_target_slots = ( gas_benchmark_value - intrinsic_gas_cost_calc() - prefix_cost - suffix_cost ) // loop_cost if tx_result == TransactionResult.OUT_OF_GAS: # Add an extra slot to make it run out-of-gas num_target_slots += 1 code_prefix = Op.PUSH4(num_target_slots) + Op.JUMPDEST code_loop = execution_code_body + Op.JUMPI( len(code_prefix) - 1, Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO ) execution_code = code_prefix + code_loop if tx_result == TransactionResult.REVERT: execution_code += Op.REVERT(0, 0) else: execution_code += Op.STOP execution_code_address = pre.deploy_contract(code=execution_code) total_gas_used = ( num_target_slots * loop_cost + intrinsic_gas_cost_calc() + prefix_cost + suffix_cost ) # Contract creation slots_init = Bytecode() if not absent_slots: slots_init = Op.PUSH4(num_target_slots) + While( body=Op.SSTORE(Op.DUP1, Op.DUP1), condition=Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) # To create the contract, we apply the slots_init code to initialize the # storage slots (int the case of absent_slots=False) and then copy the # execution code to the contract. creation_code = ( slots_init + Op.EXTCODECOPY( address=execution_code_address, dest_offset=0, offset=0, size=Op.EXTCODESIZE(execution_code_address), ) + Op.RETURN(0, Op.MSIZE) ) sender_addr = pre.fund_eoa() setup_tx = Transaction( to=None, gas_limit=env.gas_limit, data=creation_code, sender=sender_addr, ) blocks = [Block(txs=[setup_tx])] contract_address = compute_create_address(address=sender_addr, nonce=0) op_tx = Transaction( to=contract_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) blocks.append(Block(txs=[op_tx])) benchmark_test( blocks=blocks, expected_benchmark_gas_used=( total_gas_used if tx_result != TransactionResult.OUT_OF_GAS else gas_benchmark_value ), ) @pytest.mark.parametrize( "storage_action", [ pytest.param(StorageAction.READ, id="SLOAD"), pytest.param(StorageAction.WRITE_SAME_VALUE, id="SSTORE same value"), pytest.param(StorageAction.WRITE_NEW_VALUE, id="SSTORE new value"), ], ) def test_worst_storage_access_warm( benchmark_test: BenchmarkTestFiller, pre: Alloc, storage_action: StorageAction, gas_benchmark_value: int, env: Environment, ) -> None: """ Test running a block with as many warm storage slot accesses as possible. """ blocks = [] # The target storage slot for the warm access is storage slot 0. storage_slot_initial_value = 10 # Contract code execution_code_body = Bytecode() if storage_action == StorageAction.WRITE_SAME_VALUE: execution_code_body = Op.SSTORE(0, Op.DUP1) elif storage_action == StorageAction.WRITE_NEW_VALUE: execution_code_body = Op.PUSH1(1) + Op.ADD + Op.SSTORE(0, Op.DUP1) elif storage_action == StorageAction.READ: execution_code_body = Op.POP(Op.SLOAD(0)) execution_code = Op.PUSH1(storage_slot_initial_value) + While( body=execution_code_body, ) execution_code_address = pre.deploy_contract(code=execution_code) creation_code = ( Op.SSTORE(0, storage_slot_initial_value) + Op.EXTCODECOPY( address=execution_code_address, dest_offset=0, offset=0, size=Op.EXTCODESIZE(execution_code_address), ) + Op.RETURN(0, Op.MSIZE) ) with TestPhaseManager.setup(): sender_addr = pre.fund_eoa() setup_tx = Transaction( to=None, gas_limit=env.gas_limit, data=creation_code, sender=sender_addr, ) blocks.append(Block(txs=[setup_tx])) contract_address = compute_create_address(address=sender_addr, nonce=0) with TestPhaseManager.execution(): op_tx = Transaction( to=contract_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) blocks.append(Block(txs=[op_tx])) benchmark_test(blocks=blocks) def test_worst_blockhash( benchmark_test: BenchmarkTestFiller, pre: Alloc, fork: Fork, gas_benchmark_value: int, tx_gas_limit_cap: int, ) -> None: """ Test running a block with as many blockhash accessing oldest allowed block as possible. """ # Create 256 dummy blocks to fill the blockhash window. blocks = [Block()] * 256 benchmark_test( setup_blocks=blocks, code_generator=ExtCallGenerator(attack_block=Op.BLOCKHASH(1)), expected_benchmark_gas_used=gas_benchmark_value, ) @pytest.mark.parametrize("contract_balance", [0, 1]) def test_worst_selfbalance( benchmark_test: BenchmarkTestFiller, contract_balance: int, ) -> None: """Test running a block with as many SELFBALANCE opcodes as possible.""" benchmark_test( code_generator=ExtCallGenerator( attack_block=Op.SELFBALANCE, contract_balance=contract_balance, ), ) @pytest.mark.parametrize( "copied_size", [ pytest.param(512, id="512"), pytest.param(1024, id="1KiB"), pytest.param(5 * 1024, id="5KiB"), ], ) def test_worst_extcodecopy_warm( benchmark_test: BenchmarkTestFiller, pre: Alloc, copied_size: int, gas_benchmark_value: int, ) -> None: """Test running a block with as many wamr EXTCODECOPY work as possible.""" copied_contract_address = pre.deploy_contract( code=Op.JUMPDEST * copied_size, ) execution_code = ( Op.PUSH10(copied_size) + Op.PUSH20(copied_contract_address) + While( body=Op.EXTCODECOPY(Op.DUP4, 0, 0, Op.DUP2), ) ) execution_code_address = pre.deploy_contract(code=execution_code) tx = Transaction( to=execution_code_address, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) benchmark_test(tx=tx) @pytest.mark.parametrize("value_bearing", [True, False]) def test_worst_selfdestruct_existing( benchmark_test: BenchmarkTestFiller, fork: Fork, pre: Alloc, value_bearing: bool, env: Environment, gas_benchmark_value: int, ) -> None: """ Test running a block with as many SELFDESTRUCTs as possible for existing contracts. """ attack_gas_limit = gas_benchmark_value fee_recipient = pre.fund_eoa(amount=1) # Template code that will be used to deploy a large number of contracts. selfdestructable_contract_addr = pre.deploy_contract(code=Op.SELFDESTRUCT(Op.COINBASE)) initcode = Op.EXTCODECOPY( address=selfdestructable_contract_addr, dest_offset=0, offset=0, size=Op.EXTCODESIZE(selfdestructable_contract_addr), ) + Op.RETURN(0, Op.EXTCODESIZE(selfdestructable_contract_addr)) initcode_address = pre.deploy_contract(code=initcode) # Calculate the number of contracts that can be deployed with the available # gas. gas_costs = fork.gas_costs() intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() loop_cost = ( gas_costs.G_KECCAK_256 # KECCAK static cost + math.ceil(85 / 32) * gas_costs.G_KECCAK_256_WORD # KECCAK dynamic # cost for CREATE2 + gas_costs.G_VERY_LOW * 3 # ~MSTOREs+ADDs + gas_costs.G_COLD_ACCOUNT_ACCESS # CALL to self-destructing contract + gas_costs.G_SELF_DESTRUCT + 63 # ~Gluing opcodes ) final_storage_gas = ( gas_costs.G_STORAGE_RESET + gas_costs.G_COLD_SLOAD + (gas_costs.G_VERY_LOW * 2) ) memory_expansion_cost = fork().memory_expansion_gas_calculator()(new_bytes=96) base_costs = ( intrinsic_gas_cost_calc() + (gas_costs.G_VERY_LOW * 12) # 8 PUSHs + 4 MSTOREs + final_storage_gas + memory_expansion_cost ) num_contracts = (attack_gas_limit - base_costs) // loop_cost expected_benchmark_gas_used = num_contracts * loop_cost + base_costs # Create a factory that deployes a new SELFDESTRUCT contract instance pre- # funded depending on the value_bearing parameter. We use CREATE2 so the # caller contract can easily reproduce the addresses in a loop for CALLs. factory_code = ( Op.EXTCODECOPY( address=initcode_address, dest_offset=0, offset=0, size=Op.EXTCODESIZE(initcode_address), ) + Op.MSTORE( 0, Op.CREATE2( value=1 if value_bearing else 0, offset=0, size=Op.EXTCODESIZE(initcode_address), salt=Op.SLOAD(0), ), ) + Op.SSTORE(0, Op.ADD(Op.SLOAD(0), 1)) + Op.RETURN(0, 32) ) required_balance = num_contracts if value_bearing else 0 # 1 wei per # contract factory_address = pre.deploy_contract(code=factory_code, balance=required_balance) factory_caller_code = Op.CALLDATALOAD(0) + While( body=Op.POP(Op.CALL(address=factory_address)), condition=Op.PUSH1(1) + Op.SWAP1 + Op.SUB + Op.DUP1 + Op.ISZERO + Op.ISZERO, ) factory_caller_address = pre.deploy_contract(code=factory_caller_code) contracts_deployment_tx = Transaction( to=factory_caller_address, gas_limit=env.gas_limit, data=Hash(num_contracts), sender=pre.fund_eoa(), ) code = ( # Setup memory for later CREATE2 address generation loop. # 0xFF+[Address(20bytes)]+[seed(32bytes)]+[initcode keccak(32bytes)] Op.MSTORE(0, factory_address) + Op.MSTORE8(32 - 20 - 1, 0xFF) + Op.MSTORE(32, 0) + Op.MSTORE(64, initcode.keccak256()) # Main loop + While( body=Op.POP(Op.CALL(address=Op.SHA3(32 - 20 - 1, 85))) + Op.MSTORE(32, Op.ADD(Op.MLOAD(32), 1)), # Only loop if we have enough gas to cover another iteration plus # the final storage gas. condition=Op.GT(Op.GAS, final_storage_gas + loop_cost), ) + Op.SSTORE(0, 42) # Done for successful tx execution assertion below. ) assert len(code) <= fork.max_code_size() # The 0 storage slot is initialize to avoid creation costs in SSTORE above. code_addr = pre.deploy_contract(code=code, storage={0: 1}) opcode_tx = Transaction( to=code_addr, gas_limit=attack_gas_limit, sender=pre.fund_eoa(), ) post = { factory_address: Account(storage={0: num_contracts}), code_addr: Account(storage={0: 42}), # Check for successful execution. } deployed_contract_addresses = [] for i in range(num_contracts): deployed_contract_address = compute_create2_address( address=factory_address, salt=i, initcode=initcode, ) post[deployed_contract_address] = Account(nonce=1) deployed_contract_addresses.append(deployed_contract_address) benchmark_test( post=post, blocks=[ Block(txs=[contracts_deployment_tx]), Block(txs=[opcode_tx], fee_recipient=fee_recipient), ], expected_benchmark_gas_used=expected_benchmark_gas_used, ) @pytest.mark.parametrize("value_bearing", [True, False]) def test_worst_selfdestruct_created( state_test: StateTestFiller, pre: Alloc, value_bearing: bool, fork: Fork, env: Environment, gas_benchmark_value: int, ) -> None: """ Test running a block with as many SELFDESTRUCTs as possible for deployed contracts in the same transaction. """ fee_recipient = pre.fund_eoa(amount=1) env.fee_recipient = fee_recipient # SELFDESTRUCT(COINBASE) contract deployment initcode = ( Op.MSTORE8(0, Op.COINBASE.int()) + Op.MSTORE8(1, Op.SELFDESTRUCT.int()) + Op.RETURN(0, 2) ) gas_costs = fork.gas_costs() memory_expansion_calc = fork().memory_expansion_gas_calculator() intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() initcode_costs = ( gas_costs.G_VERY_LOW * 8 # MSTOREs, PUSHs + memory_expansion_calc(new_bytes=2) # return into memory ) create_costs = ( initcode_costs + gas_costs.G_CREATE + gas_costs.G_VERY_LOW * 3 # Create Parameter PUSHs + gas_costs.G_CODE_DEPOSIT_BYTE * 2 + gas_costs.G_INITCODE_WORD ) call_costs = ( gas_costs.G_WARM_ACCOUNT_ACCESS + gas_costs.G_BASE # COINBASE + gas_costs.G_SELF_DESTRUCT + gas_costs.G_VERY_LOW * 5 # CALL Parameter PUSHs + gas_costs.G_BASE # Parameter GAS ) extra_costs = ( gas_costs.G_BASE # POP + gas_costs.G_VERY_LOW * 6 # PUSHs, ADD, DUP, GT + gas_costs.G_HIGH # JUMPI + gas_costs.G_JUMPDEST ) loop_cost = create_costs + call_costs + extra_costs prefix_cost = gas_costs.G_VERY_LOW * 3 + gas_costs.G_BASE + memory_expansion_calc(new_bytes=32) suffix_cost = gas_costs.G_COLD_SLOAD + gas_costs.G_STORAGE_RESET + (gas_costs.G_VERY_LOW * 2) base_costs = prefix_cost + suffix_cost + intrinsic_gas_cost_calc() iterations = (gas_benchmark_value - base_costs) // loop_cost code_prefix = Op.MSTORE(0, initcode.hex()) + Op.PUSH0 + Op.JUMPDEST code_suffix = ( Op.SSTORE(0, 42) # Done for successful tx execution assertion below. + Op.STOP ) loop_body = ( Op.POP( Op.CALL( address=Op.CREATE( value=1 if value_bearing else 0, offset=32 - len(initcode), size=len(initcode), ) ) ) + Op.PUSH1[1] + Op.ADD + Op.JUMPI(len(code_prefix) - 1, Op.GT(iterations, Op.DUP1)) ) code = code_prefix + loop_body + code_suffix # The 0 storage slot is initialize to avoid creation costs in SSTORE above. code_addr = pre.deploy_contract( code=code, balance=iterations if value_bearing else 0, storage={0: 1}, ) code_tx = Transaction( to=code_addr, gas_limit=gas_benchmark_value, sender=pre.fund_eoa(), ) post = {code_addr: Account(storage={0: 42})} # Check for successful # execution. state_test( pre=pre, post=post, tx=code_tx, expected_benchmark_gas_used=iterations * loop_cost + base_costs, ) @pytest.mark.parametrize("value_bearing", [True, False]) def test_worst_selfdestruct_initcode( state_test: StateTestFiller, pre: Alloc, value_bearing: bool, fork: Fork, env: Environment, gas_benchmark_value: int, ) -> None: """ Test running a block with as many SELFDESTRUCTs as possible executed in initcode. """ fee_recipient = pre.fund_eoa(amount=1) env.fee_recipient = fee_recipient gas_costs = fork.gas_costs() memory_expansion_calc = fork().memory_expansion_gas_calculator() intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() initcode_costs = ( gas_costs.G_BASE # COINBASE + gas_costs.G_SELF_DESTRUCT ) create_costs = ( initcode_costs + gas_costs.G_CREATE + gas_costs.G_VERY_LOW * 3 # Create Parameter PUSHs + gas_costs.G_INITCODE_WORD ) extra_costs = ( gas_costs.G_BASE # POP + gas_costs.G_VERY_LOW * 6 # PUSHs, ADD, DUP, GT + gas_costs.G_HIGH # JUMPI + gas_costs.G_JUMPDEST ) loop_cost = create_costs + extra_costs prefix_cost = gas_costs.G_VERY_LOW * 3 + gas_costs.G_BASE + memory_expansion_calc(new_bytes=32) suffix_cost = gas_costs.G_COLD_SLOAD + gas_costs.G_STORAGE_RESET + (gas_costs.G_VERY_LOW * 2) base_costs = prefix_cost + suffix_cost + intrinsic_gas_cost_calc() iterations = (gas_benchmark_value - base_costs) // loop_cost initcode = Op.SELFDESTRUCT(Op.COINBASE) code_prefix = Op.MSTORE(0, initcode.hex()) + Op.PUSH0 + Op.JUMPDEST code_suffix = ( Op.SSTORE(0, 42) # Done for successful tx execution assertion below. + Op.STOP ) loop_body = ( Op.POP( Op.CREATE( value=1 if value_bearing else 0, offset=32 - len(initcode), size=len(initcode), ) ) + Op.PUSH1[1] + Op.ADD + Op.JUMPI(len(code_prefix) - 1, Op.GT(iterations, Op.DUP1)) ) code = code_prefix + loop_body + code_suffix # The 0 storage slot is initialize to avoid creation costs in SSTORE above. code_addr = pre.deploy_contract(code=code, balance=100_000, storage={0: 1}) code_tx = Transaction( to=code_addr, gas_limit=gas_benchmark_value, gas_price=10, sender=pre.fund_eoa(), ) post = {code_addr: Account(storage={0: 42})} # Check for successful # execution. state_test( pre=pre, post=post, tx=code_tx, expected_benchmark_gas_used=iterations * loop_cost + base_costs, ) ================================================ FILE: tests/berlin/__init__.py ================================================ """Test cases for EVM functionality introduced in Berlin.""" ================================================ FILE: tests/berlin/eip2929_gas_cost_increases/__init__.py ================================================ """ Tests for [EIP-2929: Gas cost increases for state access opcodes](https://eips.ethereum.org/EIPS/eip-2929). """ ================================================ FILE: tests/berlin/eip2929_gas_cost_increases/test_call.py ================================================ """Test the CALL opcode after EIP-2929.""" import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, CodeGasMeasure, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-2929.md" REFERENCE_SPEC_VERSION = "0e11417265a623adb680c527b15d0cb6701b870b" @pytest.mark.valid_from("Berlin") def test_call_insufficient_balance( state_test: StateTestFiller, pre: Alloc, env: Environment, fork: Fork ) -> None: """ Test a regular CALL to see if it warms the destination with insufficient balance. """ gas_costs = fork.gas_costs() destination = pre.fund_eoa(1) contract_address = pre.deploy_contract( # Perform the aborted external calls Op.SSTORE( 0, Op.CALL( gas=Op.GAS, address=destination, value=1, args_offset=0, args_size=0, ret_offset=0, ret_size=0, ), ) # Measure the gas cost for BALANCE operation + CodeGasMeasure( code=Op.BALANCE(destination), overhead_cost=gas_costs.G_VERY_LOW, # PUSH20 costs 3 gas extra_stack_items=1, # BALANCE puts balance on stack sstore_key=1, ), balance=0, ) tx = Transaction( to=contract_address, gas_limit=100_000, sender=pre.fund_eoa(), ) post = { destination: Account( balance=1, ), contract_address: Account( storage={ 0: 0, # The CALL is aborted 1: gas_costs.G_WARM_ACCOUNT_ACCESS, # Warm access cost }, ), } state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/berlin/eip2929_gas_cost_increases/test_precompile_warming.py ================================================ """ Tests EIP-2929 precompile warming behavior. Tests precompile warming behavior across fork transitions from [EIP-2929: Gas cost increases for state access opcodes] (https://eips.ethereum.org/EIPS/eip-2929). """ from typing import Iterator, Tuple import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import ( Fork, get_transition_fork_predecessor, get_transition_fork_successor, ) from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-2929.md" REFERENCE_SPEC_VERSION = "0e11417265a623adb680c527b15d0cb6701b870b" def precompile_addresses_in_predecessor_successor( fork: Fork, ) -> Iterator[Tuple[Address, bool, bool]]: """ Yield the addresses of precompiled contracts and whether they existed in the parent fork. Args: fork (Fork): The transition fork instance containing precompiled contract information. Yields: Iterator[Tuple[str, bool]]: A tuple containing the address in hexadecimal format and a boolean indicating whether the address has existed in the predecessor. """ precompile_range = range(0x01, 0x100) predecessor_precompiles = set(get_transition_fork_predecessor(fork).precompiles()) successor_precompiles = set(get_transition_fork_successor(fork).precompiles()) all_precompiles = successor_precompiles | predecessor_precompiles precompiles_in_range = { addr for addr in all_precompiles if int.from_bytes(addr, byteorder="big") in precompile_range } highest_in_range = max(int.from_bytes(addr, byteorder="big") for addr in precompiles_in_range) highest_overall = max(int.from_bytes(addr, byteorder="big") for addr in all_precompiles) extra_range = 32 extra_precompiles = { Address(i) for i in range(highest_in_range + 1, highest_in_range + extra_range) } extra_precompiles_outside_range = {Address(highest_overall + 1)} all_precompiles = all_precompiles | extra_precompiles | extra_precompiles_outside_range for address in sorted(all_precompiles): yield address, address in successor_precompiles, address in predecessor_precompiles @pytest.mark.valid_at_transition_to("Paris", subsequent_forks=True) @pytest.mark.parametrize_by_fork( "address,precompile_in_successor,precompile_in_predecessor", precompile_addresses_in_predecessor_successor, ) @EIPChecklist.Precompile.Test.ForkTransition.Before.Cold(eip=[7951]) @EIPChecklist.Precompile.Test.ForkTransition.After.Warm(eip=[7951]) @pytest.mark.slow() def test_precompile_warming( blockchain_test: BlockchainTestFiller, fork: Fork, address: Address, precompile_in_successor: bool, precompile_in_predecessor: bool, pre: Alloc, ) -> None: """ Call BALANCE of a precompile addresses before and after a fork. According to EIP-2929, when a transaction begins, accessed_addresses is initialized to include: - tx.sender, tx.to - and the set of all precompiles This test verifies that: 1. Precompiles that exist in the predecessor fork are always "warm" (lower gas cost). 2. New precompiles added in a fork are "cold" before the fork and become "warm" after. """ sender = pre.fund_eoa() call_cost_slot = 0 code = ( Op.GAS + Op.BALANCE(address) + Op.POP + Op.SSTORE(call_cost_slot, Op.SUB(Op.SWAP1, Op.GAS)) + Op.STOP ) before = pre.deploy_contract(code, storage={call_cost_slot: 0xDEADBEEF}) after = pre.deploy_contract(code, storage={call_cost_slot: 0xDEADBEEF}) # Block before fork blocks = [ Block( timestamp=10_000, txs=[ Transaction( sender=sender, to=before, gas_limit=1_000_000, ) ], ) ] # Block after fork blocks += [ Block( timestamp=20_000, txs=[ Transaction( sender=sender, to=after, gas_limit=1_000_000, ) ], ) ] predecessor = get_transition_fork_predecessor(fork) successor = get_transition_fork_successor(fork) def get_expected_gas(precompile_present: bool, fork: Fork) -> int: gas_costs = fork.gas_costs() warm_access_cost = gas_costs.G_WARM_ACCOUNT_ACCESS cold_access_cost = gas_costs.G_COLD_ACCOUNT_ACCESS extra_cost = gas_costs.G_BASE * 2 + gas_costs.G_VERY_LOW if precompile_present: return warm_access_cost + extra_cost else: return cold_access_cost + extra_cost expected_gas_before = get_expected_gas(precompile_in_predecessor, predecessor) expected_gas_after = get_expected_gas(precompile_in_successor, successor) post = { before: Account(storage={call_cost_slot: expected_gas_before}), after: Account(storage={call_cost_slot: expected_gas_after}), } blockchain_test( pre=pre, post=post, blocks=blocks, ) ================================================ FILE: tests/berlin/eip2930_access_list/__init__.py ================================================ """ Tests for [EIP-2930: Optional access lists](https://eips.ethereum.org/EIPS/eip-2930). """ ================================================ FILE: tests/berlin/eip2930_access_list/spec.py ================================================ """Defines EIP-2930 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_2930 = ReferenceSpec("EIPS/eip-2930.md", "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-2930 specifications as defined at https://eips.ethereum.org/EIPS/eip-2930#specification. """ ACCESS_LIST_ADDRESS_COST = 2400 ACCESS_LIST_STORAGE_KEY_COST = 1900 """From EIP-2028""" TX_BASE_INTRINSIC_GAS = 21_000 TX_DATA_ZERO_BYTE_GAS = 4 TX_DATA_NON_ZERO_BYTE_GAS = 16 ================================================ FILE: tests/berlin/eip2930_access_list/test_acl.py ================================================ """Test ACL Transaction Source Code Examples.""" from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Account, Address, Alloc, CodeGasMeasure, Environment, Hash, StateTestFiller, Transaction, TransactionException, ) from ethereum_test_tools import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-2930.md" REFERENCE_SPEC_VERSION = "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534" pytestmark = pytest.mark.valid_from("Berlin") @pytest.mark.parametrize( "account_warm,storage_key_warm", [ (True, True), (True, False), # (False, True), Not possible (False, False), ], ) def test_account_storage_warm_cold_state( state_test: StateTestFiller, pre: Alloc, fork: Fork, account_warm: bool, storage_key_warm: bool, ) -> None: """Test type 1 transaction.""" env = Environment() gas_costs = fork.gas_costs() storage_reader_contract = pre.deploy_contract(Op.SLOAD(1) + Op.STOP) overhead_cost = ( gas_costs.G_VERY_LOW * (Op.CALL.popped_stack_items - 1) # Call stack items + gas_costs.G_BASE # Call gas + gas_costs.G_VERY_LOW # SLOAD Push ) contract_address = pre.deploy_contract( CodeGasMeasure( code=Op.CALL(address=storage_reader_contract), overhead_cost=overhead_cost, extra_stack_items=1, sstore_key=0, ) ) expected_gas_cost = 0 access_list_address = Address(0) access_list_storage_key = Hash(0) if account_warm: expected_gas_cost += gas_costs.G_WARM_ACCOUNT_ACCESS access_list_address = storage_reader_contract else: expected_gas_cost += gas_costs.G_COLD_ACCOUNT_ACCESS if storage_key_warm: expected_gas_cost += gas_costs.G_WARM_SLOAD access_list_storage_key = Hash(1) else: expected_gas_cost += gas_costs.G_COLD_SLOAD access_lists: List[AccessList] = [ AccessList( address=access_list_address, storage_keys=[access_list_storage_key], ), ] sender = pre.fund_eoa() contract_creation = False tx_data = b"" intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() tx_gas_limit = ( intrinsic_gas_calculator( calldata=tx_data, contract_creation=contract_creation, access_list=access_lists, ) + 100_000 ) tx = Transaction( ty=1, data=tx_data, to=contract_address, gas_limit=tx_gas_limit, access_list=access_lists, sender=sender, ) post = { contract_address: Account( nonce=1, storage={0: expected_gas_cost}, ), } state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "access_lists", [ pytest.param( [], id="empty_access_list", ), pytest.param( [AccessList(address=Address(0), storage_keys=[])], id="single_address_multiple_no_storage_keys", ), pytest.param( [AccessList(address=Address(0), storage_keys=[Hash(0)])], id="single_address_single_storage_key", ), pytest.param( [AccessList(address=Address(0), storage_keys=[Hash(0), Hash(1)])], id="single_address_multiple_storage_keys", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[Hash(0), Hash(1)]), AccessList(address=Address(1), storage_keys=[]), ], id="multiple_addresses_second_address_no_storage_keys", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[Hash(0), Hash(1)]), AccessList(address=Address(1), storage_keys=[Hash(0)]), ], id="multiple_addresses_second_address_single_storage_key", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[Hash(0), Hash(1)]), AccessList(address=Address(1), storage_keys=[Hash(0), Hash(1)]), ], id="multiple_addresses_second_address_multiple_storage_keys", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[]), AccessList(address=Address(1), storage_keys=[Hash(0), Hash(1)]), ], id="multiple_addresses_first_address_no_storage_keys", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[Hash(0)]), AccessList(address=Address(1), storage_keys=[Hash(0), Hash(1)]), ], id="multiple_addresses_first_address_single_storage_key", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[]), AccessList(address=Address(1), storage_keys=[]), ], id="repeated_address_no_storage_keys", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[Hash(0)]), AccessList(address=Address(0), storage_keys=[Hash(1)]), ], id="repeated_address_single_storage_key", ), pytest.param( [ AccessList(address=Address(0), storage_keys=[Hash(0), Hash(1)]), AccessList(address=Address(0), storage_keys=[Hash(0), Hash(1)]), ], id="repeated_address_multiple_storage_keys", ), ], ) @pytest.mark.parametrize( "enough_gas", [ pytest.param(True, id="enough_gas"), pytest.param(False, id="not_enough_gas", marks=pytest.mark.exception_test), ], ) def test_transaction_intrinsic_gas_cost( state_test: StateTestFiller, pre: Alloc, fork: Fork, access_lists: List[AccessList], enough_gas: bool, ) -> None: """Test type 1 transaction.""" env = Environment() contract_start_balance = 3 contract_address = pre.deploy_contract( Op.STOP, balance=contract_start_balance, ) sender = pre.fund_eoa() tx_value = 1 pre.fund_address(sender, tx_value) contract_creation = False tx_data = b"" intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() tx_exception = None tx_gas_limit = intrinsic_gas_calculator( calldata=tx_data, contract_creation=contract_creation, access_list=access_lists, ) if not enough_gas: tx_gas_limit -= 1 tx_exception = TransactionException.INTRINSIC_GAS_TOO_LOW tx = Transaction( ty=1, data=tx_data, to=contract_address, value=tx_value, gas_limit=tx_gas_limit, access_list=access_lists, sender=sender, error=tx_exception, ) post = { contract_address: Account( balance=contract_start_balance + 1 if enough_gas else contract_start_balance, nonce=1, ), sender: Account( nonce=1 if enough_gas else 0, ), } state_test(env=env, pre=pre, post=post, tx=tx) def test_repeated_address_acl( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Tests that slots are warmed correctly in an access list that has the same address repeated more than once, each time with different slots. Difference with other ACL tests is that we actually try to access both slots at runtime. We also measure the gas cost of each access in order to make debugging easier. """ sender = pre.fund_eoa() gsc = fork.gas_costs() sload0_measure = CodeGasMeasure( code=Op.SLOAD(0), overhead_cost=gsc.G_VERY_LOW * len(Op.SLOAD.kwargs), # Cost of pushing SLOAD args extra_stack_items=1, # SLOAD pushes 1 item to the stack sstore_key=0, stop=False, # Because it's the first CodeGasMeasure ) sload1_measure = CodeGasMeasure( code=Op.SLOAD(1), overhead_cost=gsc.G_VERY_LOW * len(Op.SLOAD.kwargs), # Cost of pushing SLOAD args extra_stack_items=1, # SLOAD pushes 1 item to the stack sstore_key=1, ) contract = pre.deploy_contract(sload0_measure + sload1_measure) tx = Transaction( gas_limit=500_000, to=contract, value=0, sender=sender, access_list=[ AccessList( address=contract, storage_keys=[0], ), AccessList( address=contract, storage_keys=[1], ), ], ) sload_cost = gsc.G_WARM_ACCOUNT_ACCESS state_test( env=Environment(), pre=pre, tx=tx, post={ contract: Account( storage={0: sload_cost, 1: sload_cost}, ) }, ) ================================================ FILE: tests/berlin/eip2930_access_list/test_tx_intrinsic_gas.py ================================================ """ Tests [EIP-2930: Access list transaction](https://eips.ethereum.org/EIPS/eip-2930). Original test by Ori: https://github.com/ethereum/tests/blob/v15.0/src/GeneralStateTestsFiller/stEIP1559/intrinsicGen.js. """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Address, Alloc, Bytes, Environment, StateTestFiller, Transaction, TransactionException, ) from ethereum_test_tools import Opcodes as Op from .spec import ref_spec_2930 REFERENCE_SPEC_GIT_PATH = ref_spec_2930.git_path REFERENCE_SPEC_VERSION = ref_spec_2930.version pytestmark = pytest.mark.valid_from("Berlin") tx_intrinsic_gas_data_vectors = [ pytest.param(Bytes(b""), id="data_empty"), pytest.param(Bytes(b"0x00"), id="data_1_zero_byte"), pytest.param(Bytes(b"0x00000000"), id="data_4_zero_byte"), pytest.param(Bytes(b"0xFF"), id="data_1_non_zero_byte"), pytest.param(Bytes(b"0x00FF"), id="data_1_zero_byte_1_non_zero_byte"), pytest.param(Bytes(b"0xFE00"), id="data_1_zero_byte_1_non_zero_byte_reversed"), pytest.param(Bytes(b"0x0102030405060708090A0B0C0D0E0F10"), id="data_set_1"), pytest.param( Bytes(b"0x00010203040506000708090A0B0C0D0E0F10111200131415161718191a1b1c1d1e1f"), id="data_set_2", ), pytest.param( Bytes(b"0x0102030405060708090A0B0C0D0E0F101112131415161718191a1b1c1d1e1f20"), id="data_set_3", ), pytest.param( Bytes(b"0x01020304050607080910111213141516171819202122232425262728293031"), id="data_set_31_bytes", ), pytest.param( Bytes(b"0x000102030405060708090A0B0C0D0E0F101112131415161718191a1b1c1d1e1f"), id="data_set_32_bytes", ), pytest.param( Bytes(b"0x010203040506070809101112131415161718192021222324252627282930313233"), id="data_set_33_bytes", ), pytest.param( Bytes(b"0x000000000000000000000000000000000000000000000000000000000000000000"), id="data_set_33_empty_bytes", ), pytest.param( Bytes( b"0x000000000000000000000000000000000000000000000000000000000000000000010203040506070809101112131415161718192021222324252627282930313233" ), id="data_set_66_bytes_half_zeros", ), ] tx_intrinsic_gas_access_list_vectors = [ pytest.param([], id="access_list_empty"), pytest.param( [AccessList(address=1, storage_keys=[])], id="access_list_1_address_empty_keys", ), pytest.param( [AccessList(address=1, storage_keys=[0x60A7])], id="access_list_1_address_1_keys", ), pytest.param( [AccessList(address=1, storage_keys=[0x60A7, 0x60A8])], id="access_list_1_address_2_keys", ), pytest.param( [ AccessList(address=1, storage_keys=[]), AccessList(address=2, storage_keys=[]), ], id="access_list_2_address_empty_keys", ), pytest.param( [ AccessList(address=1, storage_keys=[]), AccessList(address=2, storage_keys=[0x60A7]), ], id="access_list_2_address_1_keys", ), pytest.param( [ AccessList(address=1, storage_keys=[0x60A7]), AccessList(address=2, storage_keys=[0x60A8]), ], id="access_list_2_address_2_keys", ), pytest.param( [ AccessList(address=1, storage_keys=[0x60A7, 0x60A8]), AccessList(address=2, storage_keys=[]), ], id="access_list_2_address_2_keys_inversion", ), pytest.param( [ AccessList(address=1, storage_keys=[0xCE11]), AccessList(address=2, storage_keys=[0x60A7]), *[ AccessList( address=Address(i), storage_keys=[0x600D, 0x0BAD, 0x60A7, 0xBEEF], ) for i in range(3, 13) # 3 to 12 inclusive (10 entries) ], ], id="access_list_12_address_42_keys", ), ] @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stEIP1559/intrinsicGen.js", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stEIP1559/intrinsicFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1535"], ) @pytest.mark.parametrize("data", tx_intrinsic_gas_data_vectors) @pytest.mark.parametrize("access_list", tx_intrinsic_gas_access_list_vectors) @pytest.mark.parametrize( "below_intrinsic", [ pytest.param(False), pytest.param(True, marks=pytest.mark.exception_test), ], ) @pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type in [1, 2]) @pytest.mark.slow() def test_tx_intrinsic_gas( state_test: StateTestFiller, tx_type: int, pre: Alloc, fork: Fork, data: Bytes, access_list: List[AccessList], below_intrinsic: bool, ) -> None: """Transaction intrinsic gas calculation on EIP2930.""" intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_cost_calculator(calldata=data, access_list=access_list) exception: List[TransactionException] | TransactionException | None = None if below_intrinsic: data_floor_gas_cost_calculator = fork.transaction_data_floor_cost_calculator() data_floor_gas_cost = data_floor_gas_cost_calculator(data=data) if data_floor_gas_cost > intrinsic_gas_cost: exception = TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST elif data_floor_gas_cost == intrinsic_gas_cost: # Depending on the implementation, client might raise either # exception. exception = [ TransactionException.INTRINSIC_GAS_TOO_LOW, TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST, ] else: exception = TransactionException.INTRINSIC_GAS_TOO_LOW tx = Transaction( ty=tx_type, sender=pre.fund_eoa(), to=pre.deploy_contract(code=Op.SSTORE(0, Op.ADD(1, 1))), data=data, access_list=access_list, gas_limit=intrinsic_gas_cost + (-1 if below_intrinsic else 0), error=exception, protected=True, ) state_test(env=Environment(), pre=pre, post={}, tx=tx) ================================================ FILE: tests/byzantium/__init__.py ================================================ """Test cases for EVM functionality introduced in Byzantium.""" ================================================ FILE: tests/byzantium/eip198_modexp_precompile/__init__.py ================================================ """Test for precompiles introduced in Byzantium.""" ================================================ FILE: tests/byzantium/eip198_modexp_precompile/helpers.py ================================================ """ Helper functions for the EIP-198 ModExp precompile tests. """ from typing import Tuple from pydantic import Field from ethereum_test_tools import Bytes, TestParameterGroup class ModExpInput(TestParameterGroup): """ Helper class that defines the MODEXP precompile inputs and creates the call data from them. Attributes: base (str): The base value for the MODEXP precompile. exponent (str): The exponent value for the MODEXP precompile. modulus (str): The modulus value for the MODEXP precompile. extra_data (str): Defines extra padded data to be added at the end of the calldata to the precompile. Defaults to an empty string. """ base: Bytes exponent: Bytes modulus: Bytes extra_data: Bytes = Field(default_factory=Bytes) raw_input: Bytes | None = None declared_base_length: int | None = None declared_exponent_length: int | None = None declared_modulus_length: int | None = None @property def length_base(self) -> Bytes: """Return the length of the base.""" length = ( self.declared_base_length if self.declared_base_length is not None else len(self.base) ) return Bytes(length.to_bytes(32, "big")) @property def length_exponent(self) -> Bytes: """Return the length of the exponent.""" length = ( self.declared_exponent_length if self.declared_exponent_length is not None else len(self.exponent) ) return Bytes(length.to_bytes(32, "big")) @property def length_modulus(self) -> Bytes: """Return the length of the modulus.""" length = ( self.declared_modulus_length if self.declared_modulus_length is not None else len(self.modulus) ) return Bytes(length.to_bytes(32, "big")) def __bytes__(self) -> bytes: """Generate input for the MODEXP precompile.""" if self.raw_input is not None: return self.raw_input return ( self.length_base + self.length_exponent + self.length_modulus + self.base + self.exponent + self.modulus + self.extra_data ) @classmethod def from_bytes(cls, input_data: Bytes | str) -> "ModExpInput": """ Create a ModExpInput from a bytes object. Assumes correct formatting of the input data. """ if isinstance(input_data, str): input_data = Bytes(input_data) assert not isinstance(input_data, str) padded_input_data = input_data if len(padded_input_data) < 96: padded_input_data = Bytes(padded_input_data.ljust(96, b"\0")) base_length = int.from_bytes(padded_input_data[0:32], byteorder="big") exponent_length = int.from_bytes(padded_input_data[32:64], byteorder="big") modulus_length = int.from_bytes(padded_input_data[64:96], byteorder="big") total_required_length = 96 + base_length + exponent_length + modulus_length if len(padded_input_data) < total_required_length: padded_input_data = Bytes(padded_input_data.ljust(total_required_length, b"\0")) current_index = 96 base = padded_input_data[current_index : current_index + base_length] current_index += base_length exponent = padded_input_data[current_index : current_index + exponent_length] current_index += exponent_length modulus = padded_input_data[current_index : current_index + modulus_length] return cls(base=base, exponent=exponent, modulus=modulus, raw_input=input_data) def get_declared_lengths(self) -> Tuple[int, int, int]: """Extract declared lengths from the raw input bytes.""" raw = self.raw_input if self.raw_input is not None else bytes(self) if len(raw) < 96: raw = raw.ljust(96, b"\0") base_length = int.from_bytes(raw[0:32], byteorder="big") exponent_length = int.from_bytes(raw[32:64], byteorder="big") modulus_length = int.from_bytes(raw[64:96], byteorder="big") return base_length, exponent_length, modulus_length def get_exponent_head(self) -> int: """Get the first 32 bytes of the exponent as an integer.""" raw = self.raw_input if self.raw_input is not None else bytes(self) base_length, exponent_length, _ = self.get_declared_lengths() exp_start = 96 + base_length # Extract up to 32 bytes of exponent data exp_head_bytes = raw[exp_start : exp_start + min(32, exponent_length)] # Pad with zeros if less than 32 bytes exp_head_bytes = exp_head_bytes.rjust(32, b"\0") return int.from_bytes(exp_head_bytes[:32], byteorder="big") class ModExpOutput(TestParameterGroup): """ Expected test result. Attributes: call_success (bool): The return_code from CALL, 0 indicates unsuccessful call (out-of-gas), 1 indicates call succeeded. returned_data(str): The output returnData is the expected output of the call. """ call_success: bool = True returned_data: Bytes ================================================ FILE: tests/byzantium/eip198_modexp_precompile/test_modexp.py ================================================ """ Test [EIP-198: MODEXP Precompile](https://eips.ethereum.org/EIPS/eip-198). Tests the MODEXP precompile, located at address 0x0000..0005. Test cases from the EIP are labelled with `EIP-198-caseX` in the test id. """ import pytest from ethereum_test_tools import ( Account, Alloc, Bytes, Environment, StateTestFiller, Transaction, compute_create_address, ) from ethereum_test_vm import Opcodes as Op from .helpers import ModExpInput, ModExpOutput REFERENCE_SPEC_GIT_PATH = "EIPS/eip-198.md" REFERENCE_SPEC_VERSION = "5c8f066acb210c704ef80c1033a941aa5374aac5" @pytest.mark.valid_from("Byzantium") @pytest.mark.parametrize( ["mod_exp_input", "output"], [ ( ModExpInput(base="", exponent="", modulus="02"), ModExpOutput(returned_data="0x01"), ), ( ModExpInput(base="", exponent="", modulus="0002"), ModExpOutput(returned_data="0x0001"), ), ( ModExpInput(base="00", exponent="00", modulus="02"), ModExpOutput(returned_data="0x01"), ), ( ModExpInput(base="", exponent="01", modulus="02"), ModExpOutput(returned_data="0x00"), ), ( ModExpInput(base="01", exponent="01", modulus="02"), ModExpOutput(returned_data="0x01"), ), ( ModExpInput(base="02", exponent="01", modulus="03"), ModExpOutput(returned_data="0x02"), ), ( ModExpInput(base="02", exponent="02", modulus="05"), ModExpOutput(returned_data="0x04"), ), ( ModExpInput(base="", exponent="", modulus=""), ModExpOutput(returned_data="0x"), ), ( ModExpInput(base="", exponent="", modulus="00"), ModExpOutput(returned_data="0x00"), ), ( ModExpInput(base="", exponent="", modulus="01"), ModExpOutput(returned_data="0x00"), ), ( ModExpInput(base="", exponent="", modulus="0001"), ModExpOutput(returned_data="0x0000"), ), ( ModExpInput( base="", exponent="", modulus="", declared_exponent_length=2**32, declared_modulus_length=1, ), ModExpOutput(returned_data="0x00", call_success=False), ), # Test cases from EIP 198. pytest.param( ModExpInput( base="03", exponent="fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", modulus="fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", ), ModExpOutput( returned_data="0000000000000000000000000000000000000000000000000000000000000001", ), id="EIP-198-case1", ), pytest.param( ModExpInput( base="", exponent="fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", modulus="fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", ), ModExpOutput( returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="EIP-198-case2", ), pytest.param( # Note: This is the only test case which goes out-of- # gas. Bytes( "0000000000000000000000000000000000000000000000000000000000000000" "0000000000000000000000000000000000000000000000000000000000000020" "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="EIP-198-case3-raw-input-out-of-gas", ), pytest.param( ModExpInput( base="03", exponent="ffff", modulus="8000000000000000000000000000000000000000000000000000000000000000", extra_data="07", ), ModExpOutput( returned_data="0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", ), id="EIP-198-case4-extra-data_07", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000002" "0000000000000000000000000000000000000000000000000000000000000020" "03" "ffff" "80" ), ModExpOutput( returned_data="0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", ), id="EIP-198-case5-raw-input", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000008000000000000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-exponent-length-0x80000000-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000004000000000000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-exponent-length-0x40000000-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000002000000000000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-exponent-length-0x20000000-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000001000000000000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-exponent-length-0x10000000-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000080000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-modulus-length-0x80000020-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000040000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-modulus-length-0x40000020-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000020000020" "0000000000000000000000000000000000000000000000000000000000000001" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-modulus-length-0x20000020-out-of-gas", ), pytest.param( Bytes( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000040" "00000000000000000000000000000000000000000000000000000000ffffffff" "80" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), id="large-modulus-length-0xffffffff-out-of-gas", ), pytest.param( Bytes( "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9" "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000001" ), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), # FIXME marks=pytest.mark.skip( reason=( "EELS bug: U256 overflow in modexp pointer arithmetic " "before Osaka - see github.com/ethereum/execution-specs/issues/1465" ) ), id="max-base-length-overflow-out-of-gas", ), pytest.param( Bytes("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"), ModExpOutput( call_success=False, returned_data="0000000000000000000000000000000000000000000000000000000000000000", ), # FIXME marks=pytest.mark.skip( reason=( "EELS bug: U256 overflow in modexp pointer arithmetic " "before Osaka - see github.com/ethereum/execution-specs/issues/1465" ) ), id="immunefi-38958-by-omik-overflow", ), ], ids=lambda param: param.__repr__(), # only required to remove parameter # names (input/output) ) def test_modexp( state_test: StateTestFiller, mod_exp_input: ModExpInput | Bytes, output: ModExpOutput, pre: Alloc, ) -> None: """Test the MODEXP precompile.""" env = Environment() sender = pre.fund_eoa() account = pre.deploy_contract( # Store all CALLDATA into memory (offset 0) Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) # Store the returned CALL status (success = 1, fail = 0) into slot 0: + Op.SSTORE( 0, # Setup stack to CALL into ModExp with the CALLDATA and CALL into # it (+ pop value) Op.CALL(Op.GAS(), 0x05, 0, 0, Op.CALLDATASIZE(), 0, 0), ) # Store contract deployment code to deploy the returned data from # ModExp as contract code (16 bytes) + Op.MSTORE( 0, ( # Need to `ljust` this PUSH32 in order to ensure the code # starts in memory at offset 0 (memory right-aligns stack items # which are not 32 bytes) Op.PUSH32( bytes( Op.CODECOPY(0, 16, Op.SUB(Op.CODESIZE(), 16)) + Op.RETURN(0, Op.SUB(Op.CODESIZE, 16)) ).ljust(32, bytes(1)) ) ), ) # RETURNDATACOPY the returned data from ModExp into memory (offset 16 # bytes) + Op.RETURNDATACOPY(16, 0, Op.RETURNDATASIZE()) # CREATE contract with the deployment code + the returned data from # ModExp + Op.CREATE(0, 0, Op.ADD(16, Op.RETURNDATASIZE())) # STOP (handy for tracing) + Op.STOP(), ) tx = Transaction( ty=0x0, to=account, data=mod_exp_input, gas_limit=500_000, protected=True, sender=sender, ) post = {} if output.call_success: contract_address = compute_create_address(address=account, nonce=1) post[contract_address] = Account(code=output.returned_data) post[account] = Account(storage={0: output.call_success}) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/__init__.py ================================================ """ Test cases for EVM functionality introduced in Cancun. See [EIP-7659: Hardfork Meta - Dencun](https://eips.ethereum.org/EIPS/eip-7569) for a list of EIPS included in Dencun (Deneb/Cancun). """ ================================================ FILE: tests/cancun/eip1153_tstore/__init__.py ================================================ """ [EIP-1153](https://eips.ethereum.org/EIPS/eip-1153) Tests. """ from enum import Enum, unique from pprint import pprint from typing import Any, List import pytest from ethereum_test_tools import Opcodes as Op class PytestParameterEnum(Enum): """ Helper class for defining Pytest parameters used in test cases. This class helps define enum `value`s as `pytest.param` objects that then can be used to create a parametrize decorator that can be applied to tests, for example, ```python @TStorageCallContextTestCases.parametrize() def test_function(test_value): pass ``` Classes which derive from this class must define each test case as a different enum field with a dictionary as value. The dictionary must contain: i. A `description` key with a string value describing the test case. ii. (Optional) A `pytest_marks` key with a single mark or list of pytest marks to apply to the test case. For example: ``` pytest_marks=pytest.mark.xfail ``` or ``` pytest_marks=[pytest.mark.xfail, pytest.mark.skipif] ``` iii. (Optional) An `id` key with the name of the test. The rest of the keys in the dictionary are the parameters of the test case. The test case ID is set as the enum name converted to lowercase. """ def __init__(self, value: dict[str, Any]) -> None: """Initialize the enum value.""" assert isinstance(value, dict) assert "description" in value self._value_ = value def param(self, names: List[str]) -> Any: """Return the `pytest.param` value for this test case.""" value = self._value_ if "pytest_marks" in value: marks = {"marks": value["pytest_marks"]} else: marks = {} if "pytest_id" in value: pytest_id = value["pytest_id"] else: pytest_id = self.name.lower() return pytest.param(*[value[name] for name in names], id=pytest_id, **marks) @classmethod def special_keywords(cls) -> List[str]: """ Return the special dictionary keywords that are not test parameters. """ return ["description", "pytest_marks", "pytest_id"] def names(self) -> List[str]: """ Return the names of all the parameters included in the enum value dict. """ return sorted([k for k in self._value_.keys() if k not in self.special_keywords()]) @property def description(self) -> str: """Returns the description of this test case.""" return self._value_["description"] @classmethod def parametrize(cls) -> Any: """Return decorator to parametrize a test with this enum.""" names = None for test_case_names in [test_case.names() for test_case in cls]: if names is None: names = test_case_names else: if set(names) != set(test_case_names): pprint(names) pprint(test_case_names) assert set(names) == set(test_case_names), ( "All test cases must have the same parameter names." ) assert names is not None, "Enum must have at least one test case." return pytest.mark.parametrize(names, [test_case.param(names) for test_case in cls]) @unique class CreateOpcodeParams(PytestParameterEnum): """ Helper enum class to parametrize tests with different contract creation opcodes: CREATE and CREATE2. """ CREATE = {"opcode": Op.CREATE, "description": "Test CREATE opcode."} CREATE2 = {"opcode": Op.CREATE2, "description": "Test CREATE2 opcode."} ================================================ FILE: tests/cancun/eip1153_tstore/spec.py ================================================ """Defines EIP-1153 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_1153 = ReferenceSpec("EIPS/eip-1153.md", "1eb863b534a5a3e19e9c196ab2a7f3db4bb9da17") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-1153 specifications as defined at https://eips.ethereum.org/EIPS/eip-1153. """ TLOAD_OPCODE_BYTE = 0x5C TSTORE_OPCODE_BYTE = 0x5D TLOAD_GAS_COST = 100 TSTORE_GAS_COST = 100 ================================================ FILE: tests/cancun/eip1153_tstore/test_basic_tload.py ================================================ """ Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153. """ from typing import Dict, Union import pytest from ethereum_test_tools import Account, Address, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_vm import Opcodes as Op from .spec import Spec, ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/01_tloadBeginningTxnFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") def test_basic_tload_transaction_begin( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Ported .json vectors. (01_tloadBeginningTxnFiller.yml) load arbitrary value is 0 at beginning of transaction """ slot_tload_at_transaction_begin_result = 1 slot_code_worked = 2 address_to = pre.deploy_contract( code=Op.JUMPDEST() # 01 test + Op.SSTORE(slot_tload_at_transaction_begin_result, Op.TLOAD(0)) + Op.SSTORE(slot_code_worked, 1), storage={ slot_tload_at_transaction_begin_result: 0xFF, }, ) post = { address_to: Account( storage={ slot_tload_at_transaction_begin_result: 0x00, slot_code_worked: 0x01, } ) } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=b"", gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/02_tloadAfterTstoreFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") def test_basic_tload_works( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Ported .json vectors. (02_tloadAfterTstoreFiller.yml) tload from same slot after tstore returns correct value """ tstore_value = 88 slot_tload_after_tstore_result = 0 slot_tload_after_tstore_result_second_time = 1 slot_code_worked = 2 address_to = pre.deploy_contract( code=Op.JUMPDEST() # 02 test + Op.TSTORE(2, tstore_value) + Op.SSTORE(slot_tload_after_tstore_result, Op.TLOAD(2)) + Op.SSTORE(slot_tload_after_tstore_result_second_time, Op.TLOAD(2)) + Op.SSTORE(slot_code_worked, 1), storage={ slot_tload_after_tstore_result: 0xFF, slot_tload_after_tstore_result_second_time: 0xFF, }, ) post = { address_to: Account( storage={ slot_tload_after_tstore_result: tstore_value, slot_tload_after_tstore_result_second_time: tstore_value, slot_code_worked: 0x01, } ) } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=b"", gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/03_tloadAfterStoreIs0Filler.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") def test_basic_tload_other_after_tstore( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Ported .json vectors. (03_tloadAfterStoreIs0Filler.yml) Loading any other slot after storing to a slot returns 0. """ tstore_value = 88 slot_tload_untouched_slot_after_tstore_result = 1 slot_code_worked = 2 address_to = pre.deploy_contract( code=Op.JUMPDEST() # 03 test + Op.TSTORE(3, tstore_value) + Op.SSTORE(slot_tload_untouched_slot_after_tstore_result, Op.TLOAD(0)) + Op.SSTORE(slot_code_worked, 1), storage={ slot_tload_untouched_slot_after_tstore_result: 0xFF, }, ) post = { address_to: Account( storage={ slot_tload_untouched_slot_after_tstore_result: 0x00, slot_code_worked: 0x01, } ) } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=b"", gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/16_tloadGasFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") def test_basic_tload_gasprice( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Ported .json vectors. (16_tloadGasFiller.yml) tload costs 100 gas same as a warm sload """ slot_tload_nonzero_gas_price_result = 1 slot_tload_zero_gas_price_result = 2 slot_code_worked = 3 """ N OPNAME GAS_COST TOTAL_GAS REMAINING_GAS STACK 28-1 MSTORE 2 20748 4958252 2:[4ba82f,0,] MSTORE [0] = 4958255 29-1 PUSH1 3 20754 4958246 30-1 TLOAD 100 20757 4958243 1:[10,] 31-1 GAS 2 20857 4958143 1:[2,] 32-1 PUSH1 3 20859 4958141 2:[2,4ba7bd,] 33-1 MSTORE 6 20862 4958138 3:[2,4ba7bd,20,] MSTORE [32] = 4958141 """ extra_opcode_gas = 11 # mstore(3), push1(3),gas(2),push1(3) address_to = pre.deploy_contract( code=Op.JUMPDEST() # 16 test + Op.TSTORE(16, 2) + Op.MSTORE(0, Op.GAS()) # hot load the memory to make the extra_opcode_gas be 11 + Op.MSTORE(0, Op.GAS()) + Op.TLOAD(16) + Op.MSTORE(32, Op.GAS()) + Op.SSTORE(slot_tload_nonzero_gas_price_result, Op.SUB(Op.MLOAD(0), Op.MLOAD(32))) + Op.SSTORE( slot_tload_nonzero_gas_price_result, Op.SUB(Op.SLOAD(slot_tload_nonzero_gas_price_result), extra_opcode_gas), ) + Op.MSTORE(0, Op.GAS()) + Op.TLOAD(5) # tload slot at 5 is 0 + Op.MSTORE(32, Op.GAS()) + Op.SSTORE(slot_tload_zero_gas_price_result, Op.SUB(Op.MLOAD(0), Op.MLOAD(32))) + Op.SSTORE( slot_tload_zero_gas_price_result, Op.SUB(Op.SLOAD(slot_tload_zero_gas_price_result), extra_opcode_gas), ) + Op.SSTORE(slot_code_worked, 1), storage={ slot_tload_nonzero_gas_price_result: 0xFF, slot_tload_zero_gas_price_result: 0xFF, }, ) post = { address_to: Account( storage={ slot_tload_nonzero_gas_price_result: Spec.TLOAD_GAS_COST, slot_tload_zero_gas_price_result: Spec.TLOAD_GAS_COST, slot_code_worked: 0x01, } ) } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=b"", gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/18_tloadAfterStoreFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") def test_basic_tload_after_store( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Ported .json vectors. (18_tloadAfterStoreFiller.yml) tload from same slot after store returns 0 """ slot_tload_from_sstore_result = 1 slot_code_worked = 2 address_to = pre.deploy_contract( code=Op.JUMPDEST() # 18 test + Op.SSTORE(slot_tload_from_sstore_result, 22) + Op.SSTORE(slot_tload_from_sstore_result, Op.TLOAD(slot_tload_from_sstore_result)) + Op.SSTORE(slot_code_worked, 1), storage={ slot_tload_from_sstore_result: 0xFF, }, ) post: Dict[Address, Union[Account, object]] = {} post[address_to] = Account( storage={ slot_tload_from_sstore_result: 0x00, slot_code_worked: 0x01, } ) tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=b"", gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip1153_tstore/test_tload_calls.py ================================================ """ [EIP-1153](https://eips.ethereum.org/EIPS/eip-1153) Transient Storage tests. """ import pytest from ethereum_test_tools import Account, Address, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-1153.md" REFERENCE_SPEC_VERSION = "1eb863b534a5a3e19e9c196ab2a7f3db4bb9da17" @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/04_tloadAfterCallFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/12_tloadDelegateCallFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") @pytest.mark.parametrize("call_type", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL]) def test_tload_calls(state_test: StateTestFiller, pre: Alloc, call_type: Op) -> None: """ Ported .json vectors. (04_tloadAfterCallFiller.yml) Loading a slot after a call to another contract is 0. (12_tloadDelegateCallFiller.yml) delegatecall reads transient storage in the context of the current address """ # Storage variables slot_a_tload_after_subcall_result = 0 slot_a_subcall_result = 1 slot_b_subcall_tload_result = 2 slot_b_subcall_updated_tload_result = 3 def make_call(call_type: Op, address: Address) -> Bytecode: if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL: return call_type(Op.GAS(), address, 0, 32, 0, 0) else: return call_type(Op.GAS(), address, 0, 0, 32, 0, 0) address_call = pre.deploy_contract( balance=1_000_000_000_000_000_000, code=Op.JUMPDEST() + Op.SSTORE(slot_b_subcall_tload_result, Op.TLOAD(0)) + Op.TSTORE(0, 20) + Op.SSTORE(slot_b_subcall_updated_tload_result, Op.TLOAD(0)), storage={ slot_b_subcall_tload_result: 0xFF, slot_b_subcall_updated_tload_result: 0xFF, }, ) address_to = pre.deploy_contract( balance=1_000_000_000_000_000_000, code=Op.JUMPDEST() + Op.TSTORE(0, 10) + Op.SSTORE(slot_a_subcall_result, make_call(call_type, address_call)) + Op.SSTORE(slot_a_tload_after_subcall_result, Op.TLOAD(0)), storage={ slot_a_subcall_result: 0xFF, slot_a_tload_after_subcall_result: 0xFF, }, ) post = { address_to: Account( storage={ # other calls don't change context, there for tload updated in # this account slot_a_tload_after_subcall_result: 10 if call_type == Op.CALL else 20, slot_a_subcall_result: 1, # since context unchanged the subcall works as if continued # execution slot_b_subcall_tload_result: 0 if call_type == Op.CALL else 10, slot_b_subcall_updated_tload_result: 0 if call_type == Op.CALL else 20, } ), address_call: Account( storage={ slot_b_subcall_tload_result: 0 if call_type == Op.CALL else 0xFF, slot_b_subcall_updated_tload_result: 20 if call_type == Op.CALL else 0xFF, } ), } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=b"", gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip1153_tstore/test_tload_reentrancy.py ================================================ """ [EIP-1153](https://eips.ethereum.org/EIPS/eip-1153) Transient Storage tests. """ from enum import Enum import pytest from ethereum_test_tools import ( Account, Address, Alloc, Case, Environment, Hash, StateTestFiller, Switch, Transaction, ) from ethereum_test_vm import Bytecode from ethereum_test_vm import Macros as Om from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-1153.md" REFERENCE_SPEC_VERSION = "1eb863b534a5a3e19e9c196ab2a7f3db4bb9da17" class CallDestType(Enum): """Call dest type.""" REENTRANCY = 1 EXTERNAL_CALL = 2 @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/05_tloadReentrancyFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") @pytest.mark.parametrize("call_type", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL]) @pytest.mark.parametrize("call_return", [Op.RETURN, Op.REVERT, Om.OOG]) @pytest.mark.parametrize("call_dest_type", [CallDestType.REENTRANCY, CallDestType.EXTERNAL_CALL]) def test_tload_reentrancy( state_test: StateTestFiller, pre: Alloc, call_type: Op, call_return: Op, call_dest_type: CallDestType, ) -> None: """ Ported .json vectors. (05_tloadReentrancyFiller.yml) Reentrant calls access the same transient storage """ tload_value = 44 empty_value = 0 # Storage variables slot_tload_in_subcall_result = 1 slot_tload_after_subcall_result = 2 slot_subcall_worked = 3 slot_code_worked = 4 # Function names do_load = 1 do_reenter = 2 call_dest_address: Bytecode | Address call_dest_address = Op.ADDRESS() def make_call(call_type: Op) -> Bytecode: if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL: return call_type(Op.GAS(), call_dest_address, 0, 32, 32, 32) else: return call_type(Op.GAS(), call_dest_address, 0, 0, 32, 32, 32) subcall_code = Op.MSTORE(0, Op.TLOAD(0)) + call_return(0, 32) address_code = pre.deploy_contract( balance=0, code=subcall_code, storage={}, ) if call_dest_type == CallDestType.EXTERNAL_CALL: call_dest_address = address_code address_to = pre.deploy_contract( balance=1_000_000_000_000_000_000, code=Switch( cases=[ Case( condition=Op.EQ(Op.CALLDATALOAD(0), do_load), action=subcall_code, ), Case( condition=Op.EQ(Op.CALLDATALOAD(0), do_reenter), action=Op.TSTORE(0, tload_value) + Op.MSTORE(0, do_load) + Op.MSTORE(32, 0xFF) + Op.SSTORE(slot_subcall_worked, make_call(call_type)) + Op.SSTORE(slot_tload_in_subcall_result, Op.MLOAD(32)) + Op.SSTORE(slot_tload_after_subcall_result, Op.TLOAD(0)) + Op.SSTORE(slot_code_worked, 1), ), ], default_action=None, ), storage={ slot_tload_in_subcall_result: 0xFF, slot_tload_after_subcall_result: 0xFF, slot_subcall_worked: 0xFF, slot_code_worked: 0xFF, }, ) if call_dest_type == CallDestType.REENTRANCY: post = { address_to: Account( storage={ slot_code_worked: 1, # if call OOG, we fail to obtain the result slot_tload_in_subcall_result: 0xFF if call_return == Om.OOG else tload_value, slot_tload_after_subcall_result: tload_value, slot_subcall_worked: ( 0 if call_return == Op.REVERT or call_return == Om.OOG else 1 ), } ) } else: post = { address_to: Account( storage={ slot_code_worked: 1, slot_tload_in_subcall_result: ( 0xFF # if call OOG, we fail to obtain the result if call_return == Om.OOG # else delegate and callcode are working in the same # context so tload works else ( tload_value if call_type == Op.DELEGATECALL or call_type == Op.CALLCODE else empty_value ) ), # no subcall errors can change the tload result slot_tload_after_subcall_result: 44, slot_subcall_worked: ( 0 if call_return == Op.REVERT or call_return == Om.OOG else 1 ), } ) } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=Hash(do_reenter), gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstorage.py ================================================ """ EIP-1153 Transient Storage opcode tests. Ports and extends some tests from [ethereum/tests/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage). """ from enum import unique import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Bytecode, CodeGasMeasure, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Opcodes as Op from . import PytestParameterEnum from .spec import Spec, ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version pytestmark = [pytest.mark.valid_from("Cancun")] code_address = 0x100 def test_transient_storage_unset_values(state_test: StateTestFiller, pre: Alloc) -> None: """ Test that tload returns zero for unset values. Loading an arbitrary value is 0 at beginning of transaction: TLOAD(x) is 0. Based on [ethereum/tests/.../01_tloadBeginningTxnFiller.yml] (https://github.com/ethereum/tests/blob/ 9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/ stEIP1153-transientStorage/01_tloadBeginningTxnFiller.yml)", """ env = Environment() slots_under_test = [0, 1, 2, 2**128, 2**256 - 1] code = sum(Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_under_test) code_address = pre.deploy_contract( code=code, # type: ignore storage=dict.fromkeys(slots_under_test, 1), ) tx = Transaction( sender=pre.fund_eoa(), to=code_address, gas_limit=1_000_000, ) post = {code_address: Account(storage=dict.fromkeys(slots_under_test, 0))} state_test( env=env, pre=pre, post=post, tx=tx, ) def test_tload_after_tstore(state_test: StateTestFiller, pre: Alloc) -> None: """ Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x) returns y. Based on [ethereum/tests/.../02_tloadAfterTstoreFiller.yml] (https://github.com/ethereum/tests/blob/ 9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/ stEIP1153-transientStorage/02_tloadAfterTstoreFiller.yml)", """ env = Environment() slots_under_test = [0, 1, 2, 2**128, 2**256 - 1] code = sum( Op.TSTORE(slot, slot) + Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_under_test ) code_address = pre.deploy_contract( code=code, # type: ignore storage=dict.fromkeys(slots_under_test, 0xFF), ) tx = Transaction( sender=pre.fund_eoa(), to=code_address, gas_limit=1_000_000, ) post = {code_address: Account(storage={slot: slot for slot in slots_under_test})} state_test( env=env, pre=pre, post=post, tx=tx, ) def test_tload_after_sstore(state_test: StateTestFiller, pre: Alloc) -> None: """ Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x) returns y. Based on [ethereum/tests/.../18_tloadAfterStoreFiller.yml] (https://github.com/ethereum/tests/blob/ 9b00b68593f5869eb51a6659e1cc983e875e616b/src/ EIPTestsFiller/StateTests/stEIP1153-transientStorage/ 18_tloadAfterStoreFiller.yml)", """ env = Environment() slots_under_test = [1, 3, 2**128, 2**256 - 1] code = sum( Op.SSTORE(slot - 1, 0xFF) + Op.SSTORE(slot, Op.TLOAD(slot - 1)) for slot in slots_under_test ) code_address = pre.deploy_contract( code=code, # type: ignore storage=dict.fromkeys(slots_under_test, 1), ) tx = Transaction( sender=pre.fund_eoa(), to=code_address, gas_limit=1_000_000, ) post = { code_address: Account( code=code, storage={slot - 1: 0xFF for slot in slots_under_test} | dict.fromkeys(slots_under_test, 0), ) } state_test( env=env, pre=pre, post=post, tx=tx, ) def test_tload_after_tstore_is_zero(state_test: StateTestFiller, pre: Alloc) -> None: """ Test that tload returns zero after tstore is called with zero. Based on [ethereum/tests/.../03_tloadAfterStoreIs0Filler.yml] (https://github.com/ethereum/tests/blob/ 9b00b68593f5869eb51a6659e1cc983e875e616b/src/ EIPTestsFiller/StateTests/ stEIP1153-transientStorage/03_tloadAfterStoreIs0Filler.yml)", """ env = Environment() slots_to_write = [1, 4, 2**128, 2**256 - 2] slots_to_read = [slot - 1 for slot in slots_to_write] + [slot + 1 for slot in slots_to_write] assert set.intersection(set(slots_to_write), set(slots_to_read)) == set() code = sum(Op.TSTORE(slot, 1234) for slot in slots_to_write) + sum( Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_to_read ) code_address = pre.deploy_contract( code=code, # type: ignore storage=dict.fromkeys(slots_to_write + slots_to_read, 0xFFFF), ) tx = Transaction( sender=pre.fund_eoa(), to=code_address, gas_limit=1_000_000, ) post = { code_address: Account( storage=dict.fromkeys(slots_to_read, 0) | dict.fromkeys(slots_to_write, 0xFFFF) ) } state_test( env=env, pre=pre, post=post, tx=tx, ) @unique class GasMeasureTestCases(PytestParameterEnum): """Test cases for gas measurement.""" TLOAD = { "description": "Test that tload() of an empty slot consumes the expected gas.", "bytecode": Op.TLOAD(10), "overhead_cost": 3, # 1 x PUSH1 "extra_stack_items": 1, "expected_gas": Spec.TLOAD_GAS_COST, } TSTORE_TLOAD = { "description": "Test that tload() of a used slot consumes the expected gas.", "bytecode": Op.TSTORE(10, 10) + Op.TLOAD(10), "overhead_cost": 3 * 3, # 3 x PUSH1 "extra_stack_items": 1, "expected_gas": Spec.TSTORE_GAS_COST + Spec.TLOAD_GAS_COST, } TSTORE_COLD = { "description": "Test that tstore() of a previously unused slot consumes the expected gas.", "bytecode": Op.TSTORE(10, 10), "overhead_cost": 2 * 3, # 2 x PUSH1 "extra_stack_items": 0, "expected_gas": Spec.TSTORE_GAS_COST, } TSTORE_WARM = { "description": "Test that tstore() of a previously used slot consumes the expected gas.", "bytecode": Op.TSTORE(10, 10) + Op.TSTORE(10, 11), "overhead_cost": 4 * 3, # 4 x PUSH1 "extra_stack_items": 0, "expected_gas": 2 * Spec.TSTORE_GAS_COST, } @GasMeasureTestCases.parametrize() def test_gas_usage( state_test: StateTestFiller, pre: Alloc, bytecode: Bytecode, expected_gas: int, overhead_cost: int, extra_stack_items: int, ) -> None: """Test that tstore and tload consume the expected gas.""" gas_measure_bytecode = CodeGasMeasure( code=bytecode, overhead_cost=overhead_cost, extra_stack_items=extra_stack_items ) env = Environment() code_address = pre.deploy_contract(code=gas_measure_bytecode) tx = Transaction( sender=pre.fund_eoa(), to=code_address, gas_limit=1_000_000, ) post = { code_address: Account(code=gas_measure_bytecode, storage={0: expected_gas}), } state_test(env=env, pre=pre, tx=tx, post=post) @unique class LoopRunUntilOutOfGasCases(PytestParameterEnum): """Test cases to run until out of gas.""" TSTORE = { "description": "Run tstore in loop until out of gas", "repeat_bytecode": Op.TSTORE(Op.GAS, Op.GAS), "bytecode_repeat_times": 1000, } TSTORE_WIDE_ADDRESS_SPACE = { "description": "Run tstore in loop until out of gas, using a wide address space", "repeat_bytecode": Op.TSTORE(Op.ADD(Op.SHL(Op.PC, 1), Op.GAS), Op.GAS), "bytecode_repeat_times": 32, } TSTORE_TLOAD = { "description": "Run tstore and tload in loop until out of gas", "repeat_bytecode": Op.GAS + Op.DUP1 + Op.DUP1 + Op.TSTORE + Op.TLOAD + Op.POP, "bytecode_repeat_times": 1000, } def max_tx_gas_limit(fork: Fork) -> list[int]: """Return the maximum transaction gas limit for the given fork.""" tx_limit = fork.transaction_gas_limit_cap() return [tx_limit if tx_limit is not None else Environment().gas_limit] @LoopRunUntilOutOfGasCases.parametrize() @pytest.mark.slow() @pytest.mark.parametrize_by_fork("tx_gas_limit", max_tx_gas_limit) def test_run_until_out_of_gas( state_test: StateTestFiller, pre: Alloc, tx_gas_limit: int, repeat_bytecode: Bytecode, bytecode_repeat_times: int, ) -> None: """Use TSTORE over and over to different keys until we run out of gas.""" bytecode = Op.JUMPDEST + repeat_bytecode * bytecode_repeat_times + Op.JUMP(Op.PUSH0) code_address = pre.deploy_contract(code=bytecode) tx = Transaction(sender=pre.fund_eoa(), to=code_address, gas_limit=tx_gas_limit) post = { code_address: Account(code=bytecode, storage={}), } state_test(pre=pre, tx=tx, post=post) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstorage_clear_after_tx.py ================================================ """EIP-1153 Transient Storage tests.""" from typing import Optional import pytest from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Environment, EVMCodeType, Initcode, Transaction, ) from ethereum_test_types.eof.v1 import Container from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version @pytest.mark.valid_from("Cancun") @pytest.mark.with_all_evm_code_types def test_tstore_clear_after_deployment_tx( blockchain_test: BlockchainTestFiller, pre: Alloc, evm_code_type: EVMCodeType, ) -> None: """ First creates a contract, which TSTOREs a value 1 in slot 1. After creating the contract, a new tx will call this contract, storing TLOAD(1) into slot 1. The transient storage should be cleared after creating the contract (at tx-level), so the storage should stay empty. """ env = Environment() init_code = Op.TSTORE(1, 1) deploy_code = Op.SSTORE(1, Op.TLOAD(1)) code: Optional[Container | Initcode] = None if evm_code_type == EVMCodeType.EOF_V1: code = Container.Init( deploy_container=Container.Code(deploy_code + Op.STOP), initcode_prefix=init_code ) else: code = Initcode(deploy_code=deploy_code, initcode_prefix=init_code) sender = pre.fund_eoa() deployment_tx = Transaction( gas_limit=100000, data=code, to=None, sender=sender, ) address = deployment_tx.created_contract invoke_contract_tx = Transaction(gas_limit=100000, to=address, sender=sender) txs = [deployment_tx, invoke_contract_tx] post = { address: Account(storage={0x01: 0x00}), } blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=txs)]) @pytest.mark.valid_from("Cancun") @pytest.mark.with_all_evm_code_types def test_tstore_clear_after_tx( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ First SSTOREs the TLOAD value of key 1 in slot 1. Then, it TSTOREs 1 in slot 1. The second tx will re-call the contract. The storage should stay empty, because the transient storage is cleared after the transaction. """ env = Environment() code = Op.SSTORE(1, Op.TLOAD(1)) + Op.TSTORE(1, 1) account = pre.deploy_contract(code) sender = pre.fund_eoa() poke_tstore_tx = Transaction( gas_limit=100000, to=account, sender=sender, ) re_poke_tstore_tx = Transaction(gas_limit=100000, to=account, sender=sender) txs = [poke_tstore_tx, re_poke_tstore_tx] post = { account: Account(storage={0x01: 0x00}), } blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=txs)]) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py ================================================ """ Test transient storage in contract creation contexts. """ from enum import unique import pytest from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, Initcode, StateTestFiller, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op from . import CreateOpcodeParams, PytestParameterEnum from .spec import ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version pytestmark = [pytest.mark.valid_from("Cancun")] @unique class InitcodeTestCases(PytestParameterEnum): """ Defines test cases for transient storage opcode usage in contract constructor and deployed code. """ ONLY_CONSTRUCTOR_CODE = { "description": ( "Test TLOAD and TSTORE behavior in contract constructor without deployed code" ), "constructor_code": ( # test creator's transient storage inaccessible from constructor # code Op.SSTORE(0, Op.TLOAD(0)) # test constructor code can use its own transient storage & creator # storage unaffected + Op.TSTORE(0, 1) + Op.SSTORE(1, Op.TLOAD(0)) ), "deploy_code": Bytecode(), "expected_storage": {0: 0x0000, 1: 0x0001}, } IN_CONSTRUCTOR_AND_DEPLOYED_CODE = { "description": "Test TLOAD and TSTORE behavior in contract constructor and deployed code", "constructor_code": ( # test creator's transient storage inaccessible from constructor # code Op.SSTORE(0, Op.TLOAD(0)) ), "deploy_code": ( # test creator's transient storage inaccessible from deployed code Op.SSTORE(1, Op.TLOAD(0)) # test deploy code can use its own transient storage & creator # storage unaffected + Op.TSTORE(1, 1) + Op.SSTORE(2, Op.TLOAD(1)) ), "expected_storage": {0: 0x0000, 1: 0x0000, 2: 0x0001}, } ACROSS_CONSTRUCTOR_AND_DEPLOYED_CODE_V0 = { "description": ("Test TSTORE behavior across contract constructor and deploy code. "), "constructor_code": ( # constructor code should be able to store its own transient # storage Op.TSTORE(1, 1) ), "deploy_code": ( # test creator's transient storage inaccessible from deployed code Op.SSTORE(0, Op.TLOAD(0)) # test deploy code can use its own transient storage stored from # constructor code + Op.SSTORE(1, Op.TLOAD(1)) # test deploy code can use its own transient storage stored from # deployed code + Op.TSTORE(2, 1) + Op.SSTORE(2, Op.TLOAD(2)) ), "expected_storage": {0: 0x0000, 1: 0x0001, 2: 0x0001}, } ACROSS_CONSTRUCTOR_AND_DEPLOYED_CODE_V1 = { "description": ( "Test TSTORE and TLOAD behavior across contract constructor and deploy code", ), "constructor_code": ( # test creator's transient storage inaccessible from constructor Op.SSTORE(0, Op.TLOAD(0)) # constructor code should be able to use its own transient storage # / creator storage unaffected + Op.TSTORE(1, 1) + Op.SSTORE(1, Op.TLOAD(1)) ), "deploy_code": ( # test creator's transient storage inaccessible from deployed code Op.SSTORE(2, Op.TLOAD(0)) # test deploy code can use its own transient storage stored from # constructor code + Op.SSTORE(3, Op.TLOAD(1)) # test deploy code can use its own transient storage stored from # deployed code + Op.TSTORE(2, 1) + Op.SSTORE(4, Op.TLOAD(2)) ), "expected_storage": {0: 0x0000, 1: 0x0001, 2: 0x0000, 3: 0x0001, 4: 0x0001}, } NO_CONSTRUCTOR_CODE = { "description": ( "Test TLOAD and TSTORE behavior in contract deployed code with no constructor code" ), "constructor_code": Bytecode(), "deploy_code": ( # test creator's transient storage inaccessible from deployed code Op.SSTORE(0, Op.TLOAD(0)) # test deployed code can use its own transient storage & creator # storage unaffected + Op.TSTORE(0, 1) + Op.SSTORE(1, Op.TLOAD(0)) ), "expected_storage": {0: 0x0000, 1: 0x0001}, } @CreateOpcodeParams.parametrize() @InitcodeTestCases.parametrize() class TestTransientStorageInContractCreation: """ Test transient storage in contract creation contexts. - TSTORE/TLOAD in initcode should not be able to access the creator's transient storage. - TSTORE/TLOAD in initcode should be able to access the created contract's transient storage. - TSTORE/TLOAD in creator contract should be able to use its own transient storage. """ @pytest.fixture() def create2_salt(self) -> int: # noqa: D102 return 0xDEADBEEF @pytest.fixture() def initcode( # noqa: D102 self, deploy_code: Bytecode, constructor_code: Bytecode, ) -> Initcode: return Initcode(deploy_code=deploy_code, initcode_prefix=constructor_code) @pytest.fixture() def creator_contract_code( # noqa: D102 self, opcode: Op, create2_salt: int, ) -> Bytecode: return ( Op.TSTORE(0, 0x0100) + Op.TSTORE(1, 0x0200) + Op.TSTORE(2, 0x0300) + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( 4, Op.CALL( address=( opcode(size=Op.CALLDATASIZE, salt=create2_salt) if opcode == Op.CREATE2 else opcode(size=Op.CALLDATASIZE) ) ), ) # Save the state of transient storage following call to storage; # the transient storage should not have been overwritten + Op.SSTORE(0, Op.TLOAD(0)) + Op.SSTORE(1, Op.TLOAD(1)) + Op.SSTORE(2, Op.TLOAD(2)) ) @pytest.fixture() def creator_address(self, pre: Alloc, creator_contract_code: Bytecode) -> Address: """Address that creates the contract with create/create2.""" return pre.deploy_contract(creator_contract_code) @pytest.fixture() def expected_creator_storage(self) -> dict: # noqa: D102 return {0: 0x0100, 1: 0x0200, 2: 0x0300, 4: 0x0001} @pytest.fixture() def created_contract_address( # noqa: D102 self, creator_address: Address, opcode: Op, create2_salt: int, initcode: Initcode ) -> Address: return compute_create_address( address=creator_address, nonce=1, salt=create2_salt, initcode=initcode, opcode=opcode, ) def test_contract_creation( self, state_test: StateTestFiller, pre: Alloc, creator_address: Address, created_contract_address: Address, initcode: Initcode, deploy_code: Bytecode, expected_creator_storage: dict, expected_storage: dict, ) -> None: """Test transient storage in contract creation contexts.""" sender = pre.fund_eoa() tx = Transaction( sender=sender, to=creator_address, data=initcode, gas_limit=1_000_000, ) post = { creator_address: Account( nonce=2, storage=expected_creator_storage, ), created_contract_address: Account( nonce=1, code=deploy_code, storage=expected_storage, ), } state_test( env=Environment(), pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py ================================================ """ Test EIP-1153 Transient Storage in execution contexts. """ from enum import EnumMeta, unique from typing import Any, Dict, Mapping import pytest from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, Hash, StateTestFiller, Transaction, ) from ethereum_test_tools import Opcodes as Op from . import PytestParameterEnum from .spec import Spec, ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version pytestmark = [pytest.mark.valid_from("Cancun")] PUSH_OPCODE_COST = 3 class DynamicCallContextTestCases(EnumMeta): """ Create dynamic transient storage test cases for contract sub-calls using CALLCODE and DELEGATECALL (these opcodes share the same signatures and test cases). """ def __new__(cls, name: str, bases: tuple[type, ...], classdict: Any) -> Any: # noqa: D102 for call_opcode in [Op.CALLCODE, Op.DELEGATECALL]: contract_call = call_opcode(address=Op.CALLDATALOAD(0)) classdict[call_opcode._name_] = { "description": ( "Caller and callee contracts share transient storage when callee is " f"called via {call_opcode._name_}." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(4, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": ( Op.SSTORE(2, Op.TLOAD(0)) + Op.TSTORE(1, 69) + Op.SSTORE(3, Op.TLOAD(1)) + Op.STOP ), "expected_caller_storage": {0: 1, 1: 420, 2: 420, 3: 69, 4: 69}, "expected_callee_storage": {}, } for call_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL]: contract_call = call_opcode(address=Op.CALLDATALOAD(0)) classdict[f"{call_opcode._name_}_WITH_REVERT"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon REVERT." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE(1, 69) + Op.REVERT(0, 0), "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } contract_call = call_opcode(gas=0xFF, address=Op.CALLDATALOAD(0)) classdict[f"{call_opcode._name_}_WITH_INVALID"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon REVERT. Note: Gas passed to sub-call is capped." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE(1, 69) + Op.INVALID(), "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } contract_call = call_opcode(gas=0xFFFF, address=Op.CALLDATALOAD(0)) classdict[f"{call_opcode._name_}_WITH_STACK_OVERFLOW"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon stack overflow." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE(1, 69) + Op.PUSH0() * 1025 + Op.STOP, "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } classdict[f"{call_opcode._name_}_WITH_TSTORE_STACK_UNDERFLOW"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon stack underflow because of TSTORE parameters (1)." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE(1, unchecked=True) + Op.STOP, "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } classdict[f"{call_opcode._name_}_WITH_TSTORE_STACK_UNDERFLOW_2"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon stack underflow because of TSTORE parameters (0)." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE + Op.STOP, "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } classdict[f"{call_opcode._name_}_WITH_TLOAD_STACK_UNDERFLOW"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon stack underflow because of TLOAD parameters (0)." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TLOAD + Op.TSTORE(0, 1) + Op.STOP, "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } gas_limit = Spec.TSTORE_GAS_COST + (PUSH_OPCODE_COST * 2) - 1 contract_call = call_opcode(gas=gas_limit, address=Op.CALLDATALOAD(0)) classdict[f"{call_opcode._name_}_WITH_OUT_OF_GAS"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon out of gas during TSTORE. " "Note: Gas passed to sub-call is capped." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE(1, 69) + Op.STOP, "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } contract_call = call_opcode(gas=0xFF, address=Op.CALLDATALOAD(0)) classdict[f"{call_opcode._name_}_WITH_OUT_OF_GAS_2"] = { "description": ( "Transient storage usage is discarded from sub-call with " f"{call_opcode._name_} upon out of gas after TSTORE. " "Note: Gas passed to sub-call is capped." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.TSTORE(1, 420) + Op.SSTORE(0, contract_call) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": Op.TSTORE(1, 69) + (Op.PUSH0() + Op.POP) * 512 + Op.STOP, "expected_caller_storage": {0: 0, 1: 420, 2: 420}, "expected_callee_storage": {}, } return super().__new__(cls, name, bases, classdict) @unique class CallContextTestCases(PytestParameterEnum, metaclass=DynamicCallContextTestCases): """Transient storage test cases for different contract subcall contexts.""" CALL = { "description": ( "Caller and callee contracts use their own transient storage when callee " "is called via CALL." ), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.SSTORE(0, Op.CALL(address=Op.CALLDATALOAD(0))) + Op.SSTORE(1, Op.TLOAD(0)) + Op.SSTORE(2, Op.TLOAD(1)) + Op.STOP ), "callee_bytecode": ( Op.SSTORE(0, Op.TLOAD(0)) + Op.TSTORE(1, 69) + Op.SSTORE(1, Op.TLOAD(1)) + Op.STOP ), "expected_caller_storage": {0: 1, 1: 420, 2: 0}, "expected_callee_storage": {0: 0, 1: 69}, } STATICCALL_CANT_CALL_TSTORE = { "description": ("TA STATICCALL callee can not use transient storage."), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.SSTORE(0, Op.STATICCALL(gas=0xFFFF, address=Op.CALLDATALOAD(0))) # limit gas + Op.SSTORE(1, Op.TLOAD(0)) + Op.STOP ), "callee_bytecode": Op.TSTORE(0, 69) + Op.STOP, # calling tstore fails "expected_caller_storage": {0: 0, 1: 420}, "expected_callee_storage": {}, } STATICCALL_CANT_CALL_TSTORE_WITH_STACK_UNDERFLOW = { "description": ("TA STATICCALL callee can not use transient storage."), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.SSTORE(0, Op.STATICCALL(gas=0xFFFF, address=Op.CALLDATALOAD(0))) # limit gas + Op.SSTORE(1, Op.TLOAD(0)) + Op.STOP ), # calling with stack underflow still fails "callee_bytecode": Op.TSTORE(0, unchecked=True) + Op.STOP, "expected_caller_storage": {0: 0, 1: 420}, "expected_callee_storage": {}, } STATICCALL_CAN_CALL_TLOAD = { # TODO: Not a very useful test; consider removing after implementing # ethereum/tests staticcall tests "pytest_id": "staticcalled_context_can_call_tload", "description": ("A STATICCALL callee can not use transient storage."), "caller_bytecode": ( Op.TSTORE(0, 420) + Op.SSTORE(0, Op.STATICCALL(address=Op.CALLDATALOAD(0))) + Op.SSTORE(1, Op.TLOAD(0)) + Op.STOP ), # calling tload does not cause the call to fail "callee_bytecode": Op.TLOAD(0) + Op.STOP, "expected_caller_storage": {0: 1, 1: 420}, "expected_callee_storage": {}, } def __init__(self, value: dict[str, Any]) -> None: """Initialize the test case with the given value.""" value = { "env": Environment(), "caller_bytecode": value["caller_bytecode"], "callee_bytecode": value["callee_bytecode"], "expected_caller_storage": value["expected_caller_storage"], "expected_callee_storage": value["expected_callee_storage"], } | {k: value[k] for k in value.keys() if k in self.special_keywords()} super().__init__(value) @pytest.fixture() def caller_address(pre: Alloc, caller_bytecode: Bytecode) -> Address: """Address used to call the test bytecode on every test case.""" return pre.deploy_contract(caller_bytecode) @pytest.fixture() def callee_address(pre: Alloc, callee_bytecode: Bytecode) -> Address: """Address called by the test bytecode on every test case.""" return pre.deploy_contract(callee_bytecode) @pytest.fixture() def tx(pre: Alloc, caller_address: Address, callee_address: Address) -> Transaction: # noqa: D103 return Transaction( sender=pre.fund_eoa(), to=caller_address, data=Hash(callee_address, left_padding=True), gas_limit=1_000_000, ) @pytest.fixture() def post( # noqa: D103 caller_address: Address, callee_address: Address, expected_caller_storage: Dict, expected_callee_storage: Dict, ) -> Dict: return { caller_address: Account(storage=expected_caller_storage), callee_address: Account(storage=expected_callee_storage), } @CallContextTestCases.parametrize() def test_subcall( state_test: StateTestFiller, env: Environment, pre: Alloc, tx: Transaction, post: Mapping, ) -> None: """ Test transient storage with a subcall using the following opcodes. - `CALL` - `CALLCODE` - `DELEGATECALL` - `STATICCALL` """ state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py ================================================ """ Tests transient storage in reentrancy contexts. """ from enum import EnumMeta, unique from typing import Any, Dict import pytest from ethereum_test_tools import ( Account, Alloc, Bytecode, CalldataCase, Conditional, Environment, Hash, StateTestFiller, Switch, Transaction, ) from ethereum_test_tools import Opcodes as Op from . import PytestParameterEnum from .spec import ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version pytestmark = [pytest.mark.valid_from("Cancun")] SETUP_CONDITION: Bytecode = Op.EQ(Op.CALLDATALOAD(0), 0x01) REENTRANT_CALL: Bytecode = Op.MSTORE(0, 2) + Op.SSTORE( 0, Op.CALL(address=Op.ADDRESS, args_size=32) ) class DynamicReentrancyTestCases(EnumMeta): """ Create dynamic transient storage test cases which REVERT or receive INVALID (these opcodes should share the same behavior). """ def __new__(cls, name: str, bases: tuple[type, ...], classdict: Any) -> Any: # noqa: D102 for opcode in [Op.REVERT, Op.INVALID]: if opcode == Op.REVERT: opcode_call = Op.REVERT(0, 0) subcall_gas = Op.GAS() elif opcode == Op.INVALID: opcode_call = Op.INVALID() subcall_gas = Op.PUSH2(0xFFFF) else: raise ValueError(f"Unknown opcode: {opcode}.") reentrant_call = Op.MSTORE(0, 2) + Op.SSTORE( 0, Op.CALL(gas=subcall_gas, address=Op.ADDRESS, args_size=32) ) classdict[f"TSTORE_BEFORE_{opcode._name_}_HAS_NO_EFFECT"] = { "description": ( f"{opcode._name_} undoes the transient storage write " "from the failed call: " "TSTORE(x, y), CALL(self, ...), TSTORE(x, z), " f"{opcode._name_}, TLOAD(x) returns y.", "Based on [ethereum/tests/.../08_revertUndoes" "TransientStoreFiller.yml](https://github.com/ethereum/" "tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src" "/EIPTestsFiller/StateTests/stEIP1153-transientStorage/" "08_revertUndoesTransientStoreFiller.yml)", ), "bytecode": Conditional( condition=SETUP_CONDITION, # setup if_true=( Op.TSTORE(0xFF, 0x100) + Op.SSTORE(1, Op.TLOAD(0xFF)) + reentrant_call + Op.SSTORE( 2, Op.TLOAD(0xFF) ) # test value not updated during reentrant call ), # reenter if_false=Op.TSTORE(0xFF, 0x101) + opcode_call, ), "expected_storage": {0: 0x00, 1: 0x100, 2: 0x100}, } classdict[f"{opcode._name_}_UNDOES_ALL"] = { "description": ( f"{opcode._name_} undoes all the transient storage writes " "to the same key from a failed call. " "TSTORE(x, y), CALL(self, ...), TSTORE(x, z), " f"TSTORE(x, z + 1) {opcode._name_}, TLOAD(x) returns y." "", "Based on " "[ethereum/tests/.../09_revertUndoesAllFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/09_revertUndoesAllFiller.yml).", ), "bytecode": Conditional( condition=SETUP_CONDITION, # setup if_true=( Op.TSTORE(0xFE, 0x100) + Op.TSTORE(0xFF, 0x101) + reentrant_call + Op.SSTORE( 1, Op.TLOAD(0xFE) ) # test value not updated during reentrant call + Op.SSTORE( 2, Op.TLOAD(0xFF) ) # test value not updated during reentrant call ), # reenter if_false=( # store twice and revert/invalid; none of the stores # should take effect Op.TSTORE(0xFE, 0x201) + Op.TSTORE(0xFE, 0x202) + Op.TSTORE(0xFF, 0x201) + Op.TSTORE(0xFF, 0x202) + opcode_call ), ), "expected_storage": {0: 0x00, 1: 0x100, 2: 0x101}, } if opcode == Op.REVERT: opcode_call = Op.REVERT(0, 32) second_call_return_value = 1 elif opcode == Op.INVALID: opcode_call = Op.INVALID() second_call_return_value = 0 else: raise ValueError(f"Unknown opcode: {opcode}.") classdict[f"{opcode._name_}_UNDOES_TSTORAGE_AFTER_SUCCESSFUL_CALL"] = { "description": ( f"{opcode._name_} undoes transient storage writes from " "inner calls that successfully returned. " "TSTORE(x, y), CALL(self, ...), CALL(self, ...), " f"TSTORE(x, y + 1), RETURN, {opcode._name_}, TLOAD(x) " "returns y.", "Based on [ethereum/tests/.../" "10_revertUndoesStoreAfterReturnFiller.yml]" "(https://github.com/ethereum/tests/blob/" "9b00b68593f5869eb51a6659e1cc983e875e616b/src/" "EIPTestsFiller/StateTests/stEIP1153-transientStorage/" "10_revertUndoesStoreAfterReturnFiller.yml).", ), "bytecode": Switch( default_action=( # setup; make first reentrant sub-call Op.TSTORE(0xFF, 0x100) + Op.SSTORE(2, Op.TLOAD(0xFF)) + Op.MSTORE(0, 2) + Op.SSTORE( 0, Op.CALL( gas=subcall_gas, address=Op.ADDRESS, args_size=32, ret_offset=32, ret_size=32, ), ) + Op.SSTORE(1, Op.MLOAD(32)) # should be 1 (successful # call) + Op.SSTORE(3, Op.TLOAD(0xFF)) ), cases=[ # the first, reentrant call, which reverts/receives # invalid CalldataCase( value=2, action=( Op.MSTORE(0, 3) + Op.MSTORE(0, Op.CALL(address=Op.ADDRESS, args_size=32)) + opcode_call ), ), # the second, reentrant call, which returns # successfully CalldataCase( value=3, action=Op.TSTORE(0xFF, 0x101), ), ], ), "expected_storage": {0: 0x00, 1: second_call_return_value, 2: 0x100, 3: 0x100}, } return super().__new__(cls, name, bases, classdict) @unique class ReentrancyTestCases(PytestParameterEnum, metaclass=DynamicReentrancyTestCases): """Transient storage test cases for different reentrancy call contexts.""" TSTORE_IN_REENTRANT_CALL = { "description": ( "Reentrant calls access the same transient storage: " "TSTORE(x, y), CALL(self, ...), TLOAD(x) returns y." "" "Based on [ethereum/tests/.../05_tloadReentrancyFiller.yml]" "(https://github.com/ethereum/tests/tree/" "9b00b68593f5869eb51a6659e1cc983e875e616b/src/" "EIPTestsFiller/StateTests/stEIP1153-transientStorage).", ), "bytecode": Conditional( condition=SETUP_CONDITION, # setup if_true=(Op.TSTORE(0, 0x100) + REENTRANT_CALL + Op.SSTORE(2, Op.TLOAD(0))), # reenter if_false=Op.SSTORE(1, Op.TLOAD(0)), ), "expected_storage": {0: 0x01, 1: 0x100, 2: 0x100}, } TLOAD_AFTER_REENTRANT_TSTORE = { "description": ( "Successfully returned calls do not revert transient " "storage writes: " "TSTORE(x, y), CALL(self, ...), TSTORE(x, z), RETURN, TLOAD(x) " "returns z." "Based on [ethereum/tests/.../" "07_tloadAfterReentrancyStoreFiller.yml](https://github.com/" "ethereum/tests/blob/" "9b00b68593f5869eb51a6659e1cc983e875e616b/src/" "EIPTestsFiller/StateTests/stEIP1153-transientStorage/" "07_tloadAfterReentrancyStoreFiller.yml).", ), "bytecode": Conditional( condition=SETUP_CONDITION, # setup if_true=( Op.TSTORE(0xFF, 0x100) + Op.SSTORE(1, Op.TLOAD(0xFF)) + REENTRANT_CALL + Op.SSTORE(2, Op.TLOAD(0xFF)) # test value updated during # reentrant call ), # reenter if_false=Op.TSTORE(0xFF, 0x101), ), "expected_storage": {0: 0x01, 1: 0x100, 2: 0x101}, } MANIPULATE_IN_REENTRANT_CALL = { "description": ( "Reentrant calls can manipulate the same transient storage: " "TSTORE(x, y), CALL(self, ...), TSTORE(x, z), TLOAD(x) returns z." "" "Based on [ethereum/tests/.../06_tstoreInReentrancyCallFiller.yml]" "(https://github.com/ethereum/tests/blob/" "9b00b68593f5869eb51a6659e1cc983e875e616b/src/" "EIPTestsFiller/StateTests/stEIP1153-transientStorage/" "06_tstoreInReentrancyCallFiller.yml).", ), "bytecode": Conditional( condition=SETUP_CONDITION, # setup if_true=( Op.TSTORE(0xFF, 0x100) + Op.SSTORE(1, Op.TLOAD(0xFF)) + REENTRANT_CALL + Op.SSTORE(3, Op.TLOAD(0xFF)) # test value updated during # reentrant call ), # reenter if_false=Op.TSTORE(0xFF, 0x101) + Op.SSTORE(2, Op.TLOAD(0xFF)), ), "expected_storage": {0: 0x01, 1: 0x100, 2: 0x101, 3: 0x101}, } TSTORE_IN_CALL_THEN_TLOAD_RETURN_IN_STATICCALL = { "description": ( "A reentrant call followed by a reentrant subcall can " "call tload correctly: " "TSTORE(x, y), CALL(self, ...), STATICCALL(self, ...), " "TLOAD(x), RETURN returns y." "Based on [ethereum/tests/.../" "10_revertUndoesStoreAfterReturnFiller.yml]" "(https://github.com/ethereum/tests/blob/" "9b00b68593f5869eb51a6659e1cc983e875e616b/src/" "EIPTestsFiller/StateTests/stEIP1153-transientStorage/" "10_revertUndoesStoreAfterReturnFiller.yml).", ), "bytecode": Switch( default_action=( # setup; make first reentrant sub-call Op.TSTORE(0xFF, 0x100) + Op.SSTORE(2, Op.TLOAD(0xFF)) + Op.MSTORE(0, 2) + Op.SSTORE(0, Op.CALL(address=Op.ADDRESS, args_size=32)) + Op.SSTORE(4, Op.TLOAD(0xFE)) ), cases=[ # the first, reentrant call which calls tstore and a further # reentrant staticcall CalldataCase( value=2, action=( Op.TSTORE(0xFE, 0x101) + Op.MSTORE(0, 3) + Op.SSTORE( 1, Op.STATICCALL(address=Op.ADDRESS, args_size=32, ret_size=32) ) + Op.SSTORE(3, Op.MLOAD(0)) ), ), # the second, reentrant call, which calls tload and return # returns successfully CalldataCase( value=3, action=Op.MSTORE(0, Op.TLOAD(0xFE)) + Op.RETURN(0, 32), ), ], ), "expected_storage": {0: 0x01, 1: 0x01, 2: 0x100, 3: 0x101, 4: 0x101}, } @ReentrancyTestCases.parametrize() def test_reentrant_call( state_test: StateTestFiller, pre: Alloc, bytecode: Bytecode, expected_storage: Dict ) -> None: """Test transient storage in different reentrancy contexts.""" env = Environment() callee_address = pre.deploy_contract(bytecode) tx = Transaction( sender=pre.fund_eoa(), to=callee_address, data=Hash(1), gas_limit=1_000_000, ) post = {callee_address: Account(code=bytecode, storage=expected_storage)} state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py ================================================ """ EIP-1153 Transient Storage with selfdestruct tests. Test cases for `TSTORE` and `TLOAD` opcode calls in reentrancy after self-destruct, taking into account the changes in EIP-6780. """ from enum import unique from typing import Dict import pytest from ethereum_test_tools import ( Account, Alloc, Bytecode, CalldataCase, Environment, Hash, Initcode, StateTestFiller, Switch, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op from . import PytestParameterEnum from .spec import ref_spec_1153 REFERENCE_SPEC_GIT_PATH = ref_spec_1153.git_path REFERENCE_SPEC_VERSION = ref_spec_1153.version pytestmark = [pytest.mark.valid_from("Cancun")] CREATE_CODE = Op.CALLDATACOPY(size=Op.CALLDATASIZE) + Op.CREATE(size=Op.CALLDATASIZE) def call_option(option_number: int) -> Bytecode: """ Return the bytecode for a call to the callee contract with the given option number. """ return Op.MSTORE(value=option_number) + Op.CALL( address=Op.SLOAD(0), args_offset=0, args_size=32, ret_offset=0, ret_size=32, ) @unique class SelfDestructCases(PytestParameterEnum): """ Transient storage test cases for different reentrancy calls which involve the contract self-destructing. """ TLOAD_AFTER_SELFDESTRUCT_PRE_EXISTING_CONTRACT = { "description": ( "Use TSTORE to store a transient value and self-destruct in a contract that was" "deployed in a transaction prior to the one currently executing." "Then re-enter the contract and attempt to TLOAD the transient value.", ), "pre_existing_contract": True, "caller_bytecode": Op.SSTORE(0, Op.CALLDATALOAD(0)) + Op.SSTORE(1, call_option(1)) + Op.SSTORE(2, call_option(2)) + Op.SSTORE(3, Op.MLOAD(0)), "callee_bytecode": Switch( cases=[ CalldataCase(value=1, action=Op.TSTORE(0xFF, 0x100) + Op.SELFDESTRUCT(0)), CalldataCase(value=2, action=Op.MSTORE(0, Op.TLOAD(0xFF)) + Op.RETURN(0, 32)), ], ), "expected_storage": { 1: 0x01, 2: 0x01, 3: 0x100, }, } TLOAD_AFTER_SELFDESTRUCT_NEW_CONTRACT = { "description": ( "Use TSTORE to store a transient value and self-destruct in a contract that was" "deployed in the current transaction." "Then re-enter the contract and attempt to TLOAD the transient value.", ), "pre_existing_contract": False, "caller_bytecode": Op.SSTORE(0, CREATE_CODE) + Op.SSTORE(1, call_option(1)) + Op.SSTORE(2, call_option(2)) + Op.SSTORE(3, Op.MLOAD(0)), "callee_bytecode": Switch( cases=[ CalldataCase(value=1, action=Op.TSTORE(0xFF, 0x100) + Op.SELFDESTRUCT(0)), CalldataCase(value=2, action=Op.MSTORE(0, Op.TLOAD(0xFF)) + Op.RETURN(0, 32)), ], ), "expected_storage": { 1: 0x01, 2: 0x01, 3: 0x100, }, } TLOAD_AFTER_INNER_SELFDESTRUCT_PRE_EXISTING_CONTRACT = { "description": ( "Use TSTORE to store a transient value and then call for re-entry and self-destruct," "and use TLOAD upon return from the inner self-destructing call.", ), "pre_existing_contract": True, "caller_bytecode": Op.SSTORE(0, Op.CALLDATALOAD(0)) + Op.SSTORE(1, call_option(1)) + Op.SSTORE(2, Op.MLOAD(0)), "callee_bytecode": Switch( cases=[ CalldataCase( value=1, action=Op.TSTORE(0xFF, 0x100) + call_option(2) + Op.MSTORE(0, Op.TLOAD(0xFF)) + Op.RETURN(0, 32), ), CalldataCase(value=2, action=Op.SELFDESTRUCT(0)), ], ), "expected_storage": { 1: 0x01, 2: 0x100, }, } TLOAD_AFTER_INNER_SELFDESTRUCT_NEW_CONTRACT = { "description": ( "In a newly created contract, use TSTORE to store a transient value and then call " "for re-entry and self-destruct, and use TLOAD upon return from the inner " "self-destructing call.", ), "pre_existing_contract": False, "caller_bytecode": ( Op.SSTORE(0, CREATE_CODE) + Op.SSTORE(1, call_option(1)) + Op.SSTORE(2, Op.MLOAD(0)) ), "callee_bytecode": Switch( cases=[ CalldataCase( value=1, action=Op.TSTORE(0xFF, 0x100) + Op.MSTORE(value=2) + Op.CALL( address=Op.ADDRESS, args_offset=0, args_size=32, ret_offset=0, ret_size=32, ) + Op.MSTORE(0, Op.TLOAD(0xFF)) + Op.RETURN(0, 32), ), CalldataCase(value=2, action=Op.SELFDESTRUCT(0)), ], ), "expected_storage": { 1: 0x01, 2: 0x100, }, } TSTORE_AFTER_SELFDESTRUCT_PRE_EXISTING_CONTRACT = { "description": ( "Use self-destruct in a pre-existing contract and then use TSTORE upon a re-entry." "Lastly use TLOAD on another re-entry", ), "pre_existing_contract": True, "caller_bytecode": Op.SSTORE(0, Op.CALLDATALOAD(0)) + Op.SSTORE(1, call_option(1)) + Op.SSTORE(2, call_option(2)) + Op.SSTORE(3, call_option(3)) + Op.SSTORE(4, Op.MLOAD(0)), "callee_bytecode": Switch( cases=[ CalldataCase(value=1, action=Op.SELFDESTRUCT(0)), CalldataCase(value=2, action=Op.TSTORE(0xFF, 0x100)), CalldataCase(value=3, action=Op.MSTORE(0, Op.TLOAD(0xFF)) + Op.RETURN(0, 32)), ], ), "expected_storage": { 1: 0x01, 2: 0x01, 3: 0x01, 4: 0x100, }, } TSTORE_AFTER_SELFDESTRUCT_NEW_CONTRACT = { "description": ( "Use self-destruct in a newly created contract and then use TSTORE upon a re-entry." "Lastly use TLOAD on another re-entry", ), "pre_existing_contract": False, "caller_bytecode": Op.SSTORE(0, CREATE_CODE) + Op.SSTORE(1, call_option(1)) + Op.SSTORE(2, call_option(2)) + Op.SSTORE(3, call_option(3)) + Op.SSTORE(4, Op.MLOAD(0)), "callee_bytecode": Switch( cases=[ CalldataCase(value=1, action=Op.SELFDESTRUCT(0)), CalldataCase(value=2, action=Op.TSTORE(0xFF, 0x100)), CalldataCase(value=3, action=Op.MSTORE(0, Op.TLOAD(0xFF)) + Op.RETURN(0, 32)), ], ), "expected_storage": { 1: 0x01, 2: 0x01, 3: 0x01, 4: 0x100, }, } @SelfDestructCases.parametrize() def test_reentrant_selfdestructing_call( state_test: StateTestFiller, pre: Alloc, pre_existing_contract: bool, caller_bytecode: Bytecode, callee_bytecode: Bytecode, expected_storage: Dict, ) -> None: """ Test transient storage in different reentrancy contexts after selfdestructing. """ env = Environment() caller_address = pre.deploy_contract(code=caller_bytecode) data: bytes | Bytecode if pre_existing_contract: callee_address = pre.deploy_contract(code=callee_bytecode) data = Hash(callee_address, left_padding=True) else: callee_address = compute_create_address(address=caller_address, nonce=1) data = Initcode(deploy_code=callee_bytecode) tx = Transaction( sender=pre.fund_eoa(), to=caller_address, gas_limit=1_000_000, data=data, ) expected_storage[0] = callee_address post: Dict = {caller_address: Account(storage=expected_storage)} if pre_existing_contract: post[callee_address] = Account(code=callee_bytecode) else: post[callee_address] = Account.NONEXISTENT state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip1153_tstore/test_tstore_reentrancy.py ================================================ """EIP-1153 Transient Storage tests.""" from enum import Enum import pytest from ethereum_test_tools import ( Account, Address, Alloc, Case, Environment, Hash, StateTestFiller, Switch, Transaction, ) from ethereum_test_vm import Bytecode from ethereum_test_vm import Macros as Om from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-1153.md" REFERENCE_SPEC_VERSION = "1eb863b534a5a3e19e9c196ab2a7f3db4bb9da17" class CallDestType(Enum): """Call dest type.""" REENTRANCY = 1 EXTERNAL_CALL = 2 @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/06_tstoreInReentrancyCallFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/07_tloadAfterReentrancyStoreFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/08_revertUndoesTransientStoreFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/09_revertUndoesAllFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/11_tstoreDelegateCallFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/13_tloadStaticCallFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/20_oogUndoesTransientStoreInCallFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/440"], ) @pytest.mark.valid_from("Cancun") @pytest.mark.parametrize("call_type", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL]) @pytest.mark.parametrize("call_return", [Op.RETURN, Op.REVERT, Om.OOG]) @pytest.mark.parametrize("call_dest_type", [CallDestType.REENTRANCY, CallDestType.EXTERNAL_CALL]) def test_tstore_reentrancy( state_test: StateTestFiller, pre: Alloc, call_type: Op, call_return: Op, call_dest_type: CallDestType, ) -> None: """ Ported .json vectors. (06_tstoreInReentrancyCallFiller.yml) Reentrant calls access the same transient storage (07_tloadAfterReentrancyStoreFiller.yml) Successfully returned calls do not revert transient storage writes (08_revertUndoesTransientStoreFiller.yml) Revert undoes the transient storage writes from a call. (09_revertUndoesAllFiller.yml) Revert undoes all the transient storage writes to the same key from the failed call. (11_tstoreDelegateCallFiller.yml) delegatecall manipulates transient storage in the context of the current address. (13_tloadStaticCallFiller.yml) Transient storage cannot be manipulated in a static context, tstore reverts (20_oogUndoesTransientStoreInCallFiller.yml) Out of gas undoes the transient storage writes from a call. """ tload_value_set_before_call = 80 tload_value_set_in_call = 90 # Storage cells slot_tload_before_call = 0 slot_tload_in_subcall_result = 1 slot_tload_after_call = 2 slot_subcall_worked = 3 slot_tload_1_after_call = 4 slot_tstore_overwrite = 5 slot_code_worked = 6 # Function names do_tstore = 1 do_reenter = 2 call_dest_address: Bytecode | Address call_dest_address = Op.ADDRESS() def make_call(call_type: Op) -> Bytecode: if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL: return call_type(Op.GAS(), call_dest_address, 0, 32, 32, 32) else: return call_type(Op.GAS(), call_dest_address, 0, 0, 32, 32, 32) subcall_code = ( Op.TSTORE(0, 89) + Op.TSTORE(0, tload_value_set_in_call) + Op.TSTORE(1, 11) + Op.TSTORE(1, 12) + Op.MSTORE(0, Op.TLOAD(0)) + call_return(0, 32) ) address_code = pre.deploy_contract( balance=0, code=subcall_code, storage={}, ) if call_dest_type == CallDestType.EXTERNAL_CALL: call_dest_address = address_code address_to = pre.deploy_contract( balance=1_000_000_000_000_000_000, code=Switch( cases=[ Case( condition=Op.EQ(Op.CALLDATALOAD(0), do_tstore), action=subcall_code, ), Case( condition=Op.EQ(Op.CALLDATALOAD(0), do_reenter), action=Op.TSTORE(0, tload_value_set_before_call) + Op.SSTORE(slot_tload_before_call, Op.TLOAD(0)) + Op.MSTORE(0, do_tstore) + Op.MSTORE(32, 0xFF) + Op.SSTORE(slot_subcall_worked, make_call(call_type)) + Op.SSTORE(slot_tload_in_subcall_result, Op.MLOAD(32)) + Op.SSTORE(slot_tload_after_call, Op.TLOAD(0)) + Op.SSTORE(slot_tload_1_after_call, Op.TLOAD(1)) + Op.TSTORE(0, 50) + Op.SSTORE(slot_tstore_overwrite, Op.TLOAD(0)) + Op.SSTORE(slot_code_worked, 1), ), ], default_action=None, ), storage={ slot_tload_before_call: 0xFF, slot_tload_in_subcall_result: 0xFF, slot_tload_after_call: 0xFF, slot_subcall_worked: 0xFF, slot_tload_1_after_call: 0xFF, slot_tstore_overwrite: 0xFF, slot_code_worked: 0xFF, }, ) on_failing_calls = call_type == Op.STATICCALL or call_return in [Op.REVERT, Om.OOG] on_successful_delegate_or_callcode = call_type in [ Op.DELEGATECALL, Op.CALLCODE, ] and call_return not in [Op.REVERT, Om.OOG] if call_dest_type == CallDestType.REENTRANCY: post = { address_to: Account( storage={ slot_code_worked: 1, slot_tload_before_call: tload_value_set_before_call, slot_tload_in_subcall_result: ( # we fail to obtain in call result if it fails 0xFF if call_type == Op.STATICCALL or call_return == Om.OOG else tload_value_set_in_call ), # reentrant tstore overrides value in upper level slot_tload_after_call: ( tload_value_set_before_call if on_failing_calls else tload_value_set_in_call ), slot_tload_1_after_call: 0 if on_failing_calls else 12, slot_tstore_overwrite: 50, # tstore in static call not allowed slot_subcall_worked: 0 if on_failing_calls else 1, } ) } else: post = { address_to: Account( storage={ slot_code_worked: 1, slot_tload_before_call: tload_value_set_before_call, slot_tload_in_subcall_result: ( # we fail to obtain in call result if it fails 0xFF if call_type == Op.STATICCALL or call_return == Om.OOG else tload_value_set_in_call ), # external tstore overrides value in upper level only in # delegate and callcode slot_tload_after_call: ( tload_value_set_in_call if on_successful_delegate_or_callcode else tload_value_set_before_call ), slot_tload_1_after_call: 12 if on_successful_delegate_or_callcode else 0, slot_tstore_overwrite: 50, # tstore in static call not allowed, reentrancy means # external call here slot_subcall_worked: 0 if on_failing_calls else 1, } ) } tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), to=address_to, gas_price=10, data=Hash(do_reenter), gas_limit=5000000, value=0, ) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip4788_beacon_root/__init__.py ================================================ """Cross-client EIP-4788 Tests.""" ================================================ FILE: tests/cancun/eip4788_beacon_root/conftest.py ================================================ """Shared pytest definitions local to EIP-4788 tests.""" from itertools import count from typing import Dict, Iterator, List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Account, Address, Alloc, AuthorizationTuple, Bytecode, Environment, Hash, Storage, Transaction, add_kzg_version, keccak256, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, SpecHelpers BLOB_COMMITMENT_VERSION_KZG = 1 @pytest.fixture def timestamp() -> int: # noqa: D103 return 12 @pytest.fixture def beacon_roots() -> Iterator[bytes]: """ By default, return an iterator that returns the keccak of an internal counter. """ class BeaconRoots: def __init__(self) -> None: self._counter = count(1) def __iter__(self) -> "BeaconRoots": # Create a fresh iterator with a new counter each time return BeaconRoots() def __next__(self) -> bytes: return keccak256(int.to_bytes(next(self._counter), length=8, byteorder="big")) return BeaconRoots() @pytest.fixture def beacon_root(request: pytest.FixtureRequest, beacon_roots: Iterator[bytes]) -> bytes: # noqa: D103 return Hash(request.param) if hasattr(request, "param") else next(beacon_roots) @pytest.fixture def env(timestamp: int, beacon_root: bytes) -> Environment: # noqa: D103 return Environment( timestamp=timestamp, parent_beacon_block_root=beacon_root, ) @pytest.fixture def call_beacon_root_contract() -> bool: """By default, do not directly call the beacon root contract.""" return False @pytest.fixture def call_type() -> Op: # noqa: D103 return Op.CALL @pytest.fixture def call_value() -> int: # noqa: D103 return 0 @pytest.fixture def call_gas() -> int: # noqa: D103 return Spec.BEACON_ROOTS_CALL_GAS @pytest.fixture def caller_address(pre: Alloc, contract_call_code: Bytecode) -> Address: # noqa: D103 return pre.deploy_contract(contract_call_code, balance=0x10**10) @pytest.fixture def contract_call_code(call_type: Op, call_value: int, call_gas: int) -> Bytecode: """Code to call the beacon root contract.""" args_start, args_length, return_start, return_length = 0x20, Op.CALLDATASIZE, 0x00, 0x20 contract_call_code = Op.CALLDATACOPY(args_start, 0x00, args_length) if call_type == Op.CALL or call_type == Op.CALLCODE: contract_call_code += Op.SSTORE( 0x00, # store the result of the contract call in storage[0] # https://github.com/ethereum/execution-spec-tests/issues/348 call_type( call_gas, Spec.BEACON_ROOTS_ADDRESS, call_value, args_start, args_length, return_start, return_length, ), ) elif call_type == Op.DELEGATECALL or call_type == Op.STATICCALL: # delegatecall and staticcall use one less argument contract_call_code += Op.SSTORE( 0x00, # https://github.com/ethereum/execution-spec-tests/issues/348 call_type( call_gas, Spec.BEACON_ROOTS_ADDRESS, args_start, args_length, return_start, return_length, ), ) contract_call_code += ( Op.SSTORE( # Save the return value of the contract call 0x01, Op.MLOAD(return_start), ) + Op.SSTORE( # Save the length of the return value of the contract call 0x02, Op.RETURNDATASIZE, ) + Op.RETURNDATACOPY( return_start, 0x00, Op.RETURNDATASIZE, ) + Op.SSTORE( 0x03, Op.MLOAD(return_start), ) ) return contract_call_code @pytest.fixture def valid_call() -> bool: """Beacon root contract call validity: defaults to True.""" return True @pytest.fixture def valid_input() -> bool: """Timestamp input to contract call validity: defaults to True.""" return True @pytest.fixture def system_address_balance() -> int: """Balance of the system address.""" return 0 @pytest.fixture(autouse=True) def pre_fund_system_address(pre: Alloc, system_address_balance: int) -> None: """Whether to fund the system address.""" if system_address_balance > 0: pre.fund_address(Address(Spec.SYSTEM_ADDRESS), system_address_balance) @pytest.fixture def tx_to_address(caller_address: Address) -> Address: """Specify the address for the `Transaction`'s `to` field.""" return caller_address @pytest.fixture def auto_access_list() -> bool: """Whether to append the accessed storage keys to the transaction.""" return False @pytest.fixture def access_list(auto_access_list: bool, timestamp: int) -> List[AccessList]: """ Access list included in the transaction to call the beacon root contract. """ if auto_access_list: return [ AccessList( address=Spec.BEACON_ROOTS_ADDRESS, storage_keys=[ timestamp, timestamp + Spec.HISTORY_BUFFER_LENGTH, ], ), ] return [] @pytest.fixture def tx_data(timestamp: int) -> bytes: """Tx data included in the to call the beacon root contract.""" return Hash(timestamp) @pytest.fixture def tx_type() -> int: """ Transaction type to call the caller contract or the beacon root contract directly. By default use a type 2 transaction. """ return 2 @pytest.fixture def tx( pre: Alloc, fork: Fork, tx_to_address: Address, tx_data: bytes, tx_type: int, access_list: List[AccessList], call_beacon_root_contract: bool, ) -> Transaction: """Prepare transaction to call the beacon root contract caller account.""" to = Spec.BEACON_ROOTS_ADDRESS if call_beacon_root_contract else tx_to_address kwargs: Dict = { "ty": tx_type, "sender": pre.fund_eoa(), "data": tx_data, "to": to, "gas_limit": 1_000_000, } if tx_type > 0: kwargs["access_list"] = access_list if tx_type == 3: kwargs["max_fee_per_blob_gas"] = fork.min_base_fee_per_blob_gas() kwargs["blob_versioned_hashes"] = add_kzg_version([0], BLOB_COMMITMENT_VERSION_KZG) if tx_type == 4: signer = pre.fund_eoa(amount=0) kwargs["authorization_list"] = [ AuthorizationTuple( signer=signer, address=Address(0), nonce=0, ) ] if tx_type > 4: raise Exception(f"Unexpected transaction type: '{tx_type}'. Test requires update.") return Transaction(**kwargs) @pytest.fixture def post( caller_address: Address, beacon_root: bytes, valid_call: bool, valid_input: bool, call_beacon_root_contract: bool, ) -> Dict: """ Prepare expected post state for a single contract call based upon the success or failure of the call, and the validity of the timestamp input. """ storage = Storage() if not call_beacon_root_contract: storage = SpecHelpers.expected_storage( beacon_root=beacon_root, valid_call=valid_call, valid_input=valid_input, ) return { caller_address: Account( storage=storage, ), } ================================================ FILE: tests/cancun/eip4788_beacon_root/spec.py ================================================ """Defines EIP-4788 specification constants and functions.""" from dataclasses import dataclass from ethereum_test_tools import Storage @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_4788 = ReferenceSpec("EIPS/eip-4788.md", "efcac43ef9aadd87dd4e0a2fbd14d5d1317eddf3") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-4788 specifications as defined at https://eips.ethereum.org/EIPS/eip-4788#specification. """ BEACON_ROOTS_ADDRESS = 0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02 BEACON_ROOTS_CALL_GAS = 100_000 BEACON_ROOTS_DEPLOYER_ADDRESS = 0x0B799C86A49DEEB90402691F1041AA3AF2D3C875 HISTORY_BUFFER_LENGTH = 8_191 SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FORK_TIMESTAMP = 15_000 # ShanghaiToCancun timestamp @dataclass(frozen=True) class SpecHelpers: """Helper functions closely related to the EIP-4788 specification.""" def timestamp_index(self, timestamp: int) -> int: """Derive the timestamp index into the timestamp ring buffer.""" return timestamp % Spec.HISTORY_BUFFER_LENGTH def root_index(self, timestamp: int) -> int: """Derive the root index into the root ring buffer.""" return self.timestamp_index(timestamp) + Spec.HISTORY_BUFFER_LENGTH @staticmethod def expected_storage( *, beacon_root: bytes, valid_call: bool, valid_input: bool, ) -> Storage: """ Derive expected storage for a given beacon root contract call dependent on: - success or failure of the call - validity of the timestamp input used within the call. """ # By default assume the call is unsuccessful and all keys are zero storage = Storage(dict.fromkeys(range(4), 0)) # type: ignore if valid_call and valid_input: # beacon root contract call is successful storage[0] = 1 storage[1] = beacon_root storage[2] = 32 storage[3] = beacon_root return storage ================================================ FILE: tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py ================================================ """ Tests beacon block root for [EIP-4788: Beacon block root in the EVM](https://eips.ethereum.org/EIPS/eip-4788). Note: To add a new test, add a function that is named `test_`. It must take at least the following arguments: - `state_test` - `env` - `pre` - `tx` - `post` - `valid_call` All other `pytest.fixtures` can be parametrized to generate new combinations and test cases. """ from itertools import count from typing import Callable, Dict, Iterator, List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Hash, Storage, Transaction, Withdrawal, ) from ethereum_test_vm import Opcodes as Op from .spec import Spec, ref_spec_4788 REFERENCE_SPEC_GIT_PATH = ref_spec_4788.git_path REFERENCE_SPEC_VERSION = ref_spec_4788.version def count_factory(start: int, step: int = 1) -> Callable[[], Iterator[int]]: """ Create a factory that returns fresh count iterators to avoid state persistence. """ return lambda: count(start, step) pytestmark = pytest.mark.pre_alloc_group( "beacon_root_tests", reason="Tests beacon root contract functionality using system contract" ) @pytest.mark.parametrize( "call_gas, valid_call", [ pytest.param(Spec.BEACON_ROOTS_CALL_GAS, True), pytest.param(int(Spec.BEACON_ROOTS_CALL_GAS / 100), False), ], ) @pytest.mark.parametrize( "call_type,call_value,valid_input", [ (Op.CALL, 1, True), (Op.CALL, 0, True), (Op.CALLCODE, 0, False), (Op.DELEGATECALL, 0, False), (Op.STATICCALL, 0, True), ], ) @pytest.mark.valid_from("Cancun") def test_beacon_root_contract_calls( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Test calling the beacon root contract in various call contexts. These call contexts are tested: - `CALL` - `DELEGATECALL` - `CALLCODE` - `STATICCALL` for different call gas amounts: - exact gas (valid call) - extra gas (valid call) - insufficient gas (invalid call). The expected result is that the contract call will be executed if the gas amount is met and return the correct`parent_beacon_block_root`. Otherwise the call will be invalid, and not be executed. This is highlighted within storage by storing the return value of each call context. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)], post=post, ) @pytest.mark.parametrize( "timestamp, valid_input", [ (0x0C, True), # twelve (2**32, True), # arbitrary (2**64 - 2, True), # near-max (2**64 - 1, True), # max # TODO: Update t8n to un marshal > 64-bit int # Exception: failed to evaluate: ERROR(10): failed un marshaling stdin # (2**64, False), # overflow # Exception: failed to evaluate: ERROR(10): failed un marshaling stdin # (2**64 + 1, False), # overflow+1 ], ) @pytest.mark.parametrize("auto_access_list", [False, True]) @pytest.mark.parametrize( "system_address_balance", [ pytest.param( 0, id="empty_system_address", marks=pytest.mark.pre_alloc_group( "beacon_root_empty_system", reason="Tests with empty system address balance" ), ), pytest.param( 1, id="one_wei_system_address", marks=pytest.mark.pre_alloc_group( "beacon_root_one_wei_system", reason="Tests with 1 wei system address balance" ), ), pytest.param( int(1e18), id="one_eth_system_address", marks=pytest.mark.pre_alloc_group( "beacon_root_one_eth_system", reason="Tests with 1 ETH system address balance" ), ), ], ) @pytest.mark.valid_from("Cancun") def test_beacon_root_contract_timestamps( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Tests the beacon root contract call across for various valid and invalid timestamps. The expected result is that the contract call will return the correct `parent_beacon_block_root` for a valid input timestamp and return the zero'd 32 bytes value for an invalid input timestamp. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)], post=post, ) @pytest.mark.parametrize( "tx_data", [ pytest.param(bytes(), id="empty_calldata"), pytest.param(int.to_bytes(12, length=1, byteorder="big"), id="one_byte"), pytest.param(int.to_bytes(12, length=31, byteorder="big"), id="31_bytes"), pytest.param(int.to_bytes(12, length=33, byteorder="big"), id="33_bytes"), pytest.param(int.to_bytes(12, length=1024, byteorder="big"), id="1024_bytes"), ], ) @pytest.mark.parametrize("valid_call,valid_input", [(False, False)]) @pytest.mark.parametrize("timestamp", [12]) @pytest.mark.valid_from("Cancun") def test_calldata_lengths( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Tests the beacon root contract call using multiple invalid input lengths. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)], post=post, ) @pytest.mark.parametrize( "beacon_root, timestamp", [ (12, 12), # twelve (2**32, 2**32), # arbitrary (2**64 - 2, 2**64 - 2), # near-max (2**64 - 1, 2**64 - 1), # max ], indirect=["beacon_root"], ) @pytest.mark.parametrize("auto_access_list", [False, True]) @pytest.mark.valid_from("Cancun") def test_beacon_root_equal_to_timestamp( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Tests the beacon root contract call where the beacon root is equal to the timestamp. The expected result is that the contract call will return the `parent_beacon_block_root`, as all timestamps used are valid. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)], post=post, ) @pytest.mark.parametrize("auto_access_list", [False, True]) @pytest.mark.parametrize("call_beacon_root_contract", [True]) @pytest.mark.with_all_tx_types @pytest.mark.valid_from("Cancun") def test_tx_to_beacon_root_contract( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Tests the beacon root contract using a transaction with different types and data lengths. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)], post=post, ) @pytest.mark.parametrize( "tx_data", [ pytest.param(int.to_bytes(0, length=32, byteorder="big"), id="zero_calldata"), ], ) @pytest.mark.parametrize("valid_call,valid_input", [(False, False)]) @pytest.mark.parametrize("timestamp", [12]) @pytest.mark.valid_from("Cancun") def test_invalid_beacon_root_calldata_value( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Tests the beacon root contract call using invalid input values: - zero calldata. Contract should revert. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)], post=post, ) @pytest.mark.parametrize("timestamp", [12]) @pytest.mark.valid_from("Cancun") def test_beacon_root_selfdestruct( blockchain_test: BlockchainTestFiller, beacon_root: bytes, timestamp: int, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Tests that self destructing the beacon root address transfers actors balance correctly. """ # self destruct actor self_destruct_actor_address = pre.deploy_contract( Op.SELFDESTRUCT(Spec.BEACON_ROOTS_ADDRESS), balance=0xBA1, ) # self destruct caller self_destruct_caller_address = pre.deploy_contract( Op.CALL(gas=100_000, address=self_destruct_actor_address) + Op.SSTORE(0, Op.BALANCE(Spec.BEACON_ROOTS_ADDRESS)) ) post = { self_destruct_caller_address: Account( storage=Storage({0: 0xBA1}), # type: ignore ) } blockchain_test( pre=pre, blocks=[ Block( txs=[ Transaction( sender=pre.fund_eoa(), to=self_destruct_caller_address, gas_limit=100_000, ) ] ) ], post=post, ) @pytest.mark.parametrize( "timestamps_factory", [ pytest.param( count_factory( start=Spec.HISTORY_BUFFER_LENGTH - 5, step=1, ), id="buffer_wraparound", ), pytest.param( count_factory( start=12, step=Spec.HISTORY_BUFFER_LENGTH, ), id="buffer_wraparound_overwrite", ), pytest.param( count_factory( start=2**32, step=Spec.HISTORY_BUFFER_LENGTH, ), id="buffer_wraparound_overwrite_high_timestamp", ), pytest.param( count_factory( start=5, step=Spec.HISTORY_BUFFER_LENGTH - 1, ), id="buffer_wraparound_no_overwrite", ), pytest.param( count_factory( start=Spec.HISTORY_BUFFER_LENGTH - 3, step=Spec.HISTORY_BUFFER_LENGTH + 1, ), id="buffer_wraparound_no_overwrite_2", ), ], ) @pytest.mark.parametrize("block_count", [10]) # All tests use 10 blocks @pytest.mark.valid_from("Cancun") def test_multi_block_beacon_root_timestamp_calls( blockchain_test: BlockchainTestFiller, pre: Alloc, timestamps_factory: Callable[[], Iterator[int]], beacon_roots: Iterator[bytes], block_count: int, call_gas: int, call_value: int, ) -> None: """ Tests multiple blocks where each block writes a timestamp to storage and contains one transaction that calls the beacon root contract multiple times. The blocks might overwrite the historical roots buffer, or not, depending on the `timestamps`, and whether they increment in multiples of `Spec.HISTORY_BUFFER_LENGTH` or not. By default, the beacon roots are the keccak of the block number. Each transaction checks the current timestamp and also all previous timestamps, and verifies that the beacon root is correct for all of them if the timestamp is supposed to be in the buffer, which might have been overwritten by a later block. """ # Create fresh iterator to avoid state persistence between test phases timestamps = timestamps_factory() blocks: List[Block] = [] post = {} timestamps_storage: Dict[int, int] = {} roots_storage: Dict[int, bytes] = {} all_timestamps: List[int] = [] sender = pre.fund_eoa() for timestamp, beacon_root, _i in zip( timestamps, beacon_roots, range(block_count), strict=False, ): timestamp_index = timestamp % Spec.HISTORY_BUFFER_LENGTH timestamps_storage[timestamp_index] = timestamp roots_storage[timestamp_index] = beacon_root all_timestamps.append(timestamp) withdraw_index = count(0) current_call_account_code = Bytecode() current_call_account_expected_storage = Storage() # We are going to call the beacon roots contract once for every # timestamp of the current and all previous blocks, and check that the # returned beacon root is still correct only if it was not overwritten. for t in all_timestamps: current_call_account_code += Op.MSTORE(0, t) call_valid = ( timestamp_index in timestamps_storage and timestamps_storage[t % Spec.HISTORY_BUFFER_LENGTH] == t ) current_call_account_code += Op.SSTORE( current_call_account_expected_storage.store_next(0x01 if call_valid else 0x00), Op.CALL( call_gas, Spec.BEACON_ROOTS_ADDRESS, call_value, 0x00, 0x20, 0x20, 0x20, ), ) current_call_account_code += Op.SSTORE( current_call_account_expected_storage.store_next( roots_storage[t % Spec.HISTORY_BUFFER_LENGTH] if call_valid else 0x00 ), Op.MLOAD(0x20), ) current_call_account_address = pre.deploy_contract(current_call_account_code) post[current_call_account_address] = Account( storage=current_call_account_expected_storage, ) blocks.append( Block( txs=[ Transaction( sender=sender, to=current_call_account_address, data=Hash(timestamp), gas_limit=1_000_000, ) ], parent_beacon_block_root=beacon_root, timestamp=timestamp, withdrawals=[ # Also withdraw to the beacon root contract and the system # address Withdrawal( address=Spec.BEACON_ROOTS_ADDRESS, amount=1, index=next(withdraw_index), validator_index=0, ), Withdrawal( address=Spec.SYSTEM_ADDRESS, amount=1, index=next(withdraw_index), validator_index=1, ), ], ) ) blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.parametrize( "timestamps_factory", [pytest.param(count_factory(start=1000, step=1000), id="fork_transition")], ) @pytest.mark.parametrize("block_count", [20]) @pytest.mark.valid_at_transition_to("Cancun") def test_beacon_root_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, timestamps_factory: Callable[[], Iterator[int]], beacon_roots: Iterator[bytes], block_count: int, call_gas: int, call_value: int, fork: Fork, ) -> None: """ Tests the fork transition to cancun and verifies that blocks with timestamp lower than the transition timestamp do not contain beacon roots in the pre-deployed contract. """ # Create fresh iterator to avoid state persistence between test phases timestamps = timestamps_factory() blocks: List[Block] = [] post = {} timestamps_storage: Dict[int, int] = {} roots_storage: Dict[int, bytes] = {} all_timestamps: List[int] = [] timestamps_in_beacon_root_contract: List[int] = [] sender = pre.fund_eoa() for timestamp, beacon_root, i in zip( timestamps, beacon_roots, range(block_count), strict=False ): timestamp_index = timestamp % Spec.HISTORY_BUFFER_LENGTH transitioned = fork.header_beacon_root_required(block_number=i, timestamp=timestamp) if transitioned: # We've transitioned, the current timestamp must contain a value in # the contract timestamps_in_beacon_root_contract.append(timestamp) timestamps_storage[timestamp_index] = timestamp roots_storage[timestamp_index] = beacon_root all_timestamps.append(timestamp) withdraw_index = count(0) current_call_account_code = Bytecode() current_call_account_expected_storage = Storage() # We are going to call the beacon roots contract once for every # timestamp of the current and all previous blocks, and check that the # returned beacon root is correct only if it was after the transition # timestamp. for t in all_timestamps: current_call_account_code += Op.MSTORE(0, t) call_valid = ( t in timestamps_in_beacon_root_contract and timestamp_index in timestamps_storage and timestamps_storage[t % Spec.HISTORY_BUFFER_LENGTH] == t ) current_call_account_code += Op.SSTORE( current_call_account_expected_storage.store_next(0x01 if call_valid else 0x00), Op.CALL( call_gas, Spec.BEACON_ROOTS_ADDRESS, call_value, 0x00, 0x20, 0x20, 0x20, ), ) current_call_account_code += Op.SSTORE( current_call_account_expected_storage.store_next( roots_storage[t % Spec.HISTORY_BUFFER_LENGTH] if call_valid else 0x00 ), Op.MLOAD(0x20), ) current_call_account_address = pre.deploy_contract(current_call_account_code) post[current_call_account_address] = Account( storage=current_call_account_expected_storage, ) blocks.append( Block( txs=[ Transaction( sender=sender, to=current_call_account_address, data=Hash(timestamp), gas_limit=1_000_000, ) ], parent_beacon_block_root=beacon_root if transitioned else None, timestamp=timestamp, withdrawals=[ # Also withdraw to the beacon root contract and the system # address Withdrawal( address=Spec.BEACON_ROOTS_ADDRESS, amount=1, index=next(withdraw_index), validator_index=0, ), Withdrawal( address=Spec.SYSTEM_ADDRESS, amount=1, index=next(withdraw_index), validator_index=1, ), ], ) ) blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.parametrize("timestamp", [15_000]) @pytest.mark.valid_at_transition_to("Cancun") @pytest.mark.pre_alloc_group( "beacon_root_no_contract", reason="This test removes the beacon root system contract" ) def test_no_beacon_root_contract_at_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, beacon_roots: Iterator[bytes], tx: Transaction, timestamp: int, caller_address: Address, fork: Fork, ) -> None: """ Tests the fork transition to cancun in the case where the beacon root pre-deploy was not deployed in time for the fork. """ assert fork.header_beacon_root_required(block_number=1, timestamp=timestamp) blocks: List[Block] = [ Block( txs=[tx], parent_beacon_block_root=next(beacon_roots), timestamp=timestamp, withdrawals=[ # Also withdraw to the beacon root contract and the system # address Withdrawal( address=Spec.BEACON_ROOTS_ADDRESS, amount=1, index=0, validator_index=0, ), Withdrawal( address=Spec.SYSTEM_ADDRESS, amount=1, index=1, validator_index=1, ), ], ) ] pre[Spec.BEACON_ROOTS_ADDRESS] = Account( code=b"", # Remove the code that is automatically allocated on Cancun # fork nonce=0, balance=0, ) post = { Spec.BEACON_ROOTS_ADDRESS: Account( storage={ timestamp % Spec.HISTORY_BUFFER_LENGTH: 0, (timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH: 0, }, code=b"", nonce=0, balance=int(1e9), ), caller_address: Account( storage={0: 1}, # Successful call because the contract is not there, but # nothing else is stored ), } blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.parametrize( "timestamp", [ pytest.param(15_000, id="deploy_on_shanghai"), pytest.param(30_000, id="deploy_on_cancun"), ], ) @pytest.mark.valid_at_transition_to("Cancun") @pytest.mark.pre_alloc_group( "beacon_root_deploy_contract", reason=( "This test is parametrized with a hard-coded address (the beacon root contract deployer " "address); they can't be in the same pre alloc group." ), ) def test_beacon_root_contract_deploy( blockchain_test: BlockchainTestFiller, pre: Alloc, beacon_root: bytes, tx: Transaction, timestamp: int, post: Dict, fork: Fork, ) -> None: """ Tests the fork transition to cancun deploying the contract during Shanghai and verifying the code deployed and its functionality after Cancun. """ assert fork.header_beacon_root_required(block_number=1, timestamp=timestamp) tx_gas_limit = 0x3D090 tx_gas_price = 0xE8D4A51000 deployer_required_balance = tx_gas_limit * tx_gas_price deploy_tx = Transaction( ty=0, nonce=0, to=None, gas_limit=tx_gas_limit, gas_price=tx_gas_price, value=0, data=bytes.fromhex( "60618060095f395ff33373fffffffffffffffffffffffffffffffffffffffe14604d576020361460" "24575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f526020" "5ff35b5f5ffd5b62001fff42064281555f359062001fff015500" ), v=0x1B, r=0x539, s=0x1B9B6EB1F0, protected=False, ).with_signature_and_sender() deployer_address = deploy_tx.sender assert deployer_address is not None assert Address(deployer_address) == Spec.BEACON_ROOTS_DEPLOYER_ADDRESS blocks: List[Block] = [] beacon_root_contract_storage: Dict = {} for i, current_timestamp in enumerate(range(timestamp // 2, timestamp + 1, timestamp // 2)): if i == 0: blocks.append( Block( # Deployment block txs=[deploy_tx], parent_beacon_block_root=( beacon_root if fork.header_beacon_root_required( block_number=1, timestamp=current_timestamp ) else None ), timestamp=timestamp // 2, withdrawals=[ # Also withdraw to the beacon root contract and the # system address Withdrawal( address=Spec.BEACON_ROOTS_ADDRESS, amount=1, index=0, validator_index=0, ), Withdrawal( address=Spec.SYSTEM_ADDRESS, amount=1, index=1, validator_index=1, ), ], ) ) beacon_root_contract_storage[current_timestamp % Spec.HISTORY_BUFFER_LENGTH] = 0 beacon_root_contract_storage[ (current_timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH ] = 0 elif i == 1: blocks.append( Block( # Contract already deployed txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp, withdrawals=[ # Also withdraw to the beacon root contract and the # system address Withdrawal( address=Spec.BEACON_ROOTS_ADDRESS, amount=1, index=2, validator_index=0, ), Withdrawal( address=Spec.SYSTEM_ADDRESS, amount=1, index=3, validator_index=1, ), ], ), ) beacon_root_contract_storage[current_timestamp % Spec.HISTORY_BUFFER_LENGTH] = ( current_timestamp ) beacon_root_contract_storage[ (current_timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH ] = beacon_root else: raise AssertionError("This test should only have two blocks") expected_code = fork.pre_allocation_blockchain()[Spec.BEACON_ROOTS_ADDRESS]["code"] pre[Spec.BEACON_ROOTS_ADDRESS] = Account( code=b"", # Remove the code that is automatically allocated on Cancun # fork nonce=0, balance=0, ) pre[deployer_address] = Account( balance=deployer_required_balance, ) post[Spec.BEACON_ROOTS_ADDRESS] = Account( storage=beacon_root_contract_storage, code=expected_code, nonce=1, balance=int(2e9), ) post[Spec.SYSTEM_ADDRESS] = Account( storage={}, code=b"", nonce=0, balance=int(2e9), ) post[deployer_address] = Account( balance=175916000000000000, # It doesn't consume all the balance :( nonce=1, ) blockchain_test( pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/cancun/eip4844_blobs/__init__.py ================================================ """Cross-client EIP-4844 Tests.""" ================================================ FILE: tests/cancun/eip4844_blobs/common.py ================================================ """Common constants, classes & functions local to EIP-4844 tests.""" from typing import Literal INF_POINT = (0xC0 << 376).to_bytes(48, byteorder="big") Z = 0x623CE31CF9759A5C8DAF3A357992F9F3DD7F9339D8998BC8E68373E54F00B75E Z_Y_INVALID_ENDIANNESS: Literal["little", "big"] = "little" Z_Y_VALID_ENDIANNESS: Literal["little", "big"] = "big" ================================================ FILE: tests/cancun/eip4844_blobs/conftest.py ================================================ """Pytest (plugin) definitions local to EIP-4844 tests.""" from typing import Iterable import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Block, Environment, Hash, Transaction, add_kzg_version from .spec import Spec @pytest.fixture def block_base_fee_per_gas() -> int: """Return default max fee per gas for transactions sent during test.""" return 7 @pytest.fixture def target_blobs_per_block(fork: Fork) -> int: """Return default number of blobs to be included in the block.""" return fork.target_blobs_per_block() @pytest.fixture def max_blobs_per_block(fork: Fork) -> int: """Return default number of blobs to be included in the block.""" return fork.max_blobs_per_block() @pytest.fixture def max_blobs_per_tx(fork: Fork) -> int: """Return max number of blobs per transaction.""" return fork.max_blobs_per_tx() @pytest.fixture def blob_gas_per_blob(fork: Fork) -> int: """Return default blob gas cost per blob.""" return fork.blob_gas_per_blob() @pytest.fixture(autouse=True) def parent_excess_blobs() -> int | None: """ Return default excess blobs of the parent block. Can be overloaded by a test case to provide a custom parent excess blob count. """ return 10 # Defaults to a blob gas price of 1. @pytest.fixture(autouse=True) def parent_blobs() -> int | None: """ Return default data blobs of the parent blob. Can be overloaded by a test case to provide a custom parent blob count. """ return 0 @pytest.fixture def parent_excess_blob_gas( parent_excess_blobs: int | None, blob_gas_per_blob: int, ) -> int | None: """ Calculate the excess blob gas of the parent block from the excess blobs. """ if parent_excess_blobs is None: return None assert parent_excess_blobs >= 0 return parent_excess_blobs * blob_gas_per_blob @pytest.fixture def excess_blob_gas( fork: Fork, parent_excess_blobs: int | None, parent_blobs: int | None, block_base_fee_per_gas: int, ) -> int | None: """ Calculate the excess blob gas of the block under test from the parent block. Value can be overloaded by a test case to provide a custom excess blob gas. """ if parent_excess_blobs is None or parent_blobs is None: return None return fork.excess_blob_gas_calculator()( parent_excess_blobs=parent_excess_blobs, parent_blob_count=parent_blobs, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def correct_excess_blob_gas( fork: Fork, parent_excess_blobs: int | None, parent_blobs: int | None, block_base_fee_per_gas: int, ) -> int: """ Calculate the correct excess blob gas of the block under test from the parent block. Should not be overloaded by a test case. """ if parent_excess_blobs is None or parent_blobs is None: return 0 return fork.excess_blob_gas_calculator()( parent_excess_blobs=parent_excess_blobs, parent_blob_count=parent_blobs, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def block_fee_per_blob_gas( fork: Fork, correct_excess_blob_gas: int, ) -> int: """Calculate the blob gas price for the current block.""" get_blob_gas_price = fork.blob_gas_price_calculator() return get_blob_gas_price(excess_blob_gas=correct_excess_blob_gas) @pytest.fixture def blob_gas_price( fork: Fork, excess_blob_gas: int | None, ) -> int | None: """Return blob gas price for the block of the test.""" if excess_blob_gas is None: return None get_blob_gas_price = fork.blob_gas_price_calculator() return get_blob_gas_price( excess_blob_gas=excess_blob_gas, ) @pytest.fixture def genesis_excess_blob_gas( parent_excess_blob_gas: int | None, parent_blobs: int, target_blobs_per_block: int, blob_gas_per_blob: int, ) -> int: """Return default excess blob gas for the genesis block.""" excess_blob_gas = parent_excess_blob_gas if parent_excess_blob_gas else 0 if parent_blobs: # We increase the excess blob gas of the genesis because # we cannot include blobs in the genesis, so the # test blobs are actually in block 1. excess_blob_gas += target_blobs_per_block * blob_gas_per_blob return excess_blob_gas @pytest.fixture def env( block_base_fee_per_gas: int, genesis_excess_blob_gas: int, ) -> Environment: """ Prepare the environment of the genesis block for all blockchain tests. """ return Environment( excess_blob_gas=genesis_excess_blob_gas, blob_gas_used=0, base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def tx_value() -> int: """ Return default value contained by the transactions sent during test. Can be overloaded by a test case to provide a custom transaction value. """ return 1 @pytest.fixture def tx_calldata() -> bytes: """Return default calldata in transactions sent during test.""" return b"" @pytest.fixture(autouse=True) def tx_max_fee_per_gas( block_base_fee_per_gas: int, ) -> int: """ Max fee per gas value used by all transactions sent during test. By default the max fee per gas is the same as the block fee per gas. Can be overloaded by a test case to test rejection of transactions where the max fee per gas is insufficient. """ return block_base_fee_per_gas @pytest.fixture def tx_max_priority_fee_per_gas() -> int: """ Return default max priority fee per gas for transactions sent during test. Can be overloaded by a test case to provide a custom max priority fee per gas. """ return 0 @pytest.fixture def tx_max_fee_per_blob_gas_multiplier() -> int: """ Return default max fee per blob gas multiplier for transactions sent during test. Can be overloaded by a test case to provide a custom max fee per blob gas multiplier. """ return 1 @pytest.fixture def tx_max_fee_per_blob_gas_delta() -> int: """ Return default max fee per blob gas delta for transactions sent during test. Can be overloaded by a test case to provide a custom max fee per blob gas delta. """ return 0 @pytest.fixture def tx_max_fee_per_blob_gas( # noqa: D103 blob_gas_price: int | None, tx_max_fee_per_blob_gas_multiplier: int, tx_max_fee_per_blob_gas_delta: int, ) -> int: """ Return default max fee per blob gas for transactions sent during test. By default, it is set to the blob gas price of the block. Can be overloaded by a test case to test rejection of transactions where the max fee per blob gas is insufficient. """ if blob_gas_price is None: # When fork transitioning, the default blob gas price is 1. return 1 return (blob_gas_price * tx_max_fee_per_blob_gas_multiplier) + tx_max_fee_per_blob_gas_delta @pytest.fixture def non_zero_blob_gas_used_genesis_block( pre: Alloc, parent_blobs: int, fork: Fork, genesis_excess_blob_gas: int, parent_excess_blob_gas: int, tx_max_fee_per_gas: int, block_base_fee_per_gas: int, ) -> Block | None: """ For test cases with a non-zero blobGasUsed field in the original genesis block header we must instead utilize an intermediate block to act on its behalf. Genesis blocks with a non-zero blobGasUsed field are invalid as they do not have any blob txs. For the intermediate block to align with default genesis values, we must add TARGET_BLOB_GAS_PER_BLOCK to the excessBlobGas of the genesis value, expecting an appropriate drop to the intermediate block. Similarly, we must add parent_blobs to the intermediate block within a blob tx such that an equivalent blobGasUsed field is wrote. For forks >= Osaka where the MAX_BLOBS_PER_TX is introduced, we split the blobs across multiple transactions to respect the MAX_BLOBS_PER_TX limit. """ if parent_blobs == 0: return None excess_blob_gas_calculator = fork.excess_blob_gas_calculator(block_number=1) calculated_excess_blob_gas = excess_blob_gas_calculator( parent_excess_blob_gas=genesis_excess_blob_gas, parent_blob_count=0, parent_base_fee_per_gas=block_base_fee_per_gas, ) assert parent_excess_blob_gas == calculated_excess_blob_gas, ( f"parent excess blob gas mismatch: expected {parent_excess_blob_gas}, " f"got {calculated_excess_blob_gas} for {parent_blobs} blobs " f"with base_fee_per_gas {block_base_fee_per_gas}" ) sender = pre.fund_eoa(10**27) empty_account_destination = pre.fund_eoa(0) blob_gas_price_calculator = fork.blob_gas_price_calculator(block_number=1) # Split blobs into chunks when MAX_BLOBS_PER_TX < MAX_BLOBS_PER_BLOCK to # respect per-tx limits. Allows us to keep single txs for forks where per- # tx and per-block limits are equal, hitting coverage for block level blob # gas validation when parent_blobs > MAX_BLOBS_PER_BLOCK. max_blobs_per_tx = ( fork.max_blobs_per_tx() if fork.max_blobs_per_tx() < fork.max_blobs_per_block() else parent_blobs ) blob_chunks = [ range(i, min(i + max_blobs_per_tx, parent_blobs)) for i in range(0, parent_blobs, max_blobs_per_tx) ] def create_blob_transaction(blob_range: Iterable[int]) -> Transaction: return Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=empty_account_destination, value=1, gas_limit=21_000, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=0, max_fee_per_blob_gas=blob_gas_price_calculator( excess_blob_gas=parent_excess_blob_gas, ), access_list=[], blob_versioned_hashes=add_kzg_version( [Hash(x) for x in blob_range], Spec.BLOB_COMMITMENT_VERSION_KZG, ), ) txs = [create_blob_transaction(chunk) for chunk in blob_chunks] return Block(txs=txs) ================================================ FILE: tests/cancun/eip4844_blobs/point_evaluation_vectors/README.md ================================================ # KZG Point Evaluation Test Vectors This directory contains test vectors for the KZG point evaluation algorithm that are loaded and used throughout different tests. Each file must contain a JSON list of objects, each with the following fields: - `name`: a string describing the test case - `input`: object containing `commitment`, `proof`, `z` and `y` - `output`: expected output of the evaluation, true, false or null. ## Generating The Test Vectors (used in v1.0.6 and on) From execution-spec-tests release v1.0.6 and on, the point evaluation test vectors were generated using commit [63aa303c](https://github.com/ethereum/consensus-specs/tree/63aa303c5a2cf46ea98edbf3f82286079651bb78) from the [official-kzg](https://github.com/ethereum/consensus-specs/commits/official-kzg) [consensus-specs](https://github.com/ethereum/consensus-specs) branch. The test vectors were generated as following: 1. In the consensus-specs repo: ```console cd tests/generators/kzg_4844/ rm -rf /tmp/kzg_4844_output mkdir /tmp/kzg_4844_output python -m main --output /tmp/kzg_4844_output ``` 2. In the execution-spec-tests repo: ```console cd tests/cancun/4844_blobs/point_evaluation_vectors/ pip install -r requirements.txt python concat_kzg_vectors_to_json.py \ --input /tmp/kzg_4844_output/general/deneb/kzg/verify_kzg_proof/kzg-mainnet/ --output go_kzg_4844_verify_kzg_proof.json ``` ## Previous Versions of the Test Vectors (used up to v1.0.5) The test vectors up and including execution-spec-tests [release v1.0.5](https://github.com/ethereum/execution-spec-tests/releases/tag/v1.0.5) were: - `go_kzg_4844_verify_kzg_proof.json`: test vectors from the [go-kzg-4844](https://github.com/crate-crypto/go-kzg-4844) repository. ================================================ FILE: tests/cancun/eip4844_blobs/point_evaluation_vectors/concat_kzg_vectors_to_json.py ================================================ """ Helper script to concatenate all the point evaluation test data.yaml files in a directory into a single JSON file for easier consumption in tests. """ import argparse import json from pathlib import Path import yaml def gather_yaml_data(directory: Path) -> list[dict[str, str]]: # noqa: D103 all_data = [] # Loop through each directory in the main directory for sub_dir in sorted(directory.iterdir()): if sub_dir.is_dir(): yaml_file_path = sub_dir / "data.yaml" # Check if data.yaml exists in the directory if yaml_file_path.exists(): with yaml_file_path.open("r") as yaml_file: yaml_data = yaml.safe_load(yaml_file) # Append the data along with the directory name all_data.append( { "input": yaml_data["input"], "output": yaml_data["output"], "name": sub_dir.name, } ) return all_data def main() -> None: # noqa: D103 parser = argparse.ArgumentParser( description="Concatenate the data from multiple data.yaml files into one JSON file." ) parser.add_argument( "-i", "--input", type=Path, required=True, help="Input directory containing the YAML files.", ) parser.add_argument( "-o", "--output", type=Path, required=True, help="Path to the output JSON file." ) args = parser.parse_args() data = gather_yaml_data(args.input) with args.output.open("w") as json_file: json.dump(data, json_file, indent=2) if __name__ == "__main__": main() ================================================ FILE: tests/cancun/eip4844_blobs/point_evaluation_vectors/go_kzg_4844_verify_kzg_proof.json ================================================ [ { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_02e696ada7d4631d" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_05c1f3685f3393f0" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_177b58dc7a46b08f" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x92c51ff81dd71dab71cefecd79e8274b4b7ba36a0f40e2dc086bc4061c7f63249877db23297212991fd63e07b7ebc348" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x73e66878b46ae3705eb6a46a89213de7d3686828bfce5c19400fffff00100001", "proof": "0xb82ded761997f2c6f1bb3db1e1dada2ef06d936551667c82f659b75f99d2da2068b81340823ee4e829a93c9fbed7810d" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_26b753dec0560daa" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x1522a4a7f34e1ea350ae07c29c96c7e79655aa926122e95fe69fcbd932ca49e9", "proof": "0xa62ad71d14c5719385c0686f1871430475bf3a00f0aa3f7b8dd99a9abc2160744faf0070725e00b60ad9a026a15b1a8c" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_31ebd010e6098750" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_3208425794224c3f" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_36817bfd67de97a8" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffc", "proof": "0xaa86c458b3065e7ec244033a2ade91a7499561f482419a3a372c42a636dad98262a2ce926d142fd7cfe26ca148efe8b4" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_392169c16a2e5ef6" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_395cf6d697d1a743" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x50625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359", "proof": "0xb72d80393dc39beea3857cb3719277138876b2b207f1d5e54dd62a14e3242d123b5a6db066181ff01a51c26c9d2f400b" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x6d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321", "proof": "0xa444d6bb5aadc3ceb615b50d6606bd54bfe529f59247987cd1ab848d19de599a9052f1835fb0d0d44cf70183e19a68c9" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_3c87ec986c2656c2" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x2bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0", "proof": "0x89012990b0ca02775bd9df8145f6c936444b83f54df1f5f274fb4312800a6505dd000ee8ec7b0ea6d72092a3daf0bffb" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_420f2a187ce77035" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x443e7af5274b52214ea6c775908c54519fea957eecd98069165a8b771082fd51", "proof": "0xa060b350ad63d61979b80b25258e7cc6caf781080222e0209b4a0b074decca874afc5c41de3313d8ed217d905e6ada43" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_444b73ff54a19b44" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_53a9bdf4f75196da" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_585454b31673dd62" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x58cdc98c4c44791bb8ba7e58a80324ef8c021c79c68e253c430fa2663188f7f2", "proof": "0x9506a8dc7f3f720a592a79a4e711e28d8596854bac66b9cb2d6d361704f1735442d47ea09fda5e0984f0928ce7d2f5f6" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_7db4f140a955dd1a" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0xb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609f" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_83e53423a2dd93fe" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xb9241c6816af6388d1014cd4d7dd21662a6e3d47f96c0257bce642b70e8e375839a880864638669c6a709b414ab8bffc" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_9b24f8997145435c" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_9b754afb690c47e1" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_a0be66af9a97ea52" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x6c28d6edfea2f5e1638cb1a8be8197549d52e133fa9dae87e52abb45f7b192dd", "proof": "0x8a46b67dcba4e3aa66f9952be69e1ecbc24e21d42b1df2bfe1c8e28431c6221a3f1d09808042f5624e857710cb24fb69" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_af669445747d2585" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x64d3b6baf69395bde2abd1d43f99be66bc64581234fd363e2ae3a0d419cfc3fc", "proof": "0x893acd46552b81cc9e5ff6ca03dad873588f2c61031781367cfea2a2be4ef3090035623338711b3cf7eff4b4524df742" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_af8b75f664ed7d43" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x6a75e4fe63e5e148c853462a680c3e3ccedea34719d28f19bf1b35ae4eea37d6", "proof": "0xa38758fca85407078c0a7e5fd6d38b34340c809baa0e1fed9deaabb11aa503062acbbe23fcbe620a21b40a83bfa71b89" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_b6cb6698327d9835" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xa256a681861974cdf6b116467044aa75c85b01076423a92c3335b93d10bf2fcb99b943a53adc1ab8feb6b475c4688948" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x24d25032e67a7e6a4910df5834b8fe70e6bcfeeac0352434196bdf4b2485d5a1", "proof": "0x873033e038326e87ed3e1276fd140253fa08e9fc25fb2d9a98527fc22a2c9612fbeafdad446cbc7bcdbdcd780af2c16a" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_c5e1490d672d026d" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x2c9ae4f1d6d08558d7027df9cc6b248c21290075d2c0df8a4084d02090b3fa14", "proof": "0xb059c60125debbbf29d041bac20fd853951b64b5f31bfe2fa825e18ff49a259953e734b3d57119ae66f7bd79de3027f6" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_cae5d3491190b777" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x4882cf0609af8c7cd4c256e63a35838c95a9ebbf6122540ab344b42fd66d32e1", "proof": "0x987ea6df69bbe97c23e0dd948cf2d4490824ba7fea5af812721b2393354b0810a9dba2c231ea7ae30f26c412c7ea6e3a" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_d0992bc0387790a4" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x5fd58150b731b4facfcdd89c0e393ff842f5f2071303eff99b51e103161cd233", "proof": "0x94425f5cf336685a6a4e806ad4601f4b0d3707a655718f968c57e225f0e4b8d5fd61878234f25ec59d090c07ea725cf4" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_d736268229bd87ec" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x549345dd3612e36fab0ab7baffe3faa5b820d56b71348c89ecaf63f7c4f85370", "proof": "0xa35c4f136a09a33c6437c26dc0c617ce6548a14bc4af7127690a411f5e1cde2f73157365212dbcea6432e0e7869cb006" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_e68d7111a2364a49" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x5ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0", "proof": "0xa1fcd37a924af9ec04143b44853c26f6b0738f6e15a3e0755057e7d5460406c7e148adb0e2d608982140d0ae42fe0b3b" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x1ed7d14d1b3fb1a1890d67b81715531553ad798df2009b4311d9fe2bea6cb964", "proof": "0xa71f21ca51b443ad35bb8a26d274223a690d88d9629927dc80b0856093e08a372820248df5b8a43b6d98fd52a62fa376" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x61157104410181bdc6eac224aa9436ac268bdcfeecb6badf71d228adda820af3", "proof": "0x809adfa8b078b0921cdb8696ca017a0cc2d5337109016f36a766886eade28d32f205311ff5def247c3ddba91896fae97" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_f7f44e1e864aa967" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_ffa6e97b97146517" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": true, "name": "verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x9779b8337f00de6aeac881256198bd2db2fe95bc3127ad9e6440d9e4d1e785b455f55fcfe80a3434dc40f8e6df85be88" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x73e66878b46ae3705eb6a46a89213de7d3686828bfce5c19400fffff00100001", "proof": "0x90f53a4837bbde6ab0838fef0c0be5339ab03a78342c221cf6b2d6e465d01a3d47585a808c9d8d25dee885007deeb107" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_26b753dec0560daa" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x1522a4a7f34e1ea350ae07c29c96c7e79655aa926122e95fe69fcbd932ca49e9", "proof": "0xb9b65c2ebc89e669cf19e82fb178f0d1e9c958edbebe9ead62e97e95e2dcdc4972729fb9661f0cae3532b71b2664a8c1" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_31ebd010e6098750" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_3208425794224c3f" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffc", "proof": "0xb08a5afbb1717334e08e05576b07bff58e8851d8cfd9ea71da1ab4233ad4217cffabd669dfa89c3ebf4c44f91694a2f4" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x50625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359", "proof": "0x90559bfd8e58f5d144588a1a959c93aba58607777e09893f088e404eb2dc47c0269ed8e47c1be79ea07ae726abd921a8" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x6d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321", "proof": "0x8d72dc4eec977090f452b412a6b0a3cdced2ea6b622ebb6e289c7e05d85cc715b93eca244123c84a60b3ecbf33373903" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x2bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0", "proof": "0x99c282db3a79a9ec1553306515e6a71dc43df1ddbd1dbd9d5b71f3c1798ef482f5e1fd84500b0e47c82f72a189ecd526" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_420f2a187ce77035" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x443e7af5274b52214ea6c775908c54519fea957eecd98069165a8b771082fd51", "proof": "0xa7de1e32bb336b85e42ff5028167042188317299333f091dd88675e84a550577bfa564b2f57cd2498e2acf875e0aaa40" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_585454b31673dd62" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x58cdc98c4c44791bb8ba7e58a80324ef8c021c79c68e253c430fa2663188f7f2", "proof": "0xb0ac600174134691bf9d91fee448b4d58c127356567da1c456b9c38468909d4effe6b7faa11177e1f96ee5d2834df001" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0x8e3069b19e6e71aed9b7dc8fbba13e4217d91cfc59be47cfaa7d09ef626242517541992c0f76091ddabf271682cc7c2c" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0xafc13cef6ed41f7abe142d32d7b5354e5664bd4b6d52080460dd404dc2cb26269c24826d2bcd0152d0b55ee0a9e90289" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_9b24f8997145435c" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1" }, { "input": { "commitment": "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x0000000000000000000000000000000000000000000000000000000000000002", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x6c28d6edfea2f5e1638cb1a8be8197549d52e133fa9dae87e52abb45f7b192dd", "proof": "0xa88d68fe3ad0d09b07f4605b1364c8d4804bf7096dae003d821cc01c3b7d35c6d1fdae14e2db3c05e1cdcea7c7b7f262" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_af669445747d2585" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x64d3b6baf69395bde2abd1d43f99be66bc64581234fd363e2ae3a0d419cfc3fc", "proof": "0xaf08cbca9deec336f2a56ca0b202995830f238fc3cb2ecdbdc0bbb6419e3e60507e823ff7dcbd17394cea55bc514716c" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x6a75e4fe63e5e148c853462a680c3e3ccedea34719d28f19bf1b35ae4eea37d6", "proof": "0x861a2aef7aa82db033bfa125b9f756afecaf1db28384925d5007bcf7dff1a53b72bdf522610303075aeecab41685d720" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x82f1cd05471ab6ff21bcfd5c3369cba05b03a872a10829236d184fe1872767c391c2aa7e3b85babb1e6093b7224e7732" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62" }, { "input": { "commitment": "0xb7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x24d25032e67a7e6a4910df5834b8fe70e6bcfeeac0352434196bdf4b2485d5a1", "proof": "0xacd56791e0ab0d1b3802021862013418993da2646e87140e12631e2914d9e6c676466aa3adfc91b61f84255544cab544" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x2c9ae4f1d6d08558d7027df9cc6b248c21290075d2c0df8a4084d02090b3fa14", "proof": "0xa4cc8c419ade0cf043cbf30f43c8f7ee6da3ab8d2c15070f323e5a13a8178fe07c8f89686e5fd16565247b520028251b" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_cae5d3491190b777" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x4882cf0609af8c7cd4c256e63a35838c95a9ebbf6122540ab344b42fd66d32e1", "proof": "0xb8f731ba6a52e419ffc843c50d2947d30e933e3a881b208de54149714ece74a599503f84c6249b5fd8a7c70189882a6b" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4" }, { "input": { "commitment": "0x93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x5fd58150b731b4facfcdd89c0e393ff842f5f2071303eff99b51e103161cd233", "proof": "0x84c349506215a2d55f9d06f475b8229c6dedc08fd467f41fabae6bb042c2d0dbdbcd5f7532c475e479588eec5820fd37" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_d736268229bd87ec" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x549345dd3612e36fab0ab7baffe3faa5b820d56b71348c89ecaf63f7c4f85370", "proof": "0x94fce36bf7e9f0ed981728fcd829013de96f7d25f8b4fe885059ec24af36f801ffbf68ec4604ef6e5f5f800f5cf31238" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x5ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0", "proof": "0xb3477fc9a5bfab5fdb5523251818ee5a6d52613c59502a3d2df58217f4e366cd9ef37dee55bf2c705a2b08e7808b6fa0" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6" }, { "input": { "commitment": "0xb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x1ed7d14d1b3fb1a1890d67b81715531553ad798df2009b4311d9fe2bea6cb964", "proof": "0x98e15cbf800b69b90bfcaf1d907a9889c7743f7e5a19ee4b557471c005600f56d78e3dd887b2f5b87d76405b80dd2115" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0x98613e9e1b1ed52fc2fdc54e945b863ff52870e6565307ff9e32327196d7a03c428fc51a9abedc97de2a68daa1274b50" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x61157104410181bdc6eac224aa9436ac268bdcfeecb6badf71d228adda820af3", "proof": "0xa1d8f2a5ab22acdfc1a9492ee2e1c2cbde681b51b312bf718821937e5088cd8ee002b718264027d10c5c5855dabe0353" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967" }, { "input": { "commitment": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x0000000000000000000000000000000000000000000000000000000000000000", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000", "y": "0x304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffc", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000000", "y": "0x50625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306", "y": "0x6d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000002", "y": "0x2bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c62", "y": "0x5ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0", "proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }, "output": false, "name": "verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6" }, { "input": { "commitment": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0xb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609f" }, "output": null, "name": "verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d" }, { "input": { "commitment": "0x8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0xb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609f" }, "output": null, "name": "verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91" }, { "input": { "commitment": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0xb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609f" }, "output": null, "name": "verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757" }, { "input": { "commitment": "0x8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde0", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0xb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609f" }, "output": null, "name": "verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6" }, "output": null, "name": "verify_kzg_proof_case_invalid_proof_1b44e341d56c757d" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0x8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" }, "output": null, "name": "verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00" }, "output": null, "name": "verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757" }, { "input": { "commitment": "0xa421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x1824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe", "proof": "0x8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde0" }, "output": null, "name": "verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_y_35d08d612aad2197" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0xffffffffffffffffffffffffffffffff00000000000000000000000000000000", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_y_4aa6def8c35c9097" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x00000000000000000000000000000000000000000000000000000000000000", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_y_4e51cef08a61606f" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000002", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x000000000000000000000000000000000000000000000000000000000000000000", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_y_b358a2e763727b70" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x0000000000000000000000000000000000000000000000000000000000000001", "y": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_z_35d08d612aad2197" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0xffffffffffffffffffffffffffffffff00000000000000000000000000000000", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_z_4aa6def8c35c9097" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x00000000000000000000000000000000000000000000000000000000000000", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_z_4e51cef08a61606f" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000002", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x000000000000000000000000000000000000000000000000000000000000000000", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_z_b358a2e763727b70" }, { "input": { "commitment": "0x8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7", "z": "0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", "y": "0x60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec9", "proof": "0xb30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43" }, "output": null, "name": "verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9" } ] ================================================ FILE: tests/cancun/eip4844_blobs/point_evaluation_vectors/requirements.txt ================================================ # additional requirements for concat_kzg_vectors_to_json.py PyYAML ================================================ FILE: tests/cancun/eip4844_blobs/spec.py ================================================ """Defines EIP-4844 specification constants and functions.""" import itertools from dataclasses import dataclass from hashlib import sha256 from typing import List, Optional, Tuple from ethereum_test_forks import Fork from ethereum_test_tools import Transaction @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_4844 = ReferenceSpec("EIPS/eip-4844.md", "de2e4a46ad93fc04e6fe3174dc6e90a3307bdb5f") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-4844 specifications as defined at https://eips.ethereum.org/EIPS/eip-4844#parameters. If the parameter is not currently used within the tests, it is commented out. """ BLOB_TX_TYPE = 0x03 FIELD_ELEMENTS_PER_BLOB = 4096 BLS_MODULUS = 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001 BLOB_COMMITMENT_VERSION_KZG = 1 POINT_EVALUATION_PRECOMPILE_ADDRESS = 10 POINT_EVALUATION_PRECOMPILE_GAS = 50_000 # MAX_VERSIONED_HASHES_LIST_SIZE = 2**24 # MAX_CALLDATA_SIZE = 2**24 # MAX_ACCESS_LIST_SIZE = 2**24 # MAX_ACCESS_LIST_STORAGE_KEYS = 2**24 # MAX_TX_WRAP_COMMITMENTS = 2**12 # LIMIT_BLOBS_PER_TX = 2**12 HASH_OPCODE_BYTE = 0x49 HASH_GAS_COST = 3 GAS_PER_BLOB = 2**17 @classmethod def kzg_to_versioned_hash( cls, kzg_commitment: bytes | int, # 48 bytes blob_commitment_version_kzg: Optional[bytes | int] = None, ) -> bytes: """Calculate versioned hash for a given KZG commitment.""" if blob_commitment_version_kzg is None: blob_commitment_version_kzg = cls.BLOB_COMMITMENT_VERSION_KZG if isinstance(kzg_commitment, int): kzg_commitment = kzg_commitment.to_bytes(48, "big") if isinstance(blob_commitment_version_kzg, int): blob_commitment_version_kzg = blob_commitment_version_kzg.to_bytes(1, "big") return blob_commitment_version_kzg + sha256(kzg_commitment).digest()[1:] @classmethod def get_total_blob_gas(cls, *, tx: Transaction, blob_gas_per_blob: int) -> int: """Calculate the total blob gas for a transaction.""" if tx.blob_versioned_hashes is None: return 0 return blob_gas_per_blob * len(tx.blob_versioned_hashes) @dataclass(frozen=True) class SpecHelpers: """ Define parameters and helper functions that are tightly coupled to the 4844 spec but not strictly part of it. """ BYTES_PER_FIELD_ELEMENT = 32 @classmethod def get_min_excess_blob_gas_for_blob_gas_price( cls, *, fork: Fork, blob_gas_price: int, ) -> int: """ Get the minimum required excess blob gas value to get a given blob gas cost in a block. """ current_excess_blob_gas = 0 current_blob_gas_price = 1 get_blob_gas_price = fork.blob_gas_price_calculator() gas_per_blob = fork.blob_gas_per_blob() while current_blob_gas_price < blob_gas_price: current_excess_blob_gas += gas_per_blob current_blob_gas_price = get_blob_gas_price(excess_blob_gas=current_excess_blob_gas) return current_excess_blob_gas @classmethod def get_min_excess_blobs_for_blob_gas_price( cls, *, fork: Fork, blob_gas_price: int, ) -> int: """ Get the minimum required excess blobs to get a given blob gas cost in a block. """ gas_per_blob = fork.blob_gas_per_blob() return ( cls.get_min_excess_blob_gas_for_blob_gas_price( fork=fork, blob_gas_price=blob_gas_price, ) // gas_per_blob ) @classmethod def get_blob_combinations( cls, blob_count: int, max_blobs_per_tx: int, ) -> List[Tuple[int, ...]]: """ Get all possible combinations of blobs that result in a given blob count. """ combinations = [ seq for i in range( blob_count + 1, 0, -1 ) # We can have from 1 to at most MAX_BLOBS_PER_BLOCK blobs per # block for seq in itertools.combinations_with_replacement( range(1, min(blob_count + 1, max_blobs_per_tx) + 1), i ) # We iterate through all possible combinations # And we only keep the ones that match the expected blob count if sum(seq) == blob_count and all(tx_blobs <= max_blobs_per_tx for tx_blobs in seq) # Validate each tx ] # We also add the reversed version of each combination, only if it's # not already in the list. E.g. (4, 1) is added from (1, 4) but not (1, # 1, 1, 1, 1) because its reversed version is identical. combinations += [ tuple(reversed(x)) for x in combinations if tuple(reversed(x)) not in combinations ] return combinations @classmethod def all_valid_blob_combinations(cls, fork: Fork) -> List[Tuple[int, ...]]: """ Return all valid blob tx combinations for a given block, assuming the given MAX_BLOBS_PER_BLOCK, whilst respecting MAX_BLOBS_PER_TX. """ max_blobs_per_block = fork.max_blobs_per_block() max_blobs_per_tx = fork.max_blobs_per_tx() combinations: List[Tuple[int, ...]] = [] for i in range(1, max_blobs_per_block + 1): combinations += cls.get_blob_combinations(i, max_blobs_per_tx) return combinations @classmethod def invalid_blob_combinations(cls, fork: Fork) -> List[Tuple[int, ...]]: """ Return invalid blob tx combinations for a given block that use up to MAX_BLOBS_PER_BLOCK+1 blobs. """ max_blobs_per_block = fork.max_blobs_per_block() max_blobs_per_tx = fork.max_blobs_per_tx() invalid_combinations = cls.get_blob_combinations( max_blobs_per_block + 1, max_blobs_per_tx, ) invalid_combinations.append((max_blobs_per_block + 1,)) return invalid_combinations ================================================ FILE: tests/cancun/eip4844_blobs/test_blob_txs.py ================================================ """ Tests blob type transactions for [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844). Note: To add a new test, add a function that is named `test_`. It must at least use the following arguments: - `blockchain_test` or `state_test` - `pre` - `env` - `block` or `txs`. All other `pytest.fixture` fixtures can be parametrized to generate new combinations and test cases. """ from typing import List, Optional, Tuple import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, AccessList, Account, Address, Alloc, Block, BlockchainTestFiller, BlockException, Bytecode, EngineAPIError, Environment, Hash, Header, Removable, StateTestFiller, Storage, Transaction, TransactionException, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, SpecHelpers, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version @pytest.fixture def destination_account_code() -> Bytecode | None: """Code in the destination account for the blob transactions.""" return None @pytest.fixture def destination_account_balance() -> int: """Balance in the destination account for the blob transactions.""" return 0 @pytest.fixture def destination_account( pre: Alloc, destination_account_code: Bytecode | None, destination_account_balance: int ) -> Address: """Destination account for the blob transactions.""" if destination_account_code is not None: return pre.deploy_contract( code=destination_account_code, balance=destination_account_balance, ) return pre.fund_eoa(destination_account_balance) @pytest.fixture def tx_gas( fork: Fork, tx_calldata: bytes, tx_access_list: List[AccessList], ) -> int: """Gas allocated to transactions sent during test.""" tx_intrinsic_cost_calculator = fork.transaction_intrinsic_cost_calculator() return tx_intrinsic_cost_calculator(calldata=tx_calldata, access_list=tx_access_list) @pytest.fixture def blobs_per_tx() -> List[int]: """ Return list of integers that each represent the number of blobs in each transaction in the block of the test. Used to automatically generate a list of correctly versioned blob hashes. Default is to have one transaction with one blob. Can be overloaded by a test case to provide a custom list of blob counts. """ return [1] @pytest.fixture def blob_hashes_per_tx(blobs_per_tx: List[int]) -> List[List[Hash]]: """ Produce the list of blob hashes that are sent during the test. Can be overloaded by a test case to provide a custom list of blob hashes. """ return [ add_kzg_version( [Hash(x) for x in range(blob_count)], Spec.BLOB_COMMITMENT_VERSION_KZG, ) for blob_count in blobs_per_tx ] @pytest.fixture def total_account_minimum_balance( # noqa: D103 blob_gas_per_blob: int, tx_gas: int, tx_value: int, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, blob_hashes_per_tx: List[List[bytes]], ) -> int: """ Calculate minimum balance required for the account to be able to send the transactions in the block of the test. """ minimum_cost = 0 for tx_blob_count in [len(x) for x in blob_hashes_per_tx]: blob_cost = tx_max_fee_per_blob_gas * blob_gas_per_blob * tx_blob_count minimum_cost += (tx_gas * tx_max_fee_per_gas) + tx_value + blob_cost return minimum_cost @pytest.fixture def total_account_transactions_fee( # noqa: D103 tx_gas: int, tx_value: int, blob_gas_price: int, block_base_fee_per_gas: int, blob_gas_per_blob: int, tx_max_fee_per_gas: int, tx_max_priority_fee_per_gas: int, blob_hashes_per_tx: List[List[bytes]], ) -> int: """ Calculate actual fee for the blob transactions in the block of the test. """ total_cost = 0 for tx_blob_count in [len(x) for x in blob_hashes_per_tx]: blob_cost = blob_gas_price * blob_gas_per_blob * tx_blob_count block_producer_fee = ( tx_max_fee_per_gas - block_base_fee_per_gas if tx_max_priority_fee_per_gas else 0 ) total_cost += ( (tx_gas * (block_base_fee_per_gas + block_producer_fee)) + tx_value + blob_cost ) return total_cost @pytest.fixture def tx_access_list() -> List[AccessList]: """ Access list for transactions sent during test. Can be overloaded by a test case to provide a custom access list. """ return [] @pytest.fixture def tx_error() -> Optional[TransactionException]: """ Error produced by the block transactions (no error). Can be overloaded on test cases where the transactions are expected to fail. """ return None @pytest.fixture def sender_initial_balance( # noqa: D103 total_account_minimum_balance: int, account_balance_modifier: int ) -> int: return total_account_minimum_balance + account_balance_modifier @pytest.fixture def sender(pre: Alloc, sender_initial_balance: int) -> Address: # noqa: D103 return pre.fund_eoa(sender_initial_balance) @pytest.fixture def txs( # noqa: D103 sender: EOA, destination_account: Optional[Address], tx_gas: int, tx_value: int, tx_calldata: bytes, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_max_priority_fee_per_gas: int, tx_access_list: List[AccessList], blob_hashes_per_tx: List[List[bytes]], tx_error: Optional[TransactionException], ) -> List[Transaction]: """Prepare the list of transactions that are sent during the test.""" return [ Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=tx_max_priority_fee_per_gas, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=tx_access_list, blob_versioned_hashes=blob_hashes, error=tx_error if tx_i == (len(blob_hashes_per_tx) - 1) else None, ) for tx_i, blob_hashes in enumerate(blob_hashes_per_tx) ] @pytest.fixture def account_balance_modifier() -> int: """ Account balance modifier for the source account of all tests. See `pre` fixture. """ return 0 @pytest.fixture def state_env( excess_blob_gas: Optional[int], ) -> Environment: """ Prepare the environment for all state test cases. Main difference is that the excess blob gas is not increased by the target, as there is no genesis block -> block 1 transition, and therefore the excess blob gas is not decreased by the target. """ return Environment( excess_blob_gas=excess_blob_gas if excess_blob_gas else 0, ) @pytest.fixture def engine_api_error_code() -> Optional[EngineAPIError]: """ Engine API error code to be returned by the client on consumption of the erroneous block in hive. """ return None @pytest.fixture def block_error( tx_error: Optional[TransactionException], ) -> Optional[TransactionException | BlockException]: """ Error produced by the block transactions (no error). Can be overloaded on test cases where the transactions are expected to fail. """ return tx_error @pytest.fixture def block_number() -> int: """First block number.""" return 1 @pytest.fixture def block_timestamp() -> int: """Timestamp of the first block.""" return 1 @pytest.fixture def expected_blob_gas_used( fork: Fork, txs: List[Transaction], block_number: int, block_timestamp: int, ) -> Optional[int | Removable]: """Calculate blob gas used by the test block.""" if not fork.header_blob_gas_used_required( block_number=block_number, timestamp=block_timestamp ): return Header.EMPTY_FIELD blob_gas_per_blob = fork.blob_gas_per_blob( block_number=block_number, timestamp=block_timestamp, ) return sum([Spec.get_total_blob_gas(tx=tx, blob_gas_per_blob=blob_gas_per_blob) for tx in txs]) @pytest.fixture def expected_excess_blob_gas( fork: Fork, parent_excess_blobs: Optional[int], parent_blobs: Optional[int], block_number: int, block_timestamp: int, block_base_fee_per_gas: int, ) -> Optional[int | Removable]: """Calculate blob gas used by the test block.""" if not fork.header_excess_blob_gas_required( block_number=block_number, timestamp=block_timestamp ): return Header.EMPTY_FIELD excess_blob_gas = fork.excess_blob_gas_calculator() return excess_blob_gas( parent_excess_blobs=parent_excess_blobs if parent_excess_blobs else 0, parent_blob_count=parent_blobs if parent_blobs else 0, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def header_verify( txs: List[Transaction], expected_blob_gas_used: Optional[int | Removable], expected_excess_blob_gas: Optional[int | Removable], ) -> Header: """Header fields to verify from the transition tool.""" header_verify = Header( blob_gas_used=expected_blob_gas_used, excess_blob_gas=expected_excess_blob_gas, gas_used=0 if len([tx for tx in txs if not tx.error]) == 0 else None, ) return header_verify @pytest.fixture def rlp_modifier( expected_blob_gas_used: Optional[int | Removable], ) -> Optional[Header]: """Header fields to modify on the output block in the BlockchainTest.""" if expected_blob_gas_used == Header.EMPTY_FIELD: return None return Header( blob_gas_used=expected_blob_gas_used, ) @pytest.fixture def block( txs: List[Transaction], block_error: Optional[TransactionException | BlockException], engine_api_error_code: Optional[EngineAPIError], header_verify: Optional[Header], rlp_modifier: Optional[Header], ) -> Block: """Test block for all blockchain test cases.""" return Block( txs=txs, exception=block_error, engine_api_error_code=engine_api_error_code, header_verify=header_verify, rlp_modifier=rlp_modifier, ) @pytest.mark.parametrize_by_fork( "blobs_per_tx", SpecHelpers.all_valid_blob_combinations, ) @pytest.mark.parametrize("block_base_fee_per_gas", [7, 100]) @pytest.mark.valid_from("Cancun") def test_valid_blob_tx_combinations( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, block: Block, ) -> None: """ Test all valid blob combinations in a single block, assuming a given value of `MAX_BLOBS_PER_BLOCK`. This assumes a block can include from 1 and up to `MAX_BLOBS_PER_BLOCK` transactions where all transactions contain at least 1 blob, and the sum of all blobs in a block is at most `MAX_BLOBS_PER_BLOCK`. This test is parametrized with all valid blob transaction combinations for a given block, and therefore if value of `MAX_BLOBS_PER_BLOCK` changes, this test is automatically updated. """ blockchain_test( pre=pre, post={}, blocks=[block], genesis_environment=env, ) def generate_invalid_tx_max_fee_per_blob_gas_tests( fork: Fork, ) -> List: """ Return a list of tests for invalid blob transactions due to insufficient max fee per blob gas parametrized for each different fork. """ min_base_fee_per_blob_gas = fork.min_base_fee_per_blob_gas() minimum_excess_blobs_for_first_increment = SpecHelpers.get_min_excess_blobs_for_blob_gas_price( fork=fork, blob_gas_price=min_base_fee_per_blob_gas + 1, ) next_base_fee_per_blob_gas = fork.blob_gas_price_calculator()( excess_blob_gas=minimum_excess_blobs_for_first_increment, ) tests = [] tests.append( pytest.param( # blob gas price is 1 minimum_excess_blobs_for_first_increment - 1, # blob gas cost increases to above the minimum fork.target_blobs_per_block() + 1, # tx max_blob_gas_cost is the minimum min_base_fee_per_blob_gas, TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS, id="insufficient_max_fee_per_blob_gas", marks=pytest.mark.exception_test, ) ) if (next_base_fee_per_blob_gas - min_base_fee_per_blob_gas) > 1: tests.append( pytest.param( # blob gas price is one less than the minimum minimum_excess_blobs_for_first_increment - 1, # blob gas cost increases to above the minimum fork.target_blobs_per_block() + 1, # tx max_blob_gas_cost is one less than the minimum next_base_fee_per_blob_gas - 1, TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS, id="insufficient_max_fee_per_blob_gas_one_less_than_next", marks=pytest.mark.exception_test, ) ) if min_base_fee_per_blob_gas > 1: tests.append( pytest.param( 0, # blob gas price is the minimum 0, # blob gas cost stays put at 1 # tx max_blob_gas_cost is one less than the minimum min_base_fee_per_blob_gas - 1, TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS, id="insufficient_max_fee_per_blob_gas_one_less_than_min", marks=pytest.mark.exception_test, ) ) tests.append( pytest.param( 0, # blob gas price is the minimum 0, # blob gas cost stays put at 1 0, # tx max_blob_gas_cost is 0 TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS, id="invalid_max_fee_per_blob_gas", marks=pytest.mark.exception_test, ) ) return tests @pytest.mark.parametrize_by_fork( "parent_excess_blobs,parent_blobs,tx_max_fee_per_blob_gas,tx_error", generate_invalid_tx_max_fee_per_blob_gas_tests, ) @pytest.mark.parametrize( "account_balance_modifier", [1_000_000_000], ) # Extra balance to cover block blob gas cost @pytest.mark.valid_from("Cancun") def test_invalid_tx_max_fee_per_blob_gas( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, block: Block, non_zero_blob_gas_used_genesis_block: Optional[Block], ) -> None: """ Reject blocks with invalid blob txs. - tx max_fee_per_blob_gas is barely not enough - tx max_fee_per_blob_gas is zero """ if non_zero_blob_gas_used_genesis_block is not None: blocks = [non_zero_blob_gas_used_genesis_block, block] else: blocks = [block] blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, ) @pytest.mark.parametrize_by_fork( "parent_excess_blobs,parent_blobs,tx_max_fee_per_blob_gas,tx_error", generate_invalid_tx_max_fee_per_blob_gas_tests, ) @pytest.mark.state_test_only @pytest.mark.valid_from("Cancun") def test_invalid_tx_max_fee_per_blob_gas_state( state_test: StateTestFiller, state_env: Environment, pre: Alloc, txs: List[Transaction], ) -> None: """ Reject an invalid blob transaction. - tx max_fee_per_blob_gas is barely not enough - tx max_fee_per_blob_gas is zero """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=state_env, ) @pytest.mark.parametrize( "tx_max_fee_per_gas,tx_error", [ # max blob gas is ok, but max fee per gas is less than base fee per gas ( 6, TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS, ), ], ids=["insufficient_max_fee_per_gas"], ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_invalid_normal_gas( state_test: StateTestFiller, state_env: Environment, pre: Alloc, txs: List[Transaction], header_verify: Optional[Header], rlp_modifier: Optional[Header], ) -> None: """ Reject an invalid blob transaction. - Sufficient max fee per blob gas, but insufficient max fee per gas """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=state_env, blockchain_test_header_verify=header_verify, blockchain_test_rlp_modifier=rlp_modifier, ) @pytest.mark.parametrize_by_fork( "blobs_per_tx", SpecHelpers.invalid_blob_combinations, ) @pytest.mark.parametrize( "tx_error", [ [ TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED, TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED, ] ], ids=[""], ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_invalid_block_blob_count( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, block: Block, ) -> None: """ Test all invalid blob combinations in a single block, where the sum of all blobs in a block is at `MAX_BLOBS_PER_BLOCK + 1`. This test is parametrized with all blob transaction combinations exceeding `MAX_BLOBS_PER_BLOCK` by one for a given block, and therefore if value of `MAX_BLOBS_PER_BLOCK` changes, this test is automatically updated. """ blockchain_test( pre=pre, post={}, blocks=[block], genesis_environment=env, ) @pytest.mark.parametrize( "tx_access_list", [[], [AccessList(address=100, storage_keys=[100, 200])]], ids=["no_access_list", "access_list"], ) @pytest.mark.parametrize("tx_max_fee_per_gas", [7, 14]) @pytest.mark.parametrize("tx_max_priority_fee_per_gas", [0, 7]) @pytest.mark.parametrize("tx_value", [0, 1]) @pytest.mark.parametrize( "tx_calldata", [b"", b"\x00", b"\x01"], ids=["no_calldata", "single_zero_calldata", "single_one_calldata"], ) @pytest.mark.parametrize("tx_max_fee_per_blob_gas_multiplier", [1, 100, 10000]) @pytest.mark.parametrize("account_balance_modifier", [-1], ids=["exact_balance_minus_1"]) @pytest.mark.parametrize("tx_error", [TransactionException.INSUFFICIENT_ACCOUNT_FUNDS], ids=[""]) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") @pytest.mark.slow() def test_insufficient_balance_blob_tx( state_test: StateTestFiller, state_env: Environment, pre: Alloc, txs: List[Transaction], ) -> None: """ Reject blocks where user cannot afford the blob gas specified (but max_fee_per_gas would be enough for current block). - Transactions with max fee equal or higher than current block base fee - Transactions with and without priority fee - Transactions with and without value - Transactions with and without calldata - Transactions with max fee per blob gas lower or higher than the priority fee """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=state_env, ) @pytest.mark.parametrize_by_fork( "blobs_per_tx", lambda fork: [ pytest.param([1], id="single_blob"), pytest.param([fork.max_blobs_per_tx()], id="max_blobs"), ], ) @pytest.mark.parametrize( "tx_access_list", [[], [AccessList(address=100, storage_keys=[100, 200])]], ids=["no_access_list", "access_list"], ) @pytest.mark.parametrize("tx_max_fee_per_gas", [7, 14]) @pytest.mark.parametrize("tx_max_priority_fee_per_gas", [0, 7]) @pytest.mark.parametrize("tx_value", [0, 1]) @pytest.mark.parametrize( "tx_calldata", [b"", b"\x00", b"\x01"], ids=["no_calldata", "single_zero_calldata", "single_one_calldata"], ) @pytest.mark.parametrize("block_base_fee_per_gas", [7, 100]) @pytest.mark.parametrize("tx_max_fee_per_blob_gas_multiplier", [1, 100, 10000]) @pytest.mark.valid_from("Cancun") def test_sufficient_balance_blob_tx( state_test: StateTestFiller, state_env: Environment, pre: Alloc, txs: List[Transaction], ) -> None: """ Check that transaction is accepted when user can exactly afford the blob gas specified (and max_fee_per_gas would be enough for current block). - Transactions with max fee equal or higher than current block base fee - Transactions with and without priority fee - Transactions with and without value - Transactions with and without calldata - Transactions with max fee per blob gas lower or higher than the priority fee """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=state_env, ) @pytest.mark.parametrize_by_fork( "blobs_per_tx", lambda fork: [ pytest.param([1], id="single_blob"), pytest.param([fork.max_blobs_per_tx()], id="max_blobs"), ], ) @pytest.mark.parametrize( "tx_access_list", [[], [AccessList(address=100, storage_keys=[100, 200])]], ids=["no_access_list", "access_list"], ) @pytest.mark.parametrize("tx_max_fee_per_gas", [7, 14]) @pytest.mark.parametrize("tx_max_priority_fee_per_gas", [0, 7]) @pytest.mark.parametrize("tx_value", [0, 1]) @pytest.mark.parametrize( "tx_calldata", [b"", b"\x00", b"\x01"], ids=["no_calldata", "single_zero_calldata", "single_one_calldata"], ) @pytest.mark.parametrize("tx_max_fee_per_blob_gas_multiplier", [1, 100, 10000]) @pytest.mark.parametrize("sender_initial_balance", [0]) @pytest.mark.valid_from("Cancun") def test_sufficient_balance_blob_tx_pre_fund_tx( blockchain_test: BlockchainTestFiller, total_account_minimum_balance: int, sender: EOA, env: Environment, pre: Alloc, txs: List[Transaction], header_verify: Optional[Header], ) -> None: """ Check that transaction is accepted when user can exactly afford the blob gas specified (and max_fee_per_gas would be enough for current block) because a funding transaction is prepended in the same block. - Transactions with max fee equal or higher than current block base fee - Transactions with and without priority fee - Transactions with and without value - Transactions with and without calldata - Transactions with max fee per blob gas lower or higher than the priority fee """ pre_funding_sender = pre.fund_eoa(amount=(21_000 * 100) + total_account_minimum_balance) txs = [ Transaction( sender=pre_funding_sender, to=sender, value=total_account_minimum_balance, gas_limit=21_000, ) ] + txs blockchain_test( pre=pre, post={}, blocks=[ Block( txs=txs, header_verify=header_verify, ) ], genesis_environment=env, ) @pytest.mark.parametrize_by_fork( "blobs_per_tx", lambda fork: [ pytest.param([1], id="single_blob"), pytest.param([fork.max_blobs_per_tx()], id="max_blobs"), ], ) @pytest.mark.parametrize( "tx_access_list", [[], [AccessList(address=100, storage_keys=[100, 200])]], ids=["no_access_list", "access_list"], ) @pytest.mark.parametrize("tx_max_fee_per_gas", [7, 14]) @pytest.mark.parametrize("tx_max_priority_fee_per_gas", [0, 7]) @pytest.mark.parametrize("tx_value", [0, 1]) @pytest.mark.parametrize( "tx_calldata", [b"", b"\x01"], ids=["no_calldata", "single_non_zero_byte_calldata"], ) @pytest.mark.parametrize("tx_max_fee_per_blob_gas_multiplier", [1, 100]) @pytest.mark.parametrize( "tx_gas", [500_000], ids=[""] ) # Increase gas to account for contract code @pytest.mark.parametrize( "destination_account_balance", [100], ids=["100_wei_mid_execution"] ) # Amount sent by the contract to the sender mid execution @pytest.mark.parametrize( "destination_account_code", [ Op.SSTORE(0, Op.BALANCE(Op.ORIGIN)) + Op.CALL(Op.GAS, Op.ORIGIN, Op.SUB(Op.SELFBALANCE, Op.CALLVALUE), 0, 0, 0, 0) + Op.SSTORE(1, Op.BALANCE(Op.ORIGIN)) ], ids=[""], ) # Amount sent by the contract to the sender mid execution @pytest.mark.valid_from("Cancun") def test_blob_gas_subtraction_tx( state_test: StateTestFiller, state_env: Environment, pre: Alloc, sender_initial_balance: int, txs: List[Transaction], destination_account: Address, destination_account_balance: int, total_account_transactions_fee: int, ) -> None: """ Check that the blob gas fee for a transaction is subtracted from the sender balance before the transaction is executed. - Transactions with max fee equal or higher than current block base fee - Transactions with and without value - Transactions with and without calldata - Transactions with max fee per blob gas lower or higher than the priority fee - Transactions where an externally owned account sends funds to the sender mid execution """ assert len(txs) == 1 post = { destination_account: Account( storage={ 0: sender_initial_balance - total_account_transactions_fee, 1: sender_initial_balance - total_account_transactions_fee + destination_account_balance, } ) } state_test( pre=pre, post=post, tx=txs[0], env=state_env, ) @pytest.mark.parametrize_by_fork( "blobs_per_tx", SpecHelpers.all_valid_blob_combinations, ) @pytest.mark.parametrize("account_balance_modifier", [-1], ids=["exact_balance_minus_1"]) @pytest.mark.parametrize("tx_error", [TransactionException.INSUFFICIENT_ACCOUNT_FUNDS], ids=[""]) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_insufficient_balance_blob_tx_combinations( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, block: Block, ) -> None: """ Reject all valid blob transaction combinations in a block, but block is invalid. - The amount of blobs is correct but the user cannot afford the transaction total cost """ blockchain_test( pre=pre, post={}, blocks=[block], genesis_environment=env, ) def generate_invalid_tx_blob_count_tests( fork: Fork, ) -> List: """ Return a list of tests for invalid blob transactions due to invalid blob counts. """ return [ pytest.param( [0], TransactionException.TYPE_3_TX_ZERO_BLOBS, id="too_few_blobs", ), pytest.param( [fork.max_blobs_per_tx() + 1], [ TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED, TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED, ], id="too_many_blobs", ), ] @pytest.mark.parametrize_by_fork( "blobs_per_tx,tx_error", generate_invalid_tx_blob_count_tests, ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_invalid_tx_blob_count( state_test: StateTestFiller, state_env: Environment, pre: Alloc, txs: List[Transaction], header_verify: Optional[Header], rlp_modifier: Optional[Header], ) -> None: """ Reject blocks that include blob transactions with invalid blob counts. - `blob count == 0` in type 3 transaction - `blob count > MAX_BLOBS_PER_BLOCK` in type 3 transaction """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=state_env, blockchain_test_header_verify=header_verify, blockchain_test_rlp_modifier=rlp_modifier, ) @pytest.mark.parametrize( "blob_hashes_per_tx", [ [[Hash(1)]], [[Hash(x) for x in range(2)]], [add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG) + [Hash(2)]], [[Hash(1)] + add_kzg_version([Hash(2)], Spec.BLOB_COMMITMENT_VERSION_KZG)], ], ids=[ "single_blob", "multiple_blobs", "multiple_blobs_single_bad_hash_1", "multiple_blobs_single_bad_hash_2", ], ) @pytest.mark.parametrize( "tx_error", [TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH], ids=[""] ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_invalid_blob_hash_versioning_single_tx( state_test: StateTestFiller, state_env: Environment, pre: Alloc, txs: List[Transaction], header_verify: Optional[Header], rlp_modifier: Optional[Header], ) -> None: """ Reject blob transactions with invalid blob hash version. - Transaction with single blob with invalid version - Transaction with multiple blobs all with invalid version - Transaction with multiple blobs either with invalid version """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=state_env, blockchain_test_header_verify=header_verify, blockchain_test_rlp_modifier=rlp_modifier, ) @pytest.mark.parametrize( "blob_hashes_per_tx", [ [ add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG), [Hash(2)], ], [ add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG), [Hash(x) for x in range(1, 3)], ], [ add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG), [Hash(2)] + add_kzg_version([Hash(3)], Spec.BLOB_COMMITMENT_VERSION_KZG), ], [ add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG), add_kzg_version([Hash(2)], Spec.BLOB_COMMITMENT_VERSION_KZG), [Hash(3)], ], ], ids=[ "single_blob", "multiple_blobs", "multiple_blobs_single_bad_hash_1", "multiple_blobs_single_bad_hash_2", ], ) @pytest.mark.parametrize( "tx_error", [TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH], ids=[""] ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_invalid_blob_hash_versioning_multiple_txs( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, block: Block, ) -> None: """ Reject blocks that include blob transactions with invalid blob hash version. - Multiple blob transactions with single blob all with invalid version - Multiple blob transactions with multiple blobs all with invalid version - Multiple blob transactions with multiple blobs only one with invalid version """ blockchain_test( pre=pre, post={}, blocks=[block], genesis_environment=env, ) @pytest.mark.parametrize( "tx_gas", [500_000], ids=[""] ) # Increase gas to account for contract creation @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_invalid_blob_tx_contract_creation( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, txs: List[Transaction], header_verify: Optional[Header], ) -> None: """ Reject blocks that include blob transactions that have nil to value (contract creating). """ assert len(txs) == 1 assert txs[0].blob_versioned_hashes is not None and len(txs[0].blob_versioned_hashes) == 1 # Replace the transaction with a contract creating one, only in the RLP # version contract_creating_tx = txs[0].copy(to=None).with_signature_and_sender() txs[0].rlp_override = contract_creating_tx.rlp() blockchain_test( pre=pre, post={}, blocks=[ Block( txs=txs, exception=[ BlockException.RLP_STRUCTURES_ENCODING, TransactionException.TYPE_3_TX_CONTRACT_CREATION, ], header_verify=header_verify, # Skipped due to the T8N not receiving the invalid transaction, # instead we are passing a valid transaction to T8N and then # the transaction is replaced directly in the block RLP. skip_exception_verification=True, ) ], genesis_environment=env, ) # # ---------------------------------------- # # Opcode Tests in Blob Transaction Context # # ---------------------------------------- @pytest.fixture def opcode( request: pytest.FixtureRequest, sender: EOA, tx_calldata: bytes, block_base_fee_per_gas: int, tx_max_fee_per_gas: int, tx_max_priority_fee_per_gas: int, tx_value: int, ) -> Tuple[Bytecode, Storage.StorageDictType]: """ Build bytecode and post to test each opcode that accesses transaction information. """ if request.param == Op.ORIGIN: return ( Op.SSTORE(0, Op.ORIGIN), {0: sender}, ) elif request.param == Op.CALLER: return ( Op.SSTORE(0, Op.CALLER), {0: sender}, ) elif request.param == Op.CALLVALUE: return ( Op.SSTORE(0, Op.CALLVALUE), {0: tx_value}, ) elif request.param == Op.CALLDATALOAD: return ( Op.SSTORE(0, Op.CALLDATALOAD(0)), {0: tx_calldata.ljust(32, b"\x00")}, ) elif request.param == Op.CALLDATASIZE: return ( Op.SSTORE(0, Op.CALLDATASIZE), {0: len(tx_calldata)}, ) elif request.param == Op.CALLDATACOPY: return ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(0, Op.MLOAD(0)), {0: tx_calldata.ljust(32, b"\x00")}, ) elif request.param == Op.GASPRICE: assert tx_max_fee_per_gas >= block_base_fee_per_gas return ( Op.SSTORE(0, Op.GASPRICE), { 0: min(tx_max_priority_fee_per_gas, tx_max_fee_per_gas - block_base_fee_per_gas) + block_base_fee_per_gas }, ) raise Exception("Unknown opcode") @pytest.mark.parametrize( "opcode", [Op.ORIGIN, Op.CALLER], indirect=["opcode"], ) @pytest.mark.parametrize("tx_gas", [500_000]) @pytest.mark.valid_from("Cancun") def test_blob_tx_attribute_opcodes( state_test: StateTestFiller, pre: Alloc, sender: EOA, tx_value: int, tx_gas: int, tx_calldata: bytes, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_max_priority_fee_per_gas: int, tx_access_list: List[AccessList], blob_hashes_per_tx: List[List[bytes]], opcode: Tuple[Bytecode, Storage.StorageDictType], state_env: Environment, ) -> None: """ Test opcodes that read transaction attributes work properly for blob type transactions. - ORIGIN - CALLER """ code, storage = opcode destination_account = pre.deploy_contract(code=code) tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=tx_max_priority_fee_per_gas, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=tx_access_list, blob_versioned_hashes=blob_hashes_per_tx[0], ) post = { destination_account: Account( storage=storage, ) } state_test( pre=pre, post=post, tx=tx, env=state_env, ) @pytest.mark.parametrize("opcode", [Op.CALLVALUE], indirect=["opcode"]) @pytest.mark.parametrize("tx_value", [0, 1, int(1e18)]) @pytest.mark.parametrize("tx_gas", [500_000]) @pytest.mark.valid_from("Cancun") def test_blob_tx_attribute_value_opcode( state_test: StateTestFiller, pre: Alloc, sender: EOA, tx_value: int, tx_gas: int, tx_calldata: bytes, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_max_priority_fee_per_gas: int, tx_access_list: List[AccessList], blob_hashes_per_tx: List[List[bytes]], opcode: Tuple[Bytecode, Storage.StorageDictType], state_env: Environment, ) -> None: """ Test the VALUE opcode with different blob type transaction value amounts. """ code, storage = opcode destination_account = pre.deploy_contract(code=code) tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=tx_max_priority_fee_per_gas, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=tx_access_list, blob_versioned_hashes=blob_hashes_per_tx[0], ) post = { destination_account: Account( storage=storage, balance=tx_value, ) } state_test( pre=pre, post=post, tx=tx, env=state_env, ) @pytest.mark.parametrize( "opcode", [ Op.CALLDATALOAD, Op.CALLDATASIZE, Op.CALLDATACOPY, ], indirect=True, ) @pytest.mark.parametrize( "tx_calldata", [ b"", b"\x01", b"\x00\x01" * 16, ], ids=["empty", "single_byte", "word"], ) @pytest.mark.parametrize("tx_gas", [500_000]) @pytest.mark.valid_from("Cancun") def test_blob_tx_attribute_calldata_opcodes( state_test: StateTestFiller, pre: Alloc, sender: EOA, tx_value: int, tx_gas: int, tx_calldata: bytes, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_max_priority_fee_per_gas: int, tx_access_list: List[AccessList], blob_hashes_per_tx: List[List[bytes]], opcode: Tuple[Bytecode, Storage.StorageDictType], state_env: Environment, ) -> None: """ Test calldata related opcodes to verify their behavior is not affected by blobs. - CALLDATALOAD - CALLDATASIZE - CALLDATACOPY """ code, storage = opcode destination_account = pre.deploy_contract(code=code) tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=tx_max_priority_fee_per_gas, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=tx_access_list, blob_versioned_hashes=blob_hashes_per_tx[0], ) post = { destination_account: Account( storage=storage, ) } state_test( pre=pre, post=post, tx=tx, env=state_env, ) # always below data fee: @pytest.mark.parametrize("tx_max_priority_fee_per_gas", [0, 2]) # normal and above priority fee: @pytest.mark.parametrize("tx_max_fee_per_blob_gas_delta", [0, 1]) # always above priority fee (FOR CANCUN) @pytest.mark.parametrize("tx_max_fee_per_gas", [100]) @pytest.mark.parametrize("opcode", [Op.GASPRICE], indirect=True) @pytest.mark.parametrize("tx_gas", [500_000]) @pytest.mark.valid_from("Cancun") def test_blob_tx_attribute_gasprice_opcode( state_test: StateTestFiller, pre: Alloc, sender: EOA, tx_value: int, tx_gas: int, tx_calldata: bytes, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_max_priority_fee_per_gas: int, tx_access_list: List[AccessList], blob_hashes_per_tx: List[List[bytes]], opcode: Tuple[Bytecode, Storage.StorageDictType], state_env: Environment, ) -> None: """ Test GASPRICE opcode to sanity check that the blob gas fee does not affect its calculation. - No priority fee - Priority fee below data fee - Priority fee above data fee """ code, storage = opcode destination_account = pre.deploy_contract(code=code) tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=tx_max_priority_fee_per_gas, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=tx_access_list, blob_versioned_hashes=blob_hashes_per_tx[0], ) post = { destination_account: Account( storage=storage, ) } state_test( pre=pre, post=post, tx=tx, env=state_env, ) @pytest.mark.parametrize( [ "blobs_per_tx", "parent_excess_blobs", "tx_max_fee_per_blob_gas", "tx_error", "block_error", ], [ ( [0], None, 1, [TransactionException.TYPE_3_TX_PRE_FORK, TransactionException.TYPE_3_TX_ZERO_BLOBS], [TransactionException.TYPE_3_TX_PRE_FORK, TransactionException.TYPE_3_TX_ZERO_BLOBS], ), ( [1], None, 1, TransactionException.TYPE_3_TX_PRE_FORK, [TransactionException.TYPE_3_TX_PRE_FORK, BlockException.INVALID_VERSIONED_HASHES], ), ], ids=["no_blob_tx", "one_blob_tx"], ) @pytest.mark.exception_test @pytest.mark.valid_at_transition_to("Cancun") @pytest.mark.slow() def test_blob_type_tx_pre_fork( state_test: StateTestFiller, pre: Alloc, txs: List[Transaction], block_error: Optional[TransactionException | BlockException], ) -> None: """ Reject blocks with blob type transactions before Cancun fork. Blocks sent by NewPayloadV2 (Shanghai) that contain blob type transactions, furthermore blobs field within NewPayloadV2 method must be computed as INVALID, due to an invalid block hash. """ assert len(txs) == 1 state_test( pre=pre, post={}, tx=txs[0], env=Environment(), # `env` fixture has blob fields block_exception=block_error, ) ================================================ FILE: tests/cancun/eip4844_blobs/test_blob_txs_full.py ================================================ """Tests full blob type transactions for [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844).""" from typing import List, Optional import pytest from ethereum_test_base_types.base_types import Hash from ethereum_test_forks import Fork from ethereum_test_tools import ( Address, Alloc, Blob, Block, BlockchainTestFiller, BlockException, Environment, Header, NetworkWrappedTransaction, Transaction, TransactionException, ) from .spec import Spec, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version @pytest.fixture def destination_account() -> Address: """Destination account for the blob transactions.""" return Address(0x100) @pytest.fixture def tx_value() -> int: """ Value contained by the transactions sent during test. Can be overloaded by a test case to provide a custom transaction value. """ return 1 @pytest.fixture def tx_gas() -> int: """Gas allocated to transactions sent during test.""" return 21_000 @pytest.fixture def tx_calldata() -> bytes: """Calldata in transactions sent during test.""" return b"" @pytest.fixture(autouse=True) def parent_excess_blobs() -> int: """ Excess blobs of the parent block. Can be overloaded by a test case to provide a custom parent excess blob count. """ return 10 # Defaults to a blob gas price of 1. @pytest.fixture(autouse=True) def parent_blobs() -> int: """ Blobs of the parent blob. Can be overloaded by a test case to provide a custom parent blob count. """ return 0 @pytest.fixture def tx_max_priority_fee_per_gas() -> int: """ Max priority fee per gas for transactions sent during test. Can be overloaded by a test case to provide a custom max priority fee per gas. """ return 0 @pytest.fixture def txs_versioned_hashes(txs_blobs: List[List[Blob]]) -> List[List[Hash]]: """List of blob versioned hashes derived from the blobs.""" version_hashes: List[List[Hash]] = [ [blob.versioned_hash for blob in blob_tx] for blob_tx in txs_blobs ] return version_hashes @pytest.fixture(autouse=True) def tx_max_fee_per_gas( block_base_fee_per_gas: int, ) -> int: """ Max fee per gas value used by all transactions sent during test. By default the max fee per gas is the same as the block fee per gas. Can be overloaded by a test case to test rejection of transactions where the max fee per gas is insufficient. """ return block_base_fee_per_gas @pytest.fixture def tx_max_fee_per_blob_gas( # noqa: D103 blob_gas_price: Optional[int], ) -> int: """ Max fee per blob gas for transactions sent during test. By default, it is set to the blob gas price of the block. Can be overloaded by a test case to test rejection of transactions where the max fee per blob gas is insufficient. """ if blob_gas_price is None: # When fork transitioning, the default blob gas price is 1. return 1 return blob_gas_price @pytest.fixture def tx_error() -> Optional[TransactionException]: """ Even though the final block we are producing in each of these tests is invalid, and some of the transactions will be invalid due to the format in the final block, none of the transactions should be rejected by the transition tool because they are being sent to it with the correct format. """ return None @pytest.fixture(autouse=True) def txs( # noqa: D103 pre: Alloc, destination_account: Optional[Address], tx_gas: int, tx_value: int, tx_calldata: bytes, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_max_priority_fee_per_gas: int, txs_versioned_hashes: List[List[Hash]], tx_error: Optional[TransactionException], txs_blobs: List[List[Blob]], txs_wrapped_blobs: List[bool], fork: Fork, ) -> List[Transaction]: """Prepare the list of transactions that are sent during the test.""" if len(txs_blobs) != len(txs_versioned_hashes) or len(txs_blobs) != len(txs_wrapped_blobs): raise ValueError("txs_blobs and txs_versioned_hashes should have the same length") txs: List[Transaction] = [] sender = pre.fund_eoa() for tx_blobs, tx_versioned_hashes, tx_wrapped_blobs in zip( txs_blobs, txs_versioned_hashes, txs_wrapped_blobs, strict=False ): tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=tx_max_priority_fee_per_gas, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=[], blob_versioned_hashes=tx_versioned_hashes, error=tx_error, wrapped_blob_transaction=tx_wrapped_blobs, ) if tx_wrapped_blobs: network_wrapped_tx = NetworkWrappedTransaction( tx=tx, blob_objects=tx_blobs, wrapper_version=fork.full_blob_tx_wrapper_version(), ) tx.rlp_override = network_wrapped_tx.rlp() txs.append(tx) return txs @pytest.fixture def env( parent_excess_blob_gas: int, ) -> Environment: """Prepare the environment for all test cases.""" return Environment( excess_blob_gas=parent_excess_blob_gas, blob_gas_used=0, ) @pytest.fixture def blocks( txs: List[Transaction], txs_wrapped_blobs: List[bool], blob_gas_per_blob: int, ) -> List[Block]: """Prepare the list of blocks for all test cases.""" header_blob_gas_used = 0 block_error = None if any(txs_wrapped_blobs): # This is a block exception because the invalid block is only created # in the RLP version, not in the transition tool. block_error = [ BlockException.RLP_STRUCTURES_ENCODING, TransactionException.TYPE_3_TX_WITH_FULL_BLOBS, ] if len(txs) > 0: header_blob_gas_used = ( sum( [ len(tx.blob_versioned_hashes) for tx in txs if tx.blob_versioned_hashes is not None ] ) * blob_gas_per_blob ) return [ Block( txs=txs, exception=block_error, rlp_modifier=Header(blob_gas_used=header_blob_gas_used) ) ] def generate_full_blob_tests( fork: Fork, ) -> List: """Return a list of test cases for full blob transactions.""" max_blobs = fork.max_blobs_per_tx() return [ pytest.param( [ # Txs [ # Blobs per transaction Blob.from_fork(fork), ] ], [True], id="one_full_blob_one_tx", ), pytest.param( [ # Txs [ # Blobs per transaction Blob.from_fork(fork, s), ] for s in range(max_blobs) ], [True] + ([False] * (max_blobs - 1)), id="one_full_blob_max_txs", ), pytest.param( [ # Txs [ # Blobs per transaction Blob.from_fork(fork, s), ] for s in range(max_blobs) ], ([False] * (max_blobs - 1)) + [True], id="one_full_blob_at_the_end_max_txs", ), ] @pytest.mark.parametrize_by_fork( "txs_blobs,txs_wrapped_blobs", generate_full_blob_tests, ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_reject_valid_full_blob_in_block_rlp( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, blocks: List[Block], ) -> None: """ Test valid blob combinations where one or more txs in the block serialized version contain a full blob (network version) tx. """ blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, ) ================================================ FILE: tests/cancun/eip4844_blobs/test_blobhash_opcode.py ================================================ """ Tests `BLOBHASH` opcode in [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844). Note: Adding a new test Add a function that is named `test_` and takes at least the following arguments. Required arguments: - `blockchain_test` - `pre` - `tx` - `post` Additional custom `pytest.fixture` fixtures can be added and parametrized for new test cases. There is no specific structure to follow within this test module. """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, AuthorizationTuple, Block, BlockchainTestFiller, Bytecode, CodeGasMeasure, Environment, Hash, StateTestFiller, Transaction, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version pytestmark = pytest.mark.valid_from("Cancun") # Blobhash index values for test_blobhash_gas_cost blobhash_index_values = [ 0x00, 0x01, 0x02, 0x03, 0x04, 2**256 - 1, 0xA12C8B6A8B11410C7D98D790E1098F1ED6D93CB7A64711481AAAB1848E13212F, ] # Random fixed list of blob versioned hashes random_blob_hashes = add_kzg_version( [ "0x00b8c5b09810b5fc07355d3da42e2c3a3e200c1d9a678491b7e8e256fc50cc4f", "0x005b4c8cc4f86aa2d2cf9e9ce97fca704a11a6c20f6b1d6c00a6e15f6d60a6df", "0x00878f80eaf10be1a6f618e6f8c071b10a6c14d9b89a3bf2a3f3cf2db6c5681d", "0x004eb72b108d562c639faeb6f8c6f366a28b0381c7d30431117ec8c7bb89f834", "0x00a9b2a6c3f3f0675b768d49b5f5dc5b5d988f88d55766247ba9e40b125f16bb", "0x00a4d4cde4aa01e57fb2c880d1d9c778c33bdf85e48ef4c4d4b4de51abccf4ed", "0x0071c9b8a0c72d38f5e5b5d08e5cb5ce5e23fb1bc5d75f9c29f7b94df0bceeb7", "0x002c8b6a8b11410c7d98d790e1098f1ed6d93cb7a64711481aaab1848e13212f", "0x00d78c25f8a1d6aa04d0e2e2a71cf8dfaa4239fa0f301eb57c249d1e6bfe3c3d", "0x00c778eb1348a73b9c30c7b1d282a5f8b2c5b5a12d5c5e4a4a35f9c5f639b4a4", ], Spec.BLOB_COMMITMENT_VERSION_KZG, ) class BlobhashScenario: """A utility class for generating blobhash calls.""" @staticmethod def create_blob_hashes_list(length: int, max_blobs_per_tx: int) -> List[List[Hash]]: """ Create list of MAX_BLOBS_PER_TX blob hashes using `random_blob_hashes`. Cycle over random_blob_hashes to get a large list of length: MAX_BLOBS_PER_TX * length -> [0x01, 0x02, 0x03, 0x04, ..., 0x0A, 0x0B, 0x0C, 0x0D] Then split list into smaller chunks of MAX_BLOBS_PER_TX -> [[0x01, 0x02, 0x03, 0x04], ..., [0x0a, 0x0b, 0x0c, 0x0d]] """ b_hashes = [ random_blob_hashes[i % len(random_blob_hashes)] for i in range(max_blobs_per_tx * length) ] return [ b_hashes[i : i + max_blobs_per_tx] for i in range(0, len(b_hashes), max_blobs_per_tx) ] @staticmethod def blobhash_sstore(index: int, max_blobs_per_tx: int) -> Bytecode: """ Return BLOBHASH sstore to the given index. If the index is out of the valid bounds, 0x01 is written in storage, as we later check it is overwritten by the BLOBHASH sstore. """ invalidity_check = Op.SSTORE(index, 0x01) if index < 0 or index >= max_blobs_per_tx: return invalidity_check + Op.SSTORE(index, Op.BLOBHASH(index)) return Op.SSTORE(index, Op.BLOBHASH(index)) @classmethod def generate_blobhash_bytecode(cls, scenario_name: str, max_blobs_per_tx: int) -> Bytecode: """Return BLOBHASH bytecode for the given scenario.""" scenarios = { "single_valid": sum( (cls.blobhash_sstore(i, max_blobs_per_tx) for i in range(max_blobs_per_tx)), Bytecode(), ), "repeated_valid": sum( ( sum((cls.blobhash_sstore(i, max_blobs_per_tx) for _ in range(10)), Bytecode()) for i in range(max_blobs_per_tx) ), Bytecode(), ), "valid_invalid": sum( ( cls.blobhash_sstore(i, max_blobs_per_tx) + cls.blobhash_sstore(max_blobs_per_tx, max_blobs_per_tx) + cls.blobhash_sstore(i, max_blobs_per_tx) for i in range(max_blobs_per_tx) ), Bytecode(), ), "varied_valid": sum( ( cls.blobhash_sstore(i, max_blobs_per_tx) + cls.blobhash_sstore(i + 1, max_blobs_per_tx) + cls.blobhash_sstore(i, max_blobs_per_tx) for i in range(max_blobs_per_tx - 1) ), Bytecode(), ), "invalid_calls": sum( ( cls.blobhash_sstore(i, max_blobs_per_tx) for i in range(-5, max_blobs_per_tx + 5) ), Bytecode(), ), } scenario = scenarios.get(scenario_name) if scenario is None: raise ValueError(f"Invalid scenario: {scenario_name}") return scenario @pytest.mark.parametrize("blobhash_index", blobhash_index_values) @pytest.mark.with_all_tx_types def test_blobhash_gas_cost( pre: Alloc, fork: Fork, tx_type: int, blobhash_index: int, state_test: StateTestFiller, ) -> None: """ Tests `BLOBHASH` opcode gas cost using a variety of indexes. Asserts that the gas consumption of the `BLOBHASH` opcode is correct by ensuring it matches `HASH_OPCODE_GAS = 3`. Includes both valid and invalid random index sizes from the range `[0, 2**256-1]`, for tx types 2 and 3. """ gas_measure_code = CodeGasMeasure( code=Op.BLOBHASH(blobhash_index), overhead_cost=3, extra_stack_items=1, ) address = pre.deploy_contract(gas_measure_code) sender = pre.fund_eoa() tx_kwargs = { "ty": tx_type, "sender": sender, "to": address, "data": Hash(0), "gas_limit": 500_000, "max_fee_per_blob_gas": (fork.min_base_fee_per_blob_gas() * 10) if tx_type == 3 else None, "blob_versioned_hashes": random_blob_hashes[0 : fork.max_blobs_per_tx()] if tx_type == 3 else None, } if tx_type == 4: signer = pre.fund_eoa(amount=0) tx_kwargs["authorization_list"] = [ AuthorizationTuple( signer=signer, address=Address(0), nonce=0, ) ] tx = Transaction(**tx_kwargs) post = {address: Account(storage={0: Spec.HASH_GAS_COST})} state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "scenario", [ "single_valid", "repeated_valid", "valid_invalid", "varied_valid", ], ) def test_blobhash_scenarios( pre: Alloc, fork: Fork, scenario: str, blockchain_test: BlockchainTestFiller, max_blobs_per_tx: int, ) -> None: """ Tests that the `BLOBHASH` opcode returns the correct versioned hash for various valid indexes. Covers various scenarios with random `blob_versioned_hash` values within the valid range `[0, 2**256-1]`. """ total_blocks = 5 b_hashes_list = BlobhashScenario.create_blob_hashes_list( length=total_blocks, max_blobs_per_tx=max_blobs_per_tx ) blobhash_calls = BlobhashScenario.generate_blobhash_bytecode( scenario_name=scenario, max_blobs_per_tx=max_blobs_per_tx ) sender = pre.fund_eoa() blocks: List[Block] = [] post = {} for i in range(total_blocks): address = pre.deploy_contract(blobhash_calls) blocks.append( Block( txs=[ Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=address, data=Hash(0), gas_limit=500_000, access_list=[], max_fee_per_blob_gas=(fork.min_base_fee_per_blob_gas() * 10), blob_versioned_hashes=b_hashes_list[i], ) ] ) ) post[address] = Account( storage={index: b_hashes_list[i][index] for index in range(max_blobs_per_tx)} ) blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.parametrize( "scenario", [ "invalid_calls", ], ) def test_blobhash_invalid_blob_index( pre: Alloc, fork: Fork, blockchain_test: BlockchainTestFiller, scenario: str, max_blobs_per_tx: int, ) -> None: """ Tests that the `BLOBHASH` opcode returns a zeroed `bytes32` value for invalid indexes. Includes cases where the index is negative (`index < 0`) or exceeds the maximum number of `blob_versioned_hash` values stored: (`index >= len(tx.message.blob_versioned_hashes)`). It confirms that the returned value is a zeroed `bytes32` for each case. """ total_blocks = 5 blobhash_calls = BlobhashScenario.generate_blobhash_bytecode( scenario_name=scenario, max_blobs_per_tx=max_blobs_per_tx ) sender = pre.fund_eoa() blocks: List[Block] = [] post = {} for i in range(total_blocks): address = pre.deploy_contract(blobhash_calls) blob_per_block = (i % max_blobs_per_tx) + 1 blobs = [random_blob_hashes[blob] for blob in range(blob_per_block)] blocks.append( Block( txs=[ Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=address, gas_limit=500_000, data=Hash(0), access_list=[], max_fee_per_blob_gas=(fork.min_base_fee_per_blob_gas() * 10), blob_versioned_hashes=blobs, ) ] ) ) post[address] = Account( storage={ index: (0 if index < 0 or index >= blob_per_block else blobs[index]) for index in range( -total_blocks, blob_per_block + (total_blocks - (i % max_blobs_per_tx)), ) } ) blockchain_test( pre=pre, blocks=blocks, post=post, ) def test_blobhash_multiple_txs_in_block( pre: Alloc, fork: Fork, blockchain_test: BlockchainTestFiller, max_blobs_per_tx: int, ) -> None: """ Tests that the `BLOBHASH` opcode returns the appropriate values when there is more than 1 blob tx type within a block (for tx types 2 and 3). Scenarios involve tx type 3 followed by tx type 2 running the same code within a block, including the opposite. """ blobhash_bytecode = BlobhashScenario.generate_blobhash_bytecode( scenario_name="single_valid", max_blobs_per_tx=max_blobs_per_tx ) addresses = [pre.deploy_contract(blobhash_bytecode) for _ in range(4)] sender = pre.fund_eoa() def blob_tx(address: Address, tx_type: int) -> Transaction: return Transaction( ty=tx_type, sender=sender, to=address, data=Hash(0), gas_limit=500_000, access_list=[] if tx_type >= 1 else None, max_fee_per_blob_gas=(fork.min_base_fee_per_blob_gas() * 10) if tx_type >= 3 else None, blob_versioned_hashes=random_blob_hashes[0:max_blobs_per_tx] if tx_type >= 3 else None, ) blocks = [ Block( txs=[ blob_tx(address=addresses[0], tx_type=3), blob_tx(address=addresses[0], tx_type=2), ] ), Block( txs=[ blob_tx(address=addresses[1], tx_type=2), blob_tx(address=addresses[1], tx_type=3), ] ), Block( txs=[ blob_tx(address=addresses[2], tx_type=2), blob_tx(address=addresses[3], tx_type=3), ], ), ] post = { Address(address): Account( storage={i: random_blob_hashes[i] for i in range(max_blobs_per_tx)} ) if address in (addresses[1], addresses[3]) else Account(storage=dict.fromkeys(range(max_blobs_per_tx), 0)) for address in addresses } blockchain_test( pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py ================================================ """ Tests `BLOBHASH` opcode in [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844). """ from enum import Enum from typing import Iterable, List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, AuthorizationTuple, Bytecode, Hash, StateTestFiller, Transaction, add_kzg_version, compute_create_address, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version pytestmark = pytest.mark.valid_from("Cancun") class BlobhashContext(Enum): """ A utility class for mapping common EVM opcodes in different contexts to specific bytecode (with BLOBHASH), addresses and contracts. """ BLOBHASH_SSTORE = "blobhash_sstore" BLOBHASH_RETURN = "blobhash_return" CALL = "call" DELEGATECALL = "delegatecall" CALLCODE = "callcode" STATICCALL = "staticcall" CREATE = "create" CREATE2 = "create2" INITCODE = "initcode" def code(self, *, indexes: Iterable[int]) -> Bytecode: """ Map opcode context to bytecode that utilizes the BLOBHASH opcode. Args: indexes: The indexes to request using the BLOBHASH opcode """ match self: case BlobhashContext.BLOBHASH_SSTORE: return ( sum(Op.SSTORE(index, Op.BLOBHASH(index=index)) for index in indexes) + Op.STOP ) case BlobhashContext.BLOBHASH_RETURN: return Op.MSTORE( offset=0, value=Op.BLOBHASH(index=Op.CALLDATALOAD(offset=0)) ) + Op.RETURN(offset=0, size=32) case BlobhashContext.INITCODE: return ( sum(Op.SSTORE(index, Op.BLOBHASH(index=index)) for index in indexes) + Op.STOP ) case _: raise ValueError(f"Invalid context: {self}") def deploy_contract( self, *, pre: Alloc, indexes: Iterable[int], ) -> Address: """ Deploy a contract with the given context and indexes. Args: pre: The pre state to deploy the contract on indexes: The indexes to request using the BLOBHASH opcode """ match self: case BlobhashContext.BLOBHASH_SSTORE | BlobhashContext.BLOBHASH_RETURN: return pre.deploy_contract(self.code(indexes=indexes)) case BlobhashContext.CALL | BlobhashContext.CALLCODE | BlobhashContext.STATICCALL: blobhash_return_address = BlobhashContext.BLOBHASH_RETURN.deploy_contract( pre=pre, indexes=indexes ) call_opcode = ( Op.CALL if self == BlobhashContext.CALL else (Op.CALLCODE if self == BlobhashContext.CALLCODE else Op.STATICCALL) ) bytecode = ( sum( Op.MSTORE(offset=0, value=index) + Op.POP( call_opcode( address=blobhash_return_address, args_offset=0, args_size=32, ret_offset=32, ret_size=32, ) ) + Op.SSTORE(index, Op.MLOAD(offset=32)) for index in indexes ) + Op.STOP ) return pre.deploy_contract(bytecode) case BlobhashContext.DELEGATECALL: blobhash_sstore_address = pre.deploy_contract( BlobhashContext.BLOBHASH_SSTORE.code(indexes=indexes) ) bytecode = Op.POP( Op.DELEGATECALL( address=blobhash_sstore_address, args_offset=0, args_size=Op.CALLDATASIZE() ) ) return pre.deploy_contract(bytecode) case BlobhashContext.CREATE | BlobhashContext.CREATE2: initcode = BlobhashContext.INITCODE.code(indexes=indexes) initcode_address = pre.deploy_contract(initcode) create_opcode = Op.CREATE if self == BlobhashContext.CREATE else Op.CREATE2 create_bytecode = Op.EXTCODECOPY( address=initcode_address, dest_offset=0, offset=0, size=len(initcode) ) + Op.POP( create_opcode(value=0, offset=0, size=len(initcode), salt=0) if create_opcode == Op.CREATE2 else create_opcode(value=0, offset=0, size=len(initcode)) ) return pre.deploy_contract(create_bytecode) case _: raise ValueError(f"Invalid context: {self}") @pytest.fixture() def simple_blob_hashes( max_blobs_per_tx: int, ) -> List[Hash]: """ Return a simple list of blob versioned hashes ranging from bytes32(1 to 4). """ return add_kzg_version( [(1 << x) for x in range(max_blobs_per_tx)], Spec.BLOB_COMMITMENT_VERSION_KZG, ) @pytest.mark.parametrize( "test_case", [ "on_top_level_call_stack", "on_max_value", "on_CALL", "on_DELEGATECALL", "on_STATICCALL", "on_CALLCODE", "on_CREATE", "on_CREATE2", ], ids=lambda x: x, ) def test_blobhash_opcode_contexts( pre: Alloc, test_case: str, max_blobs_per_tx: int, simple_blob_hashes: List[bytes], fork: Fork, state_test: StateTestFiller, ) -> None: """ Tests that the `BLOBHASH` opcode functions correctly when called in different contexts. - `BLOBHASH` opcode on the top level of the call stack. - `BLOBHASH` opcode on the max value. - `BLOBHASH` opcode on `CALL`, `DELEGATECALL`, `STATICCALL`, and `CALLCODE`. - `BLOBHASH` opcode on Initcode. - `BLOBHASH` opcode on `CREATE` and `CREATE2`. - `BLOBHASH` opcode on transaction types 0, 1 and 2. """ tx_to: Address post: dict[Address, Account] match test_case: case "on_top_level_call_stack": blobhash_sstore_address = BlobhashContext.BLOBHASH_SSTORE.deploy_contract( pre=pre, indexes=range(max_blobs_per_tx + 1) ) tx_to = blobhash_sstore_address post = { blobhash_sstore_address: Account( storage=dict( zip( range(len(simple_blob_hashes)), simple_blob_hashes, strict=False, ) ) ), } case "on_max_value": blobhash_sstore_address = BlobhashContext.BLOBHASH_SSTORE.deploy_contract( pre=pre, indexes=[2**256 - 1] ) tx_to = blobhash_sstore_address post = { blobhash_sstore_address: Account(storage={}), } case "on_CALL" | "on_DELEGATECALL" | "on_STATICCALL" | "on_CALLCODE": call_context: BlobhashContext match test_case: case "on_CALL": call_context = BlobhashContext.CALL case "on_DELEGATECALL": call_context = BlobhashContext.DELEGATECALL case "on_STATICCALL": call_context = BlobhashContext.STATICCALL case "on_CALLCODE": call_context = BlobhashContext.CALLCODE call_address = call_context.deploy_contract( pre=pre, indexes=range(max_blobs_per_tx + 1) ) tx_to = call_address post = { call_address: Account( storage=dict( zip( range(len(simple_blob_hashes)), simple_blob_hashes, strict=False, ) ) ), } case "on_CREATE" | "on_CREATE2": create_context: BlobhashContext opcode: Op match test_case: case "on_CREATE": create_context = BlobhashContext.CREATE opcode = Op.CREATE case "on_CREATE2": create_context = BlobhashContext.CREATE2 opcode = Op.CREATE2 factory_address = create_context.deploy_contract( pre=pre, indexes=range(max_blobs_per_tx + 1) ) created_contract_address = compute_create_address( address=factory_address, nonce=1, # the create contract will have nonce 1 for its first create salt=0, initcode=BlobhashContext.INITCODE.code(indexes=range(max_blobs_per_tx + 1)), opcode=opcode, ) tx_to = factory_address post = { created_contract_address: Account( storage=dict( zip(range(len(simple_blob_hashes)), simple_blob_hashes, strict=False) ) ), } case _: raise Exception(f"Unknown test case {test_case}") state_test( pre=pre, tx=Transaction( ty=Spec.BLOB_TX_TYPE, to=tx_to, gas_limit=500_000, max_fee_per_blob_gas=fork.min_base_fee_per_blob_gas() * 10, blob_versioned_hashes=simple_blob_hashes, sender=pre.fund_eoa(), ), post=post, ) @pytest.mark.with_all_tx_types(selector=lambda x: x != 3) def test_blobhash_opcode_contexts_tx_types( pre: Alloc, tx_type: int, state_test: StateTestFiller, ) -> None: """ Tests that the `BLOBHASH` opcode functions correctly when called in different contexts. - `BLOBHASH` opcode on the top level of the call stack. - `BLOBHASH` opcode on the max value. - `BLOBHASH` opcode on `CALL`, `DELEGATECALL`, `STATICCALL`, and `CALLCODE`. - `BLOBHASH` opcode on Initcode. - `BLOBHASH` opcode on `CREATE` and `CREATE2`. - `BLOBHASH` opcode on transaction types 0, 1 and 2. """ blobhash_sstore_address = BlobhashContext.BLOBHASH_SSTORE.deploy_contract(pre=pre, indexes=[0]) tx_kwargs = { "ty": tx_type, "to": blobhash_sstore_address, "sender": pre.fund_eoa(), "gas_limit": 500_000, } if tx_type == 4: signer = pre.fund_eoa(amount=0) tx_kwargs["authorization_list"] = [ AuthorizationTuple( signer=signer, address=Address(0), nonce=0, ) ] state_test( pre=pre, tx=Transaction(**tx_kwargs), post={ blobhash_sstore_address: Account(storage={0: 0}), }, ) ================================================ FILE: tests/cancun/eip4844_blobs/test_excess_blob_gas.py ================================================ """ Tests `excessBlobGas` and `blobGasUsed` block fields for EIP-4844. Tests `excessBlobGas` and `blobGasUsed` block fields for [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844) Note: Adding a new test Add a function that is named `test_` and takes at least the following arguments. Required arguments: - `blockchain_test` - `env` - `pre` - `blocks` - `post` - `correct_excess_blob_gas` The following arguments can be parametrized to generate new combinations and test cases: - new_blobs: Number of blobs in the block (automatically split across transactions as needed) All other `pytest.fixture` fixtures can be parametrized to generate new combinations and test cases. """ import itertools from typing import Callable, Dict, Iterator, List, Mapping, Optional, Tuple import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, Account, Address, Alloc, Block, BlockchainTestFiller, BlockException, Bytecode, Environment, Hash, Header, Transaction, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, SpecHelpers, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version # All tests run from Cancun fork pytestmark = pytest.mark.valid_from("Cancun") @pytest.fixture def parent_excess_blobs(fork: Fork) -> int: # noqa: D103 """ By default we start with an intermediate value between the target and max. """ return (fork.max_blobs_per_block() + fork.target_blobs_per_block()) // 2 + 1 @pytest.fixture def header_excess_blobs_delta() -> Optional[int]: # noqa: D103 return None @pytest.fixture def header_excess_blob_gas_delta() -> Optional[int]: # noqa: D103 return None @pytest.fixture def header_excess_blob_gas( # noqa: D103 correct_excess_blob_gas: int, header_excess_blobs_delta: Optional[int], header_excess_blob_gas_delta: Optional[int], blob_gas_per_blob: int, ) -> Optional[int]: if header_excess_blobs_delta is not None: modified_excess_blob_gas = correct_excess_blob_gas + ( header_excess_blobs_delta * blob_gas_per_blob ) if modified_excess_blob_gas < 0: modified_excess_blob_gas = 2**64 + (modified_excess_blob_gas) return modified_excess_blob_gas if header_excess_blob_gas_delta is not None: return correct_excess_blob_gas + header_excess_blob_gas_delta return None @pytest.fixture def tx_blob_data_cost( tx_max_fee_per_blob_gas: int, new_blobs: int, blob_gas_per_blob: int, ) -> int: """Calculate total blob data cost for all blobs in block.""" return tx_max_fee_per_blob_gas * blob_gas_per_blob * new_blobs @pytest.fixture def tx_gas_limit() -> int: # noqa: D103 return 45000 @pytest.fixture def tx_exact_cost( tx_value: int, tx_max_fee_per_gas: int, tx_blob_data_cost: int, tx_gas_limit: int, new_blobs: int, fork: Fork, ) -> int: """Calculate exact cost for all transactions.""" if new_blobs == 0: num_transactions = 1 else: num_transactions = (new_blobs + fork.max_blobs_per_tx() - 1) // fork.max_blobs_per_tx() base_cost_per_tx = (tx_gas_limit * tx_max_fee_per_gas) + tx_value total_base_cost = base_cost_per_tx * num_transactions return total_base_cost + tx_blob_data_cost @pytest.fixture def destination_account_bytecode() -> Bytecode: # noqa: D103 # Verify that the BLOBBASEFEE opcode reflects the current blob gas cost return Op.SSTORE(0, Op.BLOBBASEFEE) @pytest.fixture def destination_account( # noqa: D103 pre: Alloc, destination_account_bytecode: Bytecode, ) -> Address: return pre.deploy_contract(destination_account_bytecode) @pytest.fixture def sender(pre: Alloc, tx_exact_cost: int) -> Address: # noqa: D103 return pre.fund_eoa(tx_exact_cost) @pytest.fixture def txs( # noqa: D103 sender: EOA, new_blobs: int, tx_max_fee_per_gas: int, tx_max_fee_per_blob_gas: int, tx_gas_limit: int, destination_account: Address, fork: Fork, ) -> List[Transaction]: if new_blobs == 0: # Send a normal type two tx instead return [ Transaction( ty=2, sender=sender, to=destination_account, value=1, gas_limit=tx_gas_limit, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=0, access_list=[], ) ] # Split into multi txs for forks where max per tx < max per block txs = [] blob_index = 0 remaining_blobs = new_blobs while remaining_blobs > 0: tx_blobs = min(remaining_blobs, fork.max_blobs_per_tx()) txs.append( Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=1, gas_limit=tx_gas_limit, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=0, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=[], blob_versioned_hashes=add_kzg_version( [Hash(blob_index + x) for x in range(tx_blobs)], Spec.BLOB_COMMITMENT_VERSION_KZG, ), ) ) blob_index += tx_blobs remaining_blobs -= tx_blobs return txs @pytest.fixture def header_blob_gas_used() -> Optional[int]: # noqa: D103 return None @pytest.fixture def correct_blob_gas_used( txs: List[Transaction], blob_gas_per_blob: int, ) -> int: """Calculate the correct `blobGasUsed` for all txs.""" total_blob_gas = 0 for tx in txs: total_blob_gas += Spec.get_total_blob_gas(tx=tx, blob_gas_per_blob=blob_gas_per_blob) return total_blob_gas @pytest.fixture def blocks( # noqa: D103 txs: List[Transaction], header_excess_blob_gas: Optional[int], header_blob_gas_used: Optional[int], correct_excess_blob_gas: int, correct_blob_gas_used: int, non_zero_blob_gas_used_genesis_block: Block, max_blobs_per_block: int, blob_gas_per_blob: int, ) -> List[Block]: blocks = ( [] if non_zero_blob_gas_used_genesis_block is None else [non_zero_blob_gas_used_genesis_block] ) def add_block( header_modifier: Optional[Dict] = None, exception_message: Optional[BlockException | List[BlockException]] = None, ) -> None: """Add a block to the blocks list.""" blocks.append( Block( txs=txs, rlp_modifier=Header(**header_modifier) if header_modifier else None, header_verify=Header( excess_blob_gas=correct_excess_blob_gas, blob_gas_used=correct_blob_gas_used, ), exception=exception_message, ) ) if header_excess_blob_gas is not None: add_block( header_modifier={"excess_blob_gas": header_excess_blob_gas}, exception_message=BlockException.INCORRECT_EXCESS_BLOB_GAS, ) elif header_blob_gas_used is not None: if header_blob_gas_used > (max_blobs_per_block * blob_gas_per_blob): add_block( header_modifier={"blob_gas_used": header_blob_gas_used}, exception_message=[ BlockException.BLOB_GAS_USED_ABOVE_LIMIT, BlockException.INCORRECT_BLOB_GAS_USED, ], ) else: add_block( header_modifier={"blob_gas_used": header_blob_gas_used}, exception_message=BlockException.INCORRECT_BLOB_GAS_USED, ) else: add_block() return blocks @pytest.fixture def post( # noqa: D103 destination_account: Address, tx_value: int, blob_gas_price: int, txs: List[Transaction], ) -> Mapping[Address, Account]: return { destination_account: Account( storage={0: blob_gas_price}, balance=tx_value * len(txs), ), } @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: range(0, fork.max_blobs_per_block() + 1), ) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", lambda fork: range(0, fork.target_blobs_per_block() + 1), ) @pytest.mark.parametrize("new_blobs", [1]) def test_correct_excess_blob_gas_calculation( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], post: Mapping[Address, Account], correct_excess_blob_gas: int, ) -> None: """ Test calculation of the `excessBlobGas` increase/decrease across multiple blocks with and without blobs. - With parent block containing `[0, MAX_BLOBS_PER_BLOCK]` blobs - With parent block containing `[0, TARGET_BLOBS_PER_BLOCK]` equivalent value of excess blob gas """ blockchain_test( pre=pre, post=post, blocks=blocks, genesis_environment=env, tag=f"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}", ) def generate_blob_gas_cost_increases_tests(delta: int) -> Callable[[Fork], List[int]]: """ Generate a list of block excess blob gas values where the blob gas price increases based on fork properties. """ def generator_function(fork: Fork) -> List[int]: gas_per_blob = fork.blob_gas_per_blob() return [ SpecHelpers.get_min_excess_blobs_for_blob_gas_price( fork=fork, blob_gas_price=blob_gas_price ) + delta for blob_gas_price in [ 2, # First blob gas cost increase 2**32 // gas_per_blob, # Data tx wei cost 2^32 2**32, # blob gas cost 2^32 2**64 // gas_per_blob, # Data tx wei cost 2^64 2**64, # blob gas cost 2^64 ( 120_000_000 * (10**18) // gas_per_blob ), # Data tx wei is current total Ether supply ] ] return generator_function @pytest.mark.parametrize_by_fork( "parent_excess_blobs", generate_blob_gas_cost_increases_tests(-1), ) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: [fork.target_blobs_per_block() + 1], ) @pytest.mark.parametrize("new_blobs", [1]) def test_correct_increasing_blob_gas_costs( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], post: Mapping[Address, Account], correct_excess_blob_gas: int, ) -> None: """ Test calculation of the `excessBlobGas` and blob gas tx costs at value points where the cost increases to interesting amounts. - At the first blob gas cost increase (1 to 2) - At total transaction data cost increase to `> 2^32` - At blob gas wei cost increase to `> 2^32` - At total transaction data cost increase to `> 2^64` - At blob gas wei cost increase to `> 2^64` - At blob gas wei cost increase of around current total Ether supply """ blockchain_test( pre=pre, post=post, blocks=blocks, genesis_environment=env, tag=f"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}", ) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", generate_blob_gas_cost_increases_tests(0), ) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: [fork.target_blobs_per_block() - 1], ) @pytest.mark.parametrize("new_blobs", [1]) def test_correct_decreasing_blob_gas_costs( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], post: Mapping[Address, Account], correct_excess_blob_gas: int, ) -> None: """ Test calculation of the `excessBlobGas` and blob gas tx costs at value points where the cost decreases to interesting amounts. See test_correct_increasing_blob_gas_costs. """ blockchain_test( pre=pre, post=post, blocks=blocks, genesis_environment=env, tag=f"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}", ) @pytest.mark.parametrize("header_excess_blob_gas", [0]) @pytest.mark.parametrize("new_blobs", [0, 1]) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: range(0, fork.max_blobs_per_block() + 1), ) @pytest.mark.exception_test def test_invalid_zero_excess_blob_gas_in_header( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas` in the header drops to zero in a block with or without data blobs, but the excess blobs in the parent are greater than target. """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) def all_invalid_blob_gas_used_combinations(fork: Fork) -> Iterator[Tuple[int, int]]: """Return all invalid blob gas used combinations.""" gas_per_blob = fork.blob_gas_per_blob() for new_blobs in range(0, fork.max_blobs_per_block() + 1): for header_blob_gas_used in range(0, fork.max_blobs_per_block() + 1): if new_blobs != header_blob_gas_used: yield (new_blobs, header_blob_gas_used * gas_per_blob) yield (new_blobs, 2**64 - 1) @pytest.mark.parametrize_by_fork( "new_blobs,header_blob_gas_used", all_invalid_blob_gas_used_combinations, ) @pytest.mark.parametrize("parent_blobs", [0]) @pytest.mark.exception_test @pytest.mark.slow() def test_invalid_blob_gas_used_in_header( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], new_blobs: int, header_blob_gas_used: Optional[int], blob_gas_per_blob: int, ) -> None: """ Test rejection of blocks where the `blobGasUsed` in the header is invalid. - `blobGasUsed` is not equal to the number of data blobs in the block - `blobGasUsed` is the max uint64 value """ if header_blob_gas_used is None: raise Exception("test case is badly formatted") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(new_blobs * blob_gas_per_blob)}", f"header:{hex(header_blob_gas_used)}", ] ), ) def generate_invalid_excess_blob_gas_above_target_change_tests(fork: Fork) -> List: """Return all invalid excess blob gas above target change tests.""" return [ pytest.param(-1, 0, id="zero_blobs_decrease_more_than_expected"), pytest.param(+1, fork.max_blobs_per_block(), id="max_blobs_increase_more_than_expected"), ] @pytest.mark.parametrize_by_fork( "header_excess_blobs_delta,parent_blobs", generate_invalid_excess_blob_gas_above_target_change_tests, ) @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.exception_test def test_invalid_excess_blob_gas_above_target_change( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas`. - decreases more than `TARGET_BLOB_GAS_PER_BLOCK` in a single block with zero blobs. - increases more than `TARGET_BLOB_GAS_PER_BLOCK` in a single block with max blobs. """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: [ b for b in range(0, fork.max_blobs_per_block() + 1) if b != fork.target_blobs_per_block() ], ) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", lambda fork: [1, fork.target_blobs_per_block()] ) @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.exception_test def test_invalid_static_excess_blob_gas( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, parent_excess_blob_gas: int, ) -> None: """ Test rejection of blocks where the `excessBlobGas` remains unchanged but the parent blobs included are not `TARGET_BLOBS_PER_BLOCK`. Test is parametrized to `MAX_BLOBS_PER_BLOCK` and `TARGET_BLOBS_PER_BLOCK`. """ blocks[-1].rlp_modifier = Header(excess_blob_gas=parent_excess_blob_gas) blocks[-1].header_verify = None blocks[-1].exception = BlockException.INCORRECT_EXCESS_BLOB_GAS blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(parent_excess_blob_gas)}", ] ), ) @pytest.mark.parametrize_by_fork( "header_excess_blobs_delta", lambda fork: range(1, fork.max_blobs_per_block()), ) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: range(0, fork.target_blobs_per_block() + 1), ) @pytest.mark.parametrize("parent_excess_blobs", [0]) # Start at 0 @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.exception_test def test_invalid_excess_blob_gas_target_blobs_increase_from_zero( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas` increases from zero, even when the included blobs are on or below target. Test is parametrized according to `[0, TARGET_BLOBS_PER_BLOCK` new blobs. """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) @pytest.mark.parametrize("header_excess_blob_gas", [0]) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: range(fork.target_blobs_per_block() + 1, fork.max_blobs_per_block() + 1), ) @pytest.mark.parametrize("parent_excess_blobs", [0]) # Start at 0 @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.exception_test def test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas` does not increase from zero, even when the included blobs is above target. Test is parametrized to `[TARGET_BLOBS_PER_BLOCK+1, MAX_BLOBS_PER_BLOCK]` new blobs. """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) @pytest.mark.parametrize_by_fork( "parent_blobs,header_excess_blobs_delta", lambda fork: itertools.product( # parent_blobs range(0, fork.max_blobs_per_block() + 1), # header_excess_blobs_delta (from correct value) [ x for x in range(-fork.target_blobs_per_block(), fork.target_blobs_per_block() + 1) if x != 0 ], ), ) @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.exception_test def test_invalid_excess_blob_gas_change( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas` changes to an invalid value. Given a parent block containing `[0, MAX_BLOBS_PER_BLOCK]` blobs, test an invalid `excessBlobGas` value by changing it by `[-TARGET_BLOBS_PER_BLOCK, TARGET_BLOBS_PER_BLOCK]` from the correct value. """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) @pytest.mark.parametrize_by_fork( "header_excess_blob_gas", lambda fork: [ (2**64 + (x * fork.blob_gas_per_blob())) for x in range(-fork.target_blobs_per_block(), 0) ], ) @pytest.mark.parametrize_by_fork( "parent_blobs", lambda fork: range(fork.target_blobs_per_block()), ) @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", lambda fork: range(fork.target_blobs_per_block()), ) @pytest.mark.exception_test @pytest.mark.slow() def test_invalid_negative_excess_blob_gas( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas` changes to the two's complement equivalent of the negative value after subtracting target blobs. Reasoning is that the `excessBlobGas` is a `uint64`, so it cannot be negative, and we test for a potential underflow here. """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) @pytest.mark.parametrize_by_fork( "parent_blobs,header_excess_blob_gas_delta", lambda fork: [ (fork.target_blobs_per_block() + 1, 1), (fork.target_blobs_per_block() + 1, fork.blob_gas_per_blob() - 1), (fork.target_blobs_per_block() - 1, -1), (fork.target_blobs_per_block() - 1, -(fork.blob_gas_per_blob() - 1)), ], ) @pytest.mark.parametrize("new_blobs", [1]) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", lambda fork: [fork.target_blobs_per_block() + 1], ) @pytest.mark.exception_test @pytest.mark.slow() def test_invalid_non_multiple_excess_blob_gas( blockchain_test: BlockchainTestFiller, env: Environment, pre: Mapping[Address, Account], blocks: List[Block], correct_excess_blob_gas: int, header_excess_blob_gas: Optional[int], ) -> None: """ Test rejection of blocks where the `excessBlobGas` changes to a value that is not a multiple of Spec.GAS_PER_BLOB`. - Parent block contains `TARGET_BLOBS_PER_BLOCK + 1` blobs, but `excessBlobGas` is off by +/-1 - Parent block contains `TARGET_BLOBS_PER_BLOCK - 1` blobs, but `excessBlobGas` is off by +/-1 """ if header_excess_blob_gas is None: raise Exception("test case is badly formatted") if header_excess_blob_gas == correct_excess_blob_gas: raise Exception("invalid test case") blockchain_test( pre=pre, post={}, blocks=blocks, genesis_environment=env, tag="-".join( [ f"correct:{hex(correct_excess_blob_gas)}", f"header:{hex(header_excess_blob_gas)}", ] ), ) ================================================ FILE: tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py ================================================ """ Test `excessBlobGas` & `blobGasUsed` block fields at fork transition. Tests for [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844). """ from typing import List, Mapping import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, Account, Address, Alloc, Block, BlockchainTestFiller, BlockException, EngineAPIError, Environment, Hash, Header, Transaction, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, SpecHelpers, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version # Timestamp of the fork FORK_TIMESTAMP = 15_000 BASE_FEE_MAX_CHANGE_DENOMINATOR = 8 @pytest.fixture def block_gas_limit(fork: Fork) -> int: # noqa: D103 gas_limit = int(Environment().gas_limit) tx_gas_limit_cap = fork.transaction_gas_limit_cap() if tx_gas_limit_cap is not None: # Below transaction gas limit cap to reach gas limit easily gas_limit = min(gas_limit, tx_gas_limit_cap * 2) return gas_limit @pytest.fixture def genesis_environment(block_gas_limit: int, block_base_fee_per_gas: int) -> Environment: """ Genesis environment that enables existing transition tests to be used of BPO forks. Compatible with all fork transitions. """ return Environment( base_fee_per_gas=(block_base_fee_per_gas * BASE_FEE_MAX_CHANGE_DENOMINATOR) // 7, gas_limit=block_gas_limit, ) @pytest.fixture def pre_fork_blobs_per_block(fork: Fork) -> int: """Amount of blobs to produce with the pre-fork rules.""" if fork.supports_blobs(timestamp=0): return fork.max_blobs_per_block(timestamp=0) return 0 @pytest.fixture def post_fork_blobs_per_block(fork: Fork) -> int: """Amount of blobs to produce with the post-fork rules.""" return fork.target_blobs_per_block(timestamp=FORK_TIMESTAMP) + 1 @pytest.fixture def pre_fork_blocks( pre_fork_blobs_per_block: int, destination_account: Address, gas_spender_account: Address, sender: EOA, fork: Fork, block_base_fee_per_gas: int, block_gas_limit: int, ) -> List[Block]: """Generate blocks to reach the fork.""" blocks = [] for t in range(999, FORK_TIMESTAMP, 1_000): remaining_gas = block_gas_limit // 2 if pre_fork_blobs_per_block == 0: blocks.append( Block( txs=[ Transaction( to=gas_spender_account, value=0, gas_limit=remaining_gas, max_fee_per_gas=1_000_000, max_priority_fee_per_gas=10, sender=sender, ) ], timestamp=t, ) ) continue # Split into multi txs for forks where max per tx < max per block txs = [] blob_index = 0 remaining_blobs = pre_fork_blobs_per_block max_blobs_per_tx = fork.max_blobs_per_tx(timestamp=0) while remaining_blobs > 0: tx_blobs = min(remaining_blobs, max_blobs_per_tx) blob_tx_gas_limit = 21_000 txs.append( Transaction( ty=Spec.BLOB_TX_TYPE, to=destination_account, value=1, gas_limit=blob_tx_gas_limit, max_fee_per_gas=1_000_000, max_priority_fee_per_gas=10, max_fee_per_blob_gas=100, access_list=[], blob_versioned_hashes=add_kzg_version( [Hash(blob_index + x) for x in range(tx_blobs)], Spec.BLOB_COMMITMENT_VERSION_KZG, ), sender=sender, ) ) remaining_gas -= blob_tx_gas_limit blob_index += tx_blobs remaining_blobs -= tx_blobs txs.append( Transaction( to=gas_spender_account, value=0, gas_limit=remaining_gas, max_fee_per_gas=1_000_000, max_priority_fee_per_gas=10, sender=sender, ) ) block = Block( txs=txs, timestamp=t, header_verify=Header(base_fee_per_gas=block_base_fee_per_gas) ) blocks.append(block) return blocks @pytest.fixture def pre_fork_excess_blobs( fork: Fork, pre_fork_blobs_per_block: int, pre_fork_blocks: List[Block], ) -> int: """ Return the cumulative excess blobs up until the fork given the pre_fork_blobs_per_block and the target blobs in the fork prior. """ if not fork.supports_blobs(timestamp=0): return 0 target_blobs = fork.target_blobs_per_block(timestamp=0) if pre_fork_blobs_per_block > target_blobs: return (pre_fork_blobs_per_block - target_blobs) * (len(pre_fork_blocks) - 1) return 0 @pytest.fixture def post_fork_block_count(fork: Fork) -> int: """Amount of blocks to produce with the post-fork rules.""" return SpecHelpers.get_min_excess_blobs_for_blob_gas_price(fork=fork, blob_gas_price=2) // ( fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP) - fork.target_blobs_per_block(timestamp=FORK_TIMESTAMP) ) @pytest.fixture def destination_account(pre: Alloc) -> Address: # noqa: D103 # Empty account to receive the blobs return pre.fund_eoa(amount=0) @pytest.fixture def gas_spender_account(pre: Alloc) -> Address: # noqa: D103 # Account that when called consumes the entirety of the transaction's gas return pre.deploy_contract(code=Op.INVALID) @pytest.fixture def fork_block_excess_blob_gas( fork: Fork, pre_fork_excess_blobs: int, pre_fork_blobs_per_block: int, block_base_fee_per_gas: int, ) -> int: """Calculate the expected excess blob gas for the fork block.""" if pre_fork_blobs_per_block == 0: return 0 calc_excess_blob_gas_post_fork = fork.excess_blob_gas_calculator(timestamp=FORK_TIMESTAMP) return calc_excess_blob_gas_post_fork( parent_excess_blobs=pre_fork_excess_blobs, parent_blob_count=pre_fork_blobs_per_block, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def post_fork_blocks( destination_account: Address, post_fork_block_count: int, post_fork_blobs_per_block: int, fork_block_excess_blob_gas: int, sender: EOA, pre_fork_blocks: List[Block], fork: Fork, ) -> list[Block]: """Generate blocks after the fork.""" blocks = [] for i in range(post_fork_block_count): if post_fork_blobs_per_block == 0: if i == 0: blocks.append( Block( txs=[], header_verify=Header( excess_blob_gas=fork_block_excess_blob_gas, ), ) ) else: blocks.append(Block(txs=[])) continue # Split into multi txs for forks where max per tx < max per block txs = [] blob_index = 0 remaining_blobs = post_fork_blobs_per_block max_blobs_per_tx = fork.max_blobs_per_tx(timestamp=FORK_TIMESTAMP) while remaining_blobs > 0: tx_blobs = min(remaining_blobs, max_blobs_per_tx) txs.append( Transaction( ty=Spec.BLOB_TX_TYPE, to=destination_account, value=1, gas_limit=100_000, max_fee_per_gas=1_000_000, max_priority_fee_per_gas=10, max_fee_per_blob_gas=100, blob_versioned_hashes=add_kzg_version( [Hash(blob_index + x) for x in range(tx_blobs)], Spec.BLOB_COMMITMENT_VERSION_KZG, ), sender=sender, ) ) blob_index += tx_blobs remaining_blobs -= tx_blobs if i == 0: blocks.append( Block( txs=txs, header_verify=Header( excess_blob_gas=fork_block_excess_blob_gas, ), ) ) else: blocks.append(Block(txs=txs)) return blocks @pytest.fixture def post( # noqa: D103 pre_fork_blocks: List[Block], pre_fork_blobs_per_block: int, post_fork_block_count: int, post_fork_blobs_per_block: int, destination_account: Address, fork: Fork, ) -> Mapping[Address, Account]: pre_fork_tx_count_per_block = 0 if pre_fork_blobs_per_block > 0: max_blobs_per_tx_pre = fork.max_blobs_per_tx(timestamp=0) pre_fork_tx_count_per_block = ( pre_fork_blobs_per_block + max_blobs_per_tx_pre - 1 ) // max_blobs_per_tx_pre post_fork_tx_count_per_block = 0 if post_fork_blobs_per_block > 0: max_blobs_per_tx_post = fork.max_blobs_per_tx(timestamp=FORK_TIMESTAMP) post_fork_tx_count_per_block = ( post_fork_blobs_per_block + max_blobs_per_tx_post - 1 ) // max_blobs_per_tx_post pre_fork_value = len(pre_fork_blocks) * pre_fork_tx_count_per_block post_fork_value = post_fork_block_count * post_fork_tx_count_per_block total_value = pre_fork_value + post_fork_value if total_value == 0: return {} return { destination_account: Account(balance=total_value), } @pytest.mark.valid_at_transition_to("Cancun", subsequent_forks=False) @pytest.mark.parametrize( "excess_blob_gas_present,blob_gas_used_present", [ (True, False), (False, True), (True, True), ], ) @pytest.mark.exception_test def test_invalid_pre_fork_block_with_blob_fields( blockchain_test: BlockchainTestFiller, genesis_environment: Environment, pre: Alloc, pre_fork_blocks: List[Block], excess_blob_gas_present: bool, blob_gas_used_present: bool, ) -> None: """ Test block rejection when `excessBlobGas` and/or `blobGasUsed` fields are present on a pre-fork block. Blocks sent by NewPayloadV2 (Shanghai) that contain `excessBlobGas` and `blobGasUsed` fields must be rejected with the appropriate `EngineAPIError.InvalidParams` error error. """ header_modifier = Header( excess_blob_gas=0 if excess_blob_gas_present else None, blob_gas_used=0 if blob_gas_used_present else None, ) blockchain_test( pre=pre, post={}, blocks=pre_fork_blocks[:-1] + [ Block( timestamp=(FORK_TIMESTAMP - 1), rlp_modifier=header_modifier, exception=BlockException.INCORRECT_BLOCK_FORMAT, engine_api_error_code=EngineAPIError.InvalidParams, ) ], genesis_environment=genesis_environment, ) @pytest.mark.valid_at_transition_to("Cancun", subsequent_forks=False) @pytest.mark.parametrize( "excess_blob_gas_missing,blob_gas_used_missing", [ (True, False), (False, True), (True, True), ], ) @pytest.mark.exception_test def test_invalid_post_fork_block_without_blob_fields( blockchain_test: BlockchainTestFiller, genesis_environment: Environment, pre: Alloc, pre_fork_blocks: List[Block], excess_blob_gas_missing: bool, blob_gas_used_missing: bool, ) -> None: """ Test block rejection when `excessBlobGas` and/or `blobGasUsed` fields are missing on a post-fork block. Blocks sent by NewPayloadV3 (Cancun) without `excessBlobGas` and `blobGasUsed` fields must be rejected with the appropriate `EngineAPIError.InvalidParams` error. """ header_modifier = Header() if excess_blob_gas_missing: header_modifier.excess_blob_gas = Header.REMOVE_FIELD if blob_gas_used_missing: header_modifier.blob_gas_used = Header.REMOVE_FIELD blockchain_test( pre=pre, post={}, blocks=pre_fork_blocks + [ Block( timestamp=FORK_TIMESTAMP, rlp_modifier=header_modifier, exception=BlockException.INCORRECT_BLOCK_FORMAT, engine_api_error_code=EngineAPIError.InvalidParams, ) ], genesis_environment=genesis_environment, ) @pytest.mark.valid_at_transition_to("Cancun", subsequent_forks=False) @pytest.mark.parametrize_by_fork( "post_fork_block_count,post_fork_blobs_per_block", lambda fork: [ pytest.param( SpecHelpers.get_min_excess_blobs_for_blob_gas_price(fork=fork, blob_gas_price=2) // ( fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP) - fork.target_blobs_per_block(timestamp=FORK_TIMESTAMP) ) + 2, fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP), id="max_blobs", ), pytest.param(10, 0, id="no_blobs"), pytest.param(10, fork.target_blobs_per_block(timestamp=FORK_TIMESTAMP), id="target_blobs"), ], ) def test_fork_transition_excess_blob_gas_at_blob_genesis( blockchain_test: BlockchainTestFiller, genesis_environment: Environment, pre: Alloc, pre_fork_blocks: List[Block], post_fork_blocks: List[Block], post: Mapping[Address, Account], ) -> None: """ Test `excessBlobGas` calculation in the header when the fork is activated. Also produce enough blocks to test the blob gas price increase when the block is full with `SpecHelpers.max_blobs_per_block()` blobs. """ blockchain_test( pre=pre, post=post, blocks=pre_fork_blocks + post_fork_blocks, genesis_environment=genesis_environment, ) @pytest.mark.valid_at_transition_to("Prague", subsequent_forks=True) @pytest.mark.parametrize_by_fork( "post_fork_block_count,pre_fork_blobs_per_block,post_fork_blobs_per_block", lambda fork: [ pytest.param( SpecHelpers.get_min_excess_blobs_for_blob_gas_price(fork=fork, blob_gas_price=2) // ( fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP) - fork.target_blobs_per_block(timestamp=FORK_TIMESTAMP) ) + 2, fork.max_blobs_per_block(timestamp=0), fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP), id="max_blobs_before_and_after", ), pytest.param( 10, 0, fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP), id="no_blobs_before_and_max_blobs_after", ), pytest.param( 10, fork.max_blobs_per_block(timestamp=0), 0, id="max_blobs_before_and_no_blobs_after", ), pytest.param( 10, fork.target_blobs_per_block(timestamp=0), fork.target_blobs_per_block(timestamp=FORK_TIMESTAMP), id="target_blobs_before_and_after", ), pytest.param( 10, 1, fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP), id="single_blob_before_and_max_blobs_after", ), pytest.param( 10, fork.max_blobs_per_block(timestamp=0), 1, id="max_blobs_before_and_single_blob_after", ), ], ) @pytest.mark.parametrize("block_base_fee_per_gas", [7, 16, 23]) def test_fork_transition_excess_blob_gas_post_blob_genesis( blockchain_test: BlockchainTestFiller, genesis_environment: Environment, pre: Alloc, pre_fork_blocks: List[Block], post_fork_blocks: List[Block], post: Mapping[Address, Account], ) -> None: """ Test `excessBlobGas` calculation in the header when the fork is activated. """ blockchain_test( pre=pre, post=post, blocks=pre_fork_blocks + post_fork_blocks, genesis_environment=genesis_environment, ) ================================================ FILE: tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py ================================================ """ Tests point evaluation precompile for [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844). Note: Adding a new test Add a function that is named `test_` and takes at least the following arguments. Required arguments: - `blockchain_test` or `state_test` - `pre` - `tx` - `post` The following arguments *need* to be parametrized or the test will not be generated: - `versioned_hash` - `kzg_commitment` - `z` - `y` - `kzg_proof` - `result` These values correspond to a single call of the precompile, and `result` refers to whether the call should succeed or fail. All other `pytest.fixture` fixtures can be parametrized to generate new combinations and test cases. """ import glob import json import os from enum import Enum from itertools import count from typing import Any, Dict, List, Optional import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, AccessList, Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Environment, StateTestFiller, Storage, Transaction, TransactionReceipt, call_return_code, ) from ethereum_test_vm import Opcodes as Op from .common import INF_POINT, Z_Y_VALID_ENDIANNESS, Z from .spec import Spec, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version class Result(str, Enum): """Result of the point evaluation precompile.""" SUCCESS = "success" FAILURE = "failure" OUT_OF_GAS = "out_of_gas" @pytest.fixture def precompile_input( versioned_hash: Optional[bytes | int], kzg_commitment: bytes | int, z: bytes | int, y: bytes | int, kzg_proof: bytes | int, ) -> bytes: """Format the input for the point evaluation precompile.""" if isinstance(z, int): z = z.to_bytes(32, Z_Y_VALID_ENDIANNESS) if isinstance(y, int): y = y.to_bytes(32, Z_Y_VALID_ENDIANNESS) if isinstance(kzg_commitment, int): kzg_commitment = kzg_commitment.to_bytes(48, "big") if isinstance(kzg_proof, int): kzg_proof = kzg_proof.to_bytes(48, "big") if versioned_hash is None: versioned_hash = Spec.kzg_to_versioned_hash(kzg_commitment) elif isinstance(versioned_hash, int): versioned_hash = versioned_hash.to_bytes(32, "big") return versioned_hash + z + y + kzg_commitment + kzg_proof @pytest.fixture def call_opcode() -> Op: """ Type of call to use to call the precompile. Defaults to Op.CALL, but can be parametrized to use other opcode types. """ return Op.CALL @pytest.fixture def call_gas() -> int: """ Amount of gas to pass to the precompile. Defaults to Spec.POINT_EVALUATION_PRECOMPILE_GAS, but can be parametrized to test different amounts. """ return Spec.POINT_EVALUATION_PRECOMPILE_GAS precompile_caller_storage_keys = count() key_call_return_code = next(precompile_caller_storage_keys) key_return_1 = next(precompile_caller_storage_keys) key_return_2 = next(precompile_caller_storage_keys) key_return_length = next(precompile_caller_storage_keys) key_return_copy_1 = next(precompile_caller_storage_keys) key_return_copy_2 = next(precompile_caller_storage_keys) @pytest.fixture def precompile_caller_storage() -> Storage.StorageDictType: """Storage for the precompile caller contract.""" return { key_call_return_code: 0xBA5E, key_return_1: 0xBA5E, key_return_2: 0xBA5E, key_return_length: 0xBA5E, key_return_copy_1: 0xBA5E, key_return_copy_2: 0xBA5E, } @pytest.fixture def precompile_caller_code(call_opcode: Op, call_gas: int) -> Bytecode: """Code to call the point evaluation precompile.""" precompile_caller_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) precompile_caller_code += Op.SSTORE( key_call_return_code, # https://github.com/ethereum/execution-spec-tests/issues/348 call_opcode( gas=call_gas, address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS, args_offset=0x00, args_size=Op.CALLDATASIZE, ret_offset=0x00, ret_size=0x40, ), ) # Store the result of the precompile call in storage slot 0 precompile_caller_code += ( # Save the returned values into storage Op.SSTORE(key_return_1, Op.MLOAD(0x00)) + Op.SSTORE(key_return_2, Op.MLOAD(0x20)) # Save the returned data length into storage + Op.SSTORE(key_return_length, Op.RETURNDATASIZE) # Save the returned data using RETURNDATACOPY into storage + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE) + Op.SSTORE(key_return_copy_1, Op.MLOAD(0x00)) + Op.SSTORE(key_return_copy_2, Op.MLOAD(0x20)) + Op.STOP ) return precompile_caller_code @pytest.fixture def precompile_caller_balance() -> int: """Storage for the precompile caller contract.""" return 0 @pytest.fixture def precompile_caller_address( pre: Alloc, precompile_caller_code: Bytecode, precompile_caller_storage: Storage.StorageDictType, precompile_caller_balance: int, ) -> Address: """Address of the code to call the point evaluation precompile.""" return pre.deploy_contract( precompile_caller_code, storage=precompile_caller_storage, balance=precompile_caller_balance, ) @pytest.fixture def tx( precompile_caller_address: Address, precompile_input: bytes, sender: EOA, ) -> Transaction: """Prepare transaction used to call the precompile caller account.""" return Transaction( sender=sender, data=precompile_input, to=precompile_caller_address, gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100, ) @pytest.fixture def success( result: Result, call_opcode: Op, ) -> bool: """Prepare expected success or failure for each test.""" if call_opcode == Op.EXTDELEGATECALL: return False if result == Result.OUT_OF_GAS and call_opcode in [Op.EXTCALL, Op.EXTSTATICCALL]: return True return result == Result.SUCCESS @pytest.fixture def post( success: bool, call_opcode: Op, precompile_caller_address: Address, precompile_input: bytes, ) -> Dict: """ Prepare expected post for each test, depending on the success or failure of the precompile call. """ expected_storage: Storage.StorageDictType = {} # CALL operation return code expected_storage[key_call_return_code] = call_return_code( call_opcode, success, revert=call_opcode == Op.EXTDELEGATECALL ) if success: # Success return values expected_storage[key_return_1] = Spec.FIELD_ELEMENTS_PER_BLOB expected_storage[key_return_2] = Spec.BLS_MODULUS # Success return values size expected_storage[key_return_length] = 64 # Success return values from RETURNDATACOPY expected_storage[key_return_copy_1] = Spec.FIELD_ELEMENTS_PER_BLOB expected_storage[key_return_copy_2] = Spec.BLS_MODULUS else: # Failure returns zero values expected_storage[key_return_length] = 0 # Input parameters were not overwritten since the CALL failed expected_storage[key_return_1] = precompile_input[0:32] expected_storage[key_return_2] = precompile_input[32:64] expected_storage[key_return_copy_1] = expected_storage[1] expected_storage[key_return_copy_2] = expected_storage[2] if call_opcode in [Op.EXTCALL, Op.EXTSTATICCALL, Op.EXTDELEGATECALL]: # Input parameters were not overwritten expected_storage[key_return_1] = precompile_input[0:32] expected_storage[key_return_2] = precompile_input[32:64] return { precompile_caller_address: Account( storage=expected_storage, ), } @pytest.mark.parametrize( "z,y,kzg_commitment,kzg_proof,versioned_hash", [ pytest.param(Spec.BLS_MODULUS - 1, 0, INF_POINT, INF_POINT, None, id="in_bounds_z"), pytest.param( # Example valid input from a Mainnet transaction # https://etherscan.io/tx/0xcb3dc8f3b14f1cda0c16a619a112102a8ec70dce1b3f1b28272227cf8d5fbb0e 0x019123BCB9D06356701F7BE08B4494625B87A7B02EDC566126FB81F6306E915F, 0x6C2EB1E94C2532935B8465351BA1BD88EABE2B3FA1AADFF7D1CD816E8315BD38, 0xA9546D41993E10DF2A7429B8490394EA9EE62807BAE6F326D1044A51581306F58D4B9DFD5931E044688855280FF3799E, 0xA2EA83D9391E0EE42E0C650ACC7A1F842A7D385189485DDB4FD54ADE3D9FD50D608167DCA6C776AAD4B8AD5C20691BFE, 0x018156B94FE9735E573BAB36DAD05D60FEB720D424CCD20AAF719343C31E4246, id="mainnet_1", ), ], ) @pytest.mark.parametrize("result", [Result.SUCCESS]) @pytest.mark.valid_from("Cancun") def test_valid_inputs( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Test valid sanity precompile calls that are expected to succeed. - `kzg_commitment` and `kzg_proof` are set to values such that `p(z)==0` for all values of `z`, hence `y` is tested to be zero, and call to be successful. """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "z,y,kzg_commitment,kzg_proof,versioned_hash", [ (Spec.BLS_MODULUS, 0, INF_POINT, INF_POINT, None), (0, Spec.BLS_MODULUS, INF_POINT, INF_POINT, None), (Z, 0, INF_POINT, INF_POINT[:-1], None), (Z, 0, INF_POINT, INF_POINT[0:1], None), (Z, 0, INF_POINT, INF_POINT + bytes([0]), None), (Z, 0, INF_POINT, INF_POINT + bytes([0] * 1023), None), (bytes(), bytes(), bytes(), bytes(), bytes()), (0, 0, 0, 0, 0), (0, 0, 0, 0, None), (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0x00)), (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0x02)), (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0xFF)), ], ids=[ "out_of_bounds_z", "out_of_bounds_y", "correct_proof_1_input_too_short", "correct_proof_1_input_too_short_2", "correct_proof_1_input_too_long", "correct_proof_1_input_extra_long", "null_inputs", "zeros_inputs", "zeros_inputs_correct_versioned_hash", "correct_proof_1_incorrect_versioned_hash_version_0x00", "correct_proof_1_incorrect_versioned_hash_version_0x02", "correct_proof_1_incorrect_versioned_hash_version_0xff", ], ) @pytest.mark.parametrize("result", [Result.FAILURE]) @pytest.mark.valid_from("Cancun") def test_invalid_inputs( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Test invalid precompile calls. - Out of bounds inputs `z` and `y` - Correct proof, commitment, z and y, but incorrect lengths - Null inputs - Zero inputs - Correct proof, commitment, z and y, but incorrect version versioned hash """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) def kzg_point_evaluation_vector_from_dict(data: dict) -> Any: """Create a KZGPointEvaluation from a dictionary.""" if "input" not in data: raise ValueError("Missing 'input' key in data") if "output" not in data: raise ValueError("Missing 'output' key in data") output = data["output"] if isinstance(output, bool): result = Result.SUCCESS if output else Result.FAILURE else: result = Result.FAILURE input_value = data["input"] if "commitment" not in input_value or not isinstance(input_value["commitment"], str): raise ValueError("Missing 'commitment' key in data['input']") commitment = bytes.fromhex(input_value["commitment"][2:]) if "proof" not in input_value or not isinstance(input_value["proof"], str): raise ValueError("Missing 'proof' key in data['input']") proof = bytes.fromhex(input_value["proof"][2:]) if "z" not in input_value or not isinstance(input_value["z"], str): raise ValueError("Missing 'z' key in data['input']") z = bytes.fromhex(input_value["z"][2:]) if "y" not in input_value or not isinstance(input_value["y"], str): raise ValueError("Missing 'y' key in data['input']") y = bytes.fromhex(input_value["y"][2:]) name = data["name"] if "name" in data else "" return pytest.param( z, y, commitment, proof, result, id=name, ) def load_kzg_point_evaluation_test_vectors_from_file( file_path: str, ) -> List: """Load KZG Point Evaluations from a directory.""" test_vectors = [] # Load the json file as a dictionary with open(file_path, "r") as file: data = json.load(file) if not isinstance(data, list): raise ValueError("Expected a list of point evaluations") for item in data: if not isinstance(item, dict): continue test_vectors.append(kzg_point_evaluation_vector_from_dict(item)) return test_vectors def current_python_script_directory() -> str: """Get the current Python script directory.""" return os.path.dirname(os.path.realpath(__file__)) def get_point_evaluation_test_files_in_directory(path: str) -> list[str]: """Get the point evaluation files in a directory.""" return glob.glob(os.path.join(path, "*.json")) def all_external_vectors() -> List: """ Test for the Point Evaluation Precompile from external sources, contained in ./point_evaluation_vectors/. """ test_cases = [] for test_file in get_point_evaluation_test_files_in_directory( os.path.join(current_python_script_directory(), "point_evaluation_vectors") ): file_loaded_tests = load_kzg_point_evaluation_test_vectors_from_file(test_file) assert len(file_loaded_tests) > 0 test_cases += file_loaded_tests return test_cases @pytest.mark.parametrize( "z,y,kzg_commitment,kzg_proof,result", all_external_vectors(), ) @pytest.mark.parametrize("versioned_hash", [None]) @pytest.mark.valid_from("Cancun") @pytest.mark.slow() def test_external_vectors( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Test precompile calls using external test vectors compiled from different sources. - `go_kzg_4844_verify_kzg_proof.json`: test vectors from the [go-kzg-4844](https://github.com/crate-crypto/go-kzg-4844) repository. """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "call_gas,y,result", [ (Spec.POINT_EVALUATION_PRECOMPILE_GAS, 0, Result.SUCCESS), (Spec.POINT_EVALUATION_PRECOMPILE_GAS, 1, Result.FAILURE), (Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1, 0, Result.OUT_OF_GAS), ], ids=["correct", "incorrect", "insufficient_gas"], ) @pytest.mark.with_all_call_opcodes @pytest.mark.parametrize( "z,kzg_commitment,kzg_proof,versioned_hash", [[Z, INF_POINT, INF_POINT, None]], ids=[""], ) @pytest.mark.valid_from("Cancun") def test_call_opcode_types( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Test calling the Point Evaluation Precompile with different call types, gas and parameter configuration. - Using CALL, DELEGATECALL, CALLCODE and STATICCALL. - Using correct and incorrect proofs - Using barely insufficient gas """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "call_gas", [ (Spec.POINT_EVALUATION_PRECOMPILE_GAS), (Spec.POINT_EVALUATION_PRECOMPILE_GAS + 1), (Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1), ], ids=["exact_gas", "extra_gas", "insufficient_gas"], ) @pytest.mark.parametrize( "z,y,kzg_commitment,kzg_proof,versioned_hash,proof_correct", [ [Z, 0, INF_POINT, INF_POINT, None, True], [Z, 1, INF_POINT, INF_POINT, None, False], ], ids=["correct_proof", "incorrect_proof"], ) @pytest.mark.valid_from("Cancun") def test_tx_entry_point( fork: Fork, state_test: StateTestFiller, precompile_input: bytes, call_gas: int, pre: Alloc, proof_correct: bool, ) -> None: """ Test calling the Point Evaluation Precompile directly as transaction entry point, and measure the gas consumption. - Using `gas_limit` with exact necessary gas, insufficient gas and extra gas. - Using correct and incorrect proofs """ sender = pre.fund_eoa() # Starting from EIP-7623, we need to use an access list to raise the # intrinsic gas cost to be above the floor data cost. access_list = [AccessList(address=Address(i), storage_keys=[]) for i in range(1, 10)] # Gas is appended the intrinsic gas cost of the transaction tx_intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = tx_intrinsic_gas_cost_calculator( calldata=precompile_input, access_list=access_list ) # Consumed gas will only be the precompile gas if the proof is correct and # the call gas is sufficient. # Otherwise, the call gas will be consumed in full. consumed_gas = ( Spec.POINT_EVALUATION_PRECOMPILE_GAS if call_gas >= Spec.POINT_EVALUATION_PRECOMPILE_GAS and proof_correct else call_gas ) + tx_intrinsic_gas_cost_calculator( calldata=precompile_input, access_list=access_list, return_cost_deducted_prior_execution=True, ) tx = Transaction( sender=sender, data=precompile_input, access_list=access_list, to=Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS), gas_limit=call_gas + intrinsic_gas_cost, expected_receipt=TransactionReceipt(gas_used=consumed_gas), ) post = { sender: Account( nonce=1, ) } state_test( env=Environment(), pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "z,y,kzg_commitment,kzg_proof,versioned_hash", [[Z, 0, INF_POINT, INF_POINT, None]], ids=["correct_proof"], ) @pytest.mark.parametrize("precompile_caller_storage", [{}], ids=[""]) @pytest.mark.parametrize("precompile_caller_balance", [1], ids=[""]) @pytest.mark.parametrize( "precompile_caller_code", [ Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( Op.NUMBER, Op.CALL( address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS, value=1, args_size=Op.CALLDATASIZE, ), ) ], ids=[""], ) @pytest.mark.valid_at_transition_to("Cancun") def test_precompile_before_fork( state_test: StateTestFiller, pre: Alloc, tx: Transaction, precompile_caller_address: Address, ) -> None: """ Test calling the Point Evaluation Precompile before the appropriate fork. """ post = { precompile_caller_address: Account( storage={1: 1}, # The call succeeds because precompile is not there yet ), Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS): Account( balance=1, ), } state_test( pre=pre, env=Environment(timestamp=7_500), post=post, tx=tx, ) FORK_TIMESTAMP = 15_000 PRE_FORK_BLOCK_RANGE = range(999, FORK_TIMESTAMP, 1_000) @pytest.mark.parametrize( "z,y,kzg_commitment,kzg_proof,versioned_hash", [[Z, 0, INF_POINT, INF_POINT, None]], ids=["correct_proof"], ) @pytest.mark.parametrize("precompile_caller_storage", [{}], ids=[""]) @pytest.mark.parametrize("precompile_caller_balance", [len(PRE_FORK_BLOCK_RANGE)], ids=[""]) @pytest.mark.parametrize( "precompile_caller_code", [ Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( Op.NUMBER, Op.CALL( address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS, value=1, args_size=Op.CALLDATASIZE, ), ) ], ids=[""], ) @pytest.mark.valid_at_transition_to("Cancun") def test_precompile_during_fork( blockchain_test: BlockchainTestFiller, pre: Alloc, precompile_caller_address: Address, precompile_input: bytes, sender: EOA, ) -> None: """ Test calling the Point Evaluation Precompile during the appropriate fork. """ # Blocks before fork blocks = [ Block( timestamp=t, txs=[ Transaction( sender=sender, data=precompile_input, to=precompile_caller_address, gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100, ) ], ) for t in PRE_FORK_BLOCK_RANGE ] # Block after fork blocks += [ Block( timestamp=FORK_TIMESTAMP, txs=[ Transaction( sender=sender, data=precompile_input, to=precompile_caller_address, gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100, ) ], ) ] post = { precompile_caller_address: Account( storage=dict.fromkeys(range(1, len(PRE_FORK_BLOCK_RANGE) + 1), 1), # Only the call in the last block's tx fails; storage 0 by default. ), Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS): Account( balance=len(PRE_FORK_BLOCK_RANGE), ), } blockchain_test( pre=pre, post=post, blocks=blocks, ) ================================================ FILE: tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py ================================================ """ Tests gas usage on point evaluation precompile for EIP-4844. Tests gas usage on point evaluation precompile for [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844). """ from typing import Dict, Literal import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, CodeGasMeasure, Environment, StateTestFiller, Transaction, ceiling_division, ) from ethereum_test_vm import Opcodes as Op from .common import INF_POINT, Z from .spec import Spec, ref_spec_4844 REFERENCE_SPEC_GIT_PATH = ref_spec_4844.git_path REFERENCE_SPEC_VERSION = ref_spec_4844.version @pytest.fixture def precompile_input(proof: Literal["correct", "incorrect"]) -> bytes: """Format depending on whether we want a correct proof or not.""" kzg_commitment = INF_POINT kzg_proof = INF_POINT z = Z # INF_POINT commitment and proof evaluate to 0 on all z values y = 0 if proof == "correct" else 1 versioned_hash = Spec.kzg_to_versioned_hash(kzg_commitment) return ( versioned_hash + z.to_bytes(32, "little") + y.to_bytes(32, "little") + kzg_commitment + kzg_proof ) @pytest.fixture def call_type() -> Op: """ Type of call to use to call the precompile. Defaults to Op.CALL, but can be parametrized to use other opcode types. """ return Op.CALL @pytest.fixture def call_gas() -> int: """ Amount of gas to pass to the precompile. Defaults to POINT_EVALUATION_PRECOMPILE_GAS, but can be parametrized to test different amounts. """ return Spec.POINT_EVALUATION_PRECOMPILE_GAS def copy_opcode_cost(fork: Fork, length: int) -> int: """ Calculate the cost of the COPY opcodes, assuming memory expansion from empty memory, based on the costs specified in the yellow paper. https://ethereum.github.io/yellowpaper/paper.pdf. """ cost_memory_bytes = fork.memory_expansion_gas_calculator() return ( 3 + (ceiling_division(length, 32) * 3) + cost_memory_bytes(new_bytes=length, previous_bytes=0) ) @pytest.fixture def precompile_caller_code( fork: Fork, call_type: Op, call_gas: int, precompile_input: bytes, ) -> Bytecode: """Code to call the point evaluation precompile and evaluate gas usage.""" calldatasize_cost = 2 push_operations_cost = 3 warm_storage_read_cost = 100 precompile_caller_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) overhead_cost = ( warm_storage_read_cost + (calldatasize_cost * 1) + (push_operations_cost * 2) + copy_opcode_cost(fork, len(precompile_input)) ) if call_type == Op.CALL or call_type == Op.CALLCODE: # https://github.com/ethereum/execution-spec-tests/issues/348 precompile_caller_code += call_type( call_gas, Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS, 0x00, 0x00, Op.CALLDATASIZE, 0x00, 0x00, ) overhead_cost += (push_operations_cost * 6) + (calldatasize_cost * 1) elif call_type == Op.DELEGATECALL or call_type == Op.STATICCALL: # Delegatecall and staticcall use one less argument # https://github.com/ethereum/execution-spec-tests/issues/348 precompile_caller_code += call_type( call_gas, Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS, 0x00, Op.CALLDATASIZE, 0x00, 0x00, ) overhead_cost += (push_operations_cost * 5) + (calldatasize_cost * 1) gas_measure_code = CodeGasMeasure( code=precompile_caller_code, overhead_cost=overhead_cost, extra_stack_items=1, ) return gas_measure_code @pytest.fixture def precompile_caller_address(pre: Alloc, precompile_caller_code: Bytecode) -> Address: """Address of the precompile caller account.""" return pre.deploy_contract(precompile_caller_code) @pytest.fixture def tx( pre: Alloc, precompile_caller_address: Address, precompile_input: bytes, ) -> Transaction: """Prepare transaction used to call the precompile caller account.""" return Transaction( sender=pre.fund_eoa(), data=precompile_input, to=precompile_caller_address, value=0, gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 20, ) @pytest.fixture def post( precompile_caller_address: Address, proof: Literal["correct", "incorrect"], call_gas: int, ) -> Dict: """ Prepare expected post for each test, depending on the success or failure of the precompile call and the gas usage. """ if proof == "correct": expected_gas_usage = ( call_gas if call_gas < Spec.POINT_EVALUATION_PRECOMPILE_GAS else Spec.POINT_EVALUATION_PRECOMPILE_GAS ) else: expected_gas_usage = call_gas return { precompile_caller_address: Account( storage={ 0: expected_gas_usage, }, ), } @pytest.mark.parametrize( "call_type", [Op.CALL, Op.DELEGATECALL, Op.CALLCODE, Op.STATICCALL], ) @pytest.mark.parametrize( "call_gas", [ Spec.POINT_EVALUATION_PRECOMPILE_GAS, Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1, Spec.POINT_EVALUATION_PRECOMPILE_GAS + 1, ], ids=["exact_gas", "insufficient_gas", "extra_gas"], ) @pytest.mark.parametrize("proof", ["correct", "incorrect"]) @pytest.mark.valid_from("Cancun") def test_point_evaluation_precompile_gas_usage( state_test: StateTestFiller, pre: Dict, tx: Transaction, post: Dict, ) -> None: """ Test point evaluation precompile gas usage under different call contexts and gas limits. - Test using all call types (CALL, DELEGATECALL, CALLCODE, STATICCALL) - Test using different gas limits (exact gas, insufficient gas, extra gas) - Test using correct and incorrect proofs """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/cancun/eip5656_mcopy/__init__.py ================================================ """Cross-client EIP-5656 Tests.""" ================================================ FILE: tests/cancun/eip5656_mcopy/common.py ================================================ """ Common procedures to test [EIP-5656: MCOPY - Memory copying instruction](https://eips.ethereum.org/EIPS/eip-5656). """ from copy import copy REFERENCE_SPEC_GIT_PATH = "EIPS/eip-5656.md" REFERENCE_SPEC_VERSION = "d0cd8902e2243b66e2b9a858b691bc106cebddfc" def mcopy(*, src: int, dest: int, length: int, memory: bytes) -> bytes: """Perform the mcopy routine as the EVM would do it.""" if length == 0: return memory res = bytearray(copy(memory)) # If the destination or source are larger than the memory, we need to # extend the memory max_byte_index = max(src, dest) + length if max_byte_index > len(memory): res.extend(b"\x00" * (max_byte_index - len(memory))) for i in range(length): if (src + i) >= len(memory): src_b = 0 else: src_b = memory[src + i] res[dest + i] = src_b return bytes(res) ================================================ FILE: tests/cancun/eip5656_mcopy/test_mcopy.py ================================================ """ Tests [EIP-5656: MCOPY - Memory copying instruction](https://eips.ethereum.org/EIPS/eip-5656). """ from typing import Mapping import pytest from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, Hash, StateTestFiller, Storage, Transaction, ceiling_division, keccak256, ) from ethereum_test_tools import Opcodes as Op from .common import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION, mcopy REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION @pytest.fixture def initial_memory() -> bytes: """Init memory for the test.""" return bytes(range(0x00, 0x100)) @pytest.fixture def final_memory(*, dest: int, src: int, length: int, initial_memory: bytes) -> bytes: """Memory after the MCOPY operation.""" return mcopy(dest=dest, src=src, length=length, memory=initial_memory) @pytest.fixture def code_storage() -> Storage: """Storage for the code contract.""" return Storage() @pytest.fixture def code_bytecode( initial_memory: bytes, final_memory: bytes, code_storage: Storage, ) -> Bytecode: """ Prepare bytecode and storage for the test, based on the starting memory and the final memory that resulted from the copy. """ bytecode = Bytecode() # Fill memory with initial values for i in range(0, len(initial_memory), 0x20): bytecode += Op.MSTORE(i, Op.PUSH32(initial_memory[i : i + 0x20])) # Perform the MCOPY according to calldata values bytecode += Op.MCOPY( Op.CALLDATALOAD(0x00), Op.CALLDATALOAD(0x20), Op.CALLDATALOAD(0x40), ) final_byte_length = ceiling_division(len(final_memory), 0x20) * 0x20 # First save msize bytecode += Op.SSTORE( code_storage.store_next(final_byte_length), Op.MSIZE, ) # Then save the hash of the entire memory bytecode += Op.SSTORE( code_storage.store_next(keccak256(final_memory.ljust(final_byte_length, b"\x00"))), Op.SHA3(0, Op.MSIZE), ) # Store all memory in the initial range to verify the MCOPY for w in range(0, len(initial_memory) // 0x20): bytecode += Op.SSTORE( code_storage.store_next(final_memory[w * 0x20 : w * 0x20 + 0x20]), Op.MLOAD(w * 0x20), ) # If the memory was extended beyond the initial range, store the last word # of the resulting memory into storage too if len(final_memory) > len(initial_memory): last_word = ceiling_division(len(final_memory), 0x20) - 1 bytecode += Op.SSTORE( code_storage.store_next( final_memory[last_word * 0x20 : (last_word + 1) * 0x20].ljust(32, b"\x00") ), Op.MLOAD(last_word * 0x20), ) return bytecode @pytest.fixture def code_address(pre: Alloc, code_bytecode: Bytecode) -> Address: """Address of the contract that is going to perform the MCOPY operation.""" return pre.deploy_contract(code_bytecode) @pytest.fixture def tx( # noqa: D103 pre: Alloc, code_address: Address, dest: int, src: int, length: int ) -> Transaction: return Transaction( sender=pre.fund_eoa(), to=code_address, data=Hash(dest) + Hash(src) + Hash(length), gas_limit=1_000_000, ) @pytest.fixture def post(code_address: Address, code_storage: Storage) -> Mapping: # noqa: D103 return { code_address: Account(storage=code_storage), } @pytest.mark.parametrize( "dest,src,length", [ (0x00, 0x00, 0x00), (2**256 - 1, 0x00, 0x00), (0x00, 0x00, 0x01), (0x00, 0x00, 0x20), (0x01, 0x00, 0x01), (0x01, 0x00, 0x20), (0x11, 0x11, 0x01), (0x11, 0x11, 0x20), (0x11, 0x11, 0x40), (0x10, 0x00, 0x40), (0x00, 0x10, 0x40), (0x0F, 0x10, 0x40), (0x100, 0x01, 0x01), (0x100, 0x01, 0x20), (0x100, 0x01, 0x1F), (0x100, 0x01, 0x21), (0x00, 0x00, 0x100), (0x100, 0x00, 0x100), (0x200, 0x00, 0x100), (0x00, 0x100, 0x100), (0x100, 0x100, 0x01), ], ids=[ "zero_inputs", "zero_length_out_of_bounds_destination", "single_byte_rewrite", "full_word_rewrite", "single_byte_forward_overwrite", "full_word_forward_overwrite", "mid_word_single_byte_rewrite", "mid_word_single_word_rewrite", "mid_word_multi_word_rewrite", "two_words_forward_overwrite", "two_words_backward_overwrite", "two_words_backward_overwrite_single_byte_offset", "single_byte_memory_extension", "single_word_memory_extension", "single_word_minus_one_byte_memory_extension", "single_word_plus_one_byte_memory_extension", "full_memory_rewrite", "full_memory_copy", "full_memory_copy_offset", "full_memory_clean", "out_of_bounds_memory_extension", ], ) @pytest.mark.with_all_evm_code_types @pytest.mark.valid_from("Cancun") def test_valid_mcopy_operations( state_test: StateTestFiller, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform MCOPY operations using different offsets and lengths. - Zero inputs - Memory rewrites (copy from and to the same location) - Memory overwrites (copy from and to different locations) - Memory extensions (copy to a location that is out of bounds) - Memory clear (copy from a location that is out of bounds). """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize("dest", [0x00, 0x20]) @pytest.mark.parametrize("src", [0x00, 0x20]) @pytest.mark.parametrize("length", [0x00, 0x01]) @pytest.mark.parametrize("initial_memory", [bytes()], ids=["empty_memory"]) @pytest.mark.with_all_evm_code_types @pytest.mark.valid_from("Cancun") def test_mcopy_on_empty_memory( state_test: StateTestFiller, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform MCOPY operations on an empty memory, using different offsets and lengths. """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/cancun/eip5656_mcopy/test_mcopy_contexts.py ================================================ """ Test memory copy under different call contexts. Tests for [EIP-5656: MCOPY - Memory copying instruction](https://eips.ethereum.org/EIPS/eip-5656). """ from itertools import cycle, islice from typing import Mapping import pytest from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Storage, Transaction, ceiling_division, ) from ethereum_test_tools import Opcodes as Op from .common import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION @pytest.fixture def initial_memory_length() -> int: # noqa: D103 return 0x400 @pytest.fixture def callee_bytecode( initial_memory_length: int, call_opcode: Op, ) -> Bytecode: """ Callee simply performs mcopy operations that should not have any effect on the caller context. """ bytecode = Bytecode() # Perform some copy operations bytecode += Op.MCOPY(0x00, 0x01, 0x01) bytecode += Op.MCOPY(0x01, 0x00, 0x01) bytecode += Op.MCOPY(0x01, 0x00, 0x20) # And a potential memory cleanup bytecode += Op.MCOPY(0x00, initial_memory_length, initial_memory_length) # Also try to expand the memory bytecode += Op.MCOPY(0x00, initial_memory_length * 2, 1) bytecode += Op.MCOPY(initial_memory_length * 2, 0x00, 1) if call_opcode != Op.STATICCALL and call_opcode != Op.EXTSTATICCALL: # Simple sstore to make sure we actually ran the code bytecode += Op.SSTORE(200_000, 1) # In case of initcode, return empty code bytecode += Op.RETURN(0x00, 0x00) return bytecode @pytest.fixture def initial_memory( callee_bytecode: Bytecode, initial_memory_length: int, call_opcode: Op, ) -> bytes: """Init memory for the test.""" assert len(callee_bytecode) <= initial_memory_length ret = bytes(list(islice(cycle(range(0x01, 0x100)), initial_memory_length))) if call_opcode in [Op.CREATE, Op.CREATE2]: # We also need to put the callee_bytecode as initcode in memory for # create operations ret = bytes(callee_bytecode) + ret[len(callee_bytecode) :] assert len(ret) == initial_memory_length return ret @pytest.fixture def caller_storage() -> Storage: # noqa: D103 return Storage() @pytest.fixture def caller_bytecode( initial_memory: bytes, callee_address: Address, callee_bytecode: Bytecode, call_opcode: Op, caller_storage: Storage, ) -> Bytecode: """ Prepare bytecode and storage for the test, based on the starting memory and the final memory that resulted from the copy. """ bytecode = Bytecode() # Fill memory with initial values for i in range(0, len(initial_memory), 0x20): bytecode += Op.MSTORE(i, Op.PUSH32(initial_memory[i : i + 0x20])) # Perform the call to the contract that is going to perform mcopy if call_opcode in [Op.CREATE, Op.CREATE2]: bytecode += call_opcode(size=len(callee_bytecode)) else: bytecode += call_opcode(address=callee_address) # First save msize bytecode += Op.SSTORE(100_000, Op.MSIZE()) caller_storage[100_000] = ceiling_division(len(initial_memory), 0x20) * 0x20 # Store all memory in the initial range to verify the MCOPY in the subcall # did not affect this level's memory for w in range(0, len(initial_memory) // 0x20): bytecode += Op.SSTORE(w, Op.MLOAD(w * 0x20)) caller_storage[w] = initial_memory[w * 0x20 : w * 0x20 + 0x20] return bytecode @pytest.fixture def caller_address(pre: Alloc, caller_bytecode: Bytecode) -> Address: # noqa: D103 return pre.deploy_contract(caller_bytecode) @pytest.fixture def callee_address(pre: Alloc, callee_bytecode: Bytecode) -> Address: # noqa: D103 return pre.deploy_contract(callee_bytecode) @pytest.fixture def tx(pre: Alloc, caller_address: Address) -> Transaction: # noqa: D103 return Transaction( sender=pre.fund_eoa(), to=caller_address, gas_limit=1_000_000, ) @pytest.fixture def post( # noqa: D103 caller_address: Address, caller_storage: Storage, callee_address: Address, call_opcode: Op, ) -> Mapping: callee_storage: Storage.StorageDictType = {} if call_opcode in [Op.DELEGATECALL, Op.CALLCODE, Op.EXTDELEGATECALL]: caller_storage[200_000] = 1 elif call_opcode in [Op.CALL, Op.EXTCALL]: callee_storage[200_000] = 1 return { caller_address: Account(storage=caller_storage), callee_address: Account(storage=callee_storage), } @pytest.mark.with_all_call_opcodes @pytest.mark.valid_from("Cancun") def test_no_memory_corruption_on_upper_call_stack_levels( state_test: StateTestFiller, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform a subcall with any of the following opcodes, which uses MCOPY during its execution, and verify that the caller's memory is unaffected. """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "call_opcode", [ Op.CREATE, Op.CREATE2, ], ) @pytest.mark.valid_from("Cancun") def test_no_memory_corruption_on_upper_create_stack_levels( state_test: StateTestFiller, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform a subcall with any of the following opcodes, which uses MCOPY during its execution, and verify that the caller's memory is unaffected: - `CREATE` - `CREATE2`. TODO: [EOF] Add EOFCREATE opcode """ state_test( env=Environment(), pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py ================================================ """ Test MCOPY with memory expansion and potential OOG errors. Test copy operations of [EIP-5656: MCOPY - Memory copying instruction](https://eips.ethereum.org/EIPS/eip-5656) that produce a memory expansion, and potentially an out-of-gas error. """ import itertools from typing import List, Mapping import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Transaction, TransactionReceipt, ) from ethereum_test_tools import Opcodes as Op from .common import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION """Storage addresses for common testing fields""" _slot = itertools.count(1) slot_code_worked = next(_slot) slot_last_slot = next(_slot) """Storage values for common testing fields""" value_code_worked = 0x2015 @pytest.fixture def callee_bytecode(dest: int, src: int, length: int) -> Bytecode: """Callee performs a single mcopy operation and then returns.""" bytecode = Bytecode() # Copy the initial memory bytecode += Op.CALLDATACOPY(0x00, 0x00, Op.CALLDATASIZE()) # Pushes for the return operation bytecode += Op.PUSH1(0x00) + Op.PUSH1(0x00) bytecode += Op.SSTORE(slot_code_worked, value_code_worked) # Perform the mcopy operation bytecode += Op.MCOPY(dest, src, length) bytecode += Op.RETURN return bytecode @pytest.fixture def tx_access_list() -> List[AccessList]: """Access list for the transaction.""" return [AccessList(address=Address(i), storage_keys=[]) for i in range(1, 10)] @pytest.fixture def call_exact_cost( fork: Fork, initial_memory: bytes, dest: int, length: int, tx_access_list: List[AccessList], ) -> int: """ Return the exact cost of the subcall, based on the initial memory and the length of the copy. """ # Starting from EIP-7623, we need to use an access list to raise the # intrinsic gas cost to be above the floor data cost. cost_memory_bytes = fork.memory_expansion_gas_calculator() gas_costs = fork.gas_costs() tx_intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() mcopy_cost = 3 mcopy_cost += 3 * ((length + 31) // 32) if length > 0 and dest + length > len(initial_memory): mcopy_cost += cost_memory_bytes( new_bytes=dest + length, previous_bytes=len(initial_memory) ) calldatacopy_cost = 3 calldatacopy_cost += 3 * ((len(initial_memory) + 31) // 32) calldatacopy_cost += cost_memory_bytes(new_bytes=len(initial_memory)) pushes_cost = gas_costs.G_VERY_LOW * 9 calldatasize_cost = gas_costs.G_BASE sstore_cost = 22100 return ( tx_intrinsic_gas_cost_calculator(calldata=initial_memory, access_list=tx_access_list) + mcopy_cost + calldatacopy_cost + pushes_cost + calldatasize_cost + sstore_cost ) @pytest.fixture def block_gas_limit() -> int: # noqa: D103 return 100_000_000 @pytest.fixture def tx_gas_limit( # noqa: D103 fork: Fork, call_exact_cost: int, block_gas_limit: int, successful: bool, ) -> int: return min( call_exact_cost - (0 if successful else 1), # If the transaction gas limit cap is not set (pre-osaka), # use the block gas limit fork.transaction_gas_limit_cap() or block_gas_limit, ) @pytest.fixture def env( # noqa: D103 block_gas_limit: int, ) -> Environment: return Environment(gas_limit=block_gas_limit) @pytest.fixture def caller_address(pre: Alloc, callee_bytecode: bytes) -> Address: # noqa: D103 return pre.deploy_contract(code=callee_bytecode) @pytest.fixture def tx( # noqa: D103 sender: Address, caller_address: Address, initial_memory: bytes, tx_gas_limit: int, tx_access_list: List[AccessList], ) -> Transaction: return Transaction( sender=sender, to=caller_address, access_list=tx_access_list, data=initial_memory, gas_limit=tx_gas_limit, expected_receipt=TransactionReceipt(gas_used=tx_gas_limit), ) @pytest.fixture def post( # noqa: D103 caller_address: Address, successful: bool, ) -> Mapping: return { caller_address: Account( storage={slot_code_worked: value_code_worked} if successful else {} ) } @pytest.mark.parametrize( "dest,src,length", [ (0x00, 0x00, 0x01), (0x100, 0x00, 0x01), (0x1F, 0x00, 0x01), (0x20, 0x00, 0x01), (0x1000, 0x00, 0x01), (0x1000, 0x00, 0x40), (0x00, 0x00, 0x00), (2**256 - 1, 0x00, 0x00), (0x00, 2**256 - 1, 0x00), (2**256 - 1, 2**256 - 1, 0x00), ], ids=[ "single_byte_expansion", "single_byte_expansion_2", "single_byte_expansion_word_boundary", "single_byte_expansion_word_boundary_2", "multi_word_expansion", "multi_word_expansion_2", "zero_length_expansion", "huge_dest_zero_length", "huge_src_zero_length", "huge_dest_huge_src_zero_length", ], ) @pytest.mark.parametrize("successful", [True, False]) @pytest.mark.parametrize( "initial_memory", [ bytes(range(0x00, 0x100)), bytes(), ], ids=[ "from_existent_memory", "from_empty_memory", ], ) @pytest.mark.with_all_evm_code_types @pytest.mark.valid_from("Cancun") def test_mcopy_memory_expansion( state_test: StateTestFiller, env: Environment, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform MCOPY operations that expand the memory, and verify the gas it costs to do so. """ state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "dest,src,length", [ (2**256 - 1, 0x00, 0x01), (2**256 - 2, 0x00, 0x01), (2**255 - 1, 0x00, 0x01), (0x00, 2**256 - 1, 0x01), (0x00, 2**256 - 2, 0x01), (0x00, 2**255 - 1, 0x01), (0x00, 0x00, 2**256 - 1), (0x00, 0x00, 2**256 - 2), (0x00, 0x00, 2**255 - 1), ], ids=[ "max_dest_single_byte_expansion", "max_dest_minus_one_single_byte_expansion", "half_max_dest_single_byte_expansion", "max_src_single_byte_expansion", "max_src_minus_one_single_byte_expansion", "half_max_src_single_byte_expansion", "max_length_expansion", "max_length_minus_one_expansion", "half_max_length_expansion", ], ) @pytest.mark.parametrize( "call_exact_cost", [2**128 - 1], ids=[""], ) # Limit subcall gas, otherwise it would be impossibly large @pytest.mark.parametrize("successful", [False]) @pytest.mark.parametrize( "initial_memory", [ bytes(range(0x00, 0x100)), bytes(), ], ids=[ "from_existent_memory", "from_empty_memory", ], ) @pytest.mark.with_all_evm_code_types @pytest.mark.valid_from("Cancun") def test_mcopy_huge_memory_expansion( state_test: StateTestFiller, env: Environment, pre: Mapping[str, Account], post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform MCOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas. """ state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/cancun/eip6780_selfdestruct/__init__.py ================================================ """Tests for EIP-6780: SELFDESTRUCT only in same transaction.""" ================================================ FILE: tests/cancun/eip6780_selfdestruct/conftest.py ================================================ """Pytest (plugin) definitions local to EIP-6780 tests.""" import pytest from ethereum_test_tools import Address, Alloc, Environment @pytest.fixture def env() -> Environment: """Environment for all tests.""" return Environment() @pytest.fixture def selfdestruct_recipient_address(pre: Alloc) -> Address: """Address that can receive a SELFDESTRUCT operation.""" return pre.fund_eoa(amount=0) ================================================ FILE: tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py ================================================ """ Suicide scenario requested test https://github.com/ethereum/execution-spec-tests/issues/381. """ from typing import Dict, Union import pytest from ethereum_test_forks import Cancun, Fork from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Conditional, Initcode, StateTestFiller, Transaction, compute_create2_address, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6780.md" REFERENCE_SPEC_VERSION = "1b6a0e94cc47e859b9866e570391cf37dc55059a" @pytest.mark.valid_from("Paris") @pytest.mark.parametrize( "create2_dest_already_in_state", (pytest.param(True, marks=pytest.mark.execute(pytest.mark.skip("Modifies pre"))), False), ) @pytest.mark.parametrize( "call_create2_contract_in_between,call_create2_contract_at_the_end", [ (True, True), (True, False), (False, True), ], ) def test_dynamic_create2_selfdestruct_collision( fork: Fork, create2_dest_already_in_state: bool, call_create2_contract_in_between: bool, call_create2_contract_at_the_end: bool, pre: Alloc, state_test: StateTestFiller, ) -> None: """ Dynamic Create2->Suicide->Create2 collision scenario. Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract -> Covered in this test 1) and create2 contract already in the state 2) and create2 contract is not in the state b) on a different tx, attempt to recreate the contract Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Check the test case described in https://lf-hyperledger.atlassian.net/wiki/spaces/BESU/pages/ 22156575/2024-01-06+Mainnet+Halting+Event """ assert call_create2_contract_in_between or call_create2_contract_at_the_end, "invalid test" # Storage locations create2_constructor_worked = 1 first_create2_result = 2 second_create2_result = 3 code_worked = 4 # Constants address_zero = Address(0x00) create2_salt = 1 # Create EOA for sendall destination (receives selfdestruct funds) sendall_destination = pre.fund_eoa(0) # Will be funded by selfdestruct # calls # Create storage contract that will be called during initialization address_create2_storage = pre.deploy_contract( code=Op.SSTORE(1, 1), balance=7000000000000000000, ) # CREATE2 Initcode deploy_code = Op.SELFDESTRUCT(sendall_destination) initcode = Initcode( deploy_code=deploy_code, initcode_prefix=Op.SSTORE(create2_constructor_worked, 1) + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0), ) # Create the contract that performs CREATE2 operations address_code = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.MSTORE( 0, Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt), ) + Op.RETURN(0, 32), ) # Created addresses - now we can compute create2_address create2_address = compute_create2_address(address_code, create2_salt, initcode) call_address_in_between = create2_address if call_create2_contract_in_between else address_zero call_address_in_the_end = create2_address if call_create2_contract_at_the_end else address_zero # Values pre_existing_create2_balance = 1 first_create2_value = 10 first_call_value = 100 second_create2_value = 1000 second_call_value = 10000 # Create the main contract that orchestrates the test address_to = pre.deploy_contract( code=Op.JUMPDEST() # Make a subcall that do CREATE2 and returns its the result + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( first_create2_result, Op.MLOAD(0), ) # In case the create2 didn't work, flush account balance + Op.CALL(100000, address_code, 0, 0, 0, 0, 0) # Call to the created account to trigger selfdestruct + Op.CALL(100000, call_address_in_between, first_call_value, 0, 0, 0, 0) # Make a subcall that do CREATE2 collision and returns its address as # the result + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( second_create2_result, Op.MLOAD(0), ) # Call to the created account to trigger selfdestruct + Op.CALL(100000, call_address_in_the_end, second_call_value, 0, 0, 0, 0) + Op.SSTORE(code_worked, 1), balance=100000000, storage={first_create2_result: 0xFF, second_create2_result: 0xFF}, ) # Create the sender EOA sender = pre.fund_eoa(7000000000000000000) if create2_dest_already_in_state: # Create2 address already in the state, e.g. deployed in a previous # block pre[create2_address] = Account( balance=pre_existing_create2_balance, nonce=1, code=deploy_code, storage={}, ) post: Dict[Address, Union[Account, object]] = {} # Create2 address only exists if it was pre-existing and after cancun post[create2_address] = ( Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x00}) if create2_dest_already_in_state and fork >= Cancun else Account.NONEXISTENT ) # Create2 initcode is only executed if the contract did not already exist post[address_create2_storage] = Account( storage={create2_constructor_worked: int(not create2_dest_already_in_state)} ) # Entry code that makes the calls to the create2 contract creator post[address_to] = Account( storage={ code_worked: 0x01, # First create2 only works if the contract was not preexisting first_create2_result: 0x00 if create2_dest_already_in_state else create2_address, # Second create2 must never work second_create2_result: 0x00, } ) # Calculate the destination account expected balance for the # selfdestruct/sendall calls sendall_destination_balance = ( pre_existing_create2_balance if create2_dest_already_in_state else first_create2_value ) if call_create2_contract_in_between: sendall_destination_balance += first_call_value if call_create2_contract_at_the_end: sendall_destination_balance += second_call_value post[sendall_destination] = Account(balance=sendall_destination_balance) tx = Transaction( to=address_to, data=initcode, gas_limit=5_000_000, sender=sender, ) state_test(pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Paris") @pytest.mark.parametrize( "create2_dest_already_in_state", (pytest.param(True, marks=pytest.mark.execute(pytest.mark.skip("Modifies pre"))), False), ) @pytest.mark.parametrize( "call_create2_contract_at_the_end", (True, False), ) def test_dynamic_create2_selfdestruct_collision_two_different_transactions( fork: Fork, create2_dest_already_in_state: bool, call_create2_contract_at_the_end: bool, pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """ Dynamic Create2->Suicide->Create2 collision scenario. Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract 1) and create2 contract already in the state 2) and create2 contract is not in the state b) on a different tx, attempt to recreate the contract -> Covered in this test Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Check the test case described in https://lf-hyperledger.atlassian.net/wiki/spaces/BESU/pages/22156575/2024-01-06 +Mainnet+Halting+Event """ # assert call_create2_contract_at_the_end, "invalid test" # Storage locations create2_constructor_worked = 1 first_create2_result = 2 second_create2_result = 3 code_worked = 4 # Constants address_zero = Address(0x00) create2_salt = 1 # Create EOA for sendall destination (receives selfdestruct funds) sendall_destination = pre.fund_eoa(0) # Will be funded by selfdestruct # calls # Create storage contract that will be called during initialization address_create2_storage = pre.deploy_contract( code=Op.SSTORE(1, 1), balance=7000000000000000000, ) # CREATE2 Initcode deploy_code = Op.SELFDESTRUCT(sendall_destination) initcode = Initcode( deploy_code=deploy_code, initcode_prefix=Op.SSTORE(create2_constructor_worked, 1) + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0), ) # Create the contract that performs CREATE2 operations address_code = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.MSTORE( 0, Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt), ) + Op.RETURN(0, 32), ) # Created addresses create2_address = compute_create2_address(address_code, create2_salt, initcode) call_address_in_the_end = create2_address if call_create2_contract_at_the_end else address_zero # Values pre_existing_create2_balance = 1 first_create2_value = 10 first_call_value = 100 second_create2_value = 1000 second_call_value = 10000 # Create the first contract that performs the first transaction address_to = pre.deploy_contract( code=Op.JUMPDEST() # Make a subcall that do CREATE2 and returns its the result + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( first_create2_result, Op.MLOAD(0), ) # In case the create2 didn't work, flush account balance + Op.CALL(100000, address_code, 0, 0, 0, 0, 0) # Call to the created account to trigger selfdestruct + Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0) + Op.SSTORE(code_worked, 1), balance=100000000, storage={first_create2_result: 0xFF}, ) # Create the second contract that performs the second transaction address_to_second = pre.deploy_contract( code=Op.JUMPDEST() # Make a subcall that do CREATE2 collision and returns its address as # the result + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( second_create2_result, Op.MLOAD(0), ) # Call to the created account to trigger selfdestruct + Op.CALL(200000, call_address_in_the_end, second_call_value, 0, 0, 0, 0) + Op.SSTORE(code_worked, 1), balance=100000000, storage={second_create2_result: 0xFF}, ) # Create the sender EOA sender = pre.fund_eoa(7000000000000000000) if create2_dest_already_in_state: # Create2 address already in the state, e.g. deployed in a previous # block pre[create2_address] = Account( balance=pre_existing_create2_balance, nonce=1, code=deploy_code, storage={}, ) post: Dict[Address, Union[Account, object]] = {} # Create2 address only exists if it was pre-existing and after cancun post[create2_address] = ( Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x00}) if create2_dest_already_in_state and fork >= Cancun else ( Account.NONEXISTENT if call_create2_contract_at_the_end else Account(balance=1000, nonce=1, code=deploy_code) ) ) # after Cancun Create2 initcode is only executed if the contract did not # already exist and before it will always be executed as the first tx # deletes the account post[address_create2_storage] = Account( storage={ create2_constructor_worked: int(fork < Cancun or not create2_dest_already_in_state) } ) # Entry code that makes the calls to the create2 contract creator post[address_to] = Account( storage={ code_worked: 0x01, # First create2 only works if the contract was not preexisting first_create2_result: 0x00 if create2_dest_already_in_state else create2_address, } ) post[address_to_second] = Account( storage={ code_worked: 0x01, # Second create2 will not collide before Cancun as the first tx # calls selfdestruct # # After cancun it will collide only if # create2_dest_already_in_state otherwise the first tx creates and # deletes it second_create2_result: ( (0x00 if create2_dest_already_in_state else create2_address) if fork >= Cancun else create2_address ), } ) # Calculate the destination account expected balance for the # selfdestruct/sendall calls sendall_destination_balance = 0 if create2_dest_already_in_state: sendall_destination_balance += pre_existing_create2_balance if fork >= Cancun: # first create2 fails, but first calls ok. the account is not # removed on cancun therefore with the second create2 it is not # successful sendall_destination_balance += first_call_value else: # first create2 fails, first calls totally removes the account # in the second transaction second create2 is successful sendall_destination_balance += first_call_value if call_create2_contract_at_the_end: sendall_destination_balance += second_create2_value else: # if no account in the state, first create2 successful, first call # successful and removes because it is removed in the next transaction # second create2 successful sendall_destination_balance = first_create2_value + first_call_value if call_create2_contract_at_the_end: sendall_destination_balance += second_create2_value if call_create2_contract_at_the_end: sendall_destination_balance += second_call_value post[sendall_destination] = Account(balance=sendall_destination_balance) blockchain_test( pre=pre, post=post, blocks=[ Block( txs=[ Transaction( to=address_to, data=initcode, gas_limit=5_000_000, sender=sender, ), Transaction( to=address_to_second, data=initcode, gas_limit=5_000_000, sender=sender, ), ] ) ], ) @pytest.mark.valid_from("Paris") @pytest.mark.parametrize( "selfdestruct_on_first_tx,recreate_on_first_tx", [ (False, False), (True, False), (True, True), ], ) def test_dynamic_create2_selfdestruct_collision_multi_tx( fork: Fork, selfdestruct_on_first_tx: bool, recreate_on_first_tx: bool, pre: Alloc, blockchain_test: BlockchainTestFiller, ) -> None: """ Dynamic Create2->Suicide->Create2 collision scenario over multiple transactions. Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same or different tx but same block, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract -> Covered in this test b) on a different tx, attempt to recreate the contract -> Covered in this test Check the test case described in https://lf-hyperledger.atlassian.net/wiki/spaces/BESU/pages/22156575/2024-01-06 +Mainnet+Halting+Event """ if recreate_on_first_tx: assert selfdestruct_on_first_tx, "invalid test" # Storage locations create2_constructor_worked = 1 first_create2_result = 2 second_create2_result = 3 part_1_worked = 4 part_2_worked = 5 # Constants create2_salt = 1 # Create EOA for sendall destination (receives selfdestruct funds) sendall_destination = pre.fund_eoa(0) # Will be funded by selfdestruct # calls # Create storage contract that will be called during initialization address_create2_storage = pre.deploy_contract( code=Op.SSTORE(1, 1), balance=7000000000000000000, ) # CREATE2 Initcode deploy_code = Op.SELFDESTRUCT(sendall_destination) initcode = Initcode( deploy_code=deploy_code, initcode_prefix=Op.SSTORE(create2_constructor_worked, 1) + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0), ) # Create the contract that performs CREATE2 operations address_code = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.MSTORE( 0, Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt), ) + Op.RETURN(0, 32), ) # Created addresses create2_address = compute_create2_address(address_code, create2_salt, initcode) # Values first_create2_value = 3 first_call_value = 5 second_create2_value = 7 second_call_value = 11 # Code is divided in two transactions part of the same block first_tx_code = Bytecode() second_tx_code = Bytecode() first_tx_code += ( Op.JUMPDEST() # Make a subcall that do CREATE2 and returns its the result + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( first_create2_result, Op.MLOAD(0), ) ) if selfdestruct_on_first_tx: first_tx_code += ( # Call to the created account to trigger selfdestruct Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0) ) else: second_tx_code += ( # Call to the created account to trigger selfdestruct Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0) ) if recreate_on_first_tx: first_tx_code += ( # Make a subcall that do CREATE2 collision and returns its address # as the result Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( second_create2_result, Op.MLOAD(0), ) ) else: second_tx_code += ( # Make a subcall that do CREATE2 collision and returns its address # as the result Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32) + Op.SSTORE( second_create2_result, Op.MLOAD(0), ) ) # Second tx code always calls the create2 contract at the end second_tx_code += Op.CALL(100000, create2_address, second_call_value, 0, 0, 0, 0) first_tx_code += Op.SSTORE(part_1_worked, 1) second_tx_code += Op.SSTORE(part_2_worked, 1) # Create the main contract that uses conditional logic to handle both # transactions address_to = pre.deploy_contract( code=Conditional( # Depending on the tx, execute the first or second tx code condition=Op.EQ(Op.SLOAD(part_1_worked), 0), if_true=first_tx_code, if_false=second_tx_code, ), balance=100000000, storage={first_create2_result: 0xFF, second_create2_result: 0xFF}, ) # Create the sender EOA sender = pre.fund_eoa(7000000000000000000) post: Dict[Address, Union[Account, object]] = {} # Create2 address only exists if it was pre-existing and after cancun account_will_exist_with_code = not selfdestruct_on_first_tx and fork >= Cancun # If the contract is self-destructed and we also attempt to recreate it on # the first tx, the second call on the second tx will only place balance in # the account account_will_exist_with_balance = selfdestruct_on_first_tx and recreate_on_first_tx post[create2_address] = ( Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x01}) if account_will_exist_with_code else ( Account(balance=second_call_value, nonce=0) if account_will_exist_with_balance else Account.NONEXISTENT ) ) # Create2 initcode saves storage unconditionally post[address_create2_storage] = Account(storage={create2_constructor_worked: 0x01}) # Entry code that makes the calls to the create2 contract creator post[address_to] = Account( storage={ part_1_worked: 0x01, part_2_worked: 0x01, # First create2 always works first_create2_result: create2_address, # Second create2 only works if we successfully self-destructed on # the first tx second_create2_result: ( create2_address if selfdestruct_on_first_tx and not recreate_on_first_tx else 0x00 ), } ) # Calculate the destination account expected balance for the # selfdestruct/sendall calls sendall_destination_balance = first_create2_value + first_call_value if not account_will_exist_with_balance: sendall_destination_balance += second_call_value if selfdestruct_on_first_tx and not recreate_on_first_tx: sendall_destination_balance += second_create2_value post[sendall_destination] = Account(balance=sendall_destination_balance) blockchain_test( pre=pre, post=post, blocks=[ Block( txs=[ Transaction( to=address_to, data=initcode, gas_limit=5_000_000, sender=sender, ), Transaction( to=address_to, data=initcode, gas_limit=5_000_000, sender=sender, ), ] ) ], ) ================================================ FILE: tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py ================================================ """Suicide scenario requested test https://github.com/ethereum/tests/issues/1325.""" from typing import SupportsBytes import pytest from ethereum_test_forks import Cancun, Fork from ethereum_test_tools import ( EOA, Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6780.md" REFERENCE_SPEC_VERSION = "1b6a0e94cc47e859b9866e570391cf37dc55059a" @pytest.fixture def selfdestruct_contract_bytecode(selfdestruct_recipient_address: Address) -> Bytecode: """Contract code that performs a SELFDESTRUCT operation.""" return Op.SELFDESTRUCT(selfdestruct_recipient_address) @pytest.fixture def selfdestruct_contract_init_balance() -> int: # noqa: D103 return 300_000 @pytest.fixture def selfdestruct_contract_address( pre: Alloc, selfdestruct_contract_bytecode: Bytecode, selfdestruct_contract_init_balance: int ) -> Address: """Address of the selfdestruct contract.""" return pre.deploy_contract( code=selfdestruct_contract_bytecode, balance=selfdestruct_contract_init_balance ) @pytest.fixture def executor_contract_bytecode( first_suicide: Op, revert_contract_address: Address, selfdestruct_contract_address: Address, ) -> Bytecode: """Contract code that performs a selfdestruct call then revert.""" return ( Op.SSTORE( 1, ( first_suicide(address=selfdestruct_contract_address, value=0) if first_suicide in [Op.CALL, Op.CALLCODE] else first_suicide(address=selfdestruct_contract_address) ), ) + Op.SSTORE(2, Op.CALL(address=revert_contract_address)) + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE()) + Op.SSTORE(3, Op.MLOAD(0)) ) @pytest.fixture def executor_contract_init_storage() -> ( # noqa: D103 dict[str | bytes | SupportsBytes | int, str | bytes | SupportsBytes | int] ): return {0x01: 0x0100, 0x02: 0x0100, 0x03: 0x0100} @pytest.fixture def executor_contract_init_balance() -> int: # noqa: D103 return 100_000 @pytest.fixture def executor_contract_address( pre: Alloc, executor_contract_bytecode: Bytecode, executor_contract_init_balance: int, executor_contract_init_storage: dict[ str | bytes | SupportsBytes | int, str | bytes | SupportsBytes | int ], ) -> Address: """Address of the executor contract.""" return pre.deploy_contract( executor_contract_bytecode, balance=executor_contract_init_balance, storage=executor_contract_init_storage, ) @pytest.fixture def revert_contract_bytecode( second_suicide: Op, selfdestruct_contract_address: Address, ) -> Bytecode: """Contract code that performs a call and then reverts.""" call_op = ( second_suicide(address=selfdestruct_contract_address, value=100) if second_suicide in [Op.CALL, Op.CALLCODE] else second_suicide(address=selfdestruct_contract_address) ) return Op.MSTORE(0, Op.ADD(15, call_op)) + Op.REVERT(0, 32) @pytest.fixture def revert_contract_init_balance() -> int: # noqa: D103 return 500_000 @pytest.fixture def revert_contract_address( pre: Alloc, revert_contract_bytecode: Bytecode, revert_contract_init_balance: int, ) -> Address: """Address of the revert contract.""" return pre.deploy_contract(revert_contract_bytecode, balance=revert_contract_init_balance) @pytest.mark.valid_from("Paris") @pytest.mark.parametrize("first_suicide", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL]) @pytest.mark.parametrize("second_suicide", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL]) def test_reentrancy_selfdestruct_revert( pre: Alloc, env: Environment, sender: EOA, fork: Fork, first_suicide: Op, second_suicide: Op, state_test: StateTestFiller, selfdestruct_contract_bytecode: Bytecode, selfdestruct_contract_address: Address, selfdestruct_contract_init_balance: int, revert_contract_address: Address, revert_contract_init_balance: int, executor_contract_address: Address, executor_contract_init_balance: int, selfdestruct_recipient_address: Address, ) -> None: """ Suicide reentrancy scenario. Call|Callcode|Delegatecall the contract S. S self destructs. Call the revert proxy contract R. R Calls|Callcode|Delegatecall S. S self destructs (for the second time). R reverts (including the effects of the second selfdestruct). It is expected the S is self destructed after the transaction. """ post = { # Second caller unchanged as call gets reverted revert_contract_address: Account(balance=revert_contract_init_balance, storage={}), } if first_suicide in [Op.CALLCODE, Op.DELEGATECALL]: if fork >= Cancun: # On Cancun even callcode/delegatecall does not remove the account, # so the value remain post[executor_contract_address] = Account( storage={ 0x01: 0x01, # First call to contract S->suicide success 0x02: 0x00, # Second call to contract S->suicide reverted 0x03: 16, # Reverted value to check that revert really # worked }, ) else: # Callcode executed first suicide from sender. sender is deleted post[executor_contract_address] = Account.NONEXISTENT # type: ignore # Original suicide account remains in state post[selfdestruct_contract_address] = Account( balance=selfdestruct_contract_init_balance, storage={} ) # Suicide destination post[selfdestruct_recipient_address] = Account( balance=executor_contract_init_balance, ) # On Cancun suicide no longer destroys the account from state, just cleans # the balance if first_suicide in [Op.CALL]: post[executor_contract_address] = Account( storage={ 0x01: 0x01, # First call to contract S->suicide success 0x02: 0x00, # Second call to contract S->suicide reverted 0x03: 16, # Reverted value to check that revert really worked }, ) if fork >= Cancun: # On Cancun suicide does not remove the account, just sends the # balance post[selfdestruct_contract_address] = Account( balance=0, code=selfdestruct_contract_bytecode, storage={} ) else: post[selfdestruct_contract_address] = Account.NONEXISTENT # type: ignore # Suicide destination post[selfdestruct_recipient_address] = Account( balance=selfdestruct_contract_init_balance, ) tx = Transaction( sender=sender, to=executor_contract_address, gas_limit=500_000, value=0, ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip6780_selfdestruct/test_selfdestruct.py ================================================ """ SELFDESTRUCT only in same transaction tests. Tests for [EIP-6780: SELFDESTRUCT only in same transaction](https://eips.ethereum.org/EIPS/eip-6780). """ from itertools import cycle from typing import Dict, List import pytest from ethereum_test_forks import Cancun, Fork from ethereum_test_tools import ( EOA, Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Conditional, Hash, Initcode, StateTestFiller, Storage, Transaction, compute_create_address, ) from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6780.md" REFERENCE_SPEC_VERSION = "1b6a0e94cc47e859b9866e570391cf37dc55059a" SELFDESTRUCT_DISABLE_FORK = Cancun """ Address of a pre-existing contract that self-destructs. """ # Sentinel value to indicate that the self-destructing contract address should # be used, only for use in `pytest.mark.parametrize`, not for use within the # test method itself. SELF_ADDRESS = Address(0x01) # Sentinel value to indicate that the contract should not self-destruct. NO_SELFDESTRUCT = Address(0x00) PRE_DEPLOY_CONTRACT_1 = "pre_deploy_contract_1" PRE_DEPLOY_CONTRACT_2 = "pre_deploy_contract_2" PRE_DEPLOY_CONTRACT_3 = "pre_deploy_contract_3" @pytest.fixture def eip_enabled(fork: Fork) -> bool: """Whether the EIP is enabled or not.""" return fork >= SELFDESTRUCT_DISABLE_FORK @pytest.fixture def sendall_recipient_addresses(request: pytest.FixtureRequest, pre: Alloc) -> List[Address]: """ List of addresses that receive the SENDALL operation in any test. If the test case requires a pre-existing contract, it will be deployed here. By default the list is a single pre-deployed contract that unconditionally sets storage. """ address_list = getattr(request, "param", [PRE_DEPLOY_CONTRACT_1]) deployed_contracts: Dict[str, Address] = {} return_list = [] for sendall_recipient in address_list: if type(sendall_recipient) is str: if sendall_recipient not in deployed_contracts: deployed_contracts[sendall_recipient] = pre.deploy_contract( code=Op.SSTORE(0, 0), storage={0: 1}, ) return_list.append(deployed_contracts[sendall_recipient]) else: return_list.append(sendall_recipient) return return_list def selfdestruct_code_preset( *, sendall_recipient_addresses: List[Address], ) -> Bytecode: """Return a bytecode that self-destructs.""" # First we register entry into the contract bytecode = Op.SSTORE(0, Op.ADD(Op.SLOAD(0), 1)) if len(sendall_recipient_addresses) != 1: # Load the recipient address from calldata, each test case needs to # pass the addresses as calldata bytecode += Conditional( # We avoid having the caller to give us our own address by checking # against a constant that is a magic number condition=Op.EQ(Op.CALLDATALOAD(0), SELF_ADDRESS), if_true=Op.MSTORE(0, Op.ADDRESS()), if_false=Op.MSTORE(0, Op.CALLDATALOAD(0)), ) bytecode += Conditional( condition=Op.EQ(Op.MLOAD(0), NO_SELFDESTRUCT), if_true=Op.STOP, if_false=Op.SELFDESTRUCT(Op.MLOAD(0)), ) else: # Hard-code the single only possible recipient address sendall_recipient = sendall_recipient_addresses[0] assert sendall_recipient != NO_SELFDESTRUCT, "test error" if sendall_recipient == SELF_ADDRESS: bytecode += Op.SELFDESTRUCT(Op.ADDRESS) else: bytecode += Op.SELFDESTRUCT(sendall_recipient_addresses[0]) bytecode += Op.SSTORE(0, 0) return bytecode + Op.STOP @pytest.fixture def selfdestruct_code( sendall_recipient_addresses: List[Address], ) -> Bytecode: """ Create default self-destructing bytecode, which can be modified by each test if necessary. """ return selfdestruct_code_preset(sendall_recipient_addresses=sendall_recipient_addresses) @pytest.mark.parametrize("create_opcode", [Op.CREATE, Op.CREATE2]) @pytest.mark.parametrize( "call_times,sendall_recipient_addresses", [ pytest.param( 1, [PRE_DEPLOY_CONTRACT_1], id="single_call", ), pytest.param( 1, [SELF_ADDRESS], id="single_call_self", ), pytest.param( 2, [PRE_DEPLOY_CONTRACT_1], id="multiple_calls_single_sendall_recipient", ), pytest.param( 2, [SELF_ADDRESS], id="multiple_calls_single_self_recipient", ), pytest.param( 3, [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3], id="multiple_calls_multiple_sendall_recipients", ), pytest.param( 3, [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3], id="multiple_calls_multiple_sendall_recipients_including_self", ), pytest.param( 3, [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS], id="multiple_calls_multiple_sendall_recipients_including_self_last", ), pytest.param( 6, [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3], id="multiple_calls_multiple_repeating_sendall_recipients_including_self", ), pytest.param( 6, [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS], id="multiple_calls_multiple_repeating_sendall_recipients_including_self_last", ), ], indirect=["sendall_recipient_addresses"], ) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000]) @pytest.mark.valid_from("Shanghai") def test_create_selfdestruct_same_tx( state_test: StateTestFiller, pre: Alloc, sender: EOA, selfdestruct_code: Bytecode, sendall_recipient_addresses: List[Address], create_opcode: Op, call_times: int, selfdestruct_contract_initial_balance: int, ) -> None: """ Use CREATE or CREATE2 to create a self-destructing contract, and call it in the same transaction. Behavior should be the same before and after EIP-6780. Test using: - Different send-all recipient addresses: single, multiple, including self - Different initial balances for the self-destructing contract - Different opcodes: CREATE, CREATE2 """ selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code) initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode) # Our entry point is an initcode that in turn creates a self-destructing # contract entry_code_storage = Storage() # Bytecode used to create the contract, can be CREATE or CREATE2 create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode)) selfdestruct_contract_address = compute_create_address( address=compute_create_address(address=sender, nonce=0), nonce=1, initcode=selfdestruct_contract_initcode, opcode=create_opcode, ) for i in range(len(sendall_recipient_addresses)): if sendall_recipient_addresses[i] == SELF_ADDRESS: sendall_recipient_addresses[i] = selfdestruct_contract_address if selfdestruct_contract_initial_balance > 0: pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance) # Create a dict to record the expected final balances sendall_final_balances = dict( zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses), strict=False) ) selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance # Entry code that will be executed, creates the contract and then calls it # in the same tx entry_code = ( # Initcode is already deployed at `initcode_copy_from_address`, so just # copy it Op.EXTCODECOPY( initcode_copy_from_address, 0, 0, len(selfdestruct_contract_initcode), ) # And we store the created address for verification purposes + Op.SSTORE( entry_code_storage.store_next(selfdestruct_contract_address), create_bytecode, ) ) # Store the EXTCODE* properties of the created address entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Call the self-destructing contract multiple times as required, increasing # the wei sent each time entry_code_balance = 0 for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)): entry_code += Op.MSTORE(0, sendall_recipient) entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas selfdestruct_contract_address, # Address i, # Value 0, 32, 0, 0, ), ) entry_code_balance += i selfdestruct_contract_current_balance += i # Balance is always sent to other contracts if sendall_recipient != selfdestruct_contract_address: sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance # Self-destructing contract must always have zero balance after the # call because the self-destruct always happens in the same transaction # in this test selfdestruct_contract_current_balance = 0 entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.BALANCE(selfdestruct_contract_address), ) # Check the EXTCODE* properties of the self-destructing contract again entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1) tx = Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) entry_code_address = tx.created_contract post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), } # Check the balances of the sendall recipients for address, balance in sendall_final_balances.items(): post[address] = Account(balance=balance, storage={0: 1}) post[selfdestruct_contract_address] = Account.NONEXISTENT # type: ignore state_test(pre=pre, post=post, tx=tx) @pytest.mark.parametrize("create_opcode", [Op.CREATE, Op.CREATE2]) @pytest.mark.parametrize("call_times", [0, 1]) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000]) @pytest.mark.valid_from("Shanghai") def test_self_destructing_initcode( state_test: StateTestFiller, pre: Alloc, sender: EOA, selfdestruct_code: Bytecode, sendall_recipient_addresses: List[Address], create_opcode: Op, call_times: int, # Number of times to call the self-destructing contract # in the same tx selfdestruct_contract_initial_balance: int, ) -> None: """ Test that a contract can self-destruct in its initcode. Behavior is the same before and after EIP-6780. Test using: - Different initial balances for the self-destructing contract - Different opcodes: CREATE, CREATE2 - Different number of calls to the self-destructing contract in the same tx """ initcode_copy_from_address = pre.deploy_contract(selfdestruct_code) # Our entry point is an initcode that in turn creates a self-destructing # contract entry_code_storage = Storage() sendall_amount = 0 # Bytecode used to create the contract, can be CREATE or CREATE2 create_bytecode = create_opcode(size=len(selfdestruct_code)) selfdestruct_contract_address = compute_create_address( address=compute_create_address(address=sender, nonce=0), nonce=1, initcode=selfdestruct_code, opcode=create_opcode, ) # Entry code that will be executed, creates the contract and then calls it # in the same tx entry_code = ( # Initcode is already deployed at `initcode_copy_from_address`, so just # copy it Op.EXTCODECOPY( initcode_copy_from_address, 0, 0, len(selfdestruct_code), ) # And we store the created address for verification purposes + Op.SSTORE( entry_code_storage.store_next(selfdestruct_contract_address), create_bytecode, ) ) # Store the EXTCODE* properties of the created address entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(Bytecode().keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Call the self-destructing contract multiple times as required, increasing # the wei sent each time entry_code_balance = 0 for i in range(call_times): entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas selfdestruct_contract_address, # Address i, # Value 0, 0, 0, 0, ), ) entry_code_balance += i entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.BALANCE(selfdestruct_contract_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(max(len(selfdestruct_code), 32), 1) if selfdestruct_contract_initial_balance > 0: # Address where the contract is created already had some balance, # which must be included in the send-all operation sendall_amount += selfdestruct_contract_initial_balance pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance) tx = Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) entry_code_address = tx.created_contract post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), selfdestruct_contract_address: Account.NONEXISTENT, # type: ignore sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}), } state_test(pre=pre, post=post, tx=tx) @pytest.mark.parametrize("tx_value", [0, 100_000]) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000]) @pytest.mark.valid_from("Shanghai") def test_self_destructing_initcode_create_tx( state_test: StateTestFiller, pre: Alloc, sender: EOA, tx_value: int, selfdestruct_code: Bytecode, sendall_recipient_addresses: List[Address], selfdestruct_contract_initial_balance: int, ) -> None: """ Use a Create Transaction to execute a self-destructing initcode. Behavior should be the same before and after EIP-6780. Test using: - Different initial balances for the self-destructing contract - Different transaction value amounts """ tx = Transaction( sender=sender, value=tx_value, data=selfdestruct_code, to=None, gas_limit=500_000, ) selfdestruct_contract_address = tx.created_contract pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance) # Our entry point is an initcode that in turn creates a self-destructing # contract sendall_amount = selfdestruct_contract_initial_balance + tx_value post: Dict[Address, Account] = { selfdestruct_contract_address: Account.NONEXISTENT, # type: ignore sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}), } state_test(pre=pre, post=post, tx=tx) # Can only recreate using CREATE2 @pytest.mark.parametrize("create_opcode", [Op.CREATE2]) @pytest.mark.parametrize( "sendall_recipient_addresses", [ pytest.param( [PRE_DEPLOY_CONTRACT_1], id="selfdestruct_other_address", ), pytest.param( [SELF_ADDRESS], id="selfdestruct_to_self", ), ], indirect=["sendall_recipient_addresses"], ) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000]) @pytest.mark.parametrize("recreate_times", [1]) @pytest.mark.parametrize("call_times", [1]) @pytest.mark.valid_from("Shanghai") def test_recreate_self_destructed_contract_different_txs( blockchain_test: BlockchainTestFiller, pre: Alloc, sender: EOA, selfdestruct_code: Bytecode, selfdestruct_contract_initial_balance: int, sendall_recipient_addresses: List[Address], create_opcode: Op, # Number of times to recreate the contract in different transactions recreate_times: int, # Number of times to call the self-destructing contract in the same tx call_times: int, ) -> None: """ Test that a contract can be recreated after it has self-destructed, over the lapse of multiple transactions. Behavior should be the same before and after EIP-6780. Test using: - Different initial balances for the self-destructing contract - Contract creating opcodes that are not CREATE """ selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code) initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode) entry_code_storage = Storage() sendall_amount = selfdestruct_contract_initial_balance # Bytecode used to create the contract assert create_opcode != Op.CREATE, "cannot recreate contract using CREATE opcode" create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode)) # Entry code that will be executed, creates the contract and then calls it entry_code = ( # Initcode is already deployed at initcode_copy_from_address, so just # copy it Op.EXTCODECOPY( initcode_copy_from_address, 0, 0, len(selfdestruct_contract_initcode), ) + Op.MSTORE(0, create_bytecode) + Op.SSTORE( Op.CALLDATALOAD(0), Op.MLOAD(0), ) ) for i in range(call_times): entry_code += Op.CALL( Op.GASLIMIT, Op.MLOAD(0), i, 0, 0, 0, 0, ) sendall_amount += i entry_code += Op.STOP entry_code_address = pre.deploy_contract(code=entry_code) selfdestruct_contract_address = compute_create_address( address=entry_code_address, initcode=selfdestruct_contract_initcode, opcode=create_opcode ) pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance) for i in range(len(sendall_recipient_addresses)): if sendall_recipient_addresses[i] == SELF_ADDRESS: sendall_recipient_addresses[i] = selfdestruct_contract_address txs: List[Transaction] = [] for i in range(recreate_times + 1): txs.append( Transaction( data=Hash(i), sender=sender, to=entry_code_address, gas_limit=500_000, ) ) entry_code_storage[i] = selfdestruct_contract_address post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), selfdestruct_contract_address: Account.NONEXISTENT, # type: ignore } if sendall_recipient_addresses[0] != selfdestruct_contract_address: post[sendall_recipient_addresses[0]] = Account(balance=sendall_amount, storage={0: 1}) blockchain_test(pre=pre, post=post, blocks=[Block(txs=txs)]) @pytest.mark.parametrize( "call_times,sendall_recipient_addresses", [ pytest.param( 1, [PRE_DEPLOY_CONTRACT_1], id="single_call", ), pytest.param( 1, [SELF_ADDRESS], id="single_call_self", ), pytest.param( 2, [PRE_DEPLOY_CONTRACT_1], id="multiple_calls_single_sendall_recipient", ), pytest.param( 2, [SELF_ADDRESS], id="multiple_calls_single_self_recipient", ), pytest.param( 3, [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3], id="multiple_calls_multiple_sendall_recipients", ), pytest.param( 3, [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3], id="multiple_calls_multiple_sendall_recipients_including_self", ), pytest.param( 3, [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS], id="multiple_calls_multiple_sendall_recipients_including_self_last", ), pytest.param( 6, [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3], id="multiple_calls_multiple_repeating_sendall_recipients_including_self", ), pytest.param( 6, [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS], id="multiple_calls_multiple_repeating_sendall_recipients_including_self_last", ), ], indirect=["sendall_recipient_addresses"], ) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000]) @pytest.mark.valid_from("Shanghai") def test_selfdestruct_pre_existing( state_test: StateTestFiller, eip_enabled: bool, pre: Alloc, sender: EOA, selfdestruct_code: Bytecode, selfdestruct_contract_initial_balance: int, sendall_recipient_addresses: List[Address], call_times: int, ) -> None: """ Test calling a previously created account that contains a selfdestruct, and verify its balance is sent to the destination address. After EIP-6780, the balance should be sent to the send-all recipient address, similar to the behavior before the EIP, but the account is not deleted. Test using: - Different send-all recipient addresses: single, multiple, including self - Different initial balances for the self-destructing contract """ selfdestruct_contract_address = pre.deploy_contract( selfdestruct_code, balance=selfdestruct_contract_initial_balance ) entry_code_storage = Storage() for i in range(len(sendall_recipient_addresses)): if sendall_recipient_addresses[i] == SELF_ADDRESS: sendall_recipient_addresses[i] = selfdestruct_contract_address # Create a dict to record the expected final balances sendall_final_balances = dict( zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses), strict=False) ) selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance # Entry code in this case will simply call the pre-existing self- # destructing contract, as many times as required entry_code = Bytecode() # Call the self-destructing contract multiple times as required, increasing # the wei sent each time entry_code_balance = 0 for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)): entry_code += Op.MSTORE(0, sendall_recipient) entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas selfdestruct_contract_address, # Address i, # Value 0, 32, 0, 0, ), ) entry_code_balance += i selfdestruct_contract_current_balance += i # Balance is always sent to other contracts if sendall_recipient != selfdestruct_contract_address: sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance # Balance is only kept by the self-destructing contract if we are # sending to self and the EIP is activated, otherwise the balance is # destroyed if sendall_recipient != selfdestruct_contract_address or not eip_enabled: selfdestruct_contract_current_balance = 0 entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_contract_current_balance), Op.BALANCE(selfdestruct_contract_address), ) # Check the EXTCODE* properties of the self-destructing contract entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(32, 1) tx = Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) entry_code_address = tx.created_contract post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), } # Check the balances of the sendall recipients for address, balance in sendall_final_balances.items(): if address != selfdestruct_contract_address: post[address] = Account(balance=balance, storage={0: 1}) if eip_enabled: balance = selfdestruct_contract_current_balance post[selfdestruct_contract_address] = Account( balance=balance, storage={0: call_times}, ) else: post[selfdestruct_contract_address] = Account.NONEXISTENT # type: ignore state_test(pre=pre, post=post, tx=tx) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 1]) @pytest.mark.parametrize("call_times", [1, 10]) @pytest.mark.valid_from("Shanghai") def test_selfdestruct_created_same_block_different_tx( blockchain_test: BlockchainTestFiller, eip_enabled: bool, pre: Alloc, sender: EOA, selfdestruct_contract_initial_balance: int, sendall_recipient_addresses: List[Address], call_times: int, ) -> None: """ Test that if an account created in the same block that contains a selfdestruct is called, its balance is sent to the send-all address, but the account is not deleted. """ selfdestruct_code = selfdestruct_code_preset( sendall_recipient_addresses=sendall_recipient_addresses, ) selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code) selfdestruct_contract_address = compute_create_address(address=sender, nonce=0) entry_code_address = compute_create_address(address=sender, nonce=1) entry_code_storage = Storage() sendall_amount = selfdestruct_contract_initial_balance entry_code = Bytecode() # Entry code in this case will simply call the pre-existing self- # destructing contract, as many times as required # Call the self-destructing contract multiple times as required, increasing # the wei sent each time entry_code_balance = 0 for i in range(call_times): entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas selfdestruct_contract_address, # Address i, # Value 0, 0, 0, 0, ), ) entry_code_balance += i sendall_amount += i entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.BALANCE(selfdestruct_contract_address), ) # Check the EXTCODE* properties of the self-destructing contract entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(32, 1) post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}), } if eip_enabled: post[selfdestruct_contract_address] = Account(balance=0, storage={0: call_times}) else: post[selfdestruct_contract_address] = Account.NONEXISTENT # type: ignore txs = [ Transaction( value=selfdestruct_contract_initial_balance, data=selfdestruct_contract_initcode, sender=sender, to=None, gas_limit=500_000, ), Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=500_000, ), ] blockchain_test(pre=pre, post=post, blocks=[Block(txs=txs)]) @pytest.mark.parametrize("call_times", [1]) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 1]) @pytest.mark.parametrize("call_opcode", [Op.DELEGATECALL, Op.CALLCODE]) @pytest.mark.parametrize("create_opcode", [Op.CREATE]) @pytest.mark.valid_from("Shanghai") def test_calling_from_new_contract_to_pre_existing_contract( state_test: StateTestFiller, pre: Alloc, sender: EOA, sendall_recipient_addresses: List[Address], create_opcode: Op, call_opcode: Op, call_times: int, selfdestruct_contract_initial_balance: int, ) -> None: """ Test that if an account created in the current transaction delegate-call a previously created account that executes self-destruct, the calling account is deleted. """ pre_existing_selfdestruct_address = pre.deploy_contract( selfdestruct_code_preset( sendall_recipient_addresses=sendall_recipient_addresses, ), ) # Our entry point is an initcode that in turn creates a self-destructing # contract entry_code_storage = Storage() sendall_amount = 0 entry_code_address = compute_create_address(address=sender, nonce=0) selfdestruct_contract_address = compute_create_address(address=entry_code_address, nonce=1) pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance) # self-destructing call selfdestruct_code = call_opcode(address=pre_existing_selfdestruct_address) selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code) initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode) # Bytecode used to create the contract, can be CREATE or CREATE2 create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode)) # Entry code that will be executed, creates the contract and then calls it # in the same tx entry_code = ( # Initcode is already deployed at `initcode_copy_from_address`, so just # copy it Op.EXTCODECOPY( initcode_copy_from_address, 0, 0, len(selfdestruct_contract_initcode), ) # And we store the created address for verification purposes + Op.SSTORE( entry_code_storage.store_next(selfdestruct_contract_address), create_bytecode, ) ) # Store the EXTCODE* properties of the created address entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Call the self-destructing contract multiple times as required, increasing # the wei sent each time entry_code_balance = 0 for i in range(call_times): entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas selfdestruct_contract_address, # Address i, # Value 0, 0, 0, 0, ), ) entry_code_balance += i sendall_amount += i entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.BALANCE(selfdestruct_contract_address), ) # Check the EXTCODE* properties of the self-destructing contract again entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1) if selfdestruct_contract_initial_balance > 0: # Address where the contract is created already had some balance, # which must be included in the send-all operation sendall_amount += selfdestruct_contract_initial_balance post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), selfdestruct_contract_address: Account.NONEXISTENT, # type: ignore sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}), } tx = Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) state_test(pre=pre, post=post, tx=tx) @pytest.mark.parametrize("create_opcode", [Op.CREATE, Op.CREATE2]) @pytest.mark.parametrize("call_opcode", [Op.DELEGATECALL, Op.CALLCODE]) @pytest.mark.parametrize("call_times", [1]) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 1]) @pytest.mark.parametrize("pre_existing_contract_initial_balance", [0, 1]) @pytest.mark.valid_from("Shanghai") def test_calling_from_pre_existing_contract_to_new_contract( state_test: StateTestFiller, eip_enabled: bool, pre: Alloc, sender: EOA, selfdestruct_code: Bytecode, sendall_recipient_addresses: List[Address], call_opcode: Op, create_opcode: Op, call_times: int, selfdestruct_contract_initial_balance: int, pre_existing_contract_initial_balance: int, ) -> None: """ Test that if an account created in the current transaction contains a self-destruct and is delegate-called by an account created before the current transaction, the calling account is not deleted. """ selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code) initcode_copy_from_address = pre.deploy_contract( selfdestruct_contract_initcode, ) selfdestruct_contract_address = compute_create_address( address=compute_create_address(address=sender, nonce=0), nonce=1, salt=0, initcode=selfdestruct_contract_initcode, opcode=create_opcode, ) # Add the contract that delegate calls to the newly created contract caller_code = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + call_opcode( address=selfdestruct_contract_address ) caller_address = pre.deploy_contract( caller_code, balance=pre_existing_contract_initial_balance, ) # Our entry point is an initcode that in turn creates a self-destructing # contract entry_code_storage = Storage() sendall_amount = pre_existing_contract_initial_balance # Entry code that will be executed, creates the contract and then calls it # in the same tx entry_code = ( # Initcode is already deployed at `initcode_copy_from_address`, so just # copy it Op.EXTCODECOPY( initcode_copy_from_address, 0, 0, len(selfdestruct_contract_initcode), ) # And we store the created address for verification purposes + Op.SSTORE( entry_code_storage.store_next(selfdestruct_contract_address), create_opcode( value=selfdestruct_contract_initial_balance, size=len(selfdestruct_contract_initcode), ), ) ) # Store the EXTCODE* properties of the pre-existing address entry_code += Op.SSTORE( entry_code_storage.store_next(len(caller_code)), Op.EXTCODESIZE(caller_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(caller_code.keccak256()), Op.EXTCODEHASH(caller_address), ) # Now instead of calling the newly created contract directly, we delegate # call to it from a pre-existing contract, and the contract must not self- # destruct entry_code_balance = selfdestruct_contract_initial_balance for i in range(call_times): entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas caller_address, # Address i, # Value 0, 0, 0, 0, ), ) entry_code_balance += i sendall_amount += i entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.BALANCE(caller_address), ) # Check the EXTCODE* properties of the pre-existing address again entry_code += Op.SSTORE( entry_code_storage.store_next(len(caller_code)), Op.EXTCODESIZE(caller_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(caller_code.keccak256()), Op.EXTCODEHASH(caller_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1) tx = Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) entry_code_address = tx.created_contract post: Dict[Address, Account] = { entry_code_address: Account( storage=entry_code_storage, ), sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}), } if eip_enabled: post[caller_address] = Account( storage={ 0: call_times, 1: call_times, }, balance=0, ) else: post[caller_address] = Account.NONEXISTENT # type: ignore state_test(pre=pre, post=post, tx=tx) @pytest.mark.parametrize("create_opcode", [Op.CREATE, Op.CREATE2]) @pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000]) @pytest.mark.parametrize( "call_times,sendall_recipient_addresses", [ pytest.param(1, [PRE_DEPLOY_CONTRACT_1], id="single_call"), pytest.param(5, [PRE_DEPLOY_CONTRACT_1], id="multiple_calls_single beneficiary"), ], indirect=["sendall_recipient_addresses"], ) @pytest.mark.valid_from("Shanghai") def test_create_selfdestruct_same_tx_increased_nonce( state_test: StateTestFiller, pre: Alloc, sender: EOA, selfdestruct_code: Bytecode, sendall_recipient_addresses: List[Address], create_opcode: Op, call_times: int, selfdestruct_contract_initial_balance: int, ) -> None: """ Verify that a contract can self-destruct if it was created in the same transaction, even when its nonce has been increased due to contract creation. """ initcode = Op.RETURN(0, 1) selfdestruct_pre_bytecode = Op.MSTORE(0, Op.PUSH32(bytes(initcode))) + Op.POP( Op.CREATE(offset=32 - len(initcode), size=len(initcode)) ) selfdestruct_code = selfdestruct_pre_bytecode + selfdestruct_code selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code) initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode) selfdestruct_contract_address = compute_create_address( address=compute_create_address(address=sender, nonce=0), nonce=1, initcode=selfdestruct_contract_initcode, opcode=create_opcode, ) if selfdestruct_contract_initial_balance > 0: pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance) # Our entry point is an initcode that in turn creates a self-destructing # contract entry_code_storage = Storage() # Create a dict to record the expected final balances sendall_final_balances = dict( zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses), strict=False) ) selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance # Bytecode used to create the contract, can be CREATE or CREATE2 create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode)) # Entry code that will be executed, creates the contract and then calls it # in the same tx entry_code = ( # Initcode is already deployed at `initcode_copy_from_address`, so just # copy it Op.EXTCODECOPY( initcode_copy_from_address, 0, 0, len(selfdestruct_contract_initcode), ) # And we store the created address for verification purposes + Op.SSTORE( entry_code_storage.store_next(selfdestruct_contract_address), create_bytecode, ) ) # Store the EXTCODE* properties of the created address entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Call the self-destructing contract multiple times as required, increasing # the wei sent each time entry_code_balance = 0 for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)): entry_code += Op.MSTORE(0, sendall_recipient) entry_code += Op.SSTORE( entry_code_storage.store_next(1), Op.CALL( Op.GASLIMIT, # Gas selfdestruct_contract_address, # Address i, # Value 0, 32, 0, 0, ), ) entry_code_balance += i selfdestruct_contract_current_balance += i # Balance is always sent to other contracts if sendall_recipient != selfdestruct_contract_address: sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance # Self-destructing contract must always have zero balance after the # call because the self-destruct always happens in the same transaction # in this test selfdestruct_contract_current_balance = 0 entry_code += Op.SSTORE( entry_code_storage.store_next(0), Op.BALANCE(selfdestruct_contract_address), ) # Check the EXTCODE* properties of the self-destructing contract again entry_code += Op.SSTORE( entry_code_storage.store_next(len(selfdestruct_code)), Op.EXTCODESIZE(selfdestruct_contract_address), ) entry_code += Op.SSTORE( entry_code_storage.store_next(selfdestruct_code.keccak256()), Op.EXTCODEHASH(selfdestruct_contract_address), ) # Lastly return zero so the entry point contract is created and we can # retain the stored values for verification. entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1) tx = Transaction( value=entry_code_balance, data=entry_code, sender=sender, to=None, gas_limit=1_000_000, ) entry_code_address = tx.created_contract post: Dict[Address, Account] = { entry_code_address: Account( code="0x00", storage=entry_code_storage, ), initcode_copy_from_address: Account( code=selfdestruct_contract_initcode, ), } # Check the balances of the sendall recipients for address, balance in sendall_final_balances.items(): post[address] = Account(balance=balance, storage={0: 1}) # Check the new contracts created from the self-destructing contract were # correctly created. for address in [ compute_create_address(address=selfdestruct_contract_address, nonce=i + 1) for i in range(call_times) ]: post[address] = Account( code=b"\x00", ) post[selfdestruct_contract_address] = Account.NONEXISTENT # type: ignore state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py ================================================ """Tests for selfdestruct interaction with revert.""" from typing import Dict import pytest from ethereum_test_forks import Cancun from ethereum_test_tools import ( EOA, Account, Address, Alloc, Bytecode, Environment, Initcode, StateTestFiller, Storage, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6780.md" REFERENCE_SPEC_VERSION = "1b6a0e94cc47e859b9866e570391cf37dc55059a" SELFDESTRUCT_ENABLE_FORK = Cancun @pytest.fixture def entry_code_address(sender: EOA) -> Address: """Address where the entry code will run.""" return compute_create_address(address=sender, nonce=0) @pytest.fixture def recursive_revert_contract_address_init_balance() -> int: """Return initial balance for recursive_revert_contract_address.""" return 3 @pytest.fixture def recursive_revert_contract_address( pre: Alloc, recursive_revert_contract_code: Bytecode, recursive_revert_contract_address_init_balance: int, ) -> Address: """Address where the recursive revert contract address exists.""" return pre.deploy_contract( code=recursive_revert_contract_code, balance=recursive_revert_contract_address_init_balance, ) @pytest.fixture def selfdestruct_on_outer_call() -> int: """Whether to selfdestruct the target contract in the outer call scope.""" return 0 @pytest.fixture def recursive_revert_contract_code( selfdestruct_on_outer_call: int, selfdestruct_with_transfer_contract_address: Address, ) -> Bytecode: """ Contract code that: Given selfdestructable contract A, transfer value to A and call A.selfdestruct. Then, recurse into a new call which transfers value to A, call A.selfdestruct, and reverts. """ # Common prefix for all three cases: # case 1: selfdestruct_on_outer_call=1 # case 2: selfdestruct_on_outer_call=2 # case 3: selfdestruct_on_outer_call has a different value common_prefix = ( Op.PUSH0 + Op.CALLDATALOAD + Op.PUSH1(0x1) + Op.PUSH20(selfdestruct_with_transfer_contract_address) + Op.SWAP2 + Op.SWAP1 + Op.DUP2 + Op.PUSH0 + Op.EQ + Op.PUSH1(0x3A) + Op.JUMPI + Op.POP + Op.PUSH1(0x1) + Op.EQ + Op.PUSH1(0x29) + Op.JUMPI + Op.STOP + Op.JUMPDEST + Op.PUSH0 + Op.PUSH1(0x20) + Op.DUP2 + Op.PUSH1(0x1) + Op.DUP2 + Op.SWAP5 + Op.DUP2 + Op.DUP4 + Op.MSTORE + Op.GASLIMIT + Op.CALL + Op.PUSH0 + Op.DUP1 + Op.REVERT + Op.JUMPDEST ) if selfdestruct_on_outer_call == 1: suffix = ( Op.SWAP1 + Op.POP + Op.PUSH1(0x1) + Op.PUSH0 + Op.MSTORE + Op.PUSH0 + Op.DUP1 + Op.PUSH1(0x20) + Op.DUP2 + Op.PUSH1(0x1) + Op.DUP7 + Op.GASLIMIT + Op.CALL + Op.POP + Op.PUSH0 + Op.DUP1 + Op.MSTORE + Op.PUSH0 + Op.DUP1 + Op.PUSH1(0x20) + Op.DUP2 + Op.PUSH1(0x1) + Op.DUP7 + Op.GASLIMIT + Op.CALL + Op.POP + Op.PUSH0 + Op.MSTORE + Op.PUSH0 + Op.DUP1 + Op.PUSH1(0x20) + Op.DUP2 + Op.DUP1 + Op.ADDRESS + Op.GASLIMIT + Op.CALL + Op.POP + Op.BALANCE + Op.PUSH1(0x1) + Op.SSTORE + Op.PUSH0 + Op.DUP1 + Op.RETURN ) elif selfdestruct_on_outer_call == 2: suffix = ( Op.PUSH0 + Op.PUSH1(0x20) + Op.DUP2 + Op.PUSH1(0x1) + Op.DUP7 + Op.DUP3 + Op.SWAP6 + Op.DUP4 + Op.DUP1 + Op.MSTORE + Op.DUP4 + Op.DUP1 + Op.DUP7 + Op.DUP2 + Op.DUP7 + Op.DUP7 + Op.GASLIMIT + Op.CALL + Op.POP + Op.DUP4 + Op.MSTORE + Op.DUP3 + Op.DUP1 + Op.DUP6 + Op.DUP2 + Op.DUP1 + Op.ADDRESS + Op.GASLIMIT + Op.CALL + Op.POP + Op.DUP1 + Op.BALANCE + Op.DUP3 + Op.SSTORE + Op.DUP2 + Op.DUP4 + Op.MSTORE + Op.GASLIMIT + Op.CALL + Op.PUSH0 + Op.DUP1 + Op.RETURN ) else: # selfdestruct_on_outer_call is neither 1 nor 2 suffix = ( Op.SWAP1 + Op.POP + Op.PUSH0 + Op.DUP1 + Op.MSTORE + Op.PUSH0 + Op.DUP1 + Op.PUSH1(0x20) + Op.DUP2 + Op.PUSH1(0x1) + Op.DUP7 + Op.GASLIMIT + Op.CALL + Op.POP + Op.PUSH0 + Op.MSTORE + Op.PUSH0 + Op.DUP1 + Op.PUSH1(0x20) + Op.DUP2 + Op.DUP1 + Op.ADDRESS + Op.GASLIMIT + Op.CALL + Op.POP + Op.BALANCE + Op.PUSH1(0x1) + Op.SSTORE + Op.PUSH0 + Op.DUP1 + Op.RETURN ) return common_prefix + suffix @pytest.fixture def selfdestruct_with_transfer_contract_address( pre: Alloc, entry_code_address: Address, selfdestruct_with_transfer_contract_code: Bytecode, same_tx: bool, ) -> Address: """ Contract address for contract that can selfdestruct and receive value. """ if same_tx: return compute_create_address(address=entry_code_address, nonce=1) # We need to deploy the contract before. return pre.deploy_contract(selfdestruct_with_transfer_contract_code) @pytest.fixture def selfdestruct_with_transfer_contract_code(selfdestruct_recipient_address: Address) -> Bytecode: """Contract that can selfdestruct and receive value.""" code: Bytecode = ( Op.PUSH0 + Op.CALLDATALOAD + Op.PUSH20(selfdestruct_recipient_address) + Op.SWAP1 + Op.EQ(Op.PUSH0, Op.DUP1) + Op.PUSH1(0x2F) + Op.JUMPI + Op.PUSH1(0x1) + Op.EQ + Op.PUSH1(0x25) + Op.JUMPI + Op.STOP + Op.JUMPDEST + Op.PUSH1(0x1) + Op.DUP1 + Op.SLOAD + Op.ADD + Op.PUSH1(0x1) + Op.SSTORE + Op.SELFDESTRUCT + Op.JUMPDEST + Op.PUSH1(0x1) + Op.PUSH0 + Op.SLOAD + Op.ADD + Op.PUSH0 + Op.SSTORE + Op.PUSH0 + Op.DUP1 + Op.RETURN ) return code @pytest.fixture def selfdestruct_with_transfer_contract_initcode( selfdestruct_with_transfer_contract_code: Bytecode, ) -> Bytecode: """Initcode for selfdestruct_with_transfer_contract_code.""" return Initcode(deploy_code=selfdestruct_with_transfer_contract_code) @pytest.fixture def selfdestruct_with_transfer_initcode_copy_from_address( pre: Alloc, selfdestruct_with_transfer_contract_initcode: Bytecode, ) -> Address: """ Address of a pre-existing contract we use to simply copy initcode from. """ addr = pre.deploy_contract(selfdestruct_with_transfer_contract_initcode) return addr @pytest.mark.parametrize( "same_tx", [True], ids=["same_tx"], ) @pytest.mark.parametrize( "selfdestruct_on_outer_call", [0, 1, 2], ids=[ "no_outer_selfdestruct", "outer_selfdestruct_before_inner_call", "outer_selfdestruct_after_inner_call", ], ) @pytest.mark.valid_from("Cancun") def test_selfdestruct_created_in_same_tx_with_revert( # noqa SC200 state_test: StateTestFiller, sender: EOA, env: Environment, pre: Alloc, entry_code_address: Address, selfdestruct_on_outer_call: int, selfdestruct_with_transfer_contract_code: Bytecode, selfdestruct_with_transfer_contract_initcode: Bytecode, selfdestruct_with_transfer_contract_address: Address, selfdestruct_recipient_address: Address, selfdestruct_with_transfer_initcode_copy_from_address: Address, recursive_revert_contract_address: Address, recursive_revert_contract_code: Bytecode, ) -> None: """ Given: Contract A which has methods to receive balance and selfdestruct, and was created in current tx. Test the following call sequence: Transfer value to A and call A.selfdestruct. Recurse into a new call from transfers value to A, calls A.selfdestruct, and reverts. """ entry_code = Op.EXTCODECOPY( selfdestruct_with_transfer_initcode_copy_from_address, 0, 0, len(bytes(selfdestruct_with_transfer_contract_initcode)), ) entry_code += Op.SSTORE( 0, Op.CREATE( 0, 0, # Value Offset len(bytes(selfdestruct_with_transfer_contract_initcode)), ), ) entry_code += Op.CALL( Op.GASLIMIT(), recursive_revert_contract_address, 0, # value 0, # arg offset 0, # arg length 0, # ret offset 0, # ret length ) post: Dict[Address, Account] = { entry_code_address: Account( code="0x", storage=Storage( { 0: selfdestruct_with_transfer_contract_address, # type: ignore } ), ), selfdestruct_with_transfer_initcode_copy_from_address: Account( code=selfdestruct_with_transfer_contract_initcode, ), recursive_revert_contract_address: Account( code=recursive_revert_contract_code, storage=Storage({1: 1}), # type: ignore ), } if selfdestruct_on_outer_call > 0: post[selfdestruct_with_transfer_contract_address] = Account.NONEXISTENT # type: ignore post[selfdestruct_recipient_address] = Account( balance=1 if selfdestruct_on_outer_call == 1 else 2, ) else: post[selfdestruct_with_transfer_contract_address] = Account( balance=1, code=selfdestruct_with_transfer_contract_code, storage=Storage( { # 2 value transfers (1 in outer call, 1 in reverted inner # call) 0: 1, # type: ignore # 1 selfdestruct in reverted inner call 1: 0, # type: ignore } ), ) post[selfdestruct_recipient_address] = Account.NONEXISTENT # type: ignore tx = Transaction( value=0, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "recursive_revert_contract_address_init_balance", [2], ids=["init_balance_2"], ) @pytest.mark.parametrize( "same_tx", [False], ids=["not_same_tx"], ) @pytest.mark.parametrize( "selfdestruct_on_outer_call", [0, 1, 2], ids=[ "no_outer_selfdestruct", "outer_selfdestruct_before_inner_call", "outer_selfdestruct_after_inner_call", ], ) @pytest.mark.valid_from("Cancun") def test_selfdestruct_not_created_in_same_tx_with_revert( state_test: StateTestFiller, sender: EOA, env: Environment, entry_code_address: Address, pre: Alloc, selfdestruct_on_outer_call: int, selfdestruct_with_transfer_contract_code: Bytecode, selfdestruct_with_transfer_contract_address: Address, selfdestruct_recipient_address: Address, recursive_revert_contract_address: Address, recursive_revert_contract_code: Bytecode, ) -> None: """ Same test as selfdestruct_created_in_same_tx_with_revert except selfdestructable contract is pre-existing. """ entry_code = Op.CALL( Op.GASLIMIT(), recursive_revert_contract_address, 0, # value 0, # arg offset 0, # arg length 0, # ret offset 0, # ret length ) post: Dict[Address, Account] = { entry_code_address: Account(code="0x"), } if selfdestruct_on_outer_call > 0: post[selfdestruct_with_transfer_contract_address] = Account( balance=1 if selfdestruct_on_outer_call == 1 else 0, code=selfdestruct_with_transfer_contract_code, storage=Storage( { # 2 value transfers: 1 in outer call, 1 in reverted inner # call 0: 1, # type: ignore # 1 selfdestruct in reverted inner call 1: 1, # type: ignore } ), ) post[selfdestruct_recipient_address] = Account( balance=1 if selfdestruct_on_outer_call == 1 else 2 ) else: post[selfdestruct_with_transfer_contract_address] = Account( balance=1, code=selfdestruct_with_transfer_contract_code, storage=Storage( { # 2 value transfers: # 1 in outer call, 1 in reverted inner call 0: 1, # type: ignore # 2 selfdestructs: # 1 in outer call, 1 in reverted inner call 1: 0, # type: ignore } ), ) post[selfdestruct_recipient_address] = Account.NONEXISTENT # type: ignore tx = Transaction( value=0, data=entry_code, sender=sender, to=None, gas_limit=500_000, ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/cancun/eip7516_blobgasfee/__init__.py ================================================ """Tests for EIP-7516: BLOBBASEFEE opcode.""" ================================================ FILE: tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py ================================================ """ BLOBBASEFEE opcode tests. Tests for [EIP-7516: BLOBBASEFEE opcode](https://eips.ethereum.org/EIPS/eip-7516). """ from itertools import count import pytest from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Environment, StateTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7516.md" REFERENCE_SPEC_VERSION = "dcd2f4ede58a6ed908acd3cc2c198e9f605cbf3b" BLOBBASEFEE_GAS = 2 @pytest.fixture def call_gas() -> int: """Amount of gas to use when calling the callee code.""" return 0xFFFF @pytest.fixture def callee_code() -> Bytecode: """Bytecode under test, by default, only call the BLOBBASEFEE opcode.""" return Op.BLOBBASEFEE + Op.STOP @pytest.fixture def callee_address(pre: Alloc, callee_code: Bytecode) -> Address: """Address of the account containing the bytecode under test.""" return pre.deploy_contract(callee_code) @pytest.fixture def caller_code( call_gas: int, callee_address: Address, ) -> Bytecode: """Bytecode used to call the bytecode containing the BLOBBASEFEE opcode.""" return Op.SSTORE(Op.SELFBALANCE, Op.CALL(gas=call_gas, address=callee_address)) @pytest.fixture def caller_pre_storage() -> Storage: """ Storage of the account containing the bytecode that calls the test contract. """ return Storage() @pytest.fixture def caller_address(pre: Alloc, caller_code: Bytecode, caller_pre_storage: Storage) -> Address: """ Address of the account containing the bytecode that calls the test contract. """ return pre.deploy_contract(caller_code) @pytest.fixture def tx(pre: Alloc, caller_address: Address) -> Transaction: """ Prepare test transaction, by setting the destination account, the transaction value, the transaction gas limit, and the transaction data. """ return Transaction( sender=pre.fund_eoa(), gas_limit=1_000_000, to=caller_address, value=1, ) @pytest.mark.parametrize( "callee_code,call_fails", [ pytest.param(Op.BLOBBASEFEE * 1024, False, id="no_stack_overflow"), pytest.param(Op.BLOBBASEFEE * 1025, True, id="stack_overflow"), ], ) @pytest.mark.valid_from("Cancun") def test_blobbasefee_stack_overflow( state_test: StateTestFiller, pre: Alloc, caller_address: Address, callee_address: Address, tx: Transaction, call_fails: bool, ) -> None: """ Tests that the BLOBBASEFEE opcode produces a stack overflow by using it repeatedly. """ post = { caller_address: Account( storage={1: 0 if call_fails else 1}, ), callee_address: Account( balance=0, ), } state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_gas,call_fails", [ pytest.param(BLOBBASEFEE_GAS, False, id="enough_gas"), pytest.param(BLOBBASEFEE_GAS - 1, True, id="out_of_gas"), ], ) @pytest.mark.valid_from("Cancun") def test_blobbasefee_out_of_gas( state_test: StateTestFiller, pre: Alloc, caller_address: Address, callee_address: Address, tx: Transaction, call_fails: bool, ) -> None: """Tests that the BLOBBASEFEE opcode fails with insufficient gas.""" post = { caller_address: Account( storage={1: 0 if call_fails else 1}, ), callee_address: Account( balance=0, ), } state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize("caller_pre_storage", [{1: 1}], ids=[""]) @pytest.mark.valid_at_transition_to("Cancun") def test_blobbasefee_before_fork( state_test: StateTestFiller, pre: Alloc, caller_address: Address, callee_address: Address, tx: Transaction, ) -> None: """ Tests that the BLOBBASEFEE opcode results on exception when called before the fork. """ # Fork happens at timestamp 15_000 timestamp = 7_500 post = { caller_address: Account( storage={1: 0}, ), callee_address: Account( balance=0, ), } state_test( env=Environment( timestamp=timestamp, ), pre=pre, tx=tx, post=post, ) timestamps = [7_500, 14_999, 15_000] @pytest.mark.parametrize( "caller_pre_storage", [{block_number: 0xFF for block_number, _ in enumerate(timestamps, start=1)}], ids=[""], ) @pytest.mark.valid_at_transition_to("Cancun") def test_blobbasefee_during_fork( blockchain_test: BlockchainTestFiller, pre: Alloc, caller_address: Address, callee_address: Address, tx: Transaction, ) -> None: """ Tests that the BLOBBASEFEE opcode results on exception when called before the fork and succeeds when called after the fork. """ code_caller_post_storage = Storage() nonce = count(0) blocks = [] for block_number, timestamp in enumerate(timestamps, start=1): blocks.append( Block( txs=[tx.with_nonce(next(nonce))], timestamp=timestamp, ), ) # pre-set storage just to make sure we detect the change code_caller_post_storage[block_number] = 0 if timestamp < 15_000 else 1 post = { caller_address: Account( storage=code_caller_post_storage, ), callee_address: Account( balance=0, ), } blockchain_test( genesis_environment=Environment(), pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/constantinople/__init__.py ================================================ """Test cases for EVM functionality introduced in Constantinople.""" ================================================ FILE: tests/constantinople/eip1014_create2/__init__.py ================================================ """ Tests for [EIP-1014: Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014). """ ================================================ FILE: tests/constantinople/eip1014_create2/spec.py ================================================ """Defines EIP-1014 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_1014 = ReferenceSpec("EIPS/eip-1014.md", "31d4d62ec1dfc9f2bb26ca648f05d4cc2f47da09") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-1014 specifications as defined at https://eips.ethereum.org/EIPS/eip-1014. """ ================================================ FILE: tests/constantinople/eip1014_create2/test_create_returndata.py ================================================ """ Return data management around create2 Port call_outsize_then_create2_successful_then_returndatasizeFiller.json test Port call_then_create2_successful_then_returndatasizeFiller.json test. """ import pytest from ethereum_test_tools import Account, Alloc, StateTestFiller, Transaction, keccak256 from ethereum_test_tools import Opcodes as Op from .spec import ref_spec_1014 REFERENCE_SPEC_GIT_PATH = ref_spec_1014.git_path REFERENCE_SPEC_VERSION = ref_spec_1014.version @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreate2/call_outsize_then_create2_successful_then_returndatasizeFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreate2/call_then_create2_successful_then_returndatasizeFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/497"], coverage_missed_reason="coinbase is deleted in original test (tx.gas_price==env.base_fee)", ) @pytest.mark.valid_from("Istanbul") @pytest.mark.parametrize("call_return_size", [35, 32, 0]) @pytest.mark.parametrize("create_type", [Op.CREATE, Op.CREATE2]) @pytest.mark.parametrize("return_type", [Op.RETURN, Op.REVERT]) @pytest.mark.parametrize("return_type_in_create", [Op.RETURN, Op.REVERT]) @pytest.mark.slow() def test_create2_return_data( call_return_size: int, create_type: Op, return_type: Op, return_type_in_create: Op, pre: Alloc, state_test: StateTestFiller, ) -> None: """ Validate that create2 return data does not interfere with previously existing memory. """ # Storage vars slot_returndatasize_before_create = 0 slot_returndatasize_after_create = 1 slot_return_data_hash_before_create = 2 slot_return_data_hash_after_create = 3 slot_code_worked = 4 slot_returndatacopy_before_create = 5 slot_returndatacopy_before_create_2 = 6 slot_returndatacopy_after_create = 7 slot_begin_memory_after_create = 8 # CREATE2 Initcode return_data_in_create = 0xFFFAFB initcode = Op.MSTORE(0, return_data_in_create) + return_type_in_create(0, 32) call_return_data_value = 0x1122334455667788991011121314151617181920212223242526272829303132 expected_call_return_data = int.to_bytes(call_return_data_value, 32, byteorder="big").ljust( call_return_size, b"\0" )[0:call_return_size] expected_returndatacopy = expected_call_return_data[0:32] empty_data = b"" address_call = pre.deploy_contract( code=Op.MSTORE(0, call_return_data_value) + Op.MSTORE(32, 0xFFFFFFFF) + return_type(0, call_return_size), storage={}, ) address_to = pre.deploy_contract( balance=100_000_000, code=Op.JUMPDEST() + Op.MSTORE(0x100, Op.CALLDATALOAD(0)) + Op.CALL(0x0900000000, address_call, 0, 0, 0, 0, call_return_size) # # + Op.SSTORE(slot_returndatasize_before_create, Op.RETURNDATASIZE()) + Op.RETURNDATACOPY(0x200, 0, call_return_size) + Op.SSTORE(slot_returndatacopy_before_create, Op.MLOAD(0x200)) + Op.SSTORE(slot_returndatacopy_before_create_2, Op.MLOAD(0x220)) + Op.SSTORE(slot_return_data_hash_before_create, Op.SHA3(0, call_return_size)) # # + create_type(offset=0x100, size=Op.CALLDATASIZE()) + Op.SSTORE(slot_returndatasize_after_create, Op.RETURNDATASIZE()) + Op.RETURNDATACOPY(0x300, 0, Op.RETURNDATASIZE()) + Op.SSTORE(slot_returndatacopy_after_create, Op.MLOAD(0x300)) + Op.SSTORE(slot_return_data_hash_after_create, Op.SHA3(0x300, Op.RETURNDATASIZE())) + Op.SSTORE(slot_begin_memory_after_create, Op.MLOAD(0)) + Op.SSTORE(slot_code_worked, 1) + Op.STOP(), storage={ slot_returndatasize_before_create: 0xFF, slot_returndatasize_after_create: 0xFF, slot_return_data_hash_before_create: 0xFF, slot_return_data_hash_after_create: 0xFF, slot_returndatacopy_before_create: 0xFF, slot_returndatacopy_before_create_2: 0xFF, slot_begin_memory_after_create: 0xFF, }, ) post = { address_to: Account( storage={ slot_code_worked: 1, slot_returndatacopy_before_create: expected_returndatacopy, slot_returndatacopy_before_create_2: 0, # # the actual bytes returned by returndatacopy opcode after # create slot_returndatacopy_after_create: ( return_data_in_create if return_type_in_create == Op.REVERT else 0 ), slot_returndatasize_before_create: call_return_size, # # return datasize value after create slot_returndatasize_after_create: ( 0x20 if return_type_in_create == Op.REVERT else 0 ), # slot_return_data_hash_before_create: keccak256(expected_call_return_data), slot_return_data_hash_after_create: ( keccak256(empty_data) if return_type_in_create == Op.RETURN else keccak256(int.to_bytes(return_data_in_create, 32, byteorder="big")) ), # # check that create 2 didn't mess up with initial memory space # declared for return slot_begin_memory_after_create: expected_returndatacopy, } ) } tx = Transaction( sender=pre.fund_eoa(), to=address_to, protected=False, data=initcode, gas_limit=500_000, value=0, ) state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/constantinople/eip1014_create2/test_recreate.py ================================================ """Test Account Self-destruction and Re-creation.""" import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Initcode, Transaction, compute_create2_address, ) from ethereum_test_tools import Opcodes as Op from .spec import ref_spec_1014 REFERENCE_SPEC_GIT_PATH = ref_spec_1014.git_path REFERENCE_SPEC_VERSION = ref_spec_1014.version @pytest.mark.parametrize("recreate_on_separate_block", [True, False]) @pytest.mark.valid_from("Constantinople") @pytest.mark.valid_until("Shanghai") def test_recreate( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, recreate_on_separate_block: bool, ) -> None: """ Test that the storage is cleared when a contract is first destructed then re-created using CREATE2. """ creator_contract_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.CREATE2( 0, 0, Op.CALLDATASIZE, 0 ) creator_address = pre.deploy_contract(creator_contract_code) sender = pre.fund_eoa() deploy_code = ( Op.EQ(0, Op.CALLVALUE) + Op.PUSH1(0xC) + Op.JUMPI + Op.SSTORE(0, Op.CALLVALUE) + Op.STOP + Op.JUMPDEST + Op.PUSH1(0x0) + Op.SELFDESTRUCT ) initcode = Initcode(deploy_code=deploy_code) create_tx = Transaction( gas_limit=100_000, to=creator_address, data=initcode, sender=sender, ) created_contract_address = compute_create2_address( address=creator_address, salt=0, initcode=initcode ) set_storage_tx = Transaction( gas_limit=100_000, to=created_contract_address, value=1, sender=sender, ) blocks = [Block(txs=[create_tx, set_storage_tx])] destruct_tx = Transaction( gas_limit=100_000, to=created_contract_address, value=0, sender=sender, ) balance = 1 send_funds_tx = Transaction( gas_limit=100_000, to=created_contract_address, value=balance, sender=sender, ) re_create_tx = Transaction( gas_limit=100_000, to=creator_address, data=initcode, sender=sender, ) if recreate_on_separate_block: blocks.append(Block(txs=[destruct_tx, send_funds_tx])) blocks.append(Block(txs=[re_create_tx])) else: blocks.append(Block(txs=[destruct_tx, send_funds_tx, re_create_tx])) post = { created_contract_address: Account( nonce=1, balance=balance, code=deploy_code, storage={}, ), } blockchain_test(pre=pre, post=post, blocks=blocks) ================================================ FILE: tests/constantinople/eip145_bitwise_shift/__init__.py ================================================ """ Test [EIP-145: Bitwise shifting instructions in EVM](https://eips.ethereum.org/EIPS/eip-145). """ ================================================ FILE: tests/constantinople/eip145_bitwise_shift/spec.py ================================================ """Defines EIP-145 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_145 = ReferenceSpec("EIPS/eip-145.md", "be0aca3e57f1eeb8ae265e58da6e2dffc5b67f81") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-145 specifications as defined at https://eips.ethereum.org/EIPS/eip-145. """ # Below are GPT o4-mini-high implementation of shift functions It can # contain bugs, treat it with caution and refer to EVM implementations @staticmethod def sar(shift: int, value: int) -> int: """ Simulate the EVM SAR (Signed Arithmetic Right shift) operation. Parameters ---------- shift : int Number of bits to shift to the right (interpreted as full unsigned; no low-8-bit truncation here). value : int The 256-bit value to shift, interpreted as a signed integer. Returns ------- int The result of the arithmetic right shift, pushed as an unsigned 256-bit integer on the EVM stack. """ mask256 = (1 << 256) - 1 # Clamp value to 256 bits # Interpret as signed v = value & mask256 if v >> 255: v_signed = v - (1 << 256) else: v_signed = v # If shift >= 256, spec says: # • result = 0 if v_signed >= 0 # • result = -1 if v_signed < 0 if shift >= 256: result_signed = -1 if v_signed < 0 else 0 else: # Normal arithmetic right shift result_signed = v_signed >> shift # Wrap back to unsigned 256-bit return result_signed & mask256 @staticmethod def shl(shift: int, value: int) -> int: """ Simulate the EVM SHL (Logical Left shift) operation. Parameters ---------- shift : int Number of bits to shift to the left. value : int The 256-bit value to shift, interpreted as an unsigned integer. Returns ------- int The result of the logical left shift, pushed as an unsigned 256-bit integer on the EVM stack. """ mask256 = (1 << 256) - 1 # Clamp input to 256 bits v = value & mask256 # If shift >= 256, spec returns 0 if shift >= 256: return 0 # Logical left shift and wrap to 256 bits return (v << shift) & mask256 @staticmethod def shr(shift: int, value: int) -> int: """ Simulate the EVM SHR (Logical Right shift) operation. Parameters ---------- shift : int Number of bits to shift to the right. value : int The 256-bit value to shift, interpreted as an unsigned integer. Returns ------- int The result of the logical right shift, pushed as an unsigned 256-bit integer on the EVM stack. """ mask256 = (1 << 256) - 1 # Clamp input to 256 bits v = value & mask256 # If shift >= 256, the EVM spec returns 0 if shift >= 256: return 0 # Logical right shift and mask back to 256 bits return (v >> shift) & mask256 ================================================ FILE: tests/constantinople/eip145_bitwise_shift/test_shift_combinations.py ================================================ """Test bitwise shift opcodes in different combinations.""" import itertools from typing import Callable import pytest from ethereum_test_tools import ( Account, Alloc, StateTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_145 REFERENCE_SPEC_GIT_PATH = ref_spec_145.git_path REFERENCE_SPEC_VERSION = ref_spec_145.version list_of_args = [ 0, 1, 2, 5, 0xFE, 0xFF, 0x100, 0x101, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE, 0x8000000000000000000000000000000000000000000000000000000000000000, 0xA000000000000000000000000000000000000000000000000000000000000000, 0x5555555555555555555555555555555555555555555555555555555555555555, 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, 0x0000000000000000000000000000000000000000000000000000000000000080, 0x0000000000000000000000000000000000000000000000000000000000008000, 0x0000000000000000000000000000000000000000000000000000000080000000, 0x0000000000000000000000000000000000000000000000008000000000000000, 0x0000000000000000000000000000000080000000000000000000000000000000, 0x8000000000000000000000000000000000000000000000000000000000000000, ] combinations = list(itertools.product(list_of_args, repeat=2)) @pytest.mark.parametrize( "opcode,operation", [ pytest.param(Op.SAR, Spec.sar, id="sar"), pytest.param(Op.SHL, Spec.shl, id="shl"), pytest.param(Op.SHR, Spec.shr, id="shr"), ], ) @pytest.mark.valid_from("Constantinople") @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stShift/shiftCombinationsFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stShift/shiftSignedCombinationsFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1683"], ) def test_combinations( state_test: StateTestFiller, pre: Alloc, opcode: Op, operation: Callable ) -> None: """Test bitwise shift combinations.""" result = Storage() address_to = pre.deploy_contract( code=sum( Op.SSTORE( result.store_next(operation(shift=a, value=b), f"{str(opcode).lower()}({a}, {b})"), opcode(a, b), ) for a, b in combinations ) + Op.SSTORE(result.store_next(1, "code_finished"), 1) + Op.STOP, ) tx = Transaction( sender=pre.fund_eoa(), to=address_to, gas_limit=5_000_000, ) state_test(pre=pre, post={address_to: Account(storage=result)}, tx=tx) ================================================ FILE: tests/frontier/__init__.py ================================================ """Test cases for EVM functionality introduced in Frontier.""" ================================================ FILE: tests/frontier/create/__init__.py ================================================ """Test examples, patterns, templates to use in .py tests.""" ================================================ FILE: tests/frontier/create/test_create_one_byte.py ================================================ """ The test calls CREATE in a loop deploying 1-byte contracts with all possible byte values, records in storage the values that failed to deploy. """ import pytest from ethereum_test_forks import Byzantium, Fork, London from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op from ethereum_test_types import compute_create_address @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_FirstByte_loopFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1615"], coverage_missed_reason=( "coinbase is deleted in original test (tx.gas_price==env.base_fee), " "opcodes lt, iszero, jump are no longer used" ), ) @pytest.mark.valid_from("Frontier") @pytest.mark.with_all_create_opcodes def test_create_one_byte( state_test: StateTestFiller, fork: Fork, pre: Alloc, create_opcode: Op, ) -> None: """Run create deploys with single bytes for each byte.""" initcode: dict[int, Bytecode] = {} for byte in range(256): initcode[byte] = Op.MSTORE8(0, byte) + Op.RETURN(0, 1) initcode_length = 10 sender = pre.fund_eoa() expect_post = Storage() # make a subcontract that deploys code, because deploy 0xef eats ALL gas create_contract = pre.deploy_contract( code=Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.MSTORE(32, create_opcode(offset=32 - initcode_length, size=initcode_length)) + Op.RETURN(32, 32) ) code = pre.deploy_contract( nonce=1, code=Op.MSTORE(0, Op.PUSH32(bytes(initcode[0]))) + sum( [ Op.MSTORE8(23, opcode) # correct the deploy byte + Op.CALL( gas=50_000, address=create_contract, args_size=32, ret_offset=32, ret_size=32, ) + Op.POP # remove call result from stack for vm trace files + Op.SSTORE( opcode, Op.MLOAD(32), ) for opcode, _ in initcode.items() ], ) + Op.SSTORE(256, 1), ) created_accounts: dict[int, Address] = {} for opcode, opcode_init in initcode.items(): ef_exception = opcode == 239 and fork >= London created_accounts[opcode] = compute_create_address( address=create_contract, salt=0, nonce=opcode + 1, initcode=opcode_init, opcode=create_opcode, ) if not ef_exception: expect_post[opcode] = created_accounts[opcode] expect_post[256] = 1 tx = Transaction( gas_limit=14_000_000, to=code, data=b"", nonce=0, sender=sender, protected=fork >= Byzantium, ) post = { code: Account(storage=expect_post), } for opcode, _ in initcode.items(): ef_exception = opcode == 239 and fork >= London if not ef_exception: post[created_accounts[opcode]] = Account(code=bytes.fromhex(f"{opcode:02x}")) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/create/test_create_suicide_during_init.py ================================================ """Deploy contract that calls selfdestruct in it's initcode.""" from enum import Enum import pytest from ethereum_test_forks import Byzantium, Fork from ethereum_test_tools import ( Account, Alloc, Environment, Initcode, StateTestFiller, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op class Operation(Enum): """Enum for created contract actions.""" SUICIDE = 1 SUICIDE_TO_ITSELF = 2 def __int__(self) -> int: """Convert to int.""" return int(self.value) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueToItselfFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_ContractSuicideDuringInitFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1871"], coverage_missed_reason="Tip to coinbase, original test contains empty account.", ) @pytest.mark.valid_from("Frontier") @pytest.mark.with_all_create_opcodes @pytest.mark.parametrize("transaction_create", [False, True]) @pytest.mark.parametrize( "operation", [Operation.SUICIDE, Operation.SUICIDE_TO_ITSELF], ) def test_create_suicide_during_transaction_create( state_test: StateTestFiller, fork: Fork, pre: Alloc, create_opcode: Op, operation: Operation, transaction_create: bool, ) -> None: """Contract init code calls suicide then measures different metrics.""" if create_opcode != Op.CREATE and transaction_create: pytest.skip(f"Excluded: {create_opcode} with transaction_create=True") sender = pre.fund_eoa() contract_deploy = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + create_opcode(size=Op.CALLDATASIZE(), value=Op.CALLVALUE()) ) contract_success = pre.deploy_contract(code=Op.SSTORE(1, 1)) self_destruct_destination = pre.deploy_contract(code=Op.STOP) contract_after_suicide = pre.deploy_contract(code=Op.SSTORE(1, 1)) contract_initcode = Initcode( initcode_prefix=Op.CALL(address=contract_success, gas=Op.SUB(Op.GAS, 100_000)) + Op.SELFDESTRUCT( Op.ADDRESS if operation == Operation.SUICIDE_TO_ITSELF else self_destruct_destination ) + Op.CALL(address=contract_after_suicide, gas=Op.SUB(Op.GAS, 100_000)), deploy_code=Op.SSTORE(0, 1), ) expected_create_address = compute_create_address( address=sender if transaction_create else contract_deploy, nonce=1 if transaction_create else 0, initcode=contract_initcode, opcode=create_opcode, ) tx_value = 100 tx = Transaction( gas_limit=1_000_000, to=None if transaction_create else contract_deploy, data=contract_initcode, value=tx_value, sender=sender, protected=fork >= Byzantium, ) post = { contract_success: Account(storage={1: 1}), self_destruct_destination: Account( balance=0 if operation == Operation.SUICIDE_TO_ITSELF else tx_value ), contract_deploy: Account(storage={0: 0}), contract_after_suicide: Account(storage={1: 0}), # suicide eats all gas expected_create_address: Account.NONEXISTENT, } state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/create/test_create_suicide_store.py ================================================ """ Test dynamically created address is still callable and perform storage operations after being called for self destruct in a call. """ from enum import IntEnum import pytest from ethereum_test_forks import Byzantium, Fork from ethereum_test_tools import ( Account, Alloc, CalldataCase, Initcode, StateTestFiller, Storage, Switch, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op class Operation(IntEnum): """Enum for created contract actions.""" SUICIDE = 1 ADD_STORAGE = 2 GET_STORAGE = 3 @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stCreateTest/CREATE_AcreateB_BSuicide_BStoreFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1867"], coverage_missed_reason="Converting solidity code result in following opcode not being used:" "PUSH29, DUP4, DUP8, SWAP2, ISZERO, AND, MUL, DIV, CALLVALUE, EXTCODESIZE." "Changed 0x11 address to new address (no check for precompile).", ) @pytest.mark.valid_from("Frontier") @pytest.mark.with_all_create_opcodes def test_create_suicide_store( state_test: StateTestFiller, fork: Fork, pre: Alloc, create_opcode: Op, ) -> None: """ Create dynamic contract that suicides, then called to push some storage and then called to return that storage value. """ tload_support = fork.valid_opcodes().count(Op.TLOAD) subcall_storage = 0x12 suicide_initcode: Initcode = Initcode( deploy_code=Switch( cases=[ CalldataCase( value=Operation.SUICIDE, action=Op.SELFDESTRUCT(pre.empty_account()), ), CalldataCase( value=Operation.ADD_STORAGE, action=Op.SSTORE(1, Op.ADD(Op.SLOAD(1), subcall_storage)) + ( Op.TSTORE(1, Op.ADD(Op.TLOAD(1), subcall_storage)) if tload_support else Op.STOP ), ), CalldataCase( value=Operation.GET_STORAGE, action=( Op.MSTORE(0, Op.ADD(Op.SLOAD(1), Op.TLOAD(1))) if tload_support else Op.MSTORE(0, Op.SLOAD(1)) ) + Op.RETURN(0, 32), ), ], default_action=None, ) ) sender = pre.fund_eoa() expect_post = Storage() slot_create_result = 0 slot_after_suicide_sstore_return = 1 slot_program_success = 2 create_contract = pre.deploy_contract( code=Op.CALLDATACOPY(size=Op.CALLDATASIZE()) + Op.SSTORE(slot_create_result, create_opcode(size=Op.CALLDATASIZE())) # Put some storage before suicide + Op.MSTORE(64, Operation.ADD_STORAGE) + Op.CALL( gas=Op.SUB(Op.GAS, 300_000), address=Op.SLOAD(slot_create_result), args_offset=64, args_size=32, ) + Op.MSTORE(64, Operation.SUICIDE) + Op.CALL( gas=Op.SUB(Op.GAS, 300_000), address=Op.SLOAD(slot_create_result), args_offset=64, args_size=32, ) # Put some storage after suicide + Op.MSTORE(64, Operation.ADD_STORAGE) + Op.CALL( gas=Op.SUB(Op.GAS, 300_000), address=Op.SLOAD(slot_create_result), args_offset=64, args_size=32, ) + Op.MSTORE(64, Operation.GET_STORAGE) + Op.CALL( gas=Op.SUB(Op.GAS, 300_000), address=Op.SLOAD(0), args_offset=64, args_size=32, ret_offset=100, ret_size=32, ) + Op.SSTORE(slot_after_suicide_sstore_return, Op.MLOAD(100)) + Op.SSTORE(slot_program_success, 1) ) expected_create_address = compute_create_address( address=create_contract, nonce=1, initcode=suicide_initcode, opcode=create_opcode ) expect_post[slot_create_result] = expected_create_address expect_post[slot_after_suicide_sstore_return] = ( subcall_storage * 2 # added value before and after suicide + (subcall_storage * 2 if tload_support else 0) # tload value added ) expect_post[slot_program_success] = 1 tx = Transaction( gas_limit=1_000_000, to=create_contract, data=suicide_initcode, sender=sender, protected=fork >= Byzantium, ) post = { create_contract: Account(storage=expect_post), expected_create_address: Account.NONEXISTENT, } state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/examples/__init__.py ================================================ """Test examples, patterns, templates to use in .py tests.""" ================================================ FILE: tests/frontier/examples/test_block_intermediate_state.py ================================================ """Test the SELFDESTRUCT opcode.""" import pytest from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Environment, Transaction, ) @pytest.mark.valid_from("Frontier") @pytest.mark.valid_until("Homestead") def test_block_intermediate_state(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """Verify intermediate block states.""" env = Environment() sender = pre.fund_eoa() tx = Transaction(gas_limit=100_000, to=None, data=b"", sender=sender, protected=False) tx_2 = Transaction(gas_limit=100_000, to=None, data=b"", sender=sender, protected=False) block_1 = Block( txs=[tx], expected_post_state={ sender: Account( nonce=1, ), }, ) block_2 = Block(txs=[]) block_3 = Block( txs=[tx_2], expected_post_state={ sender: Account( nonce=2, ), }, ) blockchain_test( genesis_environment=env, pre=pre, post=block_3.expected_post_state, blocks=[block_1, block_2, block_3], ) ================================================ FILE: tests/frontier/identity_precompile/__init__.py ================================================ """Test for precompiles that apply for all forks starting from Frontier.""" ================================================ FILE: tests/frontier/identity_precompile/common.py ================================================ """Common utilities for the Identity Precompile tests.""" from dataclasses import dataclass from typing import Tuple from pydantic import BaseModel from ethereum_test_base_types.composite_types import Storage from ethereum_test_tools import ( Bytecode, ) from ethereum_test_tools import Opcodes as Op @dataclass(frozen=True) class Constants: """Constants for the Identity Precompile.""" IDENTITY_PRECOMPILE_ADDRESS = 0x04 class CallArgs(BaseModel): """Defines inputs to CALL for the Identity precompile.""" address: int = Constants.IDENTITY_PRECOMPILE_ADDRESS gas: int = 0x1F4 value: int = 0x0 args_offset: int = 0x0 args_size: int = 0x20 ret_offset: int = 0x0 ret_size: int = 0x20 def generate_identity_call_bytecode( storage: Storage, call_type: Op, memory_values: Tuple[int, ...], call_args: CallArgs, call_succeeds: bool, ) -> Bytecode: """ Generate bytecode for calling the identity precompile with given memory values. Args: storage (Storage): The storage object to use for storing values. call_type (Op): The type of call opcode (CALL or CALLCODE). memory_values(Tuple[int, ...]): Values to store in memory before the call. call_args(CallArgs): Arguments for the CALL opcode. call_succeeds (bool): Whether the call should succeed or not. Returns: Bytecode: The generated bytecode for the identity precompile call. """ code = Bytecode() # Store provided values in memory mstore_count = len(memory_values) if memory_values else 0 mstore_offset = 0 mstore_value = 0 if mstore_count: for i, value in enumerate(memory_values): mstore_value = value code += Op.MSTORE(mstore_offset, mstore_value) if mstore_count > i + 1: mstore_offset += 0x20 # Call the identity precompile, then check that the last value in memory # has not changed code += ( Op.SSTORE( storage.store_next(call_succeeds), call_type(**call_args.model_dump()), ) + Op.SSTORE(storage.store_next(mstore_value), Op.MLOAD(mstore_offset)) + Op.STOP ) return code ================================================ FILE: tests/frontier/identity_precompile/conftest.py ================================================ """Pytest (plugin) definitions local to Identity precompile tests.""" import pytest @pytest.fixture def tx_gas_limit() -> int: """Return the gas limit for transactions.""" return 365_224 ================================================ FILE: tests/frontier/identity_precompile/test_identity.py ================================================ """Test identity precompile output size.""" from typing import Tuple import pytest from ethereum_test_base_types.composite_types import Storage from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Opcodes as Op from .common import CallArgs, generate_identity_call_bytecode @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentitiy_0Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentitiy_1Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_1_nonzeroValueFiller.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_2Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_3Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_4Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_4_gas17Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_4_gas18Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentitiy_0Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentitiy_1Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_1_nonzeroValueFiller.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_2Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_3Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_4Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_4_gas17Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_4_gas18Filler.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1344"], coverage_missed_reason="MPT related coverage lost, not relevant to this test", ) @pytest.mark.valid_from("Byzantium") @pytest.mark.parametrize("call_type", [Op.CALL, Op.CALLCODE]) @pytest.mark.parametrize( [ "call_args", "memory_values", "contract_balance", "call_succeeds", ], [ pytest.param(CallArgs(gas=0xFF), (0x1,), 0x0, True, id="identity_0"), pytest.param( CallArgs(args_size=0x0), (0x0,), 0x0, True, id="identity_1", ), pytest.param( CallArgs(gas=0x30D40, value=0x1, args_size=0x0), (0x1,), 0x1, True, id="identity_1_nonzerovalue", ), pytest.param( CallArgs(gas=0x30D40, value=0x1, args_size=0x0), None, 0x0, False, id="identity_1_nonzerovalue_insufficient_balance", ), pytest.param( CallArgs(args_size=0x25), (0xF34578907F,), 0x0, True, id="identity_2", ), pytest.param( CallArgs(args_size=0x25), (0xF34578907F,), 0x0, True, id="identity_3", ), pytest.param( CallArgs(gas=0x64), (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,), 0x0, True, id="identity_4", ), pytest.param( CallArgs(gas=0x11), (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,), 0x0, False, id="identity_4_insufficient_gas", ), pytest.param( CallArgs(gas=0x12), (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,), 0x0, True, id="identity_4_exact_gas", ), ], ) def test_call_identity_precompile( state_test: StateTestFiller, pre: Alloc, call_type: Op, call_args: CallArgs, memory_values: Tuple[int, ...], call_succeeds: bool, tx_gas_limit: int, contract_balance: int, ) -> None: """ Test identity precompile RETURNDATA is sized correctly based on the input size. """ env = Environment() storage = Storage() contract_bytecode = generate_identity_call_bytecode( storage, call_type, memory_values, call_args, call_succeeds, ) account = pre.deploy_contract( contract_bytecode, storage=storage.canary(), balance=contract_balance, ) tx = Transaction( to=account, sender=pre.fund_eoa(), gas_limit=tx_gas_limit, ) post = {account: Account(storage=storage)} state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEIdentity_5Filler.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts2/CallIdentity_5Filler.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1344"], coverage_missed_reason="MPT related coverage lost, not relevant to this test", ) @pytest.mark.valid_from("Byzantium") @pytest.mark.parametrize("call_type", [Op.CALL, Op.CALLCODE]) @pytest.mark.parametrize( [ "call_args", "memory_values", "call_succeeds", ], [ pytest.param( CallArgs(gas=0x258, args_size=0xF4240), (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,), False, id="identity_5", ), pytest.param( CallArgs(gas=0x258, ret_size=0x40), ( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x1234, ), True, id="identity_6", ), ], ) @pytest.mark.parametrize("tx_gas_limit", [10_000_000]) def test_call_identity_precompile_large_params( state_test: StateTestFiller, pre: Alloc, call_type: Op, call_args: CallArgs, memory_values: Tuple[int, ...], call_succeeds: bool, tx_gas_limit: int, ) -> None: """Test identity precompile when out of gas occurs.""" env = Environment() storage = Storage() contract_bytecode = generate_identity_call_bytecode( storage, call_type, memory_values, call_args, call_succeeds, ) account = pre.deploy_contract( contract_bytecode, storage=storage.canary(), ) tx = Transaction( to=account, sender=pre.fund_eoa(), gas_limit=tx_gas_limit, ) post = {account: Account(storage=storage)} state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/identity_precompile/test_identity_returndatasize.py ================================================ """Test identity precompile output size.""" import pytest from ethereum_test_base_types.composite_types import Storage from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Opcodes as Op from .common import Constants @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts/identity_to_biggerFiller.json", "https://github.com/ethereum/tests/blob/v17.1/src/GeneralStateTestsFiller/stPreCompiledContracts/identity_to_smallerFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1344"], ) @pytest.mark.valid_from("Byzantium") @pytest.mark.parametrize( ["args_size", "output_size", "expected_returndatasize"], [ pytest.param(16, 32, 16, id="output_size_greater_than_input"), pytest.param(32, 16, 32, id="output_size_less_than_input"), ], ) def test_identity_precompile_returndata( state_test: StateTestFiller, pre: Alloc, args_size: int, output_size: int, expected_returndatasize: int, ) -> None: """ Test identity precompile RETURNDATA is sized correctly based on the input size. """ env = Environment() storage = Storage() account = pre.deploy_contract( Op.MSTORE(0, 0) + Op.GAS + Op.MSTORE(0, 0x112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00) + Op.POP( Op.CALL( address=Constants.IDENTITY_PRECOMPILE_ADDRESS, args_offset=0, args_size=args_size, ret_offset=0x10, ret_size=output_size, ) ) + Op.SSTORE(storage.store_next(expected_returndatasize), Op.RETURNDATASIZE) + Op.STOP, storage=storage.canary(), ) tx = Transaction( to=account, sender=pre.fund_eoa(), gas_limit=200_000, protected=True, ) post = {account: Account(storage=storage)} state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/opcodes/__init__.py ================================================ """Test for opcodes introduced in Frontier.""" ================================================ FILE: tests/frontier/opcodes/test_all_opcodes.py ================================================ """ Call every possible opcode and test that the subcall is successful if the opcode is supported by the fork supports and fails otherwise. """ from typing import Dict import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcode, UndefinedOpcodes from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "N/A" REFERENCE_SPEC_VERSION = "N/A" def prepare_stack(opcode: Opcode) -> Bytecode: """Prepare valid stack for opcode.""" if opcode == Op.CREATE: return Op.MSTORE(0, 0x6001600155) + Op.PUSH1(5) + Op.PUSH1(27) + Op.PUSH1(5) if opcode == Op.CREATE2: return Op.MSTORE(0, 0x6001600155) + Op.PUSH1(1) + Op.PUSH1(5) + Op.PUSH1(27) + Op.PUSH1(5) if opcode == Op.JUMPI: return Op.PUSH1(1) + Op.PUSH1(5) if opcode == Op.JUMP: return Op.PUSH1(3) if opcode == Op.RETURNDATACOPY: return Op.PUSH1(0) * 3 return Op.PUSH1(0x01) * 32 def prepare_suffix(opcode: Opcode) -> Bytecode: """Prepare after opcode instructions.""" if opcode == Op.JUMPI or opcode == Op.JUMP: return Op.JUMPDEST return Op.STOP @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stBadOpcode/badOpcodesFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stBugs/evmBytecodeFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/748"], ) @pytest.mark.valid_from("Frontier") def test_all_opcodes(state_test: StateTestFiller, pre: Alloc, fork: Fork) -> None: """ Test each possible opcode on the fork with a single contract that calls each opcode in succession. Check that each subcall passes if the opcode is supported and fails otherwise. """ code_worked = 1000 code_contract: Dict[Opcode, Address] = {} for opcode in sorted(set(Op) | set(UndefinedOpcodes)): code_contract[opcode] = pre.deploy_contract( balance=10, code=prepare_stack(opcode) + opcode + prepare_suffix(opcode), storage={}, ) # EVM code to make the call and store the result contract_address = pre.deploy_contract( code=sum( Op.SSTORE( Op.PUSH1(opcode.int()), # Limit gas to limit the gas consumed by the exceptional aborts # in each subcall that uses an undefined opcode. Op.CALL(35_000, opcode_address, 0, 0, 0, 0, 0), ) for opcode, opcode_address in code_contract.items() ) + Op.SSTORE(code_worked, 1) + Op.STOP, ) post = { contract_address: Account( storage={ **{ opcode.int(): 1 if opcode != Op.REVERT else 0 for opcode in fork.valid_opcodes() }, code_worked: 1, } ), } tx = Transaction( sender=pre.fund_eoa(), gas_limit=9_000_000, to=contract_address, data=b"", value=0, protected=False, ) state_test(pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Cancun") def test_cover_revert(state_test: StateTestFiller, pre: Alloc) -> None: """Cover state revert from original tests for the coverage script.""" tx = Transaction( sender=pre.fund_eoa(), gas_limit=1_000_000, data=Op.SSTORE(1, 1) + Op.REVERT(0, 0), to=None, value=0, protected=False, ) state_test(env=Environment(), pre=pre, post={}, tx=tx) ================================================ FILE: tests/frontier/opcodes/test_blockhash.py ================================================ """Tests for BLOCKHASH opcode.""" import pytest from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op @pytest.mark.valid_from("Frontier") def test_genesis_hash_available(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """ Verify BLOCKHASH returns genesis and block 1 hashes. Regression test: Blockchain test infrastructure must populate block hashes before execution. Without this, BLOCKHASH returns 0, breaking dynamic address computations like BLOCKHASH(0) | TIMESTAMP. Tests both genesis (block 0) and first executed block (block 1) hash insertion by calling the contract in block 2. Bug context: revm blockchaintest runner wasn't inserting block_hashes, causing failures in tests with BLOCKHASH-derived addresses. """ storage = Storage() # Store ISZERO(BLOCKHASH(0)) and ISZERO(BLOCKHASH(1)) # Both should be 0 (false) if hashes exist code = Op.SSTORE(storage.store_next(0), Op.ISZERO(Op.BLOCKHASH(0))) + Op.SSTORE( storage.store_next(0), Op.ISZERO(Op.BLOCKHASH(1)) ) contract = pre.deploy_contract(code=code) sender = pre.fund_eoa() blocks = [ Block( txs=[ Transaction( sender=sender, to=contract, gas_limit=100_000, protected=False, ) ] ), Block( txs=[ Transaction( sender=sender, to=contract, gas_limit=100_000, protected=False, ) ] ), ] post = { contract: Account( storage={ 0: 0, # ISZERO(BLOCKHASH(0)) = 0 (genesis hash exists) 1: 0, # ISZERO(BLOCKHASH(1)) = 0 (block 1 hash exists) } ) } blockchain_test(pre=pre, post=post, blocks=blocks) ================================================ FILE: tests/frontier/opcodes/test_call.py ================================================ """test `CALL` opcode.""" import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, CodeGasMeasure, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op # TODO: There's an issue with gas definitions on forks previous to Berlin, # remove this when fixed. https://github.com/ethereum/execution-spec- # tests/pull/1952#discussion_r2237634275 @pytest.mark.valid_from("Berlin") def test_call_large_offset_mstore( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ CALL with ret_offset larger than memory size and ret_size zero Then do an MSTORE in that offset to see if memory was expanded in CALL. This is for bug in a faulty EVM implementation where memory is expanded when it shouldn't. """ sender = pre.fund_eoa() gsc = fork.gas_costs() mem_offset = 128 # arbitrary number call_measure = CodeGasMeasure( code=Op.CALL(gas=0, ret_offset=mem_offset, ret_size=0), # Cost of pushing CALL args overhead_cost=gsc.G_VERY_LOW * len(Op.CALL.kwargs), extra_stack_items=1, # Because CALL pushes 1 item to the stack sstore_key=0, stop=False, # Because it's the first CodeGasMeasure ) mstore_measure = CodeGasMeasure( code=Op.MSTORE(offset=mem_offset, value=1), # Cost of pushing MSTORE args overhead_cost=gsc.G_VERY_LOW * len(Op.MSTORE.kwargs), extra_stack_items=0, sstore_key=1, ) contract = pre.deploy_contract(call_measure + mstore_measure) tx = Transaction( gas_limit=500_000, to=contract, value=0, sender=sender, ) # this call cost is just the address_access_cost call_cost = gsc.G_COLD_ACCOUNT_ACCESS memory_expansion_gas_calc = fork.memory_expansion_gas_calculator() # mstore cost: base cost + expansion cost mstore_cost = gsc.G_MEMORY + memory_expansion_gas_calc(new_bytes=mem_offset + 1) state_test( env=Environment(), pre=pre, tx=tx, post={ contract: Account( storage={ 0: call_cost, 1: mstore_cost, }, ) }, ) # TODO: There's an issue with gas definitions on forks previous to Berlin, # remove this when fixed. https://github.com/ethereum/execution-spec- # tests/pull/1952#discussion_r2237634275 @pytest.mark.valid_from("Berlin") def test_call_memory_expands_on_early_revert( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ When CALL reverts early (e.g. because of not enough balance by the sender), memory should be expanded anyway. We check this with an MSTORE. This is for a bug in an EVM implementation where memory is expanded after executing a CALL, but not when an early revert happens. """ sender = pre.fund_eoa() gsc = fork.gas_costs() # arbitrary number, greater than memory size to trigger an expansion ret_size = 128 call_measure = CodeGasMeasure( # CALL with value code=Op.CALL(gas=0, value=100, ret_size=ret_size), # Cost of pushing CALL args overhead_cost=gsc.G_VERY_LOW * len(Op.CALL.kwargs), # Because CALL pushes 1 item to the stack extra_stack_items=1, sstore_key=0, # Because it's the first CodeGasMeasure stop=False, ) mstore_measure = CodeGasMeasure( # Low offset for not expanding memory code=Op.MSTORE(offset=ret_size // 2, value=1), # Cost of pushing MSTORE args overhead_cost=gsc.G_VERY_LOW * len(Op.MSTORE.kwargs), extra_stack_items=0, sstore_key=1, ) # Contract without enough balance to send value transfer contract = pre.deploy_contract(code=call_measure + mstore_measure, balance=0) tx = Transaction( gas_limit=500_000, to=contract, value=0, sender=sender, ) memory_expansion_gas_calc = fork.memory_expansion_gas_calculator() # call cost: # address_access_cost+new_acc_cost+memory_expansion_cost+value-stipend call_cost = ( gsc.G_COLD_ACCOUNT_ACCESS + gsc.G_NEW_ACCOUNT + memory_expansion_gas_calc(new_bytes=ret_size) + gsc.G_CALL_VALUE - gsc.G_CALL_STIPEND ) # mstore cost: base cost. No memory expansion cost needed, it was expanded # on CALL. mstore_cost = gsc.G_MEMORY state_test( env=Environment(), pre=pre, tx=tx, post={ contract: Account( storage={ 0: call_cost, 1: mstore_cost, }, ) }, ) # TODO: There's an issue with gas definitions on forks previous to Berlin, # remove this when fixed. https://github.com/ethereum/execution-spec- # tests/pull/1952#discussion_r2237634275 @pytest.mark.with_all_call_opcodes @pytest.mark.valid_from("Berlin") def test_call_large_args_offset_size_zero( state_test: StateTestFiller, pre: Alloc, fork: Fork, call_opcode: Op, ) -> None: """ Test xCALL with an extremely large args_offset and args_size set to zero. Since the size is zero, the large offset should not cause a revert. """ sender = pre.fund_eoa() gsc = fork.gas_costs() very_large_offset = 2**100 call_measure = CodeGasMeasure( code=call_opcode(gas=0, args_offset=very_large_offset, args_size=0), # Cost of pushing xCALL args overhead_cost=gsc.G_VERY_LOW * len(call_opcode.kwargs), extra_stack_items=1, # Because xCALL pushes 1 item to the stack sstore_key=0, ) contract = pre.deploy_contract(call_measure) tx = Transaction( gas_limit=500_000, to=contract, value=0, sender=sender, ) # this call cost is just the address_access_cost call_cost = gsc.G_COLD_ACCOUNT_ACCESS state_test( env=Environment(), pre=pre, tx=tx, post={ contract: Account( storage={ 0: call_cost, }, ) }, ) ================================================ FILE: tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py ================================================ """ Tests nested CALL/CALLCODE gas usage with positive value transfer. This test investigates an issue identified in EthereumJS, as reported in: https://github.com/ethereumjs/ethereumjs-monorepo/issues/3194. The issue pertains to the incorrect gas calculation for CALL/CALLCODE operations with a positive value transfer, due to the pre-addition of the gas stipend (2300) to the currently available gas instead of adding it to the new call frame. This bug was specific to the case where insufficient gas was provided for the CALL/CALLCODE operation. Due to the pre-addition of the stipend to the currently available gas, the case for insufficient gas was not properly failing with an out-of-gas error. Test setup: Given two smart contract accounts, 0x0A (caller) and 0x0B (callee): 1. An arbitrary transaction calls into the contract 0x0A. 2. Contract 0x0A executes a CALL to contract 0x0B with a specific gas limit (X). 3. Contract 0x0B then attempts a CALL/CALLCODE to a non-existent contract 0x0C, with a positive value transfer (activating the gas stipend). 4. If the gas X provided by contract 0x0A to 0x0B is sufficient, contract 0x0B will push 0x01 onto the stack after returning to the call frame in 0x0A. Otherwise, it should push 0x00, indicating the insufficiency of gas X (for the bug in EthereumJS, the CALL/CALLCODE operation would return 0x01 due to the pre-addition of the gas stipend). 5. The resulting stack value is saved into contract 0x0A's storage, allowing us to verify whether the provided gas was sufficient or insufficient. """ from typing import Dict import pytest from ethereum_test_tools import ( EOA, Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op """ PUSH opcode cost is 3, GAS opcode cost is 2. We need 6 PUSH's and one GAS to fill the stack for both CALL & CALLCODE, in the callee contract. """ CALLEE_INIT_STACK_GAS = 6 * 3 + 2 """ CALL gas breakdowns: (https://www.evm.codes/#f1) memory_exp_cost + code_exec_cost + address_access_cost + positive_value_cost + empty_account_cost = 0 + 0 + 2600 + 9000 + 25000 = 36600 """ CALL_GAS = 36600 CALL_SUFFICIENT_GAS = CALL_GAS + CALLEE_INIT_STACK_GAS """ CALLCODE gas breakdowns: (https://www.evm.codes/#f2) memory_exp_cost + code_exec_cost + address_access_cost + positive_value_cost = 0 + 0 + 2600 + 9000 = 11600 """ CALLCODE_GAS = 11600 CALLCODE_SUFFICIENT_GAS = CALLCODE_GAS + CALLEE_INIT_STACK_GAS @pytest.fixture def callee_code(pre: Alloc, callee_opcode: Op) -> Bytecode: """ Code called by the caller contract: PUSH1 0x00 * 4 PUSH1 0x01 <- for positive value transfer PUSH2 Contract.nonexistent GAS <- value doesn't matter CALL/CALLCODE. """ # The address needs to be empty and different for each execution of the # fixture, otherwise the calculations (empty_account_cost) are incorrect. return callee_opcode(Op.GAS(), pre.empty_account(), 1, 0, 0, 0, 0) @pytest.fixture def sender(pre: Alloc) -> EOA: """Sender for all transactions.""" return pre.fund_eoa() @pytest.fixture def callee_address(pre: Alloc, callee_code: Bytecode) -> Address: """Address of the callee.""" return pre.deploy_contract(callee_code, balance=0x03) @pytest.fixture def caller_code(caller_gas_limit: int, callee_address: Address) -> Bytecode: """ Code to CALL the callee contract: PUSH1 0x00 * 5 PUSH2 Contract.callee PUSH2 caller_gas <- gas limit set for CALL to callee contract CALL PUSH1 0x00 SSTORE. """ return Op.SSTORE(0, Op.CALL(caller_gas_limit, callee_address, 0, 0, 0, 0, 0)) @pytest.fixture def caller_address(pre: Alloc, caller_code: Bytecode) -> Address: """ Code to CALL the callee contract: PUSH1 0x00 * 5 PUSH2 Contract.callee PUSH2 caller_gas <- gas limit set for CALL to callee contract CALL PUSH1 0x00 SSTORE. """ return pre.deploy_contract(caller_code, balance=0x03) @pytest.fixture def caller_tx(sender: EOA, caller_address: Address) -> Transaction: """Transaction that performs the call to the caller contract.""" return Transaction( to=caller_address, value=1, gas_limit=500_000, sender=sender, ) @pytest.fixture def post(caller_address: Address, is_sufficient_gas: bool) -> Dict[Address, Account]: # noqa: D103 return { caller_address: Account(storage={0x00: 0x01 if is_sufficient_gas else 0x00}), } @pytest.mark.parametrize( "callee_opcode, caller_gas_limit, is_sufficient_gas", [ (Op.CALL, CALL_SUFFICIENT_GAS, True), (Op.CALL, CALL_SUFFICIENT_GAS - 1, False), (Op.CALLCODE, CALLCODE_SUFFICIENT_GAS, True), (Op.CALLCODE, CALLCODE_SUFFICIENT_GAS - 1, False), ], ) @pytest.mark.valid_from("London") def test_value_transfer_gas_calculation( state_test: StateTestFiller, pre: Alloc, caller_tx: Transaction, post: Dict[str, Account], ) -> None: """ Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer. """ state_test(env=Environment(), pre=pre, post=post, tx=caller_tx) ================================================ FILE: tests/frontier/opcodes/test_calldatacopy.py ================================================ """test `CALLDATACOPY` opcode.""" import pytest from ethereum_test_forks import Byzantium, Fork from ethereum_test_tools import Account, Alloc, Bytecode, StateTestFiller, Transaction from ethereum_test_vm import Opcodes as Op @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/VMTests/vmTests/calldatacopyFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1056"], ) @pytest.mark.parametrize( "code,tx_data,code_address_storage,to_address_storage", [ ( ( Op.CALLDATACOPY(dest_offset=0, offset=1, size=2) + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0)) + Op.RETURN(offset=0, size=Op.MSIZE) ), b"\x00", Account( storage={0x00: 0x3456000000000000000000000000000000000000000000000000000000000000} ), Account( storage={0x00: 0x3456000000000000000000000000000000000000000000000000000000000000} ), ), ( ( Op.CALLDATACOPY(dest_offset=0, offset=1, size=1) + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0)) + Op.RETURN(offset=0, size=Op.MSIZE) ), b"\x01", Account( storage={0x00: 0x3400000000000000000000000000000000000000000000000000000000000000}, ), Account( storage={0x00: 0x3400000000000000000000000000000000000000000000000000000000000000}, ), ), ( ( Op.CALLDATACOPY(dest_offset=0, offset=1, size=0) + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0)) + Op.RETURN(offset=0, size=Op.MSIZE) ), b"\x02", Account( storage={0x00: 0x00}, ), Account( storage={0x00: 0x00}, ), ), ( ( Op.CALLDATACOPY(dest_offset=0, offset=0, size=0) + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0)) + Op.RETURN(offset=0, size=Op.MSIZE) ), b"\x03", Account( storage={0x00: 0x00}, ), Account( storage={0x00: 0x00}, ), ), ( ( Op.CALLDATACOPY( dest_offset=0, offset=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA, size=0xFF, ) + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0)) + Op.RETURN(offset=0, size=Op.MSIZE) ), b"\x04", Account(storage={0x00: 0x00}), Account(storage={0x00: 0x00}), ), ( ( Op.CALLDATACOPY( dest_offset=0, offset=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA, size=0x9, ) + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0)) + Op.RETURN(offset=0, size=Op.MSIZE) ), b"\x05", Account(storage={0x00: 0x00}), Account(storage={0x00: 0x00}), ), ( (Op.SSTORE(key=0x1, value=0x1) + Op.PUSH1[0x1] + Op.PUSH1[0x2] + Op.CALLDATACOPY), b"\x10", Account(storage={0x01: 0x00}), None, ), ( ( Op.JUMP(pc=0x5) + Op.JUMPDEST + Op.STOP + Op.JUMPDEST + Op.MSTORE8(offset=0x1F, value=0x42) + Op.CALLDATACOPY(dest_offset=0x1F, offset=0x0, size=0x103) + Op.MLOAD(offset=0x0) + Op.DUP1 + Op.PUSH1[0x60] + Op.JUMPI(pc=0x3, condition=Op.EQ) + Op.SSTORE(key=0xFF, value=0xBADC0FFEE) ), b"\x11", Account(storage={0xFF: 0xBADC0FFEE}), None, ), ], ids=[ "cdc 0 1 2", "cdc 0 1 1", "cdc 0 1 0", "cdc 0 0 0", "cdc 0 neg6 ff", "cdc 0 neg6 9", "underflow", "sec", ], ) def test_calldatacopy( state_test: StateTestFiller, code: Bytecode, fork: Fork, tx_data: bytes, pre: Alloc, code_address_storage: Account, to_address_storage: Account | None, ) -> None: """ Test `CALLDATACOPY` opcode. Based on https://github.com/ethereum/tests/blob/ae4791077e8fcf716136e70fe8392f1a1f1495fb/src/GeneralStateTestsFiller/VMTests/vmTests/calldatacopyFiller.yml """ code_address = pre.deploy_contract(code) to = pre.deploy_contract( code=( Op.MSTORE(offset=0x0, value=0x1234567890ABCDEF01234567890ABCDEF0) + Op.CALL( gas=Op.SUB(Op.GAS(), 0x100), address=code_address, value=0x0, args_offset=0xF, args_size=0x10, ret_offset=0x20, ret_size=0x40, ) + Op.POP + Op.SSTORE(key=0x0, value=Op.MLOAD(offset=0x20)) + Op.SSTORE(key=0x1, value=Op.MLOAD(offset=0x40)) + Op.STOP ), ) tx = Transaction( data=tx_data, gas_limit=100_000, gas_price=0x0A, protected=fork >= Byzantium, sender=pre.fund_eoa(), to=to, value=0x01, ) if to_address_storage: post = {code_address: code_address_storage, to: to_address_storage} else: post = {code_address: code_address_storage} state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/opcodes/test_calldataload.py ================================================ """test `CALLDATALOAD` opcode.""" import pytest from ethereum_test_forks import Byzantium, Fork from ethereum_test_tools import Account, Alloc, StateTestFiller, Transaction from ethereum_test_tools import Macros as Om from ethereum_test_vm import Opcodes as Op @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/VMTests/vmTests/calldataloadFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1236"], ) @pytest.mark.parametrize( "calldata,calldata_offset,expected_storage", [ ( b"\x25\x60", 0x0, 0x2560000000000000000000000000000000000000000000000000000000000000, ), ( b"\xff" * 32 + b"\x23", 0x1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23, ), ( bytes.fromhex("123456789ABCDEF00000000000000000000000000000000000000000000000000024"), 0x5, 0xBCDEF00000000000000000000000000000000000000000000000000024000000, ), ], ids=[ "two_bytes", "word_n_byte", "34_bytes", ], ) @pytest.mark.parametrize("calldata_source", ["contract", "tx"]) def test_calldataload( state_test: StateTestFiller, calldata: bytes, calldata_offset: int, fork: Fork, pre: Alloc, expected_storage: Account, calldata_source: str, ) -> None: """ Test `CALLDATALOAD` opcode. Tests two scenarios: - calldata_source is "contract": CALLDATALOAD reads from calldata passed by another contract - calldata_source is "tx": CALLDATALOAD reads directly from transaction calldata Based on https://github.com/ethereum/tests/blob/ ae4791077e8fcf716136e70fe8392f1a1f1495fb/src/ GeneralStateTestsFiller/VMTests/vmTests/calldatacopyFiller.yml """ contract_address = pre.deploy_contract( Op.SSTORE(0, Op.CALLDATALOAD(offset=calldata_offset)) + Op.STOP, ) if calldata_source == "contract": to = pre.deploy_contract( Om.MSTORE(calldata, 0x0) + Op.CALL( gas=Op.SUB(Op.GAS(), 0x100), address=contract_address, value=0x0, args_offset=0x0, args_size=len(calldata), ret_offset=0x0, ret_size=0x0, ) + Op.STOP ) tx = Transaction( data=calldata, gas_limit=100_000, protected=fork >= Byzantium, sender=pre.fund_eoa(), to=to, ) else: tx = Transaction( data=calldata, gas_limit=100_000, protected=fork >= Byzantium, sender=pre.fund_eoa(), to=contract_address, ) post = {contract_address: Account(storage={0x00: expected_storage})} state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/opcodes/test_calldatasize.py ================================================ """test `CALLDATASIZE` opcode.""" import pytest from ethereum_test_forks import Byzantium, Fork from ethereum_test_tools import Account, Alloc, StateTestFiller, Transaction from ethereum_test_tools import Macros as Om from ethereum_test_vm import Opcodes as Op @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/VMTests/vmTests/calldatasizeFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1236"], ) @pytest.mark.parametrize( "args_size", [0, 2, 16, 33, 257], ) @pytest.mark.parametrize("calldata_source", ["contract", "tx"]) @pytest.mark.slow() def test_calldatasize( state_test: StateTestFiller, fork: Fork, args_size: int, pre: Alloc, calldata_source: str, ) -> None: """ Test `CALLDATASIZE` opcode. Tests two scenarios: - calldata_source is "contract": CALLDATASIZE reads from calldata passed by another contract - calldata_source is "tx": CALLDATASIZE reads directly from transaction calldata Based on https://github.com/ethereum/tests/blob/ 81862e4848585a438d64f911a19b3825f0f4cd95/src/ GeneralStateTestsFiller/VMTests/vmTests/calldatasizeFiller.yml """ contract_address = pre.deploy_contract(Op.SSTORE(key=0x0, value=Op.CALLDATASIZE)) calldata = b"\x01" * args_size if calldata_source == "contract": to = pre.deploy_contract( code=( Om.MSTORE(calldata, 0x0) + Op.CALL( gas=Op.SUB(Op.GAS(), 0x100), address=contract_address, value=0x0, args_offset=0x0, args_size=args_size, ret_offset=0x0, ret_size=0x0, ) ) ) tx = Transaction( gas_limit=100_000, protected=fork >= Byzantium, sender=pre.fund_eoa(), to=to, ) else: tx = Transaction( data=calldata, gas_limit=100_000, protected=fork >= Byzantium, sender=pre.fund_eoa(), to=contract_address, ) post = {contract_address: Account(storage={0x00: args_size})} state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/opcodes/test_dup.py ================================================ """Test DUP Test the DUP opcodes.""" import pytest from ethereum_test_forks import Frontier, Homestead from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Storage, Transaction from ethereum_test_tools import Opcodes as Op @pytest.mark.parametrize( "dup_opcode", [ Op.DUP1, Op.DUP2, Op.DUP3, Op.DUP4, Op.DUP5, Op.DUP6, Op.DUP7, Op.DUP8, Op.DUP9, Op.DUP10, Op.DUP11, Op.DUP12, Op.DUP13, Op.DUP14, Op.DUP15, Op.DUP16, ], ids=lambda op: str(op), ) @pytest.mark.with_all_evm_code_types def test_dup( state_test: StateTestFiller, fork: str, dup_opcode: Op, pre: Alloc, ) -> None: """ Test the DUP1-DUP16 opcodes. Note: Test case ported from [ethereum/tests](https://github.com/ethereum/tests). Test ported from [ethereum/tests/GeneralStateTests/VMTests/ vmTests/dup.json](https://github.com/ethereum/tests/blob/ v14.0/GeneralStateTests/VMTests/vmTests/dup.json) by Ori Pomerantz. """ env = Environment() sender = pre.fund_eoa() post = {} # Push 0x00 - 0x10 onto the stack account_code = sum(Op.PUSH1(i) for i in range(0x11)) # Use the DUP opcode account_code += dup_opcode # Save each stack value into different keys in storage account_code += sum(Op.PUSH1(i) + Op.SSTORE for i in range(0x11)) account = pre.deploy_contract(account_code) tx = Transaction( ty=0x0, nonce=0, to=account, gas_limit=500000, gas_price=10, protected=False if fork in [Frontier, Homestead] else True, data="", sender=sender, ) """ Storage will be structured as follows: 0x00: 0x10-0x01 (Depending on DUP opcode) 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 DUP1 copies the first element of the stack (0x10). DUP16 copies the 16th element of the stack (0x01). """ s: Storage.StorageDictType = dict(zip(range(1, 17), range(16, 0, -1), strict=False)) s[0] = 16 - (dup_opcode.int() - 0x80) post[account] = Account(storage=s) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/opcodes/test_push.py ================================================ """ A State test for the set of `PUSH*` opcodes. Ported from: https://github.com/ethereum/tests/blob/ 4f65a0a7cbecf4442415c226c65e089acaaf6a8b/src/ GeneralStateTestsFiller/VMTests/vmTests/pushFiller.yml. """ import pytest from ethereum_test_forks import Fork, Frontier, Homestead from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from ethereum_test_vm import Bytecode def get_input_for_push_opcode(opcode: Op) -> bytes: """ Get a sample input for the `PUSH*` opcode. The input is a portion of an excerpt from the Ethereum yellow paper. """ ethereum_state_machine = b"Ethereum is a transaction-based state machine." input_size = opcode.data_portion_length return ethereum_state_machine[0:input_size] @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/VMTests/vmTests/pushFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/975"], ) @pytest.mark.parametrize( "push_opcode", # Dynamically parametrize PUSH opcodes [getattr(Op, f"PUSH{i}") for i in range(1, 33)], ids=lambda op: str(op), ) @pytest.mark.valid_from("Frontier") def test_push(state_test: StateTestFiller, fork: Fork, pre: Alloc, push_opcode: Op) -> None: """ The set of `PUSH*` opcodes pushes data onto the stack. In this test, we ensure that the set of `PUSH*` opcodes writes a portion of an excerpt from the Ethereum yellow paper to storage. """ # Input used to test the `PUSH*` opcode. excerpt = get_input_for_push_opcode(push_opcode) env = Environment() """ ** Bytecode explanation ** +---------------------------------------------------+ | Bytecode | Stack | Storage | |---------------------------------------------------| | PUSH* excerpt | excerpt | | | PUSH1 0 | 0 excerpt | | | SSTORE | | [0]: excerpt | +---------------------------------------------------+ """ contract_code = push_opcode(excerpt) + Op.PUSH1(0) + Op.SSTORE contract = pre.deploy_contract(contract_code) tx = Transaction( sender=pre.fund_eoa(), to=contract, gas_limit=500_000, protected=False if fork in [Frontier, Homestead] else True, ) post = {} post[contract] = Account(storage={0: int.from_bytes(excerpt, byteorder="big")}) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/VMTests/vmTests/pushFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/975"], ) @pytest.mark.parametrize( "push_opcode", [getattr(Op, f"PUSH{i}") for i in range(1, 33)], ids=lambda op: str(op), ) @pytest.mark.parametrize("stack_height", range(1024, 1026)) @pytest.mark.valid_from("Frontier") @pytest.mark.slow() def test_stack_overflow( state_test: StateTestFiller, fork: Fork, pre: Alloc, push_opcode: Op, stack_height: int ) -> None: """ A test the stack overflows when the stack limit of 1024 is exceeded. """ env = Environment() # Input used to test the `PUSH*` opcode. excerpt = get_input_for_push_opcode(push_opcode) """ Essentially write a n-byte message to storage by pushing [1024,1025] times to stack. This simulates a "jump" over the stack limit of 1024. The message is UTF-8 encoding of excerpt (say 0x45 for PUSH1). Within the stack limit, the message is written to the to the storage at the same offset (0x45 for PUSH1). The last iteration will overflow the stack and the storage slot will be empty. ** Bytecode explanation ** +---------------------------------------------------+ | Bytecode | Stack | Storage | |---------------------------------------------------| | PUSH* excerpt | excerpt | | | PUSH1 0 | 0 excerpt | | | SSTORE | | [0]: excerpt | +---------------------------------------------------+ """ contract_code: Bytecode = Bytecode() for _ in range(stack_height - 2): # mostly push 0 to avoid contract size limit exceeded contract_code += Op.PUSH1(0) contract_code += push_opcode(excerpt) * 2 + Op.SSTORE contract = pre.deploy_contract(contract_code) tx = Transaction( sender=pre.fund_eoa(), to=contract, gas_limit=500_000, protected=False if fork in [Frontier, Homestead] else True, ) post = {} key = int.from_bytes(excerpt, "big") # Storage should ONLY have the message if stack does not overflow. value = key if stack_height <= 1024 else 0 post[contract] = Account(storage={key: value}) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/opcodes/test_selfdestruct.py ================================================ """Test the SELFDESTRUCT opcode.""" import pytest from ethereum_test_tools import Account, Alloc, Block, BlockchainTestFiller, Initcode, Transaction from ethereum_test_tools import Opcodes as Op @pytest.mark.valid_from("Frontier") @pytest.mark.valid_until("Homestead") def test_double_kill(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """ Test that when two transactions attempt to destruct a contract, the second transaction actually resurrects the contract as an empty account (prior to Spurious Dragon). """ sender = pre.fund_eoa() deploy_code = Op.SELFDESTRUCT(Op.ADDRESS) initcode = Initcode(deploy_code=deploy_code) create_tx = Transaction( gas_limit=100_000, protected=False, to=None, data=initcode, sender=sender, ) block_1 = Block(txs=[create_tx]) first_kill = Transaction( gas_limit=100_000, protected=False, to=create_tx.created_contract, sender=sender, ) second_kill = Transaction( gas_limit=100_000, protected=False, to=create_tx.created_contract, sender=sender, ) block_2 = Block(txs=[first_kill, second_kill]) post = { create_tx.created_contract: Account( nonce=0, balance=0, code=b"", storage={}, ), } blockchain_test(pre=pre, post=post, blocks=[block_1, block_2]) ================================================ FILE: tests/frontier/opcodes/test_swap.py ================================================ """ A State test for the set of `SWAP*` opcodes. Ported from: https://github.com/ethereum/tests/ blob/develop/src/GeneralStateTestsFiller/VMTests/vmTests/swapFiller.yml. """ import pytest # noqa: I001 from ethereum_test_forks import Fork, Frontier, Homestead from ethereum_test_tools import Account, Alloc, Bytecode, Environment from ethereum_test_tools import Opcodes as Op from ethereum_test_tools import StateTestFiller, Storage, Transaction @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/VMTests/vmTests/swapFiller.yml" ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1163"], coverage_missed_reason=( "Test isolation (1 contract per execution) reduces evmone state " "comparisons vs old dispatcher pattern (16 contracts per execution)" ), ) @pytest.mark.parametrize( "swap_opcode", [getattr(Op, f"SWAP{i}") for i in range(1, 17)], ids=lambda op: str(op), ) @pytest.mark.valid_from("Frontier") def test_swap(state_test: StateTestFiller, fork: Fork, pre: Alloc, swap_opcode: Op) -> None: """ The set of `SWAP*` opcodes swaps the top of the stack with a specific element. In this test, we ensure that the set of `SWAP*` opcodes correctly swaps the top element with the nth element and stores the result in storage. """ env = Environment() # Calculate which position we're swapping with (1-based index) swap_pos = swap_opcode.int() - 0x90 + 1 # Generate stack values stack_values = list(range(swap_pos + 16)) # Push the stack values onto the stack (in reverse order). contract_code = Bytecode() for value in reversed(stack_values): contract_code += Op.PUSH1(value) # Perform the SWAP operation. contract_code += swap_opcode # Store multiple values to storage. for slot in range(16): contract_code += Op.PUSH1(slot) + Op.SSTORE # Deploy the contract with the generated bytecode. contract_address = pre.deploy_contract(contract_code) # Create a transaction to execute the contract. tx = Transaction( sender=pre.fund_eoa(), to=contract_address, gas_limit=500_000, protected=False if fork in [Frontier, Homestead] else True, ) # Calculate expected storage values after SWAP and storage operations # Initial stack (after pushes, before swap): [0, 1, 2, ..., swap_pos+15] # (top is index 0) # After SWAP at position swap_pos: top and position swap_pos are swapped # Then we do: PUSH1(slot) SSTORE 16 times, which pops values from stack # Build the stack state after SWAP stack_after_swap = stack_values.copy() stack_after_swap[0], stack_after_swap[swap_pos] = ( stack_after_swap[swap_pos], stack_after_swap[0], ) # Store the first 16 values from the post-swap stack storage = Storage() for value in stack_after_swap[:16]: storage.store_next(value) post = {contract_address: Account(storage=storage)} # Run the state test. state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "swap_opcode", [getattr(Op, f"SWAP{i}") for i in range(1, 17)], ids=lambda op: str(op), ) @pytest.mark.valid_from("Frontier") def test_stack_underflow( state_test: StateTestFiller, fork: Fork, pre: Alloc, swap_opcode: Op, ) -> None: """ A test to ensure that the stack underflow when there are not enough elements for the `SWAP*` opcode to operate. For each SWAPn operation, we push exactly (n-1) elements to cause an underflow when trying to swap with the nth element. """ env = Environment() # Calculate which position we're swapping with (1-based index) swap_pos = swap_opcode.int() - 0x90 + 1 # Push exactly (n-1) elements for SWAPn to cause underflow contract_code = Bytecode() for i in range(swap_pos - 1): contract_code += Op.PUSH1(i % 256) # Attempt to perform the SWAP operation contract_code += swap_opcode # Store the top of the stack in storage slot 0 contract_code += Op.PUSH1(0) + Op.SSTORE # Deploy the contract with the generated bytecode. contract = pre.deploy_contract(contract_code) # Create a transaction to execute the contract. tx = Transaction( sender=pre.fund_eoa(), to=contract, gas_limit=500_000, protected=False if fork in [Frontier, Homestead] else True, ) # Define the expected post-state. post = {} storage = Storage() storage.store_next(0, f"SWAP{swap_pos} failed due to stack underflow") post[contract] = Account(storage=storage) # Run the state test. state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/precompiles/__init__.py ================================================ """Test for precompiles that apply for all forks starting from Frontier.""" ================================================ FILE: tests/frontier/precompiles/test_precompile_absence.py ================================================ """Test Calling Precompile Range (close to zero).""" import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, StateTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op UPPER_BOUND = 0x101 RETURNDATASIZE_OFFSET = 0x10000000000000000 # Must be greater than UPPER_BOUND @pytest.mark.parametrize( "calldata_size", [ pytest.param(0, id="empty_calldata"), pytest.param(31, id="31_bytes"), pytest.param(32, id="32_bytes"), ], ) @pytest.mark.valid_from("Byzantium") def test_precompile_absence( state_test: StateTestFiller, pre: Alloc, fork: Fork, calldata_size: int, ) -> None: """ Test that addresses close to zero are not precompiles unless active in the fork. """ active_precompiles = fork.precompiles() storage = Storage() call_code = Bytecode() for address in range(1, UPPER_BOUND + 1): if Address(address) in active_precompiles: continue call_code += Op.SSTORE( address, Op.CALL(gas=0, address=address, args_size=calldata_size), ) storage[address] = 1 if Op.RETURNDATASIZE in fork.valid_opcodes(): call_code += Op.SSTORE( address + RETURNDATASIZE_OFFSET, Op.RETURNDATASIZE, ) storage[address + RETURNDATASIZE_OFFSET] = 0 call_code += Op.STOP entry_point_address = pre.deploy_contract(call_code, storage=storage.canary()) tx = Transaction( to=entry_point_address, gas_limit=10_000_000, sender=pre.fund_eoa(), protected=True, ) state_test( pre=pre, tx=tx, post={ entry_point_address: Account( storage=storage, ) }, ) ================================================ FILE: tests/frontier/precompiles/test_precompiles.py ================================================ """Tests supported precompiled contracts.""" from typing import Iterator, Tuple import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op def precompile_addresses(fork: Fork) -> Iterator[Tuple[Address, bool]]: """ Yield the addresses of precompiled contracts and their support status for a given fork. Args: fork (Fork): The fork instance containing precompiled contract information. Yields: Iterator[Tuple[str, bool]]: A tuple containing the address in hexadecimal format and a boolean indicating whether the address is a supported precompile. """ supported_precompiles = fork.precompiles() for address in supported_precompiles: address_int = int.from_bytes(address, byteorder="big") yield (address, True) if address_int > 0 and (address_int - 1) not in supported_precompiles: yield (Address(address_int - 1), False) if (address_int + 1) not in supported_precompiles: yield (Address(address_int + 1), False) @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stPreCompiledContracts/idPrecompsFiller.yml" ], pr=["https://github.com/ethereum/execution-spec-tests/pull/1120"], coverage_missed_reason=( "Original test saves variables to memory, loads from storage, uses calldataload to get " "the precompile address to call, uses lt and gt to compare the gas differences, " "sends non-zero data and value with the transaction, uses conditional jumps to save " "different values to storage." ), ) @pytest.mark.valid_from("Berlin") @pytest.mark.parametrize_by_fork("address,precompile_exists", precompile_addresses) def test_precompiles( state_test: StateTestFiller, address: Address, precompile_exists: bool, pre: Alloc ) -> None: """ Tests the behavior of precompiled contracts in the Ethereum state test. Args: state_test (StateTestFiller): The state test filler object used to run the test. address (str): The address of the precompiled contract to test. precompile_exists (bool): A flag indicating whether the precompiled contract exists at the given address. pre (Alloc): The allocation object used to deploy the contract and set up the initial state. This test deploys a contract that performs two CALL operations to the specified address and a fixed address (0x10000), measuring the gas used for each call. It then stores the difference in gas usage in storage slot 0. The test verifies the expected storage value based on whether the precompiled contract exists at the given address. """ env = Environment() # Empty account to serve as reference empty_account = pre.fund_eoa(amount=0) # Memory args_offset = 0 ret_offset = 32 length = 32 account = pre.deploy_contract( Op.MSTORE(args_offset, 0xFF) # Pre-expand the memory and setup inputs for pre-compiles + Op.MSTORE(ret_offset, 0xFF) + Op.MSTORE8(args_offset, 0xFF) + Op.MSTORE8(ret_offset, 0xFF) + Op.POP(Op.BALANCE(empty_account)) # Warm the accounts + Op.POP(Op.BALANCE(address)) + Op.GAS + Op.CALL( gas=50_000, address=address, args_offset=args_offset, args_size=length, ret_offset=ret_offset, ret_size=length, ) + Op.POP + Op.SUB(Op.SWAP1, Op.GAS) + Op.GAS + Op.CALL( gas=50_000, address=empty_account, args_offset=args_offset, args_size=length, ret_offset=ret_offset, ret_size=length, ) + Op.POP + Op.SUB(Op.SWAP1, Op.GAS) + Op.SWAP1 + Op.SUB + Op.SSTORE(0, Op.ISZERO) + Op.STOP, storage={0: 0xDEADBEEF}, ) tx = Transaction( to=account, sender=pre.fund_eoa(), gas_limit=1_000_000, protected=True, ) # A high gas cost will result from calling a precompile # Expect 0x00 when a precompile exists at the address, 0x01 otherwise post = {account: Account(storage={0: 0 if precompile_exists else 1})} state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/frontier/scenarios/__init__.py ================================================ """Scenarios common import.""" ================================================ FILE: tests/frontier/scenarios/common.py ================================================ """Define Scenario structures and helpers for test_scenarios test.""" from abc import abstractmethod from dataclasses import dataclass from enum import Enum from ethereum_test_forks import Fork, Frontier from ethereum_test_tools import Address, Alloc, Bytecode, Conditional, MemoryVariable from ethereum_test_vm import Opcodes as Op class ScenarioExpectOpcode(Enum): """Opcodes that are replaced to real values computed by the scenario.""" TX_ORIGIN = 1 CODE_ADDRESS = 2 CODE_CALLER = 3 SELFBALANCE = 4 CALL_VALUE = 6 CALL_DATALOAD_0 = 7 CALL_DATASIZE = 8 GASPRICE = 9 BLOCKHASH_0 = 10 COINBASE = 11 TIMESTAMP = 12 NUMBER = 13 GASLIMIT = 14 @dataclass class ScenarioEnvironment: """ Scenario evm environment Each scenario must define an environment on which program is executed This is so post state verification could check results of evm opcodes. """ code_address: Address # Op.ADDRESS, address scope for program code_caller: Address # Op.CALLER, caller of the program selfbalance: int # Op.SELFBALANCE, balance of the environment of the program call_value: int # Op.CALLVALUE of call that is done to the program call_dataload_0: int # Op.CALLDATALOAD(0) expected result call_datasize: int # Op.CALLDATASIZE expected result has_static: bool = False # Weather scenario execution context is static @dataclass class ExecutionEnvironment: """Scenario execution environment which is determined by test.""" fork: Fork gasprice: int origin: Address coinbase: Address timestamp: int number: int gaslimit: int @dataclass class ProgramResult: """ Describe expected result of a program. Attributes: result (int | ScenarioExpectOpcode): The result of the program from_fork (Fork): The result is only valid from this fork (default: Frontier) static_support (bool): Can be verified in static context (default: True) """ result: int | ScenarioExpectOpcode """The result is only valid from this fork""" from_fork: Fork = Frontier static_support: bool = True def translate_result( self, env: ScenarioEnvironment, exec_env: ExecutionEnvironment ) -> int | Address: """ Translate expected program result code into concrete value, given the scenario evm environment and test execution environment. """ if exec_env.fork < self.from_fork: return 0 if not self.static_support and env.has_static: return 0 if isinstance(self.result, ScenarioExpectOpcode): if self.result == ScenarioExpectOpcode.TX_ORIGIN: return exec_env.origin if self.result == ScenarioExpectOpcode.CODE_ADDRESS: return env.code_address if self.result == ScenarioExpectOpcode.CODE_CALLER: return env.code_caller if self.result == ScenarioExpectOpcode.CALL_VALUE: return int(env.call_value) if self.result == ScenarioExpectOpcode.CALL_DATALOAD_0: return env.call_dataload_0 if self.result == ScenarioExpectOpcode.CALL_DATASIZE: return env.call_datasize if self.result == ScenarioExpectOpcode.GASPRICE: return exec_env.gasprice if self.result == ScenarioExpectOpcode.COINBASE: return exec_env.coinbase if self.result == ScenarioExpectOpcode.TIMESTAMP: return exec_env.timestamp if self.result == ScenarioExpectOpcode.NUMBER: return exec_env.number if self.result == ScenarioExpectOpcode.GASLIMIT: return exec_env.gaslimit if self.result == ScenarioExpectOpcode.SELFBALANCE: return int(env.selfbalance) else: return self.result return 0 class ScenarioTestProgram: """Base class for deploying test code that will be used in scenarios.""" @abstractmethod def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code to be deployed.""" pass @property @abstractmethod def id(self) -> str: """Test program pytest id.""" pass @abstractmethod def result(self) -> ProgramResult: """Test program result.""" pass def __str__(self) -> str: """Return the ID (for use as pytest test name).""" return self.id @dataclass class ScenarioDebug: """Debug selector for the development.""" program_id: str scenario_name: str @dataclass class ScenarioGeneratorInput: """ Parameters for the scenario generator function. Attributes: fork (Fork): Fork for which we ask to generate scenarios pre(Alloc): Access to the state to be able to deploy contracts into pre operation (Bytecode): Evm bytecode program that will be tested external_address (Address): Static external address for ext opcodes """ fork: Fork pre: Alloc operation_code: Bytecode @dataclass class Scenario: """ Describe test scenario that will be run in test for each program. Attributes: category (str): Scenario category name name (str): Scenario name for the test vector code (Address): Address that is an entry point for scenario code env (ScenarioEnvironment): Evm values for ScenarioExpectAddress map reverting (bool): If scenario reverts program execution, making result 0 (default: False) """ category: str name: str code: Address env: ScenarioEnvironment halts: bool = False def make_gas_hash_contract(pre: Alloc) -> Address: """ Contract that spends unique amount of gas based on input. Used for the values we can't predict, can be gas consuming on high values. So that if we can't check exact value in expect section, we at least could spend unique gas amount. """ # EVM memory variables byte_offset = MemoryVariable(0) current_byte = MemoryVariable(32) # Code for memory initialization initialize_code = byte_offset.set(0) calldata_copy = Op.JUMPDEST + Op.CALLDATACOPY( dest_offset=current_byte.offset + 32 - 1, offset=byte_offset, size=1, ) # Code offsets offset_calldata_copy = len(initialize_code) offset_conditional = offset_calldata_copy + len(calldata_copy) # Deploy contract gas_hash_address = pre.deploy_contract( code=initialize_code + calldata_copy # offset_calldata_copy + Op.JUMPDEST # offset_conditional + Conditional( condition=Op.ISZERO(current_byte), if_true=( # Increase the calldata byte offset, and if it's greater than # the calldata size, return, otherwise jump to the calldata # copy code and read the next byte. byte_offset.add(1) + Conditional( condition=Op.GT(byte_offset, Op.CALLDATASIZE()), if_true=Op.RETURN(offset=0, size=0), if_false=Op.JUMP(offset_calldata_copy), ) ), if_false=(current_byte.sub(1) + Op.JUMP(offset_conditional)), ) ) return gas_hash_address def make_invalid_opcode_contract(pre: Alloc, fork: Fork) -> Address: """ Deploy a contract that will execute any asked byte as an opcode from calldataload Deploy 20 empty stack elements. Jump to opcode instruction. if worked, return 0. """ invalid_opcode_caller = pre.deploy_contract( code=Op.PUSH1(0) * 20 + Op.JUMP(Op.ADD(Op.MUL(7, Op.CALLDATALOAD(0)), 20 * 2 + 10)) + sum( [ Op.JUMPDEST + Bytecode(bytes([opcode]), popped_stack_items=0, pushed_stack_items=0) + Op.RETURN(0, 0) for opcode in range(0x00, 0xFF) ], ) ) invalid_opcodes = [] valid_opcode_values = [opcode.int() for opcode in fork.valid_opcodes()] for op in range(0x00, 0xFF): if op not in valid_opcode_values: invalid_opcodes.append(op) results_sum = MemoryVariable(0) current_opcode = MemoryVariable(32) code = Bytecode( sum( current_opcode.set(opcode) + results_sum.add( Op.CALL( gas=50000, address=invalid_opcode_caller, args_offset=current_opcode.offset, args_size=32, ), ) for opcode in invalid_opcodes ) # If any of invalid instructions works, mstore[0] will be > 1 + results_sum.add(1) + results_sum.return_value() ) return pre.deploy_contract(code=code) ================================================ FILE: tests/frontier/scenarios/programs/__init__.py ================================================ """Scenarios common import.""" ================================================ FILE: tests/frontier/scenarios/programs/all_frontier_opcodes.py ================================================ """ Define a program for scenario test that executes all frontier opcodes and entangles it's result. """ from functools import cached_property from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Bytecode, Conditional from ethereum_test_vm import Opcodes as Op from ..common import ProgramResult, ScenarioTestProgram # Opcodes that are not in Frontier # 1b - SHL # 1c - SHR # 1d - SAR def make_all_opcode_program() -> Bytecode: """ Make a program that call each Frontier opcode and verifies it's result. """ code: Bytecode = ( # Test opcode 01 - ADD Conditional( condition=Op.EQ(Op.ADD(1, 1), 2), if_true=Op.MSTORE(0, 2), if_false=Op.MSTORE(0, 0) + Op.RETURN(0, 32), ) # Test opcode 02 - MUL + Conditional( condition=Op.EQ( Op.MUL(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 2), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE, ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 2) + Op.RETURN(0, 32), ) # Test 03 - SUB + Conditional( condition=Op.EQ( Op.SUB(0, 1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 3) + Op.RETURN(0, 32), ) # Test 04 - DIV + Conditional( condition=Op.AND(Op.EQ(Op.DIV(1, 2), 0), Op.EQ(Op.DIV(10, 2), 5)), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 4) + Op.RETURN(0, 32), ) # Test 05 - SDIV + Conditional( condition=Op.EQ( Op.SDIV( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, ), 2, ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 5) + Op.RETURN(0, 32), ) # Test 06 - MOD + Conditional( condition=Op.AND( Op.EQ(Op.MOD(10, 3), 1), Op.EQ( Op.MOD( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD, ), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 6) + Op.RETURN(0, 32), ) # Test 07 - SMOD + Conditional( condition=Op.AND( Op.EQ(Op.SMOD(10, 3), 1), Op.EQ( Op.SMOD( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD, ), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 7) + Op.RETURN(0, 32), ) # Test 08 - ADDMOD + Conditional( condition=Op.AND( Op.EQ(Op.ADDMOD(10, 10, 8), 4), Op.EQ( Op.ADDMOD( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 2, 2, ), 1, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 8) + Op.RETURN(0, 32), ) # Test 09 - MULMOD + Conditional( condition=Op.AND( Op.EQ(Op.MULMOD(10, 10, 8), 4), Op.EQ( Op.MULMOD( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 12, ), 9, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 9) + Op.RETURN(0, 32), ) # Test 0A - EXP + Conditional( condition=Op.AND( Op.EQ(Op.EXP(10, 2), 100), Op.EQ( Op.EXP(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD, 2), 9, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 10) + Op.RETURN(0, 32), ) # Test 0B - SIGNEXTEND + Conditional( condition=Op.AND( Op.EQ( Op.SIGNEXTEND(0, 0xFF), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, ), Op.EQ( Op.SIGNEXTEND(0, 0x7F), 0x7F, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 11) + Op.RETURN(0, 32), ) # Test 10 - LT + Conditional( condition=Op.AND( Op.EQ( Op.LT(9, 10), 1, ), Op.EQ( Op.LT(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0), 0, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x10) + Op.RETURN(0, 32), ) # Test 11 - GT + Conditional( condition=Op.AND( Op.EQ( Op.GT(9, 10), 0, ), Op.EQ( Op.GT(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0), 1, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x11) + Op.RETURN(0, 32), ) # Test 12 - SLT + Conditional( condition=Op.AND( Op.EQ( Op.SLT(9, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF), 0, ), Op.EQ( Op.SLT(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0), 1, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x12) + Op.RETURN(0, 32), ) # Test 13 - SGT + Conditional( condition=Op.AND( Op.EQ( Op.SGT(10, 10), 0, ), Op.EQ( Op.SGT(0, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF), 1, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x13) + Op.RETURN(0, 32), ) # Test 14 - EQ Skip # Test 15 - ISZero + Conditional( condition=Op.AND( Op.EQ(Op.ISZERO(10), 0), Op.EQ(Op.ISZERO(0), 1), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x15) + Op.RETURN(0, 32), ) # Test 16 - AND Skip # Test 17 - OR + Conditional( condition=Op.AND( Op.EQ(Op.OR(0xF0, 0xF), 0xFF), Op.EQ(Op.OR(0xFF, 0xFF), 0xFF), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x17) + Op.RETURN(0, 32), ) # Test 18 - XOR + Conditional( condition=Op.AND( Op.EQ(Op.XOR(0xF0, 0xF), 0xFF), Op.EQ(Op.XOR(0xFF, 0xFF), 0), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x18) + Op.RETURN(0, 32), ) # Test 19 - NOT + Conditional( condition=Op.AND( Op.EQ( Op.NOT(0), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ), Op.EQ( Op.NOT(0xFFFFFFFFFFFF), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000, ), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x19) + Op.RETURN(0, 32), ) # Test 1A - BYTE + Conditional( condition=Op.AND( Op.EQ(Op.BYTE(31, 0xFF), 0xFF), Op.EQ(Op.BYTE(30, 0xFF00), 0xFF), ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x1A) + Op.RETURN(0, 32), ) # Test 20 - SHA3 + Op.MSTORE(0, 0xFFFFFFFF) + Conditional( condition=Op.EQ( Op.SHA3(28, 4), 0x29045A592007D0C246EF02C2223570DA9522D0CF0F73282C79A1BC8F0BB2C238, ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x20) + Op.RETURN(0, 32), ) # 50 POP # 51 MLOAD # 52 MSTORE # 53 MSTORE8 + Op.MSTORE(0, 0) + Op.MSTORE8(0, 0xFFFF) + Conditional( condition=Op.EQ( Op.MLOAD(0), 0xFF00000000000000000000000000000000000000000000000000000000000000, ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x53) + Op.RETURN(0, 32), ) # 54 SLOAD + Conditional( condition=Op.EQ(Op.SLOAD(0), 0), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x54) + Op.RETURN(0, 32), ) # 55 SSTORE # can't use because of static contexts # 56 JUMP # 57 JUMPI # 58 PC + Conditional( condition=Op.EQ(Op.PC, 1660), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x58) + Op.RETURN(0, 32), ) # 59 MSIZE + Op.MSTORE(64, 123) + Conditional( condition=Op.EQ(Op.MSIZE, 96), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x59) + Op.RETURN(0, 32), ) # 5A GAS # 5B JUMPDEST # 5C TLOAD # 5D TSTORE # can't use because of static contexts # 5E MCOPY # 5F PUSH0 # 60 - 7F PUSH X + Op.PUSH1(0xFF) + Op.PUSH2(0xFFFF) + Op.ADD + Op.PUSH3(0xFFFFFF) + Op.ADD + Op.PUSH4(0xFFFFFFFF) + Op.ADD + Op.PUSH5(0xFFFFFFFFFF) + Op.ADD + Op.PUSH6(0xFFFFFFFFFFFF) + Op.ADD + Op.PUSH7(0xFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH8(0xFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH9(0xFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH10(0xFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH11(0xFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH12(0xFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH13(0xFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH14(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH15(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH16(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH17(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH18(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH19(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH20(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH21(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH22(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH23(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH24(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH25(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH26(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH27(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH28(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH29(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH30(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH31(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH32(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) + Op.ADD + Op.PUSH1(0) + Op.MSTORE + Conditional( condition=Op.EQ( Op.MLOAD(0), 0x1010101010101010101010101010101010101010101010101010101010100E0 ), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 60) + Op.RETURN(0, 32), ) # 80 - 8F DUP X + Op.PUSH1(1) + Op.DUP1 + Op.DUP2 + Op.DUP3 + Op.DUP4 + Op.DUP5 + Op.DUP6 + Op.DUP7 + Op.DUP8 + Op.DUP9 + Op.DUP10 + Op.DUP11 + Op.DUP12 + Op.DUP13 + Op.DUP14 + Op.DUP15 + Op.DUP16 + Op.ADD * 16 + Op.PUSH1(0) + Op.MSTORE + Conditional( condition=Op.EQ(Op.MLOAD(0), 17), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x80) + Op.RETURN(0, 32), ) # 90 - 9F SWAP X + Op.PUSH1(3) + Op.PUSH1(5) + Op.SWAP1 + Op.PUSH1(7) + Op.SWAP2 + Op.PUSH1(11) + Op.SWAP3 + Op.PUSH1(13) + Op.SWAP4 + Op.PUSH1(17) + Op.SWAP5 + Op.PUSH1(19) + Op.SWAP6 + Op.PUSH1(23) + Op.SWAP7 + Op.PUSH1(29) + Op.SWAP8 + Op.PUSH1(31) + Op.SWAP9 + Op.PUSH1(37) + Op.SWAP10 + Op.PUSH1(41) + Op.SWAP11 + Op.PUSH1(43) + Op.SWAP12 + Op.PUSH1(47) + Op.SWAP13 + Op.PUSH1(53) + Op.SWAP14 + Op.PUSH1(59) + Op.SWAP15 + Op.PUSH1(61) + Op.SWAP16 + Op.PUSH1(0) + Op.MSTORE + Conditional( condition=Op.EQ(Op.MLOAD(0), 59), if_true=Op.JUMPDEST, if_false=Op.MSTORE(0, 0x90) + Op.RETURN(0, 32), ) # A0 - A4 LOG X - can't use because non static # F0 CREATE # F1 CALL # F2 CALLCODE # F3 RETURN # F4 DELEGATECALL # F5 CREATE2 # FA STATICCALL # FD REVERT # FE INVALID # FF SELFDESTRUCT + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) return code class ProgramAllFrontierOpcodes(ScenarioTestProgram): """Check every frontier opcode functions.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return make_all_opcode_program() @cached_property def id(self) -> str: """Id.""" return "program_ALL_FRONTIER_OPCODES" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1) ================================================ FILE: tests/frontier/scenarios/programs/context_calls.py ================================================ """Define programs that will run all context opcodes for test scenarios.""" from functools import cached_property from ethereum_test_forks import Byzantium, Cancun, Constantinople, Fork, Istanbul, London, Shanghai from ethereum_test_tools import Alloc, Bytecode from ethereum_test_types import ChainConfigDefaults from ethereum_test_vm import Opcodes as Op from ..common import ( ProgramResult, ScenarioExpectOpcode, ScenarioTestProgram, make_gas_hash_contract, ) class ProgramAddress(ScenarioTestProgram): """ Check that ADDRESS is really the code execution address in all scenarios. """ def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_ADDRESS" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.CODE_ADDRESS) class ProgramBalance(ScenarioTestProgram): """Check the BALANCE in all execution contexts.""" external_balance: int = 123 def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork external_address = pre.deploy_contract(code=Op.ADD(1, 1), balance=self.external_balance) return Op.MSTORE(0, Op.BALANCE(external_address)) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_BALANCE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=self.external_balance) class ProgramOrigin(ScenarioTestProgram): """Check that ORIGIN stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.ORIGIN) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_ORIGIN" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.TX_ORIGIN) class ProgramCaller(ScenarioTestProgram): """Check the CALLER in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.CALLER) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CALLER" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.CODE_CALLER) class ProgramCallValue(ScenarioTestProgram): """Check the CALLVALUE in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.CALLVALUE) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CALLVALUE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.CALL_VALUE) class ProgramCallDataLoad(ScenarioTestProgram): """Check the CALLDATALOAD in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CALLDATALOAD" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.CALL_DATALOAD_0) class ProgramCallDataSize(ScenarioTestProgram): """Check the CALLDATASIZE in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.CALLDATASIZE) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CALLDATASIZE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.CALL_DATASIZE) class ProgramCallDataCopy(ScenarioTestProgram): """Check the CALLDATACOPY in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CALLDATACOPY" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.CALL_DATALOAD_0) class ProgramCodeCopyCodeSize(ScenarioTestProgram): """Check that codecopy and codesize stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.CODESIZE) + Op.CODECOPY(0, 0, 30) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CODECOPY_CODESIZE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult( result=0x38600052601E600060003960206000F300000000000000000000000000000010 ) class ProgramGasPrice(ScenarioTestProgram): """Check that gasprice stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork gas_hash = make_gas_hash_contract(pre) return ( Op.MSTORE(64, Op.GASPRICE) + Op.CALL(Op.SUB(Op.GAS, 200000), gas_hash, 0, 64, 32, 0, 0) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_GASPRICE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1) class ProgramExtCodeCopyExtCodeSize(ScenarioTestProgram): """Check that gasprice stays the same in all contexts.""" external_balance: int = 123 def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork external_address = pre.deploy_contract(code=Op.ADD(1, 1), balance=self.external_balance) return ( Op.MSTORE(0, Op.EXTCODESIZE(external_address)) + Op.EXTCODECOPY(external_address, 0, 0, 30) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_EXTCODECOPY_EXTCODESIZE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult( result=0x6001600101000000000000000000000000000000000000000000000000000005 ) class ProgramReturnDataSize(ScenarioTestProgram): """Check that returndatasize stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return ( Op.MSTORE(0, Op.RETURNDATASIZE) + Op.CALL(100000, 2, 0, 0, 10, 32, 20) + Op.MSTORE(0, Op.ADD(Op.MLOAD(0), Op.RETURNDATASIZE)) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_RETURNDATASIZE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=32, from_fork=Byzantium) class ProgramReturnDataCopy(ScenarioTestProgram): """Check that returndatacopy stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return ( Op.CALL(100000, 2, 0, 0, 10, 32, 20) + Op.RETURNDATACOPY(0, 0, 32) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_RETURNDATACOPY" def result(self) -> ProgramResult: """Test result.""" return ProgramResult( result=0x1D448AFD928065458CF670B60F5A594D735AF0172C8D67F22A81680132681CA, from_fork=Byzantium, ) class ProgramExtCodehash(ScenarioTestProgram): """Check that extcodehash stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork external_address = pre.deploy_contract(code=Op.ADD(1, 1), balance=123) return Op.MSTORE(0, Op.EXTCODEHASH(external_address)) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_EXTCODEHASH" def result(self) -> ProgramResult: """Test result.""" return ProgramResult( result=0x8C634A8B28DD46F5DCB9A9F5DA1FAED26D0FB5ED98F3873A29AD27AAAFFDE0E4, from_fork=Constantinople, ) class ProgramBlockhash(ScenarioTestProgram): """Check that blockhash stays the same in all contexts.""" # Need a way to pre calculate at least hash of block 0 def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork # Calculate gas hash of Op.BLOCKHASH(0) value gas_hash = make_gas_hash_contract(pre) return ( Op.MSTORE(64, Op.BLOCKHASH(0)) + Op.CALL(Op.SUB(Op.GAS, 200000), gas_hash, 0, 64, 32, 0, 0) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_BLOCKHASH" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1) class ProgramCoinbase(ScenarioTestProgram): """Check that coinbase stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.COINBASE) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_COINBASE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.COINBASE) class ProgramTimestamp(ScenarioTestProgram): """Check that timestamp stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork gas_hash = make_gas_hash_contract(pre) return ( Op.MSTORE(64, Op.TIMESTAMP) + Op.CALL(Op.SUB(Op.GAS, 200000), gas_hash, 0, 64, 32, 0, 0) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_TIMESTAMP" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1) class ProgramNumber(ScenarioTestProgram): """Check that block number stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.NUMBER) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_NUMBER" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.NUMBER) class ProgramDifficultyRandao(ScenarioTestProgram): """Check that difficulty/randao stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork # Calculate gas hash of DIFFICULTY value gas_hash = make_gas_hash_contract(pre) return ( Op.MSTORE(0, Op.PREVRANDAO) + Op.MSTORE(64, Op.PREVRANDAO) + Op.CALL(Op.SUB(Op.GAS, 200000), gas_hash, 0, 64, 32, 0, 0) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_DIFFICULTY" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1) class ProgramGasLimit(ScenarioTestProgram): """Check that gaslimit stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.GASLIMIT) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_GASLIMIT" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.GASLIMIT) class ProgramChainid(ScenarioTestProgram): """Check that chainid stays the same in all contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.CHAINID) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_CHAINID" def result(self) -> ProgramResult: """Test result.""" # TODO: use `chain_config` fixture instead. chain_id = ChainConfigDefaults.chain_id return ProgramResult(result=chain_id, from_fork=Istanbul) class ProgramSelfbalance(ScenarioTestProgram): """Check the SELFBALANCE in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.SELFBALANCE) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_SELFBALANCE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=ScenarioExpectOpcode.SELFBALANCE, from_fork=Istanbul) class ProgramBasefee(ScenarioTestProgram): """Check the BASEFEE in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork gas_hash = make_gas_hash_contract(pre) return ( Op.MSTORE(64, Op.BASEFEE) + Op.CALL(Op.SUB(Op.GAS, 200000), gas_hash, 0, 64, 32, 0, 0) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_BASEFEE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1, from_fork=London) class ProgramBlobhash(ScenarioTestProgram): """Check the blobhash in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.BLOBHASH(0)) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_BLOBHASH" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=0, from_fork=Cancun) class ProgramBlobBaseFee(ScenarioTestProgram): """Check the blob basefee in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del fork gas_hash = make_gas_hash_contract(pre) return ( Op.MSTORE(64, Op.BLOBBASEFEE) + Op.CALL(Op.SUB(Op.GAS, 200000), gas_hash, 0, 64, 32, 0, 0) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_BLOBBASEFEE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1, from_fork=Cancun) class ProgramTload(ScenarioTestProgram): """Check the tload in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, Op.TLOAD(0)) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_TLOAD" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=0, from_fork=Cancun) class ProgramMcopy(ScenarioTestProgram): """Check the mcopy in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return ( Op.MSTORE(0, 0) + Op.MSTORE(32, 0x000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F) + Op.MCOPY(0, 32, 32) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_MCOPY" def result(self) -> ProgramResult: """Test result.""" return ProgramResult( result=0x000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F, from_fork=Cancun, ) class ProgramPush0(ScenarioTestProgram): """Check the push0 in all execution contexts.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.PUSH1(10) + Op.PUSH0 + Op.MSTORE + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_PUSH0" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=10, from_fork=Shanghai) ================================================ FILE: tests/frontier/scenarios/programs/invalid_opcodes.py ================================================ """Define programs that can not be run in static context.""" from functools import cached_property from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Bytecode from ethereum_test_vm import Opcodes as Op from ..common import ProgramResult, ScenarioTestProgram, make_invalid_opcode_contract class ProgramInvalidOpcode(ScenarioTestProgram): """Test each invalid opcode.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" contract = make_invalid_opcode_contract(pre, fork) return Op.MSTORE( 0, Op.CALL(Op.SUB(Op.GAS, 200000), contract, 0, 64, 32, 100, 32), ) + Op.RETURN(100, 32) @cached_property def id(self) -> str: """Id.""" return "program_INVALID" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1) ================================================ FILE: tests/frontier/scenarios/programs/static_violation.py ================================================ """Define programs that can not be run in static context.""" from functools import cached_property from ethereum_test_forks import Cancun, Fork from ethereum_test_tools import Alloc, Bytecode from ethereum_test_vm import Opcodes as Op from ..common import ProgramResult, ScenarioTestProgram class ProgramSstoreSload(ScenarioTestProgram): """Test sstore, sload working.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return ( Op.SSTORE(0, 11) + Op.MSTORE(0, Op.ADD(Op.MLOAD(0), Op.SLOAD(0))) + Op.SSTORE(0, 5) + Op.MSTORE(0, Op.ADD(Op.MLOAD(0), Op.SLOAD(0))) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_SSTORE_SLOAD" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=16, static_support=False) class ProgramTstoreTload(ScenarioTestProgram): """Test sstore, sload working.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.TSTORE(0, 11) + Op.MSTORE(0, Op.TLOAD(0)) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_TSTORE_TLOAD" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=11, static_support=False, from_fork=Cancun) class ProgramLogs(ScenarioTestProgram): """Test Logs.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return ( Op.MSTORE(0, 0x1122334455667788991011121314151617181920212223242526272829303132) + Op.LOG0(0, 1) + Op.LOG1(1, 1, 0x1000) + Op.LOG2(2, 1, 0x2000, 0x2001) + Op.LOG3(3, 1, 0x3000, 0x3001, 0x3002) + Op.LOG4(4, 1, 0x4000, 0x4001, 0x4002, 0x4003) + Op.MSTORE(0, 1) + Op.RETURN(0, 32) ) @cached_property def id(self) -> str: """Id.""" return "program_LOGS" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=1, static_support=False) class ProgramSuicide(ScenarioTestProgram): """Test Suicide.""" def make_test_code(self, pre: Alloc, fork: Fork) -> Bytecode: """Test code.""" del pre, fork return Op.MSTORE(0, 1) + Op.SELFDESTRUCT(0) + Op.RETURN(0, 32) @cached_property def id(self) -> str: """Id.""" return "program_SUICIDE" def result(self) -> ProgramResult: """Test result.""" return ProgramResult(result=0, static_support=False) ================================================ FILE: tests/frontier/scenarios/scenarios/__init__.py ================================================ """Scenarios common import.""" ================================================ FILE: tests/frontier/scenarios/scenarios/call_combinations.py ================================================ """Define Scenario that will put a given program in all call contexts.""" from dataclasses import dataclass from typing import List from ethereum_test_tools import Address, Alloc from ethereum_test_vm import EVMCodeType, Opcode from ethereum_test_vm import Opcodes as Op from ..common import Scenario, ScenarioEnvironment, ScenarioGeneratorInput class ScenariosCallCombinations: """Class that would generate scenarios for all call combinations.""" @dataclass class AddressBalance: """Definition of values we use to put in contract balances and call.""" root_call_value = 1 first_call_value = 3 second_call_value = 5 root_contract_balance = 105 scenario_contract_balance = 107 sub_contract_balance = 111 program_selfbalance = 113 """The gas we keep before calling an address""" keep_gas = 100000 """Possible calls list to make as a first call""" first_call_opcodes: List[Opcode] = [] """Possible calls list to make as a second call""" second_call_opcodes: List[Opcode] = [] """Balance map that we put in different accounts""" balance: AddressBalance scenario_input: ScenarioGeneratorInput env: ScenarioEnvironment def __init__(self, scenario_input: ScenarioGeneratorInput): """Define possible call combinations given the fork.""" self.first_call_opcodes = [ callcode for callcode, evm_type in scenario_input.fork.call_opcodes() if evm_type == EVMCodeType.LEGACY ] self.second_call_opcodes = self.first_call_opcodes[:] self.second_call_opcodes.append(Op.NOOP) self.scenario_input = scenario_input self.balance = self.AddressBalance() def generate(self) -> List[Scenario]: """ Generate Scenarios for call combinations We take code that we want to test at scenario_input.operation_contract and put it in the context of call combinations. Example: root_contract -> call -> scenario_contract -> first_call -> sub_contract sub_contact -> second_call -> code We assume that code always returns its result. That we pass as return value in scenario_contract for the post state verification. """ scenarios_list: List[Scenario] = [] for first_call in self.first_call_opcodes: for second_call in self.second_call_opcodes: if second_call == Op.NOOP: scenarios_list.append(self._generate_one_call_scenario(first_call)) else: scenarios_list.append( self._generate_two_call_scenario(first_call, second_call) ) return scenarios_list def _generate_one_call_scenario(self, first_call: Opcode) -> Scenario: """ Generate scenario for only one call root_contract -(CALL)-> scenario_contract -(first_call)-> operation_contract. """ scenario_input: ScenarioGeneratorInput = self.scenario_input pre: Alloc = scenario_input.pre balance = self.balance operation_contract = pre.deploy_contract( code=scenario_input.operation_code, balance=balance.program_selfbalance ) scenario_contract = pre.deploy_contract( code=Op.MSTORE(32, 1122334455) + ( first_call( gas=Op.SUB(Op.GAS, self.keep_gas), address=operation_contract, args_offset=32, args_size=40, ret_size=32, value=balance.first_call_value, ) if first_call not in [Op.DELEGATECALL, Op.STATICCALL] else first_call( gas=Op.SUB(Op.GAS, self.keep_gas), address=operation_contract, args_offset=32, args_size=40, ret_size=32, ) ) + Op.RETURN(0, 32), balance=balance.scenario_contract_balance, ) root_contract = pre.deploy_contract( code=Op.CALL( gas=Op.SUB(Op.GAS, self.keep_gas), address=scenario_contract, ret_size=32, ) + Op.RETURN(0, 32), balance=balance.root_contract_balance, ) return Scenario( category="call_combinations", name=f"scenario_{first_call}", code=root_contract, env=ScenarioEnvironment( # Define address on which behalf program is executed code_address=( scenario_contract if first_call == Op.CALLCODE or first_call == Op.DELEGATECALL else operation_contract ), # Define code_caller for Op.CALLER code_caller=( root_contract if first_call == Op.DELEGATECALL else scenario_contract ), # Define balance for Op.BALANCE selfbalance=( balance.scenario_contract_balance if first_call in [Op.DELEGATECALL, Op.CALLCODE] else ( balance.program_selfbalance if first_call == Op.STATICCALL else balance.first_call_value + balance.program_selfbalance ) ), call_value=( 0 if first_call in [Op.STATICCALL, Op.DELEGATECALL] else balance.first_call_value ), call_dataload_0=1122334455, call_datasize=40, has_static=True if first_call == Op.STATICCALL else False, ), ) def _generate_two_call_scenario(self, first_call: Opcode, second_call: Opcode) -> Scenario: """ Generate scenario for two types of calls combination root_contract -(CALL)-> scenario_contract -(first_call)-> sub_contract sub_contract -(second_call) -> operation_contract. """ def _compute_code_caller() -> Address: """ Calculate who is the code caller in program_contract's code in given sequence root -CALL-> scenario_contract -(first_call) -> sub_contract -(second_call)-> program. """ code_caller: Address = root_contract if first_call == Op.DELEGATECALL: code_caller = scenario_contract if second_call == Op.DELEGATECALL: code_caller = root_contract else: if second_call == Op.DELEGATECALL: code_caller = scenario_contract else: code_caller = sub_contract if first_call == Op.CALLCODE: code_caller = scenario_contract return code_caller def _compute_selfbalance() -> int: """ Calculate the result of Op.SELFBALANCE in program scope in given sequence root -CALL-> scenario_contract -(first_call)-> sub_contract -(second_call)-> program. """ selfbalance: int = 0 if second_call in [Op.CALL]: selfbalance = second_call_value + balance.program_selfbalance return selfbalance if second_call in [Op.STATICCALL]: selfbalance = balance.program_selfbalance return selfbalance if first_call == Op.STATICCALL and second_call in [Op.DELEGATECALL, Op.CALLCODE]: selfbalance = balance.sub_contract_balance if first_call in [Op.CALLCODE, Op.DELEGATECALL] and second_call in [ Op.DELEGATECALL, Op.CALLCODE, ]: selfbalance = balance.scenario_contract_balance + balance.root_call_value if first_call == Op.CALL and second_call in [Op.DELEGATECALL, Op.CALLCODE]: selfbalance = balance.sub_contract_balance + balance.first_call_value if first_call == Op.STATICCALL and second_call == Op.STATICCALL: selfbalance = balance.program_selfbalance return selfbalance def _compute_callvalue() -> int: """ Calculate the expected callvalue in program scope given sequence: root -CALL-> scenario_contract -(first_call)-> sub_contract -(second_call)-> program. """ if second_call == Op.STATICCALL: return 0 if second_call == Op.DELEGATECALL: if first_call == Op.STATICCALL: return 0 else: if first_call == Op.DELEGATECALL: return balance.root_call_value else: return balance.first_call_value else: return second_call_value scenario_input = self.scenario_input pre: Alloc = scenario_input.pre balance = self.balance second_call_value = balance.second_call_value if first_call != Op.STATICCALL else 0 operation_contract = pre.deploy_contract( code=scenario_input.operation_code, balance=balance.program_selfbalance ) sub_contract = pre.deploy_contract( code=Op.MSTORE(32, 1122334455) + ( second_call( gas=Op.SUB(Op.GAS, self.keep_gas), address=operation_contract, args_size=40, args_offset=32, ret_size=32, value=second_call_value, ) if second_call not in [Op.DELEGATECALL, Op.STATICCALL] else second_call( gas=Op.SUB(Op.GAS, self.keep_gas), address=operation_contract, args_size=40, args_offset=32, ret_size=32, ) ) + Op.RETURN(0, 32), balance=balance.sub_contract_balance, ) scenario_contract = pre.deploy_contract( code=( first_call( gas=Op.SUB(Op.GAS, self.keep_gas), address=sub_contract, ret_size=32, value=balance.first_call_value, ) if first_call not in [Op.DELEGATECALL, Op.STATICCALL] else first_call( gas=Op.SUB(Op.GAS, self.keep_gas), address=sub_contract, ret_size=32, ) ) + Op.RETURN(0, 32), balance=balance.scenario_contract_balance, ) root_contract = pre.deploy_contract( balance=balance.root_contract_balance, code=Op.CALL( gas=Op.SUB(Op.GAS, self.keep_gas), address=scenario_contract, ret_size=32, value=balance.root_call_value, ) + Op.RETURN(0, 32), ) return Scenario( category="call_combinations", name=f"scenario_{first_call}_{second_call}", code=root_contract, env=ScenarioEnvironment( # Define address on which behalf program is executed code_address=( operation_contract if second_call not in [Op.CALLCODE, Op.DELEGATECALL] else ( sub_contract if first_call not in [Op.CALLCODE, Op.DELEGATECALL] else scenario_contract ) ), # Define code_caller for Op.CALLER code_caller=_compute_code_caller(), selfbalance=_compute_selfbalance(), call_value=_compute_callvalue(), call_dataload_0=1122334455, call_datasize=40, has_static=( True if first_call == Op.STATICCALL or second_call == Op.STATICCALL else False ), ), ) ================================================ FILE: tests/frontier/scenarios/scenarios/create_combinations.py ================================================ """Define Scenario that will put a given program in create contexts.""" from dataclasses import dataclass from typing import List from ethereum_test_tools import Alloc, Bytecode from ethereum_test_types import compute_create_address from ethereum_test_vm import EVMCodeType, Opcode from ethereum_test_vm import Macros as Om from ethereum_test_vm import Opcodes as Op from ..common import Scenario, ScenarioEnvironment, ScenarioGeneratorInput @dataclass class AddressBalance: """Definition of values we use to put in contract balances and call.""" root_call_value = 1 create_value = 3 call_value = 5 root_contract_balance = 100 scenario_contract_balance = 200 def scenarios_create_combinations(scenario_input: ScenarioGeneratorInput) -> List[Scenario]: """Generate Scenarios for create combinations.""" def _compute_selfbalance() -> int: """ Compute selfbalance opcode for root -> call -> scenario -> create | [call*] -> program. """ if call in [Op.DELEGATECALL, Op.CALLCODE]: return ( balance.scenario_contract_balance + balance.root_call_value - balance.create_value ) if call == Op.CALL: return balance.create_value + balance.call_value return balance.create_value scenarios_list: List[Scenario] = [] keep_gas = 100000 create_types: List[Opcode] = [ create_code for create_code, evm_type in scenario_input.fork.create_opcodes() if evm_type == EVMCodeType.LEGACY ] env: ScenarioEnvironment balance: AddressBalance = AddressBalance() # run code in create constructor for create in create_types: salt = [0] if create == Op.CREATE2 else [] operation_contract = scenario_input.pre.deploy_contract(code=scenario_input.operation_code) # the code result in init code will be actually code of a deployed # contract scenario_contract = scenario_input.pre.deploy_contract( balance=3, code=Op.EXTCODECOPY(operation_contract, 0, 0, Op.EXTCODESIZE(operation_contract)) + Op.MSTORE(0, create(3, 0, Op.EXTCODESIZE(operation_contract), *salt)) + Op.EXTCODECOPY(Op.MLOAD(0), 0, 0, 32) + Op.RETURN(0, 32), ) created_address = compute_create_address( address=scenario_contract, nonce=1, initcode=scenario_input.operation_code, opcode=Op.CREATE if create == Op.CREATE else Op.CREATE2, ) env = ScenarioEnvironment( # Define address on which behalf program is executed code_address=created_address, code_caller=scenario_contract, selfbalance=3, call_value=3, call_dataload_0=0, call_datasize=0, ) scenarios_list.append( Scenario( category="create_constructor_combinations", name=f"scenario_{create}_constructor", code=scenario_contract, env=env, ) ) # create a contract with test code and call it deploy_code = Bytecode( Op.EXTCODECOPY(operation_contract, 0, 0, Op.EXTCODESIZE(operation_contract)) + Op.RETURN(0, Op.EXTCODESIZE(operation_contract)) ) deploy_code_size: int = int(len(deploy_code.hex()) / 2) call_types: List[Opcode] = [ callcode for callcode, evm_type in scenario_input.fork.call_opcodes() if evm_type == EVMCodeType.LEGACY ] pre: Alloc = scenario_input.pre for create in create_types: for call in call_types: salt = [0] if create == Op.CREATE2 else [] scenario_contract = pre.deploy_contract( balance=balance.scenario_contract_balance, code=Om.MSTORE(deploy_code, 0) + Op.MSTORE(32, create(balance.create_value, 0, deploy_code_size, *salt)) + Op.MSTORE(0, 0) + Op.MSTORE(64, 1122334455) + ( call( gas=Op.SUB(Op.GAS, keep_gas), address=Op.MLOAD(32), args_offset=64, args_size=40, ret_offset=0, ret_size=32, value=balance.call_value, ) if call not in [Op.DELEGATECALL, Op.STATICCALL] else call( gas=Op.SUB(Op.GAS, keep_gas), address=Op.MLOAD(32), args_offset=64, args_size=40, ret_offset=0, ret_size=32, ) ) + Op.RETURN(0, 32), ) root_contract = pre.deploy_contract( balance=balance.root_contract_balance, code=Op.CALL( gas=Op.SUB(Op.GAS, keep_gas), address=scenario_contract, ret_size=32, value=balance.root_call_value, ) + Op.RETURN(0, 32), ) created_address = compute_create_address( address=scenario_contract, nonce=1, initcode=deploy_code, opcode=Op.CREATE if create == Op.CREATE else Op.CREATE2, ) env = ScenarioEnvironment( # Define address on which behalf program is executed code_address=( scenario_contract if call in [Op.CALLCODE, Op.DELEGATECALL] else created_address ), code_caller=root_contract if call == Op.DELEGATECALL else scenario_contract, selfbalance=_compute_selfbalance(), call_value=( 0 if call in [Op.STATICCALL] else ( balance.root_call_value if call in [Op.DELEGATECALL] else balance.call_value ) ), call_dataload_0=1122334455, call_datasize=40, has_static=True if call == Op.STATICCALL else False, ) scenarios_list.append( Scenario( category="create_call_combinations", name=f"scenario_{create}_then_{call}", code=root_contract, env=env, ) ) return scenarios_list ================================================ FILE: tests/frontier/scenarios/scenarios/double_call_combinations.py ================================================ """Define Scenario that will run a given program and then revert.""" from typing import List from ethereum_test_tools import Bytecode, Conditional from ethereum_test_tools import Macros as Om from ethereum_test_tools import Opcodes as Op from ..common import Scenario, ScenarioEnvironment, ScenarioGeneratorInput def scenarios_double_call_combinations(scenario_input: ScenarioGeneratorInput) -> List[Scenario]: """ Generate Scenarios for double call combinations. First call the operation normally. Then do a subcall that will [OOG,REVERT,RETURN]. Second call the operation normally. Compare the results of first call with the second operation call. """ scenarios_list: List[Scenario] = [] keep_gas = 300000 revert_types: List[Bytecode] = [Op.STOP(), Om.OOG(), Op.RETURN(offset=0, size=32)] if Op.REVERT in scenario_input.fork.valid_opcodes(): revert_types.append(Op.REVERT(offset=0, size=32)) for revert in revert_types: operation_contract = scenario_input.pre.deploy_contract(code=scenario_input.operation_code) subcall_contract = scenario_input.pre.deploy_contract( code=Op.MSTORE(0, 0x1122334455667788991011121314151617181920212223242526272829303132) + revert ) scenario_contract = scenario_input.pre.deploy_contract( code=Op.CALL(gas=Op.SUB(Op.GAS, keep_gas), address=operation_contract, ret_size=32) + Op.MSTORE(100, Op.MLOAD(0)) + Op.MSTORE(0, 0) + Op.CALL(gas=50_000, address=subcall_contract) + Op.CALL(gas=Op.SUB(Op.GAS, keep_gas), address=operation_contract, ret_size=32) + Op.MSTORE(200, Op.MLOAD(0)) + Conditional( condition=Op.EQ(Op.MLOAD(100), Op.MLOAD(200)), if_true=Op.RETURN(100, 32), if_false=Op.MSTORE(0, 0) + Op.RETURN(0, 32), ) ) env: ScenarioEnvironment = ScenarioEnvironment( code_address=operation_contract, code_caller=scenario_contract, selfbalance=0, call_value=0, call_dataload_0=0, call_datasize=0, ) scenarios_list.append( Scenario( category="double_call_combinations", name=f"scenario_call_then_{revert}_in_subcall_then_call", code=scenario_contract, env=env, halts=False, ) ) return scenarios_list ================================================ FILE: tests/frontier/scenarios/scenarios/revert_combinations.py ================================================ """Define Scenario that will run a given program and then revert.""" from typing import List from ethereum_test_vm import Macro, Opcode from ethereum_test_vm import Macros as Om from ethereum_test_vm import Opcodes as Op from ..common import Scenario, ScenarioEnvironment, ScenarioGeneratorInput def scenarios_revert_combinations(scenario_input: ScenarioGeneratorInput) -> List[Scenario]: """Generate Scenarios for revert combinations.""" scenarios_list: List[Scenario] = [] keep_gas = 100000 # TODO stack underflow cause revert_types: List[Opcode | Macro] = [Op.STOP, Om.OOG] if Op.REVERT in scenario_input.fork.valid_opcodes(): revert_types.append(Op.REVERT) for revert in revert_types: operation_contract = scenario_input.pre.deploy_contract(code=scenario_input.operation_code) scenario_contract = scenario_input.pre.deploy_contract( code=Op.CALLCODE(gas=Op.SUB(Op.GAS, keep_gas), address=operation_contract, ret_size=32) + revert(0, 32, unchecked=True) + Op.RETURN(0, 32) ) env: ScenarioEnvironment = ScenarioEnvironment( code_address=scenario_contract, code_caller=scenario_contract, selfbalance=0, call_value=0, call_dataload_0=0, call_datasize=0, ) scenarios_list.append( Scenario( category="revert_combinations", name=f"scenario_revert_by_{revert}", code=scenario_contract, env=env, halts=False if revert == Op.REVERT else True, ) ) return scenarios_list ================================================ FILE: tests/frontier/scenarios/test_scenarios.py ================================================ """ Call every possible opcode and test that the subcall is successful if the opcode is supported by the fork and fails otherwise. """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Environment, Storage, Transaction, ) from ethereum_test_vm import Opcodes as Op from .common import ( ExecutionEnvironment, Scenario, ScenarioDebug, ScenarioGeneratorInput, ScenarioTestProgram, ) from .programs.all_frontier_opcodes import ProgramAllFrontierOpcodes from .programs.context_calls import ( ProgramAddress, ProgramBalance, ProgramBasefee, ProgramBlobBaseFee, ProgramBlobhash, ProgramBlockhash, ProgramCallDataCopy, ProgramCallDataLoad, ProgramCallDataSize, ProgramCaller, ProgramCallValue, ProgramChainid, ProgramCodeCopyCodeSize, ProgramCoinbase, ProgramDifficultyRandao, ProgramExtCodeCopyExtCodeSize, ProgramExtCodehash, ProgramGasLimit, ProgramGasPrice, ProgramMcopy, ProgramNumber, ProgramOrigin, ProgramPush0, ProgramReturnDataCopy, ProgramReturnDataSize, ProgramSelfbalance, ProgramTimestamp, ProgramTload, ) from .programs.invalid_opcodes import ProgramInvalidOpcode from .programs.static_violation import ( ProgramLogs, ProgramSstoreSload, ProgramSuicide, ProgramTstoreTload, ) from .scenarios.call_combinations import ScenariosCallCombinations from .scenarios.create_combinations import scenarios_create_combinations from .scenarios.double_call_combinations import scenarios_double_call_combinations from .scenarios.revert_combinations import scenarios_revert_combinations REFERENCE_SPEC_GIT_PATH = "N/A" REFERENCE_SPEC_VERSION = "N/A" @pytest.fixture def scenarios(fork: Fork, pre: Alloc, test_program: ScenarioTestProgram) -> List[Scenario]: """ Define fixture vectors of all possible scenarios, given the current pre state input. """ scenarios_list: List[Scenario] = [] scenario_input = ScenarioGeneratorInput( fork=fork, pre=pre, operation_code=test_program.make_test_code(pre, fork), ) call_combinations = ScenariosCallCombinations(scenario_input).generate() for combination in call_combinations: scenarios_list.append(combination) call_combinations = scenarios_create_combinations(scenario_input) for combination in call_combinations: scenarios_list.append(combination) revert_combinations = scenarios_revert_combinations(scenario_input) for combination in revert_combinations: scenarios_list.append(combination) double_call_combinations = scenarios_double_call_combinations(scenario_input) for combination in double_call_combinations: scenarios_list.append(combination) return scenarios_list @pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/Templates/DiffPlaces/templateGen.js", "https://github.com/ethereum/tests/blob/v13.3/src/Templates/DiffPlaces/createDiffPlacesTests.sh", "https://github.com/ethereum/tests/blob/v13.3/src/Templates/DiffPlaces/createBadOpcodeTest.sh", "https://github.com/ethereum/tests/blob/v13.3/src/Templates/DiffPlaces/createAllBadOpcodeTests.sh", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stSelfBalance/diffPlacesFiller.yml", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/808"], coverage_missed_reason=("Original test pre-sets storage of some of the deployed accounts."), ) @pytest.mark.valid_from("Frontier") @pytest.mark.parametrize( # select program to debug ("program_id","scenario_name") # program="" # select all programs scenario_name="" # select all scenarios # # Example: # [ScenarioDebug(program_id=ProgramSstoreSload().id, # scenario_name="scenario_CALL_CALL")] "debug", [ ScenarioDebug( program_id="", scenario_name="", ) ], ids=["debug"], ) @pytest.mark.parametrize( "test_program", [ ProgramSstoreSload(), ProgramTstoreTload(), ProgramLogs(), ProgramSuicide(), ProgramInvalidOpcode(), ProgramAddress(), ProgramBalance(), ProgramOrigin(), ProgramCaller(), ProgramCallValue(), ProgramCallDataLoad(), ProgramCallDataSize(), ProgramCallDataCopy(), ProgramCodeCopyCodeSize(), ProgramGasPrice(), ProgramExtCodeCopyExtCodeSize(), ProgramReturnDataSize(), ProgramReturnDataCopy(), ProgramExtCodehash(), ProgramBlockhash(), ProgramCoinbase(), ProgramTimestamp(), ProgramNumber(), ProgramDifficultyRandao(), ProgramGasLimit(), ProgramChainid(), ProgramSelfbalance(), ProgramBasefee(), ProgramBlobhash(), ProgramBlobBaseFee(), ProgramTload(), ProgramMcopy(), ProgramPush0(), ProgramAllFrontierOpcodes(), ], ) @pytest.mark.slow() def test_scenarios( blockchain_test: BlockchainTestFiller, fork: Fork, pre: Alloc, debug: ScenarioDebug, test_program: ScenarioTestProgram, scenarios: List[Scenario], ) -> None: """ Test given operation in different scenarios Verify that it's return value equal to expected result on every scenario, that is valid for the given fork. Note: Don't use pytest parametrize for scenario production, because scenarios will be complex Generate one test file for [each operation] * [each scenario] to save space As well as operations will be complex too """ tx_env = Environment() tx_origin: Address = pre.fund_eoa() tests: int = 0 blocks: List[Block] = [] post: dict = {} for scenario in scenarios: if debug.scenario_name and scenario.name != debug.scenario_name: continue if debug.program_id: if test_program.id != debug.program_id: continue tests = tests + 1 post_storage = Storage() result_slot = post_storage.store_next(1, hint=f"runner result {scenario.name}") tx_max_gas = 7_000_000 if test_program.id == ProgramInvalidOpcode().id else 1_000_000 if scenario.category == "double_call_combinations": tx_max_gas *= 2 tx_gasprice: int = 10 exec_env = ExecutionEnvironment( fork=fork, origin=tx_origin, gasprice=tx_gasprice, timestamp=tx_env.timestamp, # we can't know timestamp before head, # use gas hash number=len(blocks) + 1, gaslimit=tx_env.gas_limit, coinbase=tx_env.fee_recipient, ) def make_result(scenario: Scenario, exec_env: ExecutionEnvironment, post: Storage) -> int: """Make Scenario post result.""" if scenario.halts: return post.store_next(0, hint=scenario.name) else: return post.store_next( test_program.result().translate_result(scenario.env, exec_env), hint=scenario.name, ) runner_contract = pre.deploy_contract( code=Op.MSTORE(0, 0) + Op.CALL(tx_max_gas, scenario.code, 0, 0, 0, 0, 32) + Op.SSTORE(make_result(scenario, exec_env, post_storage), Op.MLOAD(0)) + Op.SSTORE(result_slot, 1), storage={ result_slot: 0xFFFF, }, ) tx = Transaction( sender=tx_origin, gas_limit=tx_max_gas + 100_000, gas_price=tx_gasprice, to=runner_contract, data=bytes.fromhex("11223344"), value=0, protected=False, ) post[runner_contract] = Account(storage=post_storage) blocks.append(Block(txs=[tx], post=post)) if tests > 0: blockchain_test( pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/homestead/__init__.py ================================================ """Test cases for EVM functionality introduced in Homestead.""" ================================================ FILE: tests/homestead/coverage/__init__.py ================================================ """Tests that fill coverage gaps when porting over from `ethereum/tests`.""" ================================================ FILE: tests/homestead/coverage/test_coverage.py ================================================ """ Tests that address coverage gaps that result from updating `ethereum/tests` into EEST tests. """ import pytest from ethereum_test_forks import Cancun, Fork from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "N/A" REFERENCE_SPEC_VERSION = "N/A" @pytest.mark.valid_from("Homestead") def test_coverage( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Cover gaps that result from transforming Yul code into our Python opcode wrapper bytecode. E.g. Yul tends to optimize stack items by using `SWAP1` and `DUP1` opcodes, which are not regularly used in python code. Modify this test to cover more Yul code if required in the future. """ missed_coverage = pre.deploy_contract( balance=0, code=Op.SHL(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00) + Op.SHR(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00) + Op.PUSH1(0x0A) + Op.PUSH1(0x0B) + Op.PUSH1(0x0C) + Op.PUSH1(0x0D) + Op.PUSH1(0x0E) + Op.SWAP1() + Op.DUP1() + Op.DUP2() + Op.PUSH0() + Op.PUSH2(0x0102) + Op.PUSH3(0x010203) + Op.PUSH4(0x01020304) + Op.PUSH32(0x0101010101010101010101010101010101010101010101010101010101010101) + Op.MSTORE8(0x00, 0x01) + Op.ADD(0x02, 0x03) + Op.POP(0x01) # lllc tests insert codecopy when using lll(seq()) + Op.CODECOPY(0, 16, 4), storage={}, ) address_to = pre.deploy_contract( balance=1_000_000_000_000_000_000, code=Op.MSTORE(0, Op.CALL(Op.GAS, missed_coverage, 0, 0, 0, 0, 0)) + Op.RETURN(0, 32), ) if fork >= Cancun: tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), gas_limit=100000, to=address_to, data=b"", value=0, protected=False, access_list=[], max_fee_per_gas=10, max_priority_fee_per_gas=5, ) else: tx = Transaction( sender=pre.fund_eoa(7_000_000_000_000_000_000), gas_limit=100000, to=address_to, data=b"", value=0, protected=False, ) state_test(env=Environment(), pre=pre, post={}, tx=tx) ================================================ FILE: tests/homestead/identity_precompile/__init__.py ================================================ """abstract: EIP-2: Homestead Precompile Identity Test Cases.""" ================================================ FILE: tests/homestead/identity_precompile/test_identity.py ================================================ """abstract: EIP-2: Homestead Identity Precompile Test Cases.""" import pytest from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, keccak256, ) from ethereum_test_tools import Opcodes as Op @pytest.mark.with_all_call_opcodes() @pytest.mark.valid_from("Byzantium") def test_identity_return_overwrite( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, ) -> None: """ Test the return data of the identity precompile overwriting its input. """ code = ( sum(Op.MSTORE8(offset=i, value=(i + 1)) for i in range(4)) # memory = [1, 2, 3, 4] + call_opcode( address=4, args_offset=0, args_size=4, # args = [1, 2, 3, 4] ret_offset=1, ret_size=4, ) # memory = [1, 1, 2, 3, 4] + Op.RETURNDATACOPY( dest_offset=0, offset=0, size=Op.RETURNDATASIZE() ) # memory correct = [1, 2, 3, 4, 4], corrupt = [1, 1, 2, 3, 4] + Op.SSTORE(1, Op.SHA3(offset=0, size=Op.MSIZE)) ) contract_address = pre.deploy_contract( code=code, ) tx = Transaction( sender=pre.fund_eoa(), to=contract_address, gas_limit=100_000, ) post = { contract_address: Account( storage={ 1: keccak256(bytes([1, 2, 3, 4, 4]).ljust(32, b"\0")), }, ), } state_test(pre=pre, post=post, tx=tx) @pytest.mark.with_all_call_opcodes() @pytest.mark.valid_from("Byzantium") def test_identity_return_buffer_modify( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, ) -> None: """ Test the modification of the input range to attempt to modify the return buffer. """ env = Environment() code = ( sum(Op.MSTORE8(offset=i, value=(i + 1)) for i in range(4)) # memory = [1, 2, 3, 4] + call_opcode( address=4, args_offset=0, args_size=4, # args = [1, 2, 3, 4] ) # memory = [1, 2, 3, 4] + Op.MSTORE8(offset=0, value=5) # memory = [5, 2, 3, 4] + Op.MSTORE8(offset=4, value=5) # memory = [5, 2, 3, 4, 5] + Op.RETURNDATACOPY( dest_offset=0, offset=0, size=Op.RETURNDATASIZE() ) # memory correct = [1, 2, 3, 4, 5], corrupt = [5, 2, 3, 4, 5] + Op.SSTORE(1, Op.SHA3(offset=0, size=Op.MSIZE)) ) contract_address = pre.deploy_contract( code=code, ) tx = Transaction( sender=pre.fund_eoa(), to=contract_address, gas_limit=100_000, ) post = { contract_address: Account( storage={ 1: keccak256(bytes([1, 2, 3, 4, 5]).ljust(32, b"\0")), }, ), } state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/homestead/yul/__init__.py ================================================ """Tests using Yul source for contracts.""" ================================================ FILE: tests/istanbul/__init__.py ================================================ """Test cases for EVM functionality introduced in Istanbul.""" ================================================ FILE: tests/istanbul/eip1344_chainid/__init__.py ================================================ """ Tests for [EIP-1344: ChainID Opcode](https://eips.ethereum.org/EIPS/eip-1344). """ ================================================ FILE: tests/istanbul/eip1344_chainid/test_chainid.py ================================================ """ Tests [EIP-1344: CHAINID opcode](https://eips.ethereum.org/EIPS/eip-1344). """ import pytest from ethereum_test_tools import Account, Alloc, ChainConfig, StateTestFiller, Transaction from ethereum_test_vm import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-1344.md" REFERENCE_SPEC_VERSION = "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" @pytest.mark.with_all_typed_transactions( marks=lambda tx_type: pytest.mark.execute( pytest.mark.skip(reason="type 3 transactions aren't supported in execute mode") ) if tx_type == 3 else None ) @pytest.mark.valid_from("Istanbul") def test_chainid( state_test: StateTestFiller, pre: Alloc, chain_config: ChainConfig, typed_transaction: Transaction, ) -> None: """Test CHAINID opcode.""" chain_id = chain_config.chain_id contract_address = pre.deploy_contract(Op.SSTORE(1, Op.CHAINID) + Op.STOP) tx = typed_transaction.copy( chain_id=chain_id, to=contract_address, ) post = { contract_address: Account(storage={1: chain_id}), } state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/istanbul/eip152_blake2/__init__.py ================================================ """ Tests [EIP-152: BLAKE2 compression precompile](https://eips.ethereum.org/EIPS/eip-152). """ ================================================ FILE: tests/istanbul/eip152_blake2/common.py ================================================ """Common classes used in the BLAKE2b precompile tests.""" from dataclasses import dataclass from ethereum_test_base_types import Bytes from ethereum_test_types.helpers import TestParameterGroup from .spec import Spec, SpecTestVectors class Blake2bInput(TestParameterGroup): """ Helper class that defines the BLAKE2b precompile inputs and creates the call data from them. Returns all inputs encoded as bytes. Attributes: rounds_length (int): An optional integer representing the bytes length for the number of rounds. Defaults to the expected length of 4. rounds (int | str): A hex string or integer value representing the number of rounds. h (str): A hex string that represents the state vector. m (str): A hex string that represents the message block vector. t_0 (int | str): A hex string or integer value that represents the first offset counter. t_1(int | str): A hex string or integer value that represents the second offset counter. f (bool): An optional boolean that represents the final block indicator flag. Defaults to True. """ rounds_length: int = Spec.BLAKE2_PRECOMPILE_ROUNDS_LENGTH rounds: int = Spec.BLAKE2B_PRECOMPILE_ROUNDS h: Bytes = SpecTestVectors.BLAKE2_STATE_VECTOR # type: ignore m: Bytes = SpecTestVectors.BLAKE2_MESSAGE_BLOCK_VECTOR # type: ignore t_0: int | Bytes = SpecTestVectors.BLAKE2_OFFSET_COUNTER_0 t_1: int | Bytes = SpecTestVectors.BLAKE2_OFFSET_COUNTER_1 f: bool | int = True def create_blake2b_tx_data(self) -> bytes: """Generate input for the BLAKE2b precompile.""" _rounds = self.rounds.to_bytes(length=self.rounds_length, byteorder="big") _t_0 = ( self.t_0 if isinstance(self.t_0, bytes) else self.t_0.to_bytes(length=Spec.BLAKE2_PRECOMPILE_T_0_LENGTH, byteorder="little") ) _t_1 = ( self.t_1 if isinstance(self.t_1, bytes) else self.t_1.to_bytes(length=Spec.BLAKE2_PRECOMPILE_T_1_LENGTH, byteorder="little") ) _f = int(self.f).to_bytes(length=Spec.BLAKE2_PRECOMPILE_F_LENGTH, byteorder="big") return _rounds + self.h + self.m + _t_0 + _t_1 + _f @dataclass(kw_only=True, frozen=True, repr=False) class ExpectedOutput(TestParameterGroup): """ Expected test result. Attributes: call_succeeds (str | bool): A hex string or boolean to indicate whether the call was successful or not. data_1 (str): String value of the first updated state vector. data_2 (str): String value of the second updated state vector. """ call_succeeds: str | bool data_1: str data_2: str ================================================ FILE: tests/istanbul/eip152_blake2/conftest.py ================================================ """pytest fixtures for testing the BLAKE2b precompile.""" import pytest from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .spec import Spec @pytest.fixture def blake2b_contract_bytecode(call_opcode: Op) -> Bytecode: """ Contract code that performs the provided opcode (CALL or CALLCODE) to the BLAKE2b precompile and stores the result. """ return ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.SSTORE( 0, call_opcode( address=Spec.BLAKE2_PRECOMPILE_ADDRESS, args_offset=0, args_size=Op.CALLDATASIZE(), ret_offset=0x200, ret_size=0x40, ), ) + Op.SSTORE(1, Op.MLOAD(0x200)) + Op.SSTORE(2, Op.MLOAD(0x220)) + Op.STOP() ) ================================================ FILE: tests/istanbul/eip152_blake2/spec.py ================================================ """Defines EIP-152 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_152 = ReferenceSpec("EIPS/eip-152.md", "2762bfcff3e549ef263342e5239ef03ac2b07400") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-152 specifications as defined at https://eips.ethereum.org/EIPS/eip-152#specification. If the parameter is not currently used within the tests, it is commented out. """ BLAKE2_PRECOMPILE_ADDRESS = 0x09 # The following constants are used to define the bytes length of the # parameters passed to the BLAKE2 precompile. BLAKE2_PRECOMPILE_ROUNDS_LENGTH = 4 # BLAKE2_PRECOMPILE_M_LENGTH = 128 BLAKE2_PRECOMPILE_T_0_LENGTH = 8 BLAKE2_PRECOMPILE_T_1_LENGTH = 8 BLAKE2_PRECOMPILE_F_LENGTH = 1 # Constants for BLAKE2b and BLAKE2s spec defined at # https://datatracker.ietf.org/doc/html/rfc7693#section-3.2 BLAKE2B_PRECOMPILE_ROUNDS = 12 BLAKE2B_PRECOMPILE_H_LENGTH = 64 # BLAKE2S_PRECOMPILE_ROUNDS = 10 # BLAKE2S_PRECOMPILE_H_LENGTH = 32 class SpecTestVectors: """Defines common test parameters for the BLAKE2b precompile.""" # The following constants are used to define common test parameters # Origin of vectors defined at # https://datatracker.ietf.org/doc/html/rfc7693.html#appendix-A BLAKE2_STATE_VECTOR = ( "48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1" "361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f" "79217e1319cde05b" ) BLAKE2_MESSAGE_BLOCK_VECTOR = ( "616263000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000000000000000000" "0000000000000000000000" ) BLAKE2_OFFSET_COUNTER_0 = 3 BLAKE2_OFFSET_COUNTER_1 = 0 ================================================ FILE: tests/istanbul/eip152_blake2/test_blake2.py ================================================ """ Tests [EIP-152: BLAKE2b compression precompile](https://eips.ethereum.org/EIPS/eip-152). """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Bytecode, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op from .common import Blake2bInput, ExpectedOutput from .spec import SpecTestVectors, ref_spec_152 REFERENCE_SPEC_GIT_PATH = ref_spec_152.git_path REFERENCE_SPEC_VERSION = ref_spec_152.version pytestmark = pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stPreCompiledContracts/blake2BFiller.yml", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLBlake2fFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stPreCompiledContracts2/CALLCODEBlake2fFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stPreCompiledContracts/delegatecall09UndefinedFiller.yml", ], pr=[ "https://github.com/ethereum/execution-spec-tests/pull/1244", "https://github.com/ethereum/execution-spec-tests/pull/1067", ], coverage_missed_reason=( "No longer used opcodes, SUB, GT, ISZERO, AND, CODESIZE, JUMP, some PUSH opcodes." "Original test calls Blake2b in ConstantinopleFix (activation test), " "which results in empty account code being triggered." ), ) @pytest.mark.valid_from("Istanbul") @pytest.mark.parametrize("call_opcode", [Op.CALL]) @pytest.mark.parametrize( ["data", "output"], [ pytest.param( Blake2bInput( rounds=0, rounds_length=0, h="", m="", t_0="", t_1="", ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="empty-input", ), pytest.param( Blake2bInput( rounds_length=3, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="invalid-rounds-length-short", ), pytest.param( Blake2bInput( rounds_length=5, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="invalid-rounds-length-long", ), pytest.param( Blake2bInput( f=2, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="invalid-final-block-flag-value-0x02", ), pytest.param( Blake2bInput( rounds=0, ), ExpectedOutput( call_succeeds=True, data_1="0x08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5", data_2="0xd282e6ad7f520e511f6c3e2b8c68059b9442be0454267ce079217e1319cde05b", ), id="valid-rounds-0", ), pytest.param( Blake2bInput(), ExpectedOutput( call_succeeds=True, data_1="0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1", data_2="0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", ), id="valid-rounds-12", ), pytest.param( Blake2bInput( f=False, ), ExpectedOutput( call_succeeds=True, data_1="0x75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d28752", data_2="0x98743e7f6d5ea2f2d3e8d226039cd31b4e426ac4f2d3d666a610c2116fde4735", ), id="valid-false-final-block-flag", ), pytest.param( Blake2bInput( rounds=1, ), ExpectedOutput( call_succeeds=True, data_1="0xb63a380cb2897d521994a85234ee2c181b5f844d2c624c002677e9703449d2fb", data_2="0xa551b3a8333bcdf5f2f7e08993d53923de3d64fcc68c034e717b9293fed7a421", ), id="valid-rounds-1", ), # Excessive number of rounds expects to run out of gas pytest.param( Blake2bInput( rounds=4294967295, ), ExpectedOutput( call_succeeds=False, data_1="0x0", data_2="0x0", ), id="oog-rounds-4294967295", ), # Case from https://github.com/ethereum/tests/pull/948#issuecomment-925964632 pytest.param( Blake2bInput( m="6162636465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=5, ), ExpectedOutput( call_succeeds=True, data_1="0xf3e89a60ec4b0b1854744984e421d22b82f181bd4601fb9b1726b2662da61c29", data_2="0xdff09e75814acb2639fd79e56616e55fc135f8476f0302b3dc8d44e082eb83a8", ), id="valid-different-message-offset-0x05", ), pytest.param( Blake2bInput( rounds=16, ), ExpectedOutput( call_succeeds=True, data_1="0xa8ef8236e5f48a74af375df15681d128457891c1cc4706f30747b2d40300b2f4", data_2="0x9d19f80fbd0945fd87736e1fc1ff10a80fd85a7aa5125154f3aaa3789ddff673", ), id="valid-rounds-16", ), pytest.param( Blake2bInput( rounds=32, ), ExpectedOutput( call_succeeds=True, data_1="0xbc5e888ed71b546da7b1506179bdd6c184a6410c40de33f9c330207417797889", data_2="0x5dbe74144468aefe5c2afce693c62dbca99e5e076dd467fe90a41278b16d691e", ), id="valid-rounds-32", ), pytest.param( Blake2bInput( rounds=64, ), ExpectedOutput( call_succeeds=True, data_1="0x74097ae7b16ffd18c742aee5c55dc89d54b6f1a8a19e6139ccfb38afba56b6b0", data_2="0x2cc35c441c19c21194fefb6841e72202f7c9d05eb9c3cfd8f94c67aa77d473c1", ), id="valid-rounds-64", ), pytest.param( Blake2bInput( rounds=128, ), ExpectedOutput( call_succeeds=True, data_1="0xd82c6a670dc90af9d7f77644eacbeddfed91b760c65c927871784abceaab3f81", data_2="0x3759733a1736254fb1cfc515dbfee467930955af56e27ee435f836fc3e65969f", ), id="valid-rounds-128", ), pytest.param( Blake2bInput( rounds=256, ), ExpectedOutput( call_succeeds=True, data_1="0x5d6ff04d5ebaee5687d634613ab21e9a7d36f782033c74f91d562669aaf9d592", data_2="0xc86346cb2df390243a952834306b389e656876a67934e2c023bce4918a016d4e", ), id="valid-rounds-256", ), pytest.param( Blake2bInput( rounds=512, ), ExpectedOutput( call_succeeds=True, data_1="0xa2c1eb780a6e1249156fe0751e5d4687ea9357b0651c78df660ab004cb477363", data_2="0x6298bbbc683e4a0261574b6d857a6a99e06b2eea50b16f86343d2625ff222b98", ), id="valid-rounds-512", ), pytest.param( Blake2bInput( rounds=1024, ), ExpectedOutput( call_succeeds=True, data_1="0x689419d2bf32b5a9901a2c733b9946727026a60d8773117eabb35f04a52cdcf1", data_2="0xb8fb4473454cf03d46c36a10b3f784aae4dc80a24424960e66a8ad5a8c2bfb30", ), id="valid-rounds-1024", ), pytest.param( Blake2bInput( rounds=16, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0x4ab6df9d1f57140bbd27b5e164f42102d9e2b0bf4d53da501273f81a37e505c7", data_2="0xf6e136f9ca4b693aa6e990b04c6412296dc09540c23c395f183011a0c5d7392e", ), id="valid-rounds-16-offset-0x10", ), pytest.param( Blake2bInput( rounds=32, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0x7af9b4f9c25ba3e3fd4fcb957e703b7b2e648990fe8e24c6ca2a2dfac4ce76e6", data_2="0x18acffc26913d6759843362adeb4c95299777baaa977b5d94dd219d1777e4cb", ), id="valid-rounds-32-offset-0x10", ), pytest.param( Blake2bInput( rounds=64, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0x97eb79f7abc085a3da64d6e8643d196cbf522a51985ba2cc6a7ca14289b59df0", data_2="0x73366eb68e41966eb8b33ab5bd6078d0de2fa4edc986b1d2afc4c92f2fc30cda", ), id="valid-rounds-64-offset-0x10", ), pytest.param( Blake2bInput( rounds=128, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0x5ef3d6ee148936390a9053e91ab5a92f4de4dfc62ebb95d71485be26d9b78c8d", data_2="0x8989dfe319f2fb5f11784174db63a7bcfc50de04e13fad57bea159e46e8811df", ), id="valid-rounds-128-offset-0x10", ), pytest.param( Blake2bInput( rounds=256, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0xa36be13275fec9a91779f0c9b06b1b40d8c8a13ab0786d0764c2eb708cc8eb81", data_2="0xf1acb2a3c7abd2ff5a9fdfe88b81f6f56288dc5260a9c810f023ae83b9b64a1a", ), id="valid-rounds-256-offset-0x10", ), pytest.param( Blake2bInput( rounds=512, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0xc987e560e3f90833c0d10ae1282bd9d35a7ba06d8abaa13a994d0962ed2bbaa9", data_2="0xf69c1e1e7c9aedb75e72d1b46e9f1b2ad8f8c2f7f858a04ed8aec16f964a96da", ), id="valid-rounds-512-offset-0x10", ), pytest.param( Blake2bInput( rounds=1024, m="6162636465666768696a6b6c6d6e6f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=16, ), ExpectedOutput( call_succeeds=True, data_1="0x224138a6afa847230ff09c23e2ca66522e22d26884b09d7740e2dd127cb61057", data_2="0x90cecbd4de6a52a733ca4a59583c064ad6ec7653d5d457b681de332f16f3d45", ), id="valid-rounds-1024-offset-0x10", ), pytest.param( Blake2bInput( rounds=16, m="6162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d900000000000000", t_0=120, ), ExpectedOutput( call_succeeds=True, data_1="0xabcd200f2962ede252fc455ea70d12b236ad2f4046b91e17558a7741d9da39a2", data_2="0x548083b610bb8591ca50418eabd15b6489a936b178a435b4c182ffa475eba4d8", ), id="valid-rounds-16-offset-0x78", ), pytest.param( Blake2bInput( rounds=32, m="6162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d900000000000000", t_0=120, ), ExpectedOutput( call_succeeds=True, data_1="0x39fc2077154fba422b3d628d10908c596beebea8dfd90f14566aec4f60bdb2bc", data_2="0xa75d73ab2b224d58c3568cbc7fc8905cc849f10745f00addef02384032d53729", ), id="valid-rounds-32-offset-0x78", ), pytest.param( Blake2bInput( rounds=64, m="6162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d900000000000000", t_0=120, ), ExpectedOutput( call_succeeds=True, data_1="0x5bb981381beb687d5fdbe5e7c096fbd1ce193b780948c1d74ebbb7c58db364c7", data_2="0xb7695d32f918444dbdcbdcff476fc70a926e228c4cbb7d05473711d3b56e5b33", ), id="valid-rounds-64-offset-0x78", ), pytest.param( Blake2bInput( rounds=0, rounds_length=0, h="00", m="00", t_0=0, t_1=SpecTestVectors.BLAKE2_OFFSET_COUNTER_1, f=0, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-RFC-7693-zero-input", ), ], ) @pytest.mark.slow() def test_blake2b( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, blake2b_contract_bytecode: Bytecode, data: Blake2bInput | str | bytes, output: ExpectedOutput, ) -> None: """Test BLAKE2b precompile.""" env = Environment() account = pre.deploy_contract(blake2b_contract_bytecode, storage={0: 0xDEADBEEF}) sender = pre.fund_eoa() if isinstance(data, Blake2bInput): data = data.create_blake2b_tx_data() elif isinstance(data, str): data = bytes.fromhex(data) if isinstance(data, Blake2bInput): data = data.create_blake2b_tx_data() elif isinstance(data, str): data = bytes.fromhex(data) tx = Transaction( ty=0x0, to=account, data=data, gas_limit=1_000_000, protected=True, sender=sender, value=100000, ) post = { account: Account( storage={ 0: 0x1 if output.call_succeeds else 0x0, 1: output.data_1, 2: output.data_2, } ) } state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Istanbul") @pytest.mark.parametrize("call_opcode", [Op.CALL, Op.CALLCODE]) @pytest.mark.parametrize("gas_limit", [90_000, 110_000, 200_000]) @pytest.mark.parametrize( ["data", "output"], [ pytest.param( b"", ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case1-data0-invalid-low-gas", ), pytest.param( Blake2bInput( rounds_length=3, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case1-data1-invalid-low-gas", ), pytest.param( Blake2bInput( rounds_length=5, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case1-data2-invalid-low-gas", ), pytest.param( Blake2bInput( f=2, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case1-data3-invalid-low-gas", ), pytest.param( Blake2bInput( rounds=8000000, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case1-data9-invalid-low-gas", ), pytest.param( "000c", ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case1-data10-invalid-low-gas", ), ], ) def test_blake2b_invalid_gas( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, blake2b_contract_bytecode: Bytecode, gas_limit: int, data: Blake2bInput | str | bytes, output: ExpectedOutput, ) -> None: """Test BLAKE2b precompile invalid calls using different gas limits.""" env = Environment() account = pre.deploy_contract(blake2b_contract_bytecode, storage={0: 0xDEADBEEF}) sender = pre.fund_eoa() if isinstance(data, Blake2bInput): data = data.create_blake2b_tx_data() elif isinstance(data, str): data = bytes.fromhex(data) tx = Transaction( ty=0x0, to=account, data=data, gas_limit=gas_limit, protected=True, sender=sender, value=0, ) post = { account: Account( storage={ 0: 0xDEADBEEF, 1: output.data_1, 2: output.data_2, }, nonce=0x1, ) } state_test(env=env, pre=pre, post=post, tx=tx) def max_tx_gas_limit(fork: Fork) -> int: """Maximum gas limit for a transaction (fork agnostic).""" tx_limit = fork.transaction_gas_limit_cap() if tx_limit is not None: return tx_limit return Environment().gas_limit def tx_gas_limits(fork: Fork) -> List[int]: """List of tx gas limits.""" return [max_tx_gas_limit(fork), 90_000, 110_000, 200_000] @pytest.mark.valid_from("Istanbul") @pytest.mark.parametrize("call_opcode", [Op.CALL, Op.CALLCODE]) @pytest.mark.parametrize_by_fork("gas_limit", tx_gas_limits) @pytest.mark.parametrize( ["data", "output"], [ pytest.param( Blake2bInput( rounds=0, ), ExpectedOutput( call_succeeds=True, data_1="0x08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5", data_2="0xd282e6ad7f520e511f6c3e2b8c68059b9442be0454267ce079217e1319cde05b", ), id="EIP-152-case3-data4-gas-limit", ), pytest.param( Blake2bInput(), ExpectedOutput( call_succeeds=True, data_1="0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1", data_2="0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", ), id="EIP-152-case4-data5-gas-limit", ), pytest.param( Blake2bInput( f=False, ), ExpectedOutput( call_succeeds=True, data_1="0x75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d28752", data_2="0x98743e7f6d5ea2f2d3e8d226039cd31b4e426ac4f2d3d666a610c2116fde4735", ), id="EIP-152-case5-data6-gas-limit", ), pytest.param( Blake2bInput( rounds=1, ), ExpectedOutput( call_succeeds=True, data_1="0xb63a380cb2897d521994a85234ee2c181b5f844d2c624c002677e9703449d2fb", data_2="0xa551b3a8333bcdf5f2f7e08993d53923de3d64fcc68c034e717b9293fed7a421", ), id="EIP-152-case6-data7-gas-limit", ), pytest.param( Blake2bInput( rounds=0, h="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", m="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", t_0=0, t_1=SpecTestVectors.BLAKE2_OFFSET_COUNTER_1, f=0, ), ExpectedOutput( call_succeeds=True, data_1="0x08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5", data_2="0xd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b", ), id="EIP-152-case7-data8-gas-limit", ), ], ) def test_blake2b_gas_limit( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, blake2b_contract_bytecode: Bytecode, gas_limit: int, data: Blake2bInput | str | bytes, output: ExpectedOutput, ) -> None: """Test BLAKE2b precompile with different gas limits.""" account = pre.deploy_contract(blake2b_contract_bytecode, storage={0: 0xDEADBEEF}) sender = pre.fund_eoa() if isinstance(data, Blake2bInput): data = data.create_blake2b_tx_data() elif isinstance(data, str): data = bytes.fromhex(data) tx = Transaction( ty=0x0, to=account, data=data, gas_limit=gas_limit, protected=True, sender=sender, value=0, ) post = { account: Account( storage={ 0: 0x1 if output.call_succeeds else 0x0, 1: output.data_1, 2: output.data_2, } ) } state_test( pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Istanbul") @pytest.mark.parametrize("call_opcode", [Op.CALL, Op.CALLCODE]) @pytest.mark.parametrize_by_fork("gas_limit", lambda fork: [max_tx_gas_limit(fork)]) @pytest.mark.parametrize( ["data", "output"], [ pytest.param( b"", ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case0-data0-large-gas-limit", ), pytest.param( Blake2bInput( rounds_length=3, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case2-data1-large-gas-limit", ), pytest.param( Blake2bInput( rounds_length=5, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case2-data2-large-gas-limit", ), pytest.param( Blake2bInput( f=2, ), ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case2-data3-large-gas-limit", ), pytest.param( Blake2bInput( rounds=100_000, ), ExpectedOutput( call_succeeds=True, data_1="0x165da71a32e91bca2623bfaeab079f7e6edfba2259028cc854ec497f9fb0fe75", data_2="0xd37f63034b83f4a0a07cd238483874862921ef0c40630826a76e41bf3b02ffe3", ), id="EIP-152-modified-case8-data9-large-gas-limit", ), pytest.param( Blake2bInput( rounds=8000000, ), ExpectedOutput( call_succeeds=True, data_1="0x6d2ce9e534d50e18ff866ae92d70cceba79bbcd14c63819fe48752c8aca87a4b", data_2="0xb7dcc230d22a4047f0486cfcfb50a17b24b2899eb8fca370f22240adb5170189", ), id="EIP-152-case8-data9-large-gas-limit", marks=pytest.mark.skip("Times-out during fill"), ), pytest.param( "000c", ExpectedOutput( call_succeeds=False, data_1="0x00", data_2="0x00", ), id="EIP-152-case9-data10-large-gas-limit", ), ], ) @pytest.mark.slow() def test_blake2b_large_gas_limit( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, gas_limit: int, blake2b_contract_bytecode: Bytecode, data: Blake2bInput | str | bytes, output: ExpectedOutput, ) -> None: """Test BLAKE2b precompile with large gas limit.""" account = pre.deploy_contract(blake2b_contract_bytecode, storage={0: 0xDEADBEEF}) sender = pre.fund_eoa() if isinstance(data, Blake2bInput): data = data.create_blake2b_tx_data() elif isinstance(data, str): data = bytes.fromhex(data) tx = Transaction( ty=0x0, to=account, data=data, gas_limit=gas_limit, protected=True, sender=sender, value=0, ) post = { account: Account( storage={ 0: 0x1 if output.call_succeeds else 0x0, 1: output.data_1, 2: output.data_2, } ) } state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/istanbul/eip152_blake2/test_blake2_delegatecall.py ================================================ """ Test delegatecall to Blake2B Precompile before and after added. """ import pytest from ethereum_test_forks import Fork from ethereum_test_forks.forks.forks import Istanbul from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec REFERENCE_SPEC_GIT_PATH = "EIPS/eip-152.md" REFERENCE_SPEC_VERSION = "2762bfcff3e549ef263342e5239ef03ac2b07400" @pytest.mark.valid_from("ConstantinopleFix") def test_blake2_precompile_delegatecall( state_test: StateTestFiller, pre: Alloc, fork: Fork ) -> None: """ Test delegatecall consumes specified gas for the Blake2B precompile when it exists. """ env = Environment() account = pre.deploy_contract( Op.SSTORE( 0, Op.DELEGATECALL( gas=1, address=Spec.BLAKE2_PRECOMPILE_ADDRESS, ), ) + Op.STOP, storage={0: 0xDEADBEEF}, ) tx = Transaction( to=account, sender=pre.fund_eoa(), gas_limit=90_000, protected=True, ) # If precompile exists, DELEGATECALL will fail, otherwise DELEGATECALL will # succeed post = { account: Account( storage={ 0: "0x00" if fork >= Istanbul else "0x01", } ) } state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/osaka/__init__.py ================================================ """ Test cases for EVM functionality introduced in Osaka, [EIP-7607: Hardfork Meta - Fusaka](https://eip.directory/eips/eip-7607). """ ================================================ FILE: tests/osaka/eip7594_peerdas/__init__.py ================================================ """ Test suite for [EIP-7594: PeerDAS - Peer Data Availability Sampling](https://eips.ethereum.org/EIPS/eip-7594). """ ================================================ FILE: tests/osaka/eip7594_peerdas/spec.py ================================================ """Defines EIP-7594 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7594 = ReferenceSpec("EIPS/eip-7594.md", "45d03a84a8ad0160ed3fb03af52c49bd39e802ba") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7594 specifications as defined at https://eips.ethereum.org/EIPS/eip-7594. """ MAX_BLOBS_PER_TX = 6 BLOB_COMMITMENT_VERSION_KZG = 1 ================================================ FILE: tests/osaka/eip7594_peerdas/test_get_blobs.py ================================================ """ Get blobs engine endpoint tests. Tests for get blobs engine endpoint in [EIP-7594: PeerDAS - Peer Data Availability Sampling](https://eips.ethereum.org/EIPS/eip-7594). """ from hashlib import sha256 from typing import List, Optional import pytest from ethereum_test_base_types.base_types import Hash from ethereum_test_forks import Fork from ethereum_test_tools import ( Address, Alloc, Blob, BlobsTestFiller, NetworkWrappedTransaction, Transaction, TransactionException, ) from pytest_plugins.custom_logging import get_logger from .spec import ref_spec_7594 REFERENCE_SPEC_GIT_PATH = ref_spec_7594.git_path REFERENCE_SPEC_VERSION = ref_spec_7594.version logger = get_logger(__name__) @pytest.fixture def destination_account(pre: Alloc) -> Address: """Destination account for the blob transactions.""" return pre.fund_eoa(amount=0) @pytest.fixture def tx_value() -> int: """ Value contained by the transactions sent during test. Can be overloaded by a test case to provide a custom transaction value. """ return 1 @pytest.fixture def tx_gas() -> int: """Gas allocated to transactions sent during test.""" return 21_000 @pytest.fixture def block_base_fee_per_gas() -> int: """Return default max fee per gas for transactions sent during test.""" return 7 @pytest.fixture def tx_calldata() -> bytes: """Calldata in transactions sent during test.""" return b"" @pytest.fixture(autouse=True) def parent_excess_blobs() -> int: """ Excess blobs of the parent block. Can be overloaded by a test case to provide a custom parent excess blob count. """ return 10 # Defaults to a blob gas price of 1. @pytest.fixture(autouse=True) def parent_blobs() -> int: """ Blobs of the parent blob. Can be overloaded by a test case to provide a custom parent blob count. """ return 0 @pytest.fixture def excess_blob_gas( fork: Fork, parent_excess_blobs: int | None, parent_blobs: int | None, block_base_fee_per_gas: int, ) -> int | None: """ Calculate the excess blob gas of the block under test from the parent block. Value can be overloaded by a test case to provide a custom excess blob gas. """ if parent_excess_blobs is None or parent_blobs is None: return None excess_blob_gas = fork.excess_blob_gas_calculator() return excess_blob_gas( parent_excess_blobs=parent_excess_blobs, parent_blob_count=parent_blobs, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def blob_gas_price( fork: Fork, excess_blob_gas: int | None, ) -> int | None: """Return blob gas price for the block of the test.""" if excess_blob_gas is None: return None get_blob_gas_price = fork.blob_gas_price_calculator() return get_blob_gas_price( excess_blob_gas=excess_blob_gas, ) @pytest.fixture def txs_versioned_hashes(txs_blobs: List[List[Blob]]) -> List[List[bytes]]: """List of blob versioned hashes derived from the blobs.""" return [[blob.versioned_hash for blob in blob_tx] for blob_tx in txs_blobs] @pytest.fixture def tx_max_fee_per_blob_gas( # noqa: D103 blob_gas_price: Optional[int], ) -> int: """ Max fee per blob gas for transactions sent during test. By default, it is set to the blob gas price of the block. Can be overloaded by a test case to test rejection of transactions where the max fee per blob gas is insufficient. """ if blob_gas_price is None: # When fork transitioning, the default blob gas price is 1. return 1 return blob_gas_price @pytest.fixture def tx_error() -> Optional[TransactionException]: """ Even though the final block we are producing in each of these tests is invalid, and some of the transactions will be invalid due to the format in the final block, none of the transactions should be rejected by the transition tool because they are being sent to it with the correct format. """ return None @pytest.fixture(autouse=True) def txs( # noqa: D103 pre: Alloc, destination_account: Optional[Address], tx_gas: int, tx_value: int, tx_calldata: bytes, tx_max_fee_per_blob_gas: int, txs_versioned_hashes: List[List[bytes]], tx_error: Optional[TransactionException], txs_blobs: List[List[Blob]], fork: Fork, ) -> List[NetworkWrappedTransaction | Transaction]: """Prepare the list of transactions that are sent during the test.""" if len(txs_blobs) != len(txs_versioned_hashes): raise ValueError("txs_blobs and txs_versioned_hashes should have the same length") txs: List[NetworkWrappedTransaction | Transaction] = [] for tx_blobs, tx_versioned_hashes in zip(txs_blobs, txs_versioned_hashes, strict=False): tx = Transaction( # type=3, sender=pre.fund_eoa(), to=destination_account, value=tx_value, gas_limit=tx_gas, data=tx_calldata, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=[], blob_versioned_hashes=tx_versioned_hashes, error=tx_error, ) network_wrapped_tx = NetworkWrappedTransaction( tx=tx, blob_objects=tx_blobs, wrapper_version=fork.full_blob_tx_wrapper_version(), ) txs.append(network_wrapped_tx) return txs def generate_valid_blob_tests( fork: Fork, ) -> List: """ Return a list of the 8 most important tests for valid blob transactions parametrized for each different fork. """ max_blobs_per_block = fork.max_blobs_per_block() max_blobs_per_tx = fork.max_blobs_per_tx() target_blobs_per_block = fork.target_blobs_per_block() logger.debug(f"MAX_BLOBS_PER_BLOCK value for fork {fork}: {max_blobs_per_block}") logger.debug(f"MAX_BLOBS_PER_TX value for fork {fork}: {max_blobs_per_tx}") logger.debug(f"TARGET_BLOBS_PER_BLOCK value for fork {fork}: {target_blobs_per_block}") # Calculate ascending pattern that fits within target_blobs_per_block ascending_txs = [] total_blobs = 0 blob_offset = 0 for tx_size in range(1, max_blobs_per_tx + 1): if total_blobs + tx_size <= target_blobs_per_block: ascending_txs.append([Blob.from_fork(fork, blob_offset + j) for j in range(tx_size)]) total_blobs += tx_size blob_offset += tx_size else: break return [ # Basic single blob transaction pytest.param( [ # Txs [ # Blobs per transaction Blob.from_fork(fork), ] ], id="single_blob_transaction", ), # Max blobs per transaction (single tx with max blobs) pytest.param( [[Blob.from_fork(fork, s) for s in range(max_blobs_per_tx)]], id="max_blobs_per_tx", ), # Max blobs per block distributed across multiple txs pytest.param( [ [ Blob.from_fork(fork, s), ] for s in range(max_blobs_per_block) ], id="max_blobs_per_block", ), # Target blobs per block distributed across multiple txs pytest.param( [ [ Blob.from_fork(fork, s), ] for s in range(target_blobs_per_block) ], id="target_blobs_per_block", ), # Two transactions with equal blob distribution pytest.param( [ [Blob.from_fork(fork, s) for s in range(target_blobs_per_block // 2)], [ Blob.from_fork(fork, s + target_blobs_per_block // 2) for s in range(target_blobs_per_block // 2) ], ], id="two_tx_equal_blobs", ), # Three transactions with equal blob distribution pytest.param( [ [Blob.from_fork(fork, s) for s in range(target_blobs_per_block // 3)], [ Blob.from_fork(fork, s + target_blobs_per_block // 3) for s in range(target_blobs_per_block // 3) ], [ Blob.from_fork(fork, s + 2 * (target_blobs_per_block // 3)) for s in range(target_blobs_per_block // 3) ], ], id="three_tx_equal_blobs", ), # Mixed distribution: one max tx + remaining as singles pytest.param( [ # Txs [ # First tx with max blobs Blob.from_fork(fork, s) for s in range(max_blobs_per_tx) ] ] + [ [ # Remaining txs with 1 blob each Blob.from_fork(fork, max_blobs_per_tx + s), ] for s in range(max_blobs_per_block - max_blobs_per_tx) ], id="mixed_max_tx_plus_singles", ), # Ascending pattern: 1, 2, 3... blobs per tx pytest.param( ascending_txs, id="ascending_blob_pattern", ), ] @pytest.mark.parametrize_by_fork( "txs_blobs", generate_valid_blob_tests, ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_get_blobs( blobs_test: BlobsTestFiller, pre: Alloc, txs: List[NetworkWrappedTransaction | Transaction], ) -> None: """ Test valid blob combinations where one or more txs in the block serialized version contain a full blob (network version) tx. """ blobs_test(pre=pre, txs=txs) @pytest.mark.parametrize_by_fork( "txs_blobs", generate_valid_blob_tests, ) @pytest.mark.exception_test @pytest.mark.valid_from("Cancun") def test_get_blobs_nonexisting( blobs_test: BlobsTestFiller, pre: Alloc, txs: List[NetworkWrappedTransaction | Transaction], ) -> None: """ Test that ensures clients respond with 'null' when at least one requested blob is not available. """ nonexisting_blob_hashes = [Hash(sha256(str(i).encode()).digest()) for i in range(5)] blobs_test(pre=pre, txs=txs, nonexisting_blob_hashes=nonexisting_blob_hashes) ================================================ FILE: tests/osaka/eip7594_peerdas/test_max_blob_per_tx.py ================================================ """ MAX_BLOBS_PER_TX limit tests. Tests for `MAX_BLOBS_PER_TX` limit in [EIP-7594: PeerDAS - Peer Data Availability Sampling](https://eips.ethereum.org/EIPS/eip-7594). """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Address, Alloc, Block, BlockchainTestFiller, Environment, Hash, StateTestFiller, Transaction, TransactionException, add_kzg_version, ) from .spec import Spec, ref_spec_7594 REFERENCE_SPEC_GIT_PATH = ref_spec_7594.git_path REFERENCE_SPEC_VERSION = ref_spec_7594.version FORK_TIMESTAMP = 15_000 @pytest.fixture def env() -> Environment: """Environment fixture.""" return Environment() @pytest.fixture def sender(pre: Alloc) -> Address: """Sender account with sufficient balance for blob transactions.""" return pre.fund_eoa(amount=10**18) @pytest.fixture def destination(pre: Alloc) -> Address: """Destination account for blob transactions.""" return pre.fund_eoa(amount=0) @pytest.fixture def blob_gas_price(fork: Fork) -> int: """Blob gas price for transactions.""" return fork.min_base_fee_per_blob_gas() @pytest.fixture def tx( sender: Address, destination: Address, blob_gas_price: int, blob_count: int, ) -> Transaction: """Blob transaction fixture.""" return Transaction( ty=3, sender=sender, to=destination, value=1, gas_limit=21_000, max_fee_per_gas=10, max_priority_fee_per_gas=1, max_fee_per_blob_gas=blob_gas_price, access_list=[], blob_versioned_hashes=add_kzg_version( [Hash(i) for i in range(0, blob_count)], Spec.BLOB_COMMITMENT_VERSION_KZG, ), ) @pytest.mark.parametrize_by_fork( "blob_count", lambda fork: list(range(1, fork.max_blobs_per_tx() + 1)), ) @pytest.mark.valid_from("Osaka") def test_valid_max_blobs_per_tx( state_test: StateTestFiller, pre: Alloc, env: Environment, tx: Transaction, ) -> None: """ Test that transactions with blob count from 1 to MAX_BLOBS_PER_TX are accepted. Verifies that individual transactions can contain up to the maximum allowed number of blobs per transaction. """ state_test( env=env, pre=pre, tx=tx, post={}, ) @pytest.mark.parametrize_by_fork( "blob_count", lambda fork: [ fork.max_blobs_per_tx() + 1, fork.max_blobs_per_tx() + 2, fork.max_blobs_per_block(), fork.max_blobs_per_block() + 1, ], ) @pytest.mark.valid_from("Osaka") @pytest.mark.exception_test def test_invalid_max_blobs_per_tx( fork: Fork, state_test: StateTestFiller, pre: Alloc, env: Environment, tx: Transaction, blob_count: int, ) -> None: """ Test that transactions exceeding MAX_BLOBS_PER_TX are rejected. Verifies that individual transactions cannot contain more than the maximum allowed number of blobs per transaction, even if the total would be within the block limit. """ state_test( env=env, pre=pre, tx=tx.with_error( TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED if blob_count > fork.max_blobs_per_block() else TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED ), post={}, ) @pytest.mark.parametrize_by_fork( "blob_count", lambda fork: [ fork.max_blobs_per_tx(timestamp=FORK_TIMESTAMP) + 1, fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP) + 1, ], ) @pytest.mark.valid_at_transition_to("Osaka") @pytest.mark.exception_test def test_max_blobs_per_tx_fork_transition( fork: Fork, blockchain_test: BlockchainTestFiller, env: Environment, pre: Alloc, tx: Transaction, blob_count: int, ) -> None: """Test `MAX_BLOBS_PER_TX` limit enforcement across fork transition.""" expected_exception = ( TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED if blob_count > fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP) else TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED ) pre_fork_block = Block( txs=[ tx if blob_count < fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP - 1) else tx.with_error(expected_exception) ], timestamp=FORK_TIMESTAMP - 1, exception=None if blob_count < fork.max_blobs_per_block(timestamp=FORK_TIMESTAMP - 1) else [expected_exception], ) fork_block = Block( txs=[tx.with_nonce(1).with_error(expected_exception)], timestamp=FORK_TIMESTAMP, exception=[expected_exception], ) post_fork_block = Block( txs=[tx.with_nonce(1).with_error(expected_exception)], timestamp=FORK_TIMESTAMP + 1, exception=[expected_exception], ) blockchain_test( pre=pre, post={}, blocks=[pre_fork_block, fork_block, post_fork_block], genesis_environment=env, ) ================================================ FILE: tests/osaka/eip7823_modexp_upper_bounds/__init__.py ================================================ """ Tests [EIP-7823: Set upper bounds for MODEXP](https://eips.ethereum.org/EIPS/eip-7823). Test cases for EIP-7823: Set upper bounds for MODEXP. """ ================================================ FILE: tests/osaka/eip7823_modexp_upper_bounds/conftest.py ================================================ """Conftest for EIP-7823 tests.""" from typing import Dict import pytest from ethereum_test_forks import Fork, Osaka from ethereum_test_tools import Account, Address, Alloc, Storage, Transaction, keccak256 from ethereum_test_types import Environment from ethereum_test_vm import Opcodes as Op from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput from ..eip7883_modexp_gas_increase.spec import Spec, Spec7883 @pytest.fixture def call_contract_post_storage() -> Storage: """ Storage of the test contract after the transaction is executed. Note: Fixture `call_contract_code` fills the actual expected storage values. """ return Storage() @pytest.fixture def call_succeeds( total_gas_used: int, fork: Fork, env: Environment, modexp_input: ModExpInput ) -> bool: """ By default, depending on the expected output, we can deduce if the call is expected to succeed or fail. """ # Transaction gas limit exceeded tx_gas_limit_cap = fork.transaction_gas_limit_cap() or env.gas_limit if total_gas_used > tx_gas_limit_cap: return False # Input length exceeded base_length, exp_length, mod_length = modexp_input.get_declared_lengths() if ( base_length > Spec.MAX_LENGTH_BYTES or exp_length > Spec.MAX_LENGTH_BYTES or mod_length > Spec.MAX_LENGTH_BYTES ) and fork >= Osaka: return False return True @pytest.fixture def gas_measure_contract( pre: Alloc, fork: Fork, modexp_expected: bytes, precompile_gas: int, call_contract_post_storage: Storage, call_succeeds: bool, ) -> Address: """ Deploys a contract that measures ModExp gas consumption and execution result. Always stored: storage[0]: precompile call success storage[1]: return data length from precompile Only if the precompile call succeeds: storage[2]: gas consumed by precompile storage[3]: hash of return data from precompile """ call_code = Op.CALL( precompile_gas, Spec.MODEXP_ADDRESS, 0, 0, Op.CALLDATASIZE(), 0, 0, ) gas_costs = fork.gas_costs() extra_gas = ( gas_costs.G_WARM_ACCOUNT_ACCESS + (gas_costs.G_VERY_LOW * (len(Op.CALL.kwargs) - 1)) + gas_costs.G_BASE # CALLDATASIZE + gas_costs.G_BASE # GAS ) # Build the gas measurement contract code # Stack operations: # [gas_start] # [gas_start, call_result] # [gas_start, call_result, gas_end] # [gas_start, gas_end, call_result] call_result_measurement = Op.GAS + call_code + Op.GAS + Op.SWAP1 # Calculate gas consumed: gas_start - (gas_end + extra_gas) # Stack Operation: # [gas_start, gas_end] # [gas_start, gas_end, extra_gas] # [gas_start, gas_end + extra_gas] # [gas_end + extra_gas, gas_start] # [gas_consumed] gas_calculation = Op.PUSH2[extra_gas] + Op.ADD + Op.SWAP1 + Op.SUB code = ( Op.CALLDATACOPY(dest_offset=0, offset=0, size=Op.CALLDATASIZE) + Op.SSTORE(call_contract_post_storage.store_next(call_succeeds), call_result_measurement) + Op.SSTORE( call_contract_post_storage.store_next(len(modexp_expected) if call_succeeds else 0), Op.RETURNDATASIZE(), ) ) if call_succeeds: code += Op.SSTORE(call_contract_post_storage.store_next(precompile_gas), gas_calculation) code += Op.RETURNDATACOPY(dest_offset=0, offset=0, size=Op.RETURNDATASIZE()) code += Op.SSTORE( call_contract_post_storage.store_next(keccak256(bytes(modexp_expected))), Op.SHA3(0, Op.RETURNDATASIZE()), ) return pre.deploy_contract(code) @pytest.fixture def precompile_gas(fork: Fork, modexp_input: ModExpInput) -> int: """ Calculate gas cost for the ModExp precompile and verify it matches expected gas. """ spec = Spec if fork < Osaka else Spec7883 try: calculated_gas = spec.calculate_gas_cost(modexp_input) return calculated_gas except Exception: # Used for `test_modexp_invalid_inputs` we expect the call to not # succeed. Return is for completeness. return 500 if fork >= Osaka else 200 @pytest.fixture def tx( pre: Alloc, gas_measure_contract: Address, modexp_input: ModExpInput, tx_gas_limit: int, ) -> Transaction: """Transaction to measure gas consumption of the ModExp precompile.""" return Transaction( sender=pre.fund_eoa(), to=gas_measure_contract, data=bytes(modexp_input), gas_limit=tx_gas_limit, ) @pytest.fixture def total_gas_used( fork: Fork, modexp_expected: bytes, modexp_input: ModExpInput, precompile_gas: int ) -> int: """ Transaction gas limit used for the test (Can be overridden in the test). """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() extra_gas = 500_000 total_gas = ( extra_gas + intrinsic_gas_cost_calculator(calldata=bytes(modexp_input)) + memory_expansion_gas_calculator(new_bytes=len(bytes(modexp_input))) + precompile_gas ) return total_gas @pytest.fixture def tx_gas_limit(total_gas_used: int, fork: Fork, env: Environment) -> int: """ Transaction gas limit used for the test (Can be overridden in the test). """ tx_gas_limit_cap = fork.transaction_gas_limit_cap() or env.gas_limit return min(tx_gas_limit_cap, total_gas_used) @pytest.fixture def post( gas_measure_contract: Address, call_contract_post_storage: Storage, ) -> Dict[Address, Account]: """Return expected post state with gas consumption check.""" return { gas_measure_contract: Account(storage=call_contract_post_storage), } ================================================ FILE: tests/osaka/eip7823_modexp_upper_bounds/eip_checklist_external_coverage.txt ================================================ precompile/test/call_contexts/set_code = Covered in EIP-7702 cases precompile/test/call_contexts/normal = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/delegate = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/static = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/callcode = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/tx_entry = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/initcode/CREATE = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/initcode/tx = Covered in osaka/eip7883_modexp_gas_increase precompile/test/call_contexts/set_code = Covered in osaka/eip7883_modexp_gas_increase precompile/test/inputs/valid = Covered in osaka/eip7883_modexp_gas_increase precompile/test/inputs/valid/boundary = Covered in osaka/eip7883_modexp_gas_increase precompile/test/inputs/all_zeros = Covered in osaka/eip7883_modexp_gas_increase precompile/test/inputs/invalid = Covered in osaka/eip7883_modexp_gas_increase precompile/test/inputs/invalid/crypto = Covered in osaka/eip7883_modexp_gas_increase precompile/test/inputs/invalid/corrupted = Covered in osaka/eip7883_modexp_gas_increase precompile/test/value_transfer/no_fee = Covered in osaka/eip7883_modexp_gas_increase precompile/test/out_of_bounds/max_plus_one = Covered in osaka/eip7883_modexp_gas_increase precompile/test/input_lengths/zero = Covered in osaka/eip7883_modexp_gas_increase precompile/test/input_lengths/dynamic/valid = Covered in osaka/eip7883_modexp_gas_increase precompile/test/input_lengths/dynamic/too_long = Covered in osaka/eip7883_modexp_gas_increase precompile/test/gas_usage/dynamic/exact = Covered in osaka/eip7883_modexp_gas_increase precompile/test/gas_usage/dynamic/oog = Covered in osaka/eip7883_modexp_gas_increase precompile/test/excessive_gas_usage = Covered in osaka/eip7883_modexp_gas_increase precompile/test/fork_transition/after/warm = Covered in osaka/eip7883_modexp_gas_increase gas_cost_changes/test/gas_updates_measurement = Covered in osaka/eip7883_modexp_gas_increase gas_cost_changes/test/fork_transition/before = Covered in osaka/eip7883_modexp_gas_increase gas_cost_changes/test/fork_transition/after = Covered in osaka/eip7883_modexp_gas_increase ================================================ FILE: tests/osaka/eip7823_modexp_upper_bounds/eip_checklist_not_applicable.txt ================================================ precompile/test/value_transfer/fee/under = No value is required precompile/test/value_transfer/fee/exact = No value is required precompile/test/value_transfer/fee/over = No value is required precompile/test/input_lengths/static/correct = The Modexp input length is not static precompile/test/input_lengths/static/too_short = The Modexp input length is not static precompile/test/input_lengths/static/too_long = The Modexp input length is not static precompile/test/input_lengths/dynamic/too_short = there would be no padding for precompile precompile/test/gas_usage/constant/oog = The Modexp gas cost is dynamic precompile/test/gas_usage/constant/exact = The Modexp gas cost is dynamic precompile/test/fork_transition/before/invalid_input = Modexp is not new precompile, it is still valid befork fork activation precompile/test/fork_transition/before/zero_gas = Modexp is not new precompile, it is still valid befork fork activation precompile/test/fork_transition/before/cold = Modexp is not new precompile, it is still valid befork fork activation gas_cost_changes/test/out_of_gas = No Out-of-gas scenario in Modexp system_contract = EIP does not include a new system contract opcode = EIP does not introduce a new opcode removed_precompile = EIP does not remove a precompile transaction_type = EIP does not introduce a new transaction type block_header_field = EIP does not add any new block header fields gas_refunds_changes = EIP does not introduce any gas refund changes blob_count_changes = EIP does not introduce any blob count changes execution_layer_request = EIP does not introduce an execution layer request new_transaction_validity_constraint = EIP does not introduce a new transaction validity constraint modified_transaction_validity_constraint = EIP does not introduce a modified transaction validity constraint block_body_field = EIP does not add any new block body fields ================================================ FILE: tests/osaka/eip7823_modexp_upper_bounds/spec.py ================================================ """Defines EIP-7823 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7823 = ReferenceSpec("EIPS/eip-7823.md", "c8321494fdfbfda52ad46c3515a7ca5dc86b857c") ================================================ FILE: tests/osaka/eip7823_modexp_upper_bounds/test_modexp_upper_bounds.py ================================================ """ Test [EIP-7823: Set upper bounds for MODEXP](https://eips.ethereum.org/EIPS/eip-7823). """ from typing import Dict import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Bytes, StateTestFiller, Transaction, keccak256, ) from ethereum_test_vm import Opcodes as Op from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput from ..eip7883_modexp_gas_increase.spec import Spec from .spec import ref_spec_7823 REFERENCE_SPEC_GIT_PATH = ref_spec_7823.git_path REFERENCE_SPEC_VERSION = ref_spec_7823.version @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize( "modexp_input,modexp_expected,call_succeeds", [ pytest.param( ModExpInput( base=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"\0", modulus=b"\2", ), Spec.modexp_error, False, id="excess_length_base", ), pytest.param( ModExpInput( base=b"\0", exponent=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"\2", ), Spec.modexp_error, False, id="excess_length_exponent", ), pytest.param( ModExpInput( base=b"\0", exponent=b"\0", modulus=b"\0" * (Spec.MAX_LENGTH_BYTES) + b"\2", ), Spec.modexp_error, False, id="excess_length_modulus", ), pytest.param( ModExpInput( base=b"", exponent=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"", ), Spec.modexp_error, False, id="exp_1025_base_0_mod_0", ), pytest.param( ModExpInput( base=b"", # Non-zero exponent is cancelled with zero multiplication # complexity pre EIP-7823. exponent=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"", ), Spec.modexp_error, False, id="expFF_1025_base_0_mod_0", ), pytest.param( ModExpInput( base=b"\0" * Spec.MAX_LENGTH_BYTES, exponent=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"", ), Spec.modexp_error, False, id="expFF_1025_base_1024_mod_0", ), pytest.param( ModExpInput( base=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"", ), Spec.modexp_error, False, id="expFF_1025_base_1025_mod_0", ), pytest.param( ModExpInput( base=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"", modulus=b"", ), Spec.modexp_error, False, id="exp_0_base_1025_mod_0", ), pytest.param( ModExpInput( base=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"", modulus=b"\2", ), Spec.modexp_error, False, id="exp_0_base_1025_mod_1", ), pytest.param( ModExpInput( base=b"", exponent=b"", modulus=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), ), Spec.modexp_error, False, id="exp_0_base_0_mod_1025", ), pytest.param( ModExpInput( base=b"\1", exponent=b"", modulus=b"\0" * (Spec.MAX_LENGTH_BYTES + 1), ), Spec.modexp_error, False, id="exp_0_base_1_mod_1025", ), pytest.param( ModExpInput( base=b"", exponent=Bytes("80"), modulus=b"", declared_exponent_length=2**64, ), Spec.modexp_error, False, id="exp_2_pow_64_base_0_mod_0", ), # Implementation coverage tests pytest.param( ModExpInput( base=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), ), Spec.modexp_error, False, id="all_exceed_check_ordering", ), pytest.param( ModExpInput( base=b"\x00" * Spec.MAX_LENGTH_BYTES, exponent=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), modulus=b"\xff" * (Spec.MAX_LENGTH_BYTES + 1), ), Spec.modexp_error, False, id="exp_mod_exceed_base_ok", ), pytest.param( ModExpInput( # Bitwise pattern for Nethermind optimization base=b"\xaa" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"\x55" * Spec.MAX_LENGTH_BYTES, modulus=b"\xff" * Spec.MAX_LENGTH_BYTES, ), Spec.modexp_error, False, id="bitwise_pattern_base_exceed", ), pytest.param( ModExpInput( base=b"", exponent=b"", modulus=b"", # Near max uint64 for revm conversion test declared_base_length=2**63 - 1, declared_exponent_length=1, declared_modulus_length=1, ), Spec.modexp_error, False, id="near_uint64_max_base", ), pytest.param( ModExpInput( base=b"\x01" * Spec.MAX_LENGTH_BYTES, exponent=b"", modulus=b"\x02" * (Spec.MAX_LENGTH_BYTES + 1), declared_exponent_length=0, ), Spec.modexp_error, False, id="zero_exp_mod_exceed", ), pytest.param( ModExpInput( base=b"\x01" * Spec.MAX_LENGTH_BYTES, exponent=b"\x00", modulus=b"\x02", ), b"\x01", True, id="base_boundary", ), pytest.param( ModExpInput( base=b"\x01", exponent=b"\x00" * Spec.MAX_LENGTH_BYTES, modulus=b"\x02", ), b"\x01", True, id="exp_boundary", ), pytest.param( ModExpInput( base=b"\x01", exponent=b"\x00", modulus=b"\x02" * Spec.MAX_LENGTH_BYTES, ), b"\x01".rjust(Spec.MAX_LENGTH_BYTES, b"\x00"), True, id="mod_boundary", ), pytest.param( ModExpInput( base=b"\x01" * Spec.MAX_LENGTH_BYTES, exponent=b"\x00", modulus=b"\x02" * Spec.MAX_LENGTH_BYTES, ), b"\x01".rjust(Spec.MAX_LENGTH_BYTES, b"\x00"), True, id="base_mod_boundary", ), ], ) @EIPChecklist.Precompile.Test.Inputs.MaxValues @EIPChecklist.Precompile.Test.OutOfBounds.Max def test_modexp_upper_bounds( state_test: StateTestFiller, modexp_input: ModExpInput, modexp_expected: bytes, precompile_gas: int, fork: Fork, tx: Transaction, post: Dict, pre: Alloc, ) -> None: """Test the MODEXP precompile input bounds.""" state_test(pre=pre, tx=tx, post=post) @pytest.mark.parametrize( "modexp_input,modexp_expected", [ pytest.param( ModExpInput( base=b"\1" * (Spec.MAX_LENGTH_BYTES + 1), exponent=b"\0", modulus=b"\2", ), b"\1", id="base_1_exp_0_mod_2", ), ], ) @pytest.mark.valid_at_transition_to("Osaka", subsequent_forks=True) def test_modexp_upper_bounds_fork_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, precompile_gas: int, modexp_input: ModExpInput, modexp_expected: bytes, ) -> None: """ Test MODEXP upper bounds enforcement transition from before to after Osaka hard fork. """ call_code = Op.CALL( address=Spec.MODEXP_ADDRESS, args_size=Op.CALLDATASIZE, ) code = ( Op.CALLDATACOPY(size=Op.CALLDATASIZE) + Op.SSTORE( Op.TIMESTAMP, call_code, ) + Op.RETURNDATACOPY(size=Op.RETURNDATASIZE()) + Op.SSTORE( Op.AND(Op.TIMESTAMP, 0xFF), Op.SHA3(0, Op.RETURNDATASIZE()), ) ) senders = [pre.fund_eoa() for _ in range(3)] contracts = [pre.deploy_contract(code) for _ in range(3)] timestamps = [14_999, 15_000, 15_001] # Before, at, and after transition expected_results = [True, False, False] blocks = [ Block( timestamp=ts, txs=[ Transaction( to=contract, data=bytes(modexp_input), sender=sender, gas_limit=6_000_000, ) ], ) for ts, contract, sender in zip(timestamps, contracts, senders, strict=False) ] post = { contract: Account( storage={ ts: expected, ts & 0xFF: keccak256(modexp_expected) if expected else keccak256(Spec.modexp_error), } ) for contract, ts, expected in zip(contracts, timestamps, expected_results, strict=False) } blockchain_test( pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/osaka/eip7825_transaction_gas_limit_cap/__init__.py ================================================ """ Tests [EIP-7825: Transaction Gas Limit Cap](https://eips.ethereum.org/EIPS/eip-7825). """ ================================================ FILE: tests/osaka/eip7825_transaction_gas_limit_cap/eip_checklist_external_coverage.txt ================================================ general/code_coverage/eels = Please check https://app.codecov.io/gh/ethereum/execution-specs/pull/1388/blob/src/ethereum/osaka/vm/instructions/bitwise.py#L243 for relevant test coverage general/code_coverage/test_coverage = Please run the test with `--cov` flag for final coverage ================================================ FILE: tests/osaka/eip7825_transaction_gas_limit_cap/eip_checklist_not_applicable.txt ================================================ system_contract = EIP does not introduce a new system contract opcode = EIP does not introduce a new opcode precompile = EIP does not introduce a new precompile removed_precompile = EIP does not remove a precompile transaction_type = EIP does not introduce a new transaction type block_header_field = EIP does not add any new block header fields block_body_field = EIP does not add any new block body fields gas_cost_changes = EIP does not modify existing gas costs, only introduces new opcode with fixed cost gas_refunds_changes = EIP does not introduce any gas refund changes blob_count_changes = EIP does not introduce any blob count changes execution_layer_request = EIP does not introduce an execution layer request new_transaction_validity_constraint = EIP does not introduce a new transaction validity constraint ================================================ FILE: tests/osaka/eip7825_transaction_gas_limit_cap/spec.py ================================================ """Defines EIP-7825 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str # EIP-7825 reference specification ref_spec_7825 = ReferenceSpec("EIPS/eip-7825.md", "1ed95cbac750539c2aac67c8cbbcc2d77974231c") @dataclass(frozen=True) class Spec: """ Constants and helpers for the EIP-7825 Transaction Gas Limit Cap tests. """ # Gas limit constants tx_gas_limit_cap = 2**24 # 16,777,216 # Blob transaction constants blob_commitment_version_kzg = 1 ================================================ FILE: tests/osaka/eip7825_transaction_gas_limit_cap/test_tx_gas_limit.py ================================================ """ Transaction gas limit cap tests. Tests for transaction gas limit cap in [EIP-7825: Transaction Gas Limit Cap](https://eips.ethereum.org/EIPS/eip-7825). """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Account, Address, Alloc, AuthorizationTuple, Block, BlockchainTestFiller, Bytecode, Environment, Hash, StateTestFiller, Storage, Transaction, TransactionException, add_kzg_version, ) from ethereum_test_tools.utility.pytest import ParameterSet from ethereum_test_vm import Opcodes as Op from .spec import Spec, ref_spec_7825 # Update reference spec constants REFERENCE_SPEC_GIT_PATH = ref_spec_7825.git_path REFERENCE_SPEC_VERSION = ref_spec_7825.version def tx_gas_limit_cap_tests(fork: Fork) -> List[ParameterSet]: """ Return a list of tests for transaction gas limit cap parametrized for each different fork. """ fork_tx_gas_limit_cap = fork.transaction_gas_limit_cap() if fork_tx_gas_limit_cap is None: # Use a default value for forks that don't have a transaction gas limit # cap return [ pytest.param(Spec.tx_gas_limit_cap + 1, None, id="tx_gas_limit_cap_none"), ] return [ pytest.param( fork_tx_gas_limit_cap + 1, TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM, id="tx_gas_limit_cap_exceeds_maximum", marks=pytest.mark.exception_test, ), pytest.param(fork_tx_gas_limit_cap, None, id="tx_gas_limit_cap_over"), ] @pytest.mark.parametrize_by_fork("tx_gas_limit,error", tx_gas_limit_cap_tests) @pytest.mark.with_all_tx_types @pytest.mark.valid_from("Prague") def test_transaction_gas_limit_cap( state_test: StateTestFiller, pre: Alloc, fork: Fork, tx_gas_limit: int, error: TransactionException | None, tx_type: int, ) -> None: """ Test the transaction gas limit cap behavior for all transaction types. """ env = Environment() sender = pre.fund_eoa() storage = Storage() contract_address = pre.deploy_contract( code=Op.SSTORE(storage.store_next(1), 1) + Op.STOP, ) tx_kwargs = { "ty": tx_type, "to": contract_address, "gas_limit": tx_gas_limit, "data": b"", "value": 0, "sender": sender, "error": error, } # Add extra required fields based on transaction type if tx_type >= 1: # Type 1: EIP-2930 Access List Transaction tx_kwargs["access_list"] = [ { "address": contract_address, "storage_keys": [0], } ] if tx_type == 3: # Type 3: EIP-4844 Blob Transaction tx_kwargs["max_fee_per_blob_gas"] = fork.min_base_fee_per_blob_gas() tx_kwargs["blob_versioned_hashes"] = add_kzg_version([0], Spec.blob_commitment_version_kzg) elif tx_type == 4: # Type 4: EIP-7702 Set Code Transaction signer = pre.fund_eoa(amount=0) tx_kwargs["authorization_list"] = [ AuthorizationTuple( signer=signer, address=Address(0), nonce=0, ) ] tx = Transaction(**tx_kwargs) post = {contract_address: Account(storage=storage if error is None else {})} state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "opcode", [ pytest.param(Op.CALL), pytest.param(Op.DELEGATECALL), pytest.param(Op.CALLCODE), pytest.param(Op.STATICCALL), ], ) @pytest.mark.valid_from("Osaka") def test_tx_gas_limit_cap_subcall_context( state_test: StateTestFiller, pre: Alloc, opcode: Op, fork: Fork, env: Environment ) -> None: """Test the transaction gas limit cap behavior for subcall context.""" tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" caller_address = pre.deploy_contract( code=Op.SSTORE( 0, opcode( gas=tx_gas_limit_cap + 1, address=pre.deploy_contract(code=Op.MSTORE(0, Op.GAS) + Op.RETURN(0, 0x20)), ret_offset=0, ret_size=0, ), ) ) # Passing tx limit cap as the gas parameter to *CALL operations # All tests should pass and the *CALL operations should succeed # Gas forwarded = min(remaining gas, specified gas parameter) tx = Transaction( to=caller_address, sender=pre.fund_eoa(), gas_limit=tx_gas_limit_cap, ) post = { caller_address: Account(storage={"0x00": 1}), } state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "exceed_block_gas_limit", [ pytest.param(True, marks=pytest.mark.exception_test), pytest.param(False), ], ) @pytest.mark.valid_from("Osaka") def test_tx_gas_larger_than_block_gas_limit( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, fork: Fork, exceed_block_gas_limit: bool, ) -> None: """ Test multiple transactions with total gas larger than the block gas limit. """ tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" tx_count = env.gas_limit // tx_gas_limit_cap gas_spender_contract = pre.deploy_contract(code=Op.INVALID) block = Block( txs=[ Transaction( to=gas_spender_contract, sender=pre.fund_eoa(), gas_limit=tx_gas_limit_cap, error=TransactionException.GAS_ALLOWANCE_EXCEEDED if i >= tx_count else None, ) for i in range(tx_count + int(exceed_block_gas_limit)) ], exception=TransactionException.GAS_ALLOWANCE_EXCEEDED if exceed_block_gas_limit else None, ) blockchain_test(pre=pre, post={}, blocks=[block]) @pytest.mark.parametrize( "exceed_gas_refund_limit", [ pytest.param(True), pytest.param(False), ], ) @pytest.mark.valid_from("Osaka") def test_maximum_gas_refund( state_test: StateTestFiller, pre: Alloc, fork: Fork, exceed_gas_refund_limit: bool, ) -> None: """Test the maximum gas refund behavior according to EIP-3529.""" gas_costs = fork.gas_costs() tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" max_refund_quotient = fork.max_refund_quotient() storage = Storage() # Base Operation: SSTORE(slot, 0) iteration_cost = gas_costs.G_STORAGE_RESET + gas_costs.G_BASE + gas_costs.G_VERY_LOW gas_refund = gas_costs.R_STORAGE_CLEAR # EIP-3529: Reduction in refunds storage_count = tx_gas_limit_cap // iteration_cost gas_used = storage_count * iteration_cost maximum_gas_refund = gas_used // max_refund_quotient gas_refund_count = maximum_gas_refund // gas_refund # Base case: operations that fit within the refund limit iteration_count = min(storage_count, gas_refund_count + int(exceed_gas_refund_limit)) assert iteration_cost * iteration_count <= tx_gas_limit_cap, ( "Iteration cost exceeds tx gas limit cap" ) opcode = sum( (Op.SSTORE(storage.store_next(0), Op.PUSH0) for _ in range(iteration_count)), Bytecode(), ) assert len(opcode) <= fork.max_code_size(), "code size exceeds max code size" contract = pre.deploy_contract( code=opcode, storage={Hash(i): Hash(1) for i in range(iteration_count)}, ) tx = Transaction( to=contract, sender=pre.fund_eoa(), gas_limit=tx_gas_limit_cap, ) post = {contract: Account(storage=storage)} state_test(pre=pre, post=post, tx=tx) @pytest.fixture def total_cost_floor_per_token(fork: Fork) -> int: """Total cost floor per token.""" gas_costs = fork.gas_costs() return gas_costs.G_TX_DATA_FLOOR_TOKEN_COST @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize( "exceed_tx_gas_limit,correct_intrinsic_cost_in_transaction_gas_limit", [ pytest.param(True, False, marks=pytest.mark.exception_test), pytest.param(True, True, marks=pytest.mark.exception_test), pytest.param(False, True), ], ) @pytest.mark.parametrize("zero_byte", [True, False]) @pytest.mark.valid_from("Osaka") def test_tx_gas_limit_cap_full_calldata( state_test: StateTestFiller, pre: Alloc, zero_byte: bool, total_cost_floor_per_token: int, exceed_tx_gas_limit: bool, correct_intrinsic_cost_in_transaction_gas_limit: bool, fork: Fork, ) -> None: """Test the transaction gas limit cap behavior for full calldata.""" intrinsic_cost = fork.transaction_intrinsic_cost_calculator() tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" gas_available = tx_gas_limit_cap - intrinsic_cost() max_tokens_in_calldata = gas_available // total_cost_floor_per_token num_of_bytes = max_tokens_in_calldata if zero_byte else max_tokens_in_calldata // 4 num_of_bytes += int(exceed_tx_gas_limit) # Gas cost calculation based on EIP-7623: # (https://eips.ethereum.org/EIPS/eip-7623) # # Simplified in this test case: # - No execution gas used (no opcodes are executed) # - Not a contract creation (no initcode) # # Token accounting: # tokens_in_calldata = zero_bytes + 4 * non_zero_bytes byte_data = b"\x00" if zero_byte else b"\xff" correct_intrinsic_cost = intrinsic_cost(calldata=byte_data * num_of_bytes) if exceed_tx_gas_limit: assert correct_intrinsic_cost > tx_gas_limit_cap, ( "Correct intrinsic cost should exceed the tx gas limit cap" ) else: assert correct_intrinsic_cost <= tx_gas_limit_cap, ( "Correct intrinsic cost should be less than or equal to the tx gas limit cap" ) tx_gas_limit = ( correct_intrinsic_cost if correct_intrinsic_cost_in_transaction_gas_limit else tx_gas_limit_cap ) tx = Transaction( to=pre.fund_eoa(), data=byte_data * num_of_bytes, gas_limit=tx_gas_limit, sender=pre.fund_eoa(), error=TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM if correct_intrinsic_cost_in_transaction_gas_limit and exceed_tx_gas_limit else TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST if exceed_tx_gas_limit else None, ) state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "exceed_tx_gas_limit", [ pytest.param(True), pytest.param(False), ], ) @pytest.mark.valid_from("Osaka") def test_tx_gas_limit_cap_contract_creation( state_test: StateTestFiller, pre: Alloc, total_cost_floor_per_token: int, exceed_tx_gas_limit: bool, fork: Fork, ) -> None: """Test the transaction gas limit cap behavior for contract creation.""" intrinsic_cost = fork.transaction_intrinsic_cost_calculator() tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" gas_available = tx_gas_limit_cap - intrinsic_cost(contract_creation=True) max_tokens_in_calldata = gas_available // total_cost_floor_per_token num_of_bytes = (max_tokens_in_calldata // 4) + int(exceed_tx_gas_limit) # Cannot exceed max contract code size num_of_bytes = min(num_of_bytes, fork.max_code_size()) code = Op.JUMPDEST * num_of_bytes # Craft a contract creation transaction that exceeds the transaction gas # limit cap # # Total cost = # intrinsic cost (base tx cost + contract creation cost) # + calldata cost + init code execution cost # # The contract body is filled with JUMPDEST instructions, so: # total cost = intrinsic cost + calldata cost + (num_of_jumpdest * 1 gas) # # If the total cost exceeds the tx limit cap, the transaction should fail total_cost = intrinsic_cost(contract_creation=True, calldata=code) + num_of_bytes tx = Transaction( to=None, data=code, gas_limit=tx_gas_limit_cap, sender=pre.fund_eoa(), error=TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST if total_cost > tx_gas_limit_cap else None, ) state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "exceed_tx_gas_limit,correct_intrinsic_cost_in_transaction_gas_limit", [ pytest.param(True, False, marks=pytest.mark.exception_test), pytest.param(True, True, marks=pytest.mark.exception_test), pytest.param(False, True), ], ) @pytest.mark.valid_from("Osaka") def test_tx_gas_limit_cap_access_list_with_diff_keys( state_test: StateTestFiller, exceed_tx_gas_limit: bool, correct_intrinsic_cost_in_transaction_gas_limit: bool, pre: Alloc, fork: Fork, ) -> None: """ Test the transaction gas limit cap behavior for access list with different storage keys. """ intrinsic_cost = fork.transaction_intrinsic_cost_calculator() tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" gas_available = tx_gas_limit_cap - intrinsic_cost() gas_costs = fork.gas_costs() gas_per_address = gas_costs.G_ACCESS_LIST_ADDRESS gas_per_storage_key = gas_costs.G_ACCESS_LIST_STORAGE gas_after_address = gas_available - gas_per_address num_storage_keys = gas_after_address // gas_per_storage_key + int(exceed_tx_gas_limit) access_address = Address("0x1234567890123456789012345678901234567890") storage_keys = [] for i in range(num_storage_keys): storage_keys.append(Hash(i)) access_list = [ AccessList( address=access_address, storage_keys=storage_keys, ) ] correct_intrinsic_cost = intrinsic_cost(access_list=access_list) if exceed_tx_gas_limit: assert correct_intrinsic_cost > tx_gas_limit_cap, ( "Correct intrinsic cost should exceed the tx gas limit cap" ) else: assert correct_intrinsic_cost <= tx_gas_limit_cap, ( "Correct intrinsic cost should be less than or equal to the tx gas limit cap" ) tx_gas_limit = ( correct_intrinsic_cost if correct_intrinsic_cost_in_transaction_gas_limit else tx_gas_limit_cap ) tx = Transaction( to=pre.fund_eoa(), gas_limit=tx_gas_limit, sender=pre.fund_eoa(), access_list=access_list, error=TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM if correct_intrinsic_cost_in_transaction_gas_limit and exceed_tx_gas_limit else TransactionException.INTRINSIC_GAS_TOO_LOW if exceed_tx_gas_limit else None, ) state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "exceed_tx_gas_limit,correct_intrinsic_cost_in_transaction_gas_limit", [ pytest.param(True, False, marks=pytest.mark.exception_test), pytest.param(True, True, marks=pytest.mark.exception_test), pytest.param(False, True), ], ) @pytest.mark.valid_from("Osaka") def test_tx_gas_limit_cap_access_list_with_diff_addr( state_test: StateTestFiller, pre: Alloc, fork: Fork, exceed_tx_gas_limit: bool, correct_intrinsic_cost_in_transaction_gas_limit: bool, ) -> None: """ Test the transaction gas limit cap behavior for access list with different addresses. """ intrinsic_cost = fork.transaction_intrinsic_cost_calculator() tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" gas_available = tx_gas_limit_cap - intrinsic_cost() gas_costs = fork.gas_costs() gas_per_address = gas_costs.G_ACCESS_LIST_ADDRESS gas_per_storage_key = gas_costs.G_ACCESS_LIST_STORAGE account_num = gas_available // (gas_per_address + gas_per_storage_key) + int( exceed_tx_gas_limit ) access_list = [ AccessList( address=pre.fund_eoa(), storage_keys=[Hash(i)], ) for i in range(account_num) ] correct_intrinsic_cost = intrinsic_cost(access_list=access_list) if exceed_tx_gas_limit: assert correct_intrinsic_cost > tx_gas_limit_cap, ( "Correct intrinsic cost should exceed the tx gas limit cap" ) else: assert correct_intrinsic_cost <= tx_gas_limit_cap, ( "Correct intrinsic cost should be less than or equal to the tx gas limit cap" ) tx_gas_limit = ( correct_intrinsic_cost if correct_intrinsic_cost_in_transaction_gas_limit else tx_gas_limit_cap ) tx = Transaction( to=pre.fund_eoa(), gas_limit=tx_gas_limit, sender=pre.fund_eoa(), access_list=access_list, error=TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM if correct_intrinsic_cost_in_transaction_gas_limit and exceed_tx_gas_limit else TransactionException.INTRINSIC_GAS_TOO_LOW if exceed_tx_gas_limit else None, ) state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "exceed_tx_gas_limit,correct_intrinsic_cost_in_transaction_gas_limit", [ pytest.param(True, False, marks=pytest.mark.exception_test), pytest.param(True, True, marks=pytest.mark.exception_test), pytest.param(False, True), ], ) @pytest.mark.valid_from("Osaka") def test_tx_gas_limit_cap_authorized_tx( state_test: StateTestFiller, pre: Alloc, fork: Fork, exceed_tx_gas_limit: bool, correct_intrinsic_cost_in_transaction_gas_limit: bool, ) -> None: """Test a transaction limit cap with authorized tx.""" intrinsic_cost = fork.transaction_intrinsic_cost_calculator() tx_gas_limit_cap = fork.transaction_gas_limit_cap() assert tx_gas_limit_cap is not None, "Fork does not have a transaction gas limit cap" gas_available = tx_gas_limit_cap - intrinsic_cost() gas_costs = fork.gas_costs() gas_per_address = gas_costs.G_ACCESS_LIST_ADDRESS per_empty_account_cost = 25_000 auth_list_length = gas_available // (gas_per_address + per_empty_account_cost) + int( exceed_tx_gas_limit ) # EIP-7702 authorization transaction cost: # 21000 + 16 * non-zero calldata bytes + 4 * zero calldata bytes + 1900 * # access list storage key count + 2400 * access list address count + # PER_EMPTY_ACCOUNT_COST * authorization list length # # There is no calldata and no storage keys in this test case and the access # address list count is equal to the authorization list length # # total cost = 21000 + (2400 + 25_000) * auth_list_length auth_address = pre.deploy_contract(code=Op.STOP) auth_signers = [pre.fund_eoa() for _ in range(auth_list_length)] access_list = [ AccessList( address=addr, storage_keys=[], ) for addr in auth_signers ] auth_tuples = [ AuthorizationTuple( signer=signer, address=auth_address, nonce=signer.nonce, ) for signer in auth_signers ] correct_intrinsic_cost = intrinsic_cost( access_list=access_list, authorization_list_or_count=auth_list_length ) if exceed_tx_gas_limit: assert correct_intrinsic_cost > tx_gas_limit_cap, ( "Correct intrinsic cost should exceed the tx gas limit cap" ) else: assert correct_intrinsic_cost <= tx_gas_limit_cap, ( "Correct intrinsic cost should be less than or equal to the tx gas limit cap" ) tx_gas_limit = ( correct_intrinsic_cost if correct_intrinsic_cost_in_transaction_gas_limit else tx_gas_limit_cap ) tx = Transaction( to=pre.fund_eoa(), gas_limit=tx_gas_limit, sender=pre.fund_eoa(), access_list=access_list, authorization_list=auth_tuples, error=TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM if correct_intrinsic_cost_in_transaction_gas_limit and exceed_tx_gas_limit else TransactionException.INTRINSIC_GAS_TOO_LOW if exceed_tx_gas_limit else None, ) state_test( pre=pre, post={}, tx=tx, ) ================================================ FILE: tests/osaka/eip7825_transaction_gas_limit_cap/test_tx_gas_limit_transition_fork.py ================================================ """ Transaction gas limit cap fork transition tests. Tests for fork transition behavior in [EIP-7825: Transaction Gas Limit Cap](https://eips.ethereum.org/EIPS/eip-7825). """ import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Transaction, TransactionException, ) from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_7825 REFERENCE_SPEC_GIT_PATH = ref_spec_7825.git_path REFERENCE_SPEC_VERSION = ref_spec_7825.version @EIPChecklist.ModifiedTransactionValidityConstraint.Test.ForkTransition.AcceptedBeforeFork() @EIPChecklist.ModifiedTransactionValidityConstraint.Test.ForkTransition.RejectedBeforeFork() @EIPChecklist.ModifiedTransactionValidityConstraint.Test.ForkTransition.AcceptedAfterFork() @EIPChecklist.ModifiedTransactionValidityConstraint.Test.ForkTransition.RejectedAfterFork() @pytest.mark.valid_at_transition_to("Osaka", subsequent_forks=True) @pytest.mark.parametrize( "transaction_at_cap", [ pytest.param(True, id="at_cap"), pytest.param(False, marks=pytest.mark.exception_test, id="above_cap"), ], ) def test_transaction_gas_limit_cap_at_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, transaction_at_cap: bool, ) -> None: """ Test transaction gas limit cap behavior at the Osaka transition. Before timestamp 15000: No gas limit cap (transactions with gas > 2^24 are valid) At/after timestamp 15000: Gas limit cap of 2^24 is enforced """ contract_address = pre.deploy_contract( code=Op.SSTORE(Op.TIMESTAMP, Op.ADD(Op.SLOAD(Op.TIMESTAMP), 1)) + Op.STOP, ) # Get the gas limit cap at fork activation tx_gas_cap = fork.transaction_gas_limit_cap(timestamp=15_000) assert tx_gas_cap is not None, "Gas limit cap should not be None after fork activation" # Test boundary: cap + 1 should fail after fork activation above_cap = tx_gas_cap + 1 # Before fork activation: both cap and above_cap transactions should # succeed at_cap_tx_before_fork = Transaction( ty=0, # Legacy transaction to=contract_address, gas_limit=tx_gas_cap, sender=pre.fund_eoa(), ) above_cap_tx_before_fork = Transaction( ty=0, # Legacy transaction to=contract_address, gas_limit=above_cap, sender=pre.fund_eoa(), ) post_cap_tx_error = TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM # After fork activation: test at cap vs above cap transition_tx = Transaction( ty=0, # Legacy transaction to=contract_address, gas_limit=tx_gas_cap if transaction_at_cap else above_cap, sender=pre.fund_eoa(), error=None if transaction_at_cap else post_cap_tx_error, ) blocks = [] # Before transition (timestamp < 15000): both cap and above_cap # transactions should succeed blocks.append( Block( timestamp=14_999, txs=[above_cap_tx_before_fork, at_cap_tx_before_fork], ) ) # At transition (timestamp = 15000): # - transaction at cap should succeed # - transaction above cap (cap + 1) should fail blocks.append( Block( timestamp=15_000, txs=[transition_tx], exception=post_cap_tx_error if not transaction_at_cap else None, ) ) # Post state: storage should be updated by successful transactions post = { contract_address: Account( storage={ # Set by both transactions in first block (before transition): 14_999: 2, # After transition: # - Set by transaction at cap (should succeed) # - Not set by transaction above cap (should fail) 15_000: 1 if transaction_at_cap else 0, } ) } blockchain_test(pre=pre, blocks=blocks, post=post) ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/__init__.py ================================================ """ Tests for [EIP-7883: ModExp Gas Cost Increase](https://eips.ethereum.org/EIPS/eip-7883). """ ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/conftest.py ================================================ """Shared pytest definitions for EIP-7883 tests.""" from typing import Dict import pytest from ethereum_test_forks import Fork, Osaka from ethereum_test_tools import ( Account, Address, Alloc, Bytes, Environment, Storage, Transaction, keccak256, ) from ethereum_test_vm import Opcodes as Op from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput from .spec import Spec, Spec7883 @pytest.fixture def gas_old() -> int | None: """Get old gas cost from the test vector if any.""" return None @pytest.fixture def gas_new() -> int | None: """Get new gas cost from the test vector if any.""" return None @pytest.fixture def call_opcode() -> Op: """Return call operation used to call the precompile.""" return Op.CALL @pytest.fixture def call_contract_post_storage() -> Storage: """ Storage of the test contract after the transaction is executed. Note: Fixture `call_contract_code` fills the actual expected storage values. """ return Storage() @pytest.fixture def total_tx_gas_needed( fork: Fork, modexp_expected: bytes, modexp_input: ModExpInput, precompile_gas: int ) -> int: """Calculate total tx gas needed for the transaction.""" intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() sstore_gas = fork.gas_costs().G_STORAGE_SET * (len(modexp_expected) // 32) extra_gas = 100_000 return ( extra_gas + intrinsic_gas_cost_calculator(calldata=bytes(modexp_input)) + memory_expansion_gas_calculator(new_bytes=len(bytes(modexp_input))) + precompile_gas + sstore_gas ) @pytest.fixture def exceeds_tx_gas_cap(total_tx_gas_needed: int, fork: Fork, env: Environment) -> bool: """Determine if total gas requirements exceed transaction gas cap.""" tx_gas_limit_cap = fork.transaction_gas_limit_cap() or env.gas_limit return total_tx_gas_needed > tx_gas_limit_cap @pytest.fixture def expected_tx_cap_fail() -> bool: """Whether this test is expected to fail due to transaction gas cap.""" return False @pytest.fixture def call_succeeds(exceeds_tx_gas_cap: bool, expected_tx_cap_fail: bool) -> bool: """ Determine whether the ModExp precompile call should succeed or fail. By default, depending on the expected output, we assume it succeeds. Under EIP-7825, transactions requiring more gas than the cap should fail only if unexpected. """ if exceeds_tx_gas_cap and not expected_tx_cap_fail: pytest.fail( "Test unexpectedly exceeds tx gas cap. " "Either mark with `expected_tx_cap_fail=True` or adjust inputs." ) return not exceeds_tx_gas_cap @pytest.fixture def gas_measure_contract( pre: Alloc, call_opcode: Op, fork: Fork, modexp_expected: bytes, precompile_gas: int, precompile_gas_modifier: int, call_contract_post_storage: Storage, call_succeeds: bool, ) -> Address: """ Deploys a contract that measures ModExp gas consumption and execution result. Always stored: storage[0]: precompile call success storage[1]: return data length from precompile Only if the precompile call succeeds: storage[2]: gas consumed by precompile storage[3]: hash of return data from precompile """ assert call_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] value = [0] if call_opcode in [Op.CALL, Op.CALLCODE] else [] gas_used = ( precompile_gas + precompile_gas_modifier if precompile_gas_modifier != float("inf") else Environment().gas_limit ) call_code = call_opcode( gas_used, Spec.MODEXP_ADDRESS, *value, 0, Op.CALLDATASIZE(), 0, 0, ) gas_costs = fork.gas_costs() extra_gas = ( gas_costs.G_WARM_ACCOUNT_ACCESS + (gas_costs.G_VERY_LOW * (len(call_opcode.kwargs) - 1)) + gas_costs.G_BASE # CALLDATASIZE + gas_costs.G_BASE # GAS ) # Build the gas measurement contract code # Stack operations: # [gas_start] # [gas_start, call_result] # [gas_start, call_result, gas_end] # [gas_start, gas_end, call_result] call_result_measurement = Op.GAS + call_code + Op.GAS + Op.SWAP1 # Calculate gas consumed: gas_start - (gas_end + extra_gas) # Stack Operation: # [gas_start, gas_end] # [gas_start, gas_end, extra_gas] # [gas_start, gas_end + extra_gas] # [gas_end + extra_gas, gas_start] # [gas_consumed] gas_calculation = Op.PUSH2[extra_gas] + Op.ADD + Op.SWAP1 + Op.SUB code = ( Op.CALLDATACOPY(dest_offset=0, offset=0, size=Op.CALLDATASIZE) + Op.SSTORE(call_contract_post_storage.store_next(call_succeeds), call_result_measurement) + Op.SSTORE( call_contract_post_storage.store_next(len(modexp_expected) if call_succeeds else 0), Op.RETURNDATASIZE(), ) ) if call_succeeds: code += Op.SSTORE(call_contract_post_storage.store_next(precompile_gas), gas_calculation) code += Op.RETURNDATACOPY(dest_offset=0, offset=0, size=Op.RETURNDATASIZE()) code += Op.SSTORE( call_contract_post_storage.store_next(keccak256(Bytes(modexp_expected))), Op.SHA3(0, Op.RETURNDATASIZE()), ) return pre.deploy_contract(code) @pytest.fixture def precompile_gas( fork: Fork, modexp_input: ModExpInput, gas_old: int | None, gas_new: int | None ) -> int: """ Calculate gas cost for the ModExp precompile and verify it matches expected gas. """ spec = Spec if fork < Osaka else Spec7883 try: calculated_gas = spec.calculate_gas_cost(modexp_input) if gas_old is not None and gas_new is not None: expected_gas = gas_old if fork < Osaka else gas_new assert calculated_gas == expected_gas, ( f"Calculated gas {calculated_gas} != Vector gas {expected_gas}\n" f"Lengths: base: {hex(len(modexp_input.base))} ({len(modexp_input.base)}), " f"exponent: {hex(len(modexp_input.exponent))} ({len(modexp_input.exponent)}), " f"modulus: {hex(len(modexp_input.modulus))} ({len(modexp_input.modulus)})\n" f"Exponent: {modexp_input.exponent} " f"({int.from_bytes(modexp_input.exponent, byteorder='big')})" ) return calculated_gas except Exception: # Used for `test_modexp_invalid_inputs` we expect the call to not # succeed. Return is for completeness. return 500 if fork >= Osaka else 200 @pytest.fixture def precompile_gas_modifier() -> int: """Return the gas modifier for the ModExp precompile.""" return 0 @pytest.fixture def tx( pre: Alloc, gas_measure_contract: Address, modexp_input: ModExpInput, tx_gas_limit: int, ) -> Transaction: """Transaction to measure gas consumption of the ModExp precompile.""" return Transaction( sender=pre.fund_eoa(), to=gas_measure_contract, data=bytes(modexp_input), gas_limit=tx_gas_limit, ) @pytest.fixture def tx_gas_limit(total_tx_gas_needed: int, fork: Fork, env: Environment) -> int: """ Transaction gas limit used for the test (Can be overridden in the test). """ tx_gas_limit_cap = fork.transaction_gas_limit_cap() or env.gas_limit return min(tx_gas_limit_cap, total_tx_gas_needed) @pytest.fixture def post( gas_measure_contract: Address, call_contract_post_storage: Storage, ) -> Dict[Address, Account]: """Return expected post state with gas consumption check.""" return { gas_measure_contract: Account(storage=call_contract_post_storage), } ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/eip_checklist_external_coverage.txt ================================================ precompile/test/call_contexts/set_code = Covered in EIP-7702 cases precompile/test/inputs/max_values = Covered in osaka/eip7823_modexp_upper_bounds precompile/test/out_of_bounds/max = Covered in osaka/eip7823_modexp_upper_bounds ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/eip_checklist_not_applicable.txt ================================================ precompile/test/value_transfer/fee/under = No value is required precompile/test/value_transfer/fee/exact = No value is required precompile/test/value_transfer/fee/over = No value is required precompile/test/input_lengths/static/correct = The Modexp input length is not static precompile/test/input_lengths/static/too_short = The Modexp input length is not static precompile/test/input_lengths/static/too_long = The Modexp input length is not static precompile/test/input_lengths/dynamic/too_short = there would be no padding for precompile precompile/test/gas_usage/constant/oog = The Modexp gas cost is dynamic precompile/test/gas_usage/constant/exact = The Modexp gas cost is dynamic precompile/test/fork_transition/before/invalid_input = Modexp is not new precompile, it is still valid befork fork activation precompile/test/fork_transition/before/zero_gas = Modexp is not new precompile, it is still valid befork fork activation precompile/test/fork_transition/before/cold = Modexp is not new precompile, it is still valid befork fork activation gas_cost_changes/test/out_of_gas = No Out-of-gas scenario in Modexp system_contract = EIP does not include a new system contract opcode = EIP does not introduce a new opcode removed_precompile = EIP does not remove a precompile transaction_type = EIP does not introduce a new transaction type block_header_field = EIP does not add any new block header fields gas_refunds_changes = EIP does not introduce any gas refund changes blob_count_changes = EIP does not introduce any blob count changes execution_layer_request = EIP does not introduce an execution layer request new_transaction_validity_constraint = EIP does not introduce a new transaction validity constraint modified_transaction_validity_constraint = EIP does not introduce a modified transaction validity constraint block_body_field = EIP does not add any new block body fields ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/helpers.py ================================================ """Helper functions for the EIP-7883 ModExp gas cost increase tests.""" import os from typing import Annotated, Any, List import pytest from pydantic import BaseModel, ConfigDict, Field, PlainValidator, RootModel, TypeAdapter from pydantic.alias_generators import to_pascal from ethereum_test_tools import Bytes from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput def current_python_script_directory(*args: str) -> str: """Get the current Python script directory.""" return os.path.join(os.path.dirname(os.path.realpath(__file__)), *args) class Vector(BaseModel): """A vector for the ModExp gas cost increase tests.""" modexp_input: Annotated[ModExpInput, PlainValidator(ModExpInput.from_bytes)] = Field( ..., alias="Input" ) modexp_expected: Bytes = Field(..., alias="Expected") name: str = Field(..., alias="Name") gas_old: int | None = Field(default=None, alias="GasOld") gas_new: int | None = Field(default=None, alias="GasNew") model_config = ConfigDict(alias_generator=to_pascal) def to_pytest_param(self) -> Any: """ Convert the test vector to a tuple that can be used as a parameter in a pytest test. """ return pytest.param( self.modexp_input, self.modexp_expected, self.gas_old, self.gas_new, id=self.name ) class VectorList(RootModel): """A list of test vectors for the ModExp gas cost increase tests.""" root: List[Vector] VectorListAdapter = TypeAdapter(VectorList) def vectors_from_file(filename: str) -> List: """Load test vectors from a file.""" with open( current_python_script_directory( "vector", filename, ), "rb", ) as f: return [v.to_pytest_param() for v in VectorListAdapter.validate_json(f.read()).root] ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/spec.py ================================================ """Defines EIP-7883 specification constants and functions.""" from dataclasses import dataclass from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7883 = ReferenceSpec("EIPS/eip-7883.md", "13aa65810336d4f243d4563a828d5afe36035d23") def ceiling_division(a: int, b: int) -> int: """ Calculate the ceil without using floating point. Used by many of the EVM's formulas. """ return -(a // -b) @dataclass(frozen=True) class Spec: """Constants and helpers for the ModExp gas cost calculation.""" MODEXP_ADDRESS = 0x05 MIN_GAS = 200 LARGE_BASE_MODULUS_MULTIPLIER = 1 MAX_LENGTH_THRESHOLD = 32 EXPONENT_BYTE_MULTIPLIER = 8 MAX_LENGTH_BYTES = 1024 WORD_SIZE = 8 EXPONENT_THRESHOLD = 32 GAS_DIVISOR = 3 # Arbitrary Test Constants modexp_input = ModExpInput( base="e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c0001020304050607", exponent="01ffffff", modulus="f01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c950001020304050607", ) modexp_expected = bytes.fromhex( "1abce71dc2205cce4eb6934397a88136f94641342e283cbcd30e929e85605c6718ed67f475192ffd" ) modexp_error = bytes() @classmethod def calculate_multiplication_complexity(cls, base_length: int, modulus_length: int) -> int: """Calculate the multiplication complexity of the ModExp precompile.""" max_length = max(base_length, modulus_length) words = ceiling_division(max_length, cls.WORD_SIZE) if max_length <= cls.MAX_LENGTH_THRESHOLD: return words**2 return cls.LARGE_BASE_MODULUS_MULTIPLIER * words**2 @classmethod def calculate_iteration_count(cls, modexp_input: ModExpInput) -> int: """ Calculate the iteration count of the ModExp precompile. This handles length mismatch cases by using declared lengths from the raw input and only the first 32 bytes of exponent data for iteration calculation. """ _, exponent_length, _ = modexp_input.get_declared_lengths() exponent_head = modexp_input.get_exponent_head() if exponent_length <= cls.EXPONENT_THRESHOLD and exponent_head == 0: iteration_count = 0 elif exponent_length <= cls.EXPONENT_THRESHOLD: iteration_count = exponent_head.bit_length() - 1 if exponent_head > 0 else 0 else: # For large exponents: length_part + bits from first 32 bytes length_part = cls.EXPONENT_BYTE_MULTIPLIER * (exponent_length - 32) bits_part = exponent_head.bit_length() - 1 if exponent_head > 0 else 0 iteration_count = length_part + bits_part return max(iteration_count, 1) @classmethod def calculate_gas_cost(cls, modexp_input: ModExpInput) -> int: """ Calculate the ModExp gas cost according to EIP-2565 specification, overridden by the constants within `Spec7883` when calculating for the EIP-7883 specification. """ base_length, _, modulus_length = modexp_input.get_declared_lengths() multiplication_complexity = cls.calculate_multiplication_complexity( base_length, modulus_length ) iteration_count = cls.calculate_iteration_count(modexp_input) return max(cls.MIN_GAS, (multiplication_complexity * iteration_count // cls.GAS_DIVISOR)) @dataclass(frozen=True) class Spec7883(Spec): """ Constants and helpers for the ModExp gas cost increase EIP. These override the original Spec class variables for EIP-7883. """ MODEXP_ADDRESS = 0x05 MIN_GAS = 500 LARGE_BASE_MODULUS_MULTIPLIER = 2 EXPONENT_BYTE_MULTIPLIER = 16 GAS_DIVISOR = 1 # Overrides the original Spec class GAS_DIVISOR @classmethod def calculate_multiplication_complexity(cls, base_length: int, modulus_length: int) -> int: """ Calculate the multiplication complexity of the ModExp precompile for EIP-7883. """ max_length = max(base_length, modulus_length) words = ceiling_division(max_length, cls.WORD_SIZE) complexity = 16 if max_length > cls.MAX_LENGTH_THRESHOLD: complexity = cls.LARGE_BASE_MODULUS_MULTIPLIER * words**2 return complexity ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/test_modexp_thresholds.py ================================================ """ EIP-7883 ModExp gas cost increase tests. Tests for ModExp gas cost increase in [EIP-7883: ModExp Gas Cost Increase](https://eips.ethereum.org/EIPS/eip-7883). """ from typing import Dict, Generator import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import Fork, Osaka from ethereum_test_tools import ( Alloc, Environment, StateTestFiller, Storage, Transaction, keccak256, ) from ethereum_test_types.helpers import compute_create_address from ethereum_test_vm import Opcodes as Op from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput from .helpers import vectors_from_file from .spec import Spec, ref_spec_7883 REFERENCE_SPEC_GIT_PATH = ref_spec_7883.git_path REFERENCE_SPEC_VERSION = ref_spec_7883.version @pytest.mark.parametrize( "modexp_input,modexp_expected,gas_old,gas_new", vectors_from_file("vectors.json"), ids=lambda v: v.name, ) @EIPChecklist.Precompile.Test.Inputs.Valid() @EIPChecklist.Precompile.Test.InputLengths.Dynamic.Valid() @EIPChecklist.GasCostChanges.Test.GasUpdatesMeasurement() @pytest.mark.valid_from("Berlin") @pytest.mark.slow() def test_vectors_from_eip( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """Test ModExp gas cost using the test vectors from EIP-7883.""" state_test( pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "modexp_input,modexp_expected,gas_old,gas_new", vectors_from_file("legacy.json"), ids=lambda v: v.name, ) @EIPChecklist.Precompile.Test.Inputs.Invalid() @pytest.mark.valid_from("Berlin") def test_vectors_from_legacy_tests( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """Test ModExp gas cost using the test vectors from legacy tests.""" state_test( pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "modexp_input,", [ # These invalid inputs are from EIP-7823. Ref: # https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7823.md#analysis pytest.param( bytes.fromhex("9e5faafc"), id="invalid-case-1", ), pytest.param( bytes.fromhex("85474728"), id="invalid-case-2", ), pytest.param( bytes.fromhex("9e281a98" + "00" * 54 + "021e19e0c9bab2400000"), id="invalid-case-3", ), ], ) @pytest.mark.parametrize( "modexp_expected,call_succeeds", [ pytest.param(bytes(), False), ], ids=[""], ) @EIPChecklist.Precompile.Test.Inputs.AllZeros @pytest.mark.valid_from("Berlin") def test_modexp_invalid_inputs( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """Test ModExp gas cost with invalid inputs.""" state_test( pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "modexp_input,modexp_expected,call_succeeds", [ pytest.param( ModExpInput( base="FF" * (Spec.MAX_LENGTH_BYTES + 1), exponent="FF", modulus="FF", ), Spec.modexp_error, False, id="base-too-long", ), pytest.param( ModExpInput( base="FF", exponent="FF" * (Spec.MAX_LENGTH_BYTES + 1), modulus="FF", ), Spec.modexp_error, False, id="exponent-too-long", ), pytest.param( ModExpInput( base="FF", exponent="FF", modulus="FF" * (Spec.MAX_LENGTH_BYTES + 1), ), Spec.modexp_error, False, id="modulus-too-long", ), pytest.param( ModExpInput( base="FF" * (Spec.MAX_LENGTH_BYTES + 1), exponent="FF", modulus="FF" * (Spec.MAX_LENGTH_BYTES + 1), ), Spec.modexp_error, False, id="base-modulus-too-long", ), ], ) @EIPChecklist.Precompile.Test.OutOfBounds.MaxPlusOne() @EIPChecklist.Precompile.Test.Inputs.Invalid.Corrupted() @EIPChecklist.Precompile.Test.Inputs.Invalid() @EIPChecklist.Precompile.Test.InputLengths.Dynamic.TooLong() @pytest.mark.valid_from("Osaka") def test_modexp_boundary_inputs( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """Test ModExp boundary inputs.""" state_test( pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", [ Op.CALL, Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "modexp_input,modexp_expected", [ pytest.param(Spec.modexp_input, Spec.modexp_expected, id="base-heavy"), ], ) @EIPChecklist.Precompile.Test.CallContexts.Static() @EIPChecklist.Precompile.Test.CallContexts.Delegate() @EIPChecklist.Precompile.Test.CallContexts.Callcode() @EIPChecklist.Precompile.Test.CallContexts.Normal() @pytest.mark.valid_from("Berlin") def test_modexp_call_operations( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """Test ModExp call related operations with EIP-7883.""" state_test( pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "modexp_input,modexp_expected,precompile_gas_modifier,call_succeeds", [ pytest.param( Spec.modexp_input, Spec.modexp_expected, 1, True, id="extra_gas", ), pytest.param( Spec.modexp_input, Spec.modexp_expected, 0, True, id="exact_gas", ), pytest.param( Spec.modexp_input, Spec.modexp_error, -1, False, id="insufficient_gas", ), pytest.param( Spec.modexp_input, Spec.modexp_expected, float("inf"), True, id="excessive_gas", ), ], ) @EIPChecklist.Precompile.Test.GasUsage.Dynamic() @EIPChecklist.Precompile.Test.ExcessiveGasUsage() @pytest.mark.valid_from("Berlin") def test_modexp_gas_usage_contract_wrapper( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict, ) -> None: """ Test ModExp gas cost with different gas modifiers using contract wrapper calls. """ state_test(pre=pre, tx=tx, post=post) @pytest.mark.parametrize( "modexp_input,modexp_expected,precompile_gas_modifier,call_values,call_succeeds", [ pytest.param( Spec.modexp_input, Spec.modexp_expected, 1, 0, True, id="extra_gas", ), pytest.param( Spec.modexp_input, Spec.modexp_expected, 0, 0, True, id="exact_gas", ), pytest.param( Spec.modexp_input, Spec.modexp_expected, 0, 1000, True, id="extra_value", ), pytest.param( Spec.modexp_input, Spec.modexp_error, -1, 0, False, id="insufficient_gas", ), ], ) @EIPChecklist.Precompile.Test.CallContexts.TxEntry() @EIPChecklist.Precompile.Test.ValueTransfer.NoFee() @pytest.mark.valid_from("Berlin") def test_modexp_used_in_transaction_entry_points( state_test: StateTestFiller, pre: Alloc, tx: Transaction, modexp_input: bytes, tx_gas_limit: int, call_values: int, ) -> None: """ Test ModExp using in transaction entry points with different precompile gas modifiers. """ tx = Transaction( to=Spec.MODEXP_ADDRESS, sender=pre.fund_eoa(), data=bytes(modexp_input), gas_limit=tx_gas_limit, value=call_values, ) state_test(pre=pre, tx=tx, post={}) @pytest.mark.parametrize( "modexp_input,modexp_expected", [ pytest.param( Spec.modexp_input, Spec.modexp_expected, id="valid_input", ) ], ) @EIPChecklist.Precompile.Test.CallContexts.Initcode() @pytest.mark.valid_from("Berlin") def test_contract_creation_transaction( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, modexp_input: bytes, modexp_expected: bytes, ) -> None: """Test the contract creation for the ModExp precompile.""" sender = pre.fund_eoa() storage = Storage() contract_address = compute_create_address(address=sender, nonce=0) contract_bytecode = ( Op.CODECOPY(0, Op.SUB(Op.CODESIZE, len(bytes(modexp_input))), len(bytes(modexp_input))) + Op.CALL( gas=1_000_000, address=Spec.MODEXP_ADDRESS, value=0, args_offset=0, args_size=len(bytes(modexp_input)), ret_offset=0, ret_size=len(bytes(modexp_expected)), ) + Op.SSTORE(storage.store_next(True), Op.DUP1()) + Op.SSTORE( storage.store_next(keccak256(bytes(modexp_expected))), Op.SHA3(0, Op.RETURNDATASIZE()) ) + Op.SSTORE(storage.store_next(len(bytes(modexp_expected))), Op.RETURNDATASIZE()) + Op.STOP ) tx = Transaction( sender=sender, gas_limit=1_000_000, to=None, value=0, data=contract_bytecode + bytes(modexp_input), ) post = { contract_address: { "storage": storage, } } state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "modexp_input,modexp_expected", [ pytest.param( Spec.modexp_input, Spec.modexp_expected, id="valid_input", ), ], ) @pytest.mark.parametrize("opcode", [Op.CREATE, Op.CREATE2]) @EIPChecklist.Precompile.Test.CallContexts.Initcode.CREATE() @pytest.mark.valid_from("Berlin") def test_contract_initcode( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, modexp_input: bytes, modexp_expected: bytes, opcode: Op, ) -> None: """Test ModExp behavior from contract creation.""" sender = pre.fund_eoa() storage = Storage() call_modexp_bytecode = ( Op.CODECOPY(0, Op.SUB(Op.CODESIZE, len(bytes(modexp_input))), len(bytes(modexp_input))) + Op.CALL( gas=200_000, address=Spec.MODEXP_ADDRESS, value=0, args_offset=0, args_size=len(bytes(modexp_input)), ret_offset=0, ret_size=len(bytes(modexp_expected)), ) + Op.SSTORE(storage.store_next(True), Op.DUP1()) + Op.SSTORE( storage.store_next(keccak256(bytes(modexp_expected))), Op.SHA3(0, Op.RETURNDATASIZE()) ) + Op.SSTORE(storage.store_next(len(bytes(modexp_expected))), Op.RETURNDATASIZE()) + Op.STOP ) full_initcode = call_modexp_bytecode + bytes(modexp_input) total_bytecode_length = len(call_modexp_bytecode) + len(bytes(modexp_input)) create_contract = ( Op.CALLDATACOPY(offset=0, size=total_bytecode_length) + opcode(offset=0, size=total_bytecode_length) + Op.STOP ) factory_contract_address = pre.deploy_contract(code=create_contract) contract_address = compute_create_address( address=factory_contract_address, nonce=1, initcode=full_initcode, opcode=opcode ) tx = Transaction( sender=sender, gas_limit=200_000, to=factory_contract_address, value=0, data=call_modexp_bytecode + bytes(modexp_input), ) post = { contract_address: { "storage": storage, } } state_test(env=Environment(), pre=pre, post=post, tx=tx) def create_modexp_variable_gas_test_cases() -> Generator: """ Create test cases for ModExp variable gas cost testing. Returns: List of pytest.param objects for the test cases """ # Test case definitions: (base, exponent, modulus, expected_result, # gas_usage, test_id) test_cases = [ ("", "", "", "", 500, "Z0"), ("01" * 32, "00" * 32, "", "", 500, "Z1"), ("01" * 1024, "00" * 32, "", "", 32768, "Z2"), ("01" * 32, "00" * 1024, "", "", 253952, "Z3"), ("01" * 32, "00" * 1023 + "01", "", "", 253952, "Z4"), ("", "", "01" * 32, "00" * 31 + "01", 500, "Z5"), ("", "01" * 32, "01" * 32, "00" * 32, 3968, "Z6"), ("", "00" * 31 + "01", "01" * 1024, "00" * 1024, 32768, "Z7"), ("01" * 16, "00" * 16, "02" * 16, "00" * 15 + "01", 500, "S0"), ("01" * 16, "00" * 15 + "03", "02" * 16, "01" * 16, 500, "S1"), ("01" * 32, "FF" * 32, "02" * 32, "01" * 32, 4080, "S2"), ("01" * 16, "00" * 40, "02" * 16, "00" * 15 + "01", 2048, "S3"), ("01" * 16, "00" * 39 + "01", "02" * 16, "01" * 16, 2048, "S4"), ("01" * 24, "00", "02" * 8, "00" * 7 + "01", 500, "S5"), ("01" * 8, "01", "02" * 24, "00" * 16 + "01" * 8, 500, "S6"), ("01" * 40, "00" * 16, "02" * 40, "00" * 39 + "01", 500, "L0"), ("01" * 40, "FF" * 32, "02" * 40, "01" * 40, 12750, "L1"), ("01" * 40, "00" * 40, "02" * 40, "00" * 39 + "01", 6400, "L2"), ("01" * 40, "00" * 39 + "01", "02" * 40, "01" * 40, 6400, "L3"), ("01" * 48, "01", "02" * 16, "01" * 16, 500, "L4"), ("01" * 16, "00" * 40, "02" * 48, "00" * 47 + "01", 9216, "L5"), # Critical 32-byte boundary cases ("01" * 31, "01", "02" * 33, "00" * 2 + "01" * 31, 500, "B1"), ("01" * 33, "01", "02" * 31, "00" * 29 + "01" * 2, 500, "B2"), ("01" * 33, "01", "02" * 33, "01" * 33, 500, "B4"), # Zero value edge cases ("00" * 32, "00" * 32, "01" * 32, "00" * 31 + "01", 500, "Z8"), ("01" * 32, "00" * 32, "00" * 32, "00" * 32, 500, "Z9"), ("00" * 32, "01" * 32, "02" * 32, "00" * 32, 3968, "Z10"), ("00" * 32, "00" * 33, "01" * 32, "00" * 31 + "01", 500, "Z11"), ("00" * 32, "00" * 1024, "01" * 32, "00" * 31 + "01", 253952, "Z12"), ("00" * 1024, "00" * 32, "01" * 32, "00" * 31 + "01", 32768, "Z13"), ("01" * 32, "00" * 1024, "00" * 32, "00" * 32, 253952, "Z14"), ("01" * 32, "00" * 31 + "01", "00" * 1024, "00" * 1024, 32768, "Z15"), # Maximum value stress tests ("FF" * 64, "FF" * 64, "FF" * 64, "00" * 64, 98176, "M1"), ("FF" * 32, "01", "FF" * 32, "00" * 32, 500, "M2"), ("01", "FF" * 64, "FF" * 64, "00" * 63 + "01", 98176, "M3"), # Tiny maximum values ("FF", "FE", "FD", "47", 500, "T2"), # Bit pattern cases ("01" * 32, "80" * 32, "02" * 32, "01" * 32, 4080, "P2"), ("01" * 33, "00" * 31 + "80" + "00", "02" * 33, "01" * 33, 1150, "P3"), # Asymmetric length cases ("01", "00" * 64, "02" * 64, "00" * 63 + "01", 65536, "A1"), ("01" * 64, "01", "02", "01", 500, "A2"), ("01" * 64, "00" * 64, "02", "01", 65536, "A3"), # Word boundary case ("01" * 8, "01", "02" * 8, "0101010101010101", 500, "W2"), # Exponent edge cases ("01" * 16, "00" * 32 + "01", "02" * 16, "01" * 16, 500, "E1"), ("01" * 16, "80" + "00" * 31, "02" * 16, "01" * 16, 4080, "E2"), ("01" * 16, "00" * 31 + "80", "02" * 16, "01" * 16, 500, "E3"), ("01" * 16, "7F" + "FF" * 31, "02" * 16, "01" * 16, 4064, "E4"), # Implementation coverage cases # IC1: Bit shift vs multiplication at 33-byte boundary ("FF" * 33, "01", "FF" * 33, "00" * 33, 500, "IC1"), # IC3: Ceiling division at 7 bytes ("01" * 7, "01", "02" * 7, "01" * 7, 500, "IC3"), # IC4: Ceiling division at 9 bytes ("01" * 9, "01", "02" * 9, "01" * 9, 500, "IC4"), # IC5: Bit counting in middle of exponent ("01", "00" * 15 + "80" + "00" * 16, "02", "01", 2160, "IC5"), # IC6: Native library even byte optimization ("01" * 31 + "00", "01", "01" * 31 + "00", "00" * 32, 500, "IC6"), # IC7: Vector optimization 128-bit boundary ("00" * 15 + "01" * 17, "01", "00" * 15 + "01" * 17, "00" * 32, 500, "IC7"), # IC9: Zero modulus with large inputs ("FF" * 32, "FF" * 32, "", "", None, "IC9"), # N/A case # IC10: Power-of-2 boundary with high bit ("01" * 32, "80" + "00" * 31, "02" * 32, "01" * 32, 4080, "IC10"), ] # Gas calculation parameters: # # Please refer to EIP-7883 for details of each function in the gas # calculation. # Link: https://eips.ethereum.org/EIPS/eip-7883 # # - calculate_multiplication_complexity: # - Comp: if max_length <= 32 bytes, it is Small (S), otherwise it is # Large (L) # - Rel (Length Relation): base < modulus (<), base = modulus (=), # base > modulus (>) # # - calculate_iteration_count # - Iter (Iteration Case): # - A: exp≤32 and exp=0 # - B: exp≤32 and exp≠0 # - C: exp>32 and low256=0 # - D: exp>32 and low256≠0 # # - calculate_gas_cost # - Clamp: True if raw gas < 500 (clamped to 500), False if raw gas ≥ 500 # (no clamping) """ Test case coverage table: ┌─────┬──────┬─────┬──────┬───────┬─────────┬───────────────────────────────────────────────┐ │ ID │ Comp │ Rel │ Iter │ Clamp │ Gas │ Description │ ├─────┼──────┼─────┼──────┼───────┼─────────┼───────────────────────────────────────────────┤ │ Z0 │ - │ - │ - │ - │ 500 │ Zero case – empty inputs │ │ Z1 │ S │ - │ A │ True │ 500 │ Non-zero base, zero exp, empty modulus │ │ Z2 │ L │ - │ A │ False │ 32768 │ Large base (1024B), zero exp, empty modulus │ │ Z3 │ S │ - │ C │ False |253952 │ Base, large zero exp (1024B), empty modulus │ │ Z4 │ S │ - │ D │ False │253952 │ Base, large exp (last byte=1), empty modulus │ │ Z5 │ S │ < │ A │ True │ 500 │ Empty base/exp, non-zero modulus only │ │ Z6 │ S │ < │ B │ False │ 3968 │ Empty base, non-zero exp and modulus │ │ Z7 │ L │ < │ B │ False │ 32768 │ Empty base, small exp, large modulus │ │ S0 │ S │ = │ A │ True │ 500 │ Small, equal, zero exp, clamped │ │ S1 │ S │ = │ B │ True │ 500 │ Small, equal, small exp, clamped │ │ S2 │ S │ = │ B │ False │ 4080 │ Small, equal, large exp, unclamped │ │ S3 │ S │ = │ C │ False │ 2048 │ Small, equal, large exp + zero low256 │ │ S4 │ S │ = │ D │ False │ 2048 │ Small, equal, large exp + non-zero low256 │ │ S5 │ S │ > │ A │ True │ 500 │ Small, base > mod, zero exp, clamped │ │ S6 │ S │ < │ B │ True │ 500 │ Small, base < mod, small exp, clamped │ │ L0 │ L │ = │ A │ True │ 500 │ Large, equal, zero exp, clamped │ │ L1 │ L │ = │ B │ False │ 12750 │ Large, equal, large exp, unclamped │ │ L2 │ L │ = │ C │ False │ 6400 │ Large, equal, large exp + zero low256 │ │ L3 │ L │ = │ D │ False │ 6400 │ Large, equal, large exp + non-zero low256 │ │ L4 │ L │ > │ B │ True │ 500 │ Large, base > mod, small exp, clamped │ │ L5 │ L │ < │ C │ False │ 9216 │ Large, base < mod, large exp + zero low256 │ │ B1 │ L │ < │ B │ True │ 500 │ Cross 32-byte boundary (31/33) │ │ B2 │ L │ > │ B │ True │ 500 │ Cross 32-byte boundary (33/31) │ │ B4 │ L │ = │ B │ True │ 500 │ Just over 32-byte boundary │ │ Z8 │ S │ = │ A │ True │ 500 │ All zeros except modulus │ │ Z9 │ S │ = │ A │ True │ 500 │ Zero modulus special case │ │ Z10 │ S │ = │ B │ False │ 3968 │ Zero base, large exponent │ │ Z11 │ S │ = │ C │ True │ 500 │ Zero base, 33B zero exp, non-zero modulus │ │ Z12 │ S │ = │ C │ False |253952 │ Zero base, large zero exp, non-zero modulus │ │ Z13 │ L │ > │ A │ False │ 32768 │ Large zero base, zero exp, non-zero modulus │ │ Z14 │ S │ = │ C │ False |253952 │ Base, large zero exp, zero modulus │ │ Z15 │ L │ < │ B │ False │ 32768 │ Base, small exp, large zero modulus │ │ Z16 │ L │ < │ C │ False │520060928│ Zero base, zero exp, large modulus (gas cap) | │ M1 │ L │ = │ D │ False │ 98176 │ Maximum values stress test │ │ M2 │ S │ = │ B │ True │ 500 │ Max base/mod, small exponent │ │ M3 │ L │ < │ D │ False │ 98176 │ Small base, max exponent/mod │ │ T2 │ S │ = │ B │ True │ 500 │ Tiny maximum values │ │ P2 │ S │ = │ B │ False │ 4080 │ High bit in exponent │ │ P3 │ L │ = │ D │ False │ 1150 │ Specific bit pattern in large exponent │ │ A1 │ L │ < │ C │ False │ 65536 │ Asymmetric: tiny base, large exp/mod │ │ A2 │ L │ > │ B │ True │ 500 │ Asymmetric: large base, tiny exp/mod │ │ A3 │ L │ > │ C │ False │ 65536 │ Asymmetric: large base/exp, tiny modulus │ │ W2 │ S │ = │ B │ True │ 500 │ Exactly 8-byte words │ │ E1 │ S │ = │ D │ True │ 500 │ Exponent exactly 33 bytes │ │ E2 │ S │ = │ B │ False │ 4080 │ High bit in exponent first byte │ │ E3 │ S │ = │ B │ True │ 500 │ High bit in exponent last byte │ │ E4 │ S │ = │ B │ False │ 4064 │ Maximum 32-byte exponent │ │ IC1 │ L │ = │ B │ True │ 500 │ Bit shift vs multiplication @ 33 bytes │ │ IC3 │ S │ = │ B │ True │ 500 │ Ceiling division at 7 bytes │ │ IC4 │ S │ = │ B │ True │ 500 │ Ceiling division at 9 bytes │ │ IC5 │ S │ = │ B │ False │ 2160 │ Bit counting in middle of exponent │ │ IC6 │ L │ = │ B │ True │ 500 │ Native library even byte optimization │ │ IC7 │ L │ = │ B │ True │ 500 │ Vector optimization 128-bit boundary │ │ IC9 │ S │ = │ B │ N/A │ N/A │ Zero modulus handling │ │ IC10│ S │ = │ B │ False │ 4080 │ Power-of-2 boundary with high bit │ └─────┴──────┴─────┴──────┴───────┴─────────┴───────────────────────────────────────────────┘ """ # noqa: W505 for base, exponent, modulus, expected_result, gas_usage, test_id in test_cases: yield pytest.param( ModExpInput(base=base, exponent=exponent, modulus=modulus), bytes.fromhex(expected_result), gas_usage, id=test_id, ) @pytest.mark.parametrize( "modexp_input,modexp_expected,gas_usage", create_modexp_variable_gas_test_cases(), ) @EIPChecklist.Precompile.Test.InputLengths.Zero() @EIPChecklist.GasCostChanges.Test.GasUpdatesMeasurement() @pytest.mark.valid_from("Berlin") def test_modexp_variable_gas_cost( state_test: StateTestFiller, precompile_gas: int, gas_usage: int, pre: Alloc, tx: Transaction, fork: Fork, post: Dict, ) -> None: """Test ModExp variable gas cost.""" if fork >= Osaka: # Check that gas used defined in table is accurate assert (gas_usage is None) or (precompile_gas >= gas_usage), "inconsistent gas usage" state_test(pre=pre, tx=tx, post=post) @pytest.mark.parametrize( "modexp_input,modexp_expected,expected_tx_cap_fail", [ pytest.param( ModExpInput(base="00" * 32, exponent="00" * 1024, modulus="01" * 1024), bytes.fromhex("00" * 1023 + "01"), True, id="Z16-gas-cap-test", ), ], ) @pytest.mark.valid_from("Berlin") def test_modexp_variable_gas_cost_exceed_tx_gas_cap( state_test: StateTestFiller, pre: Alloc, tx: Transaction, post: Dict ) -> None: """ Test ModExp variable gas cost. Inputs with an expected gas cost over the EIP-7825 tx gas cap. Test case coverage table (gas cap): ┌─────┬──────┬─────┬──────┬───────┬─────────┬───────────────────────────────────────────────┐ │ ID │ Comp │ Rel │ Iter │ Clamp │ Gas │ Description │ ├─────┼──────┼─────┼──────┼───────┼─────────┼───────────────────────────────────────────────┤ │ Z16 │ L │ < │ C │ False │520060928│ Zero base, zero exp, large modulus (gas cap) | └─────┴──────┴─────┴──────┴───────┴─────────┴───────────────────────────────────────────────┘ """ # noqa: W505 state_test(pre=pre, tx=tx, post=post) ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/test_modexp_thresholds_transition.py ================================================ """ Test ModExp gas cost transition from EIP-7883 before & after the Osaka fork. """ import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import Fork from ethereum_test_tools import Account, Alloc, Block, BlockchainTestFiller, Transaction, keccak256 from ethereum_test_vm import Opcodes as Op from ...byzantium.eip198_modexp_precompile.helpers import ModExpInput from .spec import Spec, ref_spec_7883 REFERENCE_SPEC_GIT_PATH = ref_spec_7883.git_path REFERENCE_SPEC_VERSION = ref_spec_7883.version pytestmark = pytest.mark.valid_at_transition_to("Osaka", subsequent_forks=True) @pytest.mark.parametrize( "modexp_input,modexp_expected,gas_old,gas_new", [ pytest.param(Spec.modexp_input, Spec.modexp_expected, 200, 1200), ], ids=[""], ) @EIPChecklist.GasCostChanges.Test.ForkTransition.Before() @EIPChecklist.GasCostChanges.Test.ForkTransition.After() @EIPChecklist.Precompile.Test.ForkTransition.After.Warm() @EIPChecklist.GasCostChanges.Test.ForkTransition.Before() @EIPChecklist.GasCostChanges.Test.ForkTransition.After() def test_modexp_fork_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, gas_old: int, gas_new: int, tx_gas_limit: int, modexp_input: ModExpInput, modexp_expected: bytes, ) -> None: """ Test ModExp gas cost transition from EIP-7883 before and after the Osaka hard fork. """ call_code = Op.CALL( address=Spec.MODEXP_ADDRESS, args_size=Op.CALLDATASIZE, ) gas_costs = fork.gas_costs() extra_gas = ( gas_costs.G_WARM_ACCOUNT_ACCESS + (gas_costs.G_VERY_LOW * (len(Op.CALL.kwargs) - 2)) + (gas_costs.G_BASE * 3) ) code = ( Op.CALLDATACOPY(dest_offset=0, offset=0, size=Op.CALLDATASIZE) + Op.GAS # [gas_start] + call_code # [gas_start, call_result] + Op.GAS # [gas_start, call_result, gas_end] + Op.SWAP1 # [gas_start, gas_end, call_result] + Op.POP # [gas_start, gas_end] + Op.PUSH2[extra_gas] # [gas_start, gas_end, extra_gas] + Op.ADD # [gas_start, gas_end + extra_gas] + Op.SWAP1 # [gas_end + extra_gas, gas_start] + Op.SUB # [gas_start - (gas_end + extra_gas)] + Op.TIMESTAMP # [gas_start - (gas_end + extra_gas), TIMESTAMP] + Op.SSTORE # [] ) # Verification the precompile call result code += Op.RETURNDATACOPY(dest_offset=0, offset=0, size=Op.RETURNDATASIZE()) + Op.SSTORE( Op.AND(Op.TIMESTAMP, 0xFF), Op.SHA3(0, Op.RETURNDATASIZE()), ) senders = [pre.fund_eoa() for _ in range(3)] contracts = [pre.deploy_contract(code) for _ in range(3)] timestamps = [14_999, 15_000, 15_001] gas_values = [gas_old, gas_new, gas_new] blocks = [ Block( timestamp=ts, txs=[ Transaction( to=contract, data=modexp_input, sender=sender, gas_limit=tx_gas_limit, ) ], ) for ts, contract, sender in zip(timestamps, contracts, senders, strict=False) ] post = { contract: Account(storage={ts: gas, ts & 0xFF: keccak256(bytes(modexp_expected))}) for contract, ts, gas in zip(contracts, timestamps, gas_values, strict=False) } blockchain_test( pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/vector/legacy.json ================================================ [ { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "legacy-case-0" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "legacy-case-1" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", "Expected": "3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", "Name": "legacy-case-3" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", "Expected": "3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", "Name": "legacy-case-4" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "legacy-case-5" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020038000000000000000000000000000000000000000000000000000000000000000", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "legacy-case-6" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000080", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "legacy-case-7" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "legacy-case-8" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000101", "Expected": "", "Name": "legacy-case-9" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000304", "Expected": "00", "Name": "legacy-case-10" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020004", "Expected": "01", "Name": "legacy-case-11" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020300", "Expected": "00", "Name": "legacy-case-12" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010304", "Expected": "00", "Name": "legacy-case-13" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010204", "Expected": "01", "Name": "legacy-case-14" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000203", "Expected": "", "Name": "legacy-case-15" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000202030006", "Expected": "0002", "Name": "legacy-case-16" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020306", "Expected": "02", "Name": "legacy-case-17" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002020300", "Expected": "0000", "Name": "legacy-case-18" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000202030000", "Expected": "0000", "Name": "legacy-case-19" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020203", "Expected": "0000", "Name": "legacy-case-20" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002023003", "Expected": "0000", "Name": "legacy-case-21" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020230", "Expected": "0000", "Name": "legacy-case-22" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000202", "Expected": "0000", "Name": "legacy-case-23" }, { "Input": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002", "Expected": "0000", "Name": "legacy-case-24" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001001001010010", "Expected": "01", "Name": "legacy-case-25" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000064", "Expected": "01", "Name": "legacy-case-26" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030006", "Expected": "0002", "Name": "legacy-case-27" }, { "Input": "000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010035ee4e488f45e64d2f07becd54646357381d32f30b74c299a8c25d5202c04938ef6c4764a04f10fc908b78c4486886000f6d290251a79681a83b950c7e5c37351", "Expected": "00000000000000000000000000000001", "Name": "legacy-case-31" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000cd935b43e42204fcbfb734a6e27735e8e90204fcc1fd2727bb040f9eecb", "Expected": "000000000000000000000001", "Name": "legacy-case-32" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060846813a8d2d451387340fa0597c6545ae63", "Expected": "000000000001", "Name": "legacy-case-33" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d02534f82b1013f20d9c7d18d62cd95674d2e013f20d9c7d18d62cd95674d2f", "Expected": "00000000000000000000000001", "Name": "legacy-case-34" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000120785e45de3d6be050ba3c4d33ff0bb2d010ace3b1dfe9c49f4c7a8075102fa19a86c010ace3b1dfe9c49f4c7a8075102fa19a86d", "Expected": "000000000000000000000000000000000001", "Name": "legacy-case-35" } ] ================================================ FILE: tests/osaka/eip7883_modexp_gas_increase/vector/vectors.json ================================================ [ { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", "Expected": "000000000000000000000000000000000000000000000000000000000000000001", "Name": "geth-fail-length", "GasOld": 200, "GasNew": 1600 }, { "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb502fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", "Expected": "60008f1614cc01dcfb6bfb09c625cf90b47d4468db81b5f8b7a39d42f332eab9b2da8f2d95311648a8f243f4bb13cfb3d8f7f2a3c014122ebb3ed41b02783adc", "Name": "nagydani-1-square", "GasOld": 200, "GasNew": 500 }, { "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb503fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", "Expected": "4834a46ba565db27903b1c720c9d593e84e4cbd6ad2e64b31885d944f68cd801f92225a8961c952ddf2797fa4701b330c85c4b363798100b921a1a22a46a7fec", "Name": "nagydani-1-qube", "GasOld": 200, "GasNew": 500 }, { "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5010001fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", "Expected": "c36d804180c35d4426b57b50c5bfcca5c01856d104564cd513b461d3c8b8409128a5573e416d0ebe38f5f736766d9dc27143e4da981dfa4d67f7dc474cbee6d2", "Name": "nagydani-1-pow0x10001", "GasOld": 341, "GasNew": 2048 }, { "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5102e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", "Expected": "981dd99c3b113fae3e3eaa9435c0dc96779a23c12a53d1084b4f67b0b053a27560f627b873e3f16ad78f28c94f14b6392def26e4d8896c5e3c984e50fa0b3aa44f1da78b913187c6128baa9340b1e9c9a0fd02cb78885e72576da4a8f7e5a113e173a7a2889fde9d407bd9f06eb05bc8fc7b4229377a32941a02bf4edcc06d70", "Name": "nagydani-2-square", "GasOld": 200, "GasNew": 512 }, { "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5103e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", "Expected": "d89ceb68c32da4f6364978d62aaa40d7b09b59ec61eb3c0159c87ec3a91037f7dc6967594e530a69d049b64adfa39c8fa208ea970cfe4b7bcd359d345744405afe1cbf761647e32b3184c7fbe87cee8c6c7ff3b378faba6c68b83b6889cb40f1603ee68c56b4c03d48c595c826c041112dc941878f8c5be828154afd4a16311f", "Name": "nagydani-2-qube", "GasOld": 200, "GasNew": 512 }, { "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51010001e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", "Expected": "ad85e8ef13fd1dd46eae44af8b91ad1ccae5b7a1c92944f92a19f21b0b658139e0cabe9c1f679507c2de354bf2c91ebd965d1e633978a830d517d2f6f8dd5fd58065d58559de7e2334a878f8ec6992d9b9e77430d4764e863d77c0f87beede8f2f7f2ab2e7222f85cc9d98b8467f4bb72e87ef2882423ebdb6daf02dddac6db2", "Name": "nagydani-2-pow0x10001", "GasOld": 1365, "GasNew": 8192 }, { "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb02d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", "Expected": "affc7507ea6d84751ec6b3f0d7b99dbcc263f33330e450d1b3ff0bc3d0874320bf4edd57debd587306988157958cb3cfd369cc0c9c198706f635c9e0f15d047df5cb44d03e2727f26b083c4ad8485080e1293f171c1ed52aef5993a5815c35108e848c951cf1e334490b4a539a139e57b68f44fee583306f5b85ffa57206b3ee5660458858534e5386b9584af3c7f67806e84c189d695e5eb96e1272d06ec2df5dc5fabc6e94b793718c60c36be0a4d031fc84cd658aa72294b2e16fc240aef70cb9e591248e38bd49c5a554d1afa01f38dab72733092f7555334bbef6c8c430119840492380aa95fa025dcf699f0a39669d812b0c6946b6091e6e235337b6f8", "Name": "nagydani-3-square", "GasOld": 341, "GasNew": 2048 }, { "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb03d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", "Expected": "1b280ecd6a6bf906b806d527c2a831e23b238f89da48449003a88ac3ac7150d6a5e9e6b3be4054c7da11dd1e470ec29a606f5115801b5bf53bc1900271d7c3ff3cd5ed790d1c219a9800437a689f2388ba1a11d68f6a8e5b74e9a3b1fac6ee85fc6afbac599f93c391f5dc82a759e3c6c0ab45ce3f5d25d9b0c1bf94cf701ea6466fc9a478dacc5754e593172b5111eeba88557048bceae401337cd4c1182ad9f700852bc8c99933a193f0b94cf1aedbefc48be3bc93ef5cb276d7c2d5462ac8bb0c8fe8923a1db2afe1c6b90d59c534994a6a633f0ead1d638fdc293486bb634ff2c8ec9e7297c04241a61c37e3ae95b11d53343d4ba2b4cc33d2cfa7eb705e", "Name": "nagydani-3-qube", "GasOld": 341, "GasNew": 2048 }, { "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb010001d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", "Expected": "37843d7c67920b5f177372fa56e2a09117df585f81df8b300fba245b1175f488c99476019857198ed459ed8d9799c377330e49f4180c4bf8e8f66240c64f65ede93d601f957b95b83efdee1e1bfde74169ff77002eaf078c71815a9220c80b2e3b3ff22c2f358111d816ebf83c2999026b6de50bfc711ff68705d2f40b753424aefc9f70f08d908b5a20276ad613b4ab4309a3ea72f0c17ea9df6b3367d44fb3acab11c333909e02e81ea2ed404a712d3ea96bba87461720e2d98723e7acd0520ac1a5212dbedcd8dc0c1abf61d4719e319ff4758a774790b8d463cdfe131d1b2dcfee52d002694e98e720cb6ae7ccea353bc503269ba35f0f63bf8d7b672a76", "Name": "nagydani-3-pow0x10001", "GasOld": 5461, "GasNew": 32768 }, { "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8102df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", "Expected": "8a5aea5f50dcc03dc7a7a272b5aeebc040554dbc1ffe36753c4fc75f7ed5f6c2cc0de3a922bf96c78bf0643a73025ad21f45a4a5cadd717612c511ab2bff1190fe5f1ae05ba9f8fe3624de1de2a817da6072ddcdb933b50216811dbe6a9ca79d3a3c6b3a476b079fd0d05f04fb154e2dd3e5cb83b148a006f2bcbf0042efb2ae7b916ea81b27aac25c3bf9a8b6d35440062ad8eae34a83f3ffa2cc7b40346b62174a4422584f72f95316f6b2bee9ff232ba9739301c97c99a9ded26c45d72676eb856ad6ecc81d36a6de36d7f9dafafee11baa43a4b0d5e4ecffa7b9b7dcefd58c397dd373e6db4acd2b2c02717712e6289bed7c813b670c4a0c6735aa7f3b0f1ce556eae9fcc94b501b2c8781ba50a8c6220e8246371c3c7359fe4ef9da786ca7d98256754ca4e496be0a9174bedbecb384bdf470779186d6a833f068d2838a88d90ef3ad48ff963b67c39cc5a3ee123baf7bf3125f64e77af7f30e105d72c4b9b5b237ed251e4c122c6d8c1405e736299c3afd6db16a28c6a9cfa68241e53de4cd388271fe534a6a9b0dbea6171d170db1b89858468885d08fecbd54c8e471c3e25d48e97ba450b96d0d87e00ac732aaa0d3ce4309c1064bd8a4c0808a97e0143e43a24cfa847635125cd41c13e0574487963e9d725c01375db99c31da67b4cf65eff555f0c0ac416c727ff8d438ad7c42030551d68c2e7adda0abb1ca7c10", "Name": "nagydani-4-square", "GasOld": 1365, "GasNew": 8192 }, { "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8103df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", "Expected": "5a2664252aba2d6e19d9600da582cdd1f09d7a890ac48e6b8da15ae7c6ff1856fc67a841ac2314d283ffa3ca81a0ecf7c27d89ef91a5a893297928f5da0245c99645676b481b7e20a566ee6a4f2481942bee191deec5544600bb2441fd0fb19e2ee7d801ad8911c6b7750affec367a4b29a22942c0f5f4744a4e77a8b654da2a82571037099e9c6d930794efe5cdca73c7b6c0844e386bdca8ea01b3d7807146bb81365e2cdc6475f8c23e0ff84463126189dc9789f72bbce2e3d2d114d728a272f1345122de23df54c922ec7a16e5c2a8f84da8871482bd258c20a7c09bbcd64c7a96a51029bbfe848736a6ba7bf9d931a9b7de0bcaf3635034d4958b20ae9ab3a95a147b0421dd5f7ebff46c971010ebfc4adbbe0ad94d5498c853e7142c450d8c71de4b2f84edbf8acd2e16d00c8115b150b1c30e553dbb82635e781379fe2a56360420ff7e9f70cc64c00aba7e26ed13c7c19622865ae07248daced36416080f35f8cc157a857ed70ea4f347f17d1bee80fa038abd6e39b1ba06b97264388b21364f7c56e192d4b62d9b161405f32ab1e2594e86243e56fcf2cb30d21adef15b9940f91af681da24328c883d892670c6aa47940867a81830a82b82716895db810df1b834640abefb7db2092dd92912cb9a735175bc447be40a503cf22dfe565b4ed7a3293ca0dfd63a507430b323ee248ec82e843b673c97ad730728cebc", "Name": "nagydani-4-qube", "GasOld": 1365, "GasNew": 8192 }, { "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81010001df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", "Expected": "bed8b970c4a34849fc6926b08e40e20b21c15ed68d18f228904878d4370b56322d0da5789da0318768a374758e6375bfe4641fca5285ec7171828922160f48f5ca7efbfee4d5148612c38ad683ae4e3c3a053d2b7c098cf2b34f2cb19146eadd53c86b2d7ccf3d83b2c370bfb840913ee3879b1057a6b4e07e110b6bcd5e958bc71a14798c91d518cc70abee264b0d25a4110962a764b364ac0b0dd1ee8abc8426d775ec0f22b7e47b32576afaf1b5a48f64573ed1c5c29f50ab412188d9685307323d990802b81dacc06c6e05a1e901830ba9fcc67688dc29c5e27bde0a6e845ca925f5454b6fb3747edfaa2a5820838fb759eadf57f7cb5cec57fc213ddd8a4298fa079c3c0f472b07fb15aa6a7f0a3780bd296ff6a62e58ef443870b02260bd4fd2bbc98255674b8e1f1f9f8d33c7170b0ebbea4523b695911abbf26e41885344823bd0587115fdd83b721a4e8457a31c9a84b3d3520a07e0e35df7f48e5a9d534d0ec7feef1ff74de6a11e7f93eab95175b6ce22c68d78a642ad642837897ec11349205d8593ac19300207572c38d29ca5dfa03bc14cdbc32153c80e5cc3e739403d34c75915e49beb43094cc6dcafb3665b305ddec9286934ae66ec6b777ca528728c851318eb0f207b39f1caaf96db6eeead6b55ed08f451939314577d42bcc9f97c0b52d0234f88fd07e4c1d7780fdebc025cfffcb572cb27a8c33963", "Name": "nagydani-4-pow0x10001", "GasOld": 21845, "GasNew": 131072 }, { "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf02e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", "Expected": "d61fe4e3f32ac260915b5b03b78a86d11bfc41d973fce5b0cc59035cf8289a8a2e3878ea15fa46565b0d806e2f85b53873ea20ed653869b688adf83f3ef444535bf91598ff7e80f334fb782539b92f39f55310cc4b35349ab7b278346eda9bc37c0d8acd3557fae38197f412f8d9e57ce6a76b7205c23564cab06e5615be7c6f05c3d05ec690cba91da5e89d55b152ff8dd2157dc5458190025cf94b1ad98f7cbe64e9482faba95e6b33844afc640892872b44a9932096508f4a782a4805323808f23e54b6ff9b841dbfa87db3505ae4f687972c18ea0f0d0af89d36c1c2a5b14560c153c3fee406f5cf15cfd1c0bb45d767426d465f2f14c158495069d0c5955a00150707862ecaae30624ebacdd8ac33e4e6aab3ff90b6ba445a84689386b9e945d01823a65874444316e83767290fcff630d2477f49d5d8ffdd200e08ee1274270f86ed14c687895f6caf5ce528bd970c20d2408a9ba66216324c6a011ac4999098362dbd98a038129a2d40c8da6ab88318aa3046cb660327cc44236d9e5d2163bd0959062195c51ed93d0088b6f92051fc99050ece2538749165976233697ab4b610385366e5ce0b02ad6b61c168ecfbedcdf74278a38de340fd7a5fead8e588e294795f9b011e2e60377a89e25c90e145397cdeabc60fd32444a6b7642a611a83c464d8b8976666351b4865c37b02e6dc21dbcdf5f930341707b618cc0f03c3122646b3385c9df9f2ec730eec9d49e7dfc9153b6e6289da8c4f0ebea9ccc1b751948e3bb7171c9e4d57423b0eeeb79095c030cb52677b3f7e0b45c30f645391f3f9c957afa549c4e0b2465b03c67993cd200b1af01035962edbc4c9e89b31c82ac121987d6529dafdeef67a132dc04b6dc68e77f22862040b75e2ceb9ff16da0fca534e6db7bd12fa7b7f51b6c08c1e23dfcdb7acbd2da0b51c87ffbced065a612e9b1c8bba9b7e2d8d7a2f04fcc4aaf355b60d764879a76b5e16762d5f2f55d585d0c8e82df6940960cddfb72c91dfa71f6b4e1c6ca25dfc39a878e998a663c04fe29d5e83b9586d047b4d7ff70a9f0d44f127e7d741685ca75f11629128d916a0ffef4be586a30c4b70389cc746e84ebf177c01ee8a4511cfbb9d1ecf7f7b33c7dd8177896e10bbc82f838dcd6db7ac67de62bf46b6a640fb580c5d1d2708f3862e3d2b645d0d18e49ef088053e3a220adc0e033c2afcfe61c90e32151152eb3caaf746c5e377d541cafc6cbb0cc0fa48b5caf1728f2e1957f5addfc234f1a9d89e40d49356c9172d0561a695fce6dab1d412321bbf407f63766ffd7b6b3d79bcfa07991c5a9709849c1008689e3b47c50d613980bec239fb64185249d055b30375ccb4354d71fe4d05648fbf6c80634dfc3575f2f24abb714c1e4c95e8896763bf4316e954c7ad19e5780ab7a040ca6fb9271f90a8b22ae738daf6cb", "Name": "nagydani-5-square", "GasOld": 5461, "GasNew": 32768 }, { "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf03e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", "Expected": "5f9c70ec884926a89461056ad20ac4c30155e817f807e4d3f5bb743d789c83386762435c3627773fa77da5144451f2a8aad8adba88e0b669f5377c5e9bad70e45c86fe952b613f015a9953b8a5de5eaee4566acf98d41e327d93a35bd5cef4607d025e58951167957df4ff9b1627649d3943805472e5e293d3efb687cfd1e503faafeb2840a3e3b3f85d016051a58e1c9498aab72e63b748d834b31eb05d85dcde65e27834e266b85c75cc4ec0135135e0601cb93eeeb6e0010c8ceb65c4c319623c5e573a2c8c9fbbf7df68a930beb412d3f4dfd146175484f45d7afaa0d2e60684af9b34730f7c8438465ad3e1d0c3237336722f2aa51095bd5759f4b8ab4dda111b684aa3dac62a761722e7ae43495b7709933512c81c4e3c9133a51f7ce9f2b51fcec064f65779666960b4e45df3900f54311f5613e8012dd1b8efd359eda31a778264c72aa8bb419d862734d769076bce2810011989a45374e5c5d8729fec21427f0bf397eacbb4220f603cf463a4b0c94efd858ffd9768cd60d6ce68d755e0fbad007ce5c2223d70c7018345a102e4ab3c60a13a9e7794303156d4c2063e919f2153c13961fb324c80b240742f47773a7a8e25b3e3fb19b00ce839346c6eb3c732fbc6b888df0b1fe0a3d07b053a2e9402c267b2d62f794d8a2840526e3ade15ce2264496ccd7519571dfde47f7a4bb16292241c20b2be59f3f8fb4f6383f232d838c5a22d8c95b6834d9d2ca493f5a505ebe8899503b0e8f9b19e6e2dd81c1628b80016d02097e0134de51054c4e7674824d4d758760fc52377d2cad145e259aa2ffaf54139e1a66b1e0c1c191e32ac59474c6b526f5b3ba07d3e5ec286eddf531fcd5292869be58c9f22ef91026159f7cf9d05ef66b4299f4da48cc1635bf2243051d342d378a22c83390553e873713c0454ce5f3234397111ac3fe3207b86f0ed9fc025c81903e1748103692074f83824fda6341be4f95ff00b0a9a208c267e12fa01825054cc0513629bf3dbb56dc5b90d4316f87654a8be18227978ea0a8a522760cad620d0d14fd38920fb7321314062914275a5f99f677145a6979b156bd82ecd36f23f8e1273cc2759ecc0b2c69d94dad5211d1bed939dd87ed9e07b91d49713a6e16ade0a98aea789f04994e318e4ff2c8a188cd8d43aeb52c6daa3bc29b4af50ea82a247c5cd67b573b34cbadcc0a376d3bbd530d50367b42705d870f2e27a8197ef46070528bfe408360faa2ebb8bf76e9f388572842bcb119f4d84ee34ae31f5cc594f23705a49197b181fb78ed1ec99499c690f843a4d0cf2e226d118e9372271054fbabdcc5c92ae9fefaef0589cd0e722eaf30c1703ec4289c7fd81beaa8a455ccee5298e31e2080c10c366a6fcf56f7d13582ad0bcad037c612b710fc595b70fbefaaca23623b60c6c39b11beb8e5843b6b3dac60f", "Name": "nagydani-5-qube", "GasOld": 5461, "GasNew": 32768 }, { "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf010001e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", "Expected": "5a0eb2bdf0ac1cae8e586689fa16cd4b07dfdedaec8a110ea1fdb059dd5253231b6132987598dfc6e11f86780428982d50cf68f67ae452622c3b336b537ef3298ca645e8f89ee39a26758206a5a3f6409afc709582f95274b57b71fae5c6b74619ae6f089a5393c5b79235d9caf699d23d88fb873f78379690ad8405e34c19f5257d596580c7a6a7206a3712825afe630c76b31cdb4a23e7f0632e10f14f4e282c81a66451a26f8df2a352b5b9f607a7198449d1b926e27036810368e691a74b91c61afa73d9d3b99453e7c8b50fd4f09c039a2f2feb5c419206694c31b92df1d9586140cb3417b38d0c503c7b508cc2ed12e813a1c795e9829eb39ee78eeaf360a169b491a1d4e419574e712402de9d48d54c1ae5e03739b7156615e8267e1fb0a897f067afd11fb33f6e24182d7aaaaa18fe5bc1982f20d6b871e5a398f0f6f718181d31ec225cfa9a0a70124ed9a70031bdf0c1c7829f708b6e17d50419ef361cf77d99c85f44607186c8d683106b8bd38a49b5d0fb503b397a83388c5678dcfcc737499d84512690701ed621a6f0172aecf037184ddf0f2453e4053024018e5ab2e30d6d5363b56e8b41509317c99042f517247474ab3abc848e00a07f69c254f46f2a05cf6ed84e5cc906a518fdcfdf2c61ce731f24c5264f1a25fc04934dc28aec112134dd523f70115074ca34e3807aa4cb925147f3a0ce152d323bd8c675ace446d0fd1ae30c4b57f0eb2c23884bc18f0964c0114796c5b6d080c3d89175665fbf63a6381a6a9da39ad070b645c8bb1779506da14439a9f5b5d481954764ea114fac688930bc68534d403cff4210673b6a6ff7ae416b7cd41404c3d3f282fcd193b86d0f54d0006c2a503b40d5c3930da980565b8f9630e9493a79d1c03e74e5f93ac8e4dc1a901ec5e3b3e57049124c7b72ea345aa359e782285d9e6a5c144a378111dd02c40855ff9c2be9b48425cb0b2fd62dc8678fd151121cf26a65e917d65d8e0dacfae108eb5508b601fb8ffa370be1f9a8b749a2d12eeab81f41079de87e2d777994fa4d28188c579ad327f9957fb7bdecec5c680844dd43cb57cf87aeb763c003e65011f73f8c63442df39a92b946a6bd968a1c1e4d5fa7d88476a68bd8e20e5b70a99259c7d3f85fb1b65cd2e93972e6264e74ebf289b8b6979b9b68a85cd5b360c1987f87235c3c845d62489e33acf85d53fa3561fe3a3aee18924588d9c6eba4edb7a4d106b31173e42929f6f0c48c80ce6a72d54eca7c0fe870068b7a7c89c63cdda593f5b32d3cb4ea8a32c39f00ab449155757172d66763ed9527019d6de6c9f2416aa6203f4d11c9ebee1e1d3845099e55504446448027212616167eb36035726daa7698b075286f5379cd3e93cb3e0cf4f9cb8d017facbb5550ed32d5ec5400ae57e47e2bf78d1eaeff9480cc765ceff39db500", "Name": "nagydani-5-pow0x10001", "GasOld": 87381, "GasNew": 524288 }, { "Input": "000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c1000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000007d7d7d83828282348286877d7d827d407d797d7d7d7d7d7d7d7d7d7d7d5b00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000007d7d7d83828282348286877d7d82", "Expected": "36a385a417859b5e178d3ab9", "Name": "marius-1-even", "GasOld": 2057, "GasNew": 45296 }, { "Input": "000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d80000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff76ffffffffffffff1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c76ec7c7c7c7ffffffffffffffc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7ffffffffffffc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c76ec7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7ffffffffff3f000000000000000000000000", "Expected": "c3745de81615f80088ffffffffffffff", "Name": "guido-1-even", "GasOld": 2298, "GasNew": 51136 }, { "Input": "000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d80000000000000000000000000000000000000000000000000000000000000010e0060000a921212121212121ff0000212b212121ffff1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00feffff212121212121ffffffff1fe1e0e0e01e1f1f169f1f1f1f490afcefffffffffffffffff82828282828282828282828282828282828282828200ffff28ff2b212121ffff1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1fffffffffff0afceffffff7ffffffffff7c8282828282a1828282828282828282828282828200ffff28ff2b212121ffff1f1f1f1f1f1fd11f1f1f1f1f1f1f1f1f1f1fffffffffffffffff21212121212121fb2121212121ffff1f1f1f1f1f1f1f1fffaf82828282828200ffff28ff2b21828200", "Expected": "458ef0af2549d46d24c89079499479e1", "Name": "guido-2-even", "GasOld": 2300, "GasNew": 51152 }, { "Input": "00000000000000000000000000000000000000000000000000000000000001e7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002cb0193585a48e18aad777e9c1b54221a0f58140392e4f091cd5f42b2e8644a9384fbd58ae1edec2477ebf7edbf7c0a3f8bd21d1890ee87646feab3c47be716f842cc3da9b940af312dc54450a960e3fc0b86e56abddd154068e10571a96fff6259431632bc15695c6c8679057e66c2c25c127e97e64ee5de6ea1fc0a4a0e431343fed1daafa072c238a45841da86a9806680bc9f298411173210790359209cd454b5af7b4d5688b4403924e5f863d97e2c5349e1a04b54fcf385b1e9d7714bab8fbf5835f6ff9ed575e77dff7af5cbb641db5d537933bae1fa6555d6c12d6fb31ca27b57771f4aebfbe0bf95e8990c0108ffe7cbdaf370be52cf3ade594543af75ad9329d2d11a402270b5b9a6bf4b83307506e118fca4862749d04e916fc7a039f0d13f2a02e0eedb800199ec95df15b4ccd8669b52586879624d51219e72102fad810b5909b1e372ddf33888fb9beb09b416e4164966edbabd89e4a286be36277fc576ed519a15643dac602e92b63d0b9121f0491da5b16ef793a967f096d80b6c81ecaaffad7e3f06a4a5ac2796f1ed9f68e6a0fd5cf191f0c5c2eec338952ff8d31abc68bf760febeb57e088995ba1d7726a2fdd6d8ca28a181378b8b4ab699bfd4b696739bbf17a9eb2df6251143046137fdbbfacac312ebf67a67da9741b596000000000000419a2917c61722b0713d3b00a2f0e1dd5aebbbe09615de424700eea3c3020fe6e9ea5de9fa1ace781df28b21f746d2ab61d0da496e08473c90ff7dfe25b43bcde76f4bafb82e0975bea75f5a0591dba80ba2fff80a07d8853bea5be13ab326ba70c57b153acc646151948d1cf061ca31b02d4719fac710e7c723ca44f5b1737824b7ccc74ba5bff980aabdbf267621cafc3d6dcc29d0ca9c16839a92ed34de136da7900aa3ee43d21aa57498981124357cf0ca9b86f9a8d3f9c604ca00c726e48f7a9945021ea6dfff92d6b2d6514693169ca133e993541bfa4c4c191de806aa80c48109bcfc9901eccfdeb2395ab75fe63c67de900829d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Expected": "1194e971c875bb45f030316793bc6916343335b18670dfad7a4646fba99749b30283b78b818836de7400ff1a68ddad1a2dd850ec0f227441e2d4d13f5ee4b5d7a856db0a9ad1f86987e1f117d70f9e6a1a2b8d083fa82653aa16f1773b6deb2ed8a1f9e7f3a5db121c4a0c91cb954e2ec53e63422efe86c7984d79cd0e7b5e3eb8ca4980551d63f302c7d72500a84baf12c82fc7bd9b5c2ab8b9c33baf1df28b2031c58a8b2928a42c9f456e98874e22fe13cf17aa5915b11bb108b6ae40842d434604ccddcb4f64324c67b2dde32e6cd759d964f17d9cdf0046cd0ed3588e1fc4b88f67a5d4f3a870aad1cba89ead265d6ad327c8ea7ff54fe4b5e7dbe87c5c59c468543eab3675751111bfa1d6c51daf789d41dc21fd8ba9e05490f881a973a3c1567ff3129a49aa6658cf06f0a79530a7256ce5a07c2a77b4306383d538866bba376d90621c4f82d1f5f32304ee2b7170805d42418fc6967642e5648d8c64fe9c0fdff2d7c114a47add7767c8fccb8808de8c3c6e1a8880c05e16fafc1513fded8eba222dcaaa809bdb36999cc27ab8d0055009e9690e8a35b859df865dc510d25c7812d8eebbb35607ad595573f0fabd1b57970a2bc113ac6f0ca01e985032b9c2c139316ac099ed1632d2bc0fcc341343d303db2a9c3cf2ad572c6c43084b08d458bf822e92da16079f39cdb0dd10ef47f87ecae404117fc72660372cee9ea42266e7f8d973e7f6b09930ca5f96e04976bf23b9d356bbd2429597b04b7663e0e1a1228f4dfda3b854233e4888dc60c6886c1e0e8aec1705f681027b1e0b3017337557f107ef5cd272df5fd31dfec2bdffe163a8369895ffe124c0aa0ee00ca0fe1db4d5cf37b4af0e49bd73a89d88ced3d88f8e6f00d8e61ad09946d0e72cd3e25bc688a021a83758b5023daae7c269a6cbbd447aba5da7629b75801e1654ce85b8e21ccb9865654f8662e538625d75fea31000000000000000000000000000000000000000000000", "Name": "guido-3-even", "GasOld": 5400, "GasNew": 32400 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000181000000000000000000000000000000000000000000000000000000000000000801ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2cffffffffffffffffffffffffffffffffffffffffffffffffffffffff3b10000000006c01ffffffffffffffffffffffffffffffffffffffffffffffdffffb97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffebafd93b37ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5bb6affffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2a", "Expected": "0000000000000001", "Name": "guido-4-even", "GasOld": 1026, "GasNew": 94448 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c51f81bcdfc324a0dff2b5bec9d92e21cbebc4d5e29d3a3d30de3e03fbeab8d7f2ee5f854d076701c8753d72779187e404f9b2fb705c495137d78551250314a463ef5a213fe22de1cea28d60f518364ff95fe0b73660793e3efcfbe31bda68aeccc21cc9477a6aea5df8cae73422b700c47e54d892691e099167e77befc94780a920ae4155769cd69c30626f054134b5f003772473f57f84837402df6d166e66303f01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c954b27ac388a17c8e9a7ba12a968f288f3308d6fe7bcdf28e685e9a2e00d8be1af19726b7662016d6404f9336493ad633777feb88c9d02a1d2428e566ac38f42c0bb66d2962ec349088ce0d03b35bf27f6114414ef558c87ad8e543754a352f7dffcaca429690688595ab1d1b349d9295b480a82f43ac5c9112fe40720545cc78501cd8b42f3605212fe06a835c9cbc0328e07e94aedb2ac11f6d6649e7fcd8c43", "Expected": "120cf297dbe810911c7d060e109e03699ccefa00a257d296c5a14b4180776c5f7c0d7f1cd789c694807689729af267b53f00373f395dee264a3daba11fcac1fa8875aee0950acd8fa656f1fc58077a7549d794dd160506ecea1acc9c0cda13795749c94f9973b683ce2162866e8d6b5b1165a4c7fa4234964d394d6ec4e0113698b89d173e24a962dd7a41a1819b0fef188ef64e7ee264595dce0d76fbc3ba42d5de833b143c8744366effede8bc8197e8f747ff8cdbc0bf1a93560bec960ca9", "Name": "marcin-1-base-heavy", "GasOld": 200, "GasNew": 1152 }, { "Input": "0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005100000000000000000000000000000000000000000000000000000000000000080001020304050607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001020304050607", "Expected": "0000000000000000", "Name": "marcin-1-exp-heavy", "GasOld": 215, "GasNew": 16624 }, { "Input": "000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000028e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c000102030405060701fffffff01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c950001020304050607", "Expected": "1abce71dc2205cce4eb6934397a88136f94641342e283cbcd30e929e85605c6718ed67f475192ffd", "Name": "marcin-1-balanced", "GasOld": 200, "GasNew": 1200 }, { "Input": "000000000000000000000000000000000000000000000000000000000000019800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000198e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c51f81bcdfc324a0dff2b5bec9d92e21cbebc4d5e29d3a3d30de3e03fbeab8d7f2ee5f854d076701c8753d72779187e404f9b2fb705c495137d78551250314a463ef5a213fe22de1cea28d60f518364ff95fe0b73660793e3efcfbe31bda68aeccc21cc9477a6aea5df8cae73422b700c47e54d892691e099167e77befc94780a920ae4155769cd69c30626f054134b5f003772473f57f84837402df6d166e663c29021b0e084f7dc16f6ec88cc597f1aea9f8e0b9501e0f7a546805d2a20eeda0bf080aeb3ed7ea6f9174d804bd242f0b31ff1ea24800344abb580cd87f61ca75a013a87733553966400242399dee3760877fead2cd87287747155e47a854acb50fe07922f57ae3b4553201bfd7c11aca85e1541f91db8e62dca9c418dc5feae086c9487350539c884510044efce5e3f2aaffca4215c12b9044506375097fecd9b22e2ef46f01f1af8aff742aebf96bdcaf55a341600971dc62555376b9e98a8000102030405060708090a0b0c0d0e0f101112131415161703f01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c954b27ac388a17c8e9a7ba12a968f288f3308d6fe7bcdf28e685e9a2e00d8be1af19726b7662016d6404f9336493ad633777feb88c9d02a1d2428e566ac38f42c0bb66d2962ec349088ce0d03b35bf27f6114414ef558c87ad8e543754a352f7dffcaca429690688595ab1d1b349d9295b480a82f43ac5c9112fe40720545cc78501cd8b42f3605212fe06a835c9cbc0328e07e94aedb2ac11f6d6649e7fcd8c43ddce2bd0cdc6c22c4dcd345735040d5bfe3f09b7c61362089f728e2222db96cab2f2c2ccf43574f9e119f4860fd0f1b6036a43ad9db8a428ea09a4ee385112f3fe9c6656ea2cec604cbb5a9227526653bfa7035e4ae80010b1ba16a76608d5dde0a62bc019e9047b5ec05b1005fd017366130a4ba555e7be654561ee3f539c93cb2c9988fca71bf0ad9c4a426b924641a28e1e4adb93609bfa5b2bc81714cbba1110208b86d7b87be28bdf63a62e33ae81dbcc43de9192bd192c40e85faab539000102030405060708090a0b0c0d0e0f1011121314151617", "Expected": "817d05c4d540ace3f250fd082e2deb8c2097410fcfe4ce40862cfa015b7f62a7bb72ec1af2915cad66294447b45d177fe759eb80370b0dbd3c0e1c448d54db81eadc11e40c19e394d066a5c019c443798a98d4afd116fc220593d42fbf191b6af0ae75410badb641187ba24a0b968f742a75e2822853f137151d9ea972fd1f36b7c7cc4e71355ecf50648aec094b864cfae9316c0a7be3ddb8ab2d0050b2a029ee956c2366d49430c8f889f29ab514aea8e5b8dec40ba1b49432e30aee32ec45e96dd548205a79d8f8f918eed46acb2115c59086b1011b1d2b093cea723535c3d95efc8e51a7da43b80586d69eb7f213dfb06f7a8e789a9472392bd224411b50f8ca6f2862bcd63431912d1ff99c8d76408245da9e4bea649f0eb930b32922f2d0a345a206160be44d418f1a6c74bd49c4618392ef9350b264a461dfc684c7343211e27675b027054f1cb3d4a5b1a066d3a3ea2eed9caf13251d8be936818f15274e8e3d7539b7c5f216cef327a270fd2a886fbf679c163fb5806249f2c74da5ee0e3ffe9ad1fde2634b29b35da6da6d184ab6ae70199229", "Name": "marcin-2-base-heavy", "GasOld": 867, "GasNew": 5202 }, { "Input": "000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000010000102030405060708090a0b0c0d0e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000102030405060708090a0b0c0d0e0f", "Expected": "00000000000000000000000000000000", "Name": "marcin-2-exp-heavy", "GasOld": 852, "GasNew": 16368 }, { "Input": "000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000038e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c000102030405060708090a0b0c0d0e0f10111213141516172bfffffffffffffff01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c95000102030405060708090a0b0c0d0e0f1011121314151617", "Expected": "86bef3367fc7117c8a6b825cadebe80f3e94c321dda73e9e240b98188a1d5c071c60a195097c8d1fb85ce03a2e1b6964846edee5aa2c3f46", "Name": "marcin-2-balanced", "GasOld": 996, "GasNew": 5978 }, { "Input": "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244cfffffffffffffffffffffffffffffffff01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c95", "Expected": "4004762c491606a5132134da6086284f74cc8e14b08f18b90fc09f31bca3d78f", "Name": "marcin-3-base-heavy", "GasOld": 677, "GasNew": 2032 }, { "Input": "000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000018000102030405060708090a0b0c0d0e0f1011121314151617ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000102030405060708090a0b0c0d0e0f1011121314151617", "Expected": "000000000000000000000000000000000000000000000000", "Name": "marcin-3-exp-heavy", "GasOld": 765, "GasNew": 4080 }, { "Input": "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020e8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01681d2220bfea4bb888a5543db8c0916274ddb1ea93b144c042c01d8164c95", "Expected": "2d3feee20d394af68dd6744b86a8aca6a4a0b7f01bbcd3c3eec768245ca6acee", "Name": "marcin-3-balanced", "GasOld": 1360, "GasNew": 4080 }, { "Input": "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fd10e29482419533334ff25031f487f1fc0d2d179acc9e2cb7719f4e95f71e430000000000000000000000000000000000000000000000000000000000000000b5d3354acc9731339fb0e64d666aa79675619ea5f5b66b70c5e92640568c51c6", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "zero-exponent-32bytes", "GasOld": 200, "GasNew": 500 }, { "Input": "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000208d74b1229cc36912165d7ed62334d5ce0683ad12dbade86cdbd705f46693d6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f70e8f94c5ad28ed971e258ea3854ebf57131ae4c842e5cafe1c70db8272caf", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "zero-exponent-64bytes", "GasOld": 1365, "GasNew": 8192 }, { "Input": "0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000309a06db9abffebe2e2b14531c3b729b4c9f74a890a1b86e4e8ee728507536b4d20dd5982acdfd508a8c4549fd0622e6266d59d0ad387eaa9163aeb746c8a37aed45f17f97015c19a1e086c28caa1d0a499bb63b3e0d4e1cff87319d07e3195581", "Expected": "348b4411d0bf6337d3061169eca6114b54c5c22adbc453834b11e16fc54c73d9c7f34047b0585ab6a11609104235dd91", "Name": "unequal-base-mod-lengths", "GasOld": 3060, "GasNew": 18360 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000702c06a45e159cb4c7741ec7533282f", "Expected": "291e7f48fc3b41", "Name": "word-boundary-7bytes", "GasOld": 200, "GasNew": 500 }, { "Input": "000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000009c38b617604d927dd7ecadecd1b21bdb6022001", "Expected": "c63e1e2b3d44e3dedf", "Name": "word-boundary-9bytes", "GasOld": 200, "GasNew": 500 }, { "Input": "000000000000000000000000000000000000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000021425057b404526baca2d46d743728f0a9d2f5ec451e8c5691448e7815a83c2becd8153b299c4e0a3341c06ead40d6a9c989be6e08f11479f09412293da072e793d3470e7620e29e0445590c8d7659ed58b69ec6e9dfa4c1fc15c4654a91f398fd", "Expected": "5b2936884b205b7f53cef1d677b23e435564ddc25d8601b1a93c822f8b5a657e6b", "Name": "32byte-boundary-31-32-33", "GasOld": 2125, "GasNew": 12750 }, { "Input": "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000204d459c333fe2e1ac503a3659b33931c9193190863d27df62003adf014222d472b32aad8de34175ecfe566893f02ae529bc6285c4b4722107f5342f29cfe9fdfe151b6c13559b559685d1eb88a452b457e0f91e6879fe8e3faf52c1cc0cea8bda134318d8e5779c9fb294ec35adc1c9af69d1fc2d091cfbdb3d39a31822b4446ecb02b8e3ae81b97ca7651d50a7c4f09f", "Expected": "28daf00293ae1dabe2a1a3caefc6fe0f1581bae146c0ad0d7f9650f7c4faf0f0", "Name": "large-exponent-80bytes", "GasOld": 3408, "GasNew": 16368 }, { "Input": "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000206ea6c150792130fbfb05b72aacba79157f9b86e05c975cb1585e68fb663801da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff148f0b9e252c56e138f8c65a832ebca75241a386a918c14f466fb84a22f8b771", "Expected": "08d8fab720b60be2e3af8437e15e467c625cd8704c2382449e7a50437355c6be", "Name": "large-exponent-128bytes-lsb", "GasOld": 4096, "GasNew": 24576 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000111d87c", "Expected": "65", "Name": "minimal-1byte-all", "GasOld": 200, "GasNew": 500 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004071ec16921dffa0fb375c10cad75c7f4a750fd9562208d5d4d47ac008bafca749f7d9291e15b3515643deecc89abe8f4da3a388bff32cfac6cf53128409376bb998af5c2279288e00890b4e04d043ff8d8ddf14ce4b96ecc8ba20a352fb39fbaa4fb870e26b2e4492efcdc6854b8ccf92a307b7cb6afef227a3d238280d7214368f", "Expected": "2529b7fe039758e47401e0bb63feab7155d7345437e24fad6f6fb4a7fe6670ded943ba45fed2473921f1e7b6f04212413195b4aa38ac56cd7f9ed037bec0d586", "Name": "64byte-base-1byte-exp", "GasOld": 200, "GasNew": 896 }, { "Input": "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000020bfdcc8e5f778ddba5192ab872af34da969f048590a5d4eb7ae02c005de33d5c90000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000000000000000000cf0d1b6669e951fa915414d3da69a8c9d25c35b641c0067dd7b9ace41c7e9053", "Expected": "7d059d490060260b9f2722e928155843abe4845078a0669bcbfc7675a10ebc87", "Name": "exponent-72bytes-msb-at-33", "GasOld": 1706, "GasNew": 10240 }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000660bfd6246b7f481d4a9955bb2bd9ee970e21063193ae484c413aea066fc949d", "Expected": "", "Name": "zero-length-base-mod", "GasOld": 200, "GasNew": 4064 }, { "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100e6c494fcb8039d05cc2133c7aa6ef221e1f27633e99a022941d84fa0bbe764b01ac4d2c86e2fc1f8d59368bd3a0c279f562cedb4b5621ede72f7cb4acd5e3878225427a80c932f22958aaa902ba4d39d4d9ef9609da7f5c9cdc788871d85f2498237741e96d864be6f055c883054274e97e28a137578c1ed1cf5e4eb5a1a549c97315b3fed5e9dfbc9a8ceee6b125eb182667abb5ed57c336bd55c04c002e0b184ef337466696c8cab404f4aa2170c9907e2be22e118720e47856e6115294912f8ca46769892cc4d0df67ffcc5e723a9a8798fe4c504d756f58f7cb6800414006431168ce6c2f86ec70d51ad73947c42834ce176770de3134099f1b51aacebb2f9b95c74aeee4ee9cbaeb6cbc8dd7fb90f178ba9b7ae19ad5599db229b868ed0432e8ed31b556a22197b23a39e93fba545efef6de3f11b9d537e082e273c64a5344622ddfd96cd27a874c44bb96f2be16d683284fa083339937e6429706375dff7c393abcd26e67cddbf8aa43ceb092dd12d0e4c472e4479697d6184ff4dde6e65a19ace7d712c186ffaf8dd3ca3052cd5725b37ed5147331a66608a114f642d6173bd58a8cb28c6b7a8e90b976ca83bd8fc83bba936b4cf0e82d192f66d3c526bf390d5dcd5b1e3a139867e43e01a6e67394b33419acb8a4bab77081a2ce91bcd65bc5bad08de86862670cae78ec2064c09371aa6a477a948950020b145d3e4230b81bd7d96be5869b335afc3cc4b3197aff99f9441090fb050c925003f39ce7c227f5038cda2a37cd9e856435058fb2edbdf34ad9137e71913522a5858023833729dbe7ae1e1b445f01f749599b7827fabf0f4c2e92c60c6f870d827cc154d7cc9c95bf6b2eef4a21b1caef80b425bfd1f21cb30836dba58fb34a75aaecf03acd14c74d600df979673421dcd3f122e4b348a944983b51a83e61ea50dbd7f188df94b97340b949b196cf226264254215bbb53f25ad584c70855579f3fb8f705297bf6a68e2cadc32eb3933b6bb6e4e3efaa6e518a2b7426eb56c4744060bb8c9be50c8213966c0227e9507d74be224673bfe56c44856d9361d681a645812538", "Expected": "20000c5a76d926aa5a60f13bab4c8c232de4ad42c4d09f01b04ac0beccbea8a24939911b065f62800527fdcfbb0ee843c2bf5e8d02c5141cb173fbb607b3f3845085c1c3f0f301c72cc8d7db666555ba628ee33694bceb859c1e1953995d85474c069e26f849365c833f2b97b3274a0fdd4bc21cbfc4d00b202afed29aa192e03aa635651087404cf8370f16fd355804da06a22716b09f7a94a39f98126237882b01a13d7de25b5a0196d620a1269b240ac908ab125276e7ed4038d63b1812820a71a867f8280d193ca9f13f012893015ae92d9677778000247828526383550c13ba9f3be4b9ca2a5d9ecdc77c6047fcb1bd11a995f3296becf16f67dcf77a60", "Name": "256byte-all-params", "GasOld": 698709, "GasNew": 7862272 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000002014fadab683b091c9cbde019f7a0bdc68a433530323e969b1b258d622c620f84900000000000000000000000000000000000000000000000000000000000000ffffa99f6f95feb7ac53b4ff1bfed874e4f0855076c182570be582a570356f70e930", "Expected": "5ae98cd73052457257f43b007755e469d1867fbafa6abfd1db32fd8f0851c3d9", "Name": "33byte-exponent-last-2bytes-ff", "GasOld": 200, "GasNew": 500 }, { "Input": "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000203fdb9a1dfe54fd10fe2793c41f01be9cdfb3d7ed8c252b441207212bc7c05ee600000000000000000000000000000000000000000000000000000000000000006bd85245a361e3ecd601fa587bc62be2b605cebacc1a1042efba2f80dfe66ed94d529957835bd5f953006f7760cdb6b98157a6ea8cca39fdb5cd7e4fbb5b3c20", "Expected": "17c21dbded148914b96f2f554df601ae737e5f98ca0fd3f0b84141be20888220", "Name": "exponent-with-leading-zeros", "GasOld": 1365, "GasNew": 8192 }, { "Input": "00000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002134f975ffeb77c28b5c561b98cb0cba5bb73a9c179e70be3a6ba7dcac9a0369ae4d25957a159e10f428d2a88aad5bea4332ddecd2ed4d2347c958870a8a20ced5a8be2a6057d92c114c29f3c5b4e8add0cd12ac795dc02fe71483c21c797c9c099c38", "Expected": "3b62ede56212bdf5c8f67a4e10a7786cf5ea6aeae81cfa3069c7c0d0b9a88a7c81", "Name": "33byte-base-32byte-exp-33byte-mod", "GasOld": 2108, "GasNew": 12650 } ] ================================================ FILE: tests/osaka/eip7918_blob_reserve_price/__init__.py ================================================ """Cross-client EIP-7918 Tests.""" ================================================ FILE: tests/osaka/eip7918_blob_reserve_price/conftest.py ================================================ """ Pytest (plugin) definitions local to EIP-7918 tests. Mostly a copy of `tests/cancun/eip4844_blobs/conftest.py`. """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Environment from .spec import Spec @pytest.fixture def target_blobs_per_block(fork: Fork) -> int: """Return default number of target blobs per block.""" return fork.target_blobs_per_block() @pytest.fixture def max_blobs_per_block(fork: Fork) -> int: """Return default number of max blobs per block.""" return fork.max_blobs_per_block() @pytest.fixture def blob_gas_per_blob(fork: Fork) -> int: """Return default blob gas cost per blob.""" return fork.blob_gas_per_blob() @pytest.fixture(autouse=True) def parent_excess_blobs() -> int | None: """ Return default excess blobs of the parent block. Can be overloaded by a test case to provide a custom parent excess blob count. """ return 10 # Defaults to a blob gas price of 1. @pytest.fixture(autouse=True) def parent_blobs() -> int | None: """ Return default data blobs of the parent block. Can be overloaded by a test case to provide a custom parent blob count. """ return 0 @pytest.fixture def parent_excess_blob_gas( parent_excess_blobs: int | None, blob_gas_per_blob: int, ) -> int | None: """ Calculate the excess blob gas of the parent block from the excess blobs. """ if parent_excess_blobs is None: return None assert parent_excess_blobs >= 0 return parent_excess_blobs * blob_gas_per_blob @pytest.fixture def blobs_per_tx() -> int: """ Total number of blobs per transaction. Can be overloaded by a test case to provide a custom blobs per transaction count. """ return 1 @pytest.fixture def block_base_fee_per_gas_delta() -> int: """Delta to add to the block base fee. Default is 0.""" return 0 @pytest.fixture def block_base_fee_per_gas( fork: Fork, parent_excess_blobs: int | None, block_base_fee_per_gas_delta: int, ) -> int: """ Block base fee per gas. Default is 7 unless a delta is provided or overloaded. """ if block_base_fee_per_gas_delta != 0: if parent_excess_blobs is None: blob_base_fee = 1 else: excess_blob_gas = parent_excess_blobs * fork.blob_gas_per_blob() blob_gas_price_calculator = fork.blob_gas_price_calculator() blob_base_fee = blob_gas_price_calculator(excess_blob_gas=excess_blob_gas) boundary_base_fee = 8 * blob_base_fee return boundary_base_fee + block_base_fee_per_gas_delta return 7 @pytest.fixture def excess_blob_gas( fork: Fork, parent_excess_blobs: int | None, parent_blobs: int | None, block_base_fee_per_gas: int, ) -> int | None: """ Calculate the excess blob gas of the block under test from the parent block. Value can be overloaded by a test case to provide a custom excess blob gas. """ if parent_excess_blobs is None or parent_blobs is None: return None return fork.excess_blob_gas_calculator()( parent_excess_blobs=parent_excess_blobs, parent_blob_count=parent_blobs, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def correct_excess_blob_gas( fork: Fork, parent_excess_blobs: int | None, parent_blobs: int | None, block_base_fee_per_gas: int, ) -> int: """ Calculate the correct excess blob gas of the block under test from the parent block. Should not be overloaded by a test case. """ if parent_excess_blobs is None or parent_blobs is None: return 0 return fork.excess_blob_gas_calculator()( parent_excess_blobs=parent_excess_blobs, parent_blob_count=parent_blobs, parent_base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def blob_gas_price( fork: Fork, excess_blob_gas: int | None, ) -> int | None: """Return blob gas price for the block of the test.""" if excess_blob_gas is None: return None get_blob_gas_price = fork.blob_gas_price_calculator() return get_blob_gas_price( excess_blob_gas=excess_blob_gas, ) @pytest.fixture def correct_blob_gas_used( fork: Fork, blobs_per_tx: int, ) -> int: """Correct blob gas used by the test transaction.""" return fork.blob_gas_per_blob() * blobs_per_tx @pytest.fixture def reserve_price( block_base_fee_per_gas: int, ) -> int: """Calculate the blob base fee reserve price for the current base fee.""" return Spec.get_reserve_price(block_base_fee_per_gas) @pytest.fixture def is_reserve_price_active( block_base_fee_per_gas: int, blob_gas_price: int, ) -> bool: """Check if the reserve price mechanism should be active.""" return Spec.is_reserve_price_active(block_base_fee_per_gas, blob_gas_price) @pytest.fixture def genesis_excess_blob_gas( parent_excess_blob_gas: int | None, ) -> int: """Return default excess blob gas for the genesis block.""" return parent_excess_blob_gas if parent_excess_blob_gas else 0 @pytest.fixture def env( block_base_fee_per_gas: int, genesis_excess_blob_gas: int, ) -> Environment: """ Prepare the environment of the genesis block for all blockchain tests. """ return Environment( excess_blob_gas=genesis_excess_blob_gas, blob_gas_used=0, base_fee_per_gas=block_base_fee_per_gas, ) @pytest.fixture def tx_max_fee_per_blob_gas(blob_gas_price: int | None) -> int: """Max fee per blob gas based on actual blob gas price.""" if blob_gas_price is None: return 1 return blob_gas_price ================================================ FILE: tests/osaka/eip7918_blob_reserve_price/spec.py ================================================ """Defines EIP-7918 specification constants and functions.""" from dataclasses import dataclass # Base the spec on EIP-4844 which EIP-7918 extends from ...cancun.eip4844_blobs.spec import Spec as EIP4844Spec @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7918 = ReferenceSpec("EIPS/eip-7918.md", "be1dbefafcb40879e3f6d231fad206c62f5b371b") @dataclass(frozen=True) class Spec(EIP4844Spec): """ Parameters from the EIP-7918 specifications. Extends EIP-4844 spec with the new reserve price constant and functionality. """ BLOB_BASE_COST = 2**13 @classmethod def get_reserve_price( cls, base_fee_per_gas: int, ) -> int: """Calculate the reserve price for blob gas given the blob base fee.""" return (cls.BLOB_BASE_COST * base_fee_per_gas) // cls.GAS_PER_BLOB @classmethod def is_reserve_price_active( cls, base_fee_per_gas: int, blob_base_fee: int, ) -> bool: """Check if the reserve price mechanism should be active.""" reserve_price = cls.get_reserve_price(base_fee_per_gas) return reserve_price > blob_base_fee @classmethod def calc_effective_blob_base_fee( cls, base_fee_per_gas: int, blob_base_fee: int, ) -> int: """ Calculate the effective blob base fee considering the reserve price. """ reserve_price = cls.get_reserve_price(base_fee_per_gas) return max(reserve_price, blob_base_fee) ================================================ FILE: tests/osaka/eip7918_blob_reserve_price/test_blob_base_fee.py ================================================ """ [EIP-7918: Blob base fee bounded by execution cost](https://eips.ethereum.org/EIPS/eip-7918). Test the blob base fee reserve price mechanism for [EIP-7918: Blob base fee bounded by execution cost](https://eips.ethereum.org/EIPS/eip-7918). """ from typing import Dict, List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Environment, Hash, Header, Transaction, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_7918 REFERENCE_SPEC_GIT_PATH = ref_spec_7918.git_path REFERENCE_SPEC_VERSION = ref_spec_7918.version pytestmark = pytest.mark.valid_from("Osaka") @pytest.fixture def sender(pre: Alloc) -> Address: """Sender account with enough balance for tests.""" return pre.fund_eoa(10**18) @pytest.fixture def destination_account(pre: Alloc) -> Address: """Contract that stores the blob base fee for verification.""" code = Op.SSTORE(0, Op.BLOBBASEFEE) return pre.deploy_contract(code) @pytest.fixture def tx_gas() -> int: """Gas limit for transactions sent during test.""" return 100_000 @pytest.fixture def tx_value() -> int: """Value for transactions sent during test.""" return 1 @pytest.fixture def blob_hashes_per_tx(blobs_per_tx: int) -> List[Hash]: """Blob hashes for the transaction.""" return add_kzg_version( [Hash(x) for x in range(blobs_per_tx)], Spec.BLOB_COMMITMENT_VERSION_KZG, ) @pytest.fixture def tx( sender: Address, destination_account: Address, tx_gas: int, tx_value: int, blob_hashes_per_tx: List[Hash], block_base_fee_per_gas: int, tx_max_fee_per_blob_gas: int, ) -> Transaction: """Blob transaction for the block.""" return Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, max_fee_per_gas=block_base_fee_per_gas, max_priority_fee_per_gas=0, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=[], blob_versioned_hashes=blob_hashes_per_tx, ) @pytest.fixture def block( tx: Transaction, fork: Fork, parent_excess_blobs: int, block_base_fee_per_gas: int, blob_gas_per_blob: int, ) -> Block: """Single block fixture.""" blob_count = len(tx.blob_versioned_hashes) if tx.blob_versioned_hashes else 0 excess_blob_gas_calculator = fork.excess_blob_gas_calculator() expected_excess_blob_gas = excess_blob_gas_calculator( parent_excess_blobs=parent_excess_blobs, parent_blob_count=0, parent_base_fee_per_gas=block_base_fee_per_gas, ) return Block( txs=[tx], header_verify=Header( excess_blob_gas=expected_excess_blob_gas, blob_gas_used=blob_count * blob_gas_per_blob, ), ) @pytest.fixture def post( destination_account: Address, blob_gas_price: int, tx_value: int, ) -> Dict[Address, Account]: """Post state storing the effective blob base fee.""" return { destination_account: Account( storage={0: blob_gas_price}, balance=tx_value, ) } @pytest.mark.parametrize( "block_base_fee_per_gas", [1, 7, 15, 16, 17, 100, 1000, 10000], ) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", lambda fork: range(0, fork.target_blobs_per_block() + 1), ) def test_reserve_price_various_base_fee_scenarios( blockchain_test: BlockchainTestFiller, env: Environment, pre: Alloc, block: Block, post: Dict[Address, Account], ) -> None: """ Test reserve price mechanism across various block base fee and excess blob gas scenarios. """ blockchain_test( pre=pre, post=post, blocks=[block], genesis_environment=env, ) @pytest.mark.parametrize_by_fork( "parent_excess_blobs", # Keep max assuming this will be greater than 20 in the future, to test a # blob fee of > 1 :) lambda fork: [0, 3, fork.target_blobs_per_block(), fork.max_blobs_per_block()], ) @pytest.mark.parametrize("block_base_fee_per_gas_delta", [-2, -1, 0, 1, 10, 100]) def test_reserve_price_boundary( blockchain_test: BlockchainTestFiller, env: Environment, pre: Alloc, block: Block, post: Dict[Address, Account], ) -> None: """ Tests the reserve price boundary mechanism. Note the default block base fee per gas is 7 (delta is 0). With a non zero delta the block base fee per gas is set to (boundary * blob base fee) + delta. Example scenarios from parametrization: Assume parent_excess_blobs = 3: delta=-2: blob_base_fee=1, boundary=8, block_base_fee_per_gas=8+(-2)=6, 6 < 8, reserve inactive, effective_fee=1 delta=0: blob_base_fee=1, boundary=8, block_base_fee_per_gas=7, 7 < 8, reserve inactive, effective_fee=1 delta=100: blob_base_fee=1, boundary=8, block_base_fee_per_gas=8+100=108, 108 > 8, reserve active, effective_fee=max(108/8, 1)=13 All values give a blob base_ fee of 1 because we need a much higher excess blob gas to increase the blob fee. This only increases to 2 at 20 excess blobs. """ blockchain_test( genesis_environment=env, pre=pre, blocks=[block], post=post, ) ================================================ FILE: tests/osaka/eip7918_blob_reserve_price/test_blob_reserve_price_with_bpo.py ================================================ """ [EIP-7918: Blob base fee bounded by execution cost](https://eips.ethereum.org/EIPS/eip-7918). """ import pytest from ethereum_test_tools import ( Alloc, Block, BlockchainTestFiller, Environment, ) from .spec import ref_spec_7918 REFERENCE_SPEC_GIT_PATH = ref_spec_7918.git_path REFERENCE_SPEC_VERSION = ref_spec_7918.version @pytest.mark.valid_at_transition_to("BPO1") @pytest.mark.valid_for_bpo_forks() @pytest.mark.parametrize("parent_excess_blobs", [27]) @pytest.mark.parametrize("block_base_fee_per_gas", [17]) def test_blob_base_fee_with_bpo_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, ) -> None: """Test BPO1 transition with EIP-7918 reserve mechanism.""" blockchain_test( genesis_environment=env, pre=pre, blocks=[Block(timestamp=15_000)], post={}, ) ================================================ FILE: tests/osaka/eip7918_blob_reserve_price/test_blob_reserve_price_with_bpo_transitions.py ================================================ """Tests EIP-7918 on BPO fork transitions.""" from dataclasses import dataclass from typing import Iterator, List import pytest from ethereum_test_forks import BPO2ToBPO3AtTime15k, Fork from ethereum_test_tools import ( EOA, Address, Alloc, Block, BlockchainTestFiller, Environment, Hash, Header, Transaction, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from ethereum_test_tools.utility.pytest import ParameterSet from .spec import Spec, ref_spec_7918 REFERENCE_SPEC_GIT_PATH = ref_spec_7918.git_path REFERENCE_SPEC_VERSION = ref_spec_7918.version MIN_BLOB_GASPRICE = 1 @pytest.fixture def sender(pre: Alloc) -> EOA: """Sender account with enough balance for tests.""" return pre.fund_eoa() @pytest.fixture def destination_account(pre: Alloc) -> Address: """Contract recipient of blobs.""" code = Op.STOP return pre.deploy_contract(code) @pytest.fixture def gas_spender_contract(pre: Alloc) -> Address: """Contract that exhausts the gas limit of a tx.""" code = Op.INVALID return pre.deploy_contract(code) @pytest.fixture def tx_gas() -> int: """Gas limit for blob transactions sent during test.""" return 21_000 @pytest.fixture def tx_value() -> int: """Value for blob transactions sent during test.""" return 0 def blob_hashes_per_tx(blobs_per_tx: int) -> List[Hash]: """Blob hashes for the transaction.""" return add_kzg_version( [Hash(x) for x in range(blobs_per_tx)], Spec.BLOB_COMMITMENT_VERSION_KZG, ) @pytest.fixture def source_fork_target_blobs(fork: Fork) -> int: """Transition-from fork target blobs.""" return fork.target_blobs_per_block(timestamp=0) @pytest.fixture def source_fork_gas_per_blob(fork: Fork) -> int: """Transition-from fork gas per blob.""" return fork.blob_gas_per_blob(timestamp=0) @pytest.fixture def transition_fork_target_blobs(fork: Fork) -> int: """Transition-to fork target blobs.""" return fork.target_blobs_per_block(timestamp=15_000) @pytest.fixture def transition_fork_gas_per_blob(fork: Fork) -> int: """Transition-to fork gas per blob.""" return fork.blob_gas_per_blob(timestamp=15_000) @pytest.fixture def genesis_base_fee_per_gas( fork: Fork, parent_base_fee_per_gas: int, ) -> int: """Genesis base fee per gas.""" # Base fee always drops from genesis to block 1 because the genesis block # never uses any tx gas. return (parent_base_fee_per_gas * fork.base_fee_max_change_denominator()) // 7 @pytest.fixture def genesis_excess_blob_gas( fork: Fork, genesis_base_fee_per_gas: int, parent_excess_blob_gas: int, source_fork_target_blobs: int, source_fork_gas_per_blob: int, ) -> int: """Genesis excess blob gas.""" genesis_excess_blob_gas = parent_excess_blob_gas + ( source_fork_target_blobs * source_fork_gas_per_blob ) excess_blob_gas_calculator = fork.excess_blob_gas_calculator(timestamp=0) current_excess_blob_gas = excess_blob_gas_calculator( parent_excess_blob_gas=genesis_excess_blob_gas, parent_blob_count=0, parent_base_fee_per_gas=genesis_base_fee_per_gas, ) if current_excess_blob_gas == parent_excess_blob_gas: return genesis_excess_blob_gas if current_excess_blob_gas > parent_excess_blob_gas: minimum = 0 maximum = genesis_excess_blob_gas while minimum < maximum: mid = (minimum + maximum) // 2 next_excess_blob_gas = excess_blob_gas_calculator( parent_excess_blob_gas=mid, parent_blob_count=0, parent_base_fee_per_gas=genesis_base_fee_per_gas, ) if next_excess_blob_gas == parent_excess_blob_gas: return mid if next_excess_blob_gas > parent_excess_blob_gas: maximum = mid - 1 else: minimum = mid + 1 raise ValueError("No excess blob gas found") @pytest.fixture def env( genesis_excess_blob_gas: int, genesis_base_fee_per_gas: int, ) -> Environment: """Environment for the test.""" return Environment( # Excess blob gas always drops from genesis to block 1 because genesis # uses no blob gas. excess_blob_gas=genesis_excess_blob_gas, base_fee_per_gas=genesis_base_fee_per_gas, gas_limit=16_000_000, # To make it easier to reach the requirement # with a single tx ) def get_blob_transactions( *, blob_count: int, blob_cap_per_transaction: int | None, sender: EOA, destination_account: Address, tx_gas: int, tx_value: int, block_base_fee_per_gas: int, tx_max_fee_per_blob_gas: int, ) -> List[Transaction]: """Return a list of transactions with the given blobs.""" txs = [] if blob_cap_per_transaction is None: blob_cap_per_transaction = blob_count for _ in range(blob_count // blob_cap_per_transaction): tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, max_fee_per_gas=block_base_fee_per_gas, max_priority_fee_per_gas=0, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=[], blob_versioned_hashes=blob_hashes_per_tx(blob_cap_per_transaction), ) txs.append(tx) if blob_count % blob_cap_per_transaction != 0: tx = Transaction( ty=Spec.BLOB_TX_TYPE, sender=sender, to=destination_account, value=tx_value, gas_limit=tx_gas, max_fee_per_gas=block_base_fee_per_gas, max_priority_fee_per_gas=0, max_fee_per_blob_gas=tx_max_fee_per_blob_gas, access_list=[], blob_versioned_hashes=blob_hashes_per_tx(blob_count % blob_cap_per_transaction), ) txs.append(tx) return txs @pytest.fixture def tx_max_fee_per_blob_gas() -> int: """Max fee per blob gas to be used by all transactions in the test.""" return 0x1000 @pytest.fixture def blob_cap_per_transaction(fork: Fork) -> int: """Max blobs that a single transaction can contain.""" return fork.max_blobs_per_tx() @pytest.fixture def parent_block_txs( fork: Fork, sender: EOA, destination_account: Address, gas_spender_contract: Address, env: Environment, tx_gas: int, tx_value: int, parent_blob_count: int, parent_base_fee_per_gas: int, tx_max_fee_per_blob_gas: int, transition_block_base_fee_per_gas: int, blob_cap_per_transaction: int, ) -> List[Transaction]: """ Transactions included in the block prior to the fork transition fork. Includes blob transactions to raise the `parent_blob_gas_used` and normal transactions to raise/lower the base fee per gas. """ parent_block_blob_txs = get_blob_transactions( blob_count=parent_blob_count, blob_cap_per_transaction=blob_cap_per_transaction, sender=sender, destination_account=destination_account, tx_gas=tx_gas, tx_value=tx_value, block_base_fee_per_gas=parent_base_fee_per_gas * 10, tx_max_fee_per_blob_gas=tx_max_fee_per_blob_gas, ) required_gas_used = fork.base_fee_change_calculator()( parent_gas_limit=env.gas_limit, parent_base_fee_per_gas=parent_base_fee_per_gas, required_base_fee_per_gas=transition_block_base_fee_per_gas, ) blob_txs_execution_gas = sum(tx.gas_limit for tx in parent_block_blob_txs) assert blob_txs_execution_gas <= required_gas_used extra_tx_gas_limit = required_gas_used - blob_txs_execution_gas assert extra_tx_gas_limit >= 21_000 extra_tx = Transaction( sender=sender, to=gas_spender_contract, gas_limit=extra_tx_gas_limit, max_fee_per_gas=parent_base_fee_per_gas, max_priority_fee_per_gas=0, access_list=[], ) return parent_block_blob_txs + [extra_tx] @pytest.fixture def parent_block( parent_block_txs: List[Transaction], parent_excess_blob_gas: int, parent_blob_count: int, parent_base_fee_per_gas: int, blob_gas_per_blob: int, ) -> Block: """Parent block to satisfy the pre-fork conditions of the test.""" return Block( txs=parent_block_txs, timestamp=14_999, header_verify=Header( excess_blob_gas=parent_excess_blob_gas, blob_gas_used=parent_blob_count * blob_gas_per_blob, base_fee_per_gas=parent_base_fee_per_gas, ), ) @pytest.fixture def transition_block_txs( sender: EOA, destination_account: Address, tx_gas: int, tx_value: int, transition_block_blob_count: int, blob_cap_per_transaction: int, tx_max_fee_per_blob_gas: int, transition_block_base_fee_per_gas: int, ) -> List[Transaction]: """ Transactions included in the first block of the new fork. Includes blob transactions only. """ return get_blob_transactions( blob_count=transition_block_blob_count, blob_cap_per_transaction=blob_cap_per_transaction, sender=sender, destination_account=destination_account, tx_gas=tx_gas, tx_value=tx_value, block_base_fee_per_gas=transition_block_base_fee_per_gas * 10, tx_max_fee_per_blob_gas=tx_max_fee_per_blob_gas, ) @pytest.fixture def transition_block( transition_block_txs: List[Transaction], transition_block_expected_excess_blob_gas: int | None, transition_block_blob_count: int, transition_block_base_fee_per_gas: int, blob_gas_per_blob: int, ) -> Block: """Parent block to satisfy the pre-fork conditions of the test.""" return Block( txs=transition_block_txs, timestamp=15_000, header_verify=Header( excess_blob_gas=transition_block_expected_excess_blob_gas, blob_gas_used=transition_block_blob_count * blob_gas_per_blob, base_fee_per_gas=transition_block_base_fee_per_gas, ), ) @dataclass(kw_only=True) class ParentHeader: """Parent block header information.""" excess_blob_gas: int blob_gas_used: int base_fee_per_gas: int @dataclass(kw_only=True) class BlobSchedule: """Blob schedule for a fork.""" fork: Fork timestamp: int @property def max(self) -> int: """Return the max blobs per block.""" return self.fork.max_blobs_per_block(timestamp=self.timestamp) @property def target(self) -> int: """Return the target blobs per block.""" return self.fork.target_blobs_per_block(timestamp=self.timestamp) @property def base_fee_update_fraction(self) -> int: """Return the base fee update fraction.""" return self.fork.blob_base_fee_update_fraction(timestamp=self.timestamp) @property def blob_gas_per_blob(self) -> int: """Return the blob gas per blob.""" return self.fork.blob_gas_per_blob(timestamp=self.timestamp) @property def blob_base_cost(self) -> int | None: """Return the blob base cost.""" if self.fork.blob_reserve_price_active(timestamp=self.timestamp): return self.fork.blob_base_cost(timestamp=self.timestamp) return None @property def target_blob_gas_per_block(self) -> int: """Return the target blob gas per block.""" return self.target * self.blob_gas_per_blob def calculate_excess_blob_gas(self, parent_header: ParentHeader) -> int: """ Calculate the excess blob gas for the current block based on the gas used in the parent block. """ excess_blob_gas_calculator = self.fork.excess_blob_gas_calculator(timestamp=self.timestamp) return excess_blob_gas_calculator( parent_excess_blob_gas=parent_header.excess_blob_gas, parent_blob_count=parent_header.blob_gas_used, parent_base_fee_per_gas=parent_header.base_fee_per_gas, ) def execution_base_fee_threshold_from_excess_blob_gas( self, excess_blob_gas: int ) -> int | None: """ Return the minimum base fee required to trigger the reserve mechanism, or None for blob schedules that don't have a reserve price mechanism. """ if self.blob_base_cost is None: return None target_blob_gas_price = self.blob_gas_per_blob blob_gas_price_calculator = self.fork.blob_gas_price_calculator(timestamp=self.timestamp) target_blob_gas_price *= blob_gas_price_calculator(excess_blob_gas=excess_blob_gas) base_blob_tx_price = target_blob_gas_price return (base_blob_tx_price // self.blob_base_cost) + 1 def get_fork_scenarios(fork: Fork) -> Iterator[ParameterSet]: """ Return the list of scenarios at the fork boundary depending on the source fork and transition fork properties. """ source_blob_schedule = BlobSchedule(fork=fork, timestamp=0) transition_blob_schedule = BlobSchedule(fork=fork, timestamp=15_000) excess_blobs_combinations = [0, 1, 10, 100] for parent_excess_blobs in excess_blobs_combinations: parent_excess_blob_gas = parent_excess_blobs * source_blob_schedule.blob_gas_per_blob source_execution_threshold = ( source_blob_schedule.execution_base_fee_threshold_from_excess_blob_gas( parent_excess_blob_gas ) ) transition_execution_threshold = ( transition_blob_schedule.execution_base_fee_threshold_from_excess_blob_gas( parent_excess_blob_gas ) ) if ( source_execution_threshold != transition_execution_threshold and transition_execution_threshold is not None ): # The source base fee reserve threshold is different from the # transition one given the excess blob gas. We can verify that the # BPO is activated correctly by using the a setup block with # transition_execution_threshold to trigger the reserve. for source_blob_count in [0, source_blob_schedule.target, source_blob_schedule.max]: # Scenario 1: Parent base fee per gas is below the threshold at # the parent of the transition block, so even though the base # fee increases on the transition block to reach the value # required to activate the reserve, since the base fee per gas # of the parent is used, the reserve must not be activated. parent_base_fee = transition_execution_threshold - 1 transition_base_fee = transition_execution_threshold parent_header = ParentHeader( excess_blob_gas=parent_excess_blob_gas, blob_gas_used=source_blob_count, base_fee_per_gas=parent_base_fee, ) target_excess_blob_gas = transition_blob_schedule.calculate_excess_blob_gas( parent_header ) source_excess_blob_gas = source_blob_schedule.calculate_excess_blob_gas( parent_header ) if source_excess_blob_gas != target_excess_blob_gas: yield pytest.param( parent_base_fee, parent_excess_blob_gas, source_blob_count, transition_base_fee, transition_blob_schedule.target, None, id=( "below_reserve_base_fee_threshold-" f"parent_excess_blobs_{parent_excess_blobs}-" f"parent_blobs_{source_blob_count}" ), ) # Scenario 2: Parent base fee per gas is at the threshold, so # the reserve is activated even though the base fee per gas # decreases below the threshold on the transition block. parent_base_fee = transition_execution_threshold transition_base_fee = transition_execution_threshold - 1 parent_header = ParentHeader( excess_blob_gas=parent_excess_blob_gas, blob_gas_used=source_blob_count, base_fee_per_gas=parent_base_fee, ) target_excess_blob_gas = transition_blob_schedule.calculate_excess_blob_gas( parent_header ) source_excess_blob_gas = source_blob_schedule.calculate_excess_blob_gas( parent_header ) if source_excess_blob_gas != target_excess_blob_gas: yield pytest.param( parent_base_fee, parent_excess_blob_gas, source_blob_count, transition_base_fee, transition_blob_schedule.target, None, id=( "at_reserve_base_fee_threshold-" f"parent_excess_blobs_{parent_excess_blobs}-" f"parent_blobs_{source_blob_count}" ), ) if fork == BPO2ToBPO3AtTime15k: # Explicitly add the exact scenario that triggered the Fusaka Devnet-4 # fork. yield pytest.param( 0x32, 0x125BF5F, 19, 0x33, 9, 0x132CF5F, id="devnet-4-fork-scenario", ) @pytest.mark.parametrize_by_fork( [ "parent_base_fee_per_gas", "parent_excess_blob_gas", "parent_blob_count", "transition_block_base_fee_per_gas", "transition_block_blob_count", "transition_block_expected_excess_blob_gas", ], get_fork_scenarios, ) @pytest.mark.valid_at_transition_to("Osaka", subsequent_forks=True) @pytest.mark.valid_for_bpo_forks() def test_reserve_price_at_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, parent_block: Block, transition_block: Block, env: Environment, ) -> None: """ Test reserve price mechanism across various block base fee and excess blob gas scenarios. """ blockchain_test( pre=pre, post={}, blocks=[parent_block, transition_block], genesis_environment=env, ) ================================================ FILE: tests/osaka/eip7934_block_rlp_limit/__init__.py ================================================ """ Tests for [EIP-7934: RLP Execution Block Size Limit](https://eips.ethereum.org/EIPS/eip-7934). """ ================================================ FILE: tests/osaka/eip7934_block_rlp_limit/conftest.py ================================================ """Fixtures for the EIP-7934 RLP block size limit tests.""" import pytest from ethereum_test_tools import ( Address, Alloc, ) from ethereum_test_types import Environment from ethereum_test_vm import Opcodes as Op @pytest.fixture def post() -> Alloc: """Post state allocation fixture.""" return Alloc() @pytest.fixture def env() -> Environment: """Environment fixture with a specified gas limit.""" return Environment(gas_limit=100_000_000) @pytest.fixture def contract_recipient(pre: Alloc) -> Address: """Deploy a simple contract that can receive large calldata.""" contract_code = Op.SSTORE(0, Op.CALLDATASIZE) + Op.STOP return pre.deploy_contract(contract_code) ================================================ FILE: tests/osaka/eip7934_block_rlp_limit/eip_checklist_external_coverage.txt ================================================ general/code_coverage/eels = Test coverage should be verified in EELS implementation general/code_coverage/test_coverage = Run tests with --cov flag to verify test coverage general/code_coverage/second_client = Tests marked with verify_sync marker verify block syncing to other clients ================================================ FILE: tests/osaka/eip7934_block_rlp_limit/eip_checklist_not_applicable.txt ================================================ opcode = EIP-7934 does not introduce a new opcode precompile = EIP-7934 does not introduce a new precompile removed_precompile = EIP-7934 does not remove a precompile system_contract = EIP-7934 does not introduce a new system contract transaction_type = EIP-7934 does not introduce a new transaction type block_header_field = EIP-7934 does not add any new block header fields block_body_field = EIP-7934 does not add any new block body fields gas_cost_changes = EIP-7934 does not modify existing gas costs gas_refunds_changes = EIP-7934 does not introduce any gas refund changes blob_count_changes = EIP-7934 does not introduce any blob count changes execution_layer_request = EIP-7934 does not introduce an execution layer request new_transaction_validity_constraint = EIP-7934 introduces a block-level constraint, not a transaction-level constraint modified_transaction_validity_constraint = EIP-7934 introduces a block-level constraint, not a transaction-level constraint block_level_constraint/test/content/receipts = Receipts are not part of the block RLP encoding - only the receipts root hash is included in the block header. Therefore, varying receipt sizes do not affect the block RLP size limit. ================================================ FILE: tests/osaka/eip7934_block_rlp_limit/spec.py ================================================ """Defines EIP-7934 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7934 = ReferenceSpec("EIPS/eip-7934.md", "2e5cc824089bab8d04aee598708e21c0e06857ef") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7934 specifications as defined at https://eips.ethereum.org/EIPS/eip-7934#specification. """ MAX_BLOCK_SIZE = 10_485_760 # 10 MiB SAFETY_MARGIN = 2_097_152 # 2 MiB MAX_RLP_BLOCK_SIZE = MAX_BLOCK_SIZE - SAFETY_MARGIN # 8_388_608 bytes BLOB_COMMITMENT_VERSION_KZG = 1 @staticmethod def exceed_max_rlp_block_size(rlp_encoded_block: bytes) -> bool: """Check if an RLP encoded block exceeds the maximum allowed size.""" return len(rlp_encoded_block) > Spec.MAX_RLP_BLOCK_SIZE ================================================ FILE: tests/osaka/eip7934_block_rlp_limit/test_max_block_rlp_size.py ================================================ """ Tests for [EIP-7934: RLP Execution Block Size Limit](https://eips.ethereum.org/EIPS/eip-7934). """ from functools import lru_cache from typing import List, Tuple import pytest from ethereum_test_base_types import Address, HexNumber, ZeroPaddedHexNumber from ethereum_test_checklists import EIPChecklist from ethereum_test_fixtures.blockchain import ( FixtureBlockBase, FixtureHeader, FixtureWithdrawal, ) from ethereum_test_forks import Fork from ethereum_test_tools import ( Alloc, Block, BlockchainTestFiller, BlockException, Bytes, Transaction, Withdrawal, ) from ethereum_test_tools import Opcodes as Op from ethereum_test_types import EOA, Environment from .spec import Spec, ref_spec_7934 REFERENCE_SPEC_GIT_PATH = ref_spec_7934.git_path REFERENCE_SPEC_VERSION = ref_spec_7934.version pytestmark = [ pytest.mark.pre_alloc_group( "block_rlp_limit_tests", reason="Block RLP size tests require exact calculations", ), pytest.mark.xdist_group(name="bigmem"), ] HEADER_TIMESTAMP = 123456789 EXTRA_DATA_AT_LIMIT = b"\x00\x00\x00" BLOCK_GAS_LIMIT = 100_000_000 @pytest.fixture def block_size_limit(fork: Fork) -> int: """Get the fork-specific block RLP size limit.""" limit = fork.block_rlp_size_limit() if limit is None: raise ValueError("Fork does not implement block RLP size limit") assert limit == Spec.MAX_RLP_BLOCK_SIZE, ( f"Expected block RLP size limit to be {Spec.MAX_RLP_BLOCK_SIZE}, " f"but got {limit} for fork {fork.name}" ) return limit @pytest.fixture def block_errors() -> List[BlockException]: """ Block exceptions expected for blocks that exceed the `MAX_RLP_BLOCK_SIZE`. """ return [BlockException.RLP_BLOCK_LIMIT_EXCEEDED] def create_test_header(gas_used: int) -> FixtureHeader: """Create a standard test header for RLP size calculations.""" return FixtureHeader( difficulty="0x0", number="0x1", gas_limit=hex(BLOCK_GAS_LIMIT), timestamp=hex(HEADER_TIMESTAMP), coinbase="0x" + "00" * 20, parent_hash="0x" + "00" * 32, uncle_hash="0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", state_root="0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", transactions_trie="0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", receiptTrie="0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", bloom="0x" + "00" * 256, gas_used=hex(gas_used), extra_data=EXTRA_DATA_AT_LIMIT.hex(), mix_hash="0x" + "00" * 32, nonce="0x0000000000000042", base_fee_per_gas="0x0", withdrawals_root="0x" + "00" * 32, blob_gas_used="0x0", excess_blob_gas="0x0", parent_beacon_block_root="0x" + "00" * 32, requests_hash="0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", ) def get_block_rlp_size( transactions: List[Transaction], gas_used: int, withdrawals: List[Withdrawal] | None = None ) -> int: """ Calculate the RLP size of a block with given transactions and withdrawals. """ header = create_test_header(gas_used) total_gas = sum((tx.gas_limit or 21000) for tx in transactions) header.gas_used = ZeroPaddedHexNumber(total_gas) # Calculate blob gas used if there are blob transactions blob_gas_used = 0 for tx in transactions: if hasattr(tx, "blob_versioned_hashes") and tx.blob_versioned_hashes: blob_gas_used += len(tx.blob_versioned_hashes) * (2**17) if blob_gas_used > 0: header.blob_gas_used = ZeroPaddedHexNumber(blob_gas_used) # Convert withdrawals to FixtureWithdrawal if provided block_withdrawals = [] if withdrawals is not None: block_withdrawals = [ FixtureWithdrawal( index=w.index, validator_index=w.validator_index, address=w.address, amount=w.amount, ) for w in withdrawals ] test_block = FixtureBlockBase(blockHeader=header, withdrawals=block_withdrawals) return len(test_block.with_rlp(txs=transactions).rlp) def exact_size_transactions( sender: EOA, block_size_limit: int, fork: Fork, pre: Alloc, gas_limit: int, emit_logs: bool = False, specific_transaction_to_include: Transaction | None = None, withdrawals: List[Withdrawal] | None = None, ) -> Tuple[List[Transaction], int]: """ Generate transactions that fill a block to exactly the RLP size limit. The calculation uses caching to avoid recalculating the same block rlp for each fork. Calculate the block and fill with real sender for testing. Args: sender: The sender account block_size_limit: The target block RLP size limit fork: The fork to generate transactions for pre: Required if emit_logs is True, used to deploy the log contract gas_limit: The gas limit for the block emit_logs: If True, transactions will call a contract that emits logs specific_transaction_to_include: If provided, this transaction will be included withdrawals: Optional list of withdrawals to include in the block """ log_contract = None if emit_logs: if pre is None: raise ValueError("pre is required when emit_logs is True") # Deploy a contract that emits logs log_contract_code = Op.SSTORE(1, 1) # Emit multiple LOG4 events with maximum data and topics for _ in range(3): log_contract_code += Op.PUSH32( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ) # topic 4 log_contract_code += Op.PUSH32( 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ) # topic 3 log_contract_code += Op.PUSH32( 0xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ) # topic 2 log_contract_code += Op.PUSH32( 0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ) # topic 1 log_contract_code += Op.PUSH1(32) # size log_contract_code += Op.PUSH1(0) # offset log_contract_code += Op.LOG4 log_contract = pre.deploy_contract(log_contract_code) if not specific_transaction_to_include and not withdrawals: # use cached version when possible for performance transactions, gas_used = _exact_size_transactions_cached( block_size_limit, fork, gas_limit, sender, emit_logs_contract=log_contract, ) else: # Direct calculation, no cache, since `Transaction` / `Withdrawal` # are not hashable transactions, gas_used = _exact_size_transactions_impl( block_size_limit, fork, gas_limit, sender, specific_transaction_to_include=specific_transaction_to_include, emit_logs_contract=log_contract, withdrawals=withdrawals, ) return transactions, gas_used @lru_cache(maxsize=128) def _exact_size_transactions_cached( block_size_limit: int, fork: Fork, gas_limit: int, sender: EOA, emit_logs_contract: Address | None = None, ) -> Tuple[List[Transaction], int]: """ Generate transactions that fill a block to exactly the RLP size limit. Abstracted with hashable arguments for caching block calculations. """ return _exact_size_transactions_impl( block_size_limit, fork, gas_limit, sender, None, emit_logs_contract, None, ) def _exact_size_transactions_impl( block_size_limit: int, fork: Fork, block_gas_limit: int, sender: EOA, specific_transaction_to_include: Transaction | None = None, emit_logs_contract: Address | None = None, withdrawals: List[Withdrawal] | None = None, ) -> Tuple[List[Transaction], int]: """ Calculate the exact size of transactions to be included. Shared by both cached and non-cached paths. """ transactions = [] nonce = 0 total_gas_used = 0 calculator = fork.transaction_intrinsic_cost_calculator() data_large = Bytes(b"\x00" * 500_000) gas_limit_large = calculator(calldata=data_large) # block with 16 transactions + large calldata remains safely below the # limit add 15 generic transactions to fill the block and one typed # transaction if tx_type is specified, otherwise just add 16 generic # transactions not_all_generic_txs = any( kwarg is not None for kwarg in [specific_transaction_to_include, emit_logs_contract] ) generic_tx_num = 15 if not_all_generic_txs else 16 for _ in range(generic_tx_num): tx = Transaction( sender=sender, nonce=nonce, max_fee_per_gas=10**11, max_priority_fee_per_gas=10**11, gas_limit=gas_limit_large, data=data_large, ) transactions.append(tx) total_gas_used += gas_limit_large nonce += 1 # append a typed transaction to fill the block if not_all_generic_txs: if specific_transaction_to_include is not None: tx_dict = specific_transaction_to_include.model_dump(exclude_unset=True) data = Bytes(b"\x00" * 200_000) gas_limit = HexNumber( calculator( calldata=data, access_list=specific_transaction_to_include.access_list, authorization_list_or_count=len(tx_dict.get("authorization_list", [])), ) ) tx_dict["sender"] = sender tx_dict["nonce"] = nonce tx_dict["data"] = data tx_dict["gas_limit"] = gas_limit last_tx = Transaction(**tx_dict) elif emit_logs_contract is not None: last_tx = Transaction( sender=sender, nonce=nonce, max_fee_per_gas=10**11, max_priority_fee_per_gas=10**11, gas_limit=calculator(calldata=b""), to=emit_logs_contract, ) else: raise ValueError( "Either specific_transaction_to_include or emit_logs_contract must be provided." ) transactions.append(last_tx) nonce += 1 total_gas_used += last_tx.gas_limit current_size = get_block_rlp_size( transactions, gas_used=total_gas_used, withdrawals=withdrawals ) remaining_bytes = block_size_limit - current_size remaining_gas = block_gas_limit - total_gas_used if remaining_bytes > 0 and remaining_gas > 50_000: # create an empty transaction to measure base contribution empty_tx = Transaction( sender=sender, nonce=nonce, max_fee_per_gas=10**11, max_priority_fee_per_gas=10**11, gas_limit=calculator(calldata=b""), data=b"", ) empty_block_size = get_block_rlp_size( transactions + [empty_tx], gas_used=total_gas_used + empty_tx.gas_limit, withdrawals=withdrawals, ) empty_contribution = empty_block_size - current_size calldata_bytes_needed = remaining_bytes - empty_contribution estimated_calldata = max(0, calldata_bytes_needed - 5) target_calldata = b"\x00" * estimated_calldata target_gas = calculator(calldata=target_calldata) if target_gas <= remaining_gas: test_tx = Transaction( sender=sender, nonce=nonce, max_fee_per_gas=10**11, max_priority_fee_per_gas=10**11, gas_limit=target_gas, data=target_calldata, ) test_size = get_block_rlp_size( transactions + [test_tx], gas_used=total_gas_used + target_gas, withdrawals=withdrawals, ) if test_size == block_size_limit: # if exact match, use the transaction transactions.append(test_tx) else: # search for the best adjustment diff = block_size_limit - test_size best_diff = abs(diff) search_range = min(abs(diff) + 50, 1000) for adjustment in range(-search_range, search_range + 1): adjusted_size = estimated_calldata + adjustment if adjusted_size < 0: continue adjusted_calldata = b"\x00" * adjusted_size adjusted_gas = calculator(calldata=adjusted_calldata) if adjusted_gas <= remaining_gas: adjusted_tx = Transaction( sender=sender, nonce=nonce, max_fee_per_gas=10**11, max_priority_fee_per_gas=10**11, gas_limit=adjusted_gas, data=adjusted_calldata, ) adjusted_test_size = get_block_rlp_size( transactions + [adjusted_tx], gas_used=total_gas_used + adjusted_gas, withdrawals=withdrawals, ) if adjusted_test_size == block_size_limit: # exact match transactions.append(adjusted_tx) break adjusted_diff = abs(block_size_limit - adjusted_test_size) if adjusted_diff < best_diff: best_diff = adjusted_diff else: raise RuntimeError( "Failed to find a transaction that matches the target size." ) else: transactions.append(empty_tx) final_size = get_block_rlp_size( transactions, gas_used=sum(tx.gas_limit for tx in transactions), withdrawals=withdrawals ) final_gas = sum(tx.gas_limit for tx in transactions) assert final_size == block_size_limit, ( f"Size mismatch: got {final_size}, " f"expected {block_size_limit} " f"({final_size - block_size_limit} bytes diff)" ) return transactions, final_gas @EIPChecklist.BlockLevelConstraint.Test.Boundary.Under() @EIPChecklist.BlockLevelConstraint.Test.Boundary.Exact() @EIPChecklist.BlockLevelConstraint.Test.Boundary.Over() @pytest.mark.parametrize( "delta", [ pytest.param(-1, id="max_rlp_size_minus_1_byte", marks=pytest.mark.verify_sync), pytest.param(0, id="max_rlp_size", marks=pytest.mark.verify_sync), pytest.param(1, id="max_rlp_size_plus_1_byte", marks=pytest.mark.exception_test), ], ) @pytest.mark.valid_from("Osaka") def test_block_at_rlp_size_limit_boundary( blockchain_test: BlockchainTestFiller, pre: Alloc, post: Alloc, env: Environment, sender: EOA, fork: Fork, block_size_limit: int, delta: int, ) -> None: """ Test the block rlp size limit. - At the limit - 1 byte, the block is valid - At the limit, the block is valid - At the limit + 1 byte, the block is invalid """ transactions, gas_used = exact_size_transactions( sender, block_size_limit, fork, pre, env.gas_limit, ) block_rlp_size = get_block_rlp_size(transactions, gas_used=gas_used) assert block_rlp_size == block_size_limit, ( f"Block RLP size {block_rlp_size} does not exactly match limit {block_size_limit}, " f"difference: {block_rlp_size - block_size_limit} bytes" ) block = Block( txs=transactions, exception=BlockException.RLP_BLOCK_LIMIT_EXCEEDED if delta > 0 else None, ) if delta < 0: block.extra_data = Bytes(EXTRA_DATA_AT_LIMIT[: -abs(delta)]) elif delta == 0: block.extra_data = Bytes(EXTRA_DATA_AT_LIMIT) else: # delta > 0 block.extra_data = Bytes(EXTRA_DATA_AT_LIMIT + b"\x00" * delta) block.timestamp = ZeroPaddedHexNumber(HEADER_TIMESTAMP) blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[block], ) @EIPChecklist.BlockLevelConstraint.Test.Content.TransactionTypes() @pytest.mark.with_all_typed_transactions @pytest.mark.verify_sync @pytest.mark.valid_from("Osaka") def test_block_rlp_size_at_limit_with_all_typed_transactions( blockchain_test: BlockchainTestFiller, pre: Alloc, post: Alloc, fork: Fork, sender: EOA, block_size_limit: int, env: Environment, typed_transaction: Transaction, ) -> None: """Test the block RLP size limit with all transaction types.""" transactions, gas_used = exact_size_transactions( sender, block_size_limit, fork, pre, env.gas_limit, specific_transaction_to_include=typed_transaction, ) block_rlp_size = get_block_rlp_size(transactions, gas_used=gas_used) assert block_rlp_size == block_size_limit, ( f"Block RLP size {block_rlp_size} does not exactly match limit {block_size_limit}, " f"difference: {block_rlp_size - block_size_limit} bytes" ) block = Block(txs=transactions) block.extra_data = Bytes(EXTRA_DATA_AT_LIMIT) block.timestamp = ZeroPaddedHexNumber(HEADER_TIMESTAMP) blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[block], ) @EIPChecklist.BlockLevelConstraint.Test.Content.Logs() @pytest.mark.verify_sync @pytest.mark.valid_from("Osaka") def test_block_at_rlp_limit_with_logs( blockchain_test: BlockchainTestFiller, pre: Alloc, post: Alloc, env: Environment, sender: EOA, fork: Fork, block_size_limit: int, ) -> None: """ Test that a block at the RLP size limit is valid even when transactions emit logs. """ transactions, gas_used = exact_size_transactions( sender, block_size_limit, fork, pre, env.gas_limit, emit_logs=True, ) block_rlp_size = get_block_rlp_size(transactions, gas_used=gas_used) assert block_rlp_size == block_size_limit, ( f"Block RLP size {block_rlp_size} does not exactly match limit {block_size_limit}, " f"difference: {block_rlp_size - block_size_limit} bytes" ) block = Block(txs=transactions) block.extra_data = Bytes(EXTRA_DATA_AT_LIMIT) block.timestamp = ZeroPaddedHexNumber(HEADER_TIMESTAMP) blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[block], ) @EIPChecklist.BlockLevelConstraint.Test.Content.Withdrawals() @pytest.mark.verify_sync @pytest.mark.valid_from("Osaka") def test_block_at_rlp_limit_with_withdrawals( blockchain_test: BlockchainTestFiller, pre: Alloc, post: Alloc, env: Environment, sender: EOA, fork: Fork, block_size_limit: int, ) -> None: """ Test that a block at the RLP size limit is valid even when the block contains withdrawals. """ withdrawals = [ Withdrawal( index=0, validator_index=0, address=pre.fund_eoa(), amount=1, ), Withdrawal( index=1, validator_index=1, address=pre.fund_eoa(), amount=1, ), ] transactions, gas_used = exact_size_transactions( sender, block_size_limit, fork, pre, env.gas_limit, withdrawals=withdrawals, ) block_rlp_size = get_block_rlp_size(transactions, gas_used=gas_used, withdrawals=withdrawals) assert block_rlp_size == block_size_limit, ( f"Block RLP size {block_rlp_size} does not exactly match limit {block_size_limit}, " f"difference: {block_rlp_size - block_size_limit} bytes" ) block = Block( txs=transactions, withdrawals=withdrawals, extra_data=Bytes(EXTRA_DATA_AT_LIMIT), timestamp=ZeroPaddedHexNumber(HEADER_TIMESTAMP), ) blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[block], ) @EIPChecklist.BlockLevelConstraint.Test.ForkTransition.AcceptedBeforeFork() @EIPChecklist.BlockLevelConstraint.Test.ForkTransition.AcceptedAfterFork() @EIPChecklist.BlockLevelConstraint.Test.ForkTransition.RejectedAfterFork() @pytest.mark.parametrize( "exceeds_limit_at_fork", [ pytest.param(False, id="at_fork_within_limit"), pytest.param(True, marks=pytest.mark.exception_test, id="at_fork_exceeds_limit"), ], ) @pytest.mark.valid_at_transition_to("Osaka") def test_fork_transition_block_rlp_limit( blockchain_test: BlockchainTestFiller, pre: Alloc, env: Environment, fork: Fork, exceeds_limit_at_fork: bool, block_size_limit: int, ) -> None: """ Test block RLP size limit at fork transition boundary. - Before fork (timestamp 14999): Block at limit +1 should be accepted - At fork (timestamp 15000): Block at limit should be accepted - At fork (timestamp 15000): Block at limit +1 should be rejected """ sender_before_fork = pre.fund_eoa() sender_at_fork = pre.fund_eoa() transactions_before, gas_used_before = exact_size_transactions( sender_before_fork, block_size_limit, fork, pre, env.gas_limit, ) transactions_at_fork, gas_used_at_fork = exact_size_transactions( sender_at_fork, block_size_limit, fork, pre, env.gas_limit, ) for fork_block_rlp_size in [ get_block_rlp_size(transactions_before, gas_used=gas_used_before), get_block_rlp_size(transactions_at_fork, gas_used=gas_used_at_fork), ]: assert fork_block_rlp_size == block_size_limit, ( f"Block RLP size {fork_block_rlp_size} does not exactly match " f"limit {block_size_limit}, difference: " f"{fork_block_rlp_size - block_size_limit} bytes" ) # HEADER_TIMESTAMP (123456789) used in calculation takes 4 bytes in RLP # encoding. Transition timestamps (14_999 and 15_000) take 2 bytes # Re-define `_extradata_at_limit` accounting for this difference timestamp_byte_savings = 2 _extradata_at_limit = EXTRA_DATA_AT_LIMIT + (b"\x00" * timestamp_byte_savings) blocks = [ # before fork, block at limit +1 should be accepted Block( timestamp=14_999, txs=transactions_before, # +1 to exceed limit extra_data=Bytes(_extradata_at_limit + b"\x00"), ) ] # At fork (timestamp 15000): Test behavior with and without exceeding limit if exceeds_limit_at_fork: blocks.append( Block( timestamp=15_000, txs=transactions_at_fork, # +1 to exceed limit, should be rejected extra_data=Bytes(_extradata_at_limit + b"\x00"), exception=BlockException.RLP_BLOCK_LIMIT_EXCEEDED, ) ) else: blocks.append( Block( timestamp=15_000, txs=transactions_at_fork, # exact limit should be accepted extra_data=Bytes(EXTRA_DATA_AT_LIMIT), ) ) blockchain_test( genesis_environment=env, pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/osaka/eip7939_count_leading_zeros/__init__.py ================================================ """ Tests [EIP-7939: Count leading zeros (CLZ) opcode](https://eips.ethereum.org/EIPS/eip-7939). """ ================================================ FILE: tests/osaka/eip7939_count_leading_zeros/eip_checklist_external_coverage.txt ================================================ general/code_coverage/eels = Please check https://app.codecov.io/gh/ethereum/execution-specs/pull/1388/blob/src/ethereum/osaka/vm/instructions/bitwise.py#L243 for relevant test coverage general/code_coverage/test_coverage = Please run the test with `--cov` flag for final coverage ================================================ FILE: tests/osaka/eip7939_count_leading_zeros/eip_checklist_not_applicable.txt ================================================ system_contract = EIP does not introduce a new system contract precompile = EIP does not introduce a new precompile removed_precompile = EIP does not remove a precompile transaction_type = EIP does not introduce a new transaction type block_header_field = EIP does not add any new block header fields block_body_field = EIP does not add any new block body fields gas_cost_changes = EIP does not modify existing gas costs, only introduces new opcode with fixed cost gas_refunds_changes = EIP does not introduce any gas refund changes blob_count_changes = EIP does not introduce any blob count changes execution_layer_request = EIP does not introduce an execution layer request new_transaction_validity_constraint = EIP does not introduce a new transaction validity constraint modified_transaction_validity_constraint = EIP does not introduce a modified transaction validity constraint opcode/test/mem_exp = CLZ does not read/write to memory component opcode/test/stack_overflow = CLZ takes one args and pushes one args to stack, not increasing stack element, hence no overflow issue opcode/test/stack_complex_operations/data_portion_variables = there is no data portion for CLZ opcode/test/execution_context/delegatecall/code = CLZ does not modify code opcode/test/execution_context/tx_context = CLZ does not change behavior depending on transaction property opcode/test/execution_context/block_context = CLZ does not change behavior depending on block property opcode/test/execution_context/initcode/reentry = CLZ is not a stateful opcode opcode/test/gas_usage/memory_expansion = no memory read/write for CLZ opcode/test/gas_usage/out_of_gas_memory = no memory read/write for CLZ opcode/test/gas_usage/order_of_operations = the order will not affect result of CLZ opcode/test/return_data = although we could verify the return buffer is not affected, but it is more like testing memory write operation, as CLZ does not write to memory directly opcode/test/terminating = not such opcode opcode/test/terminating/rollback = CLZ is not a terminating opcode, so no rollback behavior opcode/test/out_of_bounds = takes one element from stack, no specific boundary opcode/test/exceptional_abort = underflow is the only exceptional abort scenario and it is included already opcode/test/data_portion = no data portion opcode/test/contract_creation = no contract created in execution ================================================ FILE: tests/osaka/eip7939_count_leading_zeros/spec.py ================================================ """Defines EIP-7939 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7939 = ReferenceSpec("EIPS/eip-7939.md", "c8321494fdfbfda52ad46c3515a7ca5dc86b857c") @dataclass(frozen=True) class Spec: """Constants and helpers for the CLZ opcode.""" CLZ = 0x1E CLZ_GAS_COST = 5 @classmethod def calculate_clz(cls, value: int) -> int: """Calculate the count of leading zeros for a 256-bit value.""" if value == 0: return 256 return 256 - value.bit_length() ================================================ FILE: tests/osaka/eip7939_count_leading_zeros/test_count_leading_zeros.py ================================================ """ Tests [EIP-7939: Count leading zeros (CLZ)](https://eips.ethereum.org/EIPS/eip-7939). """ import pytest from ethereum_test_base_types import Storage from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, AuthorizationTuple, Block, BlockchainTestFiller, Bytecode, CodeGasMeasure, Environment, StateTestFiller, Transaction, compute_create_address, ) from ethereum_test_vm import Opcodes as Op from ...prague.eip7702_set_code_tx.spec import Spec as Spec7702 from .spec import Spec, ref_spec_7939 REFERENCE_SPEC_GIT_PATH = ref_spec_7939.git_path REFERENCE_SPEC_VERSION = ref_spec_7939.version def clz_parameters() -> list: """Generate all test case parameters.""" test_cases = [] # Format 0x000...000: all zeros test_cases.append(("zero", 0, 256)) # Format 0xb000...111: leading zeros followed by ones for bits in range(257): value = (2**256 - 1) >> bits expected_clz = bits assert expected_clz == Spec.calculate_clz(value), ( f"CLZ calculation mismatch for leading_zeros_{bits}: " f"manual={expected_clz}, spec={Spec.calculate_clz(value)}, value={hex(value)}" ) test_cases.append((f"leading_zeros_{bits}", value, expected_clz)) # Format 0xb010...000: single bit set (1 << N for N = 1…256) for bits in range(1, 257): if bits == 256: # Special case: 1 << 256 = 0 in 256-bit arithmetic (overflow) value = 0 expected_clz = 256 else: value = 1 << bits expected_clz = 255 - bits assert expected_clz == Spec.calculate_clz(value), ( f"CLZ calculation mismatch for single_bit_{bits}: " f"manual={expected_clz}, spec={Spec.calculate_clz(value)}, value={hex(value)}" ) test_cases.append((f"single_bit_{bits}", value, expected_clz)) # Arbitrary edge cases arbitrary_values = [ 0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0, 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF, 0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F, 0xDEADBEEFCAFEBABE0123456789ABCDEF, 0x0123456789ABCDEF, (1 << 128) + 1, (1 << 200) + (1 << 100), 2**255 - 1, ] for i, value in enumerate(arbitrary_values): expected_clz = Spec.calculate_clz(value) test_cases.append((f"arbitrary_{i}", value, expected_clz)) return test_cases @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize( "test_id,value,expected_clz", clz_parameters(), ids=[f"{test_data[0]}-expected_clz_{test_data[2]}" for test_data in clz_parameters()], ) def test_clz_opcode_scenarios( state_test: StateTestFiller, pre: Alloc, test_id: str, value: int, expected_clz: int, ) -> None: """ Test CLZ opcode functionality. Cases: - Format 0xb000...111: leading zeros followed by ones (2**256 - 1 >> bits) - Format 0xb010...000: single bit set at position (1 << bits) Test coverage: - Leading zeros pattern: 0b000...111 (0 to 256 leading zeros) - Single bit pattern: 0b010...000 (bit at each possible position) - Edge cases: CLZ(0) = 256, CLZ(2^256-1) = 0 """ sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(0, Op.CLZ(value)), storage={"0x00": "0xdeadbeef"}, ) tx = Transaction( to=contract_address, sender=sender, gas_limit=200_000, ) post = { contract_address: Account(storage={"0x00": expected_clz}), } state_test(pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Osaka") def test_clz_gas_cost(state_test: StateTestFiller, pre: Alloc, fork: Fork) -> None: """Test CLZ opcode gas cost.""" contract_address = pre.deploy_contract( Op.SSTORE( 0, CodeGasMeasure( code=Op.CLZ(Op.PUSH1(1)), extra_stack_items=1, overhead_cost=fork.gas_costs().G_VERY_LOW, ), ), storage={"0x00": "0xdeadbeef"}, ) sender = pre.fund_eoa() tx = Transaction(to=contract_address, sender=sender, gas_limit=200_000) post = { contract_address: Account( # Cost measured is CLZ + PUSH1 storage={"0x00": fork.gas_costs().G_LOW} ), } state_test(pre=pre, post=post, tx=tx) @EIPChecklist.Opcode.Test.GasUsage.Normal() @EIPChecklist.Opcode.Test.GasUsage.OutOfGasExecution() @EIPChecklist.Opcode.Test.GasUsage.ExtraGas() @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize("bits", [0, 64, 128, 255]) @pytest.mark.parametrize("gas_cost_delta", [-2, -1, 0, 1, 2]) def test_clz_gas_cost_boundary( state_test: StateTestFiller, pre: Alloc, fork: Fork, bits: int, gas_cost_delta: int, ) -> None: """Test CLZ opcode gas cost boundary.""" code = Op.PUSH32(1 << bits) + Op.CLZ contract_address = pre.deploy_contract(code=code) call_code = Op.SSTORE( 0, Op.CALL( gas=fork.gas_costs().G_VERY_LOW + Spec.CLZ_GAS_COST + gas_cost_delta, address=contract_address, ), ) call_address = pre.deploy_contract( code=call_code, storage={"0x00": "0xdeadbeef"}, ) tx = Transaction(to=call_address, sender=pre.fund_eoa(), gas_limit=200_000) post = {call_address: Account(storage={"0x00": 0 if gas_cost_delta < 0 else 1})} state_test(pre=pre, post=post, tx=tx) @EIPChecklist.Opcode.Test.StackUnderflow() @EIPChecklist.Opcode.Test.StackComplexOperations.StackHeights.Zero() @pytest.mark.valid_from("Osaka") def test_clz_stack_underflow(state_test: StateTestFiller, pre: Alloc) -> None: """ Test CLZ opcode with empty stack (should revert due to stack underflow). """ sender = pre.fund_eoa() callee_address = pre.deploy_contract( code=Op.CLZ + Op.STOP, # No stack items, should underflow ) caller_address = pre.deploy_contract( code=Op.SSTORE(0, Op.CALL(gas=0xFFFF, address=callee_address)), storage={"0x00": "0xdeadbeef"}, ) tx = Transaction( to=caller_address, sender=sender, gas_limit=200_000, ) post = { caller_address: Account( storage={"0x00": 0} # Call failed due to stack underflow ), } state_test(pre=pre, post=post, tx=tx) @EIPChecklist.Opcode.Test.StackComplexOperations.StackHeights.Odd() @EIPChecklist.Opcode.Test.StackComplexOperations.StackHeights.Even() @pytest.mark.valid_from("Osaka") def test_clz_stack_not_overflow(state_test: StateTestFiller, pre: Alloc, fork: Fork) -> None: """Test CLZ opcode never causes stack overflow.""" max_stack_items = fork.max_stack_height() code = Bytecode() post = {} code += Op.PUSH0 * (max_stack_items - 2) for i in range(256): code += Op.PUSH1(i) + Op.CLZ(1 << i) + Op.SWAP1 + Op.SSTORE code_address = pre.deploy_contract(code=code) post[code_address] = Account(storage={i: 255 - i for i in range(256)}) tx = Transaction( to=code_address, sender=pre.fund_eoa(), gas_limit=6_000_000, ) state_test(pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Osaka") def test_clz_push_operation_same_value(state_test: StateTestFiller, pre: Alloc) -> None: """Test CLZ opcode returns the same value via different push operations.""" storage = {} code = Op.SSTORE(0, Op.CLZ(Op.PUSH0)) storage[0x00] = 256 for bit in range(1, 33): # PUSH value for push_n in range(bit, 33): # PUSHn opcode op = getattr(Op, f"PUSH{push_n}") key = 100 * bit + push_n code += Op.SSTORE(key, Op.CLZ(op[1 << bit])) storage[key] = 255 - bit code_address = pre.deploy_contract(code=code) tx = Transaction( to=code_address, sender=pre.fund_eoa(), gas_limit=12_000_000, ) post = { code_address: Account( storage=storage, ) } state_test(pre=pre, post=post, tx=tx) @EIPChecklist.Opcode.Test.ForkTransition.Invalid() @EIPChecklist.Opcode.Test.ForkTransition.At() @pytest.mark.valid_at_transition_to("Osaka", subsequent_forks=True) def test_clz_fork_transition(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """Test CLZ opcode behavior at fork transition.""" sender = pre.fund_eoa() callee_address = pre.deploy_contract( code=Op.SSTORE(Op.TIMESTAMP, Op.CLZ(1 << 100)) + Op.STOP, storage={14_999: "0xdeadbeef"}, ) caller_address = pre.deploy_contract( code=Op.SSTORE(Op.TIMESTAMP, Op.CALL(gas=0xFFFF, address=callee_address)), storage={14_999: "0xdeadbeef"}, ) blocks = [ Block( timestamp=14_999, txs=[ Transaction( to=caller_address, sender=sender, nonce=0, gas_limit=200_000, ) ], ), Block( timestamp=15_000, txs=[ Transaction( to=caller_address, sender=sender, nonce=1, gas_limit=200_000, ) ], ), Block( timestamp=15_001, txs=[ Transaction( to=caller_address, sender=sender, nonce=2, gas_limit=200_000, ) ], ), ] blockchain_test( pre=pre, blocks=blocks, post={ caller_address: Account( storage={ 14_999: 0, # Call fails as opcode not valid before Osaka 15_000: 1, # Call succeeds on fork transition block 15_001: 1, # Call continues to succeed after transition } ), callee_address: Account( storage={ # CLZ not valid before fork, storage unchanged 14_999: "0xdeadbeef", # CLZ valid on transition block, CLZ(1 << 100) = 155 15_000: 155, # CLZ continues to be valid after transition 15_001: 155, } ), }, ) @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize("opcode", [Op.JUMPI, Op.JUMP]) @pytest.mark.parametrize("valid_jump", [True, False]) @pytest.mark.parametrize("jumpi_condition", [True, False]) @pytest.mark.parametrize("bits", [0, 16, 64, 128, 255]) def test_clz_jump_operation( state_test: StateTestFiller, pre: Alloc, opcode: Op, valid_jump: bool, jumpi_condition: bool, bits: int, ) -> None: """Test CLZ opcode with valid and invalid jump.""" if opcode == Op.JUMP and not jumpi_condition: pytest.skip("Duplicate case for JUMP.") code = Op.PUSH32(1 << bits) if opcode == Op.JUMPI: code += Op.PUSH1(jumpi_condition) code += Op.PUSH1(len(code) + 3) + opcode if valid_jump: code += Op.JUMPDEST code += Op.CLZ + Op.PUSH0 + Op.SSTORE + Op.RETURN(0, 0) callee_address = pre.deploy_contract(code=code) caller_address = pre.deploy_contract( code=Op.SSTORE(0, Op.CALL(gas=0xFFFF, address=callee_address)), storage={"0x00": "0xdeadbeef"}, ) tx = Transaction( to=caller_address, sender=pre.fund_eoa(), gas_limit=200_000, ) expected_clz = 255 - bits post = { caller_address: Account(storage={"0x00": 1 if valid_jump or not jumpi_condition else 0}), } if valid_jump or not jumpi_condition: post[callee_address] = Account(storage={"0x00": expected_clz}) state_test(pre=pre, post=post, tx=tx) auth_account_start_balance = 0 @EIPChecklist.Opcode.Test.ExecutionContext.SetCode() @pytest.mark.valid_from("Osaka") def test_clz_from_set_code( state_test: StateTestFiller, pre: Alloc, ) -> None: """Test the address opcode in a set-code transaction.""" storage = Storage() auth_signer = pre.fund_eoa(auth_account_start_balance) set_code = Bytecode() for bits in [0, 1, 128, 255]: expected_clz = 255 - bits set_code += Op.SSTORE(storage.store_next(expected_clz), Op.CLZ(1 << bits)) set_code += Op.STOP set_code_to_address = pre.deploy_contract(set_code) tx = Transaction( gas_limit=200_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account(storage={}), auth_signer: Account( nonce=1, code=Spec7702.delegation_designation(set_code_to_address), storage=storage, ), }, ) @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize("bits", [0, 64, 255]) @pytest.mark.parametrize("opcode", [Op.CODECOPY, Op.EXTCODECOPY]) def test_clz_code_copy_operation( state_test: StateTestFiller, pre: Alloc, bits: int, opcode: Op ) -> None: """Test CLZ opcode with code copy operation.""" storage = Storage() expected_value = 255 - bits clz_code_offset = len(Op.CLZ(1 << bits)) - 1 # Offset to CLZ opcode mload_value = Spec.CLZ << 248 # CLZ opcode in MSB position (0x1E000...000) target_address = pre.deploy_contract(code=Op.CLZ(1 << bits)) clz_contract_address = pre.deploy_contract( code=( Op.CLZ(1 << bits) # Calculate CLZ of the value + Op.SSTORE(storage.store_next(expected_value), Op.CLZ(1 << bits)) # Store CLZ result + ( # Load CLZ byte from code with CODECOPY or EXTCODECOPY Op.CODECOPY(dest_offset=0, offset=clz_code_offset, size=1) if opcode == Op.CODECOPY else Op.EXTCODECOPY( address=target_address, dest_offset=0, offset=clz_code_offset, size=1 ) ) # Store loaded CLZ byte + Op.SSTORE(storage.store_next(mload_value), Op.MLOAD(0)) ), storage={"0x00": "0xdeadbeef"}, ) post = { clz_contract_address: Account( storage={ "0x00": expected_value, "0x01": mload_value, } ) } tx = Transaction( to=clz_contract_address, sender=pre.fund_eoa(), gas_limit=200_000, ) state_test(pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize("bits", [0, 64, 255]) @pytest.mark.parametrize("opcode", [Op.CODECOPY, Op.EXTCODECOPY]) def test_clz_with_memory_operation( state_test: StateTestFiller, pre: Alloc, bits: int, opcode: Op ) -> None: """Test CLZ opcode with memory operation.""" storage = Storage() expected_value = 255 - bits # Target code pattern: # PUSH32 (1 << bits) # PUSH0 # MSTORE # # This sequence stores a 32-byte value in memory. # Later, we copy the immediate value from the PUSH32 instruction into # memory using CODECOPY or EXTCODECOPY, and then load it with MLOAD for # the CLZ test. target_code = Op.PUSH32(1 << bits) offset = 1 target_address = pre.deploy_contract(code=target_code) clz_contract_address = pre.deploy_contract( code=( target_code + Op.SSTORE(storage.store_next(expected_value), Op.CLZ(1 << bits)) # Store CLZ result + ( Op.CODECOPY(dest_offset=0, offset=offset, size=0x20) if opcode == Op.CODECOPY else Op.EXTCODECOPY( address=target_address, dest_offset=0, offset=offset, size=0x20 ) ) + Op.SSTORE(storage.store_next(expected_value), Op.CLZ(Op.MLOAD(0))) ), storage={"0x00": "0xdeadbeef"}, ) post = { clz_contract_address: Account(storage={"0x00": expected_value, "0x01": expected_value}), } tx = Transaction( to=clz_contract_address, sender=pre.fund_eoa(), gas_limit=200_000, ) state_test(pre=pre, post=post, tx=tx) @EIPChecklist.Opcode.Test.ExecutionContext.Initcode.Behavior.Tx() @pytest.mark.valid_from("Osaka") def test_clz_initcode_context(state_test: StateTestFiller, pre: Alloc) -> None: """Test CLZ opcode behavior when creating a contract.""" bits = [0, 1, 64, 128, 255] storage = Storage() init_code = Bytecode() for bit in bits: init_code += Op.SSTORE(storage.store_next(255 - bit), Op.CLZ(1 << bit)) sender_address = pre.fund_eoa() contract_address = compute_create_address(address=sender_address, nonce=0) tx = Transaction( to=None, gas_limit=6_000_000, data=init_code, sender=sender_address, ) post = { contract_address: Account(storage=storage), } state_test(pre=pre, post=post, tx=tx) @EIPChecklist.Opcode.Test.ExecutionContext.Initcode.Behavior.Opcode() @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize("opcode", [Op.CREATE, Op.CREATE2]) def test_clz_initcode_create(state_test: StateTestFiller, pre: Alloc, opcode: Op) -> None: """Test CLZ opcode behavior when creating a contract.""" bits = [0, 1, 64, 128, 255] # expected values: [255, 254, 191, 127, 0] storage = Storage() ext_code = Bytecode() for bit in bits: ext_code += Op.SSTORE(storage.store_next(255 - bit), Op.CLZ(1 << bit)) sender_address = pre.fund_eoa() create_contract = ( Op.CALLDATACOPY(offset=0, size=len(ext_code)) + opcode(offset=0, size=len(ext_code)) + Op.STOP ) factory_contract_address = pre.deploy_contract(code=create_contract) created_contract_address = compute_create_address( address=factory_contract_address, nonce=1, initcode=ext_code, opcode=opcode ) tx = Transaction( to=factory_contract_address, gas_limit=200_000, data=ext_code, sender=sender_address, ) post = { created_contract_address: Account( storage=storage, ), } state_test(pre=pre, post=post, tx=tx) class CallingContext: """Context for calling operations.""" callee_context = 1 # CALL caller_context = 2 # DELEGATECALL no_context = 3 # STATICCALL @EIPChecklist.Opcode.Test.ExecutionContext.Call() @EIPChecklist.Opcode.Test.ExecutionContext.Delegatecall() @EIPChecklist.Opcode.Test.ExecutionContext.Callcode() @EIPChecklist.Opcode.Test.ExecutionContext.Staticcall() @pytest.mark.valid_from("Osaka") @pytest.mark.parametrize( "opcode,context", [ pytest.param(Op.CALL, CallingContext.callee_context, id="call"), pytest.param(Op.DELEGATECALL, CallingContext.caller_context, id="delegatecall"), pytest.param(Op.CALLCODE, CallingContext.caller_context, id="callcode"), pytest.param(Op.STATICCALL, CallingContext.no_context, id="staticcall"), ], ) def test_clz_call_operation( state_test: StateTestFiller, pre: Alloc, opcode: Op, context: CallingContext ) -> None: """Test CLZ opcode with call operation.""" test_cases = [0, 64, 255] # Storage Layout callee_storage = Storage() caller_storage = Storage() callee_code = Bytecode() for bits in reversed(test_cases): callee_code += Op.CLZ(1 << bits) if context != CallingContext.no_context: for bits in test_cases: callee_code += Op.SSTORE(callee_storage.store_next(255 - bits), Op.CLZ(1 << bits)) for i in range(len(test_cases)): callee_code += Op.PUSH32(i * 0x20) + Op.MSTORE callee_code += Op.RETURN(0, len(test_cases) * 0x20) callee_address = pre.deploy_contract(code=callee_code) caller_code = opcode( gas=0xFFFF, address=callee_address, ret_offset=0, ret_size=len(test_cases) * 0x20 ) for i, bits in enumerate(test_cases): caller_code += Op.SSTORE(caller_storage.store_next(255 - bits), Op.MLOAD(i * 0x20)) caller_address = pre.deploy_contract(code=caller_code) tx = Transaction( to=caller_address, sender=pre.fund_eoa(), gas_limit=200_000, ) post = {} if context == CallingContext.caller_context: post[caller_address] = Account(storage=callee_storage) elif context == CallingContext.callee_context: post[callee_address] = Account(storage=callee_storage) post[caller_address] = Account(storage=caller_storage) elif context == CallingContext.no_context: post[caller_address] = Account(storage=caller_storage) state_test(pre=pre, post=post, tx=tx) ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/__init__.py ================================================ """ Tests [EIP-7951: Precompile for secp256r1 Curve Support](https://eips.ethereum.org/EIPS/eip-7951). """ ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/conftest.py ================================================ """Shared pytest definitions local to EIP-7951 tests.""" from typing import SupportsBytes import pytest from ethereum_test_forks import Fork from ethereum_test_tools import EOA, Address, Alloc, Bytecode, Storage, Transaction, keccak256 from ethereum_test_tools import Opcodes as Op from .spec import Spec @pytest.fixture def vector_gas_value() -> int | None: """ Gas value from the test vector if any. If `None` it means that the test scenario did not come from a file, so no comparison is needed. The `vectors_from_file` function reads the gas value from the file and overwrites this fixture. """ return None @pytest.fixture def precompile_gas(vector_gas_value: int | None) -> int: """Gas cost for the precompile.""" if vector_gas_value is not None: assert vector_gas_value == Spec.P256VERIFY_GAS, ( f"Calculated gas {vector_gas_value} != Vector gas {Spec.P256VERIFY_GAS}" ) return Spec.P256VERIFY_GAS @pytest.fixture def precompile_gas_modifier() -> int: """ Modify the gas passed to the precompile, for testing purposes. By default the call is made with the exact gas amount required for the given opcode, but when this fixture is overridden, the gas amount can be modified to, e.g., test a lower amount and test if the precompile call fails. """ return 0 @pytest.fixture def call_opcode() -> Op: """ Type of call used to call the precompile. By default it is Op.CALL, but it can be overridden in the test. """ return Op.CALL @pytest.fixture def call_contract_post_storage() -> Storage: """ Storage of the test contract after the transaction is executed. Note: Fixture `call_contract_code` fills the actual expected storage values. """ return Storage() @pytest.fixture def call_succeeds() -> bool: """ By default, depending on the expected output, we can deduce if the call is expected to succeed or fail. """ return True @pytest.fixture def call_contract_code( precompile_address: int, precompile_gas: int, precompile_gas_modifier: int, expected_output: bytes | SupportsBytes, call_succeeds: bool, call_opcode: Op, call_contract_post_storage: Storage, ) -> Bytecode: """Code of the test contract.""" expected_output = bytes(expected_output) assert call_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] value = [0] if call_opcode in [Op.CALL, Op.CALLCODE] else [] code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.SSTORE( call_contract_post_storage.store_next(call_succeeds), call_opcode( precompile_gas + precompile_gas_modifier, precompile_address, *value, 0, Op.CALLDATASIZE(), 0, 0, ) + Op.SSTORE( call_contract_post_storage.store_next(len(expected_output)), Op.RETURNDATASIZE() ), ) if call_succeeds: # Add integrity check only if the call is expected to succeed. code += Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE()) + Op.SSTORE( call_contract_post_storage.store_next(keccak256(expected_output)), Op.SHA3(0, Op.RETURNDATASIZE()), ) return code @pytest.fixture def call_contract_address(pre: Alloc, call_contract_code: Bytecode) -> Address: """Address where the test contract will be deployed.""" return pre.deploy_contract(call_contract_code) @pytest.fixture def post(call_contract_address: Address, call_contract_post_storage: Storage) -> dict: """Test expected post outcome.""" return { call_contract_address: { "storage": call_contract_post_storage, }, } @pytest.fixture def tx_gas_limit(fork: Fork, input_data: bytes, precompile_gas: int) -> int: """ Transaction gas limit used for the test (Can be overridden in the test). """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() extra_gas = 100_000 return ( extra_gas + intrinsic_gas_cost_calculator(calldata=input_data) + memory_expansion_gas_calculator(new_bytes=len(input_data)) + precompile_gas ) @pytest.fixture def tx( input_data: bytes, tx_gas_limit: int, call_contract_address: Address, sender: EOA, ) -> Transaction: """Transaction for the test.""" return Transaction( gas_limit=tx_gas_limit, data=input_data, to=call_contract_address, sender=sender ) ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/eip_checklist_external_coverage.txt ================================================ general/code_coverage/eels = Covered in EELS general/code_coverage/test_coverage = Run locally ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/eip_checklist_not_applicable.txt ================================================ general/code_coverage/second_client = Optional system_contract = EIP does not include a new system contract opcode = EIP does not introduce a new opcode removed_precompile = EIP does not remove a precompile precompile/test/gas_usage/dynamic = EIP uses a constant amount of gas precompile/test/input_lengths/dynamic = EIP input is a constant length precompile/test/value_transfer/fee = EIP does not require a minimum value to execute transaction_type = EIP does not introduce a new transaction type block_header_field = EIP does not add any new block header fields gas_cost_changes = EIP does not introduce any gas cost changes gas_refunds_changes = EIP does not introduce any gas refund changes blob_count_changes = EIP does not introduce any blob count changes execution_layer_request = EIP does not introduce an execution layer request new_transaction_validity_constraint = EIP does not introduce a new transaction validity constraint modified_transaction_validity_constraint = EIP does not introduce a modified transaction validity constraint block_body_field = EIP does not add any new block body fields ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/helpers.py ================================================ """Helper functions for the EIP-7951 P256VERIFY precompiles tests.""" import os from typing import Annotated, Any, List import pytest from pydantic import BaseModel, BeforeValidator, ConfigDict, RootModel, TypeAdapter from pydantic.alias_generators import to_pascal def current_python_script_directory(*args: str) -> str: """ Get the current Python script directory, optionally appending additional path components. """ return os.path.join(os.path.dirname(os.path.realpath(__file__)), *args) class Vector(BaseModel): """Test vector for the secp256r1 precompile.""" input: Annotated[bytes, BeforeValidator(bytes.fromhex)] expected: Annotated[bytes, BeforeValidator(bytes.fromhex)] gas: int name: str model_config = ConfigDict(alias_generator=to_pascal) def to_pytest_param(self) -> Any: """ Convert the test vector to a tuple that can be used as a parameter in a pytest test. """ return pytest.param(self.input, self.expected, self.gas, id=self.name) class FailVector(BaseModel): """Test vector for the BLS12-381 precompiles.""" input: Annotated[bytes, BeforeValidator(bytes.fromhex)] expected_error: str name: str model_config = ConfigDict(alias_generator=to_pascal) def to_pytest_param(self) -> Any: """ Convert the test vector to a tuple that can be used as a parameter in a pytest test. """ return pytest.param(self.input, id=self.name) class VectorList(RootModel): """List of test vectors for the secp256r1 precompile.""" root: List[Vector | FailVector] VectorListAdapter = TypeAdapter(VectorList) def vectors_from_file(filename: str) -> List: """Load test vectors from a file.""" with open( current_python_script_directory( "vectors", filename, ), "rb", ) as f: vectors_list = VectorListAdapter.validate_json(f.read()) all_inputs = set() for vector in vectors_list.root: if vector.input in all_inputs: raise ValueError(f"Duplicate input: {vector.input.hex()}") all_inputs.add(vector.input) return [v.to_pytest_param() for v in vectors_list.root] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/scripts/find_low_p256_points.sage ================================================ # Find points on P256 with low x or y coordinates by solving the curve equation # independently for range of low x and y values. # # Can be executed online: https://sagecell.sagemath.org/?q=pmqnkn # # Test cases generated: # # x_0_y_positive: # (0x0000000000000000000000000000000000000000000000000000000000000000, 0x66485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4) # x_0_y_negative: # (0x0000000000000000000000000000000000000000000000000000000000000000, 0x99b7a386f1d07c29dbcc42a27b5f9449abe3d50de25178e8d7407a95e8b06c0b) # x_5_y_positive: # x_P_plus_5_y_positive: # (0x0000000000000000000000000000000000000000000000000000000000000005, 0x459243b9aa581806fe913bce99817ade11ca503c64d9a3c533415c083248fbcc) # x_5_y_negative: # x_P_plus_5_y_negative: # (0x0000000000000000000000000000000000000000000000000000000000000005, 0xba6dbc4555a7e7fa016ec431667e8521ee35afc49b265c3accbea3f7cdb70433) # y_1: # y_P_plus_1: # (0x09e78d4ef60d05f750f6636209092bc43cbdd6b47e11a9de20a9feb2a50bb96c, 0x0000000000000000000000000000000000000000000000000000000000000001) p = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff a = -3 b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b F = GF(p) aF = F(a) bF = F(b) M = 11 for x_int in range(0, M): print(f"x = {x_int}:") xF = F(x_int) rhs = xF**3 + aF*xF + bF if rhs.is_square(): y = rhs.sqrt() for yF in [y, -y]: print(f" (0x{int(xF):064x}, 0x{int(yF):064x})") R. = PolynomialRing(F) for y_int in range(0, M): yF = F(y_int) # Solve x^3 + a*x + (b - y^2) == 0 over F_p c = bF - yF * yF f = x^3 + aF * x + c roots = [r for (r, mult) in f.roots()] # distinct roots over F_p print(f"y = {y_int}:") for xF in sorted(roots): print(f" (0x{int(xF):064x}, 0x{y_int:064x})") ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/spec.py ================================================ """Defines EIP-7951 specification constants and functions.""" from dataclasses import dataclass from typing import Sized, SupportsBytes from ethereum_test_tools import Address, Bytes @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7951 = ReferenceSpec("EIPS/eip-7951.md", "06aadd458ee04ede80498db55927b052eb5bef38") class BytesConcatenation(SupportsBytes, Sized): """A class that can be concatenated with bytes.""" def __len__(self) -> int: """Return length of the object when converted to bytes.""" return len(bytes(self)) def __add__(self, other: bytes | SupportsBytes) -> bytes: """Concatenates the object with another bytes object.""" return bytes(self) + bytes(other) def __radd__(self, other: bytes | SupportsBytes) -> bytes: """Concatenates the object with another bytes object.""" return bytes(other) + bytes(self) @dataclass(frozen=True) class FieldElement(BytesConcatenation): """Dataclass that defines a single field element.""" value: int = 0 def __bytes__(self) -> bytes: """Convert field element to bytes.""" return self.value.to_bytes(32, byteorder="big") # Specific field element classes @dataclass(frozen=True) class R(FieldElement): """Dataclass that defines a R component of the signature.""" pass @dataclass(frozen=True) class S(FieldElement): """Dataclass that defines a S component of the signature.""" pass @dataclass(frozen=True) class X(FieldElement): """Dataclass that defines a X coordinate value.""" pass @dataclass(frozen=True) class Y(FieldElement): """Dataclass that defines a Y coordinate value.""" pass @dataclass(frozen=True) class H(FieldElement): """Dataclass that defines a Message Hash value.""" pass @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7951 specifications as defined at https://eips.ethereum.org/EIPS/eip-7951. """ # Address P256VERIFY = 0x100 # Gas constants P256VERIFY_GAS = 6900 # Curve Parameters P = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF ## Base field modulus A = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC ## Curve Coefficient B = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B ## Curve Coefficient N = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 ## Subgroup Order Gx = 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 ## Generator Point X Gy = 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 ## Generator Point Y # Other constants SUCCESS_RETURN_VALUE = b"\x01".rjust(32, b"\x00") INVALID_RETURN_VALUE = b"" DELEGATION_DESIGNATION = Bytes("ef0100") # Test constants, from: # https://github.com/C2SP/wycheproof/blob/4a6c2bf5dc4c0b67c770233ad33961ee653996a0/testvectors/ecdsa_secp256r1_sha256_test.json#L35 H0 = H(0xBB5A52F42F9C9261ED4361F59422A1E30036E7C32B270C8807A419FECA605023) R0 = R(0x2BA3A8BE6B94D5EC80A6D9D1190A436EFFE50D85A1EEE859B8CC6AF9BD5C2E18) S0 = S(0x4CD60B855D442F5B3C7B11EB6C4E0AE7525FE710FAB9AA7C77A67F79E6FADD76) X0 = X(0x2927B10512BAE3EDDCFE467828128BAD2903269919F7086069C8C4DF6C732838) Y0 = Y(0xC7787964EAAC00E5921FB1498A60F4606766B3D9685001558D1A974E7341513E) # Test constants from: # https://github.com/C2SP/wycheproof/blob/4a6c2bf5dc4c0b67c770233ad33961ee653996a0/testvectors/ecdsa_webcrypto_test.json#L1064 # k*G has a large x-coordinate which also gives very small r. H1 = H(0x532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25) R1 = R(0x000000000000000000000000000000004319055358E8617B0C46353D039CDAAB) S1 = S(0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254E) X1 = X(0xD705D16F80987E2D9B1A6957D29CE22FEBF7D10FA515153182415C8361BAACA4) Y1 = Y(0xB1FC105EE5CE80D514EC1238BEAE2037A6F83625593620D460819E8682160926) @staticmethod def delegation_designation(address: Address) -> Bytes: """Return delegation designation for the given address.""" return Bytes(Spec.DELEGATION_DESIGNATION + bytes(address)) ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/test_p256verify.py ================================================ """ Tests for [EIP-7951: Precompile for secp256r1 Curve Support](https://eips.ethereum.org/EIPS/eip-7951). """ import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_tools import ( Address, Alloc, Environment, StateTestFiller, Storage, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op from .helpers import vectors_from_file from .spec import H, R, S, Spec, X, Y, ref_spec_7951 REFERENCE_SPEC_GIT_PATH = ref_spec_7951.git_path REFERENCE_SPEC_VERSION = ref_spec_7951.version pytestmark = [ pytest.mark.valid_from("Osaka"), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", vectors_from_file("secp256r1_signature_specific.json") + vectors_from_file("secp256r1_shamir_multiplication.json") + vectors_from_file("secp256r1_special_case_hash.json") + vectors_from_file("secp256r1_u1_u2.json") + vectors_from_file("secp256r1_k_and_s.json") + vectors_from_file("secp256r1_public_key.json"), # Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 test # suite, valid cases are from this source: # https://github.com/C2SP/wycheproof/blob/main/testvectors/ecdsa_secp256r1_sha256_test.json ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.CallContexts.Normal() @EIPChecklist.Precompile.Test.Inputs.Valid() @EIPChecklist.Precompile.Test.Inputs.MaxValues() def test_wycheproof_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction ) -> None: """Test P256Verify precompile with Wycheproof test suite (valid cases).""" state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", vectors_from_file("secp256r1_special_case_r_s.json") + vectors_from_file("secp256r1_modified_r_s.json"), # Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 # test suite, invalid cases # Source: https://github.com/C2SP/wycheproof/blob/main/ # testvectors/ecdsa_secp256r1_sha256_test.json ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.CallContexts.Normal() @EIPChecklist.Precompile.Test.Inputs.Invalid() @EIPChecklist.Precompile.Test.Inputs.MaxValues() def test_wycheproof_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction ) -> None: """ Test P256Verify precompile with Wycheproof test suite (invalid cases). """ state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", vectors_from_file("secp256r1_small_large_r_s.json") + vectors_from_file("secp256r1_special_points.json"), # Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 # test suite, valid/invalid cases # Source: https://github.com/C2SP/wycheproof/blob/main/ # testvectors/ecdsa_secp256r1_sha256_test.json ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.CallContexts.Normal() @EIPChecklist.Precompile.Test.Inputs.MaxValues() def test_wycheproof_extra( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction ) -> None: """ Test P256Verify precompile with Wycheproof test suite (mixed valid/invalid cases). """ state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data", [ pytest.param( H(0) + R(Spec.Gx) + S(Spec.Gx) + X(Spec.Gx) + Y(Spec.Gy), id="hash_0", ), pytest.param( H(Spec.N - 1) + R(Spec.Gx) + S(Spec.Gx - 1) + X(Spec.Gx) + Y(Spec.Gy), id="hash_N_minus_1", ), pytest.param( H(Spec.N) + R(Spec.Gx) + S(Spec.Gx) + X(Spec.Gx) + Y(Spec.Gy), id="hash_N", ), pytest.param( H(Spec.P - 1) + R(Spec.Gx) + S(Spec.Gx + Spec.P - 1 - Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="hash_P_minus_1", ), pytest.param( H(Spec.P) + R(Spec.Gx) + S(Spec.Gx + Spec.P - Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="hash_P", ), pytest.param( H(2**256 - 1) + R(Spec.Gx) + S(Spec.Gx + 2**256 - 1 - Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="hash_max", ), pytest.param( H(Spec.N + 1 - Spec.Gx) + R(Spec.Gx) + S(1) + X(Spec.Gx) + Y(Spec.Gy), id="s_1", ), pytest.param( H(Spec.N - 1 - Spec.Gx) + R(Spec.Gx) + S(Spec.N - 1) + X(Spec.Gx) + Y(Spec.Gy), id="s_N_minus_1", ), pytest.param( H(((2**256 - 1) % Spec.N) - Spec.Gx + Spec.N) + R(Spec.Gx) + S((2**256 - 1) % Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="s_max_mod_N", ), pytest.param( H(0xC3D3BE9EB3577F217AE0AB360529A30B18ADC751AEC886328593D7D6FE042809) + R(0x3A4E97B44CBF88B90E6205A45BA957E520F63F3C6072B53C244653278A1819D8) + S(0x6A184AA037688A5EBD25081FD2C0B10BB64FA558B671BD81955CA86E09D9D722) + X(0) + Y(0x66485C780E2F83D72433BD5D84A06BB6541C2AF31DAE871728BF856A174F93F4), id="x_0_y_positive", ), pytest.param( H(0xF98A88895CB0866C5BAD58CF03000DDF9D21CB9407892FF54D637E6A046AFBB3) + R(0x81DC074973D3222F3930981AD98D022517C91063FFB83CFD620E29B86DC30A8F) + S(0x365E4CD085617A265765062A2D9954ED86309DFA33CF5AE1464FE119419FC34A) + X(0) + Y(0x99B7A386F1D07C29DBCC42A27B5F9449ABE3D50DE25178E8D7407A95E8B06C0B), id="x_0_y_negative", ), pytest.param( H(0x5F95DCD6E41662D1E0AEFCCDB7877877C1FD88C9E67FC3CDA0D1D520FA8A3AC2) + R(0xAF5DFDDB7EDC789D7C9C42A44AFBBF13C8F1D77D576B6EE5F11FEA4F33E2CB39) + S(0xA28F8C5625AD622950F2FCE9672784B287EF9E032ADE8C23BA218413A1CF6522) + X(5) + Y(0x459243B9AA581806FE913BCE99817ADE11CA503C64D9A3C533415C083248FBCC), id="x_5_y_positive", ), pytest.param( H(0x31CE0B00FA8DD61EF28C7DC5F839C78CF70D60E625E0670BF9C9FCE25E89D99F) + R(0x0FA19CBE154513BA348F2DB951AFB6E135BAC5BD8891282781A032103C3F1289) + S(0xD9ABF5C4E61098A6E653F265770BDBA36ECC8073CEF99548D89FE2C39A7AFA9B) + X(5) + Y(0xBA6DBC4555A7E7FA016EC431667E8521EE35AFC49B265C3ACCBEA3F7CDB70433), id="x_5_y_negative", ), pytest.param( H(0x65B0E03E7A27E6F9F4989C72486FCAF0A3ECF3EF60D14F1C11FB5BF071A8FD1B) + R(0x0B0CC9E314E4180FE18D205010DD1C4410632D472CC4E7AB56CBC04091ABE006) + S(0x8D12C4F19AC41D7877705453A247AB96394E7C093F57EC073A9D150CDE6B68C6) + X(0x09E78D4EF60D05F750F6636209092BC43CBDD6B47E11A9DE20A9FEB2A50BB96C) + Y(1), id="y_1", ), pytest.param( H(0x744084AD41EE67ED1802A6868ACE7815FD6FC0585A3479FF68E69ADB8DD2B420) + R(0xB481C7650CBE85BCD15565811966DA2DA4E4E2931F0892D911520B6A06C340D8) + S(0xE4C2D9FB9A4E3E29B7414F0408B2EBC4421D5BC8ADDCCF864AFF9E7E10DA31BB) + X(0x09E78D4EF60D05F750F6636209092BC43CBDD6B47E11A9DE20A9FEB2A50BB96C) + Y(Spec.P - 1), id="y_P_minus_1", ), # Test case for u1==u2 and Q==G. # This test case is important because u1*G + u2*Q is point doubling. pytest.param( H(0x7CF27B188D034F7E8A52380304B51AC3C08969E277F21B35A60B48FC47669978) + R(0x7CF27B188D034F7E8A52380304B51AC3C08969E277F21B35A60B48FC47669978) + S(0x830D84E672FCB08275ADC7FCFB4AE53BFC5D90CB2F25834F4DAE81C6B4FC8BD9) + X(Spec.Gx) + Y(Spec.Gy), id="u1_eq_u2_and_Q_eq_G", ), # Test case for u1==u2 and Q!=G. pytest.param( H(0x65FB4407BCB2A33AE2E486366BAA79B3A8A17A83DDE0FED6F09014A8AC6F78A1) + R(0x65FB4407BCB2A33AE2E486366BAA79B3A8A17A83DDE0FED6F09014A8AC6F78A1) + S(0x65FB4407BCB2A33AE2E486366BAA79B3A8A17A83DDE0FED6F09014A8AC6F78A1) + Spec.X0 + Spec.Y0, id="u1_eq_u2_and_Q_ne_G", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.SUCCESS_RETURN_VALUE], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) def test_valid(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction) -> None: """Positive tests for the P256VERIFY precompile.""" state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data", [ pytest.param(b"", id="zero_length_input"), pytest.param( b"\x00" + Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="input_too_long", ), pytest.param( (Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0)[:-1], id="input_too_short", ), pytest.param( H(0) + R(0) + S(0) + X(0) + Y(0), id="input_all_zeros", ), pytest.param( H(0) + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="hash_0", ), pytest.param( H(Spec.N - 1) + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="hash_N_minus_1", ), pytest.param( H(Spec.N) + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="hash_N", ), pytest.param( H(Spec.P - 1) + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="hash_P_minus_1", ), pytest.param( H(Spec.P) + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="hash_P", ), pytest.param( H(2**256 - 1) + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, id="hash_max", ), pytest.param( Spec.H0 + R(0) + Spec.S0 + Spec.X0 + Spec.Y0, id="r_eq_to_zero", ), pytest.param( Spec.H0 + R(Spec.N) + Spec.S0 + Spec.X0 + Spec.Y0, id="r_eq_to_n", ), pytest.param( Spec.H1 + R(Spec.R1.value + Spec.N) + Spec.S1 + Spec.X1 + Spec.Y1, id="r_above_n", ), pytest.param( Spec.H0 + R(2**256 - 1) + Spec.S0 + Spec.X0 + Spec.Y0, id="r_max", ), pytest.param( Spec.H0 + Spec.R0 + S(0) + Spec.X0 + Spec.Y0, id="s_eq_to_zero", ), pytest.param( Spec.H0 + Spec.R0 + S(Spec.N) + Spec.X0 + Spec.Y0, id="s_eq_to_n", ), # If checks for r, s, and point-at-infinity are missing, the s=0 zeros # both u1 and u2, so the computed R is the point at infinity, # and the signature may be considered valid in such implementation. pytest.param( Spec.H0 + R(0) + S(0) + X(Spec.Gx) + Y(Spec.Gy), id="r_0_s_0", ), pytest.param( Spec.H0 + R(0) + S(Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="r_0_s_N", ), pytest.param( Spec.H0 + R(Spec.N) + S(0) + X(Spec.Gx) + Y(Spec.Gy), id="r_N_s_0", ), pytest.param( Spec.H0 + R(Spec.N) + S(Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="r_N_s_N", ), # If checks for r and point-at-infinity are missing, the h=0 and r=0 # zero both u1 and u2, so the computed R is the point at infinity, # and the signature may be considered valid in such implementation. pytest.param( H(0) + R(0) + Spec.S0 + X(Spec.Gx) + Y(Spec.Gy), id="hash_0_r_0", ), pytest.param( H(0) + R(Spec.N) + Spec.S0 + X(Spec.Gx) + Y(Spec.Gy), id="hash_0_r_N", ), pytest.param( H(Spec.N) + R(0) + Spec.S0 + X(Spec.Gx) + Y(Spec.Gy), id="hash_N_r_0", ), pytest.param( H(Spec.N) + R(Spec.N) + Spec.S0 + X(Spec.Gx) + Y(Spec.Gy), id="hash_N_r_N", ), pytest.param( Spec.H0 + R(Spec.Gx) + S((2**256 - 1) % Spec.N) + X(Spec.Gx) + Y(Spec.Gy), id="s_max_mod_N", ), pytest.param( H(Spec.N + 1 - Spec.Gx) + R(Spec.Gx) + S(Spec.N + 1) + X(Spec.Gx) + Y(Spec.Gy), id="s_N_plus_1", ), pytest.param( H(((2**256 - 1) % Spec.N) - Spec.Gx + Spec.N) + R(Spec.Gx) + S(2**256 - 1) + X(Spec.Gx) + Y(Spec.Gy), id="s_max", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + X(Spec.P) + Spec.Y0, id="x_eq_to_p", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Y(Spec.P), id="y_eq_to_p", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + X(0) + Y(0), id="point_at_infinity", ), # Test case with Q at infinity. If the implementation misses the check # that Q is not the point at infinity, the signature should verify. pytest.param( Spec.H0 + R(0x2DD5CBB0E37BAEC8D1460909B206CA2C87E50CA43B8F31E46168027A7F0AEEC6) + Spec.S0 + X(0) + Y(0), id="point_at_infinity_v2", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + X(Spec.X0.value + 1) + Spec.Y0, id="point_not_on_curve_x", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Y(Spec.Y0.value + 1), id="point_not_on_curve_y", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.Y0 + Spec.X0, id="x_and_y_reversed", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Y(Spec.P + 1), id="y_greater_than_p", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + X(Spec.P + 1) + Spec.Y0, id="x_greater_than_p", ), pytest.param( H(0xC3D3BE9EB3577F217AE0AB360529A30B18ADC751AEC886328593D7D6FE042809) + R(0x3A4E97B44CBF88B90E6205A45BA957E520F63F3C6072B53C244653278A1819D8) + S(0x6A184AA037688A5EBD25081FD2C0B10BB64FA558B671BD81955CA86E09D9D722) + X(Spec.P) # Valid for X(0) + Y(0x66485C780E2F83D72433BD5D84A06BB6541C2AF31DAE871728BF856A174F93F4), id="x_P_y_positive", ), pytest.param( H(0xF98A88895CB0866C5BAD58CF03000DDF9D21CB9407892FF54D637E6A046AFBB3) + R(0x81DC074973D3222F3930981AD98D022517C91063FFB83CFD620E29B86DC30A8F) + S(0x365E4CD085617A265765062A2D9954ED86309DFA33CF5AE1464FE119419FC34A) + X(Spec.P) # Valid for X(0) + Y(0x99B7A386F1D07C29DBCC42A27B5F9449ABE3D50DE25178E8D7407A95E8B06C0B), id="x_P_y_negative", ), pytest.param( H(0x5F95DCD6E41662D1E0AEFCCDB7877877C1FD88C9E67FC3CDA0D1D520FA8A3AC2) + R(0xAF5DFDDB7EDC789D7C9C42A44AFBBF13C8F1D77D576B6EE5F11FEA4F33E2CB39) + S(0xA28F8C5625AD622950F2FCE9672784B287EF9E032ADE8C23BA218413A1CF6522) + X(Spec.P + 5) # Valid for X(5) + Y(0x459243B9AA581806FE913BCE99817ADE11CA503C64D9A3C533415C083248FBCC), id="x_P_plus_5_y_positive", ), pytest.param( H(0x31CE0B00FA8DD61EF28C7DC5F839C78CF70D60E625E0670BF9C9FCE25E89D99F) + R(0x0FA19CBE154513BA348F2DB951AFB6E135BAC5BD8891282781A032103C3F1289) + S(0xD9ABF5C4E61098A6E653F265770BDBA36ECC8073CEF99548D89FE2C39A7AFA9B) + X(Spec.P + 5) # Valid for X(5) + Y(0xBA6DBC4555A7E7FA016EC431667E8521EE35AFC49B265C3ACCBEA3F7CDB70433), id="x_P_plus_5_y_negative", ), pytest.param( H(0x65B0E03E7A27E6F9F4989C72486FCAF0A3ECF3EF60D14F1C11FB5BF071A8FD1B) + R(0x0B0CC9E314E4180FE18D205010DD1C4410632D472CC4E7AB56CBC04091ABE006) + S(0x8D12C4F19AC41D7877705453A247AB96394E7C093F57EC073A9D150CDE6B68C6) + X(0x09E78D4EF60D05F750F6636209092BC43CBDD6B47E11A9DE20A9FEB2A50BB96C) + Y(Spec.P + 1), # Valid for Y(1) id="y_P_plus_1", ), # Test case produces the point R at infinity: (R0/S0)*G + (R0/S0)*(-G). pytest.param( H(Spec.R0.value) + Spec.R0 + Spec.S0 + X(Spec.Gx) + Y(Spec.P - Spec.Gy), id="R_at_infinity_v1", ), # Test case produces the point R at infinity: (1/1)*G + (1/1)*(-G). pytest.param( H(1) + R(1) + S(1) + X(Spec.Gx) + Y(Spec.P - Spec.Gy), id="R_at_infinity_v2", ), pytest.param( Spec.H0 + R(0x813EF79CCEFA9A56F7BA805F0E478584FE5F0DD5F567BC09B5123CCBC9832365) + S(0x900E75AD233FCC908509DBFF5922647DB37C21F4AFD3203AE8DC4AE7794B0F87) + X(0xB838FF44E5BC177BF21189D0766082FC9D843226887FC9760371100B7EE20A6F) + Y(0xF0C9D75BFBA7B31A6BCA1974496EEB56DE357071955D83C4B1BADAA0B21832E9), id="valid_secp256k1_inputs", ), pytest.param( H(0x235060CAFE19A407880C272BC3E73600E3A12294F56143ED61929C2FF4525ABB) + R(0x182E5CBDF96ACCB859E8EEA1850DE5FF6E430A19D1D9A680ECD5946BBEA8A32B) + S(0x76DDFAE6797FA6777CAAB9FA10E75F52E70A4E6CEB117B3C5B2F445D850BD64C) + X(0x3828736CDFC4C8696008F71999260329AD8B12287846FEDCEDE3BA1205B12729) + Y(0x3E5141734E971A8D55015068D9B3666760F4608A49B11F92E500ACEA647978C7), id="wrong_endianness", ), pytest.param( H(Spec.P - 1) + R(Spec.N - 2) + S((Spec.N - 1) // 2) + X(Spec.P - 3) + Y(0x19719BEBF6AEA13F25C96DFD7C71F5225D4C8FC09EB5A0AB9F39E9178E55C121), id="near_field_boundary_p_minus_3", ), pytest.param( # Invalid curve attack: This point satisfies y² = x³ - 3x + 1 (mod # p) instead of the correct P-256 equation y² = x³ - 3x + b where # b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53... # ...B0F63BCE3C3E27D2604B # # This tests that the implementation properly validates the curve # equation and rejects points on different curves (CVE-2020-0601 # class vulnerability) Spec.H0 + Spec.R0 + Spec.S0 + X(0x4) + Y(0x872A856D521EED42D28A60CCC2EAE42E1572F33BE2BF616DC9A762D51C459E2A), id="invalid_curve_attack_b_equals_one", ), pytest.param( # Invalid curve attack: Singular curve with b = 0 # Point satisfies y² = x³ - 3x (mod p) - a singular/degenerate # curve # Singular curves have discriminant = 0 and provide no security # guarantees. # This tests rejection of points on curves with catastrophic # security failures Spec.H0 + Spec.R0 + Spec.S0 + X(0x2) + Y(0x507442007322AA895340CBA4ABC2D730BFD0B16C2C79A46815F8780D2C55A2DD), id="invalid_curve_attack_singular_b_zero", ), pytest.param( # Invalid curve attack: Boundary value b = p-1 # Point satisfies y² = x³ - 3x + (p-1) (mod p) # # Tests proper parameter validation at # modular arithmetic boundaries. # Ensures implementations handle field arithmetic edge cases # correctly. Spec.H0 + Spec.R0 + Spec.S0 + X(0x1) + Y(0x6522AED9EA48F2623B8EEAE3E213B99DA32E74C9421835804D374CE28FCCA662), id="invalid_curve_attack_b_equals_p_minus_1", ), pytest.param( # Invalid curve attack: Small discriminant curve with b = 2 # Point satisfies y² = x³ - 3x + 2 (mod p) # # Curves with small discriminants are vulnerable to specialized # attacks. # # Tests rejection of cryptographically weak curve parameters. Spec.H0 + Spec.R0 + Spec.S0 + X(0x1) + Y(0x0), id="invalid_curve_attack_small_discriminant", ), pytest.param( # Invalid curve attack: Composite order curve with b = 7 # Point satisfies y² = x³ - 3x + 7 (mod p) # Curve order has small factors enabling Pohlig-Hellman attacks # Tests protection against small subgroup confinement attacks Spec.H0 + Spec.R0 + Spec.S0 + X(0x1) + Y(0x85EC5A4AF40176B63189069AEFFCB229C96D3E046E0283ED2F9DAC21B15AD3C), id="invalid_curve_attack_composite_order", ), pytest.param( # Invalid curve attack: Composite order curve with b = -Spec.B # Random point which satisfies y² = x³ - 3x - Spec.B (mod p) # Without the curve check in the implementation, # the signature checks out. H(0xC223E1538C4D7B5BBD3EF932736826FD64F4E8B5C80250D9E07A728689D13C38) + R(0x0C7CB59EF6BE7539397CC979AD9A87A3B73A0DD268BBA4990A3378C6391512D5) + S(0xF8C943685BCFE7864C0F8485CACD732D3A9F167531CAF26B67A3CB10B641F92C) + X(0xF1F2ADE681DB5699741B1F9FF080E9A08DCFF48F48A5048C4D90EC89440C3EFB) + Y(0xBFFE372E7BBDBD60E4DF885E17A37878461AE13B6491E7863020305962F2C6B6), id="invalid_curve_attack_bneg_1", ), pytest.param( # Invalid curve attack: Composite order curve with b = -Spec.B # Random point which satisfies y² = x³ - 3x - Spec.B (mod p) # Without the curve check in the implementation, # the signature checks out. H(0x982D25BF8E0E81FF41AC3C8033604C78ED5EF17C6EDDA977072EAB6821A7AD0A) + R(0x7C1996FA0EC911E4739AE7340B5345823272F494DFA32034A4FE5642C3DB91F2) + S(0x1E4D6CCF1AFB675D18BD27274770C8B84028D272D1D2641E70B30E1DF17AF3DC) + X(0xC9124B6AB12F08790A2712AEC74A1B71FA997CA7DE1E9117BC18D07DCBFE7C91) + Y(0xADD1E9DF40A47ADD6B2191C05D0C1B4AF1BAEEAA0C0A97E7B3D06FFAE543D096), id="invalid_curve_attack_bneg_2", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0) + R(0xD21697149F598FEAE9A750DCA86AE6D5EFA654680BA748D2DF7053115101C129) + S(0xEF3FD943AD1F126B3EBA1A5900D79886755DB6DAFCB6B0117D86364340CE36CC) + X(0x687216395BD2F58E5A6D91964AE67E766DF2A2FB8E623795A5852507927C70C2) + Y(0xF40E19B93BEB5C0678EDE25AB3654E08C0C6EF6A143CEC9865F3A447C6EB84E3), id="invalid_curve_attack_h0_random1", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0) + R(0x52E47C5D6AAB66AB6A18A694359EB86FDD40F10E79EF5493C5469EC88BA03334) + S(0x7584C5BF3CA2869C7E383B1603A935EEB79D990B7F7152E055EC562E87FD715E) + X(0x0000000000000002000000000000000000000000000000000000000000000000) + Y(0x000000000000000000000000000000000000000000000000FE00000000000000), id="invalid_curve_attack_h0_random2", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0) + R(0x81333B13B13F362253BD536D17563A72EB575F1993F55ED40E633E503F60B864) + S(0xE2208C4045F5241ECCF08F825399224C4B78595A10433EC33799DCAD7B0E1F4A) + X(0xCE9C1088B4BCC71223A187410BB05819A6D32D2F1A1024B83557E51833AB23DC) + Y(0x00FB64209538D1143A88E8B91D2DA46095AF852D7DD494BE6AF26C29D545F856), id="invalid_curve_attack_h0_random3", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0) + R(0x3C593B5857D1D0EB83923D73E76A7A53EF191BB210267D8C0BE17A4E34AB2E73) + S(0xD022359310067882F713AFBECECE71CB80E4857368F46AB0346362DB033ED298) + X(0x358DF65C0D732CCAB431D4CAB7F98E9F9279BD71D64635FAB21EA87EF254C5D1) + Y(0x82909FF2E230433D000000000000000000000000000000000000000000000000), id="invalid_curve_attack_h0_random4", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0) + R(0x425CFFCA652791CABFC81B1E4B7712DBA196599FABCE16978E06E6AF486B1FEC) + S(0x58B864B5A41CD17524E4773EC353C9590D792F601DA075AD9B3F40E8E7070E8A) + X(0x00000000000000000000000000000000000000000000000000007FFFFFFFFFFF) + Y(0xFFFF000000000000000000000000000000000000000000000000000000000000), id="invalid_curve_attack_h0_random5", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0x2DA0A74BE3122AEAEF5704D0EB27881FBFB918B4A5252B660935263D0569BA92) + R(0x5543729CBCFD99EE6C3B422D7F245903E7177B3A6A4E3C20C0DC5F5E109795AE) + S(0x96403D5BB253EBD7DEF44BCBC062FCD4EA5E358B19B67C13E625EFDF6B977597) + X(0x996CADC001622FB5E363B421A08854096569397B3BDCB8C3DEC907392F7CC59B) + Y(0xD34A4E0F08C6FC549F7FAFFBCAF610D7F6C467B7B27072720E81079FB6595B52), id="invalid_curve_attack_random6", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0x1F9D9B26DB42380C85F075174DDAF158F9DE4CD10C3104190D7AF96938DD8ECD) + R(0x159946DBC4F1DE68CD4096862A5B10E5986ACB32229D6E68884DC83DAB70A307) + S(0x63D80724A4074421F7DD255630794E3AEBE635B756D72B24652AAC07D01B289C) + X(0x9CA2F39CC3536861000000000000000000000000000000000000000000000000) + Y(0x000000000000B100000000000000000000000000000000000000000000000000), id="invalid_curve_attack_random7", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0xD380DA9251F1FB809ED48C70DC8F81E91C471F0E81BC95E7611C653278A5B6B4) + R(0xFF197EB72A9E531B17B872525247E6564B786CC014ED28B6849CE7D8C976BDF2) + S(0x7B0B2EFF9BB5409052B35FD3FF81DCE77D95A1F75C46989817045120DA5C3C9C) + X(0xBA7695481956A6269DD646ADDD4AFE6D9763637D76AD780299E51201384A8403) + Y(0xA62443DD4AFE6D9763637D76AD780299E51201384AE4FEDD3CDAC9F461600D53), id="invalid_curve_attack_random8", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0x4B082B60497ED87FFE570612D521E73A2CD6C832744EF8E4E2E329E30D3D5879) + R(0x6665A88CB3FF30D339A1975FD46CF5EF480A68A093AB778550073D3528C3B609) + S(0xAEAADDB235E4AC6097356DB96161E27849EA8EDF1E971F74EB51E19A1CC950A1) + X(0x0000000000000002000000000000000000000000000000000000000000000000) + Y(0x000000000000000000000000000000000000000000000000FE00000000000000), id="invalid_curve_attack_random9", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0x6CC2B605CFBDB22B9E7B55EFE8C1DA0F1C5A0EC1AA8D82EEDFB5EA70E9846E88) + R(0x3C593B5857D1D0EB83923D73E76A7A53EF191BB210267D8C0BE17A4E34AB2E73) + S(0xD022359310067882F713AFBECECE71CB80E4857368F46AB0346362DB033ED298) + X(0x358DF65C0D732CCAB431D4CAB7F98E9F9279BD71D64635FAB21EA87EF254C5D1) + Y(0x82909FF2E230433D000000000000000000000000000000000000000000000000), id="invalid_curve_attack_random10", ), pytest.param( # Invalid curve attack: random point bytes. # Without the curve check in the implementation, # the signature checks out. H(0x810C1D53EA96A700C93F6AF1C183197B040EA6FEAE10564877A1C78EC6074FF1) + R(0x34D0F0C8E14D39002B5DEA00808957963E849503DDFD626323433047D696C7C4) + S(0x6A7FE39C046304317F799FB900877073F2AE3C798DD4414795551A833ABCBA85) + X(0x0000000000F90000000067923073C067015B601D94F262F0E82B9DA2D33A6A32) + Y(0xFC3D71CB490CF346ED31DC37405FB0069F4A7ED188381DC049ABAB66E9F80080), id="invalid_curve_attack_random_11", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID_RETURN_VALUE], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.Inputs.AllZeros() @EIPChecklist.Precompile.Test.Inputs.Invalid() @EIPChecklist.Precompile.Test.Inputs.Invalid.Crypto() @EIPChecklist.Precompile.Test.Inputs.Invalid.Corrupted() @EIPChecklist.Precompile.Test.InputLengths.Zero() @EIPChecklist.Precompile.Test.InputLengths.Static.Correct() @EIPChecklist.Precompile.Test.InputLengths.Static.TooShort() @EIPChecklist.Precompile.Test.InputLengths.Static.TooLong() @EIPChecklist.Precompile.Test.OutOfBounds.Max() @EIPChecklist.Precompile.Test.OutOfBounds.MaxPlusOne() def test_invalid(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction) -> None: """Negative tests for the P256VERIFY precompile.""" state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier,call_succeeds", [ pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.SUCCESS_RETURN_VALUE, 1, True, id="extra_gas", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.INVALID_RETURN_VALUE, -1, False, id="insufficient_gas", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.INVALID_RETURN_VALUE, -6900, False, id="zero_gas", ), pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.INVALID_RETURN_VALUE, -3450, False, id="3450_gas", ), ], ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.GasUsage.Constant.Exact() @EIPChecklist.Precompile.Test.GasUsage.Constant.Oog() def test_gas(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction) -> None: """Test P256Verify precompile gas requirements.""" state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "call_opcode", [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.SUCCESS_RETURN_VALUE, id="valid_call", ), ], ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.CallContexts.Delegate() @EIPChecklist.Precompile.Test.CallContexts.Static() @EIPChecklist.Precompile.Test.CallContexts.Callcode() def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test P256Verify precompile using different call types.""" state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,call_contract_address,post", [ pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.P256VERIFY, {}, id="valid_entry_point", ), ], ) @EIPChecklist.Precompile.Test.CallContexts.TxEntry() def test_precompile_as_tx_entry_point( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test P256Verify precompile entry point.""" state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,precompile_address,expected_output", [ pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.P256VERIFY, Spec.SUCCESS_RETURN_VALUE, id="valid_input_with_value_transfer", ), ], ) @EIPChecklist.Precompile.Test.ValueTransfer.NoFee() def test_precompile_will_return_success_with_tx_value( state_test: StateTestFiller, pre: Alloc, input_data: bytes, expected_output: bytes, precompile_address: Address, ) -> None: """Test P256Verify precompile will not fail if value is sent.""" sender = pre.fund_eoa() storage = Storage() call_256verify_bytecode = ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.CALL( gas=Spec.P256VERIFY_GAS, address=Spec.P256VERIFY, value=Op.CALLVALUE(), args_offset=0, args_size=Op.CALLDATASIZE(), ret_offset=0, ret_size=32, ) + Op.SSTORE(storage.store_next(True), Op.DUP1()) + Op.SSTORE(storage.store_next(expected_output), Op.MLOAD(0)) + Op.SSTORE(storage.store_next(len(expected_output)), Op.RETURNDATASIZE()) + Op.STOP ) contract_address = pre.deploy_contract(call_256verify_bytecode) tx = Transaction( sender=sender, gas_limit=1000000, to=contract_address, value=1000, data=input_data, ) post = {contract_address: {"storage": storage}} state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,expected_output", [ # Test case where computed x-coordinate exceeds curve order N # This tests the modular comparison: r' ≡ r (mod N) pytest.param( Spec.H0 # R: A value that when used in ECDSA verification produces an # x-coordinate > N + R(0x000000000000000000000000000000004319055358E8617B0C46353D039CDAAB) + S(0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63254E) # X, Y: Public key coordinates that will produce x-coordinate > N # during verification + X(0x0AD99500288D466940031D72A9F5445A4D43784640855BF0A69874D2DE5FE103) + Y(0xC5011E6EF2C42DCD50D5D3D29F99AE6EBA2C80C9244F4C5422F0979FF0C3BA5E), Spec.SUCCESS_RETURN_VALUE, id="x_coordinate_exceeds_n", ), pytest.param( Spec.H1 + Spec.R1 + Spec.S1 + Spec.X1 + Spec.Y1, Spec.SUCCESS_RETURN_VALUE, id="x_coordinate_exceeds_n_v2", ), # Test cases where compute x-coordinate exceeds curve order N, # but the signature is invalid. # This is a modification of the above test by taking -h, -r, -s # what gives the same u1 and u2 and in the result the same point R. pytest.param( H(Spec.N - Spec.H1.value) + R(Spec.N - Spec.R1.value) + S(Spec.N - Spec.S1.value) + Spec.X1 + Spec.Y1, Spec.INVALID_RETURN_VALUE, id="invalid_x_coordinate_exceeds_n", ), pytest.param( Spec.H0 + R(Spec.N + 1) # R = N + 1 ≡ 1 (mod N) + Spec.S0 + Spec.X0 + Spec.Y0, Spec.INVALID_RETURN_VALUE, # Should fail because R = 1 is not a # valid signature id="r_equals_n_plus_one", ), pytest.param( Spec.H0 + R(Spec.N + 2) # R = N + 2 ≡ 2 (mod N) + Spec.S0 + Spec.X0 + Spec.Y0, Spec.INVALID_RETURN_VALUE, # Should fail because R = 2 is not a # valid signature id="r_equals_n_plus_two", ), ], ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.Inputs.Valid() @EIPChecklist.Precompile.Test.Inputs.Invalid.Crypto() def test_modular_comparison( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction ) -> None: """ Test the modular comparison condition for secp256r1 precompile. This tests that when the x-coordinate of R' exceeds the curve order N, the verification should use modular arithmetic: r' ≡ r (mod N) instead of direct equality r' == r. """ state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.SUCCESS_RETURN_VALUE, id="valid_input", ), pytest.param( b"\x00" * 160, Spec.INVALID_RETURN_VALUE, id="invalid_input", ), ], ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @EIPChecklist.Precompile.Test.CallContexts.Initcode.Tx() def test_contract_creation_transaction( state_test: StateTestFiller, pre: Alloc, tx: Transaction, input_data: bytes, expected_output: bytes, ) -> None: """Test the contract creation for the P256VERIFY precompile.""" sender = pre.fund_eoa() storage = Storage() contract_address = compute_create_address(address=sender, nonce=0) contract_bytecode = ( Op.CODECOPY(0, Op.SUB(Op.CODESIZE, len(input_data)), len(input_data)) + Op.CALL( gas=Spec.P256VERIFY_GAS, address=Spec.P256VERIFY, value=0, args_offset=0, args_size=len(input_data), ret_offset=0, ret_size=32, ) + Op.SSTORE(storage.store_next(True), Op.DUP1()) + Op.SSTORE(storage.store_next(expected_output), Op.MLOAD(0)) + Op.SSTORE(storage.store_next(len(expected_output)), Op.RETURNDATASIZE()) + Op.STOP ) tx = Transaction( sender=sender, gas_limit=1000000, to=None, value=0, data=contract_bytecode + input_data, ) post = { contract_address: { "storage": storage, } } state_test(env=Environment(), pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, Spec.SUCCESS_RETURN_VALUE, id="valid_input", ), pytest.param( b"\x00" * 160, Spec.INVALID_RETURN_VALUE, id="invalid_input", ), ], ) @pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""]) @pytest.mark.parametrize("opcode", [Op.CREATE, Op.CREATE2]) @EIPChecklist.Precompile.Test.CallContexts.Initcode.CREATE() def test_contract_initcode( state_test: StateTestFiller, pre: Alloc, tx: Transaction, input_data: bytes, expected_output: bytes, opcode: Op, ) -> None: """Test P256VERIFY behavior from contract creation.""" sender = pre.fund_eoa() storage = Storage() call_256verify_bytecode = ( Op.CODECOPY(0, Op.SUB(Op.CODESIZE, len(input_data)), len(input_data)) + Op.CALL( gas=Spec.P256VERIFY_GAS, address=Spec.P256VERIFY, value=0, args_offset=0, args_size=len(input_data), ret_offset=0, ret_size=32, ) + Op.SSTORE(storage.store_next(True), Op.DUP1()) + Op.SSTORE(storage.store_next(expected_output), Op.MLOAD(0)) + Op.SSTORE(storage.store_next(len(expected_output)), Op.RETURNDATASIZE()) + Op.STOP ) full_initcode = call_256verify_bytecode + input_data total_bytecode_length = len(call_256verify_bytecode) + len(input_data) create_contract = ( Op.CALLDATACOPY(offset=0, size=total_bytecode_length) + opcode(offset=0, size=total_bytecode_length) + Op.STOP ) factory_contract_address = pre.deploy_contract(code=create_contract) contract_address = compute_create_address( address=factory_contract_address, nonce=1, initcode=full_initcode, opcode=opcode ) tx = Transaction( sender=sender, gas_limit=200_000, to=factory_contract_address, value=0, data=call_256verify_bytecode + input_data, ) post = { contract_address: { "storage": storage, } } state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/test_p256verify_before_fork.py ================================================ """ Tests P256VERIFY precompiles of [EIP-7951: Precompile for secp256r1 Curve Support](https://eips.ethereum.org/EIPS/eip-7951). Tests P256VERIFY precompiles of [EIP-7951: Precompile for secp256r1 Curve Support](https://eips.ethereum.org/EIPS/eip-7951) before the Osaka hard fork is active. """ import pytest from ethereum_test_checklists import EIPChecklist from ethereum_test_tools import Alloc, Block, BlockchainTestFiller, Transaction from .spec import Spec, ref_spec_7951 REFERENCE_SPEC_GIT_PATH = ref_spec_7951.git_path REFERENCE_SPEC_VERSION = ref_spec_7951.version pytestmark = pytest.mark.valid_at_transition_to("Osaka") @pytest.mark.parametrize( "precompile_address,input_data,precompile_gas_modifier", [ pytest.param( Spec.P256VERIFY, Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, 0, id="P256VERIFY_valid_input_6900_gas", ), pytest.param( Spec.P256VERIFY, Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.X0, 0, id="P256VERIFY_invalid_input", ), pytest.param( Spec.P256VERIFY, Spec.H0 + Spec.R0 + Spec.S0 + Spec.X0 + Spec.Y0, -6900, id="P256VERIFY_valid_input_zero_gas", ), ], ) @pytest.mark.parametrize( "expected_output,call_succeeds", [pytest.param(Spec.INVALID_RETURN_VALUE, True, id=pytest.HIDDEN_PARAM)], ) @EIPChecklist.Precompile.Test.ForkTransition.Before.InvalidInput() @EIPChecklist.Precompile.Test.ForkTransition.Before.ZeroGas() def test_precompile_before_fork( blockchain_test: BlockchainTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test P256VERIFY precompiles before the Osaka hard fork is active. The call must succeed but the output must be empty. """ blockchain_test( pre=pre, blocks=[Block(txs=[tx])], post=post, ) ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_k_and_s.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c704fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #176: extreme value for k and edgecase s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63ccc6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #177: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956efcee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #178: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaf6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f8f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #179: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a06438673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #180: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb0d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb343195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #181: extreme value for k", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c705e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #182: extreme value for k and edgecase s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #183: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b548981487540a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #184: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa3d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #185: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #186: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb8d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #187: extreme value for k", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c70961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #694: extreme value for k and edgecase s", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc5d283e13ce8ca60da868e3b0fb33e6b4f1074793274e2928250e71e2aca63e9c214dc74fa25371fb4d9e506d418ed9a1bfd6d0c8bb6591d3e0f44505a84886ce", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #695: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa70fc351da038ae0803bd1d86514ae0462f9f8216551d9315aa9d297f792eef6a341c74eed786f2d33da35360ca7aa925e753f00d6077a1e9e5fc339d634019c73", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #696: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaa1e34c8f16d138673fee55c080547c2bfd4de7550065f638322bba9430ce4b60662be9bb512663aa4d7df8ab3f3b4181c5d44a7bdf42436620b7d8a6b81ac936", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #697: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c1857e1a8a8338d7fd8cf41d322a302d2078a87a23c7186150ed7cda6e52817c1bdfd0a9135a89d21ce821e29014b2898349254d748272b2d4eb8d59ee34c615377f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #698: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb5c19fe227a61abc65c61ee7a018cc9571b2c6f663ea33583f76a686f64be078b7b4a0d734940f613d52bc48673b457c2cf78492490a5cc5606c0541d17b24ddb", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #699: extreme value for k", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c70db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #700: extreme value for k and edgecase s", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc6222d1962655501893c29e441395b6c05711bd3ed5a0ef72cfab338b88229c4baaae079cb44a1af070362aaa520ee24cac2626423b0bf81af1c54311d8e2fd23", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #701: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa74ccfa24c67f3def7fa81bc99c70bb0419c0952ba599f4c03361da184b04cdca5db76b797f7f41d9c729a2219478a7e629728df870800be8cf6ca7a0a82153bfa", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #702: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaea1c72c91034036bac71402b6e9ecc4af3dbde7a99dc574061e99fefff9d84dab7dd057e75b78ac6f56e34eb048f0a9d29d5d055408c90d02bc2ea918c18cb63", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #703: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185c2879a66d86cb20b820b7795da2da62b38924f7817d1cd350d936988e90e79bc5431a7268ff6931c7a759de024eff90bcb0177216db6fd1f3aaaa11fa3b6a083", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #704: extreme value for k and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bbab1c0f273f74abc2b848c75006f2ef3c54c26df27711b06558f455079aee0ba3df510f2ecef6d9a05997c776f14ad6456c179f0a13af1771e4d6c37fa48b47f2", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #705: extreme value for k", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_modified_r_s.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #3: Modified r or s, e.g. by adding or subtracting the order of the group", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #5: Modified r or s, e.g. by adding or subtracting the order of the group", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b8252927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #8: Modified r or s, e.g. by adding or subtracting the order of the group", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502329a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #118: modify first byte of integer", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #120: modify last byte of integer", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #121: modify last byte of integer", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1800b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568472927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #124: truncated integer", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #139: Modified r or s, e.g. by adding or subtracting the order of the group", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254ed705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #636: r too large", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #637: r,s are large", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd48240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #638: r and s^-1 have a large Hamming weight", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #639: r and s^-1 have a large Hamming weight", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c707a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07edeb3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #651: r and s^-1 are close to n", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_public_key.json ================================================ [ { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f19b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #196: x-coordinate of the public key has many trailing 0's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f910fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df557374f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #197: x-coordinate of the public key has many trailing 0's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e3541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb556774f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #198: x-coordinate of the public key has many trailing 0's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a59f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #199: y-coordinate of the public key has many trailing 0's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f914cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b439638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe33cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #200: y-coordinate of the public key has many trailing 0's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b553cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #201: y-coordinate of the public key has many trailing 0's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f911158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf3466830228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f2855193cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #202: y-coordinate of the public key has many trailing 1's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d3e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a12513363cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #203: y-coordinate of the public key has many trailing 1's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #204: y-coordinate of the public key has many trailing 1's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b43dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd1399292829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #205: x-coordinate of the public key has many trailing 1's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f915eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af782c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb52829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #206: x-coordinate of the public key has many trailing 1's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9196843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #207: x-coordinate of the public key has many trailing 1's", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f6402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #208: x-coordinate of the public key is large", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dbafffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #209: x-coordinate of the public key is large", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #210: x-coordinate of the public key is large", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb300000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #211: x-coordinate of the public key is small", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f916b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f75939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #212: x-coordinate of the public key is small", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #213: x-coordinate of the public key is small", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9131230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb070f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beffbcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #214: y-coordinate of the public key is small", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #215: y-coordinate of the public key is small", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f917e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859459450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aabcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #216: y-coordinate of the public key is small", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35689c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #217: y-coordinate of the public key is large", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b3472b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #218: y-coordinate of the public key is large", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #219: y-coordinate of the public key is large", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000000000000000000000000000000000000000000000000000000000000001555555550000000055555555555555553ef7a8e48d07df81a693439654210c7038a084ffccc4ae2f8204be2abca9fb8ad4ab283b2aa50f13b6bb2347adabc69ca699799b77b1cc6dad271e88b899c12931986e958e1f5cf5653dddf7389365e2", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #173: point with x-coordinate 0", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a90000000000000000000000000000000000000000000000000000000000000000fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", "Expected": "", "Gas": 6900, "Name": "invalid public key x param errors", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af0150000000000000000000000000000000000000000000000000000000000000000", "Expected": "", "Gas": 6900, "Name": "invalid public key y param errors", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_shamir_multiplication.json ================================================ [ { "Input": "70239dd877f7c944c422f44dea4ed1a52f2627416faf2f072fa50c772ed6f80764a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e6af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #58: Edge case for Shamir multiplication", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_signature_specific.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd762927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #1: signature malleability", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8f50d371b91bfb1d7d14e1323523bc3aa8cbf2c57f9e284de628c8b4536787b86f94ad887ac94d527247cd2e7d0c8b1291c553c9730405380b14cbb209f5fa2dd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #137: edge case for signature malleability", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a968ec6e298eafe16539156ce57a14b04a7047c221bafc3a582eaeb0d857c4d94697bed1af17850117fdb39b2324f220a5698ed16c426a27335bb385ac8ca6fb30", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #138: edge case for signature malleability", "NoBenchmark": false }, { "Input": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e204aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #192: pseudorandom signature", "NoBenchmark": false }, { "Input": "dc1921946f4af96a2856e7be399007c9e807bdf4c5332f19f59ec9dd1bb8c7b3530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e904aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #193: pseudorandom signature", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b8604aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #194: pseudorandom signature", "NoBenchmark": false }, { "Input": "de47c9b27eb8d300dbb5f2c353e632c393262cf06340c4fa7f1b40c4cbd36f90986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb713dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #195: pseudorandom signature", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a878d844dc7f16b73b1f2a39730da5d8cd99fe2e70a18482384e37dcd2bfea02e1ed6572e01eb7a8d113d02c666c45ef22d3b9a6a6dea99aa43a8183c26e75d336", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #655: edge case for signature malleability", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a9dec6c8257dde94110eacc8c09d2e5789cc5beb81a958b02b4d62da9599a7401466fae1614174be63970b83f6524421067b06dd6f4e9c56baca4e344fdd690f1d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #656: edge case for signature malleability", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2530e782f964b2e2ff065a051bc7adc20615d8c43a1365713c88268822c253bcce5b16df652aa1ecb2dc8b46c515f9604e2e84cacfa7c6eec30428d2d3f4e08ed504aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1211: pseudorandom signature", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_small_large_r_s.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #113: k*G has a large x-coordinate", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #114: r too large", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254eab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #115: r,s are large", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #116: r and s^-1 have a large Hamming weight", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a54201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #117: r and s^-1 have a large Hamming weight", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #118: small r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000036627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #120: small r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000055a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #122: small r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #124: small r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325560000000000000000000000000000000000000000000000000000000000000006cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #126: r is larger than n", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd84be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #127: s is larger than n", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000000000000000000000000001008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #128: small r and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000002d9b4d347952d6ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a4838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #129: smallish r and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000001033e67e37b32b445580bf4eff8b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d7393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #130: 100-bit r and small s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b5ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #131: small r and 100 bit s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000062522bbd3ecbe7c39e93e7c25ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b1d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #132: 100-bit r and s^-1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c70083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #133: r and s^-1 are close to n", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7000000000000000000000000000000000000000000000000000000000000000018aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #134: s == 1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7000000000000000000000000000000000000000000000000000000000000000008aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #135: s == 0", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254ed705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #113: k*G has a large x-coordinate", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000014a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #118: small r and s", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003091194c1cba17f34e286b4833701606a41cef26177ada8850b601ea1f859e70127242fcec708828758403ce2fe501983a7984e6209f4d6b95db9ad77767f55eb", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #120: small r and s", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005103c6ecceff59e71ea8f56fee3a4b2b148e81c2bdbdd39c195812c96dcfb41a72303a193dc591be150b883d770ec51ebb4ebce8b09042c2ecb16c448d8e57bf5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #122: small r and s", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000063b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6eabc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #124: small r and s", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255600000000000000000000000000000000000000000000000000000000000000063b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6eabc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #126: r is larger than n", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd84ff2f6c24e4a33cd71c09fdcbc74a6233961b874b8c8e0eb94582092cbc50c3084fa9547afda5c66335f3f937d4c79afa120486b534139d59ae82d61ead26420", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #127: s is larger than n", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000000000000000000000000001008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea8884b959080bb30859cd53c2fb973cf14d60cdaa8ee00587889b5bc657ac588175a02ce5c1e53cb196113c78b4cb8dc7d360e5ea7850b0f6650b0c45af2c3cd7ca", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #128: small r and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000000000000000002d9b4d347952d6ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7adf4083bd6ecbda5a77ae578e5d835fa7f74a07ebb91e0570e1ff32a563354e9925af80b09a167d9ef647df28e2d9acd0d4bc4f2deec5723818edaf9071e311f8", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #129: smallish r and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000001033e67e37b32b445580bf4eff8b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4dc2569a3c9bf8c1838ca821f7ba6f000cc8679d278f3736b414a34a7c956a03770387ea85bc4f28804b4a91c9b7d65bc6434c975806795ab7d441a4e9683aeb09", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #130: 100-bit r and small s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000000000000000000000000000000000000000000000000000000000000100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b4a9f7da2a6c359a16540c271774a6bf1c586357c978256f44a6496d80670968ac496e73a44563f8d56fbd7bb9e4e3ae304c86f2c508eb777b03924755beb40d4", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #131: small r and 100 bit s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000062522bbd3ecbe7c39e93e7c25ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b874146432b3cd2c9e26204c0a34136996067d466dde4917a8ff23a8e95ca106b709b3d50976ef8b385a813bc35f3a20710bdc6edd465e6f43ac4866703a6608c", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #132: 100-bit r and s^-1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c700000000000000000000000000000000000000000000000000000000000000001e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #134: s == 1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c700000000000000000000000000000000000000000000000000000000000000000e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #135: s == 0", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_special_case_hash.json ================================================ [ { "Input": "00000000690ed426ccf17803ebe2bd0884bcd58a1bb5e7477ead3645f356e7a916aea964a2f6506d6f78c81c91fc7e8bded7d397738448de1e19a0ec580bf266252cd762130c6667cfe8b7bc47d27d78391e8e80c578d1cd38c3ff033be928e92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #59: special case hash", "NoBenchmark": false }, { "Input": "7300000000213f2a525c6035725235c2f696ad3ebb5ee47f140697ad25770d919cc98be2347d469bf476dfc26b9b733df2d26d6ef524af917c665baccb23c882093496459effe2d8d70727b82462f61d0ec1b7847929d10ea631dacb16b56c322927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #60: special case hash", "NoBenchmark": false }, { "Input": "ddf2000000005e0be0635b245f0b97978afd25daadeb3edb4a0161c27fe0604573b3c90ecd390028058164524dde892703dce3dea0d53fa8093999f07ab8aa432f67b0b8e20636695bb7d8bf0a651c802ed25a395387b5f4188c0c4075c886342927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #61: special case hash", "NoBenchmark": false }, { "Input": "67ab1900000000784769c4ecb9e164d6642b8499588b89855be1ec355d0841a0bfab3098252847b328fadf2f89b95c851a7f0eb390763378f37e90119d5ba3ddbdd64e234e832b1067c2d058ccb44d978195ccebb65c2aaf1e2da9b8b4987e3b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #62: special case hash", "NoBenchmark": false }, { "Input": "a2bf09460000000076d7dbeffe125eaf02095dff252ee905e296b6350fc311cf204a9784074b246d8bf8bf04a4ceb1c1f1c9aaab168b1596d17093c5cd21d2cd51cce41670636783dc06a759c8847868a406c2506fe17975582fe648d1d88b522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #63: special case hash", "NoBenchmark": false }, { "Input": "3554e827c700000000e1e75e624a06b3a0a353171160858129e15c544e4f0e65ed66dc34f551ac82f63d4aa4f81fe2cb0031a91d1314f835027bca0f1ceeaa0399ca123aa09b13cd194a422e18d5fda167623c3f6e5d4d6abb8953d67c0c48c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #64: special case hash", "NoBenchmark": false }, { "Input": "9b6cd3b812610000000026941a0f0bb53255ea4c9fd0cb3426e3a54b9fc6965c060b700bef665c68899d44f2356a578d126b062023ccc3c056bf0f60a237012b8d186c027832965f4fcc78a3366ca95dedbb410cbef3f26d6be5d581c11d36102927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #65: special case hash", "NoBenchmark": false }, { "Input": "883ae39f50bf0100000000e7561c26fc82a52baa51c71ca877162f93c4ae01869f6adfe8d5eb5b2c24d7aa7934b6cf29c93ea76cd313c9132bb0c8e38c96831db26a9c9e40e55ee0890c944cf271756c906a33e66b5bd15e051593883b5e99022927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #66: special case hash", "NoBenchmark": false }, { "Input": "a1ce5d6e5ecaf28b0000000000fa7cd010540f420fb4ff7401fe9fce011d0ba6a1af03ca91677b673ad2f33615e56174a1abf6da168cebfa8868f4ba273f16b720aa73ffe48afa6435cd258b173d0c2377d69022e7d098d75caf24c8c5e06b1c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #67: special case hash", "NoBenchmark": false }, { "Input": "8ea5f645f373f580930000000038345397330012a8ee836c5494cdffd5ee8054fdc70602766f8eed11a6c99a71c973d5659355507b843da6e327a28c11893db93df5349688a085b137b1eacf456a9e9e0f6d15ec0078ca60a7f83f2b10d213502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #68: special case hash", "NoBenchmark": false }, { "Input": "660570d323e9f75fa734000000008792d65ce93eabb7d60d8d9c1bbdcb5ef305b516a314f2fce530d6537f6a6c49966c23456f63c643cf8e0dc738f7b876e675d39ffd033c92b6d717dd536fbc5efdf1967c4bd80954479ba66b0120cd16fff22927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #69: special case hash", "NoBenchmark": false }, { "Input": "d0462673154cce587dde8800000000e98d35f1f45cf9c3bf46ada2de4c568c343b2cbf046eac45842ecb7984d475831582717bebb6492fd0a485c101e29ff0a84c9b7b47a98b0f82de512bc9313aaf51701099cac5f76e68c8595fc1c1d992582927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #70: special case hash", "NoBenchmark": false }, { "Input": "bd90640269a7822680cedfef000000000caef15a6171059ab83e7b4418d7278f30c87d35e636f540841f14af54e2f9edd79d0312cfa1ab656c3fb15bfde48dcf47c15a5a82d24b75c85a692bd6ecafeb71409ede23efd08e0db9abf6340677ed2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #71: special case hash", "NoBenchmark": false }, { "Input": "33239a52d72f1311512e41222a00000000d2dcceb301c54b4beae8e284788a7338686ff0fda2cef6bc43b58cfe6647b9e2e8176d168dec3c68ff262113760f52067ec3b651f422669601662167fa8717e976e2db5e6a4cf7c2ddabb3fde9d67d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #72: special case hash", "NoBenchmark": false }, { "Input": "b8d64fbcd4a1c10f1365d4e6d95c000000007ee4a21a1cbe1dc84c2d941ffaf144a3e23bf314f2b344fc25c7f2de8b6af3e17d27f5ee844b225985ab6e2775cf2d48e223205e98041ddc87be532abed584f0411f5729500493c9cc3f4dd15e862927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #73: special case hash", "NoBenchmark": false }, { "Input": "01603d3982bf77d7a3fef3183ed092000000003a227420db4088b20fe0e9d84a2ded5b7ec8e90e7bf11f967a3d95110c41b99db3b5aa8d330eb9d638781688e97d5792c53628155e1bfc46fb1a67e3088de049c328ae1f44ec69238a009808f92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #74: special case hash", "NoBenchmark": false }, { "Input": "9ea6994f1e0384c8599aa02e6cf66d9c000000004d89ef50b7e9eb0cfbff7363bdae7bcb580bf335efd3bc3d31870f923eaccafcd40ec2f605976f15137d8b8ff6dfa12f19e525270b0106eecfe257499f373a4fb318994f24838122ce7ec3c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #75: special case hash", "NoBenchmark": false }, { "Input": "d03215a8401bcf16693979371a01068a4700000000e2fa5bf692bc670905b18c50f9c4f0cd6940e162720957ffff513799209b78596956d21ece251c2401f1c6d7033a0a787d338e889defaaabb106b95a4355e411a59c32aa5167dfab2447262927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #76: special case hash", "NoBenchmark": false }, { "Input": "307bfaaffb650c889c84bf83f0300e5dc87e000000008408fd5f64b582e3bb14f612820687604fa01906066a378d67540982e29575d019aabe90924ead5c860d3f9367702dd7dd4f75ea98afd20e328a1a99f4857b316525328230ce294b0fef2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #77: special case hash", "NoBenchmark": false }, { "Input": "bab5c4f4df540d7b33324d36bb0c157551527c00000000e4af574bb4d54ea6b89505e407657d6e8bc93db5da7aa6f5081f61980c1949f56b0f2f507da5782a7ac60d31904e3669738ffbeccab6c3656c08e0ed5cb92b3cfa5e7f71784f9c50212927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #78: special case hash", "NoBenchmark": false }, { "Input": "d4ba47f6ae28f274e4f58d8036f9c36ec2456f5b00000000c3b869197ef5e15ebbd16fbbb656b6d0d83e6a7787cd691b08735aed371732723e1c68a40404517d9d8e35dba96028b7787d91315be675877d2d097be5e8ee34560e3e7fd25c0f002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #79: special case hash", "NoBenchmark": false }, { "Input": "79fd19c7235ea212f29f1fa00984342afe0f10aafd00000000801e47f8c184e12ec9760122db98fd06ea76848d35a6da442d2ceef7559a30cf57c61e92df327e7ab271da90859479701fccf86e462ee3393fb6814c27b760c4963625c0a198782927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #80: special case hash", "NoBenchmark": false }, { "Input": "8c291e8eeaa45adbaf9aba5c0583462d79cbeb7ac97300000000a37ea6700cda54e76b7683b6650baa6a7fc49b1c51eed9ba9dd463221f7a4f1005a89fe00c592ea076886c773eb937ec1cc8374b7915cfd11b1c1ae1166152f2f7806a31c8fd2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #81: special case hash", "NoBenchmark": false }, { "Input": "0eaae8641084fa979803efbfb8140732f4cdcf66c3f78a000000003c278a6b215291deaf24659ffbbce6e3c26f6021097a74abdbb69be4fb10419c0c496c946665d6fcf336d27cc7cdb982bb4e4ecef5827f84742f29f10abf83469270a03dc32927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #82: special case hash", "NoBenchmark": false }, { "Input": "e02716d01fb23a5a0068399bf01bab42ef17c6d96e13846c00000000afc0f89d207a3241812d75d947419dc58efb05e8003b33fc17eb50f9d15166a88479f107cdee749f2e492b213ce80b32d0574f62f1c5d70793cf55e382d5caadf75927672927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #83: special case hash", "NoBenchmark": false }, { "Input": "9eb0bf583a1a6b9a194e9a16bc7dab2a9061768af89d00659a00000000fc7de16554e49f82a855204328ac94913bf01bbe84437a355a0a37c0dee3cf81aa7728aea00de2507ddaf5c94e1e126980d3df16250a2eaebc8be486effe7f22b4f9292927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #84: special case hash", "NoBenchmark": false }, { "Input": "62aac98818b3b84a2c214f0d5e72ef286e1030cb53d9a82b690e00000000cd15a54c5062648339d2bff06f71c88216c26c6e19b4d80a8c602990ac82707efdfce99bbe7fcfafae3e69fd016777517aa01056317f467ad09aff09be73c9731b0d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #85: special case hash", "NoBenchmark": false }, { "Input": "3760a7f37cf96218f29ae43732e513efd2b6f552ea4b6895464b9300000000c8975bd7157a8d363b309f1f444012b1a1d23096593133e71b4ca8b059cff37eaf7faa7a28b1c822baa241793f2abc930bd4c69840fe090f2aacc46786bf9196222927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #86: special case hash", "NoBenchmark": false }, { "Input": "0da0a1d2851d33023834f2098c0880096b4320bea836cd9cbb6ff6c8000000005694a6f84b8f875c276afd2ebcfe4d61de9ec90305afb1357b95b3e0da43885e0dffad9ffd0b757d8051dec02ebdf70d8ee2dc5c7870c0823b6ccc7c679cbaa42927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #87: special case hash", "NoBenchmark": false }, { "Input": "ffffffff293886d3086fd567aafd598f0fe975f735887194a764a231e82d289aa0c30e8026fdb2b4b4968a27d16a6d08f7098f1a98d21620d7454ba9790f1ba65e470453a8a399f15baf463f9deceb53acc5ca64459149688bd2760c654243392927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #88: special case hash", "NoBenchmark": false }, { "Input": "7bffffffff2376d1e3c03445a072e24326acdc4ce127ec2e0e8d9ca99527e7b7614ea84acf736527dd73602cd4bb4eea1dfebebd5ad8aca52aa0228cf7b99a88737cc85f5f2d2f60d1b8183f3ed490e4de14368e96a9482c2a4dd193195c902f2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #89: special case hash", "NoBenchmark": false }, { "Input": "a2b5ffffffffebb251b085377605a224bc80872602a6e467fd016807e97fa395bead6734ebe44b810d3fb2ea00b1732945377338febfd439a8d74dfbd0f942fa6bb18eae36616a7d3cad35919fd21a8af4bbe7a10f73b3e036a46b103ef56e2a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #90: special case hash", "NoBenchmark": false }, { "Input": "641227ffffffff6f1b96fa5f097fcf3cc1a3c256870d45a67b83d0967d4b20c0499625479e161dacd4db9d9ce64854c98d922cbf212703e9654fae182df9bad242c177cf37b8193a0131108d97819edd9439936028864ac195b64fca76d9d6932927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #91: special case hash", "NoBenchmark": false }, { "Input": "958415d8ffffffffabad03e2fc662dc3ba203521177502298df56f36600e0f8b08f16b8093a8fb4d66a2c8065b541b3d31e3bfe694f6b89c50fb1aaa6ff6c9b29d6455e2d5d1779748573b611cb95d4a21f967410399b39b535ba3e5af81ca2e2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #92: special case hash", "NoBenchmark": false }, { "Input": "f1d8de4858ffffffff1281093536f47fe13deb04e1fbe8fb954521b6975420f8be26231b6191658a19dd72ddb99ed8f8c579b6938d19bce8eed8dc2b338cb5f8e1d9a32ee56cffed37f0f22b2dcb57d5c943c14f79694a03b9c5e96952575c892927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #93: special case hash", "NoBenchmark": false }, { "Input": "0927895f2802ffffffff10782dd14a3b32dc5d47c05ef6f1876b95c81fc31def15e76880898316b16204ac920a02d58045f36a229d4aa4f812638c455abe0443e74d357d3fcb5c8c5337bd6aba4178b455ca10e226e13f9638196506a19391232927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #94: special case hash", "NoBenchmark": false }, { "Input": "60907984aa7e8effffffff4f332862a10a57c3063fb5a30624cf6a0c3ac80589352ecb53f8df2c503a45f9846fc28d1d31e6307d3ddbffc1132315cc07f16dad1348dfa9c482c558e1d05c5242ca1c39436726ecd28258b1899792887dd0a3c62927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #95: special case hash", "NoBenchmark": false }, { "Input": "c6ff198484939170ffffffff0af42cda50f9a5f50636ea6942d6b9b8cd6ae1e24a40801a7e606ba78a0da9882ab23c7677b8642349ed3d652c5bfa5f2a9558fb3a49b64848d682ef7f605f2832f7384bdc24ed2925825bf8ea77dc59817257822927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #96: special case hash", "NoBenchmark": false }, { "Input": "de030419345ca15c75ffffffff8074799b9e0956cc43135d16dfbe4d27d7e68deacc5e1a8304a74d2be412b078924b3bb3511bac855c05c9e5e9e44df3d61e967451cd8e18d6ed1885dd827714847f96ec4bb0ed4c36ce9808db8f714204f6d12927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #97: special case hash", "NoBenchmark": false }, { "Input": "6f0e3eeaf42b28132b88fffffffff6c8665604d34acb19037e1ab78caaaac6ff2f7a5e9e5771d424f30f67fdab61e8ce4f8cd1214882adb65f7de94c31577052ac4e69808345809b44acb0b2bd889175fb75dd050c5a449ab9528f8f78daa10c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #98: special case hash", "NoBenchmark": false }, { "Input": "cdb549f773b3e62b3708d1ffffffffbe48f7c0591ddcae7d2cb222d1f8017ab9ffcda40f792ce4d93e7e0f0e95e1a2147dddd7f6487621c30a03d710b330021979938b55f8a17f7ed7ba9ade8f2065a1fa77618f0b67add8d58c422c2453a49a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #99: special case hash", "NoBenchmark": false }, { "Input": "2c3f26f96a3ac0051df4989bffffffff9fd64886c1dc4f9924d8fd6f0edb048481f2359c4faba6b53d3e8c8c3fcc16a948350f7ab3a588b28c17603a431e39a8cd6f6a5cc3b55ead0ff695d06c6860b509e46d99fccefb9f7f9e101857f743002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #100: special case hash", "NoBenchmark": false }, { "Input": "ac18f8418c55a2502cb7d53f9affffffff5c31d89fda6a6b8476397c04edf411dfc8bf520445cbb8ee1596fb073ea283ea130251a6fdffa5c3f5f2aaf75ca808048e33efce147c9dd92823640e338e68bfd7d0dc7a4905b3a7ac711e577e90e72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #101: special case hash", "NoBenchmark": false }, { "Input": "4f9618f98e2d3a15b24094f72bb5ffffffffa2fd3e2893683e5a6ab8cf0ee610ad019f74c6941d20efda70b46c53db166503a0e393e932f688227688ba6a576293320eb7ca0710255346bdbb3102cdcf7964ef2e0988e712bc05efe16c1993452927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #102: special case hash", "NoBenchmark": false }, { "Input": "422e82a3d56ed10a9cc21d31d37a25ffffffff67edf7c40204caae73ab0bc75aac8096842e8add68c34e78ce11dd71e4b54316bd3ebf7fffdeb7bd5a3ebc1883f5ca2f4f23d674502d4caf85d187215d36e3ce9f0ce219709f21a3aac003b7a82927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #103: special case hash", "NoBenchmark": false }, { "Input": "7075d245ccc3281b6e7b329ff738fbb417a5ffffffffa0842d9890b5cf95d018677b2d3a59b18a5ff939b70ea002250889ddcd7b7b9d776854b4943693fb92f76b4ba856ade7677bf30307b21f3ccda35d2f63aee81efd0bab6972cc0795db552927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #104: special case hash", "NoBenchmark": false }, { "Input": "3c80de54cd9226989443d593fa4fd6597e280ebeffffffffc1847eb76c217a95479e1ded14bcaed0379ba8e1b73d3115d84d31d4b7c30e1f05e1fc0d5957cfb0918f79e35b3d89487cf634a4f05b2e0c30857ca879f97c771e877027355b24432927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #105: special case hash", "NoBenchmark": false }, { "Input": "de21754e29b85601980bef3d697ea2770ce891a8cdffffffffc7906aa794b39b43dfccd0edb9e280d9a58f01164d55c3d711e14b12ac5cf3b64840ead512a0a31dbe33fa8ba84533cd5c4934365b3442ca1174899b78ef9a3199f495843897722927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #106: special case hash", "NoBenchmark": false }, { "Input": "8f65d92927cfb86a84dd59623fb531bb599e4d5f7289ffffffff2f1f2f57881c5b09ab637bd4caf0f4c7c7e4bca592fea20e9087c259d26a38bb4085f0bbff1145b7eb467b6748af618e9d80d6fdcd6aa24964e5a13f885bca8101de08eb0d752927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #107: special case hash", "NoBenchmark": false }, { "Input": "6b63e9a74e092120160bea3877dace8a2cc7cd0e8426cbfffffffffafc8c3ca85e9b1c5a028070df5728c5c8af9b74e0667afa570a6cfa0114a5039ed15ee06fb1360907e2d9785ead362bb8d7bd661b6c29eeffd3c5037744edaeb9ad990c202927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #108: special case hash", "NoBenchmark": false }, { "Input": "fc28259702a03845b6d75219444e8b43d094586e249c8699ffffffffe852512e0671a0a85c2b72d54a2fb0990e34538b4890050f5a5712f6d1a7a5fb8578f32edb1846bab6b7361479ab9c3285ca41291808f27fd5bd4fdac720e5854713694c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #109: special case hash", "NoBenchmark": false }, { "Input": "1273b4502ea4e3bccee044ee8e8db7f774ecbcd52e8ceb571757ffffffffe20a7673f8526748446477dbbb0590a45492c5d7d69859d301abbaedb35b2095103a3dc70ddf9c6b524d886bed9e6af02e0e4dec0d417a414fed3807ef4422913d7c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #110: special case hash", "NoBenchmark": false }, { "Input": "08fb565610a79baa0c566c66228d81814f8c53a15b96e602fb49ffffffffff6e7f085441070ecd2bb21285089ebb1aa6450d1a06c36d3ff39dfd657a796d12b5249712012029870a2459d18d47da9aa492a5e6cb4b2d8dafa9e4c5c54a2b9a8b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #111: special case hash", "NoBenchmark": false }, { "Input": "d59291cc2cf89f3087715fcb1aa4e79aa2403f748e97d7cd28ecaefeffffffff914c67fb61dd1e27c867398ea7322d5ab76df04bc5aa6683a8e0f30a5d287348fa07474031481dda4953e3ac1959ee8cea7e66ec412b38d6c96d28f6d37304ea2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #112: special case hash", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_special_case_r_s.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #9: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #10: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #11: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #12: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #13: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #14: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #15: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #16: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #17: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #18: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #19: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #20: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #21: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #22: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255100000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #23: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255100000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #24: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #25: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #26: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #27: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #28: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #29: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #30: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #31: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #32: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #33: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #34: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #35: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #36: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255200000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #37: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255200000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #38: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #39: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #40: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #41: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #42: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #43: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #44: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #45: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #46: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #47: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #48: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #49: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #50: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff0000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #51: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff0000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #52: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #53: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #54: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #55: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #56: Signature with special case values for r and s", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #57: Signature with special case values for r and s", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_special_points.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #3: valid", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c70b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #136: point at infinity during verify", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #171: point duplication during verification", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #172: duplication bug", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001555555550000000055555555555555553ef7a8e48d07df81a693439654210c706adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #173: point with x-coordinate 0", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #175: comparison with point at infinity ", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #188: testing point duplication", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502344a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #189: testing point duplication", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #190: testing point duplication", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502344a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #191: testing point duplication", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c700203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #654: point at infinity during verify", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed80158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #689: point duplication during verification", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed80158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #690: duplication bug", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #693: comparison with point at infinity ", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #706: testing point duplication", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #707: testing point duplication", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #708: testing point duplication", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", "Expected": "", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #709: testing point duplication", "NoBenchmark": false }, { "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Expected": "", "Gas": 6900, "Name": "reference point errors", "NoBenchmark": false } ] ================================================ FILE: tests/osaka/eip7951_p256verify_precompiles/vectors/secp256r1_u1_u2.json ================================================ [ { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502369da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #139: u1 == 1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52ed8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #140: u1 == n - 1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c703623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #141: u2 == 1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #142: u2 == n - 1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #143: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #144: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd03ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #145: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #146: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #147: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f915eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #148: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #149: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #150: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d63fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #151: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd29798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d89cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #152: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dda3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #153: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd16e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1baf19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #154: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a9783a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #155: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #156: edge case for u1", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #157: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f22eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #158: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e84db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #159: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf291b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #160: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #161: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #162: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc86000a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #163: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #164: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #165: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b0992f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #166: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #167: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e378651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #168: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #169: edge case for u2", "NoBenchmark": false }, { "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #170: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #657: u1 == 1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c04ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #658: u1 == n - 1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c70692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #659: u2 == 1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e100cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #660: u2 == n - 1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd710f8e3edc7c2d5a3fd23de844002bb949d9f794f6d5405f6d97c1bb03dd2bd2b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f244862243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #661: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdedffbc270f722c243069a7e5f40335a61a58525c7b4db2e7a8e269274ffe4e1bc25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed71714927446699965d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #662: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda25adcae105ed7ff4f95d2344e24ee523314c3e178525d007904b68919ba4d538fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca98a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #663: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2e4348c645707dce6760d773de3f3e87346924b2f64bd3dd0297e766b5805ebb02148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2cc0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #664: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd348c673b07dce3920d773de3f3e87408869e916dbcf797d8f9684fb67753d1dca34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #665: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6918ce760fb9c7241aee7bc7e7d0e8110d3d22db79ef2fb1f2d09f6ceea7a3b8b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #666: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd73b3c694391d8eadde3f3e874089464715ac20e4c126bbf6d864d648969f5b5a81e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb9ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #667: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb07ac7a86948c2c2989a16db1930ef1b89ce112595197656877e53c41457f28ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf737f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #668: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27e4d82cb6c061dd9337c69bf9332ed3d198662d6f2299443f62c861187db648518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #669: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde7c5cf3aac2e88923b77850515fff6a12d13b356dfe9ec275c3dd81ae94609a4a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352da54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #670: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc77838df91c1e953e016e10bddffea2317f9fee32bacfe553cede9e57a748f68ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8caace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #671: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8ef071c02383d2a6c02dc217bbffd446730d0318b0425e2586220907f885f97f94b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #672: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5668aaa0b545bbf9a044a32399ffbe69ce20074e34d7bdf5cf56282a769763965351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #673: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd12d6e56882f6c0027cae91a27127728f7fddf478fb4fdc2b65f40a60b0eb952748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a69d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #674: edge case for u1", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a14b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #675: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #676: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851edb2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #677: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf209179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab60638527425556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #678: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb366901959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7ed9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #679: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a9960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #680: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc86003499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #681: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad32c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #682: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f491d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #683: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #684: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #685: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a10976e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #686: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a62140e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #687: edge case for u2", "NoBenchmark": false }, { "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f85689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 6900, "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #688: edge case for u2", "NoBenchmark": false } ] ================================================ FILE: tests/paris/__init__.py ================================================ """Test cases for EVM functionality introduced in Paris (Merge).""" ================================================ FILE: tests/paris/eip7610_create_collision/__init__.py ================================================ """Cross-client Create Collision Tests.""" ================================================ FILE: tests/paris/eip7610_create_collision/test_initcollision.py ================================================ """ Test collision in CREATE/CREATE2 account creation, where the existing account only has a non-zero storage slot set. """ import pytest from ethereum_test_tools import ( Account, Alloc, Bytecode, Initcode, StateTestFiller, Transaction, compute_create_address, ) from ethereum_test_tools import Opcodes as Op REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7610.md" REFERENCE_SPEC_VERSION = "80ef48d0bbb5a4939ade51caaaac57b5df6acd4e" pytestmark = [ pytest.mark.valid_from("Paris"), pytest.mark.ported_from( [ "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stSStoreTest/InitCollisionFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stSStoreTest/InitCollisionNonZeroNonceFiller.json", "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stSStoreTest/InitCollisionParisFiller.json", ], pr=["https://github.com/ethereum/execution-spec-tests/pull/636"], ), pytest.mark.parametrize( "collision_nonce,collision_balance,collision_code", [ pytest.param(0, 0, b"\0", id="non-empty-code"), pytest.param(0, 1, b"", id="non-empty-balance"), pytest.param(1, 0, b"", id="non-empty-nonce"), ], ), pytest.mark.parametrize( "initcode", [ pytest.param( Initcode( deploy_code=Op.STOP, initcode_prefix=Op.SSTORE(0, 1) + Op.SSTORE(1, 0), ), id="correct-initcode", ), pytest.param(Op.REVERT(0, 0), id="revert-initcode"), pytest.param(Op.MSTORE(0xFFFFFFFFFFFFFFFFFFFFFFFFFFF, 1), id="oog-initcode"), ], ), pytest.mark.pre_alloc_modify, # We need to modify the pre-alloc to include the collision ] @pytest.mark.with_all_contract_creating_tx_types def test_init_collision_create_tx( state_test: StateTestFiller, pre: Alloc, tx_type: int, collision_nonce: int, collision_balance: int, collision_code: bytes, initcode: Bytecode, ) -> None: """ Test that a contract creation transaction exceptionally aborts when the target address has a non-empty storage, balance, nonce, or code. """ tx = Transaction( sender=pre.fund_eoa(), type=tx_type, to=None, data=initcode, gas_limit=200_000, ) created_contract_address = tx.created_contract # This is the collision pre[created_contract_address] = Account( storage={0x01: 0x01}, nonce=collision_nonce, balance=collision_balance, code=collision_code, ) state_test( pre=pre, post={ created_contract_address: Account( storage={0x01: 0x01}, ), }, tx=tx, ) @pytest.mark.parametrize("opcode", [Op.CREATE, Op.CREATE2]) def test_init_collision_create_opcode( state_test: StateTestFiller, pre: Alloc, opcode: Op, collision_nonce: int, collision_balance: int, collision_code: bytes, initcode: Bytecode, ) -> None: """ Test that a contract creation opcode exceptionally aborts when the target address has a non-empty storage, balance, nonce, or code. """ assert len(initcode) <= 32 contract_creator_code = ( Op.MSTORE(0, Op.PUSH32(bytes(initcode).ljust(32, b"\0"))) + Op.SSTORE(0x01, opcode(value=0, offset=0, size=len(initcode))) + Op.STOP ) contract_creator_address = pre.deploy_contract( contract_creator_code, storage={0x01: 0x01}, ) created_contract_address = compute_create_address( address=contract_creator_address, nonce=1, salt=0, initcode=initcode, opcode=opcode, ) tx = Transaction( sender=pre.fund_eoa(), to=contract_creator_address, data=initcode, gas_limit=2_000_000, ) pre[created_contract_address] = Account( storage={0x01: 0x01}, nonce=collision_nonce, balance=collision_balance, code=collision_code, ) state_test( pre=pre, post={ created_contract_address: Account( storage={0x01: 0x01}, ), contract_creator_address: Account(storage={0x01: 0x00}), }, tx=tx, ) ================================================ FILE: tests/paris/security/__init__.py ================================================ """Ethereum execution client tests related to security issues.""" ================================================ FILE: tests/paris/security/test_selfdestruct_balance_bug.py ================================================ """ Tests the Consensus Flaw During Block Processing related to SELFDESTRUCT. Tests the consensus-vulnerability reported in [go-ethereum/security/advisories/GHSA-xw37-57qp-9mm4](https://github.com/ethere um/go-ethereum/security/advisories/GHSA-xw37-57qp-9mm4). To reproduce the issue with this test case: 1. Fill the test with the most recent geth evm version. 2. Run the fixture output within a vulnerable geth version: v1.9.20 > geth >= v1.9.4. """ import pytest from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, CalldataCase, Initcode, Switch, Transaction, compute_create_address, ) from ethereum_test_vm import Opcodes as Op @pytest.mark.valid_from("Constantinople") def test_tx_selfdestruct_balance_bug(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """ Test that the vulnerability is not present by checking the balance of the `0xaa` contract after executing specific transactions. 1. Start with contract `0xaa` which has initial balance of 3 wei. `0xaa` contract code simply performs a self-destruct to itself. 2. Send a transaction (tx 1) to invoke caller contract `0xcc` (which has a balance of 1 wei), which in turn invokes `0xaa` with a 1 wei call. 3. Store the balance of `0xaa` after the first transaction is processed. `0xaa` self-destructed. Expected outcome: 0 wei. 4. Send another transaction (tx 2) to call 0xaa with 5 wei. 5. Store the balance of `0xaa` after the second transaction is processed. No self-destruct. Expected outcome: 5 wei. 6. Verify that: - Call within tx 1 is successful, i.e `0xaa` self-destructed. - The balances of `0xaa` after each tx are correct. - During tx 2, code in `0xaa` does not execute, hence self-destruct mechanism does not trigger. TODO: EOF - This test could be parametrized for EOFCREATE """ deploy_code = Switch( default_action=Op.REVERT(0, 0), cases=[ CalldataCase( value=0, action=Op.SELFDESTRUCT(Op.ADDRESS), ), CalldataCase( value=1, action=Op.SSTORE(0, Op.SELFBALANCE), ), ], ) aa_code = Initcode( deploy_code=deploy_code, ) cc_code = ( Op.CALLDATACOPY(size=Op.CALLDATASIZE) + Op.MSTORE( 0, Op.CREATE( value=3, # Initial balance of 3 wei offset=0, size=Op.CALLDATASIZE, ), ) + Op.SSTORE(0xCA1101, Op.CALL(gas=100000, address=Op.MLOAD(0), value=0)) + Op.CALL(gas=100000, address=Op.MLOAD(0), value=1) ) cc_address = pre.deploy_contract(cc_code, balance=1000000000) aa_location = compute_create_address(address=cc_address, nonce=1) balance_code = Op.SSTORE(0xBA1AA, Op.BALANCE(aa_location)) balance_address_1 = pre.deploy_contract(balance_code) balance_address_2 = pre.deploy_contract(balance_code) sender = pre.fund_eoa() blocks = [ Block( txs=[ # Sender invokes caller, caller invokes 0xaa: # calling with 1 wei call Transaction( sender=sender, to=cc_address, data=aa_code, gas_limit=1000000, ), # Dummy tx to store balance of 0xaa after first TX. Transaction( sender=sender, to=balance_address_1, gas_limit=100000, ), # Sender calls 0xaa with 5 wei. Transaction( sender=sender, to=aa_location, gas_limit=100000, value=5, ), # Dummy tx to store balance of 0xaa after second TX. Transaction( sender=sender, to=balance_address_2, gas_limit=100000, ), ], ), ] post = { # Check call from caller has succeeded. cc_address: Account(nonce=2, storage={0xCA1101: 1}), # Check balance of 0xaa after tx 1 is 0 wei, i.e self-destructed. # Vulnerable versions should return 1 wei. balance_address_1: Account(storage={0xBA1AA: 0}), # Check that 0xaa exists and balance after tx 2 is 5 wei. # Vulnerable versions should return 6 wei. balance_address_2: Account(storage={0xBA1AA: 5}), aa_location: Account(storage={0: 0}), } blockchain_test(pre=pre, post=post, blocks=blocks) ================================================ FILE: tests/prague/__init__.py ================================================ """ Test cases for EVM functionality introduced in Prague, [EIP-7600: Hardfork Meta - Pectra](https://eip.directory/eips/eip-7600). Devnet Specifications: - [ethpandaops/pectra-devnet-5](https://notes.ethereum.org/@ethpandaops/pectra-devnet-5). - [ethpandaops/pectra-devnet-4](https://notes.ethereum.org/@ethpandaops/pectra-devnet-4). - [ethpandaops/pectra-devnet-3](https://notes.ethereum.org/@ethpandaops/pectra-devnet-3). - [ethpandaops/pectra-devnet-2](https://notes.ethereum.org/@ethpandaops/pectra-devnet-2). - [ethpandaops/pectra-devnet-1](https://notes.ethereum.org/@ethpandaops/pectra-devnet-1). """ ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/__init__.py ================================================ """ Tests [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/conftest.py ================================================ """Shared pytest definitions local to EIP-2537 tests.""" from typing import SupportsBytes import pytest from ethereum_test_forks import Fork from ethereum_test_tools import EOA, Address, Alloc, Bytecode, Storage, Transaction, keccak256 from ethereum_test_tools import Opcodes as Op from .helpers import BLSPointGenerator from .spec import GAS_CALCULATION_FUNCTION_MAP @pytest.fixture def vector_gas_value() -> int | None: """ Gas value from the test vector if any. If `None` it means that the test scenario did not come from a file, so no comparison is needed. The `vectors_from_file` function reads the gas value from the file and overwrites this fixture. """ return None @pytest.fixture def precompile_gas( precompile_address: int, input_data: bytes, vector_gas_value: int | None ) -> int: """Gas cost for the precompile.""" calculated_gas = GAS_CALCULATION_FUNCTION_MAP[precompile_address](len(input_data)) if vector_gas_value is not None: assert calculated_gas == vector_gas_value, ( f"Calculated gas {calculated_gas} != Vector gas {vector_gas_value}" ) return calculated_gas @pytest.fixture def precompile_gas_modifier() -> int: """ Modify the gas passed to the precompile, for testing purposes. By default the call is made with the exact gas amount required for the given opcode, but when this fixture is overridden, the gas amount can be modified to, e.g., test a lower amount and test if the precompile call fails. """ return 0 @pytest.fixture def call_opcode() -> Op: """ Type of call used to call the precompile. By default it is Op.CALL, but it can be overridden in the test. """ return Op.CALL @pytest.fixture def call_contract_post_storage() -> Storage: """ Storage of the test contract after the transaction is executed. Note: Fixture `call_contract_code` fills the actual expected storage values. """ return Storage() @pytest.fixture def call_succeeds( expected_output: bytes | SupportsBytes, ) -> bool: """ By default, depending on the expected output, we can deduce if the call is expected to succeed or fail. """ return len(bytes(expected_output)) > 0 @pytest.fixture def call_contract_code( precompile_address: int, precompile_gas: int | None, precompile_gas_modifier: int, expected_output: bytes | SupportsBytes, call_succeeds: bool, call_opcode: Op, call_contract_post_storage: Storage, ) -> Bytecode: """ Code of the test contract. Args: precompile_address: Address of the precompile to call. precompile_gas: Gas cost for the precompile, which is automatically calculated by the `precompile_gas` fixture, but can be overridden in the test. precompile_gas_modifier: Gas cost modifier for the precompile, which is automatically set to zero by the `precompile_gas_modifier` fixture, but can be overridden in the test. expected_output: Expected output of the precompile call. This value is used to determine if the call is expected to succeed or fail. call_succeeds: Boolean that indicates if the call is expected to succeed or fail. call_opcode: Type of call used to call the precompile (Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL). call_contract_post_storage: Storage of the test contract after the transaction is executed. """ expected_output = bytes(expected_output) assert call_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] value = [0] if call_opcode in [Op.CALL, Op.CALLCODE] else [] precompile_gas_value_opcode: int | Op if precompile_gas is None: precompile_gas_value_opcode = Op.GAS else: precompile_gas_value_opcode = precompile_gas + precompile_gas_modifier code = ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE()) + Op.SSTORE( call_contract_post_storage.store_next(call_succeeds), call_opcode( precompile_gas_value_opcode, precompile_address, *value, # Optional, only used for CALL and CALLCODE. 0, Op.CALLDATASIZE(), 0, 0, ), ) + Op.SSTORE( call_contract_post_storage.store_next(len(expected_output)), Op.RETURNDATASIZE(), ) ) if call_succeeds: # Add integrity check only if the call is expected to succeed. code += Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE()) + Op.SSTORE( call_contract_post_storage.store_next(keccak256(expected_output)), Op.SHA3(0, Op.RETURNDATASIZE()), ) return code @pytest.fixture def call_contract_address(pre: Alloc, call_contract_code: Bytecode) -> Address: """Address where the test contract will be deployed.""" return pre.deploy_contract(call_contract_code) @pytest.fixture def sender(pre: Alloc) -> EOA: """Sender of the transaction.""" return pre.fund_eoa() @pytest.fixture def post(call_contract_address: Address, call_contract_post_storage: Storage) -> dict: """Test expected post outcome.""" return { call_contract_address: { "storage": call_contract_post_storage, }, } @pytest.fixture def tx_gas_limit(fork: Fork, input_data: bytes, precompile_gas: int) -> int: """ Transaction gas limit used for the test (Can be overridden in the test). """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() extra_gas = 100_000 return ( extra_gas + intrinsic_gas_cost_calculator(calldata=input_data) + memory_expansion_gas_calculator(new_bytes=len(input_data)) + precompile_gas ) @pytest.fixture def tx( input_data: bytes, tx_gas_limit: int, call_contract_address: Address, sender: EOA, ) -> Transaction: """Transaction for the test.""" return Transaction( gas_limit=tx_gas_limit, data=input_data, to=call_contract_address, sender=sender, ) NUM_TEST_POINTS = 5 # Random points not in the subgroup (fast to generate) G1_POINTS_NOT_IN_SUBGROUP = [ BLSPointGenerator.generate_random_g1_point_not_in_subgroup(seed=i) for i in range(NUM_TEST_POINTS) ] G2_POINTS_NOT_IN_SUBGROUP = [ BLSPointGenerator.generate_random_g2_point_not_in_subgroup(seed=i) for i in range(NUM_TEST_POINTS) ] # Field points that maps to the identity point using `BLS12_MAP_FP_TO_G1` G1_FIELD_POINTS_MAP_TO_IDENTITY = BLSPointGenerator.generate_g1_map_isogeny_kernel_points() # Random points not on the curve (fast to generate) G1_POINTS_NOT_ON_CURVE = [ BLSPointGenerator.generate_random_g1_point_not_on_curve(seed=i) for i in range(NUM_TEST_POINTS) ] G2_POINTS_NOT_ON_CURVE = [ BLSPointGenerator.generate_random_g2_point_not_on_curve(seed=i) for i in range(NUM_TEST_POINTS) ] # Field points that maps to the identity point using `BLS12_MAP_FP_TO_G2` G2_FIELD_POINTS_MAP_TO_IDENTITY = BLSPointGenerator.generate_g2_map_isogeny_kernel_points() ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/helpers.py ================================================ """Helper functions for the EIP-2537 BLS12-381 precompiles tests.""" import hashlib import os from typing import Annotated, Any, List, Optional import pytest from joblib import Memory from py_ecc.bls12_381 import FQ, FQ2, add, field_modulus, multiply from pydantic import BaseModel, BeforeValidator, ConfigDict, RootModel, TypeAdapter from pydantic.alias_generators import to_pascal from .spec import FP, FP2, PointG1, PointG2, Spec def current_python_script_directory(*args: str) -> str: """ Get the current Python script directory, optionally appending additional path components. """ return os.path.join(os.path.dirname(os.path.realpath(__file__)), *args) class Vector(BaseModel): """Test vector for the BLS12-381 precompiles.""" input: Annotated[bytes, BeforeValidator(bytes.fromhex)] expected: Annotated[bytes, BeforeValidator(bytes.fromhex)] gas: int name: str model_config = ConfigDict(alias_generator=to_pascal) def to_pytest_param(self) -> Any: """ Convert the test vector to a tuple that can be used as a parameter in a pytest test. """ return pytest.param(self.input, self.expected, self.gas, id=self.name) class FailVector(BaseModel): """Test vector for the BLS12-381 precompiles.""" input: Annotated[bytes, BeforeValidator(bytes.fromhex)] expected_error: str name: str model_config = ConfigDict(alias_generator=to_pascal) def to_pytest_param(self) -> Any: """ Convert the test vector to a tuple that can be used as a parameter in a pytest test. """ return pytest.param(self.input, id=self.name) class VectorList(RootModel): """List of test vectors for the BLS12-381 precompiles.""" root: List[Vector | FailVector] VectorListAdapter = TypeAdapter(VectorList) def vectors_from_file(filename: str) -> List: """Load test vectors from a file.""" with open( current_python_script_directory( "vectors", filename, ), "rb", ) as f: return [v.to_pytest_param() for v in VectorListAdapter.validate_json(f.read()).root] def add_points_g1(point_a: PointG1, point_b: PointG1) -> PointG1: """ Add two points in G1 using standard formulas. For points P = (x, y) and Q = (u, v), compute R = P + Q. """ if point_a.x == 0 and point_a.y == 0: return point_b if point_b.x == 0 and point_b.y == 0: return point_a py_ecc_point_a = (FQ(point_a.x), FQ(point_a.y)) py_ecc_point_b = (FQ(point_b.x), FQ(point_b.y)) result = add(py_ecc_point_a, py_ecc_point_b) if result is None: return Spec.INF_G1 return PointG1(int(result[0]), int(result[1])) def add_points_g2(point_a: PointG2, point_b: PointG2) -> PointG2: """ Add two points in G2 using standard formulas. For points P = ((x_0, x_1), (y_0, y_1)) and Q = ((u_0, u_1), (v_0, v_1)), compute R = P + Q. """ if point_a.x == (0, 0) and point_a.y == (0, 0): return point_b if point_b.x == (0, 0) and point_b.y == (0, 0): return point_a py_ecc_point_a = (FQ2(point_a.x), FQ2(point_a.y)) py_ecc_point_b = (FQ2(point_b.x), FQ2(point_b.y)) result = add(py_ecc_point_a, py_ecc_point_b) if result is None: return Spec.INF_G2 new_x = (int(result[0].coeffs[0]), int(result[0].coeffs[1])) new_y = (int(result[1].coeffs[0]), int(result[1].coeffs[1])) return PointG2(new_x, new_y) class BLSPointGenerator: """ Generator for points on the BLS12-381 curve with various properties. Provides methods to generate points with specific properties: - on the standard curve - in the correct r-order subgroup or not - on the curve or not - on an isomorphic curve (not standard curve) but in the correct r-order subgroup Additional resource that helped the class implementation: https://hackmd.io/@benjaminion/bls12-381 """ # Constants for G1 curve equations # The b-coefficient in the elliptic curve equation y^2 = x^3 + b # Standard BLS12-381 G1 curve uses b=4 # This is a known parameter of the BLS12-381 curve specification STANDARD_B_G1 = Spec.B_COEFFICIENT # Isomorphic G1 curve uses b=24 (can be any b value for an isomorphic # curve) ISOMORPHIC_B_G1 = 24 # Isomorphic curve: y^2 = x^3 + 24 # Constants for G2 curve equations # Standard BLS12-381 G2 curve uses b=(4,4) STANDARD_B_G2 = (Spec.B_COEFFICIENT, Spec.B_COEFFICIENT) # Isomorphic G2 curve uses b=(24,24) ISOMORPHIC_B_G2 = (24, 24) # Cofactors for G1 and G2 # These are known constants for the BLS12-381 curve. # G1 cofactor h₁: (x-1)²/3 where x is the BLS parameter G1_COFACTOR = 0x396C8C005555E1568C00AAAB0000AAAB # G2 cofactor h₂: (x⁸ - 4x⁷ + 5x⁶ - 4x⁴ + 6x³ - 4x² - 4x + 13)/9 G2_COFACTOR = 0x5D543A95414E7F1091D50792876A202CD91DE4547085ABAA68A205B2E5A7DDFA628F1CB4D9E82EF21537E293A6691AE1616EC6E786F0C70CF1C38E31C7238E5 # noqa: E501 # Memory cache for expensive functions memory = Memory(location=".cache", verbose=0) @staticmethod def is_on_curve_g1(x: int, y: int) -> bool: """Check if point (x,y) is on the BLS12-381 G1 curve.""" x_fq = FQ(x) y_fq = FQ(y) return y_fq * y_fq == x_fq * x_fq * x_fq + FQ(Spec.B_COEFFICIENT) @staticmethod def is_on_curve_g2(x: tuple, y: tuple) -> bool: """Check if point (x,y) is on the BLS12-381 G2 curve.""" x_fq2 = FQ2(x) y_fq2 = FQ2(y) return y_fq2 * y_fq2 == x_fq2 * x_fq2 * x_fq2 + FQ2( (Spec.B_COEFFICIENT, Spec.B_COEFFICIENT) ) @staticmethod def check_in_g1_subgroup(point: PointG1) -> bool: """Check if a G1 point is in the correct r-order subgroup.""" try: # Check q*P = O where q is the subgroup order x = FQ(point.x) y = FQ(point.y) result = multiply((x, y), Spec.Q) # If point is in the subgroup, q*P should be infinity return result is None except Exception: return False @staticmethod def check_in_g2_subgroup(point: PointG2) -> bool: """Check if a G2 point is in the correct r-order subgroup.""" try: # Check q*P = O where q is the subgroup order x = FQ2(point.x) y = FQ2(point.y) result = multiply((x, y), Spec.Q) # If point is in the subgroup, q*P should be infinity return result is None except Exception: return False @staticmethod def sqrt_fq(a: FQ) -> Optional[FQ]: """ Compute smallest square root of FQ element (if it exists). Used when finding valid y-coordinates for a given x-coordinate on the G1 curve. """ assert field_modulus % 4 == 3, "This sqrt method requires p % 4 == 3" candidate = a ** ((field_modulus + 1) // 4) if candidate * candidate == a: if int(candidate) > field_modulus // 2: return -candidate return candidate return None @staticmethod def sqrt_fq2(a: FQ2) -> Optional[FQ2]: """ Compute square root of FQ2 element (if it exists). Used when finding valid y-coordinates for a given x-coordinate on the G2 curve. """ if a == FQ2([0, 0]): return FQ2([0, 0]) candidate = a ** ((field_modulus**2 + 7) // 16) if candidate * candidate == a: int_c0, int_c1 = int(candidate.coeffs[0]), int(candidate.coeffs[1]) if int_c1 > 0 or (int_c1 == 0 and int_c0 > field_modulus // 2): return -candidate return candidate return None @classmethod def multiply_by_cofactor(cls, point: Any, is_g2: bool = False) -> Any: """ Multiply a point by the cofactor to ensure it's in the correct r-order subgroup. Used for creating points in the correct r-order subgroup when using isomorphic curves. """ cofactor = cls.G2_COFACTOR if is_g2 else cls.G1_COFACTOR try: if is_g2: # For G2, the point is given in this form: ((x0, x1), (y0, y1)) x = FQ2([point[0][0], point[0][1]]) y = FQ2([point[1][0], point[1][1]]) base_point = (x, y) result = multiply(base_point, cofactor) return ( (int(result[0].coeffs[0]), int(result[0].coeffs[1])), # type: ignore (int(result[1].coeffs[0]), int(result[1].coeffs[1])), # type: ignore ) else: # For G1, the point is given as (x, y). x = FQ(point[0]) # type: ignore y = FQ(point[1]) # type: ignore base_point = (x, y) result = multiply(base_point, cofactor) return (int(result[0]), int(result[1])) # type: ignore except Exception as e: raise ValueError("Failed to multiply point by cofactor") from e @classmethod @memory.cache def find_g1_point_by_x(cls, x_value: int, in_subgroup: bool, on_curve: bool = True) -> PointG1: """ Find a G1 point with x-coordinate at or near the given value, with the specified subgroup membership and curve membership. """ max_offset = 5000 isomorphic_b = cls.ISOMORPHIC_B_G1 for offset in range(max_offset + 1): for direction in [1, -1]: if offset == 0 and direction == -1: continue try_x = (x_value + direction * offset) % Spec.P try: x = FQ(try_x) # Calculate y² = x³ + b (standard curve or isomorphic # curve) b_value = cls.STANDARD_B_G1 if on_curve else isomorphic_b y_squared = x**3 + FQ(b_value) # Try to find y such that y² = x³ + b y = cls.sqrt_fq(y_squared) if y is None: continue # No valid y exists for this x # Create the initial points on either curve raw_point = (int(x), int(y)) raw_point2 = (int(x), Spec.P - int(y)) # For isomorphic curve points in subgroup, apply cofactor # multiplication if not on_curve and in_subgroup: try: subgroup_point = cls.multiply_by_cofactor(raw_point, is_g2=False) point1 = PointG1(subgroup_point[0], subgroup_point[1]) except ValueError: continue # Skip if fails else: point1 = PointG1(int(x), int(y)) if not on_curve and in_subgroup: try: subgroup_point2 = cls.multiply_by_cofactor(raw_point2, is_g2=False) point2 = PointG1(subgroup_point2[0], subgroup_point2[1]) except ValueError: continue # Skip if fails else: point2 = PointG1(int(x), Spec.P - int(y)) # Verify points have the required properties point1_on_curve = cls.is_on_curve_g1(point1.x, point1.y) point2_on_curve = cls.is_on_curve_g1(point2.x, point2.y) point1_in_subgroup = cls.check_in_g1_subgroup(point1) point2_in_subgroup = cls.check_in_g1_subgroup(point2) # Return required point if found based on properties if on_curve == point1_on_curve and in_subgroup == point1_in_subgroup: return point1 if on_curve == point2_on_curve and in_subgroup == point2_in_subgroup: return point2 except Exception: continue raise ValueError( ( f"Failed to find G1 point by x={x_value},", "in_subgroup={in_subgroup},", "on_curve={on_curve}", ) ) @classmethod @memory.cache def find_g2_point_by_x( cls, x_value: tuple, in_subgroup: bool, on_curve: bool = True ) -> PointG2: """ Find a G2 point with x-coordinate at or near the given value, with the specified subgroup membership and curve membership. """ max_offset = 5000 isomorphic_b = cls.ISOMORPHIC_B_G2 for offset in range(max_offset + 1): for direction in [1, -1]: if offset == 0 and direction == -1: continue try_x0 = (x_value[0] + direction * offset) % Spec.P try_x = (try_x0, x_value[1]) # Keep x1 the same try: x = FQ2(try_x) # Calculate y² = x³ + b (standard curve or isomorphic # curve) b_value = cls.STANDARD_B_G2 if on_curve else isomorphic_b y_squared = x**3 + FQ2(b_value) # Try to find y such that y² = x³ + b y = cls.sqrt_fq2(y_squared) if y is None: continue # No valid y exists for this x # Create the initial points on either curve raw_point = ( (int(x.coeffs[0]), int(x.coeffs[1])), (int(y.coeffs[0]), int(y.coeffs[1])), ) raw_point2 = ( (int(x.coeffs[0]), int(x.coeffs[1])), (Spec.P - int(y.coeffs[0]), Spec.P - int(y.coeffs[1])), ) # For isomorphic curve points in subgroup, apply cofactor # multiplication if not on_curve and in_subgroup: try: subgroup_point = cls.multiply_by_cofactor(raw_point, is_g2=True) point1 = PointG2(subgroup_point[0], subgroup_point[1]) except ValueError: continue # Skip if fails else: point1 = PointG2( (int(x.coeffs[0]), int(x.coeffs[1])), (int(y.coeffs[0]), int(y.coeffs[1])), ) if not on_curve and in_subgroup: try: subgroup_point2 = cls.multiply_by_cofactor(raw_point2, is_g2=True) point2 = PointG2(subgroup_point2[0], subgroup_point2[1]) except ValueError: continue # Skip if fails else: point2 = PointG2( (int(x.coeffs[0]), int(x.coeffs[1])), (Spec.P - int(y.coeffs[0]), Spec.P - int(y.coeffs[1])), ) # Verify points have the required properties point1_on_curve = cls.is_on_curve_g2(point1.x, point1.y) point2_on_curve = cls.is_on_curve_g2(point2.x, point2.y) point1_in_subgroup = cls.check_in_g2_subgroup(point1) point2_in_subgroup = cls.check_in_g2_subgroup(point2) # Return required point if found based on properties if on_curve == point1_on_curve and in_subgroup == point1_in_subgroup: return point1 if on_curve == point2_on_curve and in_subgroup == point2_in_subgroup: return point2 except Exception: continue raise ValueError( ( f"Failed to find G2 point by x={x_value},", "in_subgroup={in_subgroup},", "on_curve={on_curve}", ) ) # G1 points by x coordinate (near or on the x value) @classmethod def generate_g1_point_in_subgroup_by_x(cls, x_value: int) -> PointG1: """ G1 point that is in the r-order subgroup with x-coordinate by/on the given value. """ return cls.find_g1_point_by_x(x_value, in_subgroup=True, on_curve=True) @classmethod def generate_g1_point_not_in_subgroup_by_x(cls, x_value: int) -> PointG1: """ G1 point that is NOT in the r-order subgroup with x-coordinate by/on the given value. """ return cls.find_g1_point_by_x(x_value, in_subgroup=False, on_curve=True) @classmethod def generate_g1_point_not_on_curve_by_x(cls, x_value: int) -> PointG1: """ G1 point that is NOT on the curve with x-coordinate by/on the given value. """ return cls.find_g1_point_by_x(x_value, in_subgroup=False, on_curve=False) @classmethod def generate_g1_point_on_isomorphic_curve_by_x(cls, x_value: int) -> PointG1: """ G1 point that is on an isomorphic curve (not standard curve) but in the r-order subgroup with x-coordinate by/on the given value. Uses cofactor multiplication to ensure the point is in the correct subgroup. """ return cls.find_g1_point_by_x(x_value, in_subgroup=True, on_curve=False) # G1 random points required to be generated with a seed @classmethod def generate_random_g1_point_in_subgroup(cls, seed: int) -> PointG1: """Generate a random G1 point that is in the r-order subgroup.""" seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"in_subgroup").digest() x_value = int.from_bytes(hash_output, "big") % Spec.P return cls.generate_g1_point_in_subgroup_by_x(x_value) @classmethod def generate_random_g1_point_not_in_subgroup(cls, seed: int) -> PointG1: """Generate a random G1 point that is NOT in the r-order subgroup.""" seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"not_in_subgroup").digest() x_value = int.from_bytes(hash_output, "big") % Spec.P return cls.generate_g1_point_not_in_subgroup_by_x(x_value) @classmethod def generate_random_g1_point_not_on_curve(cls, seed: int) -> PointG1: """Generate a random G1 point that is NOT on the curve.""" seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"not_on_curve").digest() x_value = int.from_bytes(hash_output, "big") % Spec.P return cls.generate_g1_point_not_on_curve_by_x(x_value) @classmethod def generate_random_g1_point_on_isomorphic_curve(cls, seed: int) -> PointG1: """ Generate a random G1 point that is on an isomorphic curve (not standard curve) but in the r-order subgroup. Uses cofactor multiplication to ensure the point is in the correct subgroup. """ seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"on_isomorphic_curve").digest() x_value = int.from_bytes(hash_output, "big") % Spec.P return cls.generate_g1_point_on_isomorphic_curve_by_x(x_value) # G2 point generators - by x coordinate (near or on the x value) @classmethod def generate_g2_point_in_subgroup_by_x(cls, x_value: tuple) -> PointG2: """ G2 point that is in the r-order subgroup with x-coordinate by/on the given value. """ return cls.find_g2_point_by_x(x_value, in_subgroup=True, on_curve=True) @classmethod def generate_g2_point_not_in_subgroup_by_x(cls, x_value: tuple) -> PointG2: """ G2 point that is NOT in the r-order subgroup with x-coordinate by/on the given value. """ return cls.find_g2_point_by_x(x_value, in_subgroup=False, on_curve=True) @classmethod def generate_g2_point_not_on_curve_by_x(cls, x_value: tuple) -> PointG2: """ G2 point that is NOT on the curve with x-coordinate by/on the given value. """ return cls.find_g2_point_by_x(x_value, in_subgroup=False, on_curve=False) @classmethod def generate_g2_point_on_isomorphic_curve_by_x(cls, x_value: tuple) -> PointG2: """ G2 point that is on an isomorphic curve (not standard curve) but in the r-order subgroup with x-coordinate near the given value. Uses cofactor multiplication to ensure the point is in the correct subgroup. """ return cls.find_g2_point_by_x(x_value, in_subgroup=True, on_curve=False) # G2 random points required to be generated with a seed @classmethod def generate_random_g2_point_in_subgroup(cls, seed: int) -> PointG2: """Generate a random G2 point that is in the r-order subgroup.""" seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"g2_in_subgroup").digest() hash_len = len(hash_output) half_len = hash_len // 2 x0 = int.from_bytes(hash_output[:half_len], "big") % Spec.P x1 = int.from_bytes(hash_output[half_len:], "big") % Spec.P return cls.generate_g2_point_in_subgroup_by_x((x0, x1)) @classmethod def generate_random_g2_point_not_in_subgroup(cls, seed: int) -> PointG2: """Generate a random G2 point that is NOT in the r-order subgroup.""" seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"g2_not_in_subgroup").digest() hash_len = len(hash_output) half_len = hash_len // 2 x0 = int.from_bytes(hash_output[:half_len], "big") % Spec.P x1 = int.from_bytes(hash_output[half_len:], "big") % Spec.P return cls.generate_g2_point_not_in_subgroup_by_x((x0, x1)) @classmethod def generate_random_g2_point_not_on_curve(cls, seed: int) -> PointG2: """Generate a random G2 point that is NOT on the curve.""" seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"g2_not_on_curve").digest() hash_len = len(hash_output) half_len = hash_len // 2 x0 = int.from_bytes(hash_output[:half_len], "big") % Spec.P x1 = int.from_bytes(hash_output[half_len:], "big") % Spec.P return cls.generate_g2_point_not_on_curve_by_x((x0, x1)) @classmethod def generate_random_g2_point_on_isomorphic_curve(cls, seed: int) -> PointG2: """ Generate a random G2 point that is on an isomorphic curve (not standard curve) but in the r-order subgroup. Uses cofactor multiplication to ensure the point is in the correct subgroup. """ seed_bytes = seed.to_bytes(32, "big") hash_output = hashlib.sha384(seed_bytes + b"g2_on_isomorphic_curve").digest() hash_len = len(hash_output) half_len = hash_len // 2 x0 = int.from_bytes(hash_output[:half_len], "big") % Spec.P x1 = int.from_bytes(hash_output[half_len:], "big") % Spec.P return cls.generate_g2_point_on_isomorphic_curve_by_x((x0, x1)) # G1 map to curve 11-isogeny kernel point generator @classmethod def generate_g1_map_isogeny_kernel_points(cls) -> List[FP]: """ Return precomputed kernel points for the BLS12-381 G1 map to curve function. These map to the G1 identity point `Spec.INF_G1`. They are generated using sage math externally with the following script as its significantly faster than using `py_ecc` (200-1000x faster). For reference we can imagine the map to curve function as a simple 2 step process, where an input t value is mapped to a point on the auxiliary curve via a SWU map, and then that point is mapped to the BLS curve via an 11-isogeny. For reference: https://eips.ethereum.org/assets/eip-2537/field_to_curve Note we cannot use sage math directly within EEST as it is not a pure python library and requires an external dependency to be installed on the system machine. Thanks to @petertdavies (Peter Miller) for the sage math script to generate these points: ```sage q = 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F3 8512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB Fq = GF(q) E1 = EllipticCurve(Fq, (0, 4)) # BLS12-381 curve ISO_11_A = Fq(0x144698A3B8E9433D693A02C96D4982B0EA985383EE66A8D8E 8981AEFD881AC98936F8DA0E0F97F5CF428082D584C1D) ISO_11_B = Fq(0x12E2908D11688030018B12E8753EEE3B2016C1F0F24F4070A0B 9C14FCEF35EF55A23215A316CEAA5D1CC48E98E172BE0) ISO_11_Z = Fq(11) Ei = EllipticCurve(Fq, (ISO_11_A, ISO_11_B)) iso = EllipticCurveIsogeny( E=E1, kernel=None, codomain=Ei, degree=11).dual() for (x, _) in iso.kernel_polynomial().roots(): discriminant = 1 - 4 / (ISO_11_A / ISO_11_B * x + 1) if not discriminant.is_square(): continue for sign in [1, -1]: zt2 = (-1 + sign * discriminant.sqrt()) / 2 t2 = zt2 / ISO_11_Z if t2.is_square(): t = t2.sqrt() assert x == -ISO_11_B / ISO_11_A * (1 + 1 / (ISO_11_Z**2 * t**4 + ISO_11_Z * t**2)) print(t) ``` To reproduce, add the script contents to a file called `points.sage`, then run `sage points.sage`! Please see the sage math installation guide to replicate: - https://doc.sagemath.org/html/en/installation/index.html As G1 uses an 11-degree isogeny, its kernel contains exactly 11 points on the auxiliary curve that maps to the point at infinity on the BLS curve. This includes the point at infinity (doesn't concern us as the initial SWU map can never output infinity from any int t) and 10 other unique kernel points. These 10 other kernel points correspond to 5 x-coords on the curve (since each x-coord yields two points with y and -y). However, not all of these kernel points can be reached by the SWU map, which is why we only have 4 unique t values below. The kernel polynomial has 5 roots (x-coords), and each root can potentially yield two t values that map to kernel points via the SWU function. Analysis shows that only 2 of these roots yield valid t values because the other 3 roots fail either the discriminant square check or the t^2 square check in the SWU inverse calculation. From these 2 valid roots, we get the 4 unique t values listed below. The roots and their properties are as follows: - Root 1 (x=3447232547282837364692125741875673748077489238391001187748258 124039623697289612052402753422028380156396811587142615): Fails because its discriminant is not a square. - Root 2 (x=3086251397349454634226049654186198282625136597600255705376316 455943570106637401671127489553534256598630507009270951): Fails because its discriminant is not a square. - Root 3 (x=2512099095366387796245759085729510986367032014959769672734622 752070562589059815523018960565849753051338812932816014): Has a square discriminant, but both sign options yield t^2 values that are not squares. - Root 4 (x=2077344747421819657086473418925078480898358265217674456436079 722467637536216749299440611432676849905020722484031356): Yields two valid t values: - 173108157456581746932131744927527835530698278615407257619875 8675751495027640363897075486577327802192163339186341827 and - 861410691052762088300790587394810074303505896628048305535645 284922135116676755956131724844456716837983264353875219 - Root 5 (x=1629023065307570116876483814580399609058797608540074345321518 03806422383239905014872915974221245198317567396330740): Yields two valid t values: - 100604475543156059528179355793117172998496451568296191191139 8807521437683216171091013202870577238485832047490326971 - 15620013383368772677174003254551890147802280979855962 77514975439801739125527323838522116502949589758528550231396418 Additionally we also have the additive inverses of these t values, which are also valid kernel (non-unique) points. These are generated using the relationship: `(-t) mod p === (p - t) mod p` """ unique_kernel_ts = [ 1731081574565817469321317449275278355306982786154072576198758675751495027640363897075486577327802192163339186341827, 861410691052762088300790587394810074303505896628048305535645284922135116676755956131724844456716837983264353875219, 1006044755431560595281793557931171729984964515682961911911398807521437683216171091013202870577238485832047490326971, 1562001338336877267717400325455189014780228097985596277514975439801739125527323838522116502949589758528550231396418, ] additive_inverses = [(Spec.P - t) % Spec.P for t in unique_kernel_ts] return [FP(t) for t in (unique_kernel_ts + additive_inverses)] # G2 map to curve 3-isogeny kernel point generator @classmethod def generate_g2_map_isogeny_kernel_points(cls) -> List[FP2]: """ Return precomputed kernel points for the BLS12-381 G2 map to curve function. These map to the G2 identity point `Spec.INF_G2`. They are generated using sage math externally with the following script as its significantly faster than using `py_ecc` (200-1000x faster). For reference we can imagine the map to curve function as a simple 2 step process, where an input t value is mapped to a point on the auxiliary curve via a SWU map, and then that point is mapped to the BLS curve via a 3-isogeny. For reference: - https://eips.ethereum.org/assets/eip-2537/field_to_curve Note we cannot use sage math directly within EEST as it is not a pure python library and requires an external dependency to be installed on the system machine. ```sage q = 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB Fp = GF(q) R. = PolynomialRing(Fp) Fp2. = Fp.extension(x^2 + 1) E2 = EllipticCurve(Fp2, [0, 4*(1+u)]) ISO_3_A = 240 * u ISO_3_B = 1012 * (1 + u) ISO_3_Z = -(2 + u) Ei = EllipticCurve(Fp2, [ISO_3_A, ISO_3_B]) iso = EllipticCurveIsogeny(E=E2, kernel=None, codomain=Ei, degree=3).dual() x_den_k0 = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63 * u x_den_k1 = 0xc + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f * u for (x, _) in iso.kernel_polynomial().roots(): y_squared = x^3 + ISO_3_A * x + ISO_3_B is_on_curve = y_squared.is_square() print("Root is on curve:" if is_on_curve else "Warning: Root is not on the curve") inv_factor = (x * ISO_3_A / -ISO_3_B) - 1 if inv_factor == 0: continue discriminant = 1 + 4 / inv_factor if not discriminant.is_square(): continue for sign in [1, -1]: zt2 = (-1 + sign * discriminant.sqrt()) / 2 t2 = zt2 / ISO_3_Z if t2.is_square(): t = t2.sqrt() # Perform the proper SWU mapping tv1_num = ISO_3_Z^2 * t^4 + ISO_3_Z * t^2 tv1 = 1 / tv1_num x1 = (-ISO_3_B / ISO_3_A) * (1 + tv1) gx1 = x1^3 + ISO_3_A * x1 + ISO_3_B x2 = ISO_3_Z * t^2 * x1 swu_x = x1 if gx1.is_square() else x2 x_den_value = swu_x^2 + x_den_k1 * swu_x + x_den_k0 is_kernel_point = (x_den_value == 0) print("Is a kernel point:", is_kernel_point) print(t) ``` Add the script contents to a file called `points.sage`, run `sage points.sage`! Please see the sage math installation guide to replicate: - https://doc.sagemath.org/html/en/installation/index.html As G2 uses an 3-degree isogeny, its kernel contains exactly 3 points on the auxiliary curve that maps to the point at infinity on the BLS curve. This includes the point at infinity (doesn't concern us as the initial SWU map can never output infinity from any int t) and 2 other kernel points. These 2 other kernel points correspond to 1 x-coord on the curve (since each x-coord yields two points with y and -y). Note that this root yields two equal t values due to specific properties of the isogeny in Fp2. However, the G2 case is different from G1 and requires additional verification for y, we must check that the computed y^2 actually has a square root in Fp2. Unlike G1, the G2 singular isogeny kernel polynomial root does not correspond to a valid point on the auxiliary curve due to the failure of the additional check. - Root 1 (x=6*u + 4002409555221667393417789825735904156556882819939007885332058136124031650490837 864442687629129015664037894272559781): Fails because its y^2 is not a square in Fp2. Due to the failure of the first root, we have no valid kernel points in G2 that map to the point at infinity on the BLS curve. This is why we return an empty list here. It is kept for consistency with the G1 case, and documentation purposes. """ # noqa: E501, W505 return [] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/spec.py ================================================ """Defines EIP-2537 specification constants and functions.""" from dataclasses import dataclass from enum import Enum, auto from typing import Callable, Sized, SupportsBytes, Tuple @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_2537 = ReferenceSpec("EIPS/eip-2537.md", "c561ec1426fe5ec470eade499a0bd4174f270583") class BytesConcatenation(SupportsBytes, Sized): """A class that can be concatenated with bytes.""" def __len__(self) -> int: """Return length of the object when converted to bytes.""" return len(bytes(self)) def __add__(self, other: bytes | SupportsBytes) -> bytes: """Concatenates the object with another bytes object.""" return bytes(self) + bytes(other) def __radd__(self, other: bytes | SupportsBytes) -> bytes: """Concatenates the object with another bytes object.""" return bytes(other) + bytes(self) @dataclass(frozen=True) class FP(BytesConcatenation): """Dataclass that defines a single element of Fp.""" x: int = 0 def __bytes__(self) -> bytes: """Convert field element to bytes.""" return self.x.to_bytes(64, byteorder="big") @dataclass(frozen=True) class PointG1(BytesConcatenation): """Dataclass that defines a single point in G1.""" x: int = 0 y: int = 0 def __bytes__(self) -> bytes: """Convert point to bytes.""" return self.x.to_bytes(64, byteorder="big") + self.y.to_bytes(64, byteorder="big") def __neg__(self) -> "PointG1": """Negates the point.""" return PointG1(self.x, Spec.P - self.y) @dataclass(frozen=True) class FP2(BytesConcatenation): """Dataclass that defines a single element of Fp2.""" x: Tuple[int, int] = (0, 0) def __bytes__(self) -> bytes: """Convert field element to bytes.""" return self.x[0].to_bytes(64, byteorder="big") + self.x[1].to_bytes(64, byteorder="big") @dataclass(frozen=True) class PointG2(BytesConcatenation): """Dataclass that defines a single point in G2.""" x: Tuple[int, int] = (0, 0) y: Tuple[int, int] = (0, 0) def __bytes__(self) -> bytes: """Convert point to bytes.""" return ( self.x[0].to_bytes(64, byteorder="big") + self.x[1].to_bytes(64, byteorder="big") + self.y[0].to_bytes(64, byteorder="big") + self.y[1].to_bytes(64, byteorder="big") ) def __neg__(self) -> "PointG2": """Negates the point.""" return PointG2(self.x, (Spec.P - self.y[0], Spec.P - self.y[1])) @dataclass(frozen=True) class Scalar(BytesConcatenation): """Dataclass that defines a single scalar.""" x: int = 0 def __bytes__(self) -> bytes: """Convert scalar to bytes.""" return self.x.to_bytes(32, byteorder="big") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-2537 specifications as defined at https://eips.ethereum.org/EIPS/eip-2537. """ # Addresses G1ADD = 0x0B G1MSM = 0x0C G2ADD = 0x0D G2MSM = 0x0E PAIRING = 0x0F MAP_FP_TO_G1 = 0x10 MAP_FP2_TO_G2 = 0x11 # Gas constants G1ADD_GAS = 375 G1MUL_GAS = 12_000 G2ADD_GAS = 600 G2MUL_GAS = 22_500 MAP_FP_TO_G1_GAS = 5_500 MAP_FP2_TO_G2_GAS = 23_800 PAIRING_BASE_GAS = 37_700 PAIRING_PER_PAIR_GAS = 32_600 # Other constants B_COEFFICIENT = 0x04 X = -0xD201000000010000 Q = X**4 - X**2 + 1 P = (X - 1) ** 2 * Q // 3 + X LEN_PER_PAIR = len(PointG1() + PointG2()) MSM_MULTIPLIER = 1_000 MAX_FP_BIT_SET = 1 << (48 * 8) # fmt: off G1MSM_DISCOUNT_TABLE = [ 0, 1000, 949, 848, 797, 764, 750, 738, 728, 719, 712, 705, 698, 692, 687, 682, 677, 673, 669, 665, 661, 658, 654, 651, 648, 645, 642, 640, 637, 635, 632, 630, 627, 625, 623, 621, 619, 617, 615, 613, 611, 609, 608, 606, 604, 603, 601, 599, 598, 596, 595, 593, 592, 591, 589, 588, 586, 585, 584, 582, 581, 580, 579, 577, 576, 575, 574, 573, 572, 570, 569, 568, 567, 566, 565, 564, 563, 562, 561, 560, 559, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, 547, 546, 545, 544, 543, 542, 541, 540, 540, 539, 538, 537, 536, 536, 535, 534, 533, 532, 532, 531, 530, 529, 528, 528, 527, 526, 525, 525, 524, 523, 522, 522, 521, 520, 520, 519 ] G2MSM_DISCOUNT_TABLE = [ 0, 1000, 1000, 923, 884, 855, 832, 812, 796, 782, 770, 759, 749, 740, 732, 724, 717, 711, 704, 699, 693, 688, 683, 679, 674, 670, 666, 663, 659, 655, 652, 649, 646, 643, 640, 637, 634, 632, 629, 627, 624, 622, 620, 618, 615, 613, 611, 609, 607, 606, 604, 602, 600, 598, 597, 595, 593, 592, 590, 589, 587, 586, 584, 583, 582, 580, 579, 578, 576, 575, 574, 573, 571, 570, 569, 568, 567, 566, 565, 563, 562, 561, 560, 559, 558, 557, 556, 555, 554, 553, 552, 552, 551, 550, 549, 548, 547, 546, 545, 545, 544, 543, 542, 541, 541, 540, 539, 538, 537, 537, 536, 535, 535, 534, 533, 532, 532, 531, 530, 530, 529, 528, 528, 527, 526, 526, 525, 524, 524 ] # fmt: on # Test constants from # https://github.com/ethereum/bls12-381-tests/tree/eip-2537 P1 = PointG1( # random point in G1 0x112B98340EEE2777CC3C14163DEA3EC97977AC3DC5C70DA32E6E87578F44912E902CCEF9EFE28D4A78B8999DFBCA9426, 0x186B28D92356C4DFEC4B5201AD099DBDEDE3781F8998DDF929B4CD7756192185CA7B8F4EF7088F813270AC3D48868A21, ) G1 = PointG1( 0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB, 0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1, ) # point at infinity in G1 INF_G1 = PointG1(0, 0) # random point in G2 P2 = PointG2( ( 0x103121A2CEAAE586D240843A398967325F8EB5A93E8FEA99B62B9F88D8556C80DD726A4B30E84A36EEABAF3592937F27, 0x86B990F3DA2AEAC0A36143B7D7C824428215140DB1BB859338764CB58458F081D92664F9053B50B3FBD2E4723121B68, ), ( 0xF9E7BA9A86A8F7624AA2B42DCC8772E1AF4AE115685E60ABC2C9B90242167ACEF3D0BE4050BF935EED7C3B6FC7BA77E, 0xD22C3652D0DC6F0FC9316E14268477C2049EF772E852108D269D9C38DBA1D4802E8DAE479818184C08F9A569D878451, ), ) G2 = PointG2( ( 0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8, 0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E, ), ( 0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801, 0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE, ), ) # point at infinity in G2 INF_G2 = PointG2((0, 0), (0, 0)) # Other test constants # point not in subgroup in curve Fp P1_NOT_IN_SUBGROUP = PointG1(0, 2) P1_NOT_IN_SUBGROUP_TIMES_2 = PointG1(0, P - 2) # point not in subgroup in curve Fp2 P2_NOT_IN_SUBGROUP = PointG2( (1, 1), ( 0x17FAA6201231304F270B858DAD9462089F2A5B83388E4B10773ABC1EEF6D193B9FCE4E8EA2D9D28E3C3A315AA7DE14CA, 0xCC12449BE6AC4E7F367E7242250427C4FB4C39325D3164AD397C1837A90F0EA1A534757DF374DD6569345EB41ED76E, ), ) P2_NOT_IN_SUBGROUP_TIMES_2 = PointG2( ( 0x919F97860ECC3E933E3477FCAC0E2E4FCC35A6E886E935C97511685232456263DEF6665F143CCCCB44C733333331553, 0x18B4376B50398178FA8D78ED2654B0FFD2A487BE4DBE6B69086E61B283F4E9D58389CCCB8EDC99995718A66666661555, ), ( 0x26898F699C4B07A405AB4183A10B47F923D1C0FDA1018682DD2CCC88968C1B90D44534D6B9270CF57F8DC6D4891678A, 0x3270414330EAD5EC92219A03A24DFA059DBCBE610868BE1851CC13DAC447F60B40D41113FD007D3307B19ADD4B0F061, ), ) # Pairing precompile results PAIRING_TRUE = int.to_bytes(1, length=32, byteorder="big") PAIRING_FALSE = int.to_bytes(0, length=32, byteorder="big") # Returned on precompile failure INVALID = b"" class BLS12Group(Enum): """Helper enum to specify the BLS12 group in discount table helpers.""" G1 = auto() G2 = auto() def msm_discount(group: BLS12Group, k: int) -> int: """Return the discount for the G1MSM and G2MSM precompiles.""" assert k >= 1, "k must be greater than or equal to 1" match group: case BLS12Group.G1: return Spec.G1MSM_DISCOUNT_TABLE[min(k, 128)] case BLS12Group.G2: return Spec.G2MSM_DISCOUNT_TABLE[min(k, 128)] case _: raise ValueError(f"Unsupported group: {group}") def msm_gas_func_gen( group: BLS12Group, len_per_pair: int, multiplication_cost: int ) -> Callable[[int], int]: """ Generate a function that calculates the gas cost for the G1MSM and G2MSM precompiles. """ def msm_gas(input_length: int) -> int: """Calculate gas cost for the G1MSM and G2MSM precompiles.""" k = input_length // len_per_pair if k == 0: return 0 gas_cost = k * multiplication_cost * msm_discount(group, k) // Spec.MSM_MULTIPLIER return gas_cost return msm_gas def pairing_gas(input_length: int) -> int: """Calculate gas cost for the PAIRING precompile.""" k = input_length // Spec.LEN_PER_PAIR return (Spec.PAIRING_PER_PAIR_GAS * k) + Spec.PAIRING_BASE_GAS GAS_CALCULATION_FUNCTION_MAP = { Spec.G1ADD: lambda _: Spec.G1ADD_GAS, Spec.G1MSM: msm_gas_func_gen(BLS12Group.G1, len(PointG1() + Scalar()), Spec.G1MUL_GAS), Spec.G2ADD: lambda _: Spec.G2ADD_GAS, Spec.G2MSM: msm_gas_func_gen(BLS12Group.G2, len(PointG2() + Scalar()), Spec.G2MUL_GAS), Spec.PAIRING: pairing_gas, Spec.MAP_FP_TO_G1: lambda _: Spec.MAP_FP_TO_G1_GAS, Spec.MAP_FP2_TO_G2: lambda _: Spec.MAP_FP2_TO_G2_GAS, } ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py ================================================ """ Tests BLS12_G1ADD precompile. Tests the BLS12_G1ADD precompile implementation from [EIP-2537: Precompile for BLS12-381 curve operations] (https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G1_POINTS_NOT_IN_SUBGROUP, G1_POINTS_NOT_ON_CURVE from .helpers import add_points_g1, vectors_from_file from .spec import PointG1, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.G1ADD], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("add_G1_bls.json") + [ # Identity (infinity) element test cases. Checks that any point added # to the identity element (INF) equals itself. pytest.param( Spec.G1 + Spec.INF_G1, Spec.G1, None, id="generator_plus_inf", ), pytest.param( Spec.INF_G1 + Spec.G1, Spec.G1, None, id="inf_plus_generator", ), pytest.param( Spec.INF_G1 + Spec.INF_G1, Spec.INF_G1, None, id="inf_plus_inf", ), pytest.param( Spec.INF_G1 + Spec.P1, Spec.P1, None, id="inf_plus_point", ), # Basic arithmetic properties test cases. # Checks fundamental properties of the BLS12-381 curve. pytest.param( Spec.P1 + (-Spec.P1), Spec.INF_G1, None, id="point_plus_neg_point", ), pytest.param( Spec.G1 + (-Spec.G1), Spec.INF_G1, None, id="generator_plus_neg_point", ), pytest.param( Spec.P1 + Spec.G1, add_points_g1(Spec.G1, Spec.P1), None, id="commutative_check_a", ), pytest.param( Spec.G1 + Spec.P1, add_points_g1(Spec.P1, Spec.G1), None, id="commutative_check_b", ), pytest.param( Spec.P1 + Spec.P1, add_points_g1(Spec.P1, Spec.P1), None, id="point_doubling", ), pytest.param( # (P + G) + P = P + (G + P) add_points_g1(Spec.P1, Spec.G1) + Spec.P1, add_points_g1(Spec.P1, add_points_g1(Spec.G1, Spec.P1)), None, id="associativity_check", ), pytest.param( # -(P+G) = (-P)+(-G) (-(add_points_g1(Spec.P1, Spec.G1))) + Spec.INF_G1, add_points_g1((-Spec.P1), (-Spec.G1)), None, id="negation_of_sum", ), pytest.param( add_points_g1(Spec.G1, Spec.G1) + add_points_g1(Spec.P1, Spec.P1), add_points_g1(add_points_g1(Spec.G1, Spec.G1), add_points_g1(Spec.P1, Spec.P1)), None, id="double_generator_plus_double_point", ), pytest.param( add_points_g1(Spec.G1, Spec.G1) + add_points_g1(Spec.G1, Spec.G1), add_points_g1(add_points_g1(Spec.G1, Spec.G1), add_points_g1(Spec.G1, Spec.G1)), None, id="double_generator_plus_double_generator", ), pytest.param( # (x,y) + (x,-y) = INF PointG1(Spec.P1.x, Spec.P1.y) + PointG1(Spec.P1.x, Spec.P - Spec.P1.y), Spec.INF_G1, None, id="point_plus_reflected_point", ), # Not in the r-order subgroup test cases. Checks that any point on the # curve but not in the subgroup is used for operations. pytest.param( Spec.P1_NOT_IN_SUBGROUP + Spec.P1_NOT_IN_SUBGROUP, Spec.P1_NOT_IN_SUBGROUP_TIMES_2, None, id="non_sub_plus_non_sub", ), pytest.param( # `P1_NOT_IN_SUBGROUP` has an small order subgroup of 3: # 3P = INF. Spec.P1_NOT_IN_SUBGROUP + Spec.P1_NOT_IN_SUBGROUP_TIMES_2, Spec.INF_G1, None, id="non_sub_order_3_to_inf", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Spec.INF_G1, Spec.P1_NOT_IN_SUBGROUP, None, id="non_sub_plus_inf", ), pytest.param( Spec.G1 + Spec.P1_NOT_IN_SUBGROUP, add_points_g1(Spec.G1, Spec.P1_NOT_IN_SUBGROUP), None, id="generator_plus_non_sub", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + (-Spec.P1_NOT_IN_SUBGROUP), Spec.INF_G1, None, id="non_sub_plus_neg_non_sub", ), pytest.param( Spec.P1 + Spec.P1_NOT_IN_SUBGROUP, add_points_g1(Spec.P1, Spec.P1_NOT_IN_SUBGROUP), None, id="in_sub_plus_non_sub", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Spec.P1, add_points_g1(Spec.P1_NOT_IN_SUBGROUP_TIMES_2, Spec.P1), None, id="doubled_non_sub_plus_in_sub", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + (-Spec.P1_NOT_IN_SUBGROUP), Spec.P1_NOT_IN_SUBGROUP, None, id="doubled_non_sub_plus_neg", ), # More not in the r-order subgroup test cases, but using random # generated points. pytest.param( G1_POINTS_NOT_IN_SUBGROUP[0] + Spec.P1, add_points_g1(G1_POINTS_NOT_IN_SUBGROUP[0], Spec.P1), None, id="rand_not_in_subgroup_0_plus_point", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[1] + Spec.G1, add_points_g1(G1_POINTS_NOT_IN_SUBGROUP[1], Spec.G1), None, id="rand_not_in_subgroup_1_plus_generator", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[2] + Spec.INF_G1, G1_POINTS_NOT_IN_SUBGROUP[2], None, id="rand_not_in_subgroup_2_plus_inf", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[3] + (-G1_POINTS_NOT_IN_SUBGROUP[3]), Spec.INF_G1, None, id="rand_not_in_subgroup_3_plus_neg_self", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[4] + G1_POINTS_NOT_IN_SUBGROUP[0], add_points_g1(G1_POINTS_NOT_IN_SUBGROUP[4], G1_POINTS_NOT_IN_SUBGROUP[0]), None, id="rand_not_in_subgroup_4_plus_0", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1ADD precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-add_G1_bls.json") + [ pytest.param( PointG1(0, 1) + Spec.INF_G1, id="invalid_point_a_1", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y - 1) + Spec.INF_G1, id="invalid_point_a_2", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y + 1) + Spec.INF_G1, id="invalid_point_a_3", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.x) + Spec.INF_G1, id="invalid_point_a_4", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y - 1) + Spec.P1, id="invalid_point_a_5", ), pytest.param( Spec.INF_G1 + PointG1(0, 1), id="invalid_point_b_1", ), pytest.param( Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.y - 1), id="invalid_point_b_2", ), pytest.param( Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.y + 1), id="invalid_point_b_3", ), pytest.param( Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x), id="invalid_point_b_4", ), pytest.param( Spec.P1 + PointG1(Spec.P1.x, Spec.P1.y - 1), id="invalid_point_b_5", ), pytest.param( PointG1(Spec.P, 0) + Spec.INF_G1, id="a_x_equal_to_p", ), pytest.param( Spec.INF_G1 + PointG1(Spec.P, 0), id="b_x_equal_to_p", ), pytest.param( PointG1(0, Spec.P) + Spec.INF_G1, id="a_y_equal_to_p", ), pytest.param( Spec.INF_G1 + PointG1(0, Spec.P), id="b_y_equal_to_p", ), pytest.param( PointG1(Spec.P1.x + Spec.P, Spec.P1.y) + Spec.G1, id="a_x_above_p", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y + Spec.P) + Spec.G1, id="a_y_above_p", ), pytest.param( Spec.P1 + PointG1(Spec.G1.x + Spec.P, Spec.G1.y), id="b_x_above_p", ), pytest.param( Spec.P1 + PointG1(Spec.G1.x, Spec.G1.y + Spec.P), id="b_y_above_p", ), pytest.param( b"\x80" + bytes(Spec.INF_G1)[1:] + Spec.INF_G1, id="invalid_encoding_a", ), pytest.param( Spec.INF_G1 + b"\x80" + bytes(Spec.INF_G1)[1:], id="invalid_encoding_b", ), pytest.param( (Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x))[:-1], id="input_too_short", ), pytest.param( b"\x00" + (Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x)), id="input_too_long", ), pytest.param( b"", id="zero_length_input", ), pytest.param( Spec.G1, id="only_one_point", ), pytest.param( Spec.G2 + Spec.G2, id="g2_points", ), pytest.param( PointG1(Spec.P + 1, 0) + Spec.INF_G1, id="x_above_modulus", ), pytest.param( # Point on curve y^2 = x^3 + 5. PointG1(0x01, 0x07) + Spec.INF_G1, id="point_on_wrong_curve_b=5", ), pytest.param( PointG1(Spec.P1.y, Spec.P1.x) + Spec.INF_G1, id="swapped_coordinates", ), pytest.param( b"\x00" * 96, id="all_zero_96_bytes", ), pytest.param( b"\xff" + b"\x00" * 47 + b"\xff" + b"\x00" * 47, id="bad_inf_flag", ), pytest.param( b"\xc0" + b"\x00" * 47 + b"\xc0" + b"\x00" * 47, id="comp_instead_of_uncomp", ), pytest.param( PointG1(Spec.P1.x | Spec.MAX_FP_BIT_SET, Spec.P1.y) + Spec.P1, id="non_zero_byte_16_boundary_violation_x", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y | Spec.MAX_FP_BIT_SET) + Spec.P1, id="non_zero_byte_16_boundary_violation_y", ), # Not on the curve cases using random generated points. pytest.param( G1_POINTS_NOT_ON_CURVE[0] + Spec.INF_G1, id="rand_not_on_curve_0_plus_inf", ), pytest.param( G1_POINTS_NOT_ON_CURVE[1] + Spec.P1, id="rand_not_on_curve_1_plus_point", ), pytest.param( G1_POINTS_NOT_ON_CURVE[2] + G1_POINTS_NOT_IN_SUBGROUP[0], id="rand_not_on_curve_2_plus_not_in_subgroup_0", ), pytest.param( G1_POINTS_NOT_ON_CURVE[3] + G1_POINTS_NOT_ON_CURVE[4], id="rand_not_on_curve_3_plus_4", ), pytest.param( Spec.INF_G1 + G1_POINTS_NOT_ON_CURVE[0], id="inf_plus_rand_not_on_curve_0", ), pytest.param( Spec.P1 + G1_POINTS_NOT_ON_CURVE[1], id="point_plus_rand_not_on_curve_1", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[2] + G1_POINTS_NOT_ON_CURVE[2], id="rand_not_in_subgroup_2_plus_rand_not_on_curve_2", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.slow() def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_G1ADD precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( Spec.INF_G1 + Spec.INF_G1, Spec.INF_G1, 1, id="extra_gas", ), pytest.param( Spec.INF_G1 + Spec.INF_G1, Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1ADD precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G1 + Spec.INF_G1, Spec.INF_G1, id="inf_plus_inf", ), pytest.param( Spec.INF_G1 + Spec.G1, Spec.G1, id="inf_plus_generator", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1ADD precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py ================================================ """ Test the BLS12_G1MSM precompile. Test the BLS12_G1MSM precompile introduced in [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G1_POINTS_NOT_IN_SUBGROUP, G1_POINTS_NOT_ON_CURVE from .helpers import PointG1, vectors_from_file from .spec import Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.G1MSM], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("msm_G1_bls.json") + [ # Multiple pair scalar multiplication cases. pytest.param( Spec.G1 + Scalar(1) + Spec.INF_G1 + Scalar(1), Spec.G1, None, id="g1_plus_inf", ), pytest.param( Spec.G1 + Scalar(0) + Spec.P1 + Scalar(0) + Spec.INF_G1 + Scalar(0), Spec.INF_G1, None, id="all_zero_scalars", ), pytest.param( Spec.G1 + Scalar(1) + (-Spec.G1) + Scalar(1), Spec.INF_G1, None, id="sum_to_identity_opposite", ), pytest.param( Spec.G1 + Scalar(Spec.Q - 1) + Spec.G1 + Scalar(1), Spec.INF_G1, None, id="scalars_sum_to_q", ), pytest.param( Spec.G1 + Scalar(1) + Spec.G1 + Scalar(0) + Spec.INF_G1 + Scalar(5), Spec.G1, None, id="combined_basic_cases", ), pytest.param( Spec.G1 + Scalar(1) + Spec.INF_G1 + Scalar(500), Spec.G1, None, id="identity_with_large_scalar", ), pytest.param( Spec.G1 + Scalar(0) + Spec.P1 + Scalar(0) + (-Spec.G1) + Scalar(0), Spec.INF_G1, None, id="multiple_points_zero_scalar", ), # Cases with maximum discount table (test vector for gas cost # calculation) pytest.param( (Spec.P1 + Scalar(Spec.Q)) * (len(Spec.G1MSM_DISCOUNT_TABLE) - 1), Spec.INF_G1, None, id="max_discount", ), pytest.param( (Spec.P1 + Scalar(Spec.Q)) * len(Spec.G1MSM_DISCOUNT_TABLE), Spec.INF_G1, None, id="max_discount_plus_1", ), ], ) @pytest.mark.slow() def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test valid calls to the BLS12_G1MSM precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-msm_G1_bls.json") + [ pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q), id="not_in_subgroup_1_pos_0", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q), id="not_in_subgroup_2_pos_0", ), pytest.param( Spec.G1 + Scalar(1) + Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q), id="not_in_subgroup_1_pos_1", ), pytest.param( Spec.G1 + Scalar(1) + Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q), id="not_in_subgroup_2_pos_1", ), pytest.param( Spec.G1, id="bls_g1_truncated_input", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[0] + Scalar(0), id="rand_not_in_subgroup_0_pos_0", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[1] + Scalar(1), id="rand_not_in_subgroup_1_pos_0", ), pytest.param( Spec.G1 + Scalar(1) + G1_POINTS_NOT_IN_SUBGROUP[0] + Scalar(0), id="rand_not_in_subgroup_0_pos_1", ), pytest.param( Spec.G1 + Scalar(1) + G1_POINTS_NOT_IN_SUBGROUP[1] + Scalar(1), id="rand_not_in_subgroup_1_pos_1", ), pytest.param( G1_POINTS_NOT_ON_CURVE[0] + Scalar(0), id="not_on_curve_0_pos_0", ), pytest.param( G1_POINTS_NOT_ON_CURVE[1] + Scalar(1), id="not_on_curve_1_pos_0", ), pytest.param( Spec.G1 + Scalar(1) + G1_POINTS_NOT_ON_CURVE[0] + Scalar(0), id="not_on_curve_0_pos_1", ), pytest.param( Spec.G1 + Scalar(1) + G1_POINTS_NOT_ON_CURVE[1] + Scalar(1), id="not_on_curve_1_pos_1", ), pytest.param( Spec.G1 + Scalar(1) + Spec.G1, id="incomplete_input_missing_scalar", ), pytest.param( Spec.G1 + Scalar(1) + bytes([0]), id="incomplete_input_extra_byte", ), pytest.param( Spec.G1 + Scalar(1) + Spec.G2 + Scalar(1), id="mixing_g1_with_g2", ), pytest.param( Spec.G1 + (b"\x01" + b"\x00" * 32), # Scalar > UINT256_MAX id="scalar_too_large", ), pytest.param( # Invalid scalar length Spec.G1 + Scalar(1).x.to_bytes(16, byteorder="big"), id="scalar_too_short", ), pytest.param( bytes([0]) * 159, # Just under minimum valid length id="input_too_short_by_1", ), # Coordinates above modulus p cases. pytest.param( PointG1(Spec.P1.x + Spec.P, Spec.P1.y) + Scalar(1), id="x_above_p_pos_0", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y + Spec.P) + Scalar(1), id="y_above_p_pos_0", ), pytest.param( Spec.G1 + Scalar(1) + PointG1(Spec.P1.x + Spec.P, Spec.P1.y) + Scalar(0), id="x_above_p_pos_1", ), pytest.param( Spec.G1 + Scalar(1) + PointG1(Spec.P1.x, Spec.P1.y + Spec.P) + Scalar(0), id="y_above_p_pos_1", ), ], # Input length tests can be found in # ./test_bls12_variable_length_input_contracts.py ) @pytest.mark.parametrize( "precompile_gas_modifier", [100_000], ids=[""] ) # Add gas so that won't be the cause of failure @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test invalid calls to the BLS12_G1MSM precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G1 + Scalar(0), Spec.INF_G1, id="single_inf_times_zero", ), pytest.param( (Spec.P1 + Scalar(Spec.Q)) * (len(Spec.G1MSM_DISCOUNT_TABLE) - 1), Spec.INF_G1, id="max_discount", ), ], ) @pytest.mark.slow() def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1MSM precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py ================================================ """ Tests BLS12_G1MUL precompile. Tests the BLS12_G1MUL precompile implementation from [EIP-2537: Precompile for BLS12-381 curve operations] (https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G1_POINTS_NOT_IN_SUBGROUP, G1_POINTS_NOT_ON_CURVE from .helpers import vectors_from_file from .spec import PointG1, Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.G1MSM], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("mul_G1_bls.json") + [ # Basic multiplication test cases. pytest.param( Spec.INF_G1 + Scalar(0), Spec.INF_G1, None, id="zero_times_inf", ), pytest.param( Spec.INF_G1 + Scalar(1), Spec.INF_G1, None, id="one_times_inf", ), pytest.param( Spec.INF_G1 + Scalar(2), Spec.INF_G1, None, id="two_times_inf", ), pytest.param( Spec.INF_G1 + Scalar(Spec.Q), Spec.INF_G1, None, id="q_times_inf", ), pytest.param( Spec.INF_G1 + Scalar(2**256 - 1), Spec.INF_G1, None, id="max_scalar_times_inf", ), pytest.param( Spec.G1 + Scalar(0), Spec.INF_G1, None, id="zero_times_generator", ), pytest.param( Spec.P1 + Scalar(0), Spec.INF_G1, None, id="zero_times_point", ), pytest.param( Spec.G1 + Scalar(1), Spec.G1, None, id="one_times_generator", ), pytest.param( Spec.P1 + Scalar(1), Spec.P1, None, id="one_times_point", ), pytest.param( Spec.P1 + Scalar(2**256 - 1), PointG1( 0x3DA1F13DDEF2B8B5A46CD543CE56C0A90B8B3B0D6D43DEC95836A5FD2BACD6AA8F692601F870CF22E05DDA5E83F460B, 0x18D64F3C0E9785365CBDB375795454A8A4FA26F30B9C4F6E33CA078EB5C29B7AEA478B076C619BC1ED22B14C95569B2D, ), None, id="max_scalar_times_point", ), # Subgroup related test cases. pytest.param( Spec.P1 + Scalar(Spec.Q - 1), -Spec.P1, # negated P1 None, id="q_minus_1_times_point", ), pytest.param( Spec.P1 + Scalar(Spec.Q), Spec.INF_G1, None, id="q_times_point", ), pytest.param( Spec.G1 + Scalar(Spec.Q), Spec.INF_G1, None, id="q_times_generator", ), pytest.param( Spec.P1 + Scalar(Spec.Q + 1), Spec.P1, None, id="q_plus_1_times_point", ), pytest.param( Spec.P1 + Scalar(2 * Spec.Q), Spec.INF_G1, None, id="2q_times_point", ), pytest.param( Spec.P1 + Scalar((2**256 // Spec.Q) * Spec.Q), Spec.INF_G1, None, id="large_multiple_of_q_times_point", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1MUL precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-mul_G1_bls.json") + [ pytest.param( PointG1(0, 1) + Scalar(0), id="invalid_point_1", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y - 1) + Scalar(0), id="invalid_point_2", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y + 1) + Scalar(0), id="invalid_point_3", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.x) + Scalar(0), id="invalid_point_4", ), pytest.param( PointG1(Spec.P, 0) + Scalar(0), id="x_equal_to_p_times_0", ), pytest.param( PointG1(0, Spec.P) + Scalar(0), id="y_equal_to_p_times_0", ), pytest.param( PointG1(Spec.P + 1, 0) + Scalar(0), id="x_above_modulus_times_0", ), pytest.param( PointG1(Spec.P1.y, Spec.P1.x) + Scalar(0), id="swapped_coordinates_times_0", ), pytest.param( # Point on wrong curve y^2 = x^3 + 5 PointG1(0x01, 0x07) + Scalar(0), id="point_on_wrong_curve_times_0", ), pytest.param( b"\x80" + bytes(Spec.INF_G1)[1:] + Scalar(0), id="invalid_encoding", ), pytest.param( (Spec.INF_G1 + Scalar(0))[:-1], id="input_too_short", ), pytest.param( b"\x00" + (Spec.INF_G1 + Scalar(0)), id="input_too_long", ), pytest.param( b"", id="zero_length_input", ), pytest.param( b"\x00" * 96, id="all_zero_96_bytes", ), pytest.param( b"\xff" + b"\x00" * 47 + b"\xff" + b"\x00" * 31, id="bad_inf_flag_with_scalar", ), pytest.param( b"\xc0" + b"\x00" * 47 + b"\x00" * 32, id="comp_instead_of_uncomp_with_scalar", ), pytest.param( Spec.G1 + Spec.G1, id="g1_input_invalid_length", ), pytest.param( Spec.G2 + Spec.G2, id="g2_input_invalid_length", ), pytest.param( Spec.G1, id="g1_truncated_input", ), pytest.param( Spec.INF_G1 + Scalar(0).x.to_bytes(30, byteorder="big"), id="inf_with_short_scalar", ), pytest.param( Spec.INF_G1 + Scalar(0).x.to_bytes(34, byteorder="big"), id="inf_with_long_scalar", ), pytest.param( Spec.INF_G1 + (b"\x01" + b"\x00" * 32), id="scalar_too_large_bytes", ), pytest.param( Spec.P1 + (b"\x01" + b"\x00" * 32), id="scalar_too_large_bytes_with_point", ), pytest.param( Spec.G1 + (b"\x01\x23\x45"), id="scalar_too_small_bytes", ), pytest.param( Scalar(1) + Scalar(1), id="two_scalars", ), pytest.param( PointG1(Spec.P1.x | Spec.MAX_FP_BIT_SET, Spec.P1.y) + Scalar(1), id="non_zero_byte_16_boundary_violation_x", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y | Spec.MAX_FP_BIT_SET) + Scalar(1), id="non_zero_byte_16_boundary_violation_y", ), # Not in the r-order subgroup test cases. pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(1), id="not_in_subgroup_times_1", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(2), id="not_in_subgroup_times_2", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(3), id="not_in_subgroup_times_3", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(0), id="not_in_subgroup_times_0", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(1), id="doubled_not_in_subgroup_times_1", ), pytest.param( Scalar(Spec.Q) + Spec.P1_NOT_IN_SUBGROUP, id="q_times_not_in_subgroup", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q - 1), id="not_in_subgroup_times_q_minus_1", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q), id="doubled_not_in_subgroup_times_q", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q + 1), id="not_in_subgroup_times_q_plus_1", ), # More not in the r-order subgroup test cases, but using random # generated points. pytest.param( G1_POINTS_NOT_IN_SUBGROUP[0] + Scalar(1), id="rand_not_in_subgroup_0_times_1", ), pytest.param( Scalar(2) + G1_POINTS_NOT_IN_SUBGROUP[1], id="2_times_rand_not_in_subgroup_1", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[2] + Scalar(Spec.Q), id="rand_not_in_subgroup_2_times_q", ), pytest.param( Scalar(0) + G1_POINTS_NOT_IN_SUBGROUP[3], id="0_times_rand_not_in_subgroup_3", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[4] + Scalar(2**255 - 1), id="rand_not_in_subgroup_4_times_large_scalar", ), # Not on the curve cases using random generated points. pytest.param( G1_POINTS_NOT_ON_CURVE[0] + Scalar(1), id="rand_not_on_curve_0_times_1", ), pytest.param( G1_POINTS_NOT_ON_CURVE[1] + Scalar(2), id="rand_not_on_curve_1_times_2", ), pytest.param( G1_POINTS_NOT_ON_CURVE[2] + Scalar(Spec.Q), id="rand_not_on_curve_2_times_q", ), pytest.param( G1_POINTS_NOT_ON_CURVE[3] + Scalar(0), id="rand_not_on_curve_3_times_0", ), pytest.param( G1_POINTS_NOT_ON_CURVE[4] + Scalar(Spec.Q - 1), id="rand_not_on_curve_4_times_q_minus_1", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_G1MUL precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( Spec.INF_G1 + Scalar(0), Spec.INF_G1, 1, id="extra_gas", ), pytest.param( Spec.INF_G1 + Scalar(0), Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1MUL precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G1 + Scalar(0), Spec.INF_G1, id="zero_times_inf", ), pytest.param( Spec.INF_G1 + Scalar(2), Spec.INF_G1, id="two_times_inf", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1MUL precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py ================================================ """ Tests BLS12_G2ADD precompile. Tests the BLS12_G2ADD precompile implementation from [EIP-2537: Precompile for BLS12-381 curve operations] (https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G2_POINTS_NOT_IN_SUBGROUP, G2_POINTS_NOT_ON_CURVE from .helpers import add_points_g2, vectors_from_file from .spec import PointG2, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.G2ADD], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("add_G2_bls.json") + [ # Identity (infinity) element test cases. Checks that any point added # to the identity element (INF) equals itself. pytest.param( Spec.G2 + Spec.INF_G2, Spec.G2, None, id="generator_plus_inf", ), pytest.param( Spec.INF_G2 + Spec.G2, Spec.G2, None, id="inf_plus_generator", ), pytest.param( Spec.INF_G2 + Spec.INF_G2, Spec.INF_G2, None, id="inf_plus_inf", ), pytest.param( Spec.INF_G2 + Spec.P2, Spec.P2, None, id="inf_plus_point", ), # Basic arithmetic properties test cases. # Checks fundamental properties of the BLS12-381 curve. pytest.param( Spec.P2 + (-Spec.P2), Spec.INF_G2, None, id="point_plus_neg_point", ), pytest.param( Spec.G2 + (-Spec.G2), Spec.INF_G2, None, id="generator_plus_neg_point", ), pytest.param( Spec.P2 + Spec.G2, add_points_g2(Spec.G2, Spec.P2), None, id="commutative_check_a", ), pytest.param( Spec.G2 + Spec.P2, add_points_g2(Spec.P2, Spec.G2), None, id="commutative_check_b", ), pytest.param( Spec.P2 + Spec.P2, add_points_g2(Spec.P2, Spec.P2), None, id="point_doubling", ), pytest.param( # (P + G) + P = P + (G + P) add_points_g2(Spec.P2, Spec.G2) + Spec.P2, add_points_g2(Spec.P2, add_points_g2(Spec.G2, Spec.P2)), None, id="associativity_check", ), pytest.param( # -(P+G) = (-P)+(-G) (-(add_points_g2(Spec.P2, Spec.G2))) + Spec.INF_G2, add_points_g2((-Spec.P2), (-Spec.G2)), None, id="negation_of_sum", ), pytest.param( add_points_g2(Spec.G2, Spec.G2) + add_points_g2(Spec.P2, Spec.P2), add_points_g2(add_points_g2(Spec.G2, Spec.G2), add_points_g2(Spec.P2, Spec.P2)), None, id="double_generator_plus_double_point", ), pytest.param( add_points_g2(Spec.G2, Spec.G2) + add_points_g2(Spec.G2, Spec.G2), add_points_g2(add_points_g2(Spec.G2, Spec.G2), add_points_g2(Spec.G2, Spec.G2)), None, id="double_generator_plus_double_generator", ), pytest.param( # (x,y) + (x,-y) = INF PointG2(Spec.P2.x, Spec.P2.y) + PointG2(Spec.P2.x, (-Spec.P2.y[0] % Spec.P, -Spec.P2.y[1] % Spec.P)), Spec.INF_G2, None, id="point_plus_reflected_point", ), # Not in the r-order subgroup test cases. Checks that any point on the # curve but not in the subgroup is used for operations. pytest.param( Spec.P2_NOT_IN_SUBGROUP + Spec.P2_NOT_IN_SUBGROUP, Spec.P2_NOT_IN_SUBGROUP_TIMES_2, None, id="non_sub_plus_non_sub", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Spec.P2_NOT_IN_SUBGROUP_TIMES_2, add_points_g2(Spec.P2_NOT_IN_SUBGROUP, Spec.P2_NOT_IN_SUBGROUP_TIMES_2), None, id="non_sub_plus_doubled_non_sub", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Spec.INF_G2, Spec.P2_NOT_IN_SUBGROUP, None, id="non_sub_plus_inf", ), pytest.param( Spec.G2 + Spec.P2_NOT_IN_SUBGROUP, add_points_g2(Spec.G2, Spec.P2_NOT_IN_SUBGROUP), None, id="generator_plus_non_sub", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + (-Spec.P2_NOT_IN_SUBGROUP), Spec.INF_G2, None, id="non_sub_plus_neg_non_sub", ), pytest.param( Spec.P2 + Spec.P2_NOT_IN_SUBGROUP, add_points_g2(Spec.P2, Spec.P2_NOT_IN_SUBGROUP), None, id="in_sub_plus_non_sub", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP_TIMES_2 + Spec.P2, add_points_g2(Spec.P2_NOT_IN_SUBGROUP_TIMES_2, Spec.P2), None, id="doubled_non_sub_plus_in_sub", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP_TIMES_2 + (-Spec.P2_NOT_IN_SUBGROUP), Spec.P2_NOT_IN_SUBGROUP, None, id="doubled_non_sub_plus_neg", ), # More not in the r-order subgroup test cases, but using random # generated points. pytest.param( G2_POINTS_NOT_IN_SUBGROUP[0] + Spec.P2, add_points_g2(G2_POINTS_NOT_IN_SUBGROUP[0], Spec.P2), None, id="rand_not_in_subgroup_0_plus_point", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[1] + Spec.G2, add_points_g2(G2_POINTS_NOT_IN_SUBGROUP[1], Spec.G2), None, id="rand_not_in_subgroup_1_plus_generator", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[2] + Spec.INF_G2, G2_POINTS_NOT_IN_SUBGROUP[2], None, id="rand_not_in_subgroup_2_plus_inf", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[3] + (-G2_POINTS_NOT_IN_SUBGROUP[3]), Spec.INF_G2, None, id="rand_not_in_subgroup_3_plus_neg_self", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[4] + G2_POINTS_NOT_IN_SUBGROUP[0], add_points_g2(G2_POINTS_NOT_IN_SUBGROUP[4], G2_POINTS_NOT_IN_SUBGROUP[0]), None, id="rand_not_in_subgroup_4_plus_0", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2ADD precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", vectors_from_file("fail-add_G2_bls.json") + [ pytest.param( PointG2((1, 0), (0, 0)) + Spec.INF_G2, id="invalid_point_a_1", ), pytest.param( PointG2((0, 0), (1, 0)) + Spec.INF_G2, id="invalid_point_a_2", ), pytest.param( PointG2((0, 1), (0, 0)) + Spec.INF_G2, id="invalid_point_a_3", ), pytest.param( PointG2((0, 0), (0, 1)) + Spec.INF_G2, id="invalid_point_a_4", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] - 1)) + Spec.P2, id="invalid_point_a_5", ), pytest.param( Spec.INF_G2 + PointG2((1, 0), (0, 0)), id="invalid_point_b_1", ), pytest.param( Spec.INF_G2 + PointG2((0, 0), (1, 0)), id="invalid_point_b_2", ), pytest.param( Spec.INF_G2 + PointG2((0, 1), (0, 0)), id="invalid_point_b_3", ), pytest.param( Spec.INF_G2 + PointG2((0, 0), (0, 1)), id="invalid_point_b_4", ), pytest.param( Spec.P2 + PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] - 1)), id="invalid_point_b_5", ), pytest.param( PointG2((Spec.P, 0), (0, 0)) + Spec.INF_G2, id="a_x_1_equal_to_p", ), pytest.param( PointG2((0, Spec.P), (0, 0)) + Spec.INF_G2, id="a_x_2_equal_to_p", ), pytest.param( PointG2((0, 0), (Spec.P, 0)) + Spec.INF_G2, id="a_y_1_equal_to_p", ), pytest.param( PointG2((0, 0), (0, Spec.P)) + Spec.INF_G2, id="a_y_2_equal_to_p", ), pytest.param( Spec.INF_G2 + PointG2((Spec.P, 0), (0, 0)), id="b_x_1_equal_to_p", ), pytest.param( Spec.INF_G2 + PointG2((0, Spec.P), (0, 0)), id="b_x_2_equal_to_p", ), pytest.param( Spec.INF_G2 + PointG2((0, 0), (Spec.P, 0)), id="b_y_1_equal_to_p", ), pytest.param( Spec.INF_G2 + PointG2((0, 0), (0, Spec.P)), id="b_y_2_equal_to_p", ), pytest.param( PointG2((Spec.P2.x[0] + Spec.P, Spec.P2.x[1]), Spec.P2.y) + Spec.G2, id="a_x_1_above_p", ), pytest.param( PointG2((Spec.P2.x[0], Spec.P2.x[1] + Spec.P), Spec.P2.y) + Spec.G2, id="a_x_2_above_p", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0] + Spec.P, Spec.P2.y[1])) + Spec.G2, id="a_y_1_above_p", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] + Spec.P)) + Spec.G2, id="a_y_2_above_p", ), pytest.param( Spec.P2 + PointG2((Spec.G2.x[0] + Spec.P, Spec.G2.x[1]), Spec.G2.y), id="b_x_1_above_p", ), pytest.param( Spec.P2 + PointG2((Spec.G2.x[0], Spec.G2.x[1] + Spec.P), Spec.G2.y), id="b_x_2_above_p", ), pytest.param( Spec.P2 + PointG2(Spec.G2.x, (Spec.G2.y[0] + Spec.P, Spec.G2.y[1])), id="b_y_1_above_p", ), pytest.param( Spec.P2 + PointG2(Spec.G2.x, (Spec.G2.y[0], Spec.G2.y[1] + Spec.P)), id="b_y_2_above_p", ), pytest.param( b"\x80" + bytes(Spec.INF_G2)[1:] + Spec.INF_G2, id="invalid_encoding_a", ), pytest.param( Spec.INF_G2 + b"\x80" + bytes(Spec.INF_G2)[1:], id="invalid_encoding_b", ), pytest.param( (Spec.INF_G2 + Spec.INF_G2)[:-1], id="input_too_short", ), pytest.param( b"\x00" + (Spec.INF_G2 + Spec.INF_G2), id="input_too_long", ), pytest.param( b"", id="zero_length_input", ), pytest.param( Spec.G2, id="only_one_point", ), pytest.param( Spec.G1 + Spec.G1, id="g1_points", ), pytest.param( PointG2((Spec.P + 1, 0), (0, 0)) + Spec.INF_G2, id="x1_above_modulus", ), pytest.param( PointG2( (0x01, 0), # x coordinate in Fp2 (1 + 0i) (0x07, 0), # y coordinate satisfying y^2 = x^3 + 5 in Fp2 ) + Spec.INF_G2, id="point_on_wrong_curve_b=5", ), pytest.param( bytes(Spec.G2) + bytes(Spec.G2)[128:], id="mixed_g1_g2_points", ), pytest.param( PointG2((Spec.P2.x[0] | Spec.MAX_FP_BIT_SET, Spec.P2.x[1]), Spec.P2.y) + Spec.P2, id="non_zero_byte_16_boundary_violation_x1", ), pytest.param( PointG2((Spec.P2.x[0], Spec.P2.x[1] | Spec.MAX_FP_BIT_SET), Spec.P2.y) + Spec.P2, id="non_zero_byte_16_boundary_violation_x2", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0] | Spec.MAX_FP_BIT_SET, Spec.P2.y[1])) + Spec.P2, id="non_zero_byte_16_boundary_violation_y1", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] | Spec.MAX_FP_BIT_SET)) + Spec.P2, id="non_zero_byte_16_boundary_violation_y2", ), # Not on the curve cases using random generated points. pytest.param( G2_POINTS_NOT_ON_CURVE[0] + Spec.INF_G2, id="rand_not_on_curve_0_plus_inf", ), pytest.param( G2_POINTS_NOT_ON_CURVE[1] + Spec.P2, id="rand_not_on_curve_1_plus_point", ), pytest.param( G2_POINTS_NOT_ON_CURVE[2] + G2_POINTS_NOT_IN_SUBGROUP[0], id="rand_not_on_curve_2_plus_not_in_subgroup_0", ), pytest.param( G2_POINTS_NOT_ON_CURVE[3] + G2_POINTS_NOT_ON_CURVE[4], id="rand_not_on_curve_3_plus_4", ), pytest.param( Spec.INF_G2 + G2_POINTS_NOT_ON_CURVE[0], id="inf_plus_rand_not_on_curve_0", ), pytest.param( Spec.P2 + G2_POINTS_NOT_ON_CURVE[1], id="point_plus_rand_not_on_curve_1", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[2] + G2_POINTS_NOT_ON_CURVE[2], id="rand_not_in_subgroup_2_plus_rand_not_on_curve_2", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_G2ADD precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( Spec.INF_G2 + Spec.INF_G2, Spec.INF_G2, 1, id="extra_gas", ), pytest.param( Spec.INF_G2 + Spec.INF_G2, Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2ADD precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G2 + Spec.INF_G2, Spec.INF_G2, id="inf_plus_inf", ), pytest.param( Spec.INF_G2 + Spec.G2, Spec.G2, id="inf_plus_generator", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2ADD precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py ================================================ """ Test the BLS12_G2MSM precompile. Test the BLS12_G2MSM precompile introduced in [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G2_POINTS_NOT_IN_SUBGROUP, G2_POINTS_NOT_ON_CURVE from .helpers import PointG2, vectors_from_file from .spec import Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.G2MSM], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("msm_G2_bls.json") + [ # Multiple pair scalar multiplication cases. pytest.param( Spec.G2 + Scalar(1) + Spec.INF_G2 + Scalar(1), Spec.G2, None, id="g2_plus_inf", ), pytest.param( Spec.G2 + Scalar(0) + Spec.P2 + Scalar(0) + Spec.INF_G2 + Scalar(0), Spec.INF_G2, None, id="all_zero_scalars", ), pytest.param( Spec.G2 + Scalar(1) + (-Spec.G2) + Scalar(1), Spec.INF_G2, None, id="sum_to_identity_opposite", ), pytest.param( Spec.G2 + Scalar(Spec.Q - 1) + Spec.G2 + Scalar(1), Spec.INF_G2, None, id="scalars_sum_to_q", ), pytest.param( Spec.G2 + Scalar(1) + Spec.G2 + Scalar(0) + Spec.INF_G2 + Scalar(5), Spec.G2, None, id="combined_basic_cases", ), pytest.param( Spec.G2 + Scalar(1) + Spec.INF_G2 + Scalar(500), Spec.G2, None, id="identity_with_large_scalar", ), pytest.param( Spec.G2 + Scalar(0) + Spec.P2 + Scalar(0) + (-Spec.G2) + Scalar(0), Spec.INF_G2, None, id="multiple_points_zero_scalar", ), # Cases with maximum discount table (test vector for gas cost # calculation) pytest.param( (Spec.P2 + Scalar(Spec.Q)) * (len(Spec.G2MSM_DISCOUNT_TABLE) - 1), Spec.INF_G2, None, id="max_discount", marks=pytest.mark.slow, ), pytest.param( (Spec.P2 + Scalar(Spec.Q)) * len(Spec.G2MSM_DISCOUNT_TABLE), Spec.INF_G2, None, id="max_discount_plus_1", marks=pytest.mark.slow, ), ], ) @pytest.mark.slow() def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test valid calls to the BLS12_G2MSM precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-msm_G2_bls.json") + [ pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(1), id="not_in_subgroup_1_pos_0", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP_TIMES_2 + Scalar(1), id="not_in_subgroup_2_pos_0", ), pytest.param( Spec.G2 + Scalar(1) + Spec.P2_NOT_IN_SUBGROUP + Scalar(1), id="not_in_subgroup_1_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + Spec.P2_NOT_IN_SUBGROUP_TIMES_2 + Scalar(1), id="not_in_subgroup_2_pos_1", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[0] + Scalar(1), id="rand_not_in_subgroup_0_pos_0", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[1] + Scalar(1), id="rand_not_in_subgroup_1_pos_0", ), pytest.param( Spec.G2 + Scalar(1) + G2_POINTS_NOT_IN_SUBGROUP[0] + Scalar(1), id="rand_not_in_subgroup_0_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + G2_POINTS_NOT_IN_SUBGROUP[1] + Scalar(1), id="rand_not_in_subgroup_1_pos_1", ), pytest.param( G2_POINTS_NOT_ON_CURVE[0] + Scalar(0), id="not_on_curve_0_pos_0", ), pytest.param( G2_POINTS_NOT_ON_CURVE[1] + Scalar(1), id="not_on_curve_1_pos_0", ), pytest.param( Spec.G2 + Scalar(1) + G2_POINTS_NOT_ON_CURVE[0] + Scalar(0), id="not_on_curve_0_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + G2_POINTS_NOT_ON_CURVE[1] + Scalar(1), id="not_on_curve_1_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + Spec.G2, id="incomplete_input_missing_scalar", ), pytest.param( Spec.G2 + Scalar(1) + bytes([0]), id="incomplete_input_extra_byte", ), pytest.param( Spec.G2 + Scalar(1) + Spec.G1 + Scalar(1), id="mixing_g2_with_g1", ), pytest.param( Spec.G2 + (b"\x01" + b"\x00" * 32), # Scalar > UINT256_MAX id="scalar_too_large", ), pytest.param( # Invalid scalar length Spec.G2 + Scalar(1).x.to_bytes(16, byteorder="big"), id="scalar_too_short", ), pytest.param( bytes([0]) * 287, # Just under minimum valid length id="input_too_short_by_1", ), # Coordinates above modulus p cases. pytest.param( PointG2((Spec.P2.x[0] + Spec.P, Spec.P2.x[1]), Spec.P2.y) + Scalar(1), id="x_c0_above_p_pos_0", ), pytest.param( PointG2((Spec.P2.x[0], Spec.P2.x[1] + Spec.P), Spec.P2.y) + Scalar(1), id="x_c1_above_p_pos_0", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0] + Spec.P, Spec.P2.y[1])) + Scalar(1), id="y_c0_above_p_pos_0", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] + Spec.P)) + Scalar(1), id="y_c1_above_p_pos_0", ), pytest.param( Spec.G2 + Scalar(1) + PointG2((Spec.P2.x[0] + Spec.P, Spec.P2.x[1]), Spec.P2.y) + Scalar(0), id="x_c0_above_p_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + PointG2((Spec.P2.x[0], Spec.P2.x[1] + Spec.P), Spec.P2.y) + Scalar(0), id="x_c1_above_p_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + PointG2(Spec.P2.x, (Spec.P2.y[0] + Spec.P, Spec.P2.y[1])) + Scalar(0), id="y_c0_above_p_pos_1", ), pytest.param( Spec.G2 + Scalar(1) + PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] + Spec.P)) + Scalar(0), id="y_c1_above_p_pos_1", ), ], # Input length tests can be found in # ./test_bls12_variable_length_input_contracts.py ) @pytest.mark.parametrize( "precompile_gas_modifier", [100_000], ids=[""] ) # Add gas so that won't be the cause of failure @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test invalid calls to the BLS12_G2MSM precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G2 + Scalar(0), Spec.INF_G2, id="single_inf_times_zero", ), pytest.param( Spec.G2 + Scalar(0) + Spec.INF_G2 + Scalar(0), Spec.INF_G2, id="msm_all_zeros_different_call_types", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2MSM precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py ================================================ """ Test the BLS12_G2MUL precompile. Test the BLS12_G2MUL precompile introduced in [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G2_POINTS_NOT_IN_SUBGROUP, G2_POINTS_NOT_ON_CURVE from .helpers import vectors_from_file from .spec import PointG2, Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.G2MSM], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("mul_G2_bls.json") + [ # Basic multiplication test cases. pytest.param( Spec.INF_G2 + Scalar(0), Spec.INF_G2, None, id="zero_times_inf", ), pytest.param( Spec.INF_G2 + Scalar(1), Spec.INF_G2, None, id="one_times_inf", ), pytest.param( Spec.INF_G2 + Scalar(2), Spec.INF_G2, None, id="two_times_inf", ), pytest.param( Spec.INF_G2 + Scalar(Spec.Q), Spec.INF_G2, None, id="q_times_inf", ), pytest.param( Spec.INF_G2 + Scalar(2**256 - 1), Spec.INF_G2, None, id="max_scalar_times_inf", ), pytest.param( Spec.G2 + Scalar(0), Spec.INF_G2, None, id="zero_times_generator", ), pytest.param( Spec.P2 + Scalar(0), Spec.INF_G2, None, id="zero_times_point", ), pytest.param( Spec.G2 + Scalar(1), Spec.G2, None, id="one_times_generator", ), pytest.param( Spec.P2 + Scalar(1), Spec.P2, None, id="one_times_point", ), pytest.param( Spec.P2 + Scalar(2**256 - 1), PointG2( ( 0x2663E1C3431E174CA80E5A84489569462E13B52DA27E7720AF5567941603475F1F9BC0102E13B92A0A21D96B94E9B22, 0x6A80D056486365020A6B53E2680B2D72D8A93561FC2F72B960936BB16F509C1A39C4E4174A7C9219E3D7EF130317C05, ), ( 0xC49EAD39E9EB7E36E8BC25824299661D5B6D0E200BBC527ECCB946134726BF5DBD861E8E6EC946260B82ED26AFE15FB, 0x5397DAD1357CF8333189821B737172B18099ECF7EE8BDB4B3F05EBCCDF40E1782A6C71436D5ACE0843D7F361CBC6DB2, ), ), None, id="max_scalar_times_point", ), # Subgroup related test cases. pytest.param( Spec.P2 + Scalar(Spec.Q - 1), -Spec.P2, # negated P2 None, id="q_minus_1_times_point", ), pytest.param( Spec.P2 + Scalar(Spec.Q), Spec.INF_G2, None, id="q_times_point", ), pytest.param( Spec.G2 + Scalar(Spec.Q), Spec.INF_G2, None, id="q_times_generator", ), pytest.param( Spec.P2 + Scalar(Spec.Q + 1), Spec.P2, None, id="q_plus_1_times_point", ), pytest.param( Spec.P2 + Scalar(2 * Spec.Q), Spec.INF_G2, None, id="2q_times_point", ), pytest.param( Spec.P2 + Scalar((2**256 // Spec.Q) * Spec.Q), Spec.INF_G2, None, id="large_multiple_of_q_times_point", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2MUL precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-mul_G2_bls.json") + [ pytest.param( PointG2((1, 0), (0, 0)) + Scalar(0), id="invalid_point_a_1", ), pytest.param( PointG2((0, 1), (0, 0)) + Scalar(0), id="invalid_point_a_2", ), pytest.param( PointG2((0, 0), (1, 0)) + Scalar(0), id="invalid_point_a_3", ), pytest.param( PointG2((0, 0), (0, 1)) + Scalar(0), id="invalid_point_a_4", ), pytest.param( PointG2((Spec.P, 0), (0, 0)) + Scalar(0), id="x_1_equal_to_p_times_0", ), pytest.param( PointG2((0, Spec.P), (0, 0)) + Scalar(0), id="x_2_equal_to_p_times_0", ), pytest.param( PointG2((0, 0), (Spec.P, 0)) + Scalar(0), id="y_1_equal_to_p_times_0", ), pytest.param( PointG2((0, 0), (0, Spec.P)) + Scalar(0), id="y_2_equal_to_p_times_0", ), pytest.param( PointG2((Spec.P + 1, 0), (0, 0)) + Scalar(0), id="x1_above_modulus_times_0", ), pytest.param( PointG2( (0x01, 0), # x coordinate in Fp2 (1 + 0i) (0x07, 0), # y coordinate satisfying y^2 = x^3 + 5 in Fp2 ) + Scalar(0), id="point_on_wrong_curve_times_0", ), pytest.param( b"\x80" + bytes(Spec.INF_G2)[1:] + Scalar(0), id="invalid_encoding", ), pytest.param( (Spec.INF_G2 + Scalar(0))[:-1], id="input_too_short", ), pytest.param( b"\x00" + (Spec.INF_G2 + Scalar(0)), id="input_too_long", ), pytest.param( b"", id="zero_length_input", ), pytest.param( b"\x00" * 160, id="all_zero_160_bytes", ), pytest.param( b"\xff" + b"\x00" * 127 + b"\xff" + b"\x00" * 31, id="bad_inf_flag_with_scalar", ), pytest.param( b"\xc0" + b"\x00" * 127 + b"\x00" * 32, id="comp_instead_of_uncomp_with_scalar", ), pytest.param( Spec.G1 + Spec.G1, id="g1_input_invalid_length", ), pytest.param( Spec.G2 + Spec.G2, id="g2_input_invalid_length", ), pytest.param( Spec.G2, id="g2_truncated_input", ), pytest.param( Spec.INF_G2 + Scalar(0).x.to_bytes(30, byteorder="big"), id="inf_with_short_scalar", ), pytest.param( Spec.INF_G2 + Scalar(0).x.to_bytes(34, byteorder="big"), id="inf_with_long_scalar", ), pytest.param( Spec.INF_G2 + (b"\x01" + b"\x00" * 32), id="scalar_too_large_bytes", ), pytest.param( Spec.P2 + (b"\x01" + b"\x00" * 32), id="scalar_too_large_bytes_with_point", ), pytest.param( Spec.G2 + (b"\x01\x23\x45"), id="scalar_too_small_bytes", ), pytest.param( Scalar(1) + Scalar(1), id="two_scalars", ), pytest.param( bytes(Spec.G2) + bytes(Scalar(0))[128:], id="mixed_g2_scalar_truncated", ), pytest.param( PointG2((Spec.P2.x[0] | Spec.MAX_FP_BIT_SET, Spec.P2.x[1]), Spec.P2.y) + Scalar(1), id="non_zero_byte_16_boundary_violation_x1", ), pytest.param( PointG2((Spec.P2.x[0], Spec.P2.x[1] | Spec.MAX_FP_BIT_SET), Spec.P2.y) + Scalar(1), id="non_zero_byte_16_boundary_violation_x2", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0] | Spec.MAX_FP_BIT_SET, Spec.P2.y[1])) + Scalar(1), id="non_zero_byte_16_boundary_violation_y1", ), pytest.param( PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] | Spec.MAX_FP_BIT_SET)) + Scalar(1), id="non_zero_byte_16_boundary_violation_y2", ), # Not in the r-order subgroup test cases. pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(0), id="not_in_subgroup_times_0", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(1), id="not_in_subgroup_times_1", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(2), id="not_in_subgroup_times_2", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(3), id="not_in_subgroup_times_3", ), pytest.param( Scalar(Spec.Q) + Spec.P2_NOT_IN_SUBGROUP, id="q_times_not_in_subgroup", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(Spec.Q - 1), id="not_in_subgroup_times_q_minus_1", ), pytest.param( Spec.P2_NOT_IN_SUBGROUP + Scalar(Spec.Q + 1), id="not_in_subgroup_times_q_plus_1", ), # More not in the r-order subgroup test cases, but using random # generated points. pytest.param( G2_POINTS_NOT_IN_SUBGROUP[0] + Scalar(1), id="rand_not_in_subgroup_0_times_1", ), pytest.param( Scalar(2) + G2_POINTS_NOT_IN_SUBGROUP[1], id="2_times_rand_not_in_subgroup_1", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[2] + Scalar(Spec.Q), id="rand_not_in_subgroup_2_times_q", ), pytest.param( Scalar(0) + G2_POINTS_NOT_IN_SUBGROUP[3], id="0_times_rand_not_in_subgroup_3", ), pytest.param( G2_POINTS_NOT_IN_SUBGROUP[4] + Scalar(2**255 - 1), id="rand_not_in_subgroup_4_times_large_scalar", ), # Not on the curve cases using random generated points. pytest.param( G2_POINTS_NOT_ON_CURVE[0] + Scalar(1), id="rand_not_on_curve_0_times_1", ), pytest.param( G2_POINTS_NOT_ON_CURVE[1] + Scalar(2), id="rand_not_on_curve_1_times_2", ), pytest.param( G2_POINTS_NOT_ON_CURVE[2] + Scalar(Spec.Q), id="rand_not_on_curve_2_times_q", ), pytest.param( G2_POINTS_NOT_ON_CURVE[3] + Scalar(0), id="rand_not_on_curve_3_times_0", ), pytest.param( G2_POINTS_NOT_ON_CURVE[4] + Scalar(Spec.Q - 1), id="rand_not_on_curve_4_times_q_minus_1", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_G2MUL precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( Spec.INF_G2 + Scalar(0), Spec.INF_G2, 1, id="extra_gas", ), pytest.param( Spec.INF_G2 + Scalar(0), Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2MUL precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G2 + Scalar(0), Spec.INF_G2, id="zero_times_inf", ), pytest.param( Spec.INF_G2 + Scalar(2), Spec.INF_G2, id="two_times_inf", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2MUL precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py ================================================ """ Test the BLS12_MAP_FP2_TO_G2 precompile. Test the BLS12_MAP_FP2_TO_G2 precompile introduced in [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G2_FIELD_POINTS_MAP_TO_IDENTITY from .helpers import vectors_from_file from .spec import FP2, PointG2, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.MAP_FP2_TO_G2], ids=[""]), ] G2_POINT_ZERO_FP = PointG2( ( 0x18320896EC9EEF9D5E619848DC29CE266F413D02DD31D9B9D44EC0C79CD61F18B075DDBA6D7BD20B7FF27A4B324BFCE, 0xA67D12118B5A35BB02D2E86B3EBFA7E23410DB93DE39FB06D7025FA95E96FFA428A7A27C3AE4DD4B40BD251AC658892, ), ( 0x260E03644D1A2C321256B3246BAD2B895CAD13890CBE6F85DF55106A0D334604FB143C7A042D878006271865BC35941, 0x4C69777A43F0BDA07679D5805E63F18CF4E0E7C6112AC7F70266D199B4F76AE27C6269A3CEEBDAE30806E9A76AADF5C, ), ) @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("map_fp2_to_G2_bls.json") + [ pytest.param( FP2((0, 0)), G2_POINT_ZERO_FP, None, id="fp_0", ), pytest.param( FP2((Spec.P - 1, Spec.P - 1)), PointG2( ( 0x9BF1B857D8C15F317F649ACCFA7023EF21CFC03059936B83B487DB476FF9D2FE64C6147140A5F0A436B875F51FFDF07, 0xBB10E09BDF236CB2951BD7BCC044E1B9A6BB5FD4B2019DCC20FFDE851D52D4F0D1A32382AF9D7DA2C5BA27E0F1C69E6, ), ( 0xDD416A927AB1C15490AB753C973FD377387B12EFCBE6BED2BF768B9DC95A0CA04D1A8F0F30DBC078A2350A1F823CFD3, 0x171565CE4FCD047B35EA6BCEE4EF6FDBFEC8CC73B7ACDB3A1EC97A776E13ACDFEFFC21ED6648E3F0EEC53DDB6C20FB61, ), ), None, id="fp_p_minus_1", ), pytest.param( FP2( ( 3510328712861478240121438855244276237335901234329585006107499559909114695366216070652508985150831181717984778988906, 2924545590598115509050131525615277284817672420174395176262156166974132393611647670391999011900253695923948997972401, ) ), Spec.INF_G2, None, id="fp_map_to_inf", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_MAP_FP2_TO_G2 precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize("expected_output", [Spec.INF_G2], ids=[""]) @pytest.mark.parametrize( "input_data,vector_gas_value", [ pytest.param(t, None, id=f"isogeny_kernel_{i}") for i, t in enumerate(G2_FIELD_POINTS_MAP_TO_IDENTITY) ], ) def test_isogeny_kernel_values( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_MAP_FP2_TO_G2 precompile with isogeny kernel values. Note this test only exists to align with the G1 test. `G2_FIELD_POINTS_MAP_TO_IDENTITY` is empty so there are no cases. The isogeny kernel is simply the set of special field values, that after the two step mapping (first SWU onto an auxiliary curve, then a 3-degree isogeny back to G2), collapse exactly to the identity point. For the G2 case the only kernel element is the point at infinity, and SWU never produces the identity point from a finite input t. Hence `G2_FIELD_POINTS_MAP_TO_IDENTITY` is empty. Please proceed to the generator in `helpers.py` for more details. """ state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-map_fp2_to_G2_bls.json") + [ pytest.param(b"\x80" + bytes(FP2((0, 0)))[1:], id="invalid_encoding"), pytest.param(bytes(FP2((0, 0)))[1:], id="input_too_short"), pytest.param(b"\x00" + FP2((0, 0)), id="input_too_long"), pytest.param(b"", id="zero_length_input"), pytest.param(FP2((Spec.P, 0)), id="fq_eq_q"), pytest.param(FP2((0, Spec.P)), id="fq_eq_q_2"), pytest.param(FP2((2**512 - 1, 0)), id="fq_eq_2_512_minus_1"), pytest.param(FP2((0, 2**512 - 1)), id="fq_eq_2_512_minus_1_2"), pytest.param(Spec.G2, id="g2_input"), pytest.param(FP2((Spec.P + 1, 0)), id="fp2_above_modulus_c0"), pytest.param(FP2((0, Spec.P + 1)), id="fp2_above_modulus_c1"), pytest.param(FP2((2**384, 0)), id="fp2_large_power_of_2_c0"), pytest.param(FP2((0, 2**384)), id="fp2_large_power_of_2_c1"), pytest.param(bytes(FP2((0, 0))) + bytes([0x00]), id="fp2_with_extra_byte"), pytest.param(bytes(FP2((0, 0)))[:95], id="fp2_one_byte_short"), pytest.param(bytes([0xFF]) + bytes(FP2((0, 0)))[1:], id="fp2_invalid_first_byte"), pytest.param(Spec.INF_G2, id="g2_inf_input"), pytest.param( FP2(((Spec.P - 1) | Spec.MAX_FP_BIT_SET, Spec.P - 1)), id="non_zero_byte_16_boundary_violation_c0", ), pytest.param( FP2((Spec.P - 1, (Spec.P - 1) | Spec.MAX_FP_BIT_SET)), id="non_zero_byte_16_boundary_violation_c1", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_MAP_FP_TO_G2 precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( FP2((0, 0)), G2_POINT_ZERO_FP, 1, id="extra_gas", ), pytest.param( FP2((0, 0)), Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_MAP_FP_TO_G2 precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( FP2((0, 0)), G2_POINT_ZERO_FP, id="fp_0", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_MAP_FP_TO_G2 precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py ================================================ """ Tests BLS12_MAP_FP_TO_G1 precompile. Tests the BLS12_MAP_FP_TO_G1 precompile implementation from [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .conftest import G1_FIELD_POINTS_MAP_TO_IDENTITY from .helpers import vectors_from_file from .spec import FP, PointG1, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.MAP_FP_TO_G1], ids=[""]), ] G1_POINT_ZERO_FP = PointG1( 0x11A9A0372B8F332D5C30DE9AD14E50372A73FA4C45D5F2FA5097F2D6FB93BCAC592F2E1711AC43DB0519870C7D0EA415, 0x92C0F994164A0719F51C24BA3788DE240FF926B55F58C445116E8BC6A47CD63392FD4E8E22BDF9FEAA96EE773222133, ) @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("map_fp_to_G1_bls.json") + [ pytest.param( FP(0), G1_POINT_ZERO_FP, None, id="fp_0", ), pytest.param( FP(Spec.P - 1), PointG1( 0x1073311196F8EF19477219CCEE3A48035FF432295AA9419EED45D186027D88B90832E14C4F0E2AA4D15F54D1C3ED0F93, 0x16B3A3B2E3DDDF6A11459DDAF657FDE21C4F10282A56029D9B55AB3CE1F41E1CF39AD27E0EA35823C7D3250E81FF3D66, ), None, id="fp_p_minus_1", ), pytest.param( FP( 799950832265136997107648781861994410980648980263584507133499364313075404851459407870655748616451882783569609925573 ), Spec.INF_G1, None, id="fp_map_to_inf", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_MAP_FP_TO_G1 precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize("expected_output", [Spec.INF_G1], ids=[""]) @pytest.mark.parametrize( "input_data,vector_gas_value", [ pytest.param(t, None, id=f"isogeny_kernel_{i}") for i, t in enumerate(G1_FIELD_POINTS_MAP_TO_IDENTITY) ], ) def test_isogeny_kernel_values( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_MAP_FP_TO_G1 precompile with isogeny kernel inputs. The isogeny kernel is simply the set of special field values, that after the two step mapping (first SWU onto an auxiliary curve, then an 11-degree isogeny back to G1), collapse exactly to the identity point. Please proceed to the generator in `helpers.py` to see how the isogeny kernel values are generated. """ state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-map_fp_to_G1_bls.json") + [ pytest.param(b"\x80" + bytes(FP(0))[1:], id="invalid_encoding"), pytest.param(bytes(FP(0))[1:], id="input_too_short"), pytest.param(b"\x00" + FP(0), id="input_too_long"), pytest.param(b"", id="zero_length_input"), pytest.param(FP(Spec.P), id="fq_eq_q"), pytest.param(FP(2**512 - 1), id="fq_eq_2_512_minus_1"), pytest.param(Spec.G1, id="g1_input"), pytest.param(FP(Spec.P + 1), id="fp_above_modulus"), pytest.param(FP(2**384), id="fp_large_power_of_2"), pytest.param(bytes(FP(0)) + bytes([0x00]), id="fp_with_extra_byte"), pytest.param(bytes(FP(0))[:47], id="fp_one_byte_short"), pytest.param(bytes([0xFF]) + bytes(FP(0))[1:], id="fp_invalid_first_byte"), pytest.param(Spec.INF_G1, id="g1_inf_input"), pytest.param( FP((Spec.P - 1) | Spec.MAX_FP_BIT_SET), id="non_zero_byte_16_boundary_violation" ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_MAP_FP_TO_G1 precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( FP(0), G1_POINT_ZERO_FP, 1, id="extra_gas", ), pytest.param( FP(0), Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_MAP_FP_TO_G1 precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( FP(0), G1_POINT_ZERO_FP, id="fp_0", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_MAP_FP_TO_G1 precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py ================================================ """ Tests BLS12_PAIRING precompile. Tests the BLS12_PAIRING precompile implementation from [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, Address, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Opcodes as Op from .conftest import ( G1_POINTS_NOT_IN_SUBGROUP, G1_POINTS_NOT_ON_CURVE, G2_POINTS_NOT_IN_SUBGROUP, G2_POINTS_NOT_ON_CURVE, ) from .helpers import vectors_from_file from .spec import PointG1, PointG2, Spec, pairing_gas, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.parametrize("precompile_address", [Spec.PAIRING], ids=[""]), ] @pytest.mark.parametrize( "input_data,expected_output,vector_gas_value", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("pairing_check_bls.json") + [ pytest.param( Spec.G1 + Spec.INF_G2, Spec.PAIRING_TRUE, None, id="generator_with_inf_g2", ), pytest.param( Spec.INF_G1 + Spec.G2, Spec.PAIRING_TRUE, None, id="inf_g1_with_generator", ), pytest.param( # e(inf, inf) == 1 Spec.INF_G1 + Spec.INF_G2, Spec.PAIRING_TRUE, None, id="inf_pair", ), pytest.param( # e(P, Q) . e(P, −Q) == 1 (inverse pair, factors cancel) Spec.G1 + Spec.G2 + Spec.G1 + (-Spec.G2), Spec.PAIRING_TRUE, None, id="g1_g2_and_inverse", ), pytest.param( # e(P,Q) · e(P,−Q) · e(−P,Q) · e(−P,−Q) == 1 (full sign cancellation) Spec.G1 + Spec.G2 + Spec.G1 + (-Spec.G2) + (-Spec.G1) + Spec.G2 + (-Spec.G1) + (-Spec.G2), Spec.PAIRING_TRUE, None, id="full_sign_cancellation", ), pytest.param( # 127 × e(inf, inf) . e(P, Q) + e(P, −Q) == 1 (Spec.INF_G1 + Spec.INF_G2) * 127 + Spec.G1 + Spec.G2 + Spec.G1 + (-Spec.G2), Spec.PAIRING_TRUE, None, id="large_input_with_cancellation", ), pytest.param( # e(P, Q) . e(−P, −Q) = e(P, Q)^2 Spec.G1 + Spec.G2 + (-Spec.G1) + (-Spec.G2), Spec.PAIRING_FALSE, None, id="negated_both_pairs", ), pytest.param( # e(inf, inf) . e(P, −Q) (Spec.INF_G1 + Spec.INF_G2) + (Spec.G1 + (-Spec.G2)), Spec.PAIRING_FALSE, None, id="multi_inf_g1_neg_g2", ), pytest.param( (Spec.G1 + (-Spec.G2)) + (Spec.INF_G1 + Spec.INF_G2), Spec.PAIRING_FALSE, None, id="g1_neg_g2_multi_inf", ), pytest.param( Spec.G1 + Spec.G2, Spec.PAIRING_FALSE, None, id="single_generator_pair", ), pytest.param( (Spec.INF_G1 + Spec.INF_G2) + (Spec.G1 + Spec.G2), Spec.PAIRING_FALSE, None, id="inf_plus_generator_pair", ), pytest.param( # e(P, Q) . e(P, −Q) . e(−P, Q) Spec.G1 + Spec.G2 + Spec.G1 + (-Spec.G2) + (-Spec.G1) + Spec.G2, Spec.PAIRING_FALSE, None, id="partial_sign_cancellation", ), ], ) def test_valid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_PAIRING precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.slow @pytest.mark.parametrize("precompile_gas", [None], ids=[""]) @pytest.mark.parametrize("expected_output", [Spec.PAIRING_TRUE], ids=[""]) def test_valid_multi_inf( state_test: StateTestFiller, pre: Alloc, call_contract_address: Address, sender: EOA, fork: Fork, post: dict, ) -> None: """ Test maximum input given the current environment gas limit for the BLS12_PAIRING precompile. """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() extra_gas = 100_000 tx_gas_limit_cap = fork.transaction_gas_limit_cap() max_gas_limit = Environment().gas_limit if tx_gas_limit_cap is None else tx_gas_limit_cap inf_data = Spec.INF_G1 + Spec.INF_G2 input_data = inf_data while True: precompile_gas = pairing_gas(len(input_data + inf_data)) new_tx_gas_limit = ( extra_gas + intrinsic_gas_cost_calculator(calldata=input_data + inf_data) + memory_expansion_gas_calculator(new_bytes=len(input_data + inf_data)) + precompile_gas ) if new_tx_gas_limit > max_gas_limit: break tx_gas_limit = new_tx_gas_limit input_data += inf_data tx = Transaction( gas_limit=tx_gas_limit, data=input_data, to=call_contract_address, sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data", # Test vectors from the reference spec (from the cryptography team) vectors_from_file("fail-pairing_check_bls.json") + [ # Coordinate equal to p (modulus) in G1 pytest.param( PointG1(Spec.P, 0) + Spec.INF_G2, id="g1_p_g2_inf_1", ), pytest.param( PointG1(0, Spec.P) + Spec.INF_G2, id="g1_p_g2_inf_2", ), # Coordinate equal to p (modulus) in G2 pytest.param( Spec.INF_G1 + PointG2((Spec.P, 0), (0, 0)), id="g1_inf_g2_p_1", ), pytest.param( Spec.INF_G1 + PointG2((0, Spec.P), (0, 0)), id="g1_inf_g2_p_2", ), pytest.param( Spec.INF_G1 + PointG2((0, 0), (Spec.P, 0)), id="g1_inf_g2_p_3", ), pytest.param( Spec.INF_G1 + PointG2((0, 0), (0, Spec.P)), id="g1_inf_g2_p_4", ), pytest.param( b"\x80" + bytes(Spec.INF_G1)[1:] + Spec.INF_G2, id="invalid_encoding_g1", ), pytest.param( Spec.INF_G1 + b"\x80" + bytes(Spec.INF_G2)[1:], id="invalid_encoding_g2", ), pytest.param( Spec.P1_NOT_IN_SUBGROUP + Spec.INF_G2, id="p1_not_in_subgroup", ), pytest.param( Spec.INF_G1 + Spec.P2_NOT_IN_SUBGROUP, id="p2_not_in_subgroup", ), # Points not in the subgroup or not on the curve randomly generated. pytest.param( G1_POINTS_NOT_ON_CURVE[0] + Spec.INF_G2, id="rand_not_on_curve_g1_0_plus_inf", ), pytest.param( G1_POINTS_NOT_ON_CURVE[1] + Spec.G2, id="rand_not_on_curve_g1_1_plus_g2", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[0] + Spec.G2, id="rand_not_in_subgroup_g1_0_plus_g2", ), pytest.param( G1_POINTS_NOT_IN_SUBGROUP[1] + Spec.INF_G2, id="rand_not_in_subgroup_g1_1_plus_inf", ), pytest.param( Spec.INF_G1 + G2_POINTS_NOT_ON_CURVE[0], id="inf_plus_rand_not_on_curve_g2_0", ), pytest.param( Spec.G1 + G2_POINTS_NOT_ON_CURVE[1], id="g1_plus_rand_not_on_curve_g2_1", ), pytest.param( Spec.INF_G1 + G2_POINTS_NOT_IN_SUBGROUP[0], id="inf_plus_rand_not_in_subgroup_g2_0", ), pytest.param( Spec.G1 + G2_POINTS_NOT_IN_SUBGROUP[1], id="g1_plus_rand_not_in_subgroup_g2_1", ), # Coordinates above modulus p cases. pytest.param( PointG1(Spec.P1.x + Spec.P, Spec.P1.y) + Spec.INF_G2, id="g1_x_above_p_with_inf_g2", ), pytest.param( PointG1(Spec.P1.x, Spec.P1.y + Spec.P) + Spec.INF_G2, id="g1_y_above_p_with_inf_g2", ), pytest.param( Spec.INF_G1 + PointG2((Spec.P2.x[0] + Spec.P, Spec.P2.x[1]), Spec.P2.y), id="inf_g1_with_g2_x_c0_above_p", ), pytest.param( Spec.INF_G1 + PointG2((Spec.P2.x[0], Spec.P2.x[1] + Spec.P), Spec.P2.y), id="inf_g1_with_g2_x_c1_above_p", ), pytest.param( Spec.INF_G1 + PointG2(Spec.P2.x, (Spec.P2.y[0] + Spec.P, Spec.P2.y[1])), id="inf_g1_with_g2_y_c0_above_p", ), pytest.param( Spec.INF_G1 + PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] + Spec.P)), id="inf_g1_with_g2_y_c1_above_p", ), # Non-zero byte 16 boundary violation test cases. pytest.param( PointG1(Spec.G1.x | Spec.MAX_FP_BIT_SET, Spec.G1.y) + Spec.INF_G2, id="non_zero_byte_16_boundary_violation_g1_x", ), pytest.param( PointG1(Spec.G1.x, Spec.G1.y | Spec.MAX_FP_BIT_SET) + Spec.INF_G2, id="non_zero_byte_16_boundary_violation_g1_y", ), pytest.param( Spec.INF_G1 + PointG2((Spec.G2.x[0] | Spec.MAX_FP_BIT_SET, Spec.G2.x[1]), Spec.G2.y), id="non_zero_byte_16_boundary_violation_g1_x1", ), pytest.param( Spec.INF_G1 + PointG2((Spec.G2.x[0], Spec.G2.x[1] | Spec.MAX_FP_BIT_SET), Spec.G2.y), id="non_zero_byte_16_boundary_violation_g1_x2", ), pytest.param( Spec.INF_G1 + PointG2(Spec.G2.x, (Spec.G2.y[0] | Spec.MAX_FP_BIT_SET, Spec.G2.y[1])), id="non_zero_byte_16_boundary_violation_g1_y1", ), pytest.param( Spec.INF_G1 + PointG2(Spec.G2.x, (Spec.G2.y[0], Spec.G2.y[1] | Spec.MAX_FP_BIT_SET)), id="non_zero_byte_16_boundary_violation_g1_y2", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Negative tests for the BLS12_PAIRING precompile.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.slow @pytest.mark.parametrize("precompile_gas", [None], ids=[""]) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) def test_invalid_multi_inf( state_test: StateTestFiller, pre: Alloc, call_contract_address: Address, sender: EOA, fork: Fork, post: dict, ) -> None: """ Test maximum input given the current environment gas limit for the BLS12_PAIRING precompile and an invalid tail. """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() extra_gas = 100_000 tx_gas_limit_cap = fork.transaction_gas_limit_cap() max_gas_limit = Environment().gas_limit if tx_gas_limit_cap is None else tx_gas_limit_cap inf_data = Spec.INF_G1 + Spec.INF_G2 input_data = PointG1(Spec.P, 0) + Spec.INF_G2 while True: precompile_gas = pairing_gas(len(input_data + inf_data)) new_tx_gas_limit = ( extra_gas + intrinsic_gas_cost_calculator(calldata=input_data + inf_data) + memory_expansion_gas_calculator(new_bytes=len(input_data + inf_data)) + precompile_gas ) if new_tx_gas_limit > max_gas_limit: break tx_gas_limit = new_tx_gas_limit input_data = inf_data + input_data tx = Transaction( gas_limit=tx_gas_limit, data=input_data, to=call_contract_address, sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "input_data,expected_output,precompile_gas_modifier", [ pytest.param( Spec.INF_G1 + Spec.INF_G2, Spec.PAIRING_TRUE, 1, id="extra_gas", ), pytest.param( Spec.INF_G1 + Spec.INF_G2, Spec.INVALID, -1, id="insufficient_gas", ), ], ) def test_gas( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_PAIRING precompile gas requirements.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "call_opcode", # Note `Op.CALL` is used for all the `test_valid` cases. [ Op.STATICCALL, Op.DELEGATECALL, Op.CALLCODE, ], ) @pytest.mark.parametrize( "input_data,expected_output", [ pytest.param( Spec.INF_G1 + Spec.INF_G2, Spec.PAIRING_TRUE, id="inf_pair", ), ], ) def test_call_types( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_PAIRING precompile using different call types.""" state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py ================================================ """ Tests BLS12 precompiles before fork activation. Tests the BLS12 precompiles behavior before fork activation from [EIP-2537: Precompile for BLS12-381 curve operations] (https://eips.ethereum.org/EIPS/eip-2537). """ import pytest from ethereum_test_tools import Alloc, Environment, StateTestFiller, Transaction from .spec import FP, FP2, Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = pytest.mark.valid_at_transition_to("Prague") @pytest.mark.parametrize( "precompile_address,input_data", [ pytest.param( Spec.G1ADD, Spec.INF_G1 + Spec.INF_G1, id="G1ADD", ), pytest.param( Spec.G1MSM, Spec.INF_G1 + Scalar(0), id="G1MSM", ), pytest.param( Spec.G2ADD, Spec.INF_G2 + Spec.INF_G2, id="G2ADD", ), pytest.param( Spec.G2MSM, Spec.INF_G2 + Scalar(0), id="G2MSM", ), pytest.param( Spec.PAIRING, Spec.INF_G1 + Spec.INF_G2, id="PAIRING", ), pytest.param( Spec.MAP_FP_TO_G1, FP(0), id="MAP_FP_TO_G1", ), pytest.param( Spec.MAP_FP2_TO_G2, FP2((0, 0)), id="MAP_FP2_TO_G2", ), ], ) @pytest.mark.parametrize("expected_output,call_succeeds", [pytest.param(b"", True, id="")]) def test_precompile_before_fork( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test all BLS12 precompiles before the Prague hard fork is active. The call must succeed but the output must be empty. """ state_test( env=Environment(), pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py ================================================ """ Tests minimum gas and input length for BLS12 precompiles. Tests minimum gas and input length requirements for BLS12_G1MSM, BLS12_G2MSM, and BLS12_PAIRING precompiles from [EIP-2537: Precompile for BLS12-381 curve operations] (https://eips.ethereum.org/EIPS/eip-2537). """ from typing import Callable, List, SupportsBytes import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Bytecode, Environment, StateTestFiller, Storage, Transaction from ethereum_test_tools import Opcodes as Op from ethereum_test_tools.utility.pytest import ParameterSet from .spec import GAS_CALCULATION_FUNCTION_MAP, PointG1, PointG2, Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = pytest.mark.valid_from("Prague") G1_MSM_K_INPUT_LENGTH = len(PointG1() + Scalar()) G2_MSM_K_INPUT_LENGTH = len(PointG2() + Scalar()) G1_GAS = GAS_CALCULATION_FUNCTION_MAP[Spec.G1MSM] G2_GAS = GAS_CALCULATION_FUNCTION_MAP[Spec.G2MSM] PAIRING_GAS = GAS_CALCULATION_FUNCTION_MAP[Spec.PAIRING] PAIRINGS_TO_TEST = 20 @pytest.fixture def input_data() -> bytes: """ Calldata of the transaction is empty because all input in these tests is zero. """ return b"" @pytest.fixture def gas_modifier() -> int: """Gas modifier to apply to each element of the precompile_gas_list.""" return 0 @pytest.fixture def input_length_modifier() -> int: """ Input length modifier to apply to each element of the precompile_gas_list. """ return 0 @pytest.fixture def env(fork: Fork, tx: Transaction) -> Environment: """Environment used for all tests.""" env = Environment() tx_gas_limit_cap = fork.transaction_gas_limit_cap() if tx_gas_limit_cap is not None: assert tx.gas_limit <= tx_gas_limit_cap, ( f"tx exceeds gas limit cap: {int(tx.gas_limit)} > {tx_gas_limit_cap}" ) if tx.gas_limit > env.gas_limit: env = Environment(gas_limit=tx.gas_limit) return env @pytest.fixture def call_contract_code( precompile_address: int, precompile_gas_list: List[int], precompile_data_length_list: List[int], gas_modifier: int, input_length_modifier: int, expected_output: bytes | SupportsBytes, call_opcode: Op, call_contract_post_storage: Storage, ) -> Bytecode: """ Code of the test contract to validate minimum expected gas in precompiles, as well as expected input lengths on all variable-length input precompiles. Code differs from the one used in all other tests in this file, because it accepts a list of precompile gas values and a list of precompile data lengths, and for each pair of values, it calls the precompile with the given gas and data length, data being passed to the precompile is all zeros. Args: precompile_address: Address of the precompile to call. precompile_gas_list: List of gas values to be used to call the precompile, one for each call. precompile_data_length_list: List of data lengths to be used to call the precompile, one for each call. gas_modifier: Integer to add to the gas passed to the precompile. input_length_modifier: Integer to add to the length of the input passed to the precompile. expected_output: Expected output of the contract, it is only used to determine if the call is expected to succeed or fail. call_opcode: Type of call used to call the precompile (Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL). call_contract_post_storage: Storage of the test contract after the transaction is executed. """ expected_output = bytes(expected_output) # Depending on the expected output, we can deduce if the call is expected # to succeed or fail. call_succeeds = len(expected_output) > 0 assert len(precompile_gas_list) == len(precompile_data_length_list) assert call_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] value = [0] if call_opcode in [Op.CALL, Op.CALLCODE] else [] code = Bytecode() for precompile_gas, precompile_args_length in zip( precompile_gas_list, precompile_data_length_list, strict=False ): # For each given precompile gas value, and given arguments length, call # the precompile with the given gas and call data (all zeros) and # compare the result. code += Op.SSTORE( call_contract_post_storage.store_next(1 if call_succeeds else 0), Op.CALL( precompile_gas + gas_modifier, precompile_address, *value, # Optional, only used for CALL and CALLCODE. 0, precompile_args_length + input_length_modifier, # Memory is empty, so we pass zeros. 0, 0, ), ) return code def tx_gas_limit_calculator( fork: Fork, precompile_gas_list: List[int], max_precompile_input_length: int ) -> int: """ Calculate the gas used to execute the transaction with the given precompile gas list. """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator() extra_gas = 22_500 * len(precompile_gas_list) return ( extra_gas + intrinsic_gas_cost_calculator() + memory_expansion_gas_calculator(new_bytes=max_precompile_input_length) + sum(precompile_gas_list) ) @pytest.fixture def tx_gas_limit( fork: Fork, input_data: bytes, precompile_gas_list: List[int], precompile_data_length_list: List[int], ) -> int: """ Transaction gas limit used for the test (Can be overridden in the test). """ assert len(input_data) == 0, "Expected empty data in the transaction." return tx_gas_limit_calculator(fork, precompile_gas_list, max(precompile_data_length_list)) def get_split_discount_table_by_fork( gas_fn: Callable, discount_table_length: int, element_length: int ) -> Callable[[Fork], List[ParameterSet]]: """ Get the number of test cases needed to cover the given discount table adjusted for the fork transaction gas limit cap. The function will return the full discount table as a single test case if the fork has no transaction gas limit cap, otherwise it will iterate to determine the splits required to fit the full discount table across multiple test cases. """ def parametrize_by_fork(fork: Fork) -> List[ParameterSet]: tx_gas_limit_cap = fork.transaction_gas_limit_cap() if tx_gas_limit_cap is None: return [ pytest.param( [gas_fn(i * element_length) for i in range(1, discount_table_length + 1)], [i * element_length for i in range(1, discount_table_length + 1)], id="full_discount_table", ) ] else: def gas_list_from_range(min_index: int, max_index: int) -> List[int]: return [gas_fn(i * element_length) for i in range(min_index, max_index)] def get_range_cost(min_index: int, max_index: int) -> int: return tx_gas_limit_calculator( fork, gas_list_from_range(min_index, max_index), max_index * element_length, ) g1_msm_discount_table_ranges = [] current_min = 1 for current_max in range(2, discount_table_length + 1): range_cost = get_range_cost(current_min, current_max + 1) if range_cost > tx_gas_limit_cap: new_range = (current_min, current_max) g1_msm_discount_table_ranges.append(new_range) current_min = current_max elif current_max == discount_table_length: new_range = (current_min, current_max + 1) g1_msm_discount_table_ranges.append(new_range) g1_msm_discount_table_splits = [ [ [gas_fn(i * element_length) for i in range(r[0], r[1])], [i * element_length for i in range(r[0], r[1])], ] for r in g1_msm_discount_table_ranges ] assert ( sum(len(split[0]) for split in g1_msm_discount_table_splits) == discount_table_length ) assert ( sum(len(split[1]) for split in g1_msm_discount_table_splits) == discount_table_length ) return [ pytest.param( *split, id=f"discount_table_{idx + 1}_of_{len(g1_msm_discount_table_splits)}", ) for idx, split in enumerate(g1_msm_discount_table_splits) ] return parametrize_by_fork @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork( G1_GAS, len(Spec.G1MSM_DISCOUNT_TABLE), G1_MSM_K_INPUT_LENGTH ), ) @pytest.mark.parametrize("gas_modifier", [pytest.param(0, id="exact_gas")]) @pytest.mark.parametrize("expected_output", [PointG1()], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G1MSM]) @pytest.mark.slow() def test_valid_gas_g1msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_G1MSM discount gas table in full, by expecting the call to succeed for all possible input lengths because the appropriate amount of gas is provided. If any of the calls fail, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "precompile_gas_list,precompile_data_length_list", [ pytest.param( [0], [G1_MSM_K_INPUT_LENGTH], id="zero_gas_passed", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G1MSM]) def test_invalid_zero_gas_g1msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1MSM precompile calling it with zero gas.""" state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork( G1_GAS, len(Spec.G1MSM_DISCOUNT_TABLE), G1_MSM_K_INPUT_LENGTH ), ) @pytest.mark.parametrize("gas_modifier", [pytest.param(-1, id="insufficient_gas")]) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G1MSM]) def test_invalid_gas_g1msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for all possible input lengths because the appropriate amount of gas is not provided. If any of the calls succeeds, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "precompile_gas_list,precompile_data_length_list", [ pytest.param( [G1_GAS(G1_MSM_K_INPUT_LENGTH)], [0], id="zero_length_input", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G1MSM]) def test_invalid_zero_length_g1msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G1MSM precompile by passing an input with zero length.""" state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork( G1_GAS, len(Spec.G1MSM_DISCOUNT_TABLE), G1_MSM_K_INPUT_LENGTH ), ) @pytest.mark.parametrize( "input_length_modifier", [ pytest.param(-1, id="input_one_byte_too_short"), pytest.param(1, id="input_one_byte_too_long"), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G1MSM]) def test_invalid_length_g1msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for all possible input lengths provided because they are too long or short, or zero length. If any of the calls succeeds, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork( G2_GAS, len(Spec.G2MSM_DISCOUNT_TABLE), G2_MSM_K_INPUT_LENGTH ), ) @pytest.mark.parametrize("gas_modifier", [pytest.param(0, id="exact_gas")]) @pytest.mark.parametrize("expected_output", [PointG2()], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G2MSM]) @pytest.mark.slow() def test_valid_gas_g2msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_G2MSM discount gas table in full, by expecting the call to succeed for all possible input lengths because the appropriate amount of gas is provided. If any of the calls fail, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "precompile_gas_list,precompile_data_length_list", [ pytest.param( [0], [G2_MSM_K_INPUT_LENGTH], id="zero_gas_passed", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G2MSM]) def test_invalid_zero_gas_g2msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2MSM precompile calling it with zero gas.""" state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork( G2_GAS, len(Spec.G2MSM_DISCOUNT_TABLE), G2_MSM_K_INPUT_LENGTH ), ) @pytest.mark.parametrize("gas_modifier", [pytest.param(-1, id="insufficient_gas")]) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G2MSM]) def test_invalid_gas_g2msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for all possible input lengths because the appropriate amount of gas is not provided. If any of the calls succeeds, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "precompile_gas_list,precompile_data_length_list", [ pytest.param( [G2_GAS(G2_MSM_K_INPUT_LENGTH)], [0], id="zero_length_input", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G2MSM]) def test_invalid_zero_length_g2msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_G2MSM precompile by passing an input with zero length.""" state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork( G2_GAS, len(Spec.G2MSM_DISCOUNT_TABLE), G2_MSM_K_INPUT_LENGTH ), ) @pytest.mark.parametrize( "input_length_modifier", [ pytest.param(-1, id="input_one_byte_too_short"), pytest.param(1, id="input_one_byte_too_long"), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.G2MSM]) def test_invalid_length_g2msm( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for all possible input lengths provided because they are too long or short, or zero length. If any of the calls succeeds, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork(PAIRING_GAS, PAIRINGS_TO_TEST, Spec.LEN_PER_PAIR), ) @pytest.mark.parametrize("gas_modifier", [pytest.param(0, id="exact_gas")]) @pytest.mark.parametrize("expected_output", [Spec.PAIRING_TRUE], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.PAIRING]) @pytest.mark.slow() def test_valid_gas_pairing( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_PAIRING precompile, by expecting the call to succeed for all possible input lengths (up to k == PAIRINGS_TO_TEST). If any of the calls fails, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "precompile_gas_list,precompile_data_length_list", [ pytest.param( [0], [Spec.LEN_PER_PAIR], id="zero_gas_passed", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.PAIRING]) def test_invalid_zero_gas_pairing( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the BLS12_PAIRING precompile calling it with zero gas.""" state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork(PAIRING_GAS, PAIRINGS_TO_TEST, Spec.LEN_PER_PAIR), ) @pytest.mark.parametrize("gas_modifier", [pytest.param(-1, id="insufficient_gas")]) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.PAIRING]) def test_invalid_gas_pairing( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input lengths (up to k == PAIRINGS_TO_TEST) because the appropriate amount of gas is not provided. If any of the calls succeeds, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "precompile_gas_list,precompile_data_length_list", [ pytest.param( [PAIRING_GAS(Spec.LEN_PER_PAIR)], [0], id="zero_length", ), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.PAIRING]) def test_invalid_zero_length_pairing( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_PAIRING precompile by passing an input with zero length. """ state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize_by_fork( "precompile_gas_list,precompile_data_length_list", get_split_discount_table_by_fork(PAIRING_GAS, PAIRINGS_TO_TEST, Spec.LEN_PER_PAIR), ) @pytest.mark.parametrize( "input_length_modifier", [ pytest.param(-1, id="input_one_byte_too_short"), pytest.param(1, id="input_one_byte_too_long"), ], ) @pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""]) @pytest.mark.parametrize("precompile_address", [Spec.PAIRING]) def test_invalid_length_pairing( state_test: StateTestFiller, env: Environment, pre: Alloc, post: dict, tx: Transaction, ) -> None: """ Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input lengths (up to k == PAIRINGS_TO_TEST) because the incorrect input length was used. If any of the calls succeeds, the test will fail. """ state_test( env=env, pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-2537: Precompile for BLS12-381 curve operations](https://eips.ethereum.org/EIPS/eip-2537). """ # noqa: E501 import pytest from ethereum_test_tools import Alloc, StateTestFiller, Transaction from .spec import FP, FP2, Scalar, Spec, ref_spec_2537 REFERENCE_SPEC_GIT_PATH = ref_spec_2537.git_path REFERENCE_SPEC_VERSION = ref_spec_2537.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] @pytest.mark.parametrize( "precompile_address,input_data,expected_output,vector_gas_value", [ pytest.param( Spec.G1ADD, Spec.G1 + Spec.INF_G1, Spec.G1, None, id="G1ADD", ), pytest.param( Spec.G1MSM, Spec.G1 + Scalar(1) + Spec.INF_G1 + Scalar(1), Spec.G1, None, id="G1MSM", ), pytest.param( Spec.G2ADD, Spec.G2 + Spec.INF_G2, Spec.G2, None, id="G2ADD", ), pytest.param( Spec.G2MSM, Spec.G2 + Scalar(1) + Spec.INF_G2 + Scalar(1), Spec.G2, None, id="G2MSM", ), pytest.param( Spec.PAIRING, Spec.G1 + Spec.INF_G2, Spec.PAIRING_TRUE, None, id="PAIRING", ), pytest.param( Spec.MAP_FP_TO_G1, FP( 799950832265136997107648781861994410980648980263584507133499364313075404851459407870655748616451882783569609925573 # noqa: E501 ), Spec.INF_G1, None, id="fp_map_to_inf", ), pytest.param( Spec.MAP_FP2_TO_G2, FP2( ( 3510328712861478240121438855244276237335901234329585006107499559909114695366216070652508985150831181717984778988906, # noqa: E501 2924545590598115509050131525615277284817672420174395176262156166974132393611647670391999011900253695923948997972401, # noqa: E501 ) ), Spec.INF_G2, None, id="fp_map_to_inf", ), ], ) def test_eip_2537( state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction, ) -> None: """Test the all precompiles of EIP-2537.""" state_test( pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/add_G1_bls.json ================================================ [ { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "Name": "bls_g1add_g1+p1", "Expected": "000000000000000000000000000000000a40300ce2dec9888b60690e9a41d3004fda4886854573974fab73b046d3147ba5b7a5bde85279ffede1b45b3918d82d0000000000000000000000000000000006d3d887e9f53b9ec4eb6cedf5607226754b07c01ace7834f57f3e7315faefb739e59018e22c492006190fba4a870025", "Gas": 375, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Name": "bls_g1add_p1+g1", "Expected": "000000000000000000000000000000000a40300ce2dec9888b60690e9a41d3004fda4886854573974fab73b046d3147ba5b7a5bde85279ffede1b45b3918d82d0000000000000000000000000000000006d3d887e9f53b9ec4eb6cedf5607226754b07c01ace7834f57f3e7315faefb739e59018e22c492006190fba4a870025", "Gas": 375, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000000000000000000000000000000193fb7cedb32b2c3adc06ec11a96bc0d661869316f5e4a577a9f7c179593987beb4fb2ee424dbb2f5dd891e228b46c4a0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Name": "bls_g1add_g1_wrong_order+g1", "Expected": "000000000000000000000000000000000abe7ae4ae2b092a5cc1779b1f5605d904fa6ec59b0f084907d1f5e4d2663e117a3810e027210a72186159a21271df3e0000000000000000000000000000000001e1669f00e10205f2e2f1195d65c21022f6a9a6de21f329756309815281a4434b2864d34ebcbc1d7e7cfaaee3feeea2", "Gas": 375, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1add_(g1+0=g1)", "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Gas": 375, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1add_(p1+0=p1)", "Expected": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "Gas": 375, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca", "Name": "bls_g1add_(g1-g1=0)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 375, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca9426000000000000000000000000000000000195e911162921ba5ed055b496420f197693d36569ec34c63d7c0529a097d49e543070afba4b707e878e53c2b779208a", "Name": "bls_g1add_(p1-p1=0)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 375, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Name": "bls_g1add_(g1+g1=2*g1)", "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", "Gas": 375, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "Name": "bls_g1add_(p1+p1=2*p1)", "Expected": "0000000000000000000000000000000015222cddbabdd764c4bee0b3720322a65ff4712c86fc4b1588d0c209210a0884fa9468e855d261c483091b2bf7de6a630000000000000000000000000000000009f9edb99bc3b75d7489735c98b16ab78b9386c5f7a1f76c7e96ac6eb5bbde30dbca31a74ec6e0f0b12229eecea33c39", "Gas": 375, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/add_G2_bls.json ================================================ [ { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "Name": "bls_g2add_g2+p2", "Expected": "000000000000000000000000000000000b54a8a7b08bd6827ed9a797de216b8c9057b3a9ca93e2f88e7f04f19accc42da90d883632b9ca4dc38d013f71ede4db00000000000000000000000000000000077eba4eecf0bd764dce8ed5f45040dd8f3b3427cb35230509482c14651713282946306247866dfe39a8e33016fcbe520000000000000000000000000000000014e60a76a29ef85cbd69f251b9f29147b67cfe3ed2823d3f9776b3a0efd2731941d47436dc6d2b58d9e65f8438bad073000000000000000000000000000000001586c3c910d95754fef7a732df78e279c3d37431c6a2b77e67a00c7c130a8fcd4d19f159cbeb997a178108fffffcbd20", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_g2add_p2+g2", "Expected": "000000000000000000000000000000000b54a8a7b08bd6827ed9a797de216b8c9057b3a9ca93e2f88e7f04f19accc42da90d883632b9ca4dc38d013f71ede4db00000000000000000000000000000000077eba4eecf0bd764dce8ed5f45040dd8f3b3427cb35230509482c14651713282946306247866dfe39a8e33016fcbe520000000000000000000000000000000014e60a76a29ef85cbd69f251b9f29147b67cfe3ed2823d3f9776b3a0efd2731941d47436dc6d2b58d9e65f8438bad073000000000000000000000000000000001586c3c910d95754fef7a732df78e279c3d37431c6a2b77e67a00c7c130a8fcd4d19f159cbeb997a178108fffffcbd20", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000197bfd0342bbc8bee2beced2f173e1a87be576379b343e93232d6cef98d84b1d696e5612ff283ce2cfdccb2cfb65fa0c00000000000000000000000000000000184e811f55e6f9d84d77d2f79102fd7ea7422f4759df5bf7f6331d550245e3f1bcf6a30e3b29110d85e0ca16f9f6ae7a000000000000000000000000000000000f10e1eb3c1e53d2ad9cf2d398b2dc22c5842fab0a74b174f691a7e914975da3564d835cd7d2982815b8ac57f507348f000000000000000000000000000000000767d1c453890f1b9110fda82f5815c27281aba3f026ee868e4176a0654feea41a96575e0c4d58a14dbfbcc05b5010b100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_g2add_g2_wrong_order+g2", "Expected": "0000000000000000000000000000000011f00077935238fc57086414804303b20fab5880bc29f35ebda22c13dd44e586c8a889fe2ba799082c8458d861ac10cf0000000000000000000000000000000007318be09b19be000fe5df77f6e664a8286887ad8373005d7f7a203fcc458c28004042780146d3e43fa542d921c69512000000000000000000000000000000001287eab085d6f8a29f1f1aedb5ad9e8546963f0b11865e05454d86b9720c281db567682a233631f63a2794432a5596ae0000000000000000000000000000000012ec87cea1bacb75aa97728bcd64b27c7a42dd2319a2e17fe3837a05f85d089c5ebbfb73c1d08b7007e2b59ec9c8e065", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2add_(g2+0=g2)", "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2add_(p2+0=p2)", "Expected": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_g2add_(g2-g2=0)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000a6296409115572426717c73668335a949829d739cff2cb4ab043710d28f8e772f6ef41aac4806c9cb273c490384032d000000000000000000000000000000000cde4e850c721fa94e8890d500e3655b442d5c0dc4fff1b694c6f8dd68f6d8dc1bc3251a37d27e7af96f65a96278265a", "Name": "bls_g2add_(p2-p2=0)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_g2add_(g2+g2=2*g2)", "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", "Gas": 600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "Name": "bls_g2add_(p2+p2=2*p2)", "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", "Gas": 600, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-add_G1_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_g1add_empty_input" }, { "Input": "00000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "ExpectedError": "invalid input length", "Name": "bls_g1add_short_input" }, { "Input": "000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "ExpectedError": "invalid input length", "Name": "bls_g1add_large_input" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "ExpectedError": "invalid point: not on curve", "Name": "bls_g1add_point_not_on_curve" }, { "Input": "0000000000000000000000000000000031f2e5916b17be2e71b10b4292f558e727dfd7d48af9cbc5087f0ce00dcca27c8b01e83eaace1aefb539f00adb2271660000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2add_invalid_field_element" }, { "Input": "1000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "ExpectedError": "invalid field element top bytes", "Name": "bls_g1add_violate_top_bytes" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000108b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "ExpectedError": "invalid field element top bytes", "Name": "bls_g1add_top16_bytes_boundary_violation" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-add_G2_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_g2add_empty_input" }, { "Input": "000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "ExpectedError": "invalid input length", "Name": "bls_g2add_short_input" }, { "Input": "0000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "ExpectedError": "invalid input length", "Name": "bls_g2add_long_input" }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb800000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "ExpectedError": "invalid point: not on curve", "Name": "bls_g2add_point_not_on_curve" }, { "Input": "000000000000000000000000000000001c4bb49d2a0ef12b7123acdd7110bd292b5bc659edc54dc21b81de057194c79b2a5803255959bbef8e7f56c8c12168630000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2add_invalid_field_element" }, { "Input": "10000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "ExpectedError": "invalid field element top bytes", "Name": "bls_g2add_violate_top_bytes" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-map_fp2_to_G2_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_mapg2_empty_input" }, { "Input": "0000000000000000000000000000000007355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa31714e09ea0ded3a078b526bed3307f804d4b93b040000000000000000000000000000000002829ce3c021339ccb5caf3e187f6370e1e2a311dec9b75363117063ab2015603ff52c3d3b98f19c2f65575e99e8b7", "ExpectedError": "invalid input length", "Name": "bls_mapg2_short_input" }, { "Input": "000000000000000000000000000000000007355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa31714e09ea0ded3a078b526bed3307f804d4b93b040000000000000000000000000000000002829ce3c021339ccb5caf3e187f6370e1e2a311dec9b75363117063ab2015603ff52c3d3b98f19c2f65575e99e8b78c", "ExpectedError": "invalid input length", "Name": "bls_mapg2_long_input" }, { "Input": "000000000000000000000000000000000007355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa31714e09ea0ded3a078b526bed3307f804d4b93b040000000000000000000000000000000002829ce3c021339ccb5caf3e187f6370e1e2a311dec9b75363117063ab2015603ff52c3d3b98f19c2f65575e99e8b7", "ExpectedError": "invalid field element top bytes", "Name": "bls_mapg2_top_bytes" }, { "Input": "0000000000000000000000000000000021366f100476ce8d3be6cfc90d59fe13349e388ed12b6dd6dc31ccd267ff000e2c993a063ca66beced06f804d4b8e5af0000000000000000000000000000000002829ce3c021339ccb5caf3e187f6370e1e2a311dec9b75363117063ab2015603ff52c3d3b98f19c2f65575e99e8b78c", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_mapg2_invalid_fq_element" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-map_fp_to_G1_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_mapg1_empty_input" }, { "Input": "00000000000000000000000000000000156c8a6a2c184569d69a76be144b5cdc5141d2d2ca4fe341f011e25e3969c55ad9e9b9ce2eb833c81a908e5fa4ac5f", "ExpectedError": "invalid input length", "Name": "bls_mapg1_short_input" }, { "Input": "0000000000000000000000000000000000156c8a6a2c184569d69a76be144b5cdc5141d2d2ca4fe341f011e25e3969c55ad9e9b9ce2eb833c81a908e5fa4ac5f03", "ExpectedError": "invalid input length", "Name": "bls_mapg1_large_input" }, { "Input": "1000000000000000000000000000000000156c8a6a2c184569d69a76be144b5cdc5141d2d2ca4fe341f011e25e3969c55ad9e9b9ce2eb833c81a908e5fa4ac5f", "ExpectedError": "invalid field element top bytes", "Name": "bls_mapg1_top_bytes" }, { "Input": "000000000000000000000000000000002f6d9c5465982c0421b61e74579709b3b5b91e57bdd4f6015742b4ff301abb7ef895b9cce00c33c7d48f8e5fa4ac09ae", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_invalid_fq_element" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-msm_G1_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_g1msm_empty_input" }, { "Input": "00000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g1msm_short_input" }, { "Input": "000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g1msm_long_input" }, { "Input": "0000000000000000000000000000000031f2e5916b17be2e71b10b4292f558e727dfd7d48af9cbc5087f0ce00dcca27c8b01e83eaace1aefb539f00adb2271660000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g1msm_invalid_field_element" }, { "Input": "1000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid field element top bytes", "Name": "bls_g1msm_violate_top_bytes" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid point: not on curve", "Name": "bls_g1msm_point_not_on_curve" }, { "Input": "000000000000000000000000000000000123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000000000000000000000000000000193fb7cedb32b2c3adc06ec11a96bc0d661869316f5e4a577a9f7c179593987beb4fb2ee424dbb2f5dd891e228b46c4a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "g1 point is not in the correct subgroup", "Name": "bls_g1msm_g1_not_in_correct_subgroup" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-msm_G2_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_g2msm_empty_input" }, { "Input": "000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g2msm_short_input" }, { "Input": "0000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g2msm_long_input" }, { "Input": "10000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid field element top bytes", "Name": "bls_g2msm_violate_top_bytes" }, { "Input": "000000000000000000000000000000001c4bb49d2a0ef12b7123acdd7110bd292b5bc659edc54dc21b81de057194c79b2a5803255959bbef8e7f56c8c12168630000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2msm_invalid_field_element" }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb800000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid point: not on curve", "Name": "bls_g2msm_point_not_on_curve" }, { "Input": "00000000000000000000000000000000197bfd0342bbc8bee2beced2f173e1a87be576379b343e93232d6cef98d84b1d696e5612ff283ce2cfdccb2cfb65fa0c00000000000000000000000000000000184e811f55e6f9d84d77d2f79102fd7ea7422f4759df5bf7f6331d550245e3f1bcf6a30e3b29110d85e0ca16f9f6ae7a000000000000000000000000000000000f10e1eb3c1e53d2ad9cf2d398b2dc22c5842fab0a74b174f691a7e914975da3564d835cd7d2982815b8ac57f507348f000000000000000000000000000000000767d1c453890f1b9110fda82f5815c27281aba3f026ee868e4176a0654feea41a96575e0c4d58a14dbfbcc05b5010b1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "g2 point is not in the correct subgroup", "Name": "bls_pairing_g2_not_in_correct_subgroup" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-mul_G1_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_g1mul_empty_input" }, { "Input": "00000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g1mul_short_input" }, { "Input": "000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g1mul_large_input" }, { "Input": "0000000000000000000000000000000031f2e5916b17be2e71b10b4292f558e727dfd7d48af9cbc5087f0ce00dcca27c8b01e83eaace1aefb539f00adb2271660000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g1mul_invalid_field_element" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid point: not on curve", "Name": "bls_g1mul_point_not_on_curve" }, { "Input": "1000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid field element top bytes", "Name": "bls_g1mul_violate_top_bytes" }, { "Input": "000000000000000000000000000000000123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000000000000000000000000000000193fb7cedb32b2c3adc06ec11a96bc0d661869316f5e4a577a9f7c179593987beb4fb2ee424dbb2f5dd891e228b46c4a0000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "g1 point is not in the correct subgroup", "Name": "bls_g1mul_g1_not_in_correct_subgroup" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-mul_G2_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_g2mul_empty_input" }, { "Input": "000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g2mul_short_input" }, { "Input": "0000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid input length", "Name": "bls_g2mul_large_input" }, { "Input": "000000000000000000000000000000001c4bb49d2a0ef12b7123acdd7110bd292b5bc659edc54dc21b81de057194c79b2a5803255959bbef8e7f56c8c12168630000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2mul_invalid_field_element" }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb800000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid point: not on curve", "Name": "bls_g2mul_point_not_on_curve" }, { "Input": "10000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "invalid field element top bytes", "Name": "bls_g2mul_violate_top_bytes" }, { "Input": "00000000000000000000000000000000197bfd0342bbc8bee2beced2f173e1a87be576379b343e93232d6cef98d84b1d696e5612ff283ce2cfdccb2cfb65fa0c00000000000000000000000000000000184e811f55e6f9d84d77d2f79102fd7ea7422f4759df5bf7f6331d550245e3f1bcf6a30e3b29110d85e0ca16f9f6ae7a000000000000000000000000000000000f10e1eb3c1e53d2ad9cf2d398b2dc22c5842fab0a74b174f691a7e914975da3564d835cd7d2982815b8ac57f507348f000000000000000000000000000000000767d1c453890f1b9110fda82f5815c27281aba3f026ee868e4176a0654feea41a96575e0c4d58a14dbfbcc05b5010b10000000000000000000000000000000000000000000000000000000000000002", "ExpectedError": "g2 point is not in the correct subgroup", "Name": "bls_g2mul_g2_not_in_correct_subgroup" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/fail-pairing_check_bls.json ================================================ [ { "Input": "", "ExpectedError": "invalid input length", "Name": "bls_pairing_empty_input" }, { "Input": "00000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid input length", "Name": "bls_pairing_missing_data" }, { "Input": "000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid input length", "Name": "bls_pairing_extra_data" }, { "Input": "1000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid field element top bytes", "Name": "bls_pairing_top_bytes" }, { "Input": "000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(G1_field_element_equal_to_modulus,G2)" }, { "Input": "0000000000000000000000000000000031f2e5916b17be2e71b10b4292f558e727dfd7d48af9cbc5087f0ce00dcca27c8b01e83eaace1aefb539f00adb2271660000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(G1_invalid_field_element,0)" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4bb49d2a0ef12b7123acdd7110bd292b5bc659edc54dc21b81de057194c79b2a5803255959bbef8e7f56c8c12168630000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(0,G2_invalid_field_element)" }, { "Input": "0000000000000000000000000000000031f2e5916b17be2e71b10b4292f558e727dfd7d48af9cbc5087f0ce00dcca27c8b01e83eaace1aefb539f00adb2271660000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(G1_invalid_field_element,G2)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000001c4bb49d2a0ef12b7123acdd7110bd292b5bc659edc54dc21b81de057194c79b2a5803255959bbef8e7f56c8c12168630000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(G1,G2_invalid_field_element)" }, { "Input": "0000000000000000000000000000000031f2e5916b17be2e71b10b4292f558e727dfd7d48af9cbc5087f0ce00dcca27c8b01e83eaace1aefb539f00adb2271660000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(G1_invalid_field_element,-G2)=e(-G1,G2)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000001c4bb49d2a0ef12b7123acdd7110bd292b5bc659edc54dc21b81de057194c79b2a5803255959bbef8e7f56c8c12168630000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_e(G1,G2_invalid_field_element)=e(-G1,G2)" }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca94260000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_e(G1_not_on_curve,0)" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f270000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_e(0,G2_not_on_curve)" }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca94260000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_e(G1_not_on_curve,G2)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f270000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_e(G1,G2_not_on_curve)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_e(G1_not_on_curve,-G2)=e(-G1,G2)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb800000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_e(G1,G2_not_on_curve)=e(-G1,G2)" }, { "Input": "000000000000000000000000000000000123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000000000000000000000000000000193fb7cedb32b2c3adc06ec11a96bc0d661869316f5e4a577a9f7c179593987beb4fb2ee424dbb2f5dd891e228b46c4a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ExpectedError": "g1 point is not in the correct subgroup", "Name": "bls_pairing_e(G1_not_in_correct_subgroup,0)" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000197bfd0342bbc8bee2beced2f173e1a87be576379b343e93232d6cef98d84b1d696e5612ff283ce2cfdccb2cfb65fa0c00000000000000000000000000000000184e811f55e6f9d84d77d2f79102fd7ea7422f4759df5bf7f6331d550245e3f1bcf6a30e3b29110d85e0ca16f9f6ae7a000000000000000000000000000000000f10e1eb3c1e53d2ad9cf2d398b2dc22c5842fab0a74b174f691a7e914975da3564d835cd7d2982815b8ac57f507348f000000000000000000000000000000000767d1c453890f1b9110fda82f5815c27281aba3f026ee868e4176a0654feea41a96575e0c4d58a14dbfbcc05b5010b1", "ExpectedError": "g2 point is not in the correct subgroup", "Name": "bls_pairing_e(0,G2_not_in_correct_subgroup)" }, { "Input": "000000000000000000000000000000000123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000000000000000000000000000000193fb7cedb32b2c3adc06ec11a96bc0d661869316f5e4a577a9f7c179593987beb4fb2ee424dbb2f5dd891e228b46c4a00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "ExpectedError": "g1 point is not in the correct subgroup", "Name": "bls_pairing_e(G1_not_in_correct_subgroup,G2)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000197bfd0342bbc8bee2beced2f173e1a87be576379b343e93232d6cef98d84b1d696e5612ff283ce2cfdccb2cfb65fa0c00000000000000000000000000000000184e811f55e6f9d84d77d2f79102fd7ea7422f4759df5bf7f6331d550245e3f1bcf6a30e3b29110d85e0ca16f9f6ae7a000000000000000000000000000000000f10e1eb3c1e53d2ad9cf2d398b2dc22c5842fab0a74b174f691a7e914975da3564d835cd7d2982815b8ac57f507348f000000000000000000000000000000000767d1c453890f1b9110fda82f5815c27281aba3f026ee868e4176a0654feea41a96575e0c4d58a14dbfbcc05b5010b1", "ExpectedError": "g2 point is not in the correct subgroup", "Name": "bls_pairing_e(G1,G2_not_in_correct_subgroup)" }, { "Input": "000000000000000000000000000000000123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000000000000000000000000000000193fb7cedb32b2c3adc06ec11a96bc0d661869316f5e4a577a9f7c179593987beb4fb2ee424dbb2f5dd891e228b46c4a00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "g1 point is not in the correct subgroup", "Name": "bls_pairing_e(G1_not_in_correct_subgroup,-G2)=e(-G1,G2)" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000197bfd0342bbc8bee2beced2f173e1a87be576379b343e93232d6cef98d84b1d696e5612ff283ce2cfdccb2cfb65fa0c00000000000000000000000000000000184e811f55e6f9d84d77d2f79102fd7ea7422f4759df5bf7f6331d550245e3f1bcf6a30e3b29110d85e0ca16f9f6ae7a000000000000000000000000000000000f10e1eb3c1e53d2ad9cf2d398b2dc22c5842fab0a74b174f691a7e914975da3564d835cd7d2982815b8ac57f507348f000000000000000000000000000000000767d1c453890f1b9110fda82f5815c27281aba3f026ee868e4176a0654feea41a96575e0c4d58a14dbfbcc05b5010b10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "ExpectedError": "g2 point is not in the correct subgroup", "Name": "bls_pairing_e(G1,G2_not_in_correct_subgroup)=e(-G1,G2)" } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/map_fp2_to_G2_bls.json ================================================ [ { "Input": "0000000000000000000000000000000007355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa31714e09ea0ded3a078b526bed3307f804d4b93b040000000000000000000000000000000002829ce3c021339ccb5caf3e187f6370e1e2a311dec9b75363117063ab2015603ff52c3d3b98f19c2f65575e99e8b78c", "Name": "bls_g2map_", "Expected": "0000000000000000000000000000000000e7f4568a82b4b7dc1f14c6aaa055edf51502319c723c4dc2688c7fe5944c213f510328082396515734b6612c4e7bb700000000000000000000000000000000126b855e9e69b1f691f816e48ac6977664d24d99f8724868a184186469ddfd4617367e94527d4b74fc86413483afb35b000000000000000000000000000000000caead0fd7b6176c01436833c79d305c78be307da5f6af6c133c47311def6ff1e0babf57a0fb5539fce7ee12407b0a42000000000000000000000000000000001498aadcf7ae2b345243e281ae076df6de84455d766ab6fcdaad71fab60abb2e8b980a440043cd305db09d283c895e3d", "Gas": 23800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000138879a9559e24cecee8697b8b4ad32cced053138ab913b99872772dc753a2967ed50aabc907937aefb2439ba06cc50c000000000000000000000000000000000a1ae7999ea9bab1dcc9ef8887a6cb6e8f1e22566015428d220b7eec90ffa70ad1f624018a9ad11e78d588bd3617f9f2", "Name": "bls_g2map_616263", "Expected": "00000000000000000000000000000000108ed59fd9fae381abfd1d6bce2fd2fa220990f0f837fa30e0f27914ed6e1454db0d1ee957b219f61da6ff8be0d6441f000000000000000000000000000000000296238ea82c6d4adb3c838ee3cb2346049c90b96d602d7bb1b469b905c9228be25c627bffee872def773d5b2a2eb57d00000000000000000000000000000000033f90f6057aadacae7963b0a0b379dd46750c1c94a6357c99b65f63b79e321ff50fe3053330911c56b6ceea08fee65600000000000000000000000000000000153606c417e59fb331b7ae6bce4fbf7c5190c33ce9402b5ebe2b70e44fca614f3f1382a3625ed5493843d0b0a652fc3f", "Gas": 23800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018c16fe362b7dbdfa102e42bdfd3e2f4e6191d479437a59db4eb716986bf08ee1f42634db66bde97d6c16bbfd342b3b8000000000000000000000000000000000e37812ce1b146d998d5f92bdd5ada2a31bfd63dfe18311aa91637b5f279dd045763166aa1615e46a50d8d8f475f184e", "Name": "bls_g2map_6162636465663031", "Expected": "00000000000000000000000000000000038af300ef34c7759a6caaa4e69363cafeed218a1f207e93b2c70d91a1263d375d6730bd6b6509dcac3ba5b567e85bf3000000000000000000000000000000000da75be60fb6aa0e9e3143e40c42796edf15685cafe0279afd2a67c3dff1c82341f17effd402e4f1af240ea90f4b659b0000000000000000000000000000000019b148cbdf163cf0894f29660d2e7bfb2b68e37d54cc83fd4e6e62c020eaa48709302ef8e746736c0e19342cc1ce3df4000000000000000000000000000000000492f4fed741b073e5a82580f7c663f9b79e036b70ab3e51162359cec4e77c78086fe879b65ca7a47d34374c8315ac5e", "Gas": 23800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008d4a0997b9d52fecf99427abb721f0fa779479963315fe21c6445250de7183e3f63bfdf86570da8929489e421d4ee950000000000000000000000000000000016cb4ccad91ec95aab070f22043916cd6a59c4ca94097f7f510043d48515526dc8eaaea27e586f09151ae613688d5a89", "Name": "bls_g2map_713132385f717171", "Expected": "000000000000000000000000000000000c5ae723be00e6c3f0efe184fdc0702b64588fe77dda152ab13099a3bacd3876767fa7bbad6d6fd90b3642e902b208f90000000000000000000000000000000012c8c05c1d5fc7bfa847f4d7d81e294e66b9a78bc9953990c358945e1f042eedafce608b67fdd3ab0cb2e6e263b9b1ad0000000000000000000000000000000004e77ddb3ede41b5ec4396b7421dd916efc68a358a0d7425bddd253547f2fb4830522358491827265dfc5bcc1928a5690000000000000000000000000000000011c624c56dbe154d759d021eec60fab3d8b852395a89de497e48504366feedd4662d023af447d66926a28076813dd646", "Gas": 23800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003f80ce4ff0ca2f576d797a3660e3f65b274285c054feccc3215c879e2c0589d376e83ede13f93c32f05da0f68fd6a1000000000000000000000000000000000006488a837c5413746d868d1efb7232724da10eca410b07d8b505b9363bdccf0a1fc0029bad07d65b15ccfe6dd25e20d", "Name": "bls_g2map_613531325f616161", "Expected": "000000000000000000000000000000000ea4e7c33d43e17cc516a72f76437c4bf81d8f4eac69ac355d3bf9b71b8138d55dc10fd458be115afa798b55dac34be1000000000000000000000000000000001565c2f625032d232f13121d3cfb476f45275c303a037faa255f9da62000c2c864ea881e2bcddd111edc4a3c0da3e88d00000000000000000000000000000000043b6f5fe4e52c839148dc66f2b3751e69a0f6ebb3d056d6465d50d4108543ecd956e10fa1640dfd9bc0030cc2558d28000000000000000000000000000000000f8991d2a1ad662e7b6f58ab787947f1fa607fce12dde171bc17903b012091b657e15333e11701edcf5b63ba2a561247", "Gas": 23800, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/map_fp_to_G1_bls.json ================================================ [ { "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 } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/msm_G1_bls.json ================================================ [ { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g1msm_(g1+g1=2*g1)", "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g1msm_(p1+p1=2*p1)", "Expected": "0000000000000000000000000000000015222cddbabdd764c4bee0b3720322a65ff4712c86fc4b1588d0c209210a0884fa9468e855d261c483091b2bf7de6a630000000000000000000000000000000009f9edb99bc3b75d7489735c98b16ab78b9386c5f7a1f76c7e96ac6eb5bbde30dbca31a74ec6e0f0b12229eecea33c39", "Gas": 12000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_g1msm_(1*g1=g1)", "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_g1msm_(1*p1=p1)", "Expected": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", "Gas": 12000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_(0*g1=inf)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_(0*p1=inf)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", "Name": "bls_g1msm_(x*inf=inf)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 12000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_(2g1+inf)", "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", "Gas": 22776, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_(inf+inf)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22776, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g1msm_(2g1+2p1)", "Expected": "00000000000000000000000000000000148f92dced907361b4782ab542a75281d4b6f71f65c8abf94a5a9082388c64662d30fd6a01ced724feef3e284752038c0000000000000000000000000000000015c3634c3b67bc18e19150e12bfd8a1769306ed010f59be645a0823acb5b38f39e8e0d86e59b6353fdafc59ca971b769", "Gas": 22776, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e300000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2147b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff66513800000000000000000000000000000000184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea81d1834e192c426074b02ed3dca4e7676ce4ce48ba0000000000000000000000000000000004407b8d35af4dacc809927071fc0405218f1401a6d15af775810e4e460064bcc9468beeba82fdc751be70476c888bf3328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d21600000000000000000000000000000000009769f3ab59bfd551d53a5f846b9984c59b97d6842b20a2c565baa167945e3d026a3755b6345df8ec7e6acb6868ae6d000000000000000000000000000000001532c00cf61aa3d0ce3e5aa20c3b531a2abd2c770a790a2613818303c6b830ffc0ecf6c357af3317b9575c567f11cd2c263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e2000000000000000000000000000000001974dbb8e6b5d20b84df7e625e2fbfecb2cdb5f77d5eae5fb2955e5ce7313cae8364bc2fff520a6c25619739c6bdcb6a0000000000000000000000000000000015f9897e11c6441eaa676de141c8d83c37aab8667173cbe1dfd6de74d11861b961dccebcd9d289ac633455dfcc7013a347b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665131000000000000000000000000000000000a7a047c4a8397b3446450642c2ac64d7239b61872c9ae7a59707a8f4f950f101e766afe58223b3bff3a19a7f754027c000000000000000000000000000000001383aebba1e4327ccff7cf9912bda0dbc77de048b71ef8c8a81111d71dc33c5e3aa6edee9cf6f5fe525d50cc50b77cc9328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d211000000000000000000000000000000000e7a16a975904f131682edbb03d9560d3e48214c9986bd50417a77108d13dc957500edf96462a3d01e62dc6cd468ef11000000000000000000000000000000000ae89e677711d05c30a48d6d75e76ca9fb70fe06c6dd6ff988683d89ccde29ac7d46c53bb97a59b1901abf1db66052db55b53c4669f19f0fc7431929bc0363d7d8fb432435fcde2635fdba334424e9f5", "Name": "bls_g1msm_multiple", "Expected": "00000000000000000000000000000000053fbdb09b6b5faa08bfe7b7069454247ad4d8bd57e90e2d2ebaa04003dcf110aa83072c07f480ab2107cca2ccff6091000000000000000000000000000000001654537b7c96fe64d13906066679c3d45808cb666452b55d1b909c230cc4b423c3f932c58754b9b762dc49fcc825522c", "Gas": 61992, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e19a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g1msm_random*g1_unnormalized_scalar", "Expected": "000000000000000000000000000000000491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a0000000000000000000000000000000017cd7061575d3e8034fcea62adaa1a3bc38dca4b50e4c5c01d04dd78037c9cee914e17944ea99e7ad84278e5d49f36c4", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a219a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g1msm_random*p1_unnormalized_scalar", "Expected": "0000000000000000000000000000000006ee9c9331228753bcb148d0ca8623447701bb0aa6eafb0340aa7f81543923474e00f2a225de65c62dd1d8303270220c0000000000000000000000000000000018dd7be47eb4e80985d7a0d2cc96c8b004250b36a5c3ec0217705d453d3ecc6d0d3d1588722da51b40728baba1e93804", "Gas": 12000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e300000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2147b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff66513800000000000000000000000000000000184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea81d1834e192c426074b02ed3dca4e7676ce4ce48ba0000000000000000000000000000000004407b8d35af4dacc809927071fc0405218f1401a6d15af775810e4e460064bcc9468beeba82fdc751be70476c888bf3328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d21600000000000000000000000000000000009769f3ab59bfd551d53a5f846b9984c59b97d6842b20a2c565baa167945e3d026a3755b6345df8ec7e6acb6868ae6d000000000000000000000000000000001532c00cf61aa3d0ce3e5aa20c3b531a2abd2c770a790a2613818303c6b830ffc0ecf6c357af3317b9575c567f11cd2c263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e2000000000000000000000000000000001974dbb8e6b5d20b84df7e625e2fbfecb2cdb5f77d5eae5fb2955e5ce7313cae8364bc2fff520a6c25619739c6bdcb6a0000000000000000000000000000000015f9897e11c6441eaa676de141c8d83c37aab8667173cbe1dfd6de74d11861b961dccebcd9d289ac633455dfcc7013a347b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665131000000000000000000000000000000000a7a047c4a8397b3446450642c2ac64d7239b61872c9ae7a59707a8f4f950f101e766afe58223b3bff3a19a7f754027c000000000000000000000000000000001383aebba1e4327ccff7cf9912bda0dbc77de048b71ef8c8a81111d71dc33c5e3aa6edee9cf6f5fe525d50cc50b77cc9328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d21100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7a16a975904f131682edbb03d9560d3e48214c9986bd50417a77108d13dc957500edf96462a3d01e62dc6cd468ef11000000000000000000000000000000000ae89e677711d05c30a48d6d75e76ca9fb70fe06c6dd6ff988683d89ccde29ac7d46c53bb97a59b1901abf1db66052db55b53c4669f19f0fc7431929bc0363d7d8fb432435fcde2635fdba334424e9f5", "Name": "bls_g1msm_multiple_with_point_at_infinity", "Expected": "00000000000000000000000000000000053fbdb09b6b5faa08bfe7b7069454247ad4d8bd57e90e2d2ebaa04003dcf110aa83072c07f480ab2107cca2ccff6091000000000000000000000000000000001654537b7c96fe64d13906066679c3d45808cb666452b55d1b909c230cc4b423c3f932c58754b9b762dc49fcc825522c", "Gas": 69888, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_1", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 12000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_2", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22776, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_3", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 30528, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_4", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 38256, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_5", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 45840, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_6", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 54000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_7", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 61992, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_8", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 69888, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_9", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 77652, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_10", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 85440, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_11", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 93060, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_12", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 100512, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_13", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 107952, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_14", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 115416, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_15", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 122760, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_16", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 129984, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_17", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 137292, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_18", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 144504, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_19", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 151620, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_20", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 158640, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_21", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 165816, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_22", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 172656, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_23", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 179676, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_24", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 186624, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_25", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 193500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_26", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 200304, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_27", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 207360, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_28", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 214032, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_29", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 220980, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_30", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 227520, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_31", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 234360, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_32", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 240768, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_33", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 247500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_34", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 254184, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_35", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 260820, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_36", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 267408, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_37", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 273948, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_38", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 280440, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_39", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 286884, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_40", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 293280, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_41", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 299628, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_42", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 306432, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_43", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 312696, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_44", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 318912, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_45", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 325620, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_46", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 331752, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_47", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 337836, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_48", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 344448, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_49", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 350448, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_50", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 357000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_51", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 362916, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_52", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 369408, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_53", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 375876, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_54", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 381672, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_55", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 388080, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_56", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 393792, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_57", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 400140, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_58", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 406464, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_59", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 412056, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_60", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 418320, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_61", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 424560, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_62", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 430776, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_63", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 436212, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_64", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 442368, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_65", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 448500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_66", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 454608, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_67", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 460692, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_68", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 466752, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_69", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 471960, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_70", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 477960, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_71", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 483936, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_72", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 489888, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_73", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 495816, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_74", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 501720, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_75", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 507600, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_76", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 513456, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_77", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 519288, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_78", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 525096, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_79", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 530880, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_80", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 536640, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_81", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 542376, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_82", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 548088, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_83", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 553776, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_84", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 559440, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_85", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 565080, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_86", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 570696, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_87", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 576288, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_88", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 581856, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_89", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 587400, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_90", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 592920, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_91", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 598416, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_92", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 603888, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_93", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 610452, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_94", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 615888, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_95", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 621300, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_96", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 626688, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_97", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 632052, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_98", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 637392, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_99", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 642708, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_100", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 648000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_101", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 654480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_102", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 659736, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_103", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 664968, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_104", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 670176, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_105", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 675360, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_106", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 681792, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_107", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 686940, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_108", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 692064, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_109", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 697164, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_110", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 702240, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_111", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 708624, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_112", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 713664, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_113", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 718680, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_114", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 723672, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_115", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 728640, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_116", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 734976, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_117", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 739908, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_118", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 744816, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_119", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 749700, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_120", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 756000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_121", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 760848, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_122", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 765672, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_123", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 770472, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_124", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 776736, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_125", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 781500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_126", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 786240, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_127", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 792480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_128", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 797184, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_129", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 803412, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_130", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 809640, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_131", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 815868, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_132", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 822096, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_133", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 828324, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_134", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 834552, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_135", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 840780, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_136", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 847008, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_137", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 853236, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_138", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 859464, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_139", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 865692, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_140", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 871920, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_141", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 878148, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_142", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 884376, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_143", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 890604, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_144", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 896832, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_145", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 903060, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_146", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 909288, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_147", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 915516, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_148", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 921744, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_discount_table_149", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 927972, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/msm_G2_bls.json ================================================ [ { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2msm_(g2+g2=2*g2)", "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2msm_(p2+p2=2*p2)", "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_g2msm_(1*g2=g2)", "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_g2msm_(1*p2=p2)", "Expected": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_(0*g2=inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_(0*p2=inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", "Name": "bls_g2msm_(x*inf=inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2msm_(2g2+inf)", "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2msm_(2p2+inf)", "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1msm_(inf+inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2msm_(2g2+2p2)", "Expected": "00000000000000000000000000000000009cc9ed6635623ba19b340cbc1b0eb05c3a58770623986bb7e041645175b0a38d663d929afb9a949f7524656043bccc000000000000000000000000000000000c0fb19d3f083fd5641d22a861a11979da258003f888c59c33005cb4a2df4df9e5a2868832063ac289dfa3e997f21f8a00000000000000000000000000000000168bf7d87cef37cf1707849e0a6708cb856846f5392d205ae7418dd94d94ef6c8aa5b424af2e99d957567654b9dae1d90000000000000000000000000000000017e0fa3c3b2665d52c26c7d4cea9f35443f4f9007840384163d3aa3c7d4d18b21b65ff4380cf3f3b48e94b5eecb221dd", "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e300000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845147b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff66513800000000000000000000000000000000108ed59fd9fae381abfd1d6bce2fd2fa220990f0f837fa30e0f27914ed6e1454db0d1ee957b219f61da6ff8be0d6441f000000000000000000000000000000000296238ea82c6d4adb3c838ee3cb2346049c90b96d602d7bb1b469b905c9228be25c627bffee872def773d5b2a2eb57d00000000000000000000000000000000033f90f6057aadacae7963b0a0b379dd46750c1c94a6357c99b65f63b79e321ff50fe3053330911c56b6ceea08fee65600000000000000000000000000000000153606c417e59fb331b7ae6bce4fbf7c5190c33ce9402b5ebe2b70e44fca614f3f1382a3625ed5493843d0b0a652fc3f328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d21600000000000000000000000000000000038af300ef34c7759a6caaa4e69363cafeed218a1f207e93b2c70d91a1263d375d6730bd6b6509dcac3ba5b567e85bf3000000000000000000000000000000000da75be60fb6aa0e9e3143e40c42796edf15685cafe0279afd2a67c3dff1c82341f17effd402e4f1af240ea90f4b659b0000000000000000000000000000000019b148cbdf163cf0894f29660d2e7bfb2b68e37d54cc83fd4e6e62c020eaa48709302ef8e746736c0e19342cc1ce3df4000000000000000000000000000000000492f4fed741b073e5a82580f7c663f9b79e036b70ab3e51162359cec4e77c78086fe879b65ca7a47d34374c8315ac5e263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e2000000000000000000000000000000000c5ae723be00e6c3f0efe184fdc0702b64588fe77dda152ab13099a3bacd3876767fa7bbad6d6fd90b3642e902b208f90000000000000000000000000000000012c8c05c1d5fc7bfa847f4d7d81e294e66b9a78bc9953990c358945e1f042eedafce608b67fdd3ab0cb2e6e263b9b1ad0000000000000000000000000000000004e77ddb3ede41b5ec4396b7421dd916efc68a358a0d7425bddd253547f2fb4830522358491827265dfc5bcc1928a5690000000000000000000000000000000011c624c56dbe154d759d021eec60fab3d8b852395a89de497e48504366feedd4662d023af447d66926a28076813dd64647b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665131000000000000000000000000000000000ea4e7c33d43e17cc516a72f76437c4bf81d8f4eac69ac355d3bf9b71b8138d55dc10fd458be115afa798b55dac34be1000000000000000000000000000000001565c2f625032d232f13121d3cfb476f45275c303a037faa255f9da62000c2c864ea881e2bcddd111edc4a3c0da3e88d00000000000000000000000000000000043b6f5fe4e52c839148dc66f2b3751e69a0f6ebb3d056d6465d50d4108543ecd956e10fa1640dfd9bc0030cc2558d28000000000000000000000000000000000f8991d2a1ad662e7b6f58ab787947f1fa607fce12dde171bc17903b012091b657e15333e11701edcf5b63ba2a561247328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d211", "Name": "bls_g2msm_multiple", "Expected": "0000000000000000000000000000000016cf5fd2c2f1b2e01cc48a6d03e8e6d7f3ad754d6c7d4000f806c18c28d8d559cf529dd159c74946a7713d1906894718000000000000000000000000000000000628d42142df8d620d1f3709ac01f382ba950eaf14c12863885af5838067deec4bb363ffda427fcbdd2b8ec6cc5784ae0000000000000000000000000000000018168dec2441ef462e9a769c782f81acdc7fa49dffebb996764ba9fa96b9200ceb5edd9e96b33c383bd042b4e6af191a000000000000000000000000000000001065aaea2c4aa1d2bee7f1e82a2138ae7016dbbade8383ad912d81eca5fb260086238f95f8cef8f2f491969d4cefa2c3", "Gas": 112320, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be9a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g2msm_random*g2_unnormalized_scalar", "Expected": "0000000000000000000000000000000014856c22d8cdb2967c720e963eedc999e738373b14172f06fc915769d3cc5ab7ae0a1b9c38f48b5585fb09d4bd2733bb000000000000000000000000000000000c400b70f6f8cd35648f5c126cce5417f3be4d8eefbd42ceb4286a14df7e03135313fe5845e3a575faab3e8b949d248800000000000000000000000000000000149a0aacc34beba2beb2f2a19a440166e76e373194714f108e4ab1c3fd331e80f4e73e6b9ea65fe3ec96d7136de81544000000000000000000000000000000000e4622fef26bdb9b1e8ef6591a7cc99f5b73164500c1ee224b6a761e676b8799b09a3fd4fa7e242645cc1a34708285e4", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784519a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g2msm_random*p2_unnormalized_scalar", "Expected": "00000000000000000000000000000000036074dcbbd0e987531bfe0e45ddfbe09fd015665990ee0c352e8e403fe6af971d8f42141970d9ab14b4dd04874409e600000000000000000000000000000000019705637f24ba2f398f32c3a3e20d6a1cd0fd63e6f8f071cf603a8334f255744927e7bfdfdb18519e019c49ff6e914500000000000000000000000000000000008e74fcff4c4278c9accfb60809ed69bbcbe3d6213ef2304e078d15ec7d6decb4f462b24b8e7cc38cc11b6f2c9e0486000000000000000000000000000000001331d40100f38c1070afd832445881b47cf4d63894666d9907c85ac66604aab5ad329980938cc3c167ccc5b6bc1b8f30", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e300000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845147b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff66513800000000000000000000000000000000108ed59fd9fae381abfd1d6bce2fd2fa220990f0f837fa30e0f27914ed6e1454db0d1ee957b219f61da6ff8be0d6441f000000000000000000000000000000000296238ea82c6d4adb3c838ee3cb2346049c90b96d602d7bb1b469b905c9228be25c627bffee872def773d5b2a2eb57d00000000000000000000000000000000033f90f6057aadacae7963b0a0b379dd46750c1c94a6357c99b65f63b79e321ff50fe3053330911c56b6ceea08fee65600000000000000000000000000000000153606c417e59fb331b7ae6bce4fbf7c5190c33ce9402b5ebe2b70e44fca614f3f1382a3625ed5493843d0b0a652fc3f328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d21600000000000000000000000000000000038af300ef34c7759a6caaa4e69363cafeed218a1f207e93b2c70d91a1263d375d6730bd6b6509dcac3ba5b567e85bf3000000000000000000000000000000000da75be60fb6aa0e9e3143e40c42796edf15685cafe0279afd2a67c3dff1c82341f17effd402e4f1af240ea90f4b659b0000000000000000000000000000000019b148cbdf163cf0894f29660d2e7bfb2b68e37d54cc83fd4e6e62c020eaa48709302ef8e746736c0e19342cc1ce3df4000000000000000000000000000000000492f4fed741b073e5a82580f7c663f9b79e036b70ab3e51162359cec4e77c78086fe879b65ca7a47d34374c8315ac5e263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e2000000000000000000000000000000000c5ae723be00e6c3f0efe184fdc0702b64588fe77dda152ab13099a3bacd3876767fa7bbad6d6fd90b3642e902b208f90000000000000000000000000000000012c8c05c1d5fc7bfa847f4d7d81e294e66b9a78bc9953990c358945e1f042eedafce608b67fdd3ab0cb2e6e263b9b1ad0000000000000000000000000000000004e77ddb3ede41b5ec4396b7421dd916efc68a358a0d7425bddd253547f2fb4830522358491827265dfc5bcc1928a5690000000000000000000000000000000011c624c56dbe154d759d021eec60fab3d8b852395a89de497e48504366feedd4662d023af447d66926a28076813dd64647b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea4e7c33d43e17cc516a72f76437c4bf81d8f4eac69ac355d3bf9b71b8138d55dc10fd458be115afa798b55dac34be1000000000000000000000000000000001565c2f625032d232f13121d3cfb476f45275c303a037faa255f9da62000c2c864ea881e2bcddd111edc4a3c0da3e88d00000000000000000000000000000000043b6f5fe4e52c839148dc66f2b3751e69a0f6ebb3d056d6465d50d4108543ecd956e10fa1640dfd9bc0030cc2558d28000000000000000000000000000000000f8991d2a1ad662e7b6f58ab787947f1fa607fce12dde171bc17903b012091b657e15333e11701edcf5b63ba2a561247328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d211", "Name": "bls_g2msm_multiple_with_point_at_infinity", "Expected": "0000000000000000000000000000000016cf5fd2c2f1b2e01cc48a6d03e8e6d7f3ad754d6c7d4000f806c18c28d8d559cf529dd159c74946a7713d1906894718000000000000000000000000000000000628d42142df8d620d1f3709ac01f382ba950eaf14c12863885af5838067deec4bb363ffda427fcbdd2b8ec6cc5784ae0000000000000000000000000000000018168dec2441ef462e9a769c782f81acdc7fa49dffebb996764ba9fa96b9200ceb5edd9e96b33c383bd042b4e6af191a000000000000000000000000000000001065aaea2c4aa1d2bee7f1e82a2138ae7016dbbade8383ad912d81eca5fb260086238f95f8cef8f2f491969d4cefa2c3", "Gas": 127890, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_1", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_2", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_3", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 62302, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_4", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 79560, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_5", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 96187, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_6", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 112320, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_7", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 127890, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_8", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 143280, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_9", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 158355, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_10", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 173250, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_11", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 187852, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_12", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 202230, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_13", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 216450, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_14", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 230580, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_15", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 244350, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_16", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 258120, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_17", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 271957, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_18", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 285120, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_19", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 298822, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_20", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 311850, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_21", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 325080, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_22", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 338085, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_23", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 351382, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_24", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 363960, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_25", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 376875, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_26", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 389610, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_27", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 402772, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_28", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 415170, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_29", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 427387, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_30", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 440100, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_31", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 452677, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_32", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 465120, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_33", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 477427, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_34", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 489600, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_35", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 501637, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_36", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 513540, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_37", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 526140, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_38", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 537795, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_39", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 550192, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_40", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 561600, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_41", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 573795, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_42", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 585900, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_43", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 597915, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_44", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 608850, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_45", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 620662, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_46", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 632385, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_47", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 644017, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_48", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 655560, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_49", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 668115, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_50", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 679500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_51", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 690795, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_52", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 702000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_53", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 713115, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_54", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 725355, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_55", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 736312, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_56", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 747180, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_57", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 759240, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_58", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 769950, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_59", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 781897, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_60", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 792450, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_61", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 804285, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_62", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 814680, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_63", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 826402, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_64", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 838080, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_65", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 848250, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_66", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 859815, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_67", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 871335, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_68", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 881280, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_69", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 892687, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_70", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 904050, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_71", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 915367, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_72", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 925020, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_73", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 936225, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_74", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 947385, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_75", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 958500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_76", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 969570, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_77", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 980595, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_78", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 991575, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_79", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1000732, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_80", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1011600, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_81", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1022422, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_82", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1033200, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_83", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1043932, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_84", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1054620, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_85", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1065262, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_86", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1075860, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_87", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1086412, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_88", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1096920, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_89", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1107382, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_90", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1117800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_91", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1130220, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_92", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1140570, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_93", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1150875, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_94", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1161135, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_95", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1171350, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_96", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1181520, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_97", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1191645, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_98", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1201725, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_99", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1213987, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_100", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1224000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_101", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1233967, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_102", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1243890, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_103", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1253767, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_104", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1265940, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_105", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1275750, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_106", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1285515, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_107", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1295235, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_108", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1304910, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_109", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1316992, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_110", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1326600, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_111", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1336162, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_112", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1348200, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_113", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1357695, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_114", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1367145, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_115", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1376550, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_116", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1388520, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_117", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1397857, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_118", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1407150, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_119", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1419075, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_120", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1428300, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_121", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1437480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_122", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1449360, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_123", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1458472, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_124", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1467540, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_125", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1479375, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_126", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1488375, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_127", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1497330, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_128", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1509120, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_129", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1520910, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_130", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1532700, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_131", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1544490, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_132", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1556280, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_133", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1568070, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_134", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1579860, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_135", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1591650, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_136", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1603440, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_137", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1615230, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_138", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1627020, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_139", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1638810, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_140", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1650600, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_141", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1662390, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_142", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1674180, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_143", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1685970, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_144", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1697760, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_145", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1709550, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_146", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1721340, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_147", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1733130, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_148", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1744920, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2msm_discount_table_149", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 1756710, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/mul_G1_bls.json ================================================ [ { "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 }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3", "Name": "bls_g1mul_random*g1", "Expected": "000000000000000000000000000000000491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a0000000000000000000000000000000017cd7061575d3e8034fcea62adaa1a3bc38dca4b50e4c5c01d04dd78037c9cee914e17944ea99e7ad84278e5d49f36c4", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3", "Name": "bls_g1mul_random*p1", "Expected": "0000000000000000000000000000000006ee9c9331228753bcb148d0ca8623447701bb0aa6eafb0340aa7f81543923474e00f2a225de65c62dd1d8303270220c0000000000000000000000000000000018dd7be47eb4e80985d7a0d2cc96c8b004250b36a5c3ec0217705d453d3ecc6d0d3d1588722da51b40728baba1e93804", "Gas": 12000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e19a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g1mul_random*g1_unnormalized_scalar", "Expected": "000000000000000000000000000000000491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a0000000000000000000000000000000017cd7061575d3e8034fcea62adaa1a3bc38dca4b50e4c5c01d04dd78037c9cee914e17944ea99e7ad84278e5d49f36c4", "Gas": 12000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a219a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g1mul_random*p1_unnormalized_scalar", "Expected": "0000000000000000000000000000000006ee9c9331228753bcb148d0ca8623447701bb0aa6eafb0340aa7f81543923474e00f2a225de65c62dd1d8303270220c0000000000000000000000000000000018dd7be47eb4e80985d7a0d2cc96c8b004250b36a5c3ec0217705d453d3ecc6d0d3d1588722da51b40728baba1e93804", "Gas": 12000, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/mul_G2_bls.json ================================================ [ { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2mul_(g2+g2=2*g2)", "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", "Name": "bls_g2mul_(p2+p2=2*p2)", "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_g2mul_(1*g2=g2)", "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_g2mul_(1*p2=p2)", "Expected": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2mul_(0*g2=inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2mul_(0*p2=inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", "Name": "bls_g2mul_(x*inf=inf)", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3", "Name": "bls_g2mul_random*g2", "Expected": "0000000000000000000000000000000014856c22d8cdb2967c720e963eedc999e738373b14172f06fc915769d3cc5ab7ae0a1b9c38f48b5585fb09d4bd2733bb000000000000000000000000000000000c400b70f6f8cd35648f5c126cce5417f3be4d8eefbd42ceb4286a14df7e03135313fe5845e3a575faab3e8b949d248800000000000000000000000000000000149a0aacc34beba2beb2f2a19a440166e76e373194714f108e4ab1c3fd331e80f4e73e6b9ea65fe3ec96d7136de81544000000000000000000000000000000000e4622fef26bdb9b1e8ef6591a7cc99f5b73164500c1ee224b6a761e676b8799b09a3fd4fa7e242645cc1a34708285e4", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3", "Name": "bls_g2mul_random*p2", "Expected": "00000000000000000000000000000000036074dcbbd0e987531bfe0e45ddfbe09fd015665990ee0c352e8e403fe6af971d8f42141970d9ab14b4dd04874409e600000000000000000000000000000000019705637f24ba2f398f32c3a3e20d6a1cd0fd63e6f8f071cf603a8334f255744927e7bfdfdb18519e019c49ff6e914500000000000000000000000000000000008e74fcff4c4278c9accfb60809ed69bbcbe3d6213ef2304e078d15ec7d6decb4f462b24b8e7cc38cc11b6f2c9e0486000000000000000000000000000000001331d40100f38c1070afd832445881b47cf4d63894666d9907c85ac66604aab5ad329980938cc3c167ccc5b6bc1b8f30", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be9a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g2mul_random*g2_unnormalized_scalar", "Expected": "0000000000000000000000000000000014856c22d8cdb2967c720e963eedc999e738373b14172f06fc915769d3cc5ab7ae0a1b9c38f48b5585fb09d4bd2733bb000000000000000000000000000000000c400b70f6f8cd35648f5c126cce5417f3be4d8eefbd42ceb4286a14df7e03135313fe5845e3a575faab3e8b949d248800000000000000000000000000000000149a0aacc34beba2beb2f2a19a440166e76e373194714f108e4ab1c3fd331e80f4e73e6b9ea65fe3ec96d7136de81544000000000000000000000000000000000e4622fef26bdb9b1e8ef6591a7cc99f5b73164500c1ee224b6a761e676b8799b09a3fd4fa7e242645cc1a34708285e4", "Gas": 22500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784519a2b64cc58f8992cb21237914262ca9ada6cb13dc7b7d3f11c278fe0462040e4", "Name": "bls_g2mul_random*p2_unnormalized_scalar", "Expected": "00000000000000000000000000000000036074dcbbd0e987531bfe0e45ddfbe09fd015665990ee0c352e8e403fe6af971d8f42141970d9ab14b4dd04874409e600000000000000000000000000000000019705637f24ba2f398f32c3a3e20d6a1cd0fd63e6f8f071cf603a8334f255744927e7bfdfdb18519e019c49ff6e914500000000000000000000000000000000008e74fcff4c4278c9accfb60809ed69bbcbe3d6213ef2304e078d15ec7d6decb4f462b24b8e7cc38cc11b6f2c9e0486000000000000000000000000000000001331d40100f38c1070afd832445881b47cf4d63894666d9907c85ac66604aab5ad329980938cc3c167ccc5b6bc1b8f30", "Gas": 22500, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/pairing_check_bls.json ================================================ [ { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_pairing_e(0,0)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 70300, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_pairing_e(0,0)=e(0,0)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 102900, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_pairing_e(0,G2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 70300, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_pairing_e(G1,0)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 70300, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_pairing_e(0,-G2)!=e(-G1,G2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Gas": 102900, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_pairing_e(G1,0)!=e(-G1,G2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Gas": 102900, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_pairing_e(G1,0)=e(0,G2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 102900, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_pairing_non-degeneracy_e(P,Q)!= 1", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Gas": 70300, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000a40300ce2dec9888b60690e9a41d3004fda4886854573974fab73b046d3147ba5b7a5bde85279ffede1b45b3918d82d0000000000000000000000000000000006d3d887e9f53b9ec4eb6cedf5607226754b07c01ace7834f57f3e7315faefb739e59018e22c492006190fba4a87002500000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_pairing_bilinearity_e(G1,G2)*e(P1,G2)*e(P1+G1,-G2)=1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 135500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_pairing_e(G1,G2)*e(G1,-G2)=1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 102900, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a0000000000000000000000000000000017cd7061575d3e8034fcea62adaa1a3bc38dca4b50e4c5c01d04dd78037c9cee914e17944ea99e7ad84278e5d49f36c4000000000000000000000000000000000bc2357c6782bbb6a078d9e171fc7a81f7bd8ca73eb485e76317359908bb09bd372fd362a637512a9d48019b383e54890000000000000000000000000000000004b8f49c3bac0247a09487049492b0ed99cf90c56263141daa35f011330d3ced3f3ad78d252c51a3bb42fc7d8f182594000000000000000000000000000000000982d17b17404ac198a0ff5f2dffa56a328d95ec4732d9cca9da420ec7cf716dc63d56d0f5179a8b1ec71fe0328fe88200000000000000000000000000000000147c92cb19e43943bb20c5360a6c4347411eb8ffb3d6f19cc428a8dc0cb3fd1eb3ad02b1c21e21c78f65a7691ee63de90000000000000000000000000000000016cae74dc6523e5273dbd2d9d25c53f1e2c453e6d9ba3f605021cfb514fa0bdf721b05f2200f32591d733e739fabf438000000000000000000000000000000001405df65fb71b738510b3a2fc31c33ef3d884ccc84efb1017341a368bf40727b7ad8cdc8e3fd6b0eb94102488c5cb77000000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_pairing_e(aG1,bG2)=e(abG1,G2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 102900, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a0000000000000000000000000000000017cd7061575d3e8034fcea62adaa1a3bc38dca4b50e4c5c01d04dd78037c9cee914e17944ea99e7ad84278e5d49f36c4000000000000000000000000000000000bc2357c6782bbb6a078d9e171fc7a81f7bd8ca73eb485e76317359908bb09bd372fd362a637512a9d48019b383e54890000000000000000000000000000000004b8f49c3bac0247a09487049492b0ed99cf90c56263141daa35f011330d3ced3f3ad78d252c51a3bb42fc7d8f182594000000000000000000000000000000000982d17b17404ac198a0ff5f2dffa56a328d95ec4732d9cca9da420ec7cf716dc63d56d0f5179a8b1ec71fe0328fe88200000000000000000000000000000000147c92cb19e43943bb20c5360a6c4347411eb8ffb3d6f19cc428a8dc0cb3fd1eb3ad02b1c21e21c78f65a7691ee63de90000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca00000000000000000000000000000000166335679f3b3e2617b70c22c48e820e2c6a35149c4f96293035c1494a1ce4591f7a44bce94e9d76def50a71c9e7fa41000000000000000000000000000000000ef11c636091748476331159c8259c064da712ffec033c89299384b4c11b801893026726d992aacdc8e0a28db1a3ab82000000000000000000000000000000000fd8d4944030f480f44ce0d2d4fb67ff6264d30a0f3193cc218b062e5114cf9e4ce847489f7be94b0d4a9fc0c550fdc60000000000000000000000000000000000edba2c166be3d673ea77016163ae5cdf7b3c9bd480e733eb5c08a5f1c798793d339cb503005f5a9e586ea5aabf9695", "Name": "bls_pairing_e(aG1,bG2)=e(G1,abG2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 102900, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a0000000000000000000000000000000017cd7061575d3e8034fcea62adaa1a3bc38dca4b50e4c5c01d04dd78037c9cee914e17944ea99e7ad84278e5d49f36c4000000000000000000000000000000000bc2357c6782bbb6a078d9e171fc7a81f7bd8ca73eb485e76317359908bb09bd372fd362a637512a9d48019b383e54890000000000000000000000000000000004b8f49c3bac0247a09487049492b0ed99cf90c56263141daa35f011330d3ced3f3ad78d252c51a3bb42fc7d8f182594000000000000000000000000000000000982d17b17404ac198a0ff5f2dffa56a328d95ec4732d9cca9da420ec7cf716dc63d56d0f5179a8b1ec71fe0328fe88200000000000000000000000000000000147c92cb19e43943bb20c5360a6c4347411eb8ffb3d6f19cc428a8dc0cb3fd1eb3ad02b1c21e21c78f65a7691ee63de90000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca00000000000000000000000000000000166335679f3b3e2617b70c22c48e820e2c6a35149c4f96293035c1494a1ce4591f7a44bce94e9d76def50a71c9e7fa41000000000000000000000000000000000ef11c636091748476331159c8259c064da712ffec033c89299384b4c11b801893026726d992aacdc8e0a28db1a3ab82000000000000000000000000000000000fd8d4944030f480f44ce0d2d4fb67ff6264d30a0f3193cc218b062e5114cf9e4ce847489f7be94b0d4a9fc0c550fdc60000000000000000000000000000000000edba2c166be3d673ea77016163ae5cdf7b3c9bd480e733eb5c08a5f1c798793d339cb503005f5a9e586ea5aabf9695", "Name": "bls_pairing_e(aG1,bG2)=3De(G1,abG2)", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 102900, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Name": "bls_pairing_e(G1,G2)*e(0,0)*e(G1,-G2)=1", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Gas": 135500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_pairing_e(G1,G2)*e(0,0)*e(G1,G2)=0", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Gas": 135500, "NoBenchmark": false } ] ================================================ FILE: tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors.md ================================================ # Test Vectors for EIP-2537 - Precompiles for BLS12-381 curve operations The JSON test vector files in this directory originated from the assets attached to EIP-2537 as of ethereum/EIPs#9217 (unmerged as of time of writing) which were generated using these [BLS 12-381 tests](https://github.com/ethereum/bls12-381-tests/tree/eip-2537). ================================================ FILE: tests/prague/eip2935_historical_block_hashes_from_state/__init__.py ================================================ """Cross-client EIP-2935 Tests.""" ================================================ FILE: tests/prague/eip2935_historical_block_hashes_from_state/contract_deploy_tx.json ================================================ { "type": "0x0", "nonce": "0x0", "to": null, "gas": "0x3d090", "gasPrice": "0xe8d4a51000", "maxPriorityFeePerGas": null, "maxFeePerGas": null, "value": "0x0", "input": "0x60538060095f395ff33373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", "v": "0x1b", "r": "0x539", "s": "0x0aa12693182426612186309f02cfe8a80a0000", "hash": "0x67139a552b0d3fffc30c0fa7d0c20d42144138c8fe07fc5691f09c1cce632e15", "sender": "0x3462413Af4609098e1E27A490f554f260213D685" } ================================================ FILE: tests/prague/eip2935_historical_block_hashes_from_state/spec.py ================================================ """Defines EIP-2935 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_2935 = ReferenceSpec("EIPS/eip-2935.md", "06aadd458ee04ede80498db55927b052eb5bef38") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-2935 specifications as defined at https://eips.ethereum.org/EIPS/eip-2935. """ FORK_TIMESTAMP = 15_000 HISTORY_STORAGE_ADDRESS = 0x0000F90827F1C53A10CB7A02335B175320002935 HISTORY_SERVE_WINDOW = 8191 BLOCKHASH_OLD_WINDOW = 256 ================================================ FILE: tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py ================================================ """ Tests [EIP-2935: Serve historical block hashes from state](https://eips.ethereum.org/EIPS/eip-2935). """ from typing import Dict, List import pytest from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_2935 REFERENCE_SPEC_GIT_PATH = ref_spec_2935.git_path REFERENCE_SPEC_VERSION = ref_spec_2935.version def generate_block_check_code( check_block_number: int, current_block_number: int, fork_block_number: int, storage: Storage, check_contract_first: bool = False, ) -> Bytecode: """ Generate EVM code to check that the block hashes are correctly stored in the state. Args: check_block_number (int): The block number to check. current_block_number (int): The current block number where the check is taking place. fork_block_number (int): The block number of the fork transition. storage (Storage): The storage object to use. check_contract_first (bool): Whether to check the contract first, for slot warming checks. """ contract_ret_offset = 32 if check_block_number < 0: # Block number outside of range, nothing to check return Bytecode() populated_blockhash = ( current_block_number - check_block_number <= Spec.BLOCKHASH_OLD_WINDOW and check_block_number < current_block_number ) populated_history_storage_contract = ( check_block_number >= fork_block_number - 1 and current_block_number - check_block_number <= Spec.HISTORY_SERVE_WINDOW and check_block_number < current_block_number ) blockhash_key = storage.store_next(not populated_blockhash) contract_key = storage.store_next(not populated_history_storage_contract) check_blockhash = Op.SSTORE(blockhash_key, Op.ISZERO(Op.BLOCKHASH(check_block_number))) check_contract = ( Op.MSTORE(0, check_block_number) + Op.POP(Op.CALL(Op.GAS, Spec.HISTORY_STORAGE_ADDRESS, 0, 0, 32, contract_ret_offset, 32)) + Op.SSTORE(contract_key, Op.ISZERO(Op.MLOAD(contract_ret_offset))) ) if check_contract_first: code = check_contract + check_blockhash else: code = check_blockhash + check_contract if populated_history_storage_contract and populated_blockhash: # Both values must be equal store_equal_key = storage.store_next(True) code += Op.SSTORE( store_equal_key, Op.EQ(Op.MLOAD(contract_ret_offset), Op.BLOCKHASH(check_block_number)) ) # Reset the contract return value code += Op.MSTORE(contract_ret_offset, 0) return code # TODO: Test at transition: `BLOCKHASH_OLD_WINDOW + 1` blocks before transition # TODO: Test post fork: `HISTORY_SERVE_WINDOW` + 1 blocks after transition @pytest.mark.parametrize( "blocks_before_fork, blocks_after_fork", [ [1, 2], [Spec.BLOCKHASH_OLD_WINDOW + 1, 10], [1, Spec.BLOCKHASH_OLD_WINDOW + 1], ], ) @pytest.mark.slow() @pytest.mark.valid_at_transition_to("Prague") def test_block_hashes_history_at_transition( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks_before_fork: int, blocks_after_fork: int, ) -> None: """ Tests that block hashes are stored correctly at the system contract address after the fork transition. Block hashes are stored incrementally at the transition until the `HISTORY_SERVE_WINDOW` ring buffer is full. Afterwards the oldest block hash is replaced by the new one. Note: The block hashes before the fork are no longer stored in the contract at the moment of the transition. """ blocks: List[Block] = [] assert blocks_before_fork >= 1 and blocks_before_fork < Spec.FORK_TIMESTAMP sender = pre.fund_eoa(10_000_000_000) post: Dict[Address, Account] = {} current_block_number = 1 fork_block_number = current_block_number + blocks_before_fork for i in range(blocks_before_fork): txs: List[Transaction] = [] if i == blocks_before_fork - 1: # On the last block before the fork, `BLOCKHASH` must return values # for the last 256 blocks but not for the blocks before that. And # `HISTORY_STORAGE_ADDRESS` should be empty. code = Bytecode() storage = Storage() # Check the last block before blockhash the window code += generate_block_check_code( check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW - 1, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, ) # Check the first block inside blockhash the window code += generate_block_check_code( check_block_number=( current_block_number - Spec.BLOCKHASH_OLD_WINDOW if current_block_number > Spec.BLOCKHASH_OLD_WINDOW else 0 # Entire chain is inside the window, check genesis ), current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, ) check_blocks_before_fork_address = pre.deploy_contract(code) txs.append( Transaction( to=check_blocks_before_fork_address, gas_limit=10_000_000, sender=sender, ) ) post[check_blocks_before_fork_address] = Account(storage=storage) blocks.append(Block(timestamp=current_block_number, txs=txs)) current_block_number += 1 # Add blocks after the fork transition to gradually fill up the # `HISTORY_SERVE_WINDOW` for i in range(blocks_after_fork): txs = [] # On these blocks, `BLOCKHASH` will still return values for the last # 256 blocks, and `HISTORY_STORAGE_ADDRESS` should now serve values for # the previous blocks in the new fork. code = Bytecode() storage = Storage() # Check that each block can return previous blockhashes if # `BLOCKHASH_OLD_WINDOW` and or `HISTORY_SERVE_WINDOW`. for j in range(current_block_number): code += generate_block_check_code( check_block_number=j, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, ) check_blocks_after_fork_address = pre.deploy_contract(code) txs.append( Transaction( to=check_blocks_after_fork_address, gas_limit=10_000_000, sender=sender, ) ) post[check_blocks_after_fork_address] = Account(storage=storage) blocks.append(Block(timestamp=Spec.FORK_TIMESTAMP + i, txs=txs)) current_block_number += 1 blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.parametrize( "block_count,check_contract_first", [ pytest.param(1, False, id="single_block_check_blockhash_first"), pytest.param(1, True, id="single_block_check_contract_first"), pytest.param(2, False, id="two_blocks_check_blockhash_first"), pytest.param(2, True, id="two_blocks_check_contract_first"), pytest.param( Spec.HISTORY_SERVE_WINDOW + 1, False, marks=[pytest.mark.skip("Slow test not relevant anymore"), pytest.mark.slow], id="full_history_plus_one_check_blockhash_first", ), ], ) @pytest.mark.valid_from("Prague") def test_block_hashes_history( blockchain_test: BlockchainTestFiller, pre: Alloc, block_count: int, check_contract_first: bool, ) -> None: """ Tests that block hashes are stored correctly at the system contract address after the fork transition. Block hashes are stored incrementally at the transition until the `HISTORY_SERVE_WINDOW` ring buffer is full. Afterwards the oldest block hash is replaced by the new one. """ blocks: List[Block] = [] sender = pre.fund_eoa(10_000_000_000) post: Dict[Address, Account] = {} current_block_number = 1 fork_block_number = 0 # We fork at genesis for _ in range(block_count - 1): # Generate empty blocks after the fork. blocks.append(Block()) current_block_number += 1 txs = [] # On these blocks, `BLOCKHASH` will still return values for the last 256 # blocks, and `HISTORY_STORAGE_ADDRESS` should now serve values for the # previous blocks in the new fork. code = Bytecode() storage = Storage() # Check the first block outside of the window if any code += generate_block_check_code( check_block_number=current_block_number - Spec.HISTORY_SERVE_WINDOW - 1, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, check_contract_first=check_contract_first, ) # Check the first block inside the window code += generate_block_check_code( check_block_number=current_block_number - Spec.HISTORY_SERVE_WINDOW, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, check_contract_first=check_contract_first, ) # Check the first block outside the BLOCKHASH window code += generate_block_check_code( check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW - 1, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, check_contract_first=check_contract_first, ) # Check the first block inside the BLOCKHASH window code += generate_block_check_code( check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, check_contract_first=check_contract_first, ) # Check the previous block code += generate_block_check_code( check_block_number=current_block_number - 1, current_block_number=current_block_number, fork_block_number=fork_block_number, storage=storage, check_contract_first=check_contract_first, ) check_blocks_after_fork_address = pre.deploy_contract(code) txs.append( Transaction( to=check_blocks_after_fork_address, gas_limit=10_000_000, sender=sender, ) ) post[check_blocks_after_fork_address] = Account(storage=storage) blocks.append(Block(txs=txs)) current_block_number += 1 blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.valid_from("Prague") @pytest.mark.with_all_call_opcodes def test_block_hashes_call_opcodes( blockchain_test: BlockchainTestFiller, pre: Alloc, call_opcode: Op ) -> None: """ Test that the call opcodes can be used to call the history contract and get the block hashes. """ blocks = [] blocks.append(Block()) storage = Storage() return_code_slot = storage.store_next(0x1) blockhash_value_slot = storage.store_next( True if call_opcode in [Op.DELEGATECALL, Op.CALLCODE] else False ) code = ( Op.MSTORE(0, 1) + Op.SSTORE( return_code_slot, call_opcode( address=Spec.HISTORY_STORAGE_ADDRESS, args_offset=0, args_size=32, ret_offset=32, ret_size=32, ), ) + Op.SSTORE(blockhash_value_slot, Op.ISZERO(Op.MLOAD(32))) ) contract_address = pre.deploy_contract(code, storage=storage.canary()) blocks.append( Block( txs=[ Transaction( to=contract_address, gas_limit=10_000_000, sender=pre.fund_eoa(), ) ] ) ) blockchain_test( pre=pre, blocks=blocks, post={contract_address: Account(storage=storage)}, ) @pytest.mark.parametrize( "block_number,reverts", [ pytest.param(1, True, id="current_block"), pytest.param(2, True, id="future_block"), pytest.param(2**64 - 1, True, id="2**64-1"), pytest.param(2**64, True, id="2**64"), ], ) @pytest.mark.valid_from("Prague") def test_invalid_history_contract_calls( blockchain_test: BlockchainTestFiller, pre: Alloc, block_number: int, reverts: bool, ) -> None: """ Test calling the history contract with invalid block numbers, such as blocks from the future or overflowing block numbers. Also test the BLOCKHASH opcode with the same block numbers, which should not affect the behavior of the opcode, even after verkle. """ storage = Storage() return_code_slot = storage.store_next(not reverts) returned_block_hash_slot = storage.store_next(0) block_hash_opcode_slot = storage.store_next(0) return_offset = 64 return_size = 32 args_size = 32 # Check the first block outside of the window if any code = ( Op.MSTORE(0, block_number) + Op.SSTORE( return_code_slot, Op.CALL( address=Spec.HISTORY_STORAGE_ADDRESS, args_offset=0, args_size=args_size, ret_offset=return_offset, ret_size=return_size, ), ) + Op.SSTORE(returned_block_hash_slot, Op.MLOAD(return_offset)) + Op.SSTORE(block_hash_opcode_slot, Op.BLOCKHASH(block_number)) ) check_contract_address = pre.deploy_contract(code, storage=storage.canary()) txs = [ Transaction( to=check_contract_address, gas_limit=10_000_000, sender=pre.fund_eoa(), ) ] post = {check_contract_address: Account(storage=storage)} blocks = [Block(txs=txs)] blockchain_test( pre=pre, blocks=blocks, post=post, ) @pytest.mark.parametrize( "args_size,reverts", [ pytest.param(0, True, id="zero_size"), pytest.param(33, True, id="too_large"), pytest.param(31, True, id="too_small"), ], ) @pytest.mark.valid_from("Prague") def test_invalid_history_contract_calls_input_size( blockchain_test: BlockchainTestFiller, pre: Alloc, reverts: bool, args_size: int, ) -> None: """Test calling the history contract with invalid input sizes.""" storage = Storage() return_code_slot = storage.store_next(not reverts, "history storage call result") returned_block_hash_slot = storage.store_next(0) return_offset = 64 return_size = 32 block_number = 0 # Check the first block outside of the window if any code = ( Op.MSTORE(0, block_number) + Op.SSTORE( return_code_slot, Op.CALL( address=Spec.HISTORY_STORAGE_ADDRESS, args_offset=0, args_size=args_size, ret_offset=return_offset, ret_size=return_size, ), ) + Op.SSTORE(returned_block_hash_slot, Op.MLOAD(return_offset)) ) check_contract_address = pre.deploy_contract(code, storage=storage.canary()) txs = [ Transaction( to=check_contract_address, gas_limit=10_000_000, sender=pre.fund_eoa(), ) ] post = {check_contract_address: Account(storage=storage)} blocks = [Block(txs=txs)] blockchain_test( pre=pre, blocks=blocks, post=post, ) ================================================ FILE: tests/prague/eip2935_historical_block_hashes_from_state/test_contract_deployment.py ================================================ """ Tests [EIP-2935: Serve historical block hashes from state](https://eips.ethereum.org/EIPS/eip-2935). """ from os.path import realpath from pathlib import Path from typing import Any, Dict, Generator import pytest from ethereum_test_forks import Prague from ethereum_test_tools import ( Account, Address, Alloc, Block, DeploymentTestType, Transaction, generate_system_contract_deploy_test, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_2935 REFERENCE_SPEC_GIT_PATH = ref_spec_2935.git_path REFERENCE_SPEC_VERSION = ref_spec_2935.version @pytest.mark.pre_alloc_group( "separate", reason="Deploys history storage system contract at hardcoded predeploy address" ) @generate_system_contract_deploy_test( fork=Prague, tx_json_path=Path(realpath(__file__)).parent / "contract_deploy_tx.json", expected_deploy_address=Address(Spec.HISTORY_STORAGE_ADDRESS), fail_on_empty_code=False, ) def test_system_contract_deployment( *, pre: Alloc, post: Alloc, test_type: DeploymentTestType, **kwargs: Any, ) -> Generator[Block, None, None]: """Verify deployment of the block hashes system contract.""" # Deploy a contract that calls the history contract and verifies the block # hashes. yield Block() # Empty block just to have more history in the contract. # We are going to query blocks even before contract deployment. code = ( sum( Op.MSTORE(0, block_number) + Op.POP( Op.CALL( address=Spec.HISTORY_STORAGE_ADDRESS, args_offset=0, args_size=32, ret_offset=32, ret_size=32, ), ) + Op.SSTORE(block_number, Op.ISZERO(Op.ISZERO(Op.MLOAD(32)))) for block_number in range(1, 4) ) + Op.STOP ) deployed_contract = pre.deploy_contract(code) tx = Transaction( to=deployed_contract, gas_limit=10_000_000, sender=pre.fund_eoa(), ) yield Block(txs=[tx]) storage: Dict if test_type == DeploymentTestType.DEPLOY_BEFORE_FORK: # Fork happens at block 2, and the contract is already there, so from # block number 1 and after, the block hashes should be there. storage = { 1: 1, # Block prior to the fork, it's the first hash saved. 2: 1, # Fork block, hash should be there. 3: 1, # Empty block added at the start of this function, hash # should be there. } elif test_type == DeploymentTestType.DEPLOY_ON_FORK_BLOCK: # The contract should have the block hashes after contract deployment. storage = { 1: 1, # Fork and deployment block, the first hash that gets added. 2: 1, # Deployment block, hash should be there. 3: 1, # Empty block added at the start of this function, hash # should be there. } elif test_type == DeploymentTestType.DEPLOY_AFTER_FORK: # The contract should have the block hashes after contract deployment. storage = { 1: 0, # Fork block, but contract is not there yet. 2: 1, # Deployment block, this is the first hash that gets added # because it's added on # the next block. 3: 1, # Empty block added at the start of this function, hash # should be there. } post[deployed_contract] = Account( balance=0, storage=storage, ) ================================================ FILE: tests/prague/eip2935_historical_block_hashes_from_state/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-2935: Serve historical block hashes from state](https://eips.ethereum.org/EIPS/eip-2935). """ # noqa: E501 import pytest from ethereum_test_tools import Account, Alloc, Block, BlockchainTestFiller, Transaction from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_2935 REFERENCE_SPEC_GIT_PATH = ref_spec_2935.git_path REFERENCE_SPEC_VERSION = ref_spec_2935.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] def test_eip_2935( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """Test a simple block hash request from EIP-2935 system contract.""" check_block_number = Op.SUB(Op.NUMBER, 1) # Parent block number check_contract_code = ( Op.MSTORE(0, check_block_number) + Op.POP( Op.CALL( address=Spec.HISTORY_STORAGE_ADDRESS, args_offset=0, args_size=32, ret_offset=32, ret_size=32, ) ) + Op.SSTORE(0, Op.EQ(Op.MLOAD(32), Op.BLOCKHASH(check_block_number))) ) check_contract_address = pre.deploy_contract(check_contract_code) tx = Transaction( to=check_contract_address, gas_limit=50_000, sender=pre.fund_eoa(), ) block = Block(txs=[tx]) blockchain_test( pre=pre, blocks=[block], post={ check_contract_address: Account(storage={0: 1}), }, ) ================================================ FILE: tests/prague/eip6110_deposits/__init__.py ================================================ """Cross-client EIP-6110 Tests.""" ================================================ FILE: tests/prague/eip6110_deposits/conftest.py ================================================ """Fixtures for the EIP-6110 deposit tests.""" from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Block, BlockException, Header, Requests, Transaction from .helpers import DepositInteractionBase, DepositRequest @pytest.fixture def update_pre(pre: Alloc, requests: List[DepositInteractionBase]) -> None: """ Init state of the accounts. Every deposit transaction defines their own pre-state requirements, and this fixture aggregates them all. """ for d in requests: d.update_pre(pre) @pytest.fixture def txs( requests: List[DepositInteractionBase], update_pre: None, # Fixture is used for its side effects ) -> List[Transaction]: """List of transactions to include in the block.""" txs = [] for r in requests: txs += r.transactions() return txs @pytest.fixture def block_body_override_requests() -> List[DepositRequest] | None: """ List of requests that overwrite the requests in the header. None by default. """ return None @pytest.fixture def exception() -> BlockException | None: """Block exception expected by the tests. None by default.""" return None @pytest.fixture def included_requests( requests: List[DepositInteractionBase], ) -> List[DepositRequest]: """ Return the list of deposit requests that should be included in each block. """ valid_requests: List[DepositRequest] = [] for d in requests: valid_requests += d.valid_requests(10**18) return valid_requests @pytest.fixture def blocks( fork: Fork, included_requests: List[DepositRequest], block_body_override_requests: List[DepositRequest] | None, txs: List[Transaction], exception: BlockException | None, ) -> List[Block]: """List of blocks that comprise the test.""" return [ Block( txs=txs, header_verify=Header( requests_hash=Requests( *included_requests, ), ), requests=Requests( *block_body_override_requests, ).requests_list if block_body_override_requests is not None else None, exception=exception, ) ] ================================================ FILE: tests/prague/eip6110_deposits/helpers.py ================================================ """Helpers for the EIP-6110 deposit tests.""" from dataclasses import dataclass, field from functools import cached_property from hashlib import sha256 as sha256_hashlib from typing import Callable, ClassVar, List from ethereum_test_tools import EOA, Address, Alloc, Bytecode, Hash, Transaction from ethereum_test_tools import DepositRequest as DepositRequestBase from ethereum_test_tools import Opcodes as Op from .spec import Spec def sha256(*args: bytes) -> bytes: """Return sha256 hash of the input.""" return sha256_hashlib(b"".join(args)).digest() def create_deposit_log_bytes( pubkey_size: int = 48, pubkey_data: bytes = b"", pubkey_offset: int = 160, withdrawal_credentials_size: int = 32, withdrawal_credentials_data: bytes = b"", withdrawal_credentials_offset: int = 256, amount_size: int = 8, amount_data: bytes = b"", amount_offset: int = 320, signature_size: int = 96, signature_data: bytes = b"", signature_offset: int = 384, index_size: int = 8, index_data: bytes = b"", index_offset: int = 512, ) -> bytes: """Create the deposit log bytes.""" result = bytearray(576) offset = 0 def write_uint256(value: int) -> None: nonlocal offset result[offset : offset + 32] = value.to_bytes(32, byteorder="big") offset += 32 def write_bytes(data: bytes, size: int) -> None: nonlocal offset padded = data.ljust(size, b"\x00") result[offset : offset + size] = padded offset += size write_uint256(pubkey_offset) write_uint256(withdrawal_credentials_offset) write_uint256(amount_offset) write_uint256(signature_offset) write_uint256(index_offset) write_uint256(pubkey_size) write_bytes(pubkey_data, 64) write_uint256(withdrawal_credentials_size) write_bytes(withdrawal_credentials_data, 32) write_uint256(amount_size) write_bytes(amount_data, 32) write_uint256(signature_size) write_bytes(signature_data, 96) write_uint256(index_size) write_bytes(index_data, 32) return bytes(result) class DepositRequest(DepositRequestBase): """Deposit request descriptor.""" valid: bool = True """Whether the deposit request is valid or not.""" gas_limit: int = 1_000_000 """Gas limit for the call.""" calldata_modifier: Callable[[bytes], bytes] = lambda x: x """Calldata modifier function.""" extra_wei: int = 0 """ Extra amount in wei to be sent with the deposit. If this value modulo 10**9 is not zero, the deposit will be invalid. The value can be negative but if the total value is negative, an exception will be raised. """ interaction_contract_address: ClassVar[Address] = Address(Spec.DEPOSIT_CONTRACT_ADDRESS) @cached_property def value(self) -> int: """ Return the value of the deposit transaction, equal to the amount in gwei plus the extra amount in wei. """ value = (self.amount * 10**9) + self.extra_wei if value < 0: raise ValueError("Value cannot be negative") return value @cached_property def deposit_data_root(self) -> Hash: """Return the deposit data root of the deposit.""" pubkey_root = sha256(self.pubkey, b"\x00" * 16) signature_root = sha256( sha256(self.signature[:64]), sha256(self.signature[64:], b"\x00" * 32) ) pubkey_withdrawal_root = sha256(pubkey_root, self.withdrawal_credentials) amount_bytes = (self.amount).to_bytes(32, byteorder="little") amount_signature_root = sha256(amount_bytes, signature_root) return Hash(sha256(pubkey_withdrawal_root, amount_signature_root)) @cached_property def calldata(self) -> bytes: """ Return the calldata needed to call the beacon chain deposit contract and make the deposit. deposit( bytes calldata pubkey, bytes calldata withdrawal_credentials, bytes calldata signature, bytes32 deposit_data_root ) """ offset_length = 32 pubkey_offset = offset_length * 3 + len(self.deposit_data_root) withdrawal_offset = pubkey_offset + offset_length + len(self.pubkey) signature_offset = withdrawal_offset + offset_length + len(self.withdrawal_credentials) return self.calldata_modifier( b"\x22\x89\x51\x18" + pubkey_offset.to_bytes(offset_length, byteorder="big") + withdrawal_offset.to_bytes(offset_length, byteorder="big") + signature_offset.to_bytes(offset_length, byteorder="big") + self.deposit_data_root + len(self.pubkey).to_bytes(offset_length, byteorder="big") + self.pubkey + len(self.withdrawal_credentials).to_bytes(offset_length, byteorder="big") + self.withdrawal_credentials + len(self.signature).to_bytes(offset_length, byteorder="big") + self.signature ) def log(self, *, include_abi_encoding: bool = True) -> bytes: """ Return the log data for the deposit event. event DepositEvent( bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index ); """ data = bytearray(576) if include_abi_encoding: # Insert ABI encoding data[30:32] = b"\x00\xa0" # Offset: pubkey (160) data[62:64] = b"\x01\x00" # Offset: withdrawal_credentials (256) data[94:96] = b"\x01\x40" # Offset: amount (320) data[126:128] = b"\x01\x80" # Offset: signature (384) data[158:160] = b"\x02\x00" # Offset: index (512) data[190:192] = b"\x00\x30" # Size: pubkey (48) data[286:288] = b"\x00\x20" # Size: withdrawal_credentials (32) data[350:352] = b"\x00\x08" # Size: amount (8) data[414:416] = b"\x00\x60" # Size: signature (96) data[542:544] = b"\x00\x08" # Size: index (8) offset = 192 data[offset : offset + len(self.pubkey)] = self.pubkey # [192:240] offset += 48 + len(self.pubkey) data[offset : offset + len(self.withdrawal_credentials)] = ( self.withdrawal_credentials ) # [288:320] offset += 32 + len(self.withdrawal_credentials) data[offset : offset + 8] = (self.amount).to_bytes(8, byteorder="little") # [352:360] offset += 56 + 8 data[offset : offset + len(self.signature)] = self.signature # [416:512] offset += 32 + len(self.signature) data[offset : offset + 8] = (self.index).to_bytes(8, byteorder="little") # [544:552] return bytes(data) def with_source_address(self, source_address: Address) -> "DepositRequest": """Return a copy.""" del source_address return self.copy() @dataclass(kw_only=True) class DepositInteractionBase: """Base class for all types of deposit transactions we want to test.""" sender_balance: int = 32_000_000_000_000_000_000 * 100 """Balance of the account that sends the transaction.""" sender_account: EOA | None = None """Account that sends the transaction.""" requests: List[DepositRequest] """Deposit request to be included in the block.""" def transactions(self) -> List[Transaction]: """Return a transaction for the deposit request.""" raise NotImplementedError def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" raise NotImplementedError def valid_requests(self, current_minimum_fee: int) -> List[DepositRequest]: """ Return the list of deposit requests that should be included in the block. """ raise NotImplementedError @dataclass(kw_only=True) class DepositTransaction(DepositInteractionBase): """ Class used to describe a deposit originated from an externally owned account. """ def transactions(self) -> List[Transaction]: """Return a transaction for the deposit request.""" assert self.sender_account is not None, "Sender account not initialized" return [ Transaction( gas_limit=request.gas_limit, gas_price=0x07, to=request.interaction_contract_address, value=request.value, data=request.calldata, sender=self.sender_account, ) for request in self.requests ] def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" self.sender_account = pre.fund_eoa(self.sender_balance) def valid_requests(self, current_minimum_fee: int) -> List[DepositRequest]: """ Return the list of deposit requests that should be included in the block. """ return [ request for request in self.requests if request.valid and request.value >= current_minimum_fee ] @dataclass(kw_only=True) class DepositContract(DepositInteractionBase): """Class used to describe a deposit originated from a contract.""" tx_gas_limit: int = 1_000_000 """Gas limit for the transaction.""" tx_value: int = 0 """Value to send with the transaction.""" contract_balance: int = 32_000_000_000_000_000_000 * 100 """Balance of the contract that sends the deposit requests.""" contract_address: Address | None = None """Address of the contract that sends the deposit requests.""" entry_address: Address | None = None """Address to send the transaction to.""" call_type: Op = field(default_factory=lambda: Op.CALL) """Type of call to be made to the deposit contract.""" call_depth: int = 2 """ Frame depth of the beacon chain deposit contract when it executes the deposit requests. """ extra_code: Bytecode = field(default_factory=Bytecode) """ Extra code to be included in the contract that sends the deposit requests. """ @property def contract_code(self) -> Bytecode: """Contract code used by the relay contract.""" code = Bytecode() current_offset = 0 for r in self.requests: value_arg = [r.value] if self.call_type in (Op.CALL, Op.CALLCODE) else [] code += Op.CALLDATACOPY(0, current_offset, len(r.calldata)) + Op.POP( self.call_type( Op.GAS if r.gas_limit == -1 else r.gas_limit, r.interaction_contract_address, *value_arg, 0, len(r.calldata), 0, 0, ) ) current_offset += len(r.calldata) return code + self.extra_code def transactions(self) -> List[Transaction]: """Return a transaction for the deposit request.""" return [ Transaction( gas_limit=self.tx_gas_limit, gas_price=0x07, to=self.entry_address, value=self.tx_value, data=b"".join(r.calldata for r in self.requests), sender=self.sender_account, ) ] def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" required_balance = self.sender_balance if self.tx_value > 0: required_balance = max(required_balance, self.tx_value + self.tx_gas_limit * 7) self.sender_account = pre.fund_eoa(required_balance) self.contract_address = pre.deploy_contract( code=self.contract_code, balance=self.contract_balance ) self.entry_address = self.contract_address if self.call_depth > 2: for _ in range(1, self.call_depth - 1): self.entry_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.POP( Op.CALL( Op.GAS, self.entry_address, 0, 0, Op.CALLDATASIZE, 0, 0, ) ), ) def valid_requests(self, current_minimum_fee: int) -> List[DepositRequest]: """ Return the list of deposit requests that should be included in the block. """ return [d for d in self.requests if d.valid and d.value >= current_minimum_fee] ================================================ FILE: tests/prague/eip6110_deposits/spec.py ================================================ """Defines EIP-6110 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_6110 = ReferenceSpec("EIPS/eip-6110.md", "cbe8bf6a28fa1d096f9756af3513675849c4158e") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-6110 specifications as defined at https://eips.ethereum.org/EIPS/eip-6110. """ DEPOSIT_CONTRACT_ADDRESS = 0x00000000219AB540356CBB839CBE05303D7705FA # Mainnet DEPOSIT_EVENT_SIGNATURE_HASH = ( 0x649BBC62D0E31342AFEA4E5CD82D4049E7E1EE912FC0889AA790803BE39038C5 ) ================================================ FILE: tests/prague/eip6110_deposits/test_deposits.py ================================================ """ Tests validator deposit functionality. Tests the validator deposit functionality implementation from [EIP-6110: Supply validator deposits on chain](https://eips.ethereum.org/EIPS/eip-6110). """ from typing import List import pytest from ethereum_test_tools import ( Alloc, Block, BlockchainTestFiller, BlockException, Environment, Macros, ) from ethereum_test_tools import Opcodes as Op from .helpers import DepositContract, DepositRequest, DepositTransaction from .spec import ref_spec_6110 REFERENCE_SPEC_GIT_PATH = ref_spec_6110.git_path REFERENCE_SPEC_VERSION = ref_spec_6110.version pytestmark = pytest.mark.valid_from("Prague") @pytest.mark.parametrize( "requests", [ pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], ), ], id="single_deposit_from_eoa", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=120_000_000_000_000_000, signature=0x03, index=0x0, ) ], sender_balance=120_000_001_000_000_000 * 10**9, ), ], id="single_deposit_from_eoa_huge_amount", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ), ], ), ], id="multiple_deposit_from_same_eoa", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=i, ) for i in range(200) ], ) ], id="multiple_deposit_from_same_eoa_high_count", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], ), DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ) ], ), ], id="multiple_deposit_from_different_eoa", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=999_999_999, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), ], ), ], id="multiple_deposit_from_same_eoa_first_reverts", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=999_999_999, signature=0x03, index=0x0, ), ], ), ], id="multiple_deposit_from_same_eoa_last_reverts", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, # From traces, gas used by the first tx is 82,718 # so reduce by one here gas_limit=0x1431D, valid=False, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), ], ), ], id="multiple_deposit_from_same_eoa_first_oog", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, # From traces, gas used by the second tx is 68,594, # reduce by one here gas_limit=0x10BF1, valid=False, ), ], ), ], id="multiple_deposit_from_same_eoa_last_oog", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, calldata_modifier=lambda _: b"", valid=False, ) ], ), ], id="send_eth_from_eoa", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, calldata_modifier=lambda _: b"", ) ], ), ], # TODO: EIP-5920: Send using PAY opcode id="send_eth_to_contract_no_deposit_data", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], ), ], id="single_deposit_from_contract", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x1, ), ], ), ], id="multiple_deposits_from_contract", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=i, ) for i in range(450) ], tx_gas_limit=16_777_216, ), ], id="many_deposits_from_contract", marks=pytest.mark.slow, ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=999_999_999, signature=0x03, index=0x0, valid=False, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), ], ), ], id="multiple_deposits_from_contract_first_reverts", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=999_999_999, signature=0x03, index=0x1, valid=False, ), ], ), ], id="multiple_deposits_from_contract_last_reverts", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, gas_limit=100, index=0x0, valid=False, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, gas_limit=1_000_000, index=0x0, ), ], ), ], id="multiple_deposits_from_contract_first_oog", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, gas_limit=1_000_000, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, gas_limit=100, valid=False, ), ], ), ], id="multiple_deposits_from_contract_last_oog", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x1, valid=False, ), ], extra_code=Op.REVERT(0, 0), ), ], id="multiple_deposits_from_contract_caller_reverts", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x1, valid=False, ), ], extra_code=Macros.OOG(), ), ], id="multiple_deposits_from_contract_caller_oog", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=i, valid=False, ) for i in range(450) ], tx_gas_limit=10_000_000, ), ], id="many_deposits_from_contract_oog", marks=pytest.mark.slow, ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), ], ), DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ) ], ), ], id="single_deposit_from_contract_single_deposit_from_eoa", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], ), DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ), ], ), ], id="single_deposit_from_eoa_single_deposit_from_contract", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], ), DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ), ], ), DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x2, ) ], ), ], id="single_deposit_from_contract_between_eoa_deposits", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), ], ), DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ) ], ), DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x2, ), ], ), ], id="single_deposit_from_eoa_between_contract_deposits", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, ) ], call_type=Op.DELEGATECALL, ), ], id="single_deposit_from_contract_delegatecall", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, ) ], call_type=Op.STATICCALL, ), ], id="single_deposit_from_contract_staticcall", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, ) ], call_type=Op.CALLCODE, ), ], id="single_deposit_from_contract_callcode", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], call_depth=3, ), ], id="single_deposit_from_contract_call_depth_3", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], call_depth=271, tx_gas_limit=16_777_216, ), ], id="single_deposit_from_contract_call_depth_high", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_001, signature=0x03, index=0x0, ) ], ), ], id="single_deposit_from_eoa_minimum_plus_one", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, extra_wei=1, valid=False, ) ], ), ], id="single_deposit_from_eoa_minimum_plus_one_wei", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, extra_wei=-1, valid=False, ) ], ), ], id="single_deposit_from_eoa_minimum_minus_one_wei", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, extra_wei=1, valid=False, ) ], ), ], id="single_deposit_from_contract_minimum_plus_one_wei", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, extra_wei=-1, valid=False, ) ], ), ], id="single_deposit_from_contract_minimum_minus_one_wei", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_001, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=999_999_999, signature=0x03, index=0x1, valid=False, ), ], ), ], id="multiple_deposits_from_eoa_minimum_plus_one_minimum_minus_one", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, valid=False, ) ], # Send 32 ETH minus 1 wei to the contract, note # `DepositRequest.amount` is in gwei tx_value=32_000_000_000 * 10**9 - 1, contract_balance=0, ), ], id="send_not_enough_eth_to_contract_with_zero_balance", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=999_999_999, signature=0x03, index=0x0, valid=False, ) ], tx_value=1_000_000_000 * 10**9, ), ], id="send_eth_to_contract_insufficient_deposit", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ) ], # Send 32 ETH (in wei) to the contract tx_value=32_000_000_000 * 10**9, contract_balance=0, ), ], id="send_exact_eth_amount_for_deposit", ), pytest.param( [ DepositContract( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=32_000_000_000, signature=0x03, index=0x1, ), ], # Send 64 ETH (in wei) to the contract tx_value=64_000_000_000 * 10**9, contract_balance=0, ), ], id="send_exact_eth_amount_for_multiple_deposits", ), ], ) @pytest.mark.pre_alloc_group( "deposit_requests", reason="Tests standard deposit request functionality using system contract" ) def test_deposit( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """Test making a deposit to the beacon chain deposit contract.""" total_gas_limit = sum(tx.gas_limit for tx in blocks[0].txs) env = Environment() if total_gas_limit > env.gas_limit: env = Environment(gas_limit=total_gas_limit) blockchain_test( genesis_environment=env, pre=pre, post={}, blocks=blocks, ) @pytest.mark.parametrize( "requests,block_body_override_requests,exception", [ pytest.param( [], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), ], BlockException.INVALID_REQUESTS, id="no_deposits_non_empty_requests_list", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [], BlockException.INVALID_REQUESTS, id="single_deposit_empty_requests_list", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [ DepositRequest( pubkey=0x02, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], BlockException.INVALID_REQUESTS, id="single_deposit_pubkey_mismatch", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x03, amount=1_000_000_000, signature=0x03, index=0x0, ) ], BlockException.INVALID_REQUESTS, id="single_deposit_credentials_mismatch", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=2_000_000_000, signature=0x03, index=0x0, ) ], BlockException.INVALID_REQUESTS, id="single_deposit_amount_mismatch", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x04, index=0x0, ) ], BlockException.INVALID_REQUESTS, id="single_deposit_signature_mismatch", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x1, ) ], BlockException.INVALID_REQUESTS, id="single_deposit_index_mismatch", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x1, ), ], ), ], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x1, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), ], BlockException.INVALID_REQUESTS, id="two_deposits_out_of_order", ), pytest.param( [ DepositTransaction( requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], [ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ), ], BlockException.INVALID_REQUESTS, id="single_deposit_duplicate_in_requests_list", ), ], ) @pytest.mark.exception_test @pytest.mark.pre_alloc_group( "deposit_requests", reason="Tests standard deposit request functionality using system contract" ) def test_deposit_negative( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """ Test producing a block with the incorrect deposits in the body of the block, and/or Engine API payload. """ blockchain_test( pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip6110_deposits/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-6110: Supply validator deposits on chain](https://eips.ethereum.org/EIPS/eip-6110). """ # noqa: E501 from typing import List import pytest from ethereum_test_tools import ( Alloc, Block, BlockchainTestFiller, ) from .helpers import DepositRequest, DepositTransaction from .spec import ref_spec_6110 REFERENCE_SPEC_GIT_PATH = ref_spec_6110.git_path REFERENCE_SPEC_VERSION = ref_spec_6110.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] @pytest.mark.parametrize( "requests", [ pytest.param( [ DepositTransaction( # TODO: Use a real public key to allow recovery of # the funds. requests=[ DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) ], ), ], id="single_deposit_from_eoa_minimum", ), ], ) def test_eip_6110( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """Test making a deposit to the beacon chain deposit contract.""" blockchain_test( pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip6110_deposits/test_modified_contract.py ================================================ """ Test variants of the deposit contract which adheres the log-style as described in EIP-6110. """ import pytest from ethereum_test_exceptions.exceptions import BlockException from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, Header, Requests, Transaction, ) from ethereum_test_tools import Macros as Om from ethereum_test_tools import Opcodes as Op from .helpers import DepositRequest, create_deposit_log_bytes from .spec import Spec, ref_spec_6110 pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.execute(pytest.mark.skip(reason="modifies pre-alloc")), ] REFERENCE_SPEC_GIT_PATH = ref_spec_6110.git_path REFERENCE_SPEC_VERSION = ref_spec_6110.version EVENT_ARGUMENTS_NAMES = ["pubkey", "withdrawal_credentials", "amount", "signature", "index"] EVENT_ARGUMENTS_LAYOUT_TYPE = ["size", "offset"] EVENT_ARGUMENTS = [ f"{name}_{layout}" for name in EVENT_ARGUMENTS_NAMES for layout in EVENT_ARGUMENTS_LAYOUT_TYPE ] EVENT_ARGUMENT_VALUES = ["zero", "max_uint256"] DEFAULT_DEPOSIT_REQUEST = DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=120_000_000_000_000_000, signature=0x03, index=0x0, ) DEFAULT_DEPOSIT_REQUEST_LOG_DATA_DICT = { "pubkey_data": bytes(DEFAULT_DEPOSIT_REQUEST.pubkey), "withdrawal_credentials_data": bytes(DEFAULT_DEPOSIT_REQUEST.withdrawal_credentials), # Note: after converting to bytes, it is converted to little-endian by # `[::-1]` (This happens on-chain also, but this is done by the solidity # contract) "amount_data": bytes.fromhex("0" + DEFAULT_DEPOSIT_REQUEST.amount.hex()[2:])[::-1], "signature_data": bytes(DEFAULT_DEPOSIT_REQUEST.signature), "index_data": bytes(DEFAULT_DEPOSIT_REQUEST.index), } DEFAULT_REQUEST_LOG = create_deposit_log_bytes(**DEFAULT_DEPOSIT_REQUEST_LOG_DATA_DICT) # type: ignore @pytest.mark.parametrize( "include_deposit_event", [ pytest.param( True, marks=pytest.mark.pre_alloc_group( "deposit_extra_logs_with_event", reason="Deposit contract with Transfer log AND deposit event", ), ), pytest.param( False, marks=pytest.mark.pre_alloc_group( "deposit_extra_logs_no_event", reason="Deposit contract with Transfer log but NO deposit event", ), ), ], ) def test_extra_logs( blockchain_test: BlockchainTestFiller, pre: Alloc, include_deposit_event: bool, ) -> None: """ Test deposit contract emitting more log event types than the ones in mainnet. """ # Supplant mainnet contract with a variant that emits a `Transfer`` log If # `include_deposit_event` is `True``, it will also emit a `DepositEvent` # log` # ERC20 token transfer log (Sepolia) # https://sepolia.etherscan.io/tx/ # 0x2d71f3085a796a0539c9cc28acd9073a67cf862260a41475f000dd101279f94f # JSON RPC: curl https://sepolia.infura.io/v3/APIKEY \ -X POST \ -H # "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "method": # "eth_getLogs", "params": [{"address": # "0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D", "blockHash": # "0x8062a17fa791f5dbd59ea68891422e3299ca4e80885a89acf3fc706c8bceef53"}], # "id": 1}' # {"jsonrpc":"2.0","id":1,"result": # [{"removed":false,"logIndex":"0x80","transactionIndex":"0x56", # "transactionHash": # "0x2d71f3085a796a0539c9cc28acd9073a67cf862260a41475f000dd101279f94f", # "blockHash": # "0x8062a17fa791f5dbd59ea68891422e3299ca4e80885a89acf3fc706c8bceef53", # "blockNumber":"0x794fb5", # "address":"0x7f02c3e3c98b133055b8b348b2ac625669ed295d", # "data": # "0x0000000000000000000000000000000000000000000000000000000000000001", # "topics": # ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", # "0x0000000000000000000000006885e36bfcb68cb383dfe90023a462c03bcb2ae5", # "0x00000000000000000000000080b5dc88c98e528bf9cb4b7f0f076ac41da24651"] bytecode = Op.LOG3( # ERC-20 token transfer log ERC-20 token transfers are LOG3, since the # topic, the sender, and receiver are all topics (the sender and # receiver are `indexed` in the solidity event) 0, 32, 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF, 0x000000000000000000000000AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, 0x000000000000000000000000BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB, ) requests = Requests() if include_deposit_event: bytecode += Om.MSTORE(DEFAULT_REQUEST_LOG) + Op.LOG1( 0, len(DEFAULT_REQUEST_LOG), Spec.DEPOSIT_EVENT_SIGNATURE_HASH, ) requests = Requests(DEFAULT_DEPOSIT_REQUEST) bytecode += Op.STOP pre[Spec.DEPOSIT_CONTRACT_ADDRESS] = Account( code=bytecode, nonce=1, balance=0, ) sender = pre.fund_eoa() tx = Transaction( to=Spec.DEPOSIT_CONTRACT_ADDRESS, sender=sender, gas_limit=100_000, ) blockchain_test( pre=pre, blocks=[ Block( txs=[tx], header_verify=Header( requests_hash=requests, ), ), ], post={}, ) @pytest.mark.parametrize( "log_argument,value", [ pytest.param( arg, val, marks=pytest.mark.pre_alloc_group( f"deposit_layout_{arg}_{val}", reason=f"Deposit contract with invalid {arg} set to {val}", ), ) for arg in EVENT_ARGUMENTS for val in EVENT_ARGUMENT_VALUES ], ) @pytest.mark.exception_test def test_invalid_layout( blockchain_test: BlockchainTestFiller, pre: Alloc, log_argument: str, value: str ) -> None: """ Test deposit contract emitting logs with invalid layouts (sizes/offsets). """ log_params = {**DEFAULT_DEPOSIT_REQUEST_LOG_DATA_DICT} log_params[log_argument] = 0 if value == "zero" else 2**256 - 1 # type: ignore deposit_request_log = create_deposit_log_bytes(**log_params) # type: ignore bytecode = Om.MSTORE(deposit_request_log) + Op.LOG1( 0, len(deposit_request_log), Spec.DEPOSIT_EVENT_SIGNATURE_HASH, ) bytecode += Op.STOP pre[Spec.DEPOSIT_CONTRACT_ADDRESS] = Account( code=bytecode, nonce=1, balance=0, ) sender = pre.fund_eoa() tx = Transaction( to=Spec.DEPOSIT_CONTRACT_ADDRESS, sender=sender, gas_limit=100_000, ) blockchain_test( pre=pre, blocks=[ Block( txs=[tx], exception=[ BlockException.INVALID_DEPOSIT_EVENT_LAYOUT, ], ), ], post={}, ) @pytest.mark.parametrize( "slice_bytes", [ pytest.param( True, marks=pytest.mark.pre_alloc_group( "deposit_log_length_short", reason="Deposit contract with shortened log data" ), ), pytest.param( False, marks=pytest.mark.pre_alloc_group( "deposit_log_length_long", reason="Deposit contract with lengthened log data" ), ), ], ) @pytest.mark.exception_test def test_invalid_log_length( blockchain_test: BlockchainTestFiller, pre: Alloc, slice_bytes: bool ) -> None: """ Test deposit contract emitting logs with invalid log length (one byte more or less). """ changed_log = DEFAULT_REQUEST_LOG[:-1] if slice_bytes else DEFAULT_REQUEST_LOG + b"\x00" bytecode = Om.MSTORE(changed_log) + Op.LOG1( 0, len(changed_log), Spec.DEPOSIT_EVENT_SIGNATURE_HASH, ) bytecode += Op.STOP pre[Spec.DEPOSIT_CONTRACT_ADDRESS] = Account( code=bytecode, nonce=1, balance=0, ) sender = pre.fund_eoa() tx = Transaction( to=Spec.DEPOSIT_CONTRACT_ADDRESS, sender=sender, gas_limit=100_000, ) blockchain_test( pre=pre, blocks=[ Block( txs=[tx], exception=[ BlockException.INVALID_DEPOSIT_EVENT_LAYOUT, ], ), ], post={}, ) ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/__init__.py ================================================ """Cross-client EIP-7002 Tests.""" ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/conftest.py ================================================ """Fixtures for the EIP-7002 deposit tests.""" from itertools import zip_longest from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Block, Header, Requests from .helpers import WithdrawalRequest, WithdrawalRequestInteractionBase from .spec import Spec @pytest.fixture def update_pre( pre: Alloc, blocks_withdrawal_requests: List[List[WithdrawalRequestInteractionBase]], ) -> None: """ Init state of the accounts. Every deposit transaction defines their own pre-state requirements, and this fixture aggregates them all. """ for requests in blocks_withdrawal_requests: for r in requests: r.update_pre(pre) @pytest.fixture def included_requests( update_pre: None, # Fixture is used for its side effects blocks_withdrawal_requests: List[List[WithdrawalRequestInteractionBase]], ) -> List[List[WithdrawalRequest]]: """ Return the list of withdrawal requests that should be included in each block. """ excess_withdrawal_requests = 0 carry_over_requests: List[WithdrawalRequest] = [] per_block_included_requests: List[List[WithdrawalRequest]] = [] for block_withdrawal_requests in blocks_withdrawal_requests: # Get fee for the current block current_minimum_fee = Spec.get_fee(excess_withdrawal_requests) # With the fee, get the valid withdrawal requests for the current block current_block_requests = [] for w in block_withdrawal_requests: current_block_requests += w.valid_requests(current_minimum_fee) # Get the withdrawal requests that should be included in the block pending_requests = carry_over_requests + current_block_requests per_block_included_requests.append( pending_requests[: Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK] ) carry_over_requests = pending_requests[Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK :] # Update the excess withdrawal requests excess_withdrawal_requests = Spec.get_excess_withdrawal_requests( excess_withdrawal_requests, len(current_block_requests), ) while carry_over_requests: # Keep adding blocks until all withdrawal requests are included per_block_included_requests.append( carry_over_requests[: Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK] ) carry_over_requests = carry_over_requests[Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK :] return per_block_included_requests @pytest.fixture def timestamp() -> int: """Return the timestamp for the first block.""" return 1 @pytest.fixture def blocks( fork: Fork, update_pre: None, # Fixture is used for its side effects blocks_withdrawal_requests: List[List[WithdrawalRequestInteractionBase]], included_requests: List[List[WithdrawalRequest]], timestamp: int, ) -> List[Block]: """Return the list of blocks that should be included in the test.""" blocks: List[Block] = [] for block_requests, block_included_requests in zip_longest( # type: ignore blocks_withdrawal_requests, included_requests, fillvalue=[], ): header_verify: Header | None = None if fork.header_requests_required( block_number=len(blocks) + 1, timestamp=timestamp, ): header_verify = Header( requests_hash=Requests( *block_included_requests, ) ) else: assert not block_included_requests blocks.append( Block( txs=sum((r.transactions() for r in block_requests), []), header_verify=header_verify, timestamp=timestamp, ) ) timestamp += 1 return blocks + [ # Add an empty block at the end to verify that no more withdrawal # requests are included Block( header_verify=Header(requests_hash=Requests()), timestamp=timestamp, ) ] ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/contract_deploy_tx.json ================================================ { "type": "0x0", "nonce": "0x0", "to": null, "gasLimit": "0x3d090", "gasPrice": "0xe8d4a51000", "maxPriorityFeePerGas": null, "maxFeePerGas": null, "value": "0x0", "input": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f556101f880602d5f395ff33373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd", "v": "0x1b", "r": "0x539", "s": "0x5feeb084551e4e03a3581e269bc2ea2f8d0008", "hash": "0x8ded54be89448d78d4bc97782c0187b099e45380ab681742f9d3754e405c2572", "protected": false, "sender": "0x8646861A7cF453dDD086874d622b0696dE5b9674" } ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/helpers.py ================================================ """Helpers for the EIP-7002 deposit tests.""" from dataclasses import dataclass, field from functools import cached_property from itertools import count from typing import Callable, ClassVar, List from ethereum_test_tools import EOA, Address, Alloc, Bytecode, Transaction from ethereum_test_tools import Opcodes as Op from ethereum_test_tools import WithdrawalRequest as WithdrawalRequestBase from .spec import Spec class WithdrawalRequest(WithdrawalRequestBase): """Class used to describe a withdrawal request in a test.""" fee: int = 0 """ Fee to be paid to the system contract for the withdrawal request. This is different from `amount` which is the amount of gwei to be withdrawn on the beacon chain. """ valid: bool = True """Whether the withdrawal request is valid or not.""" gas_limit: int = 1_000_000 """Gas limit for the call.""" calldata_modifier: Callable[[bytes], bytes] = lambda x: x """Calldata modifier function.""" interaction_contract_address: ClassVar[Address] = Address( Spec.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS ) @property def value(self) -> int: """ Return the value of the call to the withdrawal request contract, equal to the fee to be paid. """ return self.fee @cached_property def calldata(self) -> bytes: """ Return the calldata needed to call the withdrawal request contract and make the withdrawal. """ return self.calldata_modifier( self.validator_pubkey + self.amount.to_bytes(8, byteorder="big") ) def with_source_address(self, source_address: Address) -> "WithdrawalRequest": """ Return a new instance of the withdrawal request with the source address set. """ return self.copy(source_address=source_address) @dataclass(kw_only=True) class WithdrawalRequestInteractionBase: """Base class for all types of withdrawal transactions we want to test.""" sender_balance: int = 1_000_000_000_000_000_000 """Balance of the account that sends the transaction.""" sender_account: EOA | None = None """Account that will send the transaction.""" requests: List[WithdrawalRequest] """Withdrawal request to be included in the block.""" def transactions(self) -> List[Transaction]: """Return a transaction for the withdrawal request.""" raise NotImplementedError def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" raise NotImplementedError def valid_requests(self, current_minimum_fee: int) -> List[WithdrawalRequest]: """ Return the list of withdrawal requests that should be valid in the block. """ raise NotImplementedError @dataclass(kw_only=True) class WithdrawalRequestTransaction(WithdrawalRequestInteractionBase): """ Class used to describe a withdrawal request originated from an externally owned account. """ def transactions(self) -> List[Transaction]: """Return a transaction for the withdrawal request.""" assert self.sender_account is not None, "Sender account not initialized" return [ Transaction( gas_limit=request.gas_limit, gas_price=1_000_000_000, to=request.interaction_contract_address, value=request.value, data=request.calldata, sender=self.sender_account, ) for request in self.requests ] def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" self.sender_account = pre.fund_eoa(self.sender_balance) def valid_requests(self, current_minimum_fee: int) -> List[WithdrawalRequest]: """Return the list of withdrawal requests that are valid.""" assert self.sender_account is not None, "Sender account not initialized" return [ request.with_source_address(self.sender_account) for request in self.requests if request.valid and request.fee >= current_minimum_fee ] @dataclass(kw_only=True) class WithdrawalRequestContract(WithdrawalRequestInteractionBase): """Class used to describe a withdrawal originated from a contract.""" tx_gas_limit: int = 1_000_000 """Gas limit for the transaction.""" contract_balance: int = 1_000_000_000_000_000_000 """ Balance of the contract that will make the call to the pre-deploy contract. """ contract_address: Address | None = None """ Address of the contract that will make the call to the pre-deploy contract. """ entry_address: Address | None = None """Address to send the transaction to.""" call_type: Op = field(default_factory=lambda: Op.CALL) """Type of call to be used to make the withdrawal request.""" call_depth: int = 2 """Frame depth of the pre-deploy contract when it executes the call.""" extra_code: Bytecode = field(default_factory=Bytecode) """Extra code to be added to the contract code.""" @property def contract_code(self) -> Bytecode: """Contract code used by the relay contract.""" code = Bytecode() current_offset = 0 for r in self.requests: value_arg = [r.value] if self.call_type in (Op.CALL, Op.CALLCODE) else [] code += Op.CALLDATACOPY(0, current_offset, len(r.calldata)) + Op.POP( self.call_type( Op.GAS if r.gas_limit == -1 else r.gas_limit, r.interaction_contract_address, *value_arg, 0, len(r.calldata), 0, 0, ) ) current_offset += len(r.calldata) return code + self.extra_code def transactions(self) -> List[Transaction]: """Return a transaction for the withdrawal request.""" assert self.entry_address is not None, "Entry address not initialized" return [ Transaction( gas_limit=self.tx_gas_limit, gas_price=1_000_000_000, to=self.entry_address, value=0, data=b"".join(r.calldata for r in self.requests), sender=self.sender_account, ) ] def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" self.sender_account = pre.fund_eoa(self.sender_balance) self.contract_address = pre.deploy_contract( code=self.contract_code, balance=self.contract_balance ) self.entry_address = self.contract_address if self.call_depth > 2: for _ in range(1, self.call_depth - 1): self.entry_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.POP( Op.CALL( Op.GAS, self.entry_address, 0, 0, Op.CALLDATASIZE, 0, 0, ) ) ) def valid_requests(self, current_minimum_fee: int) -> List[WithdrawalRequest]: """Return the list of withdrawal requests that are valid.""" assert self.contract_address is not None, "Contract address not initialized" return [ r.with_source_address(self.contract_address) for r in self.requests if r.valid and r.value >= current_minimum_fee ] def get_n_fee_increments(n: int) -> List[int]: """Get the first N excess withdrawal requests that increase the fee.""" excess_withdrawal_requests_counts = [] last_fee = 1 for i in count(0): if Spec.get_fee(i) > last_fee: excess_withdrawal_requests_counts.append(i) last_fee = Spec.get_fee(i) if len(excess_withdrawal_requests_counts) == n: break return excess_withdrawal_requests_counts def get_n_fee_increment_blocks(n: int) -> List[List[WithdrawalRequestContract]]: """ Return N blocks that should be included in the test such that each subsequent block has an increasing fee for the withdrawal requests. This is done by calculating the number of withdrawals required to reach the next fee increment and creating a block with that number of withdrawal requests plus the number of withdrawals required to reach the target. """ blocks = [] previous_excess = 0 withdrawal_index = 0 previous_fee = 0 for required_excess_withdrawals in get_n_fee_increments(n): withdrawals_required = ( required_excess_withdrawals + Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK - previous_excess ) fee = Spec.get_fee(previous_excess) assert fee > previous_fee blocks.append( [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=i, amount=0, fee=fee, ) for i in range(withdrawal_index, withdrawal_index + withdrawals_required) ], ) ], ) previous_fee = fee withdrawal_index += withdrawals_required previous_excess = required_excess_withdrawals return blocks ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/spec.py ================================================ """ Common procedures to test [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002). """ from dataclasses import dataclass from ethereum_test_tools import Address @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7002 = ReferenceSpec("EIPS/eip-7002.md", "695ac757472b9bbbdcbc88a020ba15c1ac782869") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7002 specifications as defined at https://eips.ethereum.org/EIPS/eip-7002#configuration. If the parameter is not currently used within the tests, it is commented out. """ WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS = 0x00000961EF480EB55E80D19AD83579A64C007002 WITHDRAWAL_REQUEST_PREDEPLOY_SENDER = Address(0x8646861A7CF453DDD086874D622B0696DE5B9674) SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE SYSTEM_CALL_GAS_LIMIT = 30_000_000 EXCESS_WITHDRAWAL_REQUESTS_STORAGE_SLOT = 0 WITHDRAWAL_REQUEST_COUNT_STORAGE_SLOT = 1 WITHDRAWAL_REQUEST_QUEUE_HEAD_STORAGE_SLOT = ( 2 # Pointer to head of the withdrawal request message queue ) WITHDRAWAL_REQUEST_QUEUE_TAIL_STORAGE_SLOT = ( 3 # Pointer to the tail of the withdrawal request message queue ) WITHDRAWAL_REQUEST_QUEUE_STORAGE_OFFSET = ( 4 # The start memory slot of the in-state withdrawal request message queue ) MAX_WITHDRAWAL_REQUESTS_PER_BLOCK = ( 16 # Maximum number of withdrawal requests that can be de-queued into a block ) TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK = 2 MIN_WITHDRAWAL_REQUEST_FEE = 1 WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION = 17 EXCESS_RETURN_GAS_STIPEND = 2300 MAX_AMOUNT = 2**64 - 1 @staticmethod def fake_exponential(factor: int, numerator: int, denominator: int) -> int: """Calculate the withdrawal request fee.""" i = 1 output = 0 numerator_accumulator = factor * denominator while numerator_accumulator > 0: output += numerator_accumulator numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i) i += 1 return output // denominator @staticmethod def get_fee(excess_withdrawal_requests: int) -> int: """Calculate the fee for the excess withdrawal requests.""" return Spec.fake_exponential( Spec.MIN_WITHDRAWAL_REQUEST_FEE, excess_withdrawal_requests, Spec.WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION, ) @staticmethod def get_excess_withdrawal_requests(previous_excess: int, count: int) -> int: """Calculate the new excess withdrawal requests.""" if previous_excess + count > Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK: return previous_excess + count - Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK return 0 ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/test_contract_deployment.py ================================================ """ Tests [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002). """ from os.path import realpath from pathlib import Path from typing import Any, Generator import pytest from ethereum_test_forks import Fork, Prague from ethereum_test_tools import ( Address, Alloc, Block, Header, Requests, Transaction, generate_system_contract_deploy_test, ) from .helpers import WithdrawalRequest from .spec import Spec, ref_spec_7002 REFERENCE_SPEC_GIT_PATH = ref_spec_7002.git_path REFERENCE_SPEC_VERSION = ref_spec_7002.version @pytest.mark.pre_alloc_group( "separate", reason="Deploys withdrawal system contract at hardcoded predeploy address" ) @generate_system_contract_deploy_test( fork=Prague, tx_json_path=Path(realpath(__file__)).parent / "contract_deploy_tx.json", expected_deploy_address=Address(Spec.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS), fail_on_empty_code=True, ) def test_system_contract_deployment( *, fork: Fork, pre: Alloc, **kwargs: Any, ) -> Generator[Block, None, None]: """Verify calling the withdrawals system contract after deployment.""" sender = pre.fund_eoa() withdrawal_request = WithdrawalRequest( validator_pubkey=0x01, amount=1, fee=Spec.get_fee(0), source_address=sender, ) pre.fund_address(sender, withdrawal_request.value) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() test_transaction_gas = intrinsic_gas_calculator(calldata=withdrawal_request.calldata) test_transaction = Transaction( data=withdrawal_request.calldata, gas_limit=test_transaction_gas * 10, to=Spec.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS, sender=sender, value=withdrawal_request.value, ) yield Block( txs=[test_transaction], header=Header( requests_hash=Requests(withdrawal_request), ), ) ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002). """ # noqa: E501 from typing import List import pytest from ethereum_test_tools import ( Alloc, Block, BlockchainTestFiller, ) from .helpers import WithdrawalRequest, WithdrawalRequestTransaction from .spec import Spec, ref_spec_7002 REFERENCE_SPEC_GIT_PATH = ref_spec_7002.git_path REFERENCE_SPEC_VERSION = ref_spec_7002.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] @pytest.mark.parametrize( "blocks_withdrawal_requests", [ pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ) ], ), ], ], id="single_withdrawal_request", ), ], ) def test_eip_7002( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """Test making a withdrawal request.""" blockchain_test( pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py ================================================ """ Tests [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002). """ from typing import List import pytest from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Transaction, generate_system_contract_error_test, ) from ethereum_test_tools import Macros as Om from ethereum_test_tools import Opcodes as Op from ethereum_test_types import Requests from .helpers import ( WithdrawalRequest, WithdrawalRequestTransaction, ) from .spec import Spec as Spec_EIP7002 from .spec import ref_spec_7002 REFERENCE_SPEC_GIT_PATH: str = ref_spec_7002.git_path REFERENCE_SPEC_VERSION: str = ref_spec_7002.version pytestmark: pytest.MarkDecorator = pytest.mark.valid_from("Prague") def withdrawal_list_with_custom_fee(n: int) -> List[WithdrawalRequest]: # noqa: D103 return [ WithdrawalRequest( validator_pubkey=i + 1, amount=0, fee=Spec_EIP7002.get_fee(0), ) for i in range(n) ] @pytest.mark.parametrize( "requests_list", [ pytest.param( [], id="empty_request_list", ), pytest.param( [ *withdrawal_list_with_custom_fee(1), ], id="1_withdrawal_request", ), pytest.param( [ *withdrawal_list_with_custom_fee(15), ], id="15_withdrawal_requests", ), pytest.param( [ *withdrawal_list_with_custom_fee(16), ], id="16_withdrawal_requests", ), pytest.param( [ *withdrawal_list_with_custom_fee(17), ], id="17_withdrawal_requests", ), pytest.param( [ *withdrawal_list_with_custom_fee(18), ], id="18_withdrawal_requests", ), ], ) @pytest.mark.pre_alloc_group("separate", reason="Deploys custom withdrawal contract bytecode") def test_extra_withdrawals( blockchain_test: BlockchainTestFiller, pre: Alloc, requests_list: List[WithdrawalRequest], ) -> None: """ Test how clients were to behave when more than 16 withdrawals would be allowed per block. """ modified_code: Bytecode = Bytecode() memory_offset: int = 0 amount_of_requests: int = 0 for withdrawal_request in requests_list: # update memory_offset with the correct value withdrawal_request_bytes_amount: int = len(bytes(withdrawal_request)) assert withdrawal_request_bytes_amount == 76, ( "Expected withdrawal request to be of size 76 but got size " f"{withdrawal_request_bytes_amount}" ) memory_offset += withdrawal_request_bytes_amount modified_code += Om.MSTORE(bytes(withdrawal_request), memory_offset) amount_of_requests += 1 modified_code += Op.RETURN(0, Op.MSIZE()) pre[Spec_EIP7002.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS] = Account( code=modified_code, nonce=1, balance=0, ) # given a list of withdrawal requests construct a withdrawal request # transaction withdrawal_request_transaction = WithdrawalRequestTransaction(requests=requests_list) # prepare withdrawal senders withdrawal_request_transaction.update_pre(pre=pre) # get transaction list txs: List[Transaction] = withdrawal_request_transaction.transactions() blockchain_test( pre=pre, blocks=[ Block( txs=txs, requests_hash=Requests(*requests_list), ), ], post={}, ) @pytest.mark.parametrize( "system_contract", [Address(Spec_EIP7002.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS)] ) @pytest.mark.pre_alloc_group("separate", reason="Deploys custom withdrawal contract bytecode") @generate_system_contract_error_test( # type: ignore[arg-type] max_gas_limit=Spec_EIP7002.SYSTEM_CALL_GAS_LIMIT, ) def test_system_contract_errors() -> None: """ Test system contract raising different errors when called by the system account at the end of the block execution. To see the list of generated tests, please refer to the `generate_system_contract_error_test` decorator definition. """ pass ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py ================================================ """ Tests [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002). """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Address, Alloc, Block, BlockchainTestFiller, BlockException, Environment, Header, Macros, Requests, TestAddress, TestAddress2, ) from ethereum_test_tools import Opcodes as Op from .helpers import ( WithdrawalRequest, WithdrawalRequestContract, WithdrawalRequestInteractionBase, WithdrawalRequestTransaction, get_n_fee_increment_blocks, ) from .spec import Spec, ref_spec_7002 REFERENCE_SPEC_GIT_PATH = ref_spec_7002.git_path REFERENCE_SPEC_VERSION = ref_spec_7002.version pytestmark = pytest.mark.valid_from("Prague") @pytest.mark.parametrize( "blocks_withdrawal_requests", [ pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ) ], ), ], ], id="single_block_single_withdrawal_request_from_eoa", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=0, valid=False, ) ], ), ], ], id="single_block_single_withdrawal_request_from_eoa_insufficient_fee", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), calldata_modifier=lambda x: x[:-1], valid=False, ) ], ), ], ], id="single_block_single_withdrawal_request_from_eoa_input_too_short", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), calldata_modifier=lambda x: x + b"\x00", valid=False, ) ], ), ], ], id="single_block_single_withdrawal_request_from_eoa_input_too_long", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), WithdrawalRequest( validator_pubkey=0x02, amount=Spec.MAX_AMOUNT - 1, fee=Spec.get_fee(0), ), ], ), ], ], id="single_block_multiple_withdrawal_request_from_same_eoa", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ) ], ), WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x02, amount=Spec.MAX_AMOUNT - 1, fee=Spec.get_fee(0), ) ], ), ], ], id="single_block_multiple_withdrawal_request_from_different_eoa", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=0 if i % 2 == 0 else Spec.MAX_AMOUNT, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ], ) ], ], id="single_block_max_withdrawal_requests_from_eoa", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=0, ), WithdrawalRequest( validator_pubkey=0x02, amount=Spec.MAX_AMOUNT - 1, fee=Spec.get_fee(0), ), ] ), ], ], id="single_block_multiple_withdrawal_request_first_reverts", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), WithdrawalRequest( validator_pubkey=0x02, amount=Spec.MAX_AMOUNT - 1, fee=0, ), ] ), ], ], id="single_block_multiple_withdrawal_request_last_reverts", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), # Value obtained from trace minus one gas_limit=114_247 - 1, valid=False, ), WithdrawalRequest( validator_pubkey=0x02, amount=0, fee=Spec.get_fee(0), ), ] ), ], ], id="single_block_multiple_withdrawal_request_first_oog", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), WithdrawalRequest( validator_pubkey=0x02, amount=0, fee=Spec.get_fee(0), # Value obtained from trace minus one gas_limit=80_047 - 1, valid=False, ), ] ), ], ], id="single_block_multiple_withdrawal_request_last_oog", ), pytest.param( [ [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=0 if i % 2 == 0 else Spec.MAX_AMOUNT, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK * 2) ] ) ], ], id="multiple_block_above_max_withdrawal_requests_from_eoa", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), ] ), ], ], id="single_block_single_withdrawal_request_from_contract", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), ], call_depth=3, ), ], ], id="single_block_single_withdrawal_request_from_contract_call_depth_3", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), ], call_depth=264, tx_gas_limit=16_777_216, ), ], ], id="single_block_single_withdrawal_request_from_contract_call_depth_high", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ], ), ], ], id="single_block_multiple_withdrawal_requests_from_contract", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=1, amount=Spec.MAX_AMOUNT, fee=0, ) ] + [ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, fee=Spec.get_fee(0), ) for i in range(1, Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ], ), ], ], id="single_block_multiple_withdrawal_requests_from_contract_first_reverts", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK - 1) ] + [ WithdrawalRequest( validator_pubkey=Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK, amount=( Spec.MAX_AMOUNT - 1 if (Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK - 1) % 2 == 0 else 0 ), fee=0, ) ], ), ], ], id="single_block_multiple_withdrawal_requests_from_contract_last_reverts", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=1, amount=Spec.MAX_AMOUNT - 1, gas_limit=100, fee=Spec.get_fee(0), valid=False, ) ] + [ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, gas_limit=1_000_000, fee=Spec.get_fee(0), valid=True, ) for i in range(1, Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ], ), ], ], id="single_block_multiple_withdrawal_requests_from_contract_first_oog", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, fee=Spec.get_fee(0), gas_limit=1_000_000, valid=True, ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ] + [ WithdrawalRequest( validator_pubkey=Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK, amount=Spec.MAX_AMOUNT - 1, gas_limit=100, fee=Spec.get_fee(0), valid=False, ) ], ), ], ], id="single_block_multiple_withdrawal_requests_from_contract_last_oog", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, fee=Spec.get_fee(0), valid=False, ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ], extra_code=Op.REVERT(0, 0), ), ], ], id="single_block_multiple_withdrawal_requests_from_contract_caller_reverts", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=i + 1, amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0, fee=Spec.get_fee(0), valid=False, ) for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK) ], extra_code=Macros.OOG(), ), ], ], id="single_block_multiple_withdrawal_requests_from_contract_caller_oog", ), pytest.param( # Test the first 50 fee increments get_n_fee_increment_blocks(50), id="multiple_block_fee_increments", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.DELEGATECALL, ), WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.STATICCALL, ), WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.CALLCODE, ), ], ], id="single_block_single_withdrawal_request_delegatecall_staticcall_callcode", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.DELEGATECALL, call_depth=3, ), WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.STATICCALL, call_depth=3, ), WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.CALLCODE, call_depth=3, ), ], ], id="single_block_single_withdrawal_request_delegatecall_staticcall_callcode_call_depth_3", ), pytest.param( [ [ WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.DELEGATECALL, call_depth=1024, ), WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.STATICCALL, call_depth=1024, ), WithdrawalRequestContract( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.CALLCODE, call_depth=1024, ), ], ], id="single_block_single_withdrawal_request_delegatecall_staticcall_callcode_call_depth_high", ), ], ) @pytest.mark.pre_alloc_group( "withdrawal_requests", reason="Tests standard withdrawal request functionality" ) def test_withdrawal_requests( blockchain_test: BlockchainTestFiller, blocks: List[Block], pre: Alloc, ) -> None: """Test making a withdrawal request to the beacon chain.""" blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) @pytest.mark.parametrize( "requests,block_body_override_requests,exception", [ pytest.param( [], [ WithdrawalRequest( validator_pubkey=0x01, amount=0, source_address=Address(0), ), ], BlockException.INVALID_REQUESTS, id="no_withdrawals_non_empty_requests_list", ), pytest.param( [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), ] ), ], [], BlockException.INVALID_REQUESTS, id="single_withdrawal_request_empty_requests_list", ), pytest.param( [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), ] ), ], [ WithdrawalRequest( validator_pubkey=0x02, amount=0, source_address=TestAddress, ) ], BlockException.INVALID_REQUESTS, id="single_withdrawal_request_public_key_mismatch", ), pytest.param( [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ) ], ), ], [ WithdrawalRequest( validator_pubkey=0x01, amount=1, source_address=TestAddress, ) ], BlockException.INVALID_REQUESTS, id="single_withdrawal_request_amount_mismatch", ), pytest.param( [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ) ], ), ], [ WithdrawalRequest( validator_pubkey=0x01, amount=0, source_address=TestAddress2, ) ], BlockException.INVALID_REQUESTS, id="single_withdrawal_request_source_address_mismatch", ), pytest.param( [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ), WithdrawalRequest( validator_pubkey=0x02, amount=0, fee=Spec.get_fee(0), ), ], ), ], [ WithdrawalRequest( validator_pubkey=0x02, amount=0, source_address=TestAddress, ), WithdrawalRequest( validator_pubkey=0x01, amount=0, source_address=TestAddress, ), ], BlockException.INVALID_REQUESTS, id="two_withdrawal_requests_out_of_order", ), pytest.param( [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(0), ) ], ), ], [ WithdrawalRequest( validator_pubkey=0x01, amount=0, source_address=TestAddress, ), WithdrawalRequest( validator_pubkey=0x01, amount=0, source_address=TestAddress, ), ], BlockException.INVALID_REQUESTS, id="single_withdrawal_requests_duplicate_in_requests_list", ), ], ) @pytest.mark.exception_test @pytest.mark.pre_alloc_group( "withdrawal_requests", reason="Tests standard withdrawal request functionality" ) def test_withdrawal_requests_negative( pre: Alloc, fork: Fork, blockchain_test: BlockchainTestFiller, requests: List[WithdrawalRequestInteractionBase], block_body_override_requests: List[WithdrawalRequest], exception: BlockException, ) -> None: """ Test blocks where the requests list and the actual withdrawal requests that happened in the block's transactions do not match. """ for d in requests: d.update_pre(pre) # No previous block so fee is the base fee = 1 current_block_requests = [] for w in requests: current_block_requests += w.valid_requests(fee) included_requests = current_block_requests[: Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK] blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=[ Block( txs=sum((r.transactions() for r in requests), []), header_verify=Header( requests_hash=Requests( *included_requests, ), ), requests=( Requests( *block_body_override_requests, ).requests_list if block_body_override_requests is not None else None ), exception=exception, ) ], ) ================================================ FILE: tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests_during_fork.py ================================================ """ Tests [EIP-7002: Execution layer triggerable withdrawals](https://eips.ethereum.org/EIPS/eip-7002). """ from os.path import realpath from pathlib import Path from typing import List import pytest from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Environment, Transaction, ) from .helpers import WithdrawalRequest, WithdrawalRequestTransaction from .spec import Spec, ref_spec_7002 REFERENCE_SPEC_GIT_PATH = ref_spec_7002.git_path REFERENCE_SPEC_VERSION = ref_spec_7002.version pytestmark = pytest.mark.valid_at_transition_to("Prague") BLOCKS_BEFORE_FORK = 2 @pytest.mark.parametrize( "blocks_withdrawal_requests", [ pytest.param( [ [], # No withdrawal requests, but we deploy the contract [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x01, amount=0, fee=Spec.get_fee(10), # Pre-fork withdrawal request valid=False, ) ], ), ], [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x02, amount=0, fee=Spec.get_fee(10), # First post-fork withdrawal request, will not # be included because the inhibitor is cleared # at the end of the block valid=False, ) ], ), ], [ WithdrawalRequestTransaction( requests=[ WithdrawalRequest( validator_pubkey=0x03, amount=0, fee=Spec.get_fee(0), # First withdrawal that is valid valid=True, ) ], ), ], ], id="one_valid_request_second_block_after_fork", ), ], ) @pytest.mark.parametrize("timestamp", [15_000 - BLOCKS_BEFORE_FORK], ids=[""]) @pytest.mark.pre_alloc_group( "separate", reason="Deploys withdrawal system contract at fork transition" ) def test_withdrawal_requests_during_fork( blockchain_test: BlockchainTestFiller, blocks: List[Block], pre: Alloc, ) -> None: """ Test making a withdrawal request to the beacon chain at the time of the fork. """ # We need to delete the deployed contract that comes by default in the pre # state. pre[Spec.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS] = Account( balance=0, code=bytes(), nonce=0, storage={}, ) with open(Path(realpath(__file__)).parent / "contract_deploy_tx.json", mode="r") as f: deploy_tx = Transaction.model_validate_json(f.read()).with_signature_and_sender() deployer_address = deploy_tx.sender assert deployer_address is not None assert Address(deployer_address) == Spec.WITHDRAWAL_REQUEST_PREDEPLOY_SENDER tx_gas_price = deploy_tx.gas_price assert tx_gas_price is not None deployer_required_balance = deploy_tx.gas_limit * tx_gas_price pre.fund_address(Spec.WITHDRAWAL_REQUEST_PREDEPLOY_SENDER, deployer_required_balance) # Append the deployment transaction to the first block blocks[0].txs.append(deploy_tx) blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip7251_consolidations/__init__.py ================================================ """Cross-client EIP-7251 Tests.""" ================================================ FILE: tests/prague/eip7251_consolidations/conftest.py ================================================ """Fixtures for the EIP-7251 consolidations tests.""" from itertools import zip_longest from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Block, Header, Requests from .helpers import ConsolidationRequest, ConsolidationRequestInteractionBase from .spec import Spec @pytest.fixture def update_pre( pre: Alloc, blocks_consolidation_requests: List[List[ConsolidationRequestInteractionBase]], ) -> None: """ Init state of the accounts. Every deposit transaction defines their own pre-state requirements, and this fixture aggregates them all. """ for requests in blocks_consolidation_requests: for r in requests: r.update_pre(pre) @pytest.fixture def included_requests( update_pre: None, # Fixture is used for its side effects blocks_consolidation_requests: List[List[ConsolidationRequestInteractionBase]], ) -> List[List[ConsolidationRequest]]: """ Return the list of consolidation requests that should be included in each block. """ excess_consolidation_requests = 0 carry_over_requests: List[ConsolidationRequest] = [] per_block_included_requests: List[List[ConsolidationRequest]] = [] for block_consolidation_requests in blocks_consolidation_requests: # Get fee for the current block current_minimum_fee = Spec.get_fee(excess_consolidation_requests) # With the fee, get the valid consolidation requests for the current # block current_block_requests = [] for w in block_consolidation_requests: current_block_requests += w.valid_requests(current_minimum_fee) # Get the consolidation requests that should be included in the block pending_requests = carry_over_requests + current_block_requests per_block_included_requests.append( pending_requests[: Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK] ) carry_over_requests = pending_requests[Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK :] # Update the excess consolidation requests excess_consolidation_requests = Spec.get_excess_consolidation_requests( excess_consolidation_requests, len(current_block_requests), ) while carry_over_requests: # Keep adding blocks until all consolidation requests are included per_block_included_requests.append( carry_over_requests[: Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK] ) carry_over_requests = carry_over_requests[Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK :] return per_block_included_requests @pytest.fixture def timestamp() -> int: """Return the timestamp for the first block.""" return 1 @pytest.fixture def blocks( fork: Fork, update_pre: None, # Fixture is used for its side effects blocks_consolidation_requests: List[List[ConsolidationRequestInteractionBase]], included_requests: List[List[ConsolidationRequest]], timestamp: int, ) -> List[Block]: """Return the list of blocks that should be included in the test.""" blocks: List[Block] = [] for block_requests, block_included_requests in zip_longest( # type: ignore blocks_consolidation_requests, included_requests, fillvalue=[], ): header_verify: Header | None = None if fork.header_requests_required( block_number=len(blocks) + 1, timestamp=timestamp, ): header_verify = Header(requests_hash=Requests(*block_included_requests)) else: assert not block_included_requests blocks.append( Block( txs=sum((r.transactions() for r in block_requests), []), header_verify=header_verify, timestamp=timestamp, ) ) timestamp += 1 return blocks + [ Block( header_verify=Header(requests_hash=Requests()), timestamp=timestamp, ) ] # Add an empty block at the end to verify that no more consolidation # requests are included ================================================ FILE: tests/prague/eip7251_consolidations/contract_deploy_tx.json ================================================ { "type": "0x0", "nonce": "0x0", "to": null, "gasLimit": "0x3d090", "gasPrice": "0xe8d4a51000", "maxPriorityFeePerGas": null, "maxFeePerGas": null, "value": "0x0", "input": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5561019e80602d5f395ff33373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd", "v": "0x1b", "r": "0x539", "s": "0x0c0730f92dc275b663d377a7cbb141b6600052", "hash": "0x379269d571beff3ed1d8eba3abb24076a7267b0eaf0cc66d728fb0544f5a690d", "protected": false, "sender": "0x13d1913d623E6a9D8811736359E50fD31Fe54fCA" } ================================================ FILE: tests/prague/eip7251_consolidations/helpers.py ================================================ """Helpers for the EIP-7251 consolidation tests.""" from dataclasses import dataclass, field from functools import cached_property from itertools import count from typing import Callable, ClassVar, List from ethereum_test_tools import EOA, Address, Alloc, Bytecode, Transaction from ethereum_test_tools import ConsolidationRequest as ConsolidationRequestBase from ethereum_test_tools import Opcodes as Op from .spec import Spec class ConsolidationRequest(ConsolidationRequestBase): """Class used to describe a consolidation request in a test.""" fee: int = 0 """Fee to be paid to the system contract for the consolidation request.""" valid: bool = True """Whether the consolidation request is valid or not.""" gas_limit: int = 1_000_000 """Gas limit for the call.""" calldata_modifier: Callable[[bytes], bytes] = lambda x: x """Calldata modifier function.""" interaction_contract_address: ClassVar[Address] = Address( Spec.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS ) @property def value(self) -> int: """ Return the value of the call to the consolidation request contract, equal to the fee to be paid. """ return self.fee @cached_property def calldata(self) -> bytes: """ Return the calldata needed to call the consolidation request contract and make the consolidation. """ return self.calldata_modifier(self.source_pubkey + self.target_pubkey) def with_source_address(self, source_address: Address) -> "ConsolidationRequest": """ Return a new instance of the consolidation request with the source address set. """ return self.copy(source_address=source_address) @dataclass(kw_only=True) class ConsolidationRequestInteractionBase: """ Base class for all types of consolidation transactions we want to test. """ sender_balance: int = 1_000_000_000_000_000_000 """Balance of the account that sends the transaction.""" sender_account: EOA | None = None """Account that will send the transaction.""" requests: List[ConsolidationRequest] """Consolidation requests to be included in the block.""" def transactions(self) -> List[Transaction]: """Return a transaction for the consolidation request.""" raise NotImplementedError def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" raise NotImplementedError def valid_requests(self, current_minimum_fee: int) -> List[ConsolidationRequest]: """ Return the list of consolidation requests that should be valid in the block. """ raise NotImplementedError @dataclass(kw_only=True) class ConsolidationRequestTransaction(ConsolidationRequestInteractionBase): """ Class to describe a consolidation request originated from an externally owned account. """ def transactions(self) -> List[Transaction]: """Return a transaction for the consolidation request.""" assert self.sender_account is not None, "Sender account not initialized" return [ Transaction( gas_limit=request.gas_limit, gas_price=1_000_000_000, to=request.interaction_contract_address, value=request.value, data=request.calldata, sender=self.sender_account, ) for request in self.requests ] def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" self.sender_account = pre.fund_eoa(self.sender_balance) def valid_requests(self, current_minimum_fee: int) -> List[ConsolidationRequest]: """Return the list of consolidation requests that are valid.""" assert self.sender_account is not None, "Sender account not initialized" return [ request.with_source_address(self.sender_account) for request in self.requests if request.valid and request.fee >= current_minimum_fee ] @dataclass(kw_only=True) class ConsolidationRequestContract(ConsolidationRequestInteractionBase): """Class used to describe a consolidation originated from a contract.""" tx_gas_limit: int = 10_000_000 """Gas limit for the transaction.""" contract_balance: int = 1_000_000_000_000_000_000 """ Balance of the contract that will make the call to the pre-deploy contract. """ contract_address: Address | None = None """ Address of the contract that will make the call to the pre-deploy contract. """ entry_address: Address | None = None """Address to send the transaction to.""" call_type: Op = field(default_factory=lambda: Op.CALL) """Type of call to be used to make the consolidation request.""" call_depth: int = 2 """Frame depth of the pre-deploy contract when it executes the call.""" extra_code: Bytecode = field(default_factory=Bytecode) """Extra code to be added to the contract code.""" @property def contract_code(self) -> Bytecode: """Contract code used by the relay contract.""" code = Bytecode() current_offset = 0 for r in self.requests: value_arg = [r.value] if self.call_type in (Op.CALL, Op.CALLCODE) else [] code += Op.CALLDATACOPY(0, current_offset, len(r.calldata)) + Op.POP( self.call_type( Op.GAS if r.gas_limit == -1 else r.gas_limit, r.interaction_contract_address, *value_arg, 0, len(r.calldata), 0, 0, ) ) current_offset += len(r.calldata) return code + self.extra_code def transactions(self) -> List[Transaction]: """Return a transaction for the consolidation request.""" assert self.entry_address is not None, "Entry address not initialized" return [ Transaction( gas_limit=self.tx_gas_limit, gas_price=1_000_000_000, to=self.entry_address, value=0, data=b"".join(r.calldata for r in self.requests), sender=self.sender_account, ) ] def update_pre(self, pre: Alloc) -> None: """Return the pre-state of the account.""" self.sender_account = pre.fund_eoa(self.sender_balance) self.contract_address = pre.deploy_contract( code=self.contract_code, balance=self.contract_balance ) self.entry_address = self.contract_address if self.call_depth > 2: for _ in range(1, self.call_depth - 1): self.entry_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.POP( Op.CALL( Op.GAS, self.entry_address, 0, 0, Op.CALLDATASIZE, 0, 0, ) ) ) def valid_requests(self, current_minimum_fee: int) -> List[ConsolidationRequest]: """Return the list of consolidation requests that are valid.""" assert self.contract_address is not None, "Contract address not initialized" return [ r.with_source_address(self.contract_address) for r in self.requests if r.valid and r.value >= current_minimum_fee ] def get_n_fee_increments(n: int) -> List[int]: """Get the first N excess consolidation requests that increase the fee.""" excess_consolidation_requests_counts = [] last_fee = 1 for i in count(0): if Spec.get_fee(i) > last_fee: excess_consolidation_requests_counts.append(i) last_fee = Spec.get_fee(i) if len(excess_consolidation_requests_counts) == n: break return excess_consolidation_requests_counts def get_n_fee_increment_blocks(n: int) -> List[List[ConsolidationRequestContract]]: """ Return N blocks that should be included in the test such that each subsequent block has an increasing fee for the consolidation requests. This is done by calculating the number of consolidations required to reach the next fee increment and creating a block with that number of consolidation requests plus the number of consolidations required to reach the target. """ blocks = [] previous_excess = 0 consolidation_index = 0 previous_fee = 0 for required_excess_consolidations in get_n_fee_increments(n): consolidations_required = ( required_excess_consolidations + Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK - previous_excess ) fee = Spec.get_fee(previous_excess) assert fee > previous_fee blocks.append( [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=fee, ) for i in range( consolidation_index, consolidation_index + consolidations_required ) ], ) ], ) previous_fee = fee consolidation_index += consolidations_required previous_excess = required_excess_consolidations return blocks ================================================ FILE: tests/prague/eip7251_consolidations/spec.py ================================================ """Defines EIP-7251 specification constants and functions.""" from dataclasses import dataclass from ethereum_test_tools import Address @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7251 = ReferenceSpec("EIPS/eip-7251.md", "f29c0eda1e7495c071ef5b25fbd850dc3ef6bfdf") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7251 specifications as defined at https://eips.ethereum.org/EIPS/eip-7251#execution-layer. """ CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS = 0x0000BBDDC7CE488642FB579F8B00F3A590007251 CONSOLIDATION_REQUEST_PREDEPLOY_SENDER = Address(0x13D1913D623E6A9D8811736359E50FD31FE54FCA) SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE SYSTEM_CALL_GAS_LIMIT = 30_000_000 EXCESS_CONSOLIDATION_REQUESTS_STORAGE_SLOT = 0 CONSOLIDATION_REQUEST_COUNT_STORAGE_SLOT = 1 CONSOLIDATION_REQUEST_QUEUE_HEAD_STORAGE_SLOT = ( 2 # Pointer to head of the consolidation request message queue ) CONSOLIDATION_REQUEST_QUEUE_TAIL_STORAGE_SLOT = ( 3 # Pointer to the tail of the consolidation request message queue ) CONSOLIDATION_REQUEST_QUEUE_STORAGE_OFFSET = ( 4 # The start memory slot of the in-state consolidation request message queue ) MAX_CONSOLIDATION_REQUESTS_PER_BLOCK = ( 2 # Maximum number of consolidation requests that can be de-queued into a block ) TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK = 1 MIN_CONSOLIDATION_REQUEST_FEE = 1 CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION = 17 EXCESS_INHIBITOR = 1181 @staticmethod def fake_exponential(factor: int, numerator: int, denominator: int) -> int: """Calculate the consolidation request fee.""" i = 1 output = 0 numerator_accumulator = factor * denominator while numerator_accumulator > 0: output += numerator_accumulator numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i) i += 1 return output // denominator @staticmethod def get_fee(excess_consolidation_requests: int) -> int: """Calculate the fee for the excess consolidation requests.""" return Spec.fake_exponential( Spec.MIN_CONSOLIDATION_REQUEST_FEE, excess_consolidation_requests, Spec.CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION, ) @staticmethod def get_excess_consolidation_requests(previous_excess: int, count: int) -> int: """Calculate the new excess consolidation requests.""" if previous_excess + count > Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK: return previous_excess + count - Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK return 0 ================================================ FILE: tests/prague/eip7251_consolidations/test_consolidations.py ================================================ """ Tests [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://eips.ethereum.org/EIPS/eip-7251). """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Address, Alloc, Block, BlockchainTestFiller, BlockException, Environment, Header, Macros, Requests, TestAddress, TestAddress2, ) from ethereum_test_tools import Opcodes as Op from .helpers import ( ConsolidationRequest, ConsolidationRequestContract, ConsolidationRequestInteractionBase, ConsolidationRequestTransaction, get_n_fee_increment_blocks, ) from .spec import Spec, ref_spec_7251 REFERENCE_SPEC_GIT_PATH = ref_spec_7251.git_path REFERENCE_SPEC_VERSION = ref_spec_7251.version pytestmark = pytest.mark.valid_from("Prague") @pytest.mark.parametrize( "blocks_consolidation_requests", [ pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ) ], ), ], ], id="single_block_single_consolidation_request_from_eoa", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x01, fee=Spec.get_fee(0), ) ], ), ], ], id="single_block_single_consolidation_request_from_eoa_equal_pubkeys", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=-1, target_pubkey=-2, fee=Spec.get_fee(0), ) ], ), ], ], id="single_block_single_consolidation_request_from_eoa_max_pubkeys", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=0, valid=False, ) ], ), ], ], id="single_block_single_consolidation_request_from_eoa_insufficient_fee", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), calldata_modifier=lambda x: x[:-1], valid=False, ) ], ), ], ], id="single_block_single_consolidation_request_from_eoa_input_too_short", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), calldata_modifier=lambda x: x + b"\x00", valid=False, ) ], ), ], ], id="single_block_single_consolidation_request_from_eoa_input_too_long", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(0), ), ], ), ], ], id="single_block_multiple_consolidation_request_from_same_eoa", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ) ], ), ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(0), ) ], ), ], ], id="single_block_multiple_consolidation_request_from_different_eoa", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK) ], ) ], ], id="single_block_max_consolidation_requests_from_eoa", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=0, ), ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(0), ), ] ), ], ], id="single_block_multiple_consolidation_request_first_reverts", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=0, ), ] ), ], ], id="single_block_multiple_consolidation_request_last_reverts", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), gas_limit=136_534 - 1, valid=False, ), ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(0), ), ] ), ], ], id="single_block_multiple_consolidation_request_first_oog", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(0), gas_limit=102_334 - 1, valid=False, ), ] ), ], ], id="single_block_multiple_consolidation_request_last_oog", ), pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ] ) ], ], id="multiple_block_above_max_consolidation_requests_from_eoa", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ] ), ], ], id="single_block_single_consolidation_request_from_contract", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], ), ], ], id="single_block_multiple_consolidation_requests_from_contract", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], call_depth=3, ), ], ], id="single_block_multiple_consolidation_requests_from_contract_call_depth_3", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), gas_limit=6_000_000, ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], call_depth=100, ), ], ], id="single_block_multiple_consolidation_requests_from_contract_call_depth_high", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x00, target_pubkey=0x01, fee=0, ) ] + [ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), ) for i in range(1, Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], ), ], ], id="single_block_multiple_consolidation_requests_from_contract_first_reverts", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ] + [ ConsolidationRequest( source_pubkey=-1, target_pubkey=-2, fee=0, ) ], ), ], ], id="single_block_multiple_consolidation_requests_from_contract_last_reverts", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=-1, target_pubkey=-2, gas_limit=100, fee=Spec.get_fee(0), valid=False, ) ] + [ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, gas_limit=1_000_000, fee=Spec.get_fee(0), valid=True, ) for i in range(1, Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], ), ], ], id="single_block_multiple_consolidation_requests_from_contract_first_oog", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), gas_limit=1_000_000, valid=True, ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ] + [ ConsolidationRequest( source_pubkey=-1, target_pubkey=-2, gas_limit=100, fee=Spec.get_fee(0), valid=False, ) ], ), ], ], id="single_block_multiple_consolidation_requests_from_contract_last_oog", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), valid=False, ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], extra_code=Op.REVERT(0, 0), ), ], ], id="single_block_multiple_consolidation_requests_from_contract_caller_reverts", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=i * 2, target_pubkey=i * 2 + 1, fee=Spec.get_fee(0), valid=False, ) for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5) ], extra_code=Macros.OOG(), ), ], ], id="single_block_multiple_consolidation_requests_from_contract_caller_oog", ), pytest.param( # Test the first 50 fee increments get_n_fee_increment_blocks(50), id="multiple_block_fee_increments", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.DELEGATECALL, ), ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.STATICCALL, ), ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.CALLCODE, ), ], ], id="single_block_single_consolidation_request_delegatecall_staticcall_callcode", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.DELEGATECALL, call_depth=3, ), ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.STATICCALL, call_depth=3, ), ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.CALLCODE, call_depth=3, ), ], ], id="single_block_single_consolidation_request_delegatecall_staticcall_callcode_call_depth_3", ), pytest.param( [ [ ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.DELEGATECALL, call_depth=1024, ), ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.STATICCALL, call_depth=1024, ), ConsolidationRequestContract( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), valid=False, ) ], call_type=Op.CALLCODE, call_depth=1024, ), ], ], id="single_block_single_consolidation_request_delegatecall_staticcall_callcode_call_depth_high", ), ], ) @pytest.mark.pre_alloc_group( "consolidation_requests", reason="Tests standard consolidation request functionality" ) def test_consolidation_requests( blockchain_test: BlockchainTestFiller, blocks: List[Block], pre: Alloc, ) -> None: """Test making a consolidation request to the beacon chain.""" blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) @pytest.mark.parametrize( "requests,block_body_override_requests,exception", [ pytest.param( [], [ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, source_address=Address(0), ), ], BlockException.INVALID_REQUESTS, id="no_consolidations_non_empty_requests_list", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ] ), ], [], BlockException.INVALID_REQUESTS, id="single_consolidation_request_empty_requests_list", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ] ), ], [ ConsolidationRequest( source_pubkey=0x00, target_pubkey=0x02, source_address=TestAddress, ) ], BlockException.INVALID_REQUESTS, id="single_consolidation_request_source_public_key_mismatch", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ] ), ], [ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x00, source_address=TestAddress, ) ], BlockException.INVALID_REQUESTS, id="single_consolidation_request_target_public_key_mismatch", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ] ), ], [ ConsolidationRequest( source_pubkey=0x02, target_pubkey=0x01, source_address=TestAddress, ) ], BlockException.INVALID_REQUESTS, id="single_consolidation_request_pubkeys_swapped", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ) ], ), ], [ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, source_address=TestAddress2, ) ], BlockException.INVALID_REQUESTS, id="single_consolidation_request_source_address_mismatch", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ), ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(0), ), ], ), ], [ ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, source_address=TestAddress, ), ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, source_address=TestAddress, ), ], BlockException.INVALID_REQUESTS, id="two_consolidation_requests_out_of_order", ), pytest.param( [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ) ], ), ], [ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, source_address=TestAddress, ), ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, source_address=TestAddress, ), ], BlockException.INVALID_REQUESTS, id="single_consolidation_requests_duplicate_in_requests_list", ), ], ) @pytest.mark.exception_test @pytest.mark.pre_alloc_group( "consolidation_requests", reason="Tests standard consolidation request functionality" ) def test_consolidation_requests_negative( pre: Alloc, fork: Fork, blockchain_test: BlockchainTestFiller, requests: List[ConsolidationRequestInteractionBase], block_body_override_requests: List[ConsolidationRequest], exception: BlockException, ) -> None: """ Test blocks where the requests list and the actual consolidation requests that happened in the block's transactions do not match. """ for d in requests: d.update_pre(pre) # No previous block so fee is the base fee = 1 current_block_requests = [] for w in requests: current_block_requests += w.valid_requests(fee) included_requests = current_block_requests[: Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK] blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=[ Block( txs=sum((r.transactions() for r in requests), []), header_verify=Header( requests_hash=Requests(*included_requests), ), requests=( Requests(*block_body_override_requests).requests_list if block_body_override_requests is not None else None ), exception=exception, ) ], ) ================================================ FILE: tests/prague/eip7251_consolidations/test_consolidations_during_fork.py ================================================ """ Tests [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://eips.ethereum.org/EIPS/eip-7251). """ from os.path import realpath from pathlib import Path from typing import List import pytest from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Environment, Transaction, ) from .helpers import ConsolidationRequest, ConsolidationRequestTransaction from .spec import Spec, ref_spec_7251 REFERENCE_SPEC_GIT_PATH = ref_spec_7251.git_path REFERENCE_SPEC_VERSION = ref_spec_7251.version pytestmark = pytest.mark.valid_at_transition_to("Prague") BLOCKS_BEFORE_FORK = 2 @pytest.mark.parametrize( "blocks_consolidation_requests", [ pytest.param( [ [], # No consolidation requests, but we deploy the contract [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(10), # Pre-fork consolidation request valid=False, ) ], ), ], [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x03, target_pubkey=0x04, fee=Spec.get_fee(10), # First post-fork consolidation request, will # not be included because the inhibitor is # cleared at the end of the block valid=False, ) ], ), ], [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x05, target_pubkey=0x06, fee=Spec.get_fee(0), # First consolidation that is valid valid=True, ) ], ), ], ], id="one_valid_request_second_block_after_fork", ), ], ) @pytest.mark.parametrize("timestamp", [15_000 - BLOCKS_BEFORE_FORK], ids=[""]) @pytest.mark.pre_alloc_group( "separate", reason="Deploys consolidation system contract at fork transition" ) def test_consolidation_requests_during_fork( blockchain_test: BlockchainTestFiller, blocks: List[Block], pre: Alloc, ) -> None: """ Test making a consolidation request to the beacon chain at the time of the fork. """ # We need to delete the deployed contract that comes by default in the pre # state. pre[Spec.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS] = Account( balance=0, code=bytes(), nonce=0, storage={}, ) with open(Path(realpath(__file__)).parent / "contract_deploy_tx.json", mode="r") as f: deploy_tx = Transaction.model_validate_json(f.read()).with_signature_and_sender() deployer_address = deploy_tx.sender assert deployer_address is not None assert Address(deployer_address) == Spec.CONSOLIDATION_REQUEST_PREDEPLOY_SENDER tx_gas_price = deploy_tx.gas_price assert tx_gas_price is not None deployer_required_balance = deploy_tx.gas_limit * tx_gas_price pre.fund_address(Spec.CONSOLIDATION_REQUEST_PREDEPLOY_SENDER, deployer_required_balance) # Append the deployment transaction to the first block blocks[0].txs.append(deploy_tx) blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip7251_consolidations/test_contract_deployment.py ================================================ """ Tests [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://eips.ethereum.org/EIPS/eip-7251). """ from os.path import realpath from pathlib import Path from typing import Any, Generator import pytest from ethereum_test_forks import Fork, Prague from ethereum_test_tools import ( Address, Alloc, Block, Header, Requests, Transaction, generate_system_contract_deploy_test, ) from .helpers import ConsolidationRequest from .spec import Spec, ref_spec_7251 REFERENCE_SPEC_GIT_PATH = ref_spec_7251.git_path REFERENCE_SPEC_VERSION = ref_spec_7251.version @pytest.mark.pre_alloc_group( "separate", reason="Deploys consolidation system contract at hardcoded predeploy address" ) @generate_system_contract_deploy_test( fork=Prague, tx_json_path=Path(realpath(__file__)).parent / "contract_deploy_tx.json", expected_deploy_address=Address(Spec.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS), fail_on_empty_code=True, ) def test_system_contract_deployment( *, fork: Fork, pre: Alloc, **kwargs: Any, ) -> Generator[Block, None, None]: """Verify calling the consolidation system contract after deployment.""" sender = pre.fund_eoa() consolidation_request = ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), source_address=sender, ) pre.fund_address(sender, consolidation_request.value) intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() test_transaction_gas = intrinsic_gas_calculator(calldata=consolidation_request.calldata) test_transaction = Transaction( data=consolidation_request.calldata, gas_limit=test_transaction_gas * 10, to=Spec.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS, sender=sender, value=consolidation_request.value, ) yield Block( txs=[test_transaction], header=Header( requests_hash=Requests(consolidation_request), ), ) ================================================ FILE: tests/prague/eip7251_consolidations/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-7251: Increase the MAX_EFFECTIVE_BALANCE](https://eips.ethereum.org/EIPS/eip-7251). """ # noqa: E501 from typing import List import pytest from ethereum_test_tools import ( Alloc, Block, BlockchainTestFiller, ) from .helpers import ConsolidationRequest, ConsolidationRequestTransaction from .spec import Spec, ref_spec_7251 REFERENCE_SPEC_GIT_PATH = ref_spec_7251.git_path REFERENCE_SPEC_VERSION = ref_spec_7251.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] @pytest.mark.parametrize( "blocks_consolidation_requests", [ pytest.param( [ [ ConsolidationRequestTransaction( requests=[ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec.get_fee(0), ) ], ), ], ], id="single_consolidation_request", ), ], ) def test_eip_7251( blockchain_test: BlockchainTestFiller, blocks: List[Block], pre: Alloc, ) -> None: """Test making a consolidation request.""" blockchain_test( pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip7251_consolidations/test_modified_consolidation_contract.py ================================================ """ Tests [EIP-7251: Execution layer triggerable consolidation](https://eips.ethereum.org/EIPS/eip-7251). """ from typing import List import pytest from ethereum_test_tools import ( Account, Address, Alloc, Block, BlockchainTestFiller, Bytecode, Transaction, generate_system_contract_error_test, ) from ethereum_test_tools import Macros as Om from ethereum_test_tools import Opcodes as Op from ethereum_test_types import Requests from .helpers import ( ConsolidationRequest, ConsolidationRequestTransaction, ) from .spec import Spec as Spec_EIP7251 from .spec import ref_spec_7251 REFERENCE_SPEC_GIT_PATH: str = ref_spec_7251.git_path REFERENCE_SPEC_VERSION: str = ref_spec_7251.version pytestmark: pytest.MarkDecorator = pytest.mark.valid_from("Prague") def consolidation_list_with_custom_fee(n: int) -> List[ConsolidationRequest]: # noqa: D103 return [ ConsolidationRequest( source_pubkey=0x01, target_pubkey=0x02, fee=Spec_EIP7251.get_fee(10), ) for i in range(n) ] @pytest.mark.parametrize( "requests_list", [ pytest.param( [], id="empty_request_list", ), pytest.param( [ *consolidation_list_with_custom_fee(1), ], id="1_consolidation_request", ), pytest.param( [ *consolidation_list_with_custom_fee(2), ], id="2_consolidation_requests", ), pytest.param( [ *consolidation_list_with_custom_fee(3), ], id="3_consolidation_requests", ), pytest.param( [ *consolidation_list_with_custom_fee(4), ], id="4_consolidation_requests", ), pytest.param( [ *consolidation_list_with_custom_fee(5), ], id="5_consolidation_requests", ), ], ) @pytest.mark.pre_alloc_group("separate", reason="Deploys custom consolidation contract bytecode") def test_extra_consolidations( blockchain_test: BlockchainTestFiller, pre: Alloc, requests_list: List[ConsolidationRequest], ) -> None: """ Test how clients were to behave with more than 2 consolidations per block. """ modified_code: Bytecode = Bytecode() memory_offset: int = 0 amount_of_requests: int = 0 for consolidation_request in requests_list: # update memory_offset with the correct value consolidation_request_bytes_amount: int = len(bytes(consolidation_request)) assert consolidation_request_bytes_amount == 116, ( "Expected consolidation request to be of size 116 but got size " f"{consolidation_request_bytes_amount}" ) memory_offset += consolidation_request_bytes_amount modified_code += Om.MSTORE(bytes(consolidation_request), memory_offset) amount_of_requests += 1 modified_code += Op.RETURN(0, Op.MSIZE()) pre[Spec_EIP7251.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS] = Account( code=modified_code, nonce=1, balance=0, ) # given a list of consolidation requests construct a consolidation request # transaction consolidation_request_transaction = ConsolidationRequestTransaction(requests=requests_list) # prepare consolidation senders consolidation_request_transaction.update_pre(pre=pre) # get transaction list txs: List[Transaction] = consolidation_request_transaction.transactions() blockchain_test( pre=pre, blocks=[ Block( txs=txs, requests_hash=Requests(*requests_list), ), ], post={}, ) @pytest.mark.parametrize( "system_contract", [Address(Spec_EIP7251.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS)] ) @pytest.mark.pre_alloc_group("separate", reason="Deploys custom consolidation contract bytecode") @generate_system_contract_error_test( # type: ignore[arg-type] max_gas_limit=Spec_EIP7251.SYSTEM_CALL_GAS_LIMIT, ) def test_system_contract_errors() -> None: """ Test system contract raising different errors when called by the system account at the end of the block execution. To see the list of generated tests, please refer to the `generate_system_contract_error_test` decorator definition. """ pass ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/__init__.py ================================================ """ Test [EIP-7623: Increase calldata cost](https://eips.ethereum.org/EIPS/eip-7623). """ ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/conftest.py ================================================ """Fixtures for the EIP-7623 tests.""" from typing import List, Sequence import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, AccessList, Address, Alloc, AuthorizationTuple, Bytecode, Bytes, Hash, Transaction, TransactionException, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from ...cancun.eip4844_blobs.spec import Spec as EIP_4844_Spec from .helpers import DataTestType, find_floor_cost_threshold @pytest.fixture def to( request: pytest.FixtureRequest, pre: Alloc, ) -> Address | None: """Create the sender account.""" if hasattr(request, "param"): param = request.param else: param = Op.STOP if param is None: return None if isinstance(param, str) and param == "eoa": return pre.fund_eoa(amount=0) if isinstance(param, Bytecode): return pre.deploy_contract(param) raise ValueError(f"Invalid value for `to` fixture: {param}") @pytest.fixture def protected() -> bool: """ Return whether the transaction is protected or not. Only valid for type-0 transactions. """ return True @pytest.fixture def access_list() -> List[AccessList] | None: """Access list for the transaction.""" return None @pytest.fixture def authorization_refund() -> bool: """ Return whether the transaction has an existing authority in the authorization list. """ return False @pytest.fixture def authorization_list( request: pytest.FixtureRequest, pre: Alloc, authorization_refund: bool, ) -> List[AuthorizationTuple] | None: """ Authorization-list for the transaction. This fixture needs to be parametrized indirectly in order to generate the authorizations with valid signers using `pre` in this function, and the parametrized value should be a list of addresses. """ if not hasattr(request, "param"): return None if request.param is None: return None return [ AuthorizationTuple(signer=pre.fund_eoa(1 if authorization_refund else 0), address=address) for address in request.param ] @pytest.fixture def blob_versioned_hashes(ty: int) -> Sequence[Hash] | None: """Versioned hashes for the transaction.""" return ( add_kzg_version( [Hash(1)], EIP_4844_Spec.BLOB_COMMITMENT_VERSION_KZG, ) if ty == 3 else None ) @pytest.fixture def contract_creating_tx(to: Address | None) -> bool: """Return whether the transaction creates a contract or not.""" return to is None @pytest.fixture def intrinsic_gas_data_floor_minimum_delta() -> int: """ Induce a minimum delta between the transaction intrinsic gas cost and the floor data gas cost. """ return 0 @pytest.fixture def tx_data( fork: Fork, data_test_type: DataTestType, access_list: List[AccessList] | None, authorization_list: List[AuthorizationTuple] | None, contract_creating_tx: bool, intrinsic_gas_data_floor_minimum_delta: int, ) -> Bytes: """ All tests in this file use data that is generated dynamically depending on the case and the attributes of the transaction in order to reach the edge cases where the floor gas cost is equal or barely greater than the intrinsic gas cost. We have two different types of tests: - FLOOR_GAS_COST_LESS_THAN_OR_EQUAL_TO_INTRINSIC_GAS: The floor gas cost is less than or equal to the intrinsic gas cost, which means that the size of the tokens in the data are not enough to trigger the floor gas cost. - FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS: The floor gas cost is greater than the intrinsic gas cost, which means that the size of the tokens in the data are enough to trigger the floor gas cost. E.g. Given a transaction with a single access list and a single storage key, its intrinsic gas cost (as of Prague fork) can be calculated as: - 21,000 gas for the transaction - 2,400 gas for the access list - 1,900 gas for the storage key - 16 gas for each non-zero byte in the data - 4 gas for each zero byte in the data Its floor data gas cost can be calculated as: - 21,000 gas for the transaction - 40 gas for each non-zero byte in the data - 10 gas for each zero byte in the data Notice that the data included in the transaction affects both the intrinsic gas cost and the floor data cost, but at different rates. The purpose of this function is to find the exact amount of data where the floor data gas cost starts exceeding the intrinsic gas cost. After a binary search we find that adding 717 tokens of data (179 non-zero bytes + 1 zero byte) triggers the floor gas cost. Therefore, this function will return a Bytes object with 179 non-zero bytes and 1 zero byte for `FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS` and a Bytes object with 179 non-zero bytes and no zero bytes for `FLOOR_GAS_COST_LESS_THAN_OR_EQUAL_TO_INTRINSIC_GAS` """ def tokens_to_data(tokens: int) -> Bytes: return Bytes(b"\x01" * (tokens // 4) + b"\x00" * (tokens % 4)) fork_intrinsic_cost_calculator = fork.transaction_intrinsic_cost_calculator() def transaction_intrinsic_cost_calculator(tokens: int) -> int: return ( fork_intrinsic_cost_calculator( calldata=tokens_to_data(tokens), contract_creation=contract_creating_tx, access_list=access_list, authorization_list_or_count=authorization_list, return_cost_deducted_prior_execution=True, ) + intrinsic_gas_data_floor_minimum_delta ) fork_data_floor_cost_calculator = fork.transaction_data_floor_cost_calculator() def transaction_data_floor_cost_calculator(tokens: int) -> int: return fork_data_floor_cost_calculator(data=tokens_to_data(tokens)) # Start with zero data and check the difference in the gas calculator # between the intrinsic gas cost and the floor gas cost. if transaction_data_floor_cost_calculator(0) >= transaction_intrinsic_cost_calculator(0): # Special case which is a transaction with no extra intrinsic gas costs # other than the data cost, any data will trigger the floor gas cost. if data_test_type == DataTestType.FLOOR_GAS_COST_LESS_THAN_OR_EQUAL_TO_INTRINSIC_GAS: return Bytes(b"") else: return Bytes(b"\0") tokens = find_floor_cost_threshold( floor_data_gas_cost_calculator=transaction_data_floor_cost_calculator, intrinsic_gas_cost_calculator=transaction_intrinsic_cost_calculator, ) if data_test_type == DataTestType.FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS: return tokens_to_data(tokens + 1) return tokens_to_data(tokens) @pytest.fixture def tx_gas_delta() -> int: """ Gas delta to modify the gas amount included with the transaction. If negative, the transaction will be invalid because the intrinsic gas cost is greater than the gas limit. This value operates regardless of whether the floor data gas cost is reached or not. If the value is greater than zero, the transaction will also be valid and the test will check that transaction processing does not consume more gas than it should. """ return 0 @pytest.fixture def tx_intrinsic_gas_cost_before_execution( fork: Fork, tx_data: Bytes, access_list: List[AccessList] | None, authorization_list: List[AuthorizationTuple] | None, contract_creating_tx: bool, ) -> int: """ Return the intrinsic gas cost that is applied before the execution start. This value never includes the floor data gas cost. """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() return intrinsic_gas_cost_calculator( calldata=tx_data, contract_creation=contract_creating_tx, access_list=access_list, authorization_list_or_count=authorization_list, return_cost_deducted_prior_execution=True, ) @pytest.fixture def tx_intrinsic_gas_cost_including_floor_data_cost( fork: Fork, tx_data: Bytes, access_list: List[AccessList] | None, authorization_list: List[AuthorizationTuple] | None, contract_creating_tx: bool, ) -> int: """ Transaction intrinsic gas cost. The calculated value takes into account the normal intrinsic gas cost and the floor data gas cost if it is greater than the intrinsic gas cost. In other words, this is the value that is required for the transaction to be valid. """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() return intrinsic_gas_cost_calculator( calldata=tx_data, contract_creation=contract_creating_tx, access_list=access_list, authorization_list_or_count=authorization_list, ) @pytest.fixture def tx_floor_data_cost( fork: Fork, tx_data: Bytes, ) -> int: """Floor data cost for the given transaction data.""" fork_data_floor_cost_calculator = fork.transaction_data_floor_cost_calculator() return fork_data_floor_cost_calculator(data=tx_data) @pytest.fixture def tx_gas_limit( tx_intrinsic_gas_cost_including_floor_data_cost: int, tx_gas_delta: int, ) -> int: """ Gas limit for the transaction. The gas delta is added to the intrinsic gas cost to generate different test scenarios. """ return tx_intrinsic_gas_cost_including_floor_data_cost + tx_gas_delta @pytest.fixture def tx_error(tx_gas_delta: int, data_test_type: DataTestType) -> TransactionException | None: """Transaction error, only expected if the gas delta is negative.""" if tx_gas_delta < 0: if data_test_type == DataTestType.FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS: return TransactionException.INTRINSIC_GAS_BELOW_FLOOR_GAS_COST else: return TransactionException.INTRINSIC_GAS_TOO_LOW return None @pytest.fixture def tx( sender: EOA, ty: int, tx_data: Bytes, to: Address | None, protected: bool, access_list: List[AccessList] | None, authorization_list: List[AuthorizationTuple] | None, blob_versioned_hashes: Sequence[Hash] | None, tx_gas_limit: int, tx_error: TransactionException | None, ) -> Transaction: """Create the transaction used in each test.""" return Transaction( ty=ty, sender=sender, data=tx_data, to=to, protected=protected, access_list=access_list, authorization_list=authorization_list, gas_limit=tx_gas_limit, blob_versioned_hashes=blob_versioned_hashes, error=tx_error, ) ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/helpers.py ================================================ """Helpers for testing EIP-7623.""" from enum import Enum, auto from typing import Callable class DataTestType(Enum): """Enum for the different types of data tests.""" FLOOR_GAS_COST_LESS_THAN_OR_EQUAL_TO_INTRINSIC_GAS = auto() FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS = auto() def find_floor_cost_threshold( floor_data_gas_cost_calculator: Callable[[int], int], intrinsic_gas_cost_calculator: Callable[[int], int], ) -> int: """ Find the minimum amount of tokens that will trigger the floor gas cost, by using a binary search and the intrinsic gas cost and floor data calculators. """ # Start with 1000 tokens and if the intrinsic gas cost is greater than the # floor gas cost, multiply the number of tokens by 2 until it's not. tokens = 1000 while floor_data_gas_cost_calculator(tokens) < intrinsic_gas_cost_calculator(tokens): tokens *= 2 # Binary search to find the minimum number of tokens that will trigger the # floor gas cost. left = 0 right = tokens while left < right: tokens = (left + right) // 2 if floor_data_gas_cost_calculator(tokens) < intrinsic_gas_cost_calculator(tokens): left = tokens + 1 else: right = tokens tokens = left if floor_data_gas_cost_calculator(tokens) > intrinsic_gas_cost_calculator(tokens): tokens -= 1 # Verify that increasing the tokens by one would always trigger the floor # gas cost. assert ( floor_data_gas_cost_calculator(tokens) <= intrinsic_gas_cost_calculator(tokens) ) and floor_data_gas_cost_calculator(tokens + 1) > intrinsic_gas_cost_calculator(tokens + 1), ( "invalid case" ) return tokens ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/spec.py ================================================ """Defines EIP-7623 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7623 = ReferenceSpec("EIPS/eip-7623.md", "744f2075ba5deee9c1040eb089104d55bd89960d") # Constants @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7623 specifications as defined at https://eips.ethereum.org/EIPS/eip-7623. """ STANDARD_TOKEN_COST = 4 TOTAL_COST_FLOOR_PER_TOKEN = 10 ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-7623: Increase calldata cost](https://eips.ethereum.org/EIPS/eip-7623). """ # noqa: E501 import pytest from ethereum_test_tools import ( AccessList, Address, Alloc, Hash, StateTestFiller, Transaction, add_kzg_version, ) from ...cancun.eip4844_blobs.spec import Spec as EIP_4844_Spec from .helpers import DataTestType from .spec import ref_spec_7623 REFERENCE_SPEC_GIT_PATH = ref_spec_7623.git_path REFERENCE_SPEC_VERSION = ref_spec_7623.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] @pytest.mark.parametrize( "ty,protected,access_list,blob_versioned_hashes,authorization_list", [ pytest.param(0, True, None, None, None, id="type_0_protected"), pytest.param(0, False, None, None, None, id="type_0_unprotected"), pytest.param( 1, True, [AccessList(address=Address(1), storage_keys=[Hash(0)])], None, None, id="type_1", ), pytest.param( 2, True, [AccessList(address=Address(1), storage_keys=[Hash(0)])], None, None, id="type_2", ), pytest.param( 3, True, [AccessList(address=Address(1), storage_keys=[Hash(0)])], add_kzg_version( [Hash(x) for x in range(1)], EIP_4844_Spec.BLOB_COMMITMENT_VERSION_KZG, ), None, id="type_3", marks=pytest.mark.execute( pytest.mark.skip(reason="Blob txs not supported by execute") ), ), pytest.param( 4, True, [AccessList(address=Address(1), storage_keys=[Hash(0)])], None, [Address(1)], id="type_4", ), ], indirect=["authorization_list"], ) @pytest.mark.parametrize( "tx_gas_delta", [ pytest.param(0, id=""), ], ) @pytest.mark.parametrize( "to", [ pytest.param("eoa", id=""), ], indirect=True, ) @pytest.mark.parametrize( "data_test_type", [ pytest.param( DataTestType.FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS, id="", ), ], ) def test_eip_7623( state_test: StateTestFiller, pre: Alloc, tx: Transaction, ) -> None: """ Test transaction validity for transactions without access lists and contract creation. """ state_test( pre=pre, post={}, tx=tx, ) ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/test_execution_gas.py ================================================ """ Test [EIP-7623: Increase calldata cost](https://eips.ethereum.org/EIPS/eip-7623). """ from typing import List import pytest from ethereum_test_forks import Fork, Prague from ethereum_test_tools import ( AccessList, Address, Alloc, AuthorizationTuple, Bytes, StateTestFiller, Transaction, TransactionReceipt, ) from ethereum_test_tools import Opcodes as Op from .helpers import DataTestType from .spec import ref_spec_7623 REFERENCE_SPEC_GIT_PATH = ref_spec_7623.git_path REFERENCE_SPEC_VERSION = ref_spec_7623.version ENABLE_FORK = Prague pytestmark = [pytest.mark.valid_from(str(ENABLE_FORK))] @pytest.fixture def data_test_type() -> DataTestType: """Return data test type.""" return DataTestType.FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS class TestGasConsumption: """Test gas consumption with EIP-7623 active.""" @pytest.fixture def intrinsic_gas_data_floor_minimum_delta(self) -> int: """ Force a minimum delta in order to have some gas to execute the invalid opcode. """ return 50_000 @pytest.fixture def to( self, pre: Alloc, ) -> Address | None: """ Return a contract that consumes all gas when executed by calling an invalid opcode. """ return pre.deploy_contract(Op.INVALID) @pytest.mark.parametrize( "ty,protected,authorization_list", [ pytest.param(0, False, None, id="type_0_unprotected"), pytest.param(0, True, None, id="type_0_protected"), pytest.param(1, True, None, id="type_1"), pytest.param(2, True, None, id="type_2"), pytest.param(3, True, None, id="type_3"), pytest.param(4, True, [Address(1)], id="type_4"), ], indirect=["authorization_list"], ) @pytest.mark.parametrize( "tx_gas_delta", [ # Test with exact gas and extra gas. pytest.param(1, id="extra_gas"), pytest.param(0, id="exact_gas"), ], ) def test_full_gas_consumption( self, state_test: StateTestFiller, pre: Alloc, tx: Transaction, ) -> None: """ Test executing a transaction that fully consumes its execution gas allocation. """ tx.expected_receipt = TransactionReceipt(gas_used=tx.gas_limit) state_test( pre=pre, post={}, tx=tx, ) class TestGasConsumptionBelowDataFloor: """Test gas consumption barely below the floor data cost (1 gas below).""" @pytest.fixture def contract_creating_tx(self) -> bool: """Use a constant in order to avoid circular fixture dependencies.""" return False @pytest.fixture def to( self, pre: Alloc, fork: Fork, tx_data: Bytes, access_list: List[AccessList] | None, authorization_list: List[AuthorizationTuple] | None, tx_floor_data_cost: int, ) -> Address | None: """ Return a contract that consumes almost all the gas before reaching the floor data cost. """ intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() execution_gas = tx_floor_data_cost - intrinsic_gas_cost_calculator( calldata=tx_data, contract_creation=False, access_list=access_list, authorization_list_or_count=authorization_list, return_cost_deducted_prior_execution=True, ) assert execution_gas > 0 return pre.deploy_contract((Op.JUMPDEST * (execution_gas - 1)) + Op.STOP) @pytest.mark.parametrize( "ty,protected,authorization_list", [ pytest.param(0, False, None, id="type_0_unprotected"), pytest.param(0, True, None, id="type_0_protected"), pytest.param(1, True, None, id="type_1"), pytest.param(2, True, None, id="type_2"), pytest.param(3, True, None, id="type_3"), pytest.param(4, True, [Address(1)], id="type_4"), ], indirect=["authorization_list"], ) @pytest.mark.parametrize( "tx_gas_delta", [ # Test with exact gas and extra gas, to verify that the refund is # correctly applied to the full consumed execution gas. pytest.param(0, id="exact_gas"), ], ) def test_gas_consumption_below_data_floor( self, state_test: StateTestFiller, pre: Alloc, tx: Transaction, tx_floor_data_cost: int, ) -> None: """ Test executing a transaction that almost consumes the floor data cost. """ tx.expected_receipt = TransactionReceipt(gas_used=tx_floor_data_cost) state_test( pre=pre, post={}, tx=tx, ) ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/test_refunds.py ================================================ """ Test [EIP-7623: Increase calldata cost](https://eips.ethereum.org/EIPS/eip-7623). """ from enum import Enum, Flag, auto from typing import Dict, List import pytest from ethereum_test_forks import Fork, Prague from ethereum_test_tools import ( Address, Alloc, AuthorizationTuple, Bytecode, StateTestFiller, Transaction, TransactionReceipt, ) from ethereum_test_tools import Opcodes as Op from .helpers import DataTestType from .spec import ref_spec_7623 REFERENCE_SPEC_GIT_PATH = ref_spec_7623.git_path REFERENCE_SPEC_VERSION = ref_spec_7623.version ENABLE_FORK = Prague pytestmark = [pytest.mark.valid_from(str(ENABLE_FORK))] class RefundTestType(Enum): """Refund test type.""" EXECUTION_GAS_MINUS_REFUND_GREATER_THAN_DATA_FLOOR = 0 """ The execution gas minus the refund is greater than the data floor, hence the execution gas cost is charged. """ EXECUTION_GAS_MINUS_REFUND_LESS_THAN_DATA_FLOOR = 1 """ The execution gas minus the refund is less than the data floor, hence the data floor cost is charged. """ EXECUTION_GAS_MINUS_REFUND_EQUAL_TO_DATA_FLOOR = 2 """The execution gas minus the refund is equal to the data floor.""" class RefundType(Flag): """Refund type.""" STORAGE_CLEAR = auto() """The storage is cleared from a non-zero value.""" AUTHORIZATION_EXISTING_AUTHORITY = auto() """ The authorization list contains an authorization where the authority exists in the state. """ @pytest.fixture def data_test_type() -> DataTestType: """Return data test type.""" return DataTestType.FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS @pytest.fixture def authorization_list(pre: Alloc, refund_type: RefundType) -> List[AuthorizationTuple] | None: """ Modify fixture from conftest to automatically read the refund_type information. """ if RefundType.AUTHORIZATION_EXISTING_AUTHORITY not in refund_type: return None return [AuthorizationTuple(signer=pre.fund_eoa(1), address=Address(1))] @pytest.fixture def ty(refund_type: RefundType) -> int: """ Modify fixture from conftest to automatically read the refund_type information. """ if RefundType.AUTHORIZATION_EXISTING_AUTHORITY in refund_type: return 4 return 2 @pytest.fixture def max_refund(fork: Fork, refund_type: RefundType) -> int: """Return the max refund gas of the transaction.""" gas_costs = fork.gas_costs() max_refund = gas_costs.R_STORAGE_CLEAR if RefundType.STORAGE_CLEAR in refund_type else 0 max_refund += ( gas_costs.R_AUTHORIZATION_EXISTING_AUTHORITY if RefundType.AUTHORIZATION_EXISTING_AUTHORITY in refund_type else 0 ) return max_refund @pytest.fixture def prefix_code_gas(fork: Fork, refund_type: RefundType) -> int: """Return the minimum execution gas cost due to the refund type.""" if RefundType.STORAGE_CLEAR in refund_type: # Minimum code to generate a storage clear is Op.SSTORE(0, 0). gas_costs = fork.gas_costs() return gas_costs.G_COLD_SLOAD + gas_costs.G_STORAGE_RESET + (gas_costs.G_VERY_LOW * 2) return 0 @pytest.fixture def prefix_code(refund_type: RefundType) -> Bytecode: """Return the minimum execution gas cost due to the refund type.""" if RefundType.STORAGE_CLEAR in refund_type: # Clear the storage to trigger a refund. return Op.SSTORE(0, 0) return Bytecode() @pytest.fixture def code_storage(refund_type: RefundType) -> Dict: """Return the minimum execution gas cost due to the refund type.""" if RefundType.STORAGE_CLEAR in refund_type: # Pre-set the storage to be cleared. return {0: 1} return {} @pytest.fixture def contract_creating_tx() -> bool: """ Override fixture in order to avoid a circular fixture dependency since none of these tests are contract creating transactions. """ return False @pytest.fixture def intrinsic_gas_data_floor_minimum_delta() -> int: """ Induce a minimum delta between the transaction intrinsic gas cost and the floor data gas cost. Since at least one of the cases requires some execution gas expenditure (SSTORE clearing), we need to introduce an increment of the floor data cost above the transaction intrinsic gas cost, otherwise the floor data cost would always be the below the execution gas cost even after the refund is applied. This value has been set as of Prague and should be adjusted if the gas costs change. """ return 250 @pytest.fixture def execution_gas_used( tx_intrinsic_gas_cost_before_execution: int, tx_floor_data_cost: int, max_refund: int, prefix_code_gas: int, refund_test_type: RefundTestType, ) -> int: """ Return the amount of gas that needs to be consumed by the execution. This gas amount is on top of the transaction intrinsic gas cost. If this value were zero it would result in the refund being applied to the execution gas cost and the resulting amount being always below the floor data cost, hence we need to find a higher value in this function to ensure we get both scenarios where the refund drives the execution cost below the floor data cost and above the floor data cost. """ def execution_gas_cost(execution_gas: int) -> int: total_gas_used = tx_intrinsic_gas_cost_before_execution + execution_gas return total_gas_used - min(max_refund, total_gas_used // 5) execution_gas = prefix_code_gas assert execution_gas_cost(execution_gas) < tx_floor_data_cost, ( "tx_floor_data_cost is too low, there might have been a gas cost change that caused this " "test to fail. Try increasing the intrinsic_gas_data_floor_minimum_delta fixture." ) # Dumb for-loop to find the execution gas cost that will result in the # expected refund. while execution_gas_cost(execution_gas) < tx_floor_data_cost: execution_gas += 1 if refund_test_type == RefundTestType.EXECUTION_GAS_MINUS_REFUND_EQUAL_TO_DATA_FLOOR: return execution_gas elif refund_test_type == RefundTestType.EXECUTION_GAS_MINUS_REFUND_GREATER_THAN_DATA_FLOOR: return execution_gas + 1 elif refund_test_type == RefundTestType.EXECUTION_GAS_MINUS_REFUND_LESS_THAN_DATA_FLOOR: return execution_gas - 1 raise ValueError("Invalid refund test type") @pytest.fixture def refund( tx_intrinsic_gas_cost_before_execution: int, execution_gas_used: int, max_refund: int, ) -> int: """Return the refund gas of the transaction.""" total_gas_used = tx_intrinsic_gas_cost_before_execution + execution_gas_used return min(max_refund, total_gas_used // 5) @pytest.fixture def to( pre: Alloc, execution_gas_used: int, prefix_code: Bytecode, prefix_code_gas: int, code_storage: Dict, ) -> Address | None: """ Return a contract that consumes the expected execution gas. At the moment we naively use JUMPDEST to consume the gas, which can yield very big contracts. Ideally, we can use memory expansion to consume gas. """ extra_gas = execution_gas_used - prefix_code_gas return pre.deploy_contract( prefix_code + (Op.JUMPDEST * extra_gas) + Op.STOP, storage=code_storage, ) @pytest.fixture def tx_gas_limit( tx_intrinsic_gas_cost_including_floor_data_cost: int, tx_intrinsic_gas_cost_before_execution: int, execution_gas_used: int, ) -> int: """ Gas limit for the transaction. The gas delta is added to the intrinsic gas cost to generate different test scenarios. """ tx_gas_limit = tx_intrinsic_gas_cost_before_execution + execution_gas_used assert tx_gas_limit >= tx_intrinsic_gas_cost_including_floor_data_cost return tx_gas_limit @pytest.mark.parametrize( "refund_test_type", [ RefundTestType.EXECUTION_GAS_MINUS_REFUND_GREATER_THAN_DATA_FLOOR, RefundTestType.EXECUTION_GAS_MINUS_REFUND_LESS_THAN_DATA_FLOOR, RefundTestType.EXECUTION_GAS_MINUS_REFUND_EQUAL_TO_DATA_FLOOR, ], ) @pytest.mark.parametrize( "refund_type", [ RefundType.STORAGE_CLEAR, RefundType.STORAGE_CLEAR | RefundType.AUTHORIZATION_EXISTING_AUTHORITY, RefundType.AUTHORIZATION_EXISTING_AUTHORITY, ], ) def test_gas_refunds_from_data_floor( state_test: StateTestFiller, pre: Alloc, tx: Transaction, tx_floor_data_cost: int, tx_intrinsic_gas_cost_before_execution: int, execution_gas_used: int, refund: int, refund_test_type: RefundTestType, ) -> None: """ Test gas refunds deducted from the execution gas cost and not the data floor. """ gas_used = tx_intrinsic_gas_cost_before_execution + execution_gas_used - refund if refund_test_type == RefundTestType.EXECUTION_GAS_MINUS_REFUND_LESS_THAN_DATA_FLOOR: assert gas_used < tx_floor_data_cost elif refund_test_type == RefundTestType.EXECUTION_GAS_MINUS_REFUND_GREATER_THAN_DATA_FLOOR: assert gas_used > tx_floor_data_cost elif refund_test_type == RefundTestType.EXECUTION_GAS_MINUS_REFUND_EQUAL_TO_DATA_FLOOR: assert gas_used == tx_floor_data_cost else: raise ValueError("Invalid refund test type") if gas_used < tx_floor_data_cost: gas_used = tx_floor_data_cost # This is the actual test verification: # - During test filling, the receipt returned by the transition tool # (t8n) is verified against the expected receipt. # - During test consumption, this is reflected in the balance difference # and the state root. tx.expected_receipt = TransactionReceipt(gas_used=gas_used) state_test( pre=pre, post={ tx.to: { # Verify that the storage was cleared (for storage clear # refund). See `code_storage` fixture for more details. "storage": {0: 0}, } }, tx=tx, ) ================================================ FILE: tests/prague/eip7623_increase_calldata_cost/test_transaction_validity.py ================================================ """ Test [EIP-7623: Increase calldata cost](https://eips.ethereum.org/EIPS/eip-7623). """ import pytest from ethereum_test_forks import Prague from ethereum_test_tools import ( AccessList, Address, Alloc, Hash, StateTestFiller, Transaction, add_kzg_version, ) from ethereum_test_tools import Opcodes as Op from ...cancun.eip4844_blobs.spec import Spec as EIP_4844_Spec from .helpers import DataTestType from .spec import ref_spec_7623 REFERENCE_SPEC_GIT_PATH = ref_spec_7623.git_path REFERENCE_SPEC_VERSION = ref_spec_7623.version ENABLE_FORK = Prague pytestmark = [pytest.mark.valid_from(str(ENABLE_FORK))] # All tests in this file are parametrized with the following parameters: pytestmark += [ pytest.mark.parametrize( "tx_gas_delta", [ # Test the case where the included gas is greater than the # intrinsic gas to verify that the data floor does not consume more # gas than it should. pytest.param(1, id="extra_gas"), pytest.param(0, id="exact_gas"), pytest.param(-1, id="insufficient_gas", marks=pytest.mark.exception_test), ], ), pytest.mark.parametrize( "data_test_type", [ pytest.param( DataTestType.FLOOR_GAS_COST_LESS_THAN_OR_EQUAL_TO_INTRINSIC_GAS, id="floor_gas_less_than_or_equal_to_intrinsic_gas", ), pytest.param( DataTestType.FLOOR_GAS_COST_GREATER_THAN_INTRINSIC_GAS, id="floor_gas_greater_than_intrinsic_gas", ), ], ), ] @pytest.mark.parametrize( "protected", [ pytest.param(True, id="protected"), pytest.param(False, id="unprotected"), ], ) @pytest.mark.parametrize( "ty", [pytest.param(0, id="type_0")], ) @pytest.mark.parametrize( "to", [ pytest.param("eoa", id="to_eoa"), pytest.param(None, id="contract_creating"), pytest.param(Op.STOP, id=""), ], indirect=True, ) def test_transaction_validity_type_0( state_test: StateTestFiller, pre: Alloc, tx: Transaction, ) -> None: """ Test transaction validity for transactions without access lists and contract creation. """ state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "to", [ pytest.param("eoa", id="to_eoa"), pytest.param(None, id="contract_creating"), pytest.param(Op.STOP, id=""), ], indirect=True, ) @pytest.mark.parametrize( "access_list", [ pytest.param( None, id="no_access_list", ), pytest.param( [AccessList(address=Address(1), storage_keys=[])], id="single_access_list_no_storage_keys", ), pytest.param( [AccessList(address=Address(1), storage_keys=[Hash(0)])], id="single_access_list_single_storage_key", ), pytest.param( [AccessList(address=Address(1), storage_keys=[Hash(k) for k in range(10)])], id="single_access_list_multiple_storage_keys", ), pytest.param( [AccessList(address=Address(a), storage_keys=[]) for a in range(10)], id="multiple_access_lists_no_storage_keys", ), pytest.param( [AccessList(address=Address(a), storage_keys=[Hash(0)]) for a in range(10)], id="multiple_access_lists_single_storage_key", ), pytest.param( [ AccessList(address=Address(a), storage_keys=[Hash(k) for k in range(10)]) for a in range(10) ], id="multiple_access_lists_multiple_storage_keys", ), ], ) @pytest.mark.parametrize( "ty", [pytest.param(1, id="type_1"), pytest.param(2, id="type_2")], ) def test_transaction_validity_type_1_type_2( state_test: StateTestFiller, pre: Alloc, tx: Transaction, ) -> None: """ Test transaction validity for transactions with access lists and contract creation. """ state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "access_list", [ pytest.param( None, id="no_access_list", ), pytest.param( [AccessList(address=Address(1), storage_keys=[])], id="single_access_list_no_storage_keys", ), pytest.param( [AccessList(address=Address(1), storage_keys=[Hash(0)])], id="single_access_list_single_storage_key", ), pytest.param( [AccessList(address=Address(1), storage_keys=[Hash(k) for k in range(10)])], id="single_access_list_multiple_storage_keys", ), pytest.param( [AccessList(address=Address(a), storage_keys=[]) for a in range(10)], id="multiple_access_lists_no_storage_keys", ), pytest.param( [AccessList(address=Address(a), storage_keys=[Hash(0)]) for a in range(10)], id="multiple_access_lists_single_storage_key", ), pytest.param( [ AccessList(address=Address(a), storage_keys=[Hash(k) for k in range(10)]) for a in range(10) ], id="multiple_access_lists_multiple_storage_keys", ), ], ) @pytest.mark.parametrize( # Blobs don't really have an effect because the blob gas does is not # considered in the intrinsic gas calculation, but we still test it to make # sure that the transaction is correctly processed. "blob_versioned_hashes", [ pytest.param( add_kzg_version( [Hash(x) for x in range(1)], EIP_4844_Spec.BLOB_COMMITMENT_VERSION_KZG, ), id="single_blob", ), pytest.param( add_kzg_version( [Hash(x) for x in range(6)], EIP_4844_Spec.BLOB_COMMITMENT_VERSION_KZG, ), id="multiple_blobs", ), ], ) @pytest.mark.parametrize( "ty", [pytest.param(3, id="type_3")], ) def test_transaction_validity_type_3( state_test: StateTestFiller, pre: Alloc, tx: Transaction, ) -> None: """ Test transaction validity for transactions with access lists, blobs, but no contract creation. """ state_test( pre=pre, post={}, tx=tx, ) @pytest.mark.parametrize( "access_list", [ pytest.param( None, id="no_access_list", ), pytest.param( [AccessList(address=Address(1), storage_keys=[])], id="single_access_list_no_storage_keys", ), pytest.param( [AccessList(address=Address(1), storage_keys=[Hash(0)])], id="single_access_list_single_storage_key", ), pytest.param( [AccessList(address=Address(1), storage_keys=[Hash(k) for k in range(10)])], id="single_access_list_multiple_storage_keys", ), pytest.param( [AccessList(address=Address(a), storage_keys=[]) for a in range(10)], id="multiple_access_lists_no_storage_keys", ), pytest.param( [AccessList(address=Address(a), storage_keys=[Hash(0)]) for a in range(10)], id="multiple_access_lists_single_storage_key", ), pytest.param( [ AccessList(address=Address(a), storage_keys=[Hash(k) for k in range(10)]) for a in range(10) ], id="multiple_access_lists_multiple_storage_keys", ), ], ) @pytest.mark.parametrize( "authorization_list", [ pytest.param( [Address(1)], id="single_authorization", ), pytest.param( [Address(i + 1) for i in range(10)], id="multiple_authorizations", ), ], indirect=True, ) @pytest.mark.parametrize( "ty", [pytest.param(4, id="type_4")], ) def test_transaction_validity_type_4( state_test: StateTestFiller, pre: Alloc, tx: Transaction, ) -> None: """ Test transaction validity for transactions with access lists, authorization lists, but no contract creation. """ state_test( pre=pre, post={}, tx=tx, ) ================================================ FILE: tests/prague/eip7685_general_purpose_el_requests/__init__.py ================================================ """Cross-client EIP-7685 Tests.""" ================================================ FILE: tests/prague/eip7685_general_purpose_el_requests/conftest.py ================================================ """Fixtures for the EIP-7685 deposit tests.""" from typing import List, SupportsBytes import pytest from ethereum_test_tools import ( Alloc, Block, BlockException, Bytes, EngineAPIError, Header, Requests, ) from ..eip6110_deposits.helpers import DepositInteractionBase, DepositRequest from ..eip7002_el_triggerable_withdrawals.helpers import ( WithdrawalRequest, WithdrawalRequestInteractionBase, ) from ..eip7251_consolidations.helpers import ( ConsolidationRequest, ConsolidationRequestInteractionBase, ) @pytest.fixture def block_body_override_requests( request: pytest.FixtureRequest, ) -> List[DepositRequest | WithdrawalRequest | ConsolidationRequest] | None: """ List of requests that overwrite the requests in the header. None by default. """ if hasattr(request, "param"): return request.param return None @pytest.fixture def correct_requests_hash_in_header() -> bool: """ Whether to include the correct requests hash in the header so the calculated block hash is correct, even though the requests in the new payload parameters might be wrong. """ return False @pytest.fixture def exception() -> BlockException | None: """Block exception expected by the tests. None by default.""" return None @pytest.fixture def engine_api_error_code( block_body_override_requests: List[Bytes | SupportsBytes] | None, ) -> EngineAPIError | None: """Engine API error code if any.""" if block_body_override_requests is None: return None block_body_override_requests_bytes = [bytes(r) for r in block_body_override_requests] if any(len(r) <= 1 for r in block_body_override_requests_bytes): return EngineAPIError.InvalidParams def is_monotonically_increasing(requests: List[bytes]) -> bool: return all(x[0] < y[0] for x, y in zip(requests, requests[1:], strict=False)) if not is_monotonically_increasing(block_body_override_requests_bytes): return EngineAPIError.InvalidParams return None @pytest.fixture def blocks( pre: Alloc, requests: List[ DepositInteractionBase | WithdrawalRequestInteractionBase | ConsolidationRequestInteractionBase ], block_body_override_requests: List[Bytes | SupportsBytes] | None, correct_requests_hash_in_header: bool, exception: BlockException | None, engine_api_error_code: EngineAPIError | None, ) -> List[Block]: """List of blocks that comprise the test.""" valid_requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = [] # Single block therefore base fee withdrawal_request_fee = 1 consolidation_request_fee = 1 for r in requests: r.update_pre(pre) if isinstance(r, DepositInteractionBase): valid_requests_list += r.valid_requests(10**18) elif isinstance(r, WithdrawalRequestInteractionBase): valid_requests_list += r.valid_requests(withdrawal_request_fee) elif isinstance(r, ConsolidationRequestInteractionBase): valid_requests_list += r.valid_requests(consolidation_request_fee) valid_requests = Requests(*valid_requests_list) rlp_modifier: Header | None = None if correct_requests_hash_in_header: rlp_modifier = Header( requests_hash=valid_requests, ) return [ Block( txs=sum((r.transactions() for r in requests), []), header_verify=Header(requests_hash=valid_requests), requests=block_body_override_requests, exception=exception, rlp_modifier=rlp_modifier, engine_api_error_code=engine_api_error_code, ) ] ================================================ FILE: tests/prague/eip7685_general_purpose_el_requests/spec.py ================================================ """ Common procedures to test [EIP-7685: General purpose execution layer requests](https://eips.ethereum.org/EIPS/eip-7685). """ from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7685 = ReferenceSpec("EIPS/eip-7685.md", "67ecb425d78f1d40c4f1cb957f3214afd0ece945") ================================================ FILE: tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py ================================================ """ Tests EIP-7685 General purpose execution layer requests. Cross testing for withdrawal and deposit request for [EIP-7685: General purpose execution layer requests](https://eips.ethereum.org/EIPS/eip-7685). """ from itertools import permutations from typing import Callable, Dict, Generator, List, Tuple import pytest from ethereum_test_base_types.base_types import Address from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Block, BlockchainTestFiller, BlockException, Bytecode, Bytes, Environment, Header, Requests, Storage, TestAddress, Transaction, ) from ethereum_test_tools import Opcodes as Op from ethereum_test_tools.utility.pytest import ParameterSet from ethereum_test_types import EOA from ..eip6110_deposits.helpers import DepositContract, DepositRequest, DepositTransaction from ..eip6110_deposits.spec import Spec as Spec_EIP6110 from ..eip7002_el_triggerable_withdrawals.helpers import ( WithdrawalRequest, WithdrawalRequestContract, WithdrawalRequestTransaction, ) from ..eip7002_el_triggerable_withdrawals.spec import Spec as Spec_EIP7002 from ..eip7251_consolidations.helpers import ( ConsolidationRequest, ConsolidationRequestContract, ConsolidationRequestTransaction, ) from ..eip7251_consolidations.spec import Spec as Spec_EIP7251 from .spec import ref_spec_7685 REFERENCE_SPEC_GIT_PATH: str = ref_spec_7685.git_path REFERENCE_SPEC_VERSION: str = ref_spec_7685.version pytestmark: pytest.MarkDecorator = pytest.mark.valid_from("Prague") def single_deposit(i: int) -> DepositRequest: # noqa: D103 return DepositRequest( pubkey=(i * 3), withdrawal_credentials=(i * 3) + 1, amount=32_000_000_000, signature=(i * 3) + 2, index=i, ) def single_deposit_from_eoa(i: int) -> DepositTransaction: # noqa: D103 return DepositTransaction(requests=[single_deposit(i)]) def single_deposit_from_contract(i: int) -> DepositContract: # noqa: D103 return DepositContract(requests=[single_deposit(i)]) def single_withdrawal(i: int) -> WithdrawalRequest: # noqa: D103 return WithdrawalRequest( validator_pubkey=i + 1, amount=0, fee=1, ) def single_withdrawal_from_eoa(i: int) -> WithdrawalRequestTransaction: # noqa: D103 return WithdrawalRequestTransaction(requests=[single_withdrawal(i)]) def single_withdrawal_from_contract(i: int) -> WithdrawalRequestContract: # noqa: D103 return WithdrawalRequestContract(requests=[single_withdrawal(i)]) def single_consolidation(i: int) -> ConsolidationRequest: # noqa: D103 return ConsolidationRequest( source_pubkey=(i * 2), target_pubkey=(i * 2) + 1, fee=1, ) def single_consolidation_from_eoa(i: int) -> ConsolidationRequestTransaction: # noqa: D103 return ConsolidationRequestTransaction(requests=[single_consolidation(i)]) def single_consolidation_from_contract(i: int) -> ConsolidationRequestContract: # noqa: D103 return ConsolidationRequestContract(requests=[single_consolidation(i)]) def get_permutations(n: int = 3) -> Generator[ParameterSet, None, None]: """Return possible permutations of the requests from an EOA.""" requests: list = [ ( "deposit", single_deposit(0), ), ( "withdrawal", single_withdrawal(0), ), ( "consolidation", single_consolidation(0), ), ] for perm in permutations(requests, n): yield pytest.param([p[1] for p in perm], id="+".join([p[0] for p in perm])) def get_eoa_permutations(n: int = 3) -> Generator[ParameterSet, None, None]: """Return possible permutations of the requests from an EOA.""" requests: list = [ ( "deposit_from_eoa", single_deposit_from_eoa(0), ), ( "withdrawal_from_eoa", single_withdrawal_from_eoa(0), ), ( "consolidation_from_eoa", single_consolidation_from_eoa(0), ), ] for perm in permutations(requests, n): yield pytest.param([p[1] for p in perm], id="+".join([p[0] for p in perm])) def get_contract_permutations(n: int = 3) -> Generator[ParameterSet, None, None]: """Return possible permutations of the requests from a contract.""" requests: list = [ ( "deposit_from_contract", single_deposit_from_contract(0), ), ( "withdrawal_from_contract", single_withdrawal_from_contract(0), ), ( "consolidation_from_contract", single_consolidation_from_contract(0), ), ] for perm in permutations(requests, n): yield pytest.param([p[1] for p in perm], id="+".join([p[0] for p in perm])) @pytest.mark.parametrize( "requests", [ *get_eoa_permutations(), *get_contract_permutations(), pytest.param( [ single_deposit_from_eoa(0), single_withdrawal_from_eoa(0), single_deposit_from_contract(1), ], id="deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract", ), pytest.param( [ single_deposit_from_eoa(0), single_consolidation_from_eoa(0), single_deposit_from_contract(1), ], id="deposit_from_eoa+consolidation_from_eoa+deposit_from_contract", ), pytest.param( [ single_consolidation_from_eoa(0), single_deposit_from_eoa(0), single_consolidation_from_contract(1), ], id="consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract", ), pytest.param( [ single_consolidation_from_eoa(0), single_withdrawal_from_eoa(0), single_consolidation_from_contract(1), ], id="consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract", ), pytest.param( [ single_withdrawal_from_eoa(0), single_consolidation_from_eoa(0), single_withdrawal_from_contract(1), ], id="withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract", ), pytest.param( [ single_withdrawal_from_eoa(0), single_deposit_from_eoa(0), single_withdrawal_from_contract(1), ], id="withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract", ), pytest.param( [], id="empty_requests", ), # contract: consolidation + withdrawal pytest.param( [ single_withdrawal_from_eoa(0), single_consolidation_from_contract(0), single_withdrawal_from_contract(1), ], id="withdrawal_from_eoa+consolidation_from_contract+withdrawal_from_contract", ), pytest.param( [ single_deposit_from_eoa(0), single_consolidation_from_contract(0), single_withdrawal_from_contract(0), ], id="deposit_from_eoa+consolidation_from_contract+withdrawal_from_contract", ), pytest.param( [ single_consolidation_from_eoa(0), single_consolidation_from_contract(1), single_withdrawal_from_contract(0), ], id="consolidation_from_eoa+consolidation_from_contract+withdrawal_from_contract", ), # contract: consolidation + deposit pytest.param( [ single_withdrawal_from_eoa(0), single_consolidation_from_contract(0), single_deposit_from_contract(0), ], id="withdrawal_from_eoa+consolidation_from_contract+deposit_from_contract", ), pytest.param( [ single_deposit_from_eoa(0), single_consolidation_from_contract(0), single_deposit_from_contract(1), ], id="deposit_from_eoa+consolidation_from_contract+deposit_from_contract", ), pytest.param( [ single_consolidation_from_eoa(0), single_consolidation_from_contract(1), single_deposit_from_contract(0), ], id="consolidation_from_eoa+consolidation_from_contract+deposit_from_contract", ), # contract: withdrawal + deposit pytest.param( [ single_withdrawal_from_eoa(0), single_withdrawal_from_contract(1), single_deposit_from_contract(0), ], id="withdrawal_from_eoa+withdrawal_from_contract+deposit_from_contract", ), pytest.param( [ single_deposit_from_eoa(0), single_withdrawal_from_contract(0), single_deposit_from_contract(1), ], id="deposit_from_eoa+withdrawal_from_contract+deposit_from_contract", ), pytest.param( [ single_consolidation_from_eoa(0), single_withdrawal_from_contract(0), single_deposit_from_contract(0), ], id="consolidation_from_eoa+withdrawal_from_contract+deposit_from_contract", ), # testing upper limits of each request type per slot if it exists pytest.param( [ single_consolidation_from_contract(0), single_consolidation_from_contract(1), # the following performs single_withdrawal_from_contract(0) to # (16) *[ single_withdrawal_from_contract(i) for i in range( 0, 16, ) ], # single_withdrawal_from_contract(16) not allowed cuz only 16 # MAX WITHDRAWALS PER BLOCK (EIP-7002) # the following performs single_deposit_from_contract(0) to # (18) *[ single_deposit_from_contract(i) for i in range( 0, 18, ) ], ], id="max_withdrawals_per_slot+max_consolidations_per_slot+unlimited_deposits_per_slot", ), ], ) @pytest.mark.pre_alloc_group( "multi_type_requests", reason="Tests combinations of multiple request types" ) def test_valid_multi_type_requests( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """ Test making a deposit to the beacon chain deposit contract and a withdrawal in the same block. """ blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) @pytest.mark.parametrize("requests", [*get_permutations()]) @pytest.mark.pre_alloc_group( "multi_type_requests", reason="Tests combinations of multiple request types" ) def test_valid_multi_type_request_from_same_tx( blockchain_test: BlockchainTestFiller, pre: Alloc, requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest], fork: Fork, ) -> None: """ Test making a deposit to the beacon chain deposit contract and a withdrawal in the same tx. """ withdrawal_request_fee: int = 1 consolidation_request_fee: int = 1 calldata: bytes = b"" contract_code: Bytecode = Bytecode() total_value: int = 0 storage: Storage = Storage() for request in requests: calldata_start: int = len(calldata) current_calldata: bytes = request.calldata calldata += current_calldata contract_code += Op.CALLDATACOPY(0, calldata_start, len(current_calldata)) call_contract_address: int = 0 value: int = 0 if isinstance(request, DepositRequest): call_contract_address = Spec_EIP6110.DEPOSIT_CONTRACT_ADDRESS value = request.value elif isinstance(request, WithdrawalRequest): call_contract_address = Spec_EIP7002.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS value = withdrawal_request_fee elif isinstance(request, ConsolidationRequest): call_contract_address = Spec_EIP7251.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS value = consolidation_request_fee total_value += value contract_code += Op.SSTORE( storage.store_next(1), Op.CALL( address=call_contract_address, value=value, args_offset=0, args_size=len(current_calldata), ), ) sender: EOA = pre.fund_eoa() contract_address: Address = pre.deploy_contract( code=contract_code, ) tx: Transaction = Transaction( gas_limit=10_000_000, to=contract_address, value=total_value, data=calldata, sender=sender, ) blockchain_test( genesis_environment=Environment(), pre=pre, post={ contract_address: Account( storage=storage, ) }, blocks=[ Block( txs=[tx], header_verify=Header( requests_hash=Requests( *[ request.with_source_address(contract_address) for request in sorted(requests, key=lambda r: r.type) ], ) ), ) ], ) def invalid_requests_block_combinations( *, correct_requests_hash_in_header: bool, ) -> Callable[[Fork], List[ParameterSet]]: """ Return a list of invalid request combinations for the given fork. In the event of a new request type, the `all_request_types` dictionary should be updated with the new request type and its corresponding request-generating transaction. Returned parameters are: requests, block_body_override_requests, exception """ def func(fork: Fork) -> List[ParameterSet]: assert fork.max_request_type() == 2, "Test update is needed for new request types" all_request_types: Dict[ str, Tuple[ DepositTransaction | WithdrawalRequestTransaction | ConsolidationRequestTransaction, DepositRequest | WithdrawalRequest | ConsolidationRequest, ], ] = { "deposit": ( single_deposit_from_eoa(0), # eoa_request single_deposit(0), # block_request ), "withdrawal": ( single_withdrawal_from_eoa(0), # eoa_request single_withdrawal(0).with_source_address(TestAddress), # block_request ), "consolidation": ( single_consolidation_from_eoa(0), # eoa_request single_consolidation(0).with_source_address(TestAddress), # block_request ), } expected_exceptions: List[BlockException] = [BlockException.INVALID_REQUESTS] if correct_requests_hash_in_header: # The client also might reject the block with an invalid-block-hash # error because it might convert the requests in the new payload # parameters to the requests hash in the header and compare it with # the block hash. expected_exceptions.append(BlockException.INVALID_BLOCK_HASH) # - Empty requests list with invalid hash combinations: List[ParameterSet] = [ pytest.param( [], [ bytes([i]) for i in range(fork.max_request_type() + 1) ], # Using empty requests, calculate the hash using an invalid # calculation method: # sha256(sha256(b"\0") ++ sha256(b"\1") ++ sha256(b"\2") ++ # ...) expected_exceptions, id="no_requests_and_invalid_hash_calculation_method", ), pytest.param( [], [ bytes([]) for _ in range(fork.max_request_type() + 1) ], # Using empty requests, calculate the hash using an invalid # calculation method: # sha256(sha256(b"") ++ sha256(b"") ++ sha256(b"") ++ ...) expected_exceptions, id="no_requests_and_invalid_hash_calculation_method_2", ), ] # - Missing request or request type byte tests for request_type, (eoa_request, block_request) in all_request_types.items(): combinations.extend( [ pytest.param( [eoa_request], [block_request], # The request type byte missing because we need to # use `Requests` expected_exceptions, id=f"single_{request_type}_missing_type_byte", ), pytest.param( [eoa_request], [], expected_exceptions, id=f"single_{request_type}_empty_requests_list", ), ] ) # - Incorrect order tests correct_order: List[Bytes] = Requests( *[r[1] for r in all_request_types.values()] ).requests_list # Requests automatically adds the type byte correct_order_transactions: List[ DepositTransaction | WithdrawalRequestTransaction | ConsolidationRequestTransaction ] = [r[0] for r in all_request_types.values()] # Send first element to the end combinations.append( pytest.param( correct_order_transactions[1:] + [correct_order_transactions[0]], correct_order[1:] + [correct_order[0]], expected_exceptions, id="incorrect_order_first_request_at_end", ), ) # Send second element to the end combinations.append( pytest.param( [correct_order_transactions[0]] + correct_order_transactions[2:] + [correct_order_transactions[1]], [correct_order[0]] + correct_order[2:] + [correct_order[1]], expected_exceptions, id="incorrect_order_second_request_at_end", ), ) # Bring last element to the beginning combinations.append( pytest.param( [correct_order_transactions[-1]] + correct_order_transactions[:-1], [correct_order[-1]] + correct_order[:-1], expected_exceptions, id="incorrect_order_last_request_at_beginning", ), ) # - Duplicate request tests for request_type, (eoa_request, block_request) in all_request_types.items(): combinations.append( pytest.param( [eoa_request], Requests(block_request).requests_list * 2, expected_exceptions, id=f"duplicate_{request_type}_request", ), ) # - Extra invalid request tests combinations.append( pytest.param( correct_order_transactions, correct_order + [b""], expected_exceptions, id="extra_empty_request", ), ) combinations.append( pytest.param( correct_order_transactions, correct_order + [bytes([fork.max_request_type() + 1])], expected_exceptions, id="extra_invalid_type_request_with_no_data", ), ) combinations.append( pytest.param( correct_order_transactions, correct_order + [bytes([fork.max_request_type() + 1, 0x00])], expected_exceptions, id="extra_invalid_type_request_with_data_0x00", ), ) combinations.append( pytest.param( correct_order_transactions, correct_order + [bytes([fork.max_request_type() + 1, 0x01])], expected_exceptions, id="extra_invalid_type_request_with_data_0x01", ), ) combinations.append( pytest.param( correct_order_transactions, correct_order + [bytes([fork.max_request_type() + 1, 0xFF])], expected_exceptions, id="extra_invalid_type_request_with_data_0xff", ), ) return combinations return func @pytest.mark.parametrize_by_fork( "requests,block_body_override_requests,exception", invalid_requests_block_combinations(correct_requests_hash_in_header=False), ) @pytest.mark.exception_test @pytest.mark.pre_alloc_group( "multi_type_requests", reason="Tests combinations of multiple request types" ) def test_invalid_multi_type_requests( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """ Negative testing for all request types in the same block. In these tests, the requests hash in the header reflects what's received in the parameters portion of the `engine_newPayloadVX` call, so the block hash calculation might pass if a client copies the info received verbatim, but block validation must fail after the block is executed (via RLP or Engine API). """ blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) @pytest.mark.parametrize_by_fork( "requests,block_body_override_requests,exception", invalid_requests_block_combinations(correct_requests_hash_in_header=True), ) @pytest.mark.parametrize("correct_requests_hash_in_header", [True]) @pytest.mark.blockchain_test_engine_only @pytest.mark.exception_test @pytest.mark.pre_alloc_group( "multi_type_requests", reason="Tests combinations of multiple request types" ) def test_invalid_multi_type_requests_engine( blockchain_test: BlockchainTestFiller, pre: Alloc, blocks: List[Block], ) -> None: """ Negative testing for all request types in the same block with incorrect parameters in the Engine API new payload parameters, but with the correct requests hash in the header so the block hash is correct. In these tests, the requests hash in the header reflects what's actually in the executed block, so the block might execute properly if the client ignores the requests in the new payload parameters. Note that the only difference between the engine version produced by this test and the ones produced by `test_invalid_multi_type_requests` is the `blockHash` value in the new payloads, which is calculated using different request hashes for each test, but since the request hash is not a value that is included in the payload, it might not be immediately apparent. Also these tests would not fail if the block is imported via RLP (syncing from a peer), so we only generate the BlockchainTestEngine for them. The client also might reject the block with an invalid-block-hash error because it might convert the requests in the new payload parameters to the requests hash in the header and compare it with the block hash. """ blockchain_test( genesis_environment=Environment(), pre=pre, post={}, blocks=blocks, ) ================================================ FILE: tests/prague/eip7702_set_code_tx/__init__.py ================================================ """Cross-client EIP-7702 Tests.""" ================================================ FILE: tests/prague/eip7702_set_code_tx/helpers.py ================================================ """ Helper types, functions and classes for testing EIP-7702 Set Code Transaction. """ from enum import Enum, auto class AddressType(Enum): """ Different types of addresses used to specify the type of authority that signs an authorization, and the type of address to which the authority authorizes to set the code to. """ EMPTY_ACCOUNT = auto() EOA = auto() EOA_WITH_SET_CODE = auto() CONTRACT = auto() class ChainIDType(Enum): """Different types of chain IDs used in the authorization list.""" GENERIC = auto() CHAIN_SPECIFIC = auto() ================================================ FILE: tests/prague/eip7702_set_code_tx/spec.py ================================================ """Defines EIP-7702 specification constants and functions.""" from dataclasses import dataclass from ethereum_test_base_types import Address, Bytes @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_7702 = ReferenceSpec("EIPS/eip-7702.md", "99f1be49f37c034bdd5c082946f5968710dbfc87") @dataclass(frozen=True) class Spec: """ Parameters from the EIP-7702 specifications as defined at https://eips.ethereum.org/EIPS/eip-7702. """ SET_CODE_TX_TYPE = 0x04 MAGIC = 0x05 PER_AUTH_BASE_COST = 12_500 PER_EMPTY_ACCOUNT_COST = 25_000 DELEGATION_DESIGNATION = Bytes("ef0100") RESET_DELEGATION_ADDRESS = Address(0) MAX_AUTH_CHAIN_ID = 2**256 - 1 MAX_NONCE = 2**64 - 1 @staticmethod def delegation_designation(address: Address) -> Bytes: """Return delegation designation for the given address.""" return Bytes(Spec.DELEGATION_DESIGNATION + bytes(address)) ================================================ FILE: tests/prague/eip7702_set_code_tx/test_calls.py ================================================ """Test related to making calls to accounts having a delegation set on them.""" import itertools from enum import Enum, auto, unique import pytest from ethereum_test_tools import ( Account, Address, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op pytestmark = pytest.mark.valid_from("Prague") REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7702.md" REFERENCE_SPEC_VERSION = "99f1be49f37c034bdd5c082946f5968710dbfc87" LEGACY_CALL_FAILURE = 0 LEGACY_CALL_SUCCESS = 1 """Storage addresses for common testing fields""" _slot = itertools.count(1) slot_code_worked = next(_slot) slot_call_result = next(_slot) slot_returndata = next(_slot) slot_last_slot = next(_slot) """Storage values for common testing fields""" value_code_worked = 0x2015 identity = Address(0x04) @unique class TargetAccountType(Enum): """Kinds of target accounts for calls.""" EMPTY = auto() EOA = auto() LEGACY_CONTRACT = auto() LEGACY_CONTRACT_INVALID = auto() LEGACY_CONTRACT_REVERT = auto() IDENTITY_PRECOMPILE = auto() def __str__(self) -> str: """Return string representation of the enum.""" return f"{self.name}" @pytest.fixture def target_address(pre: Alloc, target_account_type: TargetAccountType) -> Address: """Target address of the call depending on required type of account.""" match target_account_type: case TargetAccountType.EMPTY: return pre.fund_eoa(amount=0) case TargetAccountType.EOA: return pre.fund_eoa() case TargetAccountType.LEGACY_CONTRACT: return pre.deploy_contract( code=Op.STOP, ) case TargetAccountType.LEGACY_CONTRACT_INVALID: return pre.deploy_contract( code=Op.INVALID, ) case TargetAccountType.LEGACY_CONTRACT_REVERT: return pre.deploy_contract( code=Op.REVERT(0, 0), ) case TargetAccountType.IDENTITY_PRECOMPILE: return identity @pytest.mark.parametrize("target_account_type", TargetAccountType) @pytest.mark.parametrize("delegate", [True, False]) @pytest.mark.parametrize("call_from_initcode", [True, False]) def test_delegate_call_targets( state_test: StateTestFiller, pre: Alloc, target_account_type: TargetAccountType, target_address: Address, delegate: bool, call_from_initcode: bool, ) -> None: """ Test contracts doing delegatecall to various targets resolved via 7702 delegation. """ env = Environment() if delegate: target_address = pre.fund_eoa(0, delegation=target_address) delegate_call_code = Op.SSTORE( slot_call_result, Op.DELEGATECALL(address=target_address) ) + Op.SSTORE(slot_code_worked, value_code_worked) if call_from_initcode: # Call from initcode caller_contract = delegate_call_code + Op.RETURN(0, 0) tx = Transaction( sender=pre.fund_eoa(), to=None, data=caller_contract, gas_limit=4_000_000, ) calling_contract_address = tx.created_contract else: # Normal call from existing contract caller_contract = delegate_call_code + Op.STOP calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=pre.fund_eoa(), to=calling_contract_address, gas_limit=4_000_000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: LEGACY_CALL_FAILURE if target_account_type in [TargetAccountType.LEGACY_CONTRACT_INVALID, TargetAccountType.LEGACY_CONTRACT_REVERT] else LEGACY_CALL_SUCCESS, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/prague/eip7702_set_code_tx/test_eip_mainnet.py ================================================ """ abstract: Crafted tests for mainnet of [EIP-7702: Set EOA account code for one transaction](https://eips.ethereum.org/EIPS/eip-7702). """ # noqa: E501 import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, AuthorizationTuple, StateTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op from .spec import Spec, ref_spec_7702 REFERENCE_SPEC_GIT_PATH = ref_spec_7702.git_path REFERENCE_SPEC_VERSION = ref_spec_7702.version pytestmark = [pytest.mark.valid_at("Prague"), pytest.mark.mainnet] def test_eip_7702( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """Test the executing a simple SSTORE in a set-code transaction.""" storage = Storage() sender = pre.fund_eoa() auth_signer = sender tx_value = 1 set_code = ( Op.SSTORE(storage.store_next(sender), Op.ORIGIN) + Op.SSTORE(storage.store_next(sender), Op.CALLER) + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE) + Op.STOP ) set_code_to_address = pre.deploy_contract( set_code, ) authorization_list = [ AuthorizationTuple( address=set_code_to_address, nonce=1, signer=auth_signer, ), ] gas_costs = fork.gas_costs() intrinsic_gas_cost_calc = fork.transaction_intrinsic_cost_calculator() intrinsic_gas_cost = intrinsic_gas_cost_calc( access_list=[], authorization_list_or_count=authorization_list, ) execution_cost = ( (gas_costs.G_COLD_SLOAD + gas_costs.G_STORAGE_SET) * 3 + (gas_costs.G_VERY_LOW * 3) + (gas_costs.G_BASE * 3) ) tx = Transaction( gas_limit=intrinsic_gas_cost + execution_cost, to=auth_signer, value=tx_value, authorization_list=authorization_list, sender=sender, ) state_test( pre=pre, tx=tx, post={ set_code_to_address: Account( storage=dict.fromkeys(storage, 0), ), auth_signer: Account( nonce=2, code=Spec.delegation_designation(set_code_to_address), storage=storage, ), }, ) ================================================ FILE: tests/prague/eip7702_set_code_tx/test_gas.py ================================================ """ Tests related to gas of set-code transactions from EIP-7702. Tests related to gas of set-code transactions from [EIP-7702: Set EOA account code for one transaction](https://eips.ethereum.org/EIPS/eip-7702). """ from dataclasses import dataclass from enum import Enum, auto from itertools import cycle from typing import Dict, Generator, Iterator, List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, AccessList, Account, Address, Alloc, AuthorizationTuple, Bytecode, Bytes, ChainConfig, CodeGasMeasure, StateTestFiller, Storage, Transaction, TransactionException, TransactionReceipt, extend_with_defaults, ) from ethereum_test_tools import Opcodes as Op from .helpers import AddressType, ChainIDType from .spec import Spec, ref_spec_7702 REFERENCE_SPEC_GIT_PATH = ref_spec_7702.git_path REFERENCE_SPEC_VERSION = ref_spec_7702.version pytestmark = pytest.mark.valid_from("Prague") # Enum classes used to parametrize the tests class SignerType(Enum): """ Different cases of authorization lists for testing gas cost of set-code transactions. """ SINGLE_SIGNER = auto() MULTIPLE_SIGNERS = auto() class AuthorizationInvalidityType(Enum): """Different types of invalidity for the authorization list.""" INVALID_NONCE = auto() REPEATED_NONCE = auto() INVALID_CHAIN_ID = auto() AUTHORITY_IS_CONTRACT = auto() class AccessListType(Enum): """ Different cases of access lists for testing gas cost of set-code transactions. """ EMPTY = auto() CONTAINS_AUTHORITY = auto() CONTAINS_SET_CODE_ADDRESS = auto() CONTAINS_AUTHORITY_AND_SET_CODE_ADDRESS = auto() def contains_authority(self) -> bool: """Return True if the access list contains the authority address.""" return self in { AccessListType.CONTAINS_AUTHORITY, AccessListType.CONTAINS_AUTHORITY_AND_SET_CODE_ADDRESS, } def contains_set_code_address(self) -> bool: """ Return True if the access list contains the address to which the authority authorizes to set the code to. """ return self in { AccessListType.CONTAINS_SET_CODE_ADDRESS, AccessListType.CONTAINS_AUTHORITY_AND_SET_CODE_ADDRESS, } # Fixtures used to parametrize the tests @dataclass(kw_only=True) class AuthorityWithProperties: """Dataclass to hold the properties of the authority address.""" authority: EOA """The address of the authority to be used in the transaction.""" address_type: AddressType """The type of the address the authority was before the authorization.""" invalidity_type: AuthorizationInvalidityType | None """ Whether the authorization will be invalid and if so, which type of invalidity it is. """ @property def empty(self) -> bool: """ Return True if the authority address is an empty account before the authorization. """ return self.address_type == AddressType.EMPTY_ACCOUNT @pytest.fixture() def authority_iterator( pre: Alloc, sender: EOA, authority_type: AddressType | List[AddressType], authorize_to_address: Address, self_sponsored: bool, ) -> Iterator[AuthorityWithProperties]: """Fixture to return the generator for the authority addresses.""" authority_type_iterator = ( cycle([authority_type]) if isinstance(authority_type, AddressType) else cycle(authority_type) ) def generator( authority_type_iterator: Iterator[AddressType], ) -> Generator[AuthorityWithProperties, None, None]: for i, current_authority_type in enumerate(authority_type_iterator): match current_authority_type: case AddressType.EMPTY_ACCOUNT: assert not self_sponsored, ( "Self-sponsored empty-account authority is not supported" ) yield AuthorityWithProperties( authority=pre.fund_eoa(0), address_type=current_authority_type, invalidity_type=None, ) case AddressType.EOA: if i == 0 and self_sponsored: yield AuthorityWithProperties( authority=sender, address_type=current_authority_type, invalidity_type=None, ) else: yield AuthorityWithProperties( authority=pre.fund_eoa(), address_type=current_authority_type, invalidity_type=None, ) case AddressType.EOA_WITH_SET_CODE: if i == 0 and self_sponsored: yield AuthorityWithProperties( authority=sender, address_type=current_authority_type, invalidity_type=None, ) else: yield AuthorityWithProperties( authority=pre.fund_eoa(0, delegation=authorize_to_address), address_type=current_authority_type, invalidity_type=None, ) case AddressType.CONTRACT: assert not self_sponsored or i > 0, ( "Self-sponsored contract authority is not supported" ) authority = pre.fund_eoa() authority_account = pre[authority] assert authority_account is not None authority_account.code = Bytes(Op.STOP) yield AuthorityWithProperties( authority=authority, address_type=current_authority_type, invalidity_type=AuthorizationInvalidityType.AUTHORITY_IS_CONTRACT, ) case _: raise ValueError(f"Unsupported authority type: {current_authority_type}") return generator(authority_type_iterator) @dataclass(kw_only=True) class AuthorizationWithProperties: """Dataclass to hold the properties of the authorization list.""" tuple: AuthorizationTuple """The authorization tuple to be used in the transaction.""" invalidity_type: AuthorizationInvalidityType | None """ Whether the authorization is invalid and if so, which type of invalidity it is. """ authority_type: AddressType """The type of the address the authority was before the authorization.""" skip: bool """ Whether the authorization should be skipped and therefore not included in the transaction. Used for tests where the authorization was already in the state before the transaction was created. """ @property def empty(self) -> bool: """ Return True if the authority address is an empty account before the authorization. """ return self.authority_type == AddressType.EMPTY_ACCOUNT @pytest.fixture def authorization_list_with_properties( chain_config: ChainConfig, signer_type: SignerType, authorization_invalidity_type: AuthorizationInvalidityType | None, authorizations_count: int, invalid_authorization_index: int, chain_id_type: ChainIDType, authority_iterator: Iterator[AuthorityWithProperties], authorize_to_address: Address, self_sponsored: bool, re_authorize: bool, ) -> List[AuthorizationWithProperties]: """ Fixture to return the authorization-list-with-properties for the given case. """ authorization_list: List[AuthorizationWithProperties] = [] environment_chain_id = chain_config.chain_id match signer_type: case SignerType.SINGLE_SIGNER: authority_with_properties = next(authority_iterator) # We have to take into account the cases where the nonce has # already been increased before the authorization is processed. increased_nonce = ( self_sponsored or authority_with_properties.address_type == AddressType.EOA_WITH_SET_CODE ) for i in range(authorizations_count): # Get the validity of this authorization invalidity_type: AuthorizationInvalidityType | None if authorization_invalidity_type is None or ( authorization_invalidity_type == AuthorizationInvalidityType.REPEATED_NONCE and i == 0 ): invalidity_type = authority_with_properties.invalidity_type else: if i == invalid_authorization_index or invalid_authorization_index == -1: invalidity_type = authorization_invalidity_type else: invalidity_type = authority_with_properties.invalidity_type # Get the nonce of this authorization match invalidity_type: case AuthorizationInvalidityType.INVALID_NONCE: nonce = 0 if increased_nonce else 1 case AuthorizationInvalidityType.REPEATED_NONCE: nonce = 1 if increased_nonce else 0 case _: nonce = i if not increased_nonce else i + 1 chain_id = 0 if chain_id_type == ChainIDType.GENERIC else environment_chain_id if invalidity_type == AuthorizationInvalidityType.INVALID_CHAIN_ID: chain_id = environment_chain_id + 1 skip = ( authority_with_properties.address_type == AddressType.EOA_WITH_SET_CODE and not re_authorize ) authorization_list.append( AuthorizationWithProperties( tuple=AuthorizationTuple( chain_id=chain_id, address=authorize_to_address, nonce=nonce, signer=authority_with_properties.authority, ), invalidity_type=invalidity_type, authority_type=authority_with_properties.address_type, skip=skip, ) ) return authorization_list case SignerType.MULTIPLE_SIGNERS: if authorization_invalidity_type == AuthorizationInvalidityType.REPEATED_NONCE: # Reuse the first two authorities for the repeated nonce case authority_iterator = cycle([next(authority_iterator), next(authority_iterator)]) for i in range(authorizations_count): authority_with_properties = next(authority_iterator) # Get the validity of this authorization if authorization_invalidity_type is None or ( authorization_invalidity_type == AuthorizationInvalidityType.REPEATED_NONCE and i <= 1 ): invalidity_type = authority_with_properties.invalidity_type else: if i == invalid_authorization_index or invalid_authorization_index == -1: invalidity_type = authorization_invalidity_type else: invalidity_type = authority_with_properties.invalidity_type # Get the nonce of this authorization increased_nonce = ( self_sponsored and i == 0 ) or authority_with_properties.address_type == AddressType.EOA_WITH_SET_CODE if increased_nonce: if invalidity_type == AuthorizationInvalidityType.INVALID_NONCE: nonce = 0 else: nonce = 1 else: if invalidity_type == AuthorizationInvalidityType.INVALID_NONCE: nonce = 1 else: nonce = 0 chain_id = 0 if chain_id_type == ChainIDType.GENERIC else environment_chain_id if invalidity_type == AuthorizationInvalidityType.INVALID_CHAIN_ID: chain_id = environment_chain_id + 1 skip = False if ( authority_with_properties.address_type == AddressType.EOA_WITH_SET_CODE and not re_authorize ): skip = True authorization_list.append( AuthorizationWithProperties( tuple=AuthorizationTuple( chain_id=chain_id, address=authorize_to_address, nonce=nonce, signer=authority_with_properties.authority, ), invalidity_type=invalidity_type, authority_type=authority_with_properties.address_type, skip=skip, ) ) return authorization_list case _: raise ValueError(f"Unsupported authorization list case: {signer_type}") @pytest.fixture def authorization_list( authorization_list_with_properties: List[AuthorizationWithProperties], ) -> List[AuthorizationTuple]: """Fixture to return the authorization list for the given case.""" return [ authorization_tuple.tuple for authorization_tuple in authorization_list_with_properties if not authorization_tuple.skip ] @pytest.fixture() def authorize_to_address(request: pytest.FixtureRequest, pre: Alloc) -> Address: """ Fixture to return the address to which the authority authorizes to set the code to. """ match request.param: case AddressType.EMPTY_ACCOUNT: return pre.fund_eoa(0) case AddressType.EOA: return pre.fund_eoa(1) case AddressType.CONTRACT: return pre.deploy_contract(Op.STOP) raise ValueError(f"Unsupported authorization address case: {request.param}") @pytest.fixture() def access_list( access_list_case: AccessListType, authorization_list: List[AuthorizationTuple], ) -> List[AccessList]: """Fixture to return the access list for the given case.""" access_list: List[AccessList] = [] if access_list_case == AccessListType.EMPTY: return access_list if access_list_case.contains_authority(): authority_set = {a.signer for a in authorization_list} access_list.extend( AccessList(address=authority, storage_keys=[0]) for authority in authority_set ) if access_list_case.contains_set_code_address(): authorized_addresses = {a.address for a in authorization_list} access_list.extend( AccessList(address=address, storage_keys=[0]) for address in authorized_addresses ) return access_list @pytest.fixture() def sender( pre: Alloc, authority_type: AddressType | List[AddressType], authorize_to_address: Address, self_sponsored: bool, ) -> EOA: """Fixture to return the sender address.""" if self_sponsored and ( (isinstance(authority_type, list) and AddressType.EOA_WITH_SET_CODE in authority_type) or (authority_type == AddressType.EOA_WITH_SET_CODE) ): return pre.fund_eoa(delegation=authorize_to_address) return pre.fund_eoa() # Helper functions to parametrize the tests def gas_test_parameter_args( include_many: bool = True, include_data: bool = True, include_pre_authorized: bool = True, execution_gas_allowance: bool = False, ) -> dict: """ Return the parametrize decorator that can be used in all gas test functions. """ multiple_authorizations_count = 2 defaults = { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": None, "authorizations_count": 1, "invalid_authorization_index": -1, # All authorizations are equally # invalid "chain_id_type": ChainIDType.GENERIC, "authorize_to_address": AddressType.EMPTY_ACCOUNT, "access_list_case": AccessListType.EMPTY, "self_sponsored": False, "re_authorize": False, "authority_type": AddressType.EMPTY_ACCOUNT, "data": b"", } cases = [ pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorizations_count": 1, }, id="single_valid_authorization_single_signer", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorizations_count": 1, "chain_id_type": ChainIDType.CHAIN_SPECIFIC, }, id="single_valid_chain_specific_authorization_single_signer", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorizations_count": multiple_authorizations_count, }, id="multiple_valid_authorizations_single_signer", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_NONCE, "authorizations_count": 1, }, id="single_invalid_nonce_authorization_single_signer", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_CHAIN_ID, "authorizations_count": 1, }, id="single_invalid_authorization_invalid_chain_id_single_signer", ), pytest.param( { "authority_type": AddressType.EOA_WITH_SET_CODE, "signer_type": SignerType.MULTIPLE_SIGNERS, "re_authorize": True, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_NONCE, "authorizations_count": multiple_authorizations_count, "invalid_authorization_index": 0, }, id="single_invalid_authorization_eoa_authority_multiple_signers_1", ), pytest.param( { "authority_type": AddressType.EOA_WITH_SET_CODE, "signer_type": SignerType.MULTIPLE_SIGNERS, "re_authorize": True, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_NONCE, "authorizations_count": multiple_authorizations_count, "invalid_authorization_index": multiple_authorizations_count - 1, }, id="single_invalid_authorization_eoa_authority_multiple_signers_2", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_NONCE, "authorizations_count": multiple_authorizations_count, }, id="multiple_invalid_nonce_authorizations_single_signer", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_NONCE, "authorizations_count": multiple_authorizations_count, }, id="multiple_invalid_nonce_authorizations_multiple_signers", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authority_type": AddressType.EOA, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_NONCE, "self_sponsored": True, "authorizations_count": multiple_authorizations_count, }, id="multiple_invalid_nonce_authorizations_self_sponsored_multiple_signers", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": AuthorizationInvalidityType.INVALID_CHAIN_ID, "authorizations_count": multiple_authorizations_count, }, id="multiple_invalid_chain_id_authorizations_single_signer", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authorizations_count": multiple_authorizations_count, }, id="multiple_valid_authorizations_multiple_signers", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": AuthorizationInvalidityType.REPEATED_NONCE, "authorizations_count": multiple_authorizations_count, }, id="first_valid_then_single_repeated_nonce_authorization", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authorization_invalidity_type": AuthorizationInvalidityType.REPEATED_NONCE, "authorizations_count": multiple_authorizations_count * 2, }, id="first_valid_then_single_repeated_nonce_authorizations_multiple_signers", ), pytest.param( { "authorize_to_address": AddressType.EOA, }, id="single_valid_authorization_to_eoa", ), pytest.param( { "authorize_to_address": AddressType.CONTRACT, }, id="single_valid_authorization_to_contract", ), pytest.param( { "access_list_case": AccessListType.CONTAINS_AUTHORITY, }, id="single_valid_authorization_with_authority_in_access_list", ), pytest.param( { "access_list_case": AccessListType.CONTAINS_SET_CODE_ADDRESS, }, id="single_valid_authorization_with_set_code_address_in_access_list", ), pytest.param( { "access_list_case": AccessListType.CONTAINS_AUTHORITY_AND_SET_CODE_ADDRESS, }, id="single_valid_authorization_with_authority_and_set_code_address_in_access_list", ), pytest.param( { "authority_type": AddressType.EOA, }, id="single_valid_authorization_eoa_authority", ), pytest.param( { "authority_type": AddressType.EOA_WITH_SET_CODE, "re_authorize": True, }, id="single_valid_re_authorization_eoa_authority", ), pytest.param( { "authority_type": AddressType.EOA, "authorizations_count": multiple_authorizations_count, }, id="multiple_valid_authorizations_eoa_authority", ), pytest.param( { "self_sponsored": True, "authority_type": AddressType.EOA, }, id="single_valid_authorization_eoa_self_sponsored_authority", ), pytest.param( { "self_sponsored": True, "authority_type": AddressType.EOA, "authorizations_count": multiple_authorizations_count, }, id="multiple_valid_authorizations_eoa_self_sponsored_authority", ), pytest.param( { "authority_type": AddressType.CONTRACT, }, marks=pytest.mark.pre_alloc_modify, id="single_valid_authorization_invalid_contract_authority", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authority_type": [AddressType.EMPTY_ACCOUNT, AddressType.CONTRACT], "authorizations_count": multiple_authorizations_count, }, marks=pytest.mark.pre_alloc_modify, id="multiple_authorizations_empty_account_then_contract_authority", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authority_type": [AddressType.EOA, AddressType.CONTRACT], "authorizations_count": multiple_authorizations_count, }, marks=pytest.mark.pre_alloc_modify, id="multiple_authorizations_eoa_then_contract_authority", ), pytest.param( { "self_sponsored": True, "signer_type": SignerType.MULTIPLE_SIGNERS, "authority_type": [AddressType.EOA, AddressType.CONTRACT], "authorizations_count": multiple_authorizations_count, }, marks=pytest.mark.pre_alloc_modify, id="multiple_authorizations_eoa_self_sponsored_then_contract_authority", ), ] if include_pre_authorized: cases += [ pytest.param( { "authority_type": AddressType.EOA_WITH_SET_CODE, "re_authorize": False, }, id="pre_authorized_eoa_authority_no_re_authorization", ), pytest.param( { "authority_type": AddressType.EOA_WITH_SET_CODE, "re_authorize": False, "self_sponsored": True, }, id="pre_authorized_eoa_authority_no_re_authorization_self_sponsored", ), ] if include_data: cases += [ pytest.param( { "data": b"\x01", }, id="single_valid_authorization_with_single_non_zero_byte_data", ), pytest.param( { "data": b"\x00", }, id="single_valid_authorization_with_single_zero_byte_data", ), ] if include_many: # Fit as many authorizations as possible within the transaction gas # limit. max_gas = 16_777_216 - 21_000 if execution_gas_allowance: # Leave some gas for the execution of the test code. max_gas -= 1_000_000 many_authorizations_count = max_gas // Spec.PER_EMPTY_ACCOUNT_COST cases += [ pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorizations_count": many_authorizations_count, }, id="many_valid_authorizations_single_signer", ), pytest.param( { "signer_type": SignerType.MULTIPLE_SIGNERS, "authorizations_count": many_authorizations_count, }, id="many_valid_authorizations_multiple_signers", ), pytest.param( { "signer_type": SignerType.SINGLE_SIGNER, "authorization_invalidity_type": AuthorizationInvalidityType.REPEATED_NONCE, "authorizations_count": many_authorizations_count, }, id="first_valid_then_many_duplicate_authorizations", ), ] return extend_with_defaults(cases=cases, defaults=defaults, indirect=["authorize_to_address"]) # Tests @pytest.mark.parametrize( **gas_test_parameter_args(include_pre_authorized=False, execution_gas_allowance=True) ) @pytest.mark.slow() def test_gas_cost( state_test: StateTestFiller, pre: Alloc, fork: Fork, authorization_list_with_properties: List[AuthorizationWithProperties], authorization_list: List[AuthorizationTuple], data: bytes, access_list: List[AccessList], sender: EOA, ) -> None: """ Test gas at the execution start of a set-code transaction in multiple scenarios. """ # Calculate the intrinsic gas cost of the authorizations, by default the # full empty account cost is charged for each authorization. intrinsic_gas = fork.transaction_intrinsic_cost_calculator()( calldata=data, access_list=access_list, authorization_list_or_count=authorization_list, ) discounted_authorizations = 0 seen_authority = set() for authorization_with_properties in authorization_list_with_properties: if authorization_with_properties.invalidity_type is None: authority = authorization_with_properties.tuple.signer if not authorization_with_properties.empty: seen_authority.add(authority) if authority in seen_authority: discounted_authorizations += 1 else: seen_authority.add(authority) discount_gas = ( Spec.PER_EMPTY_ACCOUNT_COST - Spec.PER_AUTH_BASE_COST ) * discounted_authorizations # We calculate the exact gas required to execute the test code. We add # SSTORE opcodes in order to make sure that the refund is less than one # fifth (EIP-3529) of the total gas used, so we can see the full discount # being reflected in most of the tests. gas_costs = fork.gas_costs() gas_opcode_cost = gas_costs.G_BASE sstore_opcode_count = 10 push_opcode_count = (2 * (sstore_opcode_count)) - 1 push_opcode_cost = gas_costs.G_VERY_LOW * push_opcode_count sstore_opcode_cost = gas_costs.G_STORAGE_SET * sstore_opcode_count cold_storage_cost = gas_costs.G_COLD_SLOAD * sstore_opcode_count execution_gas = gas_opcode_cost + push_opcode_cost + sstore_opcode_cost + cold_storage_cost # The first opcode that executes in the code is the GAS opcode, which costs # 2 gas, so we subtract that from the expected gas measure. expected_gas_measure = execution_gas - gas_opcode_cost test_code_storage = Storage() test_code = ( Op.SSTORE(test_code_storage.store_next(expected_gas_measure), Op.GAS) + sum( Op.SSTORE(test_code_storage.store_next(1), 1) for _ in range(sstore_opcode_count - 1) ) + Op.STOP ) test_code_address = pre.deploy_contract(test_code) tx_gas_limit = intrinsic_gas + execution_gas # EIP-3529 max_discount = tx_gas_limit // 5 if discount_gas > max_discount: # Only one test hits this condition, but it's ok to also test this # case. discount_gas = max_discount gas_used = tx_gas_limit - discount_gas sender_account = pre[sender] assert sender_account is not None tx = Transaction( gas_limit=tx_gas_limit, to=test_code_address, value=0, data=data, authorization_list=authorization_list, access_list=access_list, sender=sender, expected_receipt=TransactionReceipt(gas_used=gas_used), ) state_test( pre=pre, tx=tx, post={ test_code_address: Account(storage=test_code_storage), }, ) @pytest.mark.parametrize("check_delegated_account_first", [True, False]) @pytest.mark.parametrize(**gas_test_parameter_args(include_many=False, include_data=False)) def test_account_warming( state_test: StateTestFiller, pre: Alloc, authorization_list_with_properties: List[AuthorizationWithProperties], authorization_list: List[AuthorizationTuple], access_list: List[AccessList], data: bytes, sender: EOA, check_delegated_account_first: bool, ) -> None: """ Test warming of the authority and authorized accounts for set-code transactions. """ # Overhead cost is the single push operation required for the address to # check. overhead_cost = 3 * len(Op.CALL.kwargs) cold_account_cost = 2600 warm_account_cost = 100 access_list_addresses = {access_list.address for access_list in access_list} # Dictionary to keep track of the addresses to check for warming, and the # expected cost of accessing such account. addresses_to_check: Dict[Address, int] = {} for authorization_with_properties in authorization_list_with_properties: authority = authorization_with_properties.tuple.signer assert authority is not None, "authority address is not set" delegated_account = authorization_with_properties.tuple.address authority_contains_delegation_after_authorization = ( authorization_with_properties.invalidity_type is None # If the authority already contained a delegation prior to the # transaction, even if the authorization is invalid, there will be # a delegation when we check the address. or authorization_with_properties.authority_type == AddressType.EOA_WITH_SET_CODE ) if check_delegated_account_first: if delegated_account not in addresses_to_check: addresses_to_check[delegated_account] = ( warm_account_cost if delegated_account in access_list_addresses else cold_account_cost ) if authority not in addresses_to_check: if not authorization_with_properties.skip: if ( authorization_with_properties.invalidity_type is None or ( authorization_with_properties.invalidity_type != AuthorizationInvalidityType.INVALID_CHAIN_ID ) or authority in access_list_addresses ): access_cost = warm_account_cost else: access_cost = cold_account_cost else: access_cost = ( cold_account_cost if Address(sender) != authorization_with_properties.tuple.signer else warm_account_cost ) if authority_contains_delegation_after_authorization: # The double charge for accessing the delegated account, # only if the account ends up with a delegation in its # code. access_cost += warm_account_cost addresses_to_check[authority] = access_cost else: if authority not in addresses_to_check: access_cost = ( cold_account_cost if Address(sender) != authorization_with_properties.tuple.signer else warm_account_cost ) if not authorization_with_properties.skip and ( authorization_with_properties.invalidity_type is None or ( authorization_with_properties.invalidity_type != AuthorizationInvalidityType.INVALID_CHAIN_ID ) or authority in access_list_addresses ): access_cost = warm_account_cost if ( # We can only charge the delegated account access cost if # the authorization went through authority_contains_delegation_after_authorization ): if ( delegated_account in addresses_to_check or delegated_account in access_list_addresses ): access_cost += warm_account_cost else: access_cost += cold_account_cost addresses_to_check[authority] = access_cost if delegated_account not in addresses_to_check: if ( authority_contains_delegation_after_authorization or delegated_account in access_list_addresses ): access_cost = warm_account_cost else: access_cost = cold_account_cost addresses_to_check[delegated_account] = access_cost callee_code: Bytecode = sum( # type: ignore ( CodeGasMeasure( code=Op.CALL(gas=0, address=check_address), overhead_cost=overhead_cost, extra_stack_items=1, sstore_key=check_address, stop=False, ) for check_address in addresses_to_check ) ) callee_code += Op.STOP callee_address = pre.deploy_contract( callee_code, storage=dict.fromkeys(addresses_to_check, 0xDEADBEEF), ) tx = Transaction( gas_limit=1_000_000, to=callee_address, authorization_list=authorization_list if authorization_list else None, access_list=access_list, sender=sender, data=data, ) post = { callee_address: Account( storage=addresses_to_check, ), } state_test( pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize(**gas_test_parameter_args(include_pre_authorized=False)) @pytest.mark.parametrize( "valid", [True, pytest.param(False, marks=pytest.mark.exception_test)], ) def test_intrinsic_gas_cost( state_test: StateTestFiller, pre: Alloc, fork: Fork, authorization_list: List[AuthorizationTuple], data: bytes, access_list: List[AccessList], sender: EOA, valid: bool, ) -> None: """ Test sending a transaction with the exact intrinsic gas required and also insufficient gas. """ # Calculate the intrinsic gas cost of the authorizations, by default the # full empty account cost is charged for each authorization. intrinsic_gas = fork.transaction_intrinsic_cost_calculator()( calldata=data, access_list=access_list, authorization_list_or_count=authorization_list, ) tx_gas = intrinsic_gas if not valid: tx_gas -= 1 test_code = Op.STOP test_code_address = pre.deploy_contract(test_code) tx = Transaction( gas_limit=tx_gas, to=test_code_address, value=0, data=data, authorization_list=authorization_list, access_list=access_list, sender=sender, error=TransactionException.INTRINSIC_GAS_TOO_LOW if not valid else None, ) state_test( pre=pre, tx=tx, post={}, ) @pytest.mark.parametrize("pre_authorized", [True, False]) def test_self_set_code_cost( state_test: StateTestFiller, pre: Alloc, pre_authorized: bool, ) -> None: """Test set to code account access cost when it delegates to itself.""" if pre_authorized: auth_signer = pre.fund_eoa(0, delegation="Self") else: auth_signer = pre.fund_eoa(0) slot_call_cost = 1 overhead_cost = 3 * len(Op.CALL.kwargs) callee_code = CodeGasMeasure( code=Op.CALL(gas=0, address=auth_signer), overhead_cost=overhead_cost, extra_stack_items=1, sstore_key=slot_call_cost, ) callee_address = pre.deploy_contract(callee_code) callee_storage = Storage() callee_storage[slot_call_cost] = 200 if not pre_authorized else 2700 tx = Transaction( gas_limit=1_000_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=auth_signer, nonce=0, signer=auth_signer, ), ] if not pre_authorized else None, sender=pre.fund_eoa(), ) state_test( pre=pre, tx=tx, post={ callee_address: Account(storage=callee_storage), auth_signer: Account( nonce=1, code=Spec.delegation_designation(auth_signer), ), }, ) @pytest.mark.with_all_call_opcodes() def test_call_to_pre_authorized_oog( state_test: StateTestFiller, pre: Alloc, fork: Fork, call_opcode: Op, ) -> None: """ Test additional cost of delegation contract access in call instructions. """ # Delegation contract. It should never be reached by a call. delegation_code = Op.SSTORE(0, 1) delegation = pre.deploy_contract(delegation_code) # Delegate to the delegation contract. auth_signer = pre.fund_eoa(0, delegation=delegation) # Callee tries to call the auth_signer which delegates # to the delegation contract. The call instruction should out-of-gas # because of the addition cost of the delegation account access. callee_code = Bytecode( Op.SSTORE(0, call_opcode(gas=0, address=auth_signer)), ) callee_storage = Storage() callee_storage[0] = 0xFF # Value other than 0 or 1. Should not be changed. callee_address = pre.deploy_contract(callee_code, storage=callee_storage) gas_costs = fork.gas_costs() intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() tx_gas_limit = ( intrinsic_gas_cost_calculator() + len(call_opcode.kwargs) * gas_costs.G_VERY_LOW + (gas_costs.G_COLD_ACCOUNT_ACCESS * 2) - 1 ) tx = Transaction( gas_limit=tx_gas_limit, # Specific gas to trigger CALL out-of-gas. to=callee_address, sender=pre.fund_eoa(), ) state_test( pre=pre, tx=tx, post={ callee_address: Account(storage=callee_storage), auth_signer: Account(code=Spec.delegation_designation(delegation)), delegation: Account(storage=Storage()), }, ) ================================================ FILE: tests/prague/eip7702_set_code_tx/test_invalid_tx.py ================================================ """ Tests invalid set-code transactions from EIP-7702. Tests invalid set-code transactions from [EIP-7702: Set EOA account code for one transaction](https://eips.ethereum.org/EIPS/eip-7702). """ from enum import Enum, auto from typing import List, Type import pytest from ethereum_test_base_types import Bytes, FixedSizeBytes, HexNumber from ethereum_test_tools import ( Address, Alloc, AuthorizationTuple, ChainConfig, Transaction, TransactionException, TransactionTestFiller, ) from .spec import Spec, ref_spec_7702 REFERENCE_SPEC_GIT_PATH = ref_spec_7702.git_path REFERENCE_SPEC_VERSION = ref_spec_7702.version pytestmark = [pytest.mark.valid_from("Prague"), pytest.mark.exception_test] auth_account_start_balance = 0 class OversizedInt(FixedSizeBytes[2]): # type: ignore """ Oversized 2-byte int. Will only fail if the int value is less than 2**8. """ pass class OversizedAddress(FixedSizeBytes[21]): # type: ignore """Oversized Address Type.""" pass class UndersizedAddress(FixedSizeBytes[19]): # type: ignore """Undersized Address Type.""" pass class InvalidRLPMode(Enum): """Enum for invalid RLP modes.""" TRUNCATED_RLP = auto() EXTRA_BYTES = auto() def test_empty_authorization_list( transaction_test: TransactionTestFiller, pre: Alloc, ) -> None: """Test sending a transaction with an empty authorization list.""" tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[], error=TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "v,r,s", [ pytest.param(2**8, 1, 1, id="v=2**8"), pytest.param(1, 2**256, 1, id="r=2**256"), pytest.param(1, 1, 2**256, id="s=2**256"), pytest.param(2**8, 2**256, 2**256, id="v=2**8,r=s=2**256"), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_auth_signature( chain_config: ChainConfig, transaction_test: TransactionTestFiller, pre: Alloc, v: int, r: int, s: int, delegate_address: Address, ) -> None: """ Test sending a transaction where one of the signature elements is out of range. """ tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ AuthorizationTuple( address=delegate_address, nonce=0, chain_id=chain_config.chain_id, v=v, r=r, s=s, ), ], error=[ TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE, TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE_S_TOO_HIGH, ], sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "auth_chain_id", [ pytest.param(Spec.MAX_AUTH_CHAIN_ID + 1, id="auth_chain_id=2**256"), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_auth_chain_id( transaction_test: TransactionTestFiller, pre: Alloc, auth_chain_id: int, delegate_address: Address, ) -> None: """ Test sending a transaction where the chain id field of an authorization overflows the maximum value. """ authorization = AuthorizationTuple( address=delegate_address, nonce=0, chain_id=auth_chain_id, signer=pre.fund_eoa(auth_account_start_balance), ) tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[authorization], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "auth_chain_id", [pytest.param(0), pytest.param(1)], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_auth_chain_id_encoding( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: Address, auth_chain_id: int, ) -> None: """ Test sending a transaction where the chain id field of an authorization has an incorrect encoding. """ class ModifiedAuthorizationTuple(AuthorizationTuple): chain_id: OversizedInt # type: ignore authorization = ModifiedAuthorizationTuple( address=delegate_address, nonce=0, chain_id=auth_chain_id, signer=pre.fund_eoa(auth_account_start_balance), ) tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[authorization], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "nonce", [ pytest.param(Spec.MAX_NONCE + 1, id="nonce=2**64"), pytest.param(2**256, id="nonce=2**256"), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_nonce( transaction_test: TransactionTestFiller, pre: Alloc, nonce: int, delegate_address: Address, ) -> None: """ Test sending a transaction where the nonce field of an authorization overflows the maximum value. """ auth_signer = pre.fund_eoa() tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ AuthorizationTuple( address=delegate_address, nonce=nonce, signer=auth_signer, ), ], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "nonce", [ pytest.param([], id="nonce=empty-list"), pytest.param([0], id="nonce=non-empty-list"), pytest.param([0, 0], id="nonce=multi-element-list"), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_nonce_as_list( transaction_test: TransactionTestFiller, pre: Alloc, nonce: List[int], delegate_address: Address, ) -> None: """ Test sending a transaction where the nonce field of an authorization overflows the maximum value. """ auth_signer = pre.fund_eoa() class AuthorizationTupleWithNonceAsList(AuthorizationTuple): nonce: List[HexNumber] # type: ignore tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ AuthorizationTupleWithNonceAsList( address=delegate_address, nonce=nonce, signer=auth_signer, ), ], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_nonce_encoding( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: Address, ) -> None: """ Test sending a transaction where the chain id field of an authorization has an incorrect encoding. """ class ModifiedAuthorizationTuple(AuthorizationTuple): nonce: OversizedInt # type: ignore authorization = ModifiedAuthorizationTuple( address=delegate_address, nonce=0, signer=pre.fund_eoa(auth_account_start_balance), ) tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[authorization], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "address_type", [ pytest.param( OversizedAddress, id="oversized", ), pytest.param( UndersizedAddress, id="undersized", ), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param( int.from_bytes(Spec.RESET_DELEGATION_ADDRESS, byteorder="big"), id="reset_delegation_address", ), pytest.param(1, id="non_zero_address"), ], ) def test_invalid_tx_invalid_address( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: int, address_type: Type[FixedSizeBytes], ) -> None: """ Test sending a transaction where the address field of an authorization is incorrectly serialized. """ auth_signer = pre.fund_eoa() class ModifiedAuthorizationTuple(AuthorizationTuple): address: address_type # type: ignore tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ ModifiedAuthorizationTuple( address=delegate_address, nonce=0, signer=auth_signer, ), ], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize("extra_element_value", [0, 1]) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_authorization_tuple_extra_element( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: Address, extra_element_value: int, ) -> None: """ Test sending a transaction where the authorization tuple field of the type-4 transaction is serialized to contain an extra element. """ auth_signer = pre.fund_eoa() class ExtraElementAuthorizationTuple(AuthorizationTuple): extra_element: HexNumber def get_rlp_fields(self) -> List[str]: """ Append the extra field to the list of fields to be encoded in RLP. """ rlp_fields = super().get_rlp_fields()[:] rlp_fields.append("extra_element") return rlp_fields tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ ExtraElementAuthorizationTuple( address=delegate_address, nonce=0, signer=auth_signer, extra_element=extra_element_value, ), ], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "missing_index", [ pytest.param(0, id="missing_chain_id"), pytest.param(1, id="missing_address"), pytest.param(2, id="missing_nonce"), pytest.param(3, id="missing_signature_y_parity"), pytest.param(4, id="missing_signature_r"), pytest.param(5, id="missing_signature_s"), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_authorization_tuple_missing_element( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: Address, missing_index: int, ) -> None: """ Test sending a transaction where the authorization tuple field of the type-4 transaction is serialized to miss one element. """ auth_signer = pre.fund_eoa() class MissingElementAuthorizationTuple(AuthorizationTuple): missing_element_index: int def get_rlp_fields(self) -> List[str]: """ Remove the field that is specified by the missing element index. """ rlp_fields = super().get_rlp_fields()[:] rlp_fields.pop(self.missing_element_index) return rlp_fields tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ MissingElementAuthorizationTuple( address=delegate_address, nonce=0, signer=auth_signer, missing_element_index=missing_index, ), ], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_authorization_tuple_encoded_as_bytes( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: Address, ) -> None: """ Test sending a transaction where the authorization tuple field of the type-4 transaction is encoded in the outer element as bytes instead of a list of elements. """ class ModifiedTransaction(Transaction): authorization_list: List[Bytes] | None # type: ignore auth_signer = pre.fund_eoa() authorization_list = AuthorizationTuple( address=delegate_address, nonce=0, signer=auth_signer, ) tx = ModifiedTransaction( gas_limit=100_000, to=0, value=0, authorization_list=[authorization_list.rlp()], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) transaction_test( pre=pre, tx=tx, ) @pytest.mark.parametrize( "invalid_rlp_mode", [ pytest.param(InvalidRLPMode.TRUNCATED_RLP, id="truncated_rlp"), pytest.param(InvalidRLPMode.EXTRA_BYTES, id="extra_bytes"), ], ) @pytest.mark.parametrize( "delegate_address", [ pytest.param(Spec.RESET_DELEGATION_ADDRESS, id="reset_delegation_address"), pytest.param(Address(1), id="non_zero_address"), ], ) def test_invalid_tx_invalid_rlp_encoding( transaction_test: TransactionTestFiller, pre: Alloc, delegate_address: Address, invalid_rlp_mode: InvalidRLPMode, ) -> None: """ Test sending a transaction type-4 where the RLP encoding of the transaction is invalid. """ auth_signer = pre.fund_eoa() tx = Transaction( gas_limit=100_000, to=0, value=0, authorization_list=[ AuthorizationTuple( address=delegate_address, nonce=0, signer=auth_signer, ) ], error=TransactionException.TYPE_4_INVALID_AUTHORIZATION_FORMAT, sender=pre.fund_eoa(), ) if invalid_rlp_mode == InvalidRLPMode.TRUNCATED_RLP: # Truncate the last byte of the RLP encoding tx.rlp_override = Bytes(tx.rlp()[:-1]) elif invalid_rlp_mode == InvalidRLPMode.EXTRA_BYTES: # Add an extra byte to the end of the RLP encoding tx.rlp_override = Bytes(tx.rlp() + b"\x00") transaction_test( pre=pre, tx=tx, ) ================================================ FILE: tests/prague/eip7702_set_code_tx/test_set_code_txs.py ================================================ """ Tests use of set-code transactions from EIP-7702. Tests use of set-code transactions from [EIP-7702: Set EOA account code for one transaction](https://eips.ethereum.org/EIPS/eip-7702). """ from enum import StrEnum from hashlib import sha256 from itertools import count from typing import List import pytest from ethereum_test_base_types import HexNumber from ethereum_test_checklists import EIPChecklist from ethereum_test_forks import Fork from ethereum_test_tools import ( AccessList, Account, Address, Alloc, AuthorizationTuple, Block, BlockchainTestFiller, Bytecode, Bytes, ChainConfig, CodeGasMeasure, Conditional, Environment, EVMCodeType, Hash, Initcode, Requests, StateTestFiller, Storage, Transaction, TransactionException, add_kzg_version, call_return_code, compute_create_address, ) from ethereum_test_tools import Macros as Om from ethereum_test_tools import Opcodes as Op from ethereum_test_types import TransactionReceipt from ethereum_test_types.eof.v1 import Container, Section from ...cancun.eip4844_blobs.spec import Spec as Spec4844 from ..eip6110_deposits.helpers import DepositRequest from ..eip7002_el_triggerable_withdrawals.helpers import WithdrawalRequest from ..eip7251_consolidations.helpers import ConsolidationRequest from .helpers import AddressType from .spec import Spec, ref_spec_7702 REFERENCE_SPEC_GIT_PATH = ref_spec_7702.git_path REFERENCE_SPEC_VERSION = ref_spec_7702.version pytestmark = [ pytest.mark.valid_from("Prague"), pytest.mark.pre_alloc_group( "set_code_tests", reason="Tests EIP-7702 set code transactions with system contracts" ), ] auth_account_start_balance = 0 @pytest.mark.parametrize( "tx_value", [0, 1], ) @pytest.mark.parametrize( "suffix,succeeds", [ pytest.param(Op.STOP, True, id="stop"), pytest.param(Op.RETURN(0, 0), True, id="return"), pytest.param(Op.REVERT, False, id="revert"), pytest.param(Op.INVALID, False, id="invalid"), pytest.param(Om.OOG, False, id="out-of-gas"), ], ) def test_self_sponsored_set_code( state_test: StateTestFiller, pre: Alloc, suffix: Bytecode, succeeds: bool, tx_value: int, ) -> None: """ Test the executing a self-sponsored set-code transaction. The transaction is sent to the sender, and the sender is the signer of the only authorization tuple in the authorization list. The authorization tuple has a nonce of 1 because the self-sponsored transaction increases the nonce of the sender from zero to one first. The expected nonce at the end of the transaction is 2. """ storage = Storage() sender = pre.fund_eoa() set_code = ( Op.SSTORE(storage.store_next(sender), Op.ORIGIN) + Op.SSTORE(storage.store_next(sender), Op.CALLER) + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE) + suffix ) set_code_to_address = pre.deploy_contract( set_code, ) tx = Transaction( gas_limit=10_000_000, to=sender, value=tx_value, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=1, signer=sender, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account(storage=dict.fromkeys(storage, 0)), sender: Account( nonce=2, code=Spec.delegation_designation(set_code_to_address), storage=storage if succeeds else {}, ), }, ) @pytest.mark.parametrize( "eoa_balance,self_sponsored", [ pytest.param(0, False, id="zero_balance_authority"), pytest.param(1, False, id="one_wei_balance_authority"), pytest.param(None, True, id="self_sponsored_tx"), ], ) @pytest.mark.parametrize( "tx_value", [0, 1], ) @pytest.mark.parametrize( "suffix,succeeds", [ pytest.param(Op.STOP, True, id="stop"), pytest.param(Op.RETURN(0, 0), True, id="return"), pytest.param(Op.REVERT(0, 0), False, id="revert"), pytest.param(Op.INVALID, False, id="invalid"), pytest.param(Om.OOG + Op.STOP, False, id="out-of-gas"), ], ) def test_set_code_to_sstore( state_test: StateTestFiller, pre: Alloc, suffix: Bytecode, succeeds: bool, tx_value: int, eoa_balance: int, self_sponsored: bool, ) -> None: """Test the executing a simple SSTORE in a set-code transaction.""" storage = Storage() if self_sponsored: sender = pre.fund_eoa() auth_signer = sender else: auth_signer = pre.fund_eoa(eoa_balance) sender = pre.fund_eoa() set_code = ( Op.SSTORE(storage.store_next(sender), Op.ORIGIN) + Op.SSTORE(storage.store_next(sender), Op.CALLER) + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE) + suffix ) set_code_to_address = pre.deploy_contract( set_code, ) tx = Transaction( gas_limit=500_000, to=auth_signer, value=tx_value, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=1 if self_sponsored else 0, signer=auth_signer, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account( storage=dict.fromkeys(storage, 0), ), auth_signer: Account( nonce=2 if self_sponsored else 1, code=Spec.delegation_designation(set_code_to_address), storage=storage if succeeds else {}, ), }, ) def test_set_code_to_non_empty_storage_non_zero_nonce( state_test: StateTestFiller, pre: Alloc, ) -> None: """Test the setting the code to an account that has non-empty storage.""" auth_signer = pre.fund_eoa( amount=0, storage=Storage({0: 1}), # type: ignore ) sender = pre.fund_eoa() set_code = Op.SSTORE(0, Op.ADD(Op.SLOAD(0), 1)) + Op.STOP set_code_to_address = pre.deploy_contract( set_code, ) tx = Transaction( gas_limit=500_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=auth_signer.nonce, signer=auth_signer, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account( storage={}, ), auth_signer: Account( storage={0: 2}, ), }, ) @pytest.mark.parametrize( "access_list_in_tx", [ pytest.param(None, id=""), pytest.param("sender", id="sender_in_access_list"), pytest.param("auth_signer", id="auth_signer_in_access_list"), ], ) def test_set_code_to_sstore_then_sload( blockchain_test: BlockchainTestFiller, pre: Alloc, access_list_in_tx: str | None, ) -> None: """ Test the executing a simple SSTORE then SLOAD in two separate set-code transactions. """ auth_signer = pre.fund_eoa(auth_account_start_balance) sender = pre.fund_eoa() storage_key_1 = 0x1 storage_key_2 = 0x2 storage_value = 0x1234 set_code_1 = Op.SSTORE(storage_key_1, storage_value) + Op.STOP set_code_1_address = pre.deploy_contract(set_code_1) set_code_2 = Op.SSTORE(storage_key_2, Op.ADD(Op.SLOAD(storage_key_1), 1)) + Op.STOP set_code_2_address = pre.deploy_contract(set_code_2) tx_1 = Transaction( gas_limit=100_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_1_address, nonce=0, signer=auth_signer, ), ], sender=sender, ) access_list = ( [ AccessList( address=sender if access_list_in_tx == "sender" else auth_signer, storage_keys=[Hash(storage_key_1)], ) ] if access_list_in_tx else [] ) tx_2 = Transaction( gas_limit=100_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_2_address, nonce=1, signer=auth_signer, ), ], access_list=access_list, sender=sender, ) block = Block( txs=[tx_1, tx_2], ) blockchain_test( pre=pre, post={ auth_signer: Account( nonce=2, code=Spec.delegation_designation(set_code_2_address), storage={ storage_key_1: storage_value, storage_key_2: storage_value + 1, }, ), }, blocks=[block], ) @pytest.mark.parametrize( "return_opcode", [ Op.RETURN, Op.REVERT, ], ) @pytest.mark.with_all_call_opcodes def test_set_code_to_tstore_reentry( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, return_opcode: Op, evm_code_type: EVMCodeType, ) -> None: """ Test the executing a simple TSTORE in a set-code transaction, which also performs a re-entry to TLOAD the value. """ auth_signer = pre.fund_eoa(auth_account_start_balance) tload_value = 0x1234 set_code = Conditional( condition=Op.ISZERO(Op.TLOAD(1)), if_true=Op.TSTORE(1, tload_value) + call_opcode(address=Op.ADDRESS) + Op.RETURNDATACOPY(0, 0, 32) + Op.SSTORE(2, Op.MLOAD(0)), if_false=Op.MSTORE(0, Op.TLOAD(1)) + return_opcode(size=32), evm_code_type=evm_code_type, ) set_code_to_address = pre.deploy_contract(set_code) tx = Transaction( gas_limit=100_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage={2: tload_value}, ), }, ) @pytest.mark.with_all_call_opcodes( selector=lambda call_opcode: call_opcode not in [Op.DELEGATECALL, Op.CALLCODE, Op.STATICCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL] ) @pytest.mark.parametrize("call_eoa_first", [True, False]) def test_set_code_to_tstore_available_at_correct_address( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, call_eoa_first: bool, ) -> None: """ Test TLOADing from slot 2 and then SSTORE this in slot 1, then TSTORE 3 in slot 2. This is done both from the EOA which is delegated to account A, and then A is called. The storage should stay empty on both the EOA and the delegated account. """ auth_signer = pre.fund_eoa(auth_account_start_balance) storage_slot = 1 tload_slot = 2 tstore_value = 3 tstore_check_code = Op.SSTORE(storage_slot, Op.TLOAD(tload_slot)) + Op.TSTORE( tload_slot, tstore_value ) set_code_to_address = pre.deploy_contract(tstore_check_code) def make_call(call_type: Op, call_eoa: bool) -> Bytecode: call_target = auth_signer if call_eoa else set_code_to_address return call_type(address=call_target) chain_code = make_call(call_type=call_opcode, call_eoa=call_eoa_first) + make_call( call_type=call_opcode, call_eoa=not call_eoa_first ) target_call_chain_address = pre.deploy_contract(chain_code) tx = Transaction( gas_limit=100_000, to=target_call_chain_address, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( storage={storage_slot: 0}, ), set_code_to_address: Account( storage={storage_slot: 0}, ), }, ) @pytest.mark.parametrize( "external_sendall_recipient", [False, True], ) @pytest.mark.parametrize( "balance", [0, 1], ) def test_set_code_to_self_destruct( state_test: StateTestFiller, pre: Alloc, external_sendall_recipient: bool, balance: int, ) -> None: """Test the executing self-destruct opcode in a set-code transaction.""" auth_signer = pre.fund_eoa(balance) if external_sendall_recipient: recipient = pre.fund_eoa(0) else: recipient = auth_signer set_code_to_address = pre.deploy_contract(Op.SSTORE(1, 1) + Op.SELFDESTRUCT(recipient)) tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) post = { auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage={1: 1}, balance=balance if not external_sendall_recipient else 0, ), } if external_sendall_recipient and balance > 0: post[recipient] = Account(balance=balance) state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.with_all_create_opcodes @pytest.mark.slow() def test_set_code_to_contract_creator( state_test: StateTestFiller, pre: Alloc, create_opcode: Op, evm_code_type: EVMCodeType, ) -> None: """ Test the executing a contract-creating opcode in a set-code transaction. """ storage = Storage() auth_signer = pre.fund_eoa(auth_account_start_balance) deployed_code: Bytecode | Container = Op.STOP initcode: Bytecode | Container if evm_code_type == EVMCodeType.LEGACY: initcode = Initcode(deploy_code=deployed_code) elif evm_code_type == EVMCodeType.EOF_V1: deployed_code = Container.Code(deployed_code) initcode = Container.Init(deploy_container=deployed_code) else: raise ValueError(f"Unsupported EVM code type: {evm_code_type}") deployed_contract_address = compute_create_address( address=auth_signer, nonce=1, initcode=initcode, opcode=create_opcode, ) creator_code: Bytecode | Container if evm_code_type == EVMCodeType.LEGACY: creator_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( storage.store_next(deployed_contract_address), create_opcode(value=0, offset=0, size=Op.CALLDATASIZE), ) elif evm_code_type == EVMCodeType.EOF_V1: creator_code = Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP(), ), Section.Container( container=initcode, ), ] ) else: raise ValueError(f"Unsupported EVM code type: {evm_code_type}") creator_code_address = pre.deploy_contract(creator_code) tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, data=initcode if evm_code_type == EVMCodeType.LEGACY else b"", authorization_list=[ AuthorizationTuple( address=creator_code_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ creator_code_address: Account(storage={}), auth_signer: Account( nonce=2, code=Spec.delegation_designation(creator_code_address), storage=storage, ), deployed_contract_address: Account( code=deployed_code, storage={}, ), }, ) @pytest.mark.parametrize( "value", [0, 1], ) @pytest.mark.with_all_call_opcodes def test_set_code_to_self_caller( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, value: int, evm_code_type: EVMCodeType, ) -> None: """Test the executing a self-call in a set-code transaction.""" if "value" not in call_opcode.kwargs and value != 0: pytest.skip(f"Call opcode {call_opcode} does not support value") storage = Storage() auth_signer = pre.fund_eoa(auth_account_start_balance) static_call = call_opcode in [Op.STATICCALL, Op.EXTSTATICCALL] first_entry_slot = storage.store_next(True) re_entry_success_slot = storage.store_next(not static_call) re_entry_call_return_code_slot = storage.store_next( call_return_code(opcode=call_opcode, success=not static_call) ) if "value" in call_opcode.kwargs: call_bytecode = call_opcode(address=auth_signer, value=value) else: call_bytecode = call_opcode(address=auth_signer) set_code = Conditional( condition=Op.ISZERO(Op.SLOAD(first_entry_slot)), if_true=Op.SSTORE(first_entry_slot, 1) + Op.SSTORE(re_entry_call_return_code_slot, call_bytecode) + Op.STOP, if_false=Op.SSTORE(re_entry_success_slot, 1) + Op.STOP, evm_code_type=evm_code_type, ) set_code_to_address = pre.deploy_contract(set_code) tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=value, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account(storage={}), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage=storage, balance=auth_account_start_balance + value, ), }, ) @pytest.mark.execute(pytest.mark.skip(reason="excessive gas")) def test_set_code_max_depth_call_stack( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Test re-entry to delegated account until the max call stack depth possible in a transaction is reached. """ storage = Storage() auth_signer = pre.fund_eoa(auth_account_start_balance) tx_gas_limit_cap = fork.transaction_gas_limit_cap() match tx_gas_limit_cap: case None: gas_limit = 100_000_000_000_000 max_depth = 1025 case 16_777_216: gas_limit = tx_gas_limit_cap max_depth = 389 case _: raise NotImplementedError(f"Unexpected transaction gas limit cap: {tx_gas_limit_cap}") set_code = Conditional( condition=Op.ISZERO(Op.TLOAD(0)), if_true=Op.TSTORE(0, 1) + Op.CALL(address=auth_signer) + Op.SSTORE(storage.store_next(max_depth), Op.TLOAD(0)), if_false=Op.TSTORE(0, Op.ADD(1, Op.TLOAD(0))) + Op.CALL(address=auth_signer), ) set_code_to_address = pre.deploy_contract(set_code) tx = Transaction( gas_limit=gas_limit, to=auth_signer, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(gas_limit=tx.gas_limit), pre=pre, tx=tx, post={ set_code_to_address: Account(storage={}), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage=storage, balance=auth_account_start_balance, ), }, ) @pytest.mark.with_all_call_opcodes @pytest.mark.parametrize( "value", [0, 1], ) def test_set_code_call_set_code( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, value: int, ) -> None: """Test the calling a set-code account from another set-code account.""" if "value" not in call_opcode.kwargs and value != 0: pytest.skip(f"Call opcode {call_opcode} does not support value") auth_signer_1 = pre.fund_eoa(auth_account_start_balance) storage_1 = Storage() static_call = call_opcode in [Op.STATICCALL, Op.EXTSTATICCALL] set_code_1_call_result_slot = storage_1.store_next( call_return_code(opcode=call_opcode, success=not static_call) ) set_code_1_success = storage_1.store_next(True) auth_signer_2 = pre.fund_eoa(auth_account_start_balance) storage_2 = Storage().set_next_slot(storage_1.peek_slot()) set_code_2_success = storage_2.store_next(not static_call) if "value" in call_opcode.kwargs: call_bytecode = call_opcode(address=auth_signer_2, value=value) else: call_bytecode = call_opcode(address=auth_signer_2) set_code_1 = ( Op.SSTORE(set_code_1_call_result_slot, call_bytecode) + Op.SSTORE(set_code_1_success, 1) + Op.STOP ) set_code_to_address_1 = pre.deploy_contract(set_code_1) set_code_2 = Op.SSTORE(set_code_2_success, 1) + Op.STOP set_code_to_address_2 = pre.deploy_contract(set_code_2) tx = Transaction( gas_limit=10_000_000, to=auth_signer_1, value=value, authorization_list=[ AuthorizationTuple( address=set_code_to_address_1, nonce=0, signer=auth_signer_1, ), AuthorizationTuple( address=set_code_to_address_2, nonce=0, signer=auth_signer_2, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address_1: Account(storage=dict.fromkeys(storage_1, 0)), set_code_to_address_2: Account(storage=dict.fromkeys(storage_2, 0)), auth_signer_1: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address_1), storage=( storage_1 if call_opcode in [Op.CALL, Op.STATICCALL, Op.EXTCALL, Op.EXTSTATICCALL] else storage_1 + storage_2 ), balance=(0 if call_opcode in [Op.CALL, Op.EXTCALL] else value) + auth_account_start_balance, ), auth_signer_2: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address_2), storage=storage_2 if call_opcode in [Op.CALL, Op.EXTCALL] else {}, balance=(value if call_opcode in [Op.CALL, Op.EXTCALL] else 0) + auth_account_start_balance, ), }, ) def test_address_from_set_code( state_test: StateTestFiller, pre: Alloc, ) -> None: """Test the address opcode in a set-code transaction.""" storage = Storage() auth_signer = pre.fund_eoa(auth_account_start_balance) set_code = Op.SSTORE(storage.store_next(auth_signer), Op.ADDRESS) + Op.STOP set_code_to_address = pre.deploy_contract(set_code) tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account(storage={}), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage=storage, ), }, ) def test_tx_into_self_delegating_set_code( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test a transaction that has entry-point into a set-code account that delegates to itself. """ auth_signer = pre.fund_eoa(auth_account_start_balance) tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=auth_signer, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(auth_signer), ), }, ) def test_tx_into_chain_delegating_set_code( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test a transaction that has entry-point into a set-code account that delegates to another set-code account. """ auth_signer_1 = pre.fund_eoa(auth_account_start_balance) auth_signer_2 = pre.fund_eoa(auth_account_start_balance) tx = Transaction( gas_limit=10_000_000, to=auth_signer_1, value=0, authorization_list=[ AuthorizationTuple( address=auth_signer_2, nonce=0, signer=auth_signer_1, ), AuthorizationTuple( address=auth_signer_1, nonce=0, signer=auth_signer_2, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer_1: Account(nonce=1, code=Spec.delegation_designation(auth_signer_2)), auth_signer_2: Account(nonce=1, code=Spec.delegation_designation(auth_signer_1)), }, ) @pytest.mark.with_all_call_opcodes def test_call_into_self_delegating_set_code( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, ) -> None: """Test call into a set-code account that delegates to itself.""" auth_signer = pre.fund_eoa(auth_account_start_balance) storage = Storage() entry_code = ( Op.SSTORE( storage.store_next( call_return_code( opcode=call_opcode, success=False, revert=(call_opcode == Op.EXTDELEGATECALL), ) ), call_opcode(address=auth_signer), ) + Op.STOP ) entry_address = pre.deploy_contract(entry_code) tx = Transaction( gas_limit=10_000_000, to=entry_address, value=0, authorization_list=[ AuthorizationTuple( address=auth_signer, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ entry_address: Account(storage=storage), auth_signer: Account(nonce=1, code=Spec.delegation_designation(auth_signer)), }, ) @pytest.mark.with_all_call_opcodes def test_call_into_chain_delegating_set_code( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, ) -> None: """ Test call into a set-code account that delegates to another set-code account. """ auth_signer_1 = pre.fund_eoa(auth_account_start_balance) auth_signer_2 = pre.fund_eoa(auth_account_start_balance) storage = Storage() entry_code = ( Op.SSTORE( storage.store_next( call_return_code( opcode=call_opcode, success=False, revert=(call_opcode == Op.EXTDELEGATECALL), ) ), call_opcode(address=auth_signer_1), ) + Op.STOP ) entry_address = pre.deploy_contract(entry_code) tx = Transaction( gas_limit=10_000_000, to=entry_address, value=0, authorization_list=[ AuthorizationTuple( address=auth_signer_2, nonce=0, signer=auth_signer_1, ), AuthorizationTuple( address=auth_signer_1, nonce=0, signer=auth_signer_2, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ entry_address: Account(storage=storage), auth_signer_1: Account(nonce=1, code=Spec.delegation_designation(auth_signer_2)), auth_signer_2: Account(nonce=1, code=Spec.delegation_designation(auth_signer_1)), }, ) @pytest.mark.parametrize( "balance", [0, 1], ) @pytest.mark.parametrize( "set_code_type", list(AddressType), ids=lambda address_type: address_type.name, ) def test_ext_code_on_set_code( state_test: StateTestFiller, pre: Alloc, balance: int, set_code_type: AddressType, ) -> None: """Test different ext*code operations on a set-code address.""" auth_signer = pre.fund_eoa(balance) slot = count(1) slot_ext_code_size_result = next(slot) slot_ext_code_hash_result = next(slot) slot_ext_code_copy_result = next(slot) slot_ext_balance_result = next(slot) callee_code = ( Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(auth_signer)) + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer)) + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer)) + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0)) + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer)) + Op.STOP ) callee_address = pre.deploy_contract(callee_code) set_code_to_address: Address set_code: Bytecode | Bytes match set_code_type: case AddressType.EMPTY_ACCOUNT: set_code = Bytecode() set_code_to_address = pre.fund_eoa(0) case AddressType.EOA: set_code = Bytecode() set_code_to_address = pre.fund_eoa(1) case AddressType.EOA_WITH_SET_CODE: set_code_account = pre.fund_eoa(0) set_code = Spec.delegation_designation(set_code_account) set_code_to_address = pre.fund_eoa(1, delegation=set_code_account) case AddressType.CONTRACT: set_code = Op.STOP set_code_to_address = pre.deploy_contract(set_code) case _: raise ValueError(f"Unsupported set code type: {set_code_type}") callee_storage = Storage() callee_storage[slot_ext_code_size_result] = len( Spec.delegation_designation(set_code_to_address) ) callee_storage[slot_ext_code_hash_result] = Spec.delegation_designation( set_code_to_address ).keccak256() callee_storage[slot_ext_code_copy_result] = Hash( Spec.delegation_designation(set_code_to_address), right_padding=True ) callee_storage[slot_ext_balance_result] = balance tx = Transaction( gas_limit=10_000_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: ( Account.NONEXISTENT if set_code_type == AddressType.EMPTY_ACCOUNT else Account(storage={}) ), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), balance=balance, ), callee_address: Account(storage=callee_storage), }, ) @pytest.mark.parametrize( "balance", [0, 1], ) def test_ext_code_on_self_set_code( state_test: StateTestFiller, pre: Alloc, balance: int, ) -> None: """Test different ext*code operations on self set-code address.""" auth_signer = pre.fund_eoa(balance) slot = count(1) slot_ext_code_size_result = next(slot) slot_ext_code_hash_result = next(slot) slot_ext_code_copy_result = next(slot) slot_ext_balance_result = next(slot) set_code = ( Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(auth_signer)) + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer)) + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer)) + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0)) + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer)) + Op.STOP ) set_code_address = pre.deploy_contract(set_code) set_code_storage = Storage() set_code_storage[slot_ext_code_size_result] = len( Spec.delegation_designation(set_code_address) ) set_code_storage[slot_ext_code_hash_result] = Spec.delegation_designation( set_code_address ).keccak256() set_code_storage[slot_ext_code_copy_result] = Hash( Spec.delegation_designation(set_code_address), right_padding=True ) set_code_storage[slot_ext_balance_result] = balance tx = Transaction( gas_limit=10_000_000, to=auth_signer, authorization_list=[ AuthorizationTuple( address=set_code_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account(storage=set_code_storage), }, ) @pytest.mark.with_all_evm_code_types() @pytest.mark.parametrize( "set_code_address_first", [ pytest.param(True, id="call_set_code_address_first_then_authority"), pytest.param(False, id="call_authority_first_then_set_code_address"), ], ) def test_set_code_address_and_authority_warm_state( state_test: StateTestFiller, pre: Alloc, set_code_address_first: bool, ) -> None: """ Test set to code address and authority warm status after a call to authority address, or vice-versa. """ auth_signer = pre.fund_eoa(auth_account_start_balance) slot = count(1) slot_call_success = next(slot) slot_set_code_to_warm_state = next(slot) slot_authority_warm_state = next(slot) set_code = Op.STOP set_code_to_address = pre.deploy_contract(set_code) call_opcode = Op.CALL overhead_cost = 3 * len(call_opcode.kwargs) if call_opcode == Op.CALL: overhead_cost -= 1 # GAS opcode is less expensive than a PUSH code_gas_measure_set_code = CodeGasMeasure( code=call_opcode(address=set_code_to_address), overhead_cost=overhead_cost, extra_stack_items=1, sstore_key=slot_set_code_to_warm_state, stop=False, ) code_gas_measure_authority = CodeGasMeasure( code=call_opcode(address=auth_signer), overhead_cost=overhead_cost, extra_stack_items=1, sstore_key=slot_authority_warm_state, stop=False, ) callee_code = Bytecode() if set_code_address_first: callee_code += code_gas_measure_set_code + code_gas_measure_authority else: callee_code += code_gas_measure_authority + code_gas_measure_set_code callee_code += Op.SSTORE(slot_call_success, 1) + Op.STOP callee_address = pre.deploy_contract(callee_code, evm_code_type=EVMCodeType.LEGACY) callee_storage = Storage() callee_storage[slot_call_success] = 1 callee_storage[slot_set_code_to_warm_state] = 2_600 if set_code_address_first else 100 callee_storage[slot_authority_warm_state] = 200 if set_code_address_first else 2_700 tx = Transaction( gas_limit=1_000_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ callee_address: Account(storage=callee_storage), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), balance=auth_account_start_balance, ), }, ) @pytest.mark.with_all_call_opcodes() @pytest.mark.parametrize( "set_code_address_first", [ pytest.param(True, id="call_set_code_address_first_then_authority"), pytest.param(False, id="call_authority_first_then_set_code_address"), ], ) def test_set_code_address_and_authority_warm_state_call_types( state_test: StateTestFiller, pre: Alloc, call_opcode: Op, set_code_address_first: bool, ) -> None: """ Test set to code address and authority warm status after a call to authority address, or vice-versa, using all available call opcodes without using `GAS` opcode (unavailable in EOF). """ auth_signer = pre.fund_eoa(auth_account_start_balance) slot = count(1) slot_call_return_code = next(slot) slot_call_success = next(slot) set_code = Op.STOP set_code_to_address = pre.deploy_contract(set_code) call_set_code_to_address = Op.SSTORE( slot_call_return_code, call_opcode(address=set_code_to_address) ) call_authority_address = Op.SSTORE(slot_call_return_code, call_opcode(address=auth_signer)) callee_code = Bytecode() if set_code_address_first: callee_code += call_set_code_to_address + call_authority_address else: callee_code += call_authority_address + call_set_code_to_address callee_code += Op.SSTORE(slot_call_success, 1) + Op.STOP callee_address = pre.deploy_contract(callee_code) callee_storage = Storage() callee_storage[slot_call_return_code] = call_return_code(opcode=call_opcode, success=True) callee_storage[slot_call_success] = 1 tx = Transaction( gas_limit=1_000_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ callee_address: Account(storage=callee_storage), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), balance=auth_account_start_balance, ), }, ) @pytest.mark.parametrize( "balance", [0, 1], ) def test_ext_code_on_self_delegating_set_code( state_test: StateTestFiller, pre: Alloc, balance: int, ) -> None: """ Test different ext*code operations on a set-code address that delegates to itself. """ auth_signer = pre.fund_eoa(balance) slot = count(1) slot_ext_code_size_result = next(slot) slot_ext_code_hash_result = next(slot) slot_ext_code_copy_result = next(slot) slot_ext_balance_result = next(slot) callee_code = ( Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(auth_signer)) + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer)) + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer)) + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0)) + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer)) + Op.STOP ) callee_address = pre.deploy_contract(callee_code) callee_storage = Storage() callee_storage[slot_ext_code_size_result] = len(Spec.delegation_designation(auth_signer)) callee_storage[slot_ext_code_hash_result] = Spec.delegation_designation( auth_signer ).keccak256() callee_storage[slot_ext_code_copy_result] = Hash( Spec.delegation_designation(auth_signer), right_padding=True ) callee_storage[slot_ext_balance_result] = balance tx = Transaction( gas_limit=10_000_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=auth_signer, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), # TODO: Test with sender as auth_signer ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(auth_signer), balance=balance, ), callee_address: Account(storage=callee_storage), }, ) def test_ext_code_on_chain_delegating_set_code( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test different ext*code operations on a set-code address that references another delegated address. """ auth_signer_1_balance = 1 auth_signer_2_balance = 0 auth_signer_1 = pre.fund_eoa(auth_signer_1_balance) auth_signer_2 = pre.fund_eoa(auth_signer_2_balance) slot = count(1) slot_ext_code_size_result_1 = next(slot) slot_ext_code_hash_result_1 = next(slot) slot_ext_code_copy_result_1 = next(slot) slot_ext_balance_result_1 = next(slot) slot_ext_code_size_result_2 = next(slot) slot_ext_code_hash_result_2 = next(slot) slot_ext_code_copy_result_2 = next(slot) slot_ext_balance_result_2 = next(slot) callee_code = ( # Address 1 Op.SSTORE(slot_ext_code_size_result_1, Op.EXTCODESIZE(auth_signer_1)) + Op.SSTORE(slot_ext_code_hash_result_1, Op.EXTCODEHASH(auth_signer_1)) + Op.EXTCODECOPY(auth_signer_1, 0, 0, Op.EXTCODESIZE(auth_signer_1)) + Op.SSTORE(slot_ext_code_copy_result_1, Op.MLOAD(0)) + Op.SSTORE(slot_ext_balance_result_1, Op.BALANCE(auth_signer_1)) # Address 2 + Op.SSTORE(slot_ext_code_size_result_2, Op.EXTCODESIZE(auth_signer_2)) + Op.SSTORE(slot_ext_code_hash_result_2, Op.EXTCODEHASH(auth_signer_2)) + Op.EXTCODECOPY(auth_signer_2, 0, 0, Op.EXTCODESIZE(auth_signer_2)) + Op.SSTORE(slot_ext_code_copy_result_2, Op.MLOAD(0)) + Op.SSTORE(slot_ext_balance_result_2, Op.BALANCE(auth_signer_2)) + Op.STOP ) callee_address = pre.deploy_contract(callee_code) callee_storage = Storage() callee_storage[slot_ext_code_size_result_1] = len(Spec.delegation_designation(auth_signer_2)) callee_storage[slot_ext_code_hash_result_1] = Spec.delegation_designation( auth_signer_2 ).keccak256() callee_storage[slot_ext_code_copy_result_1] = Hash( Spec.delegation_designation(auth_signer_2), right_padding=True ) callee_storage[slot_ext_balance_result_1] = auth_signer_1_balance callee_storage[slot_ext_code_size_result_2] = len(Spec.delegation_designation(auth_signer_1)) callee_storage[slot_ext_code_hash_result_2] = Spec.delegation_designation( auth_signer_1 ).keccak256() callee_storage[slot_ext_code_copy_result_2] = Hash( Spec.delegation_designation(auth_signer_1), right_padding=True ) callee_storage[slot_ext_balance_result_2] = auth_signer_2_balance tx = Transaction( gas_limit=10_000_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=auth_signer_2, nonce=0, signer=auth_signer_1, ), AuthorizationTuple( address=auth_signer_1, nonce=0, signer=auth_signer_2, ), ], sender=pre.fund_eoa(), # TODO: Test with sender as auth_signer ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer_1: Account( nonce=1, code=Spec.delegation_designation(auth_signer_2), balance=auth_signer_1_balance, ), auth_signer_2: Account( nonce=1, code=Spec.delegation_designation(auth_signer_1), balance=auth_signer_2_balance, ), callee_address: Account(storage=callee_storage), }, ) @pytest.mark.parametrize( "balance", [0, 1], ) def test_self_code_on_set_code( state_test: StateTestFiller, pre: Alloc, balance: int, ) -> None: """Test codesize and codecopy operations on a set-code address.""" auth_signer = pre.fund_eoa(balance) slot = count(1) slot_code_size_result = next(slot) slot_code_copy_result = next(slot) slot_self_balance_result = next(slot) set_code = ( Op.SSTORE(slot_code_size_result, Op.CODESIZE) + Op.CODECOPY(0, 0, Op.CODESIZE) + Op.SSTORE(slot_code_copy_result, Op.MLOAD(0)) + Op.SSTORE(slot_self_balance_result, Op.SELFBALANCE) + Op.STOP ) set_code_to_address = pre.deploy_contract(set_code) storage = Storage() storage[slot_code_size_result] = len(set_code) storage[slot_code_copy_result] = bytes(set_code).ljust(32, b"\x00")[:32] storage[slot_self_balance_result] = balance tx = Transaction( gas_limit=10_000_000, to=auth_signer, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account(storage={}), auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage=storage, balance=balance, ), }, ) @pytest.mark.with_all_create_opcodes def test_set_code_to_account_deployed_in_same_tx( state_test: StateTestFiller, pre: Alloc, create_opcode: Op, evm_code_type: EVMCodeType, ) -> None: """ Test setting the code of an account to an address that is deployed in the same transaction, and test calling the set-code address and the deployed contract. """ auth_signer = pre.fund_eoa(auth_account_start_balance) success_slot = 1 deployed_code: Bytecode | Container = Op.SSTORE(success_slot, 1) + Op.STOP initcode: Bytecode | Container if evm_code_type == EVMCodeType.LEGACY: initcode = Initcode(deploy_code=deployed_code) elif evm_code_type == EVMCodeType.EOF_V1: deployed_code = Container.Code(deployed_code) initcode = Container.Init(deploy_container=deployed_code) else: raise ValueError(f"Unsupported EVM code type: {evm_code_type}") deployed_contract_address_slot = 1 signer_call_return_code_slot = 2 deployed_contract_call_return_code_slot = 3 call_opcode = Op.CALL if evm_code_type == EVMCodeType.LEGACY else Op.EXTCALL if create_opcode == Op.EOFCREATE: create_opcode = Op.EOFCREATE[0] # type: ignore contract_creator_code: Bytecode | Container = ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) # NOOP on EOF + Op.SSTORE( deployed_contract_address_slot, create_opcode(offset=0, size=Op.CALLDATASIZE), ) + Op.SSTORE(signer_call_return_code_slot, call_opcode(address=auth_signer)) + Op.SSTORE( deployed_contract_call_return_code_slot, call_opcode(address=Op.SLOAD(deployed_contract_address_slot)), ) + Op.STOP() ) if evm_code_type == EVMCodeType.EOF_V1: contract_creator_code = Container( sections=[ Section.Code(contract_creator_code), Section.Container(container=initcode), ], ) contract_creator_address = pre.deploy_contract(contract_creator_code) deployed_contract_address = compute_create_address( address=contract_creator_address, nonce=1, salt=0, initcode=initcode, opcode=create_opcode, ) tx = Transaction( gas_limit=10_000_000, to=contract_creator_address, value=0, data=initcode if evm_code_type == EVMCodeType.LEGACY else b"", authorization_list=[ AuthorizationTuple( address=deployed_contract_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ deployed_contract_address: Account( storage={success_slot: 1}, ), auth_signer: Account( nonce=1, code=Spec.delegation_designation(deployed_contract_address), storage={success_slot: 1}, ), contract_creator_address: Account( storage={ deployed_contract_address_slot: deployed_contract_address, signer_call_return_code_slot: 1, deployed_contract_call_return_code_slot: 1, } ), }, ) @pytest.mark.parametrize( "external_sendall_recipient", [False, True], ) @pytest.mark.parametrize( "balance", [0, 1], ) @pytest.mark.parametrize("call_set_code_first", [False, True]) @pytest.mark.parametrize( "create_opcode", [Op.CREATE, Op.CREATE2] ) # EOF code does not support SELFDESTRUCT def test_set_code_to_self_destructing_account_deployed_in_same_tx( state_test: StateTestFiller, pre: Alloc, create_opcode: Op, call_set_code_first: bool, external_sendall_recipient: bool, balance: int, ) -> None: """ Test setting the code of an account to an account that contains the SELFDESTRUCT opcode and was deployed in the same transaction, and test calling the set-code address and the deployed in both sequence orders. """ auth_signer = pre.fund_eoa(balance) if external_sendall_recipient: recipient = pre.fund_eoa(0) else: recipient = auth_signer success_slot = 1 deployed_code = Op.SSTORE(success_slot, 1) + Op.SELFDESTRUCT(recipient) initcode = Initcode(deploy_code=deployed_code) deployed_contract_address_slot = 1 signer_call_return_code_slot = 2 deployed_contract_call_return_code_slot = 3 call_opcode = Op.CALL contract_creator_code: Bytecode = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( deployed_contract_address_slot, create_opcode(offset=0, size=Op.CALLDATASIZE), ) if call_set_code_first: contract_creator_code += Op.SSTORE( signer_call_return_code_slot, call_opcode(address=auth_signer) ) + Op.SSTORE( deployed_contract_call_return_code_slot, call_opcode(address=Op.SLOAD(deployed_contract_address_slot)), ) else: contract_creator_code += Op.SSTORE( deployed_contract_call_return_code_slot, call_opcode(address=Op.SLOAD(deployed_contract_address_slot)), ) + Op.SSTORE(signer_call_return_code_slot, call_opcode(address=auth_signer)) contract_creator_code += Op.STOP contract_creator_address = pre.deploy_contract(contract_creator_code) deployed_contract_address = compute_create_address( address=contract_creator_address, nonce=1, initcode=initcode, opcode=create_opcode, ) tx = Transaction( gas_limit=10_000_000, to=contract_creator_address, value=0, data=initcode, authorization_list=[ AuthorizationTuple( address=deployed_contract_address, nonce=0, signer=auth_signer, ), ], sender=pre.fund_eoa(), ) post = { deployed_contract_address: Account.NONEXISTENT, auth_signer: Account( nonce=1, code=Spec.delegation_designation(deployed_contract_address), storage={success_slot: 1}, balance=balance if not external_sendall_recipient else 0, ), contract_creator_address: Account( storage={ deployed_contract_address_slot: deployed_contract_address, signer_call_return_code_slot: 1, deployed_contract_call_return_code_slot: 1, } ), } if external_sendall_recipient and balance > 0: post[recipient] = Account(balance=balance) state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.xdist_group(name="bigmem") def test_set_code_multiple_first_valid_authorization_tuples_same_signer( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test setting the code of an account with multiple authorization tuples from the same signer. """ auth_signer = pre.fund_eoa(auth_account_start_balance) tuple_count = 10 success_slot = 0 addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)] tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=address, nonce=0, signer=auth_signer, ) for address in addresses ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(addresses[0]), storage={ success_slot: 1, }, ), }, ) @pytest.mark.xdist_group(name="bigmem") def test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test setting the code of an account with multiple authorization tuples from the same signer and each authorization tuple has an increasing nonce, therefore the last tuple is executed. """ auth_signer = pre.fund_eoa(auth_account_start_balance) tuple_count = 10 success_slot = tuple_count - 1 addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)] tx = Transaction( gas_limit=10_000_000, # TODO: Reduce gas limit of all tests to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=address, nonce=i, signer=auth_signer, ) for i, address in enumerate(addresses) ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=10, code=Spec.delegation_designation(addresses[success_slot]), storage={ success_slot: 1, }, ), }, ) @pytest.mark.xdist_group(name="bigmem") def test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test setting the code of an account with multiple authorization tuples from the same signer and each authorization tuple has an increasing nonce, therefore the last tuple is executed, and the transaction is self-sponsored. """ auth_signer = pre.fund_eoa() tuple_count = 10 success_slot = tuple_count - 1 addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)] tx = Transaction( gas_limit=10_000_000, # TODO: Reduce gas limit of all tests to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=address, nonce=i + 1, signer=auth_signer, ) for i, address in enumerate(addresses) ], sender=auth_signer, ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=11, code=Spec.delegation_designation(addresses[success_slot]), storage={ success_slot: 1, }, ), }, ) def test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test setting the code of an account with multiple authorization tuples from the same signer but the first tuple is invalid. """ auth_signer = pre.fund_eoa(auth_account_start_balance) success_slot = 1 tuple_count = 10 addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)] tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=address, nonce=1 if i == 0 else 0, signer=auth_signer, ) for i, address in enumerate(addresses) ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(addresses[1]), storage={ success_slot: 1, }, ), }, ) @pytest.mark.xdist_group(name="bigmem") def test_set_code_all_invalid_authorization_tuples( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test setting the code of an account with multiple authorization tuples from the same signer and all of them are invalid. """ auth_signer = pre.fund_eoa(auth_account_start_balance) tuple_count = 10 addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)] tx = Transaction( gas_limit=10_000_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=address, nonce=1, signer=auth_signer, ) for _, address in enumerate(addresses) ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account.NONEXISTENT, }, ) @pytest.mark.xdist_group(name="bigmem") def test_set_code_using_chain_specific_id( state_test: StateTestFiller, pre: Alloc, chain_config: ChainConfig, ) -> None: """ Test sending a transaction to set the code of an account using a chain-specific ID. """ auth_signer = pre.fund_eoa(auth_account_start_balance) success_slot = 1 set_code = Op.SSTORE(success_slot, 1) + Op.STOP set_code_to_address = pre.deploy_contract(set_code) tx = Transaction( gas_limit=100_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, chain_id=chain_config.chain_id, signer=auth_signer, ) ], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage={ success_slot: 1, }, ), }, ) SECP256K1N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 SECP256K1N_OVER_2 = SECP256K1N // 2 @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize( "v,r,s", [ pytest.param(0, 1, 1, id="v=0,r=1,s=1"), pytest.param(1, 1, 1, id="v=1,r=1,s=1"), pytest.param(0, SECP256K1N - 2, 1, id="v=0,r=SECP256K1N-2,s=1"), pytest.param(1, SECP256K1N - 2, 1, id="v=1,r=SECP256K1N-2,s=1"), pytest.param(0, 1, SECP256K1N_OVER_2, id="v=0,r=1,s=SECP256K1N_OVER_2"), pytest.param(1, 1, SECP256K1N_OVER_2, id="v=1,r=1,s=SECP256K1N_OVER_2"), ], ) def test_set_code_using_valid_synthetic_signatures( state_test: StateTestFiller, pre: Alloc, chain_config: ChainConfig, v: int, r: int, s: int, ) -> None: """ Test sending a transaction to set the code of an account using synthetic signatures. """ success_slot = 1 set_code = Op.SSTORE(success_slot, 1) + Op.STOP set_code_to_address = pre.deploy_contract(set_code) authorization_tuple = AuthorizationTuple( address=set_code_to_address, nonce=0, chain_id=chain_config.chain_id, v=v, r=r, s=s, ) auth_signer = authorization_tuple.signer tx = Transaction( gas_limit=100_000, to=auth_signer, value=0, authorization_list=[authorization_tuple], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(set_code_to_address), storage={ success_slot: 1, }, ), }, ) @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize( "v,r,s", [ # V pytest.param(2, 1, 1, id="v=2"), pytest.param(27, 1, 1, id="v=27"), # Type-0 transaction valid value pytest.param(28, 1, 1, id="v=28"), # Type-0 transaction valid value pytest.param(35, 1, 1, id="v=35"), # Type-0 replay-protected # transaction valid value pytest.param(36, 1, 1, id="v=36"), # Type-0 replay-protected # transaction valid value pytest.param(2**8 - 1, 1, 1, id="v=2**8-1"), # R pytest.param(1, 0, 1, id="r=0"), pytest.param(0, SECP256K1N - 1, 1, id="r=SECP256K1N-1"), pytest.param(0, SECP256K1N, 1, id="r=SECP256K1N"), pytest.param(0, SECP256K1N + 1, 1, id="r=SECP256K1N+1"), pytest.param(1, 2**256 - 1, 1, id="r=2**256-1"), # S pytest.param(1, 1, 0, id="s=0"), pytest.param(0, 1, SECP256K1N_OVER_2 - 1, id="s=SECP256K1N_OVER_2-1"), pytest.param(0, 1, SECP256K1N_OVER_2, id="s=SECP256K1N_OVER_2"), pytest.param(0, 1, SECP256K1N_OVER_2 + 1, id="s=SECP256K1N_OVER_2+1"), pytest.param(0, 1, SECP256K1N - 1, id="s=SECP256K1N-1"), pytest.param(0, 1, SECP256K1N, id="s=SECP256K1N"), pytest.param(0, 1, SECP256K1N + 1, id="s=SECP256K1N+1"), pytest.param(0, 1, 2**256 - 1, id="s=2**256-1"), # All Values pytest.param(0, 0, 0, id="v=r=s=0"), pytest.param(2**8 - 1, 2**256 - 1, 2**256 - 1, id="v=2**8-1,r=s=2**256-1"), ], ) def test_valid_tx_invalid_auth_signature( state_test: StateTestFiller, pre: Alloc, chain_config: ChainConfig, v: int, r: int, s: int, ) -> None: """ Test sending a transaction to set the code of an account using synthetic signatures, the transaction is valid but the authorization should not go through. """ success_slot = 1 callee_code = Op.SSTORE(success_slot, 1) + Op.STOP callee_address = pre.deploy_contract(callee_code) authorization_tuple = AuthorizationTuple( address=0, nonce=0, chain_id=chain_config.chain_id, v=v, r=r, s=s, ) tx = Transaction( gas_limit=100_000, to=callee_address, value=0, authorization_list=[authorization_tuple], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ callee_address: Account( storage={success_slot: 1}, ), }, ) def test_signature_s_out_of_range( state_test: StateTestFiller, pre: Alloc, chain_config: ChainConfig, ) -> None: """ Test sending a transaction with an authorization tuple where the signature s value is out of range by modifying its value to be `SECP256K1N - S` and flipping the v value. """ auth_signer = pre.fund_eoa(0) set_code = Op.STOP set_code_to_address = pre.deploy_contract(set_code) authorization_tuple = AuthorizationTuple( address=set_code_to_address, nonce=0, chain_id=chain_config.chain_id, signer=auth_signer, ) authorization_tuple.s = HexNumber(SECP256K1N - authorization_tuple.s) authorization_tuple.v = HexNumber(1 - authorization_tuple.v) assert authorization_tuple.s > SECP256K1N_OVER_2 success_slot = 1 entry_code = Op.SSTORE(success_slot, 1) + Op.STOP entry_address = pre.deploy_contract(entry_code) tx = Transaction( gas_limit=100_000, to=entry_address, value=0, authorization_list=[authorization_tuple], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account.NONEXISTENT, entry_address: Account( storage={success_slot: 1}, ), }, ) class InvalidChainID(StrEnum): """Invalid chain IDs for the authorization tuple.""" MAX_AUTH_CHAIN_ID = "2**256-1" CORRECT_CHAIN_ID_PLUS_ONE = "correct_chain_id+1" CORRECT_CHAIN_ID_MINUS_ONE = "correct_chain_id-1" @pytest.mark.parametrize( "invalid_chain_id_case", [ pytest.param(InvalidChainID.MAX_AUTH_CHAIN_ID, id="auth_chain_id=2**256-1"), pytest.param( InvalidChainID.CORRECT_CHAIN_ID_PLUS_ONE, id="auth_chain_id=correct_chain_id+1" ), pytest.param( InvalidChainID.CORRECT_CHAIN_ID_MINUS_ONE, id="auth_chain_id=correct_chain_id-1" ), ], ) def test_valid_tx_invalid_chain_id( state_test: StateTestFiller, pre: Alloc, chain_config: ChainConfig, invalid_chain_id_case: InvalidChainID, ) -> None: """ Test sending a transaction where the chain id field does not match the current chain's id. """ auth_signer = pre.fund_eoa(auth_account_start_balance) success_slot = 1 return_slot = 2 set_code = Op.RETURN(0, 1) set_code_to_address = pre.deploy_contract(set_code) if invalid_chain_id_case == InvalidChainID.MAX_AUTH_CHAIN_ID: auth_chain_id = Spec.MAX_AUTH_CHAIN_ID elif invalid_chain_id_case == InvalidChainID.CORRECT_CHAIN_ID_PLUS_ONE: auth_chain_id = chain_config.chain_id + 1 elif invalid_chain_id_case == InvalidChainID.CORRECT_CHAIN_ID_MINUS_ONE: auth_chain_id = chain_config.chain_id - 1 if auth_chain_id == 0: pytest.skip("Cannot use correct_chain_id-1 as invalid chain ID") else: raise ValueError(f"Invalid chain ID case: {invalid_chain_id_case}") authorization = AuthorizationTuple( address=set_code_to_address, nonce=0, chain_id=auth_chain_id, signer=auth_signer, ) entry_code = ( Op.SSTORE(success_slot, 1) + Op.CALL(address=auth_signer) + Op.SSTORE(return_slot, Op.RETURNDATASIZE) ) entry_address = pre.deploy_contract(entry_code) tx = Transaction( gas_limit=100_000, to=entry_address, value=0, authorization_list=[authorization], error=None, sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account.NONEXISTENT, entry_address: Account( storage={ success_slot: 1, return_slot: 0, }, ), }, ) @pytest.mark.parametrize( "account_nonce,authorization_nonce", [ pytest.param( Spec.MAX_NONCE, Spec.MAX_NONCE, id="nonce=2**64-1", marks=pytest.mark.execute(pytest.mark.skip(reason="Impossible account nonce")), ), pytest.param( Spec.MAX_NONCE - 1, Spec.MAX_NONCE - 1, id="nonce=2**64-2", marks=pytest.mark.execute(pytest.mark.skip(reason="Impossible account nonce")), ), pytest.param( 0, 1, id="nonce=1,account_nonce=0", ), pytest.param( 1, 0, id="nonce=0,account_nonce=1", ), ], ) @pytest.mark.execute(pytest.mark.skip(reason="Non-zero nonce not supported")) def test_nonce_validity( state_test: StateTestFiller, pre: Alloc, account_nonce: int, authorization_nonce: int, ) -> None: """ Test sending a transaction where the nonce field of an authorization almost overflows the maximum value. Also test calling the account of the authorization signer in order to verify that the account is not warm. """ auth_signer = pre.fund_eoa(auth_account_start_balance, nonce=account_nonce) success_slot = 1 return_slot = 2 valid_authorization = authorization_nonce < 2**64 - 1 and account_nonce == authorization_nonce set_code = Op.RETURN(0, 1) set_code_to_address = pre.deploy_contract(set_code) authorization = AuthorizationTuple( address=set_code_to_address, nonce=authorization_nonce, signer=auth_signer, ) entry_code = ( Op.SSTORE(success_slot, 1) + Op.CALL(address=auth_signer) + Op.SSTORE(return_slot, Op.RETURNDATASIZE) ) entry_address = pre.deploy_contract(entry_code) tx = Transaction( gas_limit=100_000, to=entry_address, value=0, authorization_list=[authorization], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=(account_nonce + 1) if valid_authorization else account_nonce, code=Spec.delegation_designation(set_code_to_address) if valid_authorization else b"", ) if authorization_nonce < 2**64 and account_nonce > 0 else Account.NONEXISTENT, entry_address: Account( storage={ success_slot: 1, return_slot: 1 if valid_authorization else 0, }, ), }, ) @pytest.mark.execute(pytest.mark.skip(reason="Impossible account nonce")) def test_nonce_overflow_after_first_authorization( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test sending a transaction with two authorization where the first one bumps the nonce to 2**64-1 and the second would result in overflow. """ nonce = 2**64 - 2 auth_signer = pre.fund_eoa(auth_account_start_balance, nonce=nonce) success_slot = 1 return_slot = 2 set_code_1 = Op.RETURN(0, 1) set_code_to_address_1 = pre.deploy_contract(set_code_1) set_code_2 = Op.RETURN(0, 2) set_code_to_address_2 = pre.deploy_contract(set_code_2) authorization_list = [ AuthorizationTuple( address=set_code_to_address_1, nonce=nonce, signer=auth_signer, ), AuthorizationTuple( address=set_code_to_address_2, nonce=nonce + 1, signer=auth_signer, ), ] entry_code = ( Op.SSTORE(success_slot, 1) + Op.CALL(address=auth_signer) + Op.SSTORE(return_slot, Op.RETURNDATASIZE) ) entry_address = pre.deploy_contract(entry_code) tx = Transaction( gas_limit=200_000, to=entry_address, value=0, authorization_list=authorization_list, sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=nonce + 1, code=Spec.delegation_designation(set_code_to_address_1), ), entry_address: Account( storage={ success_slot: 1, return_slot: 1, }, ), }, ) @pytest.mark.parametrize( "log_opcode", [ Op.LOG0, Op.LOG1, Op.LOG2, Op.LOG3, Op.LOG4, ], ) @pytest.mark.with_all_evm_code_types def test_set_code_to_log( state_test: StateTestFiller, pre: Alloc, log_opcode: Op, ) -> None: """ Test setting the code of an account to a contract that performs the log operation. """ sender = pre.fund_eoa() log_kwargs = {} if "topic_1" in log_opcode.kwargs: log_kwargs["topic_1"] = 1 if "topic_2" in log_opcode.kwargs: log_kwargs["topic_2"] = 2 if "topic_3" in log_opcode.kwargs: log_kwargs["topic_3"] = 3 if "topic_4" in log_opcode.kwargs: log_kwargs["topic_4"] = 4 set_to_code = ( Op.MSTORE(0, 0x1234) + log_opcode(size=32, **log_kwargs) # type: ignore + Op.STOP ) set_to_address = pre.deploy_contract(set_to_code) tx = Transaction( gas_limit=10_000_000, to=sender, value=0, authorization_list=[ AuthorizationTuple( address=set_to_address, nonce=1, signer=sender, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ sender: Account( nonce=2, code=Spec.delegation_designation(set_to_address), ), }, ) @pytest.mark.with_all_call_opcodes @pytest.mark.with_all_precompiles @EIPChecklist.Precompile.Test.CallContexts.SetCode(eip=[7951, 7883, 7823]) def test_set_code_to_precompile( state_test: StateTestFiller, pre: Alloc, precompile: int, call_opcode: Op, ) -> None: """ Test setting the code of an account to a pre-compile address and executing all call opcodes. """ auth_signer = pre.fund_eoa(auth_account_start_balance) if "value" in call_opcode.kwargs: call_bytecode = call_opcode(address=auth_signer, gas=0, value=1) value = 1 else: call_bytecode = call_opcode(address=auth_signer, gas=0) value = 0 caller_code_storage = Storage() caller_code = ( Op.SSTORE( caller_code_storage.store_next(call_return_code(opcode=call_opcode, success=True)), call_bytecode, ) + Op.SSTORE(caller_code_storage.store_next(0), Op.RETURNDATASIZE) + Op.STOP ) caller_code_address = pre.deploy_contract(caller_code, balance=value) tx = Transaction( sender=pre.fund_eoa(), gas_limit=500_000, to=caller_code_address, authorization_list=[ AuthorizationTuple( address=Address(precompile), nonce=0, signer=auth_signer, ), ], ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=1, code=Spec.delegation_designation(Address(precompile)), ), caller_code_address: Account( storage=caller_code_storage, ), }, ) @pytest.mark.with_all_precompiles def test_set_code_to_precompile_not_enough_gas_for_precompile_execution( state_test: StateTestFiller, pre: Alloc, fork: Fork, precompile: int, ) -> None: """ Test set code to precompile and making direct call in same transaction with intrinsic gas only, no extra gas for precompile execution. """ auth_signer = pre.fund_eoa(amount=1) auth = AuthorizationTuple(address=Address(precompile), nonce=0, signer=auth_signer) intrinsic_gas = fork.transaction_intrinsic_cost_calculator()( authorization_list_or_count=[auth], ) discount = min( Spec.PER_EMPTY_ACCOUNT_COST - Spec.PER_AUTH_BASE_COST, intrinsic_gas // 5, # max discount EIP-3529 ) tx = Transaction( sender=pre.fund_eoa(), to=auth_signer, gas_limit=intrinsic_gas, value=1, authorization_list=[auth], # explicitly check expected gas, no precompile code executed expected_receipt=TransactionReceipt(gas_used=intrinsic_gas - discount), ) state_test( pre=pre, tx=tx, post={ auth_signer: Account( # implicitly checks no OOG, successful tx transfers ``value=1`` balance=2, code=Spec.delegation_designation(Address(precompile)), nonce=1, ), }, ) def deposit_contract_initial_storage() -> Storage: """Return the initial storage of the deposit contract.""" storage = Storage() deposit_contract_tree_depth = 32 next_hash = sha256(b"\x00" * 64).digest() for i in range(deposit_contract_tree_depth + 2, deposit_contract_tree_depth * 2 + 1): storage[i] = next_hash next_hash = sha256(next_hash + next_hash).digest() return storage @pytest.mark.with_all_call_opcodes( selector=( lambda opcode: opcode not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL] ) ) @pytest.mark.with_all_system_contracts def test_set_code_to_system_contract( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, system_contract: int, call_opcode: Op, ) -> None: """Test setting the code of an account to a system contract.""" caller_code_storage = Storage() call_return_code_slot = caller_code_storage.store_next( call_return_code( opcode=call_opcode, success=True, ) ) call_return_data_size_slot = caller_code_storage.store_next(0) call_value = 0 # Setup the initial storage of the account to mimic the system contract if # required match system_contract: case Address(0x00000000219AB540356CBB839CBE05303D7705FA): # EIP-6110 # Deposit contract needs specific storage values, so we set them on # the account auth_signer = pre.fund_eoa( auth_account_start_balance, storage=deposit_contract_initial_storage() ) case Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02): # EIP-4788 auth_signer = pre.fund_eoa(auth_account_start_balance, storage=Storage({1: 1})) case _: # Pre-fund without storage auth_signer = pre.fund_eoa(auth_account_start_balance) # Fabricate the payload for the system contract match system_contract: case Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02): # EIP-4788 caller_payload = Hash(1) caller_code_storage[call_return_data_size_slot] = 32 case Address(0x00000000219AB540356CBB839CBE05303D7705FA): # EIP-6110 # Fabricate a valid deposit request to the set-code account deposit_request = DepositRequest( pubkey=0x01, withdrawal_credentials=0x02, amount=1_000_000_000, signature=0x03, index=0x0, ) caller_payload = deposit_request.calldata call_value = deposit_request.value case Address(0x00000961EF480EB55E80D19AD83579A64C007002): # EIP-7002 # Fabricate a valid withdrawal request to the set-code account withdrawal_request = WithdrawalRequest( source_address=0x01, validator_pubkey=0x02, amount=0x03, fee=0x01, ) caller_payload = withdrawal_request.calldata call_value = withdrawal_request.value case Address(0x0000BBDDC7CE488642FB579F8B00F3A590007251): # EIP-7251 # Fabricate a valid consolidation request to the set-code account consolidation_request = ConsolidationRequest( source_address=0x01, source_pubkey=0x02, target_pubkey=0x03, fee=0x01, ) caller_payload = consolidation_request.calldata call_value = consolidation_request.value case Address(0x0000F90827F1C53A10CB7A02335B175320002935): # EIP-2935 # This payload is used to identify the number of blocks to be # subtracted from the latest block number caller_payload = Hash(1) caller_code_storage[call_return_data_size_slot] = 32 case _: raise ValueError(f"Not implemented system contract: {system_contract}") # Setup the code to call the system contract match system_contract: case Address(0x0000F90827F1C53A10CB7A02335B175320002935): # EIP-2935 # Do a trick here to get the block number of the penultimate block # to ensure it is saved in the history contract check_block_number = Op.SUB(Op.NUMBER, Op.CALLDATALOAD(0)) call_system_contract_code = Op.MSTORE(0, check_block_number) + Op.SSTORE( call_return_code_slot, call_opcode(address=auth_signer, value=call_value, args_size=32), ) case _: # Call another system contract with fabricated payload call_system_contract_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( call_return_code_slot, call_opcode(address=auth_signer, value=call_value, args_size=Op.CALLDATASIZE), ) caller_code = ( call_system_contract_code + Op.SSTORE(call_return_data_size_slot, Op.RETURNDATASIZE) + Op.STOP ) caller_code_address = pre.deploy_contract(caller_code) sender = pre.fund_eoa() if call_value > 0: pre.fund_address(sender, call_value) txs = [ Transaction( sender=sender, gas_limit=500_000, to=caller_code_address, value=call_value, data=caller_payload, authorization_list=[ AuthorizationTuple( address=Address(system_contract), nonce=auth_signer.nonce, signer=auth_signer, ), ], ) ] blockchain_test( pre=pre, blocks=[ Block( txs=txs, requests_hash=Requests(), # Verify nothing slipped into the # requests trie ) ], post={ auth_signer: Account( nonce=auth_signer.nonce + 1, code=Spec.delegation_designation(Address(system_contract)), ), caller_code_address: Account( storage=caller_code_storage, ), }, ) @pytest.mark.with_all_evm_code_types @pytest.mark.with_all_tx_types( selector=lambda tx_type: tx_type != 4, marks=lambda tx_type: pytest.mark.execute(pytest.mark.skip("incompatible tx")) if tx_type in [0, 3] else None, ) @pytest.mark.parametrize( "same_block", [ pytest.param( True, marks=[pytest.mark.execute(pytest.mark.skip("duplicate scenario for execute"))], id="same_block", ), pytest.param(False, id="different_block"), ], ) def test_eoa_tx_after_set_code( blockchain_test: BlockchainTestFiller, pre: Alloc, tx_type: int, fork: Fork, evm_code_type: EVMCodeType, same_block: bool, ) -> None: """ Test sending a transaction from an EOA after code has been set to the account. """ auth_signer = pre.fund_eoa() set_code = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + Op.STOP set_code_to_address = pre.deploy_contract(set_code) first_eoa_tx = Transaction( sender=pre.fund_eoa(), gas_limit=500_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=0, signer=auth_signer, ), ], ) auth_signer.nonce += 1 # type: ignore follow_up_eoa_txs: List[Transaction] = [] match tx_type: case 0: follow_up_eoa_txs.extend( [ Transaction( type=tx_type, sender=auth_signer, gas_limit=500_000, to=auth_signer, value=0, protected=True, ), Transaction( type=tx_type, sender=auth_signer, gas_limit=500_000, to=auth_signer, value=0, protected=False, ), ] ) case 1: follow_up_eoa_txs.append( Transaction( type=tx_type, sender=auth_signer, gas_limit=500_000, to=auth_signer, value=0, access_list=[ AccessList( address=auth_signer, storage_keys=[1], ) ], ) ) case 2: follow_up_eoa_txs.append( Transaction( type=tx_type, sender=auth_signer, gas_limit=500_000, to=auth_signer, value=0, max_fee_per_gas=1_000, max_priority_fee_per_gas=1_000, ) ) case 3: follow_up_eoa_txs.append( Transaction( type=tx_type, sender=auth_signer, gas_limit=500_000, to=auth_signer, value=0, max_fee_per_gas=1_000, max_priority_fee_per_gas=1_000, max_fee_per_blob_gas=fork.min_base_fee_per_blob_gas() * 10, blob_versioned_hashes=add_kzg_version( [Hash(1)], Spec4844.BLOB_COMMITMENT_VERSION_KZG, ), ) ) case _: raise ValueError(f"Unsupported tx type: {tx_type}, test needs update") if same_block: blocks = [Block(txs=[first_eoa_tx] + follow_up_eoa_txs)] else: blocks = [ Block(txs=[first_eoa_tx]), Block(txs=follow_up_eoa_txs), ] blockchain_test( pre=pre, blocks=blocks, post={ auth_signer: Account( nonce=3 if tx_type == 0 else 2, code=Spec.delegation_designation(set_code_to_address), storage={1: 3 if tx_type == 0 else 2}, ), }, ) @pytest.mark.parametrize( "self_sponsored", [ pytest.param(False, id="not_self_sponsored"), pytest.param(True, id="self_sponsored"), ], ) def test_reset_code( blockchain_test: BlockchainTestFiller, pre: Alloc, self_sponsored: bool, ) -> None: """ Test sending type-4 tx to reset the code of an account after code has been set to the account. """ auth_signer = pre.fund_eoa() set_code_1 = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + Op.STOP set_code_1_address = pre.deploy_contract(set_code_1) set_code_2 = Op.SSTORE(2, Op.ADD(Op.SLOAD(2), 1)) + Op.STOP set_code_2_address = pre.deploy_contract(set_code_2) sender = pre.fund_eoa() txs = [ Transaction( sender=sender, gas_limit=500_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_1_address, nonce=0, signer=auth_signer, ), ], ) ] auth_signer.nonce += 1 # type: ignore if self_sponsored: sender = auth_signer txs.append( Transaction( sender=sender, gas_limit=500_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_2_address, nonce=auth_signer.nonce + 1 if self_sponsored else auth_signer.nonce, signer=auth_signer, ), ], ), ) blockchain_test( pre=pre, blocks=[Block(txs=txs)], post={ auth_signer: Account( nonce=3 if self_sponsored else 2, code=Spec.delegation_designation(set_code_2_address), storage={1: 1, 2: 1}, ), }, ) @pytest.mark.exception_test def test_contract_create( state_test: StateTestFiller, pre: Alloc, ) -> None: """Test sending type-4 tx as a create transaction.""" authorization_tuple = AuthorizationTuple( address=Address(0x01), nonce=0, signer=pre.fund_eoa(), ) tx = Transaction( gas_limit=100_000, to=None, value=0, authorization_list=[authorization_tuple], error=TransactionException.TYPE_4_TX_CONTRACT_CREATION, sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={}, ) @pytest.mark.exception_test def test_empty_authorization_list( state_test: StateTestFiller, pre: Alloc, ) -> None: """Test sending an invalid transaction with empty authorization list.""" tx = Transaction( gas_limit=100_000, to=pre.deploy_contract(code=b""), value=0, authorization_list=[], error=TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST, sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={}, ) @pytest.mark.parametrize( "self_sponsored", [ pytest.param(False, id="not_self_sponsored"), pytest.param(True, id="self_sponsored"), ], ) @pytest.mark.parametrize( "pre_set_delegation_code", [ pytest.param(Op.RETURN(0, 1), id="delegated_account"), pytest.param(None, id="undelegated_account"), ], ) def test_delegation_clearing( state_test: StateTestFiller, pre: Alloc, pre_set_delegation_code: Bytecode | None, self_sponsored: bool, ) -> None: """ Test clearing the delegation of an account under a variety of circumstances. - pre_set_delegation_code: The code to set on the account before clearing delegation, or None if the account should not have any code set. - self_sponsored: Whether the delegation clearing transaction is self-sponsored. """ # noqa: D417 pre_set_delegation_address: Address | None = None if pre_set_delegation_code is not None: pre_set_delegation_address = pre.deploy_contract(pre_set_delegation_code) if self_sponsored: auth_signer = pre.fund_eoa(delegation=pre_set_delegation_address) else: auth_signer = pre.fund_eoa(0, delegation=pre_set_delegation_address) success_slot = 1 return_slot = 2 ext_code_size_slot = 3 ext_code_hash_slot = 4 ext_code_copy_slot = 5 entry_code = ( Op.SSTORE(success_slot, 1) + Op.CALL(address=auth_signer) + Op.SSTORE(return_slot, Op.RETURNDATASIZE) + Op.SSTORE(ext_code_size_slot, Op.EXTCODESIZE(address=auth_signer)) + Op.SSTORE(ext_code_hash_slot, Op.EXTCODEHASH(address=auth_signer)) + Op.EXTCODECOPY(address=auth_signer, size=32) + Op.SSTORE(ext_code_copy_slot, Op.MLOAD(0)) + Op.STOP ) entry_address = pre.deploy_contract(entry_code) authorization = AuthorizationTuple( address=Spec.RESET_DELEGATION_ADDRESS, # Reset nonce=auth_signer.nonce + (1 if self_sponsored else 0), signer=auth_signer, ) tx = Transaction( gas_limit=200_000, to=entry_address, value=0, authorization_list=[authorization], sender=pre.fund_eoa() if not self_sponsored else auth_signer, ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=auth_signer.nonce + 1, code=b"", storage={}, ), entry_address: Account( storage={ success_slot: 1, return_slot: 0, ext_code_size_slot: 0, ext_code_hash_slot: Bytes().keccak256(), ext_code_copy_slot: 0, }, ), }, ) @pytest.mark.parametrize( "self_sponsored", [ pytest.param(False, id="not_self_sponsored"), pytest.param(True, id="self_sponsored"), ], ) @pytest.mark.parametrize( "pre_set_delegation_code", [ pytest.param(Op.RETURN(0, 1), id="delegated_account"), pytest.param(None, id="undelegated_account"), ], ) def test_delegation_clearing_tx_to( state_test: StateTestFiller, pre: Alloc, pre_set_delegation_code: Bytecode | None, self_sponsored: bool, ) -> None: """ Tests directly calling the account which delegation is being cleared. - pre_set_delegation_code: The code to set on the account before clearing delegation, or None if the account should not have any code set. - self_sponsored: Whether the delegation clearing transaction is self-sponsored. """ # noqa: D417 pre_set_delegation_address: Address | None = None if pre_set_delegation_code is not None: pre_set_delegation_address = pre.deploy_contract(pre_set_delegation_code) if self_sponsored: auth_signer = pre.fund_eoa(delegation=pre_set_delegation_address) else: auth_signer = pre.fund_eoa(0, delegation=pre_set_delegation_address) sender = pre.fund_eoa() if not self_sponsored else auth_signer tx = Transaction( gas_limit=200_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=Spec.RESET_DELEGATION_ADDRESS, # Reset nonce=auth_signer.nonce + (1 if self_sponsored else 0), signer=auth_signer, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=auth_signer.nonce + 1, code=b"", storage={}, ), }, ) @pytest.mark.parametrize( "pre_set_delegation_code", [ pytest.param(Op.RETURN(0, 1), id="delegated_account"), pytest.param(None, id="undelegated_account"), ], ) def test_delegation_clearing_and_set( state_test: StateTestFiller, pre: Alloc, pre_set_delegation_code: Bytecode | None, ) -> None: """ Tests clearing and setting the delegation again in the same authorization list. - pre_set_delegation_code: The code to set on the account before clearing delegation, or None if the account should not have any code set. """ # noqa: D417 pre_set_delegation_address: Address | None = None if pre_set_delegation_code is not None: pre_set_delegation_address = pre.deploy_contract(pre_set_delegation_code) auth_signer = pre.fund_eoa(0, delegation=pre_set_delegation_address) reset_code_address = pre.deploy_contract( Op.CALL(address=Spec.RESET_DELEGATION_ADDRESS) + Op.SSTORE(0, 1) + Op.STOP ) sender = pre.fund_eoa() tx = Transaction( gas_limit=200_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=Spec.RESET_DELEGATION_ADDRESS, # Reset nonce=auth_signer.nonce, signer=auth_signer, ), AuthorizationTuple( address=reset_code_address, nonce=auth_signer.nonce + 1, signer=auth_signer, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=auth_signer.nonce + 2, code=Spec.delegation_designation(reset_code_address), storage={ 0: 1, }, ), }, ) @pytest.mark.parametrize( "entry_code", [ pytest.param(Om.OOG + Op.STOP, id="out_of_gas"), pytest.param(Op.INVALID, id="invalid_opcode"), pytest.param(Op.REVERT(0, 0), id="revert"), ], ) def test_delegation_clearing_failing_tx( state_test: StateTestFiller, pre: Alloc, entry_code: Bytecode, ) -> None: """ Test clearing the delegation of an account in a transaction that fails, OOGs or reverts. """ # noqa: D417 pre_set_delegation_code = Op.RETURN(0, 1) pre_set_delegation_address = pre.deploy_contract(pre_set_delegation_code) auth_signer = pre.fund_eoa(0, delegation=pre_set_delegation_address) entry_address = pre.deploy_contract(entry_code) authorization = AuthorizationTuple( address=Spec.RESET_DELEGATION_ADDRESS, # Reset nonce=auth_signer.nonce, signer=auth_signer, ) tx = Transaction( gas_limit=100_000, to=entry_address, value=0, authorization_list=[authorization], sender=pre.fund_eoa(), ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( nonce=auth_signer.nonce + 1, code=b"", storage={}, ), }, ) @pytest.mark.parametrize( "initcode_is_delegation_designation", [ pytest.param(True, id="initcode_deploys_delegation_designation"), pytest.param(False, id="initcode_is_delegation_designation"), ], ) def test_deploying_delegation_designation_contract( state_test: StateTestFiller, pre: Alloc, initcode_is_delegation_designation: bool, ) -> None: """ Test attempting to deploy a contract that has the same format as a delegation designation. """ sender = pre.fund_eoa() set_to_code = Op.RETURN(0, 1) set_to_address = pre.deploy_contract(set_to_code) initcode: Bytes | Bytecode if initcode_is_delegation_designation: initcode = Spec.delegation_designation(set_to_address) else: initcode = Initcode(deploy_code=Spec.delegation_designation(set_to_address)) tx = Transaction( sender=sender, to=None, gas_limit=100_000, data=initcode, ) state_test( env=Environment(), pre=pre, tx=tx, post={ sender: Account( nonce=1, ), tx.created_contract: Account.NONEXISTENT, }, ) @pytest.mark.parametrize( "initcode_is_delegation_designation", [ pytest.param(True, id="initcode_deploys_delegation_designation"), pytest.param(False, id="initcode_is_delegation_designation"), ], ) @pytest.mark.parametrize("create_opcode", [Op.CREATE, Op.CREATE2]) def test_creating_delegation_designation_contract( state_test: StateTestFiller, pre: Alloc, create_opcode: Op, initcode_is_delegation_designation: bool, ) -> None: """ Tx -> create -> pointer bytecode. Attempt to deploy contract with magic bytes result in no contract being created. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() # An attempt to deploy code starting with ef01 result in no # contract being created as it is prohibited create_init: Bytes | Bytecode if initcode_is_delegation_designation: create_init = Spec.delegation_designation(sender) else: create_init = Initcode(deploy_code=Spec.delegation_designation(sender)) contract_a = pre.deploy_contract( balance=100, code=Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.SSTORE( storage.store_next(0, "contract_a_create_result"), create_opcode(value=1, offset=0, size=Op.CALLDATASIZE()), ) + Op.STOP, ) tx = Transaction( to=contract_a, gas_limit=1_000_000, data=create_init, value=0, sender=sender, ) create_address = compute_create_address( address=contract_a, nonce=1, initcode=create_init, opcode=create_opcode ) post = { contract_a: Account(balance=100, storage=storage), create_address: Account.NONEXISTENT, } state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "signer_balance", [ pytest.param(0, id="empty_balance"), pytest.param( 1, id="non_empty_balance", marks=pytest.mark.execute(pytest.mark.skip(reason="excessive pre-fund txs")), ), ], ) @pytest.mark.slow() def test_many_delegations( state_test: StateTestFiller, fork: Fork, pre: Alloc, signer_balance: int, ) -> None: """ Perform as many delegations as possible in a transaction using the entire block gas limit. Every delegation comes from a different signer. The account of can be empty or not depending on the `signer_balance` parameter. The transaction is expected to succeed and the state after the transaction is expected to have the code of the entry contract set to 1. """ env = Environment() tx_gas_limit_cap = fork.transaction_gas_limit_cap() if tx_gas_limit_cap is not None: max_gas = tx_gas_limit_cap else: max_gas = env.gas_limit gas_for_delegations = max_gas - 21_000 - 20_000 - (3 * 2) delegation_count = gas_for_delegations // Spec.PER_EMPTY_ACCOUNT_COST success_slot = 1 entry_code = Op.SSTORE(success_slot, 1) + Op.STOP entry_address = pre.deploy_contract(entry_code) signers = [pre.fund_eoa(signer_balance) for _ in range(delegation_count)] tx = Transaction( gas_limit=max_gas, to=entry_address, value=0, authorization_list=[ AuthorizationTuple( address=Address(i + 1), nonce=0, signer=signer, ) for (i, signer) in enumerate(signers) ], sender=pre.fund_eoa(), ) post = { entry_address: Account( storage={success_slot: 1}, ), } | { signer: Account( code=Spec.delegation_designation(Address(i + 1)), ) for (i, signer) in enumerate(signers) } state_test( env=Environment(), pre=pre, tx=tx, post=post, ) @pytest.mark.exception_test def test_invalid_transaction_after_authorization( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test an invalid block due to a transaction reusing the same nonce as an authorization included in a prior transaction. """ auth_signer = pre.fund_eoa() recipient = pre.fund_eoa(amount=0) txs = [ Transaction( sender=pre.fund_eoa(), gas_limit=500_000, to=recipient, value=0, authorization_list=[ AuthorizationTuple( address=Address(1), nonce=0, signer=auth_signer, ), ], ), Transaction( sender=auth_signer, nonce=0, gas_limit=21_000, to=recipient, value=1, error=TransactionException.NONCE_MISMATCH_TOO_LOW, ), ] blockchain_test( pre=pre, blocks=[ Block( txs=txs, exception=TransactionException.NONCE_MISMATCH_TOO_LOW, ) ], post={ recipient: None, }, ) def test_authorization_reusing_nonce( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test an authorization reusing the same nonce as a prior transaction included in the same block. """ auth_signer = pre.fund_eoa() sender = pre.fund_eoa() recipient = pre.fund_eoa(amount=0) txs = [ Transaction( sender=auth_signer, nonce=0, gas_limit=21_000, to=recipient, value=1, ), Transaction( sender=sender, gas_limit=500_000, to=recipient, value=0, authorization_list=[ AuthorizationTuple( address=Address(1), nonce=0, signer=auth_signer, ), ], ), ] blockchain_test( pre=pre, blocks=[Block(txs=txs)], post={ recipient: Account(balance=1), auth_signer: Account(nonce=1, code=b""), sender: Account(nonce=1), }, ) @pytest.mark.parametrize( "set_code_type", list(AddressType), ids=lambda address_type: address_type.name, ) @pytest.mark.parametrize( "self_sponsored", [True, False], ) @pytest.mark.exception_test @pytest.mark.execute(pytest.mark.skip(reason="Requires contract-eoa address collision")) def test_set_code_from_account_with_non_delegating_code( state_test: StateTestFiller, pre: Alloc, set_code_type: AddressType, self_sponsored: bool, ) -> None: """ Test that a transaction is correctly rejected, if the sender account has a non-delegating code set. The auth transaction is sent from sender which has contract code (not delegating) But at the same time it has auth tuple that will point this sender account To be eoa, delegation, contract .. etc """ sender = pre.fund_eoa(nonce=1) random_address = pre.fund_eoa(0) set_code_to_address: Address match set_code_type: case AddressType.EMPTY_ACCOUNT: set_code_to_address = pre.fund_eoa(0) case AddressType.EOA: set_code_to_address = pre.fund_eoa(1) case AddressType.EOA_WITH_SET_CODE: set_code_account = pre.fund_eoa(0) set_code_to_address = pre.fund_eoa(1, delegation=set_code_account) case AddressType.CONTRACT: set_code_to_address = pre.deploy_contract(Op.STOP) case _: raise ValueError(f"Unsupported set code type: {set_code_type}") callee_address = pre.deploy_contract(Op.SSTORE(0, 1) + Op.STOP) # Set the sender account to have some code, that is specifically not a # delegation. sender_account = pre[sender] assert sender_account is not None sender_account.code = Bytes(Op.STOP) tx = Transaction( gas_limit=100_000, to=callee_address, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=1 if self_sponsored else 0, signer=sender if self_sponsored else random_address, ), ], sender=sender, error=TransactionException.SENDER_NOT_EOA, ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: ( Account.NONEXISTENT if set_code_type == AddressType.EMPTY_ACCOUNT else Account(storage={}) ), random_address: Account.NONEXISTENT, sender: Account(nonce=1), callee_address: Account(storage={0: 0}), }, ) @pytest.mark.parametrize( "max_fee_per_gas, max_priority_fee_per_gas, expected_error", [ pytest.param( 6, 0, TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS, marks=pytest.mark.execute(pytest.mark.skip(reason="requires specific base fee")), id="insufficient_max_fee_per_gas", ), pytest.param( 7, 8, TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS, id="priority_greater_than_max_fee_per_gas", ), ], ) @pytest.mark.exception_test @pytest.mark.slow() def test_set_code_transaction_fee_validations( state_test: StateTestFiller, pre: Alloc, max_fee_per_gas: int, max_priority_fee_per_gas: int, expected_error: TransactionException, ) -> None: """ Test that a transaction with an insufficient max fee per gas is rejected. """ set_to_code = pre.deploy_contract(Op.STOP) auth_signer = pre.fund_eoa(amount=0) tx = Transaction( sender=pre.fund_eoa(), gas_limit=500_000, to=auth_signer, value=0, max_fee_per_gas=max_fee_per_gas, max_priority_fee_per_gas=max_priority_fee_per_gas, authorization_list=[ AuthorizationTuple( address=set_to_code, nonce=0, signer=auth_signer, ), ], error=expected_error, ) state_test( env=Environment(), pre=pre, tx=tx, post={}, ) ================================================ FILE: tests/prague/eip7702_set_code_tx/test_set_code_txs_2.py ================================================ """ A state test for [EIP-7702 SetCodeTX](https://eips.ethereum.org/EIPS/eip-7702). """ from enum import Enum, IntEnum import pytest from ethereum_test_forks import Fork, GasCosts from ethereum_test_tools import ( AccessList, Account, Alloc, AuthorizationTuple, Block, BlockchainTestFiller, Bytes, Case, CodeGasMeasure, Conditional, Environment, Hash, StateTestFiller, Storage, Switch, Transaction, TransactionException, compute_create_address, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Macros from ethereum_test_vm import Opcodes as Op from .spec import Spec, ref_spec_7702 REFERENCE_SPEC_GIT_PATH = ref_spec_7702.git_path REFERENCE_SPEC_VERSION = ref_spec_7702.version @pytest.mark.valid_from("Prague") def test_pointer_contract_pointer_loop(state_test: StateTestFiller, pre: Alloc) -> None: """ Tx -> call -> pointer A -> contract A -> pointer B -> contract loop C. Call pointer that goes more level of depth to call a contract loop. Loop is created only if pointers are set with auth tuples. """ env = Environment() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() pointer_b = pre.fund_eoa() storage: Storage = Storage() contract_a = pre.deploy_contract( code=Op.SSTORE(storage.store_next(1, "contract_a_worked"), 0x1) + Op.CALL(gas=1_000_000, address=pointer_b) + Op.STOP, ) storage_loop: Storage = Storage() contract_worked = storage_loop.store_next(112, "contract_loop_worked") contract_loop = pre.deploy_contract( code=Op.SSTORE(contract_worked, Op.ADD(1, Op.SLOAD(0))) + Op.CALL(gas=1_000_000, address=pointer_a) + Op.STOP, ) tx = Transaction( to=pointer_a, gas_limit=1_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_a, nonce=0, signer=pointer_a, ), AuthorizationTuple( address=contract_loop, nonce=0, signer=pointer_b, ), ], ) post = { pointer_a: Account(storage=storage), pointer_b: Account(storage=storage_loop), } state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Prague") def test_pointer_to_pointer(state_test: StateTestFiller, pre: Alloc) -> None: """ Tx -> call -> pointer A -> pointer B. Direct call from pointer to pointer is OOG """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() pointer_b = pre.fund_eoa() contract_a = pre.deploy_contract( code=Op.SSTORE(storage.store_next(0, "contract_a_worked"), 0x1) + Op.CALL(gas=1_000_000, address=pointer_b) + Op.STOP, ) tx = Transaction( to=pointer_a, gas_limit=1_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=pointer_b, nonce=0, signer=pointer_a, ), AuthorizationTuple( address=contract_a, nonce=0, signer=pointer_b, ), ], ) post = {pointer_a: Account(storage=storage)} state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.valid_from("Prague") def test_pointer_normal(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """ Tx -> call -> pointer A -> contract. Other normal tx can interact with previously assigned pointers. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() slot_worked = storage.store_next(3, "contract_a_worked") contract_a = pre.deploy_contract( code=Op.SSTORE(slot_worked, Op.ADD(1, Op.SLOAD(slot_worked))) + Op.STOP, ) tx = Transaction( to=pointer_a, gas_limit=1_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_a, nonce=0, signer=pointer_a, ) ], ) # Other normal tx can interact with previously assigned pointers tx_2 = Transaction( to=pointer_a, gas_limit=1_000_000, data=b"", value=0, sender=sender, ) # Event from another block tx_3 = Transaction( to=pointer_a, gas_limit=1_000_000, data=b"", value=0, sender=sender, ) post = {pointer_a: Account(storage=storage)} blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=[tx, tx_2]), Block(txs=[tx_3])], ) @pytest.mark.valid_from("Prague") def test_pointer_measurements(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """ Check extcode* operations on pointer before and after pointer is set. Check context opcode results when called under pointer call. Opcodes have context of an original pointer account (balance, storage). """ env = Environment() sender = pre.fund_eoa() pointer = pre.fund_eoa(amount=100) storage_normal: Storage = Storage() storage_pointer: Storage = Storage() storage_pointer_code: Storage = Storage() # this storage will be applied # to pointer address pointer_code = pre.deploy_contract( balance=200, code=Op.SSTORE(storage_pointer_code.store_next(pointer, "address"), Op.ADDRESS()) + Op.SSTORE(storage_pointer_code.store_next(3, "callvalue"), Op.CALLVALUE()) + Op.CALL(gas=1000, address=0, value=3) + Op.SSTORE(storage_pointer_code.store_next(100, "selfbalance"), Op.SELFBALANCE()) + Op.SSTORE(storage_pointer_code.store_next(sender, "origin"), Op.ORIGIN()) + Op.SSTORE( storage_pointer_code.store_next( "0x1122334400000000000000000000000000000000000000000000000000000000", "calldataload", ), Op.CALLDATALOAD(0), ) + Op.SSTORE(storage_pointer_code.store_next(4, "calldatasize"), Op.CALLDATASIZE()) + Op.CALLDATACOPY(0, 0, 32) + Op.SSTORE( storage_pointer_code.store_next( "0x1122334400000000000000000000000000000000000000000000000000000000", "calldatacopy", ), Op.MLOAD(0), ) + Op.MSTORE(0, 0) + Op.SSTORE(storage_pointer_code.store_next(83, "codesize"), Op.CODESIZE()) + Op.CODECOPY(0, 0, 32) + Op.SSTORE( storage_pointer_code.store_next( "0x30600055346001556000600060006000600360006103e8f14760025532600355", "codecopy" ), Op.MLOAD(0), ) + Op.SSTORE(storage_pointer_code.store_next(0, "sload"), Op.SLOAD(15)), storage={15: 25}, ) contract_measurements = pre.deploy_contract( code=Op.EXTCODECOPY(pointer, 0, 0, 32) + Op.SSTORE( storage_normal.store_next(Bytes().keccak256(), "extcodehash"), Op.EXTCODEHASH(pointer), ) + Op.SSTORE(storage_normal.store_next(0, "extcodesize"), Op.EXTCODESIZE(pointer)) + Op.SSTORE(storage_normal.store_next(0, "extcodecopy"), Op.MLOAD(0)) + Op.SSTORE(storage_normal.store_next(100, "balance"), Op.BALANCE(pointer)) + Op.STOP, ) delegation_designation = Spec.delegation_designation(pointer_code) contract_measurements_pointer = pre.deploy_contract( code=Op.EXTCODECOPY(pointer, 0, 0, 32) + Op.SSTORE( storage_pointer.store_next(delegation_designation.keccak256(), "extcodehash"), Op.EXTCODEHASH(pointer), ) + Op.SSTORE( storage_pointer.store_next(len(delegation_designation), "extcodesize"), Op.EXTCODESIZE(pointer), ) + Op.SSTORE( storage_pointer.store_next( Hash(delegation_designation, right_padding=True), "extcodecopy" ), Op.MLOAD(0), ) + Op.SSTORE(storage_pointer.store_next(100, "balance"), Op.BALANCE(pointer)) + Op.STOP, ) tx = Transaction( to=contract_measurements, gas_limit=1_000_000, data=b"", value=0, sender=sender, ) tx_pointer = Transaction( to=contract_measurements_pointer, gas_limit=1_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=pointer_code, nonce=0, signer=pointer, ) ], ) tx_pointer_call = Transaction( to=pointer, gas_limit=1_000_000, data=bytes.fromhex("11223344"), value=3, sender=sender, ) post = { contract_measurements: Account(storage=storage_normal), contract_measurements_pointer: Account(storage=storage_pointer), pointer: Account(storage=storage_pointer_code), } blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=[tx]), Block(txs=[tx_pointer, tx_pointer_call])], ) @pytest.mark.with_all_precompiles @pytest.mark.valid_from("Prague") def test_call_to_precompile_in_pointer_context( state_test: StateTestFiller, pre: Alloc, precompile: int ) -> None: """ Tx -> call -> pointer A -> precompile contract. Make sure that gas consumed when calling precompiles in normal call are the same As from inside the pointer context call. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() contract_test = pre.deploy_contract( code=Op.MSTORE(1000, Op.GAS()) + Op.CALL(gas=100_000, address=precompile, args_size=Op.CALLDATASIZE()) + Op.MSTORE(0, Op.SUB(Op.MLOAD(1000), Op.GAS())) + Op.RETURN(0, 32) ) normal_call_gas = 2000 pointer_call_gas = 3000 contract_a = pre.deploy_contract( code=Op.CALL( gas=1_000_000, address=contract_test, args_size=Op.CALLDATASIZE(), ret_offset=1000, ret_size=32, ) + Op.MSTORE(normal_call_gas, Op.MLOAD(1000)) + Op.CALL( gas=1_000_000, address=pointer_a, args_size=Op.CALLDATASIZE(), ret_offset=1000, ret_size=32, ) + Op.MSTORE(pointer_call_gas, Op.MLOAD(1000)) + Op.SSTORE( storage.store_next(0, "call_gas_diff"), Op.SUB(Op.MLOAD(normal_call_gas), Op.MLOAD(pointer_call_gas)), ) + Op.SSTORE(storage.store_next(1, "tx_worked"), 1) ) tx = Transaction( to=contract_a, gas_limit=3_000_000, data=[0x11] * 256, value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_test, nonce=0, signer=pointer_a, ) ], ) post = {contract_a: Account(storage=storage)} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.with_all_precompiles @pytest.mark.valid_from("Prague") def test_pointer_to_precompile(state_test: StateTestFiller, pre: Alloc, precompile: int) -> None: """ Tx -> call -> pointer A -> precompile contract. In case a delegation designator points to a precompile address, retrieved code is considered empty and CALL, CALLCODE, STATICCALL, DELEGATECALL instructions targeting this account will execute empty code, i.e. succeed with no execution given enough gas. So call to a pointer that points to a precompile is like call to an empty account """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() contract_test_normal = pre.deploy_contract( code=Op.MSTORE(0, Op.CALL(gas=0, address=precompile, args_size=Op.CALLDATASIZE())) + Op.RETURN(0, 32) ) contract_test_pointer = pre.deploy_contract( code=Op.MSTORE(0, Op.CALL(gas=0, address=pointer_a, args_size=Op.CALLDATASIZE())) + Op.RETURN(0, 32) ) contract_a = pre.deploy_contract( code=Op.CALL( gas=1_000_000, address=contract_test_normal, args_size=Op.CALLDATASIZE(), ret_offset=1000, ret_size=32, ) # direct call to a precompile with 0 gas always return 0 + Op.SSTORE(storage.store_next(0, "direct_call_result"), Op.MLOAD(1000)) + Op.CALL( gas=1_000_000, address=contract_test_pointer, args_size=Op.CALLDATASIZE(), ret_offset=1000, ret_size=32, ) # pointer call to a precompile with 0 gas always return 1 as if calling # empty address + Op.SSTORE(storage.store_next(1, "pointer_call_result"), Op.MLOAD(1000)) ) tx = Transaction( to=contract_a, gas_limit=3_000_000, data=[0x11] * 256, value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=precompile, nonce=0, signer=pointer_a, ) ], ) post = {contract_a: Account(storage=storage)} state_test( env=env, pre=pre, post=post, tx=tx, ) class AccessListCall(Enum): """Add addresses to access list.""" NONE = 1 IN_NORMAL_TX_ONLY = 2 IN_POINTER_TX_ONLY = 3 IN_BOTH_TX = 4 class PointerDefinition(Enum): """Define pointer in transactions.""" SEPARATE = 1 IN_NORMAL_TX_ONLY = 2 IN_POINTER_TX_ONLY = 3 IN_BOTH_TX = 4 class AccessListTo(Enum): """Define access list to.""" POINTER_ADDRESS = 1 CONTRACT_ADDRESS = 2 @pytest.mark.parametrize( "access_list_rule", [ AccessListCall.NONE, AccessListCall.IN_BOTH_TX, AccessListCall.IN_NORMAL_TX_ONLY, AccessListCall.IN_POINTER_TX_ONLY, ], ) @pytest.mark.parametrize( "pointer_definition", [ PointerDefinition.SEPARATE, PointerDefinition.IN_BOTH_TX, PointerDefinition.IN_NORMAL_TX_ONLY, PointerDefinition.IN_POINTER_TX_ONLY, ], ) @pytest.mark.parametrize( "access_list_to", [AccessListTo.POINTER_ADDRESS, AccessListTo.CONTRACT_ADDRESS], ) @pytest.mark.valid_from("Prague") def test_gas_diff_pointer_vs_direct_call( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, access_list_rule: AccessListCall, pointer_definition: PointerDefinition, access_list_to: AccessListTo, ) -> None: """ Check the gas difference when calling the contract directly vs as a pointer Combine with AccessList and AuthTuple gas reductions scenarios. """ env = Environment() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() call_worked = 1 gas_costs: GasCosts = fork.gas_costs() opcodes_price = 37 direct_call_gas: int = ( # 20_000 + 2_600 + 2_100 + 37 = 24737 gas_costs.G_STORAGE_SET + ( # access account price # If storage and account is declared in access list then discount gas_costs.G_WARM_ACCOUNT_ACCESS + gas_costs.G_WARM_SLOAD if access_list_rule in [AccessListCall.IN_NORMAL_TX_ONLY, AccessListCall.IN_BOTH_TX] else gas_costs.G_COLD_ACCOUNT_ACCESS + gas_costs.G_COLD_SLOAD ) + opcodes_price ) pointer_call_gas: int = ( # sstore + addr + addr + sload + op # no access list, no pointer, all accesses are hot # 20_000 + 2_600 * 2 + 2_100 + 37 = 27_337 # # access list for pointer, pointer is set # additional 2_600 charged for access of contract # 20_000 + 100 + 2_600 + 100 + 37 = 22_837 # # no access list, pointer is set # pointer access is hot, sload and contract are hot # 20_000 + 100 + 2_600 + 2_100 + 37 = 24_837 # # access list for contract, pointer is set # contract call is hot, pointer call is call because pointer is set # only sload is hot because access list is for contract # 20_000 + 100 + 100 + 2100 + 37 = 22_337 gas_costs.G_STORAGE_SET # pointer address access + ( gas_costs.G_WARM_ACCOUNT_ACCESS if ( pointer_definition in [PointerDefinition.IN_BOTH_TX, PointerDefinition.IN_POINTER_TX_ONLY] or access_list_rule in [AccessListCall.IN_BOTH_TX, AccessListCall.IN_POINTER_TX_ONLY] and access_list_to == AccessListTo.POINTER_ADDRESS ) else gas_costs.G_COLD_ACCOUNT_ACCESS ) # storage access + ( gas_costs.G_WARM_SLOAD if ( access_list_rule in [AccessListCall.IN_BOTH_TX, AccessListCall.IN_POINTER_TX_ONLY] and access_list_to == AccessListTo.POINTER_ADDRESS ) else gas_costs.G_COLD_SLOAD ) # contract address access + ( gas_costs.G_WARM_ACCOUNT_ACCESS if ( access_list_rule in [AccessListCall.IN_BOTH_TX, AccessListCall.IN_POINTER_TX_ONLY] and access_list_to == AccessListTo.CONTRACT_ADDRESS ) else gas_costs.G_COLD_ACCOUNT_ACCESS ) + opcodes_price ) contract = pre.deploy_contract(code=Op.SSTORE(call_worked, Op.ADD(Op.SLOAD(call_worked), 1))) # Op.CALLDATASIZE() does not work with kwargs storage_normal: Storage = Storage() contract_test_normal = pre.deploy_contract( code=Op.GAS() + Op.POP(Op.CALL(gas=100_000, address=contract)) + Op.SSTORE( storage_normal.store_next(direct_call_gas, "normal_call_price"), Op.SUB(Op.SWAP1(), Op.GAS()), ) ) storage_pointer: Storage = Storage() contract_test_pointer = pre.deploy_contract( code=Op.GAS() + Op.POP(Op.CALL(gas=100_000, address=pointer_a)) + Op.SSTORE( storage_pointer.store_next(pointer_call_gas, "pointer_call_price"), Op.SUB(Op.SWAP1(), Op.GAS()), ) ) tx_0 = Transaction( to=1, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=( [ AuthorizationTuple( address=contract, nonce=0, signer=pointer_a, ) ] if pointer_definition == PointerDefinition.SEPARATE else None ), ) tx = Transaction( to=contract_test_normal, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=( [ AuthorizationTuple( address=contract, nonce=0, signer=pointer_a, ) ] if pointer_definition == PointerDefinition.IN_BOTH_TX or pointer_definition == PointerDefinition.IN_NORMAL_TX_ONLY else None ), access_list=( [ AccessList( address=contract, storage_keys=[call_worked], ) ] if access_list_rule == AccessListCall.IN_BOTH_TX or access_list_rule == AccessListCall.IN_NORMAL_TX_ONLY else None ), ) tx2 = Transaction( to=contract_test_pointer, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=( [ AuthorizationTuple( address=contract, nonce=0, signer=pointer_a, ) ] if pointer_definition == PointerDefinition.IN_BOTH_TX or pointer_definition == PointerDefinition.IN_POINTER_TX_ONLY else None ), access_list=( [ AccessList( address=( pointer_a if access_list_to == AccessListTo.POINTER_ADDRESS else contract ), storage_keys=[call_worked], ) ] if access_list_rule == AccessListCall.IN_BOTH_TX or access_list_rule == AccessListCall.IN_POINTER_TX_ONLY else None ), ) post = { contract: Account(storage={call_worked: 1}), pointer_a: Account(storage={call_worked: 1}), contract_test_normal: Account(storage=storage_normal), contract_test_pointer: Account(storage=storage_pointer), } blockchain_test( genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=[tx_0]), Block(txs=[tx]), Block(txs=[tx2])], ) @pytest.mark.valid_from("Prague") def test_pointer_call_followed_by_direct_call( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ If we first call by pointer then direct call, will the call/sload be hot The direct call will warm because pointer access marks it warm But the sload is still cold because storage marked hot from pointer's account in a pointer call. """ env = Environment() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() gas_costs: GasCosts = fork.gas_costs() call_worked = 1 opcodes_price: int = 37 pointer_call_gas = ( gas_costs.G_STORAGE_SET + gas_costs.G_WARM_ACCOUNT_ACCESS # pointer is warm + gas_costs.G_COLD_ACCOUNT_ACCESS # contract is cold + gas_costs.G_COLD_SLOAD # storage access under pointer call is cold + opcodes_price ) direct_call_gas = ( gas_costs.G_STORAGE_SET + gas_costs.G_WARM_ACCOUNT_ACCESS # since previous pointer call, # contract is now warm + gas_costs.G_COLD_SLOAD # but storage is cold, because it's # contract's direct + opcodes_price ) contract = pre.deploy_contract(code=Op.SSTORE(call_worked, Op.ADD(Op.SLOAD(call_worked), 1))) storage_test_gas: Storage = Storage() contract_test_gas = pre.deploy_contract( code=Op.GAS() + Op.POP(Op.CALL(gas=100_000, address=pointer_a)) + Op.SSTORE( storage_test_gas.store_next(pointer_call_gas, "pointer_call_price"), Op.SUB(Op.SWAP1(), Op.GAS()), ) + Op.GAS() + Op.POP(Op.CALL(gas=100_000, address=contract)) + Op.SSTORE( storage_test_gas.store_next(direct_call_gas, "direct_call_price"), Op.SUB(Op.SWAP1(), Op.GAS()), ) ) tx = Transaction( to=contract_test_gas, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=( [ AuthorizationTuple( address=contract, nonce=0, signer=pointer_a, ) ] ), ) post = { contract: Account(storage={call_worked: 1}), pointer_a: Account(storage={call_worked: 1}), contract_test_gas: Account(storage=storage_test_gas), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Prague") def test_pointer_to_static(state_test: StateTestFiller, pre: Alloc) -> None: """ Tx -> call -> pointer A -> static -> static violation. Verify that static context is active when called under pointer. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() contract_b = pre.deploy_contract(code=Op.SSTORE(0, 5)) contract_a = pre.deploy_contract( code=Op.SSTORE( storage.store_next(0, "static_call"), Op.STATICCALL( gas=1_000_000, address=contract_b, args_size=32, ret_offset=1000, ret_size=32 ), ) + Op.SSTORE(storage.store_next(1, "call_worked"), 1) ) tx = Transaction( to=pointer_a, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_a, nonce=0, signer=pointer_a, ) ], ) post = {pointer_a: Account(storage=storage), contract_b: Account(storage={0: 0})} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Prague") def test_static_to_pointer(state_test: StateTestFiller, pre: Alloc) -> None: """ Tx -> staticcall -> pointer A -> static violation. Verify that static context is active when make sub call to pointer. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() contract_b = pre.deploy_contract(code=Op.SSTORE(0, 5)) contract_a = pre.deploy_contract( code=Op.SSTORE( storage.store_next(0, "static_call"), Op.STATICCALL( gas=1_000_000, address=pointer_a, args_size=32, ret_offset=1000, ret_size=32 ), ) + Op.SSTORE(storage.store_next(1, "call_worked"), 1) ) tx = Transaction( to=contract_a, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_b, nonce=0, signer=pointer_a, ) ], ) post = {contract_a: Account(storage=storage), pointer_a: Account(storage={0: 0})} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("EOFv1") def test_pointer_to_eof(state_test: StateTestFiller, pre: Alloc) -> None: """ Tx -> call -> pointer A -> EOF. Pointer to eof contract works. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() contract_a = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(storage.store_next(5, "eof_call_result"), 5) + Op.STOP, ) ] ) ) tx = Transaction( to=pointer_a, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_a, nonce=0, signer=pointer_a, ) ], ) post = {pointer_a: Account(storage=storage)} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Prague") def test_pointer_to_static_reentry(state_test: StateTestFiller, pre: Alloc) -> None: """ Tx call -> pointer A -> static -> code -> pointer A -> static violation Verify that static context is active when called under pointer. """ env = Environment() storage: Storage = Storage() sender = pre.fund_eoa() pointer_a = pre.fund_eoa() contract_b = pre.deploy_contract( code=Op.MSTORE(0, Op.ADD(1, Op.CALLDATALOAD(0))) + Conditional( condition=Op.EQ(Op.MLOAD(0), 2), if_true=Op.SSTORE(5, 5), if_false=Op.JUMPDEST() ) + Op.CALL(gas=100_000, address=pointer_a, args_offset=0, args_size=Op.CALLDATASIZE()) ) contract_a = pre.deploy_contract( code=Op.MSTORE(0, Op.CALLDATALOAD(0)) + Conditional( condition=Op.EQ(Op.MLOAD(0), 0), if_true=Op.SSTORE( storage.store_next(1, "static_call"), Op.STATICCALL( gas=1_000_000, address=contract_b, args_size=Op.CALLDATASIZE(), ret_offset=1000, ret_size=32, ), ) + Op.SSTORE(storage.store_next(1, "call_worked"), 1), if_false=Op.CALL( gas=1_000_000, address=contract_b, args_size=Op.CALLDATASIZE(), ret_offset=1000, ret_size=32, ), ) ) tx = Transaction( to=pointer_a, gas_limit=3_000_000, data=[0x00] * 32, value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_a, nonce=0, signer=pointer_a, ) ], ) post = {pointer_a: Account(storage=storage)} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Prague") @pytest.mark.parametrize( "call_type", [Op.CALL, Op.DELEGATECALL, Op.CALLCODE], ) def test_contract_storage_to_pointer_with_storage( state_test: StateTestFiller, pre: Alloc, call_type: Op ) -> None: """ Tx call -> contract with storage -> pointer A with storage -> storage/tstorage modify. Check storage/tstorage modifications when interacting with pointers. """ env = Environment() sender = pre.fund_eoa() # Pointer B storage_pointer_b: Storage = Storage() storage_pointer_b.store_next( 0 if call_type in [Op.DELEGATECALL, Op.CALLCODE] else 1, "first_slot" ) storage_pointer_b.store_next(0, "second_slot") storage_pointer_b.store_next(0, "third_slot") pointer_b = pre.fund_eoa() # Contract B storage_b: Storage = Storage() first_slot = storage_b.store_next(10, "first_slot") second_slot = storage_b.store_next(20, "second_slot") third_slot = storage_b.store_next(30, "third_slot") fourth_slot = storage_b.store_next(0, "fourth_slot") contract_b = pre.deploy_contract( code=Conditional( condition=Op.EQ(Op.CALLDATALOAD(0), 1), if_true=Op.SSTORE(fourth_slot, Op.TLOAD(third_slot)), if_false=Op.SSTORE(first_slot, Op.ADD(Op.SLOAD(first_slot), 1)) + Op.TSTORE(third_slot, Op.ADD(Op.TLOAD(third_slot), 1)), ), storage={ # Original contract storage is untouched first_slot: 10, second_slot: 20, third_slot: 30, }, ) # Contract A storage_a: Storage = Storage() contract_a = pre.deploy_contract( code=Op.TSTORE(third_slot, 1) + call_type(address=pointer_b, gas=500_000) + Op.SSTORE(third_slot, Op.TLOAD(third_slot)) # Verify tstorage in contract after interacting with pointer, it must # be 0 + Op.MSTORE(0, 1) + Op.CALL(address=contract_b, gas=500_000, args_offset=0, args_size=32), storage={ storage_a.store_next( # caller storage is modified when calling pointer with delegate # or callcode 6 if call_type in [Op.DELEGATECALL, Op.CALLCODE] else 5, "first_slot", ): 5, storage_a.store_next(2, "second_slot"): 2, storage_a.store_next( # TSTORE is modified when calling pointer with delegate or # callcode 2 if call_type in [Op.DELEGATECALL, Op.CALLCODE] else 1, "third_slot", ): 3, }, ) tx = Transaction( to=contract_a, gas_limit=3_000_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_b, nonce=0, signer=pointer_b, ) ], ) post = { contract_a: Account(storage=storage_a), contract_b: Account(storage=storage_b), pointer_b: Account(storage=storage_pointer_b), } state_test( env=env, pre=pre, post=post, tx=tx, ) class ReentryAction(IntEnum): """Reentry logic action.""" CALL_PROXY = 0 MEASURE_VALUES = 1 MEASURE_VALUES_CONTRACT = 2 @pytest.mark.valid_from("Prague") def test_pointer_reentry(state_test: StateTestFiller, pre: Alloc) -> None: """ Check operations when reenter the pointer again. TODO: feel free to extend the code checks under given scenarios in switch case. """ env = Environment() arg_contract = 0 arg_action = 32 storage_b = Storage() storage_b.store_next(1, "contract_calls") storage_b.store_next(1, "tstore_slot") slot_reentry_address = storage_b.store_next(1, "address") storage_pointer_b = Storage() slot_calls = storage_pointer_b.store_next(2, "pointer_calls") slot_tstore = storage_pointer_b.store_next(2, "tstore_slot") sender = pre.fund_eoa() pointer_b = pre.fund_eoa(amount=1000) proxy = pre.deploy_contract( code=Op.MSTORE(arg_contract, Op.CALLDATALOAD(arg_contract)) + Op.MSTORE(arg_action, Op.CALLDATALOAD(arg_action)) + Op.CALL(gas=400_000, address=pointer_b, args_offset=0, args_size=32 * 2) ) contract_b = pre.deploy_contract( balance=100, code=Op.MSTORE(arg_contract, Op.CALLDATALOAD(arg_contract)) + Op.MSTORE(arg_action, Op.CALLDATALOAD(arg_action)) + Op.SSTORE(slot_calls, Op.ADD(Op.SLOAD(slot_calls), 1)) + Op.TSTORE(slot_tstore, Op.ADD(Op.TLOAD(slot_tstore), 1)) + Op.SSTORE(slot_tstore, Op.TLOAD(slot_tstore)) + Switch( cases=[ Case( condition=Op.EQ(Op.MLOAD(arg_action), ReentryAction.CALL_PROXY), action=Op.MSTORE(arg_action, ReentryAction.MEASURE_VALUES) + Op.CALL(gas=500_000, address=proxy, args_offset=0, args_size=32 * 2) + Op.STOP(), ), Case( # This code is executed under pointer -> proxy -> pointer # context condition=Op.EQ(Op.MLOAD(arg_action), ReentryAction.MEASURE_VALUES), action=Op.SSTORE(storage_pointer_b.store_next(sender, "origin"), Op.ORIGIN()) + Op.SSTORE(storage_pointer_b.store_next(pointer_b, "address"), Op.ADDRESS()) + Op.SSTORE( storage_pointer_b.store_next(1000, "selfbalance"), Op.SELFBALANCE() ) + Op.SSTORE(storage_pointer_b.store_next(proxy, "caller"), Op.CALLER()) # now call contract which is pointer dest directly + Op.MSTORE(arg_action, ReentryAction.MEASURE_VALUES_CONTRACT) + Op.CALL( gas=500_000, address=Op.MLOAD(arg_contract), args_offset=0, args_size=32 * 2, ), ), Case( # This code is executed under # pointer -> proxy -> pointer -> contract # so pointer calling the code of it's dest # after reentry to itself condition=Op.EQ(Op.MLOAD(arg_action), ReentryAction.MEASURE_VALUES_CONTRACT), action=Op.SSTORE(storage_b.store_next(sender, "origin"), Op.ORIGIN()) + Op.SSTORE(slot_reentry_address, Op.ADDRESS()) + Op.SSTORE(storage_b.store_next(100, "selfbalance"), Op.SELFBALANCE()) + Op.SSTORE(storage_b.store_next(pointer_b, "caller"), Op.CALLER()), ), ], default_action=None, ), ) storage_b[slot_reentry_address] = contract_b tx = Transaction( to=pointer_b, gas_limit=2_000_000, data=Hash(contract_b, left_padding=True) + Hash(ReentryAction.CALL_PROXY, left_padding=True), value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_b, nonce=0, signer=pointer_b, ) ], ) post = { contract_b: Account(storage=storage_b), pointer_b: Account(storage=storage_pointer_b), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Prague") def test_eoa_init_as_pointer(state_test: StateTestFiller, pre: Alloc) -> None: """ It was agreed before that senders don't have code. And there were issues with tests sending transactions from account's with code With EIP7702 it is again possible, let's check the test runners are ok. """ env = Environment() storage = Storage() contract = pre.deploy_contract(code=Op.SSTORE(storage.store_next(1, "code_worked"), 1)) sender = pre.fund_eoa(delegation=contract) tx = Transaction( to=sender, gas_limit=200_000, data=b"", value=0, sender=sender, ) post = {sender: Account(storage=storage)} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.valid_from("Prague") @pytest.mark.parametrize("call_return", [Op.RETURN, Op.REVERT, Macros.OOG]) def test_call_pointer_to_created_from_create_after_oog_call_again( state_test: StateTestFiller, pre: Alloc, call_return: Op ) -> None: """ Set pointer to account that we are about to create. Pointer is set to create address that is yet not in the state. During the call, address is created. pointer is called from init code to do nothing. Then after account is created it is called again to run created code Then revert / no revert. Call pointer again from the upper level to ensure it does not call reverted code. """ env = Environment() storage_pointer = Storage() pointer = pre.fund_eoa() sender = pre.fund_eoa() storage_contract = Storage() slot_create_res = storage_contract.store_next(1, "create_result") contract = pre.deploy_contract( code=Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.MSTORE(32, Op.CALLDATALOAD(32)) + Op.SSTORE(slot_create_res, Op.CREATE(0, 0, Op.CALLDATASIZE())) + Op.CALL(address=pointer) + call_return(0, 32) ) contract_main = pre.deploy_contract( code=Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.MSTORE(32, Op.CALLDATALOAD(32)) + Op.CALL(address=contract, args_size=Op.CALLDATASIZE()) + Op.CALL(address=pointer) ) contract_create = compute_create_address(address=contract, nonce=1) storage_contract[slot_create_res] = contract_create if call_return == Op.RETURN else 0 slot_pointer_calls = storage_pointer.store_next( 1 + 1 if call_return == Op.RETURN else 0, "pointer_calls" ) deploy_code = Op.SSTORE( slot_pointer_calls, Op.ADD(1, Op.SLOAD(slot_pointer_calls)), ) storage_create = Storage() tx = Transaction( to=contract_main, gas_limit=800_000, data=Op.SSTORE(storage_create.store_next(1, "create_init_code"), 1) + Op.SSTORE( storage_create.store_next(1, "call_pointer_from_init"), Op.CALL(address=pointer) ) + Op.MSTORE(0, deploy_code.hex()) + Op.RETURN(32 - len(deploy_code), len(deploy_code)), value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_create, nonce=0, signer=pointer, ) ], ) post = { contract_create: Account(storage=storage_create) if call_return == Op.RETURN else None, contract: Account(storage=storage_contract), pointer: Account(storage=storage_pointer), } state_test( env=env, pre=pre, post=post, tx=tx, ) # Pointer Revert Contract Revert # pointer set its storage, contract set its storage # pointer set its storage, (contract set its storage, revert) # (pointer set its storage, revert), contract set its storage # (pointer set its storage, revert), (contract set its storage revert) # contract set its storage, pointer set its storage # contract set its storage, (pointer set its storage, revert) # (contract set its storage, revert), pointer set its storage # (contract set its storage, revert), (pointer set its storage revert) # (pointer set its storage, contract set its storage), revert # (contract set its storage, pointer set its storage), revert class CallOrder(Enum): """Add addresses to access list.""" POINTER_CONTRACT = 1 CONTRACT_POINTER = 2 valid_combinations = [ (True, True, False), (True, False, False), (False, True, False), (False, False, False), (False, False, True), ] @pytest.mark.valid_from("Prague") @pytest.mark.parametrize("first_revert, second_revert, final_revert", valid_combinations) @pytest.mark.parametrize("call_order", [CallOrder.CONTRACT_POINTER, CallOrder.POINTER_CONTRACT]) def test_pointer_reverts( state_test: StateTestFiller, pre: Alloc, first_revert: bool, second_revert: bool, final_revert: bool, call_order: CallOrder, ) -> None: """Pointer do operations then revert.""" sender = pre.fund_eoa() pointer = pre.fund_eoa() contract_storage = Storage() contract_calls = ( 0 if (call_order == CallOrder.CONTRACT_POINTER and first_revert) or (call_order == CallOrder.POINTER_CONTRACT and second_revert) or final_revert else 1 ) slot_storage = contract_storage.store_next(contract_calls, "storage") slot_tstorage = contract_storage.store_next(contract_calls, "tstorage") pointer_storage = Storage() pointer_calls = ( 0 if (call_order == CallOrder.POINTER_CONTRACT and first_revert) or (call_order == CallOrder.CONTRACT_POINTER and second_revert) or final_revert else 1 ) pointer_storage.store_next(pointer_calls, "storage") pointer_storage.store_next(pointer_calls, "tstorage") contract = pre.deploy_contract( code=Op.SSTORE(slot_storage, Op.ADD(1, Op.SLOAD(slot_storage))) + Op.TSTORE(0, Op.ADD(1, Op.TLOAD(0))) + Op.SSTORE(slot_tstorage, Op.TLOAD(0)) + Conditional( condition=Op.EQ(Op.CALLDATALOAD(0), 1), if_true=Op.REVERT(0, 32), if_false=Op.RETURN(0, 32), ) ) contract_main = pre.deploy_contract( code=Op.MSTORE(0, 1 if first_revert else 0) + Op.CALL( address=pointer if call_order == CallOrder.POINTER_CONTRACT else contract, args_size=32 ) + Op.MSTORE(0, 1 if second_revert else 0) + Op.CALL( address=pointer if call_order == CallOrder.CONTRACT_POINTER else contract, args_size=32 ) + Conditional( condition=Op.EQ(1, int(final_revert)), if_true=Op.REVERT(0, 32), if_false=Op.RETURN(0, 32), ) ) tx = Transaction( to=contract_main, gas_limit=800_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract, nonce=0, signer=pointer, ) ], ) post = {pointer: Account(storage=pointer_storage), contract: Account(storage=contract_storage)} state_test( env=Environment(), pre=pre, post=post, tx=tx, ) class DelegationTo(Enum): """Add addresses to access list.""" CONTRACT_A = 1 CONTRACT_B = 2 RESET = 3 @pytest.mark.xdist_group(name="bigmem") @pytest.mark.valid_from("Prague") @pytest.mark.parametrize( "first_delegation", [DelegationTo.CONTRACT_A, DelegationTo.CONTRACT_B, DelegationTo.RESET] ) @pytest.mark.parametrize( "second_delegation", [DelegationTo.CONTRACT_A, DelegationTo.CONTRACT_B, DelegationTo.RESET] ) def test_double_auth( state_test: StateTestFiller, pre: Alloc, first_delegation: DelegationTo, second_delegation: DelegationTo, ) -> None: """Only the last auth works, but first auth still charges the gas.""" env = Environment() sender = pre.fund_eoa() pointer = pre.fund_eoa() storage = Storage() contract_a = pre.deploy_contract( code=Op.SSTORE( storage.store_next( 1 if second_delegation == DelegationTo.CONTRACT_A else 0, "code_a_worked" ), 1, ) ) contract_b = pre.deploy_contract( code=Op.SSTORE( storage.store_next( 2 if second_delegation == DelegationTo.CONTRACT_B else 0, "code_b_worked" ), 2, ) ) main_storage = Storage() contract_main = pre.deploy_contract(code=Op.CALL(address=pointer)) tx = Transaction( to=contract_main, gas_limit=200_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=( contract_a if first_delegation == DelegationTo.CONTRACT_A else contract_b if first_delegation == DelegationTo.CONTRACT_B else 0 ), nonce=0, signer=pointer, ), AuthorizationTuple( address=( contract_a if second_delegation == DelegationTo.CONTRACT_A else contract_b if second_delegation == DelegationTo.CONTRACT_B else 0 ), nonce=1, signer=pointer, ), ], ) post = { pointer: ( Account( storage=storage, code=( Spec.delegation_designation(contract_a) if second_delegation == DelegationTo.CONTRACT_A else ( Spec.delegation_designation(contract_b) if second_delegation == DelegationTo.CONTRACT_B else bytes() ) ), ) ), contract_main: Account(storage=main_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.xdist_group(name="bigmem") @pytest.mark.valid_from("Prague") def test_pointer_resets_an_empty_code_account_with_storage( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ So in Block1 we create a sender with empty code, but non empty storage using pointers. In Block2 we create account that perform suicide, then we check that when calling a pointer, that points to newly created account and runs suicide, is not deleted as well as its storage. This one is a little messy. """ sender = pre.fund_eoa() pointer = pre.fund_eoa(amount=0) pointer_storage = Storage() sender_storage = Storage() sender_storage.store_next(1, "slot1") sender_storage.store_next(2, "slot2") contract_1 = pre.deploy_contract( code=Op.SSTORE(pointer_storage.store_next(1, "slot1"), 1) + Op.SSTORE(pointer_storage.store_next(2, "slot2"), 2) ) tx_set_pointer_storage = Transaction( to=pointer, gas_limit=200_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_1, nonce=0, signer=pointer, ), ], ) tx_set_sender_storage = Transaction( to=sender, gas_limit=200_000, data=b"", value=0, sender=sender, authorization_list=[ AuthorizationTuple( address=contract_1, nonce=2, signer=sender, ), ], ) tx_reset_code = Transaction( to=pointer, gas_limit=200_000, data=b"", value=0, nonce=3, sender=sender, authorization_list=[ AuthorizationTuple( address=0, nonce=1, signer=pointer, ), AuthorizationTuple( address=0, nonce=4, signer=sender, ), ], ) contract_2 = pre.deploy_contract(code=Op.SSTORE(1, 1)) tx_send_from_empty_code_with_storage = Transaction( to=contract_2, gas_limit=200_000, data=b"", value=0, nonce=5, sender=sender, ) # Block 2 # Sender with storage and pointer code calling selfdestruct on itself # # But it points to a newly created account, check that pointer # storage is not deleted suicide_dest = pre.fund_eoa(amount=0) deploy_code = Op.SSTORE(5, 5) + Op.SELFDESTRUCT(suicide_dest) sender_storage[5] = 5 another_pointer = pre.fund_eoa() contract_create = pre.deploy_contract( code=Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.MSTORE(32, Op.CALLDATALOAD(32)) + Op.SSTORE(1, Op.CREATE(0, 0, Op.CALLDATASIZE())) + Op.CALL(address=sender) # run suicide from pointer + Op.CALL(address=Op.SLOAD(1)) # run suicide directly + Op.CALL(address=another_pointer) # run suicide from pointer that is # not sender ) newly_created_address = compute_create_address(address=contract_create, nonce=1) tx_create_suicide_from_pointer = Transaction( to=contract_create, gas_limit=800_000, data=Op.SSTORE(6, 6) + Op.MSTORE(0, deploy_code.hex()) + Op.RETURN(32 - len(deploy_code), len(deploy_code)), value=1000, nonce=6, sender=sender, authorization_list=[ AuthorizationTuple( address=newly_created_address, nonce=7, signer=sender, ), AuthorizationTuple( address=newly_created_address, nonce=0, signer=another_pointer, ), ], ) post = { pointer: Account(nonce=2, balance=0, storage=pointer_storage, code=bytes()), sender: Account( storage=sender_storage, code=Spec.delegation_designation(newly_created_address) ), newly_created_address: Account.NONEXISTENT, contract_create: Account(storage={1: newly_created_address}), another_pointer: Account(balance=0, storage={5: 5}), } blockchain_test( genesis_environment=Environment(), pre=pre, post=post, blocks=[ # post = { # pointer: Account(nonce=2, # balance=0, # storage=pointer_storage, # code=bytes() # ), # sender: Account(storage=pointer_storage, code=bytes()) # } Block( txs=[ tx_set_pointer_storage, tx_set_sender_storage, tx_reset_code, tx_send_from_empty_code_with_storage, ] ), Block(txs=[tx_create_suicide_from_pointer]), ], ) @pytest.mark.parametrize( "tx_value", [0, 1], ) @pytest.mark.exception_test @pytest.mark.valid_at_transition_to("Prague") def test_set_code_type_tx_pre_fork( state_test: StateTestFiller, pre: Alloc, tx_value: int, ) -> None: """ Reject blocks with set code type transactions before the Prague fork. This test was based on: tests/prague/eip7702_set_code_tx/test_set_code_txs.py::test_self_sponsored_set_ code """ storage = Storage() sender = pre.fund_eoa() set_code = ( Op.SSTORE(storage.store_next(sender), Op.ORIGIN) + Op.SSTORE(storage.store_next(sender), Op.CALLER) + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE) + Op.STOP ) set_code_to_address = pre.deploy_contract( set_code, ) tx = Transaction( gas_limit=10_000_000, to=sender, value=tx_value, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=1, signer=sender, ), ], sender=sender, error=TransactionException.TYPE_4_TX_PRE_FORK, ) state_test( env=Environment(), pre=pre, tx=tx, post={ set_code_to_address: Account(storage=dict.fromkeys(storage, 0)), sender: Account( nonce=0, code="", storage={}, ), }, ) @pytest.mark.valid_from("Prague") @pytest.mark.xdist_group(name="bigmem") def test_delegation_replacement_call_previous_contract( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Test setting the code of an EOA that already has delegation, calling the previous delegated contract. Previous contract shouldn't be warm when doing the CALL. """ pre_set_delegation_code = Op.STOP pre_set_delegation_address = pre.deploy_contract(pre_set_delegation_code) auth_signer = pre.fund_eoa(delegation=pre_set_delegation_address) sender = pre.fund_eoa() gsc = fork.gas_costs() overhead_cost = gsc.G_VERY_LOW * len(Op.CALL.kwargs) set_code = CodeGasMeasure( code=Op.CALL(gas=0, address=pre_set_delegation_address), overhead_cost=overhead_cost, extra_stack_items=1, ) set_code_to_address = pre.deploy_contract( set_code, ) tx = Transaction( gas_limit=500_000, to=auth_signer, value=0, authorization_list=[ AuthorizationTuple( address=set_code_to_address, nonce=auth_signer.nonce, signer=auth_signer, ), ], sender=sender, ) state_test( env=Environment(), pre=pre, tx=tx, post={ auth_signer: Account( storage={0: gsc.G_COLD_ACCOUNT_ACCESS}, ) }, ) ================================================ FILE: tests/shanghai/__init__.py ================================================ """Test cases for EVM functionality introduced in Shanghai.""" ================================================ FILE: tests/shanghai/eip3651_warm_coinbase/__init__.py ================================================ """ Tests for [EIP-3651: Warm COINBASE](https://eips.ethereum.org/EIPS/eip-3651). """ ================================================ FILE: tests/shanghai/eip3651_warm_coinbase/conftest.py ================================================ """Fixtures for the EIP-3651 warm coinbase tests.""" import pytest from ethereum_test_tools import Alloc, Environment @pytest.fixture def env() -> Environment: """Environment fixture.""" return Environment() @pytest.fixture def post() -> Alloc: """Post state fixture.""" return Alloc() ================================================ FILE: tests/shanghai/eip3651_warm_coinbase/spec.py ================================================ """Defines EIP-3651 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_3651 = ReferenceSpec("EIPS/eip-3651.md", "d94c694c6f12291bb6626669c3e8587eef3adff1") ================================================ FILE: tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py ================================================ """ Tests [EIP-3651: Warm COINBASE](https://eips.ethereum.org/EIPS/eip-3651). Tests ported from: [ethereum/tests/pull/1082](https://github.com/ethereum/tests/pull/1082). """ import pytest from ethereum_test_forks import Fork, Shanghai from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, CodeGasMeasure, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_3651 REFERENCE_SPEC_GIT_PATH = ref_spec_3651.git_path REFERENCE_SPEC_VERSION = ref_spec_3651.version # Amount of gas required to make a call to a warm account. # Calling a cold account with this amount of gas results in exception. GAS_REQUIRED_CALL_WARM_ACCOUNT = 100 @pytest.mark.valid_from("Shanghai") @pytest.mark.parametrize( "use_sufficient_gas", [True, False], ids=["sufficient_gas", "insufficient_gas"], ) @pytest.mark.parametrize( "opcode,contract_under_test_code,call_gas_exact", [ ( "call", Op.POP(Op.CALL(0, Op.COINBASE, 0, 0, 0, 0, 0)), # Extra gas: COINBASE + 4*PUSH1 + 2*DUP1 + POP GAS_REQUIRED_CALL_WARM_ACCOUNT + 22, ), ( "callcode", Op.POP(Op.CALLCODE(0, Op.COINBASE, 0, 0, 0, 0, 0)), # Extra gas: COINBASE + 4*PUSH1 + 2*DUP1 + POP GAS_REQUIRED_CALL_WARM_ACCOUNT + 22, ), ( "delegatecall", Op.POP(Op.DELEGATECALL(0, Op.COINBASE, 0, 0, 0, 0)), # Extra: COINBASE + 3*PUSH1 + 2*DUP1 + POP GAS_REQUIRED_CALL_WARM_ACCOUNT + 19, ), ( "staticcall", Op.POP(Op.STATICCALL(0, Op.COINBASE, 0, 0, 0, 0)), # Extra: COINBASE + 3*PUSH1 + 2*DUP1 + POP GAS_REQUIRED_CALL_WARM_ACCOUNT + 19, ), ], ids=["CALL", "CALLCODE", "DELEGATECALL", "STATICCALL"], ) def test_warm_coinbase_call_out_of_gas( state_test: StateTestFiller, env: Environment, pre: Alloc, post: Alloc, sender: Address, fork: Fork, opcode: str, contract_under_test_code: Bytecode, call_gas_exact: int, use_sufficient_gas: bool, ) -> None: """ Test that the coinbase is warm by accessing the COINBASE with each of the following opcodes. - CALL - CALLCODE - DELEGATECALL - STATICCALL """ contract_under_test_address = pre.deploy_contract(contract_under_test_code) if not use_sufficient_gas: call_gas_exact -= 1 caller_code = Op.SSTORE( 0, Op.CALL(call_gas_exact, contract_under_test_address, 0, 0, 0, 0, 0), ) caller_address = pre.deploy_contract(caller_code) tx = Transaction( to=caller_address, gas_limit=100_000, sender=sender, ) if use_sufficient_gas and fork >= Shanghai: post[caller_address] = Account( storage={ # On shanghai and beyond, calls with only 100 gas to # coinbase will succeed. 0: 1, } ) else: post[caller_address] = Account( storage={ # Before shanghai, calls with only 100 gas to # coinbase will fail. 0: 0, } ) state_test( env=env, pre=pre, post=post, tx=tx, tag="opcode_" + opcode, ) # List of opcodes that are affected by EIP-3651 gas_measured_opcodes = [ ( "EXTCODESIZE", CodeGasMeasure( code=Op.EXTCODESIZE(Op.COINBASE), overhead_cost=2, extra_stack_items=1, ), ), ( "EXTCODECOPY", CodeGasMeasure( code=Op.EXTCODECOPY(Op.COINBASE, 0, 0, 0), overhead_cost=2 + 3 + 3 + 3, ), ), ( "EXTCODEHASH", CodeGasMeasure( code=Op.EXTCODEHASH(Op.COINBASE), overhead_cost=2, extra_stack_items=1, ), ), ( "BALANCE", CodeGasMeasure( code=Op.BALANCE(Op.COINBASE), overhead_cost=2, extra_stack_items=1, ), ), ( "CALL", CodeGasMeasure( code=Op.CALL(0xFF, Op.COINBASE, 0, 0, 0, 0, 0), overhead_cost=3 + 2 + 3 + 3 + 3 + 3 + 3, extra_stack_items=1, ), ), ( "CALLCODE", CodeGasMeasure( code=Op.CALLCODE(0xFF, Op.COINBASE, 0, 0, 0, 0, 0), overhead_cost=3 + 2 + 3 + 3 + 3 + 3 + 3, extra_stack_items=1, ), ), ( "DELEGATECALL", CodeGasMeasure( code=Op.DELEGATECALL(0xFF, Op.COINBASE, 0, 0, 0, 0), overhead_cost=3 + 2 + 3 + 3 + 3 + 3, extra_stack_items=1, ), ), ( "STATICCALL", CodeGasMeasure( code=Op.STATICCALL(0xFF, Op.COINBASE, 0, 0, 0, 0), overhead_cost=3 + 2 + 3 + 3 + 3 + 3, extra_stack_items=1, ), ), ] @pytest.mark.valid_from("Berlin") # these tests fill for fork >= Berlin @pytest.mark.parametrize( "opcode,code_gas_measure", gas_measured_opcodes, ids=[i[0] for i in gas_measured_opcodes], ) def test_warm_coinbase_gas_usage( state_test: StateTestFiller, env: Environment, pre: Alloc, sender: Address, fork: Fork, opcode: str, code_gas_measure: Bytecode, ) -> None: """ Test the gas usage of opcodes affected by assuming a warm coinbase. - EXTCODESIZE - EXTCODECOPY - EXTCODEHASH - BALANCE - CALL - CALLCODE - DELEGATECALL - STATICCALL """ measure_address = pre.deploy_contract( code=code_gas_measure, ) if fork >= Shanghai: expected_gas = GAS_REQUIRED_CALL_WARM_ACCOUNT # Warm account access cost after EIP-3651 else: expected_gas = 2600 # Cold account access cost before EIP-3651 tx = Transaction( to=measure_address, gas_limit=100_000, sender=sender, ) post = { measure_address: Account( storage={ 0x00: expected_gas, } ) } state_test( env=env, pre=pre, post=post, tx=tx, tag="opcode_" + opcode.lower(), ) ================================================ FILE: tests/shanghai/eip3855_push0/__init__.py ================================================ """ Tests [EIP-3855: PUSH0 Instruction](https://eips.ethereum.org/EIPS/eip-3855). """ ================================================ FILE: tests/shanghai/eip3855_push0/conftest.py ================================================ """Fixtures for the EIP-3855 PUSH0 tests.""" import pytest from ethereum_test_tools import Alloc, Environment @pytest.fixture def env() -> Environment: """Environment fixture.""" return Environment() @pytest.fixture def post() -> Alloc: """Post state fixture.""" return Alloc() ================================================ FILE: tests/shanghai/eip3855_push0/spec.py ================================================ """Defines EIP-3855 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_3855 = ReferenceSpec("EIPS/eip-3855.md", "6f85bd73336de4aacfad7ac3bb3a7e1ba2d68f51") ================================================ FILE: tests/shanghai/eip3855_push0/test_push0.py ================================================ """ Tests [EIP-3855: PUSH0 Instruction](https://eips.ethereum.org/EIPS/eip-3855). Tests ported from: [ethereum/tests/pull/1033](https://github.com/ethereum/tests/pull/1033). """ import pytest from ethereum_test_tools import ( EOA, Account, Address, Alloc, Bytecode, CodeGasMeasure, Environment, StateTestFiller, Transaction, ) from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_3855 REFERENCE_SPEC_GIT_PATH = ref_spec_3855.git_path REFERENCE_SPEC_VERSION = ref_spec_3855.version pytestmark = pytest.mark.valid_from("Shanghai") @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize( "contract_code,expected_storage", [ # Use PUSH0 to set a key for SSTORE. pytest.param( Op.SSTORE(Op.PUSH0, 1), Account(storage={0x00: 0x01}), id="key_sstore", ), # Fill stack with PUSH0, then OR all values and save using SSTORE. pytest.param( (Op.PUSH0 * 1024) + (Op.OR * 1023) + Op.SSTORE(Op.SWAP1, 1), Account(storage={0x00: 0x01}), id="fill_stack", ), # Stack overflow by using PUSH0 1025 times. pytest.param( Op.SSTORE(Op.PUSH0, 1) + (Op.PUSH0 * 1025), Account(storage={0x00: 0x00}), id="stack_overflow", ), # Update an already existing storage value. pytest.param( Op.SSTORE(Op.PUSH0, 2) + Op.SSTORE(1, Op.PUSH0), Account(storage={0x00: 0x02, 0x01: 0x00}), id="storage_overwrite", ), # Jump to a JUMPDEST next to a PUSH0, must succeed. pytest.param( Op.PUSH1(4) + Op.JUMP + Op.PUSH0 + Op.JUMPDEST + Op.SSTORE(Op.PUSH0, 1) + Op.STOP, Account(storage={0x00: 0x01}), id="before_jumpdest", ), # Test PUSH0 gas cost. pytest.param( CodeGasMeasure( code=Op.PUSH0, extra_stack_items=1, ), Account(storage={0x00: 0x02}), id="gas_cost", ), ], ) def test_push0_contracts( state_test: StateTestFiller, env: Environment, pre: Alloc, post: Alloc, sender: EOA, contract_code: Bytecode, expected_storage: Account, ) -> None: """Tests PUSH0 within various deployed contracts.""" push0_contract = pre.deploy_contract(contract_code) tx = Transaction(to=push0_contract, gas_limit=100_000, sender=sender) post[push0_contract] = expected_storage state_test(env=env, pre=pre, post=post, tx=tx) class TestPush0CallContext: """ Test the PUSH0 operation in various contract call contexts. Test PUSH0 in the following contract call contexts: - CALL, - CALLCODE, - DELEGATECALL, - STATICCALL. """ @pytest.fixture def push0_contract_callee(self, pre: Alloc) -> Address: """ Deploys a PUSH0 contract callee to the pre alloc returning its address. """ push0_contract = pre.deploy_contract(Op.MSTORE8(Op.PUSH0, 0xFF) + Op.RETURN(Op.PUSH0, 1)) return push0_contract @pytest.fixture def push0_contract_caller( self, pre: Alloc, call_opcode: Op, push0_contract_callee: Address ) -> Address: """ Deploy the contract that calls the callee PUSH0 contract into `pre`. This fixture returns its address. """ call_code = ( Op.SSTORE(0, call_opcode(gas=100_000, address=push0_contract_callee)) + Op.SSTORE(0, 1) + Op.RETURNDATACOPY(0x1F, 0, 1) + Op.SSTORE(1, Op.MLOAD(0)) ) return pre.deploy_contract(call_code) @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize( "call_opcode", [ Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, ], ids=["call", "callcode", "delegatecall", "staticcall"], ) def test_push0_contract_during_call_contexts( self, state_test: StateTestFiller, env: Environment, pre: Alloc, post: Alloc, sender: EOA, push0_contract_caller: Address, ) -> None: """Test PUSH0 during various call contexts.""" tx = Transaction(to=push0_contract_caller, gas_limit=100_000, sender=sender) post[push0_contract_caller] = Account(storage={0x00: 0x01, 0x01: 0xFF}) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/shanghai/eip3860_initcode/__init__.py ================================================ """ Test [EIP-3860: Limit and meter initcode](https://eips.ethereum.org/EIPS/eip-3860). """ ================================================ FILE: tests/shanghai/eip3860_initcode/conftest.py ================================================ """Fixtures for the EIP-3860 initcode tests.""" import pytest from ethereum_test_tools import Alloc, Environment @pytest.fixture def env() -> Environment: """Environment fixture.""" return Environment() @pytest.fixture def post() -> Alloc: """Post state fixture.""" return Alloc() ================================================ FILE: tests/shanghai/eip3860_initcode/helpers.py ================================================ """Helpers for the EIP-3860 initcode tests.""" from ethereum_test_tools import Initcode from ethereum_test_vm import Opcodes as Op INITCODE_RESULTING_DEPLOYED_CODE = Op.STOP def get_initcode_name(val: Initcode) -> str: """Return Initcode object's name to generate test ids.""" return val._name_ def get_create_id(opcode: Op) -> str: """Return the opcode name for the test id.""" return opcode._name_.lower() ================================================ FILE: tests/shanghai/eip3860_initcode/spec.py ================================================ """Defines EIP-3860 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_3860 = ReferenceSpec("EIPS/eip-3860.md", "9ee005834d488e381455cf86a56c741a2e854a17") @dataclass(frozen=True) class Spec: """ Define parameters from the EIP-3860 specifications. These are the parameters defined at https://eips.ethereum.org/EIPS/eip-3860#parameters. """ MAX_INITCODE_SIZE = 49152 INITCODE_WORD_COST = 2 ================================================ FILE: tests/shanghai/eip3860_initcode/test_initcode.py ================================================ """ Test [EIP-3860: Limit and meter initcode](https://eips.ethereum.org/EIPS/eip-3860). Tests ported from: - [ethereum/tests/pull/990](https://github.com/ethereum/tests/pull/990) - [ethereum/tests/pull/1012](https://github.com/ethereum/tests/pull/990) """ from typing import List import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( EOA, AccessList, Account, Address, Alloc, Bytecode, Environment, Initcode, StateTestFiller, Transaction, TransactionException, TransactionReceipt, ceiling_division, compute_create_address, ) from ethereum_test_vm import Opcodes as Op from .helpers import INITCODE_RESULTING_DEPLOYED_CODE, get_create_id, get_initcode_name from .spec import Spec, ref_spec_3860 REFERENCE_SPEC_GIT_PATH = ref_spec_3860.git_path REFERENCE_SPEC_VERSION = ref_spec_3860.version pytestmark = pytest.mark.valid_from("Shanghai") """Initcode templates used throughout the tests""" INITCODE_ONES_MAX_LIMIT = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=Spec.MAX_INITCODE_SIZE, padding_byte=0x01, name="max_size_ones", ) INITCODE_ZEROS_MAX_LIMIT = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=Spec.MAX_INITCODE_SIZE, padding_byte=0x00, name="max_size_zeros", ) INITCODE_ONES_OVER_LIMIT = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=Spec.MAX_INITCODE_SIZE + 1, padding_byte=0x01, name="over_limit_ones", ) INITCODE_ZEROS_OVER_LIMIT = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=Spec.MAX_INITCODE_SIZE + 1, padding_byte=0x00, name="over_limit_zeros", ) INITCODE_ZEROS_32_BYTES = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=32, padding_byte=0x00, name="32_bytes", ) INITCODE_ZEROS_33_BYTES = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=33, padding_byte=0x00, name="33_bytes", ) INITCODE_ZEROS_49120_BYTES = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=49120, padding_byte=0x00, name="49120_bytes", ) INITCODE_ZEROS_49121_BYTES = Initcode( deploy_code=INITCODE_RESULTING_DEPLOYED_CODE, initcode_length=49121, padding_byte=0x00, name="49121_bytes", ) EMPTY_INITCODE = Initcode( name="empty", ) EMPTY_INITCODE._bytes_ = bytes() EMPTY_INITCODE.deployment_gas = 0 EMPTY_INITCODE.execution_gas = 0 SINGLE_BYTE_INITCODE = Initcode( name="single_byte", ) SINGLE_BYTE_INITCODE._bytes_ = bytes(Op.STOP) SINGLE_BYTE_INITCODE.deployment_gas = 0 SINGLE_BYTE_INITCODE.execution_gas = 0 """Test cases using a contract creating transaction""" @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize( "initcode", [ INITCODE_ZEROS_MAX_LIMIT, INITCODE_ONES_MAX_LIMIT, pytest.param(INITCODE_ZEROS_OVER_LIMIT, marks=pytest.mark.exception_test), pytest.param(INITCODE_ONES_OVER_LIMIT, marks=pytest.mark.exception_test), ], ids=get_initcode_name, ) def test_contract_creating_tx( state_test: StateTestFiller, env: Environment, pre: Alloc, post: Alloc, sender: EOA, initcode: Initcode, ) -> None: """ Test creating a contract with initcode that is on/over the allowed limit. """ create_contract_address = compute_create_address( address=sender, nonce=0, ) tx = Transaction( nonce=0, to=None, data=initcode, gas_limit=10000000, gas_price=10, sender=sender, ) if len(initcode) > Spec.MAX_INITCODE_SIZE: # Initcode is above the max size, tx inclusion in the block makes # it invalid. post[create_contract_address] = Account.NONEXISTENT tx.error = TransactionException.INITCODE_SIZE_EXCEEDED else: # Initcode is at or below the max size, tx inclusion in the block # is ok and the contract is successfully created. post[create_contract_address] = Account(code=Op.STOP) state_test( env=env, pre=pre, post=post, tx=tx, ) def valid_gas_test_case(initcode: Initcode, gas_test_case: str) -> bool: """Filter out invalid gas test case/initcode combinations.""" if gas_test_case == "too_little_execution_gas": return (initcode.deployment_gas + initcode.execution_gas) > 0 return True @pytest.mark.parametrize( "initcode,gas_test_case", [ pytest.param( i, g, marks=([pytest.mark.exception_test] if g == "too_little_intrinsic_gas" else []), ) for i in [ INITCODE_ZEROS_MAX_LIMIT, INITCODE_ONES_MAX_LIMIT, EMPTY_INITCODE, SINGLE_BYTE_INITCODE, INITCODE_ZEROS_32_BYTES, INITCODE_ZEROS_33_BYTES, INITCODE_ZEROS_49120_BYTES, INITCODE_ZEROS_49121_BYTES, ] for g in [ "too_little_intrinsic_gas", "exact_intrinsic_gas", "too_little_execution_gas", "exact_execution_gas", ] if valid_gas_test_case(i, g) ], ids=lambda x: f"{get_initcode_name(x[0])}-{x[1]}" if isinstance(x, tuple) else x, ) class TestContractCreationGasUsage: """ Test the gas cost behavior of a contract creating transaction. The following scenarios are tested: 1. Test with exact intrinsic gas minus one, contract create fails and tx is invalid. 2. Test with exact intrinsic gas, contract create fails, but tx is valid. 3. Test with exact execution gas minus one, contract create fails, but tx is valid. 4. Test with exact execution gas, contract create succeeds. Initcode must be within a valid EIP-3860 length. """ @pytest.fixture def tx_access_list(self) -> List[AccessList]: """ Return an access list to raise the intrinsic gas cost. Upon EIP-7623 activation, we need to use an access list to raise the intrinsic gas cost to be above the floor data cost. """ return [AccessList(address=Address(i), storage_keys=[]) for i in range(1, 478)] @pytest.fixture def exact_intrinsic_gas( self, fork: Fork, initcode: Initcode, tx_access_list: List[AccessList] ) -> int: """ Calculate the intrinsic tx gas cost. """ tx_intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator() assert tx_intrinsic_gas_cost_calculator( calldata=initcode, contract_creation=True, access_list=tx_access_list, ) == tx_intrinsic_gas_cost_calculator( calldata=initcode, contract_creation=True, access_list=tx_access_list, return_cost_deducted_prior_execution=True, ) return tx_intrinsic_gas_cost_calculator( calldata=initcode, contract_creation=True, access_list=tx_access_list, ) @pytest.fixture def exact_execution_gas(self, exact_intrinsic_gas: int, initcode: Initcode) -> int: """ Calculate total execution gas cost. """ return exact_intrinsic_gas + initcode.deployment_gas + initcode.execution_gas @pytest.fixture def tx_error(self, gas_test_case: str) -> TransactionException | None: """ Return the transaction exception, or None, as expected. Check that the transaction is invalid if too little intrinsic gas is specified, otherwise the tx is valid and succeeds. """ if gas_test_case == "too_little_intrinsic_gas": return TransactionException.INTRINSIC_GAS_TOO_LOW return None @pytest.fixture def tx( self, sender: EOA, initcode: Initcode, gas_test_case: str, tx_access_list: List[AccessList], tx_error: TransactionException | None, exact_intrinsic_gas: int, exact_execution_gas: int, ) -> Transaction: """ Return a tx with `gas_limit` corresponding to the `gas_test_case`. Implement the gas_test_case by setting the `gas_limit` of the tx appropriately and test whether the tx succeeds or fails with appropriate error. """ if gas_test_case == "too_little_intrinsic_gas": gas_limit = exact_intrinsic_gas - 1 elif gas_test_case == "exact_intrinsic_gas": gas_limit = exact_intrinsic_gas elif gas_test_case == "too_little_execution_gas": gas_limit = exact_execution_gas - 1 elif gas_test_case == "exact_execution_gas": gas_limit = exact_execution_gas else: pytest.fail("Invalid gas test case provided.") return Transaction( nonce=0, to=None, access_list=tx_access_list, data=initcode, gas_limit=gas_limit, gas_price=10, error=tx_error, sender=sender, # The entire gas limit is expected to be consumed. expected_receipt=TransactionReceipt(gas_used=gas_limit), ) @pytest.fixture def post( self, sender: EOA, initcode: Initcode, gas_test_case: str, exact_intrinsic_gas: int, exact_execution_gas: int, ) -> Alloc: """ Test contract creation fails unless enough execution gas is provided. """ create_contract_address = compute_create_address( address=sender, nonce=0, ) if gas_test_case == "exact_intrinsic_gas" and exact_intrinsic_gas == exact_execution_gas: # Special scenario where the execution of the initcode and # gas cost to deploy are zero return Alloc({create_contract_address: Account(code=initcode.deploy_code)}) elif gas_test_case == "exact_execution_gas": return Alloc({create_contract_address: Account(code=initcode.deploy_code)}) return Alloc({create_contract_address: Account.NONEXISTENT}) @pytest.mark.slow() def test_gas_usage( self, state_test: StateTestFiller, env: Environment, pre: Alloc, post: Alloc, tx: Transaction, ) -> None: """ Test transaction and contract creation using different gas limits. """ state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "initcode", [ INITCODE_ZEROS_MAX_LIMIT, INITCODE_ONES_MAX_LIMIT, INITCODE_ZEROS_OVER_LIMIT, INITCODE_ONES_OVER_LIMIT, EMPTY_INITCODE, SINGLE_BYTE_INITCODE, INITCODE_ZEROS_32_BYTES, INITCODE_ZEROS_33_BYTES, INITCODE_ZEROS_49120_BYTES, INITCODE_ZEROS_49121_BYTES, ], ids=get_initcode_name, ) @pytest.mark.parametrize("opcode", [Op.CREATE, Op.CREATE2], ids=get_create_id) class TestCreateInitcode: """ Test contract creation with valid and invalid initcode lengths. Test contract creation via CREATE/CREATE2, parametrized by initcode that is on/over the max allowed limit. """ @pytest.fixture def create2_salt(self) -> int: """ Salt value used for CREATE2 contract creation. """ return 0xDEADBEEF @pytest.fixture def creator_code(self, opcode: Op, create2_salt: int) -> Bytecode: """ Generate code for the creator contract which calls CREATE/CREATE2. """ return ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.GAS + ( opcode(size=Op.CALLDATASIZE, salt=create2_salt) if opcode == Op.CREATE2 else opcode(size=Op.CALLDATASIZE) ) + Op.GAS # stack: [Gas 2, Call Result, Gas 1] + Op.SWAP1 # stack: [Call Result, Gas 2, Gas 1] + Op.SSTORE(0, unchecked=True) # stack: [Gas 2, Gas 1] + Op.SWAP1 # stack: [Gas 1, Gas 2] + Op.SUB # stack: [Gas 1 - Gas 2] + Op.SSTORE(1, unchecked=True) ) @pytest.fixture def creator_contract_address(self, pre: Alloc, creator_code: Bytecode) -> Address: """Return address of creator contract.""" return pre.deploy_contract(creator_code) @pytest.fixture def created_contract_address( # noqa: D103 self, opcode: Op, create2_salt: int, initcode: Initcode, creator_contract_address: Address, ) -> Address: """ Calculate address of the contract created by the creator contract. """ return compute_create_address( address=creator_contract_address, nonce=1, salt=create2_salt, initcode=initcode, opcode=opcode, ) @pytest.fixture def caller_code(self, creator_contract_address: Address) -> Bytecode: """ Generate code for the caller contract that calls the creator contract. """ return Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( Op.CALL(5000000, creator_contract_address, 0, 0, Op.CALLDATASIZE, 0, 0), 1 ) @pytest.fixture def caller_contract_address(self, pre: Alloc, caller_code: Bytecode) -> Address: """Return address of the caller contract.""" return pre.deploy_contract(caller_code) @pytest.fixture def tx(self, caller_contract_address: Address, initcode: Initcode, sender: EOA) -> Transaction: """Generate transaction that executes the caller contract.""" return Transaction( nonce=0, to=caller_contract_address, data=initcode, gas_limit=10000000, gas_price=10, sender=sender, ) @pytest.fixture def contract_creation_gas_cost(self, fork: Fork, opcode: Op) -> int: """Calculate gas cost of the contract creation operation.""" gas_costs = fork.gas_costs() create_contract_base_gas = gas_costs.G_CREATE gas_opcode_gas = gas_costs.G_BASE push_dup_opcode_gas = gas_costs.G_VERY_LOW calldatasize_opcode_gas = gas_costs.G_BASE contract_creation_gas_usage = ( create_contract_base_gas + gas_opcode_gas + (2 * push_dup_opcode_gas) + calldatasize_opcode_gas ) if opcode == Op.CREATE2: # Extra push operation contract_creation_gas_usage += push_dup_opcode_gas return contract_creation_gas_usage @pytest.fixture def initcode_word_cost(self, fork: Fork, initcode: Initcode) -> int: """Calculate gas cost charged for the initcode length.""" gas_costs = fork.gas_costs() return ceiling_division(len(initcode), 32) * gas_costs.G_INITCODE_WORD @pytest.fixture def create2_word_cost(self, opcode: Op, fork: Fork, initcode: Initcode) -> int: """Calculate gas cost charged for the initcode length.""" if opcode == Op.CREATE: return 0 gas_costs = fork.gas_costs() return ceiling_division(len(initcode), 32) * gas_costs.G_KECCAK_256_WORD @pytest.mark.xdist_group(name="bigmem") @pytest.mark.slow() def test_create_opcode_initcode( self, state_test: StateTestFiller, env: Environment, pre: Alloc, post: Alloc, tx: Transaction, initcode: Initcode, caller_contract_address: Address, creator_contract_address: Address, created_contract_address: Address, contract_creation_gas_cost: int, initcode_word_cost: int, create2_word_cost: int, ) -> None: """ Test contract creation with valid and invalid initcode lengths. Test contract creation via CREATE/CREATE2, parametrized by initcode that is on/over the max allowed limit. """ if len(initcode) > Spec.MAX_INITCODE_SIZE: # Call returns 0 as out of gas s[0]==1 post[caller_contract_address] = Account( nonce=1, storage={ 0: 1, 1: 0, }, ) post[created_contract_address] = Account.NONEXISTENT post[creator_contract_address] = Account( nonce=1, storage={ 0: 0, 1: 0, }, ) else: expected_gas_usage = contract_creation_gas_cost # The initcode is only executed if the length check succeeds expected_gas_usage += initcode.execution_gas # The code is only deployed if the length check succeeds expected_gas_usage += initcode.deployment_gas # CREATE2 hashing cost should only be deducted if the initcode # does not exceed the max length expected_gas_usage += create2_word_cost # Initcode word cost is only deducted if the length check # succeeds expected_gas_usage += initcode_word_cost # Call returns 1 as valid initcode length s[0]==1 && s[1]==1 post[caller_contract_address] = Account( nonce=1, storage={ 0: 0, 1: 1, }, ) post[created_contract_address] = Account(code=initcode.deploy_code) post[creator_contract_address] = Account( nonce=2, storage={ 0: created_contract_address, 1: expected_gas_usage, }, ) state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/shanghai/eip3860_initcode/test_with_eof.py ================================================ """ Test CREATE / CREATE2 and EOF interaction for EIP-3860 initcode limits. """ import itertools import pytest from ethereum_test_tools import ( Account, Alloc, Bytecode, Environment, Initcode, StateTestFiller, Transaction, compute_create_address, ) from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE, MAX_INITCODE_SIZE from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_3860 REFERENCE_SPEC_GIT_PATH = ref_spec_3860.git_path REFERENCE_SPEC_VERSION = ref_spec_3860.version pytestmark = pytest.mark.valid_from("Shanghai") _slot = itertools.count() next(_slot) # don't use slot 0 slot_code_worked = next(_slot) slot_create_address = next(_slot) value_code_worked = 0x2015 @pytest.mark.parametrize( "opcode", [ Op.CREATE, Op.CREATE2, ], ) @pytest.mark.parametrize( "init_code", [ pytest.param(Bytecode(), id="empty_initcode"), pytest.param(Initcode(initcode_length=MAX_INITCODE_SIZE), id="max_initcode"), pytest.param(Initcode(deploy_code=Bytecode()), id="empty_code"), pytest.param(Initcode(deploy_code=Op.STOP * MAX_BYTECODE_SIZE), id="max_code"), ], ) def test_legacy_create_edge_code_size( state_test: StateTestFiller, pre: Alloc, opcode: Op, init_code: Bytecode, ) -> None: """ Test legacy initcode and deployed code edge cases with EOF enabled. Verify that legacy initcode/deploycode having 0 or max size continues to work in the fork where EOF is enabled. Handling of EOF magic prefix and version interferes with the handling of legacy creation, so a specific test was proposed to test behavior doesn't change. """ env = Environment() salt_param = [0] if opcode == Op.CREATE2 else [] factory_code = ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_create_address, opcode(0, 0, Op.CALLDATASIZE, *salt_param)) + Op.SSTORE(slot_code_worked, value_code_worked) ) contract_address = pre.deploy_contract(code=factory_code) new_address = compute_create_address( address=contract_address, initcode=init_code, nonce=1, opcode=opcode ) post = { contract_address: Account( storage={slot_create_address: new_address, slot_code_worked: value_code_worked} ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, data=init_code, sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/shanghai/eip4895_withdrawals/__init__.py ================================================ """ Tests [EIP-4895: Beacon chain withdrawals](https://eips.ethereum.org/EIPS/eip-4895). """ ================================================ FILE: tests/shanghai/eip4895_withdrawals/conftest.py ================================================ """Fixtures for the EIP-4895 withdrawals tests.""" import pytest from ethereum_test_tools import Alloc, Environment @pytest.fixture def env() -> Environment: """Environment fixture.""" return Environment() @pytest.fixture def post() -> Alloc: """Post state fixture.""" return Alloc() ================================================ FILE: tests/shanghai/eip4895_withdrawals/spec.py ================================================ """Defines EIP-4895 specification constants and functions.""" from dataclasses import dataclass @dataclass(frozen=True) class ReferenceSpec: """Defines the reference spec version and git path.""" git_path: str version: str ref_spec_4895 = ReferenceSpec("EIPS/eip-4895.md", "81af3b60b632bc9c03513d1d137f25410e3f4d34") ================================================ FILE: tests/shanghai/eip4895_withdrawals/test_withdrawals.py ================================================ """ Tests for [EIP-4895: Beacon chain withdrawals](https://eips.ethereum.org/EIPS/eip-4895). """ from enum import Enum, unique from typing import Dict, List, Mapping import pytest from ethereum_clis import TransitionTool from ethereum_test_forks import Cancun, Fork from ethereum_test_tools import ( EOA, Account, Address, Alloc, Block, BlockchainTestFiller, Hash, Transaction, TransactionException, Withdrawal, ) from ethereum_test_vm import Opcodes as Op from .spec import ref_spec_4895 REFERENCE_SPEC_GIT_PATH = ref_spec_4895.git_path REFERENCE_SPEC_VERSION = ref_spec_4895.version pytestmark = pytest.mark.valid_from("Shanghai") ONE_GWEI = 10**9 @pytest.mark.parametrize( "test_case", [ pytest.param( "tx_in_withdrawals_block", id="tx_in_withdrawals_block", marks=pytest.mark.exception_test, ), pytest.param("tx_after_withdrawals_block", id="tx_after_withdrawals_block"), ], ) class TestUseValueInTx: """ Test that the value from a withdrawal can be used in a transaction. 1. `tx_in_withdrawals_block`: Test that the withdrawal value can not be used by a transaction in the same block as the withdrawal. 2. `tx_after_withdrawals_block`: Test that the withdrawal value can be used by a transaction in the subsequent block. """ @pytest.fixture def sender(self, pre: Alloc) -> EOA: """Funded EOA used for sending transactions.""" return pre.fund_eoa(1) @pytest.fixture def recipient(self, pre: Alloc) -> EOA: """Funded EOA used for sending transactions.""" return pre.fund_eoa(0) @pytest.fixture def tx(self, sender: EOA, recipient: EOA) -> Transaction: # noqa: D102 # Transaction sent from the `sender`, which has 1 wei balance at start return Transaction( gas_price=ONE_GWEI, gas_limit=21_000, to=recipient, sender=sender, ) @pytest.fixture def withdrawal(self, tx: Transaction, sender: EOA) -> Withdrawal: # noqa: D102 return Withdrawal( index=0, validator_index=0, address=sender, amount=tx.gas_limit + 1, ) @pytest.fixture def blocks(self, tx: Transaction, withdrawal: Withdrawal, test_case: str) -> List[Block]: # noqa: D102 if test_case == "tx_in_withdrawals_block": return [ Block( txs=[tx.with_error(TransactionException.INSUFFICIENT_ACCOUNT_FUNDS)], withdrawals=[ withdrawal, ], exception=TransactionException.INSUFFICIENT_ACCOUNT_FUNDS, ) ] if test_case == "tx_after_withdrawals_block": return [ Block( txs=[], withdrawals=[ withdrawal, ], ), Block( txs=[tx], withdrawals=[], ), ] raise Exception("Invalid test case.") @pytest.fixture def post(self, sender: EOA, test_case: str) -> Dict: # noqa: D102 if test_case == "tx_in_withdrawals_block": return {} if test_case == "tx_after_withdrawals_block": return {sender: Account(balance=ONE_GWEI + 1)} raise Exception("Invalid test case.") def test_use_value_in_tx( self, pre: Alloc, blockchain_test: BlockchainTestFiller, post: dict, blocks: List[Block], ) -> None: """Test sending withdrawal value in a transaction.""" blockchain_test(pre=pre, post=post, blocks=blocks) def test_use_value_in_contract( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """Test sending value from contract that has not received a withdrawal.""" sender = pre.fund_eoa() recipient = pre.fund_eoa(1) contract_address = pre.deploy_contract( Op.SSTORE( Op.NUMBER, Op.CALL(address=recipient, value=1000000000), ) ) (tx_0, tx_1) = ( Transaction( sender=sender, value=0, gas_limit=100_000, to=contract_address, ) for _ in range(2) ) withdrawal = Withdrawal( index=0, validator_index=0, address=contract_address, amount=1, ) blocks = [ Block( txs=[tx_0], withdrawals=[withdrawal], ), Block( txs=[tx_1], # Same tx again, just increase nonce ), ] post = { contract_address: Account( storage={ 0x1: 0x0, # Call fails on the first attempt 0x2: 0x1, # Succeeds on the second attempt } ), recipient: Account( balance=ONE_GWEI + 1, ), } blockchain_test(pre=pre, post=post, blocks=blocks) def test_balance_within_block(blockchain_test: BlockchainTestFiller, pre: Alloc) -> None: """ Test withdrawal balance increase within the same block in a contract call. """ save_balance_on_block_number = Op.SSTORE( Op.NUMBER, Op.BALANCE(Op.CALLDATALOAD(0)), ) sender = pre.fund_eoa() recipient = pre.fund_eoa(ONE_GWEI) contract_address = pre.deploy_contract(save_balance_on_block_number) blocks = [ Block( txs=[ Transaction( sender=sender, gas_limit=100000, to=contract_address, data=Hash(recipient, left_padding=True), ) ], withdrawals=[ Withdrawal( index=0, validator_index=0, address=recipient, amount=1, ) ], ), Block( txs=[ Transaction( sender=sender, gas_limit=100000, to=contract_address, data=Hash(recipient, left_padding=True), ) ] ), ] post = { contract_address: Account( storage={ 1: ONE_GWEI, 2: 2 * ONE_GWEI, } ) } blockchain_test(pre=pre, post=post, blocks=blocks) @pytest.mark.parametrize("test_case", ["single_block", "multiple_blocks"]) class TestMultipleWithdrawalsSameAddress: """ Test that multiple withdrawals can be sent to the same address in. 1. A single block. 2. Multiple blocks. """ @pytest.fixture def addresses(self, fork: Fork) -> List[Address]: # noqa: D102 addresses = [Address(p) for p in fork.precompiles(block_number=0, timestamp=0)] return addresses + [Address(2**160 - 1)] @pytest.fixture def blocks(self, addresses: Address, test_case: str) -> List[Block]: # noqa: D102 if test_case == "single_block": # Many repeating withdrawals of the same accounts in the same # block. return [ Block( withdrawals=[ Withdrawal( index=i, validator_index=i, address=addresses[i % len(addresses)], amount=1, ) for i in range(len(addresses) * 16) ], ), ] if test_case == "multiple_blocks": # Similar test but now use multiple blocks each with multiple # withdrawals to the same withdrawal address. return [ Block( withdrawals=[ Withdrawal( index=i * 16 + j, validator_index=i, address=addresses[i], amount=1, ) for j in range(16) ], ) for i in range(len(addresses)) ] raise Exception("Invalid test case.") def test_multiple_withdrawals_same_address( self, blockchain_test: BlockchainTestFiller, test_case: str, pre: Alloc, addresses: List[Address], blocks: List[Block], ) -> None: """ Test withdrawals to the same address multiple times in the same block. """ # Expected post is the same for both test cases. post = {} for addr in addresses: post[addr] = Account( balance=16 * ONE_GWEI, storage={}, ) blockchain_test(pre=pre, post=post, blocks=blocks, tag=test_case) def test_many_withdrawals( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test an unexpected high number of withdrawals in a single block. """ n = 400 withdrawals = [] post = {} for i in range(n): addr = pre.deploy_contract(Op.SSTORE(Op.NUMBER, 1)) amount = i * 1 withdrawals.append( Withdrawal( index=i, validator_index=i, address=addr, amount=amount, ) ) post[addr] = Account( code=Op.SSTORE(Op.NUMBER, 1), balance=amount * ONE_GWEI, storage={}, ) blocks = [ Block( withdrawals=withdrawals, ), ] blockchain_test(pre=pre, post=post, blocks=blocks) def test_self_destructing_account( blockchain_test: BlockchainTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Test withdrawals can be done to self-destructed accounts. Account `0x100` self-destructs and sends all its balance to `0x200`. Then, a withdrawal is received at `0x100` with 99 wei. """ self_destruct_code = Op.SELFDESTRUCT(Op.CALLDATALOAD(0)) sender = pre.fund_eoa() recipient = pre.fund_eoa(1) self_destruct_contract_address = pre.deploy_contract( self_destruct_code, balance=100 * ONE_GWEI, ) tx_1 = Transaction( # Transaction sent from the `sender`, that calls a # self-destructing contract. sender=sender, gas_limit=100000, to=self_destruct_contract_address, data=Hash(recipient, left_padding=True), ) withdrawal = Withdrawal( index=0, validator_index=0, address=self_destruct_contract_address, amount=(99), ) block = Block( txs=[tx_1], withdrawals=[withdrawal], ) post = { self_destruct_contract_address: Account( code=self_destruct_code if fork >= Cancun else b"", balance=(99 * ONE_GWEI), ), recipient: Account( code=b"", balance=(100 * ONE_GWEI) + 1, ), } blockchain_test(pre=pre, post=post, blocks=[block]) @pytest.mark.parametrize( "include_value_in_tx", [False, True], ids=["without_tx_value", "with_tx_value"], ) def test_newly_created_contract( blockchain_test: BlockchainTestFiller, pre: Alloc, include_value_in_tx: bool, ) -> None: """Test withdrawing to a newly created contract.""" sender = pre.fund_eoa() initcode = Op.RETURN(0, 1) tx = Transaction( # Transaction sent from the `sender`, that creates a # new contract. sender=sender, gas_limit=1000000, to=None, value=ONE_GWEI if include_value_in_tx else 0, data=initcode, ) created_contract = tx.created_contract withdrawal = Withdrawal( index=0, validator_index=0, address=created_contract, amount=1, ) created_contract_balance = ONE_GWEI if include_value_in_tx: created_contract_balance = 2 * ONE_GWEI post = { created_contract: Account( code=Op.STOP, balance=created_contract_balance, ), } block = Block( txs=[tx], withdrawals=[withdrawal], ) blockchain_test(pre=pre, post=post, blocks=[block]) def test_no_evm_execution( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """Test withdrawals don't trigger EVM execution.""" sender = pre.fund_eoa() contracts = [pre.deploy_contract(Op.SSTORE(Op.NUMBER, 1)) for _ in range(4)] blocks = [ Block( txs=[ Transaction( sender=sender, gas_limit=100000, to=contracts[2], ), Transaction( sender=sender, gas_limit=100000, to=contracts[3], ), ], withdrawals=[ Withdrawal( index=0, validator_index=0, address=contracts[0], amount=1, ), Withdrawal( index=1, validator_index=1, address=contracts[1], amount=1, ), ], ), Block( txs=[ Transaction( sender=sender, gas_limit=100000, to=contracts[0], ), Transaction( sender=sender, gas_limit=100000, to=contracts[1], ), ], withdrawals=[ Withdrawal( index=0, validator_index=0, address=contracts[2], amount=1, ), Withdrawal( index=1, validator_index=1, address=contracts[3], amount=1, ), ], ), ] post = { contracts[0]: Account(storage={2: 1}), contracts[1]: Account(storage={2: 1}), contracts[2]: Account(storage={1: 1}), contracts[3]: Account(storage={1: 1}), } blockchain_test(pre=pre, post=post, blocks=blocks) @unique class ZeroAmountTestCases(Enum): # noqa: D101 TWO_ZERO = "two_withdrawals_no_value" THREE_ONE_WITH_VALUE = "three_withdrawals_one_with_value" FOUR_ONE_WITH_MAX = "four_withdrawals_one_with_value_one_with_max" FOUR_ONE_WITH_MAX_REVERSED = "four_withdrawals_one_with_value_one_with_max_reversed_order" @pytest.mark.parametrize( "test_case", list(ZeroAmountTestCases), ids=[case.value for case in ZeroAmountTestCases], ) def test_zero_amount( blockchain_test: BlockchainTestFiller, pre: Alloc, test_case: ZeroAmountTestCases, ) -> None: """ Test withdrawal scenarios with a zero amount in a single block. All the withdrawals in the following scenarios are included in one block. 1. Two withdrawals of zero amount to two different addresses; one to an untouched account, one to an account with a balance. 2. As 1., but with an additional withdrawal with positive value. 3. As 2., but with an additional withdrawal containing the maximum value possible. 4. As 3., but with order of withdrawals in the block reversed. """ empty_accounts = [pre.fund_eoa(0) for _ in range(3)] zero_balance_contract = pre.deploy_contract(Op.STOP) all_withdrawals = [ # No value, untouched account Withdrawal( index=0, validator_index=0, address=empty_accounts[0], amount=0, ), # No value, touched account Withdrawal( index=0, validator_index=0, address=zero_balance_contract, amount=0, ), # Withdrawal with value Withdrawal( index=1, validator_index=0, address=empty_accounts[1], amount=1, ), # Withdrawal with maximum amount Withdrawal( index=2, validator_index=0, address=empty_accounts[2], amount=2**64 - 1, ), ] all_post = { empty_accounts[0]: Account.NONEXISTENT, zero_balance_contract: Account(code=Op.STOP, balance=0), empty_accounts[1]: Account(balance=ONE_GWEI), empty_accounts[2]: Account(balance=(2**64 - 1) * ONE_GWEI), } withdrawals: List[Withdrawal] = [] post: Mapping[Address, Account | object] = {} if test_case == ZeroAmountTestCases.TWO_ZERO: withdrawals = all_withdrawals[0:2] post = { account: all_post[account] for account in post if account in [empty_accounts[0], zero_balance_contract] } elif test_case == ZeroAmountTestCases.THREE_ONE_WITH_VALUE: withdrawals = all_withdrawals[0:3] post = { account: all_post[account] for account in post if account in [ empty_accounts[0], zero_balance_contract, empty_accounts[1], ] } elif test_case == ZeroAmountTestCases.FOUR_ONE_WITH_MAX: withdrawals = all_withdrawals post = all_post elif test_case == ZeroAmountTestCases.FOUR_ONE_WITH_MAX_REVERSED: for i, w in enumerate(reversed(all_withdrawals)): withdrawals.append( Withdrawal( index=i, validator_index=w.validator_index, address=w.address, amount=w.amount, ) ) post = all_post blockchain_test( pre=pre, # TODO: Fix in BlockchainTest? post: Mapping[str, Account | object] # to allow for Account.NONEXISTENT post=post, blocks=[Block(withdrawals=withdrawals)], tag=test_case.value, ) @pytest.mark.xdist_group(name="bigmem") def test_large_amount( blockchain_test: BlockchainTestFiller, pre: Alloc, ) -> None: """ Test withdrawals that have a large gwei amount. Test such that that (gwei * 1e9) could overflow uint64 but not uint256. """ withdrawals: List[Withdrawal] = [] amounts: List[int] = [ (2**35), (2**64) - 1, (2**63) + 1, (2**63), (2**63) - 1, ] post = {} for i, amount in enumerate(amounts): addr = pre.fund_eoa(0) withdrawals.append( Withdrawal( index=i, validator_index=i, address=addr, amount=amount, ) ) post[addr] = Account(balance=(amount * ONE_GWEI)) blocks = [ Block( withdrawals=withdrawals, ) ] blockchain_test(pre=pre, post=post, blocks=blocks) @pytest.mark.xdist_group(name="bigmem") @pytest.mark.parametrize("amount", [0, 1]) @pytest.mark.with_all_precompiles @pytest.mark.slow() def test_withdrawing_to_precompiles( blockchain_test: BlockchainTestFiller, pre: Alloc, precompile: int, amount: int, t8n: TransitionTool, ) -> None: """Test withdrawing to all precompiles for a given fork.""" sender = pre.fund_eoa() post: Dict = {} blocks = [ # First block performs the withdrawal Block( withdrawals=[ Withdrawal( index=0, validator_index=0, address=Address(precompile), amount=amount, ) ] ), # Second block sends a transaction to the precompile Block( txs=[ Transaction( sender=sender, gas_limit=100000, to=Address(precompile), ), ], ), ] blockchain_test(pre=pre, post=post, blocks=blocks) ================================================ FILE: tests/static/README.md ================================================ # Static Tests This directory contains static test files that were originally located at [ethereum/tests](https://github.com/ethereum/tests/tree/develop/src). These files should not be modified directly. ## Important Policy If you find a test that is broken or needs updating: 1. **DO NOT** modify the static test files directly. 2. Instead, create or update the corresponding Python test in the appropriate `tests/` folder. 3. Delete the original static test filler file(s). 4. Open a PR containing the new tests and the static tests deletion, and make sure that there is no coverage drop. ================================================ FILE: tests/static/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Cancun/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/10_revertUndoesStoreAfterReturnFiller.yml ================================================ # 10 # Revert undoes transient storage writes from inner calls that successfully returned. # TSTORE(x, y), CALL(self, ...), CALL(self, ...), TSTORE(x, y + 1), RETURN, REVERT, TLOAD(x) returns y # # Expect slot 0 to have 5 from the first tstore & tload. # Expect slot 1 to have 0. Call was unsuccessful. # Expect slot 2 to have 1. Inner call was successful. # Expect slot 3 to have 5. Should load the value stored before the unsuccessful call. 10_revertUndoesStoreAfterReturn: _info: comment: Revert undoes the transient storage writes after a successful call. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: : balance: 1000000000000000000 nonce: 0 code: | :yul { switch selector() case 0x70ac643e { // doFirstCall() doFirstCall() } case 0x76b85d23 { // doCallThenRevert() doCallThenRevert() } case 0x4ccca553 { // doSuccessfulStore() doSuccessfulStore() } function doFirstCall() { verbatim_2i_0o(hex"5D", 0, 5) let v := verbatim_1i_1o(hex"5C", 0) sstore(0, v) mstore(0, hex"76b85d23") // calls doCallThenRevert() let fail := call(gas(), address(), 0, 0, 32, 0, 32) sstore(1, fail) // should be 0 (revert) sstore(2, mload(0)) // load 1 (successful call) let val := verbatim_1i_1o(hex"5C", 0) sstore(3, val) } function doCallThenRevert() { mstore(0, hex"4ccca553") // calls doSuccessfulStore() let s := call(gas(), address(), 0, 0, 32, 0, 0) mstore(0, s) revert(0, 32) } function doSuccessfulStore() { verbatim_2i_0o(hex"5D", 0, 6) } function doReenter(fs) -> f { mstore(0, fs) f := call(gas(), address(), 0, 0, 32, 0, 0) } function selector() -> s { let value := calldataload(0) s := shr(224, value) } } storage: { 0x01: 0xffff } : balance: 1000000000000000000000 code: "0x" nonce: 0 storage: {} transaction: data: - data: :abi doFirstCall() accessList: [] gasLimit: - "400000" nonce: 0 to: value: - 0 secretKey: "" maxPriorityFeePerGas: 0 maxFeePerGas: 2000 expect: - network: - ">=Cancun" result: : storage: 0x00: 5 0x01: 0 0x02: 1 0x03: 5 ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/14_revertAfterNestedStaticcallFiller.yml ================================================ # 14 # Transient storage cannot be manipulated in a nested static context: TSTORE(x, y), STATICCALL(self, ...), CALL(self, ...), TSTORE(x, z) reverts # # Expect slot 0 to have 10 from the first tstore & tload. # Expect slot 1 to have 0 (for revert). # Expect slot 2 to have 1 (for success). # Expect slot 3 to have 10 (original value). 14_revertAfterNestedStaticcall: _info: comment: Transient storage can't be manipulated from nested staticcall. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: : balance: 1000000000000000000 nonce: 0 code: | :yul { switch selector() case 0xf5f40590 { // doStoreAndStaticCall() doStoreAndStaticCall() } case 0xf8dfc2d0 { // doCallToStore() doCallToStore() } case 0x62fdb9be { // doStore() doStore() } function doStoreAndStaticCall() { verbatim_2i_0o(hex"5D", 0, 10) let v := verbatim_1i_1o(hex"5C", 0) sstore(0, v) mstore(0, hex"f8dfc2d0") // doCallToStore() let success := staticcall(0xffff, address(), 0, 32, 0, 32) sstore(1, mload(0)) // should be 0 from nested unsuccessful call sstore(2, success) // should be 1 let val := verbatim_1i_1o(hex"5C", 0) sstore(3, val) } function doCallToStore() { mstore(0, hex"62fdb9be") // doStore() let f := call(gas(), address(), 0, 0, 32, 0, 0) // call with zero-value mstore(0, f) return(0, 32) } function doStore() { verbatim_2i_0o(hex"5D", 0, 11) // will revert } function selector() -> s { let value := calldataload(0) s := shr(224, value) } } storage: { 0x01: 0xffff } : balance: 1000000000000000000000 code: "0x" nonce: 0 storage: {} transaction: data: - data: :abi doStoreAndStaticCall() accessList: [] gasLimit: - "400000" nonce: 0 to: value: - 0 secretKey: "" maxPriorityFeePerGas: 0 maxFeePerGas: 2000 expect: - network: - ">=Cancun" result: : storage: 0x00: 10 0x01: 0 0x02: 1 0x03: 10 ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/15_tstoreCannotBeDosdFiller.yml ================================================ # 15 # Transient storage cannot be DOS’d: CALL(self, ...), TSTORE(x, y), TSTORE(x + 1, y), TSTORE(x + 2, y), ... ,TSTORE(x + n, y), REVERT, TLOAD(x) returns 0 and runs in under 15 seconds # # Expect slot 0 to have 0. Call fails. # Expect slot 1 to have 0. Loading returns 0. 15_tstoreCannotBeDosd: _info: comment: Transient storage cannot be DOS’d. pytest_marks: - skip # Superseded by tests/benchmark/test_worst_compute.py::test_worst_tload, test_worst_tstore env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: : balance: 1000000000000000000 nonce: 0 code: | :yul { switch selector() case 0x883264e8 { // doCall(uint) let n:= calldataload(4) doCall(n) } case 0xf7d6c0eb { // doNStores(n) let n := calldataload(32) doNStores(n) } function doCall(n) { mstore(0, hex"f7d6c0eb") // doNStores(n) mstore(32, n) let t := call(gas(), address(), 0, 0, 64, 0, 32) sstore(0, t) // should revert sstore(2, mload(0)) let v := verbatim_1i_1o(hex"5C", 0) sstore(1, v) } function doNStores(n) { let i for {i := 0 } lt(i, n) { i := add(i, 1) } { verbatim_2i_0o(hex"5D", i, 48) } mstore(0, i) revert(0, 32) } function selector() -> s { let value := calldataload(0) s := shr(224, value) } } storage: { 0x00: 0xffff, 0x01: 0xffff } : balance: 1000000000000000000000 code: "0x" nonce: 0 storage: {} transaction: data: - data: :abi doCall(uint) 0x249F0 accessList: [] gasLimit: - "16777216" nonce: 0 to: value: - 0 secretKey: "" maxPriorityFeePerGas: 0 maxFeePerGas: 2000 expect: - network: - ">=Cancun" result: : storage: 0x00: 0 0x01: 0 0x02: 0x249F0 ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/17_tstoreGasFiller.yml ================================================ # 17 # Tstore arbitrary value in arbitrary slot costs 100 gas : TSTORE(x, y) costs 100 gas. # # Expect storage slot 1 to be 100. Cost of tstore. 17_tstoreGas: _info: comment: Tstore arbitrary value in arbitrary slot costs 100 gas. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: : balance: 1000000000000000000 nonce: 0 code: | :yul { let extraOpcodes := 7 // calculate tstore gas let g1 := gas() verbatim_2i_0o(hex"5D", 0, 3) let g2 := gas() sstore(1, sub(sub(g1, g2), extraOpcodes)) } storage: {} : balance: 1000000000000000000000 code: "0x" nonce: 0 storage: {} transaction: data: - data: 0x accessList: [] gasLimit: - "400000" nonce: 0 to: value: - 0 secretKey: "" maxPriorityFeePerGas: 0 maxFeePerGas: 2000 expect: - network: - ">=Cancun" result: : storage: 0x01: 100 ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/19_oogUndoesTransientStoreFiller.yml ================================================ # 19 # Out of gas undoes the transient storage write from reentrant subcall: TSTORE(x, y), CALL(self, ...), TSTORE(x, z), where oog reverts subcall # # Expect slot 0 to have 0x4e from tstore. # Expect slot 1 to have 0x4e from the original tstore. # Expect slot 2 to have 0 for unsuccessful call. 19_oogUndoesTransientStore: _info: comment: Out of gas undoes the transient storage writes from a call. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: : balance: 1000000000000000000 nonce: 0 code: | :yul { switch selector() case 0xe2da2eb0 { // doStoreAndRevert() doStoreAndRevert() } case 0x3f371692 { // doReenter() doReenter() } function doStoreAndRevert() { verbatim_2i_0o(hex"5D", 0, 11) let hash := keccak256(0, 0x2fffff) } function doReenter() { verbatim_2i_0o(hex"5D", 0, 0x4e) let v := verbatim_1i_1o(hex"5C", 0) sstore(0, v) mstore(0, hex"e2da2eb0") // doStoreAndRevert() runs out of gas let fail := call(0xC350, address(), 0, 0, 32, 0, 0) sstore(2, fail) sstore(1, verbatim_1i_1o(hex"5C", 0)) } function selector() -> s { let value := calldataload(0) s := shr(224, value) } } storage: { 0x00: 0xffff, 0x01: 0xffff, 0x02: 0xffff } : balance: 1000000000000000000000 code: "0x" nonce: 0 storage: {} transaction: data: - data: :abi doReenter() accessList: [] gasLimit: - "400000" nonce: 0 to: value: - 0 secretKey: "" maxPriorityFeePerGas: 0 maxFeePerGas: 2000 expect: - network: - ">=Cancun" result: : storage: 0x00: 0x4e 0x01: 0x4e 0x02: 0 ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/21_tstoreCannotBeDosdOOOFiller.yml ================================================ # 21 # Similar to 15. Transient storage cannot be DOS’d: CALL(self, ...), TSTORE(x, y), TSTORE(x + 1, y), TSTORE(x + 2, y), ... ,TSTORE(x + n, y), REVERT, TLOAD(x) returns 0 and runs in under 15 seconds # tstore in a non-monotonic order skipping some slots. # # Expect slot 0 to have 0. Call fails. # Expect slot 1 to have 0. Loading returns 0. 21_tstoreCannotBeDosdOOO: _info: comment: Transient storage cannot be DOS’d. pytest_marks: - skip # Superseded by tests/benchmark/test_worst_compute.py::test_worst_tload, test_worst_tstore env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: : balance: 1000000000000000000 nonce: 0 code: | :yul { switch selector() case 0x883264e8 { // doCall(uint) let n:= calldataload(4) doCall(n) } case 0xf7d6c0eb { // doNStores(n) let n := calldataload(32) doNStores(n) } default { sstore(0, 5) } function doCall(n) { mstore(0, hex"f7d6c0eb") // doNStores(n) mstore(32, n) let t := call(gas(), address(), 0, 0, 64, 0, 32) sstore(0, t) // should revert sstore(2, mload(0)) let v := verbatim_1i_1o(hex"5C", 0) sstore(1, v) } function doNStores(n) { let i for {i := 0 } lt(i, n) { i := add(i, 1) } { let even := mod(i, 2) let index switch even case 0 { index := i verbatim_2i_0o(hex"5D", i, 600) } case 1 { index := sub(0, i) verbatim_2i_0o(hex"5D", index, 600) } } mstore(0, i) revert(0, 32) } function selector() -> s { let value := calldataload(0) s := shr(224, value) } } storage: { 0x00: 0xffff, 0x01: 0xffff, 0x02: 0xffff } : balance: 1000000000000000000000 code: "0x" nonce: 0 storage: {} transaction: data: - data: :abi doCall(uint) 0x186A0 accessList: [] gasLimit: - "16777216" nonce: 0 to: value: - 0 secretKey: "" maxPriorityFeePerGas: 0 maxFeePerGas: 2000 expect: - network: - ">=Cancun" result: : storage: 0x00: 0 0x01: 0 0x02: 0x186A0 ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/transStorageOKFiller.yml ================================================ # Test successful uses of TLOAD and TSTORE # Tests: # # sumTo(uint) # 1. Forward avail: TSTORE affects future calls to the contract (when inside a nester call) # 2. Backward avail: TSTORE affects existing calls to the contract (when inside a nested call) # # callcodeSumTo(uint) # 3. Forward and backward avail when using CALLCODE # # delegateSumTo(uint) # 4. Forward and backward avail when using DELEGATECALL # # callbackSum(uint) # 5. Forward and backward avail not affected by having an intervening CALL contract between # TSTORE and TLOAD # 6. The intervening CALL contract does not have access to the transient storage of the caller # # binTree(uint) # 7. Verify forward avail when the two calls are "at the same level". The same contract # calls both, rather than forward avail from caller to callee. # # delegateBinTree(uint) # 8. Same as 7, but with CALLCODE and DELEGATECALL. # # inheritTrans() # 9. CALL does not inherit transient storage # 10. CALLCODE inherits transient storage # 11. DELEGATECALL inherits transient storage # # deepCall(uint) # 12. A deep stack of CALL, CALLCODE, and DELEGATECALL still preserves transient storage # # staticCall(uint) # 13. STATICCALL can read transient storage # 14. STATICCALL cannot write transient storage (even to the same value it has) # In general, the way these tests work is that the transaction calls 0xCCCCCC with # 36 bytes of data. Four bytes for a function signature and 32 for a parameter. # This is created using :abi funName(uint) # # 0xCCC...CCC then calls the contract that actually runs the test. The contract's address # is, conveniently, the four bytes of the signature. # # Note that because of the nature of transient storage, in most cases the test contract # has to call itself (directly or indirectly). This means it has to effectively have # at least two entry points. transStorageOK: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" pre: # sumTo(uint) # # Add ints, 0+1+...+depth # If called by itself, get depth from trans[0] # If called by anybody else, get depth from calldata # # This checks two things: # 1. Forward availability of transient storage. # The counter is changed and then the contract is called again, with the # new value in transient storage # 2. Backward availability of transient storage. # The sum is updated and then the contract returns, and the new # value is available to the caller frame. # # Without the recursion, this code will look like this: # # for (Trans[0] = calldataload(4); Trans[0]!=0; Trans[0]--} # Trans[1] += Trans[0] # 00000000000000000000000000000000ebd141d5: balance: 0 nonce: 1 code: | :yul { // These two functions use transient storage. // Once the relevant opcodes are added to Yul, simply remove // them (from all contracts) and remove the _temp suffices. function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // If we are called by ourselves, this is part of the loop. if eq(caller(), address()) { let counter := tload_temp(0) // If the counter is equal to zero, we're done - return. if eq(counter,0) { return(0,0) } // If counter isn't zero, add counter to Trans[1] and do recursion tstore_temp(1, add(tload_temp(1), counter)) // Change the loop variable and call yourself tstore_temp(0, sub(counter, 1)) let res := call(gas(), address(), 0, 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } } // If called by a different address, we are the first call and need // to setup Trans[0] before starting the loop. // // This first frame is also responsible for putting results in storage, // so the test will be able to read them. if iszero(eq(caller(), address())) { let data := calldataload(0) sstore(1, data) tstore_temp(0, data) sstore(2, call(gas(), address(), 0, 0,0,0,0)) sstore(3, tload_temp(1)) } } storage: {} # callcodeSumTo(uint) # # Similar to sumTo, but uses callcode instead of call # # Without the recursion, this code will look like this: # # for (Trans[0] = calldataload(4); Trans[0]!=0; Trans[0]--} # Trans[1] += Trans[0] # 000000000000000000000000000000006e3a7204: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // If we are called by ourselves, this is part of the loop. if eq(caller(), address()) { let counter := tload_temp(0) // Loop ended, return if eq(counter,0) { return(0,0) } // Change the loop variable and call yourself tstore_temp(1, add(tload_temp(1), counter)) tstore_temp(0, sub(counter, 1)) let res := callcode(gas(), address(), 0, 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } } // If called by a different address, we are the first call and need // to setup Trans[0] before starting the loop. // // This first frame is also responsible for putting results in storage, // so the test will be able to read them. if iszero(eq(caller(), address())) { let data := calldataload(0) sstore(1, data) tstore_temp(0, data) // This needs to be call, so that the loop contracts will get the // correct caller() (otherwise they'll get the contract that called up, // 0xCCCC...CCCC) sstore(2, call(gas(), address(), 0, 0,0,0,0)) sstore(3, tload_temp(1)) } } storage: {} # delegateSumTo(uint) # # Similar to sumTo, but uses delegatecall instead of call # # Without the recursion, this code will look like this: # # for (Trans[0] = calldataload(4); Trans[0]!=0; Trans[0]--} # Trans[1] += Trans[0] 00000000000000000000000000000000c1c922f1: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // If we are called by ourselves, this is part of the loop. if eq(caller(), address()) { let counter := tload_temp(0) // If the counter is equal to zero, we're done - return. if eq(counter,0) { return(0,0) } // Change the loop variable and call yourself tstore_temp(1, add(tload_temp(1), counter)) tstore_temp(0, sub(counter, 1)) let res := delegatecall(gas(), address(), 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } } // If called by a different address, we are the first call and need // to setup Trans[0] before starting the loop. // // This first frame is also responsible for putting results in storage, // so the test will be able to read them. if iszero(eq(caller(), address())) { let data := calldataload(0) sstore(1, data) tstore_temp(0, data) // This needs to be call, so that the loop contracts will get the // correct caller() (otherwise they'll get the contract that called up, // 0xCCCC...CCCC) sstore(2, call(gas(), address(), 0, 0,0,0,0)) sstore(3, tload_temp(1)) } } storage: {} # Call back the contract that called you. # This shows that a contract between two frames # of the same contract doesn't have access to the transient storage # # This contract implements this calling structure: # -> ca11bacc -> # This is important because transient storage is tied to the contract. # This contract's transient storage should be empty, and the call # to it should not affect contract A's transient storage. 00000000000000000000000000000000ca11bacc: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // Write these values to storage (overwriting the 0x60A7's). // If these values are not zero, there is a problem. sstore(0, tload_temp(0)) sstore(1, tload_temp(1)) pop(call(gas(), caller(), 0, 0,0, 0,0)) } storage: 0: 0x60A7 1: 0x60A7 # callbackSum(uint) # # Add ints, 0+1+...+depth # If called by itself, get depth from trans[0] # If called by anybody else, get depth from calldata # # When doing the recursion, go through 0xca11bacc. This # verifies that changes propagate through a different contract # without affecting that contract's transient storage # # Without the recursion, this code will look like this: # # for (Trans[0] = calldataload(4); Trans[0]!=0; Trans[0]--} # Trans[1] += Trans[0] # 000000000000000000000000000000005114e2c8: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // If we are called by 0xca11bacc, this is part of the loop if eq(caller(), 0xca11bacc) { let counter := tload_temp(0) // If the counter is equal to zero, we're done - return. if eq(counter,0) { return(0,0) } // If counter isn't zero, add counter to Trans[1] and do recursion tstore_temp(1, add(tload_temp(1), counter)) // Change the loop variable and call 0xca11bacc, which calls us back. tstore_temp(0, sub(counter, 1)) let res := call(gas(), 0xca11bacc, 0, 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } } // If called by a different address from 0xca11bacc, we are the first // call and need to setup Trans[0] before starting the loop. // // This first frame is also responsible for putting results in storage, // so the test will be able to read them. if iszero(eq(caller(), 0xca11bacc)) { let data := calldataload(0) sstore(1, data) tstore_temp(0, data) sstore(2, call(gas(), 0xca11bacc, 0, 0,0,0,0)) sstore(3, tload_temp(1)) } } storage: {} # binTree(uint) # # Calculate 2^depth-1 # # If called by itself, get depth from Trans[0] # If called by anybody else, get depth from calldata # # Check that even if we call the contract twice, transient storage works # # In JavaScript this would look like this: # # let Trans0 = 0 # let Trans1 = 0 # # function binTree(caller) { # if(caller == "binTree()") { # counter = Trans0 # if (counter == 0) # return # // Call yourself twice # Trans0 = counter-1 # binTree("binTree()") # Trans0 = counter-1 # binTree("binTree()") # Trans1 ++ # } else # Trans0 = calldataload(0) # } 00000000000000000000000000000000264bb86a: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // We are inside the loop if eq(caller(), address()) { let counter := tload_temp(0) // If counter is zero, we're at an end of the loop (a leaf of // the tree), return. if eq(counter,0) { return(0,0) } // If counter isn't zero, call yourself with counter-1 twice and // add one to Trans[1] tstore_temp(0, sub(counter, 1)) let res := call(gas(), address(), 0, 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } // We need to repair Trans[0] because it got overwritten in // the previous call tstore_temp(0, sub(counter, 1)) res := call(gas(), address(), 0, 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } // Increment Trans[1] tstore_temp(1, add(tload_temp(1), 1)) } // If called by a different address, we are the first call and need // to setup Trans[0] before starting the loop. // // This first frame is also responsible for putting results in storage, // so the test will be able to read them. if iszero(eq(caller(), address())) { let data := calldataload(0) sstore(1, data) tstore_temp(0, data) sstore(2, call(gas(), address(), 0, 0,0,0,0)) sstore(3, tload_temp(1)) } } storage: {} # delegateBinTree(uint) # # Similar to binTree, but uses callcode and delegatecall instead of call # Calculate 2^depth-1 # # If called by itself, get depth from Trans[0] # If called by anybody else, get depth from calldata # # Check that even if we call the contract twice, transient storage works # # In JavaScript this would look like this: # # let Trans0 = 0 # let Trans1 = 0 # # function binTree(caller) { # if(caller == "binTree()") { # counter = Trans0 # if (counter == 0) # return # // Call yourself twice # Trans0 = counter-1 # binTree("binTree()") # Trans0 = counter-1 # binTree("binTree()") # Trans1 ++ # } else # Trans0 = calldataload(0) # } 000000000000000000000000000000007074a486: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // If we are in the loop if eq(caller(), address()) { let counter := tload_temp(0) // If the counter is zero, we're at loop's end, return if eq(counter,0) { return(0,0) } // If counter isn't zero // Call yourself with counter-1 twice then add 1 to Trans[1] // Note that one call is callcode() and the other delegatecall(). // This way the same test checks both of them. tstore_temp(0, sub(counter, 1)) let res := callcode(gas(), address(), 0, 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } // We need to repair Trans[0] because it got overwritten in // the previous call tstore_temp(0, sub(counter, 1)) res := delegatecall(gas(), address(), 0,0, 0,0) if iszero(res) { // If the call failed, fail too revert(0,0) } // Increment Trans[1] tstore_temp(1, add(tload_temp(1), 1)) } // If called by a different address, we are the first call and need // to setup Trans[0] before starting the loop. // // This first frame is also responsible for putting results in storage, // so the test will be able to read them. if iszero(eq(caller(), address())) { let data := calldataload(0) sstore(1, data) tstore_temp(0, data) sstore(2, call(gas(), address(), 0, 0,0,0,0)) sstore(3, tload_temp(1)) } } storage: {} # Increment Trans[0] # # This is used by inheritTrans() below to show that # 1. If you CALL a contract, it has separate transient storage # 2. If you CALLCODE or DELEGATECALL a contract, it is the same transient storage 000000000000000000000000000000000000add1: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } tstore_temp(0, add(tload_temp(0), 1)) } storage: {} # inheritTrans() # # Show that CALL doesn't inherit our transient storage, but CALLCODE and # DELEGATECALL do 000000000000000000000000000000007f9317bd: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // The initial value of the counter is zero sstore(0, tload_temp(0)) // CALLCODE increments our Trans[0] sstore(0x11, callcode(gas(), 0xadd1, 0, 0,0, 0,0)) sstore(1, tload_temp(0)) // DELEGATECALL increments our Trans[0] sstore(0x12, delegatecall(gas(), 0xadd1, 0,0, 0,0)) sstore(2, tload_temp(0)) // CALL does not increment our Trans[0], it means a different // transient storage sstore(0x13, call(gas(), 0xadd1, 0, 0,0, 0,0)) sstore(3, tload_temp(0)) } storage: 0: 0x60A7 # To show it gets overwritten by zero # The other storage cells get a different value # so we can keep them at the default of zero # deepCall(uint) # # Show transients are preserved even after a stack of CALLCODEs, # DELEGATECALLs, and CALLs # # The parameter to deepCall(uint) is a 32 bytes, each telling us what type of # call to do next. The values are the same as opcode values: 0xF1, 0xF2, and 0xF4. # # The way this works is that the first (most significant byte) is the type of call # to do now, and then we give that call input that includes all the input bytes # except for that one. # # We increment Trans[0] in the first call and the last one. 00000000000000000000000000000000c54b5829: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // If we are at the bottom of the call stack, increment // the counter and return if eq(calldatasize(), 0) { tstore_temp(0, add(tload_temp(0),1)) return(0,0) } // If we are at the top of the stack (called by a different contract), // set the counter to one if iszero(eq(address(), caller())) { tstore_temp(0, 1) } // Read the most significant byte of the input. // Luckily for us the input is top justified - if the caller provided // just n bytes (n<20), they will be the top n bytes of calldataload(0). let callType := shr( 248, calldataload(0) ) // Prepare the data to send to the next call mstore(0, calldataload(0)) let newSize := sub(calldatasize(), 1) let newStart := 1 // Mem[0x00] contains the most significant byte (the call type here) // Mem[0x01] contains the second most significant (the next call type) // Mem[calldatasize()-1) contains the final call type // // So we call ourselves with a buffer start of one, and a call data size // of calldatasize()-1 // CALL, CALLCODE or DELEGATECALL, as requested switch callType case 0xF1 { // CALL pop(call(gas(), address(), 0, newStart,newSize, 0,0)) } case 0xF2 { // CALLCODE pop(callcode(gas(), address(), 0, newStart,newSize, 0,0)) } case 0xF4 { // DELEGATECALL pop(delegatecall(gas(), address(), newStart,newSize, 0,0)) } // If we are at the top of the stack (called by a different contract), // write up the result. Should be two if iszero(eq(address(), caller())) { sstore(0, tload_temp(0)) } } storage: {} # This code is called to check that STATICCALL has access to transients # (read only). When called, it checks if there is calldata. If there is, # it writes to Trans[0]. Whether there is or not, it reads from Trans[0] # and returns that (the only way that a static call can return data). 00000000000000000000000000000000000057A7: balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } // There is calldata, so write to Trans[0] if calldatasize() { tstore_temp(0, 0x60A7) } // Return Trans[0] // This happens whether we are called with data or not. mstore(0, tload_temp(0)) return(0,32) } storage: {} # staticCall() # # This contract calls 0x57A7 three time. # 1. Set up Trans[0] # 2. STATICCALL, show you can read it # 3. STATICCALL, shows you can't write it, even when the value is unchanged 000000000000000000000000000000005d7935df: balance: 0 nonce: 1 code: | :yul { // Set up Trans[0] with a regular call. sstore(0x10,call(gas(), 0x57A7, 0, 0,1, 0,32)) sstore(0, mload(0)) // Use staticcall to read Trans[0] of 0x0..57A7. mstore(0,0) sstore(0x11,staticcall(gas(), 0x57A7, 0,0, 0,32)) sstore(1, mload(0)) // Try to use staticall to write Trans[0]. This should fail. mstore(0,0) sstore(0x12,staticcall(gas(), 0x57A7, 0,1, 0,32)) sstore(2, mload(0)) } storage: # Values that should be overwritten by zero (because the tstore causes a revert) 0x02: 0x60A7 0x12: 0x60A7 # The contract called by the transaction # Receives ABI calldata # Bytes 0x00-0x03 (the function hash) is the address of the contract to call # Bytes 0x04-0x23 are the first parameter : balance: 0 code: | :yul { let func := shr(224, calldataload(0)) let param := calldataload(4) sstore(0, func) mstore(0, param) sstore(1, call(gas(), func, 0, 0,32, 0,0)) } nonce: 1 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: 1 storage: {} transaction: data: # Sum up the integers 1-16. - :label sum_16 :abi sumTo(uint) 16 - :label callcode_sum_16 :abi callcodeSumTo(uint) 16 - :label delegate_sum_16 :abi delegateSumTo(uint) 16 # Sum up the integers 1-256. - :label sum_256 :abi sumTo(uint) 256 # Sum up integers, while calling a different contract between each two calls to # the function - :label callback_sum_10 :abi callbackSum(uint) 10 - :label callback_sum_50 :abi callbackSum(uint) 50 # Calculate 2^6-1 by calling recursively the same contract twice. - :label bin_tree_6 :abi binTree(uint) 6 # Calculate 2^6-1 by calling recursively the same contract twice. # Both DELEGATECALL and CODECALL here - :label delegate_bin_tree_6 :abi delegateBinTree(uint) 6 # Show that transient value is inherited through callcode and delegateall, # but not a regular call. - :label inherit_trans :abi inheritTrans() # Show that transient storage is inherited through multiple calls, callcodes, and # delegatecalls. # Because of the way this is written, the call stack has to be exactly 32 bytes - :label deep_call :abi deepCall(uint) 0xF1F2F4F1F2F4F1F2F4F1F2F4F1F2F4F1F2F4F1F2F4F1F2F4F1F2F4F1F2F4F1F1F1 - :label deep_call :abi deepCall(uint) 0xF1F1F1F1F2F2F2F2F4F4F4F4F1F1F1F1F2F2F2F2F4F4F4F4F1F1F1F1F2F2F2F2 - :label deep_call :abi deepCall(uint) 0xF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - :label deep_call :abi deepCall(uint) 0xF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - :label deep_call :abi deepCall(uint) 0xF2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - :label deep_call :abi deepCall(uint) 0xF4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 # Show that a static call can read transient storage, but not write to it # This test also shows that call and staticcall get to the same transient storage - :label static_call :abi staticCall() gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: value: - '0' secretKey: '' expect: - indexes: data: :label sum_16 network: - ">=Cancun" result: : storage: 0: 0xebd141d5 # Call to sumTo(uint) 1: 1 # Call was successful 00000000000000000000000000000000ebd141d5: storage: 1: 16 # Sum 1+2+3+...+16 2: 1 # Call successful 3: 136 # Resulting sum - indexes: data: :label callcode_sum_16 network: - ">=Cancun" result: : storage: 0: 0x6e3a7204 # Call to callcodeSumTo(uint) 1: 1 # Call was successful 000000000000000000000000000000006e3a7204: storage: 1: 16 # Sum 1+2+3+...+16 2: 1 # Call successful 3: 136 # Resulting sum - indexes: data: :label delegate_sum_16 network: - ">=Cancun" result: : storage: 0: 0xc1c922f1 # Call to delegateSumTo(uint) 1: 1 # Call was successful 00000000000000000000000000000000c1c922f1: storage: 1: 16 # Sum 1+2+3+...+16 2: 1 # Call successful 3: 136 # Resulting sum - indexes: data: :label sum_256 network: - ">=Cancun" result: : storage: 0: 0xebd141d5 # Call to sumTo(uint) 1: 1 # Call was successful 00000000000000000000000000000000ebd141d5: storage: 1: 256 # Sum 1+2+3+...+256 2: 1 # Call successful 3: 32896 # Resulting sum - indexes: data: :label callback_sum_10 network: - ">=Cancun" result: : storage: 0: 0x5114e2c8 # Call to callbackSum(uint) 1: 1 # Call was successful # Sum where there's an intervening contract 000000000000000000000000000000005114e2c8: storage: 1: 10 # Sum 1+2+3+...+10 2: 1 # Call successful 3: 55 # Resulting sum # The transient storage of the contract in the middle is untouched 00000000000000000000000000000000ca11bacc: storage: 0: 0 1: 0 - indexes: data: :label callback_sum_50 network: - ">=Cancun" result: : storage: 0: 0x5114e2c8 # Call to callbackSum(uint) 1: 1 # Call was successful # Sum where there's an intervening contract 000000000000000000000000000000005114e2c8: storage: 1: 50 # Sum 1+2+3+...+50 2: 1 # Call successful 3: 1275 # Resulting sum # The transient storage of the contract in the middle is untouched 00000000000000000000000000000000ca11bacc: storage: 0: 0 1: 0 - indexes: data: :label bin_tree_6 network: - ">=Cancun" result: : storage: 0: 0x264bb86a # Call to binTree(uint) 1: 1 # Call was successful # Binary tree, showing that transients work correctly when there are two # calls to the contract 00000000000000000000000000000000264bb86a: storage: 1: 6 # Get 2^6 2: 1 # Call successful 3: 63 # Resulting power - indexes: data: :label delegate_bin_tree_6 network: - ">=Cancun" result: : storage: 0: 0x7074a486 # Call to delegateBinTree(uint) 1: 1 # Call was successful # Binary tree, showing that transients work correctly when there are two # calls to the contract 000000000000000000000000000000007074a486: storage: 1: 6 # Get 2^6 2: 1 # Call successful 3: 63 # Resulting power - indexes: data: :label inherit_trans network: - ">=Cancun" result: : storage: 0: 0x7f9317bd # Call to inheritTrans() 1: 1 # Call was successful # Show when transients are inherited and then they aren't 000000000000000000000000000000007f9317bd: storage: 0x00: 0 # Initial value 0x01: 1 # CALLCODE increments 0x02: 2 # DELEGATECODE increments 0x03: 2 # CALL does not increment (or rather, it increments its own storage) 0x11: 1 # CALLCODE success 0x12: 1 # DELEGATECALL success 0x13: 1 # CALL success - indexes: data: :label deep_call network: - ">=Cancun" result: : storage: 0: 0xc54b5829 # Call to deepCall() 1: 1 # Call was successful # Show transients are preserved even after a stack of CALLCODEs and # DELEGATECALLs 00000000000000000000000000000000c54b5829: storage: 0: 2 # Two updates, one at the top of the stack, one at the bottom - indexes: data: :label static_call network: - ">=Cancun" result: : storage: 0: 0x5d7935df # Call to staticCall() 1: 1 # Call was successful # Show that static calls have access to transient storage 000000000000000000000000000000005d7935df: storage: 0x00: 0x60A7 # After regular call 0x01: 0x60A7 # After static call 0x02: 0 # After failed static call 0x10: 1 # Regular call successful 0x11: 1 # Static call successful 0x12: 0 # Static call that attempts to TSTORE fails ================================================ FILE: tests/static/state_tests/Cancun/stEIP1153_transientStorage/transStorageResetFiller.yml ================================================ # Test that TSTORE followed by a revert does not affect code run afterwards # In general, the way these tests work is that the transaction calls 0xCCCCCC with # 36 bytes of data. Four bytes for a function signature and 32 for a parameter. # This is created using :abi funName(uint) # # 0xCCC....CCC then calls the contract that actually runs the test. The contract's address # is, conveniently, the four bytes of the signature. # # Note that because of the nature of transient storage, in most cases the test contract # has to call itself (directly or indirectly). This means it has to effectively have # at least two entry points. transStorageReset: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" pre: # Call reverter (the contract that called us) and then revert # # Byte 0: Type of call # 0xF1 - CALL # 0xF2 - CALLCODE # 0xF4 - DELEGATECALL # # Byte 1: Type of revert # 0x00 - RETURN (not a revert) # 0xFD - REVERT # 0xFE - Invalid # 0xFF - SELFDESTRUCT : balance: 0 nonce: 1 code: | :yul { // These two functions use transient storage. // Once the relevant opcodes are added to Yul, simply remove // them (from all contracts) and remove the _temp suffices. function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } let reverter := calldataload(0) let dead := calldataload(32) mstore(0, reverter) mstore(32, dead) let callType := byte(0x1E, calldataload(64)) let failType := byte(0x1F, calldataload(64)) let callRes := 0x7E57 switch callType // We cannot use caller() because if we were delegatecall()ed or // callcode()ed caller() is still 0xCCC...CCC case 0xF1 { callRes := call (gas(), reverter, 0, 0,64, 0,0) } case 0xF2 { callRes := callcode (gas(), reverter, 0, 0,64, 0,0) } case 0xF4 { callRes := delegatecall(gas(), reverter, 0,64, 0,0) } // Don't call anything, just set Trans[0] here. // Only meaningful with delegatecall() or callcode() case 0x00 { tstore_temp(0,0xBAD0BEEF) } // May end up in the reverter's storage (because of delegatecall / callcode) sstore(0x10, callRes) switch failType case 0x00 { stop() } case 0xFD { revert(0,0) } case 0xFE { invalid() } case 0xFF { selfdestruct(0x0) } } storage: 0x10: 0x60A7 # reverter(uint) # # Show that a TSTORE followed by a revert does not affect subsequent TLOADs. # This works by calling 0x00..0dead, which itself calls back this contract # and then reverts. # # The parameter includes three bytes: # # 0xAABBCC # # 0xAA - type of call between this contract and 0xDEAD # 0xBB - the type of call between 0xDEAD and back to this contract # 0xCC - the type of revert (or stop, invalid, etc.) : balance: 0 nonce: 1 code: | :yul { function tload_temp(loc) -> val { val := verbatim_1i_1o(hex"5C", loc) } function tstore_temp(loc, val) { verbatim_2i_0o(hex"5D", loc, val) } let reverter := calldataload(0) let dead := calldataload(32) mstore(0, reverter) mstore(32, dead) // The type of call to use here let callType := byte(0x1D, calldataload(64)) // Because we use DELEGATECALL in some cases, we cannot rely on caller() // (in a DELEGATECALL the caller is the one who called the contract that // has the storage. // First invocation, called by 0xCCCCC...CCCC if iszero(tload_temp(0)) { tstore_temp(0, 0x60A7) mstore(64, calldataload(64)) let callRes := 0 // We only send half the gas because the call may spend all // remaining gas and we don't want to revert let callGas := div(gas(), 2) switch callType case 0xF1 { callRes := call (callGas, dead, 0, 0,96, 0,0) } case 0xF2 { callRes := callcode (callGas, dead, 0, 0,96, 0,0) } case 0xF4 { callRes := delegatecall(callGas, dead, 0,96, 0,0) } // The result of the call to dead. Usually zero. sstore(1, callRes) sstore(0, tload_temp(0)) // We're done stop() } // If Trans[0] has this value, this is the second call if eq(tload_temp(0), 0x60A7) { tstore_temp(0, 0xBEEF) } } storage: 1: 0x60A7 # The contract called by the transaction # Receives ABI calldata # Bytes 0x00-0x03 (the function hash) is the address of the contract to call # Bytes 0x04-0x23 are the parameter (assume we only need one) : balance: 0 code: | :yul { let reverter := calldataload(4) let dead := calldataload(36) let param := calldataload(68) sstore(0, reverter) mstore(0, reverter) mstore(32, dead) mstore(64, param) sstore(1, call(gas(), reverter, 0, 0, 96, 0, 0)) } nonce: 1 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: 1 storage: {} transaction: data: # Reverter calls , which calls back the reverter - :label reverter-call-call-stop :abi reverter(uint,uint,uint) 0xF1F100 - :label reverter-call-call-revert :abi reverter(uint,uint,uint) 0xF1F1FD - :label reverter-call-call-invalid :abi reverter(uint,uint,uint) 0xF1F1FE # The reverter uses DELEGATECALL, and then uses CALL - :label reverter-delegate-call-stop :abi reverter(uint,uint,uint) 0xF4F100 - :label reverter-delegate-call-revert :abi reverter(uint,uint,uint) 0xF4F1FD - :label reverter-delegate-call-invalid :abi reverter(uint,uint,uint) 0xF4F1FE # The reverter uses CALLCODE, and then uses CALL - :label reverter-code-call-stop :abi reverter(uint,uint,uint) 0xF2F100 - :label reverter-code-call-revert :abi reverter(uint,uint,uint) 0xF2F1FD - :label reverter-code-call-invalid :abi reverter(uint,uint,uint) 0xF2F1FE # The reverter uses DELEGATECALL, and then uses DELEGATECALL - :label reverter-delegate-delegate-stop :abi reverter(uint,uint,uint) 0xF4F400 - :label reverter-delegate-delegate-revert :abi reverter(uint,uint,uint) 0xF4F4FD - :label reverter-delegate-delegate-invalid :abi reverter(uint,uint,uint) 0xF4F4FE # The reverter uses DELEGATECALL, and then uses CALLCODE - :label reverter-delegate-code-stop :abi reverter(uint,uint,uint) 0xF4F200 - :label reverter-delegate-code-revert :abi reverter(uint,uint,uint) 0xF4F2FD - :label reverter-delegate-code-invalid :abi reverter(uint,uint,uint) 0xF4F2FE # The reverter uses CALLCODE, and then uses DELEGATECALL - :label reverter-code-delegate-stop :abi reverter(uint,uint,uint) 0xF2F400 - :label reverter-code-delegate-revert :abi reverter(uint,uint,uint) 0xF2F4FD - :label reverter-code-delegate-invalid :abi reverter(uint,uint,uint) 0xF2F4FE # The reverter uses CALLCODE, and then uses CALLCODE - :label reverter-code-code-stop :abi reverter(uint,uint,uint) 0xF2F200 - :label reverter-code-code-revert :abi reverter(uint,uint,uint) 0xF2F2FD - :label reverter-code-code-invalid :abi reverter(uint,uint,uint) 0xF2F2FE # The reverter calls , which sets Trans[0] by itself # A meaningless exercise, because it is different transient storage than # the reverter - :label reverter-call-nop-stop :abi reverter(uint,uint,uint) 0xF10000 - :label reverter-call-nop-revert :abi reverter(uint,uint,uint) 0xF100FD - :label reverter-call-nop-invalid :abi reverter(uint,uint,uint) 0xF100FE # The reverter delegatecall()s or callcode()s , so Trans[0] changes. # Whether that change does anything or not depends on what happens afterwards - :label reverter-delegate-nop-stop :abi reverter(uint,uint,uint) 0xF40000 - :label reverter-delegate-nop-revert :abi reverter(uint,uint,uint) 0xF400FD - :label reverter-delegate-nop-invalid :abi reverter(uint,uint,uint) 0xF400FE - :label reverter-code-nop-stop :abi reverter(uint,uint,uint) 0xF20000 - :label reverter-code-nop-revert :abi reverter(uint,uint,uint) 0xF200FD - :label reverter-code-nop-invalid :abi reverter(uint,uint,uint) 0xF200FE # In Cancun SELFDESTRUCT https://eips.ethereum.org/EIPS/eip-6780 acts like # STOP except it sends all the contract's funds somewhere. Until I have a geth # that supports this behavior, I can't write a test to check for it. # - :label reverter-call-call-selfdestruct :abi reverter(uint,uint,uint) 0xF1F1FF # - :label reverter-delegate-call-selfdestruct :abi reverter(uint,uint,uint) 0xF4F1FF # - :label reverter-code-call-selfdestruct :abi reverter(uint,uint,uint) 0xF2F1FF # - :label reverter-delegate-delegate-selfdestruct :abi reverter(uint,uint,uint) 0xF4F4FF # - :label reverter-delegate-code-selfdestruct :abi reverter(uint,uint,uint) 0xF4F2FF # - :label reverter-code-delegate-selfdestruct :abi reverter(uint,uint,uint) 0xF2F4FF # - :label reverter-code-code-selfdestruct :abi reverter(uint,uint,uint) 0xF2F2FF # - :label reverter-call-nop-selfdestruct :abi reverter(uint,uint,uint) 0xF100FF # - :label reverter-delegate-nop-selfdestruct :abi reverter(uint,uint,uint) 0xF400FF # - :label reverter-code-nop-selfdestruct :abi reverter(uint,uint,uint) 0xF200FF gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: value: - '0' secretKey: '' expect: - indexes: data: - :label reverter-call-call-stop network: - ">=Cancun" result: : storage: 0: # Call to reverter(uint) 1: 1 # Call was successful : storage: 0x00: 0xBEEF # The call with tstore(0, 0xBEEF) was successful 0x01: 1 # The call was successful : storage: 0x10: 0x01 # call was successful # Because the first call is CALLCODE or DELEGATECALL, the SSTORE in 0xDEAD # Writes to the storage of 0x003f8390d5 - indexes: data: - :label reverter-delegate-call-stop - :label reverter-code-call-stop - :label reverter-delegate-delegate-stop - :label reverter-delegate-code-stop - :label reverter-code-delegate-stop - :label reverter-code-code-stop network: - ">=Cancun" result: : storage: 0: # Call to reverter(uint) 1: 1 # Call was successful : storage: 0x00: 0xBEEF # The call with tstore(0, 0xBEEF) was successful 0x01: 1 # The call was successful 0x10: 0x01 # 0xDEAD's call was successful - indexes: data: - :label reverter-delegate-nop-stop - :label reverter-code-nop-stop network: - ">=Cancun" result: : storage: 0: # Call to reverter(uint) 1: 1 # Call was successful : storage: 0x00: 0xBAD0BEEF # The call with tstore(0, 0xBAD0BEEF) was successful 0x01: 1 # The call was successful 0x10: 0x7E57 # 0xDEAD didn't have any call, so the result stayed 0x7E57 # The main test. If 0xDEAD reverts, the call inside it that changed the transient # storage does not have any effect. - indexes: data: - :label reverter-call-call-revert - :label reverter-call-call-invalid - :label reverter-delegate-call-revert - :label reverter-delegate-call-invalid - :label reverter-code-call-revert - :label reverter-code-call-invalid - :label reverter-delegate-delegate-revert - :label reverter-delegate-delegate-invalid - :label reverter-delegate-code-revert - :label reverter-delegate-code-invalid - :label reverter-code-delegate-revert - :label reverter-code-delegate-invalid - :label reverter-code-code-revert - :label reverter-code-code-invalid - :label reverter-call-nop-revert - :label reverter-call-nop-invalid - :label reverter-delegate-nop-revert - :label reverter-delegate-nop-invalid - :label reverter-code-nop-revert - :label reverter-code-nop-invalid network: - ">=Cancun" result: : storage: 0: # Call to reverter(uint) 1: 1 # Call was successful : storage: 0x00: 0x60A7 # The call with tstore(0, 0xBEEF) or tstore(0, 0xBAD0BEEF) # reverted 0x01: 0 # The call failed : storage: # Reverted call, storage unchanged 0x10: 0x60A7 # The reverter calls 0xDEAD, which then stops (no revert). However, # because it was a CALL, 0xDEAD has different transient storage from # the reverter. - indexes: data: - :label reverter-call-nop-stop network: - ">=Cancun" result: : storage: 0: # Call to reverter(uint) 1: 1 # Call was successful : storage: 0x00: 0x60A7 # The call with tstore(0, 0xBAD0BEEF) was in a different Trans 0x01: 1 # The call was successful : storage: # Nothing overwrites the return value 0x10: 0x7E57 ================================================ FILE: tests/static/state_tests/Cancun/stEIP4844_blobtransactions/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Cancun/stEIP4844_blobtransactions/createBlobhashTxFiller.yml ================================================ # nimbus blobhash test createBlobhashTx: _info: comment: BLOB002 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000000 currentBaseFee: 7 currentExcessBlobGas: 0 expect: - network: - '>=Cancun' result: : storage: 0x00: 0 expectException: '>=Cancun': TransactionException.TYPE_3_TX_CONTRACT_CREATION pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (BLOBHASH 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 maxFeePerGas: '0x12A05F200' maxPriorityFeePerGas: '2' gasLimit: - '4000000' nonce: '0' to: '' value: - '100000' secretKey: "" maxFeePerBlobGas: '10' blobVersionedHashes: - "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" ================================================ FILE: tests/static/state_tests/Cancun/stEIP4844_blobtransactions/emptyBlobhashListFiller.yml ================================================ # nimbus blobhash test emptyBlobhashList: _info: comment: BLOB000 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000000 currentBaseFee: 7 currentExcessBlobGas: 0 expect: - network: - '>=Cancun' result: : storage: 0x00: 0 expectException: '>=Cancun': TransactionException.TYPE_3_TX_ZERO_BLOBS pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (BLOBHASH 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 maxFeePerGas: '0x12A05F200' maxPriorityFeePerGas: '2' gasLimit: - '4000000' nonce: '0' to: value: - '100000' secretKey: "" maxFeePerBlobGas: '10' blobVersionedHashes: [] ================================================ FILE: tests/static/state_tests/Cancun/stEIP4844_blobtransactions/opcodeBlobhBoundsFiller.yml ================================================ # nimbus blobhash test opcodeBlobhBounds: _info: comment: BLOB005 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000000 currentBaseFee: 1 currentExcessBlobGas: 0 expect: - network: - '>=Cancun' result: : storage: 0x00: 0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (BLOBHASH 0) [[1]] (BLOBHASH 10) [[2]] (BLOBHASH 0xffffffff) ; 32 [[3]] (BLOBHASH 0xffffffffffffffff) ; 64 [[4]] (BLOBHASH 0xffffffffffffffffffffffffffffffff) ; 128 [[5]] (BLOBHASH 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) ; 256 } nonce: '0' storage: 0x00: 0x01 0x01: 0x01 0x02: 0x01 0x03: 0x01 0x04: 0x01 0x05: 0x01 : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 maxFeePerGas: '0x12A05F200' maxPriorityFeePerGas: '2' gasLimit: - '4000000' nonce: '0' to: '' value: - '100000' secretKey: "" maxFeePerBlobGas: '10' blobVersionedHashes: - "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" - "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" ================================================ FILE: tests/static/state_tests/Cancun/stEIP4844_blobtransactions/opcodeBlobhashOutOfRangeFiller.yml ================================================ # nimbus blobhash test opcodeBlobhashOutOfRange: _info: comment: BLOB003, BLOB004 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000000 currentBaseFee: 7 currentExcessBlobGas: 0 expect: - network: - '>=Cancun' result: : storage: 0x00: 0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (BLOBHASH 0) [[1]] (BLOBHASH 10) } nonce: '0' storage: 0x00: 0x01 0x01: 0x01 : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 maxFeePerGas: '0x12A05F200' maxPriorityFeePerGas: '2' gasLimit: - '4000000' nonce: '0' to: '' value: - '100000' secretKey: "" maxFeePerBlobGas: '10' blobVersionedHashes: - "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" - "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" ================================================ FILE: tests/static/state_tests/Cancun/stEIP4844_blobtransactions/wrongBlobhashVersionFiller.yml ================================================ # nimbus blobhash test wrongBlobhashVersion: _info: comment: BLOB001 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000000 currentBaseFee: 7 currentExcessBlobGas: 0 expect: - network: - '>=Cancun' result: : storage: 0x00: 0 expectException: '>=Cancun': TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (BLOBHASH 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 maxFeePerGas: '0x12A05F200' maxPriorityFeePerGas: '2' gasLimit: - '4000000' nonce: '0' to: value: - '100000' secretKey: "" maxFeePerBlobGas: '10' blobVersionedHashes: - "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" - "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" ================================================ FILE: tests/static/state_tests/Cancun/stEIP5656_MCOPY/MCOPYFiller.yml ================================================ MCOPY: _info: comment: MCOPY memory copy test cases env: currentNumber: 1 currentTimestamp: 1687174231 currentGasLimit: 1000000 currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba pre: # Executed code (transaction destination) : balance: 0 nonce: 1 code: | :yul { function mcopy(dst, src, size) { verbatim_3i_0o(hex"5e", dst, src, size) } // Fill memory at [0-96] (3x32) with the pattern of unique bytes. mstore( 0, 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF) mstore(32, 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF) mstore(64, 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF) // MCOPY using parameters from CALLDATA. mcopy(calldataload(0), calldataload(32), calldataload(64)) // Dump memory at [0-96] to 3 storage slots. sstore(0, mload( 0)) sstore(1, mload(32)) sstore(2, mload(64)) } storage: { } # Transaction sender : balance: 1000000000 nonce: 0 code: '' storage: { } transaction: to: nonce: 0 gasLimit: - 1000000 gasPrice: 10 value: - 0 secretKey: "" data: - > :label forward_size0_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - > :label forward_size0_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000000 - > :label backward_size0_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000000 - > :label backward_size0_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000000 - > :label inplace_size0_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - > :label inplace_size0_1 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000000 - > :label forward_overlapped_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000002 - > :label forward_overlapped_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000000000000001f - > :label forward_disjoint_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000001f - > :label forward_disjoint_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000002 - > :label forward_adjacent_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000002 - > :label forward_adjacent_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000001 - > :label backward_overlapped_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000021 - > :label backward_overlapped_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000021 - > :label backward_disjoint_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000020 - > :label backward_disjoint_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000001 - > :label backward_adjacent_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000020 - > :label backward_adjacent_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000001 - > :label inplace_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000001 - > :label inplace_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000002 0000000000000000000000000000000000000000000000000000000000000033 expect: - indexes: data: - :label forward_size0_0 - :label forward_size0_1 - :label backward_size0_0 - :label backward_size0_1 - :label inplace_size0_0 - :label inplace_size0_1 - :label inplace_0 - :label inplace_1 network: - '>=Cancun' result: : storage: 0: 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label forward_overlapped_0 network: - '>=Cancun' result: : storage: 0: 0xa0a0a1a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label forward_overlapped_1 network: - '>=Cancun' result: : storage: 0: 0xa0a1a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbE 1: 0xbFc1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label forward_disjoint_0 network: - '>=Cancun' result: : storage: 0: 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label forward_disjoint_1 network: - '>=Cancun' result: : storage: 0: 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xa1a2c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label forward_adjacent_0 network: - '>=Cancun' result: : storage: 0: 0xa0a1a0a1a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label forward_adjacent_1 network: - '>=Cancun' result: : storage: 0: 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xbFc1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label backward_overlapped_0 network: - '>=Cancun' result: : storage: 0: 0xbFc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdE 1: 0xdFc1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label backward_overlapped_1 network: - '>=Cancun' result: : storage: 0: 0xa0a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbFc0 1: 0xc1c2c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label backward_disjoint_0 network: - '>=Cancun' result: : storage: 0: 0xc1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdFe0 1: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label backward_disjoint_1 network: - '>=Cancun' result: : storage: 0: 0xa0a1c1a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label backward_adjacent_0 network: - '>=Cancun' result: : storage: 0: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 1: 0xc0c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF - indexes: data: - :label backward_adjacent_1 network: - '>=Cancun' result: : storage: 0: 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF 1: 0xc1c1c2c3c4c5c6c7c8c9cAcBcCcDcEcFd0d1d2d3d4d5d6d7d8d9dAdBdCdDdEdF 2: 0xe0e1e2e3e4e5e6e7e8e9eAeBeCeDeEeFf0f1f2f3f4f5f6f7f8f9fAfBfCfDfEfF ================================================ FILE: tests/static/state_tests/Cancun/stEIP5656_MCOPY/MCOPY_copy_costFiller.yml ================================================ MCOPY_copy_cost: _info: comment: Test cases for the cost of memory copy in the MCOPY instruction env: currentNumber: 1 currentTimestamp: 1687174231 currentGasLimit: 1000000 currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba pre: # Executed code (transaction destination) : balance: 0 nonce: 1 code: | :yul shanghai optimise { function mcopy(dst, src, size) { verbatim_3i_0o(hex"5e", dst, src, size) } // Put a flag in storage indicating successful execution (will be reverted in case of OOG). sstore(0, 1) // Expand memory to cover memory expansion cost before MCOPY. // The test uses up to 1400 memory words. mstore(44800, 1) // MCOPY using src and size from CALLDATA to 0 destination. mcopy(0, calldataload(0), calldataload(32)) } storage: { } # Transaction sender : balance: 1000000000 nonce: 0 code: '' storage: { } transaction: to: nonce: 0 gasLimit: # Every test case should pass easily. The amount of gas consumed is reflected in the sender's balance update. - 100000 # Cut-off point for the copy of size 44769 (1399*32+1) to go out-of-gas. # This may be unstable because of yul compiler updates or gas cost changes in upgrades after Cancun. # Also, the transaction data cost affects this, so the value has been tuned to src0 cases. - 55697 gasPrice: 10 value: - 0 secretKey: "" data: - > :label src0_size0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - > :label src0_size1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000001 - > :label src0_size31 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000001f - > :label src0_size32 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000020 - > :label src0_size33 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000021 - > :label src0_size44767 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000aedf - > :label src0_size44768 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000aee0 - > :label src0_size44769 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000aee1 - > :label src1_size0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000000 - > :label src1_size1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000001 - > :label src1_size31 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000000000000001f - > :label src1_size32 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000020 - > :label src1_size33 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000021 - > :label src1_size44767 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000000000000aedf - > :label src1_size44768 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000000000000aee0 - > :label src1_size44769 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000000000000aee1 - > :label src31_size0 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000000 - > :label src31_size1 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000001 - > :label src31_size31 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 000000000000000000000000000000000000000000000000000000000000001f - > :label src31_size32 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000020 - > :label src31_size33 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000021 - > :label src31_size44767 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 000000000000000000000000000000000000000000000000000000000000aedf - > :label src31_size44768 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 000000000000000000000000000000000000000000000000000000000000aee0 - > :label src31_size44769 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 000000000000000000000000000000000000000000000000000000000000aee1 - > :label src32_size0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000000 - > :label src32_size1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000001 - > :label src32_size31 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 000000000000000000000000000000000000000000000000000000000000001f - > :label src32_size32 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000020 - > :label src32_size33 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 0000000000000000000000000000000000000000000000000000000000000021 - > :label src32_size44767 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 000000000000000000000000000000000000000000000000000000000000aedf - > :label src32_size44768 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 000000000000000000000000000000000000000000000000000000000000aee0 - > :label src32_size44769 :raw 0x 0000000000000000000000000000000000000000000000000000000000000020 000000000000000000000000000000000000000000000000000000000000aee1 expect: - indexes: gas: !!int 0 data: - :label src0_size0 - :label src0_size1 - :label src0_size31 - :label src0_size32 - :label src0_size33 - :label src0_size44767 - :label src0_size44768 - :label src0_size44769 - :label src1_size0 - :label src1_size1 - :label src1_size31 - :label src1_size32 - :label src1_size33 - :label src1_size44767 - :label src1_size44768 - :label src1_size44769 - :label src31_size0 - :label src31_size1 - :label src31_size31 - :label src31_size32 - :label src31_size33 - :label src31_size44767 - :label src31_size44768 - :label src31_size44769 - :label src32_size0 - :label src32_size1 - :label src32_size31 - :label src32_size32 - :label src32_size33 - :label src32_size44767 - :label src32_size44768 - :label src32_size44769 network: - '>=Cancun' result: : storage: 0: 1 - indexes: gas: !!int 1 data: - :label src0_size0 - :label src0_size1 - :label src0_size31 - :label src0_size32 - :label src0_size33 - :label src0_size44767 - :label src0_size44768 - :label src1_size0 - :label src1_size1 - :label src1_size31 - :label src1_size32 - :label src1_size33 - :label src31_size0 - :label src31_size1 - :label src31_size31 - :label src31_size32 - :label src31_size33 - :label src32_size0 - :label src32_size1 - :label src32_size31 - :label src32_size32 - :label src32_size33 - :label src0_size44769 network: - '>=Cancun' result: : storage: 0: 1 - indexes: gas: !!int 1 data: # Can't regenerate this vectors as failed, now all works - :label src1_size44767 - :label src1_size44768 - :label src1_size44769 - :label src31_size44767 - :label src31_size44768 - :label src31_size44769 - :label src32_size44768 - :label src32_size44769 - :label src32_size44767 network: - '>=Cancun' result: : storage: 0: 0 ================================================ FILE: tests/static/state_tests/Cancun/stEIP5656_MCOPY/MCOPY_memory_expansion_costFiller.yml ================================================ MCOPY_memory_expansion_cost: _info: comment: Test cases for the memory expansion cost in the MCOPY instruction env: currentNumber: 1 currentTimestamp: 1687174231 currentGasLimit: 1000000 currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba pre: # Executed code (transaction destination) : balance: 0 nonce: 1 code: | :yul { function mcopy(dst, src, size) { verbatim_3i_0o(hex"5e", dst, src, size) } // Take most of the SSTORE cost before MCOPY. sstore(0, 1) // MCOPY using parameters from CALLDATA. mcopy(calldataload(0), calldataload(32), calldataload(64)) // Put MSIZE in storage. sstore(0, msize()) } storage: 0: fa11ed # Placeholder for final MSIZE value (memory size is a multiply of 32) # Transaction sender : balance: 1000000000 nonce: 0 code: '' storage: { } transaction: to: nonce: 0 gasLimit: - 100000 gasPrice: 10 value: - 0 secretKey: "" data: - > :label dst0_src0_size0 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - > :label dst0_src31_size706 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000001f 00000000000000000000000000000000000000000000000000000000000002c2 - > :label dst31_src0_size706 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000002c2 - > :label dst62_src31_size706 :raw 0x 000000000000000000000000000000000000000000000000000000000000003e 000000000000000000000000000000000000000000000000000000000000001f 00000000000000000000000000000000000000000000000000000000000002c2 - > :label dst31_src62_size706 :raw 0x 000000000000000000000000000000000000000000000000000000000000001f 000000000000000000000000000000000000000000000000000000000000003e 00000000000000000000000000000000000000000000000000000000000002c2 - > :label dst62_src62_size706 :raw 0x 000000000000000000000000000000000000000000000000000000000000003e 000000000000000000000000000000000000000000000000000000000000003e 00000000000000000000000000000000000000000000000000000000000002c2 - > :label dst64_src0_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000040 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst0_src64_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000040 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst64_src33_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000040 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst33_src64_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000040 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst1_src33_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst33_src1_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst33_src33_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000021 0000000000000000000000000000000000000000000000000000000000000540 - > :label dst64_src64_size1344 :raw 0x 0000000000000000000000000000000000000000000000000000000000000040 0000000000000000000000000000000000000000000000000000000000000040 0000000000000000000000000000000000000000000000000000000000000540 - > :label huge_size0 :raw 0x ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000000000000000000000000000000000000000000000000000000000000000 - > :label huge_src0_size1 :raw 0x ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000001 - > :label huge_dst0_size1 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000000000000000000000000000000000000000000000000000000000000001 - > :label huge_size_n255 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 8000000000000000000000000000000000000000000000000000000000000000 - > :label huge_dst0_size_n256 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000001 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - > :label huge_src0_size_n256 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - > :label huge_size_n63 :raw 0x 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000008000000000000000 - > :label huge_size_n64 :raw 0x 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000ffffffffffffffff expect: - indexes: data: - :label dst0_src0_size0 - :label huge_size0 network: - '>=Cancun' result: : storage: 0: 0 - indexes: data: - :label dst0_src31_size706 - :label dst31_src0_size706 - :label dst62_src31_size706 - :label dst31_src62_size706 - :label dst62_src62_size706 network: - '>=Cancun' result: : storage: 0: 768 - indexes: data: - :label dst64_src0_size1344 - :label dst0_src64_size1344 - :label dst64_src33_size1344 - :label dst33_src64_size1344 - :label dst1_src33_size1344 - :label dst33_src1_size1344 - :label dst33_src33_size1344 - :label dst64_src64_size1344 network: - '>=Cancun' result: : storage: 0: 1408 - indexes: data: - :label huge_src0_size1 - :label huge_dst0_size1 - :label huge_size_n255 - :label huge_dst0_size_n256 - :label huge_src0_size_n256 - :label huge_size_n63 - :label huge_size_n64 network: - '>=Cancun' result: : storage: 0: fa11ed ================================================ FILE: tests/static/state_tests/Cancun/stEIP5656_MCOPY/MCOPY_memory_hashFiller.yml ================================================ MCOPY_memory_hash: _info: comment: Performs exact the same MCOPY twice and dumps the hash of all memory after each MCOPY env: currentNumber: 1 currentTimestamp: 1687174231 currentGasLimit: 1000000 currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba pre: # Executed code (transaction destination) : balance: 0 nonce: 1 code: | :yul { function mcopy(dst, src, size) { verbatim_3i_0o(hex"5e", dst, src, size) } // Fill one word of memory at 0x1020 with the pattern of unique bytes. mstore(0x1020, 0xa0a1a2a3a4a5a6a7a8a9aAaBaCaDaEaFb0b1b2b3b4b5b6b7b8b9bAbBbCbDbEbF) // MCOPY using parameters from CALLDATA. mcopy(calldataload(0), calldataload(32), calldataload(64)) // Dump the hash of full memory. sstore(1, keccak256(0, msize())) // Do exact the same MCOPY once again. mcopy(calldataload(0), calldataload(32), calldataload(64)) // Dump the hash of full memory again. sstore(2, keccak256(0, msize())) } storage: { } # Transaction sender : balance: 1000000000 nonce: 0 code: '' storage: { } transaction: to: nonce: 0 gasLimit: - 1000000 gasPrice: 10 value: - 0 secretKey: "" data: - > :label clear_low_half_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000001010 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000020 - > :label clear_low_half_1 :raw 0x 0000000000000000000000000000000000000000000000000000000000001020 0000000000000000000000000000000000000000000000000000000000001010 0000000000000000000000000000000000000000000000000000000000000010 - > :label clear_low_half_2 :raw 0x 0000000000000000000000000000000000000000000000000000000000001020 0000000000000000000000000000000000000000000000000000000000001040 0000000000000000000000000000000000000000000000000000000000000010 - > :label clear_high_half_0 :raw 0x 0000000000000000000000000000000000000000000000000000000000001030 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001020 - > :label memmove_forward :raw 0x 0000000000000000000000000000000000000000000000000000000000001021 0000000000000000000000000000000000000000000000000000000000001020 0000000000000000000000000000000000000000000000000000000000000123 - > :label memmove_backward :raw 0x 0000000000000000000000000000000000000000000000000000000000001020 0000000000000000000000000000000000000000000000000000000000001023 000000000000000000000000000000000000000000000000000000000000001d expect: - indexes: data: - :label clear_low_half_0 - :label clear_low_half_1 network: - '>=Cancun' result: : storage: 1: 0x1a75c0c32a7dc05e25e0f0280e8ee7456edc0092a13a86ed7d20c8edc87fcba9 2: 0x1a75c0c32a7dc05e25e0f0280e8ee7456edc0092a13a86ed7d20c8edc87fcba9 - indexes: data: - :label clear_low_half_2 network: - '>=Cancun' result: : storage: 1: 0x6a1cf6752c1b8df514452c3004a65c46b1afe7e52030e8100adfb036c180172e 2: 0x6a1cf6752c1b8df514452c3004a65c46b1afe7e52030e8100adfb036c180172e - indexes: data: - :label clear_high_half_0 network: - '>=Cancun' result: : storage: 1: 0x6216fe67a1c972fc4bf45303ab3449e0e30c6964d2d458cb786233f9f2afe595 2: 0x6216fe67a1c972fc4bf45303ab3449e0e30c6964d2d458cb786233f9f2afe595 - indexes: data: - :label memmove_forward network: - '>=Cancun' result: : storage: 1: 0xb04d651a3b0932c57cb624b7e0bbcc5bc5a546ec5805ebca5b95cec66f695def 2: 0xc10df02254713fafe8ed614f51f5e8fa111578a060ecc8bb28e56f4ece9a82ee - indexes: data: - :label memmove_backward network: - '>=Cancun' result: : storage: 1: 0xf6a2c41ad18ff89feebf7b54a7bac01e27eb1fb3c3ae8919e2fdb4b7c704ca70 2: 0xdedd31c55b058c4165ce1daec55b4811a781d716fc87e249a4c0b829196acc2f ================================================ FILE: tests/static/state_tests/Cancun/stEIP5656_MCOPY/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/README.md ================================================ # Static State Tests This directory contains static state test files that were originally located at [GeneralStateTestsFiller](https://github.com/ethereum/tests/tree/7dc757ec132e372b6178a016b91f4c639f366c02/src/GeneralStateTestsFiller). ================================================ FILE: tests/static/state_tests/Shanghai/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3651_warmcoinbase/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3651_warmcoinbase/coinbaseWarmAccountCallGasFailFiller.yml ================================================ # Check the call is successful due to barely enough gas, only when coinbase is warm coinbaseWarmAccountCallGasFail: env: currentCoinbase: currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Depending on the called contract here, the subcall will perform // another call/delegatecall/staticcall/callcode that will only succeed // if coinbase is considered warm by default (post-Shanghai). let calladdr := calldataload(4) let callgas := 100 switch calladdr case { // Extra: COINBASE + 6xPUSH1 + DUP6 + 2xPOP callgas := add(callgas, 27) } case { // Extra: COINBASE + 6xPUSH1 + DUP6 + 2xPOP callgas := add(callgas, 27) } case { // Extra: COINBASE + 5xPUSH1 + DUP6 + 2xPOP callgas := add(callgas, 24) } case { // Extra: COINBASE + 5xPUSH1 + DUP6 + 2xPOP callgas := add(callgas, 24) } // Call and save result sstore(0, call(callgas, calladdr, 0, 0, 0, 0, 0)) } nonce: 1 storage: {} # Call : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let cb := coinbase() pop(call(0, cb, 0, 0, 0, 0, 0)) } nonce: 1 storage: {} # CallCode : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let cb := coinbase() pop(callcode(0, cb, 0, 0, 0, 0, 0)) } nonce: 1 storage: {} # DelegateCall : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let cb := coinbase() pop(delegatecall(0, cb, 0, 0, 0, 0)) } nonce: 1 storage: {} # StaticCall : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let cb := coinbase() pop(staticcall(0, cb, 0, 0, 0, 0)) } nonce: 1 storage: {} # This account is coinbase and will receive the call/staticcall/delegatecall/callcode : balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: # CALL - WRMCB0009 - :abi f(uint) # CALLCODE - WRMCB0010 - :abi f(uint) # DELEGATECALL - WRMCB0011 - :abi f(uint) # STATICCALL - WRMCB0012 - :abi f(uint) gasLimit: - 80000 gasPrice: 10 nonce: 1 to: value: - 0 secretKey: '' expect: - network: - '>=Cancun' result: : storage: # Coinbase access post-Shanghai is warm, hence subcall has enough gas and succeeds 0x0: 1 ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3651_warmcoinbase/coinbaseWarmAccountCallGasFiller.yml ================================================ # Check the gas cost of accessing the coinbase account using different opcodes coinbaseWarmAccountCallGas: env: currentCoinbase: currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Save the coinbase value let cb := coinbase() // Minimum gas spent on the measurement, which changes depending on // the tested opcode // // Note that this value can change (mostly down) when Yul rolls out new // optimizations let measureGas let gas0, gas1 let retVal // We can only check the gas of one opcode per transaction, // because the first check adds the account to the // 'accessed_addresses' list. switch calldataload(4) case 0 { // EXTCODESIZE measureGas := 8 gas0 := gas() retVal := extcodesize(cb) gas1 := gas() } case 1 { // EXTCODECOPY measureGas := 5 gas0 := gas() extcodecopy(cb, 0, 0, 0) gas1 := gas() } case 2 { // EXTCODEHASH measureGas := 8 gas0 := gas() retVal := extcodehash(cb) gas1 := gas() } case 3 { // BALANCE measureGas := 8 gas0 := gas() retVal := balance(cb) gas1 := gas() } case 4 { // CALL measureGas := 11 gas0 := gas() retVal := call(10000, cb, 0, 0, 0, 0, 0) gas1 := gas() } case 5 { // CALLCODE measureGas := 11 gas0 := gas() retVal := callcode(10000, cb, 0, 0, 0, 0, 0) gas1 := gas() } case 6 { // DELEGATECALL measureGas := 11 gas0 := gas() retVal := delegatecall(10000, cb, 0, 0, 0, 0) gas1 := gas() } case 7 { // STATICCALL measureGas := 11 gas0 := gas() retVal := staticcall(10000, cb, 0, 0, 0, 0) gas1 := gas() } default { revert(0, 0) } // Save the measured gas sstore(0, sub(sub(gas0, gas1), measureGas)) mstore(0, retVal) return(0, 32) } nonce: 1 storage: {} : balance: 0x0ba1a9ce0ba1a9ce code: 0x nonce: 1 storage: {} : balance: 0x0ba1a9ce0ba1a9ce code: 0x nonce: 1 storage: {} transaction: data: # EXTCODESIZE - WRMCB0001 - :abi f(uint) 0 # EXTCODECOPY - WRMCB0002 - :abi f(uint) 1 # EXTCODEHASH - WRMCB0003 - :abi f(uint) 2 # BALANCE - WRMCB0004 - :abi f(uint) 3 # CALL - WRMCB0005 - :abi f(uint) 4 # CALLCODE - WRMCB0006 - :abi f(uint) 5 # DELEGATECALL - WRMCB0007 - :abi f(uint) 6 # STATICCALL - WRMCB0008 - :abi f(uint) 7 gasLimit: - 80000 gasPrice: 10 nonce: 1 to: value: - 0 secretKey: '' expect: - network: - '>=Cancun' result: : storage: # Coinbase access post-Shanghai is warm 0x0: 100 ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3855_push0/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3855_push0/push0Filler.yml ================================================ # EIP-3855: PUSH0 instruction push0: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '' nonce: '0' storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { sstore(0, call(100000, shr(96, calldataload(0)), 0, 0, 0, 0, 0)) sstore(1, 1) } nonce: 0 storage: {} 0000000000000000000000000000000000001000: balance: 0 # push1(01) push0 sstore code: ':raw 0x60015f55' nonce: '0' storage: {} 0000000000000000000000000000000000000200: balance: 0 # 1024 push0's, 1023 or's, push1(01) swap1 sstore code: ":raw 0x\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 60019055" nonce: '0' storage: {} 0000000000000000000000000000000000000300: balance: 0 # 1025 push0's code: ":raw 0x\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f" nonce: '0' storage: {} 0000000000000000000000000000000000000400: balance: 0 # Update already existing storage value # push1(02) push0 sstore push1(00) push1(01) sstore code: ':raw 0x60025f556000600155' nonce: '0' storage: {0: 0x0a, 1: 0x0a} 0000000000000000000000000000000000000500: balance: 0 code: | :yul berlin { sstore(0, staticcall(100000, 0x0000000000000000000000000000000000000600, 0, 0, 0, 0)) sstore(1, 1) returndatacopy(0x1f, 0x0, 0x1) sstore(0x2, mload(0x00)) } nonce: 0 storage: {} 0000000000000000000000000000000000000600: balance: 0 # push1(0xff) push0 mstore8 push1(0x01) push1(0x00) return code: ':raw 0x60ff5f5360016000f3' nonce: 0 storage: {} 0000000000000000000000000000000000000700: balance: 0 # Jumps to a JUMPDEST next to PUSH0 # push1(4) jump push0 jumpdest push1(1) push0 sstore stop code: ':raw 0x6004565f5b60015f5500' nonce: 0 storage: {} transaction: data: - ':label single_push0 :raw 0x0000000000000000000000000000000000001000' - ':label 1024_push0 :raw 0x0000000000000000000000000000000000000200' - ':label 1025_push0 :raw 0x0000000000000000000000000000000000000300' - ':label push0_upd_storage :raw 0x0000000000000000000000000000000000000400' - ':label push0_upd_storage_sc :raw 0x0000000000000000000000000000000000000500' - ':label jumpdest :raw 0x0000000000000000000000000000000000000700' gasLimit: - 700000 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: ':label single_push0' network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0x00: 0x01 # Contract executed correctly and saved data to storage b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract containing opcode PUSH0 (0x0..100) succeeded 0x01: 0x01 # Key 1 is filled after the call, indicating contract 0xb94... continued executing - indexes: data: ':label 1024_push0' network: - '>=Cancun' result: 0000000000000000000000000000000000000200: storage: 0x00: 0x01 # Contract executed correctly and saved data to storage b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract containing opcode PUSH0 (0x0..200) succeeded 0x01: 0x01 # Key 1 is filled after the call, indicating contract 0xb94... continued executing # Same expectation, but for London execution fails on 5f opcode, for 3855 it fails with stack overflow - indexes: data: ':label 1025_push0' network: - '>=Cancun' result: b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: # Key 0 remained empty, contract 0x0..300 failed 0x01: 0x01 # Key 1 filled after the call as the contract 0xb94... continued executing - indexes: data: ':label push0_upd_storage' network: - '>=Cancun' result: 0000000000000000000000000000000000000400: storage: # Contract executed and changed initial storage 0x00: 0x02 0x01: 0x00 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract 0x0..400 was successful 0x01: 0x01 # Filled after the call, indicating contract 0xb84 continued executing - indexes: data: ':label push0_upd_storage_sc' network: - '>=Cancun' result: 0000000000000000000000000000000000000500: storage: 0x00: 0x01 # Call to contract 0x0..0600 succeeded 0x01: 0x01 # Contract 0x0..500 continued executed and stored value 1. 0x02: 0xff # Value returned by contract 0x0..0600 0000000000000000000000000000000000000600: storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract 0x0..500 succeeded 0x01: 0x01 # Contract 0xb94f... continued executing and stored value 1. - indexes: data: ':label jumpdest' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000000700: storage: 0x00: 0x01 # Contract 0x0..700 jumped to correct destination and stored value 1. b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract 0x0..700 succeeded 0x01: 0x01 # Contract 0xb94f... continued executing and stored value 1. ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3855_push0/push0Filler_test.yml ================================================ # EIP-3855: PUSH0 instruction push0: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: : balance: 0x100000000000 code: '' nonce: '0' storage: {} : balance: 0 code: | :yul berlin { sstore(0, call(100000, shr(96, calldataload(0)), 0, 0, 0, 0, 0)) sstore(1, 1) } nonce: 0 storage: {} : balance: 0 # push1(01) push0 sstore code: ':raw 0x60015f55' nonce: '0' storage: {} : balance: 0 # 1024 push0's, 1023 or's, push1(01) swap1 sstore code: ":raw 0x\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 17171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717\ 60019055" nonce: '0' storage: {} : balance: 0 # 1025 push0's code: ":raw 0x\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\ 5f" nonce: '0' storage: {} : balance: 0 # Update already existing storage value # push1(02) push0 sstore push1(00) push1(01) sstore code: ':raw 0x60025f556000600155' nonce: '0' storage: {0: 0x0a, 1: 0x0a} : balance: 0 code: | :yul berlin { sstore(0, staticcall(100000, , 0, 0, 0, 0)) sstore(1, 1) returndatacopy(0x1f, 0x0, 0x1) sstore(0x2, mload(0x00)) } nonce: 0 storage: {} : balance: 0 # push1(0xff) push0 mstore8 push1(0x01) push1(0x00) return code: ':raw 0x60ff5f5360016000f3' nonce: 0 storage: {} : balance: 0 # Jumps to a JUMPDEST next to PUSH0 # push1(4) jump push0 jumpdest push1(1) push0 sstore stop code: ':raw 0x6004565f5b60015f5500' nonce: 0 storage: {} transaction: data: - ':label single_push0 :raw ' - ':label 1024_push0 :raw ' - ':label 1025_push0 :raw ' - ':label push0_upd_storage :raw ' - ':label push0_upd_storage_sc :raw ' - ':label jumpdest :raw ' gasLimit: - 700000 gasPrice: 10 nonce: 0 secretKey: "" to: '' value: - 0 expect: - indexes: data: ':label single_push0' network: - '>=Cancun' result: : storage: 0x00: 0x01 # Contract executed correctly and saved data to storage b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract containing opcode PUSH0 (0x0..100) succeeded 0x01: 0x01 # Key 1 is filled after the call, indicating contract 0xb94... continued executing - indexes: data: ':label 1024_push0' network: - '>=Cancun' result: : storage: 0x00: 0x01 # Contract executed correctly and saved data to storage b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract containing opcode PUSH0 (0x0..200) succeeded 0x01: 0x01 # Key 1 is filled after the call, indicating contract 0xb94... continued executing # Same expectation, but for London execution fails on 5f opcode, for 3855 it fails with stack overflow - indexes: data: ':label 1025_push0' network: - '>=Cancun' result: : storage: # Key 0 remained empty, contract 0x0..300 failed 0x01: 0x01 # Key 1 filled after the call as the contract 0xb94... continued executing - indexes: data: ':label push0_upd_storage' network: - '>=Cancun' result: : storage: # Contract executed and changed initial storage 0x00: 0x02 0x01: 0x00 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract 0x0..400 was successful 0x01: 0x01 # Filled after the call, indicating contract 0xb84 continued executing - indexes: data: ':label push0_upd_storage_sc' network: - '>=Cancun' result: : storage: 0x00: 0x01 # Call to contract 0x0..0600 succeeded 0x01: 0x01 # Contract 0x0..500 continued executed and stored value 1. 0x02: 0xff # Value returned by contract 0x0..0600 0000000000000000000000000000000000000600: storage: {} : storage: 0x00: 0x01 # Call to contract 0x0..500 succeeded 0x01: 0x01 # Contract 0xb94f... continued executing and stored value 1. - indexes: data: ':label jumpdest' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x01 # Contract 0x0..700 jumped to correct destination and stored value 1. b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 0x01 # Call to contract 0x0..700 succeeded 0x01: 0x01 # Contract 0xb94f... continued executing and stored value 1. ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3855_push0/push0Gas2Filler.yml ================================================ # EIP-3855: PUSH0 instruction - test for gas cost push0Gas2: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 10000000 code: '' nonce: '0' storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { sstore(0, call(100000, shr(96, calldataload(0)), 0, 0, 0, 0, 0)) sstore(1, 1) } nonce: 0 storage: {} 0000000000000000000000000000000000001000: balance: 0 # Calculates the difference between initial gas and gas after using # PUSH0, stores the result in storage key 0x00 # gas push0 gas swap1 swap2 sub swap1 sstore code: ':raw 0x5a5f5a9091039055' nonce: '0' storage: {} 0000000000000000000000000000000000000200: balance: 0 # Calculates the difference between initial gas and gas after using # PUSH1(0), stores the result in storage key 0x00 # gas push1(0) gas swap1 swap2 sub swap1 sstore code: ':raw 0x5a60005a9091039055' nonce: '0' storage: {} transaction: data: - ':label use_push0 :raw 0x0000000000000000000000000000000000001000' - ':label use_push1_00 :raw 0x0000000000000000000000000000000000000200' gasLimit: - 300000 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: ':label use_push0' network: - '>=Cancun' result: 0000000000000000000000000000000000001000: balance: 0 storage: # GAS PUSH0 0x00: 4 # 2 + 2 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 1 #Subcall successful 0x01: 1 - indexes: data: ':label use_push1_00' network: - '>=Cancun' result: 0000000000000000000000000000000000000200: balance: 0 storage: # GAS PUSH1(0) 0x00: 5 # 2 + 3 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: 0x00: 1 #Subcall successful 0x01: 1 ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3855_push0/push0GasFiller.yml ================================================ # EIP-3855: PUSH0 instruction - test for gas price push0Gas: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: : balance: 10000000 code: '' nonce: '0' storage: {} : balance: 0 # sstore(0, gas) push0 sstore(0, (sub(sload(0), gas))) stop code: ':raw 0x5a6000555f5a6000540360015500' nonce: '0' storage: {} transaction: data: - '' gasLimit: - 100000 gasPrice: 10 nonce: 0 secretKey: "" to: '' value: - 0 expect: - network: - '>=Cancun' result: : # Initial gas: 100000 # Initial Gas Intrinsic cost GAS # Initial EVM Gas: 78998 (100000 - 21000 - 2) # PUSH1 SSTORE PUSH0 GAS # Gas Used : 21107 ( 3 + 22100 + 2 + 2 ) storage: 0: 78998 1: 22107 ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3860_limitmeterinitcode/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3860_limitmeterinitcode/create2InitCodeSizeLimitFiller.yml ================================================ # CREATE2 with max allowed init code size create2InitCodeSizeLimit: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '20000000' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 200000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { mstore(0, calldataload(0)) let call_result := call(10000000, 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b, 0, 0, calldatasize(), 0, 0) sstore(0, call_result) sstore(1, 1) } nonce: 0 storage: {} c94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { // :yul { codecopy(0x00, 0x00, 0x0a) return(0x00, 0x0a) } mstore(0, 0x600a80600080396000f300000000000000000000000000000000000000000000) // get initcode size from calldata let initcode_size := calldataload(0) let gas_before := gas() let create_result := create2(0, 0, initcode_size, 0xdeadbeef) sstore(10, sub(gas_before, gas())) sstore(0, create_result) } nonce: 0 storage: {} transaction: data: # Valid initcode size = 49152 bytes - ':label valid :raw 0x000000000000000000000000000000000000000000000000000000000000c000' # Invalid initcode size = 49153 bytes - ':label invalid :raw 0x000000000000000000000000000000000000000000000000000000000000c001' gasLimit: - 15000000 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: ':label valid' network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0': 1 # subcall successful '1': 1 # test successful, no OOG c94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0': '9e7a3337d18c31fe4c1fe51ab2da6cfd3629923d' # created account # Difference with Paris is the charge for initcode 49152 // 32 * 2 = 3072 gas '10': 55539 # gas used by CREATE 9e7a3337d18c31fe4c1fe51ab2da6cfd3629923d: balance: 0 code: '0x600a80600080396000f3' nonce: 1 storage: {} - indexes: data: ':label invalid' network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 storage: '0': 0 # subcall aborted '1': 1 # test successful, no OOG c94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: {} 67d49ae27e912b3b508d62ce1e463298db6edf32: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3860_limitmeterinitcode/createInitCodeSizeLimitFiller.yml ================================================ # CREATE with max allowed init code size createInitCodeSizeLimit: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '20000000' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374Fce5edBC8E2a8697C15331677e6EbF0B: balance: 200000000 code: 0x nonce: 1 storage: {} bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: balance: 0 code: | :yul berlin { mstore(0, calldataload(0)) let call_result := call(10000000, 0xc0de, 0, 0, calldatasize(), 0, 0) sstore(0, call_result) sstore(1, 1) } nonce: 1 storage: {} 000000000000000000000000000000000000c0de: balance: 0 code: | :yul berlin { // :yul { codecopy(0x00, 0x00, 0x0a) return(0x00, 0x0a) } mstore(0, 0x600a80600080396000f300000000000000000000000000000000000000000000) // get initcode size from calldata let initcode_size := calldataload(0) let gas_before := gas() let create_result := create(0, 0, initcode_size) sstore(10, sub(gas_before, gas())) sstore(0, create_result) } nonce: 1 storage: {} transaction: data: # Valid initcode size = 49152 bytes - ':label valid :raw 0x000000000000000000000000000000000000000000000000000000000000c000' # Invalid initcode size = 49153 bytes - ':label invalid :raw 0x000000000000000000000000000000000000000000000000000000000000c001' gasLimit: - 15000000 gasPrice: 10 nonce: 1 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb value: - 0 expect: - indexes: data: ':label valid' network: - '>=Cancun' result: a94f5374Fce5edBC8E2a8697C15331677e6EbF0B: nonce: 2 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: storage: '0': 1 # subcall successful '1': 1 # test successful, no OOG 000000000000000000000000000000000000c0de: storage: '0': 0x5f6baaeb5b7c97725f84d1569c4abc85135f4716 # created account # Difference with Paris is the charge for initcode 49152 // 32 * 2 = 3072 gas '10': 46323 # gas used by CREATE 5f6baaeb5b7c97725f84d1569c4abc85135f4716: balance: 0 code: '0x600a80600080396000f3' nonce: 1 storage: {} - indexes: data: ':label invalid' network: - '>=Cancun' result: a94f5374Fce5edBC8E2a8697C15331677e6EbF0B: nonce: 2 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: nonce: 1 storage: '0': 0 # subcall aborted '1': 1 # test successful, no OOG 000000000000000000000000000000000000c0de: storage: {} 682327124c5d2dc0cd2158ba65d37ac3d2140c91: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/Shanghai/stEIP3860_limitmeterinitcode/creationTxInitCodeSizeLimitFiller.yml ================================================ # Creation transaction with max allowed initcode size (EIP-3860) creationTxInitCodeSizeLimit: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '20000000' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 200000000 code: '' nonce: 0 storage: {} transaction: data: # "codecopy(0x00, 0x0b, 0x10) return(0x00, 0x10)" # initcode size = 49152 - ':label valid :raw 0x601080600b6000396000f360606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063a3b9f3e514610079578063b50345b61461008d578063d4f639ea146100a1578063d9bb316f146100b5578063e22a5d5b146100c9578063f983c0fa146100dd57610074565b610002565b346100025761008b60048050506100f1565b005b346100025761009f6004805050611097565b005b34610002576100b3600480505061203d565b005b34610002576100c76004805050612fe3565b005b34610002576100db6004805050613f89565b005b34610002576100ef6004805050614f2f565b005b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b505660606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063a3b9f3e514610079578063b50345b61461008d578063d4f639ea146100a1578063d9bb316f146100b5578063e22a5d5b146100c9578063f983c0fa146100dd57610074565b610002565b346100025761008b60048050506100f1565b005b346100025761009f6004805050611097565b005b34610002576100b3600480505061203d565b005b34610002576100c76004805050612fe3565b005b34610002576100db6004805050613f89565b005b34610002576100ef6004805050614f2f565b005b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b505660606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063a3b9f3e514610079578063b50345b61461008d578063d4f639ea146100a1578063d9bb316f146100b5578063e22a5d5b146100c9578063f983c0fa146100dd57610074565b610002565b346100025761008b60048050506100f1565b005b346100025761009f6004805050611097565b005b34610002576100b3600480505061203d565b005b34610002576100c76004805050612fe3565b005b34610002576100db6004805050613f89565b005b34610002576100ef6004805050614f2f565b005b600073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000' # initcode size = 49153 (valid only before EIP-3860) - ':label invalid :raw 0x601080600b6000396000f360606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063a3b9f3e514610079578063b50345b61461008d578063d4f639ea146100a1578063d9bb316f146100b5578063e22a5d5b146100c9578063f983c0fa146100dd57610074565b610002565b346100025761008b60048050506100f1565b005b346100025761009f6004805050611097565b005b34610002576100b3600480505061203d565b005b34610002576100c76004805050612fe3565b005b34610002576100db6004805050613f89565b005b34610002576100ef6004805050614f2f565b005b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b505660606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063a3b9f3e514610079578063b50345b61461008d578063d4f639ea146100a1578063d9bb316f146100b5578063e22a5d5b146100c9578063f983c0fa146100dd57610074565b610002565b346100025761008b60048050506100f1565b005b346100025761009f6004805050611097565b005b34610002576100b3600480505061203d565b005b34610002576100c76004805050612fe3565b005b34610002576100db6004805050613f89565b005b34610002576100ef6004805050614f2f565b005b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b50565b6000731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000008905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000000990508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000000109050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000101905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010290508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001039050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000104905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010590508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001069050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000107905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010890508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001099050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000110905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020190508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002029050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000203905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020490508050731000000000000000000000000000000000000205905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000206905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020790508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002089050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000209905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000021090508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003019050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000302905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030390508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003049050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000305905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030690508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003079050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000308905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000030990508050731000000000000000000000000000000000000310905080507310000000000000000000000000000000000003109050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000001905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000290508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000039050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000004905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000590508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000069050805073100000000000000000000000000000000000000790508050731000000000000000000000000000000000000007905080507310000000000000000000000000000000000000089050805073100000000000000000000000000000000000000890508050731000000000000000000000000000000000000009905080507310000000000000000000000000000000000000099050805073100000000000000000000000000000000000001090508050731000000000000000000000000000000000000010905080507310000000000000000000000000000000000001019050805073100000000000000000000000000000000000010190508050731000000000000000000000000000000000000102905080507310000000000000000000000000000000000001029050805073100000000000000000000000000000000000010390508050731000000000000000000000000000000000000103905080507310000000000000000000000000000000000001049050805073100000000000000000000000000000000000010490508050731000000000000000000000000000000000000105905080507310000000000000000000000000000000000001059050805073100000000000000000000000000000000000010690508050731000000000000000000000000000000000000106905080507310000000000000000000000000000000000001079050805073100000000000000000000000000000000000010790508050731000000000000000000000000000000000000108905080507310000000000000000000000000000000000001089050805073100000000000000000000000000000000000010990508050731000000000000000000000000000000000000109905080507310000000000000000000000000000000000001109050805073100000000000000000000000000000000000011090508050731000000000000000000000000000000000000201905080507310000000000000000000000000000000000002019050805073100000000000000000000000000000000000020290508050731000000000000000000000000000000000000202905080507310000000000000000000000000000000000002039050805073100000000000000000000000000000000000020390508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002049050805073100000000000000000000000000000000000020590508050731000000000000000000000000000000000000204905080507310000000000000000000000000000000000002069050805073100000000000000000000000000000000000020690508050731000000000000000000000000000000000000207905080507310000000000000000000000000000000000002079050805073100000000000000000000000000000000000020890508050731000000000000000000000000000000000000208905080507310000000000000000000000000000000000002099050805073100000000000000000000000000000000000020990508050731000000000000000000000000000000000000210905080507310000000000000000000000000000000000002109050805073100000000000000000000000000000000000030190508050731000000000000000000000000000000000000301905080507310000000000000000000000000000000000003029050805073100000000000000000000000000000000000030290508050731000000000000000000000000000000000000303905080507310000000000000000000000000000000000003039050805073100000000000000000000000000000000000030490508050731000000000000000000000000000000000000304905080507310000000000000000000000000000000000003059050805073100000000000000000000000000000000000030590508050731000000000000000000000000000000000000306905080507310000000000000000000000000000000000003069050805073100000000000000000000000000000000000030790508050731000000000000000000000000000000000000307905080507310000000000000000000000000000000000003089050805073100000000000000000000000000000000000030890508050731000000000000000000000000000000000000309905080507310000000000000000000000000000000000003099050805073100000000000000000000000000000000000031090508050731000000000000000000000000000000000000310905080505b505660606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063a3b9f3e514610079578063b50345b61461008d578063d4f639ea146100a1578063d9bb316f146100b5578063e22a5d5b146100c9578063f983c0fa146100dd57610074565b610002565b346100025761008b60048050506100f1565b005b346100025761009f6004805050611097565b005b34610002576100b3600480505061203d565b005b34610002576100c76004805050612fe3565b005b34610002576100db6004805050613f89565b005b34610002576100ef6004805050614f2f565b005b60007310000000000000000000000000000000000000019050805073100000000000000000000000000000000000000190508050731000000000000000000000000000000000000002905080507310000000000000000000000000000000000000029050805073100000000000000000000000000000000000000390508050731000000000000000000000000000000000000003905080507310000000000000000000000000000000000000049050805073100000000000000000000000000000000000000490508050731000000000000000000000000000000000000005905080507310000000000000000000000000000000000000059050805073100000000000000000000000000000000000000690508050731000000000000000000000000000000000000006905080507310000000000000000000000000000000000000079050805073100000000000000000000000000000000000' gasLimit: - 15000000 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: '' value: - 0 expect: - indexes: data: ':label valid' network: - 'Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # Difference with Paris is the charge for initcode 49152 // 32 * 2 = 3072 gas balance: 195569440 nonce: 1 6295ee1b4f6dd65047762f924ecd367c17eabf8f: balance: 0 nonce: 1 code: '0x60606040523615610074576000357c01' storage: {} - indexes: data: ':label valid' network: - '>=Prague' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 190196000 nonce: 1 6295ee1b4f6dd65047762f924ecd367c17eabf8f: balance: 0 nonce: 1 code: '0x60606040523615610074576000357c01' storage: {} - indexes: data: ':label invalid' network: - '>=Cancun' expectException: '>=Cancun' : 'TransactionException.INITCODE_SIZE_EXCEEDED' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 6295ee1b4f6dd65047762f924ecd367c17eabf8f: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/VMTests/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/addFiller.yml ================================================ add: # This test deals with addition, mostly addition that causes an overflow. # It is based on the fact that arithmetic in the evm is modulo 2^256. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1+-1 = -2 ; ; The big number is 256^2-1, the biggest number that the evm can hold, ; and because evm math is done modulo 256^2, it's equivalent to -1 [[0]] (+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 + 4 = -3 ; same big number (2^256-1) as above [[0]] (+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 4) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 + 1 = 0 [[0]] (+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (+ 0 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 1 + -1 = 0 [[0]] (+ 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label add_neg1_neg1 :abi f(uint) 0 - :label add_neg1_4 :abi f(uint) 1 - :label add_neg1_1 :abi f(uint) 2 - :label add_0_0 :abi f(uint) 3 - :label add_1_neg1 :abi f(uint) 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label add_neg1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: # -2 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe - indexes: data: :label add_neg1_4 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x03 # We can group these three together because the return value is zero, # and the default value for storage is also zero - indexes: data: - :label add_neg1_1 - :label add_0_0 - :label add_1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 0000000000000000000000000000000000001003: storage: 0: 0x00 0000000000000000000000000000000000001004: storage: 0: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/addmodFiller.yml ================================================ addmod: # This test deals with the addmod opcode # (addmod a b c) = (a + b) % c env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod 1 2 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod (- 0 1) (- 0 2) 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod (- 0 6) 1 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (eq (smod (- 0 5) 3) (addmod (- 0 6) 1 3) ) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (eq (mod (- 0 5) 3) (addmod (- 0 6) 1 3) ) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod 4 1 (- 0 3) ) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (eq (addmod 4 1 (- 0 3) ) 2 ) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod (- 0 1) 0 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod (- 0 1) 1 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod (- 0 1) 2 5) } nonce: '0' storage: {} 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod (- 0 1) (- 0 2) 5) } nonce: '0' storage: {} 000000000000000000000000000000000000100b: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; ((2^160)-1 + 1) % 5 [[0]] (addmod 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 5) } nonce: '0' storage: {} 000000000000000000000000000000000000100c: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod 4 1 0) } nonce: '0' storage: {} 000000000000000000000000000000000000100d: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod 0 1 0) } nonce: '0' storage: {} 000000000000000000000000000000000000100e: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (addmod 1 0 0) } nonce: '0' storage: {} 000000000000000000000000000000000000100f: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (- (addmod 0 0 0) 1) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label addmod_1_2_2 :abi f(uint) 0x00 - :label addmod_neg1_neg2_2 :abi f(uint) 0x01 - :label addmod_neg6_1_3 :abi f(uint) 0x02 - :label addmod_eq_smod :abi f(uint) 0x03 - :label addmod_eq_mod :abi f(uint) 0x04 - :label addmod_4_1_neg3 :abi f(uint) 0x05 - :label addmod_4_1_neg3_eq :abi f(uint) 0x06 - :label addmod_neg1_0_5 :abi f(uint) 0x07 - :label addmod_neg1_1_5 :abi f(uint) 0x08 - :label addmod_neg1_2_5 :abi f(uint) 0x09 - :label addmod_neg1_neg2_5 :abi f(uint) 0x0a # ((2^160-1) + 1) % 5 - :label addmod_2_160_1_5 :abi f(uint) 0x0b - :label addmod_4_1_0 :abi f(uint) 0x0c - :label addmod_0_1_0 :abi f(uint) 0x0d - :label addmod_1_0_0 :abi f(uint) 0x0e - :label addmod_0_0_0_min_1 :abi f(uint) 0x0f gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label addmod_1_2_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x01 - indexes: data: :label addmod_neg1_neg2_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: :label addmod_neg6_1_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x02 - indexes: data: :label addmod_eq_smod gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x00 - indexes: data: :label addmod_eq_mod gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0x01 - indexes: data: :label addmod_4_1_neg3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x05 - indexes: data: :label addmod_4_1_neg3_eq gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001006: storage: 0: 0x00 - indexes: data: :label addmod_neg1_0_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: 0: 0x00 - indexes: data: :label addmod_neg1_1_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0x01 - indexes: data: :label addmod_neg1_2_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001009: storage: 0: 0x02 - indexes: data: :label addmod_neg1_neg2_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100a: storage: 0: 0x04 - indexes: data: :label addmod_2_160_1_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100b: storage: 0: 0x01 - indexes: data: :label addmod_4_1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100c: storage: 0: 0x00 - indexes: data: :label addmod_0_1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100d: storage: 0: 0x00 - indexes: data: :label addmod_1_0_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100e: storage: 0: 0x00 - indexes: data: :label addmod_0_0_0_min_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100f: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/arithFiller.yml ================================================ arith: # An extremely basic test env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' # 00 PUSH1 1 6001 1 # 02 PUSH1 1 6001 1,1 # 04 SWAP1 90 # 05 ADD 01 2 # 06 PUSH1 7 6007 7,2 # 08 MUL 02 14 # 09 PUSH1 5 6005 5,14 # 0B ADD 01 19 # 0C PUSH1 2 6002 2,19 # 0E SWAP1 90 19,2 # 0F DIV 04 9 # 10 PUSH1 4 6004 4,9 # 12 SWAP1 90 9,4 # 13 PUSH1 0x21 6021 33,9,4 # 15 SWAP1 90 9,33,4 # 16 SDIV 05 0,4 # 17 PUSH1 0x17 6017 21,0,4 # 19 ADD 01 21,4 # 1A PUSH1 3 6003 3,21,4 # 1C MUL 02 63,4 # 1D PUSH1 5 6005 5,63,4 # 1F SWAP1 90 63,5,4 # 20 SMOD 07 3,4 # 21 PUSH1 3 6003 3,3,4 # 23 SUB 03 0,4 # 24 PUSH1 9 6009 9,0,4 # 26 PUSH1 0x11 6011 17,9,0,4 # 28 EXP 0A 17^9,0,4 # 29 PUSH1 0 6000 0,17^9,0,4 # 2B SSTORE 55 The original was MSTORE, but that's not testable # 2C PUSH1 8 6008 8,0,4 # 2E PUSH1 0 6000 0,8,0,4 # 30 RETURN F3 code: :raw 0x600160019001600702600501600290046004906021900560170160030260059007600303600960110A60005560086000F3 nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :raw 0x00 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # 17^9 0: 0x1b9c636491 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/divByZeroFiller.yml ================================================ divByZero: # A standard location for division by zero tests. # # Opcodes where this is relevant: # DIV # SDIV # MOD # SMOD # ADDMOD # MULMOD # # Any division or mod by zero returns zero. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # The first parameter is the opcode: # 0 - DIV # 1 - SDIV # 2 - MOD # 3 - SMOD # 4 - ADDMOD # 5 - MULMOD # # The other parameters are the parameters for the opcode : balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'NOP 0) (def 'opcode $4) (def 'a $36) (def 'b $68) (if (= opcode 0x04) [[0]] (div a 0) NOP) (if (= opcode 0x05) [[0]] (sdiv a 0) NOP) (if (= opcode 0x06) [[0]] (mod a 0) NOP) (if (= opcode 0x07) [[0]] (smod a 0) NOP) (if (= opcode 0x08) [[0]] (addmod a b 0) NOP) (if (= opcode 0x09) [[0]] (mulmod a b 0) NOP) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # DIV tests (opcode 0x04) - :label div_2_0 :abi f(uint,uint) 0x04 2 - :label div_1_0 :abi f(uint,uint) 0x04 1 - :label div_0_0 :abi f(uint,uint) 0x04 0 - :label div_neg1_0 :abi f(uint,uint) 0x04 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label div_neg2_0 :abi f(uint,uint) 0x04 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label div_maxint_0 :abi f(uint,uint) 0x04 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label div_minint_0 :abi f(uint,uint) 0x04 0x8000000000000000000000000000000000000000000000000000000000000000 # SDIV tests (opcode 0x05) - :label sdiv_2_0 :abi f(uint,uint) 0x05 2 - :label sdiv_1_0 :abi f(uint,uint) 0x05 1 - :label sdiv_0_0 :abi f(uint,uint) 0x05 0 - :label sdiv_neg1_0 :abi f(uint,uint) 0x05 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label sdiv_neg2_0 :abi f(uint,uint) 0x05 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label sdiv_maxint_0 :abi f(uint,uint) 0x05 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label sdiv_minint_0 :abi f(uint,uint) 0x05 0x8000000000000000000000000000000000000000000000000000000000000000 # MOD tests (opcode 0x06) - :label mod_2_0 :abi f(uint,uint) 0x06 2 - :label mod_1_0 :abi f(uint,uint) 0x06 1 - :label mod_0_0 :abi f(uint,uint) 0x06 0 - :label mod_neg1_0 :abi f(uint,uint) 0x06 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mod_neg2_0 :abi f(uint,uint) 0x06 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mod_maxint_0 :abi f(uint,uint) 0x06 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mod_minint_0 :abi f(uint,uint) 0x06 0x8000000000000000000000000000000000000000000000000000000000000000 # SMOD tests (opcode 0x07) - :label smod_2_0 :abi f(uint,uint) 0x07 2 - :label smod_1_0 :abi f(uint,uint) 0x07 1 - :label smod_0_0 :abi f(uint,uint) 0x07 0 - :label smod_neg1_0 :abi f(uint,uint) 0x07 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label smod_neg2_0 :abi f(uint,uint) 0x07 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label smod_maxint_0 :abi f(uint,uint) 0x07 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label smod_minint_0 :abi f(uint,uint) 0x07 0x8000000000000000000000000000000000000000000000000000000000000000 # ADDMOD tests (opcode 0x08) - :label addmod_0_0_0 :abi f(uint,uint,uint) 0x08 0 0 - :label addmod_0_1_0 :abi f(uint,uint,uint) 0x08 0 1 - :label addmod_1_0_0 :abi f(uint,uint,uint) 0x08 1 0 - :label addmod_1_1_0 :abi f(uint,uint,uint) 0x08 1 1 - :label addmod_0_2_0 :abi f(uint,uint,uint) 0x08 0 2 - :label addmod_2_0_0 :abi f(uint,uint,uint) 0x08 2 0 - :label addmod_2_2_0 :abi f(uint,uint,uint) 0x08 2 2 - :label addmod_1_2_0 :abi f(uint,uint,uint) 0x08 1 2 - :label addmod_2_1_0 :abi f(uint,uint,uint) 0x08 2 1 - :label addmod_0_0_0 :abi f(uint,uint,uint) 0x08 0 0 - :label addmod_0_1_0 :abi f(uint,uint,uint) 0x08 0 1 - :label addmod_1_0_0 :abi f(uint,uint,uint) 0x08 1 0 - :label addmod_1_1_0 :abi f(uint,uint,uint) 0x08 1 1 - :label addmod_0_neg1_0 :abi f(uint,uint,uint) 0x08 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label addmod_neg1_0_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 - :label addmod_neg1_neg1_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label addmod_0_neg2_0 :abi f(uint,uint,uint) 0x08 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_neg2_0_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0 - :label addmod_neg2_neg2_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_0_neg1_0 :abi f(uint,uint,uint) 0x08 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label addmod_neg1_0_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 - :label addmod_neg1_neg1_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label addmod_0_neg2_0 :abi f(uint,uint,uint) 0x08 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_neg2_0_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0 - :label addmod_neg2_neg2_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_1_neg1_0 :abi f(uint,uint,uint) 0x08 1 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label addmod_neg1_1_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 - :label addmod_1_neg2_0 :abi f(uint,uint,uint) 0x08 1 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_neg2_1_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 1 - :label addmod_1_neg1_0 :abi f(uint,uint,uint) 0x08 1 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label addmod_neg1_1_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 - :label addmod_2_neg2_0 :abi f(uint,uint,uint) 0x08 2 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_neg2_2_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 2 - :label addmod_neg1_neg2_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label addmod_neg2_neg1_0 :abi f(uint,uint,uint) 0x08 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # MULMOD tests (opcode 0x09) - :label mulmod_0_0_0 :abi f(uint,uint,uint) 0x09 0 0 - :label mulmod_0_1_0 :abi f(uint,uint,uint) 0x09 0 1 - :label mulmod_1_0_0 :abi f(uint,uint,uint) 0x09 1 0 - :label mulmod_1_1_0 :abi f(uint,uint,uint) 0x09 1 1 - :label mulmod_0_2_0 :abi f(uint,uint,uint) 0x09 0 2 - :label mulmod_2_0_0 :abi f(uint,uint,uint) 0x09 2 0 - :label mulmod_2_2_0 :abi f(uint,uint,uint) 0x09 2 2 - :label mulmod_1_2_0 :abi f(uint,uint,uint) 0x09 1 2 - :label mulmod_2_1_0 :abi f(uint,uint,uint) 0x09 2 1 - :label mulmod_0_0_0 :abi f(uint,uint,uint) 0x09 0 0 - :label mulmod_0_1_0 :abi f(uint,uint,uint) 0x09 0 1 - :label mulmod_1_0_0 :abi f(uint,uint,uint) 0x09 1 0 - :label mulmod_1_1_0 :abi f(uint,uint,uint) 0x09 1 1 - :label mulmod_0_neg1_0 :abi f(uint,uint,uint) 0x09 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mulmod_neg1_0_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 - :label mulmod_neg1_neg1_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mulmod_0_neg2_0 :abi f(uint,uint,uint) 0x09 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_neg2_0_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0 - :label mulmod_neg2_neg2_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_0_neg1_0 :abi f(uint,uint,uint) 0x09 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mulmod_neg1_0_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 - :label mulmod_neg1_neg1_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mulmod_0_neg2_0 :abi f(uint,uint,uint) 0x09 0 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_neg2_0_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0 - :label mulmod_neg2_neg2_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_1_neg1_0 :abi f(uint,uint,uint) 0x09 1 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mulmod_neg1_1_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 - :label mulmod_1_neg2_0 :abi f(uint,uint,uint) 0x09 1 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_neg2_1_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 1 - :label mulmod_1_neg1_0 :abi f(uint,uint,uint) 0x09 1 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - :label mulmod_neg1_1_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 - :label mulmod_2_neg2_0 :abi f(uint,uint,uint) 0x09 2 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_neg2_2_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 2 - :label mulmod_neg1_neg2_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - :label mulmod_neg2_neg1_0 :abi f(uint,uint,uint) 0x09 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 0x0 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/divFiller.yml ================================================ div: # Division tests env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (/ 0x02 0xfedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Verify the fix to the divBoostBug [[0]] (/ 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA 0x1DAE6076B981DAE6076B981DAE6076B981DAE6076B981DAE6076B981DAE6077) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (/ 5 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (/ 23 24) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (/ 0 24) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (/ 1 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Divide by zero [[0]] (/ 2 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (+ (/ 13 0) 7) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label div_2_big :abi f(uint) 0 - :label div_boost_bug :abi f(uint) 1 - :label div_5_2 :abi f(uint) 2 - :label div_23_24 :abi f(uint) 3 - :label div_0_24 :abi f(uint) 4 - :label div_1_0 :abi f(uint) 5 - :label div_2_0 :abi f(uint) 6 - :label div_0_add :abi f(uint) 7 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # All the zero results can be in the same case because zero's the default - indexes: data: - :label div_2_big - :label div_23_24 - :label div_0_24 - :label div_2_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 0000000000000000000000000000000000001003: storage: 0: 0x00 0000000000000000000000000000000000001004: storage: 0: 0x00 0000000000000000000000000000000000001006: storage: 0: 0x00 - indexes: data: :label div_boost_bug gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x89 - indexes: data: :label div_5_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x02 - indexes: data: :label div_1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x01 - indexes: data: :label div_0_add gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: 0: 0x07 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/expFiller.yml ================================================ exp: # Exponentiation env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (exp 2 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-1)^(-2) ; 2^256-1 = -1 ; 2^256-1 = -2 [[0]] (exp 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; just a big number to the power of itself [[0]] (exp 2147483647 2147483647) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; zero to the power of a big number [[0]] (exp 0 2147483647) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; big number to the power of zero [[0]] (exp 2147483647 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 257^1 [[0]] (exp 257 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 1^257 [[0]] (exp 1 257) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 2^257 (which is zero mod 2^256) [[0]] (exp 2 257) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 0^0 (that is 1 in evm arithmetic) [[0]] (exp 0 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 2^big = 0 [[0]] (exp 2 0x0100000000000f) } nonce: '0' storage: {} 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 2^15 = 0x8000 [[0]] (exp 2 15) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label exp_2_2 :abi f(uint) 0 - :label exp_neg1_neg2 :abi f(uint) 1 - :label exp_big_big :abi f(uint) 2 - :label exp_0_big :abi f(uint) 3 - :label exp_big_0 :abi f(uint) 4 - :label exp_257_1 :abi f(uint) 5 - :label exp_1_257 :abi f(uint) 6 - :label exp_2_257 :abi f(uint) 7 - :label exp_0_0 :abi f(uint) 8 - :label exp_2_big :abi f(uint) 9 - :label exp_2_15 :abi f(uint) 0x0a gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # All the zeros can go together - indexes: data: - :label exp_0_big - :label exp_2_257 - :label exp_2_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0 0000000000000000000000000000000000001007: storage: 0: 0 0000000000000000000000000000000000001009: storage: 0: 0 - indexes: data: :label exp_2_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 4 - indexes: data: :label exp_neg1_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 1 - indexes: data: :label exp_big_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0xbc8cccccccc888888880000000aaaaaab00000000fffffffffffffff7fffffff - indexes: data: :label exp_big_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0x01 - indexes: data: :label exp_257_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x0101 - indexes: data: :label exp_1_257 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001006: storage: 0: 0x01 - indexes: data: :label exp_0_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0x01 - indexes: data: :label exp_2_15 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100a: storage: 0: 0x8000 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/expPower256Filler.yml ================================================ expPower256: # Test the result of 255^n, 256^n, and 257^n, 0<=n<=33 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'storageJump 0x10) (def 'calc (n) { [[(* storageJump n)]] (exp 256 n) [[(+ (* storageJump n) 1)]] (exp 255 n) [[(+ (* storageJump n) 2)]] (exp 257 n) } ) (calc 0) (calc 1) (calc 2) (calc 3) (calc 4) (calc 5) (calc 6) (calc 7) (calc 8) (calc 9) (calc 10) (calc 11) (calc 12) (calc 13) (calc 14) (calc 15) (calc 16) (calc 17) (calc 18) (calc 19) (calc 20) (calc 21) (calc 22) (calc 23) (calc 24) (calc 25) (calc 26) (calc 27) (calc 28) (calc 29) (calc 30) (calc 31) (calc 32) (calc 33) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :abi f(uint) 0 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # 0x10*n: 256^n # 0x10*n+1: 255^n # 0x10*n+2: 257^n 0x00: 0x01 0x01: 0x01 0x02: 0x01 0x10: 0x0100 0x11: 0xFF 0x12: 0x0101 0x20: 0x010000 0x21: 0xFE01 0x22: 0x010201 0x30: 0x01000000 0x31: 0xFD02FF 0x32: 0x01030301 0x40: 0x0100000000 0x41: 0xFC05FC01 0x42: 0x0104060401 0x50: 0x010000000000 0x51: 0xFB09F604FF 0x52: 0x01050A0A0501 0x60: 0x01000000000000 0x61: 0xFA0EEC0EFA01 0x62: 0x01060F140F0601 0x70: 0x0100000000000000 0x71: 0xF914DD22EB06FF 0x72: 0x0107152323150701 0x80: 0x010000000000000000 0x81: 0xF81BC845C81BF801 0x82: 0x01081C3846381C0801 0x90: 0x01000000000000000000 0x91: 0xF723AC7D8253DC08FF 0x92: 0x010924547E7E54240901 0xa0: 0x0100000000000000000000 0xa1: 0xF62C88D104D1882CF601 0xa2: 0x010A2D78D2FCD2782D0A01 0xb0: 0x010000000000000000000000 0xb1: 0xF5365C4833CCB6A4C90AFF 0xb2: 0x010B37A64BCFCF4AA5370B01 0xc0: 0x01000000000000000000000000 0xc1: 0xF44125EBEB98E9EE2441F401 0xc2: 0x010C42DDF21B9F19EFDC420C01 0xd0: 0x0100000000000000000000000000 0xd1: 0xF34CE4C5FFAD5104361DB20CFF 0xd2: 0x010D4F20D00DBAB909CC1E4E0D01 0xe0: 0x010000000000000000000000000000 0xe1: 0xF25997E139ADA3B331E7945AF201 0xe2: 0x010E5C6FF0DDC873C2D5EA6C5B0E01 0xf0: 0x01000000000000000000000000000000 0xf1: 0xF1673E495873F60F7EB5ACC6970EFF 0xf2: 0x010F6ACC60CEA63C3698C056C7690F01 0x0100: 0x0100000000000000000000000000000000 0x0101: 0xF075D70B0F1B82196F36F719D077F001 0x0102: 0x01107A372D2F74E272CF59171E30781001 0x0110: 0x010000000000000000000000000000000000 0x0111: 0xEF856134040C669755C7C022B6A77810FF 0x0112: 0x01118AB1645CA45755422870354EA8881101 0x0120: 0x01000000000000000000000000000000000000 0x0121: 0xEE95DBD2D0085A30BE71F86293F0D098EE01 0x0122: 0x01129C3C15C100FBAC976A98A583F730991201 0x0130: 0x0100000000000000000000000000000000000000 0x0131: 0xEDA745F6FD3851D68DB3866A315CDFC85512FF 0x0132: 0x0113AED851D6C1FCA84402033E297B27C9AB1301 0x0140: 0x010000000000000000000000000000000000000000 0x0141: 0xECB99EB1063B1984B725D2E3C72B82E88CBDEC01 0x0142: 0x0114C2872A2898BEA4EC46054167A4A2F174BE1401 0x0150: 0x01000000000000000000000000000000000000000000 0x0151: 0xEBCCE5125534DE6B326EAD10E3645765A4312E14FF 0x0152: 0x0115D749B152C1576391324B46A90C47946632D21501 0x0160: 0x0100000000000000000000000000000000000000000000 0x0161: 0xEAE1182D42DFA98CC73C3E63D280F30E3E8CFCE6EA01 0x0162: 0x0116ED20FB041418BAF4C37D91EFB553DBFA9904E71601 0x0170: 0x010000000000000000000000000000000000000000000000 0x0171: 0xE9F63715159CC9E33A7502256EAE721B304E6FEA0316FF 0x0172: 0x0118040E1BFF182CD3AFB8410F81A5092FD6939DEBFD1701 0x0180: 0x01000000000000000000000000000000000000000000000000 0x0181: 0xE90C40DE00872D19573A8D23493FC3A9151E217A1913E801 0x0182: 0x01191C122A1B1745008367F9509126AE39066A3189E9141801 0x0190: 0x0100000000000000000000000000000000000000000000000000 0x0191: 0xE823349D2286A5EC3DE3529625F683E56C0903589EFAD418FF 0x0192: 0x011A352E3C45325C4583EB6149E1B7D4E73F709BBB72FD2C1901 0x01a0: 0x010000000000000000000000000000000000000000000000000000 0x01a1: 0xE73B116885641F4651A56F438FD08D61869CFA55465BD944E601 0x01a2: 0x011B4F636A81778EA1C96F4CAB2B998CBC26B00C572E7029451A01 0x01b0: 0x01000000000000000000000000000000000000000000000000000000 0x01b1: 0xE653D6571CDEBB270B53C9D44C40BCD425165D5AF1157D6BA11AFF 0x01b2: 0x011C6AB2CDEBF906306B38BBF7D6C52648E2D6BC63859E996E5F1B01 0x01c0: 0x0100000000000000000000000000000000000000000000000000000000 0x01c1: 0xE56D8280C5C1DC6BE448760A77F47C1750F146FD962467EE3579E401 0x01c2: 0x011D871D80B9E4FF369BA3F4B3CE9BEB6F2BB9931FE9243807CD7A1C01 0x01d0: 0x010000000000000000000000000000000000000000000000000000000000 0x01d1: 0xE48814FE44FC1A8F78642D946D7C879B39A055B6988E438647446A1CFF 0x01d2: 0x011EA4A49E3A9EE435D23F98A8826A875A9AE54CB3090D5C3FD547961D01 0x01e0: 0x01000000000000000000000000000000000000000000000000000000000000 0x01e1: 0xE3A38CE946B71E74E8EBC966D90F0B139E66B560E1F5B542C0FD25B2E201 0x01e2: 0x011FC34942D8D9831A0811D8412AECF1E1F58031FFBC16699C151CDDB31E01 0x01f0: 0x0100000000000000000000000000000000000000000000000000000000000000 0x01f1: 0xE2BFE95C5D7067567402DD9D7235FC088AC84EAB8113BF8D7E3C288D2F1EFF 0x01f2: 0x0120E30C8C1BB25C9D2219EA196C17DED3D775B231BBD28005B131FA90D11F01 0x0200: 0x0000000000000000000000000000000000000000000000000000000000000000 0x0201: 0xE1DD29730112F6EF1D8EDABFD4C3C60C823D865CD592ABCDF0BDEC64A1EFE001 0x0202: 0x2203EF98A7CE0EF9BF3C04038583F6B2AB4D27E3ED8E5285B6E32C8B61F02001 0x0210: 0x0000000000000000000000000000000000000000000000000000000000000000 0x0211: 0xfb4c498e11e3f82e714be514ef024675bb48d678bd192222cd2e783d4df020ff 0x0212: 0x25f3884075dd08b8fb400789097aa95df8750bd17be0d83c9a0fb7ed52102101 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/expPower256Of256Filler.yml ================================================ expPower256Of256: # (255 to 257) ^ ((255 to 257)^n) # 0 <= n <= 33 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'storageJump 0x10) (def 'calc (n) { [[(* storageJump n)]] (exp 256 (exp 256 n)) [[(+ (* storageJump n) 1)]] (exp 256 (exp 255 n)) [[(+ (* storageJump n) 2)]] (exp 256 (exp 257 n)) [[(+ (* storageJump n) 3)]] (exp 255 (exp 256 n)) [[(+ (* storageJump n) 4)]] (exp 255 (exp 255 n)) [[(+ (* storageJump n) 5)]] (exp 255 (exp 257 n)) [[(+ (* storageJump n) 6)]] (exp 257 (exp 256 n)) [[(+ (* storageJump n) 7)]] (exp 257 (exp 255 n)) [[(+ (* storageJump n) 8)]] (exp 257 (exp 257 n)) } ) (calc 0) (calc 1) (calc 2) (calc 3) (calc 4) (calc 5) (calc 6) (calc 7) (calc 8) (calc 9) (calc 10) (calc 11) (calc 12) (calc 13) (calc 14) (calc 15) (calc 16) (calc 17) (calc 18) (calc 19) (calc 20) (calc 21) (calc 22) (calc 23) (calc 24) (calc 25) (calc 26) (calc 27) (calc 28) (calc 29) (calc 30) (calc 31) (calc 32) (calc 33) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :abi f(uint) 0 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # 0x10*n: 256^(256^n) # 0x10*n+1: 256^(255^n) # 0x10*n+2: 256^(257^n) # 0x10*n+3: 255^(256^n) # 0x10*n+4: 255^(255^n) # 0x10*n+5: 255^(257^n) # 0x10*n+6: 257^(256^n) # 0x10*n+7: 257^(255^n) # 0x10*n+8: 257^(257^n) 0x00: 0x0100 0x01: 0x0100 0x02: 0x0100 0x03: 0xff 0x04: 0xff 0x05: 0xff 0x06: 0x0101 0x07: 0x0101 0x08: 0x0101 0x13: 0x06c3acd330b959ad6efabce6d2d2125e73a88a65a9880d203dddf5957f7f0001 0x14: 0x8f965a06da0ac41dcb3a34f1d8ab7d8fee620a94faa42c395997756b007ffeff 0x15: 0xbce9265d88a053c18bc229ebff404c1534e1db43de85131da0179fe9ff8100ff 0x16: 0x02b5e9d7a094c19f5ebdd4f2e618f859ed15e4f1f0351f286bf849eb7f810001 0x17: 0xc73b7a6f68385c653a24993bb72eea0e4ba17470816ec658cf9c5bedfd81ff01 0x18: 0xb89fc178355660fe1c92c7d8ff11524702fad6e2255447946442356b00810101 0x23: 0x4ee4ceeaac565c81f55a87c43f82f7c889ef4fc7c679671e28d594ff7f000001 0x24: 0x82f46a1b4e34d66712910615d2571d75606ceac51fa8ca8c58cf6ca881fe00ff 0x25: 0x81c9fcefa5de158ae2007f25d35c0d11cd735342a48905955a5a6852800200ff 0x26: 0x666ac362902470ed850709e2a29969d10cba09debc03c38d172aeaff81000001 0x27: 0xeb30a3c678a01bde914548f98f3366dc0ffe9f85384ebf1111d03dad7ffe0101 0x28: 0x72d0a7939b6303ce1d46e6e3f1b8be303bfdb2b00f41ad8076b0975782020101 0x33: 0x109a00e1370d2d2922bf892e85becb54297354b2e5c75388d514ff7f00000001 0x34: 0x54a792f15e9aba7e4ad9e716bc169eea3a6e2e9c49bf9b335874613c8081feff 0x35: 0x5d24a14d8e5e039372cd0f6a0f31e9ed6b75adba9f16b1c5b3edd5ba818300ff 0x36: 0x298e2f316b4ccded5ebf515998d9ec20df69404b04a441782a6aff8100000001 0x37: 0x4335694e98f372183c62a2339fa4ad161e9b4c42240bdc9452abffd07783ff01 0x38: 0xf0f0820797315acd063056bba76f6a9c3e281cdb5197a233967ca94684830101 0x43: 0xe6540ce46eaf70da9d644015a661e0e245b13f307cb3885514ff7f0000000001 0x44: 0x6526b38b05a6325b80e1c84ab41dc934fd70f33f1bd0eab3d1f61a4707fc00ff 0x45: 0xe959516cd27e5d8fd487b72db2989b3ec2ba9fb7ead41554526fe5a3040400ff 0x46: 0xe7498a48c6ce2530bbe814ee3440c8c44fffab7ad8a277aa6aff810000000001 0x47: 0x2dffa3e901e5a392d15b79f4193d2168147d2aa7c55870b46c3a905d03fc0101 0x48: 0xe16ea721c96539edb4f7fb82de0dad8cccb1e7a6966a6777635f6fb908040101 0x53: 0xb581ac185aad71db2d177c286929c4c22809e5dcb3085514ff7f000000000001 0x54: 0x75789eb2a64bc971389fbd11a1e6d7abbf95ad25e23fb9aa25e73a0bfc83feff 0x55: 0xfc403fa42ceb6a0d0d3321bd9b2d8af25b1b667f87a04f496c78168d078500ff 0x56: 0xcec5ec213b9cb5811f6ae00428fd7b6ef5a1af39a1f7aa6aff81000000000001 0x57: 0x70ab32233202b98d382d17713fa0be391eaf74f85ba1740c9c3238c4ed85ff01 0x58: 0xb622672a213faa79b32185ff93a7b27a8499e48f7b032cdb4d1a70300c850101 0x63: 0x1948059de1def03c4ec35fc22c2bb8f2bf45dc33085514ff7f00000000000001 0x64: 0x41f818a8e24eb6d7bb7b193b4f2b5fdcf4bd0d453f2ac3499d8830d391fa00ff 0x65: 0xede6fe4a943dfb5d967a2b85d6728759d40d2ef0ae4bc28bbb1867f98c0600ff 0x66: 0x083c936cbaad5de592badc2e142fe4ebd6103921f7aa6aff8100000000000001 0x67: 0x57385019fe4e0939ca3f35c37cadfaf52fba5b1cdfb02def3866e8068bfa0101 0x68: 0x810ac878bd98428f6be8c6426ba9f9da09e3e33bf4fe10bfa3f8b12c92060101 0x73: 0x8bb02654111ad8c60ad8af132283a81f455c33085514ff7f0000000000000001 0x74: 0xa8f75c129dbb8466d6703a2a0b8212131b3248d70e2478862ac40fe17485feff 0x75: 0x5fd4d2de580383ee59f5e800ddb3f1717ceae03aede19d3dec5e5a69918700ff 0x76: 0xc8624230b524b85d6340da48a5db20370fb921f7aa6aff810000000000000001 0x77: 0x287b58a5a13cd7f454468ca616c181712f5ed25433a7d5a894b6ced35f87ff01 0x78: 0x09930d11ac2804fa977bf951593c8dff8498779cc0cdc5812a4fba2f98870101 0x83: 0x230041a0e7602d6e459609ed39081ec55c33085514ff7f000000000000000001 0x84: 0xc407d8a413ef9079ead457ed686a05ac81039c0cae0a7f6afd01e8461ff800ff 0x85: 0x67a397e0692385e4cd83853aabce220a94d449e885fa867e96d3ef5e180800ff 0x86: 0x70add926e753655d6d0ebe9c0f81368fb921f7aa6aff81000000000000000001 0x87: 0x0bdce80b8378e43f13d454b9d0a4c83cf311b8eaa45d5122cfd544a217f80101 0x88: 0x629c25790e1488998877a9ecdf0fb69637e77d8a4bdc1b46270093ba20080101 0x93: 0x53017d8eb210db2c8cd4a299079ec55c33085514ff7f00000000000000000001 0x94: 0x48be09b6c6ae2aa660f1972125cecbb1038b5d236ecf766ba786e2c4e887feff 0x95: 0x2e350d847ba73dc2099f83f532951c47269d9fd7e411b50bae00a9581f8900ff 0x96: 0x013ab9e1f0df89a184b4d07080b68fb921f7aa6aff8100000000000000000001 0x97: 0xf387ed41c1050f9da667f429a3e8fb30b61a55ede97d7b8acd797a03cd89ff01 0x98: 0x525696c22bb3ce00fd2e3f6bbb9b4ea1046a5e31fcff2fedf8f8c74d28890101 0xa3: 0xfe0f60957dc223578a0298879ec55c33085514ff7f0000000000000000000001 0xa4: 0xc1ea45f348b5d351c4d8fe5c77da979cadc33d866acc42e981278896b1f600ff 0xa5: 0x56ddb29bca94fb986ac0a40188b3b53f3216b3559bd8324a77ea8bd8a80a00ff 0xa6: 0x2d49ff6b0bbe177ae9317000b68fb921f7aa6aff810000000000000000000001 0xa7: 0x185fa9eab94cfe3016b69657e83b23fd24cc6960218254231c3db627a7f60101 0xa8: 0xa7a0223829f26d6c635368034320563df4aa5eb62efc87a42bb35f69b20a0101 0xb3: 0xe1440264b8ee0cea0218879ec55c33085514ff7f000000000000000000000001 0xb4: 0x29575fdce377b23043e489e358581474bc863187fa85f9945473a2be5889feff 0xb5: 0x3df8c030ec521fb109c4d887dbbc14c7c9c9921b27058e3503971b60b18b00ff 0xb6: 0x67799740340daf4a30f000b68fb921f7aa6aff81000000000000000000000001 0xb7: 0x540a4e4635b40585e09ff10b63ffe310dd717fca5c0a51570091e25e378bff01 0xb8: 0xdbbaef5c49ffee61b08cde6ebc8dba6e9a62d56c2355d1980cb9e790bc8b0101 0xc3: 0xb0e95b83a36ce98218879ec55c33085514ff7f00000000000000000000000001 0xc4: 0xc482ab56ec19186dc48c88f30861a850b2253b1ea6dc021589e569bd47f400ff 0xc5: 0xcf45c7f9af4bbe4a83055b55b97777ad5e0a3f08b129c9ae208c5d713c0c00ff 0xc6: 0xa5cbb62a421049b0f000b68fb921f7aa6aff8100000000000000000000000001 0xc7: 0x3bde6ca66dffe1bf5d727c3edea74c7a4af43b3912e6256d37705c8f3bf40101 0xc8: 0x3f49a1e40c5213aa4ffed57eb4c1ad2d181b2aaa289e9d59c2256c43480c0101 0xd3: 0xe02639036c698218879ec55c33085514ff7f0000000000000000000000000001 0xd4: 0x8be664bde946d939ce551b948b503787942d2a7734509288c1b62fd5c48bfeff 0xd5: 0xa923a28e7a75aef26c51580ffc686879e4a0b404b089bdbcd751d88b478d00ff 0xd6: 0x41ac5ea30fc9b0f000b68fb921f7aa6aff810000000000000000000000000001 0xd7: 0x0daa3a177ec975cb69bb4acf4a6e1be7bcc1ad33d1ffad97510f9fea9d8dff01 0xd8: 0x19e6822beb889be28310060f4fb9741bfd50a31fa81ec65de21f7b02548d0101 0xe3: 0xdb9902ec698218879ec55c33085514ff7f000000000000000000000000000001 0xe4: 0x83fab06c6c8fef761ebbb9534c06ac2a9d61820623008069062ff3b1e1f200ff 0xe5: 0x3f791dd183ed5b963bd86e0dba1a9dd5b8ceeb078f15c73062f1942fd40e00ff 0xe6: 0xe0bfa28fc9b0f000b68fb921f7aa6aff81000000000000000000000000000001 0xe7: 0x8133b760dfae27560eb490f235ddfa301f058dee4f01f3fe4b3567d0d3f20101 0xe8: 0xcd4cd0124e983af71620fb5f98275965c6a8bebc4b8adc288b63224ee20e0101 0xf3: 0x9882ec698218879ec55c33085514ff7f00000000000000000000000000000001 0xf4: 0x75c4915e18b96704209738f5ca765568bb4dc4113d56683977825a132c8dfeff 0xf5: 0x5c76839bf5a80b1da705dbdf43e4dd6770cd7501af11ff2dab7918dfe18f00ff 0xf6: 0xbf228fc9b0f000b68fb921f7aa6aff8100000000000000000000000000000001 0xf7: 0xc6a29131e7594004bc2aa79f0d2c402a1409c57c77d284c14b1a3ab0ff8fff01 0xf8: 0xe6b3e5cf6ec90e532fef7d08455ebf92a03e9e3f6e224ea0febdf1a9f08f0101 0x0103: 0x82ec698218879ec55c33085514ff7f0000000000000000000000000000000001 0x0104: 0x3122f4bcdf6dd8b265cd18eb6af28c879aed44a35e0bf59273e39e6c7ff000ff 0x0105: 0x6a2b3bc87a02c29b9d27757df43047ecd0f15485270fca27417a701c701000ff 0x0106: 0x228fc9b0f000b68fb921f7aa6aff810000000000000000000000000000000001 0x0107: 0x88e1259502eef93d46060aacc9e2ff506c734dade0b6714ab12d17e46ff00101 0x0108: 0x4a103813c12c12169b218296bb0a9eae80cf8d2b158aa70eb990f99480100101 0x0113: 0xec698218879ec55c33085514ff7f000000000000000000000000000000000001 0x0114: 0x722ad218eb1995a2d257c4c06d8de993c203cfc8e3512df7d633e17e908ffeff 0x0115: 0x8ac9b5ec08d74612cb29f941481d274b51721af2296207c0da8d24667f9100ff 0x0116: 0x8fc9b0f000b68fb921f7aa6aff81000000000000000000000000000000000001 0x0117: 0x81d5ff63680841482299f3eab616446dcd336f537c0c565aa4112ab95d91ff01 0x0118: 0x9c6ca90dac4e97dea02ac969e8649ee9e6232e0c3f4797411151cb8f90910101 0x0123: 0x698218879ec55c33085514ff7f00000000000000000000000000000000000001 0x0124: 0x8a2cbd9f40794e2205b13306f2aa0a43c60823c64b95d8601fa4f1e521ee00ff 0x0125: 0xc1b5a1e3a81da51b10d84e880f0113ff67b863ddad3faf1f4ecf413f101200ff 0x0126: 0xc9b0f000b68fb921f7aa6aff8100000000000000000000000000000000000001 0x0127: 0x410be68e49452a1fbcd863bf6e8d637f8eae4979c34c88d552afbcc20fee0101 0x0128: 0xf540cb714754b5b1eb0373833833bd7fb0ee925ce8b92962500b7a1c22120101 0x0133: 0x8218879ec55c33085514ff7f0000000000000000000000000000000000000001 0x0134: 0xb795ad7ac24cfbb7435cf53bd3584f3d4b2709935635c3ceb66e761ff091feff 0x0135: 0x1f0bb7be91a0ccd0cca93d75cf03de3e6b56fe8f1c54242617665327219300ff 0x0136: 0xb0f000b68fb921f7aa6aff810000000000000000000000000000000000000001 0x0137: 0xad571756ecbff1bfdef064861e5e92c5d897a9cc380e54bdbaabd80bb793ff01 0x0138: 0xd8b5b531989e689f700dcdb43ab90e79a49dfbbb5a13dbf751df98bb34930101 0x0143: 0x18879ec55c33085514ff7f000000000000000000000000000000000000000001 0x0144: 0x67e4797dc21f02ce4a7c52218c7dbea5d212e6c244e24f0ba4c08613c7ec00ff 0x0145: 0xa1ce1a085f258785846939cc1d2e8725ac94ad4dff8913234e00679fb41400ff 0x0146: 0xf000b68fb921f7aa6aff81000000000000000000000000000000000000000001 0x0147: 0xcce501857a1cb45473915a28082af950e0f78f7e2de68ce748adb661b3ec0101 0x0148: 0x3b2e28d274a16c08b58a23bad63bba6d7b09685769d1f68ca3873bedc8140101 0x0153: 0x879ec55c33085514ff7f00000000000000000000000000000000000000000001 0x0154: 0x7fd07055ff50cdfe4b4bd9a15133d72d3607d92eb7ac81bac93db7ff4c93feff 0x0155: 0x665ac5c769e87f61d5993abc26522fbfca2734d76a63216b2d550d29c79500ff 0x0156: 0xb68fb921f7aa6aff8100000000000000000000000000000000000000000001 0x0157: 0x1c93db67c9884bc694686d69a25a5d7ed089841d5ce147fdd7199ab00d95ff01 0x0158: 0x485053d8ff66be52036597520344fac87b6a305426a9e49221d3f934dc950101 0x0163: 0x9ec55c33085514ff7f0000000000000000000000000000000000000000000001 0x0164: 0xec447e662ac08957d7e290a421dbf54c0aaf43aadc9cc465ad0b02f071ea00ff 0x0165: 0xdc9178d3bab470096f01477c859b5f4173986640b659426412a653465c1600ff 0x0166: 0xb68fb921f7aa6aff810000000000000000000000000000000000000000000001 0x0167: 0xdcf0a770777610503596ae0311af46c171151ed45107d7e7bb8f74bb5bea0101 0x0168: 0x4d65773387993928c95c861274232d3fb6f6b7fe1b22e4e61a30e71172160101 0x0173: 0xc55c33085514ff7f000000000000000000000000000000000000000000000001 0x0174: 0x537ca0f03f974303005f1e6693b55b72315a166841732e42b8353724a495feff 0x0175: 0x86418797ec60058de6cca47dfdbee79923ac49d7801e01840041ca76719700ff 0x0176: 0x8fb921f7aa6aff81000000000000000000000000000000000000000000000001 0x0177: 0x56a55341ab8d4318f1cfb55d5f21e2ba35d7e070a72bac6b2b21baae5f97ff01 0x0178: 0x55ddd0ec77909de6d8311116cf520398e816f928b06fdd90ec239d0488970101 0x0183: 0x5c33085514ff7f00000000000000000000000000000000000000000000000001 0x0184: 0xd542e526003539ead104274aff2d78332366e29d328c2161f0c120731fe800ff 0x0185: 0xc706cb25e8384ce9bb5c9cb48415238ba03e16c448e292c0a101843b081800ff 0x0186: 0xb921f7aa6aff8100000000000000000000000000000000000000000000000001 0x0187: 0x4ca55f89202c524cb0f1cb3195d13c8d94a9f7a05c59e1d4031577c707e80101 0x0188: 0x8c4b0574e9156b80035f3ecdcf1fe79d273ed7559747a4322bcd338f20180101 0x0193: 0x33085514ff7f0000000000000000000000000000000000000000000000000001 0x0194: 0x7f510dd7198cac0a92ff7ea80451838c0dfa12114c41a0ef05907397f897feff 0x0195: 0x1275e752b6aee228ecba5e9b57ef1111deff3c651e2cfbf2cccd13151f9900ff 0x0196: 0x21f7aa6aff810000000000000000000000000000000000000000000000000001 0x0197: 0x6646340ad51a03bb710caf05756b685b33c7dad62ae68d369243700ead99ff01 0x0198: 0x29d80e8060ef2221929bb18215586c742686d6860e028ca0456b443238990101 0x01a3: 0x085514ff7f000000000000000000000000000000000000000000000000000001 0x01a4: 0x1d164db738eb6893868b361ad2803f97be35764456e82a837667a693d1e600ff 0x01a5: 0x8b92c24abebf376a5aab5ff4dfd3538a03d38a10bced2aae8e1a8a85b81a00ff 0x01a6: 0xf7aa6aff81000000000000000000000000000000000000000000000000000001 0x01a7: 0x6931bda98c70e860a1f6a5224940f1ec7e6734cd9456c95806384f7cb7e60101 0x01a8: 0x3402a9db66492dfc2a220715e76243469462f24edc56903ba1d8e96ed21a0101 0x01b3: 0x5514ff7f00000000000000000000000000000000000000000000000000000001 0x01b4: 0x178918ffbcb401d4efd2f7dfb4d01a897172267f0f491121ac52dd614899feff 0x01b5: 0x38ecff71480ca0b422f2ed6f780d5fead2ae234a49104b10a86f7f0dd19b00ff 0x01b6: 0xaa6aff8100000000000000000000000000000000000000000000000000000001 0x01b7: 0xd02811cb5dc1d80567e810532b235b7672f5c78cd6e89bb511d5e2d8f79bff01 0x01b8: 0x1b4e6404f474c18055d30bb8987672f59e97980d6f9de1764c0fbec5ec9b0101 0x01c3: 0x14ff7f0000000000000000000000000000000000000000000000000000000001 0x01c4: 0xffd368e44b3f85cb81ae394c9809ca9fa2db46a83d7880a912ab6d4a87e400ff 0x01c5: 0x0981ad53c19b15a94bcf0bf20235dd0da9df25f46ae635029fe2062e6c1c00ff 0x01c6: 0x6aff810000000000000000000000000000000000000000000000000000000001 0x01c7: 0x19df06ffa28250867006726405fbc05d43dc2f9d2f025006db089bd46be40101 0x01c8: 0x243fffe3a4f2982f45055c08f379648ab886da8027a7401117a8e0b8881c0101 0x01d3: 0xff7f000000000000000000000000000000000000000000000000000000000001 0x01d4: 0x41e065d46e0349cfe624c4e8a2034aea1f7edfff80e511cd8067d488949bfeff 0x01d5: 0xa84162ca6675a22c4c79dfc4ea15f760db5a04dbf04246764199b668879d00ff 0x01d6: 0xff81000000000000000000000000000000000000000000000000000000000001 0x01d7: 0x1226984faa6b05ebdbd45d8477fa4fd5b55bfd5061de03c319282b153d9dff01 0x01d8: 0x5cc9e6b0b749fd94541ad00364bdec2fca7816981ca3e38f485decc7a49d0101 0x01e3: 0x7f00000000000000000000000000000000000000000000000000000000000001 0x01e4: 0xe9772778f50fa0a69cd10fa019ac56d72ac7a7d7af26c4ba28415c8f41e200ff 0x01e5: 0x33f0385ef73feebdb952e5adb643dd0fa178fd9271578219ad50a73d241e00ff 0x01e6: 0x8100000000000000000000000000000000000000000000000000000000000001 0x01e7: 0xfd405cce8f73dffc04a6f0ff6ffc6bf7961876d09c5b4933a68f0cc623e20101 0x01e8: 0xc5a8f4566fd2e96e4ce3a8b3ec0863e7b20bc3b2f3dc5261ba8a0174421e0101 0x01f3: 0x01 0x01f4: 0xf9cb87f5b1ab58602f52a1e9d392e5675b86a59a53943a8d4ec2a915dc9dfeff 0x01f5: 0x893d729a64e318860ec5047e70e598da163eb41e71e74b04dfd4712d419f00ff 0x01f6: 0x01 0x01f7: 0xee5f2839c1b4f6ca05e6fdb04e2fb49c0f860b3765c27dc781a150cb7f9fff01 0x01f8: 0xb4c358e3c6bcddfb509ea487d733df0e1854f29c3b6bfd4a8caabe3f609f0101 0x0200: 0x01 0x0203: 0x01 0x0204: 0xb8247842bb5ce75c08d0c251669ed5870fa24a22952e5db3a7c66c59ffe000ff 0x0205: 0xee526e5a06f2a990b2bf6c951e5feabf0e07ee16877296e1be872db9e02000ff 0x0206: 0x01 0x0207: 0xeda7d024b6de40a9d3b966e71f10a4667edc5b71cab07aeabcac6249dfe00101 0x0208: 0x512ecfaeeb11205f0833e1054dcb1300488e0954be5af77a49e143aa00200101 0x0210: 0x01 0x0213: 0x01 0x0214: 0x8dcb65b5494eba78cd6756a6f9851f6e26d0f2bb9ecd7e9abd7e9b11209ffeff 0x0215: 0x6694bb31b20cd625f3756897dae6d738f2e64467b5b6f10fa3e07763ffa100ff 0x0216: 0x01 0x0217: 0xe678999aeffd1f1f45081f64de7f80ab083dd7df04721ed64ee04c03bda1ff01 0x0218: 0x39b68fb9898dd7568abd178397251ce8226a25c1d305a4e79573333520a10101 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/expPower2Filler.yml ================================================ expPower2: # For n where n=2^m # Test 2^n, 2^(n-1), 2^(n+1) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'storageJump 0x10) (def 'calc (m) { (def 'n (exp 2 m)) [[(* storageJump m)]] (exp 2 n) [[(+ (* storageJump m) 1)]] (exp 2 (- n 1)) [[(+ (* storageJump m) 2)]] (exp 2 (+ n 1)) } ) (calc 1) (calc 2) (calc 3) (calc 4) (calc 5) (calc 6) (calc 7) (calc 8) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :abi f(uint) 0 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # 0x10*m: 2^(2^m) # 0x10*m+1: 2^(2^m-1) # 0x10*m+2: 2^(2^m+1) # 2^2 0x10: 0x04 0x11: 0x02 0x12: 0x08 # 2^4 0x20: 0x10 0x21: 0x08 0x22: 0x20 # 2^8 0x30: 0x0100 0x31: 0x0080 0x32: 0x0200 # 2^16 0x40: 0x010000 0x41: 0x008000 0x42: 0x020000 # 2^32 0x50: 0x0100000000 0x51: 0x0080000000 0x52: 0x0200000000 # 2^64 0x60: 0x010000000000000000 0x61: 0x008000000000000000 0x62: 0x020000000000000000 # 2^128 0x70: 0x0100000000000000000000000000000000 0x71: 0x0080000000000000000000000000000000 0x72: 0x0200000000000000000000000000000000 # 2^256 = 0 in evm math 0x81: 0x8000000000000000000000000000000000000000000000000000000000000000 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/fibFiller.yml ================================================ fib: # The Fibonnaci sequence env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'fib (n) [[n]] (+ @@(- n 1) @@(- n 2))) (fib 2) (fib 3) (fib 4) (fib 5) (fib 6) (fib 7) (fib 8) (fib 9) (fib 10) } nonce: '0' storage: 0: 0x00 1: 0x01 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :raw 0x01 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 0x00 1: 0x01 2: 0x01 3: 0x02 4: 0x03 5: 0x05 6: 0x08 7: 0x0D # 13 8: 0x15 # 21 9: 0x22 # 34 10: 0x37 # 55 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/modFiller.yml ================================================ mod: # This test is for the MOD opcode env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (% 2 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 % 2 (2^256-1 = -1 in evm arithmetic) [[0]] (% 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 0 % -1 [[0]] (% 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (% 3 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The expected result is 2, which is counter ; intuitive. The reason is that MOD uses unsigned ; arithmetic. -2 % 3 is indeed 1, but 2^256 % 3 = 1 ; and therefore (2^256-2) % 3 = 2 ; [[0]] (% (- 0 2) 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The original test was (3%0)-1, but since we're ; already checking 3%0 (contract 0...0103), I decided ; it would be better to check a different number [[0]] (- (% 16 0) 1) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label mod_2_3 :abi f(uint) 0 - :label mod_neg1_2 :abi f(uint) 1 - :label mod_0_neg1 :abi f(uint) 2 - :label mod_3_0 :abi f(uint) 3 - :label mod_neg2_3 :abi f(uint) 4 - :label mod_16_0 :abi f(uint) 5 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label mod_2_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x02 - indexes: data: :label mod_neg1_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: - :label mod_0_neg1 - :label mod_3_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 0000000000000000000000000000000000001003: storage: 0: 0x00 - indexes: data: :label mod_neg2_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0x02 - indexes: data: :label mod_16_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: # The expression is actually (16 % 0) - 1, so # The result here is -1 = 256^2-1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/mulFiller.yml ================================================ mul: # Multiplication env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (* 2 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 * -1 ; -1 = 2^256-1 in evm arithmetic [[0]] (* 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (* 0 23) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (* 23 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 2^255 * -1 (the expected answer is 2^255, ; because -2^255 = 2^256-2^255 in evm arithmetic) [[0]] (* 0x8000000000000000000000000000000000000000000000000000000000000000 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 2^255 * 2^255 ; ; the expected answer is 0, because 2^510 % 2^256 = 0 [[0]] (* 0x8000000000000000000000000000000000000000000000000000000000000000 0x8000000000000000000000000000000000000000000000000000000000000000 ) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (2^255-1) * (2^255-1) ; ; = 2^510 - 2*2^255 + 1 = 2^510 - 2^256 + 1 = 1 [[0]] (* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (* (* 0x1234567890abcdef0fedcba0987654321 0x1234567890abcdef0fedcba0987654321 ) 0x1234567890abcdef0fedcba0987654321 ) } nonce: '0' storage: {} # Do a mul underflow, see that the transaction is reverted 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' # [[0]] 1 so the test will fail if there is no revert # 00 PUSH1 01 # 02 PUSH1 00 # 04 SSTORE # Do a stack underflow # 05 PUSH1 01 # 07 MUL # 08 STOP code: :raw 0x600160005560010200 nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label mul_2_3 :abi f(uint) 0 - :label mul_neg1_neg1 :abi f(uint) 1 - :label mul_0_23 :abi f(uint) 2 - :label mul_23_1 :abi f(uint) 3 - :label mul_2pow255_neg1 :abi f(uint) 4 - :label mul_2pow255_2pow255 :abi f(uint) 5 - :label mul_2pow255min1_2pow255min1 :abi f(uint) 6 - :label big_pow_3 :abi f(uint) 7 - :label stack_underflow :abi f(uint) 8 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label mul_0_23 - :label mul_2pow255_2pow255 - :label stack_underflow gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 0000000000000000000000000000000000001005: storage: 0: 0x00 # It's 1 unless the transaction is reverted 0000000000000000000000000000000000001008: storage: 0: 0x00 - indexes: data: :label mul_2_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x06 - indexes: data: :label mul_neg1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: :label mul_23_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: # 0x17 = 23 0: 0x17 - indexes: data: :label mul_2pow255_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # 2^255, which is equal to -2^255 in evm arithmetic 0: 0x8000000000000000000000000000000000000000000000000000000000000000 - indexes: data: :label mul_2pow255min1_2pow255min1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001006: storage: # (2^255-1)*(2^255-1) = 2^510 - 2*255 + 1 = 2^510-2^256+1 = 1 0: 0x01 - indexes: data: :label big_pow_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: # Just a big number, multiplied by itself to raise it to the power # of three 0: 0x47D0817E4167B1EB4F9FC722B133EF9D7D9A6FB4C2C1C442D000107A5E419561 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/mulmodFiller.yml ================================================ mulmod: # Test modular multiplication env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (1*2) % 2 is zero [[0]] (mulmod 1 2 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -a is actually 2^256-a ; ; 2^256 % 3 = 1 ; (2^256-1) % 3 = (1-1)%3 = 0 [[0]] (mulmod (- 0 1) (- 0 2) 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -5 % 3 = (2^256 - 5) % 3 = (1-2)%3 = (-1) % 3 = 2 [[0]] (mulmod (- 0 5) 1 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -3 is actually 2^256-3, which is much more than five [[0]] (mulmod 5 1 (- 0 3)) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (mulmod 27 37 100) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow2_255 0x8000000000000000000000000000000000000000000000000000000000000000) ; 2^255%5 = 3 ; 2%5 = 2 ; 6%5 = 1 [[0]] (mulmod pow2_255 2 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (256^2-1) % 5 = 0 [[0]] (mulmod (- 0 1) 2 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow2_255 0x8000000000000000000000000000000000000000000000000000000000000000) ; 2^255%5 = 3 ; 2%5 = 2 ; (3-1) * 2 = 4 [[0]] (mulmod (- pow2_255 1) 2 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow2_255 0x8000000000000000000000000000000000000000000000000000000000000000) ; 2^255%5 = 3 ; 2%5 = 2 ; ((3+1) * 2) % 5 = 3 [[0]] (mulmod (+ pow2_255 1) 2 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; smod is signed mod, -5%3 = -1 ; mulmod is unsigned mod, -5%3 = 2 ; -1 != 2 [[0]] (= (smod (- 0 5) 3) (mulmod (- 0 5) 1 3)) } nonce: '0' storage: {} 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; mod and mulmod are both unsigned mod ; equal [[0]] (= (mod (- 0 5) 3) (mulmod (- 0 5) 1 3)) } nonce: '0' storage: {} 000000000000000000000000000000000000100b: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (mulmod a b -c) is usually a*b, because -c is ; actually 2^256-c, which is huge ; not equal [[0]] (= (mulmod 5 1 (- 0 3)) 2) } nonce: '0' storage: {} 000000000000000000000000000000000000100c: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (mulmod x y 0) is zero [[0]] (mulmod 0 1 0) } nonce: '0' storage: {} 000000000000000000000000000000000000100d: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (mulmod x y 0) is zero [[0]] (mulmod 1 0 0) } nonce: '0' storage: {} 000000000000000000000000000000000000100e: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (mulmod x y 0) is zero [[0]] (- 1 (mulmod 0 0 0)) } nonce: '0' storage: {} 000000000000000000000000000000000000100f: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (mulmod x y 0) is zero [[0]] (mulmod 5 1 0) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label mm_1_2_2 :abi f(uint) 0 - :label mm_neg1_neg2_3 :abi f(uint) 1 - :label mm_neg5_1_3 :abi f(uint) 2 - :label mm_5_1_neg3 :abi f(uint) 3 - :label mm_27_37_100 :abi f(uint) 4 - :label mm_2pow255_2_5 :abi f(uint) 5 - :label mm_neg1_2_5 :abi f(uint) 6 - :label mm_2pow255min1_2_5 :abi f(uint) 7 - :label mm_2pow255plus1_2_5 :abi f(uint) 8 - :label mulmod_vs_smod :abi f(uint) 9 - :label mulmod_vs_mod :abi f(uint) 0x0a - :label mulmod_pos_pos_neg :abi f(uint) 0x0b - :label mm_0_1_0 :abi f(uint) 0x0c - :label mm_1_0_0 :abi f(uint) 0x0d - :label one_minus_mm_0_0_0 :abi f(uint) 0x0e - :label mm_5_1_0 :abi f(uint) 0x0d gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # All zero results - indexes: data: - :label mm_1_2_2 - :label mm_neg1_neg2_3 - :label mm_neg1_2_5 - :label mulmod_vs_smod - :label mulmod_pos_pos_neg - :label mm_0_1_0 - :label mm_1_0_0 - :label mm_5_1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 0000000000000000000000000000000000001001: storage: 0: 0x00 0000000000000000000000000000000000001006: storage: 0: 0x00 0000000000000000000000000000000000001009: storage: 0: 0x00 000000000000000000000000000000000000100b: storage: 0: 0x00 000000000000000000000000000000000000100c: storage: 0: 0x00 000000000000000000000000000000000000100d: storage: 0: 0x00 000000000000000000000000000000000000100f: storage: 0: 0x00 - indexes: data: - :label mm_neg5_1_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x02 - indexes: data: - :label mm_5_1_neg3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x05 - indexes: data: - :label mm_27_37_100 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # 27x37 is 999, so mod 100 is 99 or 0x63 0: 0x63 - indexes: data: - :label mm_2pow255_2_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x01 - indexes: data: - :label mm_2pow255min1_2_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: 0: 0x04 - indexes: data: - :label mm_2pow255plus1_2_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0x03 - indexes: data: - :label mulmod_vs_mod gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100a: storage: 0: 0x01 - indexes: data: - :label one_minus_mm_0_0_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100e: storage: 0: 0x01 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/notFiller.yml ================================================ not: # Test the NOT operator # note that the VMTest test has a bug that kills the result instead of # returning it (it's written to memory, not storage) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (not 0x0123456789abcdef) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :abi f(uint) 0 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: # The result of not 0x00...00123456789abcdef 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffedcba9876543210 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/sdivFiller.yml ================================================ sdiv: # This test deals with addition, mostly addition that causes an overflow. # It is based on the fact that arithmetic in the evm is modulo 2^256. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (0 - (-1)) / (-1) = 1/(-1) = -1 ; ; -1 = 2^256-1 (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sdiv (- 0 neg1) neg1) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-1) / (0 - (-1)) = (-1)/1 = -1 ; ; -1 = 2^256-1 (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sdiv neg1 (- 0 neg1)) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-2) / (-4) = 0 ; ; evm doesn't do fractions [[0]] (sdiv (- 0 2) (- 0 4)) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 4 / (-2) = -2 ; [[0]] (sdiv 4 (- 0 2)) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 5 / (-4) = -1 ; ; evm doesn't do fractions ; [[0]] (sdiv 5 (- 0 4)) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-2^255) / (-1) = 2^255 ; Because 2^255 = -2^255 in evm arithmetic (def 'pow_2_255 0x8000000000000000000000000000000000000000000000000000000000000000) [[0]] (sdiv (- 0 pow_2_255) (- 0 1)) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-2^255) / 0 = 0 ; anything / 0 = 0 in evm ; (def 'pow_2_255 0x8000000000000000000000000000000000000000000000000000000000000000) [[0]] (sdiv (- 0 pow_2_255) 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-1)/25 = 0 (no fractions in evm) [[0]] (sdiv (- 0 1) 25) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-1)/(-1) = 1 [[0]] (sdiv (- 0 1) (- 0 1)) } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-1)/1 = -1 [[0]] (sdiv (- 0 1) 1) } nonce: '0' storage: {} 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-3)/0 = 0 ; x/0 = 0 in evm [[0]] (sdiv (- 0 3) (- 0 0)) } nonce: '0' storage: {} 000000000000000000000000000000000000100b: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (0-(-1))/0 = 0 ; ; -1 = 2^256-1 (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sdiv (- 0 neg1) 0) } nonce: '0' storage: {} 000000000000000000000000000000000000100c: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (0-(-1))/0 + 1 = 1 ; ; -1 = 2^256-1 (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (+ (sdiv (- 0 neg1) 0) 1) } nonce: '0' storage: {} 000000000000000000000000000000000000100d: balance: '0x0ba1a9ce0ba1a9ce' # 00 PUSH1 05 # 02 PUSH1 09 # 04 PUSH1 00 # 06 SUB (stack becomes -9, 5) # 07 SDIV (-9/5 = -1, no fractions) # 08 PUSH1 00 # 0A SSTORE # 0B STOP code: :raw 0x600560096000030560005500 nonce: '0' storage: {} 000000000000000000000000000000000000100e: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; A negative number sdiv -1 is the absolute value of that number (def 'pow2_255 0x8000000000000000000000000000000000000000000000000000000000000000) (def 'pow2_255_min1 (- pow2_255 1)) [[0]] (sdiv (- 0 pow2_255_min1) (- 0 1)) } nonce: '0' storage: {} 000000000000000000000000000000000000100f: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; A negative number sdiv -1 is the absolute value of that number (def 'pow2_255 0x8000000000000000000000000000000000000000000000000000000000000000) [[0]] (sdiv (- 0 pow2_255) (- 0 1)) ; 2^255 = -2^255 in evm (modulo 2^256) } nonce: '0' storage: {} 0000000000000000000000000000000000000110: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (- 0 maxint) is 0x80.....01, so -1 / -maxint is zero (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (def 'maxint 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sdiv neg1 (- 0 maxint)) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label sdiv_1_neg1 :abi f(uint) 0 - :label sdiv_neg1_1 :abi f(uint) 1 - :label sdiv_neg2_neg4 :abi f(uint) 2 - :label sdiv_4_neg2 :abi f(uint) 3 - :label sdiv_5_neg4 :abi f(uint) 4 - :label sdiv_2pow255_neg1 :abi f(uint) 5 - :label sdiv_2pow255_0 :abi f(uint) 6 - :label sdiv_neg1_25 :abi f(uint) 7 - :label sdiv_neg1_neg1 :abi f(uint) 8 - :label sdiv_neg1_1_2nd :abi f(uint) 9 - :label sdiv_neg3_0 :abi f(uint) 0x0a - :label sdiv_1_0 :abi f(uint) 0x0b - :label sdiv_1_0_add1 :abi f(uint) 0x0c - :label sdiv_neg9_5 :abi f(uint) 0x0d - :label sdiv_2pow255_neg1_2nd :abi f(uint) 0x0f # The minint here is (- 0 maxint), which is 0x80...001, which is # one more than the real minint - :label sdiv_minint_neg1 :abi f(uint) 0x0e - :label sdiv_neg1_minint :abi f(uint) 0x10 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label sdiv_neg2_neg4 - :label sdiv_2pow255_0 - :label sdiv_neg1_25 - :label sdiv_neg3_0 - :label sdiv_1_0 - :label sdiv_neg1_minint gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: # evm doesn't do fractions, so this is zero 0: 0x00 0000000000000000000000000000000000001006: storage: # anything / 0x00 in evm 0: 0x00 0000000000000000000000000000000000001007: storage: # evm doesn't do fractions, so this is zero 0: 0x00 000000000000000000000000000000000000100A: storage: # anything / 0x00 in evm 0: 0x00 000000000000000000000000000000000000100B: storage: # anything / 0x00 in evm 0: 0x00 0000000000000000000000000000000000000110: storage: 0: 0x00 - indexes: data: :label sdiv_1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sdiv_neg1_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sdiv_4_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: # -2 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe - indexes: data: :label sdiv_5_neg4 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sdiv_2pow255_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: # 2^255 = -2^255 0: 0x8000000000000000000000000000000000000000000000000000000000000000 - indexes: data: :label sdiv_neg1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0x01 - indexes: data: :label sdiv_neg1_1_2nd gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001009: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sdiv_1_0_add1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100C: storage: # 1/0 + 1 0: 1 - indexes: data: :label sdiv_neg9_5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100d: storage: # -9/5 = -1, no fractions 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sdiv_minint_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100e: storage: # minint is -0x8000...0001, which # turns into 0x7fff...ffff 0: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sdiv_2pow255_neg1_2nd gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100f: storage: # 2^255 = -2^255 in evm arithmetic 0: 0x8000000000000000000000000000000000000000000000000000000000000000 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/signextendFiller.yml ================================================ signextend: # sign extend tests # This opcode takes two parameters, b and x. # b is the number of bytes of x that are filled. # It then extends the sign by filling the rest of the bytes with the most significant bit of x env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Invalid Byte Number 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 80 0x126af4) } nonce: '0' storage: {} # SIGNEXTEND 0 0 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 0 0) } nonce: '0' storage: {} # SIGNEXTEND 0 -1 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 = 2^256-1 in EVM arithmetic [[0]] (signextend 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) } nonce: '0' storage: {} # SIGNEXTEND -2 -2 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -2 = 2^256-2 in EVM arithmetic [[0]] (signextend 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ) } nonce: '0' storage: {} # SIGNEXTEND -1 -1 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 = 2^256-1 in EVM arithmetic [[0]] (signextend 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} # SIGNEXTEND 255 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 0xf00000000000000001 0xff) } nonce: '0' storage: {} # SIGNEXTEND -1 0 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend ; -1 a.k.a. 2^256-1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0x00 ) } nonce: '0' storage: {} # SIGNEXTEND bit is not set 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Extend the sign of 0x6a, which is a positive 8 bit number [[0]] (signextend 0 0x122f6a) } nonce: '0' storage: {} # SIGNEXTEND bit is not set in higher byte 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Extend the sign of 0x6af4, which is a positive 16 bit number [[0]] (signextend 1 0x126af4) } nonce: '0' storage: {} # SIGNEXTEND bit is set in higher byte 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The first two bytes are 0xfaf4, which is a negative 16 bit number ; (-1292). The sign is extended from the first two bytes to the entire ; value [[0]] (signextend 1 0x12faf4) } nonce: '0' storage: {} # SIGNEXTEND overflow the byte number value # Called signextend_Overflow_dj42 in the VMTests 000000000000000000000000000000000000100A: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 0x010000000000000001 0x8000) } nonce: '0' storage: {} # SIGNEXTEND, try to overflow the byte number value # using a different value 000000000000000000000000000000000000100B: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 0xf0000000000001 0xFFFF) } nonce: '0' storage: {} # SIGNEXTEND set bit (0, 0xff) 000000000000000000000000000000000000100C: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 0 0x122ff4) } nonce: '0' storage: {} # SIGNEXTEND 31, positive value 000000000000000000000000000000000000100D: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 31 1) } nonce: '0' storage: {} # SIGNEXTEND 31, negative value 000000000000000000000000000000000000100E: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (signextend 31 (sub 0 1)) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label invalid_byte :abi f(uint) 0 - :label zero_zero :abi f(uint) 1 - :label zero_neg1 :abi f(uint) 2 - :label neg2_neg2 :abi f(uint) 3 - :label neg1_neg1 :abi f(uint) 4 - :label large_ff :abi f(uint) 5 - :label neg1_zero :abi f(uint) 6 - :label bit_is_not_set :abi f(uint) 7 - :label bit_is_not_set_high :abi f(uint) 8 - :label bit_is_set_high :abi f(uint) 9 - :label overflow_bytenum :abi f(uint) 0x0A - :label overflow_bytenum2 :abi f(uint) 0x0B - :label bit_is_set :abi f(uint) 0x0C - :label byte31_pos :abi f(uint) 0x0D - :label byte31_neg :abi f(uint) 0x0E gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # All the tests where the result is zero - indexes: data: - :label zero_zero - :label neg1_zero gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x00 0000000000000000000000000000000000001006: storage: 0: 0x00 - indexes: data: - :label invalid_byte gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x126af4 - indexes: data: - :label zero_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: # -1 a.k.a. 2^256-1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: - :label neg2_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: # -2, a.k.a 2^256-2 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe - indexes: data: - :label neg1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # -1, a.k.a 2^256-1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: - :label large_ff gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0xff - indexes: data: - :label bit_is_not_set gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: 0: 0x6a - indexes: data: - :label bit_is_not_set_high gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0x6af4 - indexes: data: - :label bit_is_set_high gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001009: storage: # -1292, the first two bytes are negative, and their sign is extended 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf4 - indexes: data: - :label overflow_bytenum gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100a: storage: # No sign extension with such a high value for the byte num 0: 0x8000 - indexes: data: - :label overflow_bytenum2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100b: storage: # No sign extension with such a high value for the byte num 0: 0xFFFF - indexes: data: - :label bit_is_set gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100c: storage: # Extend 0xf4, which is negative - so the result is negative 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 - indexes: data: - :label byte31_pos gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: # signextend(31, ) doesn't do anything, because there is # nowhere to extend to 000000000000000000000000000000000000100d: storage: 0: 0x01 - indexes: data: - :label byte31_neg gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: # signextend(31, ) doesn't do anything, because there is # nowhere to extend to 000000000000000000000000000000000000100e: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/smodFiller.yml ================================================ smod: # This test is for the MOD opcode env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (smod 2 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -1 % 2 (2^256-1 = -1 in evm arithmetic) [[0]] (smod 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 0 % -1 [[0]] (smod 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (smod 3 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (smod (- 0 2) 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The original test was (3%0)-1, but since we're ; already checking 3%0 (contract 0...0103), I decided ; it would be better to check a different number [[0]] (- (smod 16 0) 1) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label smod_2_3 :abi f(uint) 0 - :label smod_neg1_2 :abi f(uint) 1 - :label smod_0_neg1 :abi f(uint) 2 - :label smod_3_0 :abi f(uint) 3 - :label smod_neg2_3 :abi f(uint) 4 - :label smod_16_0 :abi f(uint) 5 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label smod_2_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x02 - indexes: data: :label smod_neg1_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: - :label smod_0_neg1 - :label smod_3_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 0000000000000000000000000000000000001003: storage: 0: 0x00 - indexes: data: :label smod_neg2_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # -2 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe - indexes: data: :label smod_16_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: # The expression is actually (16 % 0) - 1, so # The result here is -1 = 256^2-1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/subFiller.yml ================================================ sub: # This test deals with addition, mostly addition that causes an overflow. # It is based on the fact that arithmetic in the evm is modulo 2^256. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (- 23 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (- 2 3) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (- 0 23) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; 0 - (-1) [[0]] (- 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (-1) - 0 ; evm arithmetic is mod 2^256, and the big number is 2^256-1 [[0]] (- 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # The transaction to check transaction: data: - :label sub_23_1 :abi f(uint) 0 - :label sub_2_3 :abi f(uint) 1 - :label sub_0_23 :abi f(uint) 2 - :label sub_0_neg1 :abi f(uint) 3 - :label sub_neg1_0 :abi f(uint) 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label sub_23_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: # 0x16 = 22, a.k.a. 23-1 0: 0x16 - indexes: data: :label sub_2_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label sub_0_23 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: # -23 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9 - indexes: data: :label sub_0_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x01 - indexes: data: :label sub_neg1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # -1 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/twoOpsFiller.yml ================================================ twoOps: # Generated automatically by twoOpsGen.js env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # Calculate the results : code: | { [[0x11000100010000]] (ADD (ADD 2 1) 3) [[0x11000100010001]] (ADD (ADD 2 1) 1) [[0x11000100020000]] (ADD (MUL 2 1) 3) [[0x11000100020001]] (ADD (MUL 2 1) 1) [[0x11000100030000]] (ADD (SUB 2 1) 3) [[0x11000100030001]] (ADD (SUB 2 1) 1) [[0x11000100040000]] (ADD (DIV 2 1) 3) [[0x11000100040001]] (ADD (DIV 2 1) 1) [[0x11000100050000]] (ADD (SDIV 2 1) 3) [[0x11000100050001]] (ADD (SDIV 2 1) 1) [[0x11000100060000]] (ADD (MOD 2 1) 3) [[0x11000100060001]] (ADD (MOD 2 1) 1) [[0x11000100070000]] (ADD (SMOD 2 1) 3) [[0x11000100070001]] (ADD (SMOD 2 1) 1) [[0x11000100080000]] (ADD (ADDMOD 2 1 3) 3) [[0x11000100080001]] (ADD (ADDMOD 2 1 3) 1) [[0x11000100090000]] (ADD (MULMOD 2 1 3) 3) [[0x11000100090001]] (ADD (MULMOD 2 1 3) 1) [[0x110001000a0000]] (ADD (EXP 2 1) 3) [[0x110001000a0001]] (ADD (EXP 2 1) 1) [[0x11000100100000]] (ADD (LT 2 1) 3) [[0x11000100100001]] (ADD (LT 2 1) 1) [[0x11000100110000]] (ADD (GT 2 1) 3) [[0x11000100110001]] (ADD (GT 2 1) 1) [[0x11000100120000]] (ADD (SLT 2 1) 3) [[0x11000100120001]] (ADD (SLT 2 1) 1) [[0x11000100130000]] (ADD (SGT 2 1) 3) [[0x11000100130001]] (ADD (SGT 2 1) 1) [[0x11000100140000]] (ADD (EQ 2 1) 3) [[0x11000100140001]] (ADD (EQ 2 1) 1) [[0x11000100150000]] (ADD (ISZERO 2) 3) [[0x11000100150001]] (ADD (ISZERO 2) 1) [[0x11000100160000]] (ADD (AND 2 1) 3) [[0x11000100160001]] (ADD (AND 2 1) 1) [[0x11000100170000]] (ADD (OR 2 1) 3) [[0x11000100170001]] (ADD (OR 2 1) 1) [[0x11000100180000]] (ADD (XOR 2 1) 3) [[0x11000100180001]] (ADD (XOR 2 1) 1) [[0x11000100190000]] (ADD (NOT 2) 3) [[0x11000100190001]] (ADD (NOT 2) 1) [[0x110001001a0000]] (ADD (BYTE 2 1) 3) [[0x110001001a0001]] (ADD (BYTE 2 1) 1) [[0x110001001b0000]] (ADD (SHL 2 1) 3) [[0x110001001b0001]] (ADD (SHL 2 1) 1) [[0x110001001c0000]] (ADD (SHR 2 1) 3) [[0x110001001c0001]] (ADD (SHR 2 1) 1) [[0x110001001d0000]] (ADD (SAR 2 1) 3) [[0x110001001d0001]] (ADD (SAR 2 1) 1) [[0x11000200010000]] (MUL (ADD 2 1) 3) [[0x11000200010001]] (MUL (ADD 2 1) 1) [[0x11000200020000]] (MUL (MUL 2 1) 3) [[0x11000200020001]] (MUL (MUL 2 1) 1) [[0x11000200030000]] (MUL (SUB 2 1) 3) [[0x11000200030001]] (MUL (SUB 2 1) 1) [[0x11000200040000]] (MUL (DIV 2 1) 3) [[0x11000200040001]] (MUL (DIV 2 1) 1) [[0x11000200050000]] (MUL (SDIV 2 1) 3) [[0x11000200050001]] (MUL (SDIV 2 1) 1) [[0x11000200060000]] (MUL (MOD 2 1) 3) [[0x11000200060001]] (MUL (MOD 2 1) 1) [[0x11000200070000]] (MUL (SMOD 2 1) 3) [[0x11000200070001]] (MUL (SMOD 2 1) 1) [[0x11000200080000]] (MUL (ADDMOD 2 1 3) 3) [[0x11000200080001]] (MUL (ADDMOD 2 1 3) 1) [[0x11000200090000]] (MUL (MULMOD 2 1 3) 3) [[0x11000200090001]] (MUL (MULMOD 2 1 3) 1) [[0x110002000a0000]] (MUL (EXP 2 1) 3) [[0x110002000a0001]] (MUL (EXP 2 1) 1) [[0x11000200100000]] (MUL (LT 2 1) 3) [[0x11000200100001]] (MUL (LT 2 1) 1) [[0x11000200110000]] (MUL (GT 2 1) 3) [[0x11000200110001]] (MUL (GT 2 1) 1) [[0x11000200120000]] (MUL (SLT 2 1) 3) [[0x11000200120001]] (MUL (SLT 2 1) 1) [[0x11000200130000]] (MUL (SGT 2 1) 3) [[0x11000200130001]] (MUL (SGT 2 1) 1) [[0x11000200140000]] (MUL (EQ 2 1) 3) [[0x11000200140001]] (MUL (EQ 2 1) 1) [[0x11000200150000]] (MUL (ISZERO 2) 3) [[0x11000200150001]] (MUL (ISZERO 2) 1) [[0x11000200160000]] (MUL (AND 2 1) 3) [[0x11000200160001]] (MUL (AND 2 1) 1) [[0x11000200170000]] (MUL (OR 2 1) 3) [[0x11000200170001]] (MUL (OR 2 1) 1) [[0x11000200180000]] (MUL (XOR 2 1) 3) [[0x11000200180001]] (MUL (XOR 2 1) 1) [[0x11000200190000]] (MUL (NOT 2) 3) [[0x11000200190001]] (MUL (NOT 2) 1) [[0x110002001a0000]] (MUL (BYTE 2 1) 3) [[0x110002001a0001]] (MUL (BYTE 2 1) 1) [[0x110002001b0000]] (MUL (SHL 2 1) 3) [[0x110002001b0001]] (MUL (SHL 2 1) 1) [[0x110002001c0000]] (MUL (SHR 2 1) 3) [[0x110002001c0001]] (MUL (SHR 2 1) 1) [[0x110002001d0000]] (MUL (SAR 2 1) 3) [[0x110002001d0001]] (MUL (SAR 2 1) 1) [[0x11000300010000]] (SUB (ADD 2 1) 3) [[0x11000300010001]] (SUB (ADD 2 1) 1) [[0x11000300020000]] (SUB (MUL 2 1) 3) [[0x11000300020001]] (SUB (MUL 2 1) 1) [[0x11000300030000]] (SUB (SUB 2 1) 3) [[0x11000300030001]] (SUB (SUB 2 1) 1) [[0x11000300040000]] (SUB (DIV 2 1) 3) [[0x11000300040001]] (SUB (DIV 2 1) 1) [[0x11000300050000]] (SUB (SDIV 2 1) 3) [[0x11000300050001]] (SUB (SDIV 2 1) 1) [[0x11000300060000]] (SUB (MOD 2 1) 3) [[0x11000300060001]] (SUB (MOD 2 1) 1) [[0x11000300070000]] (SUB (SMOD 2 1) 3) [[0x11000300070001]] (SUB (SMOD 2 1) 1) [[0x11000300080000]] (SUB (ADDMOD 2 1 3) 3) [[0x11000300080001]] (SUB (ADDMOD 2 1 3) 1) [[0x11000300090000]] (SUB (MULMOD 2 1 3) 3) [[0x11000300090001]] (SUB (MULMOD 2 1 3) 1) [[0x110003000a0000]] (SUB (EXP 2 1) 3) [[0x110003000a0001]] (SUB (EXP 2 1) 1) [[0x11000300100000]] (SUB (LT 2 1) 3) [[0x11000300100001]] (SUB (LT 2 1) 1) [[0x11000300110000]] (SUB (GT 2 1) 3) [[0x11000300110001]] (SUB (GT 2 1) 1) [[0x11000300120000]] (SUB (SLT 2 1) 3) [[0x11000300120001]] (SUB (SLT 2 1) 1) [[0x11000300130000]] (SUB (SGT 2 1) 3) [[0x11000300130001]] (SUB (SGT 2 1) 1) [[0x11000300140000]] (SUB (EQ 2 1) 3) [[0x11000300140001]] (SUB (EQ 2 1) 1) [[0x11000300150000]] (SUB (ISZERO 2) 3) [[0x11000300150001]] (SUB (ISZERO 2) 1) [[0x11000300160000]] (SUB (AND 2 1) 3) [[0x11000300160001]] (SUB (AND 2 1) 1) [[0x11000300170000]] (SUB (OR 2 1) 3) [[0x11000300170001]] (SUB (OR 2 1) 1) [[0x11000300180000]] (SUB (XOR 2 1) 3) [[0x11000300180001]] (SUB (XOR 2 1) 1) [[0x11000300190000]] (SUB (NOT 2) 3) [[0x11000300190001]] (SUB (NOT 2) 1) [[0x110003001a0000]] (SUB (BYTE 2 1) 3) [[0x110003001a0001]] (SUB (BYTE 2 1) 1) [[0x110003001b0000]] (SUB (SHL 2 1) 3) [[0x110003001b0001]] (SUB (SHL 2 1) 1) [[0x110003001c0000]] (SUB (SHR 2 1) 3) [[0x110003001c0001]] (SUB (SHR 2 1) 1) [[0x110003001d0000]] (SUB (SAR 2 1) 3) [[0x110003001d0001]] (SUB (SAR 2 1) 1) [[0x11000400010000]] (DIV (ADD 2 1) 3) [[0x11000400010001]] (DIV (ADD 2 1) 1) [[0x11000400020000]] (DIV (MUL 2 1) 3) [[0x11000400020001]] (DIV (MUL 2 1) 1) [[0x11000400030000]] (DIV (SUB 2 1) 3) [[0x11000400030001]] (DIV (SUB 2 1) 1) [[0x11000400040000]] (DIV (DIV 2 1) 3) [[0x11000400040001]] (DIV (DIV 2 1) 1) [[0x11000400050000]] (DIV (SDIV 2 1) 3) [[0x11000400050001]] (DIV (SDIV 2 1) 1) [[0x11000400060000]] (DIV (MOD 2 1) 3) [[0x11000400060001]] (DIV (MOD 2 1) 1) [[0x11000400070000]] (DIV (SMOD 2 1) 3) [[0x11000400070001]] (DIV (SMOD 2 1) 1) [[0x11000400080000]] (DIV (ADDMOD 2 1 3) 3) [[0x11000400080001]] (DIV (ADDMOD 2 1 3) 1) [[0x11000400090000]] (DIV (MULMOD 2 1 3) 3) [[0x11000400090001]] (DIV (MULMOD 2 1 3) 1) [[0x110004000a0000]] (DIV (EXP 2 1) 3) [[0x110004000a0001]] (DIV (EXP 2 1) 1) [[0x11000400100000]] (DIV (LT 2 1) 3) [[0x11000400100001]] (DIV (LT 2 1) 1) [[0x11000400110000]] (DIV (GT 2 1) 3) [[0x11000400110001]] (DIV (GT 2 1) 1) [[0x11000400120000]] (DIV (SLT 2 1) 3) [[0x11000400120001]] (DIV (SLT 2 1) 1) [[0x11000400130000]] (DIV (SGT 2 1) 3) [[0x11000400130001]] (DIV (SGT 2 1) 1) [[0x11000400140000]] (DIV (EQ 2 1) 3) [[0x11000400140001]] (DIV (EQ 2 1) 1) [[0x11000400150000]] (DIV (ISZERO 2) 3) [[0x11000400150001]] (DIV (ISZERO 2) 1) [[0x11000400160000]] (DIV (AND 2 1) 3) [[0x11000400160001]] (DIV (AND 2 1) 1) [[0x11000400170000]] (DIV (OR 2 1) 3) [[0x11000400170001]] (DIV (OR 2 1) 1) [[0x11000400180000]] (DIV (XOR 2 1) 3) [[0x11000400180001]] (DIV (XOR 2 1) 1) [[0x11000400190000]] (DIV (NOT 2) 3) [[0x11000400190001]] (DIV (NOT 2) 1) [[0x110004001a0000]] (DIV (BYTE 2 1) 3) [[0x110004001a0001]] (DIV (BYTE 2 1) 1) [[0x110004001b0000]] (DIV (SHL 2 1) 3) [[0x110004001b0001]] (DIV (SHL 2 1) 1) [[0x110004001c0000]] (DIV (SHR 2 1) 3) [[0x110004001c0001]] (DIV (SHR 2 1) 1) [[0x110004001d0000]] (DIV (SAR 2 1) 3) [[0x110004001d0001]] (DIV (SAR 2 1) 1) [[0x11000500010000]] (SDIV (ADD 2 1) 3) [[0x11000500010001]] (SDIV (ADD 2 1) 1) [[0x11000500020000]] (SDIV (MUL 2 1) 3) [[0x11000500020001]] (SDIV (MUL 2 1) 1) [[0x11000500030000]] (SDIV (SUB 2 1) 3) [[0x11000500030001]] (SDIV (SUB 2 1) 1) [[0x11000500040000]] (SDIV (DIV 2 1) 3) [[0x11000500040001]] (SDIV (DIV 2 1) 1) [[0x11000500050000]] (SDIV (SDIV 2 1) 3) [[0x11000500050001]] (SDIV (SDIV 2 1) 1) [[0x11000500060000]] (SDIV (MOD 2 1) 3) [[0x11000500060001]] (SDIV (MOD 2 1) 1) [[0x11000500070000]] (SDIV (SMOD 2 1) 3) [[0x11000500070001]] (SDIV (SMOD 2 1) 1) [[0x11000500080000]] (SDIV (ADDMOD 2 1 3) 3) [[0x11000500080001]] (SDIV (ADDMOD 2 1 3) 1) [[0x11000500090000]] (SDIV (MULMOD 2 1 3) 3) [[0x11000500090001]] (SDIV (MULMOD 2 1 3) 1) [[0x110005000a0000]] (SDIV (EXP 2 1) 3) [[0x110005000a0001]] (SDIV (EXP 2 1) 1) [[0x11000500100000]] (SDIV (LT 2 1) 3) [[0x11000500100001]] (SDIV (LT 2 1) 1) [[0x11000500110000]] (SDIV (GT 2 1) 3) [[0x11000500110001]] (SDIV (GT 2 1) 1) [[0x11000500120000]] (SDIV (SLT 2 1) 3) [[0x11000500120001]] (SDIV (SLT 2 1) 1) [[0x11000500130000]] (SDIV (SGT 2 1) 3) [[0x11000500130001]] (SDIV (SGT 2 1) 1) [[0x11000500140000]] (SDIV (EQ 2 1) 3) [[0x11000500140001]] (SDIV (EQ 2 1) 1) [[0x11000500150000]] (SDIV (ISZERO 2) 3) [[0x11000500150001]] (SDIV (ISZERO 2) 1) [[0x11000500160000]] (SDIV (AND 2 1) 3) [[0x11000500160001]] (SDIV (AND 2 1) 1) [[0x11000500170000]] (SDIV (OR 2 1) 3) [[0x11000500170001]] (SDIV (OR 2 1) 1) [[0x11000500180000]] (SDIV (XOR 2 1) 3) [[0x11000500180001]] (SDIV (XOR 2 1) 1) [[0x11000500190000]] (SDIV (NOT 2) 3) [[0x11000500190001]] (SDIV (NOT 2) 1) [[0x110005001a0000]] (SDIV (BYTE 2 1) 3) [[0x110005001a0001]] (SDIV (BYTE 2 1) 1) [[0x110005001b0000]] (SDIV (SHL 2 1) 3) [[0x110005001b0001]] (SDIV (SHL 2 1) 1) [[0x110005001c0000]] (SDIV (SHR 2 1) 3) [[0x110005001c0001]] (SDIV (SHR 2 1) 1) [[0x110005001d0000]] (SDIV (SAR 2 1) 3) [[0x110005001d0001]] (SDIV (SAR 2 1) 1) [[0x11000600010000]] (MOD (ADD 2 1) 3) [[0x11000600010001]] (MOD (ADD 2 1) 1) [[0x11000600020000]] (MOD (MUL 2 1) 3) [[0x11000600020001]] (MOD (MUL 2 1) 1) [[0x11000600030000]] (MOD (SUB 2 1) 3) [[0x11000600030001]] (MOD (SUB 2 1) 1) [[0x11000600040000]] (MOD (DIV 2 1) 3) [[0x11000600040001]] (MOD (DIV 2 1) 1) [[0x11000600050000]] (MOD (SDIV 2 1) 3) [[0x11000600050001]] (MOD (SDIV 2 1) 1) [[0x11000600060000]] (MOD (MOD 2 1) 3) [[0x11000600060001]] (MOD (MOD 2 1) 1) [[0x11000600070000]] (MOD (SMOD 2 1) 3) [[0x11000600070001]] (MOD (SMOD 2 1) 1) [[0x11000600080000]] (MOD (ADDMOD 2 1 3) 3) [[0x11000600080001]] (MOD (ADDMOD 2 1 3) 1) [[0x11000600090000]] (MOD (MULMOD 2 1 3) 3) [[0x11000600090001]] (MOD (MULMOD 2 1 3) 1) [[0x110006000a0000]] (MOD (EXP 2 1) 3) [[0x110006000a0001]] (MOD (EXP 2 1) 1) [[0x11000600100000]] (MOD (LT 2 1) 3) [[0x11000600100001]] (MOD (LT 2 1) 1) [[0x11000600110000]] (MOD (GT 2 1) 3) [[0x11000600110001]] (MOD (GT 2 1) 1) [[0x11000600120000]] (MOD (SLT 2 1) 3) [[0x11000600120001]] (MOD (SLT 2 1) 1) [[0x11000600130000]] (MOD (SGT 2 1) 3) [[0x11000600130001]] (MOD (SGT 2 1) 1) [[0x11000600140000]] (MOD (EQ 2 1) 3) [[0x11000600140001]] (MOD (EQ 2 1) 1) [[0x11000600150000]] (MOD (ISZERO 2) 3) [[0x11000600150001]] (MOD (ISZERO 2) 1) [[0x11000600160000]] (MOD (AND 2 1) 3) [[0x11000600160001]] (MOD (AND 2 1) 1) [[0x11000600170000]] (MOD (OR 2 1) 3) [[0x11000600170001]] (MOD (OR 2 1) 1) [[0x11000600180000]] (MOD (XOR 2 1) 3) [[0x11000600180001]] (MOD (XOR 2 1) 1) [[0x11000600190000]] (MOD (NOT 2) 3) [[0x11000600190001]] (MOD (NOT 2) 1) [[0x110006001a0000]] (MOD (BYTE 2 1) 3) [[0x110006001a0001]] (MOD (BYTE 2 1) 1) [[0x110006001b0000]] (MOD (SHL 2 1) 3) [[0x110006001b0001]] (MOD (SHL 2 1) 1) [[0x110006001c0000]] (MOD (SHR 2 1) 3) [[0x110006001c0001]] (MOD (SHR 2 1) 1) [[0x110006001d0000]] (MOD (SAR 2 1) 3) [[0x110006001d0001]] (MOD (SAR 2 1) 1) [[0x11000700010000]] (SMOD (ADD 2 1) 3) [[0x11000700010001]] (SMOD (ADD 2 1) 1) [[0x11000700020000]] (SMOD (MUL 2 1) 3) [[0x11000700020001]] (SMOD (MUL 2 1) 1) [[0x11000700030000]] (SMOD (SUB 2 1) 3) [[0x11000700030001]] (SMOD (SUB 2 1) 1) [[0x11000700040000]] (SMOD (DIV 2 1) 3) [[0x11000700040001]] (SMOD (DIV 2 1) 1) [[0x11000700050000]] (SMOD (SDIV 2 1) 3) [[0x11000700050001]] (SMOD (SDIV 2 1) 1) [[0x11000700060000]] (SMOD (MOD 2 1) 3) [[0x11000700060001]] (SMOD (MOD 2 1) 1) [[0x11000700070000]] (SMOD (SMOD 2 1) 3) [[0x11000700070001]] (SMOD (SMOD 2 1) 1) [[0x11000700080000]] (SMOD (ADDMOD 2 1 3) 3) [[0x11000700080001]] (SMOD (ADDMOD 2 1 3) 1) [[0x11000700090000]] (SMOD (MULMOD 2 1 3) 3) [[0x11000700090001]] (SMOD (MULMOD 2 1 3) 1) [[0x110007000a0000]] (SMOD (EXP 2 1) 3) [[0x110007000a0001]] (SMOD (EXP 2 1) 1) [[0x11000700100000]] (SMOD (LT 2 1) 3) [[0x11000700100001]] (SMOD (LT 2 1) 1) [[0x11000700110000]] (SMOD (GT 2 1) 3) [[0x11000700110001]] (SMOD (GT 2 1) 1) [[0x11000700120000]] (SMOD (SLT 2 1) 3) [[0x11000700120001]] (SMOD (SLT 2 1) 1) [[0x11000700130000]] (SMOD (SGT 2 1) 3) [[0x11000700130001]] (SMOD (SGT 2 1) 1) [[0x11000700140000]] (SMOD (EQ 2 1) 3) [[0x11000700140001]] (SMOD (EQ 2 1) 1) [[0x11000700150000]] (SMOD (ISZERO 2) 3) [[0x11000700150001]] (SMOD (ISZERO 2) 1) [[0x11000700160000]] (SMOD (AND 2 1) 3) [[0x11000700160001]] (SMOD (AND 2 1) 1) [[0x11000700170000]] (SMOD (OR 2 1) 3) [[0x11000700170001]] (SMOD (OR 2 1) 1) [[0x11000700180000]] (SMOD (XOR 2 1) 3) [[0x11000700180001]] (SMOD (XOR 2 1) 1) [[0x11000700190000]] (SMOD (NOT 2) 3) [[0x11000700190001]] (SMOD (NOT 2) 1) [[0x110007001a0000]] (SMOD (BYTE 2 1) 3) [[0x110007001a0001]] (SMOD (BYTE 2 1) 1) [[0x110007001b0000]] (SMOD (SHL 2 1) 3) [[0x110007001b0001]] (SMOD (SHL 2 1) 1) [[0x110007001c0000]] (SMOD (SHR 2 1) 3) [[0x110007001c0001]] (SMOD (SHR 2 1) 1) [[0x110007001d0000]] (SMOD (SAR 2 1) 3) [[0x110007001d0001]] (SMOD (SAR 2 1) 1) [[0x11000800010000]] (ADDMOD (ADD 2 1) 3 2) [[0x11000800010001]] (ADDMOD (ADD 2 1) 1 2) [[0x11000800020000]] (ADDMOD (MUL 2 1) 3 2) [[0x11000800020001]] (ADDMOD (MUL 2 1) 1 2) [[0x11000800030000]] (ADDMOD (SUB 2 1) 3 2) [[0x11000800030001]] (ADDMOD (SUB 2 1) 1 2) [[0x11000800040000]] (ADDMOD (DIV 2 1) 3 2) [[0x11000800040001]] (ADDMOD (DIV 2 1) 1 2) [[0x11000800050000]] (ADDMOD (SDIV 2 1) 3 2) [[0x11000800050001]] (ADDMOD (SDIV 2 1) 1 2) [[0x11000800060000]] (ADDMOD (MOD 2 1) 3 2) [[0x11000800060001]] (ADDMOD (MOD 2 1) 1 2) [[0x11000800070000]] (ADDMOD (SMOD 2 1) 3 2) [[0x11000800070001]] (ADDMOD (SMOD 2 1) 1 2) [[0x11000800080000]] (ADDMOD (ADDMOD 2 1 3) 3 2) [[0x11000800080001]] (ADDMOD (ADDMOD 2 1 3) 1 2) [[0x11000800090000]] (ADDMOD (MULMOD 2 1 3) 3 2) [[0x11000800090001]] (ADDMOD (MULMOD 2 1 3) 1 2) [[0x110008000a0000]] (ADDMOD (EXP 2 1) 3 2) [[0x110008000a0001]] (ADDMOD (EXP 2 1) 1 2) [[0x11000800100000]] (ADDMOD (LT 2 1) 3 2) [[0x11000800100001]] (ADDMOD (LT 2 1) 1 2) [[0x11000800110000]] (ADDMOD (GT 2 1) 3 2) [[0x11000800110001]] (ADDMOD (GT 2 1) 1 2) [[0x11000800120000]] (ADDMOD (SLT 2 1) 3 2) [[0x11000800120001]] (ADDMOD (SLT 2 1) 1 2) [[0x11000800130000]] (ADDMOD (SGT 2 1) 3 2) [[0x11000800130001]] (ADDMOD (SGT 2 1) 1 2) [[0x11000800140000]] (ADDMOD (EQ 2 1) 3 2) [[0x11000800140001]] (ADDMOD (EQ 2 1) 1 2) [[0x11000800150000]] (ADDMOD (ISZERO 2) 3 2) [[0x11000800150001]] (ADDMOD (ISZERO 2) 1 2) [[0x11000800160000]] (ADDMOD (AND 2 1) 3 2) [[0x11000800160001]] (ADDMOD (AND 2 1) 1 2) [[0x11000800170000]] (ADDMOD (OR 2 1) 3 2) [[0x11000800170001]] (ADDMOD (OR 2 1) 1 2) [[0x11000800180000]] (ADDMOD (XOR 2 1) 3 2) [[0x11000800180001]] (ADDMOD (XOR 2 1) 1 2) [[0x11000800190000]] (ADDMOD (NOT 2) 3 2) [[0x11000800190001]] (ADDMOD (NOT 2) 1 2) [[0x110008001a0000]] (ADDMOD (BYTE 2 1) 3 2) [[0x110008001a0001]] (ADDMOD (BYTE 2 1) 1 2) [[0x110008001b0000]] (ADDMOD (SHL 2 1) 3 2) [[0x110008001b0001]] (ADDMOD (SHL 2 1) 1 2) [[0x110008001c0000]] (ADDMOD (SHR 2 1) 3 2) [[0x110008001c0001]] (ADDMOD (SHR 2 1) 1 2) [[0x110008001d0000]] (ADDMOD (SAR 2 1) 3 2) [[0x110008001d0001]] (ADDMOD (SAR 2 1) 1 2) [[0x11000900010000]] (MULMOD (ADD 2 1) 3 2) [[0x11000900010001]] (MULMOD (ADD 2 1) 1 2) [[0x11000900020000]] (MULMOD (MUL 2 1) 3 2) [[0x11000900020001]] (MULMOD (MUL 2 1) 1 2) [[0x11000900030000]] (MULMOD (SUB 2 1) 3 2) [[0x11000900030001]] (MULMOD (SUB 2 1) 1 2) [[0x11000900040000]] (MULMOD (DIV 2 1) 3 2) [[0x11000900040001]] (MULMOD (DIV 2 1) 1 2) [[0x11000900050000]] (MULMOD (SDIV 2 1) 3 2) [[0x11000900050001]] (MULMOD (SDIV 2 1) 1 2) [[0x11000900060000]] (MULMOD (MOD 2 1) 3 2) [[0x11000900060001]] (MULMOD (MOD 2 1) 1 2) [[0x11000900070000]] (MULMOD (SMOD 2 1) 3 2) [[0x11000900070001]] (MULMOD (SMOD 2 1) 1 2) [[0x11000900080000]] (MULMOD (ADDMOD 2 1 3) 3 2) [[0x11000900080001]] (MULMOD (ADDMOD 2 1 3) 1 2) [[0x11000900090000]] (MULMOD (MULMOD 2 1 3) 3 2) [[0x11000900090001]] (MULMOD (MULMOD 2 1 3) 1 2) [[0x110009000a0000]] (MULMOD (EXP 2 1) 3 2) [[0x110009000a0001]] (MULMOD (EXP 2 1) 1 2) [[0x11000900100000]] (MULMOD (LT 2 1) 3 2) [[0x11000900100001]] (MULMOD (LT 2 1) 1 2) [[0x11000900110000]] (MULMOD (GT 2 1) 3 2) [[0x11000900110001]] (MULMOD (GT 2 1) 1 2) [[0x11000900120000]] (MULMOD (SLT 2 1) 3 2) [[0x11000900120001]] (MULMOD (SLT 2 1) 1 2) [[0x11000900130000]] (MULMOD (SGT 2 1) 3 2) [[0x11000900130001]] (MULMOD (SGT 2 1) 1 2) [[0x11000900140000]] (MULMOD (EQ 2 1) 3 2) [[0x11000900140001]] (MULMOD (EQ 2 1) 1 2) [[0x11000900150000]] (MULMOD (ISZERO 2) 3 2) [[0x11000900150001]] (MULMOD (ISZERO 2) 1 2) [[0x11000900160000]] (MULMOD (AND 2 1) 3 2) [[0x11000900160001]] (MULMOD (AND 2 1) 1 2) [[0x11000900170000]] (MULMOD (OR 2 1) 3 2) [[0x11000900170001]] (MULMOD (OR 2 1) 1 2) [[0x11000900180000]] (MULMOD (XOR 2 1) 3 2) [[0x11000900180001]] (MULMOD (XOR 2 1) 1 2) [[0x11000900190000]] (MULMOD (NOT 2) 3 2) [[0x11000900190001]] (MULMOD (NOT 2) 1 2) [[0x110009001a0000]] (MULMOD (BYTE 2 1) 3 2) [[0x110009001a0001]] (MULMOD (BYTE 2 1) 1 2) [[0x110009001b0000]] (MULMOD (SHL 2 1) 3 2) [[0x110009001b0001]] (MULMOD (SHL 2 1) 1 2) [[0x110009001c0000]] (MULMOD (SHR 2 1) 3 2) [[0x110009001c0001]] (MULMOD (SHR 2 1) 1 2) [[0x110009001d0000]] (MULMOD (SAR 2 1) 3 2) [[0x110009001d0001]] (MULMOD (SAR 2 1) 1 2) [[0x11000a00010000]] (EXP (ADD 2 1) 3) [[0x11000a00010001]] (EXP (ADD 2 1) 1) [[0x11000a00020000]] (EXP (MUL 2 1) 3) [[0x11000a00020001]] (EXP (MUL 2 1) 1) [[0x11000a00030000]] (EXP (SUB 2 1) 3) [[0x11000a00030001]] (EXP (SUB 2 1) 1) [[0x11000a00040000]] (EXP (DIV 2 1) 3) [[0x11000a00040001]] (EXP (DIV 2 1) 1) [[0x11000a00050000]] (EXP (SDIV 2 1) 3) [[0x11000a00050001]] (EXP (SDIV 2 1) 1) [[0x11000a00060000]] (EXP (MOD 2 1) 3) [[0x11000a00060001]] (EXP (MOD 2 1) 1) [[0x11000a00070000]] (EXP (SMOD 2 1) 3) [[0x11000a00070001]] (EXP (SMOD 2 1) 1) [[0x11000a00080000]] (EXP (ADDMOD 2 1 3) 3) [[0x11000a00080001]] (EXP (ADDMOD 2 1 3) 1) [[0x11000a00090000]] (EXP (MULMOD 2 1 3) 3) [[0x11000a00090001]] (EXP (MULMOD 2 1 3) 1) [[0x11000a000a0000]] (EXP (EXP 2 1) 3) [[0x11000a000a0001]] (EXP (EXP 2 1) 1) [[0x11000a00100000]] (EXP (LT 2 1) 3) [[0x11000a00100001]] (EXP (LT 2 1) 1) [[0x11000a00110000]] (EXP (GT 2 1) 3) [[0x11000a00110001]] (EXP (GT 2 1) 1) [[0x11000a00120000]] (EXP (SLT 2 1) 3) [[0x11000a00120001]] (EXP (SLT 2 1) 1) [[0x11000a00130000]] (EXP (SGT 2 1) 3) [[0x11000a00130001]] (EXP (SGT 2 1) 1) [[0x11000a00140000]] (EXP (EQ 2 1) 3) [[0x11000a00140001]] (EXP (EQ 2 1) 1) [[0x11000a00150000]] (EXP (ISZERO 2) 3) [[0x11000a00150001]] (EXP (ISZERO 2) 1) [[0x11000a00160000]] (EXP (AND 2 1) 3) [[0x11000a00160001]] (EXP (AND 2 1) 1) [[0x11000a00170000]] (EXP (OR 2 1) 3) [[0x11000a00170001]] (EXP (OR 2 1) 1) [[0x11000a00180000]] (EXP (XOR 2 1) 3) [[0x11000a00180001]] (EXP (XOR 2 1) 1) [[0x11000a00190000]] (EXP (NOT 2) 3) [[0x11000a00190001]] (EXP (NOT 2) 1) [[0x11000a001a0000]] (EXP (BYTE 2 1) 3) [[0x11000a001a0001]] (EXP (BYTE 2 1) 1) [[0x11000a001b0000]] (EXP (SHL 2 1) 3) [[0x11000a001b0001]] (EXP (SHL 2 1) 1) [[0x11000a001c0000]] (EXP (SHR 2 1) 3) [[0x11000a001c0001]] (EXP (SHR 2 1) 1) [[0x11000a001d0000]] (EXP (SAR 2 1) 3) [[0x11000a001d0001]] (EXP (SAR 2 1) 1) [[0x11001000010000]] (LT (ADD 2 1) 3) [[0x11001000010001]] (LT (ADD 2 1) 1) [[0x11001000020000]] (LT (MUL 2 1) 3) [[0x11001000020001]] (LT (MUL 2 1) 1) [[0x11001000030000]] (LT (SUB 2 1) 3) [[0x11001000030001]] (LT (SUB 2 1) 1) [[0x11001000040000]] (LT (DIV 2 1) 3) [[0x11001000040001]] (LT (DIV 2 1) 1) [[0x11001000050000]] (LT (SDIV 2 1) 3) [[0x11001000050001]] (LT (SDIV 2 1) 1) [[0x11001000060000]] (LT (MOD 2 1) 3) [[0x11001000060001]] (LT (MOD 2 1) 1) [[0x11001000070000]] (LT (SMOD 2 1) 3) [[0x11001000070001]] (LT (SMOD 2 1) 1) [[0x11001000080000]] (LT (ADDMOD 2 1 3) 3) [[0x11001000080001]] (LT (ADDMOD 2 1 3) 1) [[0x11001000090000]] (LT (MULMOD 2 1 3) 3) [[0x11001000090001]] (LT (MULMOD 2 1 3) 1) [[0x110010000a0000]] (LT (EXP 2 1) 3) [[0x110010000a0001]] (LT (EXP 2 1) 1) [[0x11001000100000]] (LT (LT 2 1) 3) [[0x11001000100001]] (LT (LT 2 1) 1) [[0x11001000110000]] (LT (GT 2 1) 3) [[0x11001000110001]] (LT (GT 2 1) 1) [[0x11001000120000]] (LT (SLT 2 1) 3) [[0x11001000120001]] (LT (SLT 2 1) 1) [[0x11001000130000]] (LT (SGT 2 1) 3) [[0x11001000130001]] (LT (SGT 2 1) 1) [[0x11001000140000]] (LT (EQ 2 1) 3) [[0x11001000140001]] (LT (EQ 2 1) 1) [[0x11001000150000]] (LT (ISZERO 2) 3) [[0x11001000150001]] (LT (ISZERO 2) 1) [[0x11001000160000]] (LT (AND 2 1) 3) [[0x11001000160001]] (LT (AND 2 1) 1) [[0x11001000170000]] (LT (OR 2 1) 3) [[0x11001000170001]] (LT (OR 2 1) 1) [[0x11001000180000]] (LT (XOR 2 1) 3) [[0x11001000180001]] (LT (XOR 2 1) 1) [[0x11001000190000]] (LT (NOT 2) 3) [[0x11001000190001]] (LT (NOT 2) 1) [[0x110010001a0000]] (LT (BYTE 2 1) 3) [[0x110010001a0001]] (LT (BYTE 2 1) 1) [[0x110010001b0000]] (LT (SHL 2 1) 3) [[0x110010001b0001]] (LT (SHL 2 1) 1) [[0x110010001c0000]] (LT (SHR 2 1) 3) [[0x110010001c0001]] (LT (SHR 2 1) 1) [[0x110010001d0000]] (LT (SAR 2 1) 3) [[0x110010001d0001]] (LT (SAR 2 1) 1) [[0x11001100010000]] (GT (ADD 2 1) 3) [[0x11001100010001]] (GT (ADD 2 1) 1) [[0x11001100020000]] (GT (MUL 2 1) 3) [[0x11001100020001]] (GT (MUL 2 1) 1) [[0x11001100030000]] (GT (SUB 2 1) 3) [[0x11001100030001]] (GT (SUB 2 1) 1) [[0x11001100040000]] (GT (DIV 2 1) 3) [[0x11001100040001]] (GT (DIV 2 1) 1) [[0x11001100050000]] (GT (SDIV 2 1) 3) [[0x11001100050001]] (GT (SDIV 2 1) 1) [[0x11001100060000]] (GT (MOD 2 1) 3) [[0x11001100060001]] (GT (MOD 2 1) 1) [[0x11001100070000]] (GT (SMOD 2 1) 3) [[0x11001100070001]] (GT (SMOD 2 1) 1) [[0x11001100080000]] (GT (ADDMOD 2 1 3) 3) [[0x11001100080001]] (GT (ADDMOD 2 1 3) 1) [[0x11001100090000]] (GT (MULMOD 2 1 3) 3) [[0x11001100090001]] (GT (MULMOD 2 1 3) 1) [[0x110011000a0000]] (GT (EXP 2 1) 3) [[0x110011000a0001]] (GT (EXP 2 1) 1) [[0x11001100100000]] (GT (LT 2 1) 3) [[0x11001100100001]] (GT (LT 2 1) 1) [[0x11001100110000]] (GT (GT 2 1) 3) [[0x11001100110001]] (GT (GT 2 1) 1) [[0x11001100120000]] (GT (SLT 2 1) 3) [[0x11001100120001]] (GT (SLT 2 1) 1) [[0x11001100130000]] (GT (SGT 2 1) 3) [[0x11001100130001]] (GT (SGT 2 1) 1) [[0x11001100140000]] (GT (EQ 2 1) 3) [[0x11001100140001]] (GT (EQ 2 1) 1) [[0x11001100150000]] (GT (ISZERO 2) 3) [[0x11001100150001]] (GT (ISZERO 2) 1) [[0x11001100160000]] (GT (AND 2 1) 3) [[0x11001100160001]] (GT (AND 2 1) 1) [[0x11001100170000]] (GT (OR 2 1) 3) [[0x11001100170001]] (GT (OR 2 1) 1) [[0x11001100180000]] (GT (XOR 2 1) 3) [[0x11001100180001]] (GT (XOR 2 1) 1) [[0x11001100190000]] (GT (NOT 2) 3) [[0x11001100190001]] (GT (NOT 2) 1) [[0x110011001a0000]] (GT (BYTE 2 1) 3) [[0x110011001a0001]] (GT (BYTE 2 1) 1) [[0x110011001b0000]] (GT (SHL 2 1) 3) [[0x110011001b0001]] (GT (SHL 2 1) 1) [[0x110011001c0000]] (GT (SHR 2 1) 3) [[0x110011001c0001]] (GT (SHR 2 1) 1) [[0x110011001d0000]] (GT (SAR 2 1) 3) [[0x110011001d0001]] (GT (SAR 2 1) 1) [[0x11001200010000]] (SLT (ADD 2 1) 3) [[0x11001200010001]] (SLT (ADD 2 1) 1) [[0x11001200020000]] (SLT (MUL 2 1) 3) [[0x11001200020001]] (SLT (MUL 2 1) 1) [[0x11001200030000]] (SLT (SUB 2 1) 3) [[0x11001200030001]] (SLT (SUB 2 1) 1) [[0x11001200040000]] (SLT (DIV 2 1) 3) [[0x11001200040001]] (SLT (DIV 2 1) 1) [[0x11001200050000]] (SLT (SDIV 2 1) 3) [[0x11001200050001]] (SLT (SDIV 2 1) 1) [[0x11001200060000]] (SLT (MOD 2 1) 3) [[0x11001200060001]] (SLT (MOD 2 1) 1) [[0x11001200070000]] (SLT (SMOD 2 1) 3) [[0x11001200070001]] (SLT (SMOD 2 1) 1) [[0x11001200080000]] (SLT (ADDMOD 2 1 3) 3) [[0x11001200080001]] (SLT (ADDMOD 2 1 3) 1) [[0x11001200090000]] (SLT (MULMOD 2 1 3) 3) [[0x11001200090001]] (SLT (MULMOD 2 1 3) 1) [[0x110012000a0000]] (SLT (EXP 2 1) 3) [[0x110012000a0001]] (SLT (EXP 2 1) 1) [[0x11001200100000]] (SLT (LT 2 1) 3) [[0x11001200100001]] (SLT (LT 2 1) 1) [[0x11001200110000]] (SLT (GT 2 1) 3) [[0x11001200110001]] (SLT (GT 2 1) 1) [[0x11001200120000]] (SLT (SLT 2 1) 3) [[0x11001200120001]] (SLT (SLT 2 1) 1) [[0x11001200130000]] (SLT (SGT 2 1) 3) [[0x11001200130001]] (SLT (SGT 2 1) 1) [[0x11001200140000]] (SLT (EQ 2 1) 3) [[0x11001200140001]] (SLT (EQ 2 1) 1) [[0x11001200150000]] (SLT (ISZERO 2) 3) [[0x11001200150001]] (SLT (ISZERO 2) 1) [[0x11001200160000]] (SLT (AND 2 1) 3) [[0x11001200160001]] (SLT (AND 2 1) 1) [[0x11001200170000]] (SLT (OR 2 1) 3) [[0x11001200170001]] (SLT (OR 2 1) 1) [[0x11001200180000]] (SLT (XOR 2 1) 3) [[0x11001200180001]] (SLT (XOR 2 1) 1) [[0x11001200190000]] (SLT (NOT 2) 3) [[0x11001200190001]] (SLT (NOT 2) 1) [[0x110012001a0000]] (SLT (BYTE 2 1) 3) [[0x110012001a0001]] (SLT (BYTE 2 1) 1) [[0x110012001b0000]] (SLT (SHL 2 1) 3) [[0x110012001b0001]] (SLT (SHL 2 1) 1) [[0x110012001c0000]] (SLT (SHR 2 1) 3) [[0x110012001c0001]] (SLT (SHR 2 1) 1) [[0x110012001d0000]] (SLT (SAR 2 1) 3) [[0x110012001d0001]] (SLT (SAR 2 1) 1) [[0x11001300010000]] (SGT (ADD 2 1) 3) [[0x11001300010001]] (SGT (ADD 2 1) 1) [[0x11001300020000]] (SGT (MUL 2 1) 3) [[0x11001300020001]] (SGT (MUL 2 1) 1) [[0x11001300030000]] (SGT (SUB 2 1) 3) [[0x11001300030001]] (SGT (SUB 2 1) 1) [[0x11001300040000]] (SGT (DIV 2 1) 3) [[0x11001300040001]] (SGT (DIV 2 1) 1) [[0x11001300050000]] (SGT (SDIV 2 1) 3) [[0x11001300050001]] (SGT (SDIV 2 1) 1) [[0x11001300060000]] (SGT (MOD 2 1) 3) [[0x11001300060001]] (SGT (MOD 2 1) 1) [[0x11001300070000]] (SGT (SMOD 2 1) 3) [[0x11001300070001]] (SGT (SMOD 2 1) 1) [[0x11001300080000]] (SGT (ADDMOD 2 1 3) 3) [[0x11001300080001]] (SGT (ADDMOD 2 1 3) 1) [[0x11001300090000]] (SGT (MULMOD 2 1 3) 3) [[0x11001300090001]] (SGT (MULMOD 2 1 3) 1) [[0x110013000a0000]] (SGT (EXP 2 1) 3) [[0x110013000a0001]] (SGT (EXP 2 1) 1) [[0x11001300100000]] (SGT (LT 2 1) 3) [[0x11001300100001]] (SGT (LT 2 1) 1) [[0x11001300110000]] (SGT (GT 2 1) 3) [[0x11001300110001]] (SGT (GT 2 1) 1) [[0x11001300120000]] (SGT (SLT 2 1) 3) [[0x11001300120001]] (SGT (SLT 2 1) 1) [[0x11001300130000]] (SGT (SGT 2 1) 3) [[0x11001300130001]] (SGT (SGT 2 1) 1) [[0x11001300140000]] (SGT (EQ 2 1) 3) [[0x11001300140001]] (SGT (EQ 2 1) 1) [[0x11001300150000]] (SGT (ISZERO 2) 3) [[0x11001300150001]] (SGT (ISZERO 2) 1) [[0x11001300160000]] (SGT (AND 2 1) 3) [[0x11001300160001]] (SGT (AND 2 1) 1) [[0x11001300170000]] (SGT (OR 2 1) 3) [[0x11001300170001]] (SGT (OR 2 1) 1) [[0x11001300180000]] (SGT (XOR 2 1) 3) [[0x11001300180001]] (SGT (XOR 2 1) 1) [[0x11001300190000]] (SGT (NOT 2) 3) [[0x11001300190001]] (SGT (NOT 2) 1) [[0x110013001a0000]] (SGT (BYTE 2 1) 3) [[0x110013001a0001]] (SGT (BYTE 2 1) 1) [[0x110013001b0000]] (SGT (SHL 2 1) 3) [[0x110013001b0001]] (SGT (SHL 2 1) 1) [[0x110013001c0000]] (SGT (SHR 2 1) 3) [[0x110013001c0001]] (SGT (SHR 2 1) 1) [[0x110013001d0000]] (SGT (SAR 2 1) 3) [[0x110013001d0001]] (SGT (SAR 2 1) 1) [[0x11001400010000]] (EQ (ADD 2 1) 3) [[0x11001400010001]] (EQ (ADD 2 1) 1) [[0x11001400020000]] (EQ (MUL 2 1) 3) [[0x11001400020001]] (EQ (MUL 2 1) 1) [[0x11001400030000]] (EQ (SUB 2 1) 3) [[0x11001400030001]] (EQ (SUB 2 1) 1) [[0x11001400040000]] (EQ (DIV 2 1) 3) [[0x11001400040001]] (EQ (DIV 2 1) 1) [[0x11001400050000]] (EQ (SDIV 2 1) 3) [[0x11001400050001]] (EQ (SDIV 2 1) 1) [[0x11001400060000]] (EQ (MOD 2 1) 3) [[0x11001400060001]] (EQ (MOD 2 1) 1) [[0x11001400070000]] (EQ (SMOD 2 1) 3) [[0x11001400070001]] (EQ (SMOD 2 1) 1) [[0x11001400080000]] (EQ (ADDMOD 2 1 3) 3) [[0x11001400080001]] (EQ (ADDMOD 2 1 3) 1) [[0x11001400090000]] (EQ (MULMOD 2 1 3) 3) [[0x11001400090001]] (EQ (MULMOD 2 1 3) 1) [[0x110014000a0000]] (EQ (EXP 2 1) 3) [[0x110014000a0001]] (EQ (EXP 2 1) 1) [[0x11001400100000]] (EQ (LT 2 1) 3) [[0x11001400100001]] (EQ (LT 2 1) 1) [[0x11001400110000]] (EQ (GT 2 1) 3) [[0x11001400110001]] (EQ (GT 2 1) 1) [[0x11001400120000]] (EQ (SLT 2 1) 3) [[0x11001400120001]] (EQ (SLT 2 1) 1) [[0x11001400130000]] (EQ (SGT 2 1) 3) [[0x11001400130001]] (EQ (SGT 2 1) 1) [[0x11001400140000]] (EQ (EQ 2 1) 3) [[0x11001400140001]] (EQ (EQ 2 1) 1) [[0x11001400150000]] (EQ (ISZERO 2) 3) [[0x11001400150001]] (EQ (ISZERO 2) 1) [[0x11001400160000]] (EQ (AND 2 1) 3) [[0x11001400160001]] (EQ (AND 2 1) 1) [[0x11001400170000]] (EQ (OR 2 1) 3) [[0x11001400170001]] (EQ (OR 2 1) 1) [[0x11001400180000]] (EQ (XOR 2 1) 3) [[0x11001400180001]] (EQ (XOR 2 1) 1) [[0x11001400190000]] (EQ (NOT 2) 3) [[0x11001400190001]] (EQ (NOT 2) 1) [[0x110014001a0000]] (EQ (BYTE 2 1) 3) [[0x110014001a0001]] (EQ (BYTE 2 1) 1) [[0x110014001b0000]] (EQ (SHL 2 1) 3) [[0x110014001b0001]] (EQ (SHL 2 1) 1) [[0x110014001c0000]] (EQ (SHR 2 1) 3) [[0x110014001c0001]] (EQ (SHR 2 1) 1) [[0x110014001d0000]] (EQ (SAR 2 1) 3) [[0x110014001d0001]] (EQ (SAR 2 1) 1) [[0x11001500010000]] (ISZERO (ADD 2 1)) [[0x11001500010001]] (ISZERO (ADD 2 1)) [[0x11001500020000]] (ISZERO (MUL 2 1)) [[0x11001500020001]] (ISZERO (MUL 2 1)) [[0x11001500030000]] (ISZERO (SUB 2 1)) [[0x11001500030001]] (ISZERO (SUB 2 1)) [[0x11001500040000]] (ISZERO (DIV 2 1)) [[0x11001500040001]] (ISZERO (DIV 2 1)) [[0x11001500050000]] (ISZERO (SDIV 2 1)) [[0x11001500050001]] (ISZERO (SDIV 2 1)) [[0x11001500060000]] (ISZERO (MOD 2 1)) [[0x11001500060001]] (ISZERO (MOD 2 1)) [[0x11001500070000]] (ISZERO (SMOD 2 1)) [[0x11001500070001]] (ISZERO (SMOD 2 1)) [[0x11001500080000]] (ISZERO (ADDMOD 2 1 3)) [[0x11001500080001]] (ISZERO (ADDMOD 2 1 3)) [[0x11001500090000]] (ISZERO (MULMOD 2 1 3)) [[0x11001500090001]] (ISZERO (MULMOD 2 1 3)) [[0x110015000a0000]] (ISZERO (EXP 2 1)) [[0x110015000a0001]] (ISZERO (EXP 2 1)) [[0x11001500100000]] (ISZERO (LT 2 1)) [[0x11001500100001]] (ISZERO (LT 2 1)) [[0x11001500110000]] (ISZERO (GT 2 1)) [[0x11001500110001]] (ISZERO (GT 2 1)) [[0x11001500120000]] (ISZERO (SLT 2 1)) [[0x11001500120001]] (ISZERO (SLT 2 1)) [[0x11001500130000]] (ISZERO (SGT 2 1)) [[0x11001500130001]] (ISZERO (SGT 2 1)) [[0x11001500140000]] (ISZERO (EQ 2 1)) [[0x11001500140001]] (ISZERO (EQ 2 1)) [[0x11001500150000]] (ISZERO (ISZERO 2)) [[0x11001500150001]] (ISZERO (ISZERO 2)) [[0x11001500160000]] (ISZERO (AND 2 1)) [[0x11001500160001]] (ISZERO (AND 2 1)) [[0x11001500170000]] (ISZERO (OR 2 1)) [[0x11001500170001]] (ISZERO (OR 2 1)) [[0x11001500180000]] (ISZERO (XOR 2 1)) [[0x11001500180001]] (ISZERO (XOR 2 1)) [[0x11001500190000]] (ISZERO (NOT 2)) [[0x11001500190001]] (ISZERO (NOT 2)) [[0x110015001a0000]] (ISZERO (BYTE 2 1)) [[0x110015001a0001]] (ISZERO (BYTE 2 1)) [[0x110015001b0000]] (ISZERO (SHL 2 1)) [[0x110015001b0001]] (ISZERO (SHL 2 1)) [[0x110015001c0000]] (ISZERO (SHR 2 1)) [[0x110015001c0001]] (ISZERO (SHR 2 1)) [[0x110015001d0000]] (ISZERO (SAR 2 1)) [[0x110015001d0001]] (ISZERO (SAR 2 1)) [[0x11001600010000]] (AND (ADD 2 1) 3) [[0x11001600010001]] (AND (ADD 2 1) 1) [[0x11001600020000]] (AND (MUL 2 1) 3) [[0x11001600020001]] (AND (MUL 2 1) 1) [[0x11001600030000]] (AND (SUB 2 1) 3) [[0x11001600030001]] (AND (SUB 2 1) 1) [[0x11001600040000]] (AND (DIV 2 1) 3) [[0x11001600040001]] (AND (DIV 2 1) 1) [[0x11001600050000]] (AND (SDIV 2 1) 3) [[0x11001600050001]] (AND (SDIV 2 1) 1) [[0x11001600060000]] (AND (MOD 2 1) 3) [[0x11001600060001]] (AND (MOD 2 1) 1) [[0x11001600070000]] (AND (SMOD 2 1) 3) [[0x11001600070001]] (AND (SMOD 2 1) 1) [[0x11001600080000]] (AND (ADDMOD 2 1 3) 3) [[0x11001600080001]] (AND (ADDMOD 2 1 3) 1) [[0x11001600090000]] (AND (MULMOD 2 1 3) 3) [[0x11001600090001]] (AND (MULMOD 2 1 3) 1) [[0x110016000a0000]] (AND (EXP 2 1) 3) [[0x110016000a0001]] (AND (EXP 2 1) 1) [[0x11001600100000]] (AND (LT 2 1) 3) [[0x11001600100001]] (AND (LT 2 1) 1) [[0x11001600110000]] (AND (GT 2 1) 3) [[0x11001600110001]] (AND (GT 2 1) 1) [[0x11001600120000]] (AND (SLT 2 1) 3) [[0x11001600120001]] (AND (SLT 2 1) 1) [[0x11001600130000]] (AND (SGT 2 1) 3) [[0x11001600130001]] (AND (SGT 2 1) 1) [[0x11001600140000]] (AND (EQ 2 1) 3) [[0x11001600140001]] (AND (EQ 2 1) 1) [[0x11001600150000]] (AND (ISZERO 2) 3) [[0x11001600150001]] (AND (ISZERO 2) 1) [[0x11001600160000]] (AND (AND 2 1) 3) [[0x11001600160001]] (AND (AND 2 1) 1) [[0x11001600170000]] (AND (OR 2 1) 3) [[0x11001600170001]] (AND (OR 2 1) 1) [[0x11001600180000]] (AND (XOR 2 1) 3) [[0x11001600180001]] (AND (XOR 2 1) 1) [[0x11001600190000]] (AND (NOT 2) 3) [[0x11001600190001]] (AND (NOT 2) 1) [[0x110016001a0000]] (AND (BYTE 2 1) 3) [[0x110016001a0001]] (AND (BYTE 2 1) 1) [[0x110016001b0000]] (AND (SHL 2 1) 3) [[0x110016001b0001]] (AND (SHL 2 1) 1) [[0x110016001c0000]] (AND (SHR 2 1) 3) [[0x110016001c0001]] (AND (SHR 2 1) 1) [[0x110016001d0000]] (AND (SAR 2 1) 3) [[0x110016001d0001]] (AND (SAR 2 1) 1) [[0x11001700010000]] (OR (ADD 2 1) 3) [[0x11001700010001]] (OR (ADD 2 1) 1) [[0x11001700020000]] (OR (MUL 2 1) 3) [[0x11001700020001]] (OR (MUL 2 1) 1) [[0x11001700030000]] (OR (SUB 2 1) 3) [[0x11001700030001]] (OR (SUB 2 1) 1) [[0x11001700040000]] (OR (DIV 2 1) 3) [[0x11001700040001]] (OR (DIV 2 1) 1) [[0x11001700050000]] (OR (SDIV 2 1) 3) [[0x11001700050001]] (OR (SDIV 2 1) 1) [[0x11001700060000]] (OR (MOD 2 1) 3) [[0x11001700060001]] (OR (MOD 2 1) 1) [[0x11001700070000]] (OR (SMOD 2 1) 3) [[0x11001700070001]] (OR (SMOD 2 1) 1) [[0x11001700080000]] (OR (ADDMOD 2 1 3) 3) [[0x11001700080001]] (OR (ADDMOD 2 1 3) 1) [[0x11001700090000]] (OR (MULMOD 2 1 3) 3) [[0x11001700090001]] (OR (MULMOD 2 1 3) 1) [[0x110017000a0000]] (OR (EXP 2 1) 3) [[0x110017000a0001]] (OR (EXP 2 1) 1) [[0x11001700100000]] (OR (LT 2 1) 3) [[0x11001700100001]] (OR (LT 2 1) 1) [[0x11001700110000]] (OR (GT 2 1) 3) [[0x11001700110001]] (OR (GT 2 1) 1) [[0x11001700120000]] (OR (SLT 2 1) 3) [[0x11001700120001]] (OR (SLT 2 1) 1) [[0x11001700130000]] (OR (SGT 2 1) 3) [[0x11001700130001]] (OR (SGT 2 1) 1) [[0x11001700140000]] (OR (EQ 2 1) 3) [[0x11001700140001]] (OR (EQ 2 1) 1) [[0x11001700150000]] (OR (ISZERO 2) 3) [[0x11001700150001]] (OR (ISZERO 2) 1) [[0x11001700160000]] (OR (AND 2 1) 3) [[0x11001700160001]] (OR (AND 2 1) 1) [[0x11001700170000]] (OR (OR 2 1) 3) [[0x11001700170001]] (OR (OR 2 1) 1) [[0x11001700180000]] (OR (XOR 2 1) 3) [[0x11001700180001]] (OR (XOR 2 1) 1) [[0x11001700190000]] (OR (NOT 2) 3) [[0x11001700190001]] (OR (NOT 2) 1) [[0x110017001a0000]] (OR (BYTE 2 1) 3) [[0x110017001a0001]] (OR (BYTE 2 1) 1) [[0x110017001b0000]] (OR (SHL 2 1) 3) [[0x110017001b0001]] (OR (SHL 2 1) 1) [[0x110017001c0000]] (OR (SHR 2 1) 3) [[0x110017001c0001]] (OR (SHR 2 1) 1) [[0x110017001d0000]] (OR (SAR 2 1) 3) [[0x110017001d0001]] (OR (SAR 2 1) 1) [[0x11001800010000]] (XOR (ADD 2 1) 3) [[0x11001800010001]] (XOR (ADD 2 1) 1) [[0x11001800020000]] (XOR (MUL 2 1) 3) [[0x11001800020001]] (XOR (MUL 2 1) 1) [[0x11001800030000]] (XOR (SUB 2 1) 3) [[0x11001800030001]] (XOR (SUB 2 1) 1) [[0x11001800040000]] (XOR (DIV 2 1) 3) [[0x11001800040001]] (XOR (DIV 2 1) 1) [[0x11001800050000]] (XOR (SDIV 2 1) 3) [[0x11001800050001]] (XOR (SDIV 2 1) 1) [[0x11001800060000]] (XOR (MOD 2 1) 3) [[0x11001800060001]] (XOR (MOD 2 1) 1) [[0x11001800070000]] (XOR (SMOD 2 1) 3) [[0x11001800070001]] (XOR (SMOD 2 1) 1) [[0x11001800080000]] (XOR (ADDMOD 2 1 3) 3) [[0x11001800080001]] (XOR (ADDMOD 2 1 3) 1) [[0x11001800090000]] (XOR (MULMOD 2 1 3) 3) [[0x11001800090001]] (XOR (MULMOD 2 1 3) 1) [[0x110018000a0000]] (XOR (EXP 2 1) 3) [[0x110018000a0001]] (XOR (EXP 2 1) 1) [[0x11001800100000]] (XOR (LT 2 1) 3) [[0x11001800100001]] (XOR (LT 2 1) 1) [[0x11001800110000]] (XOR (GT 2 1) 3) [[0x11001800110001]] (XOR (GT 2 1) 1) [[0x11001800120000]] (XOR (SLT 2 1) 3) [[0x11001800120001]] (XOR (SLT 2 1) 1) [[0x11001800130000]] (XOR (SGT 2 1) 3) [[0x11001800130001]] (XOR (SGT 2 1) 1) [[0x11001800140000]] (XOR (EQ 2 1) 3) [[0x11001800140001]] (XOR (EQ 2 1) 1) [[0x11001800150000]] (XOR (ISZERO 2) 3) [[0x11001800150001]] (XOR (ISZERO 2) 1) [[0x11001800160000]] (XOR (AND 2 1) 3) [[0x11001800160001]] (XOR (AND 2 1) 1) [[0x11001800170000]] (XOR (OR 2 1) 3) [[0x11001800170001]] (XOR (OR 2 1) 1) [[0x11001800180000]] (XOR (XOR 2 1) 3) [[0x11001800180001]] (XOR (XOR 2 1) 1) [[0x11001800190000]] (XOR (NOT 2) 3) [[0x11001800190001]] (XOR (NOT 2) 1) [[0x110018001a0000]] (XOR (BYTE 2 1) 3) [[0x110018001a0001]] (XOR (BYTE 2 1) 1) [[0x110018001b0000]] (XOR (SHL 2 1) 3) [[0x110018001b0001]] (XOR (SHL 2 1) 1) [[0x110018001c0000]] (XOR (SHR 2 1) 3) [[0x110018001c0001]] (XOR (SHR 2 1) 1) [[0x110018001d0000]] (XOR (SAR 2 1) 3) [[0x110018001d0001]] (XOR (SAR 2 1) 1) [[0x11001900010000]] (NOT (ADD 2 1)) [[0x11001900010001]] (NOT (ADD 2 1)) [[0x11001900020000]] (NOT (MUL 2 1)) [[0x11001900020001]] (NOT (MUL 2 1)) [[0x11001900030000]] (NOT (SUB 2 1)) [[0x11001900030001]] (NOT (SUB 2 1)) [[0x11001900040000]] (NOT (DIV 2 1)) [[0x11001900040001]] (NOT (DIV 2 1)) [[0x11001900050000]] (NOT (SDIV 2 1)) [[0x11001900050001]] (NOT (SDIV 2 1)) [[0x11001900060000]] (NOT (MOD 2 1)) [[0x11001900060001]] (NOT (MOD 2 1)) [[0x11001900070000]] (NOT (SMOD 2 1)) [[0x11001900070001]] (NOT (SMOD 2 1)) [[0x11001900080000]] (NOT (ADDMOD 2 1 3)) [[0x11001900080001]] (NOT (ADDMOD 2 1 3)) [[0x11001900090000]] (NOT (MULMOD 2 1 3)) [[0x11001900090001]] (NOT (MULMOD 2 1 3)) [[0x110019000a0000]] (NOT (EXP 2 1)) [[0x110019000a0001]] (NOT (EXP 2 1)) [[0x11001900100000]] (NOT (LT 2 1)) [[0x11001900100001]] (NOT (LT 2 1)) [[0x11001900110000]] (NOT (GT 2 1)) [[0x11001900110001]] (NOT (GT 2 1)) [[0x11001900120000]] (NOT (SLT 2 1)) [[0x11001900120001]] (NOT (SLT 2 1)) [[0x11001900130000]] (NOT (SGT 2 1)) [[0x11001900130001]] (NOT (SGT 2 1)) [[0x11001900140000]] (NOT (EQ 2 1)) [[0x11001900140001]] (NOT (EQ 2 1)) [[0x11001900150000]] (NOT (ISZERO 2)) [[0x11001900150001]] (NOT (ISZERO 2)) [[0x11001900160000]] (NOT (AND 2 1)) [[0x11001900160001]] (NOT (AND 2 1)) [[0x11001900170000]] (NOT (OR 2 1)) [[0x11001900170001]] (NOT (OR 2 1)) [[0x11001900180000]] (NOT (XOR 2 1)) [[0x11001900180001]] (NOT (XOR 2 1)) [[0x11001900190000]] (NOT (NOT 2)) [[0x11001900190001]] (NOT (NOT 2)) [[0x110019001a0000]] (NOT (BYTE 2 1)) [[0x110019001a0001]] (NOT (BYTE 2 1)) [[0x110019001b0000]] (NOT (SHL 2 1)) [[0x110019001b0001]] (NOT (SHL 2 1)) [[0x110019001c0000]] (NOT (SHR 2 1)) [[0x110019001c0001]] (NOT (SHR 2 1)) [[0x110019001d0000]] (NOT (SAR 2 1)) [[0x110019001d0001]] (NOT (SAR 2 1)) [[0x11001a00010000]] (BYTE (ADD 2 1) 3) [[0x11001a00010001]] (BYTE (ADD 2 1) 1) [[0x11001a00020000]] (BYTE (MUL 2 1) 3) [[0x11001a00020001]] (BYTE (MUL 2 1) 1) [[0x11001a00030000]] (BYTE (SUB 2 1) 3) [[0x11001a00030001]] (BYTE (SUB 2 1) 1) [[0x11001a00040000]] (BYTE (DIV 2 1) 3) [[0x11001a00040001]] (BYTE (DIV 2 1) 1) [[0x11001a00050000]] (BYTE (SDIV 2 1) 3) [[0x11001a00050001]] (BYTE (SDIV 2 1) 1) [[0x11001a00060000]] (BYTE (MOD 2 1) 3) [[0x11001a00060001]] (BYTE (MOD 2 1) 1) [[0x11001a00070000]] (BYTE (SMOD 2 1) 3) [[0x11001a00070001]] (BYTE (SMOD 2 1) 1) [[0x11001a00080000]] (BYTE (ADDMOD 2 1 3) 3) [[0x11001a00080001]] (BYTE (ADDMOD 2 1 3) 1) [[0x11001a00090000]] (BYTE (MULMOD 2 1 3) 3) [[0x11001a00090001]] (BYTE (MULMOD 2 1 3) 1) [[0x11001a000a0000]] (BYTE (EXP 2 1) 3) [[0x11001a000a0001]] (BYTE (EXP 2 1) 1) [[0x11001a00100000]] (BYTE (LT 2 1) 3) [[0x11001a00100001]] (BYTE (LT 2 1) 1) [[0x11001a00110000]] (BYTE (GT 2 1) 3) [[0x11001a00110001]] (BYTE (GT 2 1) 1) [[0x11001a00120000]] (BYTE (SLT 2 1) 3) [[0x11001a00120001]] (BYTE (SLT 2 1) 1) [[0x11001a00130000]] (BYTE (SGT 2 1) 3) [[0x11001a00130001]] (BYTE (SGT 2 1) 1) [[0x11001a00140000]] (BYTE (EQ 2 1) 3) [[0x11001a00140001]] (BYTE (EQ 2 1) 1) [[0x11001a00150000]] (BYTE (ISZERO 2) 3) [[0x11001a00150001]] (BYTE (ISZERO 2) 1) [[0x11001a00160000]] (BYTE (AND 2 1) 3) [[0x11001a00160001]] (BYTE (AND 2 1) 1) [[0x11001a00170000]] (BYTE (OR 2 1) 3) [[0x11001a00170001]] (BYTE (OR 2 1) 1) [[0x11001a00180000]] (BYTE (XOR 2 1) 3) [[0x11001a00180001]] (BYTE (XOR 2 1) 1) [[0x11001a00190000]] (BYTE (NOT 2) 3) [[0x11001a00190001]] (BYTE (NOT 2) 1) [[0x11001a001a0000]] (BYTE (BYTE 2 1) 3) [[0x11001a001a0001]] (BYTE (BYTE 2 1) 1) [[0x11001a001b0000]] (BYTE (SHL 2 1) 3) [[0x11001a001b0001]] (BYTE (SHL 2 1) 1) [[0x11001a001c0000]] (BYTE (SHR 2 1) 3) [[0x11001a001c0001]] (BYTE (SHR 2 1) 1) [[0x11001a001d0000]] (BYTE (SAR 2 1) 3) [[0x11001a001d0001]] (BYTE (SAR 2 1) 1) [[0x11001b00010000]] (SHL (ADD 2 1) 3) [[0x11001b00010001]] (SHL (ADD 2 1) 1) [[0x11001b00020000]] (SHL (MUL 2 1) 3) [[0x11001b00020001]] (SHL (MUL 2 1) 1) [[0x11001b00030000]] (SHL (SUB 2 1) 3) [[0x11001b00030001]] (SHL (SUB 2 1) 1) [[0x11001b00040000]] (SHL (DIV 2 1) 3) [[0x11001b00040001]] (SHL (DIV 2 1) 1) [[0x11001b00050000]] (SHL (SDIV 2 1) 3) [[0x11001b00050001]] (SHL (SDIV 2 1) 1) [[0x11001b00060000]] (SHL (MOD 2 1) 3) [[0x11001b00060001]] (SHL (MOD 2 1) 1) [[0x11001b00070000]] (SHL (SMOD 2 1) 3) [[0x11001b00070001]] (SHL (SMOD 2 1) 1) [[0x11001b00080000]] (SHL (ADDMOD 2 1 3) 3) [[0x11001b00080001]] (SHL (ADDMOD 2 1 3) 1) [[0x11001b00090000]] (SHL (MULMOD 2 1 3) 3) [[0x11001b00090001]] (SHL (MULMOD 2 1 3) 1) [[0x11001b000a0000]] (SHL (EXP 2 1) 3) [[0x11001b000a0001]] (SHL (EXP 2 1) 1) [[0x11001b00100000]] (SHL (LT 2 1) 3) [[0x11001b00100001]] (SHL (LT 2 1) 1) [[0x11001b00110000]] (SHL (GT 2 1) 3) [[0x11001b00110001]] (SHL (GT 2 1) 1) [[0x11001b00120000]] (SHL (SLT 2 1) 3) [[0x11001b00120001]] (SHL (SLT 2 1) 1) [[0x11001b00130000]] (SHL (SGT 2 1) 3) [[0x11001b00130001]] (SHL (SGT 2 1) 1) [[0x11001b00140000]] (SHL (EQ 2 1) 3) [[0x11001b00140001]] (SHL (EQ 2 1) 1) [[0x11001b00150000]] (SHL (ISZERO 2) 3) [[0x11001b00150001]] (SHL (ISZERO 2) 1) [[0x11001b00160000]] (SHL (AND 2 1) 3) [[0x11001b00160001]] (SHL (AND 2 1) 1) [[0x11001b00170000]] (SHL (OR 2 1) 3) [[0x11001b00170001]] (SHL (OR 2 1) 1) [[0x11001b00180000]] (SHL (XOR 2 1) 3) [[0x11001b00180001]] (SHL (XOR 2 1) 1) [[0x11001b00190000]] (SHL (NOT 2) 3) [[0x11001b00190001]] (SHL (NOT 2) 1) [[0x11001b001a0000]] (SHL (BYTE 2 1) 3) [[0x11001b001a0001]] (SHL (BYTE 2 1) 1) [[0x11001b001b0000]] (SHL (SHL 2 1) 3) [[0x11001b001b0001]] (SHL (SHL 2 1) 1) [[0x11001b001c0000]] (SHL (SHR 2 1) 3) [[0x11001b001c0001]] (SHL (SHR 2 1) 1) [[0x11001b001d0000]] (SHL (SAR 2 1) 3) [[0x11001b001d0001]] (SHL (SAR 2 1) 1) [[0x11001c00010000]] (SHR (ADD 2 1) 3) [[0x11001c00010001]] (SHR (ADD 2 1) 1) [[0x11001c00020000]] (SHR (MUL 2 1) 3) [[0x11001c00020001]] (SHR (MUL 2 1) 1) [[0x11001c00030000]] (SHR (SUB 2 1) 3) [[0x11001c00030001]] (SHR (SUB 2 1) 1) [[0x11001c00040000]] (SHR (DIV 2 1) 3) [[0x11001c00040001]] (SHR (DIV 2 1) 1) [[0x11001c00050000]] (SHR (SDIV 2 1) 3) [[0x11001c00050001]] (SHR (SDIV 2 1) 1) [[0x11001c00060000]] (SHR (MOD 2 1) 3) [[0x11001c00060001]] (SHR (MOD 2 1) 1) [[0x11001c00070000]] (SHR (SMOD 2 1) 3) [[0x11001c00070001]] (SHR (SMOD 2 1) 1) [[0x11001c00080000]] (SHR (ADDMOD 2 1 3) 3) [[0x11001c00080001]] (SHR (ADDMOD 2 1 3) 1) [[0x11001c00090000]] (SHR (MULMOD 2 1 3) 3) [[0x11001c00090001]] (SHR (MULMOD 2 1 3) 1) [[0x11001c000a0000]] (SHR (EXP 2 1) 3) [[0x11001c000a0001]] (SHR (EXP 2 1) 1) [[0x11001c00100000]] (SHR (LT 2 1) 3) [[0x11001c00100001]] (SHR (LT 2 1) 1) [[0x11001c00110000]] (SHR (GT 2 1) 3) [[0x11001c00110001]] (SHR (GT 2 1) 1) [[0x11001c00120000]] (SHR (SLT 2 1) 3) [[0x11001c00120001]] (SHR (SLT 2 1) 1) [[0x11001c00130000]] (SHR (SGT 2 1) 3) [[0x11001c00130001]] (SHR (SGT 2 1) 1) [[0x11001c00140000]] (SHR (EQ 2 1) 3) [[0x11001c00140001]] (SHR (EQ 2 1) 1) [[0x11001c00150000]] (SHR (ISZERO 2) 3) [[0x11001c00150001]] (SHR (ISZERO 2) 1) [[0x11001c00160000]] (SHR (AND 2 1) 3) [[0x11001c00160001]] (SHR (AND 2 1) 1) [[0x11001c00170000]] (SHR (OR 2 1) 3) [[0x11001c00170001]] (SHR (OR 2 1) 1) [[0x11001c00180000]] (SHR (XOR 2 1) 3) [[0x11001c00180001]] (SHR (XOR 2 1) 1) [[0x11001c00190000]] (SHR (NOT 2) 3) [[0x11001c00190001]] (SHR (NOT 2) 1) [[0x11001c001a0000]] (SHR (BYTE 2 1) 3) [[0x11001c001a0001]] (SHR (BYTE 2 1) 1) [[0x11001c001b0000]] (SHR (SHL 2 1) 3) [[0x11001c001b0001]] (SHR (SHL 2 1) 1) [[0x11001c001c0000]] (SHR (SHR 2 1) 3) [[0x11001c001c0001]] (SHR (SHR 2 1) 1) [[0x11001c001d0000]] (SHR (SAR 2 1) 3) [[0x11001c001d0001]] (SHR (SAR 2 1) 1) [[0x11001d00010000]] (SAR (ADD 2 1) 3) [[0x11001d00010001]] (SAR (ADD 2 1) 1) [[0x11001d00020000]] (SAR (MUL 2 1) 3) [[0x11001d00020001]] (SAR (MUL 2 1) 1) [[0x11001d00030000]] (SAR (SUB 2 1) 3) [[0x11001d00030001]] (SAR (SUB 2 1) 1) [[0x11001d00040000]] (SAR (DIV 2 1) 3) [[0x11001d00040001]] (SAR (DIV 2 1) 1) [[0x11001d00050000]] (SAR (SDIV 2 1) 3) [[0x11001d00050001]] (SAR (SDIV 2 1) 1) [[0x11001d00060000]] (SAR (MOD 2 1) 3) [[0x11001d00060001]] (SAR (MOD 2 1) 1) [[0x11001d00070000]] (SAR (SMOD 2 1) 3) [[0x11001d00070001]] (SAR (SMOD 2 1) 1) [[0x11001d00080000]] (SAR (ADDMOD 2 1 3) 3) [[0x11001d00080001]] (SAR (ADDMOD 2 1 3) 1) [[0x11001d00090000]] (SAR (MULMOD 2 1 3) 3) [[0x11001d00090001]] (SAR (MULMOD 2 1 3) 1) [[0x11001d000a0000]] (SAR (EXP 2 1) 3) [[0x11001d000a0001]] (SAR (EXP 2 1) 1) [[0x11001d00100000]] (SAR (LT 2 1) 3) [[0x11001d00100001]] (SAR (LT 2 1) 1) [[0x11001d00110000]] (SAR (GT 2 1) 3) [[0x11001d00110001]] (SAR (GT 2 1) 1) [[0x11001d00120000]] (SAR (SLT 2 1) 3) [[0x11001d00120001]] (SAR (SLT 2 1) 1) [[0x11001d00130000]] (SAR (SGT 2 1) 3) [[0x11001d00130001]] (SAR (SGT 2 1) 1) [[0x11001d00140000]] (SAR (EQ 2 1) 3) [[0x11001d00140001]] (SAR (EQ 2 1) 1) [[0x11001d00150000]] (SAR (ISZERO 2) 3) [[0x11001d00150001]] (SAR (ISZERO 2) 1) [[0x11001d00160000]] (SAR (AND 2 1) 3) [[0x11001d00160001]] (SAR (AND 2 1) 1) [[0x11001d00170000]] (SAR (OR 2 1) 3) [[0x11001d00170001]] (SAR (OR 2 1) 1) [[0x11001d00180000]] (SAR (XOR 2 1) 3) [[0x11001d00180001]] (SAR (XOR 2 1) 1) [[0x11001d00190000]] (SAR (NOT 2) 3) [[0x11001d00190001]] (SAR (NOT 2) 1) [[0x11001d001a0000]] (SAR (BYTE 2 1) 3) [[0x11001d001a0001]] (SAR (BYTE 2 1) 1) [[0x11001d001b0000]] (SAR (SHL 2 1) 3) [[0x11001d001b0001]] (SAR (SHL 2 1) 1) [[0x11001d001c0000]] (SAR (SHR 2 1) 3) [[0x11001d001c0001]] (SAR (SHR 2 1) 1) [[0x11001d001d0000]] (SAR (SAR 2 1) 3) [[0x11001d001d0001]] (SAR (SAR 2 1) 1) } nonce: 1 storage: {} balance: 0 transaction: data: - :raw 0x00 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x11000100010000: 6 0x11000100010001: 4 0x11000100020000: 5 0x11000100020001: 3 0x11000100030000: 4 0x11000100030001: 2 0x11000100040000: 5 0x11000100040001: 3 0x11000100050000: 5 0x11000100050001: 3 0x11000100060000: 3 0x11000100060001: 1 0x11000100070000: 3 0x11000100070001: 1 0x11000100080000: 3 0x11000100080001: 1 0x11000100090000: 5 0x11000100090001: 3 0x110001000a0000: 5 0x110001000a0001: 3 0x11000100100000: 3 0x11000100100001: 1 0x11000100110000: 4 0x11000100110001: 2 0x11000100120000: 3 0x11000100120001: 1 0x11000100130000: 4 0x11000100130001: 2 0x11000100140000: 3 0x11000100140001: 1 0x11000100150000: 3 0x11000100150001: 1 0x11000100160000: 3 0x11000100160001: 1 0x11000100170000: 6 0x11000100170001: 4 0x11000100180000: 6 0x11000100180001: 4 0x11000100190000: 0 0x11000100190001: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x110001001a0000: 3 0x110001001a0001: 1 0x110001001b0000: 7 0x110001001b0001: 5 0x110001001c0000: 3 0x110001001c0001: 1 0x110001001d0000: 3 0x110001001d0001: 1 0x11000200010000: 9 0x11000200010001: 3 0x11000200020000: 6 0x11000200020001: 2 0x11000200030000: 3 0x11000200030001: 1 0x11000200040000: 6 0x11000200040001: 2 0x11000200050000: 6 0x11000200050001: 2 0x11000200060000: 0 0x11000200060001: 0 0x11000200070000: 0 0x11000200070001: 0 0x11000200080000: 0 0x11000200080001: 0 0x11000200090000: 6 0x11000200090001: 2 0x110002000a0000: 6 0x110002000a0001: 2 0x11000200100000: 0 0x11000200100001: 0 0x11000200110000: 3 0x11000200110001: 1 0x11000200120000: 0 0x11000200120001: 0 0x11000200130000: 3 0x11000200130001: 1 0x11000200140000: 0 0x11000200140001: 0 0x11000200150000: 0 0x11000200150001: 0 0x11000200160000: 0 0x11000200160001: 0 0x11000200170000: 9 0x11000200170001: 3 0x11000200180000: 9 0x11000200180001: 3 0x11000200190000: 115792089237316195423570985008687907853269984665640564039457584007913129639927 0x11000200190001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110002001a0000: 0 0x110002001a0001: 0 0x110002001b0000: 12 0x110002001b0001: 4 0x110002001c0000: 0 0x110002001c0001: 0 0x110002001d0000: 0 0x110002001d0001: 0 0x11000300010000: 0 0x11000300010001: 2 0x11000300020000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300020001: 1 0x11000300030000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11000300030001: 0 0x11000300040000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300040001: 1 0x11000300050000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300050001: 1 0x11000300060000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300060001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300070000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300070001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300080000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300080001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300090000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300090001: 1 0x110003000a0000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110003000a0001: 1 0x11000300100000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300100001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300110000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11000300110001: 0 0x11000300120000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300120001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300130000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11000300130001: 0 0x11000300140000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300140001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300150000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300150001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300160000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000300160001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000300170000: 0 0x11000300170001: 2 0x11000300180000: 0 0x11000300180001: 2 0x11000300190000: 115792089237316195423570985008687907853269984665640564039457584007913129639930 0x11000300190001: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x110003001a0000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110003001a0001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110003001b0000: 1 0x110003001b0001: 3 0x110003001c0000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110003001c0001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110003001d0000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110003001d0001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000400010000: 1 0x11000400010001: 3 0x11000400020000: 0 0x11000400020001: 2 0x11000400030000: 0 0x11000400030001: 1 0x11000400040000: 0 0x11000400040001: 2 0x11000400050000: 0 0x11000400050001: 2 0x11000400060000: 0 0x11000400060001: 0 0x11000400070000: 0 0x11000400070001: 0 0x11000400080000: 0 0x11000400080001: 0 0x11000400090000: 0 0x11000400090001: 2 0x110004000a0000: 0 0x110004000a0001: 2 0x11000400100000: 0 0x11000400100001: 0 0x11000400110000: 0 0x11000400110001: 1 0x11000400120000: 0 0x11000400120001: 0 0x11000400130000: 0 0x11000400130001: 1 0x11000400140000: 0 0x11000400140001: 0 0x11000400150000: 0 0x11000400150001: 0 0x11000400160000: 0 0x11000400160001: 0 0x11000400170000: 1 0x11000400170001: 3 0x11000400180000: 1 0x11000400180001: 3 0x11000400190000: 38597363079105398474523661669562635951089994888546854679819194669304376546644 0x11000400190001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110004001a0000: 0 0x110004001a0001: 0 0x110004001b0000: 1 0x110004001b0001: 4 0x110004001c0000: 0 0x110004001c0001: 0 0x110004001d0000: 0 0x110004001d0001: 0 0x11000500010000: 1 0x11000500010001: 3 0x11000500020000: 0 0x11000500020001: 2 0x11000500030000: 0 0x11000500030001: 1 0x11000500040000: 0 0x11000500040001: 2 0x11000500050000: 0 0x11000500050001: 2 0x11000500060000: 0 0x11000500060001: 0 0x11000500070000: 0 0x11000500070001: 0 0x11000500080000: 0 0x11000500080001: 0 0x11000500090000: 0 0x11000500090001: 2 0x110005000a0000: 0 0x110005000a0001: 2 0x11000500100000: 0 0x11000500100001: 0 0x11000500110000: 0 0x11000500110001: 1 0x11000500120000: 0 0x11000500120001: 0 0x11000500130000: 0 0x11000500130001: 1 0x11000500140000: 0 0x11000500140001: 0 0x11000500150000: 0 0x11000500150001: 0 0x11000500160000: 0 0x11000500160001: 0 0x11000500170000: 1 0x11000500170001: 3 0x11000500180000: 1 0x11000500180001: 3 0x11000500190000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11000500190001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110005001a0000: 0 0x110005001a0001: 0 0x110005001b0000: 1 0x110005001b0001: 4 0x110005001c0000: 0 0x110005001c0001: 0 0x110005001d0000: 0 0x110005001d0001: 0 0x11000600010000: 0 0x11000600010001: 0 0x11000600020000: 2 0x11000600020001: 0 0x11000600030000: 1 0x11000600030001: 0 0x11000600040000: 2 0x11000600040001: 0 0x11000600050000: 2 0x11000600050001: 0 0x11000600060000: 0 0x11000600060001: 0 0x11000600070000: 0 0x11000600070001: 0 0x11000600080000: 0 0x11000600080001: 0 0x11000600090000: 2 0x11000600090001: 0 0x110006000a0000: 2 0x110006000a0001: 0 0x11000600100000: 0 0x11000600100001: 0 0x11000600110000: 1 0x11000600110001: 0 0x11000600120000: 0 0x11000600120001: 0 0x11000600130000: 1 0x11000600130001: 0 0x11000600140000: 0 0x11000600140001: 0 0x11000600150000: 0 0x11000600150001: 0 0x11000600160000: 0 0x11000600160001: 0 0x11000600170000: 0 0x11000600170001: 0 0x11000600180000: 0 0x11000600180001: 0 0x11000600190000: 1 0x11000600190001: 0 0x110006001a0000: 0 0x110006001a0001: 0 0x110006001b0000: 1 0x110006001b0001: 0 0x110006001c0000: 0 0x110006001c0001: 0 0x110006001d0000: 0 0x110006001d0001: 0 0x11000700010000: 0 0x11000700010001: 0 0x11000700020000: 2 0x11000700020001: 0 0x11000700030000: 1 0x11000700030001: 0 0x11000700040000: 2 0x11000700040001: 0 0x11000700050000: 2 0x11000700050001: 0 0x11000700060000: 0 0x11000700060001: 0 0x11000700070000: 0 0x11000700070001: 0 0x11000700080000: 0 0x11000700080001: 0 0x11000700090000: 2 0x11000700090001: 0 0x110007000a0000: 2 0x110007000a0001: 0 0x11000700100000: 0 0x11000700100001: 0 0x11000700110000: 1 0x11000700110001: 0 0x11000700120000: 0 0x11000700120001: 0 0x11000700130000: 1 0x11000700130001: 0 0x11000700140000: 0 0x11000700140001: 0 0x11000700150000: 0 0x11000700150001: 0 0x11000700160000: 0 0x11000700160001: 0 0x11000700170000: 0 0x11000700170001: 0 0x11000700180000: 0 0x11000700180001: 0 0x11000700190000: 0 0x11000700190001: 0 0x110007001a0000: 0 0x110007001a0001: 0 0x110007001b0000: 1 0x110007001b0001: 0 0x110007001c0000: 0 0x110007001c0001: 0 0x110007001d0000: 0 0x110007001d0001: 0 0x11000800010000: 0 0x11000800010001: 0 0x11000800020000: 1 0x11000800020001: 1 0x11000800030000: 0 0x11000800030001: 0 0x11000800040000: 1 0x11000800040001: 1 0x11000800050000: 1 0x11000800050001: 1 0x11000800060000: 1 0x11000800060001: 1 0x11000800070000: 1 0x11000800070001: 1 0x11000800080000: 1 0x11000800080001: 1 0x11000800090000: 1 0x11000800090001: 1 0x110008000a0000: 1 0x110008000a0001: 1 0x11000800100000: 1 0x11000800100001: 1 0x11000800110000: 0 0x11000800110001: 0 0x11000800120000: 1 0x11000800120001: 1 0x11000800130000: 0 0x11000800130001: 0 0x11000800140000: 1 0x11000800140001: 1 0x11000800150000: 1 0x11000800150001: 1 0x11000800160000: 1 0x11000800160001: 1 0x11000800170000: 0 0x11000800170001: 0 0x11000800180000: 0 0x11000800180001: 0 0x11000800190000: 0 0x11000800190001: 0 0x110008001a0000: 1 0x110008001a0001: 1 0x110008001b0000: 1 0x110008001b0001: 1 0x110008001c0000: 1 0x110008001c0001: 1 0x110008001d0000: 1 0x110008001d0001: 1 0x11000900010000: 1 0x11000900010001: 1 0x11000900020000: 0 0x11000900020001: 0 0x11000900030000: 1 0x11000900030001: 1 0x11000900040000: 0 0x11000900040001: 0 0x11000900050000: 0 0x11000900050001: 0 0x11000900060000: 0 0x11000900060001: 0 0x11000900070000: 0 0x11000900070001: 0 0x11000900080000: 0 0x11000900080001: 0 0x11000900090000: 0 0x11000900090001: 0 0x110009000a0000: 0 0x110009000a0001: 0 0x11000900100000: 0 0x11000900100001: 0 0x11000900110000: 1 0x11000900110001: 1 0x11000900120000: 0 0x11000900120001: 0 0x11000900130000: 1 0x11000900130001: 1 0x11000900140000: 0 0x11000900140001: 0 0x11000900150000: 0 0x11000900150001: 0 0x11000900160000: 0 0x11000900160001: 0 0x11000900170000: 1 0x11000900170001: 1 0x11000900180000: 1 0x11000900180001: 1 0x11000900190000: 1 0x11000900190001: 1 0x110009001a0000: 0 0x110009001a0001: 0 0x110009001b0000: 0 0x110009001b0001: 0 0x110009001c0000: 0 0x110009001c0001: 0 0x110009001d0000: 0 0x110009001d0001: 0 0x11000a00010000: 27 0x11000a00010001: 3 0x11000a00020000: 8 0x11000a00020001: 2 0x11000a00030000: 1 0x11000a00030001: 1 0x11000a00040000: 8 0x11000a00040001: 2 0x11000a00050000: 8 0x11000a00050001: 2 0x11000a00060000: 0 0x11000a00060001: 0 0x11000a00070000: 0 0x11000a00070001: 0 0x11000a00080000: 0 0x11000a00080001: 0 0x11000a00090000: 8 0x11000a00090001: 2 0x11000a000a0000: 8 0x11000a000a0001: 2 0x11000a00100000: 0 0x11000a00100001: 0 0x11000a00110000: 1 0x11000a00110001: 1 0x11000a00120000: 0 0x11000a00120001: 0 0x11000a00130000: 1 0x11000a00130001: 1 0x11000a00140000: 0 0x11000a00140001: 0 0x11000a00150000: 0 0x11000a00150001: 0 0x11000a00160000: 0 0x11000a00160001: 0 0x11000a00170000: 27 0x11000a00170001: 3 0x11000a00180000: 27 0x11000a00180001: 3 0x11000a00190000: 115792089237316195423570985008687907853269984665640564039457584007913129639909 0x11000a00190001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11000a001a0000: 0 0x11000a001a0001: 0 0x11000a001b0000: 64 0x11000a001b0001: 4 0x11000a001c0000: 0 0x11000a001c0001: 0 0x11000a001d0000: 0 0x11000a001d0001: 0 0x11001000010000: 0 0x11001000010001: 0 0x11001000020000: 1 0x11001000020001: 0 0x11001000030000: 1 0x11001000030001: 0 0x11001000040000: 1 0x11001000040001: 0 0x11001000050000: 1 0x11001000050001: 0 0x11001000060000: 1 0x11001000060001: 1 0x11001000070000: 1 0x11001000070001: 1 0x11001000080000: 1 0x11001000080001: 1 0x11001000090000: 1 0x11001000090001: 0 0x110010000a0000: 1 0x110010000a0001: 0 0x11001000100000: 1 0x11001000100001: 1 0x11001000110000: 1 0x11001000110001: 0 0x11001000120000: 1 0x11001000120001: 1 0x11001000130000: 1 0x11001000130001: 0 0x11001000140000: 1 0x11001000140001: 1 0x11001000150000: 1 0x11001000150001: 1 0x11001000160000: 1 0x11001000160001: 1 0x11001000170000: 0 0x11001000170001: 0 0x11001000180000: 0 0x11001000180001: 0 0x11001000190000: 0 0x11001000190001: 0 0x110010001a0000: 1 0x110010001a0001: 1 0x110010001b0000: 0 0x110010001b0001: 0 0x110010001c0000: 1 0x110010001c0001: 1 0x110010001d0000: 1 0x110010001d0001: 1 0x11001100010000: 0 0x11001100010001: 1 0x11001100020000: 0 0x11001100020001: 1 0x11001100030000: 0 0x11001100030001: 0 0x11001100040000: 0 0x11001100040001: 1 0x11001100050000: 0 0x11001100050001: 1 0x11001100060000: 0 0x11001100060001: 0 0x11001100070000: 0 0x11001100070001: 0 0x11001100080000: 0 0x11001100080001: 0 0x11001100090000: 0 0x11001100090001: 1 0x110011000a0000: 0 0x110011000a0001: 1 0x11001100100000: 0 0x11001100100001: 0 0x11001100110000: 0 0x11001100110001: 0 0x11001100120000: 0 0x11001100120001: 0 0x11001100130000: 0 0x11001100130001: 0 0x11001100140000: 0 0x11001100140001: 0 0x11001100150000: 0 0x11001100150001: 0 0x11001100160000: 0 0x11001100160001: 0 0x11001100170000: 0 0x11001100170001: 1 0x11001100180000: 0 0x11001100180001: 1 0x11001100190000: 1 0x11001100190001: 1 0x110011001a0000: 0 0x110011001a0001: 0 0x110011001b0000: 1 0x110011001b0001: 1 0x110011001c0000: 0 0x110011001c0001: 0 0x110011001d0000: 0 0x110011001d0001: 0 0x11001200010000: 0 0x11001200010001: 0 0x11001200020000: 1 0x11001200020001: 0 0x11001200030000: 1 0x11001200030001: 0 0x11001200040000: 1 0x11001200040001: 0 0x11001200050000: 1 0x11001200050001: 0 0x11001200060000: 1 0x11001200060001: 1 0x11001200070000: 1 0x11001200070001: 1 0x11001200080000: 1 0x11001200080001: 1 0x11001200090000: 1 0x11001200090001: 0 0x110012000a0000: 1 0x110012000a0001: 0 0x11001200100000: 1 0x11001200100001: 1 0x11001200110000: 1 0x11001200110001: 0 0x11001200120000: 1 0x11001200120001: 1 0x11001200130000: 1 0x11001200130001: 0 0x11001200140000: 1 0x11001200140001: 1 0x11001200150000: 1 0x11001200150001: 1 0x11001200160000: 1 0x11001200160001: 1 0x11001200170000: 0 0x11001200170001: 0 0x11001200180000: 0 0x11001200180001: 0 0x11001200190000: 1 0x11001200190001: 1 0x110012001a0000: 1 0x110012001a0001: 1 0x110012001b0000: 0 0x110012001b0001: 0 0x110012001c0000: 1 0x110012001c0001: 1 0x110012001d0000: 1 0x110012001d0001: 1 0x11001300010000: 0 0x11001300010001: 1 0x11001300020000: 0 0x11001300020001: 1 0x11001300030000: 0 0x11001300030001: 0 0x11001300040000: 0 0x11001300040001: 1 0x11001300050000: 0 0x11001300050001: 1 0x11001300060000: 0 0x11001300060001: 0 0x11001300070000: 0 0x11001300070001: 0 0x11001300080000: 0 0x11001300080001: 0 0x11001300090000: 0 0x11001300090001: 1 0x110013000a0000: 0 0x110013000a0001: 1 0x11001300100000: 0 0x11001300100001: 0 0x11001300110000: 0 0x11001300110001: 0 0x11001300120000: 0 0x11001300120001: 0 0x11001300130000: 0 0x11001300130001: 0 0x11001300140000: 0 0x11001300140001: 0 0x11001300150000: 0 0x11001300150001: 0 0x11001300160000: 0 0x11001300160001: 0 0x11001300170000: 0 0x11001300170001: 1 0x11001300180000: 0 0x11001300180001: 1 0x11001300190000: 0 0x11001300190001: 0 0x110013001a0000: 0 0x110013001a0001: 0 0x110013001b0000: 1 0x110013001b0001: 1 0x110013001c0000: 0 0x110013001c0001: 0 0x110013001d0000: 0 0x110013001d0001: 0 0x11001400010000: 1 0x11001400010001: 0 0x11001400020000: 0 0x11001400020001: 0 0x11001400030000: 0 0x11001400030001: 1 0x11001400040000: 0 0x11001400040001: 0 0x11001400050000: 0 0x11001400050001: 0 0x11001400060000: 0 0x11001400060001: 0 0x11001400070000: 0 0x11001400070001: 0 0x11001400080000: 0 0x11001400080001: 0 0x11001400090000: 0 0x11001400090001: 0 0x110014000a0000: 0 0x110014000a0001: 0 0x11001400100000: 0 0x11001400100001: 0 0x11001400110000: 0 0x11001400110001: 1 0x11001400120000: 0 0x11001400120001: 0 0x11001400130000: 0 0x11001400130001: 1 0x11001400140000: 0 0x11001400140001: 0 0x11001400150000: 0 0x11001400150001: 0 0x11001400160000: 0 0x11001400160001: 0 0x11001400170000: 1 0x11001400170001: 0 0x11001400180000: 1 0x11001400180001: 0 0x11001400190000: 0 0x11001400190001: 0 0x110014001a0000: 0 0x110014001a0001: 0 0x110014001b0000: 0 0x110014001b0001: 0 0x110014001c0000: 0 0x110014001c0001: 0 0x110014001d0000: 0 0x110014001d0001: 0 0x11001500010000: 0 0x11001500010001: 0 0x11001500020000: 0 0x11001500020001: 0 0x11001500030000: 0 0x11001500030001: 0 0x11001500040000: 0 0x11001500040001: 0 0x11001500050000: 0 0x11001500050001: 0 0x11001500060000: 1 0x11001500060001: 1 0x11001500070000: 1 0x11001500070001: 1 0x11001500080000: 1 0x11001500080001: 1 0x11001500090000: 0 0x11001500090001: 0 0x110015000a0000: 0 0x110015000a0001: 0 0x11001500100000: 1 0x11001500100001: 1 0x11001500110000: 0 0x11001500110001: 0 0x11001500120000: 1 0x11001500120001: 1 0x11001500130000: 0 0x11001500130001: 0 0x11001500140000: 1 0x11001500140001: 1 0x11001500150000: 1 0x11001500150001: 1 0x11001500160000: 1 0x11001500160001: 1 0x11001500170000: 0 0x11001500170001: 0 0x11001500180000: 0 0x11001500180001: 0 0x11001500190000: 0 0x11001500190001: 0 0x110015001a0000: 1 0x110015001a0001: 1 0x110015001b0000: 0 0x110015001b0001: 0 0x110015001c0000: 1 0x110015001c0001: 1 0x110015001d0000: 1 0x110015001d0001: 1 0x11001600010000: 3 0x11001600010001: 1 0x11001600020000: 2 0x11001600020001: 0 0x11001600030000: 1 0x11001600030001: 1 0x11001600040000: 2 0x11001600040001: 0 0x11001600050000: 2 0x11001600050001: 0 0x11001600060000: 0 0x11001600060001: 0 0x11001600070000: 0 0x11001600070001: 0 0x11001600080000: 0 0x11001600080001: 0 0x11001600090000: 2 0x11001600090001: 0 0x110016000a0000: 2 0x110016000a0001: 0 0x11001600100000: 0 0x11001600100001: 0 0x11001600110000: 1 0x11001600110001: 1 0x11001600120000: 0 0x11001600120001: 0 0x11001600130000: 1 0x11001600130001: 1 0x11001600140000: 0 0x11001600140001: 0 0x11001600150000: 0 0x11001600150001: 0 0x11001600160000: 0 0x11001600160001: 0 0x11001600170000: 3 0x11001600170001: 1 0x11001600180000: 3 0x11001600180001: 1 0x11001600190000: 1 0x11001600190001: 1 0x110016001a0000: 0 0x110016001a0001: 0 0x110016001b0000: 0 0x110016001b0001: 0 0x110016001c0000: 0 0x110016001c0001: 0 0x110016001d0000: 0 0x110016001d0001: 0 0x11001700010000: 3 0x11001700010001: 3 0x11001700020000: 3 0x11001700020001: 3 0x11001700030000: 3 0x11001700030001: 1 0x11001700040000: 3 0x11001700040001: 3 0x11001700050000: 3 0x11001700050001: 3 0x11001700060000: 3 0x11001700060001: 1 0x11001700070000: 3 0x11001700070001: 1 0x11001700080000: 3 0x11001700080001: 1 0x11001700090000: 3 0x11001700090001: 3 0x110017000a0000: 3 0x110017000a0001: 3 0x11001700100000: 3 0x11001700100001: 1 0x11001700110000: 3 0x11001700110001: 1 0x11001700120000: 3 0x11001700120001: 1 0x11001700130000: 3 0x11001700130001: 1 0x11001700140000: 3 0x11001700140001: 1 0x11001700150000: 3 0x11001700150001: 1 0x11001700160000: 3 0x11001700160001: 1 0x11001700170000: 3 0x11001700170001: 3 0x11001700180000: 3 0x11001700180001: 3 0x11001700190000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001700190001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110017001a0000: 3 0x110017001a0001: 1 0x110017001b0000: 7 0x110017001b0001: 5 0x110017001c0000: 3 0x110017001c0001: 1 0x110017001d0000: 3 0x110017001d0001: 1 0x11001800010000: 0 0x11001800010001: 2 0x11001800020000: 1 0x11001800020001: 3 0x11001800030000: 2 0x11001800030001: 0 0x11001800040000: 1 0x11001800040001: 3 0x11001800050000: 1 0x11001800050001: 3 0x11001800060000: 3 0x11001800060001: 1 0x11001800070000: 3 0x11001800070001: 1 0x11001800080000: 3 0x11001800080001: 1 0x11001800090000: 1 0x11001800090001: 3 0x110018000a0000: 1 0x110018000a0001: 3 0x11001800100000: 3 0x11001800100001: 1 0x11001800110000: 2 0x11001800110001: 0 0x11001800120000: 3 0x11001800120001: 1 0x11001800130000: 2 0x11001800130001: 0 0x11001800140000: 3 0x11001800140001: 1 0x11001800150000: 3 0x11001800150001: 1 0x11001800160000: 3 0x11001800160001: 1 0x11001800170000: 0 0x11001800170001: 2 0x11001800180000: 0 0x11001800180001: 2 0x11001800190000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001800190001: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x110018001a0000: 3 0x110018001a0001: 1 0x110018001b0000: 7 0x110018001b0001: 5 0x110018001c0000: 3 0x110018001c0001: 1 0x110018001d0000: 3 0x110018001d0001: 1 0x11001900010000: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x11001900010001: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x11001900020000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900020001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900030000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001900030001: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001900040000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900040001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900050000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900050001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900060000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900060001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900070000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900070001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900080000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900080001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900090000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900090001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110019000a0000: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x110019000a0001: 115792089237316195423570985008687907853269984665640564039457584007913129639933 0x11001900100000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900100001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900110000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001900110001: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001900120000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900120001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900130000: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001900130001: 115792089237316195423570985008687907853269984665640564039457584007913129639934 0x11001900140000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900140001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900150000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900150001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900160000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900160001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001900170000: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x11001900170001: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x11001900180000: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x11001900180001: 115792089237316195423570985008687907853269984665640564039457584007913129639932 0x11001900190000: 2 0x11001900190001: 2 0x110019001a0000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110019001a0001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110019001b0000: 115792089237316195423570985008687907853269984665640564039457584007913129639931 0x110019001b0001: 115792089237316195423570985008687907853269984665640564039457584007913129639931 0x110019001c0000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110019001c0001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110019001d0000: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x110019001d0001: 115792089237316195423570985008687907853269984665640564039457584007913129639935 0x11001a00010000: 0 0x11001a00010001: 0 0x11001a00020000: 0 0x11001a00020001: 0 0x11001a00030000: 0 0x11001a00030001: 0 0x11001a00040000: 0 0x11001a00040001: 0 0x11001a00050000: 0 0x11001a00050001: 0 0x11001a00060000: 0 0x11001a00060001: 0 0x11001a00070000: 0 0x11001a00070001: 0 0x11001a00080000: 0 0x11001a00080001: 0 0x11001a00090000: 0 0x11001a00090001: 0 0x11001a000a0000: 0 0x11001a000a0001: 0 0x11001a00100000: 0 0x11001a00100001: 0 0x11001a00110000: 0 0x11001a00110001: 0 0x11001a00120000: 0 0x11001a00120001: 0 0x11001a00130000: 0 0x11001a00130001: 0 0x11001a00140000: 0 0x11001a00140001: 0 0x11001a00150000: 0 0x11001a00150001: 0 0x11001a00160000: 0 0x11001a00160001: 0 0x11001a00170000: 0 0x11001a00170001: 0 0x11001a00180000: 0 0x11001a00180001: 0 0x11001a00190000: 0 0x11001a00190001: 0 0x11001a001a0000: 0 0x11001a001a0001: 0 0x11001a001b0000: 0 0x11001a001b0001: 0 0x11001a001c0000: 0 0x11001a001c0001: 0 0x11001a001d0000: 0 0x11001a001d0001: 0 0x11001b00010000: 24 0x11001b00010001: 8 0x11001b00020000: 12 0x11001b00020001: 4 0x11001b00030000: 6 0x11001b00030001: 2 0x11001b00040000: 12 0x11001b00040001: 4 0x11001b00050000: 12 0x11001b00050001: 4 0x11001b00060000: 3 0x11001b00060001: 1 0x11001b00070000: 3 0x11001b00070001: 1 0x11001b00080000: 3 0x11001b00080001: 1 0x11001b00090000: 12 0x11001b00090001: 4 0x11001b000a0000: 12 0x11001b000a0001: 4 0x11001b00100000: 3 0x11001b00100001: 1 0x11001b00110000: 6 0x11001b00110001: 2 0x11001b00120000: 3 0x11001b00120001: 1 0x11001b00130000: 6 0x11001b00130001: 2 0x11001b00140000: 3 0x11001b00140001: 1 0x11001b00150000: 3 0x11001b00150001: 1 0x11001b00160000: 3 0x11001b00160001: 1 0x11001b00170000: 24 0x11001b00170001: 8 0x11001b00180000: 24 0x11001b00180001: 8 0x11001b00190000: 0 0x11001b00190001: 0 0x11001b001a0000: 3 0x11001b001a0001: 1 0x11001b001b0000: 48 0x11001b001b0001: 16 0x11001b001c0000: 3 0x11001b001c0001: 1 0x11001b001d0000: 3 0x11001b001d0001: 1 0x11001c00010000: 0 0x11001c00010001: 0 0x11001c00020000: 0 0x11001c00020001: 0 0x11001c00030000: 1 0x11001c00030001: 0 0x11001c00040000: 0 0x11001c00040001: 0 0x11001c00050000: 0 0x11001c00050001: 0 0x11001c00060000: 3 0x11001c00060001: 1 0x11001c00070000: 3 0x11001c00070001: 1 0x11001c00080000: 3 0x11001c00080001: 1 0x11001c00090000: 0 0x11001c00090001: 0 0x11001c000a0000: 0 0x11001c000a0001: 0 0x11001c00100000: 3 0x11001c00100001: 1 0x11001c00110000: 1 0x11001c00110001: 0 0x11001c00120000: 3 0x11001c00120001: 1 0x11001c00130000: 1 0x11001c00130001: 0 0x11001c00140000: 3 0x11001c00140001: 1 0x11001c00150000: 3 0x11001c00150001: 1 0x11001c00160000: 3 0x11001c00160001: 1 0x11001c00170000: 0 0x11001c00170001: 0 0x11001c00180000: 0 0x11001c00180001: 0 0x11001c00190000: 0 0x11001c00190001: 0 0x11001c001a0000: 3 0x11001c001a0001: 1 0x11001c001b0000: 0 0x11001c001b0001: 0 0x11001c001c0000: 3 0x11001c001c0001: 1 0x11001c001d0000: 3 0x11001c001d0001: 1 0x11001d00010000: 0 0x11001d00010001: 0 0x11001d00020000: 0 0x11001d00020001: 0 0x11001d00030000: 1 0x11001d00030001: 0 0x11001d00040000: 0 0x11001d00040001: 0 0x11001d00050000: 0 0x11001d00050001: 0 0x11001d00060000: 3 0x11001d00060001: 1 0x11001d00070000: 3 0x11001d00070001: 1 0x11001d00080000: 3 0x11001d00080001: 1 0x11001d00090000: 0 0x11001d00090001: 0 0x11001d000a0000: 0 0x11001d000a0001: 0 0x11001d00100000: 3 0x11001d00100001: 1 0x11001d00110000: 1 0x11001d00110001: 0 0x11001d00120000: 3 0x11001d00120001: 1 0x11001d00130000: 1 0x11001d00130001: 0 0x11001d00140000: 3 0x11001d00140001: 1 0x11001d00150000: 3 0x11001d00150001: 1 0x11001d00160000: 3 0x11001d00160001: 1 0x11001d00170000: 0 0x11001d00170001: 0 0x11001d00180000: 0 0x11001d00180001: 0 0x11001d00190000: 0 0x11001d00190001: 0 0x11001d001a0000: 3 0x11001d001a0001: 1 0x11001d001b0000: 0 0x11001d001b0001: 0 0x11001d001c0000: 3 0x11001d001c0001: 1 0x11001d001d0000: 3 0x11001d001d0001: 1 ================================================ FILE: tests/static/state_tests/VMTests/vmArithmeticTest/twoOpsGen.js ================================================ #! /usr/bin/node // Generate the vmArithmeticTest/twoOpsFiller.yml file // // Ori Pomerantz qbzzt1@gmail.com // // This test looks at the result of running two operations (numeric/bitwise) // There are 24 such operations, so 576 test cases. // Turn boolean values into the numbers the evm gives us const bool2num = a => a ? 1n : 0n // The EVM is 256 bits, and uses 2's complement for negatives. // JavaScript BigInt, OTOH, can be a lot more (it seems to depend on the size of // the biggest operand). // In the few cases where the sign matters these functions convert between representations. // The unsigned value is always the least significant 256 bits const makeUnsigned = a => a & (2n**256n-1n) // The signed value can be either positive (no change) or negative. If it's // negative, the most significant bit is on. In that case, use 2's complement // to figure the absolute value and then negate it. const makeSigned = a => (a & 2n**255n) ? -(makeUnsigned(~a)+1n) : a // The numeric/bitwise opcodes we test. For each we have: // // name // byte for the opcode (used for storage cells) // number of parameters it receives // Javascript function to implement it so we'll be able to know what result to expect var opcodes = [ ["ADD", '01', 2, (a,b) => a+b], ["MUL", '02', 2, (a,b) => a*b], ["SUB", '03', 2, (a,b) => a-b], ["DIV", '04', 2, (a,b) => a/b], ["SDIV", '05', 2, (a,b) => makeUnsigned(makeSigned(a)/makeSigned(b))], ["MOD", '06', 2, (a,b) => a % b], ["SMOD", '07', 2, (a,b) => makeUnsigned(makeSigned(a) % makeSigned(b))], ["ADDMOD", '08', 3, (a,b,c) => (a+b) % c], ["MULMOD", '09', 3, (a,b,c) => (a*b) % c], ["EXP", '0a', 2, (a,b) => a**b], ["LT", '10', 2, (a,b) => bool2num(a bool2num(a>b)], ["SLT", '12', 2, (a,b) => bool2num(makeSigned(a) bool2num(makeSigned(a)>makeSigned(b))], ["EQ", '14', 2, (a,b) => bool2num(a==b)], ["ISZERO", '15', 1, a => bool2num(a == 0)], ["AND", '16', 2, (a,b) => a&b], ["OR", '17', 2, (a,b) => a|b], ["XOR", '18', 2, (a,b) => a^b], ["NOT", '19', 1, a => makeUnsigned(~a)], ["BYTE", '1a', 2, (i,x) => i > 32 ? 0 : (x >> (248n - i*8n)) & 255n], ["SHL", '1b', 2, (a,b) => (a > 255n) ? 0 : b << a], ["SHR", '1c', 2, (a,b) => b >> a], ["SAR", '1d', 2, (a,b) => b >> a], ] // Turn an opcode line into LLL code with these values. a,b,c are code structures // Code structures contain two fields: // lll - the LLL code for the operation // val - the numeric result (as a BigInt) const opcode2Code = (op, a, b, c) => { // The result depends on the number of parameters the opcode accepts switch(op[2]) { case 1: return { lll: `(${op[0]} ${a.lll})`, val: op[3](a.val) } break; case 2: return { lll: `(${op[0]} ${a.lll} ${b.lll})`, val: op[3](a.val,b.val) } break; case 3: return { lll: `(${op[0]} ${a.lll} ${b.lll} ${c.lll})`, val: op[3](a.val,b.val,c.val) } break; } // switch(op[1]) } // opcode2Code // The values we use as operands one = {lll: "1", val: BigInt(1)} two = {lll: "2", val: BigInt(2)} three = {lll: "3", val: BigInt(3)} const boilerPlate1 = ` twoOps: # Generated automatically by twoOpsGen.js env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} # Calculate the results cccccccccccccccccccccccccccccccccccccccc: code: | { ` const boilerPlate2 = ` } nonce: 1 storage: {} balance: 0 transaction: data: - :raw 0x00 gasLimit: - '80000000' gasPrice: '1' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Istanbul' result: cccccccccccccccccccccccccccccccccccccccc: storage:` // Create the lines to test a specific combo const createOpcodeTest = (op1, op2) => { // The storage cell for the result cell0 = `0x1100${op1[1]}00${op2[1]}0000` cell1 = `0x1100${op1[1]}00${op2[1]}0001` intermediate = opcode2Code(op2, two, one, three) code0 = opcode2Code(op1, intermediate, three, two) code1 = opcode2Code(op1, intermediate, one, two) // This structure contains these fields: // lll - the line to place into the cc..cc contract LLL // res - the result to place into the expect section return { lll: ` [[${cell0}]] ${code0.lll} [[${cell1}]] ${code1.lll}`, res: ` ${cell0}: ${makeUnsigned(BigInt(code0.val))} ${cell1}: ${makeUnsigned(BigInt(code1.val))}` } // return {} } // createOpcodeTest // The variables that will collect the output // of createOpcodeTest var lllCollector = "" var resCollector = "" // For every opcode pair we can get from the list for (var op1Num=0; op1Num=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x02 - indexes: data: :label and_3_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x01 - indexes: data: :label and_allones_bignum gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef - indexes: data: :label and_allones_eefee gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee - indexes: data: :label and_2_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/byteFiller.yml ================================================ byte: # A test of the byte opcode # (byte n a) gets the n'th byte of a, # with n=0 being the most significant and n=31 the least env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 0) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 1) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 2) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 3) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 4) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 5) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 6) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 7) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (- 31 31) 0x8040201008040201) } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (byte (sdiv 31 32) 0x8040201008040201) } nonce: '0' storage: {} 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH5 0x1234523456 # 6 PUSH1 0x1F (a.k.a. 31 the least significant byte) # 8 BYTE # 9 DUP1 # A ADD # B PUSH1 0x01 # D SSTORE code: :raw 0x641234523456601F1A8001600155 nonce: '0' storage: {} # Check all 32 options (0 - 31) 0000000000000000000000000000000000000200: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'i 0x0100) ; index ; (byte num) = n (def 'num 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f) [i] 0x00 (while (< @i 0x20) { [[@i]] (byte @i num) [i] (+ @i 1) }) ; while loop } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff $4 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # The big number is 0x8040201008040201 - :label byte_31_big :abi f(uint) 0x1000 - :label byte_30_big :abi f(uint) 0x1001 - :label byte_29_big :abi f(uint) 0x1002 - :label byte_28_big :abi f(uint) 0x1003 - :label byte_27_big :abi f(uint) 0x1004 - :label byte_26_big :abi f(uint) 0x1005 - :label byte_25_big :abi f(uint) 0x1006 - :label byte_24_big :abi f(uint) 0x1007 - :label byte_00_big :abi f(uint) 0x1008 - :label byte_00_big_2nd :abi f(uint) 0x1009 # A different test of the opcode, written in assembly - :label byte_asm :abi f(uint) 0x100a # A test for all possible byte positions - :label byte_all :abi f(uint) 0x200 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label byte_31_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x01 - indexes: data: - :label byte_30_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x02 - indexes: data: - :label byte_29_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x04 - indexes: data: - :label byte_28_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x08 - indexes: data: - :label byte_27_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0x10 - indexes: data: - :label byte_26_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x20 - indexes: data: - :label byte_25_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001006: storage: 0: 0x40 - indexes: data: - :label byte_24_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: 0: 0x80 - indexes: data: - :label byte_00_big gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0x00 - indexes: data: - :label byte_00_big_2nd gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001009: storage: 0: 0x00 - indexes: data: - :label byte_asm gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100A: storage: 1: 0xAC - indexes: data: - :label byte_all gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000000200: storage: 0x00: 0x00 0x01: 0x01 0x02: 0x02 0x03: 0x03 0x04: 0x04 0x05: 0x05 0x06: 0x06 0x07: 0x07 0x08: 0x08 0x09: 0x09 0x0a: 0x0a 0x0b: 0x0b 0x0c: 0x0c 0x0d: 0x0d 0x0e: 0x0e 0x0f: 0x0f 0x10: 0x10 0x11: 0x11 0x12: 0x12 0x13: 0x13 0x14: 0x14 0x15: 0x15 0x16: 0x16 0x17: 0x17 0x18: 0x18 0x19: 0x19 0x1a: 0x1a 0x1b: 0x1b 0x1c: 0x1c 0x1d: 0x1d 0x1e: 0x1e 0x1f: 0x1f ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/eqFiller.yml ================================================ eq: # A test of equality env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (eq (- 0 5) (- 0 3)) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (eq 0 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (eq pow_2_256_min1 pow_2_256_min1) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label eq_neg5_neg3 :abi f(uint) 0 - :label eq_0_0 :abi f(uint) 1 - :label eq_neg1_neg1 :abi f(uint) 2 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label eq_neg5_neg3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 - indexes: data: - :label eq_0_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: - :label eq_neg1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x01 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/gtFiller.yml ================================================ gt: # A test of unsigned greater than (gt) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (gt a b) is true iff a>b ; it is unsigned, so negative numbers are 2^255 and above. [[0]] (gt (- 0 2) 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (gt 0 (- 0 2)) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (gt pow_2_256_min1 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (gt 0 pow_2_256_min1) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label gt_neg2_0 :abi f(uint) 0 - :label gt_0_neg2 :abi f(uint) 1 - :label gt_neg1_0 :abi f(uint) 2 - :label gt_0_neg1 :abi f(uint) 3 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label gt_neg2_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x01 - indexes: data: - :label gt_0_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x00 - indexes: data: - :label gt_neg1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x01 - indexes: data: - :label gt_0_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/iszeroFiller.yml ================================================ iszero: # A test of equal to zero env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (iszero pow_2_256_min1) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (iszero 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (iszero (- 0 2)) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label iszero_neg1 :abi f(uint) 0 - :label iszero_0 :abi f(uint) 1 - :label iszero_neg2 :abi f(uint) 2 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label iszero_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 - indexes: data: - :label iszero_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: - :label iszero_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/ltFiller.yml ================================================ lt: # A test of unsigned lesser than (lt) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (lt a b) is true iff a=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 - indexes: data: - :label lt_0_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: - :label lt_neg1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 - indexes: data: - :label lt_0_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x01 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/notFiller.yml ================================================ not: # A test of not bitwise logic env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (not 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (not 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (not pow_2_256_min1) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; In evm arithmetic -2 = 256^2-2 ; 256^2-1 is in binary all ones ; so 256^2-2 is all ones except for the least significant bit, which is 0 ; and the not all zeros except for the least significant bit, which is 1 [[0]] (not (- 0 2)) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; -(2^256-1) = 1 ; not 1 is 0x ff...ffe (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (not (- 0 pow_2_256_min1)) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; not 00..00 is 11..11 [[0]] (not (- 0 0)) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label not_0 :abi f(uint) 0 - :label not_2 :abi f(uint) 1 - :label not_allones :abi f(uint) 2 - :label not_neg2 :abi f(uint) 3 - :label not_neg_2_pow_256 :abi f(uint) 4 - :label not_neg0 :abi f(uint) 5 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label not_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label not_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd - indexes: data: :label not_allones gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 - indexes: data: :label not_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x01 - indexes: data: :label not_neg_2_pow_256 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe - indexes: data: :label not_neg0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/orFiller.yml ================================================ or: # A test of or bitwise logic env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (or 2 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (or 2 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (or 3 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; "or 0xfff..fff" gives you 0xfff..fff [[0]] (or 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef ) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; "or 0xfff..fff" gives you 0xfff..fff [[0]] (or 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; "or 0xfff..fff" gives you 0xfff..fff [[0]] (or 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label or_2_2 :abi f(uint) 0 - :label or_2_1 :abi f(uint) 1 - :label or_3_1 :abi f(uint) 2 - :label or_allones_bignum :abi f(uint) 3 - :label or_allones_1110s :abi f(uint) 4 - :label or_allones_eefee :abi f(uint) 5 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label or_2_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x02 - indexes: data: :label or_2_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x03 - indexes: data: :label or_3_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x03 - indexes: data: :label or_allones_bignum gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label or_allones_1110s gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: :label or_allones_eefee gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/sgtFiller.yml ================================================ sgt: # A test of signed greater than (sgt) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (sgt a b) is true iff a>b ; it is signed, so negative numbers are smaller than positive ones [[0]] (sgt (- 0 2) 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (sgt 0 (- 0 2)) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sgt pow_2_256_min1 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'pow_2_256_min1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sgt 0 pow_2_256_min1) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label sgt_neg2_0 :abi f(uint) 0 - :label sgt_0_neg2 :abi f(uint) 1 - :label sgt_neg1_0 :abi f(uint) 2 - :label sgt_0_neg1 :abi f(uint) 3 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label sgt_neg2_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 - indexes: data: - :label sgt_0_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x01 - indexes: data: - :label sgt_neg1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 - indexes: data: - :label sgt_0_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x01 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/sltFiller.yml ================================================ slt: # A test of signed lesser than (slt) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; (slt a b) is true iff a=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x01 - indexes: data: - :label slt_0_neg2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x00 - indexes: data: - :label slt_neg1_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x01 - indexes: data: - :label slt_0_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmBitwiseLogicOperation/xorFiller.yml ================================================ xor: # A test of xor bitwise logic env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (xor 2 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (xor 2 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (xor 3 1) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; "xor 0xfff..fff" is equivalent to not [[0]] (xor 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef ) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; "or 0xfff..fff" gives you 0xfff..fff [[0]] (xor 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; "or 0xfff..fff" gives you 0xfff..fff [[0]] (xor 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label xor_2_2 :abi f(uint) 0 - :label xor_2_1 :abi f(uint) 1 - :label xor_3_1 :abi f(uint) 2 - :label xor_allones_bignum :abi f(uint) 3 - :label xor_allones_1110s :abi f(uint) 4 - :label xor_allones_eefee :abi f(uint) 5 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label xor_2_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x00 - indexes: data: :label xor_2_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x03 - indexes: data: :label xor_3_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x02 - indexes: data: :label xor_allones_bignum gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0xfedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210 - indexes: data: :label xor_allones_1110s gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0x1111111111111111111111111111111111111111111111111111111111111111 - indexes: data: :label xor_allones_eefee gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x1111111111111111111111111111101111111111111111111111111111111111 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/codecopyFiller.yml ================================================ codecopy: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Copy our code into [[0]] and [[1]] (codecopy 0 0 0x40) [[0]] @0 [[1]] @0x20 } nonce: '0' storage: {} # "Infinite" (-1 = 0xfff..ffff) buffer 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Copy our code into [[0]] and [[1]] (codecopy 0 0 (- 0 1)) [[0]] @0 [[1]] @0x20 } nonce: '0' storage: {} # Big but reasonable buffer 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Copy our code into [[0]] and [[1]] (codecopy 0 0 0x1000) [[0]] @0 [[1]] @0x20 } nonce: '0' storage: {} # Do the copy in two buffer-loads 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Waste some space so we'll be over 0x20 bytes of code [0x100] (+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) ; Copy our code into [[0]] and [[1]] (codecopy 0 0 0x20) (codecopy 0x20 0x20 0x40) [[0]] @0 [[1]] @0x20 [[2]] @0x40 } nonce: '0' storage: {} # Check that CODECOPY works when there are special opcodes in the code 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Get our size [[0xFF]] (codesize) ; Copy our code to memory (codecopy 0 0 @@0xFF) ; Make it clear the storage we use gets overwritten [[0]] 0x60A7 [[1]] 0x60A7 [[2]] 0x60A7 ; Copy the memory into storage [[0]] @0x00 [[1]] @0x20 [[2]] @0x40 [[3]] @0x60 [[4]] @0x80 [[5]] @0xA0 ; Potentially problematic opcodes (stop) (selfdestruct 0xDEAD) (return 0x0 @@0xFF) (delegatecall 0xFF 0xEE 0xDD 0xCC 0xBB 0xAA) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall 0xffffff (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label codecopy :abi f(uint) 0 # "Infinite" (- 0 1) size buffer - :label codecopy_infbuff :abi f(uint) 1 # Big buffer - :label codecopy_bigbuff :abi f(uint) 2 # Copy the code in two steps - :label codecopy_2buff :abi f(uint) 3 # Prove we also copy the code for problematic opcodes - :label codecopy_opcodes :abi f(uint) 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label codecopy gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x6040600060003960005160005560205160015500000000000000000000000000 0x01: 0x00 - indexes: data: :label codecopy_bigbuff gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x6110006000600039600051600055602051600155000000000000000000000000 0x01: 0x00 - indexes: data: :label codecopy_infbuff gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 0x01: 0x00 - indexes: data: :label codecopy_2buff gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x6010600f600e600d600c600b600a600960086007600660056004600360026001 0x01: 0x0101010101010101010101010101016101005260206000600039604060206020 0x02: 0x3960005160005560205160015560405160025500000000000000000000000000 - indexes: data: :label codecopy_opcodes gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x3860ff5560ff5460006000396160a76000556160a76001556160a76002556000 0x01: 0x5160005560205160015560405160025560605160035560805160045560a05160 0x02: 0x05550061deadff60ff546000f360aa60bb60cc60dd60ee60fff4000000000000 0xFF: 0x5b # (codesize) # You can use https://etherscan.io/opcode-tool # to see this code includes the opcodes suspected by #130 # https://github.com/ethereum/tests/issues/130 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/gasFiller.yml ================================================ # Check the value of the program counter # # Note: The original tests also had gasOverFlow, but I didn't # see it doing anything relevant, so I didn't copy it gas: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0xffffffffff [90] 0xeeee [[0]] (gas) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (gas) } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label gas1 :abi f(uint) 0 - :label gas2 :abi f(uint) 1 gasLimit: - '80000000' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # gas1 has a different cost because the cost of memory access changed # between Istanbul and Berlin # # The change in the cost of SSTORE doesn't matter, because it happens # AFTER the (gas) - indexes: data: - :label gas1 gas: !!int -1 value: !!int -1 network: - '>=Cancun=Cancun=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0BAD - indexes: data: - :label jump-stop-dest - :label jump-dest - :label jump-dynamic - :label jump-to-list gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x600D ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/jumpToPushFiller.yml ================================================ # All boundary combinations for opcodes PUSH1-PUSH32 that attempt to # jump and execute into a portion of a push opcode data. jumpToPush: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 pre: # PUSH1 - A: OK 000000000000000000000000000000000000001A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0A (JUMPDEST location) # 07 JUMP # 08-09 PUSH1 0x5B # 0A JUMPDEST code: :raw 0x6001600055600A56605B5B nonce: '0' storage: {} # PUSH1 - B: FAIL 000000000000000000000000000000000000001B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (PUSH data location) # 07 JUMP # 08-09 PUSH1 0x5B # 0A JUMPDEST code: :raw 0x6001600055600956605B5B nonce: '0' storage: {} # PUSH2 - A: OK 000000000000000000000000000000000000002A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0B (JUMPDEST location) # 07 JUMP # 08-0A PUSH2 0x5B5B # 0B JUMPDEST code: :raw 0x6001600055600B56615B5B5B nonce: '0' storage: {} # PUSH2 - B: FAIL 000000000000000000000000000000000000002B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-0A PUSH2 0x5B5B # 0B JUMPDEST code: :raw 0x6001600055600956615B5B5B nonce: '0' storage: {} # PUSH2 - C: FAIL 000000000000000000000000000000000000002C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0A (End of PUSH data location) # 07 JUMP # 08-0A PUSH2 0x5B5B # 0B JUMPDEST code: :raw 0x6001600055600A56615B5B5B nonce: '0' storage: {} # PUSH3 - A: OK 000000000000000000000000000000000000003A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0C (JUMPDEST location) # 07 JUMP # 08-0B PUSH3 0x5B5B5B # 0C JUMPDEST code: :raw 0x6001600055600C56625B5B5B5B nonce: '0' storage: {} # PUSH3 - B: FAIL 000000000000000000000000000000000000003B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-0B PUSH3 0x5B5B5B # 0C JUMPDEST code: :raw 0x6001600055600956625B5B5B5B nonce: '0' storage: {} # PUSH3 - C: FAIL 000000000000000000000000000000000000003C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0B (End of PUSH data location) # 07 JUMP # 08-0B PUSH3 0x5B5B5B # 0C JUMPDEST code: :raw 0x6001600055600B56625B5B5B5B nonce: '0' storage: {} # PUSH4 - A: OK 000000000000000000000000000000000000004A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0D (JUMPDEST location) # 07 JUMP # 08-0C PUSH4 0x5B5B...5B # 0D JUMPDEST code: :raw 0x6001600055600D56635B5B5B5B5B nonce: '0' storage: {} # PUSH4 - B: FAIL 000000000000000000000000000000000000004B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-0C PUSH4 0x5B5B...5B # 0D JUMPDEST code: :raw 0x6001600055600956635B5B5B5B5B nonce: '0' storage: {} # PUSH4 - C: FAIL 000000000000000000000000000000000000004C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0C (End of PUSH data location) # 07 JUMP # 08-0C PUSH4 0x5B5B...5B # 0D JUMPDEST code: :raw 0x6001600055600C56635B5B5B5B5B nonce: '0' storage: {} # PUSH5 - A: OK 000000000000000000000000000000000000005A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0E (JUMPDEST location) # 07 JUMP # 08-0D PUSH5 0x5B5B...5B # 0E JUMPDEST code: :raw 0x6001600055600E56645B5B5B5B5B5B nonce: '0' storage: {} # PUSH5 - B: FAIL 000000000000000000000000000000000000005B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-0D PUSH5 0x5B5B...5B # 0E JUMPDEST code: :raw 0x6001600055600956645B5B5B5B5B5B nonce: '0' storage: {} # PUSH5 - C: FAIL 000000000000000000000000000000000000005C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0D (End of PUSH data location) # 07 JUMP # 08-0D PUSH5 0x5B5B...5B # 0E JUMPDEST code: :raw 0x6001600055600D56645B5B5B5B5B5B nonce: '0' storage: {} # PUSH6 - A: OK 000000000000000000000000000000000000006A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0F (JUMPDEST location) # 07 JUMP # 08-0E PUSH6 0x5B5B...5B # 0F JUMPDEST code: :raw 0x6001600055600F56655B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH6 - B: FAIL 000000000000000000000000000000000000006B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-0E PUSH6 0x5B5B...5B # 0F JUMPDEST code: :raw 0x6001600055600956655B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH6 - C: FAIL 000000000000000000000000000000000000006C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0E (End of PUSH data location) # 07 JUMP # 08-0E PUSH6 0x5B5B...5B # 0F JUMPDEST code: :raw 0x6001600055600E56655B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH7 - A: OK 000000000000000000000000000000000000007A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x10 (JUMPDEST location) # 07 JUMP # 08-0F PUSH7 0x5B5B...5B # 10 JUMPDEST code: :raw 0x6001600055601056665B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH7 - B: FAIL 000000000000000000000000000000000000007B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-0F PUSH7 0x5B5B...5B # 10 JUMPDEST code: :raw 0x6001600055600956665B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH7 - C: FAIL 000000000000000000000000000000000000007C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x0F (End of PUSH data location) # 07 JUMP # 08-0F PUSH7 0x5B5B...5B # 10 JUMPDEST code: :raw 0x6001600055600F56665B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH8 - A: OK 000000000000000000000000000000000000008A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x11 (JUMPDEST location) # 07 JUMP # 08-10 PUSH8 0x5B5B...5B # 11 JUMPDEST code: :raw 0x6001600055601156675B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH8 - B: FAIL 000000000000000000000000000000000000008B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-10 PUSH8 0x5B5B...5B # 11 JUMPDEST code: :raw 0x6001600055600956675B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH8 - C: FAIL 000000000000000000000000000000000000008C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x10 (End of PUSH data location) # 07 JUMP # 08-10 PUSH8 0x5B5B...5B # 11 JUMPDEST code: :raw 0x6001600055601056675B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH9 - A: OK 000000000000000000000000000000000000009A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x12 (JUMPDEST location) # 07 JUMP # 08-11 PUSH9 0x5B5B...5B # 12 JUMPDEST code: :raw 0x6001600055601256685B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH9 - B: FAIL 000000000000000000000000000000000000009B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-11 PUSH9 0x5B5B...5B # 12 JUMPDEST code: :raw 0x6001600055600956685B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH9 - C: FAIL 000000000000000000000000000000000000009C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x11 (End of PUSH data location) # 07 JUMP # 08-11 PUSH9 0x5B5B...5B # 12 JUMPDEST code: :raw 0x6001600055601156685B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH10 - A: OK 00000000000000000000000000000000000000AA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x13 (JUMPDEST location) # 07 JUMP # 08-12 PUSH10 0x5B5B...5B # 13 JUMPDEST code: :raw 0x6001600055601356695B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH10 - B: FAIL 00000000000000000000000000000000000000AB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-12 PUSH10 0x5B5B...5B # 13 JUMPDEST code: :raw 0x6001600055600956695B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH10 - C: FAIL 00000000000000000000000000000000000000AC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x12 (End of PUSH data location) # 07 JUMP # 08-12 PUSH10 0x5B5B...5B # 13 JUMPDEST code: :raw 0x6001600055601256695B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH11 - A: OK 00000000000000000000000000000000000000BA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x14 (JUMPDEST location) # 07 JUMP # 08-13 PUSH11 0x5B5B...5B # 14 JUMPDEST code: :raw 0x60016000556014566A5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH11 - B: FAIL 00000000000000000000000000000000000000BB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-13 PUSH11 0x5B5B...5B # 14 JUMPDEST code: :raw 0x60016000556009566A5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH11 - C: FAIL 00000000000000000000000000000000000000BC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x13 (End of PUSH data location) # 07 JUMP # 08-13 PUSH11 0x5B5B...5B # 14 JUMPDEST code: :raw 0x60016000556013566A5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH12 - A: OK 00000000000000000000000000000000000000CA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x15 (JUMPDEST location) # 07 JUMP # 08-14 PUSH12 0x5B5B...5B # 15 JUMPDEST code: :raw 0x60016000556015566B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH12 - B: FAIL 00000000000000000000000000000000000000CB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-14 PUSH12 0x5B5B...5B # 15 JUMPDEST code: :raw 0x60016000556009566B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH12 - C: FAIL 00000000000000000000000000000000000000CC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x14 (End of PUSH data location) # 07 JUMP # 08-14 PUSH12 0x5B5B...5B # 15 JUMPDEST code: :raw 0x60016000556014566B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH13 - A: OK 00000000000000000000000000000000000000DA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x16 (JUMPDEST location) # 07 JUMP # 08-15 PUSH13 0x5B5B...5B # 16 JUMPDEST code: :raw 0x60016000556016566C5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH13 - B: FAIL 00000000000000000000000000000000000000DB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-15 PUSH13 0x5B5B...5B # 16 JUMPDEST code: :raw 0x60016000556009566C5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH13 - C: FAIL 00000000000000000000000000000000000000DC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x15 (End of PUSH data location) # 07 JUMP # 08-15 PUSH13 0x5B5B...5B # 16 JUMPDEST code: :raw 0x60016000556015566C5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH14 - A: OK 00000000000000000000000000000000000000EA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x17 (JUMPDEST location) # 07 JUMP # 08-16 PUSH14 0x5B5B...5B # 17 JUMPDEST code: :raw 0x60016000556017566D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH14 - B: FAIL 00000000000000000000000000000000000000EB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-16 PUSH14 0x5B5B...5B # 17 JUMPDEST code: :raw 0x60016000556009566D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH14 - C: FAIL 00000000000000000000000000000000000000EC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x16 (End of PUSH data location) # 07 JUMP # 08-16 PUSH14 0x5B5B...5B # 17 JUMPDEST code: :raw 0x60016000556016566D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH15 - A: OK 00000000000000000000000000000000000000FA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x18 (JUMPDEST location) # 07 JUMP # 08-17 PUSH15 0x5B5B...5B # 18 JUMPDEST code: :raw 0x60016000556018566E5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH15 - B: FAIL 00000000000000000000000000000000000000FB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-17 PUSH15 0x5B5B...5B # 18 JUMPDEST code: :raw 0x60016000556009566E5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH15 - C: FAIL 00000000000000000000000000000000000000FC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x17 (End of PUSH data location) # 07 JUMP # 08-17 PUSH15 0x5B5B...5B # 18 JUMPDEST code: :raw 0x60016000556017566E5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH16 - A: OK 000000000000000000000000000000000000010A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x19 (JUMPDEST location) # 07 JUMP # 08-18 PUSH16 0x5B5B...5B # 19 JUMPDEST code: :raw 0x60016000556019566F5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH16 - B: FAIL 000000000000000000000000000000000000010B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-18 PUSH16 0x5B5B...5B # 19 JUMPDEST code: :raw 0x60016000556009566F5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH16 - C: FAIL 000000000000000000000000000000000000010C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x18 (End of PUSH data location) # 07 JUMP # 08-18 PUSH16 0x5B5B...5B # 19 JUMPDEST code: :raw 0x60016000556018566F5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH17 - A: OK 000000000000000000000000000000000000011A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1A (JUMPDEST location) # 07 JUMP # 08-19 PUSH17 0x5B5B...5B # 1A JUMPDEST code: :raw 0x6001600055601A56705B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH17 - B: FAIL 000000000000000000000000000000000000011B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-19 PUSH17 0x5B5B...5B # 1A JUMPDEST code: :raw 0x6001600055600956705B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH17 - C: FAIL 000000000000000000000000000000000000011C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x19 (End of PUSH data location) # 07 JUMP # 08-19 PUSH17 0x5B5B...5B # 1A JUMPDEST code: :raw 0x6001600055601956705B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH18 - A: OK 000000000000000000000000000000000000012A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1B (JUMPDEST location) # 07 JUMP # 08-1A PUSH18 0x5B5B...5B # 1B JUMPDEST code: :raw 0x6001600055601B56715B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH18 - B: FAIL 000000000000000000000000000000000000012B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-1A PUSH18 0x5B5B...5B # 1B JUMPDEST code: :raw 0x6001600055600956715B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH18 - C: FAIL 000000000000000000000000000000000000012C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1A (End of PUSH data location) # 07 JUMP # 08-1A PUSH18 0x5B5B...5B # 1B JUMPDEST code: :raw 0x6001600055601A56715B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH19 - A: OK 000000000000000000000000000000000000013A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1C (JUMPDEST location) # 07 JUMP # 08-1B PUSH19 0x5B5B...5B # 1C JUMPDEST code: :raw 0x6001600055601C56725B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH19 - B: FAIL 000000000000000000000000000000000000013B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-1B PUSH19 0x5B5B...5B # 1C JUMPDEST code: :raw 0x6001600055600956725B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH19 - C: FAIL 000000000000000000000000000000000000013C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1B (End of PUSH data location) # 07 JUMP # 08-1B PUSH19 0x5B5B...5B # 1C JUMPDEST code: :raw 0x6001600055601B56725B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH20 - A: OK 000000000000000000000000000000000000014A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1D (JUMPDEST location) # 07 JUMP # 08-1C PUSH20 0x5B5B...5B # 1D JUMPDEST code: :raw 0x6001600055601D56735B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH20 - B: FAIL 000000000000000000000000000000000000014B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-1C PUSH20 0x5B5B...5B # 1D JUMPDEST code: :raw 0x6001600055600956735B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH20 - C: FAIL 000000000000000000000000000000000000014C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1C (End of PUSH data location) # 07 JUMP # 08-1C PUSH20 0x5B5B...5B # 1D JUMPDEST code: :raw 0x6001600055601C56735B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH21 - A: OK 000000000000000000000000000000000000015A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1E (JUMPDEST location) # 07 JUMP # 08-1D PUSH21 0x5B5B...5B # 1E JUMPDEST code: :raw 0x6001600055601E56745B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH21 - B: FAIL 000000000000000000000000000000000000015B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-1D PUSH21 0x5B5B...5B # 1E JUMPDEST code: :raw 0x6001600055600956745B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH21 - C: FAIL 000000000000000000000000000000000000015C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1D (End of PUSH data location) # 07 JUMP # 08-1D PUSH21 0x5B5B...5B # 1E JUMPDEST code: :raw 0x6001600055601D56745B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH22 - A: OK 000000000000000000000000000000000000016A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1F (JUMPDEST location) # 07 JUMP # 08-1E PUSH22 0x5B5B...5B # 1F JUMPDEST code: :raw 0x6001600055601F56755B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH22 - B: FAIL 000000000000000000000000000000000000016B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-1E PUSH22 0x5B5B...5B # 1F JUMPDEST code: :raw 0x6001600055600956755B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH22 - C: FAIL 000000000000000000000000000000000000016C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1E (End of PUSH data location) # 07 JUMP # 08-1E PUSH22 0x5B5B...5B # 1F JUMPDEST code: :raw 0x6001600055601E56755B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH23 - A: OK 000000000000000000000000000000000000017A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x20 (JUMPDEST location) # 07 JUMP # 08-1F PUSH23 0x5B5B...5B # 20 JUMPDEST code: :raw 0x6001600055602056765B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH23 - B: FAIL 000000000000000000000000000000000000017B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-1F PUSH23 0x5B5B...5B # 20 JUMPDEST code: :raw 0x6001600055600956765B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH23 - C: FAIL 000000000000000000000000000000000000017C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x1F (End of PUSH data location) # 07 JUMP # 08-1F PUSH23 0x5B5B...5B # 20 JUMPDEST code: :raw 0x6001600055601F56765B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH24 - A: OK 000000000000000000000000000000000000018A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x21 (JUMPDEST location) # 07 JUMP # 08-20 PUSH24 0x5B5B...5B # 21 JUMPDEST code: :raw 0x6001600055602156775B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH24 - B: FAIL 000000000000000000000000000000000000018B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-20 PUSH24 0x5B5B...5B # 21 JUMPDEST code: :raw 0x6001600055600956775B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH24 - C: FAIL 000000000000000000000000000000000000018C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x20 (End of PUSH data location) # 07 JUMP # 08-20 PUSH24 0x5B5B...5B # 21 JUMPDEST code: :raw 0x6001600055602056775B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH25 - A: OK 000000000000000000000000000000000000019A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x22 (JUMPDEST location) # 07 JUMP # 08-21 PUSH25 0x5B5B...5B # 22 JUMPDEST code: :raw 0x6001600055602256785B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH25 - B: FAIL 000000000000000000000000000000000000019B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-21 PUSH25 0x5B5B...5B # 22 JUMPDEST code: :raw 0x6001600055600956785B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH25 - C: FAIL 000000000000000000000000000000000000019C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x21 (End of PUSH data location) # 07 JUMP # 08-21 PUSH25 0x5B5B...5B # 22 JUMPDEST code: :raw 0x6001600055602156785B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH26 - A: OK 00000000000000000000000000000000000001AA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x23 (JUMPDEST location) # 07 JUMP # 08-22 PUSH26 0x5B5B...5B # 23 JUMPDEST code: :raw 0x6001600055602356795B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH26 - B: FAIL 00000000000000000000000000000000000001AB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-22 PUSH26 0x5B5B...5B # 23 JUMPDEST code: :raw 0x6001600055600956795B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH26 - C: FAIL 00000000000000000000000000000000000001AC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x22 (End of PUSH data location) # 07 JUMP # 08-22 PUSH26 0x5B5B...5B # 23 JUMPDEST code: :raw 0x6001600055602256795B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH27 - A: OK 00000000000000000000000000000000000001BA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x24 (JUMPDEST location) # 07 JUMP # 08-23 PUSH27 0x5B5B...5B # 24 JUMPDEST code: :raw 0x60016000556024567A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH27 - B: FAIL 00000000000000000000000000000000000001BB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-23 PUSH27 0x5B5B...5B # 24 JUMPDEST code: :raw 0x60016000556009567A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH27 - C: FAIL 00000000000000000000000000000000000001BC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x23 (End of PUSH data location) # 07 JUMP # 08-23 PUSH27 0x5B5B...5B # 24 JUMPDEST code: :raw 0x60016000556023567A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH28 - A: OK 00000000000000000000000000000000000001CA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x25 (JUMPDEST location) # 07 JUMP # 08-24 PUSH28 0x5B5B...5B # 25 JUMPDEST code: :raw 0x60016000556025567B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH28 - B: FAIL 00000000000000000000000000000000000001CB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-24 PUSH28 0x5B5B...5B # 25 JUMPDEST code: :raw 0x60016000556009567B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH28 - C: FAIL 00000000000000000000000000000000000001CC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x24 (End of PUSH data location) # 07 JUMP # 08-24 PUSH28 0x5B5B...5B # 25 JUMPDEST code: :raw 0x60016000556024567B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH29 - A: OK 00000000000000000000000000000000000001DA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x26 (JUMPDEST location) # 07 JUMP # 08-25 PUSH29 0x5B5B...5B # 26 JUMPDEST code: :raw 0x60016000556026567C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH29 - B: FAIL 00000000000000000000000000000000000001DB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-25 PUSH29 0x5B5B...5B # 26 JUMPDEST code: :raw 0x60016000556009567C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH29 - C: FAIL 00000000000000000000000000000000000001DC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x25 (End of PUSH data location) # 07 JUMP # 08-25 PUSH29 0x5B5B...5B # 26 JUMPDEST code: :raw 0x60016000556025567C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH30 - A: OK 00000000000000000000000000000000000001EA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x27 (JUMPDEST location) # 07 JUMP # 08-26 PUSH30 0x5B5B...5B # 27 JUMPDEST code: :raw 0x60016000556027567D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH30 - B: FAIL 00000000000000000000000000000000000001EB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-26 PUSH30 0x5B5B...5B # 27 JUMPDEST code: :raw 0x60016000556009567D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH30 - C: FAIL 00000000000000000000000000000000000001EC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x26 (End of PUSH data location) # 07 JUMP # 08-26 PUSH30 0x5B5B...5B # 27 JUMPDEST code: :raw 0x60016000556026567D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH31 - A: OK 00000000000000000000000000000000000001FA: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x28 (JUMPDEST location) # 07 JUMP # 08-27 PUSH31 0x5B5B...5B # 28 JUMPDEST code: :raw 0x60016000556028567E5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH31 - B: FAIL 00000000000000000000000000000000000001FB: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-27 PUSH31 0x5B5B...5B # 28 JUMPDEST code: :raw 0x60016000556009567E5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH31 - C: FAIL 00000000000000000000000000000000000001FC: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x27 (End of PUSH data location) # 07 JUMP # 08-27 PUSH31 0x5B5B...5B # 28 JUMPDEST code: :raw 0x60016000556027567E5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH32 - A: OK 000000000000000000000000000000000000020A: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x29 (JUMPDEST location) # 07 JUMP # 08-28 PUSH32 0x5B5B...5B # 29 JUMPDEST code: :raw 0x60016000556029567F5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH32 - B: FAIL 000000000000000000000000000000000000020B: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x09 (Start of PUSH data location) # 07 JUMP # 08-28 PUSH32 0x5B5B...5B # 29 JUMPDEST code: :raw 0x60016000556009567F5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # PUSH32 - C: FAIL 000000000000000000000000000000000000020C: balance: 0 # Bytes Opcode # Location # -------- ---------- # 00-01 PUSH1 0x01 # 02-03 PUSH1 0x00 # 04 SSTORE # 05-06 PUSH1 0x28 (End of PUSH data location) # 07 JUMP # 08-28 PUSH32 0x5B5B...5B # 29 JUMPDEST code: :raw 0x60016000556028567F5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B nonce: '0' storage: {} # DelegateCall to the test contract cccccccccccccccccccccccccccccccccccccccc: balance: 0 code: | :yul berlin { let addr := calldataload(4) pop(delegatecall(sub(gas(), 5000), addr, 0, 0, 0, 0)) } # pop(delegatecall(gas(), addr, 0, 0, 0, 0)) nonce: '0' storage: 0x00: 0x00 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: # All contracts ending with A will succeed: # Jump right after the data portion ends. - :label jump-ok :abi f(uint) 0x01A - :label jump-ok :abi f(uint) 0x02A - :label jump-ok :abi f(uint) 0x03A - :label jump-ok :abi f(uint) 0x04A - :label jump-ok :abi f(uint) 0x05A - :label jump-ok :abi f(uint) 0x06A - :label jump-ok :abi f(uint) 0x07A - :label jump-ok :abi f(uint) 0x08A - :label jump-ok :abi f(uint) 0x09A - :label jump-ok :abi f(uint) 0x0AA - :label jump-ok :abi f(uint) 0x0BA - :label jump-ok :abi f(uint) 0x0CA - :label jump-ok :abi f(uint) 0x0DA - :label jump-ok :abi f(uint) 0x0EA - :label jump-ok :abi f(uint) 0x0FA - :label jump-ok :abi f(uint) 0x10A - :label jump-ok :abi f(uint) 0x11A - :label jump-ok :abi f(uint) 0x12A - :label jump-ok :abi f(uint) 0x13A - :label jump-ok :abi f(uint) 0x14A - :label jump-ok :abi f(uint) 0x15A - :label jump-ok :abi f(uint) 0x16A - :label jump-ok :abi f(uint) 0x17A - :label jump-ok :abi f(uint) 0x18A - :label jump-ok :abi f(uint) 0x19A - :label jump-ok :abi f(uint) 0x20A # All contracts ending with B/C will produce exception # B: Jump to the first byte of the data portion. # C: Jump to the last byte of the data portion. - :label jump-fail :abi f(uint) 0x01C - :label jump-fail :abi f(uint) 0x02C - :label jump-fail :abi f(uint) 0x03C - :label jump-fail :abi f(uint) 0x04C - :label jump-fail :abi f(uint) 0x05C - :label jump-fail :abi f(uint) 0x06C - :label jump-fail :abi f(uint) 0x07C - :label jump-fail :abi f(uint) 0x08C - :label jump-fail :abi f(uint) 0x09C - :label jump-fail :abi f(uint) 0x0AC - :label jump-fail :abi f(uint) 0x0BC - :label jump-fail :abi f(uint) 0x0CC - :label jump-fail :abi f(uint) 0x0DC - :label jump-fail :abi f(uint) 0x0EC - :label jump-fail :abi f(uint) 0x0FC - :label jump-fail :abi f(uint) 0x10C - :label jump-fail :abi f(uint) 0x11C - :label jump-fail :abi f(uint) 0x12C - :label jump-fail :abi f(uint) 0x13C - :label jump-fail :abi f(uint) 0x14C - :label jump-fail :abi f(uint) 0x15C - :label jump-fail :abi f(uint) 0x16C - :label jump-fail :abi f(uint) 0x17C - :label jump-fail :abi f(uint) 0x18C - :label jump-fail :abi f(uint) 0x19C - :label jump-fail :abi f(uint) 0x20C - :label jump-fail :abi f(uint) 0x01C - :label jump-fail :abi f(uint) 0x02C - :label jump-fail :abi f(uint) 0x03C - :label jump-fail :abi f(uint) 0x04C - :label jump-fail :abi f(uint) 0x05C - :label jump-fail :abi f(uint) 0x06C - :label jump-fail :abi f(uint) 0x07C - :label jump-fail :abi f(uint) 0x08C - :label jump-fail :abi f(uint) 0x09C - :label jump-fail :abi f(uint) 0x0AC - :label jump-fail :abi f(uint) 0x0BC - :label jump-fail :abi f(uint) 0x0CC - :label jump-fail :abi f(uint) 0x0DC - :label jump-fail :abi f(uint) 0x0EC - :label jump-fail :abi f(uint) 0x0FC - :label jump-fail :abi f(uint) 0x10C - :label jump-fail :abi f(uint) 0x11C - :label jump-fail :abi f(uint) 0x12C - :label jump-fail :abi f(uint) 0x13C - :label jump-fail :abi f(uint) 0x14C - :label jump-fail :abi f(uint) 0x15C - :label jump-fail :abi f(uint) 0x16C - :label jump-fail :abi f(uint) 0x17C - :label jump-fail :abi f(uint) 0x18C - :label jump-fail :abi f(uint) 0x19C - :label jump-fail :abi f(uint) 0x20C gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label jump-fail gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 - indexes: data: - :label jump-ok gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x01 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/jumpiFiller.yml ================================================ # Various JUMPIs (jump if...) # # The 000..1xx contracts are when the jump happens # The 000..2xx contracts are when it does not happen jumpi: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # This should fail (jump to something that isn't a JUMPDEST) 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x600D (asm 0x01 0x10 0x20 mul jumpi jumpdest) } nonce: '0' storage: {} # This should fail (jumpi to something that isn't a JUMPDEST) 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x600D (asm 0x01 0x10 0x20 mul jumpi jumpdest) } nonce: '0' storage: {} # This should succeed (the jump doesn't happen) 0000000000000000000000000000000000000200: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x600D (asm 0x00 0x10 0x20 mul jumpi jumpdest) } nonce: '0' storage: {} # This should succeed (the jump doesn't happen) 0000000000000000000000000000000000000201: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x600D (asm 0x00 0x10 0x20 mul jumpi jumpdest) } nonce: '0' storage: {} # Jump to after the STOP. Shouldn't be a problem 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x01 # 2 PUSH1 0x06 # 4 JUMPI # 5 STOP # 6 JUMPDEST # 7 PUSH2 0x600D # A PUSH1 0x00 # C SSTORE # D STOP code: :raw 0x6001600657005B61600D60005500 nonce: '0' storage: {} # Don't jump to after the STOP. 0000000000000000000000000000000000000202: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x00 # 2 PUSH1 0x06 # 4 JUMPI # 5 STOP # 6 JUMPDEST # 7 PUSH2 0x600D # A PUSH1 0x00 # C SSTORE # D STOP code: :raw 0x6000600657005B61600D60005500 nonce: '0' storage: {} # This should fail (the old jumpHigh) 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x600D (asm 0xff 0x0fffffff jumpi) } nonce: '0' storage: {} # This should work (the jump doesn't happen) 0000000000000000000000000000000000000203: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x600D (asm 0x00 0x0fffffff jumpi) } nonce: '0' storage: {} # The old jump0_AfterJumpdest 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x23 # 2 PUSH1 0x01 # 4 PUSH1 0x0A # 6 JUMPI # 7 PUSH1 0x01 # 9 JUMPDEST # A PUSH1 0x02 # C SSTORE code: :raw 0x6023600160085760015b600255 nonce: '0' storage: {} # Endless loop (well, endless until it runs out of gas, so mostly endless) 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH2 0x600D # 3 PUSH1 0x00 # 5 SSTORE # 6 JUMPDEST # 7 PUSH1 0x06 # 9 PUSH1 0x06 # B JUMPI code: :raw 0x61600D6000555B6006600657 nonce: '0' storage: {} # Skip an opcode with jump, see it doesn't run 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH2 0x600D # 3 PUSH1 0x01 # 5 PUSH1 0x0A # 7 JUMPI # 8 PUSH1 0xFF # A JUMPDEST # B PUSH1 0x00 # D SSTORE code: :raw 0x61600D6001600A5760FF5B600055 nonce: '0' storage: {} # Jump backwards, see that works too 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x0B # 2 JUMP # 3 JUMPDEST # 4 PUSH2 0x600D # 7 PUSH1 0x00 # 9 SSTORE # A STOP # B JUMPDEST # C PUSH1 0x01 # E PUSH1 0x03 # 10 JUMPI code: :raw 0x600B565B61600D600055005B6001600357 nonce: '0' storage: {} # Dynamic jump 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x01 # 2 PUSH1 0x04 # 4 PUSH1 0x05 # 6 ADD # 7 JUMPI # 8 STOP # 9 JUMPDEST # A PUSH2 0x600D # D PUSH1 0x00 # F SSTORE code: :raw 0x6001600460050157005B61600D600055 nonce: '0' storage: {} # Dynamic jump 0000000000000000000000000000000000000208: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x00 # 2 PUSH1 0x04 # 4 PUSH1 0x05 # 6 ADD # 7 JUMPI # 8 STOP # 9 JUMPDEST # A PUSH2 0x600D # D PUSH1 0x00 # F SSTORE code: :raw 0x6000600460050157005B61600D600055 nonce: '0' storage: {} # Jump to the data of a push, when it just happens to be # 0x5B (jumpdest) # # Amazingly, but correctly, this fails 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x01 # 2 PUSH1 0x07 # 4 JUMPI # 5 STOP # 6 PUSH1 0x5B # 8 PUSH2 0x600D # B PUSH1 0x00 # D SSTORE code: :raw 0x600160075700605B61600D600055 nonce: '0' storage: {} # Jump to the data of a push, when it isn't a 0x5B (JUMPDEST) 000000000000000000000000000000000000100A: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0xFF # 2 PUSH1 0x09 # 4 JUMPI # 5 STOP # 6 PUSH1 0x01 # 8 PUSH2 0x600D # B PUSH1 0x00 # D SSTORE code: :raw 0x600160075700600161600D600055 nonce: '0' storage: {} # Jump one instruction after the JUMPDEST 000000000000000000000000000000000000100B: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH2 0x600D # 3 PUSH1 0x00 # 5 SSTORE # 6 PUSH1 0x01 # 8 PUSH1 0x0D # A JUMPI # B GAS # C JUMMPDEST # D GAS # E PUSH1 0x01 # 10 SSTORE code: :raw 0x61600D6000556001600D575A5B5A600155 nonce: '0' storage: {} # Jump one instruction before the JUMPDEST 000000000000000000000000000000000000100C: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH2 0x600D # 3 PUSH1 0x00 # 5 SSTORE # 6 PUSH1 0x01 # 8 PUSH1 0x0B # A JUMPI # B GAS # C JUMMPDEST # D GAS # E PUSH1 0x01 # 10 SSTORE code: :raw 0x61600D6000556001600B575A5B5A600155 nonce: '0' storage: {} # Another jump into hyperspace # The old jumpToUint64maxPlus1 000000000000000000000000000000000000100D: balance: '0x0ba1a9ce0ba1a9ce' # [ 0] PUSH1 0x11 # [ 2] PUSH9 0x01000000000000000d # [ C] JUMPI # [ D] JUMPDEST # [ E] JUMPDEST # [ F] PUSH1 0x01 # [11] PUSH1 0x01 # [13] SSTORE code: :raw 0x60116801000000000000000D575b5b61600D600055 nonce: '0' storage: {} 000000000000000000000000000000000000020D: balance: '0x0ba1a9ce0ba1a9ce' # [ 0] PUSH1 0x00 # [ 2] PUSH9 0x01000000000000000d # [ C] JUMPI # [ D] JUMPDEST # [ E] JUMPDEST # [ F] PUSH2 0x600D # [12] PUSH1 0x00 # [14] SSTORE code: :raw 0x60006801000000000000000D575b5b61600D600055 nonce: '0' storage: {} # Another jump into hyperspace # The old jumpToUintmaxPlus1 000000000000000000000000000000000000100E: balance: '0x0ba1a9ce0ba1a9ce' # [ 0] PUSH1 0x11 # [ 2] PUSH5 0x0100000009 # [ 8] JUMPI # [ 9] JUMPDEST # [ A] JUMPDEST # [ B] PUSH2 0x600D # [ E] PUSH1 0x00 # [10] SSTORE code: :raw 0x6011640100000009575b5b61600D600055 nonce: '0' storage: {} # Another jump into hyperspace # The old jumpToUintmaxPlus1 000000000000000000000000000000000000020E: balance: '0x0ba1a9ce0ba1a9ce' # [ 0] PUSH1 0x00 # [ 2] PUSH5 0x0100000009 # [ 8] JUMPI # [ 9] JUMPDEST # [ A] JUMPDEST # [ B] PUSH2 0x600D # [ E] PUSH1 0x00 # [10] SSTORE code: :raw 0x6000640100000009575b5b61600D600055 nonce: '0' storage: {} # The furthest into hyperspace jump imaginable: to -1 000000000000000000000000000000000000100F: balance: '0x0ba1a9ce0ba1a9ce' code: | { @0 (- 0 1) (asm 1 0 mload jumpi 0x600D 0x00 sstore) } nonce: '0' storage: {} # The furthest into hyperspace jump imaginable: to -1 000000000000000000000000000000000000020F: balance: '0x0ba1a9ce0ba1a9ce' code: | { @0 (- 0 1) (asm 0 0 mload jumpi 0x600D 0x00 sstore) } nonce: '0' storage: {} # Jumpi into a big list of JUMPDESTs 0000000000000000000000000000000000000110: balance: '0x0ba1a9ce0ba1a9ce' # 0 PUSH1 0x01 # 2 PUSH1 0x0e # 4 JUMPI # 5 JUMPDEST # 6 JUMPDEST # . # . # . # 14 JUMPDEST # 15 PUSH2 0x600D # 18 PUSH1 0x00 # 1A SSTORE code: :raw 0x6001600E575B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B61600D600055 nonce: '0' storage: {} # A loop that eventually ends 0000000000000000000000000000000000000111: balance: '0x0ba1a9ce0ba1a9ce' # 00 PUSH2 0x600D # 03 PUSH1 0x00 # 05 SSTORE # 06 PUSH1 0x10 # 08 PUSH1 0x00 # 0A MSTORE # 0B JUMPDEST # 0C PUSH1 0x01 # 0E PUSH1 0x00 # 10 MLOAD # 11 SUB # 12 DUP1 # 13 PUSH1 0x00 # 15 MSTORE # 16 PUSH1 0x0B # 18 JUMPI code: :raw 0x61600D60005560106000525B60016000510380600052600B57 # 00 03 0506 08 0A0B0C 0E 10111213 1516 18 nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; limited gas because of the endless loop (delegatecall 0x10000 $4 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: # The two old bad_indirect_jump tests - :label jump-hyperspace :abi f(uint) 0x1000 - :label jump-hyperspace :abi f(uint) 0x1001 # The two old bad_indirect_jump tests, except without the jump - :label not-jump-hyperspace :abi f(uint) 0x0200 - :label not-jump-hyperspace :abi f(uint) 0x0201 # The old jump to after the STOP - :label jump-stop-dest :abi f(uint) 0x1002 - :label not-jump-stop-dest :abi f(uint) 0x0202 # The old jumpHigh - :label jump-hyperspace :abi f(uint) 0x1003 - :label not-jump-hyperspace :abi f(uint) 0x0203 # The old jump0_AfterJumpdest - :label jump-not-jumpdest :abi f(uint) 0x1004 # "Endless" loop (not really endless, it just runs out of gas) - :label endless-loop :abi f(uint) 0x1005 # Just checking JUMP / JUMPDEST is various ways - :label jump-dest :abi f(uint) 0x1006 - :label jump-dest :abi f(uint) 0x1007 # A dynamic jump - :label jump-dynamic :abi f(uint) 0x1008 - :label not-jump-dynamic :abi f(uint) 0x0208 # Jump into push (this fails, even if you jump to a 0x5B) - :label jump-2-push :abi f(uint) 0x1009 - :label jump-2-push :abi f(uint) 0x100A # JUMP one instruction before or after the JUMPDEST - :label jump-not-jumpdest :abi f(uint) 0x100B - :label jump-not-jumpdest :abi f(uint) 0x100C # The old jumpToUint64maxPlus1 - :label jump-hyperspace :abi f(uint) 0x100D - :label not-jump-hyperspace :abi f(uint) 0x020D # The old jumpToUintmaxPlus1 - :label jump-hyperspace :abi f(uint) 0x100E - :label not-jump-hyperspace :abi f(uint) 0x020E # Jump to -1 (aka 0xfff...ffff) - :label jump-hyperspace :abi f(uint) 0x100F - :label not-jump-hyperspace :abi f(uint) 0x020F # Jump to the middle of a JUMPDEST list - :label jump-to-list :abi f(uint) 0x0110 # A loop that ends eventually - :label loop :abi f(uint) 0x0111 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label jump-hyperspace - :label jump-not-jumpdest - :label endless-loop - :label jump-2-push - :label not-jump-stop-dest - :label not-jump-dynamic gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0BAD - indexes: data: - :label jump-stop-dest - :label jump-dest - :label jump-dynamic - :label jump-to-list - :label not-jump-hyperspace - :label loop gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x600D ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/loop_stacklimitFiller.yml ================================================ loop_stacklimit: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # loop_stacklimit_1021 : balance: '0x0ba1a9ce0ba1a9ce' code: | { (asm 0 CALLVALUE JUMPDEST 1 SWAP1 SUB SWAP1 1 ADD DUP2 DUP1 3 JUMPI 0 MSTORE 1 MSTORE 0 MSIZE RETURN) } nonce: '0' storage: {} # loop_stacklimit_1020 : balance: '0x0ba1a9ce0ba1a9ce' # [1] PUSH1 0x00 # [2] CALLVALUE # [3] JUMPDEST # [5] PUSH1 0x01 # [6] SWAP1 # [7] SUB # [8] SWAP1 # [10] PUSH1 0x01 # [11] ADD # [12] DUP2 # [13] DUP1 # [15] PUSH1 0x03 # [16] JUMPI # [18] PUSH1 0x00 # [19] MSTORE # [21] PUSH1 0x01 # [22] MSTORE # [24] PUSH1 0x00 # [25] MSIZE # [26] RETURN # [27] STOP code: :raw 0x6000345b60019003906001018180600357600052600152600059f300 nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. : balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x00 : balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label loop_1021 :abi f(uint) 0 - :label loop_1020 :abi f(uint) 1 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: - :label loop_1020 - :label loop_1021 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/loopsConditionalsFiller.yml ================================================ # Check the LLL operations when, unless, if, while, until, and for # # Technically speaking we are checking here the LLL compiler rather than # the virtual machine, but considering a problem with the compiler will affect # almost all our tests, it's worth verifying. # # There were some tests in the old repository that didn't make sense so I # didn't transfer them: # stack_loop # stackjump1 loopsConditionals: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # when with a positive result 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { (when (> 1 0) [[0]] 0x600D) } nonce: '0' storage: {} # when with a negative result 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { (when (< 1 0) [[0]] 0x600D) } nonce: '0' storage: {} # unless with a negative result 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (unless (> 1 0) [[0]] 0x600D) } nonce: '0' storage: {} # unless with a positive result 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { (unless (< 1 0) [[0]] 0x600D) } nonce: '0' storage: {} # if with a positive result 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (if (> 1 0) 0x600D 0x60A7) } nonce: '0' storage: {} # if with a negative result 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (if (< 1 0) 0x600D 0x60A7) } nonce: '0' storage: {} # while 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x10 [[1]] 0x01 (while @@0 { [[0]] (- @@0 1) [[1]] (* @@1 2) }) ; while loop } nonce: '0' storage: {} # until 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x10 [[1]] 0x01 (until (= @@0 0) { [[0]] (- @@0 1) [[1]] (* @@1 2) }) ; until loop } nonce: '0' storage: {} # for 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { (for { [[0]] 0x10 [[1]] 0x01 } ; initialization (> @@0 0) ; predicate [[0]] (- @@0 1) ; post [[1]] (* @@1 2) ; body ) ; for loop } nonce: '0' storage: {} # for_loop1 (from the original tests) 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'i 0x80) (def 'j 0xA0) (for [i] 10 ; init (> @i 0) ; predicate [i] (- @i 1) ; post [j] (+ @i @j) ; body ) ; for loop [[0]] @j } nonce: '0' storage: {} # for_loop2 (from the original tests) 000000000000000000000000000000000000100A: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'i 0x80) (def 'j 0xA0) (for [i] 0 ; init (<= @i 10) ; predicate [i] (+ @i 1) ; post [j] (+ @i @j) ; body ) ; for loop [[0]] @j } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label whenTrue :abi f(uint) 0 - :label whenFalse :abi f(uint) 1 - :label unlessTrue :abi f(uint) 3 - :label unlessFalse :abi f(uint) 2 - :label ifTrue :abi f(uint) 4 - :label ifFalse :abi f(uint) 5 - :label while :abi f(uint) 6 - :label until :abi f(uint) 7 - :label for :abi f(uint) 8 - :label for_loop1 :abi f(uint) 9 - :label for_loop2 :abi f(uint) 10 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label whenTrue - :label unlessTrue - :label ifTrue gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x600D - indexes: data: - :label whenFalse - :label unlessFalse gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0BAD - indexes: data: - :label ifFalse gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x60A7 - indexes: data: - :label while - :label until - :label for gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x000000 0x01: 0x010000 - indexes: data: - :label for_loop1 - :label for_loop2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x37 # 55, aka 1+2+3..+10 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/mloadFiller.yml ================================================ mload: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Normal, valid mload 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff [[0]] (mload 0) } nonce: '0' storage: {} # A couple of OOG scenarios 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (mload 0x0fffffff) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (mload 7489573) } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label mload :abi f(uint) 0 - :label mloadOOG :abi f(uint) 1 - :label mloadOOG :abi f(uint) 2 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label mload gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff - indexes: data: - :label mloadOOG - :label mloadOOG gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/msizeFiller.yml ================================================ # Memory size tests msize: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0x100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Store an entire 32 byte value [0] 0xFF [[0]] (msize) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Store an entire 32 byte value [0] 0xffffffffff [[0]] (msize) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Store two values [0] 0xffffffffff [0x20] 0xeeee [[0]] (msize) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Store two values [0] 0xffffffffff [0x5a] 0xeeee [[0]] (msize) ; The 0xEEEE value is stored 0x5a-0x79, ; and memory is allocated in 0x20 byte chunks } nonce: '0' storage: {} # chunks 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Store at the very end of the first chunk (mstore8 0x1F 1) [[0]] (msize) ; Store at the beginning of the second chuck (mstore8 0x20 1) [[1]] (msize) ; Does it matter if we reset the memory? ; Spoiler alert, it doesn't (mstore8 0x20 0) [[2]] (msize) } nonce: '0' storage: {} # farChunk 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Does the chunk size change in very high offsets? ; ; Note: It doesn't (mstore8 0xB00000 1) [[0]] (msize) } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label msize0 :abi f(uint) 0 - :label msize1 :abi f(uint) 1 - :label msize2 :abi f(uint) 2 - :label msize3 :abi f(uint) 3 - :label chunks :abi f(uint) 4 # Off in hyperspace, is the chunk size still 0x20? - :label farChunk :abi f(uint) 5 gasLimit: - 0x10000000 gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label msize0 - :label msize1 gas: !!int -1 value: !!int -1 network: - '>=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xff00000000000000000000000000000000000000000000000000000000000000 - indexes: data: - :label mstore8_twobytes gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00ffee0000000000000000000000000000000000000000000000000000000000 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/mstoreFiller.yml ================================================ # Verify the mstore opcode mstore: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] @1 } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore 1 (+ 2 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) ) [[0]] @1 } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore 1 (- 0 1)) [[0]] @1 } nonce: '0' storage: {} # Memory is addressed in bytes. Storage isn't. # # So after (mstore 1 n) # @0 is n/256 (assuming byte 0 itself is zero) 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore 1 0xFF) [[0]] @0 } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore 1 0xFF00) [[0]] @0 } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label mstore_allF :abi f(uint) 0 - :label mstore_one :abi f(uint) 1 - :label mstore_neg1 :abi f(uint) 2 - :label mstore_byte32 :abi f(uint) 3 - :label mstore_byte31 :abi f(uint) 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label mstore_allF - :label mstore_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - indexes: data: - :label mstore_one gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x01 - indexes: data: - :label mstore_byte32 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 - indexes: data: - :label mstore_byte31 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xFF ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/pcFiller.yml ================================================ # Check the value of the program counter pc: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (pc) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0xFF [[1]] (pc) } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label pc1 :abi f(uint) 0 - :label pc2 :abi f(uint) 1 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label pc1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 # first opcode of the program - indexes: data: - :label pc2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xff # just a value 0x01: 0x05 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/popFiller.yml ================================================ # Run the POP opcode pop: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x6002600360045055 # PUSH1 2 # PUSH1 3 # PUSH1 4 # POP # SSTORE ([[3]] 2) nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x5060026003600455 # POP (which should abort, stack underflow) # PUSH1 2 # PUSH1 3 # PUSH1 4 # SSTORE ([[4]] 3, except we never get here) nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label pop1 :abi f(uint) 0 - :label pop2 :abi f(uint) 1 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label pop1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x03: 0x02 - indexes: data: - :label pop2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x04: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/returnFiller.yml ================================================ return: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Return a normal value 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef [[0xFF]] 0x600D (return 0x00 0x40) } nonce: '0' storage: {} # "Infinite" (-1 = 0xfff..ffff) buffer 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef [[0xFF]] 0x600D (return 0x00 (- 0 1)) } nonce: '0' storage: {} # Big but reasonable buffer 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef [[0xFF]] 0x600D (return 0x00 0x1000) } nonce: '0' storage: {} # Return at an offset 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef [[0xFF]] 0x600D (return 0x05 0x20) } nonce: '0' storage: {} # The old return2 # This seems needlessly complicated to me, but it was part of the old # test suite so we might as well keep it. Here's the disassembler (courtesy of # Etherscan): #[1] PUSH1 0x01 #[3] PUSH1 0x80 #[4] MSTORE #[6] PUSH1 0x00 #[8] PUSH1 0x80 #[9] MLOAD #[10] GT #[12] PUSH1 0x1b #[13] JUMPI #[15] PUSH1 0x01 #[17] PUSH1 0x00 #[18] MSTORE #[20] PUSH1 0x20 #[22] PUSH1 0x00 #[23] RETURN #[25] PUSH1 0x2b #[26] JUMP #[27] JUMPDEST #[29] PUSH1 0x27 #[31] PUSH1 0x00 #[32] MSTORE #[34] PUSH1 0x20 #[36] PUSH1 0x00 #[37] RETURN #[39] PUSH1 0x02 #[41] PUSH1 0x80 #[42] MSTORE #[43] JUMPDEST # [44] STOP 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x6001608052600060805111601b57600160005260206000f3602b565b602760005260206000f360026080525b00 nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; read 0x40 bytes of return data (delegatecall 0xffffff (+ 0x1000 $4) 0 0 0x00 0x40) [[0]] @0x00 [[1]] @0x20 } nonce: '0' storage: 0xFF: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label return :abi f(uint) 0 - :label returnInfBuff :abi f(uint) 1 - :label returnBigBuff :abi f(uint) 2 - :label returnOffset :abi f(uint) 3 - :label returnOld :abi f(uint) 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label return - :label returnBigBuff gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef 0x01: 0x00 0xFF: 0x600D - indexes: data: - :label returnInfBuff gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0xFF: 0x0BAD - indexes: data: - :label returnOffset gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # Remember that the higher significant bytes come first in EVM 0x00: 0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0000000000 0x01: 0x00 0xFF: 0x600D - indexes: data: - :label returnOld gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x0027 0xFF: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmIOandFlowOperations/sstore_sloadFiller.yml ================================================ # Verify the sstore and sload operations sstore_sload: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { (sstore 0 0xff) (sstore 10 0xee) [[ 20 ]] (sload 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { (sstore 0 0xff) (sstore 10 0xee) [[ 20 ]] (sload 100) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0xFF [[1]] 0xEE [[2]] 0xDD [[10]] @@1 [[20]] @@2 } nonce: '0' storage: {} # Using DELEGATECALL lets us group results together, because everything # is written to the same storage. cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0x00: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label sstore_sload_3 :abi f(uint) 0 - :label sstore_sload_noinit :abi f(uint) 1 - :label sstore_sload_4 :abi f(uint) 2 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label sstore_sload_3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xFF 0x0A: 0xEE 0x14: 0xFF - indexes: data: - :label sstore_sload_noinit gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xFF 0x0A: 0xEE - indexes: data: - :label sstore_sload_4 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0xFF 0x01: 0xEE 0x02: 0xDD 0x0A: 0xEE 0x14: 0xDD ================================================ FILE: tests/static/state_tests/VMTests/vmLogTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/VMTests/vmLogTest/log0Filler.yml ================================================ log0: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; emptyMem (log0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memStartTooHigh [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeTooHigh [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log0 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeZero [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log0 1 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; nonEmptyMem [0] 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (log0 0 32) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_0_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log0 0 1) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_31_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log0 31 1) [[0]] 0x600D } nonce: '0' storage: {} 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; logTwice [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log0 0 32) (log0 2 16) [[0]] 0x600D } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label emptyMem :abi f(uint) 0 - :label memStartTooHigh :abi f(uint) 1 - :label memSizeTooHigh :abi f(uint) 2 - :label memSizeZero :abi f(uint) 3 - :label nonEmptyMem :abi f(uint) 4 - :label log_0_1 :abi f(uint) 5 - :label log_31_1 :abi f(uint) 6 - :label logTwice :abi f(uint) 10 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" # Log tests do two things that are visible to retesteth: # # 1. Cost gas # 2. Abort or don't above the contract call # # This test checks the second one by having an SSTORE that either happens # (success) or not (failure) expect: # All the successes - indexes: data: - :label emptyMem - :label memSizeZero - :label nonEmptyMem - :label log_0_1 - :label log_31_1 - :label logTwice gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x600D # All the failures - indexes: data: - :label memStartTooHigh - :label memSizeTooHigh gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmLogTest/log1Filler.yml ================================================ log1: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; emptyMem (log1 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memStartTooHigh [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeTooHigh [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log1 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeZero [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log1 1 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; nonEmptyMem [0] 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (log1 0 32 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_0_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log1 0 1 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_31_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log1 31 1 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; caller (as topic) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log1 0 32 (caller)) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; maxTopic (def 'neg1 (- 0 1)) (mstore8 0 0xFF) (log1 31 1 neg1) [[0]] 0x600D } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label emptyMem :abi f(uint) 0 - :label memStartTooHigh :abi f(uint) 1 - :label memSizeTooHigh :abi f(uint) 2 - :label memSizeZero :abi f(uint) 3 - :label nonEmptyMem :abi f(uint) 4 - :label log_0_1 :abi f(uint) 5 - :label log_31_1 :abi f(uint) 6 - :label caller :abi f(uint) 7 - :label maxTopic :abi f(uint) 8 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" # Log tests do two things that are visible to retesteth: # # 1. Cost gas # 2. Abort or don't above the contract call # # This test checks the second one by having an SSTORE that either happens # (success) or not (failure) expect: # All the successes - indexes: data: - :label emptyMem - :label memSizeZero - :label nonEmptyMem - :label log_0_1 - :label log_31_1 - :label caller - :label maxTopic gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x600D # All the failures - indexes: data: - :label memStartTooHigh - :label memSizeTooHigh gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmLogTest/log2Filler.yml ================================================ log2: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; emptyMem (log2 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memStartTooHigh (def 'neg1 (- 0 1)) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log2 neg1 1 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeTooHigh (def 'neg1 (- 0 1)) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log2 1 neg1 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeZero [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log2 1 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; nonEmptyMem [0] 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (log2 0 32 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_0_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log2 0 1 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_31_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log2 31 1 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; caller (as topic) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log2 0 32 0 (caller)) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; maxTopic (def 'neg1 (- 0 1)) (mstore8 0 0xFF) (log2 31 1 neg1 neg1) [[0]] 0x600D } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label emptyMem :abi f(uint) 0 - :label memStartTooHigh :abi f(uint) 1 - :label memSizeTooHigh :abi f(uint) 2 - :label memSizeZero :abi f(uint) 3 - :label nonEmptyMem :abi f(uint) 4 - :label log_0_1 :abi f(uint) 5 - :label log_31_1 :abi f(uint) 6 - :label caller :abi f(uint) 7 - :label maxTopic :abi f(uint) 8 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" # Log tests do two things that are visible to retesteth: # # 1. Cost gas # 2. Abort or don't above the contract call # # This test checks the second one by having an SSTORE that either happens # (success) or not (failure) expect: # All the successes - indexes: data: - :label emptyMem - :label memSizeZero - :label nonEmptyMem - :label log_0_1 - :label log_31_1 - :label caller - :label maxTopic gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x600D # All the failures - indexes: data: - :label memStartTooHigh - :label memSizeTooHigh gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmLogTest/log3Filler.yml ================================================ log3: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; emptyMem (log3 0 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memStartTooHigh (def 'neg1 (- 0 1)) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 neg1 1 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeTooHigh (def 'neg1 (- 0 1)) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 1 neg1 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeZero [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 1 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; nonEmptyMem [0] 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (log3 0 32 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_0_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 0 1 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_31_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 31 1 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; caller (as topic) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 0 32 0 0 (caller)) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; maxTopic (def 'neg1 (- 0 1)) (mstore8 0 0xFF) (log3 31 1 neg1 neg1 neg1) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; pc [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log3 31 1 (pc) (pc) (pc)) [[0]] 0x600D } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label emptyMem :abi f(uint) 0 - :label memStartTooHigh :abi f(uint) 1 - :label memSizeTooHigh :abi f(uint) 2 - :label memSizeZero :abi f(uint) 3 - :label nonEmptyMem :abi f(uint) 4 - :label log_0_1 :abi f(uint) 5 - :label log_31_1 :abi f(uint) 6 - :label caller :abi f(uint) 7 - :label maxTopic :abi f(uint) 8 - :label pc :abi f(uint) 9 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" # Log tests do two things that are visible to retesteth: # # 1. Cost gas # 2. Abort or don't above the contract call # # This test checks the second one by having an SSTORE that either happens # (success) or not (failure) expect: # All the successes - indexes: data: - :label emptyMem - :label memSizeZero - :label nonEmptyMem - :label log_0_1 - :label log_31_1 - :label caller - :label maxTopic - :label pc gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x600D # All the failures - indexes: data: - :label memStartTooHigh - :label memSizeTooHigh gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmLogTest/log4Filler.yml ================================================ log4: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; emptyMem (log4 0 0 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memStartTooHigh (def 'neg1 (- 0 1)) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 neg1 1 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeTooHigh (def 'neg1 (- 0 1)) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 1 neg1 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; memSizeZero [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 1 0 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; nonEmptyMem [0] 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (log4 0 32 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_0_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 0 1 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; log_31_1 [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 31 1 0 0 0 0) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; caller (as topic) [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 0 32 0 0 0 (caller)) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; maxTopic (def 'neg1 (- 0 1)) (mstore8 0 0xFF) (log4 31 1 neg1 neg1 neg1 neg1) [[0]] 0x600D } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; pc [0] 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd (log4 31 1 (pc) (pc) (pc) (pc)) [[0]] 0x600D } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: 0: 0x0BAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label emptyMem :abi f(uint) 0 - :label memStartTooHigh :abi f(uint) 1 - :label memSizeTooHigh :abi f(uint) 2 - :label memSizeZero :abi f(uint) 3 - :label nonEmptyMem :abi f(uint) 4 - :label log_0_1 :abi f(uint) 5 - :label log_31_1 :abi f(uint) 6 - :label caller :abi f(uint) 7 - :label maxTopic :abi f(uint) 8 - :label pc :abi f(uint) 9 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" # Log tests do two things that are visible to retesteth: # # 1. Cost gas # 2. Abort or don't above the contract call # # This test checks the second one by having an SSTORE that either happens # (success) or not (failure) expect: # All the successes - indexes: data: - :label emptyMem - :label memSizeZero - :label nonEmptyMem - :label log_0_1 - :label log_31_1 - :label caller - :label maxTopic - :label pc gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x600D # All the failures - indexes: data: - :label memStartTooHigh - :label memSizeTooHigh gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0: 0x0BAD ================================================ FILE: tests/static/state_tests/VMTests/vmTests/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/VMTests/vmTests/blockInfoFiller.yml ================================================ blockInfo: # Test the opcodes that read block information env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (coinbase) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (difficulty) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (gaslimit) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The blocknumber [[0]] (number) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (timestamp) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label coinbase :abi f(uint) 0 - :label difficulty :abi f(uint) 1 - :label gaslimit :abi f(uint) 2 - :label number :abi f(uint) 3 - :label timestamp :abi f(uint) 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label coinbase gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba - indexes: data: - :label difficulty gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0x20000 - indexes: data: - :label gaslimit gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 100000000 - indexes: data: - :label number gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 1 - indexes: data: - :label timestamp gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 1000 ================================================ FILE: tests/static/state_tests/VMTests/vmTests/envInfoFiller.yml ================================================ envInfo: # Opcodes that read the environment # # Except for CALLDATACOPY, CALLDATALOAD, and CALLDATASIZE # because have lots of test cases each env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (address) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Copy first seven bytes of code to memory ; and from there to storage (codecopy 0 0 7) [[0]] @0 } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; codecopy zero bytes (codecopy 0 0 0) [[0]] @0 } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; codecopy from unrealistically high in the code ; segment (so high you wrap around) (def 'neg6 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa) (codecopy 0 neg6 8) [[0]] @0 } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (caller) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (callvalue) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (codesize) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (gasprice) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (origin) } nonce: '0' storage: {} 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (calldatasize) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0xffffff (+ 0x1000 $4) 0x10 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :label address :abi f(uint) 0 - :label codecopy :abi f(uint) 1 - :label codecopy_len0 :abi f(uint) 2 - :label codecopy_neg_offset :abi f(uint) 3 - :label caller :abi f(uint) 4 - :label callvalue :abi f(uint) 5 - :label codesize :abi f(uint) 6 - :label gasprice :abi f(uint) 7 - :label origin :abi f(uint) 8 - :label calldatasize :abi f(uint) 9 gasLimit: - '16777216' gasPrice: 0x1234 nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label address gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0x1000 - indexes: data: :label codecopy gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: # 0 PUSH1 0x07 # 2 PUSH1 0x00 # 4 PUSH1 0x00 # 6 CODECOPY 0: 0x6007600060003900000000000000000000000000000000000000000000000000 - indexes: data: :label codecopy_len0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x00 - indexes: data: :label codecopy_neg_offset gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0x00 - indexes: data: :label caller gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: 0: 0xcccccccccccccccccccccccccccccccccccccccc - indexes: data: :label callvalue gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: 0: 0x10 - indexes: data: :label codesize gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001006: storage: 0: 0x05 - indexes: data: :label gasprice gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: 0: 0x1234 - indexes: data: :label origin gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001008: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b - indexes: data: :label calldatasize gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001009: storage: 0: 0x00 ================================================ FILE: tests/static/state_tests/VMTests/vmTests/randomFiller.yml ================================================ # The old VMTests has some random tests. I'm not sure they are worth preserving, but # they might be useful for some EVM developers random: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # 201503102320PYTHON : balance: '0x0ba1a9ce0ba1a9ce' code: 0x434342444244454597 nonce: '0' storage: {} # 201503110206PYTHON : balance: '0x0ba1a9ce0ba1a9ce' code: 0x4045404145454441343987ff3735043055 nonce: '0' storage: {} # 201503110219PYTHON : balance: '0x0ba1a9ce0ba1a9ce' code: 0x4040459143404144809759886d608f nonce: '0' storage: {} # 201503110346PYTHON_PUSH24 : balance: '0x0ba1a9ce0ba1a9ce' code: 0x7745414245403745f31387900a8d55 nonce: '0' storage: {} # 201503111844PYTHON : balance: '0x0ba1a9ce0ba1a9ce' code: 0x65424555 nonce: '0' storage: {} # 201503112218PYTHON : balance: '0x0ba1a9ce0ba1a9ce' code: 0x4041 nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | { (call (gas) (+ 0x1000 $4) 0 0 0 0 0) } nonce: '0' storage: {} : balance: 0x10000000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label random0 :abi f(uint) 0 - :label random1 :abi f(uint) 1 - :label random2 :abi f(uint) 2 - :label random3 :abi f(uint) 3 - :label random4 :abi f(uint) 4 - :label random5 :abi f(uint) 5 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: :label random0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 - indexes: data: :label random1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 - indexes: data: :label random2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 - indexes: data: :label random3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 - indexes: data: :label random4 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 - indexes: data: :label random5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 ================================================ FILE: tests/static/state_tests/VMTests/vmTests/sha3Filler.yml ================================================ sha3: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (sha3 0 0) } nonce: '0' storage: {} 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (sha3 4 5) } nonce: '0' storage: {} 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (sha3 10 10) } nonce: '0' storage: {} 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (sha3 1000 0xFFFFF) } nonce: '0' storage: {} 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The result here is zero, because we run out of gas [[0]] (sha3 0xfffffffff 100) } nonce: '0' storage: {} 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; The result here is zero, because we run out of gas [[0]] (sha3 10000 0xfffffffff) } nonce: '0' storage: {} 0000000000000000000000000000000000001006: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sha3 neg1 neg1) } nonce: '0' storage: {} 0000000000000000000000000000000000001007: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'neg1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[0]] (sha3 neg1 2) } nonce: '0' storage: {} 0000000000000000000000000000000000001008: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] (sha3 0x1000000 2) } nonce: '0' storage: {} # memSizeNoQuadraticCost31 0000000000000000000000000000000000001009: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 960 1) } nonce: '0' storage: {} # memSizeQuadraticCost32 000000000000000000000000000000000000100a: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 992 1) } nonce: '0' storage: {} # memSizeQuadraticCost33 000000000000000000000000000000000000100b: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 1024 1) } nonce: '0' storage: {} # memSizeQuadraticCost63 000000000000000000000000000000000000100c: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 1984 1) } nonce: '0' storage: {} # memSizeQuadraticCost64 000000000000000000000000000000000000100d: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 2016 1) } nonce: '0' storage: {} # memSizeQuadraticCost65 000000000000000000000000000000000000100e: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 2048 1) } nonce: '0' storage: {} # memSizeQuadraticCost32_zeroSize 000000000000000000000000000000000000100f: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 1024 0) } nonce: '0' storage: {} # memSizeQuadraticCost64_2 0000000000000000000000000000000000001010: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[ 0 ]] (sha3 2016 32) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call (- 0 1) (+ 0x1000 $4) 0 0x0F 0x10 ; arg offset and length to get the 0x1234...f0 value 0x20 0x40) ; return offset and length } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label sha3_nodata :abi f(uint) 0 - :label sha3_five_0s :abi f(uint) 1 - :label sha3_ten_0s :abi f(uint) 2 - :label sha3_0xFFFFF_0s :abi f(uint) 3 - :label sha3_highmem :abi f(uint) 4 - :label sha3_huge_buffer :abi f(uint) 5 # This is both sha3_bigSize and sha3_6 - :label sha3_neg1_neg1 :abi f(uint) 6 # sha3_bigOffset - :label sha3_neg1_2 :abi f(uint) 7 # sha3_bigOffset2 - :label sha3_0x1000000_2 :abi f(uint) 8 # sha3_memSizeNoQuadraticCost31 - :label sha3_960_1 :abi f(uint) 9 # sha3_memSizeQuadraticCost32 - :label sha3_992_1 :abi f(uint) 0x0a # sha3_memSizeQuadraticCost33 - :label sha3_1024_1 :abi f(uint) 0x0b # sha3_memSizeQuadraticCost63 - :label sha3_1984_1 :abi f(uint) 0x0c # The next two cases have the same cost: # sha3_memSizeQuadraticCost64 - :label sha3_2016_1 :abi f(uint) 0x0d # sha3_memSizeQuadraticCost64_2 - :label sha3_2016_32 :abi f(uint) 0x10 # sha3_memSizeQuadraticCost65 - :label sha3_2048_1 :abi f(uint) 0x0e # Different cost than 1024_1 # sha3_memSizeQuadraticCost32_zeroSize - :label sha3_1024_0 :abi f(uint) 0x0f gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label sha3_nodata gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001000: storage: 0: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 - indexes: data: :label sha3_five_0s gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001001: storage: 0: 0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec - indexes: data: :label sha3_ten_0s gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001002: storage: 0: 0x6bd2dd6bd408cbee33429358bf24fdc64612fbf8b1b4db604518f40ffd34b607 - indexes: data: :label sha3_0xFFFFF_0s gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001003: storage: 0: 0xbe6f1b42b34644f918560a07f959d23e532dea5338e4b9f63db0caeb608018fa - indexes: data: :label sha3_highmem gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001004: storage: # Because of the costs of accessing such high # memory this operation runs out of gas 0: 0 - indexes: data: :label sha3_huge_buffer gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001005: storage: # Run out of gas 0: 0 - indexes: data: :label sha3_neg1_neg1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001006: storage: # Run out of gas 0: 0 - indexes: data: :label sha3_neg1_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001007: storage: # Run out of gas 0: 0 - indexes: data: :label sha3_0x1000000_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: # Run out of gas 0000000000000000000000000000000000001008: storage: 0: 0 # These tests are to check the memory access costs, so # they include the post transaction balance - indexes: data: :label sha3_960_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001009: storage: 0: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a - indexes: data: :label sha3_992_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100a: storage: 0: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a - indexes: data: :label sha3_1024_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100b: storage: 0: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a - indexes: data: :label sha3_1984_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100c: storage: 0: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a - indexes: data: :label sha3_2016_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100d: storage: 0: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a - indexes: data: :label sha3_2048_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100e: storage: 0: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a # Different cost from sha3_1024_1 - indexes: data: :label sha3_1024_0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000100f: storage: 0: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Same cost as sha3_2016_1 - indexes: data: :label sha3_2016_32 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000001010: storage: 0: 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563 ================================================ FILE: tests/static/state_tests/VMTests/vmTests/suicideFiller.yml ================================================ suicide: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # suicide0, self balance to CALLER (the account # that called us, not the source of the transaction) 0000000000000000000000000000000000001000: balance: 0xFF000000000000 code: | { (selfdestruct (caller)) } nonce: '0' storage: {} # suicideNotExisting 0000000000000000000000000000000000001001: balance: 0x100000000000 code: | { (selfdestruct 0xdead) } nonce: '0' storage: {} # suicideEtherToMe 0000000000000000000000000000000000001002: balance: 0x100000000000 code: | { (selfdestruct (address)) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: 0x100000000000 code: | { (call (gas) $4 0 0 0 0 0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '100000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - :label caller :abi f(uint) 0x1000 - :label random :abi f(uint) 0x1001 - :label myself :abi f(uint) 0x1002 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - 0 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: :label caller gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 99999999711710 cccccccccccccccccccccccccccccccccccccccc: balance: 0xff100000000000 - indexes: data: :label random gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000dead: balance: 0x100000000000 - indexes: data: :label myself gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: balance: 0x100000000000 ================================================ FILE: tests/static/state_tests/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/README.md ================================================ This tests contain opcodes that has input arguments.But that arguments passed as output of another opcode. In this case it's Balance opcode. Each test has 2 transactions: one makes balance to return 0, another one makes balance to return 1. This is done so evmjit or other compiler would not define opcode arguments as constant, but as a variable rather. Because evmjit encountered some bugs for this kind of scenario. Pseudo code description: ``` foreach opcodes as opcode { a = 0 opcode (a,a, ...) a = 1 opcode (a,a, ...) } ``` ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/addNonConstFiller.yml ================================================ --- addNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x02' pre: : balance: '' code: '{ [[ 0 ]](ADD (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/addmodNonConstFiller.yml ================================================ --- addmodNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](ADDMOD (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/andNonConstFiller.yml ================================================ --- andNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](AND (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/balanceNonConstFiller.yml ================================================ --- balanceNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](BALANCE (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/byteNonConstFiller.yml ================================================ --- byteNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ [[ 0 ]](BYTE (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/callNonConstFiller.yml ================================================ --- callNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x01' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ [[ 0 ]] (CALL (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/callcodeNonConstFiller.yml ================================================ --- callcodeNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x01' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ [[ 0 ]] (CALLCODE (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/calldatacopyNonConstFiller.yml ================================================ --- calldatacopyNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ (CALLDATACOPY (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' - ':raw 0x11223344' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/calldataloadNonConstFiller.yml ================================================ --- calldataloadNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int 1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x1122334400000000000000000000000000000000000000000000000000000000' - indexes: data: !!int 0 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int 1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x2233440000000000000000000000000000000000000000000000000000000000' - indexes: data: !!int 0 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](CALLDATALOAD (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' - ':raw 0x11223344' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/codecopyNonConstFiller.yml ================================================ --- codecopyNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ (CODECOPY (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/createNonConstFiller.yml ================================================ --- createNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: storage: 0x: '0xd2571607e241ecf590ed94b12d87c94babe36db6' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: storage: 0x: '0xd2571607e241ecf590ed94b12d87c94babe36db6' pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '' code: '{ [[ 0 ]] (CREATE (BALANCE 0x095e7baea6a6c7c4c2dfeb977efac326af552d87) (BALANCE 0x095e7baea6a6c7c4c2dfeb977efac326af552d87) (BALANCE 0x095e7baea6a6c7c4c2dfeb977efac326af552d87)) }' nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/delegatecallNonConstFiller.yml ================================================ --- delegatecallNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x01' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ [[ 0 ]] (DELEGATECALL (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/divNonConstFiller.yml ================================================ --- divNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](DIV (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/eqNonConstFiller.yml ================================================ --- eqNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x01' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](EQ (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/expNonConstFiller.yml ================================================ --- expNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x01' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](EXP (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/extcodecopyNonConstFiller.yml ================================================ --- extcodecopyNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0' pre: : balance: '' code: '{ (EXTCODECOPY (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/extcodesizeNonConstFiller.yml ================================================ --- extcodesizeNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](EXTCODESIZE (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/gtNonConstFiller.yml ================================================ --- gtNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](GT (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/iszeroNonConstFiller.yml ================================================ --- iszeroNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x01' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](ISZERO (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/jumpNonConstFiller.yml ================================================ --- jumpNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: '0x01': '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: '0x01': '0x00' pre: : balance: '' code: '{ (JUMP (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/jumpiNonConstFiller.yml ================================================ --- jumpiNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: '0x01': '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: '0x01': '0x00' pre: : balance: '' code: '{ (JUMPI (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/log0NonConstFiller.yml ================================================ --- log0NonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (LOG0 (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/log1NonConstFiller.yml ================================================ --- log1NonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (LOG1 (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/log2NonConstFiller.yml ================================================ --- log2NonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (LOG2 (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/log3NonConstFiller.yml ================================================ --- log3NonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (LOG3 (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/ltNonConstFiller.yml ================================================ --- ltNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](LT (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/mloadNonConstFiller.yml ================================================ --- mloadNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](MLOAD (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/modNonConstFiller.yml ================================================ --- modNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](MOD (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/mstore8NonConstFiller.yml ================================================ --- mstore8NonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (MSTORE8 (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/mstoreNonConstFiller.yml ================================================ --- mstoreNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (MSTORE (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/mulNonConstFiller.yml ================================================ --- mulNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](MUL (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/mulmodNonConstFiller.yml ================================================ --- mulmodNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](MULMOD (BALANCE ) (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/notNonConstFiller.yml ================================================ --- notNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe' pre: : balance: '' code: '{ [[ 0 ]](NOT (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/orNonConstFiller.yml ================================================ --- orNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](OR (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/returnNonConstFiller.yml ================================================ --- returnNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ (RETURN (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/sdivNonConstFiller.yml ================================================ --- sdivNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](SDIV (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/sgtNonConstFiller.yml ================================================ --- sgtNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](SGT (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/sha3NonConstFiller.yml ================================================ --- sha3NonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a' pre: : balance: '' code: '{ [[ 0 ]](KECCAK256 (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/signextNonConstFiller.yml ================================================ --- signextNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x01' pre: : balance: '' code: '{ [[ 0 ]](SIGNEXTEND (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/sloadNonConstFiller.yml ================================================ --- sloadNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: '0x03': '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: '0x03': '0x00' pre: : balance: '' code: '{ [[ 3 ]] (SLOAD (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/sltNonConstFiller.yml ================================================ --- sltNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](SLT (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/smodNonConstFiller.yml ================================================ --- smodNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](SMOD (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/sstoreNonConstFiller.yml ================================================ --- sstoreNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: '0x01': '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: '0x01': '0x01' pre: : balance: '' code: '{ (SSTORE (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/subNonConstFiller.yml ================================================ --- subNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](SUB (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/suicideNonConstFiller.yml ================================================ --- suicideNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '0' nonce: '0' code: '0x73095e7baea6a6c7c4c2dfeb977efac326af552d8731ff00' storage: {} pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '' code: '{ (SELFDESTRUCT (BALANCE 0x095e7baea6a6c7c4c2dfeb977efac326af552d87)) }' nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stArgsZeroOneBalance/xorNonConstFiller.yml ================================================ --- xorNonConst: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '1000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - '>=Cancun' result: : storage: 0x: '0x00' - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - '>=Cancun' result: : storage: 0x: '0x00' pre: : balance: '' code: '{ [[ 0 ]](XOR (BALANCE ) (BALANCE )) }' nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '0' - '1' ================================================ FILE: tests/static/state_tests/stAttackTest/ContractCreationSpamFiller.json ================================================ { "ContractCreationSpam" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "Running OOG on contract creation, eating ~10M gas", "network" : [ ">=Cancun"], "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "result" : { "6a0a0fc761c612c340a0e98d33b37a75e5268472" : { "nonce" : "0x01", "storage" : { "0x00" : "0x010c20" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "0000000000000000000000000000000000000001" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000002" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000003" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000004" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000005" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000006" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000015" : { "shouldnotexist" : "1" }, "000000000000000000000000000000000000006e" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000002170" : { "shouldnotexist" : "1" } } } ], "pre" : { "6a0a0fc761c612C340a0e98d33b37a75e5268472" : { "balance" : "1000000000000000000", "code" : "0x7f6004600c60003960046000f3600035ff00000000000000000000000000000000600052602060006000f0600054805b6001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1505a616000106200002f57600055", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6a0a0fc761c612C340a0e98d33b37a75e5268472", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stAttackTest/CrashingTransactionFiller.json ================================================ { "CrashingTransaction" : { "_info" : { "comment" : "https://ropsten.etherscan.io/tx/0x8ec445380649f6c75a042a438ea9256c2fab2a6a3437904c9e5a712fcbf8a54a" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "4712388", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x0cc7" }, "0xecbf9aa676d9e0bbba7e517d1350c1b64f8c6779" : { "balance" : "0x01", "code" : "0x60606040526008565b00", "nonce" : "0x7c" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "3270", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x60606040525b5b61c3505a1115602c576040516034806039833901809050604051809103906000f0506006565b5b600a80606d6000396000f360606040525b3373ffffffffffffffffffffffffffffffffffffffff16ff5b600a80602a6000396000f360606040526008565b0060606040526008565b00" ], "gasLimit" : [ "4657786" ], "gasPrice" : "11", "nonce" : "3270", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stAttackTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stBadOpcode/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stBadOpcode/eip2315NotRemovedFiller.json ================================================ { "eip2315NotRemoved" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage": {} } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60045e005c60016000555d", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7fffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stBadOpcode/invalidAddrFiller.yml ================================================ # Check that addresses over 2^160 are truncated so only the least significant # 160 bits are meaningful invalidAddr: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: 0x10000 code: | { [0] 0xDEADBEEF (return 0 0x120) } nonce: 0 storage: {} : balance: 0x1000 code: | { (selfdestruct $0) } nonce: 0 storage: {} : balance: 0x1000 code: | { (selfdestruct $0) } nonce: 0 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Inputs (def 'opcode $4) (def 'addrBase $36) (def 'addrType $68) ; Constants (def 'NOP 0) (def 'two160 (shl 1 160)) (def 'two254 (shl 1 254)) (def 'two255 (shl 1 255)) (def 'word 0x20) ; 32 bytes per word ; Variables (def 'addr1 0x2000) (def 'res1 0x2020) (def 'addr2 0x2040) (def 'res2 0x2060) (def 'resExpected 0x2080) (def 'temp 0x20A0) ; addrBase 1 is a normal valid address () ; addrBase 2 is a precompiled address (0x00000002) (if (= addrBase 1) [addr1] NOP) (if (= addrBase 2) [addr1] 0x0002 NOP) ; addrType 0 is to just use the base (twice, verify result is consistent) ; addrType 1 is addr1 + 2^160 ; addrType 2 is addr1 + 2^254 ; addrType 3 is addr1 + 2^255 ; addrType 4 is addr1 - 2^160 (if (= addrType 0) [addr2] @addr1 NOP) (if (= addrType 1) [addr2] (+ @addr1 two160) NOP) (if (= addrType 2) [addr2] (+ @addr1 two254) NOP) (if (= addrType 3) [addr2] (+ @addr1 two255) NOP) (if (= addrType 4) [addr2] (- @addr1 two160) NOP) ; Make sure res1 and res2 store different values to verify they are overwritten [res1] 0xFF00FF00FF00FF00 [res2] 0x00FF00FF00FF00FF ; BALANCE (if (= opcode 0x31) { [res1] (balance @addr1) [res2] (balance @addr2) (if (= addrBase 1) [resExpected] 0x10000 [resExpected] 0x0) } NOP) ; EXTCODESIZE (if (= opcode 0x3b) { [res1] (extcodesize @addr1) [res2] (extcodesize @addr2) (if (= addrBase 1) [resExpected] 0x0F [resExpected] 0x0) } NOP) ; EXTCODECOPY (if (= opcode 0x3c) { (extcodecopy @addr1 res1 0 word) (extcodecopy @addr2 res2 0 word) (if (= addrBase 1) [resExpected] 0x63deadbeef6000526101206000f3000000000000000000000000000000000000 [resExpected] 0x0) } NOP) ; EXTCODHASH (if (= opcode 0x3f) { [res1] (extcodehash @addr1) [res2] (extcodehash @addr2) (if (= addrBase 1) [resExpected] 0x85ab232a015279867a1f5b5da4f9688c6c92e555c122e9147f9d13bc53c03e92 [resExpected] 0x0) } NOP) ; CALL (if (= opcode 0xf1) { (call 0x1000 @addr1 0 0x2000 0x20 res1 word) (call 0x1000 @addr2 0 0x2000 0x20 res2 word) (if (= addrBase 1) [resExpected] 0xDEADBEEF [resExpected] 0x9267d3dbed802941483f1afa2a6bc68de5f653128aca9bf1461c5d0a3ad36ed2) } NOP) ; CALLCODE (if (= opcode 0xf2) { (callcode 0x1000 @addr1 0 0x2000 0x20 res1 word) (callcode 0x1000 @addr2 0 0x2000 0x20 res2 word) (if (= addrBase 1) [resExpected] 0xDEADBEEF [resExpected] 0x9267d3dbed802941483f1afa2a6bc68de5f653128aca9bf1461c5d0a3ad36ed2) } NOP) ; DELEGATECALL (if (= opcode 0xf4) { (delegatecall 0x1000 @addr1 0x2000 0x20 res1 word) (delegatecall 0x1000 @addr2 0x2000 0x20 res2 word) (if (= addrBase 1) [resExpected] 0xDEADBEEF [resExpected] 0x9267d3dbed802941483f1afa2a6bc68de5f653128aca9bf1461c5d0a3ad36ed2) } NOP) ; STATICCALL (if (= opcode 0xfa) { (staticcall 0x1000 @addr1 0x2000 0x20 res1 word) (staticcall 0x1000 @addr2 0x2000 0x20 res2 word) (if (= addrBase 1) [resExpected] 0xDEADBEEF [resExpected] 0x9267d3dbed802941483f1afa2a6bc68de5f653128aca9bf1461c5d0a3ad36ed2) } NOP) ; SELFDESTRUCT (if (= opcode 0xff) { ; Save the current balance [temp] (balance @addr1) ; Tell 0xdead01 to commit suicide, see how much is in @addr1 (call 0x10000000 0 addr1 word 0 0) [res1] (balance @addr1) ; Tell 0xdead02 to commit suicide, see how much is in @addr1 (call 0x10000000 0 addr2 word 0 0) [res2] (balance @addr1) ; Calculate differences [res2] (- @res2 @res1) [res1] (- @res1 @temp) (if (= addrBase 1) [resExpected] 0x1000 [resExpected] 0x1000) } NOP) ; Verify res1, res2, and resExpected all contain the same value [[0]] (- @res1 @res2) [[1]] (- @res1 @resExpected) ; Kill the goat [[0x100]] 0 } nonce: '0' storage: # Sacrificial goat to tell reverts apart from successes 0x100: 0x60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Param #1: The opcode # Param #2: addrBase # 1 is a normal valid address () # 2 is a precompiled address (0x00000002) # Param #3: addrType # 0 is to just use the base (twice, verify result is consistent) # 1 is addr1 + 2^160 # 2 is addr1 + 2^254 # 3 is addr1 + 2^255 # 4 is addr1 - 2^160 # BALANCE - :label ok :abi f(uint,uint,uint) 0x31 1 0 - :label ok :abi f(uint,uint,uint) 0x31 2 0 - :label ok :abi f(uint,uint,uint) 0x31 1 1 - :label ok :abi f(uint,uint,uint) 0x31 2 1 - :label ok :abi f(uint,uint,uint) 0x31 1 2 - :label ok :abi f(uint,uint,uint) 0x31 2 2 - :label ok :abi f(uint,uint,uint) 0x31 1 3 - :label ok :abi f(uint,uint,uint) 0x31 2 3 - :label ok :abi f(uint,uint,uint) 0x31 1 4 - :label ok :abi f(uint,uint,uint) 0x31 2 4 # EXTCODESIZE (10+) - :label ok :abi f(uint,uint,uint) 0x3b 1 0 - :label ok :abi f(uint,uint,uint) 0x3b 2 0 - :label ok :abi f(uint,uint,uint) 0x3b 1 1 - :label ok :abi f(uint,uint,uint) 0x3b 2 1 - :label ok :abi f(uint,uint,uint) 0x3b 1 2 - :label ok :abi f(uint,uint,uint) 0x3b 2 2 - :label ok :abi f(uint,uint,uint) 0x3b 1 3 - :label ok :abi f(uint,uint,uint) 0x3b 2 3 - :label ok :abi f(uint,uint,uint) 0x3b 1 4 - :label ok :abi f(uint,uint,uint) 0x3b 2 4 # EXTCODECOPY (20+) - :label ok :abi f(uint,uint,uint) 0x3c 1 0 - :label ok :abi f(uint,uint,uint) 0x3c 2 0 - :label ok :abi f(uint,uint,uint) 0x3c 1 1 - :label ok :abi f(uint,uint,uint) 0x3c 2 1 - :label ok :abi f(uint,uint,uint) 0x3c 1 2 - :label ok :abi f(uint,uint,uint) 0x3c 2 2 - :label ok :abi f(uint,uint,uint) 0x3c 1 3 - :label ok :abi f(uint,uint,uint) 0x3c 2 3 - :label ok :abi f(uint,uint,uint) 0x3c 1 4 - :label ok :abi f(uint,uint,uint) 0x3c 2 4 # EXTCODEHASH (30+) - :label ok :abi f(uint,uint,uint) 0x3f 1 0 - :label ok :abi f(uint,uint,uint) 0x3f 2 0 - :label ok :abi f(uint,uint,uint) 0x3f 1 1 - :label ok :abi f(uint,uint,uint) 0x3f 2 1 - :label ok :abi f(uint,uint,uint) 0x3f 1 2 - :label ok :abi f(uint,uint,uint) 0x3f 2 2 - :label ok :abi f(uint,uint,uint) 0x3f 1 3 - :label ok :abi f(uint,uint,uint) 0x3f 2 3 - :label ok :abi f(uint,uint,uint) 0x3f 1 4 - :label ok :abi f(uint,uint,uint) 0x3f 2 4 # CALL (40+) - :label ok :abi f(uint,uint,uint) 0xf1 1 0 - :label ok :abi f(uint,uint,uint) 0xf1 2 0 - :label ok :abi f(uint,uint,uint) 0xf1 1 1 - :label ok :abi f(uint,uint,uint) 0xf1 2 1 - :label ok :abi f(uint,uint,uint) 0xf1 1 2 - :label ok :abi f(uint,uint,uint) 0xf1 2 2 - :label ok :abi f(uint,uint,uint) 0xf1 1 3 - :label ok :abi f(uint,uint,uint) 0xf1 2 3 - :label ok :abi f(uint,uint,uint) 0xf1 1 4 - :label ok :abi f(uint,uint,uint) 0xf1 2 4 # CALLCODE (50+) - :label ok :abi f(uint,uint,uint) 0xf2 1 0 - :label ok :abi f(uint,uint,uint) 0xf2 2 0 - :label ok :abi f(uint,uint,uint) 0xf2 1 1 - :label ok :abi f(uint,uint,uint) 0xf2 2 1 - :label ok :abi f(uint,uint,uint) 0xf2 1 2 - :label ok :abi f(uint,uint,uint) 0xf2 2 2 - :label ok :abi f(uint,uint,uint) 0xf2 1 3 - :label ok :abi f(uint,uint,uint) 0xf2 2 3 - :label ok :abi f(uint,uint,uint) 0xf2 1 4 - :label ok :abi f(uint,uint,uint) 0xf2 2 4 # DELEGATECALL (60+) - :label ok :abi f(uint,uint,uint) 0xf4 1 0 - :label ok :abi f(uint,uint,uint) 0xf4 2 0 - :label ok :abi f(uint,uint,uint) 0xf4 1 1 - :label ok :abi f(uint,uint,uint) 0xf4 2 1 - :label ok :abi f(uint,uint,uint) 0xf4 1 2 - :label ok :abi f(uint,uint,uint) 0xf4 2 2 - :label ok :abi f(uint,uint,uint) 0xf4 1 3 - :label ok :abi f(uint,uint,uint) 0xf4 2 3 - :label ok :abi f(uint,uint,uint) 0xf4 1 4 - :label ok :abi f(uint,uint,uint) 0xf4 2 4 # STATICCALL (70+) - :label ok :abi f(uint,uint,uint) 0xfa 1 0 - :label ok :abi f(uint,uint,uint) 0xfa 2 0 - :label ok :abi f(uint,uint,uint) 0xfa 1 1 - :label ok :abi f(uint,uint,uint) 0xfa 2 1 - :label ok :abi f(uint,uint,uint) 0xfa 1 2 - :label ok :abi f(uint,uint,uint) 0xfa 2 2 - :label ok :abi f(uint,uint,uint) 0xfa 1 3 - :label ok :abi f(uint,uint,uint) 0xfa 2 3 - :label ok :abi f(uint,uint,uint) 0xfa 1 4 - :label ok :abi f(uint,uint,uint) 0xfa 2 4 # SELFDESTRUCT (80+) # Address type 2 is meaningless, we need to call a suicidal contract - :label ok :abi f(uint,uint,uint) 0xff 1 0 - :label ok :abi f(uint,uint,uint) 0xff 1 1 - :label ok :abi f(uint,uint,uint) 0xff 1 2 - :label ok :abi f(uint,uint,uint) 0xff 1 3 - :label ok :abi f(uint,uint,uint) 0xff 1 4 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: # No revert, valid value - indexes: data: :label ok gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # Difference between the two values 0x00: 0 0x01: 0 0x02: 0 0x03: 0 0x04: 0 0x05: 0 0x06: 0 # Dead goat 0x100: 0 ================================================ FILE: tests/static/state_tests/stBadOpcode/measureGasFiller.yml ================================================ # Measure the exact gas cost of various operations measureGas: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # The operations to run with different amounts of gas # CREATE 0000000000000000000000000000000000C0DEF0: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(create(0, 0, 0x200)) } nonce: 1 storage: {} # CREATE2 0000000000000000000000000000000000C0DEF5: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // SALT needs to be different each time pop(create2(0, 0, 0x200, add(0x5A17, gas()))) } nonce: 1 storage: {} # Contract to be called. It can't be an empty contract because # then the first successful call adds it and therefore costs # a lot more 000000000000000000000000000000000000CA11: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { stop() } nonce: 1 storage: {} # CALL 0000000000000000000000000000000000C0DEF1: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := call(gas(), 0xCA11, 0, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # CALLCODE 0000000000000000000000000000000000C0DEF2: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := callcode(gas(), 0xCA11, 0, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # DELEGATECALL 0000000000000000000000000000000000C0DEF4: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := delegatecall(gas(), 0xCA11, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # STATICCALL 0000000000000000000000000000000000C0DEFA: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := staticcall(gas(), 0xCA11, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # Memory access that expands the allocated memory 0000000000000000000000000000000000C0DE51: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let useless := mload(0xB000) } nonce: 1 storage: {} 0000000000000000000000000000000000C0DE52: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0xB000, 0xFF) } nonce: 1 storage: {} 0000000000000000000000000000000000C0DE53: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore8(0xB000, 0xFF) } nonce: 1 storage: {} 0000000000000000000000000000000000C0DE20: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let useless := keccak256(0,0xBEEF) } nonce: 1 storage: {} # Access to external code 0000000000000000000000000000000000C0DE3B: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let addr := 0xCA11 extcodecopy(addr, 0, 0, extcodesize(addr)) } nonce: 1 storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Find the operation's cost in gas let min := 0 let max := 60000 let addr := add(0xC0DE00, calldataload(0x04)) for { } gt(sub(max,min), 1) { } { // Until we get the exact figure let middle := div(add(min,max),2) let result := call(middle, addr, 0, 0, 0, 0, 0) if eq(result, 0) { min := middle } if eq(result, 1) { max := middle } } sstore(0, max) } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: - :label CREATE :abi f(uint) 0xF0 - :label CREATE2 :abi f(uint) 0xF5 - :label CALL :abi f(uint) 0xF1 - :label CALLCODE :abi f(uint) 0xF2 - :label DELEGATECALL :abi f(uint) 0xF4 - :label STATICCALL :abi f(uint) 0xFA # Memory access that extends the allocated memory has multiple places to # run out of gas - :label MLOAD :abi f(uint) 0x51 - :label MSTORE :abi f(uint) 0x52 - :label MSTORE8 :abi f(uint) 0x53 - :label SHA3 :abi f(uint) 0x20 # Load and read external code - :label EXTCODE :abi f(uint) 0x3B gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc # to: 0000000000000000000000000000000000C0DEF5 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: # CREATE # Starting the Shanghai the cost of a CREATE[2] transaction # includes a cost of 2 gas per initcode word (32 byte chunk) - indexes: data: - :label CREATE network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 32089 # CREATE2 - indexes: data: - :label CREATE2 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 32193 - indexes: data: - :label CALL - :label CALLCODE network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 144 # Slightly cheaper because there's one less PUSH (one less parameter) - indexes: data: - :label DELEGATECALL - :label STATICCALL network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 141 - indexes: data: - :label MLOAD network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 8110 - indexes: data: - :label MSTORE - :label MSTORE8 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 8113 - indexes: data: - :label EXTCODE network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 221 - indexes: data: :label SHA3 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 18348 ================================================ FILE: tests/static/state_tests/stBadOpcode/operationDiffGasFiller.yml ================================================ # Run the same operations with different amounts of gas until it is successful # This lets it run out of gas in different points of the opcode, as requested # in https://github.com/ethereum/tests/issues/909 operationDiffGas: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # The operations to run with different amounts of gas # CREATE 0000000000000000000000000000000000C0DEF0: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { sstore(0,create(0, 0, 0x200)) } nonce: 1 storage: {} # CREATE2 0000000000000000000000000000000000C0DEF5: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { sstore(0,create2(0, 0, 0x200, 0x5A17)) } nonce: 1 storage: {} # CALL 0000000000000000000000000000000000C0DEF1: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := call(gas(), 0xCA11, 0, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # CALLCODE 0000000000000000000000000000000000C0DEF2: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := callcode(gas(), 0xCA11, 0, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # DELEGATECALL 0000000000000000000000000000000000C0DEF4: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := delegatecall(gas(), 0xCA11, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # STATICCALL 0000000000000000000000000000000000C0DEFA: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let retval := staticcall(gas(), 0xCA11, 0, 0x100, 0, 0x100) } nonce: 1 storage: {} # Contract to the called 000000000000000000000000000000000000CA11: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0, 0xDEADBEEF) return(0, 0x100) } nonce: 1 storage: {} # Memory access that expands the allocated memory 0000000000000000000000000000000000C0DE51: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let useless := mload(0xBEEF) } nonce: 1 storage: {} 0000000000000000000000000000000000C0DE52: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0xBEEF, 0xFF) } nonce: 1 storage: {} 0000000000000000000000000000000000C0DE53: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore8(0xBEEF, 0xFF) } nonce: 1 storage: {} 0000000000000000000000000000000000C0DE20: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let useless := keccak256(0,0xBEEF) } nonce: 1 storage: {} # Access to external code 0000000000000000000000000000000000C0DE3B: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let addr := 0xCA11 extcodecopy(addr, 0, 0, extcodesize(addr)) } nonce: 1 storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Run the operation with gasAmt, gasAmt+gasDiff, gasAmt+2*gasDiff, etc. let gasAmt := calldataload(0x24) let gasDiff := calldataload(0x44) let addr := add(0xC0DE00, calldataload(0x04)) let result := 0 for { } eq(result, 0) { } { // Until the operation is successful result := call(gasAmt, addr, 0, 0, 0, 0, 0) gasAmt := add(gasAmt, gasDiff) } sstore(0, sub(gasAmt, gasDiff)) } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: - :label CREATE :abi f(uint,uint,uint) 0xF0 0 100 - :label CREATE2 :abi f(uint,uint,uint) 0xF5 0 100 - :label CALL :abi f(uint,uint,uint) 0xF1 0 100 - :label CALLCODE :abi f(uint,uint,uint) 0xF2 0 100 - :label DELEGATECALL :abi f(uint,uint,uint) 0xF4 0 100 - :label STATICCALL :abi f(uint,uint,uint) 0xFA 0 100 # Memory access that extends the allocated memory has multiple places to # run out of gas - :label MLOAD :abi f(uint,uint,uint) 0x51 0 100 - :label MSTORE :abi f(uint,uint,uint) 0x52 0 100 - :label MSTORE8 :abi f(uint,uint,uint) 0x53 0 100 - :label SHA3 :abi f(uint,uint,uint) 0x20 0 100 # Load and read external code - :label EXTCODE :abi f(uint,uint,uint) 0x3B 0 100 gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: # CREATE - indexes: data: :label CREATE gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 54200 # CREATE2 - indexes: data: :label CREATE2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 54300 - indexes: data: - :label CALL - :label CALLCODE - :label DELEGATECALL - :label STATICCALL gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 2700 - indexes: data: - :label MLOAD - :label MSTORE - :label MSTORE8 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 9200 - indexes: data: - :label EXTCODE gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 2800 - indexes: data: :label SHA3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 18400 ================================================ FILE: tests/static/state_tests/stBadOpcode/undefinedOpcodeFirstByteFiller.yml ================================================ # Checks that behaviour of already deployed code, having invalid opcodes as the first byte. # Execution is expected to end with an exception. undefinedOpcodeFirstByte: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { for { let opcode := 0 } lt(opcode, 256) { opcode := add(opcode, 1) } { let addr := shl(152, opcode) if call(10000, addr, 0, 0, 0, 0, 0) { sstore(opcode, 1) } } sstore(256, 1) } nonce: 0 storage: {} 0000000000000000000000000000000000000000: balance: 0 code: ':raw 0x00' nonce: 0 storage: {} 0100000000000000000000000000000000000000: balance: 0 code: ':raw 0x01' nonce: 0 storage: {} 0200000000000000000000000000000000000000: balance: 0 code: ':raw 0x02' nonce: 0 storage: {} 0300000000000000000000000000000000000000: balance: 0 code: ':raw 0x03' nonce: 0 storage: {} 0400000000000000000000000000000000000000: balance: 0 code: ':raw 0x04' nonce: 0 storage: {} 0500000000000000000000000000000000000000: balance: 0 code: ':raw 0x05' nonce: 0 storage: {} 0600000000000000000000000000000000000000: balance: 0 code: ':raw 0x06' nonce: 0 storage: {} 0700000000000000000000000000000000000000: balance: 0 code: ':raw 0x07' nonce: 0 storage: {} 0800000000000000000000000000000000000000: balance: 0 code: ':raw 0x08' nonce: 0 storage: {} 0900000000000000000000000000000000000000: balance: 0 code: ':raw 0x09' nonce: 0 storage: {} 0a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x0a' nonce: 0 storage: {} 0b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x0b' nonce: 0 storage: {} 0c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x0c' nonce: 0 storage: {} 0d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x0d' nonce: 0 storage: {} 0e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x0e' nonce: 0 storage: {} 0f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x0f' nonce: 0 storage: {} 1000000000000000000000000000000000000000: balance: 0 code: ':raw 0x10' nonce: 0 storage: {} 1100000000000000000000000000000000000000: balance: 0 code: ':raw 0x11' nonce: 0 storage: {} 1200000000000000000000000000000000000000: balance: 0 code: ':raw 0x12' nonce: 0 storage: {} 1300000000000000000000000000000000000000: balance: 0 code: ':raw 0x13' nonce: 0 storage: {} 1400000000000000000000000000000000000000: balance: 0 code: ':raw 0x14' nonce: 0 storage: {} 1500000000000000000000000000000000000000: balance: 0 code: ':raw 0x15' nonce: 0 storage: {} 1600000000000000000000000000000000000000: balance: 0 code: ':raw 0x16' nonce: 0 storage: {} 1700000000000000000000000000000000000000: balance: 0 code: ':raw 0x17' nonce: 0 storage: {} 1800000000000000000000000000000000000000: balance: 0 code: ':raw 0x18' nonce: 0 storage: {} 1900000000000000000000000000000000000000: balance: 0 code: ':raw 0x19' nonce: 0 storage: {} 1a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x1a' nonce: 0 storage: {} 1b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x1b' nonce: 0 storage: {} 1c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x1c' nonce: 0 storage: {} 1d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x1d' nonce: 0 storage: {} 1e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x1e' nonce: 0 storage: {} 1f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x1f' nonce: 0 storage: {} 2000000000000000000000000000000000000000: balance: 0 code: ':raw 0x20' nonce: 0 storage: {} 2100000000000000000000000000000000000000: balance: 0 code: ':raw 0x21' nonce: 0 storage: {} 2200000000000000000000000000000000000000: balance: 0 code: ':raw 0x22' nonce: 0 storage: {} 2300000000000000000000000000000000000000: balance: 0 code: ':raw 0x23' nonce: 0 storage: {} 2400000000000000000000000000000000000000: balance: 0 code: ':raw 0x24' nonce: 0 storage: {} 2500000000000000000000000000000000000000: balance: 0 code: ':raw 0x25' nonce: 0 storage: {} 2600000000000000000000000000000000000000: balance: 0 code: ':raw 0x26' nonce: 0 storage: {} 2700000000000000000000000000000000000000: balance: 0 code: ':raw 0x27' nonce: 0 storage: {} 2800000000000000000000000000000000000000: balance: 0 code: ':raw 0x28' nonce: 0 storage: {} 2900000000000000000000000000000000000000: balance: 0 code: ':raw 0x29' nonce: 0 storage: {} 2a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x2a' nonce: 0 storage: {} 2b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x2b' nonce: 0 storage: {} 2c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x2c' nonce: 0 storage: {} 2d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x2d' nonce: 0 storage: {} 2e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x2e' nonce: 0 storage: {} 2f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x2f' nonce: 0 storage: {} 3000000000000000000000000000000000000000: balance: 0 code: ':raw 0x30' nonce: 0 storage: {} 3100000000000000000000000000000000000000: balance: 0 code: ':raw 0x31' nonce: 0 storage: {} 3200000000000000000000000000000000000000: balance: 0 code: ':raw 0x32' nonce: 0 storage: {} 3300000000000000000000000000000000000000: balance: 0 code: ':raw 0x33' nonce: 0 storage: {} 3400000000000000000000000000000000000000: balance: 0 code: ':raw 0x34' nonce: 0 storage: {} 3500000000000000000000000000000000000000: balance: 0 code: ':raw 0x35' nonce: 0 storage: {} 3600000000000000000000000000000000000000: balance: 0 code: ':raw 0x36' nonce: 0 storage: {} 3700000000000000000000000000000000000000: balance: 0 code: ':raw 0x37' nonce: 0 storage: {} 3800000000000000000000000000000000000000: balance: 0 code: ':raw 0x38' nonce: 0 storage: {} 3900000000000000000000000000000000000000: balance: 0 code: ':raw 0x39' nonce: 0 storage: {} 3a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x3a' nonce: 0 storage: {} 3b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x3b' nonce: 0 storage: {} 3c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x3c' nonce: 0 storage: {} 3d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x3d' nonce: 0 storage: {} 3e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x3e' nonce: 0 storage: {} 3f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x3f' nonce: 0 storage: {} 4000000000000000000000000000000000000000: balance: 0 code: ':raw 0x40' nonce: 0 storage: {} 4100000000000000000000000000000000000000: balance: 0 code: ':raw 0x41' nonce: 0 storage: {} 4200000000000000000000000000000000000000: balance: 0 code: ':raw 0x42' nonce: 0 storage: {} 4300000000000000000000000000000000000000: balance: 0 code: ':raw 0x43' nonce: 0 storage: {} 4400000000000000000000000000000000000000: balance: 0 code: ':raw 0x44' nonce: 0 storage: {} 4500000000000000000000000000000000000000: balance: 0 code: ':raw 0x45' nonce: 0 storage: {} 4600000000000000000000000000000000000000: balance: 0 code: ':raw 0x46' nonce: 0 storage: {} 4700000000000000000000000000000000000000: balance: 0 code: ':raw 0x47' nonce: 0 storage: {} 4800000000000000000000000000000000000000: balance: 0 code: ':raw 0x48' nonce: 0 storage: {} 4900000000000000000000000000000000000000: balance: 0 code: ':raw 0x49' nonce: 0 storage: {} 4a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x4a' nonce: 0 storage: {} 4b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x4b' nonce: 0 storage: {} 4c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x4c' nonce: 0 storage: {} 4d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x4d' nonce: 0 storage: {} 4e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x4e' nonce: 0 storage: {} 4f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x4f' nonce: 0 storage: {} 5000000000000000000000000000000000000000: balance: 0 code: ':raw 0x50' nonce: 0 storage: {} 5100000000000000000000000000000000000000: balance: 0 code: ':raw 0x51' nonce: 0 storage: {} 5200000000000000000000000000000000000000: balance: 0 code: ':raw 0x52' nonce: 0 storage: {} 5300000000000000000000000000000000000000: balance: 0 code: ':raw 0x53' nonce: 0 storage: {} 5400000000000000000000000000000000000000: balance: 0 code: ':raw 0x54' nonce: 0 storage: {} 5500000000000000000000000000000000000000: balance: 0 code: ':raw 0x55' nonce: 0 storage: {} 5600000000000000000000000000000000000000: balance: 0 code: ':raw 0x56' nonce: 0 storage: {} 5700000000000000000000000000000000000000: balance: 0 code: ':raw 0x57' nonce: 0 storage: {} 5800000000000000000000000000000000000000: balance: 0 code: ':raw 0x58' nonce: 0 storage: {} 5900000000000000000000000000000000000000: balance: 0 code: ':raw 0x59' nonce: 0 storage: {} 5a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x5a' nonce: 0 storage: {} 5b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x5b' nonce: 0 storage: {} 5c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x5c' nonce: 0 storage: {} 5d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x5d' nonce: 0 storage: {} 5e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x5e' nonce: 0 storage: {} 5f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x5f' nonce: 0 storage: {} 6000000000000000000000000000000000000000: balance: 0 code: ':raw 0x60' nonce: 0 storage: {} 6100000000000000000000000000000000000000: balance: 0 code: ':raw 0x61' nonce: 0 storage: {} 6200000000000000000000000000000000000000: balance: 0 code: ':raw 0x62' nonce: 0 storage: {} 6300000000000000000000000000000000000000: balance: 0 code: ':raw 0x63' nonce: 0 storage: {} 6400000000000000000000000000000000000000: balance: 0 code: ':raw 0x64' nonce: 0 storage: {} 6500000000000000000000000000000000000000: balance: 0 code: ':raw 0x65' nonce: 0 storage: {} 6600000000000000000000000000000000000000: balance: 0 code: ':raw 0x66' nonce: 0 storage: {} 6700000000000000000000000000000000000000: balance: 0 code: ':raw 0x67' nonce: 0 storage: {} 6800000000000000000000000000000000000000: balance: 0 code: ':raw 0x68' nonce: 0 storage: {} 6900000000000000000000000000000000000000: balance: 0 code: ':raw 0x69' nonce: 0 storage: {} 6a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x6a' nonce: 0 storage: {} 6b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x6b' nonce: 0 storage: {} 6c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x6c' nonce: 0 storage: {} 6d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x6d' nonce: 0 storage: {} 6e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x6e' nonce: 0 storage: {} 6f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x6f' nonce: 0 storage: {} 7000000000000000000000000000000000000000: balance: 0 code: ':raw 0x70' nonce: 0 storage: {} 7100000000000000000000000000000000000000: balance: 0 code: ':raw 0x71' nonce: 0 storage: {} 7200000000000000000000000000000000000000: balance: 0 code: ':raw 0x72' nonce: 0 storage: {} 7300000000000000000000000000000000000000: balance: 0 code: ':raw 0x73' nonce: 0 storage: {} 7400000000000000000000000000000000000000: balance: 0 code: ':raw 0x74' nonce: 0 storage: {} 7500000000000000000000000000000000000000: balance: 0 code: ':raw 0x75' nonce: 0 storage: {} 7600000000000000000000000000000000000000: balance: 0 code: ':raw 0x76' nonce: 0 storage: {} 7700000000000000000000000000000000000000: balance: 0 code: ':raw 0x77' nonce: 0 storage: {} 7800000000000000000000000000000000000000: balance: 0 code: ':raw 0x78' nonce: 0 storage: {} 7900000000000000000000000000000000000000: balance: 0 code: ':raw 0x79' nonce: 0 storage: {} 7a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x7a' nonce: 0 storage: {} 7b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x7b' nonce: 0 storage: {} 7c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x7c' nonce: 0 storage: {} 7d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x7d' nonce: 0 storage: {} 7e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x7e' nonce: 0 storage: {} 7f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x7f' nonce: 0 storage: {} 8000000000000000000000000000000000000000: balance: 0 code: ':raw 0x80' nonce: 0 storage: {} 8100000000000000000000000000000000000000: balance: 0 code: ':raw 0x81' nonce: 0 storage: {} 8200000000000000000000000000000000000000: balance: 0 code: ':raw 0x82' nonce: 0 storage: {} 8300000000000000000000000000000000000000: balance: 0 code: ':raw 0x83' nonce: 0 storage: {} 8400000000000000000000000000000000000000: balance: 0 code: ':raw 0x84' nonce: 0 storage: {} 8500000000000000000000000000000000000000: balance: 0 code: ':raw 0x85' nonce: 0 storage: {} 8600000000000000000000000000000000000000: balance: 0 code: ':raw 0x86' nonce: 0 storage: {} 8700000000000000000000000000000000000000: balance: 0 code: ':raw 0x87' nonce: 0 storage: {} 8800000000000000000000000000000000000000: balance: 0 code: ':raw 0x88' nonce: 0 storage: {} 8900000000000000000000000000000000000000: balance: 0 code: ':raw 0x89' nonce: 0 storage: {} 8a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x8a' nonce: 0 storage: {} 8b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x8b' nonce: 0 storage: {} 8c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x8c' nonce: 0 storage: {} 8d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x8d' nonce: 0 storage: {} 8e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x8e' nonce: 0 storage: {} 8f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x8f' nonce: 0 storage: {} 9000000000000000000000000000000000000000: balance: 0 code: ':raw 0x90' nonce: 0 storage: {} 9100000000000000000000000000000000000000: balance: 0 code: ':raw 0x91' nonce: 0 storage: {} 9200000000000000000000000000000000000000: balance: 0 code: ':raw 0x92' nonce: 0 storage: {} 9300000000000000000000000000000000000000: balance: 0 code: ':raw 0x93' nonce: 0 storage: {} 9400000000000000000000000000000000000000: balance: 0 code: ':raw 0x94' nonce: 0 storage: {} 9500000000000000000000000000000000000000: balance: 0 code: ':raw 0x95' nonce: 0 storage: {} 9600000000000000000000000000000000000000: balance: 0 code: ':raw 0x96' nonce: 0 storage: {} 9700000000000000000000000000000000000000: balance: 0 code: ':raw 0x97' nonce: 0 storage: {} 9800000000000000000000000000000000000000: balance: 0 code: ':raw 0x98' nonce: 0 storage: {} 9900000000000000000000000000000000000000: balance: 0 code: ':raw 0x99' nonce: 0 storage: {} 9a00000000000000000000000000000000000000: balance: 0 code: ':raw 0x9a' nonce: 0 storage: {} 9b00000000000000000000000000000000000000: balance: 0 code: ':raw 0x9b' nonce: 0 storage: {} 9c00000000000000000000000000000000000000: balance: 0 code: ':raw 0x9c' nonce: 0 storage: {} 9d00000000000000000000000000000000000000: balance: 0 code: ':raw 0x9d' nonce: 0 storage: {} 9e00000000000000000000000000000000000000: balance: 0 code: ':raw 0x9e' nonce: 0 storage: {} 9f00000000000000000000000000000000000000: balance: 0 code: ':raw 0x9f' nonce: 0 storage: {} a000000000000000000000000000000000000000: balance: 0 code: ':raw 0xa0' nonce: 0 storage: {} a100000000000000000000000000000000000000: balance: 0 code: ':raw 0xa1' nonce: 0 storage: {} a200000000000000000000000000000000000000: balance: 0 code: ':raw 0xa2' nonce: 0 storage: {} a300000000000000000000000000000000000000: balance: 0 code: ':raw 0xa3' nonce: 0 storage: {} a400000000000000000000000000000000000000: balance: 0 code: ':raw 0xa4' nonce: 0 storage: {} a500000000000000000000000000000000000000: balance: 0 code: ':raw 0xa5' nonce: 0 storage: {} a600000000000000000000000000000000000000: balance: 0 code: ':raw 0xa6' nonce: 0 storage: {} a700000000000000000000000000000000000000: balance: 0 code: ':raw 0xa7' nonce: 0 storage: {} a800000000000000000000000000000000000000: balance: 0 code: ':raw 0xa8' nonce: 0 storage: {} a900000000000000000000000000000000000000: balance: 0 code: ':raw 0xa9' nonce: 0 storage: {} aa00000000000000000000000000000000000000: balance: 0 code: ':raw 0xaa' nonce: 0 storage: {} ab00000000000000000000000000000000000000: balance: 0 code: ':raw 0xab' nonce: 0 storage: {} ac00000000000000000000000000000000000000: balance: 0 code: ':raw 0xac' nonce: 0 storage: {} ad00000000000000000000000000000000000000: balance: 0 code: ':raw 0xad' nonce: 0 storage: {} ae00000000000000000000000000000000000000: balance: 0 code: ':raw 0xae' nonce: 0 storage: {} af00000000000000000000000000000000000000: balance: 0 code: ':raw 0xaf' nonce: 0 storage: {} b000000000000000000000000000000000000000: balance: 0 code: ':raw 0xb0' nonce: 0 storage: {} b100000000000000000000000000000000000000: balance: 0 code: ':raw 0xb1' nonce: 0 storage: {} b200000000000000000000000000000000000000: balance: 0 code: ':raw 0xb2' nonce: 0 storage: {} b300000000000000000000000000000000000000: balance: 0 code: ':raw 0xb3' nonce: 0 storage: {} b400000000000000000000000000000000000000: balance: 0 code: ':raw 0xb4' nonce: 0 storage: {} b500000000000000000000000000000000000000: balance: 0 code: ':raw 0xb5' nonce: 0 storage: {} b600000000000000000000000000000000000000: balance: 0 code: ':raw 0xb6' nonce: 0 storage: {} b700000000000000000000000000000000000000: balance: 0 code: ':raw 0xb7' nonce: 0 storage: {} b800000000000000000000000000000000000000: balance: 0 code: ':raw 0xb8' nonce: 0 storage: {} b900000000000000000000000000000000000000: balance: 0 code: ':raw 0xb9' nonce: 0 storage: {} ba00000000000000000000000000000000000000: balance: 0 code: ':raw 0xba' nonce: 0 storage: {} bb00000000000000000000000000000000000000: balance: 0 code: ':raw 0xbb' nonce: 0 storage: {} bc00000000000000000000000000000000000000: balance: 0 code: ':raw 0xbc' nonce: 0 storage: {} bd00000000000000000000000000000000000000: balance: 0 code: ':raw 0xbd' nonce: 0 storage: {} be00000000000000000000000000000000000000: balance: 0 code: ':raw 0xbe' nonce: 0 storage: {} bf00000000000000000000000000000000000000: balance: 0 code: ':raw 0xbf' nonce: 0 storage: {} c000000000000000000000000000000000000000: balance: 0 code: ':raw 0xc0' nonce: 0 storage: {} c100000000000000000000000000000000000000: balance: 0 code: ':raw 0xc1' nonce: 0 storage: {} c200000000000000000000000000000000000000: balance: 0 code: ':raw 0xc2' nonce: 0 storage: {} c300000000000000000000000000000000000000: balance: 0 code: ':raw 0xc3' nonce: 0 storage: {} c400000000000000000000000000000000000000: balance: 0 code: ':raw 0xc4' nonce: 0 storage: {} c500000000000000000000000000000000000000: balance: 0 code: ':raw 0xc5' nonce: 0 storage: {} c600000000000000000000000000000000000000: balance: 0 code: ':raw 0xc6' nonce: 0 storage: {} c700000000000000000000000000000000000000: balance: 0 code: ':raw 0xc7' nonce: 0 storage: {} c800000000000000000000000000000000000000: balance: 0 code: ':raw 0xc8' nonce: 0 storage: {} c900000000000000000000000000000000000000: balance: 0 code: ':raw 0xc9' nonce: 0 storage: {} ca00000000000000000000000000000000000000: balance: 0 code: ':raw 0xca' nonce: 0 storage: {} cb00000000000000000000000000000000000000: balance: 0 code: ':raw 0xcb' nonce: 0 storage: {} cc00000000000000000000000000000000000000: balance: 0 code: ':raw 0xcc' nonce: 0 storage: {} cd00000000000000000000000000000000000000: balance: 0 code: ':raw 0xcd' nonce: 0 storage: {} ce00000000000000000000000000000000000000: balance: 0 code: ':raw 0xce' nonce: 0 storage: {} cf00000000000000000000000000000000000000: balance: 0 code: ':raw 0xcf' nonce: 0 storage: {} d000000000000000000000000000000000000000: balance: 0 code: ':raw 0xd0' nonce: 0 storage: {} d100000000000000000000000000000000000000: balance: 0 code: ':raw 0xd1' nonce: 0 storage: {} d200000000000000000000000000000000000000: balance: 0 code: ':raw 0xd2' nonce: 0 storage: {} d300000000000000000000000000000000000000: balance: 0 code: ':raw 0xd3' nonce: 0 storage: {} d400000000000000000000000000000000000000: balance: 0 code: ':raw 0xd4' nonce: 0 storage: {} d500000000000000000000000000000000000000: balance: 0 code: ':raw 0xd5' nonce: 0 storage: {} d600000000000000000000000000000000000000: balance: 0 code: ':raw 0xd6' nonce: 0 storage: {} d700000000000000000000000000000000000000: balance: 0 code: ':raw 0xd7' nonce: 0 storage: {} d800000000000000000000000000000000000000: balance: 0 code: ':raw 0xd8' nonce: 0 storage: {} d900000000000000000000000000000000000000: balance: 0 code: ':raw 0xd9' nonce: 0 storage: {} da00000000000000000000000000000000000000: balance: 0 code: ':raw 0xda' nonce: 0 storage: {} db00000000000000000000000000000000000000: balance: 0 code: ':raw 0xdb' nonce: 0 storage: {} dc00000000000000000000000000000000000000: balance: 0 code: ':raw 0xdc' nonce: 0 storage: {} dd00000000000000000000000000000000000000: balance: 0 code: ':raw 0xdd' nonce: 0 storage: {} de00000000000000000000000000000000000000: balance: 0 code: ':raw 0xde' nonce: 0 storage: {} df00000000000000000000000000000000000000: balance: 0 code: ':raw 0xdf' nonce: 0 storage: {} e000000000000000000000000000000000000000: balance: 0 code: ':raw 0xe0' nonce: 0 storage: {} e100000000000000000000000000000000000000: balance: 0 code: ':raw 0xe1' nonce: 0 storage: {} e200000000000000000000000000000000000000: balance: 0 code: ':raw 0xe2' nonce: 0 storage: {} e300000000000000000000000000000000000000: balance: 0 code: ':raw 0xe3' nonce: 0 storage: {} e400000000000000000000000000000000000000: balance: 0 code: ':raw 0xe4' nonce: 0 storage: {} e500000000000000000000000000000000000000: balance: 0 code: ':raw 0xe5' nonce: 0 storage: {} e600000000000000000000000000000000000000: balance: 0 code: ':raw 0xe6' nonce: 0 storage: {} e700000000000000000000000000000000000000: balance: 0 code: ':raw 0xe7' nonce: 0 storage: {} e800000000000000000000000000000000000000: balance: 0 code: ':raw 0xe8' nonce: 0 storage: {} e900000000000000000000000000000000000000: balance: 0 code: ':raw 0xe9' nonce: 0 storage: {} ea00000000000000000000000000000000000000: balance: 0 code: ':raw 0xea' nonce: 0 storage: {} eb00000000000000000000000000000000000000: balance: 0 code: ':raw 0xeb' nonce: 0 storage: {} ec00000000000000000000000000000000000000: balance: 0 code: ':raw 0xec' nonce: 0 storage: {} ed00000000000000000000000000000000000000: balance: 0 code: ':raw 0xed' nonce: 0 storage: {} ee00000000000000000000000000000000000000: balance: 0 code: ':raw 0xee' nonce: 0 storage: {} ef00000000000000000000000000000000000000: balance: 0 code: ':raw 0xef' nonce: 0 storage: {} f000000000000000000000000000000000000000: balance: 0 code: ':raw 0xf0' nonce: 0 storage: {} f100000000000000000000000000000000000000: balance: 0 code: ':raw 0xf1' nonce: 0 storage: {} f200000000000000000000000000000000000000: balance: 0 code: ':raw 0xf2' nonce: 0 storage: {} f300000000000000000000000000000000000000: balance: 0 code: ':raw 0xf3' nonce: 0 storage: {} f400000000000000000000000000000000000000: balance: 0 code: ':raw 0xf4' nonce: 0 storage: {} f500000000000000000000000000000000000000: balance: 0 code: ':raw 0xf5' nonce: 0 storage: {} f600000000000000000000000000000000000000: balance: 0 code: ':raw 0xf6' nonce: 0 storage: {} f700000000000000000000000000000000000000: balance: 0 code: ':raw 0xf7' nonce: 0 storage: {} f800000000000000000000000000000000000000: balance: 0 code: ':raw 0xf8' nonce: 0 storage: {} f900000000000000000000000000000000000000: balance: 0 code: ':raw 0xf9' nonce: 0 storage: {} fa00000000000000000000000000000000000000: balance: 0 code: ':raw 0xfa' nonce: 0 storage: {} fb00000000000000000000000000000000000000: balance: 0 code: ':raw 0xfb' nonce: 0 storage: {} fc00000000000000000000000000000000000000: balance: 0 code: ':raw 0xfc' nonce: 0 storage: {} fd00000000000000000000000000000000000000: balance: 0 code: ':raw 0xfd' nonce: 0 storage: {} fe00000000000000000000000000000000000000: balance: 0 code: ':raw 0xfe' nonce: 0 storage: {} ff00000000000000000000000000000000000000: balance: 0 code: ':raw 0xff' nonce: 0 storage: {} transaction: data: - '' gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0x00': 1 # STOP '0x30': 1 # ADDRESS '0x32': 1 # ORIGIN '0x33': 1 # CALLER '0x34': 1 # CALLVALUE '0x36': 1 # CALLDATASIZE '0x38': 1 # CODESIZE '0x3a': 1 # GASPRICE '0x3d': 1 # RETURNDATASIZE '0x41': 1 # COINBASE '0x42': 1 # TIMESTAMP '0x43': 1 # NUMBER '0x44': 1 # DIFFICULTY '0x45': 1 # GASLIMIT '0x46': 1 # CHAINID '0x47': 1 # SELFBALANCE '0x48': 1 # BASEFEE '0x4a': 1 # BEACON_ROOT '0x58': 1 # PC '0x59': 1 # MSIZE '0x5A': 1 # GAS '0x5B': 1 # JUMPDEST '0x5F': 1 # PUSH0 '0x60': 1 # PUSHx ... '0x61': 1 '0x62': 1 '0x63': 1 '0x64': 1 '0x65': 1 '0x66': 1 '0x67': 1 '0x68': 1 '0x69': 1 '0x6a': 1 '0x6b': 1 '0x6c': 1 '0x6d': 1 '0x6e': 1 '0x6f': 1 '0x70': 1 '0x71': 1 '0x72': 1 '0x73': 1 '0x74': 1 '0x75': 1 '0x76': 1 '0x77': 1 '0x78': 1 '0x79': 1 '0x7a': 1 '0x7b': 1 '0x7c': 1 '0x7d': 1 '0x7e': 1 '0x7f': 1 '0x100': 1 ================================================ FILE: tests/static/state_tests/stBugs/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stBugs/randomStatetestDEFAULT-Tue_07_58_41-15153-575192Filler.json ================================================ { "randomStatetestDEFAULT-Tue_07_58_41-15153-575192": { "_info": { "comment": "This is a canon example of a test found by fuzzing with EVMlab, demoing how a suicide-created-but-empty account has a non-zero codehash in geth" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "code" : "0x61dead6000600060006000600061dead5af162abcdef3f600155", "nonce" : "0x1c", "storage" : { } }, "" : { "code" : "", "nonce" : "0x1d", "storage" : { } } } } ], "env": { "currentCoinbase": "", "currentDifficulty": "0x20000", "currentGasLimit": "0x1312D00", "currentNumber": "1", "currentTimestamp": "1000" }, "pre": { "": { "balance": "0x00", "code": ":raw 0x62abcdefff", "nonce": "0x1c", "storage": {} }, "": { "balance": "0x00", "code" : ":raw 0x61dead6000600060006000600061dead5af162abcdef3f600155", "nonce": "0x1c", "storage": {} }, "": { "balance": "0x5d8fdd3ff54298b4", "code": "0x", "nonce": "0x1c", "storage": {} } }, "transaction": { "data": [ "0x" ], "gasLimit": [ "0x5fde07" ], "gasPrice": "0x0b", "nonce": "0x1c", "secretKey": "", "to": "", "value": [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stBugs/randomStatetestDEFAULT-Tue_07_58_41-15153-575192_londonFiller.json ================================================ { "randomStatetestDEFAULT-Tue_07_58_41-15153-575192_london": { "_info": { "comment": "This is a canon example of a test found by fuzzing with EVMlab, demoing how a suicide-created-but-empty account has a non-zero codehash in geth" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "code" : "0x61dead6000600060006000600061dead5af162abcdef3f600155", "nonce" : "0x1c", "storage" : { } }, "" : { "code" : "", "nonce" : "0x1d", "storage" : { } } } } ], "env": { "currentCoinbase": "", "currentDifficulty": "0x20000", "currentGasLimit": "0x1312D00", "currentNumber": "1", "currentTimestamp": "1000" }, "pre": { "": { "balance": "0x00", "code": ":raw 0x62abcdefff", "nonce": "0x1c", "storage": {} }, "": { "balance": "0x00", "code" : ":raw 0x61dead6000600060006000600061dead5af162abcdef3f600155", "nonce": "0x1c", "storage": {} }, "": { "balance": "0x5d8fdd3ff54298b4", "code": "0x", "nonce": "0x1c", "storage": {} } }, "transaction": { "data": [ "0x" ], "gasLimit": [ "0x5fde07" ], "gasPrice": "0x0a", "nonce": "0x1c", "secretKey": "", "to": "", "value": [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stBugs/returndatacopyPythonBug_Tue_03_48_41-1432Filler.json ================================================ { "returndatacopyPythonBug_Tue_03_48_41-1432": { "_info" : { "comment" : "Fuzzer generated bug. No code source." }, "env": { "currentCoinbase": "0x1000000000000000000000000000000000000000", "currentDifficulty": "0x20000", "currentGasLimit": "0x54a60a4202e088", "currentNumber": "0x01", "currentTimestamp": "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage": { "0x01" : "0x00" } }, "" : { "nonce": "0x01" } } } ], "pre": { "": { "balance": "0x38beec8feeca2598", "code": "", "nonce": "0x00", "storage": {} }, "": { "balance": "0x2ce99fc81ed55962", "code": ":raw 0x7b1db054ccc801c0666b34b3c6242bbfc5e98f20c14fb95e0118be9ad054326f33d50e215ff59297861847ea911a6a9d566103a560a860fb60cb6342a46f5073b94f5374fce5edbc8e2a8697c15331677e6ebf0b632c1e2816f26d135e2f826dc603850e0db21d105b778732a34b873c7d943050b8659794f0bd3e841d35a2231ef6027e97f8cde11728fa2051e87933cf858e4e5e91baa74fc1e9ffe4c7b15ba600e8678f095989dc68f47e67d704be2b41c7f8670a", "nonce": "0x3f", "storage": {} }, "": { "balance": "0x442f5872dd93b01a", "code": ":raw 0x610326610100fd79c940b5f2046740058558468f238b85db7f6bbe3f3d51e92a3e326102d85268b7f7c4147541c695f376705288410b81b217e80726fb9e4c5c7b4c49eca0c1b6b9137e117c16c26c9816459f38396ffc36da48d65defdc7d055cbc846c07e81cfab0607c6cbc968774d4de7df8e3236f581e688cc2081a96b1cad9e0fb6103ca601361019f6101016364b68c8e73ffffffffffffffffffffffffffffffffffffffff63200fbd63f16017610215610161610119635af7465b73000000000000000000000000000000000000000863792c6916f1799bf4fddda49ae97714e7d325ceab23acd5f4a15b52104741161261023f608ff360197021a04ff3f933b9ad91b735bfbfe41da7066b499c5d47b6de1fe398cb91fd68f681cbb8661dd457cf713cef75dabf5ea496d7012f4c56b9fee6c4208461022d61021661036e610200630277795a73ffffffffffffffffffffffffffffffffffffffff6333d3d55ff1644720e3ce666101ad526b874cead08499d57a5497d3776102fa60ff60f561014863202b2ea873d94f5374fce5edbc8e2a8697c15331677e6ebf0b6302e83dbef1327144ce205e051f296fb116fc9e5f3c280919af70f3c93c5d5cefff338db2b1165b4918f1780a73852663192a9579a68b50eefdc639ca0b62ab4d5230", "nonce": "0x1c", "storage": {} }, "": { "balance": "0x161150e7531f1933", "code": ":raw 0x6102dd6103e06103146052632318d76f7332f4d5419b41e6887cca98e0943f141a5c66df986347cfe65df16abd0c6d6c4cec6593afaa8c7de1769c96cd0751aa76a98c8196fa8c92e70d7bda1799c91c7f05de318110659b819438774667f9ec15a6e0233f75669e43360bd4e0a0764e9f395117afcd072774ce12d13dc73305858002a921407eb6508e3a3be377d4825dbf618a393c7c061e75a8a496a33afe0f017f2e3354789e321838b083d48893f23dced4592e9ea08fe3f80970d6334b626c6f1f6ede8bcc81d03a7ccc244231cb6606db986101d761010761031c61025673ffffffffffffffffffffffffffffffffffffffff6311ecd01bfa7aa6d0c1c5158ef0db6994192acbd4cac6abc8449d80fc2c3247194668e0d9606bd390266d7f78712766f4765076283ad67450d7ab4df6f3f6ee014ab802ec9d55727ed96dc0b9ce7bd14b193dc1f0d11ce19283c77ef651d4d2e7c180715ff7fcbc995ea8b27613cc516dad16d17f29a93220ce0d6edb0a65d3d474dbc39cba5bcb3d4fcf6a9fef19107dc04511df2752fb346103ce6101c163459d135bf0712ab2475fbb2ba0720711a903dbecfa0429bf6811e6e90cbb0f13d4ee61050c7052c865e0216b4096186fc604fb563fa59f761263ee91d55e407fdffe82ca1558f793f3a218dd9ba69084621fdea97de498f0b0e1874331115e31aaad4d87227362a9ec3e1c1be11cdb23097bbc600c64692eeadfa97f1616b8aec24564487dc74f8e17e6a133b5dbe576838697de73f856197203ef1a733a54f7edb0dbd60f9d52db6b5c1477169b77f0d86917ed731a20db4b9e5b836bd26bffefab084a31c4afda166f8156612f281da0be688e5bdb1f31ed7869bc62343a7665abad657369482449e68b3acfe820997d3ddf5785384d51aaa0612dab5ddbf2a9bf550736ad42293387d70693587d74f6ccfae5218d01559bac159497edb6a665eae52f52784975568a159c0cae9044d258c55b10f4d1008d29ab1df7fceb76b789e2a8cdbaa9c67c42cd1ebe81716ead0e94c721279d77d3a0b3de311596d547292878449ccce511e6991b3dc636a16278159a9f61014a6102216342ce224df06f3d9a062274cd9a67ccba17c2cb06de46628e0bf703610106602e636db4b55bf06102056102c9633ff89b31f0788e55af17e19973f2c3f5d4c21c169890b9a92491f91aa1e714605d526103a1601f609b6103ee73d94f5374fce5edbc8e2a8697c15331677e6ebf0b6335adeabdf46d26060d385ed594e21b02b23a6c4c157350e7ab6a3ef66f83a29845b4ba85c4fdfbd0054a620123ad6893eff4b525b0f4b08d73285f36f3bcac6a985b906c348472b7cbc5a02e61678666f0c50eecdc1167f20fc1dc41c2fd95856d7752e55ede4e56f4f536a04d436a7fd418a1ca44c0173c10f1806ba284f9c9c7c13670005de594dec538cd56c2743b66fdfa7683ae0df6917b8bbcb53461be606ef617322e6448e3e4124dbe061257a8f486529de36997f08ce92502957f85587a18082b5b5b49e36de5a83e8a270663088571bf2fdf8f5f29b949976b41e3859928a237f5e5df84c17d3c431e82328f9093e64defbdd07d74d84835800999791abc41260472d96f9362604d077b198e859adc806beae7200cf116d2b55e89ddd564abc3900e69a68b0f6f0e9e4f12998728815d01c42f3b109ed25561027b610132635f449586f06101726101ec631fe4bdc3f06101316101246103b33e60bd19610284610305fd6102db6102e4631ea09dc6f06b72a6cf13500241c2a5e5c4e1777ea9ed9b05ba9b57d70dd270ece76ecf21d3a41ad554f795167084dcab761d4c8437774cad4bb13b2bece16d40358df93ec0f49abe102cd44e475560476101f3fd605b61030a6328f7e2e9f032604a547db71c0237247865fa2add74c8b27041c5718a2554a72662720296dff5b3b5327d59df4558b8a5b2c9e7d15eb3947a70064f935c8fdf0a4e6f644aa31b42c17d0280e50ea92a366c3d060c12c6a16a75522fbeb3d7cca702807f521781ab6101b252639cceb9e27f37ee8fde4ed3a23d3ec8db334ac1caa7e06523b0132dd615cf3fc16140d34c19761617823c3af47c42bc36b69cb4385463595c7f6f9ea451396fe05303603e0cd401e13df744e2a67382774d943941551704ff14dfa8646efbb2d8abc4ac6e258e99240372924b8001f8f0650d66b37411d484b18f41e779702bd1c169fa52bbfc8af4a45f20acb0ef956edb2ecbc0d4eadbbbf6732f8bd33b367a33c0faf0cf1970bcd38093a50a44fd253b0e74f2706239c499217b7bdae332e21d5d5e7e795c998cceed14cf46977e7d3cbb3c79ef0530c36fa8ac3fd8d49f10bb0ae919fa149adead7f67dae0b9ba628e056e0e87e029b8e5f42821d775338e6774301ecb428b3938237c6ee22b0b5edf2ad6997869f427ba0672a7168614233e85f61dae5ed428643a53f605116d6dad586dce62833a62ca8c914c646b1f861a5b1c4ea7298a95029e63cb849fe08b6c943cb9d854c7d50ad04cfdfe64718e2868b8f2b53e55fe01a152c8496cbcc69956787447062b734cebde6c6452e9efc4aba5bf071cbff56208a52561a8ef635f52399b724f3369d988884f58166d734881774eff46d77b76b189c89c55b1c6591f178d2d21bf2b023adf9bc5b862127935e3346d98d56047a3f71241fd5a24abbb0cfc463fb8a5e67e327b055696fe51258dd07526ebd8439bcebb514ae26dc12d653a5c1263707c5109097ec5dcdb3918ab114985f709d3003b50e58fba91007825a6b80073f644eaa306051808460fc3b2d8e276b2187c583f7ef29ee0b0c34f9ee57bac9ebb996402e3300ddf06c760fc5f531f6b1e2beda77fa15c07f90f92422822e8d33c5d2409ea75197f7cd6d61770eddb078206cfc7c57b006cd0e9a9ec65fa4fc683da22cfaf6dfc995feb5f8386a052851fc58b7402f32e7ef9343d4633def4c0a4b9be12f2cd7c646073e14ca3fb977524f677714c3d994ea05f1997a246537d2fc0ab20ed2a5958f3712602bee2a270429abbd3ff3b9945f72f58dcf4f86eb344417a87dfa1ebd701a0ff381bb40b620bb8287cd7781d2ef7c0fd8695f705465fbadf99fdffef2afd94b0e76531b6ea0d537a23d2332d13c20368a0724e41bc1130a6b1ebc3464527e34c26a43751649f9dfe4f8e7957981a9fc08558c90d38079f1921b60fe6fa448171fec55c4c630575e811712211cf72f489a4e83a2f5427eab647b075a91064929de0a65517", "nonce": "0x1d", "storage": {} }, "": { "balance": "0x16b3e0323b4f717d", "code": ":raw 0x7e4fc1426b49cd8e2c770339616ce9c501fb746715dd4a20219229d0673ac05575993bd089a6663f6dff488574195b848fbb357eb7be1f61026352605861011761027f60e373c94f5374fce5edbc8e2a8697c15331677e6ebf0b63748b4abbfa60e76101bc6103f33e60d861036a6315193f47f07aff076e997770d03b70288679871dc28aa5a1399b21c8afa8155ecd7e75dd05f9d7eb42fa3e79c6a2109dff2a1e53e612fbe000bed18eec8345f00574f537c72820d8b97350ae523a8f7467ae14a8bd9aae6be55862b685e32476cc67ae2c6a40cf55729540d111f44c63629458da68e7ad2a9b389ed3bb60682169ea8a7b3a1bcf92621919c062413cb5986101236103596101776103be73d94f5374fce5edbc8e2a8697c15331677e6ebf0b631f6d9dfffa6103716101f760163e76d609ca9a51645238e4f1f8268f973c3a01a0b67479a34563d1e70065610173525b64e6d218af5474c3d8045447d06c726801695cfa26fdfaa6460a868569cd662855a55716140ae07eb1e25aeaf04ae7cf54e8aa7a22206da5a6e52bdd3ef82ad40a4681d25811167f7b0a3f66a727652592924dc1291a6085d537c5da2d6272a54f882460bc76407d666361c40cc56bc8778a8bc9a9b45d44c78cfe4333fe0c49418dd61f183d41132f755340e48ababb825a26ebc0ca693a8b465121200fd21a727b4c365a65a3255278f6705e5ca0f6146fccd3766a6e5b9decfb6e50968851e829313a2cc9d5b518e2586166c31ba04ed3f5a377310bd9993aa534b007858d9545342410ce8c156d780a8cb477a65efed30aa9d6bd63c48a134c9cb0c677ecda48aacef0c17c91de37e3cfdae69153742406995ea81bbae6a201663b9b37a6a9f597ae8d5a634f40e44e517174ea92616bc228ced0d712c265c2925470326102f26102146101b13e601d6103a360726103ec73ffffffffffffffffffffffffffffffffffffffff6319628a1bf4740e5f285d15a08a263b0a444516266bd51fe7266771604469df3c080d07dd47c4eb9e7344a87541ddc5a6971632a021033eb3542b375cd06bd0dfb48f6acde07152794b556839563efff1afed3b0a857615166526175e7184b83cc2dedf61ec5d65d1eee66efcb87b4f2c73335db9fba49e3d40638cd7f462f1d3b315f18dc1f692a68b24036102c16101f36102f23e783d6331b166ee517c71a4ba159dd322b9fa5f3237dfb85d2594edd580948177bd72d2244f767352371e3428d28bc6356c553b18d00e6b3cf602061672c2abbd7763059f61940b0d19fde33f7b5a960861025b61021d6101d361035173b94f5374fce5edbc8e2a8697c15331677e6ebf0b635ba25f69f4790d251e9ae89c718dd41c3f57b0c304fbb83978de28d23499bdd1729c04301ff527ccc9f7ed74a8dbd906b468d4487ffba738f193e3047b02e40beb08b4f11707681ef103ec1b00585a85f27227a179917ef15e97a359268b06ff34bcee23a869974fbca6e201cb16179743ac0f8c9f867003d5e26a5aad5217ebfff31407169237230772efaab6cd87fbc9fd408d4ac5a048e43fb4e7a261037c6101f76103e13e", "nonce": "0x1c", "storage": {} } }, "transaction": { "data": [":raw 0x79b94053bf1fb725756225cde415738a99e1a7690cbe409744b73761038f5277367dedc82e30635bc57e35fcb2038306d9a3a6e4ddcb9d306c879e470f5dd81e1148184f62bd6361ae97087aff61cee25c694a734342be5043b1fde117ba383682ba0d91e0db8b6a29c882a044d0c8bb4925a6796d8480df1b1ccc25641df94f43d5802aa8f44bf70a6817ed784e675725bdc7718a54d686307da5234286085240ba84575dac25d7fc32c59999a9d38fee0d25e7c23986006e9c5bb022f7d28a2cab01a4bb37dd4210608d6101bf6101606079637be1ae4373c94f5374fce5edbc8e2a8697c15331677e6ebf0b63627cbc7df161023161030a60213e60686102596102c861032b73b94f5374fce5edbc8e2a8697c15331677e6ebf0b630a549e50f461036761038161026c6103d1633aded16b73b94f5374fce5edbc8e2a8697c15331677e6ebf0b6320edf4a4f161ea427bd5141d55f5730cd82bf08bff3928aea77e7153bcc4a3a53996be367e77c98cb6fe85797e1d020284d4d302c8b4ebe6b28a9c64a9ae6b2ad6894716732f245e7fdc527443f79a0ae9b8d8900caa1c5796a2854ceddb00a82bfb724ec01b513ed61cce89400a06fe90a109bad6d57ae028143e7552930136347eb71a49db0072c87bd437b9cd7b2f7e6e609f653a85875c9ede69360f9d06d4c2e82caf2e6a87043c0bf5a235431acbb394775dcbfc7b86074b99c9e6f959d84184e5e40c854c280218c07fcd4e98dc3bc44f7d651d7191ead4be3aaa6657719af4fbf6b9741d3c2c1eca740b7c46e7b87ce36eb18a407fca527573156e83888dff152dc41fd0f98972d378a02f8465d755c426de2e81e23ed5b68990e3c73c65071b0c7b046cae8cdd18828c27f10a8ba8e3616103f76103786363763a4bf078faa8e34791ed3692f5784a35b7bbe3db838dcea84ce1955eec"], "gasLimit": ["0x85edf4", "0x2dc6c0"], "gasPrice": "0x0a", "nonce": "0x00", "secretKey": "", "to": "", "value": ["0xa4759940", "0x00"] } } } ================================================ FILE: tests/static/state_tests/stBugs/staticcall_createfailsFiller.json ================================================ { "staticcall_createfails": { "env": { "currentCoinbase": "0x1000000000000000000000000000000000000000", "currentDifficulty": "0x20000", "currentGasLimit": "0x54a60a4202e088", "currentNumber": "0x01", "currentTimestamp": "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage": { "0x01" : "0x00" } }, "0x1d0384eb7c2b1a9d9862c8e180f9e4d1696a2a8e" : { "shouldnotexist" : "1" } } } ], "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "0x38beec8feeca2598", "code": "", "nonce": "0x00", "storage": {} }, "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "0", "code": "{ [[1]] (STATICCALL 70000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce": "0x3f", "storage": { "0x01" : "0x01" } }, "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "0", "//comment" : "Create fails due to insufficient founds", "code": "{ (MSTORE 1 1) [[2]] (CREATE 1 1 1) }", "nonce": "0x3f", "storage": {} }, "0xd94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "0", "//comment" : "Create fails due to wrong stack", "code": ":raw 0x60006000f0", "nonce": "0x3f", "storage": {} } }, "transaction": { "data": [ ":raw 0x000000000000000000000000c94f5374fce5edbc8e2a8697c15331677e6ebf0b", ":raw 0x000000000000000000000000d94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit": ["120000"], "gasPrice": "0x0a", "nonce": "0x00", "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value": ["0x00"] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCallCodes/call_OOG_additionalGasCosts1Filler.json ================================================ { "call_OOG_additionalGasCosts1" : { "_info" : { "comment" : "call(oog during init) -> code " }, "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (CALL 6000 0 0 64 0 64 ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : ":raw 0x6000", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "30000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/call_OOG_additionalGasCosts2Filler.json ================================================ { "call_OOG_additionalGasCosts2" : { "_info" : { "comment" : "call(oog during init) -> code " }, "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x02" } } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[0]] (CALL 6000 1 0 64 0 64 ) }", "storage": { "0x00" : "0x02" } }, "" : { "balance" : "", "code" : ":raw 0x6000", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "30000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcall_00Filler.json ================================================ { "callcall_00" : { "_info" : { "comment" : "call -> call -> code, params check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01", "0x04" : "", "0x07" : "0x02", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcall_00_OOGEFiller.json ================================================ { "callcall_00_OOGE" : { "_info" : { "comment" : "call -> call -> code oog " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 20020 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcall_00_OOGE_valueTransferFiller.json ================================================ { "callcall_00_OOGE_valueTransfer" : { "_info" : { "comment" : "call -> call -> code oog " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 20 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 10 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcall_00_SuicideEndFiller.json ================================================ { "callcall_00_SuicideEnd" : { "_info" : { "comment" : "call -> (call -> code) suicide " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_000Filler.json ================================================ { "callcallcall_000" : { "_info" : { "comment" : "call -> call -> call -> code, params check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_000_OOGEFiller.json ================================================ { "callcallcall_000_OOGE" : { "_info" : { "comment" : "call -> call -> call -> code oog " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_000_OOGMAfterFiller.json ================================================ { "callcallcall_000_OOGMAfter" : { "_info" : { "comment" : "call -> (call -> call -> code) oog " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_000_OOGMBeforeFiller.json ================================================ { "callcallcall_000_OOGMBefore" : { "_info" : { "comment" : "call -> call -> oog call -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_000_SuicideEndFiller.json ================================================ { "callcallcall_000_SuicideEnd" : { "_info" : { "comment" : "call -> call -> (call -> code) suicide" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "20000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_000_SuicideMiddleFiller.json ================================================ { "callcallcall_000_SuicideMiddle" : { "_info" : { "comment" : "call -> call -> suicide, call -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcall_ABCB_RECURSIVEFiller.json ================================================ { "callcallcall_ABCB_RECURSIVE" : { "_info" : { "comment" : "call -> call <-> call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_001Filler.json ================================================ { "callcallcallcode_001" : { "_info" : { "comment" : "call -> call -> callcode - > code, params check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_001_OOGEFiller.json ================================================ { "callcallcallcode_001_OOGE" : { "_info" : { "comment" : "call -> call -> callcode -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01" } }, "" : { "storage" : { "0x0b" : "1" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_001_OOGMAfterFiller.json ================================================ { "callcallcallcode_001_OOGMAfter" : { "_info" : { "comment" : "call -> (call -> callcode -> code) oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_001_OOGMBeforeFiller.json ================================================ { "callcallcallcode_001_OOGMBefore" : { "_info" : { "comment" : "call -> call -> oog callcode -> code " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_001_SuicideEndFiller.json ================================================ { "callcallcallcode_001_SuicideEnd" : { "_info" : { "comment" : "call -> call -> ( callcode - > code ) suicide" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "20000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_001_SuicideMiddleFiller.json ================================================ { "callcallcallcode_001_SuicideMiddle" : { "_info" : { "comment" : "call -> call -> (suicide) callcode - > code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcallcallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "call -> call <-> callcode" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcode_01Filler.json ================================================ { "callcallcode_01" : { "_info" : { "comment" : "call -> callcode -> code, params check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0x07" : "0x02", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcode_01_OOGEFiller.json ================================================ { "callcallcode_01_OOGE" : { "_info" : { "comment" : "call -> callcode -> code oog " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcode_01_SuicideEndFiller.json ================================================ { "callcallcode_01_SuicideEnd" : { "_info" : { "comment" : "call -> (callcode -> code) suicide" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_010Filler.json ================================================ { "callcallcodecall_010" : { "_info" : { "comment" : "call -> callcode -> call -> code, params check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_010_OOGEFiller.json ================================================ { "callcallcodecall_010_OOGE" : { "_info" : { "comment" : "call -> callcode -> call -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[ 11 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_010_OOGMAfterFiller.json ================================================ { "callcallcodecall_010_OOGMAfter" : { "_info" : { "comment" : "call -> (callcode -> call -> code) oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_010_OOGMBeforeFiller.json ================================================ { "callcallcodecall_010_OOGMBefore" : { "_info" : { "comment" : "call -> callcode -> oog call -> code " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_010_SuicideEndFiller.json ================================================ { "callcallcodecall_010_SuicideEnd" : { "_info" : { "comment" : "call -> callcode -> (call -> code) (suicide)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_010_SuicideMiddleFiller.json ================================================ { "callcallcodecall_010_SuicideMiddle" : { "_info" : { "comment" : "call -> callcode -> (suicide) call -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "callcallcodecall_ABCB_RECURSIVE" : { "_info" : { "comment" : "call -> callcode <-> call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_011Filler.json ================================================ { "callcallcodecallcode_011" : { "_info" : { "comment" : "call -> callcode -> callcode -> code, check params" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_011_OOGEFiller.json ================================================ { "callcallcodecallcode_011_OOGE" : { "_info" : { "comment" : "call -> callcode -> callcode -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_011_OOGMAfterFiller.json ================================================ { "callcallcodecallcode_011_OOGMAfter" : { "_info" : { "comment" : "call -> callcode oog -> callcode -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[ 11 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_011_OOGMBeforeFiller.json ================================================ { "callcallcodecallcode_011_OOGMBefore" : { "_info" : { "comment" : "call -> callcode -> oog callcode -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_011_SuicideEndFiller.json ================================================ { "callcallcodecallcode_011_SuicideEnd" : { "_info" : { "comment" : "call -> callcode -> (callcode -> code) (suicide)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_011_SuicideMiddleFiller.json ================================================ { "callcallcodecallcode_011_SuicideMiddle" : { "_info" : { "comment" : "call -> callcode -> (suicide) callcode -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcallcodecallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "call -> callcode <-> callcode" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeDynamicCode2SelfCallFiller.json ================================================ { "callcodeDynamicCode2SelfCall" : { "_info" : { "comment" : "callcode happen to a contract that is dynamically created from within the contract (to itself)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "original test case", "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0x7db299e0885c85039f56fa504a13dd8ce8a56aa7" : { "balance" : "0x01", "storage" : { "0x0b" : "0x01", "0x0c" : "0xa000000000000000000000000000000000000000" } } } }, { "//comment" : "Create1 creates account that callcodes to itself", "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0x1000000000000000000000000000000000000000" : { "nonce" : "0x01", "storage" : { "0x00" : "0x01", "0x0a" : "0x13136008b64ff592819b2fa6d43f2835c452020e", "0x0b" : "0x01", "0x14" : "0x1000000000000000000000000000000000000000", "0x15" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x16" : "0x1000000000000000000000000000000000000000" } }, "0x13136008b64ff592819b2fa6d43f2835c452020e" : { "nonce" : "0x01", "storage" : { "0x7a" : "0x01" } } } } ], "pre" : { "1100000000000000000000000000000000000000" : { "balance" : "0", "code" : "{ (CALL 800000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "a000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x604060006040600060007313136008b64ff592819b2fa6d43f2835c452020e62) (MSTORE 32 0x0186a0f2600b5533600c55000000000000000000000000000000000000000000) (CREATE 1 0 64) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq [[10]] (CREATE 0 0 (lll(seq [[122]] (CALLCODE 100000 0x13136008b64ff592819b2fa6d43f2835c452020e 0 0 64 0 64) (RETURN 0 (lll(seq [[0]] 1 [[20]] (ADDRESS) [[21]] (ORIGIN) [[22]] (CALLER) )0) ) )0) ) [[11]] (CALLCODE 100000 (SLOAD 10) 0 0 64 0 64) )}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000a000000000000000000000000000000000000000", ":raw 0x0000000000000000000000001000000000000000000000000000000000000000" ], "gasLimit" : [ "1453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1100000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeDynamicCodeFiller.json ================================================ { "callcodeDynamicCode" : { "_info" : { "comment" : "callcode to a contract that is being created in the same transaction" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CREATE an account. callcode to that account", "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x0a" : "0x13136008b64ff592819b2fa6d43f2835c452020e", "0x0b" : "0x01", "0x14" : "0x1000000000000000000000000000000000000000", "0x15" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x16" : "0x1000000000000000000000000000000000000000" } } } }, { "//comment" : "CREATE2 an account. callcode to that account", "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x0a" : "0x2d39fad743351d4cf3f4717907d3dda5e0a689a7", "0x0b" : "0x01", "0x14" : "0x2000000000000000000000000000000000000000", "0x15" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x16" : "0x2000000000000000000000000000000000000000" } } } }, { "//comment" : "CREATE an account. callcode to that account. DYNAMIC ALL", "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x4b86c4ed99b87f0f396bc0c76885453c343916ed" : { "balance" : "0x00", "code" : "0x", "nonce" : "0x02", "storage" : { "0x00" : "0x01", "0x0a" : "0xbf1676be6038ab86d66e00824c2e3577858040f6", "0x0b" : "0x01", "0x14" : "0x4b86c4ed99b87f0f396bc0c76885453c343916ed", "0x15" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x16" : "0x4b86c4ed99b87f0f396bc0c76885453c343916ed" } } } }, { "//comment" : "CREATE2 an account. callcode to that account. DYNAMIC ALL", "indexes" : { "data" : 3, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xa51c188504a60578914fcae68f7a1f0dcbb856a9" : { "balance" : "0x00", "code" : "0x", "nonce" : "0x02", "storage" : { "0x00" : "0x01", "0x0a" : "0x0f2d6bf688fae45da62ab2dd4f36945bc924cc61", "0x0b" : "0x01", "0x14" : "0xa51c188504a60578914fcae68f7a1f0dcbb856a9", "0x15" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x16" : "0xa51c188504a60578914fcae68f7a1f0dcbb856a9" } } } } ], "pre" : { "1100000000000000000000000000000000000000" : { "balance" : "0", "code" : "{ (CALL 800000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq [[10]] (CREATE 0 0 (lll(seq (RETURN 0 (lll(seq [[0]] 1 [[20]] (ADDRESS) [[21]] (ORIGIN) [[22]] (CALLER) )0) ) )0) ) [[11]] (CALLCODE 100000 (SLOAD 10) 0 0 64 0 64) )}", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000000" : { "balance" : "1000", "code" : "{(seq [[10]] (CREATE2 0 0 (lll(seq (RETURN 0 (lll(seq [[0]] 1 [[20]] (ADDRESS) [[21]] (ORIGIN) [[22]] (CALLER) )0) ) )0) 0 ) [[11]] (CALLCODE 100000 (SLOAD 10) 0 0 64 0 64) )}", "nonce" : "0", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE 0 0 (lll(seq [[10]] (CREATE 0 0 (lll(seq (RETURN 0 (lll(seq [[0]] 1 [[20]] (ADDRESS) [[21]] (ORIGIN) [[22]] (CALLER) )0) ) )0) ) [[11]] (CALLCODE 100000 (SLOAD 10) 0 0 64 0 64) )0)) )}", "nonce" : "0", "storage" : { } }, "4000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE 0 0 (lll(seq [[10]] (CREATE2 0 0 (lll(seq (RETURN 0 (lll(seq [[0]] 1 [[20]] (ADDRESS) [[21]] (ORIGIN) [[22]] (CALLER) )0) ) )0) 0 ) [[11]] (CALLCODE 100000 (SLOAD 10) 0 0 64 0 64) )0)) )}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000002000000000000000000000000000000000000000", ":raw 0x0000000000000000000000003000000000000000000000000000000000000000", ":raw 0x0000000000000000000000004000000000000000000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1100000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeEmptycontractFiller.json ================================================ { "callcodeEmptycontract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000", "code" : "{ [[ 0 ]] (CALLCODE 50000 0x945304eb96065b2a98b57a48a06ae28d285a71b5 1000 0 64 0 64 )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1050440" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeInInitcodeToEmptyContractFiller.json ================================================ { "callcodeInInitcodeToEmptyContract" : { "_info" : { "comment" : "callcode inside create contract init to non-existent contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "storage" : { "0x02" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0x9f9f2f99f78bfedcd1f32d936203bd1c0cb00853" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "1100000000000000000000000000000000000000" : { "balance" : "0", "code" : "{ (CALL 300000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE 0 0 (lll (seq [[1]] (CALLCODE 500000 0x1000000000000000000000000000000000000001 1 0 0 0 0) [[2]] 1 ) 0) ) )}", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE2 0 0 (lll (seq [[1]] (CALLCODE 500000 0x1000000000000000000000000000000000000001 1 0 0 0 0) [[2]] 1 ) 0) 0) )}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000002000000000000000000000000000000000000000" ], "gasLimit" : [ "1453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1100000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeInInitcodeToExisContractWithVTransferNEMoneyFiller.json ================================================ { "callcodeInInitcodeToExisContractWithVTransferNEMoney" : { "_info" : { "comment" : "callcode inside create/create2 contract init to existing contract. callcode with value transfer but not enough balance" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x00", "nonce" : "1", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0xb0de090b1e01bd09ac6b1d9224229302ed48fd47" : { "balance" : "0x00", "nonce" : "1", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "1100000000000000000000000000000000000000" : { "balance" : "0", "code" : "{ (CALL 300000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE 0 0 (lll (seq [[1]] (CALLCODE 500000 0x1000000000000000000000000000000000000001 1 0 0 0 0)) 0) ) )}", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE2 0 0 (lll (seq [[1]] (CALLCODE 500000 0x1000000000000000000000000000000000000001 1 0 0 0 0)) 0) 0) )}", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000002000000000000000000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1100000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeInInitcodeToExistingContractFiller.json ================================================ { "callcodeInInitcodeToExistingContract" : { "_info" : { "comment" : "callcode inside create/create2 contract init to existing contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x01", "storage" : { "0x01" : "0x01", "0x02" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0x11b62573be8f72b4085bafe5b675b3e7f08ed522" : { "balance" : "0x01", "storage" : { "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "1100000000000000000000000000000000000000" : { "balance" : "0", "code" : "{ (CALL 300000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE 1 0 (lll (seq [[1]] (CALLCODE 50000 0x1000000000000000000000000000000000000001 1 0 0 0 0)) 0) ) )}", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{(seq (CREATE2 1 0 (lll (seq [[1]] (CALLCODE 50000 0x1000000000000000000000000000000000000001 1 0 0 0 0)) 0) 0) )}", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000002000000000000000000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1100000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodeInInitcodeToExistingContractWithValueTransferFiller.json ================================================ { "callcodeInInitcodeToExistingContractWithValueTransfer" : { "_info" : { "comment" : "callcode inside create/create2 contract init to existing contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x05", "storage" : { "0x00" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x6040600060406000600573945304eb96065b2a98b57a48a06ae28d285a71b562) (MSTORE 32 0x0186a0f260005500000000000000000000000000000000000000000000000000) (CREATE 5 0 64) }", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "0", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcode_checkPCFiller.json ================================================ { "callcode_checkPC" : { "_info" : { "comment" : "check the PC after doing call to a contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x03" : "0x25" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (CALL 1000000 0 0 64 0 64 ) [[3]] (PC) }", "storage": {} }, "" : { "balance" : "10000000000", "code" : "{ [[0]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecall_10Filler.json ================================================ { "callcodecall_10" : { "_info" : { "comment" : "callcode -> call -> code, params check " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x02" : "0x01", "0x04" : "", "0x07" : "0x02", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecall_10_OOGEFiller.json ================================================ { "callcodecall_10_OOGE" : { "_info" : { "comment" : "callcode -> call -> code oog " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecall_10_SuicideEndFiller.json ================================================ { "callcodecall_10_SuicideEnd" : { "_info" : { "comment" : "CALLCODE -> (CALL -> code) (suicide)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_100Filler.json ================================================ { "callcodecallcall_100" : { "_info" : { "comment" : "CALLCODE -> CALL -> CALL-> code, params check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x02" : "0x01" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_100_OOGEFiller.json ================================================ { "callcodecallcall_100_OOGE" : { "_info" : { "comment" : "callcode -> call -> call -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[ 11 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_100_OOGMAfterFiller.json ================================================ { "callcodecallcall_100_OOGMAfter" : { "_info" : { "comment" : "callcode -> (call -> call -> code) oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_100_OOGMBeforeFiller.json ================================================ { "callcodecallcall_100_OOGMBefore" : { "_info" : { "comment" : "callcode -> call -> oog call -> code " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_100_SuicideEndFiller.json ================================================ { "callcodecallcall_100_SuicideEnd" : { "_info" : { "comment" : "CALLCODE -> CALL -> (CALL-> code) (suicide)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "20000000000", "storage" : { "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_100_SuicideMiddleFiller.json ================================================ { "callcodecallcall_100_SuicideMiddle" : { "_info" : { "comment" : "CALLCODE -> CALL -> (suicide) CALL-> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcall_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcall_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> CALL <-> CALL" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_101Filler.json ================================================ { "callcodecallcallcode_101" : { "_info" : { "comment" : "CALLCODE -> CALL -> CALLCODE -> code parameters check" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_101_OOGEFiller.json ================================================ { "callcodecallcallcode_101_OOGE" : { "_info" : { "comment" : "callcode -> call -> callcode -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_101_OOGMAfterFiller.json ================================================ { "callcodecallcallcode_101_OOGMAfter" : { "_info" : { "comment" : "callcode -> call oog -> callcode -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_101_OOGMBeforeFiller.json ================================================ { "callcodecallcallcode_101_OOGMBefore" : { "_info" : { "comment" : "callcode -> call -> oog callcode -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_101_SuicideEndFiller.json ================================================ { "callcodecallcallcode_101_SuicideEnd" : { "_info" : { "comment" : "CALLCODE -> CALL -> (CALLCODE -> code) (suicide)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "20000000000", "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_101_SuicideMiddleFiller.json ================================================ { "callcodecallcallcode_101_SuicideMiddle" : { "_info" : { "comment" : "CALLCODE -> CALL -> (suicide) CALLCODE -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "1000000000000000000000000000000000000001" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0x1000000000000000000000000000000000000001 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0x1000000000000000000000000000000000000002 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000002" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT 0x1000000000000000000000000000000000000000) [[ 2 ]] (CALLCODE 50000 0x1000000000000000000000000000000000000003 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> CALL <-> CALLCODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcode_11Filler.json ================================================ { "callcodecallcode_11" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> code, check parameters" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0x07" : "0x02", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcode_11_OOGEFiller.json ================================================ { "callcodecallcode_11_OOGE" : { "_info" : { "comment" : "callcode -> callcode -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcode_11_SuicideEndFiller.json ================================================ { "callcodecallcode_11_SuicideEnd" : { "_info" : { "comment" : "CALLCODE -> (CALLCODE -> code) selfdestruct" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_110Filler.json ================================================ { "callcodecallcodecall_110" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> CALL -> code, check parameters" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_110_OOGEFiller.json ================================================ { "callcodecallcodecall_110_OOGE" : { "_info" : { "comment" : "callcode -> callcode -> call -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_110_OOGMAfterFiller.json ================================================ { "callcodecallcodecall_110_OOGMAfter" : { "_info" : { "comment" : "callcode -> callcode (oog) -> call -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_110_OOGMBeforeFiller.json ================================================ { "callcodecallcodecall_110_OOGMBefore" : { "_info" : { "comment" : "callcode -> callcode -> (oog) call -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_110_SuicideEndFiller.json ================================================ { "callcodecallcodecall_110_SuicideEnd" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> (CALL -> code) (suicide) " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_110_SuicideMiddleFiller.json ================================================ { "callcodecallcodecall_110_SuicideMiddle" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> (suicide) CALL -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcodecall_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> CALLCODE <-> CALL " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_111Filler.json ================================================ { "callcodecallcodecallcode_111" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> CALLCODE -> code check parameter opcodes" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x07" : "0x03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_111_OOGEFiller.json ================================================ { "callcodecallcodecallcode_111_OOGE" : { "_info" : { "comment" : "callcode -> callcode -> callcode -> code oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_111_OOGMAfterFiller.json ================================================ { "callcodecallcodecallcode_111_OOGMAfter" : { "_info" : { "comment" : "callcode -> (callcode -> callcode -> code) oog" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_111_OOGMBeforeFiller.json ================================================ { "callcodecallcodecallcode_111_OOGMBefore" : { "_info" : { "comment" : "callcode -> callcode -> (OOG) callcode -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[ 11 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_111_SuicideEndFiller.json ================================================ { "callcodecallcodecallcode_111_SuicideEnd" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> (CALLCODE -> code) suicide" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_111_SuicideMiddleFiller.json ================================================ { "callcodecallcodecallcode_111_SuicideMiddle" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> (suicide) CALLCODE -> code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCodes/callcodecallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcodecallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> CALLCODE2 -> CALLCODE3 -> CALLCODE2 -> ... the gas usage is auto checked" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/Call1024BalanceTooLowFiller.json ================================================ { "Call1024BalanceTooLow" : { "_info" : { "comment" : "calldepth with balance too low" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALL 0xfffffffffff @@0 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "17592186099592" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/Call1024OOGFiller.json ================================================ { "Call1024OOG" : { "_info" : { "comment" : "calldepth with oog" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x86", "0x01" : "0x01", "0x02" : "0x020b71" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x71", "0x01" : "0x01", "0x02" : "0x01b969" } } } }, { "indexes" : { "data" : -1, "gas" : 2, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x92", "0x01" : "0x01", "0x02" : "0x023a51" } } } }, { "indexes" : { "data" : -1, "gas" : 3, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x7c", "0x01" : "0x01", "0x02" : "0x01e461" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALL (MUL (SUB (GAS) 10000) (SUB 1 (DIV @@0 1025))) 0 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "13120826", "9320826", "15720826", "11220826" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/Call1024PreCallsFiller.json ================================================ { "Call1024PreCalls" : { "_info" : { "comment" : "calldepth with subcall" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01", "0x02" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ [[ 2 ]] (CALL 0xffff 1 0 0 0 0) [[ 3 ]] (CALL 0xffff 1 0 0 0 0) [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALL 0xfffffffffff 0 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "9214364837600034817", "11837600034817" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/CallLoseGasOOGFiller.json ================================================ { "CallLoseGasOOG" : { "_info" : { "comment" : "recursive call" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x03e9" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALL (ADD 1(MUL @@0 100000)) 0 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/CallRecursiveBombPreCallFiller.json ================================================ { "CallRecursiveBombPreCall" : { "_info" : { "comment" : "recursive call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0400", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "{ (CALL 100000 0xbad304eb96065b2a98b57a48a06ae28d285a71b5 23 0 0 0 0) (CALL 0x7ffffffffffffff 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 224000) (ADDRESS) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/Callcode1024BalanceTooLowFiller.json ================================================ { "Callcode1024BalanceTooLow" : { "_info" : { "comment" : "calldepth and balance" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALLCODE 0xfffffffffff @@0 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x7f000fffffffffff" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/Callcode1024OOGFiller.json ================================================ { "Callcode1024OOG" : { "_info" : { "comment" : "calldepth and oog" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x92", "0x01" : "0x01", "0x02" : "0x023a51" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x86", "0x01" : "0x01", "0x02" : "0x020b71" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALLCODE (MUL (SUB (GAS) 10000) (SUB 1 (DIV @@0 1025))) 0 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "15720826", "13120826" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/CallcodeLoseGasOOGFiller.json ================================================ { "CallcodeLoseGasOOG" : { "_info" : { "comment" : "recursive call" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 2, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x03e9" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (CALLCODE (ADD 1(MUL @@0 100000)) 0 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "166262", "156262", "170000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callOutput1Filler.json ================================================ { "callOutput1" : { "_info" : { "comment" : "check the output memory after call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALL 150000 0 0 0 0 0) [[ 0 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callOutput2Filler.json ================================================ { "callOutput2" : { "_info" : { "comment" : "check the output memory after call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALL 150000 0 0 32 0 0) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callOutput3FailFiller.json ================================================ { "callOutput3Fail" : { "_info" : { "comment" : "check the output memory after call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALL 50000 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callOutput3Filler.json ================================================ { "callOutput3" : { "_info" : { "comment" : "check the output memory after call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALL 150000 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callOutput3partialFailFiller.json ================================================ { "callOutput3partialFail" : { "_info" : { "comment" : "check the output memory after call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALL 50000 0 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callOutput3partialFiller.json ================================================ { "callOutput3partial" : { "_info" : { "comment" : "check the output memory after call" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALL 150000 0 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callWithHighValueAndGasOOGFiller.json ================================================ { "callWithHighValueAndGasOOG" : { "_info" : { "comment" : "call with value. call takes more gas then tx has, and more value than account has. check returndata." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : 0 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "1" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : 1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0" : "1", "1" : "0x3700ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 0xffffffffffffffffffffffff 100000000000000000000 0 64 0 2 ) [[1]] (MLOAD 0)}", "nonce" : "0", "storage" : { "0x00" : "0x05" } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000", "100000000000000000000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callWithHighValueAndOOGatTxLevelFiller.json ================================================ { "callWithHighValueAndOOGatTxLevel" : { "_info" : { "comment" : "call with value. call takes more gas then tx has, and more value than account has" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : 0 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : 1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "1" } }, "" : { "storage" : { "0x01" : "1" } } } } ], "pre" : { "" : { "balance" : "100000", "code" : "{ [[ 0 ]] (CALL 3000001 100001 0 0 0 0 ) }", "nonce" : "0", "storage" : { "0x00" : "0x05" } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callWithHighValueFiller.json ================================================ { "callWithHighValue" : { "_info" : { "comment" : "call with value and not enough value to send" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 1000000000000000001 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{ [[2]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callWithHighValueOOGinCallFiller.json ================================================ { "callWithHighValueOOGinCall" : { "_info" : { "comment" : "call with value and oog happens inside" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "1000000000000000001", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x17" } } } ], "pre" : { "" : { "balance" : "1000000000000000001", "code" : "{ [[ 0 ]] (ADD (CALL 10000 1000000000000000000 0 0 0 0 ) 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeOutput1Filler.json ================================================ { "callcodeOutput1" : { "_info" : { "comment" : "check output memory after callcode" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALLCODE 150000 0 0 0 0 0) [[ 0 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeOutput2Filler.json ================================================ { "callcodeOutput2" : { "_info" : { "comment" : "check output memory after callcode" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALLCODE 50000 0 0 32 0 0) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeOutput3FailFiller.json ================================================ { "callcodeOutput3Fail" : { "_info" : { "comment" : "check output memory after callcode. callcode fails with underflow" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALLCODE 50000 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeOutput3Filler.json ================================================ { "callcodeOutput3" : { "_info" : { "comment" : "check output memory after callcode." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALLCODE 150000 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeOutput3partialFailFiller.json ================================================ { "callcodeOutput3partialFail" : { "_info" : { "comment" : "check output memory after callcode. callcode fails with underflow stack" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALLCODE 50000 0 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeOutput3partialFiller.json ================================================ { "callcodeOutput3partial" : { "_info" : { "comment" : "check output memory after callcode" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (CALLCODE 150000 0 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeWithHighValueAndGasOOGFiller.json ================================================ { "callcodeWithHighValueAndGasOOG" : { "_info" : { "comment" : "callcode with high value fails" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALLCODE 0xffffffffffffffffffffffff 100000000000000000000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/callcodeWithHighValueFiller.json ================================================ { "callcodeWithHighValue" : { "_info" : { "comment" : "callcode with high value fails" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 50000 1000000000000000001 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/contractCreationMakeCallThatAskMoreGasThenTransactionProvidedFiller.json ================================================ { "contractCreationMakeCallThatAskMoreGasThenTransactionProvided" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : [0], "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "balance" : "0" }, "1000000000000000000000000000000000000001": { "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : [1], "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "balance" : "0" }, "1000000000000000000000000000000000000001": { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1100000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(CALL 50000 0x1000000000000000000000000000000000000001 0 0 64 0 64)}", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "100000", "code" : "{(SSTORE 1 1)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6040600060406000600073100000000000000000000000000000000000000161c350f1" ], "gasLimit" : [ "96000", "60000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createFailBalanceTooLowFiller.json ================================================ { "createFailBalanceTooLow" : { "_info" : { "comment" : "create fails because we try to send more wei to it that we have" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : 0 }, "network" : [">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "storage" : {} }, "0xd2571607e241ecf590ed94b12d87c94babe36db6" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : 1 }, "network" : [">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "shouldnotexist" : "1" }, "0xd2571607e241ecf590ed94b12d87c94babe36db6" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{(MSTORE 0 0x6001600255 ) (SELFDESTRUCT (CREATE 1000000000000000024 27 5)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "253021" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "23", "24" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFailBadJumpDestination2Filler.json ================================================ { "createInitFailBadJumpDestination2" : { "_info" : { "comment" : "create fails because init code has bad jump dest" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0x0de0b6b3a76586a0" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE 0 0x61ffff56 ) (SELFDESTRUCT (CREATE 1 28 4)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFailBadJumpDestinationFiller.json ================================================ { "createInitFailBadJumpDestination" : { "_info" : { "comment" : "create fails because init code has bad jump dest (underflow)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0x0de0b6b3a76586a0" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0x56 ) (SELFDESTRUCT (CREATE 1 0 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFailStackSizeLargerThan1024Filler.json ================================================ { "createInitFailStackSizeLargerThan1024" : { "_info" : { "comment" : "create fails because init code has stack size >1024" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0x0de0b6b3a76586a0" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE 0 0x6103ff6000525b7f0102030405060708090a0102030405060708090a01020304) (MSTORE 32 0x05060708090a0102600160005103600052600051600657000000000000000000 ) (SELFDESTRUCT (CREATE 1 0 64)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFailStackUnderflowFiller.json ================================================ { "createInitFailStackUnderflow" : { "_info" : { "comment" : "create fails because init code has stack underflow, trying to suicide to it" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0x0de0b6b3a76586a0" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0x01 ) (SELFDESTRUCT (CREATE 1 0 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFailUndefinedInstruction2Filler.json ================================================ { "createInitFailUndefinedInstruction2" : { "_info" : { "comment" : "original test of createInitFailUndefinedInstruction, interesting expect section" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0x0de0b6b3a76586a0" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0xf4 ) (SELFDESTRUCT (CREATE 1 0 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFailUndefinedInstructionFiller.json ================================================ { "createInitFailUndefinedInstruction" : { "_info" : { "comment" : "create fails because init code has undefined opcode, trying to suicide to it" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x02" : "1" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (CALL 400000 0 0 0 0 0) [[1]] (CALL 400000 0 0 0 0 0) [[2]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0xf9 ) (SELFDESTRUCT (CREATE 1 0 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0xf9 ) (SELFDESTRUCT (CREATE2 1 0 1 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFail_OOGduringInit2Filler.json ================================================ { "createInitFail_OOGduringInit2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0xd2571607e241ecf590ed94b12d87c94babe36db6" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (CREATE 1 0 (lll(seq [[1]] 1 (KECCAK256 0x00 0x2fffff) )0)) }", "storage": {} }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitFail_OOGduringInitFiller.json ================================================ { "createInitFail_OOGduringInit" : { "_info" : { "comment" : "create fails because init code has OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "0000000000000000000000000000000000000000" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0x5a ) (SELFDESTRUCT (CREATE 1 0 1)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "53021" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createInitOOGforCREATEFiller.json ================================================ { "createInitOOGforCREATE" : { "_info" : { "comment" : "Suicide to a dynamic created contract, oog on create" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "balance" : "0" }, "0xd2571607e241ecf590ed94b12d87c94babe36db6" : { "nonce" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{(MSTORE8 0 0x5a ) (SELFDESTRUCT (CREATE 1 0 1)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "53020", "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createJS_ExampleContractFiller.json ================================================ { "createJS_ExampleContract" : { "_info" : { "comment" : "Deploy legacy contract normally" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "code" : "0x60003560e060020a9004806343d726d61461004257806391b7f5ed14610050578063d686f9ee14610061578063f5bade661461006f578063fcfff16f1461008057005b61004a6101de565b60006000f35b61005b6004356100bf565b60006000f35b610069610304565b60006000f35b61007a60043561008e565b60006000f35b6100886100f0565b60006000f35b600054600160a060020a031633600160a060020a031614156100af576100b4565b6100bc565b806001819055505b50565b600054600160a060020a031633600160a060020a031614156100e0576100e5565b6100ed565b806002819055505b50565b600054600160a060020a031633600160a060020a031614806101255750600354600160a060020a031633600160a060020a0316145b61012e57610161565b60016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a16101dc565b60045460011480610173575060015434105b6101b85760016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a142600581905550336003819055506101db565b33600160a060020a03166000346000600060006000848787f16101d757005b5050505b5b565b60006004546000146101ef576101f4565b610301565b600054600160a060020a031633600160a060020a031614801561022c5750600054600160a060020a0316600354600160a060020a0316145b61023557610242565b6000600481905550610301565b600354600160a060020a031633600160a060020a03161461026257610300565b600554420360025402905060015481116102c757600354600160a060020a0316600082600154036000600060006000848787f161029b57005b505050600054600160a060020a03166000826000600060006000848787f16102bf57005b5050506102ee565b600054600160a060020a031660006001546000600060006000848787f16102ea57005b5050505b60006004819055506000546003819055505b5b50565b6000600054600160a060020a031633600160a060020a031614156103275761032c565b61037e565b600554420360025402905060015481116103455761037d565b600054600160a060020a031660006001546000600060006000848787f161036857005b50505060006004819055506000546003819055505b5b5056", "storage" : { "0x00" : "", "0x01" : "0x42", "0x02" : "0x23", "0x03" : "", "0x05" : "0x54c98c81" } } } } ], "pre" : { "" : { "balance" : "100000", "code" : ":raw 0x60003560e060020a9004806343d726d61461004257806391b7f5ed14610050578063d686f9ee14610061578063f5bade661461006f578063fcfff16f1461008057005b61004a6101de565b60006000f35b61005b6004356100bf565b60006000f35b610069610304565b60006000f35b61007a60043561008e565b60006000f35b6100886100f0565b60006000f35b600054600160a060020a031633600160a060020a031614156100af576100b4565b6100bc565b806001819055505b50565b600054600160a060020a031633600160a060020a031614156100e0576100e5565b6100ed565b806002819055505b50565b600054600160a060020a031633600160a060020a031614806101255750600354600160a060020a031633600160a060020a0316145b61012e57610161565b60016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a16101dc565b60045460011480610173575060015434105b6101b85760016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a142600581905550336003819055506101db565b33600160a060020a03166000346000600060006000848787f16101d757005b5050505b5b565b60006004546000146101ef576101f4565b610301565b600054600160a060020a031633600160a060020a031614801561022c5750600054600160a060020a0316600354600160a060020a0316145b61023557610242565b6000600481905550610301565b600354600160a060020a031633600160a060020a03161461026257610300565b600554420360025402905060015481116102c757600354600160a060020a0316600082600154036000600060006000848787f161029b57005b505050600054600160a060020a03166000826000600060006000848787f16102bf57005b5050506102ee565b600054600160a060020a031660006001546000600060006000848787f16102ea57005b5050505b60006004819055506000546003819055505b5b50565b6000600054600160a060020a031633600160a060020a031614156103275761032c565b61037e565b600554420360025402905060015481116103455761037d565b600054600160a060020a031660006001546000600060006000848787f161036857005b50505060006004819055506000546003819055505b5b5056", "nonce" : "0", "storage" : { "0x00" : "", "0x01" : "0x42", "0x02" : "0x23", "0x03" : "", "0x05" : "0x54c98c81" } }, "" : { "balance" : "10000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x60406103ca600439600451602451336000819055506000600481905550816001819055508060028190555042600581905550336003819055505050610381806100496000396000f30060003560e060020a9004806343d726d61461004257806391b7f5ed14610050578063d686f9ee14610061578063f5bade661461006f578063fcfff16f1461008057005b61004a6101de565b60006000f35b61005b6004356100bf565b60006000f35b610069610304565b60006000f35b61007a60043561008e565b60006000f35b6100886100f0565b60006000f35b600054600160a060020a031633600160a060020a031614156100af576100b4565b6100bc565b806001819055505b50565b600054600160a060020a031633600160a060020a031614156100e0576100e5565b6100ed565b806002819055505b50565b600054600160a060020a031633600160a060020a031614806101255750600354600160a060020a031633600160a060020a0316145b61012e57610161565b60016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a16101dc565b60045460011480610173575060015434105b6101b85760016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a142600581905550336003819055506101db565b33600160a060020a03166000346000600060006000848787f16101d757005b5050505b5b565b60006004546000146101ef576101f4565b610301565b600054600160a060020a031633600160a060020a031614801561022c5750600054600160a060020a0316600354600160a060020a0316145b61023557610242565b6000600481905550610301565b600354600160a060020a031633600160a060020a03161461026257610300565b600554420360025402905060015481116102c757600354600160a060020a0316600082600154036000600060006000848787f161029b57005b505050600054600160a060020a03166000826000600060006000848787f16102bf57005b5050506102ee565b600054600160a060020a031660006001546000600060006000848787f16102ea57005b5050505b60006004819055506000546003819055505b5b50565b6000600054600160a060020a031633600160a060020a031614156103275761032c565b61037e565b600554420360025402905060015481116103455761037d565b600054600160a060020a031660006001546000600060006000848787f161036857005b50505060006004819055506000546003819055505b5b505600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000023" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createJS_NoCollisionFiller.json ================================================ { "createJS_NoCollision" : { "_info" : { "comment" : "Deploy legacy contract normally" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x42", "0x02" : "0x23", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x05" : "0x03e8" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x60406103ca600439600451602451336000819055506000600481905550816001819055508060028190555042600581905550336003819055505050610381806100496000396000f30060003560e060020a9004806343d726d61461004257806391b7f5ed14610050578063d686f9ee14610061578063f5bade661461006f578063fcfff16f1461008057005b61004a6101de565b60006000f35b61005b6004356100bf565b60006000f35b610069610304565b60006000f35b61007a60043561008e565b60006000f35b6100886100f0565b60006000f35b600054600160a060020a031633600160a060020a031614156100af576100b4565b6100bc565b806001819055505b50565b600054600160a060020a031633600160a060020a031614156100e0576100e5565b6100ed565b806002819055505b50565b600054600160a060020a031633600160a060020a031614806101255750600354600160a060020a031633600160a060020a0316145b61012e57610161565b60016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a16101dc565b60045460011480610173575060015434105b6101b85760016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a142600581905550336003819055506101db565b33600160a060020a03166000346000600060006000848787f16101d757005b5050505b5b565b60006004546000146101ef576101f4565b610301565b600054600160a060020a031633600160a060020a031614801561022c5750600054600160a060020a0316600354600160a060020a0316145b61023557610242565b6000600481905550610301565b600354600160a060020a031633600160a060020a03161461026257610300565b600554420360025402905060015481116102c757600354600160a060020a0316600082600154036000600060006000848787f161029b57005b505050600054600160a060020a03166000826000600060006000848787f16102bf57005b5050506102ee565b600054600160a060020a031660006001546000600060006000848787f16102ea57005b5050505b60006004819055506000546003819055505b5b50565b6000600054600160a060020a031633600160a060020a031614156103275761032c565b61037e565b600554420360025402905060015481116103455761037d565b600054600160a060020a031660006001546000600060006000848787f161036857005b50505060006004819055506000546003819055505b5b505600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000023" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createNameRegistratorPerTxsFiller.json ================================================ { "createNameRegistratorPerTxs" : { "_info" : { "comment" : "Legacy Test from Christoph. J" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x0186a0", "code" : "0x396000f3006000355415600957005b60", "nonce" : "0x01", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155601080600c6000396000f3006000355415600957005b60203560003555" ], "gasLimit" : [ "0x1314e0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createNameRegistratorPerTxsNotEnoughGasFiller.json ================================================ { "createNameRegistratorPerTxsNotEnoughGas" : { "_info" : { "comment" : "Legacy Test from Christoph. J" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155601080600c6000396000f3006000355415600957005b60203560003555" ], "gasLimit" : [ "56157", "86157" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGasFiller.json ================================================ { "createNameRegistratorPreStore1NotEnoughGas" : { "_info" : { "comment" : "Legacy Test from Christoph. J" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0x01" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{(MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE 23 0 34) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "73071" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stCallCreateCallCodeTest/createNameRegistratorendowmentTooHighFiller.json ================================================ { "createNameRegistratorendowmentTooHigh" : { "_info" : { "comment" : "Legacy Test from Christoph. J" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 1000000000000000001 3 29) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001Filler.json ================================================ { "callcallcallcode_001" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x05" : "0x02" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x05" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x05" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x05" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 5 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGEFiller.json ================================================ { "callcallcallcode_001_OOGE" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMAfterFiller.json ================================================ { "callcallcallcode_001_OOGMAfter" : { "_info" : { "comment" : "CALLCODE -> (CALLCODE -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMBeforeFiller.json ================================================ { "callcallcallcode_001_OOGMBefore" : { "_info" : { "comment" : "CALLCODE -> CALLCODE -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideEndFiller.json ================================================ { "callcallcallcode_001_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x6040600060406000600073620249f0f260005500", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideMiddleFiller.json ================================================ { "callcallcallcode_001_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcallcallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> CALLCODE1 -> DELEGATECALL2 -> CALLCODE1 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcode_01Filler.json ================================================ { "callcallcode_01" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0x05" : "0x01", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 5 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_OOGEFiller.json ================================================ { "callcallcode_01_OOGE" : { "_info" : { "comment" : "CALLCODE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_SuicideEndFiller.json ================================================ { "callcallcode_01_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010Filler.json ================================================ { "callcallcodecall_010" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x05" : "", "0x06" : "0x02" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x05" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 2 0 64 0 64 ) (SSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 6 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGEFiller.json ================================================ { "callcallcodecall_010_OOGE" : { "_info" : { "comment" : "CALLCODE -> DELEGATE -> CALLCODE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMAfterFiller.json ================================================ { "callcallcodecall_010_OOGMAfter" : { "_info" : { "comment" : "CALLCODE -> (DELEGATE -> CALLCODE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMBeforeFiller.json ================================================ { "callcallcodecall_010_OOGMBefore" : { "_info" : { "comment" : "CALLCODE -> DELEGATE -> OOG CALLCODE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideEndFiller.json ================================================ { "callcallcodecall_010_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideMiddleFiller.json ================================================ { "callcallcodecall_010_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "callcallcodecall_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> DELEGATECALL -> CALLCODE2 -> DELEGATECALL -> CALLCODE2 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011Filler.json ================================================ { "callcallcodecallcode_011" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x06" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 200000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 6 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGEFiller.json ================================================ { "callcallcodecallcode_011_OOGE" : { "_info" : { "comment" : "CALLCODE -> DELEGATE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMAfterFiller.json ================================================ { "callcallcodecallcode_011_OOGMAfter" : { "_info" : { "comment" : "CALLCODE -> (DELEGATE -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMBeforeFiller.json ================================================ { "callcallcodecallcode_011_OOGMBefore" : { "_info" : { "comment" : "CALLCODE -> DELEGATE -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 40080 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideEndFiller.json ================================================ { "callcallcodecallcode_011_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideMiddleFiller.json ================================================ { "callcallcodecallcode_011_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcallcodecallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALLCODE -> DELEGATECALL1 -> DELEGATECALL2 -> DELEGATECALL1 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecall_10Filler.json ================================================ { "callcodecall_10" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0x05" : "0x02", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } }, "" : { "storage" : { "0x02" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 5 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_OOGEFiller.json ================================================ { "callcodecall_10_OOGE" : { "_info" : { "comment" : "DELEGATE -> CALLCODE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_SuicideEndFiller.json ================================================ { "callcodecall_10_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100Filler.json ================================================ { "callcodecallcall_100" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x05" : "", "0x06" : "0x02" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 1 0 64 0 64 ) (SSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 6 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGEFiller.json ================================================ { "callcodecallcall_100_OOGE" : { "_info" : { "comment" : "DELEGATE -> CALLCODE -> CALLCODE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMAfterFiller.json ================================================ { "callcodecallcall_100_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (CALLCODE -> CALLCODE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMBeforeFiller.json ================================================ { "callcodecallcall_100_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> CALLCODE -> OOG CALLCODE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideEndFiller.json ================================================ { "callcodecallcall_100_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideMiddleFiller.json ================================================ { "callcodecallcall_100_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcall_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATE -> CALLCODE1 -> CALLCODE2 -> CALLCODE1 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101Filler.json ================================================ { "callcodecallcallcode_101" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x05" : "", "0x06" : "", "0x07" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x06" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALLCODE 300000 1 0 64 0 64 ) (SSTORE 5 (CALLER)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) (SSTORE 6 (CALLER)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGEFiller.json ================================================ { "callcodecallcallcode_101_OOGE" : { "_info" : { "comment" : "DELEGATE -> CALLCODE -> CALLCODE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMAfterFiller.json ================================================ { "callcodecallcallcode_101_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (CALLCODE -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMBeforeFiller.json ================================================ { "callcodecallcallcode_101_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> CALLCODE -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALLCODE 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideEndFiller.json ================================================ { "callcodecallcallcode_101_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideMiddleFiller.json ================================================ { "callcodecallcallcode_101_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "1000000000000000000000000000000000000001" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00" } }, "1000000000000000000000000000000000000002" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0x1000000000000000000000000000000000000001 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 100000 0x1000000000000000000000000000000000000002 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000002" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT 0x1000000000000000000000000000000000000000) [[ 2 ]] (DELEGATECALL 50000 0x1000000000000000000000000000000000000003 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> CALLCODE -> DELEGATECALL2 -> CALLCODE -> DELEGATECALL2 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11Filler.json ================================================ { "callcodecallcode_11" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x04" : "0x00", "0x05" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "nonce" : "0x01", "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x04" : "0x00", "0x05" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 5 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_OOGEFiller.json ================================================ { "callcodecallcode_11_OOGE" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_SuicideEndFiller.json ================================================ { "callcodecallcode_11_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110Filler.json ================================================ { "callcodecallcodecall_110" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x05" : "", "0x06" : "", "0x07" : "0x01" } }, "" : { "storage" : { "0x03" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) (SSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 1 0 64 0 64 ) (SSTORE 6 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGEFiller.json ================================================ { "callcodecallcodecall_110_OOGE" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> CALLCODE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMAfterFiller.json ================================================ { "callcodecallcodecall_110_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (DELEGATE -> CALLCODE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMBeforeFiller.json ================================================ { "callcodecallcodecall_110_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> OOG CALLCODE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALLCODE 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideEndFiller.json ================================================ { "callcodecallcodecall_110_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideMiddleFiller.json ================================================ { "callcodecallcodecall_110_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcodecall_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> DELEGATECALL2 -> CALLCODE -> DELEGATECALL2 -> .." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111Filler.json ================================================ { "callcodecallcodecallcode_111" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGEFiller.json ================================================ { "callcodecallcodecallcode_111_OOGE" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> OOG DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMAfterFiller.json ================================================ { "callcodecallcodecallcode_111_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (DELEGATE -> OOG DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMBeforeFiller.json ================================================ { "callcodecallcodecallcode_111_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideEndFiller.json ================================================ { "callcodecallcodecallcode_111_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 1 0 64 0 64) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALLCODE 50000 2 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideMiddleFiller.json ================================================ { "callcodecallcodecallcode_111_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcodecallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> DELEGATECALL1 -> DELEGATECALL2 -> DELEGATECAL1 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_001Filler.json ================================================ { "callcallcallcode_001" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x03" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x07" : "0x02" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGEFiller.json ================================================ { "callcallcallcode_001_OOGE" : { "_info" : { "comment" : "CALL -> CALL -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMAfterFiller.json ================================================ { "callcallcallcode_001_OOGMAfter" : { "_info" : { "comment" : "CALL -> (CALL -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMBeforeFiller.json ================================================ { "callcallcallcode_001_OOGMBefore" : { "_info" : { "comment" : "CALL -> CALL -> OOG DELEGATE -> CODE " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideEndFiller.json ================================================ { "callcallcallcode_001_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x03" : "0x00" } }, "" : { "balance" : "0", "storage" : { "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideMiddleFiller.json ================================================ { "callcallcallcode_001_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x73ff60406000604060007361c350f460025500", "storage" : { } }, "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcallcallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALL -> CALL2 -> DELEGATECALL -> CALL2 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcode_01Filler.json ================================================ { "callcallcode_01" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0x07" : "0x01", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } }, "" : { "storage" : { "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcode_01_OOGEFiller.json ================================================ { "callcallcode_01_OOGE" : { "_info" : { "comment" : "CALL -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcode_01_SuicideEndFiller.json ================================================ { "callcallcode_01_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x00" } }, "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_010Filler.json ================================================ { "callcallcodecall_010" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x05" : "" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 2 0 64 0 64 ) (SSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGEFiller.json ================================================ { "callcallcodecall_010_OOGE" : { "_info" : { "comment" : "CALL -> DELEGATE -> CALL -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMAfterFiller.json ================================================ { "callcallcodecall_010_OOGMAfter" : { "_info" : { "comment" : "CALL -> (DELEGATE -> CALL -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMBeforeFiller.json ================================================ { "callcallcodecall_010_OOGMBefore" : { "_info" : { "comment" : "CALL -> DELEGATE -> OOG CALL -> CODE " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideEndFiller.json ================================================ { "callcallcodecall_010_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "10000000000", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideMiddleFiller.json ================================================ { "callcallcodecall_010_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "callcallcodecall_ABCB_RECURSIVE" : { "_info" : { "comment" : "CALL -> DELEGATECALL -> CALL2 -> DELEGATECALL -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_011Filler.json ================================================ { "callcallcodecallcode_011" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x07" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 350000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGEFiller.json ================================================ { "callcallcodecallcode_011_OOGE" : { "_info" : { "comment" : "CALL -> DELEGATE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMAfterFiller.json ================================================ { "callcallcodecallcode_011_OOGMAfter" : { "_info" : { "comment" : "CALL -> (DELEGATE -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMBeforeFiller.json ================================================ { "callcallcodecallcode_011_OOGMBefore" : { "_info" : { "comment" : "CALL -> DELEGATE -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 800000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideEndFiller.json ================================================ { "callcallcodecallcode_011_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideMiddleFiller.json ================================================ { "callcallcodecallcode_011_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 150000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcallcodecallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 25000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecall_10Filler.json ================================================ { "callcodecall_10" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x02" : "0x01", "0x04" : "", "0x07" : "0x01", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 250000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecall_10_OOGEFiller.json ================================================ { "callcodecall_10_OOGE" : { "_info" : { "comment" : "DELEGATE -> CALL -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecall_10_SuicideEndFiller.json ================================================ { "callcodecall_10_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x01", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_100Filler.json ================================================ { "callcodecallcall_100" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x05" : "" } }, "" : { "storage" : { "0x02" : "0x01" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 1 0 64 0 64 ) (SSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGEFiller.json ================================================ { "callcodecallcall_100_OOGE" : { "_info" : { "comment" : "DELEGATE -> CALL -> CALL -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMAfterFiller.json ================================================ { "callcodecallcall_100_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (CALL -> CALL -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMBeforeFiller.json ================================================ { "callcodecallcall_100_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> CALL -> OOG CALL -> CODE " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideEndFiller.json ================================================ { "callcodecallcall_100_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "0", "storage" : { "0x02" : "0x01" } }, "" : { "storage" : { "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideMiddleFiller.json ================================================ { "callcodecallcall_100_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "0", "nonce" : "0", "code" : "0x73ff604060006040600060007361c350f160025500", "storage" : { } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcall_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcall_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> CALL1 -> CALL2 -> CALL1 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_101Filler.json ================================================ { "callcodecallcallcode_101" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x05" : "" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "", "0x06" : "", "0x07" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (CALL 300000 1 0 64 0 64 ) (SSTORE 5 (CALLER)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) (SSTORE 6 (CALLER)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGEFiller.json ================================================ { "callcodecallcallcode_101_OOGE" : { "_info" : { "comment" : "DELEGATE -> CALL -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMAfterFiller.json ================================================ { "callcodecallcallcode_101_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (CALL -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMBeforeFiller.json ================================================ { "callcodecallcallcode_101_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> CALL -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (CALL 600000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideEndFiller.json ================================================ { "callcodecallcallcode_101_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "0", "storage" : { "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideMiddleFiller.json ================================================ { "callcodecallcallcode_101_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000010000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "1000000000000000000000000000000000000002" : { "balance" : "0", "nonce" : "0", "code" : "0x731000000000000000000000000000000000000000ff604060006040600073100000000000000000000000000000000000000361c350f460025500", "storage" : { } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0x1000000000000000000000000000000000000001 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 100000 0x1000000000000000000000000000000000000002 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000002" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT 0x1000000000000000000000000000000000000000) [[ 2 ]] (DELEGATECALL 50000 0x1000000000000000000000000000000000000003 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> CALL -> DELEGATECALL2 -> CALL -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (CALL 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcode_11Filler.json ================================================ { "callcodecallcode_11" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x04" : "", "0xe6" : "", "0xe8" : "", "0xec" : "0x40", "0xee" : "0x22", "0xf0" : "0x0a" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "nonce" : "0x01", "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcode_11_OOGEFiller.json ================================================ { "callcodecallcode_11_OOGE" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcode_11_SuicideEndFiller.json ================================================ { "callcodecallcode_11_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_110Filler.json ================================================ { "callcodecallcodecall_110" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x05" : "", "0x06" : "" } }, "" : { "storage" : { "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x03" : "0x01", "0x04" : "", "0x07" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) (SSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALL 250000 1 0 64 0 64 ) (SSTORE 6 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGEFiller.json ================================================ { "callcodecallcodecall_110_OOGE" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> CALL -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMAfterFiller.json ================================================ { "callcodecallcodecall_110_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (DELEGATE -> CALL -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMBeforeFiller.json ================================================ { "callcodecallcodecall_110_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> OOG CALL -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (CALL 400000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideEndFiller.json ================================================ { "callcodecallcodecall_110_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideMiddleFiller.json ================================================ { "callcodecallcodecall_110_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (CALL 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcodecall_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> DELEGATECALL2 -> CALL -> DELEGATECALL2 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (CALL 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111Filler.json ================================================ { "callcodecallcodecallcode_111" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x014a" : "", "0x014c" : "", "0x0150" : "0x40", "0x0152" : "0x27", "0x0154" : "0x0a", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGEFiller.json ================================================ { "callcodecallcodecallcode_111_OOGE" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> DELEGATE -> CODE OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMAfterFiller.json ================================================ { "callcodecallcodecallcode_111_OOGMAfter" : { "_info" : { "comment" : "DELEGATE -> (DELEGATE -> DELEGATE -> CODE) OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMBeforeFiller.json ================================================ { "callcodecallcodecallcode_111_OOGMBefore" : { "_info" : { "comment" : "DELEGATE -> DELEGATE -> OOG DELEGATE -> CODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x0b" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 800000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (DELEGATECALL 600000 0 64 0 64 ) [[11]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) [[ 2 ]] (DELEGATECALL 400000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideEndFiller.json ================================================ { "callcodecallcodecallcode_111_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideMiddleFiller.json ================================================ { "callcodecallcodecallcode_111_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) [[ 2 ]] (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCallDelegateCodesHomestead/callcodecallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "callcodecallcodecallcode_ABCB_RECURSIVE" : { "_info" : { "comment" : "DELEGATECALL -> DELEGATECALL2 -> DELEGATECALl3 -> DELEGATECALL2 -> ..." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 1 ]] (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ [[ 2 ]] (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stChainId/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stChainId/chainIdFiller.json ================================================ { "chainId": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "0x01" } } } } ], "pre": { "": { "balance": "", "code": "{ [[ 1 ]] (CHAINID) }", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["100000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stChainId/chainIdGasCostFiller.json ================================================ { "chainIdGasCost": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "2" } } } } ], "pre": { "": { "balance": "", "//code": "record the gas, run the operation, then record the gas again. Drop output, subtract 2 for GAS, what is left is the cost of the operation, store in storage 0x01.", "code": "(asm GAS CHAINID GAS SWAP1 POP SWAP1 SUB 2 SWAP1 SUB 0x01 SSTORE)", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["100000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stCodeCopyTest/ExtCodeCopyTargetRangeLongerThanCodeTestsFiller.json ================================================ { "ExtCodeCopyTargetRangeLongerThanCodeTests": { "_info" : { "comment": "Uses EXTCODECOPY to copy 32 bytes of code into a 64 byte range of memory and ensures that the last 32 bytes of the memory range are zeroed out" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x020000", "currentGasLimit": "0x7fffffffffffffff", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "": { "storage": { "0x00": "0x1122334455667788991011121314151617181920212223242526272829303132", "0x01": "0x00", "0x02": "0x00", "0x03": "0x00" } } } } ], "pre": { "": { "balance": "0xffffffffffffffffffffffffffffffff", "code": "", "nonce": "0", "storage": { } }, "": { "balance": "7000", "code": "{ (MSTORE 32 0x1234) (EXTCODECOPY 0 0 64) [[0]] (MLOAD 0) [[1]] (MLOAD 32) (MSTORE 96 0x5678) (EXTCODECOPY 64 0 64) [[2]] (MLOAD 64) [[3]] (MLOAD 96)}", "nonce": "0", "storage": { } }, "": { "balance": "0", "code": ":raw 0x1122334455667788991011121314151617181920212223242526272829303132", "nonce": "1", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCodeCopyTest/ExtCodeCopyTestsParisFiller.json ================================================ { "ExtCodeCopyTestsParis" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x05" : "0x11120000000000000000000000000000000000000000000000000000000000", "0x06" : "0x11121314151617181920212223242526272829303132000000000000000000" } }, "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "cccf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10" }, "dddf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "7000", "code" : "{ (EXTCODECOPY 0xbbbf5374fce5edbc8e2a8697c15331677e6ebf0b 1 10 2) [[2]] (MLOAD 0) (EXTCODECOPY 0xcccf5374fce5edbc8e2a8697c15331677e6ebf0b 1 10 2) [[3]] (MLOAD 0) (EXTCODECOPY 0xdddf5374fce5edbc8e2a8697c15331677e6ebf0b 1 10 2) [[4]] (MLOAD 0) (EXTCODECOPY 0xeeef5374fce5edbc8e2a8697c15331677e6ebf0b 1 10 2) [[5]] (MLOAD 0) (EXTCODECOPY 0xeeef5374fce5edbc8e2a8697c15331677e6ebf0b 1 10 200) [[6]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "cccf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "dddf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "eeef5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : ":raw 0x1122334455667788991011121314151617181920212223242526272829303132", "nonce" : "1", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCodeCopyTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCodeSizeLimit/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCodeSizeLimit/codesizeInitFiller.json ================================================ { "codesizeInit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "20000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0", "storage": { "0x01": "0x0a", "0x02": "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{(asm CODESIZE 0x01 SSTORE ADDRESS EXTCODESIZE 0x02 SSTORE)}" ], "gasLimit" : [ "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCodeSizeLimit/codesizeOOGInvalidSizeFiller.json ================================================ { "codesizeOOGInvalidSize" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "20000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":yul berlin {/* code size is 0x600d */ codecopy(0x00, 0x000d, 0x600d) return(0x00, 0x600d) }", ":yul berlin {/* code size is 0x6001 */ codecopy(0x00, 0x000d, 0x6001) return(0x00, 0x6001) }" ], "gasLimit" : [ "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCodeSizeLimit/codesizeValidFiller.json ================================================ { "codesizeValid" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "20000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":yul berlin { /* code size is 0x59d5 */ codecopy(0x00, 0x000d, 0x5ed5) return(0x00, 0x5ed5) }", ":yul berlin { /* code size is 0x6000 - max allowed */ codecopy(0x00, 0x000d, 0x6000) return(0x00, 0x6000) }" ], "gasLimit" : [ "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCodeSizeLimit/create2CodeSizeLimitFiller.yml ================================================ # CREATE2 with max allowed deployed code size create2CodeSizeLimit: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '20000000' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 200000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { mstore(0, calldataload(0)) sstore(0, create2(0, 0, calldatasize(), 0)) sstore(1, 1) } nonce: 0 storage: {} transaction: data: - ':label valid :yul berlin { return(0, 0x6000) }' - ':label invalid :yul berlin { return(0, 0x6001) }' gasLimit: - 15000000 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: ':label valid' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0': '81c305016ab9ca56033a07cc37e7a30fc3e079ac' '1': 1 81c305016ab9ca56033a07cc37e7a30fc3e079ac: balance: 0 nonce: 1 storage: {} - indexes: data: ':label invalid' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0': '0' '1': 1 81c305016ab9ca56033a07cc37e7a30fc3e079ac: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/stCodeSizeLimit/createCodeSizeLimitFiller.yml ================================================ # CREATE with max allowed deployed code size createCodeSizeLimit: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '20000000' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 200000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { mstore(0, calldataload(0)) sstore(0, create(0, 0, calldatasize())) sstore(1, 1) } nonce: 0 storage: {} transaction: data: - ':label valid :yul berlin { return(0, 0x6000) }' - ':label invalid :yul berlin { return(0, 0x6001) }' gasLimit: - 15000000 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: ':label valid' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0': 'f1ecf98489fa9ed60a664fc4998db699cfa39d40' '1': 1 f1ecf98489fa9ed60a664fc4998db699cfa39d40: balance: 0 nonce: 1 storage: {} - indexes: data: ':label invalid' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: storage: '0': '0' '1': 1 f1ecf98489fa9ed60a664fc4998db699cfa39d40: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_Bounds2Filler.json ================================================ { "CREATE2_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "100" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "shouldnotexist" : "1" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "100", "code" : "{ (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE2 1 0 0xffffffff 0) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_Bounds3Filler.json ================================================ { "CREATE2_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "100" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "shouldnotexist" : "1" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "100", "code" : "{ (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE2 1 0 0xffffffffffffffff 0) (CREATE2 1 0 0xffffffffffffffffffffffffffffffff 0) (CREATE2 1 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) (CREATE2 1 0xfffffff 0 0) (CREATE2 1 0xffffffff 0 0) (CREATE2 1 0xffffffffffffffff 0 0) (CREATE2 1 0xffffffffffffffffffffffffffffffff 0 0) (CREATE2 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0) (CREATE2 1 0xfffffff 0xfffffff 0) (CREATE2 1 0xffffffff 0xffffffff 0) (CREATE2 1 0xffffffffffffffff 0xffffffffffffffff 0) (CREATE2 1 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0) (CREATE2 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "1000000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_BoundsFiller.json ================================================ { "CREATE2_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "100" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "shouldnotexist" : "1" }, "7c5a2c91b22d7a9226523d4ba717db6afb741ebd" : { "shouldnotexist" : "1" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "100", "code" : "{ (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE2 1 0 0 0) (CREATE2 1 0 0xfffffff 0) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json ================================================ { "CREATE2_ContractSuicideDuringInit_ThenStoreThenReturn" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "balance" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x6000526005601bf36000526001ff000000000000000000000000000000000000" } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "11" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "{ (CALL 150000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 1 0 0 0 32) (SSTORE 1 (MLOAD 0)) }", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "//code" : "(MSTORE 0 0x64600c6000556000526005601bf3) (SELFDESTRUCT 1)", "code" : "{ (MSTORE 0 0x6d64600c6000556000526005601bf36000526001ff) (CREATE2 1 11 21 0) [[0]] 11 (RETURN 18 14) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_FirstByte_loopFiller.yml ================================================ # The test calls CREATE2 in a loop deploying 1-byte contracts with all possible byte values, records in storage the values that failed to deploy. CREATE2_FirstByte_loop: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: : balance: 1000000000 code: '' nonce: 0 storage: {} : balance: 0 code: | :yul berlin { let start := calldataload(4) let end := calldataload(36) // initcode: { mstore8(0, 0x00) return(0, 1) } mstore(0, 0x600060005360016000f300000000000000000000000000000000000000000000) for { let code := start } lt(code, end) { code := add(code, 1) } { mstore8(1, code) // change returned byte in initcode if iszero(create2(0, 0, 10, 0)) { sstore(code, 1) } } sstore(256, 1) } nonce: 0 storage: {} transaction: data: - :label firstHalf :abi f(uint,uint) 0 239 - :label invalidByte :abi f(uint,uint) 239 240 - :label secondHalf :abi f(uint,uint) 240 256 gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: "" to: '' value: - 0 expect: - indexes: data: :label firstHalf network: - '>=Cancun' result: : nonce: 1 : nonce: 239 storage: '256': 1 : nonce: 1 : nonce: 1 - indexes: data: :label secondHalf network: - '>=Cancun' result: : nonce: 1 : nonce: 16 storage: '256': 1 : nonce: 1 : nonce: 1 - indexes: data: :label invalidByte network: - '>=Cancun' result: : nonce: 1 : nonce: 1 storage: 'ef': '1' # EIP-3541 forbids deploying contracts starting with 0xef '256': 1 : 'shouldnotexist': '1' ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_HighNonceDelegatecallFiller.yml ================================================ CREATE2_HighNonceDelegatecall: _info: comment: "Delegate calls CREATE/CREATE2 from an account with max allowed nonce/max allowed nonce - 1." env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: : balance: 1000000000 code: '' nonce: 0 storage: {} : balance: 0 code: | :yul berlin { let createtype := calldataload(0) let contextnonce := sload(0xffff) // initcode: { codecopy(0, 12, 5); return(0, 5); sstore(1, 1) } mstore(0, 0x6005600c60003960056000f36001600155 ) let addr if eq(createtype, 0) { addr := create(0, sub(32, 17), 17) } if eq(createtype, 1) { // We use the context nonce to mimic CREATE's nonce based address calculation and make verification easier addr := create2(0, sub(32, 17), 17, contextnonce) } sstore(2, addr) if gt(addr, 0) { sstore(0xffff, add(contextnonce, 1)) } mstore(0, addr) return(0, 32) } nonce: '0xfffffffffffffffe' storage: { '0xffff': '0xfffffffffffffffe' } : balance: 0 code: | :yul berlin { let createtype := calldataload(0) let contextnonce := sload(0xffff) // initcode: { codecopy(0, 12, 5); return(0, 5); sstore(1, 1) } mstore(0, 0x6005600c60003960056000f36001600155) let addr if eq(createtype, 0) { addr := create(0, sub(32, 17), 17) } if eq(createtype, 1) { // We use the context nonce to mimic CREATE's nonce based address calculation and make verification easier addr := create2(0, sub(32, 17), 17, contextnonce) } sstore(2, addr) if gt(addr, 0) { sstore(0xffff, add(contextnonce, 1)) } mstore(0, addr) return(0, 32) } nonce: '0xffffffffffffffff' storage: { '0xffff': '0xffffffffffffffff' } : balance: 0 code: | :yul berlin { let calltype := calldataload(4) let callernonce := calldataload(36) let destnonce := calldataload(68) let createtype := calldataload(100) for { let contextnonce := sload(0xffff) } lt(contextnonce, callernonce) { contextnonce := sload(0xffff) } { // We have a lower nonce than required for the caller, create dummy contract to increase nonce mstore(0, 0x60016000f3) let addr := create(0, sub(32, 5), 5) if gt(addr, 0) { sstore(0xffff, add(contextnonce, 1)) } } mstore(0, createtype) if eq(calltype, 0) { pop(delegatecall(sub(gas(), 1000), destnonce, 0, 32, 0, 32)) } if eq(calltype, 1) { pop(callcode(sub(gas(), 1000), destnonce, 0, 0, 32, 0, 32)) } if eq(calltype, 2) { pop(call(sub(gas(), 1000), destnonce, 0, 0, 32, 0, 32)) } let result := mload(0) sstore(1, result) if gt(result, 0) { pop(call(sub(gas(), 1000), result, 0, 0, 0, 0, 0)) } } nonce: '0xfffffffffffffffe' storage: { '0xffff': '0xfffffffffffffffe' } transaction: data: # Parameters: # 1) Call type: # 0 - delegateCall # 1 - callCode # 2 - call # 2) Caller Nonce (A) # 3) Destination nonce (B) # 4) CREATE type: # 0 - CREATE # 1 - CREATE2 # CREATE + Caller (A) Max Nonce minus 1 Test Cases # - Contract A (Nonce=0xfffffffffffffffe) delegate calls CREATE Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonceMinus1_Create :abi f(uint,uint,uint,uint) 0x00 0xfffffffffffffffe 0x0' # - Contract A (Nonce=0xfffffffffffffffe) delegate calls CREATE Contract B (Nonce=0xffffffffffffffff), contract create succeeds - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonce_Create :abi f(uint,uint,uint,uint) 0x00 0xfffffffffffffffe 0x0' # - Contract A (Nonce=0xfffffffffffffffe) code calls CREATE Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonceMinus1_CallCode_B_MaxNonceMinus1_Create :abi f(uint,uint,uint,uint) 0x01 0xfffffffffffffffe 0x0' # - Contract A (Nonce=0xfffffffffffffffe) code calls CREATE Contract B (Nonce=0xffffffffffffffff), contract create succeeds - ':label A_MaxNonceMinus1_CallCode_B_MaxNonce_Create :abi f(uint,uint,uint,uint) 0x01 0xfffffffffffffffe 0x0' # - Contract A (Nonce=0xfffffffffffffffe) calls CREATE Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonceMinus1_Call_B_MaxNonceMinus1_Create :abi f(uint,uint,uint,uint) 0x02 0xfffffffffffffffe 0x0' # - Contract A (Nonce=0xfffffffffffffffe) calls CREATE Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonceMinus1_Call_B_MaxNonce_Create :abi f(uint,uint,uint,uint) 0x02 0xfffffffffffffffe 0x0' # CREATE + Caller (A) Max Nonce Test Cases # - Contract A (Nonce=0xffffffffffffffff) delegate calls CREATE Contract B (Nonce=0xfffffffffffffffe), contract create fails - ':label A_MaxNonce_DelegateCall_B_MaxNonceMinus1_Create :abi f(uint,uint,uint,uint) 0x00 0xffffffffffffffff 0x0' # - Contract A (Nonce=0xffffffffffffffff) delegate calls CREATE Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonce_DelegateCall_B_MaxNonce_Create :abi f(uint,uint,uint,uint) 0x00 0xffffffffffffffff 0x0' # - Contract A (Nonce=0xffffffffffffffff) code calls CREATE Contract B (Nonce=0xfffffffffffffffe), contract create fails - ':label A_MaxNonce_CallCode_B_MaxNonceMinus1_Create :abi f(uint,uint,uint,uint) 0x01 0xffffffffffffffff 0x0' # - Contract A (Nonce=0xffffffffffffffff) code calls CREATE Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonce_CallCode_B_MaxNonce_Create :abi f(uint,uint,uint,uint) 0x01 0xffffffffffffffff 0x0' # - Contract A (Nonce=0xffffffffffffffff) calls CREATE Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonce_Call_B_MaxNonceMinus1_Create :abi f(uint,uint,uint,uint) 0x02 0xffffffffffffffff 0x0' # - Contract A (Nonce=0xffffffffffffffff) calls CREATE Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonce_Call_B_MaxNonce_Create :abi f(uint,uint,uint,uint) 0x02 0xffffffffffffffff 0x0' # CREATE2 + Caller (A) Max Nonce minus 1 Test Cases # - Contract A (Nonce=0xfffffffffffffffe) delegate calls CREATE2 Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonceMinus1_Create2 :abi f(uint,uint,uint,uint) 0x00 0xfffffffffffffffe 0x1' # - Contract A (Nonce=0xfffffffffffffffe) delegate calls CREATE2 Contract B (Nonce=0xffffffffffffffff), contract create succeeds - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonce_Create2 :abi f(uint,uint,uint,uint) 0x00 0xfffffffffffffffe 0x1' # - Contract A (Nonce=0xfffffffffffffffe) code calls CREATE2 Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonceMinus1_CallCode_B_MaxNonceMinus1_Create2 :abi f(uint,uint,uint,uint) 0x01 0xfffffffffffffffe 0x1' # - Contract A (Nonce=0xfffffffffffffffe) code calls CREATE2 Contract B (Nonce=0xffffffffffffffff), contract create succeeds - ':label A_MaxNonceMinus1_CallCode_B_MaxNonce_Create2 :abi f(uint,uint,uint,uint) 0x01 0xfffffffffffffffe 0x1' # - Contract A (Nonce=0xfffffffffffffffe) calls CREATE2 Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonceMinus1_Call_B_MaxNonceMinus1_Create2 :abi f(uint,uint,uint,uint) 0x02 0xfffffffffffffffe 0x1' # - Contract A (Nonce=0xfffffffffffffffe) calls CREATE2 Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonceMinus1_Call_B_MaxNonce_Create2 :abi f(uint,uint,uint,uint) 0x02 0xfffffffffffffffe 0x1' # CREATE2 + Caller (A) Max Nonce Test Cases # - Contract A (Nonce=0xffffffffffffffff) delegate calls CREATE2 Contract B (Nonce=0xfffffffffffffffe), contract create fails - ':label A_MaxNonce_DelegateCall_B_MaxNonceMinus1_Create2 :abi f(uint,uint,uint,uint) 0x00 0xffffffffffffffff 0x1' # - Contract A (Nonce=0xffffffffffffffff) delegate calls CREATE2 Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonce_DelegateCall_B_MaxNonce_Create2 :abi f(uint,uint,uint,uint) 0x00 0xffffffffffffffff 0x1' # - Contract A (Nonce=0xffffffffffffffff) code calls CREATE2 Contract B (Nonce=0xfffffffffffffffe), contract create fails - ':label A_MaxNonce_CallCode_B_MaxNonceMinus1_Create2 :abi f(uint,uint,uint,uint) 0x01 0xffffffffffffffff 0x1' # - Contract A (Nonce=0xffffffffffffffff) code calls CREATE2 Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonce_CallCode_B_MaxNonce_Create2 :abi f(uint,uint,uint,uint) 0x01 0xffffffffffffffff 0x1' # - Contract A (Nonce=0xffffffffffffffff) calls CREATE2 Contract B (Nonce=0xfffffffffffffffe), contract create succeeds - ':label A_MaxNonce_Call_B_MaxNonceMinus1_Create2 :abi f(uint,uint,uint,uint) 0x02 0xffffffffffffffff 0x1' # - Contract A (Nonce=0xffffffffffffffff) calls CREATE2 Contract B (Nonce=0xffffffffffffffff), contract create fails - ':label A_MaxNonce_Call_B_MaxNonce_Create2 :abi f(uint,uint,uint,uint) 0x02 0xffffffffffffffff 0x1' gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: to: '' value: - 0 expect: - indexes: data: - ':label A_MaxNonce_DelegateCall_B_MaxNonce_Create' - ':label A_MaxNonce_DelegateCall_B_MaxNonceMinus1_Create' - ':label A_MaxNonce_CallCode_B_MaxNonce_Create' - ':label A_MaxNonce_CallCode_B_MaxNonceMinus1_Create' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '0' '2': '0' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonce_Call_B_MaxNonceMinus1_Create' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xffffffffffffffff' storage: '2': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contract Created, keccak(address=0x000000000000000000000000fffffffffffffffe, # nonce=0xfffffffffffffffe) : code: '0x6001600155' storage: '1': '1' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonce_Call_B_MaxNonce_Create' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '0' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '2': '0' '0xffff': '0xffffffffffffffff' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonce_Create' - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonceMinus1_Create' - ':label A_MaxNonceMinus1_CallCode_B_MaxNonce_Create' - ':label A_MaxNonceMinus1_CallCode_B_MaxNonceMinus1_Create' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '' '2': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contract Created, keccak(address=0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b, # nonce=0xfffffffffffffffe) : code: '0x6001600155' storage: '1': '1' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonceMinus1_Call_B_MaxNonceMinus1_Create' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xfffffffffffffffe' storage: '1': '' '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce - 1 : nonce: '0xffffffffffffffff' storage: '2': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contract Created, keccak(address=0x000000000000000000000000fffffffffffffffe, # nonce=0xfffffffffffffffe) : code: '0x6001600155' storage: '1': '1' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonceMinus1_Call_B_MaxNonce_Create' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xfffffffffffffffe' storage: '1': '0' '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '2': '0' '0xffff': '0xffffffffffffffff' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonce_DelegateCall_B_MaxNonce_Create2' - ':label A_MaxNonce_DelegateCall_B_MaxNonceMinus1_Create2' - ':label A_MaxNonce_CallCode_B_MaxNonce_Create2' - ':label A_MaxNonce_CallCode_B_MaxNonceMinus1_Create2' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '0' '2': '0' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonce_Call_B_MaxNonceMinus1_Create2' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xffffffffffffffff' storage: '2': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contract Created, keccak(address=0x000000000000000000000000fffffffffffffffe, # salt=0xfffffffffffffffe, # init code=0x6005600c60003960056000f36001600155) : code: '0x6001600155' storage: '1': '1' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonce_Call_B_MaxNonce_Create2' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '0' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '2': '0' '0xffff': '0xffffffffffffffff' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonce_Create2' - ':label A_MaxNonceMinus1_DelegateCall_B_MaxNonceMinus1_Create2' - ':label A_MaxNonceMinus1_CallCode_B_MaxNonce_Create2' - ':label A_MaxNonceMinus1_CallCode_B_MaxNonceMinus1_Create2' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xffffffffffffffff' storage: '1': '' '2': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contract Created, keccak(address=0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b, # salt=0xfffffffffffffffe, # init code=0x6005600c60003960056000f36001600155) : code: '0x6001600155' storage: '1': '1' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonceMinus1_Call_B_MaxNonceMinus1_Create2' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xfffffffffffffffe' storage: '1': '' '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce - 1 : nonce: '0xffffffffffffffff' storage: '2': '' '0xffff': '0xffffffffffffffff' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '0xffff': '0xffffffffffffffff' # Contract Created, keccak(address=0x000000000000000000000000fffffffffffffffe, # salt=0xfffffffffffffffe, # init code=0x6005600c60003960056000f36001600155) : code: '0x6001600155' storage: '1': '1' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' - indexes: data: - ':label A_MaxNonceMinus1_Call_B_MaxNonce_Create2' gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 # Contract A : nonce: '0xfffffffffffffffe' storage: '1': '0' '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce - 1 : nonce: '0xfffffffffffffffe' storage: '0xffff': '0xfffffffffffffffe' # Contract B, Max Nonce : nonce: '0xffffffffffffffff' storage: '2': '0' '0xffff': '0xffffffffffffffff' # Contracts if create from nonce=0xffffffffffffffff succeeded, should never exist : 'shouldnotexist': '1' : 'shouldnotexist': '1' : 'shouldnotexist': '1' ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_HighNonceFiller.yml ================================================ # The test calls CREATE2 from an account with max allowed nonce. CREATE2_HighNonce: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { // initcode: { return(0, 1) } mstore(0, 0x60016000f3000000000000000000000000000000000000000000000000000000) sstore(0, create2(0, 0, 5, 0)) sstore(1, 1) } nonce: '0xffffffffffffffff' storage: {} transaction: data: - '' gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '0xffffffffffffffff' storage: '0': 0 '1': 1 77dd5d2a2b742ca01ee2cfff306445e3741ef744: 'shouldnotexist': '1' ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_HighNonceMinus1Filler.yml ================================================ # The test calls CREATE2 from an account with max allowed nonce - 1, nonce gets maximum value as a result. CREATE2_HighNonceMinus1: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 code: | :yul berlin { // initcode: { return(0, 1) } mstore(0, 0x60016000f3000000000000000000000000000000000000000000000000000000) sstore(0, create2(0, 0, 5, 0)) sstore(1, 1) } nonce: '0xfffffffffffffffe' storage: {} transaction: data: - '' gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '0xffffffffffffffff' storage: '0': '77dd5d2a2b742ca01ee2cfff306445e3741ef744' '1': 1 77dd5d2a2b742ca01ee2cfff306445e3741ef744: code: '0x00' ================================================ FILE: tests/static/state_tests/stCreate2/CREATE2_SuicideFiller.json ================================================ { "CREATE2_Suicide" : { "_info" : { "comment" : "CREATE2 suicide with/without value, CREATE2 suicide to itself + this cases during init of the CREATE2" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,1], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "shouldnotexist" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "2" }, "5649527a8464a86cae579719d347065f6eb27279" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : [2,3], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "balance" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "2" }, "5649527a8464a86cae579719d347065f6eb27279" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : [4, 5], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "2" }, "6cd0e5133771823da00d4cb545ec8cdab0e38203" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : [6, 7], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "2", "balance" : "9" }, "6cd0e5133771823da00d4cb545ec8cdab0e38203" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : [8, 9], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "2" }, "0x5649527a8464a86cae579719d347065f6eb27279" : { "code" : "0x6001ff" } } }, { "indexes" : { "data" : [10, 11], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "2" }, "0x6cd0e5133771823da00d4cb545ec8cdab0e38203" : { "code" : "0x30ff" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "//data" : [ "0 - Create2 suicide without value during the init code", "1 - Create2 suicide without value with the call", "2 - Create2 suicide with value during the init code", "3 - Create2 suicide with value with the call", "4 - Create2 suicide to itself without value during init", "5 - Create2 suicide to itself without value with the call", "6 - Create2 suicide to itself with value during init", "7 - Create2 suicide to itself with value with the call", "8 - Create2 suicide without value with the staticcall", "9 - Create2 suicide with value with the staticcall", "10 - Create2 suicide to itself without value with the staticcall", "11 - Create2 suicide to itself with value with the staticcall" ], "data" : [ "{ (MSTORE 0 0x6001ff) (CREATE2 0 29 3 0) }", "{ (MSTORE 0 0x626001ff6000526003601df3) (CREATE2 0 20 12 0) (CALL 150000 0x5649527a8464a86cae579719d347065f6eb27279 0 0 0 0 0) }", "{ (MSTORE 0 0x6001ff) (CREATE2 1 29 3 0) }", "{ (MSTORE 0 0x626001ff6000526003601df3) (CREATE2 1 20 12 0) (CALL 150000 0x5649527a8464a86cae579719d347065f6eb27279 0 0 0 0 0) }", "{ (MSTORE 0 0x30ff) (CREATE2 0 30 2 0) }", "{ (MSTORE 0 0x6130ff6000526002601ef3) (CREATE2 0 21 11 0) (CALL 150000 0x6cd0e5133771823da00d4cb545ec8cdab0e38203 0 0 0 0 0 ) }", "{ (MSTORE 0 0x30ff) (CREATE2 1 30 2 0) }", "{ (MSTORE 0 0x6130ff6000526002601ef3) (CREATE2 1 21 11 0) (CALL 150000 0x6cd0e5133771823da00d4cb545ec8cdab0e38203 0 0 0 0 0 ) }", "{ (MSTORE 0 0x626001ff6000526003601df3) (CREATE2 0 20 12 0) (STATICCALL 150000 0x5649527a8464a86cae579719d347065f6eb27279 0 0 0 0) }", "{ (MSTORE 0 0x626001ff6000526003601df3) (CREATE2 1 20 12 0) (STATICCALL 150000 0x5649527a8464a86cae579719d347065f6eb27279 0 0 0 0) }", "{ (MSTORE 0 0x6130ff6000526002601ef3) (CREATE2 0 21 11 0) (STATICCALL 150000 0x6cd0e5133771823da00d4cb545ec8cdab0e38203 0 0 0 0 ) }", "{ (MSTORE 0 0x6130ff6000526002601ef3) (CREATE2 1 21 11 0) (STATICCALL 150000 0x6cd0e5133771823da00d4cb545ec8cdab0e38203 0 0 0 0 ) }" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGFromCallRefundsFiller.yml ================================================ Create2OOGFromCallRefunds: # Test that verifies the refunds are not applied on contract creation when the creation runs Out of Gas env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" pre: #### MAIN CALLER a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x3d0900' code: '0x' nonce: '1' storage: {} ### MAIN ENTRY CONTRACT: Code that extcode-copies and creates a contract using CREATE2 # Switches init code based on the first parameter's value aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: balance: '0' code: | :yul berlin { let init_addr := calldataload(4) let init_length := extcodesize(init_addr) extcodecopy(init_addr, 0, 0, init_length) let created_addr := create2(0, 0, init_length, 0) if eq(created_addr, 0) { /* This invalid will deplete the remaining gas to make refund check deterministic */ invalid() } } nonce: '1' storage: {} ### INIT CODES: Used to create contracts with a variety of OOG init codes. # Init codes: Sstore refund 000000000000000000000000000000000000001a: # CREATE2 keccak = 0xcfb6834f84b9e726f5f8aef446d585b732abdd99 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000001b: # CREATE2 keccak = 0x95e88628c53b5c0e40ff6de65a3cf8cdc3b477f7 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000001c: # CREATE2 keccak = 0x66e1cc2616a273450621c8cc5e91d8cfd92494fa # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) invalid() } nonce: '0' storage: {} # Init codes: Sstore refund, call 000000000000000000000000000000000000002a: # CREATE2 keccak = 0xd615c5eaff84f487cff253b50dc18517fc8385b0 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 1) let noOpt := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000002b: # CREATE2 keccak = 0x6175ba9976476425b1cda8e1da479768fb429542 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000002c: # CREATE2 keccak = 0x8dff0e448f1e078e9b8a7fcf0bf6c291f167aaef # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Sstore refund, delegatecall 000000000000000000000000000000000000003a: # CREATE2 keccak = 0x0d44b2ad06c5c9f9a86c9edf8d13fb7d44fe756c balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) return(0, 1) let noOpt := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000003b: # CREATE2 keccak = 0xa2c4270800a5dbeea48464e5f2420efb1747725a # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000003c: # CREATE2 keccak = 0x4d80f1150ee236adfaab47c70df90e757cef1141 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Sstore refund, callcode 000000000000000000000000000000000000004a: # CREATE2 keccak = 0x858ec13538276b49d5ece2a408c8331ccb79ad89 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 1) let noOpt := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000004b: # CREATE2 keccak = 0x0566dc8dabc80fad3ed9ab2b4309ebfd98894f44 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000004c: # CREATE2 keccak = 0x55305cc46bdaf1e755a05a771d55cfec3fedef90 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Call self-destruct 000000000000000000000000000000000000005a: # CREATE2 keccak = 0xd83e541aa11c5ae1e9c847aa1728d5bc47d32faf balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) return(0, 1) let noOpt := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000005b: # CREATE2 keccak = 0x8f6e6c741ac95c1a9109850ea1a3ffc722dc3bf8 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000005c: # CREATE2 keccak = 0x1f5d187bb3a48dbb2c011d0a6e731ac8131799ad # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Log operations 000000000000000000000000000000000000006a: # CREATE2 keccak = 0x2a2141ed764598d4c5a8b6e036987928d5ec6bea balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) return(0, 1) let noOpt := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000006b: # CREATE2 keccak = 0x74b39291dfc237c0d42fd15457754778f51c6de8 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000006c: # CREATE2 keccak = 0x3399c78929eab89c673a8986ff7ca9ccc49db454 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Create, refund 000000000000000000000000000000000000007a: # CREATE2 keccak = 0xdeb7d920f2653a8eddcffca0a77f56fcd788c00a balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) return(add(initcodelength, 1), 1) let noOptimization := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000007b: # CREATE2 keccak = 0xf922b2f70110c83f8ec7df512b41bac5627e8e59 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) return(add(initcodelength, 1), 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000007c: # CREATE2 keccak = 0x2ca788d22e21134ab1909266ed3b6c352e2a07cb # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) invalid() } nonce: '0' storage: {} # Init codes: Create2, refund 000000000000000000000000000000000000008a: # CREATE2 keccak = 0x5a2664b55822aa3c6d9d90fec18b4c87cde07d04 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) return(add(initcodelength, 1), 1) let noOpt := msize() } nonce: '0' storage: {} 000000000000000000000000000000000000008b: # CREATE2 keccak = 0xdd2c53bfcaf5c1d698a2b21c0908f15f7fbfd635 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) return(add(initcodelength, 1), 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000008c: # CREATE2 keccak = 0x2d556bdbcc37c7a021879a21abe25d1850d4fd36 # Need to double check this address with solc optimisations for expect section # https://github.com/ethereum/go-ethereum/issues/28375 balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) invalid() } nonce: '0' storage: {} ### HELPER CONTRACTS # Simple contract to reset sstore and refund 00000000000000000000000000000000000c0deA: balance: '0' code: | :yul berlin { // Simple SSTORE to zero to get a refund sstore(1, 0) } nonce: '1' storage: { '1': '1' } # Simple contract that self-destructs to refund 00000000000000000000000000000000000c0deD: balance: '0' code: | :yul berlin { selfdestruct(origin()) } nonce: '1' storage: { '1': '1' } # Simple contract that performs log operations 00000000000000000000000000000000000c0de0: balance: '0' code: | :yul berlin { mstore(0, 0xff) log0(0, 32) log1(0, 32, 0xfa) log2(0, 32, 0xfa, 0xfb) log3(0, 32, 0xfa, 0xfb, 0xfc) log4(0, 32, 0xfa, 0xfb, 0xfc, 0xfd) } nonce: '1' storage: { '1': '1' } # Init code that successfully creates contract but contains a refund 00000000000000000000000000000000000c0de1: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(0, 0) return(0, 1) } nonce: '1' storage: {} transaction: data: # Create from EOA, Sstore Refund in Init Code, no OoG # 0 - :label SStore_Refund_NoOoG :abi f(uint) 0x1a # Create from EOA, Sstore Refund in Init Code, OoG on Code Deposit # 1 - :label SStore_Refund_OoG :abi f(uint) 0x1b # Create from EOA, Sstore Refund in Init Code, OoG on Invalid opcode # 2 - :label SStore_Refund_OoG :abi f(uint) 0x1c # Create from EOA, Sstore Refund in Call, no OoG # 3 - :label SStore_Call_Refund_NoOoG :abi f(uint) 0x2a # Create from EOA, Sstore Refund in Call, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x2b # Create from EOA, Sstore Refund in Call, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x2c # Create from EOA, Sstore Refund in DelegateCall, no OoG - :label SStore_DelegateCall_Refund_NoOoG :abi f(uint) 0x3a # Create from EOA, Sstore Refund in DelegateCall, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x3b # Create from EOA, Sstore Refund in DelegateCall, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x3c # Create from EOA, Sstore Refund in CallCode, no OoG - :label SStore_CallCode_Refund_NoOoG :abi f(uint) 0x4a # Create from EOA, Sstore Refund in CallCode, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x4b # Create from EOA, Sstore Refund in CallCode, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x4c # Create from EOA, Refund Self-destruct call, no OoG - :label SelfDestruct_Refund_NoOoG :abi f(uint) 0x5a # Create from EOA, Refund Self-destruct call, OoG on Code Deposit - :label SelfDestruct_Refund_OoG :abi f(uint) 0x5b # Create from EOA, Refund Self-destruct call, OoG on Invalid opcode - :label SelfDestruct_Refund_OoG :abi f(uint) 0x5c # Create from EOA, Log operation in call, no OoG - :label LogOp_NoOoG :abi f(uint) 0x6a # Create from EOA, Log operation in call, OoG on Code Deposit - :label LogOp_OoG :abi f(uint) 0x6b # Create from EOA, Log operation in call, OoG on Invalid opcode - :label LogOp_OoG :abi f(uint) 0x6c # Create from EOA, Refund within CREATE, no OoG - :label SStore_Create_Refund_NoOoG :abi f(uint) 0x7a # Create from EOA, Refund within CREATE, OoG on Code Deposit - :label SStore_Create_Refund_OoG :abi f(uint) 0x7b # Create from EOA, Refund within CREATE, OoG on Invalid opcode - :label SStore_Create_Refund_OoG :abi f(uint) 0x7c # Create2 from EOA, Refund within CREATE2, no OoG - :label SStore_Create2_Refund_NoOoG :abi f(uint) 0x8a # Create2 from EOA, Refund within CREATE2, OoG on Code Deposit - :label SStore_Create2_Refund_OoG :abi f(uint) 0x8b # Create2 from EOA, Refund within CREATE2, OoG on Invalid opcode - :label SStore_Create2_Refund_OoG :abi f(uint) 0x8c gasLimit: - 0x61a80 gasPrice: '10' nonce: '1' to: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: - indexes: data: - :label SStore_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 cfb6834f84b9e726f5f8aef446d585b732abdd99: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label SStore_Call_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 d615c5eaff84f487cff253b50dc18517fc8385b0: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label SStore_DelegateCall_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 0d44b2ad06c5c9f9a86c9edf8d13fb7d44fe756c: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label SStore_CallCode_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 858ec13538276b49d5ece2a408c8331ccb79ad89: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label SStore_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 95e88628c53b5c0e40ff6de65a3cf8cdc3b477f7: shouldnotexist: 1 66e1cc2616a273450621c8cc5e91d8cfd92494fa: shouldnotexist: 1 6175ba9976476425b1cda8e1da479768fb429542: shouldnotexist: 1 8dff0e448f1e078e9b8a7fcf0bf6c291f167aaef: shouldnotexist: 1 a2c4270800a5dbeea48464e5f2420efb1747725a: shouldnotexist: 1 4d80f1150ee236adfaab47c70df90e757cef1141: shouldnotexist: 1 0566dc8dabc80fad3ed9ab2b4309ebfd98894f44: shouldnotexist: 1 55305cc46bdaf1e755a05a771d55cfec3fedef90: shouldnotexist: 1 - indexes: data: - :label SelfDestruct_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 d83e541aa11c5ae1e9c847aa1728d5bc47d32faf: nonce: 1 code: '0x00' storage: { '0': 1 } 00000000000000000000000000000000000c0deD: # Suicide in Cancun no longer deletes account balance: 0 nonce: 1 - indexes: data: - :label SelfDestruct_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 8f6e6c741ac95c1a9109850ea1a3ffc722dc3bf8: shouldnotexist: 1 1f5d187bb3a48dbb2c011d0a6e731ac8131799ad: shouldnotexist: 1 00000000000000000000000000000000000c0deD: code: '0x32FF' nonce: '1' storage: { '1': '1' } - indexes: data: - :label LogOp_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 2a2141ed764598d4c5a8b6e036987928d5ec6bea: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label LogOp_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 74b39291dfc237c0d42fd15457754778f51c6de8: shouldnotexist: 1 3399c78929eab89c673a8986ff7ca9ccc49db454: shouldnotexist: 1 - indexes: data: - :label SStore_Create_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 deb7d920f2653a8eddcffca0a77f56fcd788c00a: nonce: 2 code: '0x00' storage: { '0': 1 } 8109d28de74bfac2f298ec019548b8c346e51310: nonce: 1 code: '0x00' storage: {} - indexes: data: - :label SStore_Create_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 f922b2f70110c83f8ec7df512b41bac5627e8e59: shouldnotexist: 1 2ca788d22e21134ab1909266ed3b6c352e2a07cb: shouldnotexist: 1 398426e736801fe712df1ef078a3b6ca3c6f063b: shouldnotexist: 1 b520686759ced3bc9d8898e02ee41623032ff47f: shouldnotexist: 1 - indexes: data: - :label SStore_Create2_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 5a2664b55822aa3c6d9d90fec18b4c87cde07d04: nonce: 2 code: '0x00' storage: { '0': 1 } 442ed1b502544d146e46b5d9849a476aebd3b8db: nonce: 1 code: '0x00' storage: {} - indexes: data: - :label SStore_Create2_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 dd2c53bfcaf5c1d698a2b21c0908f15f7fbfd635: shouldnotexist: 1 2d556bdbcc37c7a021879a21abe25d1850d4fd36: shouldnotexist: 1 a99da4ea490335c986d52b0cc9e3f78b286ac5fc: shouldnotexist: 1 b4ab8ab0d363765586925e35c715e342e4ae3c63: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeFiller.json ================================================ { "Create2OOGafterInitCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0" } }, "0x6878b140f875209c82ab4d5f083b55947299ef6b" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0" } }, "0x6878b140f875209c82ab4d5f083b55947299ef6b" : { "code" : "0x6001600155" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "54000", "55000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeReturndata2Filler.json ================================================ { "Create2OOGafterInitCodeReturndata2" : { "_info" :{ "comment" : "Call RETURNDATASIZE and RETURNDATACOPY after CREATE2 deploy a contract. correct returndata copy." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "2", "0x02" : "0" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0", "0x02" : "0x6460016001556000526005601bf3" } }, "6878b140f875209c82ab4d5f083b55947299ef6b" : { "code" : "0x6001600155" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) [[ 1 ]] (RETURNDATASIZE) (RETURNDATACOPY 0 0 0) [[ 2 ]] (MLOAD 0) }", "storage": { "0x01" : "0x02" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "54000", "95000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeReturndata3Filler.json ================================================ { "Create2OOGafterInitCodeReturndata3" : { "_info" : { "comment" : "Calls a contract that runs CREATE2 which deploy a code. then OOG happens upon deployment of the actual code. check the RETURN data buffer in initial contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x01" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALLCODE (GAS) 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { "0x01" : "0x01" } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "55000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeReturndataFiller.json ================================================ { "Create2OOGafterInitCodeReturndata" : { "_info" :{ "comment" : "Call RETURNDATASIZE and RETURNDATACOPY (BufferOverrun) after CREATE2 deploy a contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "1", "0x02" : "1" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) [[ 1 ]] (RETURNDATASIZE) (RETURNDATACOPY 0 0 32) [[ 2 ]] (MLOAD 0) }", "storage": { "0x01" : "1", "0x02" : "1" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "54000", "95000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeReturndataSizeFiller.json ================================================ { "Create2OOGafterInitCodeReturndataSize" : { "_info" : { "comment" : "Calls a contract that runs CREATE2 which deploy a code. then OOG happens upon deployment of the actual code. check the RETURNDATASIZE after create. fails with OOG if RETURNDATASIZE != 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1" }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "{ (MSTORE 0 0x60016001556001600255) (RETURN 22 10) }", "//code" : "{ (SSTORE 1 1) (SSTORE 2 1) } ", "code" : "{ (MSTORE 0 0x6960016001556001600255600052600a6016f3) (CREATE2 0 13 19 0) (EXP 2 (RETURNDATASIZE)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "55054" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeRevert2Filler.json ================================================ { "Create2OOGafterInitCodeRevert2" : { "_info" : { "comment" : "Calls a contract that runs CREATE2 which deploy a code. then after deployment and exiting from CREATE a REVERT is called. check the REVERT data in this case equal to RETURN value of CREATE2. CREATE2 fails due to the deployment cost." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x6460016001556000526005601bf3" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 33000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { "0x01" : "0x01" } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) (REVERT 0 32) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "75000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OOGafterInitCodeRevertFiller.json ================================================ { "Create2OOGafterInitCodeRevert" : { "_info" : { "comment" : "Calls a contract that runs CREATE2 which deploy a code. then after deployment and exiting from CREATE a REVERT is called. check the REVERT data in this case equal to RETURN value of CREATE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x6460016001556000526005601bf3" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL (GAS) 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { "0x01" : "0x01" } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) (REVERT 0 32) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "75000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/Create2OnDepth1023Filler.json ================================================ { "Create2OnDepth1023" : { "_info" : { "comment" : "Create2OnDepth1023, 0x0400 indicates 1022 level." }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "244fe9a7867edcc140245e775071fbfe6ebedbae" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "244fe9a7867edcc140245e775071fbfe6ebedbae" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0x0c", "0x01" : "0x0d" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "3000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "{(MSTORE 0 0x600c600055600d600155) (CREATE2 0 22 10 0)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "80000", "150000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/CreateMessageRevertedOOGInInit2Filler.json ================================================ { "CreateMessageRevertedOOGInInit2" : { "_info" : { "comment" : "create2 oog during the init code, + when create2 is from transaction init code. but oog still in create2 init code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "f3059e18a327c662766f6ba11808c400635847ef" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "f3059e18a327c662766f6ba11808c400635847ef" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0x0c", "0x01" : "0x0d" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "3000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{(MSTORE 0 0x600c600055600d600155) (CREATE2 0 22 10 0)}" ], "gasLimit" : [ "110000", "150000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/RevertDepthCreate2OOGBerlinFiller.json ================================================ { "RevertDepthCreate2OOGBerlin" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "NO OOG", "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "05a28fc366483258507bcf739658573cb47e4fad" : { "nonce" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { "0x02" : "0x08", "0x03" : "0x0c" } } } }, { "//comment" : "OOG in subcall", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "05a28fc366483258507bcf739658573cb47e4fad" : { "shouldnotexist" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "OOG after subcall / double OOG", "indexes" : { "data" : [1, 0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "05a28fc366483258507bcf739658573cb47e4fad" : { "shouldnotexist" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a000000000000000000000000000000000000000" : { "balance" : "5", "code" : "{ [[0]] 1 [[1]] (CALL (CALLDATALOAD 0) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[4]] 12 }", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[2]] 8 (CREATE2 0 0 0 0) [[3]] 12}", "nonce" : "", "storage" : { } } }, "transaction" : { "//data" : "Call with value to address A, then another call X, in the call X CREATE of account A, OOG -> revert call X.", "// data" : "d0g0 - double OOG, d0g1 - OOG inside subcall, d1g0 - OOG after subcall, d1g1 - no OOG", "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000ea60", ":raw 0x000000000000000000000000000000000000000000000000000000000001ea60" ], "gasLimit" : [ "110000", "170000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "1", "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/RevertDepthCreate2OOGFiller.json ================================================ { "RevertDepthCreate2OOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "NO OOG", "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "05a28fc366483258507bcf739658573cb47e4fad" : { "nonce" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { "0x02" : "0x08", "0x03" : "0x0c" } } } }, { "//comment" : "OOG in subcall", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "05a28fc366483258507bcf739658573cb47e4fad" : { "shouldnotexist" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "OOG after subcall / double OOG", "indexes" : { "data" : [1, 0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "05a28fc366483258507bcf739658573cb47e4fad" : { "shouldnotexist" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a000000000000000000000000000000000000000" : { "balance" : "5", "code" : "{ [[0]] 1 [[1]] (CALL (CALLDATALOAD 0) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[4]] 12 }", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[2]] 8 (CREATE2 0 0 0 0) [[3]] 12}", "nonce" : "", "storage" : { } } }, "transaction" : { "//data" : "Call with value to address A, then another call X, in the call X CREATE of account A, OOG -> revert call X.", "// data" : "d0g0 - double OOG, d0g1 - OOG inside subcall, d1g0 - OOG after subcall, d1g1 - no OOG", "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000ea60", ":raw 0x000000000000000000000000000000000000000000000000000000000001ea60" ], "gasLimit" : [ "110000", "170000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "1", "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/RevertDepthCreateAddressCollisionBerlinFiller.json ================================================ { "RevertDepthCreateAddressCollisionBerlin" : { "_info" : { "comment" : "copy of this test for CREATE2" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "nonce" : "54", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { "0x02" : "0x08", "0x03" : "0x0c" } } } }, { "//comment" : "OOG in subcall", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "nonce" : "54", "storage" : { "0x00" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "OOG after subcall", "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "balance" : "0x05", "code" : "0x60016000556000600060006000600073b000000000000000000000000000000000000000600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "double OOG", "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "code" : "0x60016000556000600060006000600073b000000000000000000000000000000000000000600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "3e180b1862f9d158abb5e519a6d8605540c23682" : { "balance" : "5", "code" : "{ [[0]] 1 [[1]] (CALL (CALLDATALOAD 0) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[4]] 12 }", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[2]] 8 (CREATE2 0 0 0 0) [[3]] 12}", "nonce" : "", "storage" : { } } }, "transaction" : { "//0 data" : "Call with value to address A, then another call X, in the call X CREATE of account A, OOG -> revert call X.", "//1 data" : "d0g0 - double OOG, d0g1 - OOG inside subcall, d1g0 - OOG after subcall, d1g1 - no OOG", "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000ea60", ":raw 0x000000000000000000000000000000000000000000000000000000000001ea60" ], "gasLimit" : [ "110000", "170000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "3e180b1862f9d158abb5e519a6d8605540c23682", "value" : [ "1", "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/RevertDepthCreateAddressCollisionFiller.json ================================================ { "RevertDepthCreateAddressCollision" : { "_info" : { "comment" : "copy of this test for CREATE2" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "nonce" : "54", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { "0x02" : "0x08", "0x03" : "0x0c" } } } }, { "//comment" : "OOG in subcall", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "nonce" : "54", "storage" : { "0x00" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "OOG after subcall", "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "balance" : "0x05", "code" : "0x60016000556000600060006000600073b000000000000000000000000000000000000000600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "double OOG", "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "code" : "0x60016000556000600060006000600073b000000000000000000000000000000000000000600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "3e180b1862f9d158abb5e519a6d8605540c23682" : { "balance" : "5", "code" : "{ [[0]] 1 [[1]] (CALL (CALLDATALOAD 0) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[4]] 12 }", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[2]] 8 (CREATE2 0 0 0 0) [[3]] 12}", "nonce" : "", "storage" : { } } }, "transaction" : { "//0 data" : "Call with value to address A, then another call X, in the call X CREATE of account A, OOG -> revert call X.", "//1 data" : "d0g0 - double OOG, d0g1 - OOG inside subcall, d1g0 - OOG after subcall, d1g1 - no OOG", "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000ea60", ":raw 0x000000000000000000000000000000000000000000000000000000000001ea60" ], "gasLimit" : [ "110000", "170000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "3e180b1862f9d158abb5e519a6d8605540c23682", "value" : [ "1", "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/RevertInCreateInInitCreate2ParisFiller.json ================================================ { "RevertInCreateInInitCreate2Paris" : { "_info" : { "comment" : "RevertInCreateInInit for CREATE2" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "network" : [">=Cancun=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1", "storage" : { "0x00" : "0x0c", "0x01" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "// code" : "{ [[0]] 1 (REVERT 0 1) [[1]] 12 }", "code" : "{ (MSTORE 0 0x600160005560016000fd6011600155 ) [[1]](CREATE2 1 17 15 0) [[0]] 12 }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x600160005560016000fe6011600155" ], "gasLimit" : [ "460000", "70000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/RevertOpcodeInCreateReturnsCreate2Filler.json ================================================ { "RevertOpcodeInCreateReturnsCreate2" : { "_info" : { "comment" : "RevertOpcodeInCreateReturns for CREATE2" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x20" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (CREATE2 0 0 (lll (seq (mstore 0 0x112233) (revert 0 32) (STOP)) 0) 0) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCreate2/call_outsize_then_create2_successful_then_returndatasizeFiller.json ================================================ { "call_outsize_then_create2_successful_then_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "0x0aabbccdd5c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0x0aabbccdd5c57f15886f9b263e2f6d2d6c7b5ec6 0 0 0 0 0x20) (CREATE2 0 0 (lll (seq (mstore 0 0x112233) (RETURN 0 32) (STOP) ) 0) 0) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/call_then_create2_successful_then_returndatasizeFiller.json ================================================ { "call_then_create2_successful_then_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xc0c06666fad9e52251740536e21fc0f3db0e0fa0" : { "code" : "0x0000000000000000000000000000000000000000000000000000000000112233" }, "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "0x0aabbccdd5c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32) (STOP) ) }", "nonce" : "0x00", "storage" : { } }, "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0x0aabbccdd5c57f15886f9b263e2f6d2d6c7b5ec6 0 0 0 0 0) (CREATE2 0 0 (lll (seq (mstore 0 0x112233) (RETURN 0 32) (STOP) ) 0) 0) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2InitCodesFiller.json ================================================ { "create2InitCodes" : { "_info" : { "comment" : "testing different byte opcodes inside create2 init code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "9ccb06046c674d1a423c968d7998235bc33d40c1" : { "nonce" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0x9ccb06046c674d1a423c968d7998235bc33d40c1" } } } }, { "indexes" : { "data" : [1,2,3], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : [4], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "d46f8d2a93844fb23d8a2803a615f3d00849b8ab" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : [5], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "adf52aafb61364f699f9b15ee605ef82dca7f53d" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0xadf52aafb61364f699f9b15ee605ef82dca7f53d" } } } }, { "indexes" : { "data" : [6], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "adf52aafb61364f699f9b15ee605ef82dca7f53d" : { "shouldnotexist" : "1" }, "0000000000000000000000000000000000000001" : { "balance" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0xadf52aafb61364f699f9b15ee605ef82dca7f53d" } } } }, { "indexes" : { "data" : [7], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x52b620d9a3fd03486496061138825a08b4da501f" : { "nonce" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0x52b620d9a3fd03486496061138825a08b4da501f" } } } }, { "indexes" : { "data" : [8], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "5210981ae8161a02a1b7e37452ae142aedc66ea3" : { "nonce" : "1", "balance" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0x5210981ae8161a02a1b7e37452ae142aedc66ea3" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (MSTORE8 0 0x00 ) (SSTORE 0 (CREATE2 0 0 1 0)) }", "{ (MSTORE8 0 0x56 ) (SSTORE 0 (CREATE2 0 0 1 0)) }", "{ (MSTORE8 0 0x01 ) (SSTORE 0 (CREATE2 0 0 1 0)) }", "{ (MSTORE8 0 0xf4 ) (SSTORE 0 (CREATE2 0 0 1 0)) }", "{ (MSTORE 0 0x6001600155600154600255 ) (SSTORE 0 (CREATE2 0 21 11 0)) }", "{ (MSTORE 0 0x6001ff ) (SSTORE 0 (CREATE2 0 29 3 0)) }", "{ (MSTORE 0 0x6001ff ) (SSTORE 0 (CREATE2 1 29 3 0)) }", "{ (SSTORE 0 (CREATE2 0 29 3 0)) }", "{ (MSTORE 0 0x60a9 ) (SSTORE 0 (CREATE2 1 30 2 0)) }" ], "gasLimit" : [ "800000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2SmartInitCodeFiller.json ================================================ { "create2SmartInitCode" : { "_info" : { "comment" : "create2SmartInitCode. create2 works different each time you call it" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0000000000000000000000000000000000000001" : { "balance" : "1" }, "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "nonce" : "0x02" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x1f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x01" : "0xd27e800c69122409ac5609fe4df903745f3988a0", "0x02" : "0" } }, "0xd27e800c69122409ac5609fe4df903745f3988a0" : { "nonce" : "1", "code" : "0x00000000000000000000", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "100", "//code" : "{ (if (EQ (SLOAD 1) 0) (seq (SSTORE 1 1) (SELFDESTRUCT 1)) (RETURN 0 10) ) }", "//code" : " 0x112233445566778899101112131415161718192021222324252627", "code" : "{ (MSTORE 0 0x600060015414601157600a6000f3601a565b60016001556001ff5b) [[1]](CREATE2 1 5 27 0) [[2]](CREATE2 1 5 27 0) }", "nonce" : "0x00", "storage" : { } }, "0x1f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "100", "//code" : "{ (if (EQ (SLOAD 1) 0) (seq (SSTORE 1 1) (RETURN 0 10)) (RETURN 0 10) ) }", "//code" : " 0x1122334455667788991011121314151617181920212223242526272829", "code" : "{ (MSTORE 0 0x600060015414601157600a6000f3601c565b6001600155600a6000f35b) [[1]](CREATE2 1 3 29 0) [[2]](CREATE2 1 5 27 0) }", "nonce" : "0x00", "storage" : { } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } }, "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "{ (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", ":raw 0x0000000000000000000000001f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" ], "gasLimit" : [ "0x061a80" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2callPrecompilesFiller.json ================================================ { "create2callPrecompiles" : { "_info" : { "comment" : "CALL precompiles during init code of CREATE2 contract " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0xf68e26002db0f9ca9b54367c57c25e474c581622" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0x3b9ea59b92545beb727022289665cf38fa462bae" : { "storage" : { "0x00" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d", "0x02" : "0x01" } } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0x7525f19e2970539fd2897357777a4c275175bcf5" : { "storage" : { "0x00" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31", "0x02" : "0x01" } } } }, { "indexes" : { "data" : 3, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0x0ee431db7c48fc10a9a56c909bfefa87661442fb" : { "storage" : { "0x00" : "0xf34578907f", "0x02" : "0x01" } } } }, { "indexes" : { "data" : 4, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0xbbd394930b408da783ee071ced240ece997bc8b2" : { "storage" : { "0x01" : "0x01", "0x02" : "0x162ead82cadefaeaf6e9283248fdf2f2845f6396f6f17c4d5a39f820b6f6b5f9" } } } }, { "indexes" : { "data" : 5, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0x2e3ec33a50ed32c2fcbef07a1bab8643db4dc670" : { "storage" : { "0x00" : "0x01", "0x02" : "0x00" } } } }, { "indexes" : { "data" : 6, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0xaa0ab87aa0e27e22e21671040c11f3537cdc7b3e" : { "storage" : { "0x00" : "0x01", "0x01" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x02" : "0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f" } } } }, { "indexes" : { "data" : 7, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "0xab7cf4e4980432e892fa512ec2b9e8532c23ac15" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x0b" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4", "0x14" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x15" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "addf5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "code" : "{(MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) [[0]](CALLCODE 500000 6 0 0 128 200 64) [[1]] (MLOAD 200) [[2]] (MLOAD 232) }", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "//code" : "ECMUl ChecK", "code" : "{(MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) (MSTORE 128 (CALLDATALOAD 128)) (MSTORE 160 (CALLDATALOAD 160)) (MSTORE 192 (CALLDATALOAD 192)) [[0]](CALLCODE 500000 6 0 0 128 300 64) [[1]](CALLCODE 500000 7 0 128 96 400 64) [[10]] (MLOAD 300) [[11]] (MLOAD 332) [[20]] (MLOAD 400) [[21]] (MLOAD 432) [[2]] (EQ (SLOAD 10) (SLOAD 20)) [[3]] (EQ (SLOAD 11) (SLOAD 21))}", "nonce" : "0", "storage" : { } } }, "transaction" : { "//data" : [ "0 - call ecrevocer (1) from init code of create2", "1 - call sha256 (2) from init code of create2", "2 - call REMPID160", "3 - call Identity", "4 - call Modexp", "5 - call paring", "6 - call addition on ec", "7 - call ecmul" ], "data" : [ "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq (MSTORE 5 0xf34578907f) [[ 2 ]] (CALL 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq [[ 2 ]] (CALL 600 3 0 0 0 0 32) [[ 0 ]] (MLOAD 0) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0xf34578907f) [[ 2 ]] (CALL 500 4 0 0 37 0 32) [[ 0 ]] (MLOAD 0) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000001) (MSTORE 32 0x0000000000000000000000000000000000000000000000000000000000000020) (MSTORE 64 0x0000000000000000000000000000000000000000000000000000000000000020) (MSTORE 96 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc) (MSTORE 128 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc) (MSTORE 150 0x2f00000000000000000000000000000000000000000000000000000000000000)[[ 1 ]] (CALLCODE (GAS) 5 0 0 151 1000 32) [[ 2 ]](MLOAD 1000) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000001) [[ 2 ]](CALL 600000 6 0 0 256 0 32) [[ 0 ]] (MLOAD 0) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2) (MSTORE 32 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba) (MSTORE 64 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286) (MSTORE 96 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4) (CALLCODE 500000 0xaddf5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 128 0 0) (STOP) ) 0) 0) (STOP) }", "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286) (MSTORE 32 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4) (MSTORE 64 0x0000000000000000000000000000000000000000000000000000000000000000) (MSTORE 96 0x0000000000000000000000000000000000000000000000000000000000000000) (MSTORE 128 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286) (MSTORE 160 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ) (MSTORE 192 0x0000000000000000000000000000000000000000000000000000000000000001) (CALLCODE 500000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 224 0 0) (STOP) ) 0) 0) (STOP) }" ], "gasLimit" : [ "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2checkFieldsInInitcodeFiller.json ================================================ { "create2checkFieldsInInitcode" : { "_info" : { "comment" : "Check opcode values in create2 init code. Create2 called with different call types. CREATE2 inside CRETE2 inside CALL, CALLCODE, DELEGATECALL, STATICCALL << test values of SENDER,address and so on." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,4], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xdaf9f53e732f21fe517e624b6dfe92dc8d0e51e0" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0xdaf9f53e732f21fe517e624b6dfe92dc8d0e51e0", "0x01" : "0", "0x02" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03" : "0xf000000000000000000000000000000000000000", "0x04" : "0", "0x05" : "0", "0x06" : "0x23", "0x07" : "10" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xdfad1c567f12d848fabb8d9d8872c42e7aa81e95" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0xdfad1c567f12d848fabb8d9d8872c42e7aa81e95", "0x01" : "0", "0x02" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03" : "0x2000000000000000000000000000000000000000", "0x04" : "0", "0x05" : "0", "0x06" : "0x23", "0x07" : "10" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x3ff16480055c6ccc070257c61fa902448f4ae111" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0x3ff16480055c6ccc070257c61fa902448f4ae111", "0x01" : "0", "0x02" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03" : "0x3000000000000000000000000000000000000000", "0x04" : "0", "0x05" : "0", "0x06" : "0x23", "0x07" : "10" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : [3, 7], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 5, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x7ce21e3c16d63738cbbb697c919555c910504278" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0x7ce21e3c16d63738cbbb697c919555c910504278", "0x01" : "0", "0x02" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03" : "0x9d25fbabdeb081b9ecd0645b9b6aba8c7eb3821d", "0x04" : "0", "0x05" : "0", "0x06" : "0x23", "0x07" : "10" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 6, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xbb1b88ea45d33397f45583ca612adea3eb267318" : { "balance" : "0", "nonce" : "1", "storage" : { "0x00" : "0xbb1b88ea45d33397f45583ca612adea3eb267318", "0x01" : "0", "0x02" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x03" : "0x45dde7fbf9f1cf09e18c4e584ba93c82e83c8898", "0x04" : "0", "0x05" : "0", "0x06" : "0x23", "0x07" : "10" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x00", "code" : "{ (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CALL (GAS) 0xf000000000000000000000000000000000000000 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1100000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq (CALL (GAS) 0xf000000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) 0) 0) (STOP) }", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CALLCODE (GAS) 0xf000000000000000000000000000000000000000 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "2200000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq (CALLCODE (GAS) 0xf000000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) 0) 0) (STOP) }", "nonce" : "0", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (DELEGATECALL (GAS) 0xf000000000000000000000000000000000000000 0 0 0 0) (STOP) }", "nonce" : "0", "storage" : { } }, "3300000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq (DELEGATECALL (GAS) 0xf000000000000000000000000000000000000000 0 0 0 0) (STOP) ) 0) 0) (STOP) }", "nonce" : "0", "storage" : { } }, "4000000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (STATICCALL (GAS) 0xf200000000000000000000000000000000000000 0 0 0 256) [[10]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "4400000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq (STATICCALL (GAS) 0xf200000000000000000000000000000000000000 0 0 0 256) [[10]] (MLOAD 0) (STOP) ) 0) 0 ) }", "nonce" : "0", "storage" : { } }, "f000000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq [[0]] (ADDRESS) [[1]] (BALANCE (ADDRESS)) [[2]] (ORIGIN) [[3]] (CALLER) [[4]] (CALLVALUE) [[5]] (CALLDATASIZE) [[6]] (CODESIZE) [[7]] (GASPRICE) (STOP) ) 0) 0) (STOP) }", "nonce" : "0", "storage" : { } }, "f200000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq [0] (ADDRESS) [32] (BALANCE (ADDRESS)) [64] (ORIGIN) [96] (CALLER) [128] (CALLVALUE) [160] (CALLDATASIZE) [192] (CODESIZE) [224] (GASPRICE) (RETURN 0 256) (STOP) ) 0) 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000002000000000000000000000000000000000000000", ":raw 0x0000000000000000000000003000000000000000000000000000000000000000", ":raw 0x0000000000000000000000004000000000000000000000000000000000000000", ":raw 0x0000000000000000000000001100000000000000000000000000000000000000", ":raw 0x0000000000000000000000002200000000000000000000000000000000000000", ":raw 0x0000000000000000000000003300000000000000000000000000000000000000", ":raw 0x0000000000000000000000004400000000000000000000000000000000000000" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionBalanceFiller.json ================================================ { "create2collisionBalance" : { "_info" : { "comment" : "create2 generates an account that already exists and has balance != 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "nonce" : "1", "code" : "0x", "storage" : { "0x01" : "1" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "nonce" : "1", "code" : "0x6001600155", "storage" : {} }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 3, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "2", "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0", "nonce" : "2" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "code" : "0x", "nonce" : "0", "storage" : { } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "code" : "0x", "nonce" : "0", "storage" : { } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (CREATE2 0 0 0 0) }", "{ (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) }", "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }", "{ (CREATE2 1 0 0 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionCode2Filler.json ================================================ { "create2collisionCode2" : { "_info" : { "comment" : "collision with the contract that already has the same init code that we are about to create" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "fce41d047b4a1d4450382dcc29ec7e5fedc5f9a3" : { "balance" : "0", "nonce" : "1", "code" : "0x010203" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "code" : "" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "fce41d047b4a1d4450382dcc29ec7e5fedc5f9a3" : { "balance" : "0", "nonce" : "1", "code" : "0x010203" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "code" : "" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "0xfce41d047b4a1d4450382dcc29ec7e5fedc5f9a3" : { "balance" : "0x00", "code" : ":raw 0x010203", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ "{ (MSTORE 0 0x620102036000526003601df3) (CREATE2 0 20 12 0) }", "{ (MSTORE 0 0x620102036000526003601df3) (CREATE2 1 20 12 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionCodeFiller.json ================================================ { "create2collisionCode" : { "_info" : { "comment" : "create2 generates an account that already exists and has not empty code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "0", "nonce" : "0", "code" : "0x010203", "storage" : {} }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "0", "nonce" : "0", "code" : "0x010203", "storage" : {} }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "0", "nonce" : "0", "code" : "0x010203", "storage" : {} }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "code" : "" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "0", "code" : ":raw 0x010203", "nonce" : "0", "storage" : { } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "0", "code" : ":raw 0x010203", "nonce" : "0", "storage" : { } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "0", "code" : ":raw 0x010203", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (CREATE2 0 0 0 0) }", "{ (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) }", "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionNonceFiller.json ================================================ { "create2collisionNonce" : { "_info" : { "comment" : "create2 generates an account that already exists and has nonce != 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "0", "code" : "0x", "nonce" : "1", "storage" : { } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "0", "code" : "0x", "nonce" : "1", "storage" : { } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "0", "code" : "0x", "nonce" : "1", "storage" : { } } }, "transaction" : { "data" : [ "{ (CREATE2 0 0 0 0) }", "{ (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) }", "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionSelfdestructed2Filler.json ================================================ { "create2collisionSelfdestructed2" : { "_info" : { "comment" : "A contract which performs SUICIDE, and is then attempted to be recreated (different code, same init-code) during the same transaction. This ought to fail, since the code is not cleaned out until after the transaction is ended." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0 }, "network" : [">=Cancun"], "result" : { "fce41d047b4a1d4450382dcc29ec7e5fedc5f9a3" : { "balance" : "0", "nonce" : "0", "code" : "0x6010ff00", "storage" : {} }, "0000000000000000000000000000000000000010" : { "balance" : "0x01" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1 }, "network" : [">=Cancun"], "result" : { "cff64f4c5df8f436c4f2c1af4b2e3f9e3004c779" : { "balance" : "0", "nonce" : "1" }, "0000000000000000000000000000000000000010" : { "balance" : "0x01" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "fce41d047b4a1d4450382dcc29ec7e5fedc5f9a3" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "0xcff64f4c5df8f436c4f2c1af4b2e3f9e3004c779" : { "balance" : "1", "code" : ":raw 0x6010ff", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "//data" : "0 - different code, 1 - same code", "data" : [ "{ (CALL 50000 0xfce41d047b4a1d4450382dcc29ec7e5fedc5f9a3 0 0 0 0 0) (MSTORE 0 0x620102036000526003601df3) (CREATE2 0 20 12 0) }", "{ (CALL 50000 0xcff64f4c5df8f436c4f2c1af4b2e3f9e3004c779 0 0 0 0 0) (MSTORE 0 0x626010ff6000526003601df3) (CREATE2 0 20 12 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionSelfdestructedFiller.json ================================================ { "create2collisionSelfdestructed" : { "_info" : { "comment" : "collision with address that has been selfdestructed in the same transaction" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "0", "nonce" : "0" }, "0000000000000000000000000000000000000010" : { "balance" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1 }, "network" : [">=Cancun"], "result" : { "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "0", "nonce" : "0" }, "0000000000000000000000000000000000000010" : { "balance" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 2 }, "network" : [">=Cancun"], "result" : { "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "0", "nonce" : "0" }, "0000000000000000000000000000000000000010" : { "balance" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 50000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0 0) (CREATE2 0 0 0 0) }", "{ (CALL 50000 0xaf3ecba2fe09a4f6c19f16a9d119e44e08c2da01 0 0 0 0 0) (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) }", "{ (CALL 50000 0xec2c6832d00680ece8ff9254f81fdab0a5a2ac50 0 0 0 0 0) (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionSelfdestructedOOGFiller.json ================================================ { "create2collisionSelfdestructedOOG" : { "_info" : { "comment" : "collision with address that has been selfdestructed in the same transaction but then OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "code" : "0x6010ff00" }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "code" : "0x6010ff00" }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "code" : "0x6010ff00" }, "0000000000000000000000000000000000000010" : { "shouldnotexist" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 50000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0 0) (CREATE2 0 0 0 0) (SSTORE 0 0x112233) }", "{ (CALL 50000 0xaf3ecba2fe09a4f6c19f16a9d119e44e08c2da01 0 0 0 0 0) (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) (SSTORE 0 0x112233)}", "{ (CALL 50000 0xec2c6832d00680ece8ff9254f81fdab0a5a2ac50 0 0 0 0 0) (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) (SSTORE 0 0x112233)}" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionSelfdestructedRevertFiller.json ================================================ { "create2collisionSelfdestructedRevert" : { "_info" : { "comment" : "collision with address that has been selfdestructed in the same transaction but then REVERT is called" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "code" : "0x6010ff00" }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "code" : "0x6010ff00" }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "code" : "0x6010ff00" }, "0000000000000000000000000000000000000010" : { "shouldnotexist" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "1", "code" : "{ (SELFDESTRUCT 0x10) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 50000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0 0) (CREATE2 0 0 0 0) (MSTORE 0 0x112233) (REVERT 29 3) }", "{ (CALL 50000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0 0) (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) (MSTORE 0 0x112233) (REVERT 29 3) }", "{ (CALL 50000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0 0) (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) (MSTORE 0 0x112233) (REVERT 29 3) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2collisionStorageParisFiller.json ================================================ { "create2collisionStorageParis" : { "_info" : { "comment" : "create2 generates an account that already exists and has storage != 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "10", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "10", "nonce" : "0", "code" : "0x", "storage" : { "0x00" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "10", "nonce" : "0", "code" : "0x", "storage" : { "0x00" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1", "nonce" : "2", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "af3ecba2fe09a4f6c19f16a9d119e44e08c2da01" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "ec2c6832d00680ece8ff9254f81fdab0a5a2ac50" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "{ (CREATE2 0 0 0 0) }", "{ (MSTORE 0 0x6001600155) (CREATE2 0 27 5 0) }", "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE2 0 18 14 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/create2noCashFiller.json ================================================ { "create2noCash" : { "_info" : { "comment" : "create2 fails with not enough cash (endowment of a new account) + inside staticcall" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,2], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "100" }, "12aaefbc0350a026228076e5369e6ce148ce67be" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "0" }, "12aaefbc0350a026228076e5369e6ce148ce67be" : { "balance" : "101" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "e2b35478fdd26477cc576dd906e6277761246a3c" : { "balance" : "100", "code" : "{ (CREATE2 101 0 0 0) }", "nonce" : "0", "storage" : {} } }, "transaction" : { "data" : [ "{ (CALL 150000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0 0) }", "{ (CALL 150000 0xe2b35478fdd26477cc576dd906e6277761246a3c 1 0 0 0 0) }", "{ (STATICCALL 150000 0xe2b35478fdd26477cc576dd906e6277761246a3c 0 0 0 0) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/returndatacopy_0_0_following_successful_createFiller.json ================================================ { "returndatacopy_0_0_following_successful_create" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x00" } }, "0x75579e0e990d8361c48b86c1b57686589df3264a" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (create2 0 0 (lll (seq (SSTORE 0 1) (STOP) ) 0) 0) (RETURNDATACOPY 0 0 0) (SSTORE 0 0) (STOP) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/returndatacopy_afterFailing_createFiller.json ================================================ { "returndatacopy_afterFailing_create" : { "_info" : { "comment" : "Returndatacopy after failing create case due to 0xfd code." }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x20", "0x01" : "0x02" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (MSTORE 0 0x600260005260206000fd) (create2 0 22 10 0) (SSTORE 0 (RETURNDATASIZE)) (RETURNDATACOPY 0 0 32) (SSTORE 1 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/returndatacopy_following_createFiller.json ================================================ { "returndatacopy_following_create" : { "_info" : { "comment" : "Check that create2 does not fill returndata buffer with its return opcode." }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x1f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "1aabbccdd5c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0x00", "storage" : { } }, "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (CREATE2 0 0 (lll (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) 0) 0) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "1f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (create2 0 0 (lll (STOP) 0) 0) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", ":raw 0x0000000000000000000000001f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x1aabbccdd5c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/returndatacopy_following_revert_in_createFiller.json ================================================ { "returndatacopy_following_revert_in_create" : { "_info" : { "comment" : "returndatacopy_following_revert_in_create for CREATE2" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (CREATE2 0 0 (lll (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (REVERT 0 32) (STOP) ) 0) 0) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/returndatacopy_following_successful_createFiller.json ================================================ { "returndatacopy_following_successful_create" : { "_info" : { "comment" : "returndatacopy_following_successful_create for CREATE2" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0c00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x02" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (create2 0 0 (lll (seq (STOP)) 0) 0) (RETURNDATACOPY 0 1 32) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreate2/returndatasize_following_successful_createFiller.json ================================================ { "returndatasize_following_successful_create" : { "_info" : { "comment" : "returndatasize_following_successful_create for create2" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "code" : "{ (seq (CREATE2 0 0 (lll (seq (mstore 0 0x112233) (RETURN 0 32)) 0) 0) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE2_CallDataFiller.yml ================================================ CREATE2_CallData: _info: comment: | Test if calldata is empty in initcode context. env: currentCoinbase: a94f5374fce5edbc8e2a8697c15331677e6ebf0b currentDifficulty: 1 currentGasLimit: 1000000 currentNumber: 1 currentTimestamp: 1000 pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 balance: 100000000000000 storage: { } code: '' # Contract creator. 000000000000000000000000000000000c5ea705: nonce: 0 balance: 0 storage: { } code: | :yul berlin object "C" { code { let s := datasize("initcode") let o := dataoffset("initcode") codecopy(0, o, s) let r := create2(0, 0, s, 0) sstore(0, r) stop() } object "initcode" { code { sstore(0, calldataload(0)) calldatacopy(0, 0, 64) return(0, msize()) } } } transaction: data: [ '' ] gasLimit: [ 100000 ] gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 000000000000000000000000000000000c5ea705 value: [ 0 ] expect: - network: - ">=Cancun" result: 000000000000000000000000000000000c5ea705: storage: 0: 7f8330ad7bc2afe0dffb2fdc76bbad8bc326296a 7f8330ad7bc2afe0dffb2fdc76bbad8bc326296a: code: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE2_RefundEFFiller.yml ================================================ CREATE2_RefundEF: _info: comment: | Test combination of gas refund and EF-prefixed CREATE2 failure. env: currentCoinbase: a94f5374fce5edbc8e2a8697c15331677e6ebf0b currentDifficulty: 1 currentGasLimit: 1000000 currentNumber: 1 currentTimestamp: 1000 pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 balance: 100000000000000 storage: { } code: '' # Provides gas refund. 00000000000000000000000000000000005ef94d: nonce: 0 balance: 0 storage: 0: 1 code: | :yul london { sstore(0,0) } # Contract creator. 000000000000000000000000000000000c5ea705: nonce: 0 balance: 0 storage: { } code: | :yul london object "C" { code { let s := datasize("initcode") let o := dataoffset("initcode") codecopy(0, o, s) let r := create2(0, 0, s, 0) sstore(0, r) stop() } object "initcode" { code { // call gas refund provider let r := call(50000, 0x5ef94d, 0, 0, 0, 0, 0) // return 0xEF mstore8(0,0xEF) return(0,1) } } } transaction: data: [ '' ] gasLimit: [ 100000 ] gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 000000000000000000000000000000000c5ea705 value: [ 0 ] expect: - network: - ">=Cancun" result: 00000000000000000000000000000000005ef94d: storage: 0: 1 be8f87148d0767989cce2e6a6a5d91c7d0c840e0: shouldnotexist: true ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_ContractRETURNBigOffsetFiller.yml ================================================ # Use return with big offset, causes BN error in ethereumjs-vm --- CREATE_ContractRETURNBigOffset: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '1' 6295ee1b4f6dd65047762f924ecd367c17eabf8f: shouldnotexist: '1' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '10000000000000' code: '' nonce: '' storage: {} transaction: data: #- { (RETURN 0x074ac2 0x010000) } #- { (RETURN 0x074ac2 0x051eb8) } #- { (RETURN 0x074ac2 0x051eb9) } #- { (RETURN 0x074ac2 0x0d15bc) } - ':raw 0x6201000062074ac2f3' - ':raw 0x62051eb862074ac2f3' - ':raw 0x62051eb962074ac2f3' - ':raw 0x620d15bc62074ac2f3' gasLimit: - '0x1000000' gasPrice: '0x0a' nonce: '0x00' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: '' value: - '0' ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_ContractSSTOREDuringInitFiller.json ================================================ { "CREATE_ContractSSTOREDuringInit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage": { "0x00": "0xff" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{ (SSTORE 0 0xff) }", "data" : [ ":raw 0x60ff600055" ], "gasLimit" : [ "150000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EContractCreateEContractInInit_TrFiller.json ================================================ { "CREATE_EContractCreateEContractInInit_Tr" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "0x02" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{(CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) (CREATE 0 0 32) }", "data" : [ ":raw 0x6000600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60f150602060006000f0" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EContractCreateNEContractInInitOOG_TrFiller.json ================================================ { "CREATE_EContractCreateNEContractInInitOOG_Tr" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "0x02" }, "a42676447b7cedfa5fde894d1d3df24aab362701" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x00" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a42676447b7cedfa5fde894d1d3df24aab362701" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{(CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) (MSTORE 0 0x64600c6000556000526005601bf3) (CREATE 0 18 14)}", "data" : [ ":raw 0x6000600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60f1506d64600c6000556000526005601bf3600052600e60126000f0" ], "gasLimit" : [ "160000", "60000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EContractCreateNEContractInInit_TrFiller.json ================================================ { "CREATE_EContractCreateNEContractInInit_Tr" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "0x02" }, "64e2ebd6405af8cb348aec519084d3fff42ebba6" : { "code" : "0x600c600055" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{(CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) (MSTORE 0 0x64600c6000556000526005601bf3) (CREATE 0 18 14)}", "data" : [ ":raw 0x6000600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60f1506d64600c6000556000526005601bf3600052600e60126000f0" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EContract_ThenCALLToNonExistentAccFiller.json ================================================ { "CREATE_EContract_ThenCALLToNonExistentAcc" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "//comment" : "CREATE price changed in Shanghai", "0x02" : "0x07abf8", "0x03" : "0x01", "0x64" : "0x06f50b" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" }, "e1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CREATE 0 0 32) [[2]](GAS) [[3]] (CALL 60000 0xe1ecf98489fa9ed60a664fc4998db699cfa39d40 0 0 0 0 0) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractAndCallIt_0weiFiller.json ================================================ { "CREATE_EmptyContractAndCallIt_0wei" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x02" : "0x07abf8", "0x03" : "0x01", "0x64" : "0x06fe6b" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CREATE 0 0 32) [[2]](GAS) [[3]] (CALL 60000 (SLOAD 1) 0 0 0 0 0) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractAndCallIt_1weiFiller.json ================================================ { "CREATE_EmptyContractAndCallIt_1wei" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x02" : "0x07abf8", "0x03" : "0x01", "0x64" : "0x06e43f" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "0x01", "nonce" : "0x01" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CREATE 0 0 32) [[2]](GAS) [[3]](CALL 60000 (SLOAD 1) 1 0 0 0 0) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractFiller.json ================================================ { "CREATE_EmptyContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "//comment" : "CREATE price changed in Shanghai", "//comment" : "Due to eip-3860 (https://eips.ethereum.org/EIPS/eip-3860) pay extra 2 gas for each 32 bytes of initcode", "0x64" : "0x07abf8" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CREATE 0 0 32) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractWithBalanceFiller.json ================================================ { "CREATE_EmptyContractWithBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x64" : "0x07abf8" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "0x01" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CREATE 1 0 32) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_0weiFiller.json ================================================ { "CREATE_EmptyContractWithStorageAndCallIt_0wei" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x02" : "0x06f4f0", "0x03" : "0x01", "0x64" : "0x064763" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "// code" : "{ [[0]]12 (CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0)}", "code" : "{ [[0]](GAS) (MSTORE 0 0x600c6000556000600060006000600073c94f5374fce5edbc8e2a8697c1533167) (MSTORE 32 0x7e6ebf0b61ea60f1000000000000000000000000000000000000000000000000) [[1]] (CREATE 0 0 64) [[2]] (GAS) [[3]] (CALL 60000 (SLOAD 1) 0 0 0 0 0) [[100]] (GAS) }", "storage": { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_1weiFiller.json ================================================ { "CREATE_EmptyContractWithStorageAndCallIt_1wei" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x02" : "0x06f4f0", "0x03" : "0x01", "0x64" : "0x062d37" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "0x01", "storage" : { "0x00" : "0x0c" } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "nonce" : "0", "// code" : "{ [[0]]12 (CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0)}", "code" : "{ [[0]](GAS) (MSTORE 0 0x600c6000556000600060006000600073c94f5374fce5edbc8e2a8697c1533167) (MSTORE 32 0x7e6ebf0b61ea60f1000000000000000000000000000000000000000000000000) [[1]] (CREATE 0 0 64) [[2]] (GAS) [[3]] (CALL 60000 (SLOAD 1) 1 0 0 0 0) [[100]] (GAS) }", "storage": { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_EmptyContractWithStorageFiller.json ================================================ { "CREATE_EmptyContractWithStorage" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x64" : "0x06f4f0" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "// code" : "{ [[0]]12 (CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0)}", "code" : "{ [[0]](GAS) (MSTORE 0 0x600c6000556000600060006000600073c94f5374fce5edbc8e2a8697c1533167) (MSTORE 32 0x7e6ebf0b61ea60f1000000000000000000000000000000000000000000000000) [[1]] (CREATE 0 0 64) [[100]] (GAS) }", "storage": { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_HighNonceFiller.yml ================================================ # The test calls CREATE from an account with max allowed nonce. CREATE_HighNonce: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 # use byzantium here because solc introduces SHL which is not supported on first evm revisions code: | :yul byzantium { // initcode: { return(0, 1) } mstore(0, 0x60016000f3000000000000000000000000000000000000000000000000000000) sstore(0, create(0, 0, 5)) sstore(1, 1) let noOptimization := msize() } nonce: '0xffffffffffffffff' storage: {} transaction: data: - '' gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '0xffffffffffffffff' storage: '0': 0 '1': 1 04e9a8460199e670ffb592f93a2f74bdcb44b0bd: 'shouldnotexist': '1' ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_HighNonceMinus1Filler.yml ================================================ # The test calls CREATE from an account with max allowed nonce - 1, nonce gets maximum value as a result. CREATE_HighNonceMinus1: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000 code: '' nonce: 0 storage: {} b94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0 # use byzantium here because solc introduces SHL which is not supported on first evm revisions code: | :yul byzantium { // initcode: { return(0, 1) } mstore(0, 0x60016000f3000000000000000000000000000000000000000000000000000000) sstore(0, create(0, 0, 5)) sstore(1, 1) let noOptimization := msize() } nonce: '0xfffffffffffffffe' storage: {} transaction: data: - '' gasLimit: - 16777216 gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' value: - 0 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 b94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '0xffffffffffffffff' storage: '0': '0xd061b08a84ebc70fe797f9bd62f4269ef8274a13' '1': 1 d061b08a84ebc70fe797f9bd62f4269ef8274a13: code: '0x00' ================================================ FILE: tests/static/state_tests/stCreateTest/CREATE_empty000CreateinInitCode_TransactionFiller.json ================================================ { "CREATE_empty000CreateinInitCode_Transaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "0x02" }, "a42676447b7cedfa5fde894d1d3df24aab362701" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{(CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) (CREATE 0 0 0) }", "data" : [ ":raw 0x6000600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60f150600060006000f0" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CodeInConstructorFiller.yml ================================================ CodeInConstructor: env: currentCoinbase: ba5e0000ba5e0000ba5e0000ba5e0000ba5e0000 currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Record information 000000000000000000000000000000000000da7a: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'counterLoc 0) (def 'counterVal @@counterLoc) [[counterVal]] $0 [[counterLoc]] (+ counterVal 1) } nonce: 0 storage: 0: 1 cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'dataLoc 0x260) ; The type of CREATE to use (def 'createType $ 4) ; Other constants (def 'NOP 0) ; No OPeration ; Send data to 0x00da7a (def 'sendData (data) { [dataLoc] data (call 0xFFFFFF 0xda7a 0 dataLoc 0x20 0 0) }) ; Buffer length (use for constructor and contract) (def 'bufLength 0x100) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Create the contract and a constructor to pass to CREATE[2] ; ; [contractLength] (lll (sstore 0 0xFF) contractCode ) [constructorLength] (lll { ; copy the contract from code to memory (codecopy contractCode contractCode bufLength) ; Send the data to 0x00da7a so we'll be able to ; check it in the expect: section ; [[2]] PC ; [[3]] address of new contract ; [[4]] codesize ; [[5]] extcodeize ; [[6]] first word from codecopy ; [[7]] first word from extcodecopy ; [[8]] PC (sendData (pc)) (sendData (address)) (sendData (codesize)) (sendData (extcodesize (address))) (codecopy 0x100 0 0x20) (sendData @0x100) (extcodecopy (address) 0x100 0 0x20) (sendData @0x100) (sendData (pc)) ; Return actual code (return contractCode (- (codesize) bufLength)) } constructorCode ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Actually create the contract ; ; The buffer size lets us send the contract code as part of the ; constructor code [addr] (if (= createType 1) (create 0 constructorCode (+ bufLength @contractLength)) (create2 0 constructorCode (+ bufLength @contractLength) 0x5a17) ) } nonce: '0' storage: {} # User account a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Parameters: # createType 1 - CREATE 2 - CREATE2 - :abi fun(uint) 1 - :abi fun(uint) 2 gasLimit: - 0x900000 gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: # CREATE - indexes: data: !!int 0 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: 000000000000000000000000000000000000da7a: storage: 0: 8 # PC before sending data 1: 0x0A # ADDRESS of new contract 2: 0x8af6a7af30d840ba137e8f3f34d54cfb8beba6e2 # CODESIZE, size of constructor 3: 0x106 # EXTCODESIZE, zero 4: 0 # CODECOPY, gives constructor code (in this case, first word) 5: 0x610100610100610100395861026052600060006020610260600061da7a62ffff # EXTCODECOPY, gives zero 6: 0 # PC after sending data 7: 0xB8 # CREATE2 - indexes: data: !!int 1 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: 000000000000000000000000000000000000da7a: storage: 0: 8 # PC before sending data 1: 0x0A # ADDRESS of new contract 2: 0x33c409678a4289f0184c95c627ba09da2daeaa46 # CODESIZE, size of constructor 3: 0x106 # EXTCODESIZE, zero 4: 0 # CODECOPY, gives constructor code (in this case, first word) 5: 0x610100610100610100395861026052600060006020610260600061da7a62ffff # EXTCODECOPY, gives zero 6: 0 # PC after sending data 7: 0xB8 ================================================ FILE: tests/static/state_tests/stCreateTest/CreateAddressWarmAfterFailFiller.yml ================================================ CreateAddressWarmAfterFail: _info: comment: | Invokes failing CREATE (because initcode fails) and checks if the create address is considered warm in the follow up call as required by EIP-2929. Addresses taken from https://toolkit.abdk.consulting/ethereum#contract-address Written primarily by Paweł Bylica (@chfast). Somewhat modified by Ori (@qbzzt) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 1 currentGasLimit: 3000000000 currentNumber: 1 currentTimestamp: 999 pre: # Tx sender a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 balance: 1000000000001 storage: {} code: '' 00000000000000000000000000000000000c0deC: nonce: 0 # Need extra gas to be able to send some to the "random" address # And to send to the created address twice balance: 0x1000 storage: {} code: | :yul london object "C" { code { let failType := calldataload(4) let initcode_size // The return values of various actions. Done twice to see if there is a difference let create_1 := 0 let call_created_1 := 2 let call_created_2 := 3 let call_empty_1 := 4 let call_empty_2 := 5 // The costs of those operations let create_1_cost := 10 let call_created_1_cost := 12 let call_created_2_cost := 13 let call_empty_1_cost := 14 let call_empty_2_cost := 15 // Make the storage cells we use here are warm sstore(create_1, 0xdead60A7) sstore(call_created_1, 0xdead60A7) sstore(call_created_2, 0xdead60A7) sstore(call_empty_1, 0xdead60A7) sstore(call_empty_2, 0xdead60A7) sstore(call_created_1_cost, 0xdead60A7) sstore(call_created_2_cost, 0xdead60A7) sstore(call_empty_1_cost, 0xdead60A7) sstore(call_empty_2_cost, 0xdead60A7) let addrEmpty := 0xd4e7ae083132925a4927c1f5816238ba17b82a00 // The address where the contract should have been created had things worked out // Can be calculated at https://toolkit.abdk.consulting/ethereum#contract-address let addrCreated switch failType case 0 { // REVERT inside the constructor addrCreated := 0xd4e7ae083132925a4927c1f5816238ba17b82a65 initcode_size := datasize("revert-constructor") datacopy(0, dataoffset("revert-constructor"), initcode_size) sstore(create_1, create(0, 0, initcode_size)) } case 10 { // REVERT inside the constructor, CREATE2 addrCreated := 0x43255eE039968E0254887FC8c7172736983d878C //initcode_size := datasize("revert-constructor") //datacopy(0, dataoffset("revert-constructor"), initcode_size) // comment protection from solc version changing the bytes initcode_size := 5 mstore(0, 0x60006000fd000000000000000000000000000000000000000000000000000000) sstore(create_1, create2(0, 0, initcode_size, 0)) } case 1 { // Constructor returns 0x6001 bytes, >max contract size addrCreated := 0xd4e7ae083132925a4927c1f5816238ba17b82a65 initcode_size := datasize("code-too-big") datacopy(0, dataoffset("code-too-big"), initcode_size) sstore(create_1, create(0, 0, initcode_size)) } case 11 { // Constructor returns 0x6001 bytes, >max contract size addrCreated := 0x014001fDbeDE82315F4B8C2a7D45E980A8a4A12e initcode_size := datasize("code-too-big") datacopy(0, dataoffset("code-too-big"), initcode_size) sstore(create_1, create2(0, 0, initcode_size, 0)) } case 2 { // Invalid opcode in constructor addrCreated := 0xd4e7ae083132925a4927c1f5816238ba17b82a65 initcode_size := datasize("invalid") datacopy(0, dataoffset("invalid"), initcode_size) sstore(create_1, create(0, 0, initcode_size)) } case 12 { // Invalid opcode in constructor addrCreated := 0xA13d43586820E5D97a3Fd1960625d537c86DC4E7 //initcode_size := datasize("invalid") //datacopy(0, dataoffset("invalid"), initcode_size) //sstore(create_1, create2(0, 0, initcode_size, 0)) // comment protection from solc version changing the bytes initcode_size := 6 mstore(0, 0xfe60106000f30000000000000000000000000000000000000000000000000000) sstore(create_1, create2(0, 0, initcode_size, 0)) } case 3 { // Out of gas (due to constructor returning a huge contract) // We need it to be a called contract // so the transaction will be overall successful addrCreated := 0xa5a6a95fd9554f15ab6986a57519092be2095125 // gas amount calculated to cause the CREATE to fail sstore(create_1, call(0x7000, 0xC0DE1006, 0, 0, 0, 0, 0)) } case 4 { // OOG after the CREATE // We need it to be a called contract // so the transaction will be overall successful addrCreated := 0xa5a6a95fd9554f15ab6986a57519092be2095125 // gas amount calculated to cause failure after the CREATE sstore(create_1, call(0x10000, 0xC0DE1006, 0, 0, 0, 0, 0)) } case 5 { // Nonce too high to create another contract addrCreated := 0xB2050fc27aB6d6D42dc0CE6f7C0BF9481a4c3Fc3 sstore(create_1, call(0x10000, 0xC0DEFFFF, 0, 0, 0, 0, 0)) } case 13 { // Out of gas (due to constructor returning a huge contract) // We need it to be a called contract // so the transaction will be overall successful addrCreated := 0xd70dF326038a3c7cA8FAc785a99162BFe75CCc46 // gas amount calculated to cause the CREATE to fail sstore(create_1, call(0x7000, 0x20C0DE1006, 0, 0, 0, 0, 0)) } case 14 { // OOG after the CREATE2 // We need it to be a called contract // so the transaction will be overall successful addrCreated := 0xd70dF326038a3c7cA8FAc785a99162BFe75CCc46 // gas amount calculated to cause failure after the CREATE sstore(create_1, call(0x10000, 0x20C0DE1006, 0, 0, 0, 0, 0)) } case 6 { // Creating a contract that starts with 0xEF, which is not allowed EIP-3541 addrCreated := 0xd4e7ae083132925a4927c1f5816238ba17b82a65 initcode_size := datasize("start-ef") datacopy(0, dataoffset("start-ef"), initcode_size) sstore(create_1, create(0, 0, initcode_size)) } case 16 { // Create2 a contract that starts with 0xEF, which is not allowed EIP-3541 addrCreated := 0x562D97e3E4d6d3C6e791EA64bB73d820871Aa219 initcode_size := datasize("start-ef") datacopy(0, dataoffset("start-ef"), initcode_size) sstore(create_1, create2(0, 0, initcode_size, 0)) } case 7 { // Successful create. addrCreated := 0xd4e7ae083132925a4927c1f5816238ba17b82a65 initcode_size := datasize("success") datacopy(0, dataoffset("success"), initcode_size) sstore(create_1, create(0, 0, initcode_size)) } case 17 { // Successfully CREATE2 addrCreated := 0xf7fef4b66b1570a057d7d5cec5c58846befa5b5c initcode_size := datasize("success") datacopy(0, dataoffset("success"), initcode_size) sstore(create_1, create2(0, 0, initcode_size, 0x5A17)) } default { revert(0,0) } // Not supposed to ever happen // Call the create address and measure the gas cost sstore(call_created_1_cost, gas()) sstore(call_created_1, call(0, addrCreated, callvalue(), 0, 0, 0, 0)) sstore(call_created_1_cost, sub(sload(call_created_1_cost), gas())) // Call the create address a second time and measure the gas cost sstore(call_created_2_cost, gas()) sstore(call_created_2, call(0, addrCreated, callvalue(), 0, 0, 0, 0)) sstore(call_created_2_cost, sub(sload(call_created_2_cost), gas())) // Call a empty (cold) address and measure the gas cost sstore(call_empty_1_cost, gas()) sstore(call_empty_1, call(0, addrEmpty, callvalue(), 0, 0, 0, 0)) sstore(call_empty_1_cost, sub(sload(call_empty_1_cost), gas())) // Call the same address again sstore(call_empty_2_cost, gas()) sstore(call_empty_2, call(0, addrEmpty, callvalue(), 0, 0, 0, 0)) sstore(call_empty_2_cost, sub(sload(call_empty_2_cost), gas())) // Stop is necessary because otherwise we get into Yul object boundaries stop() } object "revert-constructor" { // Data 0, 10 code { revert(0, 0) } } object "code-too-big" { // Data 1, 11 code { return(0, 0x6001) } } object "invalid" { // Data 2, 12 code { invalid() return(0, 0x10) } } object "start-ef" { // Data 6, 16 code { mstore8(0, 0xEF) // Cannot be the first byte as per https://eips.ethereum.org/EIPS/eip-3541 return(0, 0x10) } } object "success" { // Data 7, 17 code { return(0, 1) // A zero, which makes it a STOP when it is called } } object "no-optimization" { code { let noOptimization := msize() } } } # Data 3 - Out of gas through a constructor that returns too much # Data 4 - Out of gas later in the call (past the constructor) 00000000000000000000000000000000c0de1006: nonce: 1 balance: 0x1000 storage: {} code: | :yul berlin object "C" { code { datacopy(0, dataoffset("dummy"), datasize("dummy")) sstore(0, create(0, 0, datasize("dummy"))) stop() } object "dummy" { code { return(0,0x6000) } } } # Data 13 - Out of gas through a constructor that returns too much # Data 14 - Out of gas later in the call (past the constructor) 00000000000000000000000000000020c0de1006: nonce: 1 balance: 0x1000 storage: {} code: | :yul berlin object "C" { code { datacopy(0, dataoffset("dummy"), datasize("dummy")) sstore(0, create2(0, 0, datasize("dummy"), 0)) stop() } object "dummy" { code { return(0,0x6000) } } } # Data 5 - Nonce too high to create another contract 00000000000000000000000000000000c0deFFFF: nonce: 0xFFFFFFFFFFFFFFFF balance: 0x1000 storage: {} code: | :yul berlin object "C" { code { datacopy(0, dataoffset("dummy"), datasize("dummy")) sstore(0, create(0, 0, datasize("dummy"))) stop() } object "dummy" { code { return(0,0x20) } } } transaction: data: - :label create-contructor-revert :abi fail(uint) 0 # Revert in the constructor - :label create2-contructor-revert :abi fail(uint) 10 # Revert in the constructor - :label create-code-too-big :abi fail(uint) 1 # Code too big - :label create2-code-too-big :abi fail(uint) 11 # Code too big - :label create-invalid-opcode :abi fail(uint) 2 # Constructor has invalid opcode - :label create2-invalid-opcode :abi fail(uint) 12 # Constructor has invalid opcode - :label create-oog-constructor :abi fail(uint) 3 # Constructor OOG because it returns the max contract size - :label create-oog-post-constr :abi fail(uint) 4 # OOG after the constructor - :label create2-oog-constructor :abi fail(uint) 13 # Constructor OOG because it returns the max contract size - :label create2-oog-post-constr :abi fail(uint) 14 # OOG after the constructor - :label create-high-nonce :abi fail(uint) 5 # Nonce too high to create an account - :label create-0xef :abi fail(uint) 6 # Contract starts with 0xEF, which is not allowed - :label create2-0xef :abi fail(uint) 16 # Contract starts with 0xEF, which is not allowed - :label create-ok :abi fail(uint) 7 # Successfully create the account - :label create2-ok :abi fail(uint) 17 # Successfully create2 the account gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: "00000000000000000000000000000000000c0deC" secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 - 1 expect: # CREATE executed directly by c0deC (and fails) - indexes: data: - :label create-contructor-revert - :label create-code-too-big - :label create-invalid-opcode - :label create-0xef gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (warm address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address d4e7ae083132925a4927c1f5816238ba17b82a65: # Create address shouldnotexist: true # CREATE executed directly by c0deC (and fails) - indexes: data: - :label create-contructor-revert - :label create-code-too-big - :label create-invalid-opcode - :label create-0xef value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 32028 # Gas cost of call to created address (warm address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a65: nonce: 0 balance: 2 # Funded with two calls after failed create. code: "" # No code # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # CREATE2 executed directly by c0deC (and fails because of REVERT) - indexes: data: - :label create2-contructor-revert gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (warm address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address d4e7ae083132925a4927c1f5816238ba17b82a65: # Create address shouldnotexist: true # CREATE2 executed directly by c0deC (and fails because of REVERT) - indexes: data: - :label create2-contructor-revert value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 32028 # Gas cost of call to created address (warm address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, filled when ETH is sent to it 43255eE039968E0254887FC8c7172736983d878C: nonce: 0 balance: 2 # Funded with two calls after failed create. code: "" # No code # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # CREATE2 executed directly by c0deC (and fails because the code starts with 0xEF) - indexes: data: - :label create2-0xef gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (warm address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address 562D97e3E4d6d3C6e791EA64bB73d820871Aa219: # Create address shouldnotexist: true # CREATE2 executed directly by c0deC (and fails because the code starts with 0xef) - indexes: data: - :label create2-0xef value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 32028 # Gas cost of call to created address (warm address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, filled when ETH is sent to it 562D97e3E4d6d3C6e791EA64bB73d820871Aa219: nonce: 0 balance: 2 # Funded with two calls after failed create. code: "" # No code # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # CREATE2 executed directly by c0deC (and fails because code is too big) - indexes: data: - :label create2-code-too-big gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (warm address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address 014001fDbeDE82315F4B8C2a7D45E980A8a4A12e: # Create address shouldnotexist: true # CREATE2 executed directly by c0deC (and fails because the returned code is too big) - indexes: data: - :label create2-code-too-big value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 32028 # Gas cost of call to created address (warm address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, filled when ETH is sent to it 014001fDbeDE82315F4B8C2a7D45E980A8a4A12e: nonce: 0 balance: 2 # Funded with two calls after failed create. code: "" # No code # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # CREATE2 executed directly by c0deC (and fails because of invalid opcode) - indexes: data: - :label create2-invalid-opcode gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (warm address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address A13d43586820E5D97a3Fd1960625d537c86DC4E7: # Create address shouldnotexist: true # CREATE2 executed directly by c0deC (and fails because of invalid opcode) - indexes: data: - :label create2-invalid-opcode value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 # Create failed, but nonce is bumped. storage: 0: 0 # Create failed 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 32028 # Gas cost of call to created address (warm address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, filled when ETH is sent to it A13d43586820E5D97a3Fd1960625d537c86DC4E7: nonce: 0 balance: 2 # Funded with two calls after failed create. code: "" # No code # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # Call to a different account to do CREATE, which fails because of the extremely high nonce - indexes: data: - :label create-high-nonce gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 0 # No nonce bump storage: 0: 1 # Call to creator contract successful 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # When the contract that calls CREATE subsequently reverts, the # warming up of the address created also doesn't happen 12: 2828 # Gas cost of call to created address (cold address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address B2050fc27aB6d6D42dc0CE6f7C0BF9481a4c3Fc3: shouldnotexist: true # Empty address d4e7ae083132925a4927c1f5816238ba17b82a00: shouldnotexist: true # Call to a different account to do CREATE, which fails because of the extremely high nonce - indexes: data: - :label create-high-nonce value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 0 # No nonce bump storage: 0: 1 # Creator account call is successful 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 34528 # Gas cost of call to created address (cold address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Empty address d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # Address where smart contract should have been created B2050fc27aB6d6D42dc0CE6f7C0BF9481a4c3Fc3: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # Call to a different account to do CREATE[2], which reverts as out of gas - indexes: data: - :label create-oog-constructor - :label create-oog-post-constr - :label create2-oog-constructor - :label create2-oog-post-constr gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 0 # No nonce bump storage: 0: 0 # Call to creator contract reverted 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # When the contract that calls CREATE subsequently reverts, the # warming up of the address created also doesn't happen 12: 2828 # Gas cost of call to created address (cold address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address d4e7ae083132925a4927c1f5816238ba17b82a65: # Create address shouldnotexist: true # Call to a different account to do CREATE[2], which reverts - indexes: data: - :label create-oog-constructor - :label create-oog-post-constr - :label create2-oog-constructor - :label create2-oog-post-constr value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 0 # No nonce bump storage: 0: 0 # Call to creator contract reverted 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful # The first call is expensive because when sending eth to an empty address it has to be # created, which is an extra cost 12: 34528 # Gas cost of call to created address (cold address) 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Empty address d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # CREATE executed directly by c0deC (successfully) - indexes: data: - :label create-ok gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 storage: 0: 0xd4e7ae083132925a4927c1f5816238ba17b82a65 # Create successful, created this address 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (warm address) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address d4e7ae083132925a4927c1f5816238ba17b82a65: # Create address code: 0x00 # CREATE executed directly by c0deC (successfully) - indexes: data: - :label create-ok value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 storage: 0: 0xd4e7ae083132925a4927c1f5816238ba17b82a65 # Create successful, created this address 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 7028 # Gas cost of call to created address, no need to create it 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, nonce=1 because it really is created d4e7ae083132925a4927c1f5816238ba17b82a65: nonce: 1 balance: 2 # Funded with two calls after create. code: 0x00 # One byte of code # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code # CREATE2 executed directly by c0deC (successfully) - indexes: data: - :label create2-ok gas: !!int -1 value: - !!int 0 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 storage: 0: 0xf7fef4b66b1570a057d7d5cec5c58846befa5b5c # Address created by CREATE2 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 328 # Gas cost of call to created address (looks like it is cold) 13: 316 # Gas cost of 2nd call to created address 14: 2828 # Gas cost of call to empty (cold) address 15: 316 # Gas cost of 2nd call to empty (now warm) address f7fef4b66b1570a057d7d5cec5c58846befa5b5c: # Create2 address code: 0x00 nonce: 1 # CREATE2 executed directly by c0deC (successfully) - indexes: data: - :label create2-ok value: - !!int 1 network: - ">=Cancun" result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 00000000000000000000000000000000000c0deC: nonce: 1 storage: 0: 0xf7fef4b66b1570a057d7d5cec5c58846befa5b5c # Address created by CREATE2 2: 1 # Call to create address successful 3: 1 # Call to create address successful 4: 1 # Call to random address successful 5: 1 # Call to random address successful 12: 7028 # Gas cost of call to created address, no need to create it 13: 7016 # Gas cost of 2nd call to created address, much cheaper because 14: 34528 # Gas cost of call to empty random (cold) address 15: 7016 # Gas cost of second call to (now warm) address # Create address, nonce=1 because it really is created f7fef4b66b1570a057d7d5cec5c58846befa5b5c: # Create2 address code: 0x00 nonce: 1 balance: 2 # Funded with two calls after create. # Empty address, filled when ETH is sent to it d4e7ae083132925a4927c1f5816238ba17b82a00: nonce: 0 balance: 2 # Funded with two calls code: "" # No code ================================================ FILE: tests/static/state_tests/stCreateTest/CreateCollisionResultsFiller.yml ================================================ CreateCollisionResults: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Same address as CREATE creates. 8af6a7af30d840ba137e8f3f34d54cfb8beba6e2: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x001D } nonce: '0' storage: 0x0: 0x60A7 # Same address as CREATE2 creates 40f1299359ea754ac29eb2662a1900752bf8275f: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x001D } nonce: '0' storage: 0x0: 0x60A7 cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'creation 0x100) (def 'contractCode 0x200) (def 'constructorCode 0x300) (def 'contractLength 0x520) (def 'constructorLength 0x540) (def 'addr1 0x600) (def 'callRet 0x640) (def 'buffer 0x660) ; Addresses of the contracts (to check what code is there) (def 'OrigAddr1 0x8af6a7af30d840ba137e8f3f34d54cfb8beba6e2) (def 'OrigAddr2 0x40f1299359ea754ac29eb2662a1900752bf8275f) ; Other constants (def 'NOP 0) ; No OPeration ; Understand the input. [creation] (shr $ 0 248) ; Code for created contract (def 'contractMacro (lll (sstore 0 0xFF) contractCode ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Create the contract and a constructor to pass to CREATE[2] ; [constructorLength] (lll (return contractCode contractMacro) constructorCode ) [contractLength] contractMacro ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Actually create the contract ; (if (= @creation 1) [addr1] (create 0 constructorCode @constructorLength) [addr1] (create2 0 constructorCode @constructorLength 0x5a17) ) ; PC after contract creation [[0x20]] (pc) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; RETURNDATASIZE should be zero ; [[0x10]] (returndatasize) [[0x11]] @addr1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CALL the address where the contract should have been created [callRet] (call 0xFFFF 0x8af6a7af30d840ba137e8f3f34d54cfb8beba6e2 0 0 0 0 0) ; PC after contract call (CREATE) [[0x21]] (pc) [[0x12]] (- @callRet 1) [[0x13]] (returndatasize) [callRet] (call 0xFFFF 0x40f1299359ea754ac29eb2662a1900752bf8275f 0 0 0 0 0) ; PC after contract call (CREATE2) [[0x22]] (pc) [[0x14]] (- @callRet 1) [[0x15]] (returndatasize) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Read code from contracts ; The code CREATE attempted to overwrite [[0x30]] (extcodesize OrigAddr1) (extcodecopy OrigAddr1 buffer 0 @@0x30) [[0x31]] @buffer ; The code CREATE2 attempted to overwrite [[0x32]] (extcodesize OrigAddr2) (extcodecopy OrigAddr2 buffer 0 @@0x32) [[0x33]] @buffer } ; end of LLL code nonce: '0' storage: 0x10: 0x60A7 # Return data size from CREATE[2] 0x11: 0x60A7 # Address of created contract 0x12: 0x60A7 # Return value of the first CALL minus 1 (0 if success) 0x13: 0x60A7 # Return data size from the first CALL 0x14: 0x60A7 # Return value of the second CALL minus 1 (0 if success) 0x15: 0x60A7 # Return data size from the second CALL 0x20: 0x60A7 # PC after CREATE[2] 0x21: 0x60A7 # PC after call for CREATE 0x22: 0x60A7 # PC after call for CREATE2 # User account a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # MSB # # Create type: 01 - CREATE 02 - CREATE2 # # LSB - :raw 0x01 - :raw 0x02 gasLimit: - 0x1000000 gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: # All but static calls (which cannot change storage), with sufficient gas - indexes: data: !!int -1 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # In the case of a collision CREATE[2] just pops the # parameter values from the stack and returns zero, so the # results should all be zero except for these: # PC values at various locations 0x20: 0x59 0x21: 0x8f 0x22: 0xC8 # EXTCODE values 0x30: 0x06 0x31: 0x601d600055000000000000000000000000000000000000000000000000000000 0x32: 0x06 0x33: 0x601d600055000000000000000000000000000000000000000000000000000000 # The address CREATE would have chosen 8af6a7af30d840ba137e8f3f34d54cfb8beba6e2: code: 0x601d60005500 storage: 0: 0x001D # 0x60A7 - no contract ran # 0x001D - the old contract ran # 0x00FF - the new contract ran # The address CREATE2 would have chosen 40f1299359ea754ac29eb2662a1900752bf8275f: code: 0x601d60005500 storage: 0: 0x001D # 0x60A7 - no contract ran # 0x001D - the old contract ran # 0x00FF - the new contract ran ================================================ FILE: tests/static/state_tests/stCreateTest/CreateCollisionToEmpty2Filler.json ================================================ { "CreateCollisionToEmpty2" : { "_info" : { "comment" : "data0 - create collision to empty, data1 - to empty but nonce, data2 - to contract with code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "1000000000000000000000000000000000000000" : { "nonce" : "0", "storage" : {} }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "10", "nonce" : "0", "code" : "", "storage" : {} } } }, { "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "1000000000000000000000000000000000000000" : { "nonce" : "1", "storage" : { "0x01" : "0x13136008b64ff592819b2fa6d43f2835c452020e" } }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "10", "nonce" : "1", "code" : "", "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : [1,2], "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "2000000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x01" : "0x00" } }, "0bf4c804e0579073baf54ec4ec37cd04f3455c65" : { "nonce" : "2", "code" : "", "storage" : { } } } }, { "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "2000000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x01" : "0x00" } }, "0bf4c804e0579073baf54ec4ec37cd04f3455c65" : { "nonce" : "2", "code" : "", "storage" : { } } } }, { "indexes" : { "data" : 2, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "3000000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x01" : "0x00" } }, "4b86c4ed99b87f0f396bc0c76885453c343916ed" : { "nonce" : "0", "code" : "0x1122334455", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "1a00000000000000000000000000000000000000" : { "balance" : "", "code" : "{ (CALL 80000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ (MSTORE 0 0x6001600155) [[1]] (CREATE 0 27 5) }", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ (MSTORE 0 0x6001600155) [[1]] (CREATE 0 27 5) }", "nonce" : "0", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ (MSTORE 0 0x6001600155) [[1]] (CREATE 0 27 5) }", "nonce" : "0", "storage" : { } }, "0x13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "0x0bf4c804e0579073baf54ec4ec37cd04f3455c65" : { "balance" : "0", "code" : "", "nonce" : "2", "storage" : { } }, "0x4b86c4ed99b87f0f396bc0c76885453c343916ed" : { "balance" : "0", "code" : ":raw 0x1122334455", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000002000000000000000000000000000000000000000", ":raw 0x0000000000000000000000003000000000000000000000000000000000000000" ], "gasLimit" : [ "600000", "54000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x1a00000000000000000000000000000000000000", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGFromCallRefundsFiller.yml ================================================ CreateOOGFromCallRefunds: # Test that verifies the refunds are not applied on contract creation when the creation runs Out of Gas env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" pre: #### MAIN CALLER a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x3d0900' code: '0x' nonce: '1' storage: {} ### MAIN ENTRY CONTRACT: Code that extcode-copies and creates a contract # Switches init code based on the first parameter's value aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: balance: '0' code: | :yul berlin { let init_addr := calldataload(4) let init_length := extcodesize(init_addr) extcodecopy(init_addr, 0, 0, init_length) let created_addr := create(0, 0, init_length) if eq(created_addr, 0) { /* This invalid will deplete the remaining gas to make refund check deterministic */ invalid() } } nonce: '1' storage: {} ### INIT CODES: Used to create contracts with a variety of OOG init codes. # Init codes: Sstore refund 000000000000000000000000000000000000001a: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000001b: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000001c: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) invalid() } nonce: '0' storage: {} # Init codes: Sstore refund, call 000000000000000000000000000000000000002a: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000002b: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000002c: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Sstore refund, delegatecall 000000000000000000000000000000000000003a: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000003b: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000003c: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Sstore refund, callcode 000000000000000000000000000000000000004a: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000004b: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000004c: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Call self-destruct 000000000000000000000000000000000000005a: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000005b: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000005c: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Log operations 000000000000000000000000000000000000006a: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) return(0, 1) } nonce: '0' storage: {} 000000000000000000000000000000000000006b: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) return(0, 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000006c: balance: '0' code: | :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) invalid() } nonce: '0' storage: {} # Init codes: Create, refund 000000000000000000000000000000000000007a: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) return(add(initcodelength, 1), 1) } nonce: '0' storage: {} 000000000000000000000000000000000000007b: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) return(add(initcodelength, 1), 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000007c: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) invalid() } nonce: '0' storage: {} # Init codes: Create2, refund 000000000000000000000000000000000000008a: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 //let initcodelength := extcodesize(initcodeaddr) //extcodecopy(initcodeaddr, 0, 0, initcodelength) // protection from solc version changing init code let initcodelength := 15 mstore(0, 0x6001600055600060005560016000f30000000000000000000000000000000000) pop(create2(0, 0, initcodelength, 0)) return(add(initcodelength, 1), 1) } nonce: '0' storage: {} 000000000000000000000000000000000000008b: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) return(add(initcodelength, 1), 5000) } nonce: '0' storage: {} 000000000000000000000000000000000000008c: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) invalid() } nonce: '0' storage: {} ### HELPER CONTRACTS # Simple contract to reset sstore and refund 00000000000000000000000000000000000c0deA: balance: '0' code: | :yul berlin { // Simple SSTORE to zero to get a refund sstore(1, 0) } nonce: '1' storage: { '1': '1' } # Simple contract that self-destructs to refund 00000000000000000000000000000000000c0deD: balance: '0' code: | :yul berlin { selfdestruct(origin()) } nonce: '1' storage: { '1': '1' } # Simple contract that performs log operations 00000000000000000000000000000000000c0de0: balance: '0' code: | :yul berlin { mstore(0, 0xff) log0(0, 32) log1(0, 32, 0xfa) log2(0, 32, 0xfa, 0xfb) log3(0, 32, 0xfa, 0xfb, 0xfc) log4(0, 32, 0xfa, 0xfb, 0xfc, 0xfd) } nonce: '1' storage: { '1': '1' } # Init code that successfully creates contract but contains a refund 00000000000000000000000000000000000c0de1: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(0, 0) return(0, 1) } nonce: '1' storage: {} transaction: data: # Create from EOA, Sstore Refund in Init Code, no OoG - :label SStore_Refund_NoOoG :abi f(uint) 0x1a # Create from EOA, Sstore Refund in Init Code, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x1b # Create from EOA, Sstore Refund in Init Code, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x1c # Create from EOA, Sstore Refund in Call, no OoG - :label SStore_Refund_NoOoG :abi f(uint) 0x2a # Create from EOA, Sstore Refund in Call, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x2b # Create from EOA, Sstore Refund in Call, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x2c # Create from EOA, Sstore Refund in DelegateCall, no OoG - :label SStore_Refund_NoOoG :abi f(uint) 0x3a # Create from EOA, Sstore Refund in DelegateCall, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x3b # Create from EOA, Sstore Refund in DelegateCall, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x3c # Create from EOA, Sstore Refund in CallCode, no OoG - :label SStore_Refund_NoOoG :abi f(uint) 0x4a # Create from EOA, Sstore Refund in CallCode, OoG on Code Deposit - :label SStore_Refund_OoG :abi f(uint) 0x4b # Create from EOA, Sstore Refund in CallCode, OoG on Invalid opcode - :label SStore_Refund_OoG :abi f(uint) 0x4c # Create from EOA, Refund Self-destruct call, no OoG - :label SelfDestruct_Refund_NoOoG :abi f(uint) 0x5a # Create from EOA, Refund Self-destruct call, OoG on Code Deposit - :label SelfDestruct_Refund_OoG :abi f(uint) 0x5b # Create from EOA, Refund Self-destruct call, OoG on Invalid opcode - :label SelfDestruct_Refund_OoG :abi f(uint) 0x5c # Create from EOA, Log operation in call, no OoG - :label LogOp_NoOoG :abi f(uint) 0x6a # Create from EOA, Log operation in call, OoG on Code Deposit - :label LogOp_OoG :abi f(uint) 0x6b # Create from EOA, Log operation in call, OoG on Invalid opcode - :label LogOp_OoG :abi f(uint) 0x6c # Create from EOA, Refund within CREATE, no OoG - :label SStore_Create_Refund_NoOoG :abi f(uint) 0x7a # Create from EOA, Refund within CREATE, OoG on Code Deposit - :label SStore_Create_Refund_OoG :abi f(uint) 0x7b # Create from EOA, Refund within CREATE, OoG on Invalid opcode - :label SStore_Create_Refund_OoG :abi f(uint) 0x7c # Create2 from EOA, Refund within CREATE2, no OoG - :label SStore_Create2_Refund_NoOoG :abi f(uint) 0x8a # Create2 from EOA, Refund within CREATE2, OoG on Code Deposit - :label SStore_Create2_Refund_OoG :abi f(uint) 0x8b # Create2 from EOA, Refund within CREATE2, OoG on Invalid opcode - :label SStore_Create2_Refund_OoG :abi f(uint) 0x8c gasLimit: - 0x61a80 gasPrice: '10' nonce: '1' to: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: - indexes: data: - :label SStore_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label SStore_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: shouldnotexist: 1 - indexes: data: - :label SelfDestruct_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: nonce: 1 code: '0x00' storage: { '0': 1 } 00000000000000000000000000000000000c0deD: balance: 0 nonce: 1 - indexes: data: - :label SelfDestruct_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: shouldnotexist: 1 00000000000000000000000000000000000c0deD: code: '0x32FF' nonce: '1' storage: { '1': '1' } - indexes: data: - :label LogOp_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label LogOp_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: shouldnotexist: 1 - indexes: data: - :label SStore_Create_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: nonce: 2 code: '0x00' storage: { '0': 1 } 522c2e1c5da65010908ef9929e327fe8b6cc86da: nonce: 1 code: '0x00' storage: {} - indexes: data: - :label SStore_Create_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: shouldnotexist: 1 522c2e1c5da65010908ef9929e327fe8b6cc86da: shouldnotexist: 1 - indexes: data: - :label SStore_Create2_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: nonce: 2 code: '0x00' storage: { '0': 1 } 06019547b6e360abdafeade158a9667cc6106c17: nonce: 1 code: '0x00' storage: {} - indexes: data: - :label SStore_Create2_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 4501f8fa1e67827ebfb1f6d5510c606871c5a599: shouldnotexist: 1 06019547b6e360abdafeade158a9667cc6106c17: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGFromEOARefundsFiller.yml ================================================ CreateOOGFromEOARefunds: # Test that verifies the refunds are not applied on contract creation when the creation runs Out of Gas env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" pre: #### MAIN CALLER a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x3d0900' code: '0x' nonce: '1' storage: {} ### HELPER CONTRACTS # Simple contract to reset sstore and refund 00000000000000000000000000000000000c0deA: balance: '0' code: | :yul berlin { // Simple SSTORE to zero to get a refund sstore(1, 0) } nonce: '1' storage: { '1': '1' } # Simple contract that self-destructs to refund 00000000000000000000000000000000000c0deD: balance: '0' code: | :yul berlin { selfdestruct(origin()) } nonce: '1' storage: { '1': '1' } # Simple contract that performs log operations 00000000000000000000000000000000000c0de0: balance: '0' code: | :yul berlin { mstore(0, 0xff) log0(0, 32) log1(0, 32, 0xfa) log2(0, 32, 0xfa, 0xfb) log3(0, 32, 0xfa, 0xfb, 0xfc) log4(0, 32, 0xfa, 0xfb, 0xfc, 0xfd) } nonce: '1' storage: { '1': '1' } # Init code that successfully creates contract but contains a refund 00000000000000000000000000000000000c0de1: balance: '0' code: | :yul berlin { sstore(0, 1) sstore(0, 0) return(0, 1) } nonce: '1' storage: {} transaction: data: # Create from EOA, Sstore Refund in Init Code, no OoG - :label SStore_Refund_NoOoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) return(0, 1) } # Create from EOA, Sstore Refund in Init Code, OoG on Code Deposit - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) return(0, 5000) } # Create from EOA, Sstore Refund in Init Code, OoG on Invalid opcode - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) invalid() } # Create from EOA, Sstore Refund in Call, no OoG - :label SStore_Refund_NoOoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 1) } # Create from EOA, Sstore Refund in Call, OoG on Code Deposit - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 5000) } # Create from EOA, Sstore Refund in Call, OoG on Invalid opcode - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) invalid() } # Create from EOA, Sstore Refund in DelegateCall, no OoG - :label SStore_Refund_NoOoG :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) return(0, 1) } # Create from EOA, Sstore Refund in DelegateCall, OoG on Code Deposit - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) return(0, 5000) } # Create from EOA, Sstore Refund in DelegateCall, OoG on Invalid opcode - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) pop(delegatecall(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0)) invalid() } # Create from EOA, Sstore Refund in CallCode, no OoG - :label SStore_Refund_NoOoG :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 1) } # Create from EOA, Sstore Refund in CallCode, OoG on Code Deposit - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) return(0, 5000) } # Create from EOA, Sstore Refund in CallCode, OoG on Invalid opcode - :label SStore_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) pop(callcode(gas(), 0x00000000000000000000000000000000000c0deA, 0, 0, 0, 0, 0)) invalid() } # Create from EOA, Refund Self-destruct call, no OoG - :label SelfDestruct_Refund_NoOoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) return(0, 1) } # Create from EOA, Refund Self-destruct call, OoG on Code Deposit - :label SelfDestruct_Refund_OoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) return(0, 5000) } # Create from EOA, Refund Self-destruct call, OoG on Invalid opcode - :label SelfDestruct_Refund_OoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0deD, 0, 0, 0, 0, 0)) invalid() } # Create from EOA, Log operation in call, no OoG - :label LogOp_NoOoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) return(0, 1) } # Create from EOA, Log operation in call, OoG on Code Deposit - :label LogOp_OoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) return(0, 5000) } # Create from EOA, Log operation in call, OoG on Invalid opcode - :label LogOp_OoG :yul berlin { sstore(0, 1) pop(call(gas(), 0x00000000000000000000000000000000000c0de0, 0, 0, 0, 0, 0)) invalid() } # Create from EOA, Refund within CREATE, no OoG - :label SStore_Create_Refund_NoOoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) return(add(initcodelength, 1), 1) } # Create from EOA, Refund within CREATE, OoG on Code Deposit - :label SStore_Create_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) return(add(initcodelength, 1), 5000) } # Create from EOA, Refund within CREATE, OoG on Invalid opcode - :label SStore_Create_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create(0, 0, initcodelength)) invalid() } # Create2 from EOA, Refund within CREATE, no OoG - :label SStore_Create2_Refund_NoOoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 //let initcodelength := extcodesize(initcodeaddr) //extcodecopy(initcodeaddr, 0, 0, initcodelength) //protection from solc version changing the init code let initcodelength := 15 mstore(0, 0x6001600055600060005560016000f30000000000000000000000000000000000) pop(create2(0, 0, initcodelength, 0)) return(add(initcodelength, 1), 1) } # Create2 from EOA, Refund within CREATE, OoG on Code Deposit - :label SStore_Create2_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) return(add(initcodelength, 1), 5000) } # Create2 from EOA, Refund within CREATE, OoG on Invalid opcode - :label SStore_Create2_Refund_OoG :yul berlin { sstore(0, 1) sstore(1, 1) sstore(1, 0) let initcodeaddr := 0x00000000000000000000000000000000000c0de1 let initcodelength := extcodesize(initcodeaddr) extcodecopy(initcodeaddr, 0, 0, initcodelength) pop(create2(0, 0, initcodelength, 0)) invalid() } gasLimit: - 0x61a80 gasPrice: '10' nonce: '1' to: "" secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: - indexes: data: - :label SStore_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label SStore_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: shouldnotexist: 1 - indexes: data: - :label SelfDestruct_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: nonce: 1 code: '0x00' storage: { '0': 1 } 00000000000000000000000000000000000c0deD: balance: 0 nonce: 1 - indexes: data: - :label SelfDestruct_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: shouldnotexist: 1 00000000000000000000000000000000000c0deD: code: '0x32FF' nonce: '1' storage: { '1': '1' } - indexes: data: - :label LogOp_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: nonce: 1 code: '0x00' storage: { '0': 1 } - indexes: data: - :label LogOp_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: shouldnotexist: 1 - indexes: data: - :label SStore_Create_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: nonce: 2 code: '0x00' storage: { '0': 1 } e3476106159f87477ad639e3ddcbb6b240efe459: nonce: 1 code: '0x00' storage: {} - indexes: data: - :label SStore_Create_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: shouldnotexist: 1 e3476106159f87477ad639e3ddcbb6b240efe459: shouldnotexist: 1 - indexes: data: - :label SStore_Create2_Refund_NoOoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: nonce: 2 code: '0x00' storage: { '0': 1 } 1eeb9ca3824a07c140fc01aa562a3a896f44e790: nonce: 1 code: '0x00' storage: {} - indexes: data: - :label SStore_Create2_Refund_OoG network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # When we OoG, we use up all the gas regardless of the refunds balance: 0 nonce: 2 ec0e71ad0a90ffe1909d27dac207f7680abba42d: shouldnotexist: 1 1eeb9ca3824a07c140fc01aa562a3a896f44e790: shouldnotexist: 1 ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeFiller.json ================================================ { "CreateOOGafterInitCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "code" : "0x6001600155" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE 0 18 14) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "54000", "55000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeReturndata2Filler.json ================================================ { "CreateOOGafterInitCodeReturndata2" : { "_info" :{ "comment" : "Call RETURNDATASIZE and RETURNDATACOPY after CREATE deploy a contract. correct returndata copy." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0", "0x02" : "0x6460016001556000526005601bf3" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "code" : "0x6001600155" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE 0 18 14) [[ 1 ]] (RETURNDATASIZE) (RETURNDATACOPY 0 0 0) [[ 2 ]] (MLOAD 0) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "54000", "95000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeReturndata3Filler.json ================================================ { "CreateOOGafterInitCodeReturndata3" : { "_info" : { "comment" : "Calls a contract that runs CREATE which deploy a code. then OOG happens upon deployment of the actual code. check the RETURN data buffer in initial contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x00" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALLCODE (GAS) 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE 0 18 14) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "55000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeReturndataFiller.json ================================================ { "CreateOOGafterInitCodeReturndata" : { "_info" :{ "comment" : "Call RETURNDATASIZE and RETURNDATACOPY after CREATE deploy a contract" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE 0 18 14) [[ 1 ]] (RETURNDATASIZE) (RETURNDATACOPY 0 0 32) [[ 2 ]] (MLOAD 0) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "54000", "95000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeReturndataSizeFiller.json ================================================ { "CreateOOGafterInitCodeReturndataSize" : { "_info" : { "comment" : "Calls a contract that runs CREATE which deploy a code. then OOG happens upon deployment of the actual code. check the RETURNDATASIZE after create. fails with OOG if RETURNDATASIZE != 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1" }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "{ (MSTORE 0 0x60016001556001600255) (RETURN 22 10) }", "//code" : "{ (SSTORE 1 1) (SSTORE 2 1) } ", "code" : "{ (MSTORE 0 0x6960016001556001600255600052600a6016f3) (CREATE 0 13 19) (EXP 2 (RETURNDATASIZE)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "55054" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeRevert2Filler.json ================================================ { "CreateOOGafterInitCodeRevert2" : { "_info" : { "comment" : "Calls a contract that runs CREATE which deploy a code. then after deployment and exiting from CREATE a REVERT is called. check the REVERT data in this case equal to RETURN value of CREATE. CREATE fails due to the deployment cost." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "NO OGG HAPPENS", "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x6460016001556000526005601bf3" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } }, { "//comment" : "OOG DURING CREATE", "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x00" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "1000000000000", "code" : "{ (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 33000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { "0x01" : "0xff" } }, "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 23000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { "0x01" : "0xff" } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE 0 18 14) (REVERT 0 32) }", "storage": { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000c94f5374fce5edbc8e2a8697c15331677e6ebf0b", ":raw 0x000000000000000000000000d94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "175000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterInitCodeRevertFiller.json ================================================ { "CreateOOGafterInitCodeRevert" : { "_info" : { "comment" : "Calls a contract that runs CREATE which deploy a code. then after deployment and exiting from CREATE a REVERT is called. check the REVERT data in this case equal to RETURN value of CREATE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x6460016001556000526005601bf3" } }, "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL (GAS) 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 32) [[ 1 ]] (MLOAD 0) }", "storage": { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//code" : "(SSTORE 1 1) RETURN", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3) (CREATE 0 18 14) (CALLCODE 10000 0x094f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) (REVERT 0 32) }", "storage": { } }, "094f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "285000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateOOGafterMaxCodesizeFiller.yml ================================================ CreateOOGafterMaxCodesize: _info: pytest_marks: - slow env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" pre: # Code that will end up in the created contracts 00000000000000000000000000000000000c0de0: balance: 0 code: | :yul berlin { // If calldata > 0, self-destruct, otherwise sstore(0, codesize()) if gt(calldatasize(), 0) { selfdestruct(0) } } nonce: 0 storage: {} # Init code that creates max codesize contracts with 00000000000000000000000000000000000c0de0 code 00000000000000000000000000000000000c0de1: balance: 0 code: | :yul berlin { // Init code that uses max codesize and can be called to selfdestruct let code_addr := 0x00000000000000000000000000000000000c0de0 extcodecopy(code_addr, 0, 0, extcodesize(code_addr)) return(0, 0x6000) } nonce: 0 storage: {} 00000000000000000000000000000000000c0deb: balance: 0 # The purpose of this contract is to create a given number of max-codesize-contracts, specified by the first argument of the call. # The created contracts can self-destruct when called. # The second parameter is used to determine if this call should OOG instead of returning, # which should revert the creation of any contracts. code: | :yul berlin { sstore (1, 1) let contract_count := calldataload(0) let should_oog := calldataload(32) // get the init code that returns max codesize from another contract let initcode_addr := 0x00000000000000000000000000000000000c0de1 let initcode_size := extcodesize(initcode_addr) extcodecopy(initcode_addr, 0, 0, initcode_size) // create contracts with max codesize in loop for { let i := 0 } lt(i, contract_count) { i := add(i, 1) } { let address_created := create(0, 0, initcode_size) mstore( add(initcode_size, mul(i, 32)), address_created ) } if gt(should_oog, 0) { invalid() } return(initcode_size, mul(contract_count, 32)) } nonce: 1 storage: {} 00000000000000000000000000000000000c0dea: balance: 0 # This test contract performs 3 actions, which are configured by the parameters passed: # First action is to delegate call 0xc0deb to create self-destructing contracts on 0xc0dea context without OOG'ing; # this way we can create max-codesize-contracts that later can be self-destructed. # Second action is to call 0xc0deb, in a call that creates several max-codesize-contracts and can OOG, to test the contract # creation correctly reverts. # Third action is to call the created contracts for self-destruct, which will test the max-codesize-contracts are # correctly removed. code: | :yul berlin { // Get the amount of contracts to create on this level let delegate_contract_count := calldataload(4) // Get the amount of contracts to create on the sub level call let subcall_contract_count := calldataload(36) // Get whether the subcall should oog let subcall_oog := calldataload(68) // Get count of contracts to call to self-destruct let selfdestruct_count := calldataload(100) // Delegate call for contract creation mstore(0, delegate_contract_count) mstore(32, 0) let returnStart := 64 let returnLength := mul(delegate_contract_count, 32) let retcode := delegatecall(div(gas(), 2), 0x00000000000000000000000000000000000c0deb, 0, 64, returnStart, returnLength) if eq(retcode, 0) { // We oog'd, fail test revert(0, 0) } // Call for OOG contract creation mstore(0, subcall_contract_count) mstore(32, subcall_oog) returnStart := add(64, mul(delegate_contract_count, 32)) returnLength := mul(subcall_contract_count, 32) retcode := call(div(gas(), 2), 0x00000000000000000000000000000000000c0deb, 0, 0, 64, returnStart, returnLength) if eq(retcode, 0) { // We oog'd if eq(subcall_oog, 0) { // We shouldn't have revert(0, 0) } } let contract_created_count := delegate_contract_count if eq(subcall_oog, 0) { contract_created_count := add(delegate_contract_count, subcall_contract_count) } // Call all contracts so they sstore their codesize() for { let i := 0 } lt(i, contract_created_count) { i := add(i, 1) } { let contract_addr := mload(add(64, mul(i, 32))) pop(call(sub(gas(), 1000), contract_addr, 0, 0, 0, 0, 0)) } // Self-destruct contracts for { let i := 0 } lt(i, selfdestruct_count) { i := add(i, 1) } { let contract_addr := mload(add(64, mul(i, 32))) pop(call(sub(gas(), 1000), contract_addr, 0, 0, 1, 0, 0)) } } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # - Low number of contracts (10): Create 0 contracts at 0xc0dea, 10 contracts at 0xc0deb, OOG on 0xc0deb, call 0 contracts to self-destruct. - :label LowContractCount_NoDelegateCreate_CallCreateOOG :abi f(uint,uint,bool,uint) 0x00 0x0a 0x01 0x00 # - Low number of contracts (10): Create 10 contracts at 0xc0dea, 10 contracts at 0xc0deb, OOG on 0xc0deb, call 0 contracts to self-destruct. - :label LowContractCount_DelegateCreate_CallCreateOOG :abi f(uint,uint,bool,uint) 0x0a 0x0a 0x01 0x00 # - Low number of contracts (10): Create 10 contracts at 0xc0dea, 10 contracts at 0xc0deb, don't OOG on 0xc0deb, call 14 out of 20 contracts to self-destruct. - :label LowContractCount_DelegateCreate_CallCreate_SelfDestruct :abi f(uint,uint,bool,uint) 0x0a 0x0a 0x00 0x0e # - High number of contracts (250): Create 0 contracts at 0xc0dea, 250 contracts at 0xc0deb, OOG on 0xc0deb, call 0 contracts to self-destruct. - :label HighContractCount_NoDelegateCreate_CallCreateOOG :abi f(uint,uint,bool,uint) 0x00 0xfa 0x01 0x00 # - High number of contracts (250): Create 250 contracts at 0xc0dea, 250 contracts at 0xc0deb, OOG on 0xc0deb, call 0 contracts to self-destruct. - :label HighContractCount_DelegateCreate_CallCreateOOG :abi f(uint,uint,bool,uint) 0xfa 0xfa 0x01 0x00 # - High number of contracts (250): Create 250 contracts at 0xc0dea, 250 contracts at 0xc0deb, don't OOG on 0xc0deb, call 494 out of 500 contracts to self-destruct. - :label HighContractCount_DelegateCreate_CallCreate_SelfDestruct :abi f(uint,uint,bool,uint) 0xfa 0xfa 0x00 0x01ee gasLimit: - 0x100000000 gasPrice: '10' nonce: '0' to: 00000000000000000000000000000000000c0dea secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: - indexes: data: - :label LowContractCount_NoDelegateCreate_CallCreateOOG gas: !!int -1 value: !!int -1 network: - '>=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun -1 # (so zero if call OK) 0x15: 0x60A7 # Size of the returned data from the call (0) 0x20: 0x60A7 # PC after the CREATE[2] 0x21: 0x60A7 # PC after the CALL / DELEGATECALL / etc. 00000000000000000000000000000000000060A7: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x60A7 } ; end of LLL code nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Create type: 01 - CREATE 02 - CREATE2 # Call type: 01 - CALL 02 - CALLCODE # 03 - DELEGATECALL 04 - STATIC # 00 - No call, the contract is not created anyway # Constructor: 00 - SUCCESS (return data) 01 - Out of gas # 02 - REVERT 03 - REVERT with Data # 04 - SUCCESS in the constructor, but then # the main contract reverts # 05 - STOP # 06 - SELFDESTRUCT # SUCCESS, contract can be called (0-7) - :abi f(uint,uint,uint) 1 1 0 - :abi f(uint,uint,uint) 1 2 0 - :abi f(uint,uint,uint) 1 3 0 - :abi f(uint,uint,uint) 1 4 0 - :abi f(uint,uint,uint) 2 1 0 # 5 \/ - :abi f(uint,uint,uint) 2 2 0 - :abi f(uint,uint,uint) 2 3 0 - :abi f(uint,uint,uint) 2 4 0 # Constructor fails (8-15) # 1 - out of gas # 2 - revert # 5 - stop # 6 - self destruct - :abi f(uint,uint,uint) 1 0 1 - :abi f(uint,uint,uint) 2 0 1 # 10 \/ - :abi f(uint,uint,uint) 1 0 2 - :abi f(uint,uint,uint) 2 0 2 - :abi f(uint,uint,uint) 1 0 5 - :abi f(uint,uint,uint) 2 0 5 - :abi f(uint,uint,uint) 1 0 6 # 15 \/ - :abi f(uint,uint,uint) 2 0 6 # Constructor reverts with data (16-17) - :abi f(uint,uint,uint) 1 0 3 - :abi f(uint,uint,uint) 2 0 3 # Constructor successful, called contract reverts (18-25) - :abi f(uint,uint,uint) 1 1 4 - :abi f(uint,uint,uint) 1 2 4 # 20 \/ - :abi f(uint,uint,uint) 1 3 4 - :abi f(uint,uint,uint) 1 4 4 - :abi f(uint,uint,uint) 2 1 4 - :abi f(uint,uint,uint) 2 2 4 - :abi f(uint,uint,uint) 2 3 4 # 25 \/ - :abi f(uint,uint,uint) 2 4 4 gasLimit: - 0x900000 gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: # All but static calls (which cannot change storage), with sufficient gas - indexes: data: - !!int 0 - !!int 1 - !!int 2 - !!int 4 - !!int 5 - !!int 6 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # Zero if all goes well # 0x10 - RETURNDATASIZE from the constructor # 0x12 - external code size minus contract code size # 0x13 - difference in first 0x20 bytes between # external code and contract code # 0x14 - if the return value from the call isn't zero # 0x15 - RETURNDATASIZE from the call 0x20: 0x0127 # PC after CREATE[2] 0x21: 0x0227 # PC after CALL/DELEGATECALL/etc # Verify the created contract has been called 00000000000000000000000000000000000060A7: storage: 0: 0x60A7 # Static calls cannot change the goat's value, with sufficient gas - indexes: data: - !!int 3 - !!int 7 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # Zero if all goes well # 0x10 - RETURNDATASIZE from the constructor # 0x12 - external code size minus contract code size # 0x13 - difference in first 0x20 bytes between # external code and contract code # 0x14 - if the return value from the call isn't zero # 0x15 - RETURNDATASIZE from the call 0x20: 0x0127 # PC after CREATE[2] 0x21: 0x0227 # PC after CALL/DELEGATECALL/etc # If the constructor fails: # 1. Out of gas # 2. Revert (no data) # 5. STOP (no data) # 6. SELFDESTRUCT - indexes: data: - !!int 8 - !!int 9 - !!int 10 - !!int 11 - !!int 12 - !!int 13 - !!int 14 - !!int 15 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # Zero if all goes well # 0x10 - RETURNDATASIZE from the constructor # 0x13 - if the return value from the call isn't zero # 0x14 - RETURNDATASIZE from the call # 0x12 - external code size minus contract code size 0x12: 0x12 # 0x13 - difference in first 0x20 bytes between # external code and contract code 0x13: 0x600060006000600060006160a761fffff1000000000000000000000000000000 # Not modified by call type zero (no call) 0x14: 60A7 0x15: 60A7 0x20: 0x0127 # PC after CREATE[2] 0x21: 0x0227 # PC after CALL/DELEGATECALL/etc # If the constructor reverts with data - indexes: data: - !!int 16 - !!int 17 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # 0x10 - RETURNDATASIZE from the constructor 0x10: 0x20 # 0x11 - Returned data (from the constructor at revert) 0x11: 0x60A7 # 0x12 - external code size minus contract code size 0x12: 0x12 # 0x13 - difference in first 0x20 bytes between # external code and contract code 0x13: 0x600060006000600060006160a761fffff1000000000000000000000000000000 # Not modified by call type zero 0x14: 60A7 0x15: 60A7 0x20: 0x0127 # PC after CREATE[2] 0x21: 0x0227 # PC after CALL/DELEGATECALL/etc # If we trigger a revert on the main contract by reading unavailable data - indexes: data: - !!int 18 - !!int 19 - !!int 20 - !!int 21 - !!int 22 - !!int 23 - !!int 24 - !!int 25 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # 0x11 - Value we attempted to read (and failed) 0x11: 0 # Goats that don't get overwritten because we reverted 0x10: 0x60A7 0x12: 0x60A7 0x13: 0x60A7 0x14: 0x60A7 0x15: 0x60A7 0x20: 0x60A7 0x21: 0x60A7 ================================================ FILE: tests/static/state_tests/stCreateTest/CreateTransactionCallDataFiller.yml ================================================ CreateTransactionCallData: _info: comment: | Tests if CALLDATALOAD, CALLDATACOPY, CODECOPY and CODESIZE work correctly in initcode context: call data is always empty in initcode context and "code" is initcode. env: currentCoinbase: a94f5374fce5edbc8e2a8697c15331677e6ebf0b currentDifficulty: 1 currentGasLimit: 1000000 currentNumber: 1 currentTimestamp: 1000 pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 balance: 100000000000000 storage: { } code: '' transaction: data: - | :label calldataload :yul berlin { // calldata should be empty so all calldataload() should return 0. sstore(0, calldataload(0)) sstore(1, calldataload(33)) } - | :label calldatacopy :yul berlin { // calldata should be empty so all calldatacopy() should zero memory. calldatacopy(0, 0, 1) sstore(0, mload(0)) calldatacopy(0, 1, 32) sstore(1, mload(0)) } - | :label codecopy :yul berlin { // codecopy() should copy initcode. codecopy(0, 0, codesize()) return(0, codesize()) } gasLimit: [ 100000 ] gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: '' value: [ 0 ] expect: - indexes: data: - :label calldataload - :label calldatacopy network: - ">=Cancun" result: 6295ee1b4f6dd65047762f924ecd367c17eabf8f: code: '' nonce: 1 storage: { } - indexes: data: - :label codecopy network: - ">=Cancun" result: 6295ee1b4f6dd65047762f924ecd367c17eabf8f: code: '0x3860008039386000f3' nonce: 1 storage: { } ================================================ FILE: tests/static/state_tests/stCreateTest/CreateTransactionHighNonceFiller.yml ================================================ CreateTransactionHighNonce: _info: comment: | The test check if the create transaction is reject if the origin's nonce is maximum value (and would overflow if increased by 1). env: currentCoinbase: a94f5374fce5edbc8e2a8697c15331677e6ebf0b currentDifficulty: 1 currentGasLimit: 1000000 currentNumber: 1 currentTimestamp: 1000 expect: - indexes: data: !!int -1 network: - ">=Cancun" expectException: ">=Cancun": "TransactionException.NONCE_IS_MAX" result: {} pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '0xffffffffffffffff' balance: 100000000000000 storage: {} code: '' transaction: data: - | :yul berlin { return(0, 1) } gasLimit: - 90000 gasPrice: 10 nonce: '0xffffffffffffffff' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: '' value: - 0 - 1 ================================================ FILE: tests/static/state_tests/stCreateTest/CreateTransactionRefundEFFiller.yml ================================================ CreateTransactionRefundEF: _info: comment: | Test combination of gas refund and EF-prefixed create transaction failure. env: currentCoinbase: a94f5374fce5edbc8e2a8697c15331677e6ebf0b currentDifficulty: 1 currentGasLimit: 1000000 currentNumber: 1 currentTimestamp: 1000 pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 balance: 100000000000000 storage: { } code: '' # Provides gas refund. 00000000000000000000000000000000005ef94d: nonce: 0 balance: 0 storage: 0: 1 code: | :yul berlin { sstore(0,0) } transaction: data: - | :label refund_EF :yul berlin { // call gas refund provider let r := call(50000, 0x5ef94d, 0, 0, 0, 0, 0) // return 0xEF mstore8(0,0xEF) return(0,1) } gasLimit: [ 100000 ] gasPrice: 10 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: '' value: [ 0 ] expect: - indexes: data: - :label refund_EF network: - ">=Cancun" result: 00000000000000000000000000000000005ef94d: storage: 0: 1 6295ee1b4f6dd65047762f924ecd367c17eabf8f: shouldnotexist: true ================================================ FILE: tests/static/state_tests/stCreateTest/TransactionCollisionToEmpty2Filler.json ================================================ { "TransactionCollisionToEmpty2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : 0 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "10", "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : 1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "11", "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "10", "nonce" : "0", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155" ], "gasLimit" : [ "600000", "54000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/TransactionCollisionToEmptyButCodeFiller.json ================================================ { "TransactionCollisionToEmptyButCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "0", "code" : "0x1122334455", "storage" : { "0x01" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "0", "code" : "0x1122334455", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "", "code" : ":raw 0x1122334455", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155" ], "gasLimit" : [ "600000", "54000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/TransactionCollisionToEmptyButNonceFiller.json ================================================ { "TransactionCollisionToEmptyButNonce" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : [0,1], "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "", "code" : "", "nonce" : "1", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155" ], "gasLimit" : [ "600000", "54000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stCreateTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stCreateTest/createFailResultFiller.yml ================================================ # Run CREATE[2] operations with different amounts of gas so they'll go OOG, # REVERT, or be successful. This can create a return buffer with information # about the failure according to https://eips.ethereum.org/EIPS/eip-211: # # As an exception, CREATE and CREATE2 are considered to return the empty buffer # in the success case and the failure data in the failure case. # # Requested in issue #942 createFailResult: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Just return with some data to fill up the returndata buffer 000000000000000000000000000000000000DA7A: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0x00, 0xDEADBEEF) mstore(0x20, 0x60A7) // Return with two words of data return(0, 0x40) } nonce: 1 storage: {} # Constructor code for BAD constructor (one that returns with REVERT) 0000000000000000000000000000000000000BAD: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0, 0x0BAD0BAD0BAD) revert(0, 0x20) } nonce: 1 storage: {} # Constructor code for 600D constructor (one that returns with RETURN) 000000000000000000000000000000000000600D: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0, 0x600D) return(0, 0x20) } nonce: 1 storage: {} # CREATE 0000000000000000000000000000000000C0DEF0: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Before the main call, call DA7A to fill up the return buffer sstore(0x10, call(gas(), 0xDA7A, 0, 0, 0, 0x100, 0x40)) sstore(0x11, returndatasize()) sstore(0x12, mload(0x100)) sstore(0x13, mload(0x120)) // Read the constructor code from the appropriate contract let srcAddr := calldataload(0) // either 600D or BAD let codeSize := extcodesize(srcAddr) extcodecopy(srcAddr, 0, 0, codeSize) // Create sstore(0,create(0, 0, codeSize)) // If we have a returned buffer, see what it is sstore(1,returndatasize()) returndatacopy(0x200, 0, returndatasize()) sstore(2, mload(0x200)) sstore(3, mload(0x220)) } nonce: 1 storage: {} # CREATE2 0000000000000000000000000000000000C0DEF5: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Before the main call, call DA7A to fill up the return buffer sstore(0x10, call(gas(), 0xDA7A, 0, 0, 0, 0x100, 0x40)) sstore(0x11, returndatasize()) sstore(0x12, mload(0x100)) sstore(0x13, mload(0x120)) // Read the constructor code from the appropriate contract let srcAddr := calldataload(0) // either 600D or BAD let codeSize := extcodesize(srcAddr) extcodecopy(srcAddr, 0, 0, codeSize) // Create sstore(0,create2(0, 0, codeSize, 0x5A17)) // If we have a returned buffer, see what it is sstore(1,returndatasize()) returndatacopy(0x200, 0, returndatasize()) sstore(2, mload(0x200)) sstore(3, mload(0x220)) } nonce: 1 storage: {} # Also CREATE2, but fails due to collision 0000000000000000000000000000000000C0DEFF: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Before the main call, call DA7A to fill up the return buffer sstore(0x10, call(gas(), 0xDA7A, 0, 0, 0, 0x100, 0x40)) sstore(0x11, returndatasize()) sstore(0x12, mload(0x100)) sstore(0x13, mload(0x120)) // Read the constructor code from the appropriate contract let srcAddr := calldataload(0) // either 600D or BAD let codeSize := extcodesize(srcAddr) extcodecopy(srcAddr, 0, 0, codeSize) // Create sstore(0,create2(0, 0, codeSize, 0xBAD05A17)) // If we have a returned buffer, see what it is sstore(1,returndatasize()) returndatacopy(0x200, 0, returndatasize()) sstore(2, mload(0x200)) sstore(3, mload(0x220)) } nonce: 1 storage: {} # The existing account CREATE2 collides with (600D) bb0237ab04970e3cf3e813c02064662adc89336b: balance: 0x600D code: :raw 0x600100 nonce: 1 storage: {} # The existing account CREATE2 collides with (BAD) 13c950f8740ffaea1869a88d70b029e8b0c9a8da: balance: 0x600D code: :raw 0x600100 nonce: 1 storage: {} # Also CREATE, but fails due to collision 0000000000000000000000000000000000C0DEEE: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Before the main call, call DA7A to fill up the return buffer sstore(0x10, call(gas(), 0xDA7A, 0, 0, 0, 0x100, 0x40)) sstore(0x11, returndatasize()) sstore(0x12, mload(0x100)) sstore(0x13, mload(0x120)) // Read the constructor code from the appropriate contract let srcAddr := calldataload(0) // either 600D or BAD let codeSize := extcodesize(srcAddr) extcodecopy(srcAddr, 0, 0, codeSize) // Create sstore(0,create(0, 0, codeSize)) // If we have a returned buffer, see what it is sstore(1,returndatasize()) returndatacopy(0x200, 0, returndatasize()) sstore(2, mload(0x200)) sstore(3, mload(0x220)) } nonce: 1 storage: {} # The existing account CREATE collides with f9d1ea8eab6963659ee85b3e0b4d8a57e7edba2b: balance: 0x600D code: :raw 0x600100 nonce: 1 storage: {} # The contract we call cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // The operation to run // F0 - CREATE // F5 - CREATE2 let oper := calldataload(0x04) // The condition for it // 0x0006 - OUT OF GAS // 0x0BAD - REVERT with data // 0x600D - Success let cond := calldataload(0x24) let addr := add(0xC0DE00, oper) // Before the main call, call DA7A to fill up the return buffer sstore(0x10, call(gas(), 0xDA7A, 0, 0, 0, 0x100, 0x40)) sstore(0x11, returndatasize()) sstore(0x12, mload(0x100)) sstore(0x13, mload(0x120)) let gasAmt := gas() // Out Of Gas, CREATE[2] always costs more than 32k in gas // but we need to also pay for the four SSTOREs that verify DA7A was // called correctly if eq(cond,0x0006) { gasAmt := add(30000,mul(22100,4)) } // Send the condition to the contract we call so it'll know whether // the construct needs to be end with RETURN or REVERT mstore(0, cond) let result := call(gasAmt, addr, 0, 0, 0x20, 0x200, 0x20) sstore(0, result) sstore(1, returndatasize()) // First word of the return data sstore(2, mload(0x200)) } nonce: 1 storage: {} # User account a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: - :label CREATE--OOG :abi f(uint,uint) 0xF0 0x0006 - :label CREATE2-OOG :abi f(uint,uint) 0xF5 0x0006 - :label CREATE--GOOD :abi f(uint,uint) 0xF0 0x600D - :label CREATE2-GOOD :abi f(uint,uint) 0xF5 0x600D - :label CREATE--BAD :abi f(uint,uint) 0xF0 0x0BAD - :label CREATE2-BAD :abi f(uint,uint) 0xF5 0x0BAD - :label CREATE2-BOOM :abi f(uint,uint) 0xFF 0x600D - :label CREATE2-BAD-BOOM :abi f(uint,uint) 0xFF 0x0BAD - :label CREATE--BOOM :abi f(uint,uint) 0xEE 0x600D - :label CREATE--BAD-BOOM :abi f(uint,uint) 0xEE 0x0BAD gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: # CREATE[2] runs out of gas - indexes: data: - :label CREATE--OOG - :label CREATE2-OOG gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 0 # Return value of failed call 1: 0 # RETURNDATASIZE 2: 0 # First word of return data ## Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output # Output from DA7A 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE is successful - indexes: data: - :label CREATE--GOOD gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0def0: storage: # Address of newly created contract 0x00: 0xb44f2c88d3d4283cd1e54e418c4ff7e6a6c73202 0x01: 0 # No RETURNDATA 0x02: 0 0x03: 0 # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE2 is successful - indexes: data: - :label CREATE2-GOOD gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0def5: storage: # Address of newly created contract 0x00: 0x65ee26a034447b6ac64abdca1cccb7b747e4a231 0x01: 0 # No RETURNDATA 0x02: 0 0x03: 0 # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE failed (REVERT) - indexes: data: - :label CREATE--BAD gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0def0: storage: 0x00: 0 # No newly created contract 0x01: 0x20 # There is returned data 0x02: 0x0bad0bad0bad # Which just says how bad things are # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE2 failed (REVERT) - indexes: data: - :label CREATE2-BAD gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0def5: storage: 0x00: 0 # No newly created contract 0x01: 0x20 # There is returned data 0x02: 0x0bad0bad0bad # Which just says how bad things are # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE2 failed due to collision - indexes: data: - :label CREATE2-BOOM gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0deff: storage: 0x00: 0 # No newly created contract 0x01: 0 # No returned data in case of collision # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE2 failed (REVERT, but it would have failed due to a collision anyway) - indexes: data: - :label CREATE2-BAD-BOOM gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0deff: storage: 0x00: 0 # No newly created contract 0x01: 0 # There is no returned data # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE failed due to collision - indexes: data: - :label CREATE--BOOM gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0deee: storage: 0x00: 0 # No newly created contract 0x01: 0 # No returned data in case of collision # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 # CREATE failed (REVERT, but it would have failed due to a collision anyway) - indexes: data: - :label CREATE--BAD-BOOM gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 0000000000000000000000000000000000c0deee: storage: 0x00: 0 # No newly created contract 0x01: 0 # There is no returned data # Verify the DA7A call was OK 0x10: 1 # Return value of DA7A call 0x11: 0x40 # Length of output 0x12: 0xDEADBEEF 0x13: 0x60A7 ================================================ FILE: tests/static/state_tests/stCreateTest/createLargeResultFiller.yml ================================================ # What happens when the result of a CREATE is over the maximum contract size, # 24k. createLargeResult: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Constructor code 000000000000000000000000000000000000C0DE: balance: 0 nonce: 1 storage: {} code: | :yul london { // Store some data mstore(0, not(0)) // Copy the requested length from the constructor code codecopy(0x100, 0x100, 0x20) // Return it as the new contract return(0, mload(0x100)) } # The contract we call cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul london { sstore(1, gas()) // The operation to run // F0 - CREATE // F5 - CREATE2 let operation := calldataload(0x04) // The constructor ends with // F3 - RETURN // FD - REVERT let constructorEnd := calldataload(0x24) // The size of the contract getting created let contractSize := calldataload(0x44) // Create the constructor. let codeSize := extcodesize(0xC0DE) extcodecopy(0xC0DE, 0, 0, codeSize) // Modify the last opcode mstore8(sub(codeSize, 1), constructorEnd) // Include the requested contract size mstore(0x100, contractSize) // Create the contract let newAddr switch operation case 0xF0 { newAddr := create(0, 0, 0x120) } case 0xF5 { newAddr := create2(0, 0, 0x120, 0x5A17) } // Write the results sstore(0, newAddr) sstore(1, sub(sload(1), gas())) sstore(2, extcodehash(newAddr)) let noOptimization := msize() } nonce: 1 storage: 0: 0x60A7 1: 0x60A7 2: 0x60A7 # User account a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: # "Normal" contract (256 bytes) - :label CREATE-RETURN :abi f(uint,uint,uint) 0xF0 0xF3 0x100 - :label CREATE2-RETURN :abi f(uint,uint,uint) 0xF5 0xF3 0x100 - :label CREATE-REVERT :abi f(uint,uint,uint) 0xF0 0xFD 0x100 - :label CREATE2-REVERT :abi f(uint,uint,uint) 0xF5 0xFD 0x100 # Maximum size for a legitimate contract (0x6000 = 24k) - :label CREATE-RETURN-MAX :abi f(uint,uint,uint) 0xF0 0xF3 0x6000 - :label CREATE2-RETURN-MAX :abi f(uint,uint,uint) 0xF5 0xF3 0x6000 - :label CREATE-REVERT-MAX :abi f(uint,uint,uint) 0xF0 0xFD 0x6000 - :label CREATE2-REVERT-MAX :abi f(uint,uint,uint) 0xF5 0xFD 0x6000 # Maximum size for a legitimate contract, plus 1 (0x6000 = 24k) - :label CREATE-RETURN-TOOBIG :abi f(uint,uint,uint) 0xF0 0xF3 0x6001 - :label CREATE2-RETURN-TOOBIG :abi f(uint,uint,uint) 0xF5 0xF3 0x6001 - :label CREATE-REVERT-TOOBIG :abi f(uint,uint,uint) 0xF0 0xFD 0x6001 - :label CREATE2-REVERT-TOOBIG :abi f(uint,uint,uint) 0xF5 0xFD 0x6001 # Double the size of a legitimate contract - :label CREATE-RETURN-HUGE :abi f(uint,uint,uint) 0xF0 0xF3 0xC000 - :label CREATE2-RETURN-HUGE :abi f(uint,uint,uint) 0xF5 0xF3 0xC000 - :label CREATE-REVERT-HUGE :abi f(uint,uint,uint) 0xF0 0xFD 0xC000 - :label CREATE2-REVERT-HUGE :abi f(uint,uint,uint) 0xF5 0xFD 0xC000 gasLimit: - 80000000 gasPrice: 10 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: - indexes: data: - :label CREATE-RETURN network: - '>=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "17592186099592" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/Call1024OOGFiller.json ================================================ { "Call1024OOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x86", "0x01" : "0x01", "0x02" : "0x020b71" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x92", "0x01" : "0x01", "0x02" : "0x023a51" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL (MUL (SUB (GAS) 10000) (SUB 1 (DIV @@0 1025))) 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "13120826", "15720826" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/Call1024PreCallsFiller.json ================================================ { "Call1024PreCalls" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 2, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x03dd", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ [[ 2 ]] (CALL 0xffff 1 0 0 0 0) [[ 3 ]] (CALL 0xffff 1 0 0 0 0) [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "11937600034817", "9214364837600034817", "9381323795670" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/CallLoseGasOOGFiller.json ================================================ { "CallLoseGasOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x03e9" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL (ADD 1(MUL @@0 100000)) 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/CallRecursiveBombPreCallFiller.json ================================================ { "CallRecursiveBombPreCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x03ff", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "{ (CALL 100000 0xbad304eb96065b2a98b57a48a06ae28d285a71b5 23 0 0 0 0) (DELEGATECALL 0x7ffffffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 224000) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/CallcodeLoseGasOOGFiller.json ================================================ { "CallcodeLoseGasOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 2, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x03e9" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL (ADD 1(MUL @@0 100000)) 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "166262", "156262", "600000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/Delegatecall1024Filler.json ================================================ { "Delegatecall1024" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x0401", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/Delegatecall1024OOGFiller.json ================================================ { "Delegatecall1024OOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x92", "0x01" : "0x01", "0x02" : "0x023a51" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL (MUL (SUB (GAS) 10000) (SUB 1 (DIV @@0 1025))) 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "15720826" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callOutput1Filler.json ================================================ { "callOutput1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } }, "" : { "storage" : { } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (DELEGATECALL 50000 0 0 0 0) [[ 0 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callOutput2Filler.json ================================================ { "callOutput2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } }, "" : { "storage" : { } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (DELEGATECALL 50000 0 32 0 0) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callOutput3Filler.json ================================================ { "callOutput3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } }, "" : { "storage" : { } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (DELEGATECALL 50000 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callOutput3partialFailFiller.json ================================================ { "callOutput3partialFail" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } }, "" : { "storage" : { } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (DELEGATECALL 50000 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callOutput3partialFiller.json ================================================ { "callOutput3partial" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } }, "" : { "storage" : { } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (DELEGATECALL 50000 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callWithHighValueAndGasOOGFiller.json ================================================ { "callWithHighValueAndGasOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (DELEGATECALL 0xffffffffffffffffffffffff 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callcodeOutput3Filler.json ================================================ { "callcodeOutput3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (DELEGATECALL 50000 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "900000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/callcodeWithHighValueAndGasOOGFiller.json ================================================ { "callcodeWithHighValueAndGasOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (DELEGATECALL 0xffffffffffffffffffffffff 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/deleagateCallAfterValueTransferFiller.json ================================================ { "deleagateCallAfterValueTransfer" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "", "0x02" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1100000", "code" : "{ (MSTORE 0 0x01) (DELEGATECALL 100000 0 64 0 64) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (SSTORE 0 (CALLVALUE)) (SSTORE 1 (CALLER)) (SSTORE 2 (CALLDATALOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallAndOOGatTxLevelFiller.json ================================================ { "delegatecallAndOOGatTxLevel" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "code" : "{ [[ 0 ]] (DELEGATECALL 3000001 0 0 0 0 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallBasicFiller.json ================================================ { "delegatecallBasic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 500000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallEmptycontractFiller.json ================================================ { "delegatecallEmptycontract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000", "code" : "{ [[ 0 ]] (DELEGATECALL 50000 0x945304eb96065b2a98b57a48a06ae28d285a71b5 0 64 0 64 )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1100000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "105044" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallInInitcodeToEmptyContractFiller.json ================================================ { "delegatecallInInitcodeToEmptyContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x01", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x604060006040600073945304eb96065b2a98b57a48a06ae28d285a71b5620186) (MSTORE 32 0xa0f4600055000000000000000000000000000000000000000000000000000000) (CREATE 1 0 64) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContractFiller.json ================================================ { "delegatecallInInitcodeToExistingContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x01", "storage" : { "0x00" : "0x01", "0x01" : "0x1000000000000000000000000000000000000000", "0x02" : "0x01", "0x0b" : "0x1000000000000000000000000000000000000000" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x604060006040600073945304eb96065b2a98b57a48a06ae28d285a71b5620186) (MSTORE 32 0xa0f4600055336001550000000000000000000000000000000000000000000000) (CREATE 1 0 64) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "1000", "code" : "{ (MSTORE 0 0x6001600055) (CREATE 1 27 5) }", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "0", "code" : "{ (SSTORE 2 1) [[ 11 ]] (CALLER) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContractOOGFiller.json ================================================ { "delegatecallInInitcodeToExistingContractOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "5" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x604060006040600073945304eb96065b2a98b57a48a06ae28d285a71b5620186) (MSTORE 32 0xa0f4600a5533600b550000000000000000000000000000000000000000000000) (CREATE 5 0 64) }", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "0", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "153096" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallOOGinCallFiller.json ================================================ { "delegatecallOOGinCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "100000", "code" : "{ [[ 0 ]] (ADD (DELEGATECALL 10000 0 0 0 0 ) 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallSenderCheckFiller.json ================================================ { "delegatecallSenderCheck" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 500000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{[[ 1 ]] (CALLER)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecallValueCheckFiller.json ================================================ { "delegatecallValueCheck" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x17" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 500000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{[[ 1 ]] (CALLVALUE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "23" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecodeDynamicCode2SelfCallFiller.json ================================================ { "delegatecodeDynamicCode2SelfCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x01", "storage" : { "0x0b" : "0x01", "0x0c" : "0x1000000000000000000000000000000000000000" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "1100000", "code" : " {(MSTORE 0 0x60406000604060007313136008b64ff592819b2fa6d43f2835c452020e620186) (MSTORE 32 0xa0f4600b5533600c550000000000000000000000000000000000000000000000) (CREATE 1 0 64) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stDelegatecallTestHomestead/delegatecodeDynamicCodeFiller.json ================================================ { "delegatecodeDynamicCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xffe4ebd2a68c02d9dcb0a17283d13346beb2d8b6" : { "shouldnotexist" : "1" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "balance" : "0x00", "storage" : { "0x00" : "0x00", "0x0a" : "0x568a95f77b047bece6aa68843d2019332c46a585", "0x0b" : "0x01", "0x14" : "0x00" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x716860016000553360145560005260096017f36000526012600e6001f0600a55) (MSTORE 32 0x604060006040600073ffe4ebd2a68c02d9dcb0a17283d13346beb2d8b6620186) (MSTORE 64 0xa0f4600b55000000000000000000000000000000000000000000000000000000) (CREATE 1 0 96) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "453081" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/CallAndCallcodeConsumeMoreGasThenTransactionHasFiller.json ================================================ { "CallAndCallcodeConsumeMoreGasThenTransactionHas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x12", "0x08" : "0x08d5b6", "0x09" : "0x01", "0x0a" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "By new EIP150 rules this transaction would be executed even if call consumes more gas then transaction has.", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 600000 0 0 0 0 0)) (SSTORE 10 (CALLCODE 600000 0 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should be 12 in the post state", "code" : "{ (SSTORE 0 0x12) } ", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/CallAskMoreGasOnDepth2ThenTransactionHasFiller.json ================================================ { "CallAskMoreGasOnDepth2ThenTransactionHas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x08" : "0x030d3e", "0x09" : "0x01" } }, "" : { "storage" : { "0x08" : "0x02a1f6" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "ordinal call should work but on second depth it has call that asks more gas than left", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 200000 0 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should work on EIP150", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 600000 0 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should be set in the post state", "code" : "{ (SSTORE 8 (GAS))} ", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/CallGoesOOGOnSecondLevel2Filler.json ================================================ { "CallGoesOOGOnSecondLevel2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "OOG Call transaction has less gas then in example above", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 600000 0 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 600000 0 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 8 (GAS)) (KECCAK256 0x00 0x2fffff) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/CallGoesOOGOnSecondLevelFiller.json ================================================ { "CallGoesOOGOnSecondLevel" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "12" : "1", "0x08" : "0x0927be", "0x0c" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { "0x08" : "0x213fb6", "0x09" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "OOG Call because call goes OOG on second level", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 600000 0 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "Inner CaLL goes OOG on EIP150", "code" : "{ (SSTORE 8 (GAS)) (SSTORE 9 (CALL 300000 0 0 0 0 0)) [[12]] 1} ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 8 (GAS)) (KECCAK256 0x00 0x2fffff) (SSTORE 9 (GAS)) (SSTORE 10 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/CreateAndGasInsideCreateFiller.json ================================================ { "CreateAndGasInsideCreate" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "//comment" : "CREATE price changed in Shanghai", "//comment" : "Due to eip-3860 (https://eips.ethereum.org/EIPS/eip-3860) pay extra 2 gas for each 32 bytes of initcode", "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x09" : "0x0129db", "0x0b" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "storage" : { "0xfd" : "0x083729" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "// code" : "Test gas before Create, inside create and after", "code" : "{ [100] (GAS) (MSTORE 0 0x5a60fd55) (SSTORE 11 (CREATE 0 28 4)) (SSTORE 9 (SUB @100 (GAS))) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/DelegateCallOnEIPFiller.json ================================================ { "DelegateCallOnEIP" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x12", "0x08" : "0xb6f9", "0x09" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should work on EIP150 rules", "code" : "{ [8] (GAS) (SSTORE 9 (DELEGATECALL 600000 0 0 0 0)) [[8]] (SUB @8 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should be 12 in the post state", "code" : "{ (SSTORE 0 0x12) } ", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/ExecuteCallThatAskForeGasThenTrabsactionHasFiller.json ================================================ { "ExecuteCallThatAskForeGasThenTrabsactionHas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x0c" } } } } ], "pre" : { "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[1]] (CALL 600000 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000", "code" : "{ [[1]] 12 }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/NewGasPriceForCodesFiller.json ================================================ { "NewGasPriceForCodes" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x12", "0x01" : "0x20", "0x02" : "0x1122334455667788991011121314151617181920000000000000000000000000", "0x03" : "0xe8d4498280", "0x04" : "0x12", "0x07" : "0x01", "0x08" : "0x01", "0x0a" : "0x02cb0a", "0x64" : "0x11" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "111", "code" : ":raw 0x1122334455667788991011121314151617181920212223242526272829303132", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 100 0x11) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "Test gasPrice of these codes after EIP150 transition", "code" : "{ [999] (GAS) (SSTORE 1 (EXTCODESIZE )) (EXTCODECOPY 0 0 20) (SSTORE 2 (MLOAD 0)) (SSTORE 4 (SLOAD 0)) (SSTORE 5 (CALL 30000 1 0 0 0 0)) (SSTORE 6 (CALLCODE 30000 1 0 0 0 0)) (SSTORE 7 (DELEGATECALL 30000 0 0 0 0)) (SSTORE 8 (CALL 30000 0x1000000000000000000000000000000000000013 0 0 0 0 0)) (SSTORE 3 (BALANCE )) (SSTORE 10 (SUB (MLOAD 999) (GAS))) }", "storage": { "0x00" : "0x12" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/SuicideToExistingContractFiller.json ================================================ { "SuicideToExistingContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x73ff00", "storage" : {} }, "" : { "storage" : { "0x01" : "0x1dd5" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check gas spent on suicide known contract on EIP150", "code" : "{ [0] (GAS) (CALL 60000 0 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "Suicide to existing account", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/SuicideToNotExistingContractFiller.json ================================================ { "SuicideToNotExistingContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x732000000000000000000000000000000000000115ff00", "storage" : {} }, "" : { "storage" : { "0x01" : "0x27fd" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check gas spent on suicide to unknown contract on EIP150", "code" : "{ [0] (GAS) (CALL 60000 0 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "Suicide to not existing account", "code" : "{ (SELFDESTRUCT 0x2000000000000000000000000000000000000115) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/Transaction64Rule_d64e0Filler.json ================================================ { "Transaction64Rule_d64e0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x0c" } }, "" : { "storage" : { "0x02" : "0x60a4" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check gas spent on suicide known contract on EIP150", "code" : "{ [0] (GAS) (CALL 160000 0 0 0 0 0) [[2]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[1]] 12 }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160062" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/Transaction64Rule_d64m1Filler.json ================================================ { "Transaction64Rule_d64m1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x0c" } }, "" : { "storage" : { "0x02" : "0x60a4" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check gas spent on suicide known contract on EIP150", "code" : "{ [0] (GAS) (CALL 160000 0 0 0 0 0) [[2]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[1]] 12 }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160061" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/Transaction64Rule_d64p1Filler.json ================================================ { "Transaction64Rule_d64p1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x0c" } }, "" : { "storage" : { "0x02" : "0x60a4" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check gas spent on suicide known contract on EIP150", "code" : "{ [0] (GAS) (CALL 160000 0 0 0 0 0) [[2]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[1]] 12 }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160063" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150Specific/Transaction64Rule_integerBoundariesFiller.yml ================================================ Transaction64Rule_integerBoundaries: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Danno Ferrin danno.ferrin@gmail.com" pre: # End with a STOP 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x600060FF00 # 0 PUSH1 0 # 2 PUSH1 FF # 4 STOP nonce: 0 storage: {} 000000000000000000000000000000000000c0de: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let initialgas := gas() let callgas := calldataload(0) pop(call(callgas, 0x1000, 0, 0, 0, 0, 0x20)) sstore(0, lt(gas(), initialgas)) pop(callcode(callgas, 0x1000, 0, 0, 0, 0, 0x20)) sstore(1, lt(gas(), initialgas)) pop(delegatecall(callgas, 0x1000, 0, 0x20, 0, 0x20)) sstore(2, lt(gas(), initialgas)) pop(staticcall(callgas, 0x1000, 0, 0x20, 0, 0x20)) sstore(3, lt(gas(), initialgas)) } nonce: '0' storage: {} 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x10000000000000000 code: '' nonce: '0x00' storage: {} transaction: data: - :label int8 :raw 0x000000000000000000000000000000000000000000000000000000000000007f - :label uint8 :raw 0x000000000000000000000000000000000000000000000000000000000000008f - :label int16 :raw 0x0000000000000000000000000000000000000000000000000000000000007fff - :label uint16 :raw 0x0000000000000000000000000000000000000000000000000000000000008fff - :label int32 :raw 0x000000000000000000000000000000000000000000000000000000007fffffff - :label uint32 :raw 0x000000000000000000000000000000000000000000000000000000008fffffff - :label int64 :raw 0x0000000000000000000000000000000000000000000000007fffffffffffffff - :label uint64 :raw 0x0000000000000000000000000000000000000000000000008fffffffffffffff - :label int128 :raw 0x000000000000000000000000000000007fffffffffffffffffffffffffffffff - :label uint128 :raw 0x000000000000000000000000000000008fffffffffffffffffffffffffffffff - :label int256 :raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - :label uint256 :raw 0x8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff gasLimit: - 800000 gasPrice: 10 nonce: 0 to: 000000000000000000000000000000000000c0de value: - 0 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000000c0de: storage: 0x00: 1 0x01: 1 0x02: 1 0x03: 1 ================================================ FILE: tests/static/state_tests/stEIP150Specific/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawBalanceGasFiller.json ================================================ { "RawBalanceGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "116" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (BALANCE ) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasAskFiller.json ================================================ { "RawCallCodeGasAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x60a3", "0x02" : "0x0727bb" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 3000000 0 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasFiller.json ================================================ { "RawCallCodeGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x60a3", "0x02" : "0x752e" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 30000 0 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAskFiller.json ================================================ { "RawCallCodeGasMemoryAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x6408", "0x02" : "0x072464" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 3000000 0 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryFiller.json ================================================ { "RawCallCodeGasMemory" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x6408", "0x02" : "0x752e" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 30000 0 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferAskFiller.json ================================================ { "RawCallCodeGasValueTransferAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x7acf", "0x02" : "0x070e1c" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 3000000 10 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferFiller.json ================================================ { "RawCallCodeGasValueTransfer" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x7acf", "0x02" : "0x7e2a" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 30000 10 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAskFiller.json ================================================ { "RawCallCodeGasValueTransferMemoryAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x7e34", "0x02" : "0x070ac4" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 3000000 10 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryFiller.json ================================================ { "RawCallCodeGasValueTransferMemory" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x7e34", "0x02" : "0x7e2a" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALLCODE 30000 10 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallGasAskFiller.json ================================================ { "RawCallGasAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x0727bb" } }, "" : { "storage" : { "0x01" : "0x60a3" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 3000000 0 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallGasFiller.json ================================================ { "RawCallGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x752e" } }, "" : { "storage" : { "0x01" : "0x60a3" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 30000 0 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallGasValueTransferAskFiller.json ================================================ { "RawCallGasValueTransferAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x070e1c" } }, "" : { "storage" : { "0x01" : "0x7acf" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 3000000 10 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallGasValueTransferFiller.json ================================================ { "RawCallGasValueTransfer" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x7e2a" } }, "" : { "storage" : { "0x01" : "0x7acf" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 30000 10 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAskFiller.json ================================================ { "RawCallGasValueTransferMemoryAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x070ac4" } }, "" : { "storage" : { "0x01" : "0x7e34" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 3000000 10 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryFiller.json ================================================ { "RawCallGasValueTransferMemory" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x7e2a" } }, "" : { "storage" : { "0x01" : "0x7e34" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 30000 10 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallMemoryGasAskFiller.json ================================================ { "RawCallMemoryGasAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x072464" } }, "" : { "storage" : { "0x01" : "0x6408" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 3000000 0 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCallMemoryGasFiller.json ================================================ { "RawCallMemoryGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x752e" } }, "" : { "storage" : { "0x01" : "0x6408" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CALL 30000 0 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer2Filler.json ================================================ { "RawCreateFailGasValueTransfer2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "33391" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CREATE 11 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransferFiller.json ================================================ { "RawCreateFailGasValueTransfer" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x7d16" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CREATE 11 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCreateGasFiller.json ================================================ { "RawCreateGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x7d16" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "0" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CREATE 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCreateGasMemoryFiller.json ================================================ { "RawCreateGasMemory" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x826f" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "0" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CREATE 0 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCreateGasValueTransferFiller.json ================================================ { "RawCreateGasValueTransfer" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x7d16" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "10" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CREATE 10 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawCreateGasValueTransferMemoryFiller.json ================================================ { "RawCreateGasValueTransferMemory" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x826f" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "balance" : "10" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (CREATE 10 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawDelegateCallGasAskFiller.json ================================================ { "RawDelegateCallGasAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x60a0", "0x02" : "0x0727be" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (DELEGATECALL 3000000 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawDelegateCallGasFiller.json ================================================ { "RawDelegateCallGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x60a0", "0x02" : "0x752e" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (DELEGATECALL 30000 0 0 0 0) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAskFiller.json ================================================ { "RawDelegateCallGasMemoryAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x6405", "0x02" : "0x072467" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (DELEGATECALL 3000000 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryFiller.json ================================================ { "RawDelegateCallGasMemory" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x01" : "0x6405", "0x02" : "0x752e" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ [[2]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (DELEGATECALL 30000 0 8000 0 8000) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawExtCodeCopyGasFiller.json ================================================ { "RawExtCodeCopyGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x0a45" } } } } ], "pre" : { "" : { "balance" : "", "code" : ":raw 0x0112233445566778899101112131415161718191202122232425", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (EXTCODECOPY 32 0 20) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawExtCodeCopyMemoryGasFiller.json ================================================ { "RawExtCodeCopyMemoryGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x1354" } } } } ], "pre" : { "" : { "balance" : "", "code" : ":raw 0x0112233445566778899101112131415161718191202122232425", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (EXTCODECOPY 32 0 11120) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/RawExtCodeSizeGasFiller.json ================================================ { "RawExtCodeSizeGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x0a38" } } } } ], "pre" : { "" : { "balance" : "", "code" : ":raw 0x0112233445566778899101112131415161718191202122232425", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0] (GAS) (EXTCODESIZE ) [[1]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/eip2929-ffFiller.yml ================================================ # The EIP2929 changes in SELFDESTRUCT (opcode 0xFF) eip2929-ff: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # The address that gets the funds from the self-destruct 000000000000000000000000000000000000DE57: balance: '0x0' code: ':raw 0x00' nonce: '0' storage: {} # Do a SELFDESTRUCT and give 0xDE57 your remaining gas 000000000000000000000000000000000000ca11: balance: '0xde0b6b3a7640000' # 1 ETH code: | { (selfdestruct 0xDE57) } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'operation $4) (def 'measurementCost 0x08) ; Make sure not to be overwritten by extcodecopy (def 'gasB4 0x100) (def 'gasAfter 0x120) ; Write something so the storage won't be new [gasB4] 0xFF [gasAfter] 0xFF (def 'NOP 0) (def 'dest 0xDE57) ; destination address ; Read so access to that account later won't trigger EIP2929 costs (balance 0xca11) ; If we need to add the destination address to the active set, ; do so. (if (= operation 0x31) (balance dest) NOP) (if (= operation 0x3B) (extcodesize dest) NOP) (if (= operation 0x3C) (extcodecopy dest 0 0 1) NOP) (if (= operation 0x3F) (extcodehash dest) NOP) (if (= operation 0xF1) (call 0x10000 dest 0 0 0 0 0) NOP) (if (= operation 0xF2) (callcode 0x10000 dest 0 0 0 0 0) NOP) (if (= operation 0xF4) (delegatecall 0x10000 dest 0 0 0 0) NOP) (if (= operation 0xFA) (staticcall 0x10000 dest 0 0 0 0) NOP) ; Look just as the gas cost of the SELFDESTRUCT [gasB4] (gas) (call 0x1000000 0xca11 0 0 0 0 0) [gasAfter] (gas) [[0]] (- @gasB4 @gasAfter measurementCost) ; Get the gas cost of BALANCE for dest. This is ; to verify, in the case of :label simple, that the ; destination address is indeed touched by the SELFDESTRUCT ; that sends it money [gasB4] (gas) (balance dest) [gasAfter] (gas) [[1]] (- @gasB4 @gasAfter measurementCost) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Just run the SELFDESTRUCT - :label simple :abi f(uint) 0x00 # Add the destination address to the active set first # (in various ways) - :label balance :abi f(uint) 0x31 - :label extcodesize :abi f(uint) 0x3B - :label extcodecopy :abi f(uint) 0x3C - :label extcodehash :abi f(uint) 0x3F - :label call :abi f(uint) 0xF1 - :label callcode :abi f(uint) 0xF2 - :label delegatecall :abi f(uint) 0xF4 - :label staticcall :abi f(uint) 0xFA gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label simple gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 7726 1: 105 - indexes: data: - :label balance - :label extcodesize - :label extcodecopy - :label extcodehash - :label call - :label callcode - :label delegatecall - :label staticcall gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 5126 1: 105 ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/eip2929Filler.yml ================================================ # Deal with all EIP2929 changes except for the change to # SELFDESTRUCT eip2929: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 000000000000000000000000000000000000ca11: balance: '0x0ba1a9ce0ba1a9ce' code: ':raw 0x00' nonce: '0' storage: {} # Get the balance of the 0xCA11 account. To show # that looking at an address twice, in two different # contracts (during the same transaction) only # incurs one eip2929 charge. 000000000000000000000000000000ca1100ca11: balance: '0x0ba1a9ce0ba1a9ce' code: | { (balance 0xca11) } nonce: '0' storage: {} # Access storage 0x100 from a different account 00000000000000000000000000000000ca110100: balance: '0x0ba1a9ce0ba1a9ce' code: | { @@0x100 } nonce: '0' storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'oper1 $4) (def 'oper2 $36) (def 'oper3 $68) (def 'NOP 0) (def 'measurementCost 0x022a) (def 'gasB4 0x00) (def 'gasAfter 0x20) (def 'operation 0x40) ; Write to the memory so memory allocation won't affect the ; measurement [gasB4] (gas) [gasAfter] (gas) ; Read addresses so that won't affect the measurement (balance 0xca1100ca11) (balance 0xca110100) (def 'tests { (if (= @operation 1) @@0x100 NOP) ; SLOAD (if (= @operation 2) [[0x100]] 5 NOP) ; SSTORE (if (= @operation 11) (balance 0xca11) NOP) ; BALANCE (if (= @operation 12) (extcodesize 0xca11) NOP) ; EXTCODESIZE (if (= @operation 13) (extcodecopy 0xca11 0 0 0) NOP) ; EXTCODECOPY (if (= @operation 14) (extcodehash 0xca11) NOP) ; EXTCODEHASH (if (= @operation 21) (call 0x1000 0xca11 0 0 0 0 0) NOP) ; CALL (if (= @operation 22) (callcode 0x1000 0xca11 0 0 0 0 0) NOP) ; CALLCODE (if (= @operation 23) (delegatecall 0x1000 0xca11 0 0 0 0) NOP) ; DELEGATECALL (if (= @operation 24) (staticcall 0x1000 0xca11 0 0 0 0) NOP) ; STATICCALL ; Look at the address 0xca11 in a different account (if (= @operation 31) (call 0x1000 0xca1100ca11 0 0 0 0 0) NOP) ; Read storage in a different account CALLCODE (if (= @operation 32) (callcode 0x1000 0xca110100 0 0 0 0 0) NOP) ; Read storage in a different account DELEGATECALL (if (= @operation 33) (delegatecall 0x1000 0xca110100 0 0 0 0) NOP) } ) ; def 'tests [operation] oper1 [gasB4] (gas) tests [gasAfter] (gas) [[0]] (- @gasB4 @gasAfter measurementCost) [operation] oper2 [gasB4] (gas) tests [gasAfter] (gas) [[1]] (- @gasB4 @gasAfter measurementCost) [operation] oper3 [gasB4] (gas) tests [gasAfter] (gas) [[2]] (- @gasB4 @gasAfter measurementCost) [[0x100]] 0 } nonce: '0' storage: # Gets overwritten, used to avoid the gas cost of new storage 0x100: 0x60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # No operation - :label nop-nop-nop :abi f(uint,uint,uint) 0 0 0 # SLOAD three times - :label sload-sload-sload :abi f(uint,uint,uint) 1 1 1 # SSTORE three times - :label sstore-sstore-sstore :abi f(uint,uint,uint) 2 2 2 # addr is used for most opcodes that read address information # (BALANCE, EXTCODESIZE, and EXTCODEHASH). # BALANCE three times - :label addr-addr-addr :abi f(uint,uint,uint) 11 11 11 # EXTCODESIZE three times - :label addr-addr-addr :abi f(uint,uint,uint) 12 12 12 # EXTCODECOPY three times # Not addr, because it takes seven more gas than the addr # (BALANCE, EXTCODESIZE, EXTCODEHASH) - :label copy-copy-copy :abi f(uint,uint,uint) 13 13 13 # EXTCODEHASH three times - :label addr-addr-addr :abi f(uint,uint,uint) 14 14 14 # call8 is for the expensive CALL opcodes: CALL and CALLCODE # CALL three times - :label call8-call8-call8 :abi f(uint,uint,uint) 21 21 21 # CALLCODE three times - :label call8-call8-call8 :abi f(uint,uint,uint) 22 22 22 # call5 is for the cheap CALL opcodes: DELEGATECALL and STATICCALL # DELEGATECALL three times - :label call5-call5-call5 :abi f(uint,uint,uint) 23 23 23 # STATICCALL three times - :label call5-call5-call5 :abi f(uint,uint,uint) 24 24 24 # Look at an address through a different account, three times - :label faraddr-faraddr-faraddr :abi f(uint,uint,uint) 31 31 31 # Look at storage through a different account using: # CALLCODE - :label farcall8-farcall8-farcall8 :abi f(uint,uint,uint) 32 32 32 # DELEGATECALL - :label farcall5-farcall5-farcall5 :abi f(uint,uint,uint) 33 33 33 ############# Various opcode mixtures # SSTORE and SLOAD mix (same storage cell) - :label sload-sstore-sload :abi f(uint,uint,uint) 1 2 1 # SLOAD, SSTORE and CALLCODE / DELEGATECALL mixes - :label sload-farcall8-farcall5 :abi f(uint,uint,uint) 1 32 33 - :label sload-sstore-farcall5 :abi f(uint,uint,uint) 1 2 33 - :label farcall8-sload-farcall5 :abi f(uint,uint,uint) 32 1 33 - :label farcall5-sload-sstore :abi f(uint,uint,uint) 33 1 2 # address information mixes - :label addr-addr-addr :abi f(uint,uint,uint) 11 12 14 - :label addr-addr-addr :abi f(uint,uint,uint) 11 14 12 - :label addr-addr-addr :abi f(uint,uint,uint) 12 11 14 - :label addr-addr-addr :abi f(uint,uint,uint) 12 14 11 - :label addr-addr-addr :abi f(uint,uint,uint) 14 12 11 - :label addr-addr-addr :abi f(uint,uint,uint) 14 11 12 # CALL mixes - :label call8-call8-call8 :abi f(uint,uint,uint) 21 22 21 - :label call8-call8-call8 :abi f(uint,uint,uint) 22 22 21 - :label call5-call5-call5 :abi f(uint,uint,uint) 23 24 23 - :label call5-call5-call5 :abi f(uint,uint,uint) 23 24 24 # address information and call mixes - :label addr-call8-call8 :abi f(uint,uint,uint) 11 21 22 - :label addr-call8-call8 :abi f(uint,uint,uint) 12 21 22 - :label addr-call8-call8 :abi f(uint,uint,uint) 14 21 22 - :label addr-call8-call8 :abi f(uint,uint,uint) 11 22 21 - :label addr-call8-call8 :abi f(uint,uint,uint) 12 22 21 - :label addr-call8-call8 :abi f(uint,uint,uint) 14 22 21 # Mix local and "remote" reads - :label addr-addr-faraddr :abi f(uint,uint,uint) 11 12 31 - :label addr-faraddr-addr :abi f(uint,uint,uint) 11 31 14 - :label faraddr-addr-addr :abi f(uint,uint,uint) 31 14 11 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # No operation happens, so it should return zero # If it doesn't, check measurementCost - indexes: data: - :label nop-nop-nop gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0 ######### STORAGE ################################################ # SLOAD three times - indexes: data: - :label sload-sload-sload gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2090 0x01: 90 0x02: 90 # SSTORE three times - indexes: data: - :label sstore-sstore-sstore gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 4991 0x01: 91 0x02: 91 # SLOAD, SSTORE, SLOAD (same address) - indexes: data: - :label sload-sstore-sload gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2090 0x01: 2891 0x02: 90 ############################### ADDRESS FUNCTIONS ###################### # BALANCE, EXTCODESIZE, and EXTCODEHASH in various combos. - indexes: data: - :label addr-addr-addr gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2590 0x01: 90 0x02: 90 # EXTCODECOPY three times - indexes: data: - :label copy-copy-copy gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2597 0x01: 97 0x02: 97 # CALL and CALLCODE - indexes: data: - :label call8-call8-call8 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2608 0x01: 108 0x02: 108 # DELEGATECALL and STATICCALL - indexes: data: - :label call5-call5-call5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2605 0x01: 105 0x02: 105 # address information and then call - indexes: data: - :label addr-call8-call8 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2590 0x01: 108 0x02: 108 # Access an address through a different contract - indexes: data: - :label faraddr-faraddr-faraddr gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2711 0x01: 211 0x02: 211 # Mix remote and local requests for data - indexes: data: - :label addr-addr-faraddr gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2590 0x01: 90 0x02: 211 - indexes: data: - :label addr-faraddr-addr gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2590 0x01: 211 0x02: 90 - indexes: data: - :label faraddr-addr-addr gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2711 0x01: 90 0x02: 90 # CALLCODE to read storage - indexes: data: - :label farcall8-farcall8-farcall8 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2211 0x01: 211 0x02: 211 # DELEGATECALL to read storage - indexes: data: - :label farcall5-farcall5-farcall5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2208 0x01: 208 0x02: 208 # Mix of local SLOAD/SSTORE and other contract SLOAD - indexes: data: - :label sload-farcall8-farcall5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2090 0x01: 211 0x02: 208 - indexes: data: - :label sload-sstore-farcall5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2090 0x01: 2891 0x02: 208 - indexes: data: - :label farcall8-sload-farcall5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2211 0x01: 90 0x02: 208 - indexes: data: - :label farcall5-sload-sstore gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 2208 0x01: 90 0x02: 2891 ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/eip2929OOGFiller.yml ================================================ # See that the extra gas cost of EIP2929 causes an out of gas eip2929OOG: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 0000000000000000000000000000000000001054: balance: '0x0ba1a9ce0ba1a9ce' code: | { @@0 } nonce: 1 storage: {} 0000000000000000000000000000000000001055: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x60A7 } nonce: 1 storage: {} 0000000000000000000000000000000000001031: balance: '0x0ba1a9ce0ba1a9ce' code: | { (balance 0xACC7) } nonce: 1 storage: {} 000000000000000000000000000000000000103B: balance: '0x0ba1a9ce0ba1a9ce' code: | { (extcodesize 0x1031) } nonce: 1 storage: {} 000000000000000000000000000000000000103C: balance: '0x0ba1a9ce0ba1a9ce' code: | { (extcodecopy 0x1031 0 0 0x20) } nonce: 1 storage: {} 000000000000000000000000000000000000103F: balance: '0x0ba1a9ce0ba1a9ce' code: | { (extcodehash 0x1031) } nonce: 1 storage: {} 00000000000000000000000000000000000010F1: balance: '0x0ba1a9ce0ba1a9ce' code: | { (call 0x06A5 0xACC7 0 0 0 0 0) } nonce: 1 storage: {} 00000000000000000000000000000000000010F2: balance: '0x0ba1a9ce0ba1a9ce' code: | { (callcode 0x06A5 0xACC7 0 0 0 0 0) } nonce: 1 storage: {} 00000000000000000000000000000000000010F4: balance: '0x0ba1a9ce0ba1a9ce' code: | { (delegatecall 0x06A5 0xACC7 0 0 0 0) } nonce: 1 storage: {} 00000000000000000000000000000000000010FA: balance: '0x0ba1a9ce0ba1a9ce' code: | { (staticcall 0x06A5 0xACC7 0 0 0 0) } nonce: 1 storage: {} # Just an account 000000000000000000000000000000000000ACC7: balance: '0x0ba1a9ce0ba1a9ce' code: | { (return 0 0) } nonce: 1 storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'addr $4) ; the address to call (def 'callGas $36) ; the amount of gas to give it [[0]] (call callGas addr 0 0 0 0 0) } nonce: 1 storage: # Gets overwritten 0x0: 0x60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: 1 storage: {} transaction: data: # SLOAD - :label failEIP2929 :abi f(uint,uint) 0x1054 2000 # SSTORE - :label failEIP2929 :abi f(uint,uint) 0x1055 22000 # BALANCE - :label failEIP2929 :abi f(uint,uint) 0x1031 2000 # EXTCODESIZE - :label failEIP2929 :abi f(uint,uint) 0x103B 2500 # EXTCODECOPY - :label failEIP2929 :abi f(uint,uint) 0x103C 2500 # EXTCODEHASH - :label failEIP2929 :abi f(uint,uint) 0x103F 2500 # CALL - :label failEIP2929 :abi f(uint,uint) 0x10F1 1750 # CALLCODE - :label failEIP2929 :abi f(uint,uint) 0x10F2 1750 # DELEGATECALL - :label failEIP2929 :abi f(uint,uint) 0x10F4 1750 # STATICCALL - :label failEIP2929 :abi f(uint,uint) 0x10FA 1750 gasLimit: - '16777216' gasPrice: '10' nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # Berlin and above should fail (not enough gas) - indexes: data: - :label failEIP2929 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0 ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostBerlinFiller.yml ================================================ gasCostBerlin: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { ; LLL doesn't let us call arbitrary code, so we craft ; a new contract with the opcode and then call it to see ; how much the contract cost ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'opcode 0x200) (def 'contractLength 0x220) (def 'constructorLength 0x240) (def 'i 0x260) (def 'addr 0x280) (def 'gasB4 0x300) (def 'gasAfter 0x320) (def 'expectedCost 0x340) ; Maximum length of contract (def 'maxLength 0x100) ; Code in memory (def 'constructorCode 0x000) (def 'contractCode (+ constructorCode maxLength)) ; contractCode has to be immediately after constructoCode ; for us to send it as part of the constructor code ; Cost of everything around the opcode (def 'sysCost 0xb9) ; Understand the input [opcode] (shr $ 0 248) [expectedCost] (and (shr $ 0 232) 0xFFFF) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Craft the contract ; First, 17 pushes. SWAP16 looks that far down in the stack [i] 17 (while @i { ; until i is zero [i] (- @i 1) ; PUSH2 0xDATA (mstore8 (+ contractCode @contractLength) 0x61) (mstore8 (+ contractCode @contractLength 1) 0xDA) (mstore8 (+ contractCode @contractLength 2) 0x7A) [contractLength] (+ @contractLength 3) }) ; while i ; Run the opcode and then STOP (mstore8 (+ contractCode @contractLength) @opcode) (mstore8 (+ contractCode @contractLength 1) 0x00) [contractLength] (+ @contractLength 2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Create the constructor. Use the memory where the ; contract already exists [constructorLength] (lll { (codecopy contractCode contractCode maxLength) (return contractCode maxLength) ; wasteful (the contract is ; a lot shorter), but easy } constructorCode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Create the contract. Use enough length so it'll ; also include the contract code. Again, wasteful ; but easy [addr] (create 0 constructorCode (* maxLength 2)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Actually call the contract and see the gas cost [gasB4] (gas) (call 0x10000 @addr 0 0 0 0 0) [gasAfter] (gas) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Output [[0]] (- @gasB4 @gasAfter sysCost @expectedCost) [[1]] @expectedCost } nonce: '0' storage: 0: 60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # MSB LSB # # Encoding the expected cost in the data means that if a fork changes # the cost of an opcode we'll need a new test file. However, the other # option is to have a copy of expect: for each opcode with the # cost, which would be IMAO too cumbersome # - :raw 0x000000 # STOP - :raw 0x010003 # ADD - :raw 0x020005 # MUL - :raw 0x030003 # SUB - :raw 0x040005 # DIV # d: 5 \/ - :raw 0x050005 # SDIV - :raw 0x060005 # MOD - :raw 0x070005 # SMOD - :raw 0x080008 # ADDMOD - :raw 0x090008 # MULMOD # d: 10 \/ - :raw 0x0B0005 # SIGNEXTEND - :raw 0x100003 # LT - :raw 0x110003 # GT - :raw 0x120003 # SLT - :raw 0x130003 # SGT # d: 15 \/ - :raw 0x140003 # EQ - :raw 0x150003 # ISZERO - :raw 0x160003 # AND - :raw 0x170003 # OR - :raw 0x180003 # XOR # d: 20 \/ - :raw 0x190003 # NOT - :raw 0x1A0003 # BYTE - :raw 0x300002 # ADDRESS # SLOAD and BALANCE had their cost changed since the yellow paper # See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1884.md - :raw 0x310A28 # BALANCE ** CHANGED IN BERLIN ** - :raw 0x320002 # ORIGIN # d:25 \/ - :raw 0x330002 # CALLER - :raw 0x340002 # CALLVALUE - :raw 0x350003 # CALLDATALOAD - :raw 0x360002 # CALLDATASIZE - :raw 0x380002 # CODESIZE # d:30 \/ - :raw 0x3A0002 # GASPRICE - :raw 0x3B0A28 # EXTCODESIZE ** CHANGED IN BERLIN ** - :raw 0x400014 # BLOCKHASH - :raw 0x410002 # COINBASE - :raw 0x420002 # TIMESTAMP # d:35 \/ - :raw 0x430002 # NUMBER - :raw 0x440002 # DIFFICULTY - :raw 0x450002 # GASLIMIT - :raw 0x500002 # POP # Memory opcodes get their own test, because the value depends # on the memory being accessed # SLOAD and BALANCE had their cost changed since the yellow paper # See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1884.md - :raw 0x540834 # SLOAD ** CHANGED IN BERLIN ** # d: 40 \/ - :raw 0x555654 # SSTORE (from a zero to a non zero) ** CHANGED IN BERLIN ** - :raw 0x580002 # PC - :raw 0x590002 # MSIZE - :raw 0x5A0002 # GAS - :raw 0x5B0001 # JUMPDEST # Look below for PUSH, SWAP, and DUP. I put them after the interesting # opcodes # d: 45 \/ - :raw 0xFF1DB0 # SELFDESTRUCT ** CHANGED IN BERLIN ** # All the PUSH commands will read a bunch of bytes which are all zero # and push that value - :raw 0x600003 - :raw 0x610003 - :raw 0x620003 - :raw 0x630003 - :raw 0x640003 - :raw 0x650003 - :raw 0x660003 - :raw 0x670003 - :raw 0x680003 - :raw 0x690003 - :raw 0x6A0003 - :raw 0x6B0003 - :raw 0x6C0003 - :raw 0x6D0003 - :raw 0x6E0003 - :raw 0x6F0003 - :raw 0x700003 - :raw 0x710003 - :raw 0x720003 - :raw 0x730003 - :raw 0x740003 - :raw 0x750003 - :raw 0x760003 - :raw 0x770003 - :raw 0x780003 - :raw 0x790003 - :raw 0x7A0003 - :raw 0x7B0003 - :raw 0x7C0003 - :raw 0x7D0003 - :raw 0x7E0003 - :raw 0x7F0003 # DUP - :raw 0x800003 - :raw 0x810003 - :raw 0x820003 - :raw 0x830003 - :raw 0x840003 - :raw 0x850003 - :raw 0x860003 - :raw 0x870003 - :raw 0x880003 - :raw 0x890003 - :raw 0x8A0003 - :raw 0x8B0003 - :raw 0x8C0003 - :raw 0x8D0003 - :raw 0x8E0003 - :raw 0x8F0003 # SWAP - :raw 0x900003 - :raw 0x910003 - :raw 0x920003 - :raw 0x930003 - :raw 0x940003 - :raw 0x950003 - :raw 0x960003 - :raw 0x970003 - :raw 0x980003 - :raw 0x990003 - :raw 0x9A0003 - :raw 0x9B0003 - :raw 0x9C0003 - :raw 0x9D0003 - :raw 0x9E0003 - :raw 0x9F0003 # Opcodes skipped for complexity # Opcodes skipped for complexity that other tests cover # # 0x0A EXP # stEIP150singleCodeGasPrices/gasCostExp.yml # # 0x20 SHA # 0x37 CALLDATACOPY # 0x39 CODECOPY # 0xA0 LOG0 # 0xA1 LOG1 # 0xA2 LOG2 # 0xA3 LOG3 # 0xA4 LOG4 # stEIP150singleCodeGasPrices/gasCostMemSeg.yml # # 0x56 JUMP # 0x57 JUMPI # stEIP150singleCodeGasPrices/gasCostJump.yml # # 0xF2 CALLCODE # stEIP150singleCodeGasPrices/RawCallCodeGasMemoryFiller.json # # 0xF1 CALL # stEIP150singleCodeGasPrices/RawCallGasAskFiller.json # # 0xF0 CREATE # stEIP150singleCodeGasPrices/RawCreateGasFiller.json # # 0xF3 RETURN # stEIP150singleCodeGasPrices/gasCostReturn.yml # # 0xF4 DELEGATECALL # stEIP150singleCodeGasPrices/RawDelegateCallGasAskFiller.json # # 0x3C EXTCODECOPY # stEIP150singleCodeGasPrices/RawExtCodeCopyGasFiller.json gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: value: - 1 secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0 0x01: 'ANY' ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostExpFiller.yml ================================================ gasCostExp: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'powerOf 0x000) ; A to the power of @powerOf (def 'expectedCost 0x020) ; Expected gas cost (def 'gasB4 0x040) ; Before the action being measured (def 'gasAfter 0x060) ; After the action being measured ; Understand CALLDATA. It is four bytes of function ; selector (irrelevant) followed by 32 byte words ; of the parameters [powerOf] $4 [expectedCost] $36 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Run the operation [gasB4] (gas) (exp 2 @powerOf) [gasAfter] (gas) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Return value [[0]] (- @gasB4 @gasAfter @expectedCost) } nonce: '0' storage: 0: 60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # # fun(powerOf,cost) # # The cost of EXP depends on the base 256 log of the value we raise # to the power of. The total gas cost is 0x20 for x^0, plus 0x32 for # each "unit" (so 0x52 for x^1 to x^255, 0x84 for x^256 to x^0xFFFF, etc.) - :abi fun(uint,uint) 0x00000000 0x20 - :abi fun(uint,uint) 0x00000001 0x52 - :abi fun(uint,uint) 0x000000FF 0x52 - :abi fun(uint,uint) 0x00000100 0x84 - :abi fun(uint,uint) 0x0000FFFF 0x84 - :abi fun(uint,uint) 0x00010000 0xB6 - :abi fun(uint,uint) 0x00FFFFFF 0xB6 - :abi fun(uint,uint) 0x01000000 0xE8 - :abi fun(uint,uint) 0xFFFFFFFF 0xE8 gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: value: - 1 secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0 ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostFiller.yml ================================================ gasCost: # This test only applies to Istanbul, # But there is a similar test, gasCostBerlin, which applies # to all subsequent forks (so far, I'm writing this between Paris and Shanghai) env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { ; LLL doesn't let us call arbitrary code, so we craft ; a new contract with the opcode and then call it to see ; how much the contract cost ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'opcode 0x200) (def 'contractLength 0x220) (def 'constructorLength 0x240) (def 'i 0x260) (def 'addr 0x280) (def 'gasB4 0x300) (def 'gasAfter 0x320) (def 'expectedCost 0x340) ; Maximum length of contract (def 'maxLength 0x100) ; Code in memory (def 'constructorCode 0x000) (def 'contractCode (+ constructorCode maxLength)) ; contractCode has to be immediately after constructoCode ; for us to send it as part of the constructor code ; Cost of everything around the opcode (def 'sysCost 0x311) ; Understand the input [opcode] (shr $ 0 248) [expectedCost] (and (shr $ 0 232) 0xFFFF) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Craft the contract ; First, 17 pushes. SWAP16 looks that far down in the stack [i] 17 (while @i { ; until i is zero [i] (- @i 1) ; PUSH2 0xDATA (mstore8 (+ contractCode @contractLength) 0x61) (mstore8 (+ contractCode @contractLength 1) 0xDA) (mstore8 (+ contractCode @contractLength 2) 0x7A) [contractLength] (+ @contractLength 3) }) ; while i ; Run the opcode and then STOP (mstore8 (+ contractCode @contractLength) @opcode) (mstore8 (+ contractCode @contractLength 1) 0x00) [contractLength] (+ @contractLength 2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Create the constructor. Use the memory where the ; contract already exists [constructorLength] (lll { (codecopy contractCode contractCode maxLength) (return contractCode maxLength) ; wasteful (the contract is ; a lot shorter), but easy } constructorCode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Create the contract. Use enough length so it'll ; also include the contract code. Again, wasteful ; but easy [addr] (create 0 constructorCode (* maxLength 2)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Actually call the contract and see the gas cost [gasB4] (gas) (call 0x10000 @addr 0 0 0 0 0) [gasAfter] (gas) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Output [[0]] (- @gasB4 @gasAfter sysCost @expectedCost) [[1]] @expectedCost } nonce: '0' storage: 0: 60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # MSB LSB # # Encoding the expected cost in the data means that if a fork changes # the cost of an opcode we'll need a new test file. However, the other # option is to have a copy of expect: for each opcode with the # cost, which would be IMAO too cumbersome # - :raw 0x000000 # STOP - :raw 0x010003 # ADD - :raw 0x020005 # MUL - :raw 0x030003 # SUB - :raw 0x040005 # DIV # d: 5 \/ - :raw 0x050005 # SDIV - :raw 0x060005 # MOD - :raw 0x070005 # SMOD - :raw 0x080008 # ADDMOD - :raw 0x090008 # MULMOD # d: 10 \/ - :raw 0x0B0005 # SIGNEXTEND - :raw 0x100003 # LT - :raw 0x110003 # GT - :raw 0x120003 # SLT - :raw 0x130003 # SGT # d: 15 \/ - :raw 0x140003 # EQ - :raw 0x150003 # ISZERO - :raw 0x160003 # AND - :raw 0x170003 # OR - :raw 0x180003 # XOR # d: 20 \/ - :raw 0x190003 # NOT - :raw 0x1A0003 # BYTE - :raw 0x300002 # ADDRESS # SLOAD and BALANCE had their cost changed since the yellow paper # See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1884.md - :raw 0x3102BC # BALANCE - :raw 0x320002 # ORIGIN # d:25 \/ - :raw 0x330002 # CALLER - :raw 0x340002 # CALLVALUE - :raw 0x350003 # CALLDATALOAD - :raw 0x360002 # CALLDATASIZE - :raw 0x380002 # CODESIZE # d:30 \/ - :raw 0x3A0002 # GASPRICE - :raw 0x3B02BC # EXTCODESIZE - :raw 0x400014 # BLOCKHASH - :raw 0x410002 # COINBASE - :raw 0x420002 # TIMESTAMP # d:35 \/ - :raw 0x430002 # NUMBER - :raw 0x440002 # DIFFICULTY - :raw 0x450002 # GASLIMIT - :raw 0x500002 # POP # Memory opcodes get their own test, because the value depends # on the memory being accessed # SLOAD and BALANCE had their cost changed since the yellow paper # See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1884.md - :raw 0x540320 # SLOAD # d: 40 \/ - :raw 0x554E20 # SSTORE (from a zero to a non zero) - :raw 0x580002 # PC - :raw 0x590002 # MSIZE - :raw 0x5A0002 # GAS - :raw 0x5B0001 # JUMPDEST # Look below for PUSH, SWAP, and DUP. I put them after the interesting # opcodes # d: 45 \/ - :raw 0xFF1388 # SELFDESTRUCT # All the PUSH commands will read a bunch of bytes which are all zero # and push that value - :raw 0x600003 - :raw 0x610003 - :raw 0x620003 - :raw 0x630003 - :raw 0x640003 - :raw 0x650003 - :raw 0x660003 - :raw 0x670003 - :raw 0x680003 - :raw 0x690003 - :raw 0x6A0003 - :raw 0x6B0003 - :raw 0x6C0003 - :raw 0x6D0003 - :raw 0x6E0003 - :raw 0x6F0003 - :raw 0x700003 - :raw 0x710003 - :raw 0x720003 - :raw 0x730003 - :raw 0x740003 - :raw 0x750003 - :raw 0x760003 - :raw 0x770003 - :raw 0x780003 - :raw 0x790003 - :raw 0x7A0003 - :raw 0x7B0003 - :raw 0x7C0003 - :raw 0x7D0003 - :raw 0x7E0003 - :raw 0x7F0003 # DUP - :raw 0x800003 - :raw 0x810003 - :raw 0x820003 - :raw 0x830003 - :raw 0x840003 - :raw 0x850003 - :raw 0x860003 - :raw 0x870003 - :raw 0x880003 - :raw 0x890003 - :raw 0x8A0003 - :raw 0x8B0003 - :raw 0x8C0003 - :raw 0x8D0003 - :raw 0x8E0003 - :raw 0x8F0003 # SWAP - :raw 0x900003 - :raw 0x910003 - :raw 0x920003 - :raw 0x930003 - :raw 0x940003 - :raw 0x950003 - :raw 0x960003 - :raw 0x970003 - :raw 0x980003 - :raw 0x990003 - :raw 0x9A0003 - :raw 0x9B0003 - :raw 0x9C0003 - :raw 0x9D0003 - :raw 0x9E0003 - :raw 0x9F0003 # Opcodes skipped for complexity # Opcodes skipped for complexity that other tests cover # # 0x0A EXP # stEIP150singleCodeGasPrices/gasCostExp.yml # # 0x20 SHA # 0x37 CALLDATACOPY # 0x39 CODECOPY # 0xA0 LOG0 # 0xA1 LOG1 # 0xA2 LOG2 # 0xA3 LOG3 # 0xA4 LOG4 # stEIP150singleCodeGasPrices/gasCostMemSeg.yml # # 0x56 JUMP # 0x57 JUMPI # stEIP150singleCodeGasPrices/gasCostJump.yml # # 0xF2 CALLCODE # stEIP150singleCodeGasPrices/RawCallCodeGasMemoryFiller.json # # 0xF1 CALL # stEIP150singleCodeGasPrices/RawCallGasAskFiller.json # # 0xF0 CREATE # stEIP150singleCodeGasPrices/RawCreateGasFiller.json # # 0xF3 RETURN # stEIP150singleCodeGasPrices/gasCostReturn.yml # # 0xF4 DELEGATECALL # stEIP150singleCodeGasPrices/RawDelegateCallGasAskFiller.json # # 0x3C EXTCODECOPY # stEIP150singleCodeGasPrices/RawExtCodeCopyGasFiller.json gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: value: - 1 secretKey: "" expect: - indexes: data: - "0-22" - "24-30" - "32-38" - "41-44" - "46-200" gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda8 0x01: 'ANY' - indexes: data: - !!int 39 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 700 0x01: 'ANY' - indexes: data: - !!int 40 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 1500 0x01: 'ANY' - indexes: data: - !!int 45 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 2000 0x01: 'ANY' - indexes: data: - !!int 23 - !!int 31 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x0514 0x01: 'ANY' ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostJumpFiller.yml ================================================ gasCostJump: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: # Baseline cost, without any jumps 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x600060005B5B00 # 0 PUSH1 0 # 2 PUSH1 5 # 4 JUMPDEST # 5 JUMPDEST # 6 STOP nonce: 0 storage: {} # Cost with one JUMPDEST replaced with a JUMP 0000000000000000000000000000000000002000: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x60006005565B00 # 0 PUSH1 0 # 2 PUSH1 5 # 4 JUMP # 5 JUMPDEST # 6 STOP nonce: 0 storage: {} # Cost with one JUMPDEST replaced with a JUMPI 0000000000000000000000000000000000003000: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x60016005575B00 # 0 PUSH1 1 # 2 PUSH1 5 # 4 JUMPI # 5 JUMPDEST # 6 STOP nonce: 0 storage: {} # Cost with one JUMPDEST replaced with a JUMPI that doesn't jump 0000000000000000000000000000000000004000: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x60006005575B00 # 0 PUSH1 0 # 2 PUSH1 5 # 4 JUMPI # 5 JUMPDEST # 6 STOP nonce: 0 storage: {} 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '0x0ba1a9ce0ba1a9ce' code: | { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'gasB4 0x000) ; Before the action being measured ; Gas cost for a baseline operation (call a contract that does mstore ; and then mload) (def 'gasBaseline 0x020) ; Gas for for the action intself (call a contract plus ) (def 'gasAction 0x040) ; Understand CALLDATA. It is four bytes of function ; selector (irrelevant) followed by 32 byte words ; of the parameters (def 'action $4 ) (def 'expectedCost $36) ; Constants (def 'NOP 0) ; No operation (for if statements) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Define the actions ; Store the gas amount (def 'gas0 [gasB4] (gas)) ; Get the baseline cost (def 'getBaseline { gas0 (call 0x10000 0x01000 0 0 0 0 0) [gasBaseline] (- @gasB4 (gas)) }) ; def 'getBaseline ; The actions ; JUMP (def 'actJump { gas0 (call 0x10000 0x02000 0 0 0 0 0) [gasAction] (- @gasB4 (gas)) }) ; def 'actJump ; JUMPI - success (def 'actJumpiT { gas0 (call 0x10000 0x03000 0 0 0 0 0) [gasAction] (- @gasB4 (gas)) }) ; def 'actJumpiT ; JUMPI - failure (def 'actJumpiF { gas0 (call 0x10000 0x04000 0 0 0 0 0) [gasAction] (- @gasB4 (gas)) }) ; def 'actJumpiF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Run the operation getBaseline (if (= action 1) actJump NOP) (if (= action 2) actJumpiT NOP) (if (= action 3) actJumpiF NOP) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Output [[0]] (- @gasAction @gasBaseline expectedCost) } nonce: '0' storage: 0: 60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # # fun(action, expectedCost) # # # JUMPI costs two units more than JUMP - :abi fun(uint,uint) 1 0x04 - :abi fun(uint,uint) 2 0x06 - :abi fun(uint,uint) 3 0x06 gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - 1 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: storage: 0x00: 0 ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostMemSegFiller.yml ================================================ gasCostMemSeg: # Opcodes that involve memory segments: # # SHA # CODECOPY # CALLDATACOPY # LOG0 # LOG1 # LOG2 # LOG3 # LOG4 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'gasB4 0x000) ; Before the action being measured (def 'gasAfter 0x020) ; After the action being measured (def 'afterVars 0x100) ; Memory after the variables, ; safe to copy into ; Understand CALLDATA. It is four bytes of function ; selector (irrelevant) followed by 32 byte words ; of the parameters (def 'opcode $4 ) (def 'length $36) (def 'expectedCost $68) ; NOP for if statements (def 'NOP 0) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Run the operation ; SHA3 (if (= opcode 0x20) { [gasB4] (gas) (sha3 0 length) [gasAfter] (gas) } NOP) ; CALLDATACOPY (if (= opcode 0x37) { [gasB4] (gas) (calldatacopy afterVars 0 length) [gasAfter] (gas) } NOP) ; CODECOPY (if (= opcode 0x39) { [gasB4] (gas) (codecopy afterVars 0 length) [gasAfter] (gas) } NOP) ; LOG0 (if (= opcode 0xA0) { [gasB4] (gas) (log0 0 length) [gasAfter] (gas) } NOP) ; LOG1 (if (= opcode 0xA1) { [gasB4] (gas) (log1 0 length 1) [gasAfter] (gas) } NOP) ; LOG2 (if (= opcode 0xA2) { [gasB4] (gas) (log2 0 length 1 2) [gasAfter] (gas) } NOP) ; LOG3 (if (= opcode 0xA3) { [gasB4] (gas) (log3 0 length 1 2 3) [gasAfter] (gas) } NOP) ; LOG4 (if (= opcode 0xA4) { [gasB4] (gas) (log4 0 length 1 2 3 4) [gasAfter] (gas) } NOP) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Return value [[0]] (- @gasB4 @gasAfter expectedCost) } nonce: '0' storage: 0: 60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # # fun(opcode,length,expectedCost,filler,filler,filler) # Lots of extra parameters for a long CALLDATA to be copied # # SHA3 # Nine gas per word, six for the SHA3 and three for the memory access # 0 \/ - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0001 0x3A 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0020 0x3A 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0021 0x43 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0040 0x43 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0060 0x4C 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF # 5 \/ - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0080 0x55 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x00A0 0x5E 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x00C0 0x67 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x00E0 0x70 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x20 0x0100 0x79 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF # CALLDATACOPY # Six gas per word, six for the CALLDATACOPY and three for the memory access # 10 \/ - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0001 0x35 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0020 0x35 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0021 0x3B 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0040 0x3B 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0060 0x41 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF # 15 \/ - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0080 0x47 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x00A0 0x4D 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x00C0 0x53 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x00E0 0x59 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x37 0x0100 0x5F 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF # CODECOPY # Six gas per word, six for the CODECOPY and three for the memory access # 20 \/ - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0001 0x35 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0020 0x35 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0021 0x3B 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0040 0x3B 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0060 0x41 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF # 25 \/ - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0080 0x47 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x00A0 0x4D 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x00C0 0x53 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x00E0 0x59 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF - :abi fun(uint,uint,uint,uint,uint,uint) 0x39 0x0100 0x5F 0xDEAD60A7 0xDEADBEEF 0x60A7BEEF # LOG0 30 \/ 8 gas per byte - :abi fun(uint,uint,uint) 0xA0 0 0x018b - :abi fun(uint,uint,uint) 0xA0 1 0x0193 - :abi fun(uint,uint,uint) 0xA0 2 0x019b - :abi fun(uint,uint,uint) 0xA0 3 0x01a3 - :abi fun(uint,uint,uint) 0xA0 4 0x01ab # LOG1 35 \/ 8 gas per byte - :abi fun(uint,uint,uint) 0xA1 0 0x0305 - :abi fun(uint,uint,uint) 0xA1 1 0x030d - :abi fun(uint,uint,uint) 0xA1 2 0x0315 - :abi fun(uint,uint,uint) 0xA1 3 0x031d - :abi fun(uint,uint,uint) 0xA1 4 0x0325 # LOG2 40 \/ 8 gas per byte - :abi fun(uint,uint,uint) 0xA2 0 0x047f - :abi fun(uint,uint,uint) 0xA2 1 0x0487 - :abi fun(uint,uint,uint) 0xA2 2 0x048f - :abi fun(uint,uint,uint) 0xA2 3 0x0497 - :abi fun(uint,uint,uint) 0xA2 4 0x049f # LOG3 45 \/ 8 gas per byte - :abi fun(uint,uint,uint) 0xA3 0 0x05f9 - :abi fun(uint,uint,uint) 0xA3 1 0x0601 - :abi fun(uint,uint,uint) 0xA3 2 0x0609 - :abi fun(uint,uint,uint) 0xA3 3 0x0611 - :abi fun(uint,uint,uint) 0xA3 4 0x0619 # LOG4 50 \/ 8 gas per byte - :abi fun(uint,uint,uint) 0xA4 0 0x0773 - :abi fun(uint,uint,uint) 0xA4 1 0x077b - :abi fun(uint,uint,uint) 0xA4 2 0x0783 - :abi fun(uint,uint,uint) 0xA4 3 0x078b - :abi fun(uint,uint,uint) 0xA4 4 0x0793 gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: value: - 1 secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0 ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostMemoryFiller.yml ================================================ gasCostMemory: # Note: In the main contract the test doesn't look below memory address 0x0100, # because that's where the contract's variables are env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: # Baseline cost, mstore followed by mload 000000000000000000000000000000000000ba5e: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore $0 0x60A7) (mload $0) } nonce: 0 storage: {} # Extra: mstore followed by two mloads 000000000000000000000000000000000010ba5e: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore $0 0x60A7) (mload $0) (mload $0) } nonce: 0 storage: {} # Extra: mstore, mload, and then mstore 000000000000000000000000000000000011ba5e: balance: '0x0ba1a9ce0ba1a9ce' code: | { (mstore $0 0x60A7) (mload $0) (mstore $0 0x60A7) } nonce: 0 storage: {} 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '0x0ba1a9ce0ba1a9ce' code: | { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'action 0x000) ; Action to take with the memory (def 'addr 0x020) ; Address to read / write (def 'expectedCost 0x040) ; Expected gas cost (def 'gasB4 0x060) ; Before the action being measured (def 'gasAfter 0x080) ; After the action being measured ; Gas cost for a baseline operation (call a contract that does mstore ; and then mload) (def 'gasBaseline 0x0A0) ; Gas for for the action intself (call a contract plus ) (def 'gasAction 0x0C0) ; Temporary values (def 'temp 0x0E0) ; Understand CALLDATA. It is four bytes of function ; selector (irrelevant) followed by 32 byte words ; of the parameters [action] $4 [addr] $36 [expectedCost] $68 ; Constants (def 'NOP 0) ; No operation (for if statements) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Define the actions ; Store the gas amounts (def 'gas0 [gasB4] (gas)) (def 'gas1 [gasAfter] (gas)) ; Get the baseline cost (def 'getBaseline { gas0 (call 0x10000 0xba5e 0 addr 0x20 0 0) gas1 [gasBaseline] (- @gasB4 @gasAfter) }) ; def 'getBaseline ; The actions ; 0 - just read the address (def 'act0 { gas0 (mload @addr) gas1 }) ; def 'act0 ; 1 - store a word long value (def 'act1 { gas0 [@addr] 0x60A7 gas1 }) ; def 'act1 ; 2 - store a byte long value (def 'act2 { gas0 (mstore8 @addr 0xFF) gas1 }) ; def 'act2 ; Cost of running just the baseline (def 'act3 getBaseline) ; def 'act3 ; Excess cost of extra mload (def 'act10 { getBaseline gas0 (call 0x10000 0x10ba5e 0 addr 0x20 0 0) gas1 [gasAction] (- @gasB4 @gasAfter) }) ; def 'act10 ; Excess cost of extra mstore (def 'act11 { getBaseline gas0 (call 0x10000 0x11ba5e 0 addr 0x20 0 0) gas1 [gasAction] (- @gasB4 @gasAfter) }) ; def 'act11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Run the operation ; Single operation cost (if (= @action 0) act0 NOP) (if (= @action 1) act1 NOP) (if (= @action 2) act2 NOP) ; Baseline cost (if (= @action 3) act3 NOP) ; Differential costs (if (= @action 0x10) act10 NOP) (if (= @action 0x11) act11 NOP) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Output ; an operation (if (<= @action 2) (sstore 0 (- @gasB4 @gasAfter @expectedCost)) NOP ) ; the baseline (if (= @action 3) (sstore 0 (- @gasBaseline @expectedCost)) NOP ) ; differential costs (if (= 0x10 (and @action 0xF0)) (sstore 0 (- @gasAction @gasBaseline @expectedCost)) NOP ) } nonce: '0' storage: 0: 60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # # fun(action, address, cost) # # 0: The cost to mload increases the higher the address # \/ 0 - :abi fun(uint,uint,uint) 0 0x0100 0x0025 - :abi fun(uint,uint,uint) 0 0x0120 0x0028 - :abi fun(uint,uint,uint) 0 0x0140 0x002b - :abi fun(uint,uint,uint) 0 0x0160 0x002e - :abi fun(uint,uint,uint) 0 0x0180 0x0031 # \/ 5 - :abi fun(uint,uint,uint) 0 0x0200 0x003d - :abi fun(uint,uint,uint) 0 0x0300 0x0056 - :abi fun(uint,uint,uint) 0 0x0400 0x006f - :abi fun(uint,uint,uint) 0 0x0800 0x00d5 - :abi fun(uint,uint,uint) 0 0x1000 0x01ad # \/ 10 - :abi fun(uint,uint,uint) 0 0x2000 0x038e - :abi fun(uint,uint,uint) 0 0x3000 0x05ae # 1: The cost to mstore is one more than the cost to mload - :abi fun(uint,uint,uint) 1 0x0100 0x0026 - :abi fun(uint,uint,uint) 1 0x0120 0x0029 - :abi fun(uint,uint,uint) 1 0x0140 0x002c # \/ 15 - :abi fun(uint,uint,uint) 1 0x0160 0x002f - :abi fun(uint,uint,uint) 1 0x0180 0x0032 - :abi fun(uint,uint,uint) 1 0x0200 0x003e - :abi fun(uint,uint,uint) 1 0x0300 0x0057 - :abi fun(uint,uint,uint) 1 0x0400 0x0070 # \/ 20 - :abi fun(uint,uint,uint) 1 0x0800 0x00d6 - :abi fun(uint,uint,uint) 1 0x1000 0x01ae - :abi fun(uint,uint,uint) 1 0x2000 0x038f - :abi fun(uint,uint,uint) 1 0x3000 0x05af # 2: The cost to mstore8 is the same as mstore - :abi fun(uint,uint,uint) 2 0x0100 0x0026 # \/ 25 - :abi fun(uint,uint,uint) 2 0x0120 0x0029 - :abi fun(uint,uint,uint) 2 0x0140 0x002c - :abi fun(uint,uint,uint) 2 0x0160 0x002f - :abi fun(uint,uint,uint) 2 0x0180 0x0032 - :abi fun(uint,uint,uint) 2 0x0200 0x003e # \/ 30 - :abi fun(uint,uint,uint) 2 0x0300 0x0057 - :abi fun(uint,uint,uint) 2 0x0400 0x0070 - :abi fun(uint,uint,uint) 2 0x0800 0x00d6 - :abi fun(uint,uint,uint) 2 0x1000 0x01ae - :abi fun(uint,uint,uint) 2 0x2000 0x038f # \/ 35 - :abi fun(uint,uint,uint) 2 0x3000 0x05af # 3: The cost of the baseline contract # Starting at this point it's fine to check memory below # 0x0100 because the called contracts don't have variables - :abi fun(uint,uint,uint) 3 0x0000 0x02F6 - :abi fun(uint,uint,uint) 3 0x0020 0x02F9 - :abi fun(uint,uint,uint) 3 0x0040 0x02FC - :abi fun(uint,uint,uint) 3 0x0060 0x02FF # \/ 40 - :abi fun(uint,uint,uint) 3 0x0080 0x0302 - :abi fun(uint,uint,uint) 3 0x0100 0x030e - :abi fun(uint,uint,uint) 3 0x0200 0x0326 - :abi fun(uint,uint,uint) 3 0x0400 0x0358 - :abi fun(uint,uint,uint) 3 0x0800 0x03be # \/ 45 - :abi fun(uint,uint,uint) 3 0x1000 0x0496 - :abi fun(uint,uint,uint) 3 0x2000 0x0677 - :abi fun(uint,uint,uint) 3 0x4000 0x0af8 - :abi fun(uint,uint,uint) 3 0x8000 0x16fa # 0x10 - the differential cost of an extra mload - :abi fun(uint,uint,uint) 0x10 0x0000 0x08 # \/ 50 - :abi fun(uint,uint,uint) 0x10 0x0010 0x08 - :abi fun(uint,uint,uint) 0x10 0x0020 0x08 - :abi fun(uint,uint,uint) 0x10 0x0040 0x08 - :abi fun(uint,uint,uint) 0x10 0x0080 0x08 - :abi fun(uint,uint,uint) 0x10 0x0100 0x08 # \/ 55 - :abi fun(uint,uint,uint) 0x10 0x0200 0x08 - :abi fun(uint,uint,uint) 0x10 0x0400 0x08 - :abi fun(uint,uint,uint) 0x10 0x0800 0x08 - :abi fun(uint,uint,uint) 0x10 0x1000 0x08 - :abi fun(uint,uint,uint) 0x10 0x2000 0x08 # \/ 60 - :abi fun(uint,uint,uint) 0x10 0x4000 0x08 - :abi fun(uint,uint,uint) 0x10 0x8000 0x08 # 0x11 - the differential cost of an extra mstore (and a push for the value) - :abi fun(uint,uint,uint) 0x11 0x0000 0x0b - :abi fun(uint,uint,uint) 0x11 0x0010 0x0b - :abi fun(uint,uint,uint) 0x11 0x0020 0x0b # \/ 65 - :abi fun(uint,uint,uint) 0x11 0x0040 0x0b - :abi fun(uint,uint,uint) 0x11 0x0080 0x0b - :abi fun(uint,uint,uint) 0x11 0x0100 0x0b - :abi fun(uint,uint,uint) 0x11 0x0200 0x0b - :abi fun(uint,uint,uint) 0x11 0x0400 0x0b # \/ 70 - :abi fun(uint,uint,uint) 0x11 0x0800 0x0b - :abi fun(uint,uint,uint) 0x11 0x1000 0x0b - :abi fun(uint,uint,uint) 0x11 0x2000 0x0b - :abi fun(uint,uint,uint) 0x11 0x4000 0x0b - :abi fun(uint,uint,uint) 0x11 0x8000 0x0b gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - 1 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # Berlin, for costs that don't include contract calls - indexes: data: - !!int 0 - !!int 1 - !!int 2 - !!int 3 - !!int 4 - !!int 5 - !!int 6 - !!int 7 - !!int 8 - !!int 9 - !!int 10 - !!int 11 - !!int 12 - !!int 13 - !!int 14 - !!int 15 - !!int 16 - !!int 17 - !!int 18 - !!int 19 - !!int 20 - !!int 21 - !!int 22 - !!int 23 - !!int 24 - !!int 25 - !!int 26 - !!int 27 - !!int 28 - !!int 29 - !!int 30 - !!int 31 - !!int 32 - !!int 33 - !!int 34 - !!int 35 - !!int 49 - !!int 50 - !!int 51 - !!int 52 - !!int 53 - !!int 54 - !!int 55 - !!int 56 - !!int 57 - !!int 58 - !!int 59 - !!int 60 - !!int 61 - !!int 62 - !!int 63 - !!int 64 - !!int 65 - !!int 66 - !!int 67 - !!int 68 - !!int 69 - !!int 70 - !!int 71 - !!int 72 - !!int 73 - !!int 74 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: storage: 0x00: 0 # Berlin, for costs that do include a contract call (and tare therefore - indexes: data: - !!int 36 - !!int 37 - !!int 38 - !!int 39 - !!int 40 - !!int 41 - !!int 42 - !!int 43 - !!int 44 - !!int 45 - !!int 46 - !!int 47 - !!int 48 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: storage: 0x00: 0x076c ================================================ FILE: tests/static/state_tests/stEIP150singleCodeGasPrices/gasCostReturnFiller.yml ================================================ gasCostReturn: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 # Human readable information _info: comment: "Ori Pomerantz qbzzt1@gmail.com" pre: # End with a STOP : balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x600060FF00 # 0 PUSH1 0 # 2 PUSH1 FF # 4 STOP nonce: 0 storage: {} # End with a RETURN : balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x600060FFF3 # 0 PUSH1 0 # 2 PUSH1 FF # 4 RETURN nonce: 0 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Initialization ; Variables (0x20 byte wide) (def 'gasB4 0x000) ; Before the action being measured ; Gas for the STOP call (def 'gasSTOP 0x020) ; Gas for the RETURN call (def 'gasRETURN 0x040) ; Play with the variables here to avoid having the memory allocation ; affect the gas calculation [gasB4] 0x60A7 [gasSTOP] 0x60A7 [gasRETURN] 0x60A7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Run the operation [gasB4] (gas) (call 0x10000 0x1000 0 0 0 0 0) [gasSTOP] (- @gasB4 (gas)) [gasB4] (gas) (call 0x10000 0x2000 0 0 0 0 0) [gasRETURN] (- @gasB4 (gas)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Output ; STOP and RETURN should have the same cost [[0]] (- @gasSTOP @gasRETURN) } nonce: '0' storage: 0: 60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - :raw 0x00 gasLimit: - 16777216 gasPrice: 10 nonce: 0 to: value: - 1 secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0 0x01: 0 ================================================ FILE: tests/static/state_tests/stEIP1559/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stEIP1559/baseFeeDiffPlacesFiller.yml ================================================ # Created by tests/src/Templates/DiffPlaces/templateGen.js # # With the template code: # // basefee is still not supported in Yul 0.8.5 # # # mstore(0, verbatim_0i_1o(hex"48")) # # # # Expected result: 10 # baseFeeDiffPlaces: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: # It is not trivial to use the Yul compiler to get the # binary code for the code we're checking, so we'll use EXTCODECOPY # from this contract 000000000000000000000000000000000000C0DE: balance: 1000000000000000000 code: | :yul berlin { // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) // Here the result is is mload(0). We want to run it, but // prefix it with a zero so we'll be safe from being considered // an invalid program. // // If we use this as a constructor the result will be // the code of the created contract, but we can live // with that. We won't call it. mstore(0x40, mload(0x00)) return(0x3F, 0x21) } nonce: 1 storage: {} # When we create a contract and then call it, we don't want the # zero prefix in the return value 000000000000000000000000000000000020C0DE: balance: 1000000000000000000 code: | :yul berlin { // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) // Here the result is is mload(0). return(0x00, 0x20) } nonce: 1 storage: {} # Code for a construct to create a contract with the template code 00000000000000000000000000000000C0DEC0DE: balance: 1000000000000000000 code: | :yul berlin { let addr := 0x20C0DE let length := extcodesize(addr) // Read the code from 0x20C0DE extcodecopy(addr, 0, 0, length) // Return this memory as the code for the contract return(0, length) } nonce: 1 storage: {} # Perform the action (directly or indirectly). Either way, # store the result in sload(0). cccccccccccccccccccccccccccccccccccccccc: balance: 1000000000000000000 code: | :yul berlin { let action := calldataload(4) let res := 1 // If the result of a call is revert, revert here too let addr := 1 // If the result of CREATE[2] is zero, it reverted // For when we need code in our memory let codeBuffer := 0x20 // When running the template in the constructor let codeLength := extcodesize(0xC0DE) // When running the template in the created code let codeLength2 := extcodesize(0xC0DEC0DE) // Goat should be overwritten mstore(0, 0x60A7) switch action case 0 { // run the code snippet as normal code // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) } // One level of call stack case 0xF1 { // call a contract to run this code res := call(gas(), 0xca11, 0, 0, 0, 0, 0x20) // call template code } case 0xF2 { // callcode a contract to run this code res := callcode(gas(), 0xca11, 0, 0, 0, 0, 0x20) } case 0xF4 { // delegate call a contract to run this code res := delegatecall(gas(), 0xca11, 0, 0, 0, 0x20) } case 0xFA { // static call a contract to run this code res := staticcall(gas(), 0xca11, 0, 0, 0, 0x20) } // Two levels of call stack case 0xF1F1 { // call, call res := call(gas(), 0xca1100f1, 0, 0, 0, 0, 0x20) } case 0xF2F1 { // callcode, call res := callcode(gas(), 0xca1100f1, 0, 0, 0, 0, 0x20) } case 0xF4F1 { // delegatecall, call res := delegatecall(gas(), 0xca1100f1, 0, 0, 0, 0x20) } case 0xFAF1 { // staticcall, call res := staticcall(gas(), 0xca1100f1, 0, 0, 0, 0x20) } case 0xF1F2 { // call, callcode res := call(gas(), 0xca1100f2, 0, 0, 0, 0, 0x20) } case 0xF2F2 { // callcode, callcode res := callcode(gas(), 0xca1100f2, 0, 0, 0, 0, 0x20) } case 0xF4F2 { // delegatecall, callcode res := delegatecall(gas(), 0xca1100f2, 0, 0, 0, 0x20) } case 0xFAF2 { // staticcall, callcode res := staticcall(gas(), 0xca1100f2, 0, 0, 0, 0x20) } case 0xF1F4 { // call, delegatecall res := call(gas(), 0xca1100f4, 0, 0, 0, 0, 0x20) } case 0xF2F4 { // callcode, delegatecall res := callcode(gas(), 0xca1100f4, 0, 0, 0, 0, 0x20) } case 0xF4F4 { // delegatecall, delegatecall res := delegatecall(gas(), 0xca1100f4, 0, 0, 0, 0x20) } case 0xFAF4 { // staticcall, delegatecall res := staticcall(gas(), 0xca1100f4, 0, 0, 0, 0x20) } case 0xF1FA { // call, staticcall res := call(gas(), 0xca1100fa, 0, 0, 0, 0, 0x20) } case 0xF2FA { // callcode, staticcall res := callcode(gas(), 0xca1100fa, 0, 0, 0, 0, 0x20) } case 0xF4FA { // delegatecall, staticcall res := delegatecall(gas(), 0xca1100fa, 0, 0, 0, 0x20) } case 0xFAFA { // staticcall, staticcall res := staticcall(gas(), 0xca1100fa, 0, 0, 0, 0x20) } case 0xFD { // Rerun the code after a REVERT // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) sstore(0, mload(0)) pop(call(gas(), 0x60BACC, 0, 0, 0, 0, 0)) // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) // The two results should be equal if iszero(eq(sload(0), mload(0))) {mstore(0, 0xBADBADBAD)} } case 0xFE { // Rerun the code after an out of gas // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) sstore(0, mload(0)) pop(call(25000, 0x60006, 0, 0, 0, 0, 0)) // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) // The two results should be equal if iszero(eq(sload(0), mload(0))) {mstore(0, 0xBADBADBAD)} } case 0xFF { // Rerun the code after a SELFDESTRUCT // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) sstore(0, mload(0)) pop(call(gas(), 0xDEADDEAD, 0, 0, 0, 0, 0)) // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) // The two results should be equal if iszero(eq(sload(0), mload(0))) {mstore(0, 0xBADBADBAD)} } case 0xF0 { // CREATE, run the code in the constructor // Read the code from 0xC0DE and create a contract based on it extcodecopy(0xC0DE, codeBuffer, 0, codeLength) addr := create(1000000000000000000, codeBuffer, codeLength) // Read the created contract, that is the result // We start it from the second byte so the first byte of // code will be STOP (0x00). Otherwise we might run into // invalid program issues (because the result isn't a valid // program extcodecopy(addr, 0, 1, 0x20) } case 0xF5 { // CREATE2, run the code in the constructor // Read the code from 0xC0DE and create a contract based on it extcodecopy(0xC0DE, codeBuffer, 0, codeLength) addr := create2(1000000000000000000, codeBuffer, codeLength, 0x5a17) // Read the created contract, that is the result // We start it from the second byte so the first byte of // code will be STOP (0x00). Otherwise we might run into // invalid program issues (because the result isn't a valid // program extcodecopy(addr, 0, 1, 0x20) } case 0xF0F1 { // CREATE, then CALL the created code for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create(1000000000000000000, codeBuffer, codeLength2) // Call the contract res := call(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF5F1 { // CREATE2, then CALL the created code for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create2(1000000000000000000, codeBuffer, codeLength2, 0x5a17) // Call the contract res := call(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF0F2 { // CREATE, then CALLCODE the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create(0, codeBuffer, codeLength2) // Call the contract res := callcode(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF5F2 { // CREATE2, then CALLCODE the created code for // the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create2(0, codeBuffer, codeLength2, 0x5a17) // Call the contract res := callcode(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF0F4 { // CREATE, then DELEGATECALL the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create(0, codeBuffer, codeLength2) // Call the contract res := delegatecall(gas(), addr, 0, 0, 0, 0x20) } case 0xF5F4 { // CREATE2, then DELEGATECALL the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create2(0, codeBuffer, codeLength2, 0x5a17) // Call the contract res := delegatecall(gas(), addr, 0, 0, 0, 0x20) } case 0xF0FA { // CREATE, then CALLSTATIC the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create(1000000000000000000, codeBuffer, codeLength2) // Call the contract res := staticcall(gas(), addr, 0, 0, 0, 0x20) } case 0xF5FA { // CREATE2, then STATICCALL the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create2(1000000000000000000, codeBuffer, codeLength2, 0x5a17) // Call the contract res := staticcall(gas(), addr, 0, 0, 0, 0x20) } // Recurse (= run backwards) case 0x60BACCFA57 { mstore(0, 1023) res := call(gas(), 0x60BACCFA57, 0, 0, 0x20, 0, 0x20) } default { // Fail, we should never get here mstore(0, 0xBAD0BAD0BAD0) } // If res is zero, that means a call failed, so fail too if iszero(res) { revert(0,0x20) } // If addr is zero, that means a create failed, so fail too if iszero(addr) { revert(0,0x20) } // Here the result is is mload(0), store it so // the test can check it sstore(0, mload(0)) } nonce: 1 storage: 0: 0x60A7 # To be overwritten by the code snippet # Called to perform the code snippet and return the result 000000000000000000000000000000000000ca11: balance: '1000000000000000000' code: | :yul berlin { // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to CALL the code (two level call stack) 00000000000000000000000000000000ca1100f1: balance: '1000000000000000000' code: | :yul berlin { if iszero(call(gas(), 0xca11, 0, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to CALLCODE the code (two level call stack) 00000000000000000000000000000000ca1100f2: balance: '1000000000000000000' code: | :yul berlin { if iszero(callcode(gas(), 0xca11, 0, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to DELEGATECALL the code (two level call stack) 00000000000000000000000000000000ca1100f4: balance: '1000000000000000000' code: | :yul berlin { if iszero(delegatecall(gas(), 0xca11, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to STATICCALL the code (two level call stack) 00000000000000000000000000000000ca1100fa: balance: '1000000000000000000' code: | :yul berlin { if iszero(staticcall(gas(), 0xca11, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Failures (to run the code after a failure, see it works) # Out of gas 0000000000000000000000000000000000060006: balance: '1000000000000000000' code: | :yul berlin { // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) sstore(0,mload(0)) invalid() } nonce: 1 storage: 0: 0x60A7 # If it changes, we have a problem # REVERT 000000000000000000000000000000000060BACC: balance: '1000000000000000000' code: | :yul berlin { // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) sstore(0,mload(0)) revert(0,0x20) } nonce: 1 storage: 0: 0x60A7 # If it changes, we have a problem # SELFDESTRUCT 00000000000000000000000000000000DEADDEAD: balance: '1000000000000000000' code: | :yul berlin { selfdestruct(0) } nonce: 1 storage: {} # Recursively call until reaching the stack depth, then run the template 00000000000000000000000000000060BACCFA57: balance: 1000000000000000000 code: | :yul berlin { let depth := calldataload(0) if eq(depth,0) { // basefee is still not supported in Yul 0.8.5 mstore(0, verbatim_0i_1o(hex"48")) return(0, 0x20) } // Dig deeper mstore(0, sub(depth,1)) // Call yourself with depth-1 if iszero(call(gas(), 0x60BACCFA57, 0, 0, 0x20, 0, 0x20)) { // Propagate failure if we failed revert(0, 0x20) } // Propagate success return (0, 0x20) } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000000000000000 code: '0x' nonce: 1 storage: {} transaction: data: # Run the code snippet normally - :label normal :abi f(uint) 0x00 # Single level call stack # CALL - :label normal :abi f(uint) 0xf1 # CALLCODE - :label normal :abi f(uint) 0xf2 # DELEGATECALL - :abi f(uint) 0xf4 # STATICCALL - :abi f(uint) 0xfa # Two level call stack # CALL CALL - :abi f(uint) 0xf1f1 # CALLCODE CALL - :abi f(uint) 0xf2f1 # DELEGATECALL CALL - :abi f(uint) 0xf4f1 # STATICCALL CALL - :abi f(uint) 0xfaf1 # CALL CALLCODE - :abi f(uint) 0xf1f2 # CALLCODE CALLCODE - :abi f(uint) 0xf2f2 # DELEGATECALL CALLCODE - :abi f(uint) 0xf4f2 # STATICCALL CALLCODE - :abi f(uint) 0xfaf2 # CALL DELEGATECALL - :abi f(uint) 0xf1f4 # CALLCODE DELEGATECALL - :abi f(uint) 0xf2f4 # DELEGATECALL DELEGATECALL - :abi f(uint) 0xf4f4 # STATICCALL DELEGATECALL - :abi f(uint) 0xfaf4 # CALL STATICCALL - :abi f(uint) 0xf1fa # CALLCODE STATICCALL - :abi f(uint) 0xf2fa # DELEGATECALL STATICCALL - :abi f(uint) 0xf4fa # STATICCALL STATICCALL - :abi f(uint) 0xfafa # Call after something fails # REVERT - :abi f(uint) 0xfd # Out of gas - :abi f(uint) 0xfe # SELFDESTRUCT - :abi f(uint) 0xff # Combined with creation of contracts # CREATE (run code in the constructor) - :abi f(uint) 0xf0 # CREATE2 (run code in the constructor) - :abi f(uint) 0xf5 # CREATE and then CALL - :abi f(uint) 0xf0f1 # CREATE2 and then CALL - :abi f(uint) 0xf5f1 # CREATE and then CALLCODE - :abi f(uint) 0xf0f2 # CREATE2 and then CALLCODE - :abi f(uint) 0xf5f2 # CREATE and then DELEGATECALL - :abi f(uint) 0xf0f4 # CREATE2 and then DELEGATECALL - :abi f(uint) 0xf5f4 # CREATE and then STATICCALL - :abi f(uint) 0xf0fa # CREATE2 and then STATICCALL - :abi f(uint) 0xf5fa # Recurse almost until the limit - :abi f(uint) 0x60BACCFA57 gasLimit: - 0x10000000000000 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc value: - 0 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" gasPrice: 2000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun=Osaka' result: cccccccccccccccccccccccccccccccccccccccc: storage: # The result we expect 0x00: 10 000000000000000000000000000000000060BACC: storage: 0x00: 0x60A7 # Anything that happens should be reverted out of 0000000000000000000000000000000000060006: storage: 0x00: 0x60A7 # Anything that happens should be reverted out of ================================================ FILE: tests/static/state_tests/stEIP1559/gasPriceDiffPlacesFiller.yml ================================================ # Created by tests/src/Templates/DiffPlaces/templateGen.js # # With the template code: # mstore(0, gasprice()) # # # # Expected result: 2000 # gasPriceDiffPlaces: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: # It is not trivial to use the Yul compiler to get the # binary code for the code we're checking, so we'll use EXTCODECOPY # from this contract 000000000000000000000000000000000000C0DE: balance: 1000000000000000000 code: | :yul berlin { mstore(0, gasprice()) // Here the result is is mload(0). We want to run it, but // prefix it with a zero so we'll be safe from being considered // an invalid program. // // If we use this as a constructor the result will be // the code of the created contract, but we can live // with that. We won't call it. mstore(0x40, mload(0x00)) return(0x3F, 0x21) } nonce: 1 storage: {} # When we create a contract and then call it, we don't want the # zero prefix in the return value 000000000000000000000000000000000020C0DE: balance: 1000000000000000000 code: | :yul berlin { mstore(0, gasprice()) // Here the result is is mload(0). return(0x00, 0x20) } nonce: 1 storage: {} # Code for a construct to create a contract with the template code 00000000000000000000000000000000C0DEC0DE: balance: 1000000000000000000 code: | :yul berlin { let addr := 0x20C0DE let length := extcodesize(addr) // Read the code from 0x20C0DE extcodecopy(addr, 0, 0, length) // Return this memory as the code for the contract return(0, length) } nonce: 1 storage: {} # Perform the action (directly or indirectly). Either way, # store the result in sload(0). cccccccccccccccccccccccccccccccccccccccc: balance: 1000000000000000000 code: | :yul berlin { let action := calldataload(4) let res := 1 // If the result of a call is revert, revert here too let addr := 1 // If the result of CREATE[2] is zero, it reverted // For when we need code in our memory let codeBuffer := 0x20 // When running the template in the constructor let codeLength := extcodesize(0xC0DE) // When running the template in the created code let codeLength2 := extcodesize(0xC0DEC0DE) // Goat should be overwritten mstore(0, 0x60A7) switch action case 0 { // run the code snippet as normal code mstore(0, gasprice()) } // One level of call stack case 0xF1 { // call a contract to run this code res := call(gas(), 0xca11, 0, 0, 0, 0, 0x20) // call template code } case 0xF2 { // callcode a contract to run this code res := callcode(gas(), 0xca11, 0, 0, 0, 0, 0x20) } case 0xF4 { // delegate call a contract to run this code res := delegatecall(gas(), 0xca11, 0, 0, 0, 0x20) } case 0xFA { // static call a contract to run this code res := staticcall(gas(), 0xca11, 0, 0, 0, 0x20) } // Two levels of call stack case 0xF1F1 { // call, call res := call(gas(), 0xca1100f1, 0, 0, 0, 0, 0x20) } case 0xF2F1 { // callcode, call res := callcode(gas(), 0xca1100f1, 0, 0, 0, 0, 0x20) } case 0xF4F1 { // delegatecall, call res := delegatecall(gas(), 0xca1100f1, 0, 0, 0, 0x20) } case 0xFAF1 { // staticcall, call res := staticcall(gas(), 0xca1100f1, 0, 0, 0, 0x20) } case 0xF1F2 { // call, callcode res := call(gas(), 0xca1100f2, 0, 0, 0, 0, 0x20) } case 0xF2F2 { // callcode, callcode res := callcode(gas(), 0xca1100f2, 0, 0, 0, 0, 0x20) } case 0xF4F2 { // delegatecall, callcode res := delegatecall(gas(), 0xca1100f2, 0, 0, 0, 0x20) } case 0xFAF2 { // staticcall, callcode res := staticcall(gas(), 0xca1100f2, 0, 0, 0, 0x20) } case 0xF1F4 { // call, delegatecall res := call(gas(), 0xca1100f4, 0, 0, 0, 0, 0x20) } case 0xF2F4 { // callcode, delegatecall res := callcode(gas(), 0xca1100f4, 0, 0, 0, 0, 0x20) } case 0xF4F4 { // delegatecall, delegatecall res := delegatecall(gas(), 0xca1100f4, 0, 0, 0, 0x20) } case 0xFAF4 { // staticcall, delegatecall res := staticcall(gas(), 0xca1100f4, 0, 0, 0, 0x20) } case 0xF1FA { // call, staticcall res := call(gas(), 0xca1100fa, 0, 0, 0, 0, 0x20) } case 0xF2FA { // callcode, staticcall res := callcode(gas(), 0xca1100fa, 0, 0, 0, 0, 0x20) } case 0xF4FA { // delegatecall, staticcall res := delegatecall(gas(), 0xca1100fa, 0, 0, 0, 0x20) } case 0xFAFA { // staticcall, staticcall res := staticcall(gas(), 0xca1100fa, 0, 0, 0, 0x20) } case 0xFD { // Rerun the code after a REVERT mstore(0, gasprice()) sstore(0, mload(0)) pop(call(gas(), 0x60BACC, 0, 0, 0, 0, 0)) mstore(0, gasprice()) // The two results should be equal if iszero(eq(sload(0), mload(0))) {mstore(0, 0xBADBADBAD)} } case 0xFE { // Rerun the code after an out of gas mstore(0, gasprice()) sstore(0, mload(0)) pop(call(25000, 0x60006, 0, 0, 0, 0, 0)) mstore(0, gasprice()) // The two results should be equal if iszero(eq(sload(0), mload(0))) {mstore(0, 0xBADBADBAD)} } case 0xFF { // Rerun the code after a SELFDESTRUCT mstore(0, gasprice()) sstore(0, mload(0)) pop(call(gas(), 0xDEADDEAD, 0, 0, 0, 0, 0)) mstore(0, gasprice()) // The two results should be equal if iszero(eq(sload(0), mload(0))) {mstore(0, 0xBADBADBAD)} } case 0xF0 { // CREATE, run the code in the constructor // Read the code from 0xC0DE and create a contract based on it extcodecopy(0xC0DE, codeBuffer, 0, codeLength) addr := create(1000000000000000000, codeBuffer, codeLength) // Read the created contract, that is the result // We start it from the second byte so the first byte of // code will be STOP (0x00). Otherwise we might run into // invalid program issues (because the result isn't a valid // program extcodecopy(addr, 0, 1, 0x20) } case 0xF5 { // CREATE2, run the code in the constructor // Read the code from 0xC0DE and create a contract based on it extcodecopy(0xC0DE, codeBuffer, 0, codeLength) addr := create2(1000000000000000000, codeBuffer, codeLength, 0x5a17) // Read the created contract, that is the result // We start it from the second byte so the first byte of // code will be STOP (0x00). Otherwise we might run into // invalid program issues (because the result isn't a valid // program extcodecopy(addr, 0, 1, 0x20) } case 0xF0F1 { // CREATE, then CALL the created code for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create(1000000000000000000, codeBuffer, codeLength2) // Call the contract res := call(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF5F1 { // CREATE2, then CALL the created code for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create2(1000000000000000000, codeBuffer, codeLength2, 0x5a17) // Call the contract res := call(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF0F2 { // CREATE, then CALLCODE the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create(0, codeBuffer, codeLength2) // Call the contract res := callcode(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF5F2 { // CREATE2, then CALLCODE the created code for // the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create2(0, codeBuffer, codeLength2, 0x5a17) // Call the contract res := callcode(gas(), addr, 0, 0, 0, 0, 0x20) } case 0xF0F4 { // CREATE, then DELEGATECALL the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create(0, codeBuffer, codeLength2) // Call the contract res := delegatecall(gas(), addr, 0, 0, 0, 0x20) } case 0xF5F4 { // CREATE2, then DELEGATECALL the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) // Here we don't transfer cc..cc's ETH to the new contract // because if we run SELFBALANCE it will run in the context // of CC....CC and therefore return 0 addr := create2(0, codeBuffer, codeLength2, 0x5a17) // Call the contract res := delegatecall(gas(), addr, 0, 0, 0, 0x20) } case 0xF0FA { // CREATE, then CALLSTATIC the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create(1000000000000000000, codeBuffer, codeLength2) // Call the contract res := staticcall(gas(), addr, 0, 0, 0, 0x20) } case 0xF5FA { // CREATE2, then STATICCALL the created code // for the result // Read the code from 0xC0DEC0DE and create a // contract based on it extcodecopy(0xC0DEC0DE, codeBuffer, 0, codeLength2) addr := create2(1000000000000000000, codeBuffer, codeLength2, 0x5a17) // Call the contract res := staticcall(gas(), addr, 0, 0, 0, 0x20) } // Recurse (= run backwards) case 0x60BACCFA57 { mstore(0, 1023) res := call(gas(), 0x60BACCFA57, 0, 0, 0x20, 0, 0x20) } default { // Fail, we should never get here mstore(0, 0xBAD0BAD0BAD0) } // If res is zero, that means a call failed, so fail too if iszero(res) { revert(0,0x20) } // If addr is zero, that means a create failed, so fail too if iszero(addr) { revert(0,0x20) } // Here the result is is mload(0), store it so // the test can check it sstore(0, mload(0)) } nonce: 1 storage: 0: 0x60A7 # To be overwritten by the code snippet # Called to perform the code snippet and return the result 000000000000000000000000000000000000ca11: balance: '1000000000000000000' code: | :yul berlin { mstore(0, gasprice()) return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to CALL the code (two level call stack) 00000000000000000000000000000000ca1100f1: balance: '1000000000000000000' code: | :yul berlin { if iszero(call(gas(), 0xca11, 0, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to CALLCODE the code (two level call stack) 00000000000000000000000000000000ca1100f2: balance: '1000000000000000000' code: | :yul berlin { if iszero(callcode(gas(), 0xca11, 0, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to DELEGATECALL the code (two level call stack) 00000000000000000000000000000000ca1100f4: balance: '1000000000000000000' code: | :yul berlin { if iszero(delegatecall(gas(), 0xca11, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Called to STATICCALL the code (two level call stack) 00000000000000000000000000000000ca1100fa: balance: '1000000000000000000' code: | :yul berlin { if iszero(staticcall(gas(), 0xca11, 0, 0, 0, 0x20)) { revert(0,0x20) } return(0, 0x20) // return the result as our return value } nonce: 1 storage: {} # Failures (to run the code after a failure, see it works) # Out of gas 0000000000000000000000000000000000060006: balance: '1000000000000000000' code: | :yul berlin { mstore(0, gasprice()) sstore(0,mload(0)) invalid() } nonce: 1 storage: 0: 0x60A7 # If it changes, we have a problem # REVERT 000000000000000000000000000000000060BACC: balance: '1000000000000000000' code: | :yul berlin { mstore(0, gasprice()) sstore(0,mload(0)) revert(0,0x20) } nonce: 1 storage: 0: 0x60A7 # If it changes, we have a problem # SELFDESTRUCT 00000000000000000000000000000000DEADDEAD: balance: '1000000000000000000' code: | :yul berlin { selfdestruct(0) } nonce: 1 storage: {} # Recursively call until reaching the stack depth, then run the template 00000000000000000000000000000060BACCFA57: balance: 1000000000000000000 code: | :yul berlin { let depth := calldataload(0) if eq(depth,0) { mstore(0, gasprice()) return(0, 0x20) } // Dig deeper mstore(0, sub(depth,1)) // Call yourself with depth-1 if iszero(call(gas(), 0x60BACCFA57, 0, 0, 0x20, 0, 0x20)) { // Propagate failure if we failed revert(0, 0x20) } // Propagate success return (0, 0x20) } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000000000000000 code: '0x' nonce: 1 storage: {} transaction: data: # Run the code snippet normally - :label normal :abi f(uint) 0x00 # Single level call stack # CALL - :label normal :abi f(uint) 0xf1 # CALLCODE - :label normal :abi f(uint) 0xf2 # DELEGATECALL - :abi f(uint) 0xf4 # STATICCALL - :abi f(uint) 0xfa # Two level call stack # CALL CALL - :abi f(uint) 0xf1f1 # CALLCODE CALL - :abi f(uint) 0xf2f1 # DELEGATECALL CALL - :abi f(uint) 0xf4f1 # STATICCALL CALL - :abi f(uint) 0xfaf1 # CALL CALLCODE - :abi f(uint) 0xf1f2 # CALLCODE CALLCODE - :abi f(uint) 0xf2f2 # DELEGATECALL CALLCODE - :abi f(uint) 0xf4f2 # STATICCALL CALLCODE - :abi f(uint) 0xfaf2 # CALL DELEGATECALL - :abi f(uint) 0xf1f4 # CALLCODE DELEGATECALL - :abi f(uint) 0xf2f4 # DELEGATECALL DELEGATECALL - :abi f(uint) 0xf4f4 # STATICCALL DELEGATECALL - :abi f(uint) 0xfaf4 # CALL STATICCALL - :abi f(uint) 0xf1fa # CALLCODE STATICCALL - :abi f(uint) 0xf2fa # DELEGATECALL STATICCALL - :abi f(uint) 0xf4fa # STATICCALL STATICCALL - :abi f(uint) 0xfafa # Call after something fails # REVERT - :abi f(uint) 0xfd # Out of gas - :abi f(uint) 0xfe # SELFDESTRUCT - :abi f(uint) 0xff # Combined with creation of contracts # CREATE (run code in the constructor) - :abi f(uint) 0xf0 # CREATE2 (run code in the constructor) - :abi f(uint) 0xf5 # CREATE and then CALL - :abi f(uint) 0xf0f1 # CREATE2 and then CALL - :abi f(uint) 0xf5f1 # CREATE and then CALLCODE - :abi f(uint) 0xf0f2 # CREATE2 and then CALLCODE - :abi f(uint) 0xf5f2 # CREATE and then DELEGATECALL - :abi f(uint) 0xf0f4 # CREATE2 and then DELEGATECALL - :abi f(uint) 0xf5f4 # CREATE and then STATICCALL - :abi f(uint) 0xf0fa # CREATE2 and then STATICCALL - :abi f(uint) 0xf5fa # Recurse almost until the limit - :abi f(uint) 0x60BACCFA57 gasLimit: - 0x10000000000000 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc value: - 0 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" gasPrice: 2000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun=Osaka' result: cccccccccccccccccccccccccccccccccccccccc: storage: # The result we expect 0x00: 2000 000000000000000000000000000000000060BACC: storage: 0x00: 0x60A7 # Anything that happens should be reverted out of 0000000000000000000000000000000000060006: storage: 0x00: 0x60A7 # Anything that happens should be reverted out of ================================================ FILE: tests/static/state_tests/stEIP1559/lowFeeCapFiller.yml ================================================ lowFeeCap: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0, add(1,1)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: [] maxFeePerGas: 999 maxPriorityFeePerGas: 100 gasLimit: - '400000' nonce: 1 to: value: - '100000' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS result: {} ================================================ FILE: tests/static/state_tests/stEIP1559/lowGasLimitFiller.yml ================================================ lowGasLimit: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 80000 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0, add(1,1)) } nonce: '0' storage: 0: 0x60A7 : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :raw 0x00 accessList: [] maxFeePerGas: 1000 maxPriorityFeePerGas: 1000 gasLimit: - 90000 # Fail because it exceeds the block gas limit - 50000 # Success - 25000 # Runs out of gas, so reverted out of - 20000 # Fail because it is below the intrinsic cost nonce: 1 to: value: - 0 secretKey: "" expect: # Going above the block gas limit - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.GAS_ALLOWANCE_EXCEEDED result: {} # Success - indexes: data: !!int -1 gas: !!int 1 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 2 # Out of gas revert - indexes: data: !!int -1 gas: !!int 2 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 0x60A7 # gasLimit below intrinsic cost - indexes: data: !!int -1 gas: !!int 3 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.INTRINSIC_GAS_TOO_LOW result: {} ================================================ FILE: tests/static/state_tests/stEIP1559/lowGasPriceOldTypesFiller.yml ================================================ # The type 0, 1 equivalent to lowFeeCap lowGasPriceOldTypes: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0, add(1,1)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - :raw 0x00 - data: :raw 0x01 accessList: [] gasPrice: 999 gasLimit: - '400000' nonce: 1 to: value: - '100000' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS result: {} ================================================ FILE: tests/static/state_tests/stEIP1559/outOfFundsFiller.yml ================================================ outOfFunds: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0, add(1,1)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: [] maxFeePerGas: 100000000000 maxPriorityFeePerGas: 100000000000 gasLimit: - 16777216 - 40000 nonce: 1 to: value: - 0 - 1000000000000000000 secretKey: "" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS result: {} - indexes: data: !!int -1 gas: !!int 1 value: !!int 0 network: - '>=Cancun' result: {} - indexes: data: !!int -1 gas: !!int 1 value: !!int 1 expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS network: - '>=Cancun' result: {} ================================================ FILE: tests/static/state_tests/stEIP1559/outOfFundsOldTypesFiller.yml ================================================ outOfFundsOldTypes: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0, add(1,1)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - :raw 0x00 - data: :raw 0x01 accessList: [] gasPrice: 100000000000 gasLimit: - 16777216 - 40000 nonce: 1 to: value: - 0 - 1000000000000000000 secretKey: "" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS result: {} - indexes: data: !!int -1 gas: !!int 1 value: !!int 0 network: - '>=Cancun' result: {} - indexes: data: !!int -1 gas: !!int 1 value: !!int 1 expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS network: - '>=Cancun' result: {} ================================================ FILE: tests/static/state_tests/stEIP1559/senderBalanceFiller.yml ================================================ senderBalance: _info: comment: | The execution records the EIP-1559 transaction origin balance to make sure its value is properly computed based on the effective gas price (not the maximum gas price as in the transaction validity check). env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 1 currentGasLimit: 30000000 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 11 pre: : balance: 0 code: | :yul london { sstore(0, balance(caller())) } nonce: 0 storage: {} : balance: 1000000000000000000 code: '' nonce: 0 storage: {} transaction: nonce: 0 to: value: - 0 secretKey: "" maxFeePerGas: 1000 maxPriorityFeePerGas: 100 gasLimit: - 60000 data: - data: '' accessList: [] expect: - indexes: data: !!int -1 network: - ">=Cancun" result: : storage: 0: 999999999993340000 ================================================ FILE: tests/static/state_tests/stEIP1559/tipTooHighFiller.yml ================================================ tipTooHigh: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul london { sstore(0, add(1,1)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: [] maxFeePerGas: 1000 maxPriorityFeePerGas: 1001 gasLimit: - '400000' nonce: 1 to: value: - '100000' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS result: {} ================================================ FILE: tests/static/state_tests/stEIP1559/transactionIntinsicBug_ParisFiller.yml ================================================ transactionIntinsicBug_Paris: _info: comment: Bug discovered on ropsten https://github.com/ethereum/go-ethereum/pull/23244/files env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 20 pre: : balance: '10' code: '0x' nonce: '0' storage: {} : balance: '50000020' code: '0x' nonce: 1 storage: {} # geth was accepting this transaction as the total price was estimated to be 50M # but it didn't account for value in the formula. therefore an invalid transaction passed through. # because 50M is just the worst case scenario, the transaction passed with ~10M gas by current basefee and ~40M value transfer # while at the same time not hitting out of balance, but technically invalid intrinsic gas as the worst case scenario would have been # 50M + 40M value transfer (that would potentially hited out of balance in another block) transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: [] maxFeePerGas: 1000 maxPriorityFeePerGas: 20 gasLimit: - '50000' nonce: 1 to: value: - '48000020' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS result: : balance: 50000020 ================================================ FILE: tests/static/state_tests/stEIP1559/typeTwoBerlinFiller.yml ================================================ typeTwoBerlin: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0, add(1,1)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: [] maxFeePerGas: 1000 maxPriorityFeePerGas: 1000 gasLimit: - '400000' nonce: 1 to: value: - '100000' secretKey: "" expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 2 ================================================ FILE: tests/static/state_tests/stEIP1559/valCausesOOFFiller.yml ================================================ valCausesOOF: # This tests shows that regardless of the real gas, a transaction is rejected if # gasPrice * gasLimit + value > balance _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: : balance: 100_000_000_000_000 code: | :yul london { // This loop runs a number of times specified in the data, // so the gas cost depends on the data for { let i := calldataload(4) } gt(i,0) { i := sub(i,1) } { sstore(i, 0x60A7) } // for loop } nonce: '0' storage: {} : balance: 100_000_000 code: '0x' nonce: 1 storage: {} transaction: data: # Costs 43397 gas - data: :abi f(uint) 1 accessList: [] # Costs 65555 gas - data: :abi f(uint) 2 accessList: [] maxFeePerGas: 1000 maxPriorityFeePerGas: 0 gasLimit: - 100_000 # The balance is high enough only if we aren't also sending wei - 90_000 # The balance is always high enough - 110_000 # The balance is never high enough nonce: 1 to: value: - 0 - 1 secretKey: "" expect: # value: 0 wei, so the balance is compared to gasLimit * gasPrice - indexes: data: !!int -1 gas: 0-1 value: !!int 0 network: - '>=Cancun' result: {} # The real result is whether an exception happens or not # value: 1 wei, so the balance is compared to gasLimit * gasPrice + 1. # with a gasLimit of 100k, this is going to fail - indexes: data: !!int -1 gas: !!int 0 value: !!int 1 network: - '>=Cancun' result: {} # The real result is whether an exception happens or not expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS # value: 1 wei, so the balance is compared to gasLimit * gasPrice + 1. # with a gasLimit of 90k, this is going to be successful - indexes: data: !!int -1 gas: !!int 1 value: !!int 1 network: - '>=Cancun' result: {} # The real result is whether an exception happens or not # gasLimit 110k, so we fail regardless of value - indexes: data: !!int -1 gas: !!int 2 value: !!int -1 network: - '>=Cancun' result: {} # The real result is whether an exception happens or not expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS ================================================ FILE: tests/static/state_tests/stEIP158Specific/CALL_OneVCallSuicide2Filler.json ================================================ { "CALL_OneVCallSuicide2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : {} }, "" : { "balance" : "99", "storage" : { "0x64" : "16937" } }, "" : { "balance" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "{ [0](GAS) (CALL 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/CALL_OneVCallSuicideFiller.json ================================================ { "CALL_OneVCallSuicide" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : {} }, "" : { "balance" : "100", "storage" : { "0x64" : "0x3801" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "{ [0](GAS) (CALL 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/CALL_ZeroVCallSuicideFiller.json ================================================ { "CALL_ZeroVCallSuicide" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x64" : "0x1dd5" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) (CALL 60000 0 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/EXP_EmptyFiller.json ================================================ { "EXP_Empty" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "//comment" : "https://etherpad.net/p/EIP158", "storage" : { "0x02" : "0x08e8", "0x03" : "0x01", "0x04" : "0x566f", "0x06" : "0x0a43", "0x08" : "0x0bd3", "0x0a" : "0x0ef3", "0x0b" : "0x01", "0x0c" : "0x566f", "0x0d" : "0x01", "0x0e" : "0x566f", "0x0f" : "0x01", "0x64" : "0x566f" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]](EXP 0 12) [[2]](SUB @0 (GAS)) [0](GAS) [[3]](EXP 12 0) [[4]](SUB @0 (GAS)) [0](GAS) [[5]](EXP 0 0xffffffffffffffff) [[6]](SUB @0 (GAS)) [0](GAS) [[7]](EXP 0 0xffffffffffffffffffffffffffffffff) [[8]](SUB @0 (GAS)) [0](GAS) [[9]](EXP 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[10]](SUB @0 (GAS)) [0](GAS) [[11]](EXP 0xffffffffffffffff 0) [[12]](SUB @0 (GAS)) [0](GAS) [[13]](EXP 0xffffffffffffffffffffffffffffffff 0) [[14]](SUB @0 (GAS)) [0] (GAS) [[15]](EXP 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) [[100]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/EXTCODESIZE_toEpmtyParisFiller.json ================================================ { "EXTCODESIZE_toEpmtyParis" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } }, "" : { "storage" : { "0x64" : "7617" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (EXTCODESIZE ) [[100]] (SUB @0 (GAS)) }", "storage": { "0x01" : "0x0600" } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/EXTCODESIZE_toNonExistentFiller.json ================================================ { "EXTCODESIZE_toNonExistent" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x64" : "0x12d1" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (EXTCODESIZE 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b) [[100]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stEIP158Specific/callToEmptyThenCallErrorParisFiller.json ================================================ { "callToEmptyThenCallErrorParis" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 0 0 0 0 0 0) (CALL 0 0 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (GAS) }", "storage": { } }, "": { "nonce": "0", "balance": "10", "code": "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP158Specific/vitalikTransactionTestParisFiller.json ================================================ { "vitalikTransactionTestParis" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "code" : "", "nonce" : "0x01", "storage" : { } }, "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826" : { "code" : "", "nonce" : "0x0150", "storage" : { } }, "0x1bc78ae0e5ec5cb439f1d5355d6f90d38343e109" : { "code" : "", "nonce" : "0x03", "storage" : { } }, "0x51f9d7f98e997bdd6bebde4c2dd27be8c99303aa" : { "balance" : "0x00", "code" : "0x6000603f5359610043806100135939610056566c010000000000000000000000007fee098e6c2a43d9e2c04f08f0c3a87b0ba59079d4d53532071d6cd0cb86facd5605ff6100008061003f60003961003f565b6000f35b816000f0905050fe", "nonce" : "0x01", "storage" : { } }, "0xee098e6c2a43d9e2c04f08f0c3a87b0ba59079d4" : { "balance" : "10", "code" : "", "nonce" : "0x00", "storage" : { } } } } ], "pre": { "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "balance" : "0", "code" : "", "nonce" : "0x01", "storage" : { } }, "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": { "nonce": "0x014f", "balance": "0xffffffffffffffffffff", "code": "0x", "storage": {} }, "ee098e6c2a43d9e2c04f08f0c3a87b0ba59079d4": { "nonce": "0x00", "balance": "10", "code": "0x", "storage": {} } }, "transaction" : { "//comment" : "god knows what it is... vitalik knows", "data" : [ ":raw 0x6000607f5359610043806100135939610056566c010000000000000000000000007fee098e6c2a43d9e2c04f08f0c3a87b0ba59079d4d53532071d6cd0cb86facd5605ff6100008061003f60003961003f565b6000f35b816000f0905050596100718061006c59396100dd5661005f8061000e60003961006d566000603f5359610043806100135939610056566c010000000000000000000000007fee098e6c2a43d9e2c04f08f0c3a87b0ba59079d4d53532071d6cd0cb86facd5605ff6100008061003f60003961003f565b6000f35b816000f0905050fe5b6000f35b816000f0905060405260006000600060006000604051620249f0f15061000080610108600039610108565b6000f3" ], "gasLimit" : [ "0x1fffff" ], "gasPrice" : "10", "nonce" : "0x014f", "secretKey" : "c85ef7d79691fe79573b1a7064c19c1a9819ebdbd1faaab1a8ec92344438aaf4", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stEIP2930/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stEIP2930/addressOpcodesFiller.yml ================================================ addressOpcodes: # Check the gas cost of various address information opcodes (balance, etc.) # when the address is or isn't in the access list env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Applies to all tests in this file 0000000000000000000000000000000000001000: balance: '1000000000000000000' code: | { (def 'acctType $0) ; type of account we handle (def 'opcode $0x20) ; the opcode we are dealing with (def 'acct 0x20) (def 'NOP 0) ; the type of account we handle ; unrelated account (if (= acctType 0) [acct] 0x1001 NOP) ; transaction sender (if (= acctType 1) [acct] (origin) NOP) ; the contract that called us (if (= acctType 2) [acct] (caller) NOP) ; our own contract (if (= acctType 3) [acct] (address) NOP) ; a precompile (if (= acctType 4) [acct] 0x0001 NOP) [0] @0 ; Just to disable the first use of memory cost (if (= opcode 0) { [0] (gas) (balance @acct) [[0]] (- @0 (gas) 22) [0] (gas) (balance @acct) [[1]] (- @0 (gas) 22) } NOP) ; (if (= opcode 0) ... ) (if (= opcode 1) { [0] (gas) (extcodesize @acct) [[0]] (- @0 (gas) 22) [0] (gas) (extcodesize @acct) [[1]] (- @0 (gas) 22) } NOP) ; (if (= opcode 1) ... ) (if (= opcode 2) { [0] (gas) (extcodehash @acct) [[0]] (- @0 (gas) 22) [0] (gas) (extcodehash @acct) [[1]] (- @0 (gas) 22) } NOP) ; (if (= opcode 1) ... ) ; This test writes to memory, so we need to write to it first ; to avoid measuring that number (if (= opcode 3) { [0x100] 0x06A5 [0] (gas) (extcodecopy @acct 0x100 0 0x20) ; don't touch @0 or @acct [[0]] (- @0 (gas) 32) ; normalize to the same cost as ; the other tests [0] (gas) (extcodecopy @acct 0x100 0 0x20) [[1]] (- @0 (gas) 32) } NOP) ; (if (= opcode 1) ... ) } nonce: '0' storage: {} # Call the contract that does the actual work cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; relay the parameters [0x100] $4 [0x120] $36 (call (gas) 0x1000 0 0x100 0x40 0 0x40) ; Write the returned results, if any [[0]] @0x00 [[1]] @0x20 } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: 0x nonce: '0' storage: {} transaction: data: # The first parameter is the type of address involved: # # 0 - 0x1001, a random address # 1 - transaction sender (0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b) # 2 - caller (0xcccc...cccc) # 3 - address (0x1000) # 4 - a precompile (0x0...01) # # The second parameter is the action: # 0 - BALANCE # 1 - EXTCODEHASH # 2 - EXTCODESIZE # 3 - EXTCODECOPY # BALANCE_VALID - data: :label valid :abi f(uint,uint) 0 0 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x00 - 0x60A7 # BALANCE_VALID_NO_CELLS - data: :label valid :abi f(uint,uint) 0 0 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: [] # BALANCE_NO_LIST - data: :label invalid :abi f(uint,uint) 0 0 accessList: [] # BALANCE_BAD_ADDR - data: :label invalid :abi f(uint,uint) 0 0 accessList: - address: 0xF00000000000000000000000000000000000F101 storageKeys: - 0x00 - 0x60A7 # BALANCE_SENDER_VALID - data: :label valid :abi f(uint,uint) 1 0 accessList: - address: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b storageKeys: - 0x00 - 0x60A7 # BALANCE_SENDER_INVALID - data: :label valid :abi f(uint,uint) 1 0 accessList: [] # BALANCE_PAST_VALID - data: :label valid :abi f(uint,uint) 2 0 accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0x00 - 0x60A7 # BALANCE_PAST_INVALID - data: :label valid :abi f(uint,uint) 2 0 accessList: [] # BALANCE_CURRENT_VALID - data: :label valid :abi f(uint,uint) 3 0 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x00 - 0x60A7 # BALANCE_CURRENT_INVALID - data: :label valid :abi f(uint,uint) 3 0 accessList: [] # BALANCE_PRECOMPILE_VALID - data: :label valid :abi f(uint,uint) 4 0 accessList: - address: 0x0000000000000000000000000000000000000001 storageKeys: - 0x00 - 0x60A7 # BALANCE_PRECOMPILE_INVALID - data: :label valid :abi f(uint,uint) 4 0 accessList: [] # EXTCODESIZE_VALID - data: :label valid :abi f(uint,uint) 0 1 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x00 - 0x60A7 # EXTCODESIZE_VALID_NO_CELLS - data: :label valid :abi f(uint,uint) 0 1 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: [] # EXTCODESIZE_NO_LIST - data: :label invalid :abi f(uint,uint) 0 1 accessList: [] # EXTCODESIZE_BAD_ADDR - data: :label invalid :abi f(uint,uint) 0 1 accessList: - address: 0xF00000000000000000000000000000000000F101 storageKeys: - 0x00 - 0x60A7 # EXTCODESIZE_SENDER_VALID - data: :label valid :abi f(uint,uint) 1 1 accessList: - address: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b storageKeys: - 0x00 - 0x60A7 # EXTCODESIZE_SENDER_INVALID - data: :label valid :abi f(uint,uint) 1 1 accessList: [] # EXTCODESIZE_PAST_VALID - data: :label valid :abi f(uint,uint) 2 1 accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0x00 - 0x60A7 # EXTCODESIZE_PAST_INVALID - data: :label valid :abi f(uint,uint) 2 1 accessList: [] # EXTCODESIZE_CURRENT_VALID - data: :label valid :abi f(uint,uint) 3 1 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x00 - 0x60A7 # EXTCODESIZE_CURRENT_INVALID - data: :label valid :abi f(uint,uint) 3 1 accessList: [] # EXTCODESIZE_PRECOMPILE_VALID - data: :label valid :abi f(uint,uint) 4 1 accessList: - address: 0x0000000000000000000000000000000000000001 storageKeys: - 0x00 - 0x60A7 # EXTCODESIZE_PRECOMPILE_INVALID - data: :label valid :abi f(uint,uint) 4 1 accessList: [] # EXTCODEHASH_VALID - data: :label valid :abi f(uint,uint) 0 2 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x00 - 0x60A7 # EXTCODEHASH_VALID_NO_CELLS - data: :label valid :abi f(uint,uint) 0 2 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: [] # EXTCODEHASH_NO_LIST - data: :label invalid :abi f(uint,uint) 0 2 accessList: [] # EXTCODEHASH_BAD_ADDR - data: :label invalid :abi f(uint,uint) 0 2 accessList: - address: 0xF00000000000000000000000000000000000F101 storageKeys: - 0x00 - 0x60A7 # EXTCODEHASH_SENDER_VALID - data: :label valid :abi f(uint,uint) 1 2 accessList: - address: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b storageKeys: - 0x00 - 0x60A7 # EXTCODEHASH_SENDER_INVALID - data: :label valid :abi f(uint,uint) 1 2 accessList: [] # EXTCODEHASH_PAST_VALID - data: :label valid :abi f(uint,uint) 2 2 accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0x00 - 0x60A7 # EXTCODEHASH_PAST_INVALID - data: :label valid :abi f(uint,uint) 2 2 accessList: [] # EXTCODEHASH_CURRENT_VALID - data: :label valid :abi f(uint,uint) 3 2 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x00 - 0x60A7 # EXTCODEHASH_CURRENT_INVALID - data: :label valid :abi f(uint,uint) 3 2 accessList: [] # EXTCODEHASH_PRECOMPILE_VALID - data: :label valid :abi f(uint,uint) 4 2 accessList: - address: 0x0000000000000000000000000000000000000001 storageKeys: - 0x00 - 0x60A7 # EXTCODEHASH_PRECOMPILE_INVALID - data: :label valid :abi f(uint,uint) 4 2 accessList: [] # EXTCODECOPY_VALID - data: :label valid :abi f(uint,uint) 0 3 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x00 - 0x60A7 # EXTCODECOPY_VALID_NO_CELLS - data: :label valid :abi f(uint,uint) 0 3 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: [] # EXTCODECOPY_NO_LIST - data: :label invalid :abi f(uint,uint) 0 3 accessList: [] # EXTCODECOPY_BAD_ADDR - data: :label invalid :abi f(uint,uint) 0 3 accessList: - address: 0xF00000000000000000000000000000000000F101 storageKeys: - 0x00 - 0x60A7 # EXTCODECOPY_SENDER_VALID - data: :label valid :abi f(uint,uint) 1 3 accessList: - address: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b storageKeys: - 0x00 - 0x60A7 # EXTCODECOPY_SENDER_INVALID - data: :label valid :abi f(uint,uint) 1 3 accessList: [] # EXTCODECOPY_PAST_VALID - data: :label valid :abi f(uint,uint) 2 3 accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0x00 - 0x60A7 # EXTCODECOPY_PAST_INVALID - data: :label valid :abi f(uint,uint) 2 3 accessList: [] # EXTCODECOPY_CURRENT_VALID - data: :label valid :abi f(uint,uint) 3 3 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x00 - 0x60A7 # EXTCODECOPY_CURRENT_INVALID - data: :label valid :abi f(uint,uint) 3 3 accessList: [] # EXTCODECOPY_PRECOMPILE_VALID - data: :label valid :abi f(uint,uint) 4 3 accessList: - address: 0x0000000000000000000000000000000000000001 storageKeys: - 0x00 - 0x60A7 # EXTCODECOPY_PRECOMPILE_INVALID - data: :label valid :abi f(uint,uint) 4 3 accessList: [] gasLimit: - '16777216' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: cccccccccccccccccccccccccccccccccccccccc value: - '100000' expect: # BALANCE_VALID # BALANCE_VALID_NO_CELLS # BALANCE_SENDER_VALID # BALANCE_SENDER_INVALID # BALANCE_PAST_INVALID # BALANCE_PAST_VALID # BALANCE_CURRENT_VALID # BALANCE_CURRENT_INVALID # BALANCE_PRECOMPILE_VALID # BALANCE_PRECOMPILE_INVALID # EXTCODESIZE_VALID # EXTCODESIZE_VALID_NO_CELLS # EXTCODESIZE_SENDER_VALID # EXTCODESIZE_SENDER_INVALID # EXTCODESIZE_PAST_INVALID # EXTCODESIZE_PAST_VALID # EXTCODESIZE_CURRENT_VALID # EXTCODESIZE_CURRENT_INVALID # EXTCODESIZE_PRECOMPILE_VALID # EXTCODESIZE_PRECOMPILE_INVALID # EXTCODEHASH_VALID # EXTCODEHASH_VALID_NO_CELLS # EXTCODEHASH_SENDER_VALID # EXTCODEHASH_SENDER_INVALID # EXTCODEHASH_PAST_INVALID # EXTCODEHASH_PAST_VALID # EXTCODEHASH_CURRENT_VALID # EXTCODEHASH_CURRENT_INVALID # EXTCODEHASH_PRECOMPILE_VALID # EXTCODEHASH_PRECOMPILE_INVALID # EXTCODECOPY_VALID # EXTCODECOPY_VALID_NO_CELLS # EXTCODECOPY_SENDER_VALID # EXTCODECOPY_SENDER_INVALID # EXTCODECOPY_PAST_INVALID # EXTCODECOPY_PAST_VALID # EXTCODECOPY_CURRENT_VALID # EXTCODECOPY_CURRENT_INVALID # EXTCODECOPY_PRECOMPILE_VALID # EXTCODECOPY_PRECOMPILE_INVALID - indexes: data: :label valid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001000: storage: 0x00: 0x0061 0x01: 0x0061 # BALANCE_NO_LIST # BALANCE_BAD_ADDR # EXTCODESIZE_NO_LIST # EXTCODESIZE_BAD_ADDR # EXTCODEHASH_NO_LIST # EXTCODEHASH_BAD_ADDR # EXTCODECOPY_NO_LIST # EXTCODECOPY_BAD_ADDR - indexes: data: :label invalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001000: storage: 0x00: 0x0a25 0x01: 0x0061 0x02: 0x0000 ================================================ FILE: tests/static/state_tests/stEIP2930/coinbaseT01Filler.yml ================================================ # Check the costs of transferring gas to coinbase and how it interacts with the # access list (transaction types 0 and 1) coinbaseT01: env: currentCoinbase: currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' currentBaseFee: 100 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Send wei to coinbase and see how much gas that costs. : balance: '1000000000000000000' code: | :yul berlin { mstore(0, gas()) pop(call(gas(), , 1000000, 0, 0, 0, 0)) mstore(0x20, gas()) // The 24 is the cost of twi gas(), seven pushes(), a pop(), and an mstore() sstore(0, sub(sub(mload(0), mload(0x20)),33)) } nonce: 1 storage: {} # Signer : balance: '1000000000000000000' code: 0x nonce: 1 storage: {} # Coinbase : balance: 0 code: 0x nonce: 1 storage: {} transaction: data: # Type 0 transaction, no list - :label T0 :abi f(uint) 0 # Type 1 transaction, base in list - data: :label T1baseInList :abi f(uint) 0 accessList: - address: storageKeys: [] # Type 1 transaction, base NOT in list - data: :label T1baseNotInList :abi f(uint) 0 accessList: - address: 0x000000000000000000000000000000000000BA5A storageKeys: [] gasLimit: - 16777216 gasPrice: 1000 nonce: 1 secretKey: "" to: value: - 0 expect: - indexes: data: :label T1baseInList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 6800 # In Shanghai with EIP3651 (https://eips.ethereum.org/EIPS/eip-3651), coinbase is included in warm accounts list # So no difference even if it is not in transaction access list - indexes: data: - :label T1baseNotInList - :label T0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 6800 ================================================ FILE: tests/static/state_tests/stEIP2930/coinbaseT2Filler.yml ================================================ # Check the costs of transferring gas to coinbase and how it interacts with the # access list in transaction type 2 coinbaseT2: env: currentCoinbase: currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' currentBaseFee: 100 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Send wei to coinbase and see how much gas that costs. : balance: '1000000000000000000' code: | :yul berlin { mstore(0, gas()) pop(call(gas(), , 1000000, 0, 0, 0, 0)) mstore(0x20, gas()) // The 24 is the cost of twi gas(), seven pushes(), a pop(), and an mstore() sstore(0, sub(sub(mload(0), mload(0x20)),33)) } nonce: 1 storage: {} # Signer : balance: '1000000000000000000' code: 0x nonce: 1 storage: {} # Coinbase : balance: 0 code: 0x nonce: 1 storage: {} transaction: data: # Type 2 transaction, base in list - data: :label T2baseInList :abi f(uint) 0 accessList: - address: storageKeys: [] # Type 2 transaction, base NOT in list - data: :label T2baseNotInList :abi f(uint) 0 accessList: - address: 0x000000000000000000000000000000000000BA5A storageKeys: [] gasLimit: - 16777216 maxFeePerGas: 10000 maxPriorityFeePerGas: 100 nonce: 1 secretKey: "" to: value: - 0 expect: - indexes: data: :label T2baseInList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 6800 # In Shanghai with EIP3651 (https://eips.ethereum.org/EIPS/eip-3651), coinbase is included in warm accounts list # So no difference even if it is not in transaction access list - indexes: data: :label T2baseNotInList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 6800 ================================================ FILE: tests/static/state_tests/stEIP2930/manualCreateFiller.yml ================================================ manualCreate: # Create contracts using contract creation transactions instead of # CREATE or CREATE2 from the evm env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x1000000000000000000 code: 0x nonce: 1 storage: {} transaction: data: # To create a contract directly, we send a transaction with the # constructor code in the data and no to: field # Constructor: # Measure the cost of account data access ************************ # GAS 5A # ADDRESS 30 # BALANCE 31 # POP 50 # GAS 5A # SWAP1 90 # SUB 03 # PUSH1 01 6001 # SSTORE 55 # Measure the cost of an SSTORE ************************************* # GAS 5A # PUSH1 FF 60FF # PUSH1 00 6000 # SSTORE 55 # GAS 5A # SWAP1 90 # SUB 03 # PUSH1 00 6000 # SSTORE 55 # Finish ***************************************************** # STOP 00 - data: :label allBad :raw 0x5A3031505A90036001555A60FF6000555A900360005500 accessList: - address: 0x0000000000000000000000000000000000000100 storageKeys: - 0x00 - data: :label addrGoodCellBad :raw 0x5A3031505A90036001555A60FF6000555A900360005500 accessList: - address: 0xec0e71ad0a90ffe1909d27dac207f7680abba42d storageKeys: - 0x01 - data: :label allGood :raw 0x5A3031505A90036001555A60FF6000555A900360005500 accessList: - address: 0xec0e71ad0a90ffe1909d27dac207f7680abba42d storageKeys: - 0x00 gasLimit: - '400000' gasPrice: '10' nonce: 1 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: "" value: - 0 expect: - indexes: data: - :label allGood gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0xec0e71ad0a90ffe1909d27dac207f7680abba42d: storage: 00: 0x4e28 # 20000, cost for declared cell 01: 0x006a # 106, address, balance (known addr), pop - indexes: data: - :label addrGoodCellBad - :label allBad gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0xec0e71ad0a90ffe1909d27dac207f7680abba42d: storage: 00: 0x565c # 22100, cost for undeclared cell 01: 0x006a # 106, address, balance (known addr), pop ================================================ FILE: tests/static/state_tests/stEIP2930/storageCostsFiller.yml ================================================ storageCosts: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Declared vs. undeclared write (SSTORE) zero -> value # WRITE_DECLARED # WRITE_ADDR_IN_LIST # WRITE_ADDR_NOT_IN_LIST # WRITE_NO_LIST 0000000000000000000000000000000000001000: balance: '1000000000000000000' code: | { ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x02 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; If the storage cell is declared the cost in @@1 should be 20003 ; If the storage cell is not declared the cost should be 22103 } nonce: '0' storage: {} # Declared vs. undeclared read (SLOAD) # READ_DECLARED # READ_ADDR_IN_LIST # READ_ADDR_NOT_IN_LIST # READ_NO_LIST 0000000000000000000000000000000000001001: balance: '1000000000000000000' code: | { ; Read @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) @@0 [0] (- @0 (gas) 19) [[1]] @0 ; If the storage cell is declared the cost in @@1 should be 100 ; If the storage cell is not declared the cost should be 2100 } nonce: '0' storage: {} # Declared vs. undeclared delete value -> zero # DEL_DECLARED # DEL_ADDR_IN_LIST # DEL_ADDR_NOT_IN_LIST # DEL_NO_LIST 0000000000000000000000000000000000001002: balance: '1000000000000000000' storage: 0x00: 0x60A7 code: | { ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x00 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; If the storage cell is declared the cost in @@1 should be 2903 ; If the storage cell is not declared the cost should be 5003 ; ; The refund for freeing memory happens at the end of the transaction, ; so we don't see it } nonce: '0' # Declared vs. undeclared update value -> different value # UPDATE_DECLARED # UPDATE_ADDR_IN_LIST # UPDATE_ADDR_NOT_IN_LIST # UPDATE_NO_LIST 0000000000000000000000000000000000001003: balance: '1000000000000000000' storage: 0x00: 0x60A7 code: | { ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0xBEEF [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; If the storage cell is declared the cost in @@1 should be 103 ; If the storage cell is not declared the cost should be 2203 } nonce: '0' # Declared vs. undeclared NOP value -> same value # NOP_DECLARED # NOP_ADDR_IN_LIST # NOP_ADDR_NOT_IN_LIST # NOP_NO_LIST 0000000000000000000000000000000000001004: balance: '1000000000000000000' storage: 0x00: 0x60A7 code: | { ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x60A7 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; This costs 103, regadless of whether it is declared or not } nonce: '0' # Declared vs. undeclared NOP0 zero -> zero # NOP0_DECLARED # NOP0_ADDR_IN_LIST # NOP0_ADDR_NOT_IN_LIST # NOP0_NO_LIST 0000000000000000000000000000000000001005: balance: '1000000000000000000' storage: 0x00: 0x00 code: | { ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x00 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; This costs 103, regadless of whether it is declared or not } nonce: '0' # Declared vs. undeclared write (SSTORE), after writing to the storage # STORE_THEN_WRITE_DECLARED # STORE_THEN_WRITE_UNDECLARED 0000000000000000000000000000000000001010: balance: '1000000000000000000' code: | { [[0]] 0x60A7 ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x02 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; Since this is second access, it will cost 103 ; regardless of whether it was declared or not } nonce: '0' storage: {} # Declared vs. undeclared read (SLOAD), after writing to the storage # STORE_THEN_READ_DECLARED # STORE_THEN_READ_UNDECLARED 0000000000000000000000000000000000001011: balance: '1000000000000000000' code: | { [[0]] 0x60A7 ; Read @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) @@0 [0] (- @0 (gas) 19) [[1]] @0 ; Since this is second access, it will cost 100 ; regardless of whether it was declared or not } nonce: '0' storage: {} # Declared vs. undeclared write (SSTORE), after reading the storage # LOAD_THEN_WRITE_DECLARED # LOAD_THEN_WRITE_UNDECLARED 0000000000000000000000000000000000001020: balance: '1000000000000000000' code: | { [0x20] @@0 ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x02 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; Since this is second access, it will cost 20k ; regardless of whether it was declared or not } nonce: '0' storage: {} # Declared vs. undeclared read (SLOAD), after already reading it # LOAD_THEN_READ_DECLARED # LOAD_THEN_READ_UNDECLARED 0000000000000000000000000000000000001021: balance: '1000000000000000000' code: | { [0x20] @@0 ; Read @@0, and see how much gas that cost. [0] (gas) @@0 [0] (- @0 (gas) 19) [[1]] @0 ; Since this is second access, it will cost 97 ; regardless of whether it was declared or not } nonce: '0' storage: {} # Call different contracts depending on the parameter # # Also check the cost of accessing our own storage cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; TO_ADDR_VALID TO_ADDR_INVALID_ADDR TO_ADDR_INVALID_CELL ; Call a different contract (call (gas) (+ 0x1000 $4) 0 0 0 0 0) ; Read @@0, and see how much gas that cost. [0] (gas) @@0x60A7 [0] (- @0 (gas) 19) [[1]] @0 ; Write to @@0, and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x02 [0] (- @0 (gas) 17) [[2]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS } nonce: '0' storage: 0x60A7: 0xDEAD a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: 0x nonce: '0' storage: {} transaction: data: # There is just one way to validly declare that a key will be used # WRITE_DECLARED - data: :label declaredKeyWrite :abi f(uint) 0 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x00 # READ_DECLARED - data: :label declaredKeyRead :abi f(uint) 1 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x00 # DEL_DECLARED - data: :label declaredKeyDel :abi f(uint) 2 accessList: - address: 0x0000000000000000000000000000000000001002 storageKeys: - 0x00 # UPDATE_DECLARED - data: :label declaredKeyUpdate :abi f(uint) 3 accessList: - address: 0x0000000000000000000000000000000000001003 storageKeys: - 0x00 # NOP_DECLARED - data: :label declaredKeyNOP :abi f(uint) 4 accessList: - address: 0x0000000000000000000000000000000000001004 storageKeys: - 0x00 # NOP0_DECLARED - data: :label declaredKeyNOP0 :abi f(uint) 5 accessList: - address: 0x0000000000000000000000000000000000001005 storageKeys: - 0x00 # But there are multiple ways to get it wrong: # Wrong storageKey # WRITE_ADDR_IN_LIST - data: :label undeclaredKeyWrite :abi f(uint) 0 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x10 # READ_ADDR_IN_LIST - data: :label undeclaredKeyRead :abi f(uint) 1 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x10 # DEL_ADDR_IN_LIST - data: :label undeclaredKeyDel :abi f(uint) 2 accessList: - address: 0x0000000000000000000000000000000000001002 storageKeys: - 0x10 # UPDATE_ADDR_IN_LIST - data: :label undeclaredKeyUpdate :abi f(uint) 3 accessList: - address: 0x0000000000000000000000000000000000001003 storageKeys: - 0x10 # NOP_ADDR_IN_LIST - data: :label undeclaredKeyNOP :abi f(uint) 4 accessList: - address: 0x0000000000000000000000000000000000001004 storageKeys: - 0x10 # NOP0_ADDR_IN_LIST - data: :label undeclaredKeyNOP0 :abi f(uint) 5 accessList: - address: 0x0000000000000000000000000000000000001005 storageKeys: - 0x10 # Wrong address # WRITE_ADDR_NOT_IN_LIST - data: :label undeclaredKeyWrite :abi f(uint) 0 accessList: - address: 0xF000000000000000000000000000000000000100 storageKeys: - 0x00 # READ_ADDR_NOT_IN_LIST - data: :label undeclaredKeyRead :abi f(uint) 1 accessList: - address: 0xF000000000000000000000000000000000000101 storageKeys: - 0x00 # DEL_ADDR_NOT_IN_LIST - data: :label undeclaredKeyDel :abi f(uint) 2 accessList: - address: 0xF000000000000000000000000000000000000101 storageKeys: - 0x00 # UPDATE_ADDR_NOT_IN_LIST - data: :label undeclaredKeyUpdate :abi f(uint) 3 accessList: - address: 0xF000000000000000000000000000000000000101 storageKeys: - 0x00 # NOP_ADDR_NOT_IN_LIST - data: :label undeclaredKeyNOP :abi f(uint) 4 accessList: - address: 0xF000000000000000000000000000000000000101 storageKeys: - 0x00 # NOP0_ADDR_NOT_IN_LIST - data: :label undeclaredKeyNOP0 :abi f(uint) 5 accessList: - address: 0xF000000000000000000000000000000000000101 storageKeys: - 0x00 # No access list at all # WRITE_NO_LIST - :label undeclaredKeyWrite :abi f(uint) 0 # READ_NO_LIST - :label undeclaredKeyRead :abi f(uint) 1 # DEL_NO_LIST - :label undeclaredKeyDel :abi f(uint) 2 # UPDATE_NO_LIST - :label undeclaredKeyUpdate :abi f(uint) 3 # NOP_NO_LIST - :label undeclaredKeyNOP :abi f(uint) 4 # NOP0_NO_LIST - :label undeclaredKeyNOP0 :abi f(uint) 5 # If we had already accessed the storage (and paid the penalty # in case it was undeclared), it doesn't matter how we accessed it then # or how we access it now. The cost is the same regardless of whether # we declared the key in the storage list or not # STORE_THEN_WRITE_DECLARED - data: :label declaredKeyWrite_postSSTORE :abi f(uint) 0x10 accessList: - address: 0x0000000000000000000000000000000000001010 storageKeys: - 0x00 # STORE_THEN_WRITE_UNDECLARED - data: :label undeclaredKeyWrite_postSSTORE :abi f(uint) 0x10 accessList: - address: 0x0000000000000000000000000000000000001010 storageKeys: - 0x10 # STORE_THEN_LOAD_DECLARED - data: :label declaredKeyRead_postSSTORE :abi f(uint) 0x11 accessList: - address: 0x0000000000000000000000000000000000001011 storageKeys: - 0x00 # STORE_THEN_LOAD_UNDECLARED - data: :label undeclaredKeyRead_postSSTORE :abi f(uint) 0x11 accessList: - address: 0x0000000000000000000000000000000000001011 storageKeys: - 0x10 # LOAD_THEN_WRITE_DECLARED - data: :label declaredKeyWrite_postSLOAD :abi f(uint) 0x20 accessList: - address: 0x0000000000000000000000000000000000001020 storageKeys: - 0x00 # LOAD_THEN_WRITE_UNDECLARED - data: :label undeclaredKeyWrite_postSLOAD :abi f(uint) 0x20 accessList: - address: 0x0000000000000000000000000000000000001020 storageKeys: - 0x10 # LOAD_THEN_READ_DECLARED - data: :label declaredKeyRead_postSLOAD :abi f(uint) 0x21 accessList: - address: 0x0000000000000000000000000000000000001021 storageKeys: - 0x00 # LOAD_THEN_READ_UNDECLARED - data: :label undeclaredKeyRead_postSLOAD :abi f(uint) 0x21 accessList: - address: 0x0000000000000000000000000000000000001021 storageKeys: - 0x10 # TO_ADDR_VALID - data: :label declaredTo :abi f(uint) 0xFFF # Doesn't matter which contract we call accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0x0000 - 0x0001 - 0x0002 - 0x60A7 # TO_ADDR_INVALID_ADDR - data: :label undeclaredTo :abi f(uint) 0xFFF # Doesn't matter which contract we call accessList: - address: 0xcccccccccccccccccccccccccccccccccc000000 storageKeys: - 0x0000 - 0x0001 - 0x0002 - 0x60A7 # TO_ADDR_INVALID_CELL - data: :label undeclaredTo :abi f(uint) 0xFFF # Doesn't matter which contract we call accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0xF000 - 0xF001 - 0xF002 - 0xF0A7 # Do a complex access list, see that it is still processed # correctly # There is just one way to validly declare that a key will # be used # LARGE - data: :label declaredKeyWrite :abi f(uint) 0 accessList: - address: 0x00000000000000000000000000000000000060A7 storageKeys: - 0xFFFFFad - 0x00ad - 0x123214342ad - 0xdeadbeef - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0xFFFFF - 0x00 - 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - 0x123214342 - 0xdeadbeef - address: 0x0000000000000000000000000010000000000100 storageKeys: - 0xFFFFFbc - 0x00bc - 0x123214342bc - 0xdeadbeefbc - address: 0xffffffffffffffffffffffffffffffffffffffff storageKeys: - 0xFFFFFbc - 0x00bc - 0x123214342bc - 0xdeadbeefbc - 0xdeadbeef12345678deadbeef12345678deadbeef12345678deadbeef12345678 - 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: cccccccccccccccccccccccccccccccccccccccc value: - '100000' expect: # Write to a previously unused storage cell, which is declared in the access list # WRITE_DECLARED # LARGE - indexes: data: :label declaredKeyWrite gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001000: storage: 0x00: 0x02 0x01: 0x4e23 # Write to a previously unused storage cell, which is not declared in the access list # WRITE_ADDR_IN_LIST # WRITE_ADDR_NOT_IN_LIST # WRITE_NO_LIST - indexes: data: :label undeclaredKeyWrite gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001000: storage: 0x00: 0x02 0x01: 0x5657 # Write to a previously used storage cell, which is declared in the access list # UPDATE_DECLARED - indexes: data: :label declaredKeyUpdate gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001003: storage: 0x00: 0xBEEF 0x01: 0x0b57 # Write to a previously used storage cell, which is not declared in the access list # UPDATE_ADDR_IN_LIST # UPDATE_ADDR_NOT_IN_LIST # UPDATE_NO_LIST - indexes: data: :label undeclaredKeyUpdate gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001003: storage: 0x00: 0xBEEF 0x01: 0x138b # Write to a previously used storage cell, but the same value it currently has # This cell is declared in the access list # # NOP_DECLARED - indexes: data: :label declaredKeyNOP gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001004: storage: 0x00: 0x60A7 0x01: 0x0067 # Write to a previously used storage cell, but the same value it currently has # This cell is not declared in the access list # NOP_ADDR_IN_LIST # NOP_ADDR_NOT_IN_LIST # NOP_NO_LIST - indexes: data: :label undeclaredKeyNOP gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001004: storage: 0x00: 0x60A7 0x01: 0x089b # Write zero to a previously unused storage cell. # This cell is declared in the access list # NOP0_DECLARED - indexes: data: :label declaredKeyNOP0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001005: storage: 0x01: 0x0067 # Write zero to a previously unused storage cell. # This cell is not declared in the access list # NOP0_ADDR_IN_LIST # NOP0_ADDR_NOT_IN_LIST # NOP0_NO_LIST - indexes: data: :label undeclaredKeyNOP0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001005: storage: 0x01: 0x089b # Write zero to a previously used storage cell, freeing it # This cell is declared in the access list # # Note that we don't see the refund for freeing storage, that happens at the # end of the transaction # DEL_DECLARED - indexes: data: :label declaredKeyDel gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001002: storage: 0x00: 0x00 0x01: 0x0b57 # Write zero to a previously used storage cell, freeing it # This cell is not declared in the access list # # Note that we don't see the refund for freeing storage, that happens at the # end of the transaction # DEL_ADDR_IN_LIST # DEL_ADDR_NOT_IN_LIST # DEL_NO_LIST - indexes: data: :label undeclaredKeyDel gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001002: storage: 0x00: 0x00 0x01: 0x138b # Read a storage cell that has been declared in the access list # READ_DECLARED - indexes: data: :label declaredKeyRead gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001001: storage: 0x01: 0x0064 # Read a storage cell that has not been declared in the access list # READ_ADDR_IN_LIST # READ_ADDR_NOT_IN_LIST # READ_NO_LIST - indexes: data: :label undeclaredKeyRead gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001001: storage: 0x01: 0x0834 # Do an SSTORE, and then check the cost of a second SSTORE for the same cell # The cost of the second access is the same whether it was declared in the access # list or not. # STORE_THEN_WRITE_DECLARED # STORE_THEN_WRITE_UNDECLARED - indexes: data: - :label declaredKeyWrite_postSSTORE - :label undeclaredKeyWrite_postSSTORE gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001010: storage: 0x00: 0x02 0x01: 0x0067 # Do an SSTORE, and then check the cost of an SLOAD for the same cell # The cost of the second access is the same whether it was declared in the access # list or not. # STORE_THEN_READ_DECLARED # STORE_THEN_READ_UNDECLARED - indexes: data: - :label declaredKeyRead_postSSTORE - :label undeclaredKeyRead_postSSTORE gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001011: storage: 0x00: 0x60A7 0x01: 0x0064 # Do an SLOAD, and then check the cost of an SSTORE for the same cell # The cost of the second access is the same whether it was declared in the access # list or not. # LOAD_THEN_WRITE_DECLARED # LOAD_THEN_WRITE_UNDECLARED - indexes: data: - :label declaredKeyWrite_postSLOAD - :label undeclaredKeyWrite_postSLOAD gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001020: storage: 0x00: 0x02 0x01: 0x4e20 # Do an SLOAD, and then check the cost of a second SLOAD for the same cell # The cost of the second access is the same whether it was declared in the access # list or not. # LOAD_THEN_READ_DECLARED # LOAD_THEN_READ_UNDECLARED - indexes: data: - :label declaredKeyRead_postSLOAD - :label undeclaredKeyRead_postSLOAD gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001021: storage: 0x01: 0x0061 # See what happens if we access storage in the to address # # TO_ADDR_VALID - indexes: data: - :label declaredTo gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x0000: 0x0002 0x0001: 0x0064 0x0002: 0x4e20 0x60A7: 0xDEAD # See what happens if we access storage in the to address # # TO_ADDR_INVALID_ADDR # TO_ADDR_INVALID_CELL - indexes: data: - :label undeclaredTo gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x0000: 0x0002 0x0001: 0x0834 0x0002: 0x5654 0x60A7: 0xDEAD ================================================ FILE: tests/static/state_tests/stEIP2930/transactionCostsFiller.yml ================================================ transactionCosts: # This test is for the costs of having the access list in the # transaction. # # To do this we send various transactions with different access lists, # and then check the remaining balance of the account that sends the # transactions. # Cost of a storage key (ACCESS_LIST_STORAGE_KEY_COST) 1900 # Cost of an address (ACCESS_LIST_ADDRESS_COST) 2400 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Do nothing : balance: '0x0ba1a9ce0ba1a9ce' # 00 STOP code: :raw 0x00 nonce: '0' storage: {} : # Without an access list the cost of the transaction is 121004 # Adding that amount lets us count down from a round number balance: 100310040 code: 0x nonce: '0' storage: {} transaction: data: # Type 0 transaction, no EIP2930 access list # NO_LIST - :label type0 :raw 0x00 # Empty access list # EMPTY_LIST - data: :label addrs_0_keys_0 :raw 0x00 accessList: [] # An access list with one address that has nothing in it # ONE_ZERO - data: :label addrs_1_keys_0 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000102 storageKeys: [] # One address, one storage key. The values of addresses and storage keys # don't matter to the cost of the access list - just how many of them # there are # ONE_ONE - data: :label addrs_1_keys_1 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 # DIFF_ADDR - data: :label addrs_1_keys_1 :raw 0x00 accessList: - address: 0xFF00000000000000000000000000000000000101 storageKeys: - 0x0000 # DIFF_KEY - data: :label addrs_1_keys_1 :raw 0x00 accessList: - address: 0xFF00000000000000000000000000000000000101 storageKeys: - 0xFFFFFFFFFFFFFFFFFFFFFFFFF # One address, two storage keys # ONE_TWO - data: :label addrs_1_keys_2 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 - 0x0001 # Two addresses, two storage keys # TWO_TWO - data: :label addrs_2_keys_2 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 - address: 0x0000000000000000000000000000000000000102 storageKeys: - 0x0001 # TWO_KEYS_THEN_ZERO # - data: :label addrs_2_keys_2 :raw 0x00 # accessList: # - address: 0x0000000000000000000000000000000000000101 # storageKeys: # - 0x0000 # - 0x0001 # - address: 0x0000000000000000000000000000000000000102 # storageKeys: [] # It is the responsibility of the transaction sender to avoid duplicates # The cost of the transaction is not affected by the fact it could have # been shorter # Duplicate address, different storage keys # DUP_ADDR - data: :label addrs_2_keys_2 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0001 # Duplicate address and storage key # DUP_ADDR_DUP_KEY - data: :label addrs_2_keys_2 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 # Duplicate storage key # DUP_KEY - data: :label addrs_1_keys_2 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 - 0x0000 # A large access list # LARGE - data: :label addrs_10_keys_25 :raw 0x00 accessList: - address: 0x0000000000000000000000000000000000000100 storageKeys: - 0x0000 - 0x0010 - 0xFFFFFFFFFFFFFFF - address: 0x0000000000000000000000000000000000000101 storageKeys: - 0x0000 - 0x0010 - address: 0x0000000000000000000000000000000000000102 storageKeys: - 0x0000 - 0x0010 - 0xFFFFFFFFFFFFFFF - address: 0x0000000000000000000000000000000000000103 storageKeys: - 0x0000 - 0x0010 - address: 0x0000000000000000000000000000000000000104 storageKeys: - 0x0000 - 0x0010 - 0xFFFFFFFFFFFFFFF - address: 0x0000000000000000000000000000000000000105 storageKeys: - 0x0000 - 0x0010 - 0x1111 - 0x2222 - 0x3333 - address: 0x0000000000000000000000000000000000000106 storageKeys: [] - address: 0x0000000000000000000000000000000000000107 storageKeys: - 0x0000 - 0x0010 - address: 0x0000000000000000000000000000000000000108 storageKeys: - 0x0000 - 0x0010 - 0xFFFFFFFFFFFFFFF - address: 0x0000000000000000000000000000000000000109 storageKeys: - 0x0000 - 0x0010 gasLimit: - '400000' gasPrice: 10 nonce: '0' secretKey: "" to: value: - '100000' expect: - indexes: # NO_LIST # EMPTY_LIST data: - :label type0 - :label addrs_0_keys_0 gas: !!int -1 value: !!int -1 network: - "Cancun" result: : balance: 100000000 # Without an access list the cost of the transaction is 121004 # # We add that to the initial balance so we can count down from # a nice round number. It doesn't matter if the transaction is old # style (type 0), or if it simply doesn't have entries in the access # list - indexes: # NO_LIST # EMPTY_LIST data: - :label type0 - :label addrs_0_keys_0 gas: !!int -1 value: !!int -1 network: - ">=Prague" result: : balance: 99999940 # An access list with one address and no keys in it # It costs 2400 per address # ONE_ZERO - indexes: data: :label addrs_1_keys_0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: 99976000 # An access list with one address and one storage key in it # It costs 4300, 2400 for the address and 1900 for the key # ONE_ONE # DIFF_ADDR # DIFF_KEY - indexes: data: :label addrs_1_keys_1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: 99957000 # An access list with one address and two storage keys in it # It costs 6200, 2400 for the address and 2*1900 for the keys # # Another test checks what happens when the two keys are the same, # it does not matter - access lists are not checked for duplicates, # so you pay for each entry, needed or not. # ONE_TWO # DUP_KEY - indexes: data: :label addrs_1_keys_2 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: 99938000 # An access list with two addresses and two storage keys in it # It costs 8600, 2400*2 for the addresses and 2*1900 for the keys # # Another test checks what happens when the two addresses are the same, # it does not matter - access lists are not checked for duplicates, # so you pay for each entry, needed or not. # TWO_TWO # DUP_ADDR # DUP_ADDR_DUP_KEY - indexes: data: :label addrs_2_keys_2 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: 99914000 # A big list of ten addresses and twenty five keys. # The cost is still 2400 per address and 1900 per key # LARGE - indexes: data: :label addrs_10_keys_25 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: 99285000 ================================================ FILE: tests/static/state_tests/stEIP2930/variedContextFiller.yml ================================================ variedContext: # EIP2930 in different contexts env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Use delegatecall to C057, to check that the cost is lower when the caller # account is the one in the access list # 0000000000000000000000000000000000001000: balance: '1000000000000000000' code: | { ; DELEGATE_VALID DELEGATE_INVALID (delegatecall (gas) 0xC057 0 0 0 0) } nonce: '0' storage: {} # Use call to C057, to check that the cost is lower when the callee # account is the one in the access list 0000000000000000000000000000000000001001: balance: '1000000000000000000' code: | { ; CALL_VALID CALL_INVALID (call (gas) 0xC057 0 0 0 0 0) } nonce: '0' storage: {} # Use callcode to C057, to check that the cost is lower when the caller # account is the one in the access list 0000000000000000000000000000000000001002: balance: '1000000000000000000' code: | { ; CALLCODE_VALID CALLCODE_INVALID (callcode (gas) 0xC057 0 0 0 0 0) } nonce: '0' storage: {} # Write to @@0, to verify the write cost is correct # Then read 0x60A7, to verify the read cost is correct 000000000000000000000000000000000000C057: balance: '1000000000000000000' code: | { ; 0xC057: DELEGATE_VALID DELEGATE_INVALID ; CALL_INVALID CALL_VALID ; CALLCODE_VALID CALLCODE_INVALID ; Write to [[0]], and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x02 [0] (- @0 (gas) 17) [[1]] @0 ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; Read [[0x60A7]], and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [0x20] @@0x60A7 [0] (- @0 (gas) 16) [[2]] @0 ; The 16 is the cost of the extra opcodes } nonce: '0' storage: 0x60A7: 0xDEAD # Use staticcall to EAD0C057, to check that the cost is lower when the callee # account is the one in the access list 0000000000000000000000000000000000001003: balance: '1000000000000000000' code: | { ; STATICCALL_VALID STATICCALL_INVALID ; Need to store the result here, because static call is, well, static (staticcall (gas) 0xEAD0C057 0 0 0 0x20) [[0]] @0 } nonce: '0' storage: {} # Read 0x60A7, to verify the read cost is correct # Because this is STATICCALL, return the value 00000000000000000000000000000000EAD0C057: balance: '1000000000000000000' code: | { ; STATICCALL_VALID STATICCALL_INVALID ; Read [[0x60A7]], and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [0x20] @@0x60A7 [0] (- @0 (gas) 19) ; The 19 is the cost of the extra opcodes (return 0x00 0x20) ; a.k.a. @0 } nonce: '0' storage: 0x60A7: 0xDEAD # CALLed, read and writes storage, and then REVERTs # (the call is from 0xCCC...CCC) 0000000000000000000000000000000000001010: balance: '1000000000000000000' code: | { ; CALL_REVERT_VALID CALL_REVERT_INVALID ; Write to [[0]], and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0]] 0x02 [0] (- @0 (gas) 17) ; The 17 is the cost of the extra opcodes: ; PUSH1 0x00, MSTORE ; PUSH1 0x02, PUSH1 0x00, (and then comes the SSTORE we are measuring) ; GAS ; Read [[0x60A7]], and see how much gas that cost. It should ; cost more when it is not declared storage [0x20] (gas) [0x40] @@0x60A7 [0x20] (- @0x20 (gas) 26) ; The 29 is the cost of the extra opcodes ; Send the results the only way we can (revert 0 0x40) } nonce: '0' storage: 0x60A7: 0xBEEF # Call an contract that writes to storage and then commits suicide 0000000000000000000000000000000000001011: balance: '1000000000000000000' code: | { ; CALL_WRITE_SUICIDE_VALID CALL_WRITE_SUICIDE_INVALID [0] (gas) (call (gas) 0xDEAD0111 0 0 0 0 0) [[0]] (- @0 (gas) 0x7fe8) } nonce: '0' storage: {} # Write to storage and then commit suicide 00000000000000000000000000000000DEAD0111: balance: '1000000000000000000' code: | { ; CALL_WRITE_SUICIDE_VALID CALL_WRITE_SUICIDE_INVALID [[0]] 0xDEAD (selfdestruct 0) } nonce: '0' storage: {} # Call an contract that reads storage and then commits suicide 0000000000000000000000000000000000001012: balance: '1000000000000000000' code: | { ; CALL_READ_SUICIDE_VALID CALL_READ_SUICIDE_INVALID [0] (gas) (call (gas) 0xDEAD0112 0 0 0 0 0) [[0]] (- @0 (gas) 0x7fe8) } nonce: '0' storage: {} # Read storage and then commit suicide 00000000000000000000000000000000DEAD0112: balance: '1000000000000000000' code: | { ; CALL_READ_SUICIDE_VALID CALL_READ_SUICIDE_INVALID @@0 (selfdestruct 0) } nonce: '0' storage: 0x00: 0xDEAD0060A7 # Do a static call, see if it fails on the write using what it returns 0000000000000000000000000000000000001013: balance: '1000000000000000000' code: | { ; STATIC_WRITE_VALID STATIC_WRITE_INVALID [0x00] 0x0BAD ; If the call is successful @0 becomes 0x600D (staticcall (gas) 0xF113 0 0 0 0x20) [[0]] @0x00 } nonce: '0' storage: 0x00: 0x60A7 # To be staticcall-ed and attempt to write 000000000000000000000000000000000000F113: balance: '1000000000000000000' code: | { ; STATIC_WRITE_VALID STATIC_WRITE_INVALID [[0]] 0xDEAD60A7 ; If we get here, GOOD [0] 0x600D (return 0 0x20) } nonce: '0' storage: {} # Check an SSTORE that only happens when the access list is valid # (otherwise OOG) 0000000000000000000000000000000000001014: balance: '1000000000000000000' code: | { ; WRITE_INVALID_OOG WRITE_VALID_NO_OOG (call 0x0B65 0xF114 0 0 0 0 0x20) } nonce: '0' storage: {} # Check an SSTORE that only happens when the access list is valid # (otherwise OOG) 000000000000000000000000000000000000F114: balance: '1000000000000000000' code: | { ; WRITE_INVALID_OOG WRITE_VALID_NO_OOG [[0]] 0x600D } nonce: '0' storage: 0x00: 0x0BAD # Check an SSLOAD that only happens when the access list is valid # (otherwise OOG) 0000000000000000000000000000000000001015: balance: '1000000000000000000' code: | { ; READ_INVALID_OOG READ_VALID_NO_OOG (call 0x1800 0xF115 0 0 0 0 0x20) } nonce: '0' storage: {} # Check an SLOAD that only happens when the access list is valid # (otherwise OOG) 000000000000000000000000000000000000F115: balance: '1000000000000000000' code: | { ; READ_INVALID_OOG READ_VALID_NO_OOG [0] @@0x60A7 [[0]] 0x600D } nonce: '0' storage: 0x0000: 0x0BAD 0x60A7: 0xDEAD # Run recursively to see that it doesn't matter if we are doing the # access one, two, or ten levels deep 0000000000000000000000000000000000001016: balance: '1000000000000000000' code: | { ; RECURSE_VALID RECURSE_INVALID (def 'NOP 0) ; Read storage cell zero, so the first time we read it to won't ; be added to the cost @@0 ; Write to [[0xBEEF]], and see how much gas that cost. It should ; cost more when it is not declared storage [0] (gas) [[0xBEEF]] 0x02 [0] (- @0 (gas) 17) ; Read [[0x60A7]], and see how much gas that cost. It should ; cost more when it is not declared storage [0x20] (gas) [0xA0] @@0x60A7 [0x20] (- @0x20 (gas) 35) ; Write to a different cell each time [0x40] (gas) [[(+ 0xF000 @@0)]] 0xBEEF [0x40] (- @0x40 (gas) 0x78) ; Read from a different cell each time [0x60] (gas) @@(+ 0xF010 @@0) [0x60] (- @0x60 (gas) 0x7a) ; Write the costs of storage access [[ (+ 0x100 @@0x00 ) ]] @0x00 [[ (+ 0x200 @@0x00 ) ]] @0x20 [[ (+ 0x300 @@0x00 ) ]] @0x40 [[ (+ 0x400 @@0x00 ) ]] @0x60 ; Recursion, call yourself unless @@0 == 0 (if (> @@0 0) { [[0]] (- @@0 1) (call (gas) 0x01016 0 0 0 0 0) } NOP) } nonce: '0' storage: 0x0000: 0x000F # Max depth 0x60A7: 0xDEAD # CREATE a contract, access storage in the constructor, see # what happens 0000000000000000000000000000000000001020: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CREATE_VALID CREATE_INVALID ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'bufLength 0x100) ; Create the contract code [contractLength] (lll { [[0]] 0xFF } contractCode ) ; contract lll ; Create the constructor code, which runs with the contract address ; of the newly created contract. If we declare that address in the ; transaction's access list we get the discount [constructorLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[1]] (- @0 (gas)) ; Copy the contract ml code from code to memory (codecopy 0 bufLength bufLength) ; Return the contract information so it can be created (return 0x0 0x10) } constructorCode ) ; constructor lll ; actually create the contract [addr] (create 0 constructorCode (+ bufLength @contractLength)) [[1]] @addr } nonce: '0' storage: {} # CREATE2 a contract, access storage in the constructor, see # what happens 0000000000000000000000000000000000001021: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CREATE2_VALID CREATE2_INVALID ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'bufLength 0x100) ; Create the contract code [contractLength] (lll { [[0]] 0xFF } contractCode ) ; contract lll ; Create the constructor code, which runs with the contract address ; of the newly created contract. If we declare that address in the ; transaction's access list we get the discount [constructorLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[1]] (- @0 (gas)) ; Copy the contract ml code from code to memory (codecopy 0 bufLength bufLength) ; Return the contract information so it can be created (return 0x0 0x10) } constructorCode ) ; constructor lll ; actually create the contract [addr] (create2 0 constructorCode (+ bufLength @contractLength) 0x5a17) [[1]] @addr } nonce: '0' storage: {} # CREATE a contract, then CALL it. See how the this interacts with the # access list. 0000000000000000000000000000000000001022: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CALL_CREATED_VALID CALL_CREATED_INVALID ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'bufLength 0x100) ; Create the contract code [contractLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[1]] (- @0 (gas)) } contractCode ) ; contract lll ; Create the constructor code [constructorLength] (lll { ; Copy the contract ml code from code to memory (codecopy 0 bufLength bufLength) ; Return the contract information so it can be created (return 0x0 0x80) ; I just chose a sufficiently high number } constructorCode ) ; constructor lll ; actually create the contract [addr] (create 0 constructorCode (+ bufLength @contractLength)) (call (gas) @addr 0 0 0 0 0) [[1]] @addr } nonce: '0' storage: {} # CREATE2 a contract, then CALL it. See the effects on the access list 0000000000000000000000000000000000001023: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CALL_CREATE2_ED_VALID CALL_CREATE2_ED_INVALID ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'bufLength 0x100) ; Create the contract code [contractLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[1]] (- @0 (gas)) } contractCode ) ; contract lll ; Create the constructor code [constructorLength] (lll { ; Copy the contract ml code from code to memory (codecopy 0 bufLength bufLength) ; Return the contract information so it can be created (return 0x0 0x80) ; I just chose a sufficiently high number } constructorCode ) ; constructor lll ; actually create the contract [addr] (create2 0 constructorCode (+ bufLength @contractLength) 0x5a17) (call (gas) @addr 0 0 0 0 0) [[1]] @addr } nonce: '0' storage: {} # CREATE a contract, then CALL it. Both times access the same storage cell, # see you are still only charged a high cost the first time 0000000000000000000000000000000000001024: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CREATE_&_CALL_VALID CREATE_&_CALL_INVALID ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'bufLength 0x100) ; Create the contract code [contractLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[2]] (- @0 (gas)) } contractCode ) ; contract lll ; Create the constructor code [constructorLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[1]] (- @0 (gas)) ; Copy the contract ml code from code to memory (codecopy 0 bufLength bufLength) ; Return the contract information so it can be created (return 0x0 0x80) ; I just chose a sufficiently high number } constructorCode ) ; constructor lll ; actually create the contract [addr] (create 0 constructorCode (+ bufLength @contractLength)) (call (gas) @addr 0 0 0 0 0) [[1]] @addr } nonce: '0' storage: {} # CREATE2 a contract, then CALL it. Both times access the same storage cell, # see you are still only charged a high cost the first time 0000000000000000000000000000000000001025: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CREATE2_&_CALL_VALID CREATE2_&_CALL_INVALID ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'constructorCode 0x000) (def 'contractCode 0x100) (def 'contractLength 0x200) (def 'constructorLength 0x220) (def 'addr 0x240) (def 'bufLength 0x100) ; Create the contract code [contractLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[2]] (- @0 (gas)) } contractCode ) ; contract lll ; Create the constructor code [constructorLength] (lll { ; write to storage [0] (gas) [[0]] 0xFFFF [[1]] (- @0 (gas)) ; Copy the contract ml code from code to memory (codecopy 0 bufLength bufLength) ; Return the contract information so it can be created (return 0x0 0x80) ; I just chose a sufficiently high number } constructorCode ) ; constructor lll ; actually create the contract [addr] (create2 0 constructorCode (+ bufLength @contractLength) 0x5a17) (call (gas) @addr 0 0 0 0 0) [[1]] @addr } nonce: '0' storage: {} # Call a contract twice, see the high storage cost is only for # the first time 0000000000000000000000000000000000001026: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CALL_TWICE_VALID CALL_TWICE_INVALID (call (gas) 0xF126 0 0 0 0 0) (call (gas) 0xF126 0 0 0 0 0) } nonce: '0' storage: {} 000000000000000000000000000000000000F126: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; CALL_TWICE_VALID CALL_TWICE_INVALID [0] (gas) [[0x00]] 0x60A7 [0] (- @0 (gas)) ; If @@1 is empty, write to it. Otherwise, write to @@2 (if (= @@1 0) {[[1]] @0} {[[2]] @0}) } nonce: '0' storage: {} # Call different contracts depending on the parameter cccccccccccccccccccccccccccccccccccccccc: code: | { ; ccc...ccc revert and suicide contract (call (gas) (+ 0x1000 $4) 0 0 0 0 0x40) ; Write the returned results, if any [[0]] @0x00 [[1]] @0x20 } nonce: '0' storage: {} balance: 0 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: 0x nonce: '0' storage: {} transaction: data: # DELEGATE_VALID - data: :label delegateCallerInAccessList :abi f(uint) 0 accessList: - address: 0x0000000000000000000000000000000000001000 storageKeys: - 0x00 - 0x60A7 # DELEGATE_INVALID - data: :label delegateCalleeInAccessList :abi f(uint) 0 accessList: - address: 0x000000000000000000000000000000000000C057 storageKeys: - 0x00 - 0x60A7 # CALLCODE_VALID - data: :label callcodeCallerInAccessList :abi f(uint) 2 accessList: - address: 0x0000000000000000000000000000000000001002 storageKeys: - 0x00 - 0x60A7 # CALLCODE_INVALID - data: :label callcodeCalleeInAccessList :abi f(uint) 2 accessList: - address: 0x000000000000000000000000000000000000C057 storageKeys: - 0x00 - 0x60A7 # CALL_INVALID - data: :label callCallerInAccessList :abi f(uint) 1 accessList: - address: 0x0000000000000000000000000000000000001001 storageKeys: - 0x00 - 0x60A7 # CALL_VALID - data: :label callCalleeInAccessList :abi f(uint) 1 accessList: - address: 0x000000000000000000000000000000000000C057 storageKeys: - 0x00 - 0x60A7 # STATICCALL_INVALID - data: :label staticcallCallerInAccessList :abi f(uint) 3 accessList: - address: 0x0000000000000000000000000000000000001003 storageKeys: - 0x00 - 0x60A7 # STATICCALL_VALID - data: :label staticcallCalleeInAccessList :abi f(uint) 3 accessList: - address: 0x00000000000000000000000000000000EAD0C057 storageKeys: - 0x00 - 0x60A7 # CALL_REVERT_VALID - data: :label callRevertCalleeInAccessList :abi f(uint) 0x10 accessList: - address: 0x0000000000000000000000000000000000001010 storageKeys: - 0x00 - 0x60A7 # CALL_REVERT_INVALID - data: :label callRevertCallerInAccessList :abi f(uint) 0x10 accessList: - address: 0xcccccccccccccccccccccccccccccccccccccccc storageKeys: - 0x00 - 0x60A7 # CALL_WRITE_SUICIDE_VALID - data: :label callWriteSuicideValid :abi f(uint) 0x11 accessList: - address: 0x00000000000000000000000000000000DEAD0111 storageKeys: - 0x00 # CALL_WRITE_SUICIDE_INVALID - data: :label callWriteSuicideInvalid :abi f(uint) 0x11 accessList: - address: 0x0000000000000000000000000000000000001011 storageKeys: - 0x00 # CALL_READ_SUICIDE_VALID - data: :label callReadSuicideValid :abi f(uint) 0x12 accessList: - address: 0x00000000000000000000000000000000DEAD0112 storageKeys: - 0x00 # CALL_READ_SUICIDE_INVALID - data: :label callReadSuicideInvalid :abi f(uint) 0x12 accessList: - address: 0x0000000000000000000000000000000000001012 storageKeys: - 0x00 # STATIC_WRITE_INVALID - data: :label staticWriteInvalid :abi f(uint) 0x13 accessList: - address: 0x0000000000000000000000000000000000000000 storageKeys: - 0x00 # STATIC_WRITE_VALID - data: :label staticWriteValid :abi f(uint) 0x13 accessList: - address: 0x000000000000000000000000000000000000F113 storageKeys: - 0x00 # WRITE_VALID_NO_OOG - data: :label writeValidGas :abi f(uint) 0x14 accessList: - address: 0x000000000000000000000000000000000000F114 storageKeys: - 0x00 # WRITE_INVALID_OOG - data: :label writeInvalidOOG :abi f(uint) 0x14 accessList: - address: 0x0000000000000000000000000000000000001014 storageKeys: - 0x00 # READ_VALID_NO_OOG - data: :label readValidGas :abi f(uint) 0x15 accessList: - address: 0x000000000000000000000000000000000000F115 storageKeys: - 0x60A7 # READ_INVALID_OOG - data: :label readInvalidOOG :abi f(uint) 0x15 accessList: - address: 0x0000000000000000000000000000000000001015 storageKeys: - 0x60A7 # RECURSE_VALID - data: :label recurseValid :abi f(uint) 0x16 accessList: - address: 0x0000000000000000000000000000000000001016 storageKeys: - 0x60A7 # Read one cell - 0xBEEF # Write once cell # Write to 16 different cells - 0xF000 - 0xF001 - 0xF002 - 0xF003 - 0xF004 - 0xF005 - 0xF006 - 0xF007 - 0xF008 - 0xF009 - 0xF00A - 0xF00B - 0xF00C - 0xF00D - 0xF00E - 0xF00F # Read from 16 different cells - 0xF010 - 0xF011 - 0xF012 - 0xF013 - 0xF014 - 0xF015 - 0xF016 - 0xF017 - 0xF018 - 0xF019 - 0xF01A - 0xF01B - 0xF01C - 0xF01D - 0xF01E - 0xF01F # RECURSE_INVALID - data: :label recurseInvalid :abi f(uint) 0x16 accessList: - address: 0xF000000000000000000000000000000000000116 storageKeys: - 0x60A7 # Read - 0xBEEF # Write # CREATE_VALID - data: :label createValid :abi f(uint) 0x20 accessList: - address: 0xf342e57f24e0333f3af34af08fdbbe9c72cbd37c storageKeys: - 0x00 # CREATE_INVALID - data: :label createInvalid :abi f(uint) 0x20 accessList: - address: 0xf342e57f24e0333f3af34af08fdbbe9c72cbd37c storageKeys: - 0x01 # CREATE2_VALID - data: :label create2Valid :abi f(uint) 0x21 accessList: - address: 0xd82f21135ed7d7d833a9f2a0f1cf6c3da214b8e3 storageKeys: - 0x00 # CREATE2_INVALID - data: :label create2Invalid :abi f(uint) 0x21 accessList: - address: 0xf342e57f24e0333f3af34af08fdbbe9c72cbd37c storageKeys: - 0x00 # CALL_CREATED_VALID - data: :label callCreatedValid :abi f(uint) 0x22 accessList: - address: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6 storageKeys: - 0x00 # CALL_CREATED_INVALID - data: :label callCreatedInvalid :abi f(uint) 0x22 accessList: - address: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6 storageKeys: - 0xFFFF # CALL_CREATE2_ED_VALID - data: :label callCreate2edValid :abi f(uint) 0x23 accessList: - address: 0x530508498d2aa75d8e591612809fec3d37a45615 storageKeys: - 0x00 # CALL_CREATE2_ED_INVALID - data: :label callCreate2edInvalid :abi f(uint) 0x23 accessList: - address: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6 storageKeys: - 0xFFFF # CREATE_&_CALL_VALID - data: :label createAndCallValid :abi f(uint) 0x24 accessList: - address: 0xb76ab2d646c4df221edd345957d0a396a2ab1b6d storageKeys: - 0x00 # CREATE_&_CALL_INVALID - data: :label createAndCallInvalid :abi f(uint) 0x24 accessList: - address: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6 storageKeys: - 0xFFFF # CREATE2_&_CALL_VALID - data: :label create2AndCallValid :abi f(uint) 0x25 accessList: - address: 0x83fbdae70258ac0fa837b701cc63cedf48d4b6bf storageKeys: - 0x00 # CREATE2_&_CALL_INVALID - data: :label create2AndCallInvalid :abi f(uint) 0x25 accessList: - address: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6 storageKeys: - 0xFFFF # CALL_TWICE_VALID - data: :label callTwiceValid :abi f(uint) 0x26 accessList: - address: 0x000000000000000000000000000000000000F126 storageKeys: - 0x00 # CALL_TWICE_InVALID - data: :label callTwiceInvalid :abi f(uint) 0x26 accessList: - address: 0x000000000000000000000000000000000000F126 storageKeys: - 0x20 gasLimit: - '16777216' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: cccccccccccccccccccccccccccccccccccccccc value: - '100000' expect: # DELEGATE_VALID - indexes: data: :label delegateCallerInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001000: storage: 0x00: 0x02 0x01: 0x4e23 0x02: 0x6B # DELEGATE_INVALID - indexes: data: :label delegateCalleeInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001000: storage: 0x00: 0x02 0x01: 0x5657 0x02: 0x83B # CALLCODE_VALID - indexes: data: :label callcodeCallerInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001002: storage: 0x00: 0x02 0x01: 0x4e23 0x02: 0x6B # CALLCODE_INVALID - indexes: data: :label callcodeCalleeInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001002: storage: 0x00: 0x02 0x01: 0x5657 0x02: 0x83B # CALL_INVALID - indexes: data: :label callCallerInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000C057: storage: 0x00: 0x02 0x01: 0x5657 0x02: 0x83B 0x60A7: 0xDEAD # CALL_VALID - indexes: data: :label callCalleeInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000C057: storage: 0x00: 0x02 0x01: 0x4e23 0x02: 0x6B 0x60A7: 0xDEAD # STATICCALL_INVALID - indexes: data: :label staticcallCallerInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001003: storage: 0x00: 0x083B # STATICCALL_VALID - indexes: data: :label staticcallCalleeInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001003: storage: 0x00: 0x6B # CALL_REVERT_VALID - indexes: data: :label callRevertCalleeInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0x00: 0x4e23 0x01: 0x0064 # CALL_REVERT_INVALID - indexes: data: :label callRevertCallerInAccessList gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: storage: 0x00: 0x5657 0x01: 0x0834 # CALL_WRITE_SUICIDE_VALID - indexes: data: :label callWriteSuicideValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001011: storage: 0x00: 0x4E21 # CALL_WRITE_SUICIDE_INVALID # # The difference here is 4600 rather than 2100 because we are also # looking at the balance of the contract (eip2929) - indexes: data: :label callWriteSuicideInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001011: storage: 0x00: 0x6019 # CALL_READ_SUICIDE_VALID - indexes: data: :label callReadSuicideValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001012: storage: 0x00: 0x64 # CALL_READ_SUICIDE_INVALID # # The difference here is 4500 rather than 2000 because we are also # looking at the balance of the contract (eip2929) - indexes: data: :label callReadSuicideInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001012: storage: 0x00: 0x11F8 # STATIC_WRITE_INVALID # STATIC_WRITE_VALID - indexes: data: - :label staticWriteInvalid - :label staticWriteValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001013: storage: 0x00: 0x0BAD # WRITE_VALID_NO_OOG - indexes: data: - :label writeValidGas gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000F114: storage: 0x00: 0x600D # WRITE_INVALID_OOG - indexes: data: - :label writeInvalidOOG gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000F114: storage: 0x00: 0x0BAD # READ_VALID_NO_OOG - indexes: data: - :label readValidGas gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000F115: storage: 0x0000: 0x600D 0x60A7: 0xDEAD # READ_INVALID_OOG - indexes: data: - :label readInvalidOOG gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000F115: storage: 0x0000: 0x0BAD 0x60A7: 0xDEAD # RECURSE_VALID - indexes: data: - :label recurseValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001016: storage: 0x0000: 0x0000 # Write to the same cell. The cost is only applied once 0x0100: 0x0067 0x0101: 0x0067 0x0102: 0x0067 0x0103: 0x0067 0x0104: 0x0067 0x0105: 0x0067 0x0106: 0x0067 0x0107: 0x0067 0x0108: 0x0067 0x0109: 0x0067 0x010A: 0x0067 0x010B: 0x0067 0x010C: 0x0067 0x010D: 0x0067 0x010E: 0x0067 0x010F: 0x4E23 # Read from the same cell. # No extra cost if it is in the access list 0x0200: 0x0064 0x0201: 0x0064 0x0202: 0x0064 0x0203: 0x0064 0x0204: 0x0064 0x0205: 0x0064 0x0206: 0x0064 0x0207: 0x0064 0x0208: 0x0064 0x0209: 0x0064 0x020A: 0x0064 0x020B: 0x0064 0x020C: 0x0064 0x020D: 0x0064 0x020E: 0x0064 0x020F: 0x0064 # Write to a different cell each time 0x0300: 0x4E23 0x0301: 0x4E23 0x0302: 0x4E23 0x0303: 0x4E23 0x0304: 0x4E23 0x0305: 0x4E23 0x0306: 0x4E23 0x0307: 0x4E23 0x0308: 0x4E23 0x0309: 0x4E23 0x030A: 0x4E23 0x030B: 0x4E23 0x030C: 0x4E23 0x030D: 0x4E23 0x030E: 0x4E23 0x030F: 0x4E23 # Read from a different cell each time 0x0400: 0x0064 0x0401: 0x0064 0x0402: 0x0064 0x0403: 0x0064 0x0404: 0x0064 0x0405: 0x0064 0x0406: 0x0064 0x0407: 0x0064 0x0408: 0x0064 0x0409: 0x0064 0x040A: 0x0064 0x040B: 0x0064 0x040C: 0x0064 0x040D: 0x0064 0x040E: 0x0064 0x040F: 0x0064 0xBEEF: 0x0002 0x60A7: 0xDEAD 0xF000: 0xBEEF 0xF001: 0xBEEF 0xF002: 0xBEEF 0xF003: 0xBEEF 0xF004: 0xBEEF 0xF005: 0xBEEF 0xF006: 0xBEEF 0xF007: 0xBEEF 0xF008: 0xBEEF 0xF009: 0xBEEF 0xF00A: 0xBEEF 0xF00B: 0xBEEF 0xF00C: 0xBEEF 0xF00D: 0xBEEF 0xF00E: 0xBEEF 0xF00F: 0xBEEF # RECURSE_INVALID - indexes: data: - :label recurseInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0000000000000000000000000000000000001016: storage: 0x0000: 0x0000 # Write to the same cell. The cost is only applied once 0x0100: 0x0067 0x0101: 0x0067 0x0102: 0x0067 0x0103: 0x0067 0x0104: 0x0067 0x0105: 0x0067 0x0106: 0x0067 0x0107: 0x0067 0x0108: 0x0067 0x0109: 0x0067 0x010A: 0x0067 0x010B: 0x0067 0x010C: 0x0067 0x010D: 0x0067 0x010E: 0x0067 0x010F: 0x5657 # Read from the same cell. # No extra cost if it is in the access list 0x0200: 0x0064 0x0201: 0x0064 0x0202: 0x0064 0x0203: 0x0064 0x0204: 0x0064 0x0205: 0x0064 0x0206: 0x0064 0x0207: 0x0064 0x0208: 0x0064 0x0209: 0x0064 0x020A: 0x0064 0x020B: 0x0064 0x020C: 0x0064 0x020D: 0x0064 0x020E: 0x0064 0x020F: 0x0834 # Write to a different cell each time 0x0300: 0x5657 0x0301: 0x5657 0x0302: 0x5657 0x0303: 0x5657 0x0304: 0x5657 0x0305: 0x5657 0x0306: 0x5657 0x0307: 0x5657 0x0308: 0x5657 0x0309: 0x5657 0x030A: 0x5657 0x030B: 0x5657 0x030C: 0x5657 0x030D: 0x5657 0x030E: 0x5657 0x030F: 0x5657 # Read from a different cell each time 0x0400: 0x0834 0x0401: 0x0834 0x0402: 0x0834 0x0403: 0x0834 0x0404: 0x0834 0x0405: 0x0834 0x0406: 0x0834 0x0407: 0x0834 0x0408: 0x0834 0x0409: 0x0834 0x040A: 0x0834 0x040B: 0x0834 0x040C: 0x0834 0x040D: 0x0834 0x040E: 0x0834 0x040F: 0x0834 0xBEEF: 0x0002 0x60A7: 0xDEAD 0xF000: 0xBEEF 0xF001: 0xBEEF 0xF002: 0xBEEF 0xF003: 0xBEEF 0xF004: 0xBEEF 0xF005: 0xBEEF 0xF006: 0xBEEF 0xF007: 0xBEEF 0xF008: 0xBEEF 0xF009: 0xBEEF 0xF00A: 0xBEEF 0xF00B: 0xBEEF 0xF00C: 0xBEEF 0xF00D: 0xBEEF 0xF00E: 0xBEEF 0xF00F: 0xBEEF # CREATE_VALID - indexes: data: :label createValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: f342e57f24e0333f3af34af08fdbbe9c72cbd37c: storage: 0x00: 0xFFFF 0x01: 0x4e31 # CREATE_INVALID - indexes: data: :label createInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: f342e57f24e0333f3af34af08fdbbe9c72cbd37c: storage: 0x00: 0xFFFF 0x01: 0x5665 # CREATE2_VALID - indexes: data: :label create2Valid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: d82f21135ed7d7d833a9f2a0f1cf6c3da214b8e3: storage: 0x00: 0xFFFF 0x01: 0x4e31 # CREATE2_INVALID - indexes: data: :label create2Invalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: d82f21135ed7d7d833a9f2a0f1cf6c3da214b8e3: storage: 0x00: 0xFFFF 0x01: 0x5665 # CALL_CREATED_VALID - indexes: data: :label callCreatedValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6: storage: 0x00: 0xFFFF 0x01: 0x4e31 # CALL_CREATED_INVALID - indexes: data: :label callCreatedInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x58fd03a2d731b2fb751e4a0f593d373ee77d39e6: storage: 0x00: 0xFFFF 0x01: 0x5665 # CALL_CREATE2_ED_VALID - indexes: data: :label callCreate2edValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x530508498d2aa75d8e591612809fec3d37a45615: storage: 0x00: 0xFFFF 0x01: 0x4e31 # CALL_CREATE2_ED_INVALID - indexes: data: :label callCreate2edInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x530508498d2aa75d8e591612809fec3d37a45615: storage: 0x00: 0xFFFF 0x01: 0x5665 # CREATE_&_CALL_VALID - indexes: data: :label createAndCallValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0xb76ab2d646c4df221edd345957d0a396a2ab1b6d: storage: 0x00: 0xFFFF 0x01: 0x4e31 0x02: 0x0075 # CREATE_&_CALL_INVALID - indexes: data: :label createAndCallInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0xb76ab2d646c4df221edd345957d0a396a2ab1b6d: storage: 0x00: 0xFFFF 0x01: 0x5665 0x02: 0x0075 # CREATE2_&_CALL_VALID - indexes: data: :label create2AndCallValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x83fbdae70258ac0fa837b701cc63cedf48d4b6bf: storage: 0x00: 0xFFFF 0x01: 0x4e31 0x02: 0x0075 # CREATE2_&_CALL_INVALID - indexes: data: :label create2AndCallInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x83fbdae70258ac0fa837b701cc63cedf48d4b6bf: storage: 0x00: 0xFFFF 0x01: 0x5665 0x02: 0x0075 # CALL_TWICE_VALID - indexes: data: :label callTwiceValid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x000000000000000000000000000000000000F126: storage: 0x00: 0x60A7 0x01: 0x4e31 0x02: 0x0075 # CALL_TWICE_INVALID - indexes: data: :label callTwiceInvalid gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 0x000000000000000000000000000000000000F126: storage: 0x00: 0x60A7 0x01: 0x5665 0x02: 0x0075 ================================================ FILE: tests/static/state_tests/stEIP3607/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stEIP3607/initCollidingWithNonEmptyAccountFiller.yml ================================================ # Account attempts to send tx to create a contract which collides with a non-empty address initCollidingWithNonEmptyAccount: _info: comment: Account attempts to send tx to create a contract on a non-empty address env: # A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed) currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 # We prepare a state where the init account already has code in it. pre: # Even if this account is not involved in transaction, it will be miner-reward touched upon generation of a state test 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba: balance: '0' nonce: '1' code: '' storage: {} # Account with empty code, but inits into a non-empty account a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' nonce: '0' code: '' storage: {} # Init'd address keccak256(rlp(a94f5374fce5edbc8e2a8697c15331677e6ebf0b, 0)) 6295ee1b4f6dd65047762f924ecd367c17eabf8f: balance: '1000000000000000000' nonce: '0' code: ':raw 0x6000600155' storage: {} # Address we will be delegate calling to d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0: balance: '0' nonce: '0' code: ':raw 0x00' storage: {} # Transaction originating from account, init address collides with existing code transaction: data: - ':yul berlin { return (0, 32) }' - ':yul berlin { sstore(0, 1) pop(call(gas(), 0xd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0, 10000, 0, 0, 0, 0)) }' - ':yul berlin { sstore(0, 1) pop(create2(10000, 0, 32, 0)) }' - ':yul berlin { sstore(0, 1) pop(create(10000, 0, 32)) }' - ':yul berlin { sstore(0, 1) pop(delegatecall(gas(), 0xd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0, 0, 0, 0, 0)) }' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: '' value: - '100000' # secretKey is a privKey of a94f5374fce5edbc8e2a8697c15331677e6ebf0b secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' result: 6295ee1b4f6dd65047762f924ecd367c17eabf8f: balance: '1000000000000000000' nonce: '0' code: '0x6000600155' storage: {} d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0: balance: '0' 05cd8493115c3299094a269e839e2f5f25691785: shouldnotexist: 1 a42676447b7cedfa5fde894d1d3df24aab362701: shouldnotexist: 1 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: '1' ================================================ FILE: tests/static/state_tests/stEIP3607/transactionCollidingWithNonEmptyAccount_callsFiller.yml ================================================ # Account with non-empty code attempts to send tx to call a contract transactionCollidingWithNonEmptyAccount_calls: _info: comment: Account with non-empty code attempts to send tx to call a contract env: # A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed) currentCoinbase: currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 # We prepare a state where the sending account already has code in it. pre: # Even if this account is not involved in transaction, it will be miner-reward touched upon generation of a state test : balance: '0' nonce: '1' code: '' storage: {} # Account containing code from which we will try to send a transaction from : balance: '1000000000000000000' nonce: '0' code: ':raw 0x6000600155' storage: {} # Account receiving the funds from the account with code : balance: '0' nonce: '0' code: ':raw 0x6000600155' storage: {} # Transaction originating from account with code transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: value: - '100000' # secretKey is a privKey of secretKey: "" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' # Transaction should be rejected since it is being sent by a EOA with code in it. expectException: '>=Frontier': 'TransactionException.SENDER_NOT_EOA' result: {} # No point checking the result when no transaction happened ================================================ FILE: tests/static/state_tests/stEIP3607/transactionCollidingWithNonEmptyAccount_callsItselfFiller.yml ================================================ # Account with non-empty code attempts to send tx to call itself transactionCollidingWithNonEmptyAccount_callsItself: _info: comment: Account with non-empty code attempts to send tx to call itself env: # A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed) currentCoinbase: currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 # We prepare a state where the sending account already has code in it. pre: # Even if this account is not involved in transaction, it will be miner-reward touched upon generation of a state test : balance: '0' nonce: '1' code: '' storage: {} # Account containing code from which we will try to send a transaction from : balance: '1000000000000000000' nonce: '0' code: ':raw 0x6000600155' storage: {} # Transaction originating from account with code transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: value: - '100000' # secretKey is a privKey of secretKey: "" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' # Transaction should be rejected since it is being sent by a EOA with code in it. expectException: '>=Cancun': 'TransactionException.SENDER_NOT_EOA' result: {} # No point checking the result when no transaction happened ================================================ FILE: tests/static/state_tests/stEIP3607/transactionCollidingWithNonEmptyAccount_init_ParisFiller.yml ================================================ # Account with non-empty code attempts to send tx to create a contract transactionCollidingWithNonEmptyAccount_init_Paris: _info: comment: Account with non-empty code attempts to send tx to create a contract env: # A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed) currentCoinbase: currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 # We prepare a state where the sending account already has code in it. pre: # Even if this account is not involved in transaction, it will be miner-reward touched upon generation of a state test : balance: '0' nonce: '1' code: '' storage: {} # Account containing code from which we will try to send a transaction from : balance: '1000000000000000000' nonce: '0' code: ':raw 0x00' storage: {} # Init'd address keccak256(rlp(, 0)) : balance: '10' nonce: '0' code: '' storage: {} # Address we will be delegate calling to : balance: '10' nonce: '0' code: ':raw 0x00' storage: {} # Transaction originating from account with code transaction: data: # Simple stop init code - ':raw 0x00' # Simple contract deployment - ':yul berlin { return (0, 32) }' # Call another contract from init code - ':yul berlin { pop(call(gas(), , 10000, 0, 0, 0, 0)) }' # Delegate call another contract from init code - ':yul berlin { pop(delegatecall(gas(), , 0, 0, 0, 0)) }' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: '' value: - '100000' # secretKey is a privKey of secretKey: "" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' # Transaction should be rejected since it is being sent by a EOA with code in it. expectException: '>=Frontier': 'TransactionException.SENDER_NOT_EOA' result: {} # No point checking the result when no transaction happened ================================================ FILE: tests/static/state_tests/stEIP3607/transactionCollidingWithNonEmptyAccount_send_ParisFiller.yml ================================================ # Account with non-empty code attempts to send tx to another account with empty code transactionCollidingWithNonEmptyAccount_send_Paris: _info: comment: Account with non-empty code attempts to send tx to another account with empty code env: # A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed) currentCoinbase: currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 # We prepare a state where the sending account already has code in it. pre: # Even if this account is not involved in transaction, it will be miner-reward touched upon generation of a state test : balance: '0' nonce: '1' code: '' storage: {} # Account containing code from which we will try to send a transaction from : balance: '1000000000000000000' nonce: '0' code: ':raw 0x6000600155' storage: {} # Account receiving the funds from the account with code : balance: '10' nonce: '0' code: '' storage: {} # Transaction originating from account with code transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: value: - '100000' # secretKey is a privKey of secretKey: "" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' # Transaction should be rejected since it is being sent by a EOA with code in it. expectException: '>=Cancun': 'TransactionException.SENDER_NOT_EOA' result: {} # No point checking the result when no transaction happened ================================================ FILE: tests/static/state_tests/stExample/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stExample/accessListExampleFiller.yml ================================================ accessListExample: _info: comment: A test shows accessList transaction example env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 expect: - network: - '>=Cancun' result: : storage: 0x00: 2 pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (ADD 1 1) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 - address: 0x195e7baea6a6c7c4c2dfeb977efac326af552d87 storageKeys: - 0x00 - data: :label declaredKeyWrite2 :raw 0x00 accessList: - address: 0x195e7baea6a6c7c4c2dfeb977efac326af552d87 storageKeys: - 0x00 gasLimit: - '400000' gasPrice: '10' nonce: '0' to: value: - '100000' secretKey: "" ================================================ FILE: tests/static/state_tests/stExample/add11Filler.json ================================================ { "add11" : { "_info" : { "comment" : "A test for (add 1 1) opcode result" }, "env" : { "//comment" : "A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed)", "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0xFF112233445566", "currentNumber" : "1", "currentTimestamp" : "1000" }, "//comment" : "Expect section is the post condition for the transaction result", "expect" : [ { "//comment" : "indexes are used to specify post condition for a given transaction range.", "//comment" : "transaction section describe multiple transaction which will be executed on pre state", "indexes" : { "//comment" : "-1 for transaction with any data from this field. or a particular index, or range [0, 1, 2]", "data" : -1, "gas" : -1, "value" : -1 }, "//comment" : "hard fork order: Frontier, Homestead, EIP150, EIP155, Byzantium, Constantinople, Istanbul", "network" : [">=Cancun"], "result" : { "//comment" : "Account in expect section would be checked for the fields specified here (balance, code, storage)", "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//comment" : "Better not to check the gas or mining reward affected account's balances.", "//comment" : "A change in gasPrice will affect the test and this post condition.", "//comment" : "So unless the test doesn't really require it, don't check coinbase/miner address balance or sender balance in post section", "//balance" : "1000000000000100000", "//comment" : "Byte Code example", "code" : "0x600160010160005500", "storage" : { "0x00" : "0x02" } }, "//comment" : "could be incomplete type. only balance field would be checked.", "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "//balance" : "43112", "nonce" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//balance" : "999999999999856888", "code" : "0x", "nonce" : "1", "storage" : { } }, "//comment" : "check that this address is not generated to the post state", "e94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" } } } ], "//comment" : "Pre condition state for the test", "pre" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "balance" : "0", "code" : "0x", "nonce" : "1", "storage" : { } }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "//comment": "If lllc compiler is installed, LLL code will be converted into EVM bytecode when --filltests", "//code" : "put result of add(1,1) into storage cell 0", "//comment" : "Bytecode example: ", "//code" : "0x600160010160005500", "//comment" : "LLL Code example. Use LLL with comments, so your tests would have transparent source logic.", "//comment" : "If the LLL is to bit for .json use .yml test format for better sourcing of the contract", "code" : "{ [[0]] (ADD 1 1) }", "nonce" : "0", "storage" : { } }, "//comment" : "A pre state account description must be complete (balance, code, nonce, storage)", "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "//comment" : "multiple transaction description that will be applied on a pre state", "transaction" : { "//comment" : "foreach d in `data` { foreach g in `gasLimit` { foreach v in `value` { pre.applyTransaction(d, g, v) }}}", "//comment" : "each element of the data array is treated same as account's code field. You could use LLL here", "data" : [ "" ], "//comment" : "Be careful when adding gasLimits that are < then intrinsic gas cost. StateTests are not allowed to have invalid transactions", "gasLimit" : [ "400000" ], "gasPrice" : "10", "//comment" : "nonce must be same as account nonce a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "nonce" : "0", "//comment" : "secretKey is a privKey of a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "//comment" : "if `to` field is empty, the transaction becomes contract creation. code from data will be executed as a deployment code", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stExample/add11_ymlFiller.yml ================================================ # add11Filler.json representation in .yml format # YML format allows multiline strings which makes it easier to write contracts code using solidity, lll, yul # As well as adding comments to the test # However there is a little downside: yml is extremely sensitive to white spaces add11_yml: _info: comment: A test for (add 1 1) opcode result env: # A blockinfo section (obsolete). Do not change. (only coinbase and gasLimit could be changed) currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 # Expect section is the post condition for the transaction result expect: # indexes are used to specify post condition for a given transaction range. # transaction section describe multiple transaction which will be executed on pre state - indexes: # -1 for transaction with any data from this field. or a particular index, or range [0, 1, 2] data: !!int -1 gas: !!int 0 value: !!int -1 # hard fork order Frontier, Homestead, EIP150, EIP155, Byzantium, Constantinople, Istanbul network: - '>=Cancun' result: # Account in expect section would be checked for the fields specified here (balance, code, storage) 095e7baea6a6c7c4c2dfeb977efac326af552d87: # Better not to check the gas or mining reward affected account's balances. # A change in gasPrice will affect the test and this post condition. # So unless the test doesn't really require it, don't check coinbase/miner address balance or sender balance in post section # balance 1000000000000100000 # Byte Code example code: '0x600160010160005500' storage: 0x00: 2 # could be incomplete type. only balance field would be checked.", 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba: # balance 43112 nonce: '1' a94f5374fce5edbc8e2a8697c15331677e6ebf0b: # Avoid checking balance field as it actually affected by many EIPs that can break the test # balance 999999999999856888 code: '0x' nonce: '1' storage: {} # check that this address is not generated to the post state e94f5374fce5edbc8e2a8697c15331677e6ebf0b: shouldnotexist: 1 # Pre condition state for the test pre: # Even if this account is not involved in transaction, it will be miner-rawrd touched upon generation of a state test 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba: balance: '0' nonce: '1' code: '' storage: {} 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' # If lllc compiler is installed, LLL code will be converted into EVM bytecode when --filltests" # put result of add(1,1) into storage cell 0 # Bytecode example code '0x600160010160005500', use :raw to disable the source code warning # LLL Code example. Use LLL with comments, so your tests would have transparent source logic. # If the LLL is to bit for .json use .yml test format for better sourcing of the contract code: | { ; Can also add lll style comments here [[0]] (ADD 1 1) } nonce: '0' storage: {} # A pre state account description must be complete (balance, code, nonce, storage)", a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} # Multiple transaction description that will be applied on a pre state transaction: # foreach d in `data` { foreach g in `gasLimit` { foreach v in `value` { pre.applyTransaction(d, g, v) }}} # each element of the data array is treated same as account's code field. You could use LLL here data: - '' # Be careful when adding gasLimits that are < then intrinsic gas cost. StateTests are not allowed to have invalid transactions gasLimit: - '400000' gasPrice: '10' # Nonce must be same as account nonce a94f5374fce5edbc8e2a8697c15331677e6ebf0b nonce: '0' # if `to` field is empty, the transaction becomes contract creation. code from data will be executed as a deployment code to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '100000' # secretKey is a privKey of a94f5374fce5edbc8e2a8697c15331677e6ebf0b secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" ================================================ FILE: tests/static/state_tests/stExample/basefeeExampleFiller.yml ================================================ basefeeExample: _info: comment: A test shows basefee transaction example env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000000 currentBaseFee: 70000000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 2 pre: : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (ADD 1 1) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - data: :label declaredKeyWrite :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 maxFeePerGas: '0x12A05F200' maxPriorityFeePerGas: '2' gasLimit: - '4000000' nonce: '0' to: value: - '100000' secretKey: "" ================================================ FILE: tests/static/state_tests/stExample/eip1559Filler.yml ================================================ eip1559: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000 # New in London because of EIP1559 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | { (sstore 0 (gasprice)) (sstore 1 (basefee)) } nonce: 1 storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 gasLimit: - 4000000 nonce: 1 to: value: - 0 secretKey: "" # New in London because of EIP 1559 maxPriorityFeePerGas: 10 maxFeePerGas: 2000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 1010 # GASPRICE 0x01: 1000 # BASEFEE ================================================ FILE: tests/static/state_tests/stExample/indexesOmitExampleFiller.yml ================================================ indexesOmitExample: _info: comment: expect section set -indexes field by default equal to -1 env: currentCoinbase: currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 expect: #indexes section can be omitted, the default value is set to -1 for all tx vectors - indexes: data: !!int -1 # default value for gas vector is set to -1 value: !!int -1 network: - '>=Cancun' result: : code: '0x600160010160005500' storage: 0x00: 2 pre: : balance: '0' nonce: '1' code: '' storage: {} : balance: '1000000000000000000' code: | { ; Can also add lll style comments here [[0]] (ADD 1 1) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: value: - '100000' secretKey: "" ================================================ FILE: tests/static/state_tests/stExample/invalidTrFiller.json ================================================ { "invalidTr" : { "_info" : { "comment" : "A state test with invalid transaction example filler" }, "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0xFF112233445566", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "expectException" : { ">=Cancun" : "TransactionException.INTRINSIC_GAS_TOO_LOW" }, "result" : { "" : { "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "0x", "nonce" : "1", "storage" : { } }, "" : { "balance" : "1000000000000000000", "//code" : "0x600160010160005500", "code" : "{ [[0]] (ADD 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stExample/labelsExampleFiller.yml ================================================ # An example how to use labels in expect section # More info: https://ethereum-tests.readthedocs.io/en/latest/test_filler/test_expect_state.html?highlight=labels labelsExample: _info: comment: An example how to use labels in expect section env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 expect: - indexes: # now we can reference specific transaction by human readable label # this label will also be available for debug at already generated test # as well as it will be possible to select specific transaction in retesteth by label # ./retesteth -t GeneralStateTests/stExample -- --singletest labelsExample --poststate -d ":label transaction1" data: ':label transaction1' gas: !!int 0 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x0100000000000000000000000000000000000000000000000000000000000000 - indexes: data: ':label transaction2' gas: !!int 0 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x0200000000000000000000000000000000000000000000000000000000000000 # if one label is assigned to many transactions all those transactions will be selected # this selects transaction with data index 2 and 3 - indexes: data: ':label transaction3' gas: !!int 0 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x0300000000000000000000000000000000000000000000000000000000000000 pre: : balance: '1000000000000000000' code: | { [[0]] (CALLDATALOAD 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: # Labels are used to mark different transactions by it's data data: - ':label transaction1 :raw 0x01' - ':label transaction2 :raw 0x02' - ':label transaction3 :raw 0x03' - ':label transaction3 :raw 0x03' gasLimit: - '400000' gasPrice: '10' nonce: '0' to: value: - '100000' secretKey: "" ================================================ FILE: tests/static/state_tests/stExample/mergeTestFiller.yml ================================================ mergeTest: _info: comment: Example of PoS merge state test env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000 currentBaseFee: 1000 currentRandom: 0x1500000000000000000000000000000000000000000000000000000000000000 pre: : balance: '1000000000000000000' code: | { (sstore 0 (gasprice)) (sstore 1 (basefee)) (sstore 2 (difficulty)) } nonce: 1 storage: {} : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 gasLimit: - 4000000 nonce: 1 to: value: - 0 secretKey: "" # New in London because of EIP 1559 maxPriorityFeePerGas: 10 maxFeePerGas: 2000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 storage: 0x00: 1010 # GASPRICE 0x01: 1000 # BASEFEE 0x02: 0x1500000000000000000000000000000000000000000000000000000000000000 # Difficulty (Random) ================================================ FILE: tests/static/state_tests/stExample/rangesExampleFiller.yml ================================================ # An example how to use ranges in expect section # More info: https://ethereum-tests.readthedocs.io/en/latest/test_filler/test_expect_state.html?highlight=labels rangesExample: _info: comment: An example how to use ranges in expect section env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 expect: # we can select transactions with data from 0 to 2, meaning the ones having data indexes 0, 1, 2 - indexes: data: - '0-2' gas: !!int 0 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x0100000000000000000000000000000000000000000000000000000000000000 # Same goes for gas and value indexes, also you can combine labels, ranges and indexes # if you select some transactions twice they will be count once - indexes: data: - !!int 0 - '1-2' - ':label transaction1' gas: - '1-2' value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0x0100000000000000000000000000000000000000000000000000000000000000 # be careful not to cover the same transaction with 2 different expect section as blockchain tests does not like it # also if you have an expect section that does not cover any existing transaction you will see a retesteth error # if you have a transaction without expect section coverage you will se a retesteth error - indexes: data: !!int 3 gas: '0-2' value: '0-1' network: - '>=Cancun' result: : storage: 0x00: 0x0400000000000000000000000000000000000000000000000000000000000000 pre: : balance: '1000000000000000000' code: | { [[0]] (CALLDATALOAD 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '0x' nonce: '0' storage: {} transaction: # When we have many transactions it comes useful to design an expect section using ranges rather then indexes data: - ':label transaction1 :raw 0x01' - ':raw 0x01' - ':raw 0x01' - ':raw 0x04' gasLimit: - '400000' - '1400000' - '2400000' gasPrice: '10' nonce: '0' to: value: - '100000' - '200000' secretKey: "" ================================================ FILE: tests/static/state_tests/stExample/yulExampleFiller.yml ================================================ # An example of using simple yul contracts in the test # More examples at https://ethereum-tests.readthedocs.io/en/latest/state-transition-tutorial.html#solidity-tests yulExample: _info: comment: An example test for using simple yul contracts in the test env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" expect: - indexes: data: !!int -1 gas: !!int 0 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 3 pre: # requires solc compiler to be installed in the system : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { function f(a, b) -> c { c := add(a, b) } sstore(0, f(1, 2)) return(0, 32) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: - "" gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '0' secretKey: '' ================================================ FILE: tests/static/state_tests/stExtCodeHash/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stExtCodeHash/callToNonExistentFiller.json ================================================ { "callToNonExistent" : { "_info" : { "comment" : "https://github.com/ethereum/tests/issues/652" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,1,2,3], "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "//comment" : "Call[0] Callcode[1] delegatecall[2] staticcall[3] to nonexistent, then extcodehash of nonexistent", "" : { "balance" : "1", "storage" : { "0x00" : "1", "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "0", "//comment" : "Redirect call to calldataload", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 64 0 64 ) }", "storage": { "0x01" : "0x1122" } }, "" : { "balance" : "", "code" : "{ [[0]] (CALL 25000 0xdead000000000000000000000000000000000001 0 0 0 0 0) [[1]] (EXTCODEHASH 0xdead000000000000000000000000000000000001) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (CALLCODE 25000 0xdead000000000000000000000000000000000001 0 0 0 0 0) [[1]] (EXTCODEHASH 0xdead000000000000000000000000000000000001) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (DELEGATECALL 25000 0xdead000000000000000000000000000000000001 0 0 0 0) [[1]] (EXTCODEHASH 0xdead000000000000000000000000000000000001) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (STATICCALL 25000 0xdead000000000000000000000000000000000001 0 0 0 0) [[1]] (EXTCODEHASH 0xdead000000000000000000000000000000000001) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/callToSuicideThenExtcodehashFiller.json ================================================ { "callToSuicideThenExtcodehash" : { "_info" : { "comment" : "https://github.com/ethereum/tests/issues/652" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "Call[0] Callcode[1] delegatecall[2] staticcall[3] to suicider, then extcodehash of it", "indexes" : { "data" : [0], "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1", "storage" : { "0x00" : "1", "0x01" : "0x2f715723d7cde71586406b2995d4fc62acc9ce1adb8df087cc8d4502d047d3ca" } }, "0000000000000000000000000000000000000025" : { "balance" : "5555555555" }, "" : { "balance" : "0", "nonce" : "0", "code" : "0x6025ff00", "storage" : {} } } }, { "//comment" : "Call[0] Callcode[1] delegatecall[2] staticcall[3] to suicider, then extcodehash of it", "indexes" : { "data" : [1,2], "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0000000000000000000000000000000000000025" : { "balance" : "1" }, "" : { "balance" : "0", "nonce" : "0", "code" : "0x604060006040600060006000355af200", "storage" : { "0x00" : "0x01", "0x01" : "0x2f715723d7cde71586406b2995d4fc62acc9ce1adb8df087cc8d4502d047d3ca" } }, "" : { "balance" : "5555555555" } } }, { "//comment" : "Call[0] Callcode[1] delegatecall[2] staticcall[3] to suicider, then extcodehash of it", "indexes" : { "data" : [3], "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0000000000000000000000000000000000000025" : { "shouldnotexist" : "1" }, "" : { "balance" : "1", "storage" : { "0x00" : "0", "0x01" : "0x2f715723d7cde71586406b2995d4fc62acc9ce1adb8df087cc8d4502d047d3ca" } }, "" : { "balance" : "5555555555" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "0", "//comment" : "Redirect call to calldataload", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 64 0 64 ) }", "storage": { "0x01" : "0x1122" } }, "" : { "balance" : "", "code" : "{ [[0]] (CALL 165000 0 0 0 0 0) [[1]] (EXTCODEHASH ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (CALLCODE 165000 0 0 0 0 0) [[1]] (EXTCODEHASH ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (DELEGATECALL 165000 0 0 0 0) [[1]] (EXTCODEHASH ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (STATICCALL 165000 0 0 0 0) [[1]] (EXTCODEHASH ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "5555555555", "nonce" : "0", "code" : "{(SELFDESTRUCT 0x0000000000000000000000000000000000000025)}", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/codeCopyZero_ParisFiller.yml ================================================ # https://github.com/ethereum/tests/issues/493, CODECOPY and EXTCODECOPY where codesize = 0 --- codeCopyZero_Paris: _info: comment: "https://github.com/ethereum/tests/issues/493, CODECOPY and EXTCODECOPY where codesize = 0" env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "10000000" currentNumber: "1" currentTimestamp: "1000" pre: a000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { ;; EXTCODECOPY of nonexistent account (EXTCODECOPY 0xa222000000000000000000000000000000000000 0 0 32) (SSTORE 0x10 (MLOAD 0)) (SSTORE 0x11 (EXTCODESIZE 0xa222000000000000000000000000000000000000)) (SSTORE 0x12 (EXTCODEHASH 0xa222000000000000000000000000000000000000)) (SSTORE 0x13 (CALLCODE 50000 0xa222000000000000000000000000000000000000 0 0 0 0 0)) ;; EXTCODECOPY of account with empty code (EXTCODECOPY 0xa200000000000000000000000000000000000000 0 0 32) (SSTORE 0x20 (MLOAD 0)) (SSTORE 0x21 (EXTCODESIZE 0xa200000000000000000000000000000000000000)) (SSTORE 0x22 (EXTCODEHASH 0xa200000000000000000000000000000000000000)) (SSTORE 0x23 (CALLCODE 50000 0xa200000000000000000000000000000000000000 0 0 0 0 0)) ;; EXTCODECOPY of empty account with empty code (EXTCODECOPY 0xa300000000000000000000000000000000000000 0 0 32) (SSTORE 0x30 (MLOAD 0)) (SSTORE 0x31 (EXTCODESIZE 0xa300000000000000000000000000000000000000)) (SSTORE 0x32 (EXTCODEHASH 0xa300000000000000000000000000000000000000)) (SSTORE 0x33 (CALLCODE 50000 0xa300000000000000000000000000000000000000 0 0 0 0 0)) ;; CODECOPY of dynamic account which has empty code (CALL 550000 0xa100000000000000000000000000000000000000 0 0 0 0 32) (SSTORE 0x40 (MLOAD 0)) } nonce: '0' storage: {} a100000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (CREATE2 0 0 (lll { ;; codecopy of empty code (CODECOPY 0 0 32) [[0x50]] (MLOAD 0) [[0x51]] (EXTCODESIZE (ADDRESS)) [[0x52]] (EXTCODEHASH (ADDRESS)) [[0x53]] (EXTCODESIZE (CALLCODE 50000 (ADDRESS) 0 0 0 0 0)) (EXTCODECOPY (ADDRESS) 0 0 32) (SSTORE 0x54 (MLOAD 0)) } 0) 0)) (RETURN 0 32) (STOP) } nonce: '0' storage: {} #account with empty code a200000000000000000000000000000000000000: balance: '1000000000000000000' code: '' nonce: '0' storage: {} #empty with empty code a300000000000000000000000000000000000000: balance: '10' code: '' nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: a000000000000000000000000000000000000000: storage: { '0x13': '0x01', '0x22': '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', '0x23': '0x01', '0x33': '0x01', '0x32': '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', '0x40': '0x64bc50092fd622c9cc47d658b99c1af75aaa3d68' } 64bc50092fd622c9cc47d658b99c1af75aaa3d68: storage: { '0x50': '0x60206000600039600051605055303b605155303f605255600060006000600060', '0x51': '0x00', '0x52': '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', '0x53': '0x00', '0x54': '0x00' } transaction: data: - '' gasLimit: - '1400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'a000000000000000000000000000000000000000' value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/createEmptyThenExtcodehashFiller.json ================================================ { "createEmptyThenExtcodehash" : { "_info" : { "comment" : "https://github.com/ethereum/tests/issues/652" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0b00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x0826562ac9373818f7a055166f7b0cc87485f05d", "0x01" : "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "0x02" : "0x7c5a2c91b22d7a9226523d4ba717db6afb741ebd", "0x03" : "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" } }, "0x0826562ac9373818f7a055166f7b0cc87485f05d" : { "nonce" : "1", "code" : "" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "0x00", "code" : "{ [[0]] (CREATE2 0 0 (lll (seq (sstore 0 0x112233) (STOP)) 0) 0) [[1]] (EXTCODEHASH 0x0826562ac9373818f7a055166f7b0cc87485f05d) [[2]] (CREATE 0 0 (lll (seq (sstore 0 0x112233) (STOP)) 0)) [[3]] (EXTCODEHASH 0x7c5a2c91b22d7a9226523d4ba717db6afb741ebd) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/dynamicAccountOverwriteEmpty_ParisFiller.yml ================================================ # EXTCODEHASH of empty account, then CREATE or CREATE2 over it, EXTCODEHASH again. # This should check that code hash cache is correctly updated during the transaction. --- dynamicAccountOverwriteEmpty_Paris: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: "EXTCODEHASH of empty account, then CREATE or CREATE2 over it, EXTCODEHASH again. This should check that code hash cache is correctly updated during the transaction." pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' code: | { ;; Check stats of empty account [[0]] (EXTCODEHASH 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78) [[1]] (EXTCODESIZE 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78) (EXTCODECOPY 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 0 0 32) (SSTORE 2 (MLOAD 0)) (SSTORE 3 (CALLCODE 50000 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 0 0 0 0 0)) ;; Create account 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 again. should be overwritten without collision [[10]](CREATE2 0 0 (lll { ;; Put some code into it (MSTORE 0 (EXTCODESIZE 0xdddddddd00000000000000000000000000000000)) (EXTCODECOPY 0xdddddddd00000000000000000000000000000000 32 0 (MLOAD 0)) (RETURN 32 (MLOAD 0)) } 0) 0) ;; Check stats of same account after overwrite [[4]] (EXTCODEHASH 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78) [[5]] (EXTCODESIZE 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78) (EXTCODECOPY 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 0 0 32) (SSTORE 6 (MLOAD 0)) (SSTORE 7 (CALLCODE 50000 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 0 0 0 0 0)) (STOP) } nonce: '0' storage: {} # empty account c5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78: balance: '10' code: '' nonce: '0' storage: { "0x01": '1' } dddddddd00000000000000000000000000000000: balance: '1000000000000000000' code: | { [[80]] 11 } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' storage: { } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeCopyBoundsFiller.yml ================================================ # EXTCODECOPY edge case https://github.com/ethereum/tests/issues/438 --- extCodeCopyBounds: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: "EXTCODECOPY edge case https://github.com/ethereum/tests/issues/438" pre: : balance: '1000000000000000000' code: | { ;; code position is way too high (EXTCODECOPY 1 0x010000000000000000000000000000000000000000 5000) [[0]] (MLOAD 0) [[1]] (MLOAD 32) (EXTCODECOPY 1 0x010000000000000000000000000000000000000000 12) [[2]] (MLOAD 0) [[3]] (MLOAD 32) (EXTCODECOPY 1 5 12) [[4]] (MLOAD 0) [[5]] (MLOAD 32) } nonce: '0' storage: {} : balance: '0' code: | { ;; Some code [[99]] 12 [[99]] 11 [[99]] 10 } nonce: '0' storage: { } : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : balance: '1000000000000000001' storage: { "0x04": '0x600b606355600a606355000000000000000000000000000000000000000000' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashAccountWithoutCodeFiller.yml ================================================ # EXTCODEHASH to an account without code --- extCodeHashAccountWithoutCode: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '1000000000000000000' code: | { (CALL 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (CALL 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODEHASH )) (RETURN 0 32) } nonce: '0' storage: {} : balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODESIZE )) (RETURN 0 32) } nonce: '0' storage: {} # account without code : balance: '1000000000000000000' code: '' nonce: '0' storage: {} : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : balance: '1000000000000000001' storage: { "0x00": '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', "0x01": '0' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashCALLCODEFiller.json ================================================ { "extCodeHashCALLCODE" : { "_info" : { "comment": "EXTCODEHASH of an account during a CALLCODE" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000001", "storage" : { "0x00" : "0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432", "0x01" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (CALLCODE 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0)}", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODEHASH )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODESIZE )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x1234", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashCALLFiller.json ================================================ { "extCodeHashCALL" : { "_info" : { "comment": "EXTCODEHASH of an account during a CALL" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000001", "storage" : { "0x00" : "0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432", "0x01" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (CALL 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (CALL 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0)}", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODEHASH )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODESIZE )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x1234", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashChangedAccountFiller.json ================================================ { "extCodeHashChangedAccount": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of an account before and after changing its nonce, balance and storage" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "": { "storage": { "0x00": "0xe632e0df9dba0723da1642ec61b48d5d69f8bb794bb1e0875fc2171f7627c47b", "0x01": "0x0f", "0x02": "0xe632e0df9dba0723da1642ec61b48d5d69f8bb794bb1e0875fc2171f7627c47b", "0x03": "0x0f" } }, "": { "balance": "1000000000000001000", "storage": { "0x00": "0x1234" }, "nonce": "1" } } } ], "pre": { "": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "{ [[0]] (EXTCODEHASH ) [[1]] (EXTCODESIZE ) (CALL 0x10000 1000 0 0 0 0) [[2]] (EXTCODEHASH ) [[3]] (EXTCODESIZE ) (STOP) }", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "{ (CREATE 0 0 0) (SSTORE 0 0x1234) }", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountCallFiller.json ================================================ { "extCodeHashCreatedAndDeletedAccountCall": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of an account created then deleted via CALL in same transaction" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "deadbeef00000000000000000000000000000000": { "storage": { "0x00": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x01": "0x04", "0x02": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x03": "0x04" } }, "7be7677a20a298ff0676ab31f91a0a923f8d9471": { "shouldnotexist": "1" } } } ], "pre": { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000000", "code": "{ (MSTORE 0 (CREATE2 0 128 (lll { (RETURN 0 (lll { (SELFDESTRUCT 0x0) } 0)) } 128) 0x10)) [[0]] (EXTCODEHASH (MLOAD 0)) [[1]] (EXTCODESIZE (MLOAD 0)) (CALL 0x10000 (MLOAD 0) 0 0 0 0 0) [[2]] (EXTCODEHASH (MLOAD 0)) [[3]] (EXTCODESIZE (MLOAD 0)) (STOP) }", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "deadbeef00000000000000000000000000000000", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountFiller.json ================================================ { "extCodeHashCreatedAndDeletedAccount": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of an account created then deleted in same transaction" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "": { "storage": { "0x00": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x01": "0x04", "0x02": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x03": "0x04" } } } } ], "pre": { "": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "{ (MSTORE 0 (CREATE2 0 128 (lll { (RETURN 0 (lll { (SELFDESTRUCT 0x0) } 0)) } 128) 0x10)) [[0]] (EXTCODEHASH (MLOAD 0)) [[1]] (EXTCODESIZE (MLOAD 0)) (CALL 0x10000 (MLOAD 0) 0 0 0 0 0) [[2]] (EXTCODEHASH (MLOAD 0)) [[3]] (EXTCODESIZE (MLOAD 0)) (STOP) }", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountRecheckInOuterCallFiller.json ================================================ { "extCodeHashCreatedAndDeletedAccountRecheckInOuterCall": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of an account created then deleted in a CALL, checking results after the CALL returns" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "deadbeef00000000000000000000000000000000": { "storage": { "0x00": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x01": "0x04", "0x02": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x03": "0x04" } }, "deadbeef00000000000000000000000000000001": { "storage": { "0x00": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x01": "0x04" } }, "7be7677a20a298ff0676ab31f91a0a923f8d9471": { "shouldnotexist": "1" } } } ], "pre": { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000000", "code": "{ (MSTORE 0 (CREATE2 0 128 (lll { (RETURN 0 (lll { (SELFDESTRUCT 0x0) } 0)) } 128) 0x10)) [[0]] (EXTCODEHASH (MLOAD 0)) [[1]] (EXTCODESIZE (MLOAD 0)) (CALL 0x10000 (MLOAD 0) 0 0 0 0 0) [[2]] (EXTCODEHASH (MLOAD 0)) [[3]] (EXTCODESIZE (MLOAD 0)) (STOP) }", "nonce": "0", "storage": { } }, "deadbeef00000000000000000000000000000001": { "balance": "1000000000000000000", "code": "{ (CALL 0x20000 0xdeadbeef00000000000000000000000000000000 0 0 0 0 0) [[0]] (EXTCODEHASH 0x123f4c415171383dcf6f3ac6c3b70fe321e11b5e) [[1]] (EXTCODESIZE 0x123f4c415171383dcf6f3ac6c3b70fe321e11b5e) (STOP) }", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "deadbeef00000000000000000000000000000001", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountStaticCallFiller.json ================================================ { "extCodeHashCreatedAndDeletedAccountStaticCall": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of an account created then deleted via STATICCALL in same transaction" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "deadbeef00000000000000000000000000000000": { "storage": { "0x00": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x01": "0x04", "0x02": "0x73c5f15b1290fd9e66722596c2fa1e1c9341f7acb185530dce0bf0e0fec7dfc6", "0x03": "0x04" } }, "0x123f4c415171383dcf6f3ac6c3b70fe321e11b5e": { "code": "0x6000ff00", "storage": { } } } } ], "pre": { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000000", "code": "{ (MSTORE 0 (CREATE2 0 128 (lll { (RETURN 0 (lll { (SELFDESTRUCT 0x0) } 0)) } 128) 0x10)) [[0]] (EXTCODEHASH (MLOAD 0)) [[1]] (EXTCODESIZE (MLOAD 0)) (STATICCALL 0x10000 (MLOAD 0) 0 0 0 0) [[2]] (EXTCODEHASH (MLOAD 0)) [[3]] (EXTCODESIZE (MLOAD 0)) (STOP) }", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "deadbeef00000000000000000000000000000000", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDELEGATECALLFiller.json ================================================ { "extCodeHashDELEGATECALL" : { "_info" : { "comment": "EXTCODEHASH of an account during a DELEGATECALL" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000001", "storage" : { "0x00" : "0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432", "0x01" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (DELEGATECALL 150000 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (DELEGATECALL 150000 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODEHASH )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODESIZE )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x1234", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccount1CancunFiller.yml ================================================ # EXTCODEHASH to a deleted account --- extCodeHashDeletedAccount1Cancun: _info: comment: | 1) Account A already exists in the state and contains code Call to Account B do the following: - stores Account A code hash to 1 - stores Account A code size to 2 - stores Account A code to 3 - Run selfdestruct on A - stores Account A code hash to 4 - stores Account A code size to 5 - stores Account A code to 6 Same as extCodeHashDeletedAccount1Cancun test but with dynamic account suicide for Cancun env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '2000000000000000000' code: | { ;; create 0xd2571607e241ecf590ed94b12d87c94babe36db6 (Account A) (CREATE 1000000000000000000 0 (lll { (CALL 100000 0xcccccccc00000000000000000000000000000000 0 0 0 0 0) (RETURN 0 (lll { (SELFDESTRUCT (BALANCE 0xdeadbeef00000000000000000000000000000000)) } 0)) } 0)) (CALL 260000 0xbbbbbbbb00000000000000000000000000000000 0 0 0 0 32) } nonce: '0' storage: {} cccccccc00000000000000000000000000000000: balance: '1000000000000000000' code: | { [[1]] 1 } nonce: '0' storage: {} # Account A: already exists in the state # contains selfdestruct code aaaaaaaa00000000000000000000000000000000: balance: '1000000000000000000' code: | { (SELFDESTRUCT (BALANCE 0xdeadbeef00000000000000000000000000000000)) } nonce: '0' storage: {} # Account B # Stores Account A code hash to 1, code size to 2, code to 3 # Run selfdestruct on A # Stores Account A code hash to 4, code size to 5, code to 6 bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' code: | { [[1]] (EXTCODEHASH 0xd2571607e241ecf590ed94b12d87c94babe36db6) [[2]] (EXTCODESIZE 0xd2571607e241ecf590ed94b12d87c94babe36db6) (EXTCODECOPY 0xd2571607e241ecf590ed94b12d87c94babe36db6 0 0 (SLOAD 2)) [[3]] (MLOAD 0) (CALL 150000 0xd2571607e241ecf590ed94b12d87c94babe36db6 0 0 0 0 32) [[4]] (EXTCODEHASH 0xd2571607e241ecf590ed94b12d87c94babe36db6) [[5]] (EXTCODESIZE 0xd2571607e241ecf590ed94b12d87c94babe36db6) (EXTCODECOPY 0xd2571607e241ecf590ed94b12d87c94babe36db6 32 0 (SLOAD 5)) [[6]] (MLOAD 32) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { } d2571607e241ecf590ed94b12d87c94babe36db6: shouldnotexist: '1' bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' storage: { "0x01": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x02": '0x18', "0x03": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000', "0x04": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x05": '0x18', "0x06": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000' } cccccccc00000000000000000000000000000000: storage: { "0x01" : "0x01" } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccount1Filler.yml ================================================ # EXTCODEHASH to a deleted account --- extCodeHashDeletedAccount1: _info: comment: | 1) Account A already exists in the state and contains code Call to Account B do the following: - stores Account A code hash to 1 - stores Account A code size to 2 - stores Account A code to 3 - Run selfdestruct on A - stores Account A code hash to 4 - stores Account A code size to 5 - stores Account A code to 6 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '1000000000000000000' code: | { (CALL 260000 0 0 0 0 32) } nonce: '0' storage: {} # Account A: already exists in the state # contains selfdestruct code : balance: '1000000000000000000' code: | { (SELFDESTRUCT (BALANCE 0xdeadbeef00000000000000000000000000000000)) } nonce: '0' storage: {} # Account B # Stores Account A code hash to 1, code size to 2, code to 3 # Run selfdestruct on A # Stores Account A code hash to 4, code size to 5, code to 6 : balance: '1000000000000000000' code: | { [[1]] (EXTCODEHASH ) [[2]] (EXTCODESIZE ) (EXTCODECOPY 0 0 (SLOAD 2)) [[3]] (MLOAD 0) (CALL 150000 0 0 0 0 32) [[4]] (EXTCODEHASH ) [[5]] (EXTCODESIZE ) (EXTCODECOPY 32 0 (SLOAD 5)) [[6]] (MLOAD 32) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : balance: '1000000000000000001' storage: { } : balance: '0' nonce: 0 code: '0x73deadbeef0000000000000000000000000000000031ff00' storage: {} : balance: '1000000000000000000' storage: { "0x01": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x02": '0x18', "0x03": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000', "0x04": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x05": '0x18', "0x06": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccount2CancunFiller.yml ================================================ # EXTCODEHASH to a deleted account --- extCodeHashDeletedAccount2Cancun: _info: comment: | 2) Account A already exists in the state and contains code Call to Account B stores Account A code hash to 1, code size to 2, code to 3 Call to Account C runs self destruct on A Call to Account B stores Account A code hash to 4, code size to 5, code to 6 Just in case copy of extCodeHashDeletedAccount2 test with dynamic account suicide for Cancun env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '2000000000000000000' code: | { ;; create 0xd2571607e241ecf590ed94b12d87c94babe36db6 (Account A) (CREATE 1000000000000000000 0 (lll { (CALL 100000 0xcccccccc00000000000000000000000000000000 0 0 0 0 0) (RETURN 0 (lll { (SELFDESTRUCT (BALANCE 0xdeadbeef00000000000000000000000000000000)) } 0)) } 0)) (MSTORE 0 0x01) (CALL 150000 0xbbbbbbbb00000000000000000000000000000000 0 0 32 0 32) (CALL 150000 0xd2571607e241ecf590ed94b12d87c94babe36db6 0 0 0 0 32) (MSTORE 32 0x04) (CALL 150000 0xbbbbbbbb00000000000000000000000000000000 0 32 32 0 32) } nonce: '0' storage: {} # Account B # Receives storage key as call data bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' code: | { (CALLDATACOPY 0 0 32) (SSTORE (MLOAD 0) (EXTCODEHASH 0xd2571607e241ecf590ed94b12d87c94babe36db6)) (MSTORE 32 (EXTCODESIZE 0xd2571607e241ecf590ed94b12d87c94babe36db6)) (MSTORE 0 (ADD (MLOAD 0) 1)) (SSTORE (MLOAD 0) (MLOAD 32)) (MSTORE 0 (ADD (MLOAD 0) 1)) (EXTCODECOPY 0xd2571607e241ecf590ed94b12d87c94babe36db6 64 0 (MLOAD 32)) (SSTORE (MLOAD 0) (MLOAD 64)) } nonce: '0' storage: {} cccccccc00000000000000000000000000000000: balance: '1000000000000000000' code: '{ [[1]] 1 }' nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: {} d2571607e241ecf590ed94b12d87c94babe36db6: shouldnotexist: '1' cccccccc00000000000000000000000000000000: storage: { "0x01" : "0x01" } bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' storage: { "0x01": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x02": '0x18', "0x03": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000', "0x04": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x05": '0x18', "0x06": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccount2Filler.yml ================================================ # EXTCODEHASH to a deleted account --- extCodeHashDeletedAccount2: _info: comment: | 2) Account A already exists in the state and contains code Call to Account B stores Account A code hash to 1, code size to 2, code to 3 Call to Account C runs self destruct on A Call to Account B stores Account A code hash to 4, code size to 5, code to 6 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '1000000000000000000' code: | { (MSTORE 0 0x01) (CALL 150000 0 0 32 0 32) (CALL 150000 0 0 0 0 32) (MSTORE 32 0x04) (CALL 150000 0 32 32 0 32) } nonce: '0' storage: {} # Account A: already exists in the state # contains selfdestruct code : balance: '1000000000000000000' code: | { (SELFDESTRUCT (BALANCE 0xdeadbeef00000000000000000000000000000000)) } nonce: '0' storage: {} # Account B # Receives storage key as call data : balance: '1000000000000000000' code: | { (CALLDATACOPY 0 0 32) (SSTORE (MLOAD 0) (EXTCODEHASH )) (MSTORE 32 (EXTCODESIZE )) (MSTORE 0 (ADD (MLOAD 0) 1)) (SSTORE (MLOAD 0) (MLOAD 32)) (MSTORE 0 (ADD (MLOAD 0) 1)) (EXTCODECOPY 64 0 (MLOAD 32)) (SSTORE (MLOAD 0) (MLOAD 64)) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : balance: '1000000000000000001' storage: {} : balance: '0' nonce: 0 code: '0x73deadbeef0000000000000000000000000000000031ff00' storage: {} : balance: '1000000000000000000' storage: { "0x01": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x02": '0x18', "0x03": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000', "0x04": '0x94e08c34847a4e52a3e523b70a5d9b2151155bd0bc10f7b7c550bda63229c756', "0x05": '0x18', "0x06": '0x73deadbeef0000000000000000000000000000000031ff000000000000000000' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccount3Filler.yml ================================================ # EXTCODEHASH to a deleted account --- extCodeHashDeletedAccount3: _info: comment: | 3) Call creates Account A (0x95ab1c33798981918da6d27056f70376674878d2) Call to Account B do the following: - stores Account A code hash to 1 - stores Account A code size to 2 - stores Account A code to 3 - Run selfdestruct on A - stores Account A code hash to 4 - stores Account A code size to 5 - stores Account A code to 6 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' code: | { ;; Creates Account A using code in existing account C (MSTORE 0 (CREATE2 0 0 (lll { (MSTORE 0 (EXTCODESIZE 0xcccccccc00000000000000000000000000000000)) (EXTCODECOPY 0xcccccccc00000000000000000000000000000000 32 0 (MLOAD 0)) (RETURN 32 (MLOAD 0)) } 0) 0)) ;; Stores new Account A address [[0]] (MLOAD 0) ;; Call Account B: (CALL 150000 0xbbbbbbbb00000000000000000000000000000000 0 0 0 0 32) (STOP) } nonce: '0' storage: {} bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' code: | { ;; Stores Account A hash to 1 [[1]] (EXTCODEHASH 0x554e36262c0e0ab156397c32444e4a018fe93b18) [[2]] (EXTCODESIZE 0x554e36262c0e0ab156397c32444e4a018fe93b18) (EXTCODECOPY 0x554e36262c0e0ab156397c32444e4a018fe93b18 0 0 (SLOAD 2)) [[3]] (MLOAD 0) ;; Run self destruct on Account A (CALL 150000 0x554e36262c0e0ab156397c32444e4a018fe93b18 0 0 0 0 32) ;; Stores Account A hash to 2 [[4]] (EXTCODEHASH 0x554e36262c0e0ab156397c32444e4a018fe93b18) [[5]] (EXTCODESIZE 0x554e36262c0e0ab156397c32444e4a018fe93b18) (EXTCODECOPY 0x554e36262c0e0ab156397c32444e4a018fe93b18 32 0 (SLOAD 5)) [[6]] (MLOAD 32) } nonce: '0' storage: {} cccccccc00000000000000000000000000000000: balance: '0' code: | { (SELFDESTRUCT 0xbbbbbbbb00000000000000000000000000000000) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x554e36262c0e0ab156397c32444e4a018fe93b18' } bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' storage: { "0x01": '0xbc0e1b58b60bffd44555bf2c703da0fc6e1e3971797e9c5554512d69f45e7a52', "0x02": '0x17', "0x03": '0x73bbbbbbbb00000000000000000000000000000000ff00000000000000000000', "0x04": '0xbc0e1b58b60bffd44555bf2c703da0fc6e1e3971797e9c5554512d69f45e7a52', "0x05": '0x17', "0x06": '0x73bbbbbbbb00000000000000000000000000000000ff00000000000000000000', } 95ab1c33798981918da6d27056f70376674878d2: shouldnotexist: '1' transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccount4Filler.yml ================================================ # EXTCODEHASH to a deleted account --- extCodeHashDeletedAccount4: _info: comment: | 4) Call creates Account A Call to Account B stores Account A hash to 1 Call to Account C runs self destruct on A Call to Account B stores Account a hash to 2 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' code: | { ;; Creates Account A using code in existing account D (MSTORE 0 (CREATE2 0 0 (lll { (MSTORE 0 (EXTCODESIZE 0xdddddddd00000000000000000000000000000000)) (EXTCODECOPY 0xdddddddd00000000000000000000000000000000 32 0 (MLOAD 0)) (RETURN 32 (MLOAD 0)) } 0) 0)) ;; Stores new Account A address [[0]] (MLOAD 0) ;; Call Account B: ;; Stores Account A code hash to 1, code size to 2, code to 3 (MSTORE 32 0x01) (CALL 150000 0xbbbbbbbb00000000000000000000000000000000 0 32 32 0 32) ;; Call Account C: ;; Runs self Destructs on Account A (CALL 150000 0xcccccccc00000000000000000000000000000000 0 0 0 0 32) ;; Call Account B: ;; Stores Account B code hash to 4, code size to 5, code to 6 (MSTORE 64 0x04) (CALL 150000 0xbbbbbbbb00000000000000000000000000000000 0 64 32 0 32) (STOP) } nonce: '0' storage: {} bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' code: | { ;; get key from call data (CALLDATACOPY 0 0 32) ;; store Account A code hash [[(MLOAD 0)]] (EXTCODEHASH 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78) (MSTORE 0 (ADD (MLOAD 0) 1)) ;; increments storage key [[(MLOAD 0)]] (EXTCODESIZE 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78) (EXTCODECOPY 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 32 0 (SLOAD (MLOAD 0))) (MSTORE 0 (ADD (MLOAD 0) 1)) ;; increments storage key [[(MLOAD 0)]] (MLOAD 32) } nonce: '0' storage: {} cccccccc00000000000000000000000000000000: balance: '0' code: | { ;; Run self destruct on Account A (CALL 150000 0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78 0 0 0 0 32) } nonce: '0' storage: {} dddddddd00000000000000000000000000000000: balance: '0' code: | { (SELFDESTRUCT 0xbbbbbbbb00000000000000000000000000000000) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0xc5691dc90d9fd2a2e9a5fa5bd28bf77ffd60aa78' } bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' storage: { "0x01": '0xbc0e1b58b60bffd44555bf2c703da0fc6e1e3971797e9c5554512d69f45e7a52', "0x02": '0x17', "0x03": '0x73bbbbbbbb00000000000000000000000000000000ff00000000000000000000', "0x04": '0xbc0e1b58b60bffd44555bf2c703da0fc6e1e3971797e9c5554512d69f45e7a52', "0x05": '0x17', "0x06": '0x73bbbbbbbb00000000000000000000000000000000ff00000000000000000000' } e713449c212d891357cc2966816b1d528cfb59e0: shouldnotexist: '1' transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccountCancunFiller.yml ================================================ # EXTCODEHASH to a deleted account same transaction --- extCodeHashDeletedAccountCancun: _info: comment: | Get account A (aaaaaaaa00000000000000000000000000000000) code hash, code size, and code Calls Account A's code which causes self destruction of A Get account A codehash, code size and code It is still getting the same values because selfdestruct is performed at the end of transaction during state finalization stage. Same as extCodeHashDeletedAccount test but with dynamic account suicide for Cancun env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: # get account A codehash, destructs account A, get account A codehash 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '2000000000000000000' code: | { ;; create 0xd2571607e241ecf590ed94b12d87c94babe36db6 (Account A) (CREATE 1000000000000000000 0 (lll { (CALL 100000 0xbbbbbbbb00000000000000000000000000000000 0 0 0 0 0) (RETURN 0 (lll { (SELFDESTRUCT 0xdeadbeef00000000000000000000000000000000) } 0)) } 0)) ;; Gets external code hash, stores it in [[0]] (CALL 150000 0xdeadbeef00000000000000000000000000000000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) ;; Gets external code size, stores it in [[1]] (CALL 150000 0xdeadbeef00000000000000000000000000000001 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0) ;; Gets external code, stores it in [[2]] (CALL 150000 0xdeadbeef00000000000000000000000000000002 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[2]] (MLOAD 0) ;; Call Account A (self destructs) (CALL 150000 0xd2571607e241ecf590ed94b12d87c94babe36db6 0 0 0 0 32) ;; Gets external code hash, stores it in [[3]] (CALL 150000 0xdeadbeef00000000000000000000000000000000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[3]] (MLOAD 0) ;; Gets external code size, stores it in [[4]] (CALL 150000 0xdeadbeef00000000000000000000000000000001 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[4]] (MLOAD 0) ;; Gets external code, stores it in [[5]] (CALL 150000 0xdeadbeef00000000000000000000000000000002 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[5]] (MLOAD 0) } nonce: '0' storage: {} bbbbbbbb00000000000000000000000000000000: balance: '1000000000000000000' code: '{ [[1]] 1 }' nonce: '0' storage: {} # Returns External Code Hash deadbeef00000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODEHASH 0xd2571607e241ecf590ed94b12d87c94babe36db6)) (RETURN 0 32) } nonce: '0' storage: {} # Returns External Code Size deadbeef00000000000000000000000000000001: balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODESIZE 0xd2571607e241ecf590ed94b12d87c94babe36db6)) (RETURN 0 32) } nonce: '0' storage: {} # Returns the first 32 bytes of the External Code deadbeef00000000000000000000000000000002: balance: '1000000000000000000' code: | { ;;(MSTORE 0 (EXTCODESIZE 0xd2571607e241ecf590ed94b12d87c94babe36db6)) ;;(EXTCODECOPY 0xd2571607e241ecf590ed94b12d87c94babe36db6 (EXTCODECOPY 0xd2571607e241ecf590ed94b12d87c94babe36db6 0 0 (EXTCODESIZE 0xd2571607e241ecf590ed94b12d87c94babe36db6)) (RETURN 0 32) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0xaa174f6647c45e8a984f39062ca89ccc3588c787d91106cfd57df387bd504efc', "0x01": '0x17', "0x02": '0x73deadbeef00000000000000000000000000000000ff00000000000000000000', "0x03": '0xaa174f6647c45e8a984f39062ca89ccc3588c787d91106cfd57df387bd504efc', "0x04": '0x17', "0x05": '0x73deadbeef00000000000000000000000000000000ff00000000000000000000' } d2571607e241ecf590ed94b12d87c94babe36db6: shouldnotexist: '1' deadbeef00000000000000000000000000000000: balance: '2000000000000000000' bbbbbbbb00000000000000000000000000000000: storage: { "0x01" : "0x01" } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDeletedAccountFiller.yml ================================================ # EXTCODEHASH to a deleted account same transaction --- extCodeHashDeletedAccount: _info: comment: | Get account A (aaaaaaaa00000000000000000000000000000000) code hash, code size, and code Calls Account A's code which causes self destruction of A Get account A codehash, code size and code It is still getting the same values because selfdestruct is performed at the end of transaction during state finalization stage. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: # get account A codehash, destructs account A, get account A codehash 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' code: | { ;; Gets external code hash, stores it in [[0]] (CALL 150000 0xdeadbeef00000000000000000000000000000000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) ;; Gets external code size, stores it in [[1]] (CALL 150000 0xdeadbeef00000000000000000000000000000001 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0) ;; Gets external code, stores it in [[2]] (CALL 150000 0xdeadbeef00000000000000000000000000000002 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[2]] (MLOAD 0) ;; Call Account A (self destructs) (CALL 150000 0xaaaaaaaa00000000000000000000000000000000 0 0 0 0 32) ;; Gets external code hash, stores it in [[3]] (CALL 150000 0xdeadbeef00000000000000000000000000000000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[3]] (MLOAD 0) ;; Gets external code size, stores it in [[4]] (CALL 150000 0xdeadbeef00000000000000000000000000000001 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[4]] (MLOAD 0) ;; Gets external code, stores it in [[5]] (CALL 150000 0xdeadbeef00000000000000000000000000000002 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[5]] (MLOAD 0) } nonce: '0' storage: {} aaaaaaaa00000000000000000000000000000000: balance: '1000000000000000000' code: | { (SELFDESTRUCT 0xdeadbeef00000000000000000000000000000000) } nonce: '0' storage: {} # Returns External Code Hash deadbeef00000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODEHASH 0xaaaaaaaa00000000000000000000000000000000)) (RETURN 0 32) } nonce: '0' storage: {} # Returns External Code Size deadbeef00000000000000000000000000000001: balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODESIZE 0xaaaaaaaa00000000000000000000000000000000)) (RETURN 0 32) } nonce: '0' storage: {} # Returns the first 32 bytes of the External Code deadbeef00000000000000000000000000000002: balance: '1000000000000000000' code: | { ;;(MSTORE 0 (EXTCODESIZE 0xaaaaaaaa00000000000000000000000000000000)) ;;(EXTCODECOPY 0xaaaaaaaa00000000000000000000000000000000 (EXTCODECOPY 0xaaaaaaaa00000000000000000000000000000000 0 0 (EXTCODESIZE 0xaaaaaaaa00000000000000000000000000000000)) (RETURN 0 32) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0xaa174f6647c45e8a984f39062ca89ccc3588c787d91106cfd57df387bd504efc', "0x01": '0x17', "0x02": '0x73deadbeef00000000000000000000000000000000ff00000000000000000000', "0x03": '0xaa174f6647c45e8a984f39062ca89ccc3588c787d91106cfd57df387bd504efc', "0x04": '0x17', "0x05": '0x73deadbeef00000000000000000000000000000000ff00000000000000000000' } aaaaaaaa00000000000000000000000000000000: code: '0x73deadbeef00000000000000000000000000000000ff00' balance: 0 nonce: 0 storage: {} deadbeef00000000000000000000000000000000: balance: '2000000000000000000' transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashDynamicArgumentFiller.json ================================================ { "extCodeHashDynamicArgument": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE with address from a dynamic argument" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "": { "balance": "1000000000000000001", "storage": { "0x00": "0x00", "0x01": "0x00" } } } }, { "indexes": { "data": 1, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "": { "balance": "1000000000000000001", "storage": { "0x00": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "0x01": "0x00" } } } }, { "indexes": { "data": 2, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "": { "balance": "1000000000000000001", "storage": { "0x00": "0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432", "0x01": "0x02" } } } }, { "indexes": { "data": 3, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "": { "balance": "1000000000000000001", "storage": { "0x00": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "0x01": "0x00" } } } }, { "indexes": { "data": 4, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "": { "balance": "1000000000000000001", "storage": { "0x00": "0x00", "0x01": "0x00" } } } } ], "pre": { "": { "balance": "10", "code": "", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "{ [[0]] (EXTCODEHASH (CALLDATALOAD 0)) [[1]] (EXTCODESIZE (CALLDATALOAD 0)) }", "nonce": "0", "storage": { "0x00": "0xdeadbeef" } }, "": { "balance": "1000000000000000000", "code": ":raw 0x1234", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } } }, "transaction": { "data": [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000001", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000deadbeef00000000000000000000000000000005" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashInInitCodeFiller.json ================================================ { "extCodeHashInInitCode" : { "_info" : { "comment": "EXTCODEHASH/EXTCODESIZE of an account during init code(creation code)" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "storage" : { "0x00" : "0x36712aa4d0dd2f64a9ae6ac09555133a157c74ddf7c079a70c33e8b4bf70dd73", "0x01" : "4" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xd89b2fe30e76dc80d2e93f7db8d32f5865bdad83" : { "storage" : { "0x00" : "0x36712aa4d0dd2f64a9ae6ac09555133a157c74ddf7c079a70c33e8b4bf70dd73", "0x01" : "4" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : ":raw 0x11223344", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ [[0]] (EXTCODEHASH 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b) [[1]] (EXTCODESIZE 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b) }", "{ (seq (CREATE2 0 0 (lll (seq [[0]] (EXTCODEHASH 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b) [[1]] (EXTCODESIZE 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b) ) 0) 0) (STOP) )}" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashMaxCodeSizeFiller.yml ================================================ # EXTCODEHASH to an account with codesize = MAXCODESIZE - 1 --- extCodeHashMaxCodeSize: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '1000000000000000000' code: | { (CALL 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (CALL 150000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODEHASH )) (RETURN 0 32) } nonce: '0' storage: {} : balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODESIZE )) (RETURN 0 32) } nonce: '0' storage: {} # account with random bytecode with code size = MAXCODESIZE - 1 = 24575 : balance: '1000000000000000000' code: ':raw 0xe113a2c07114fc07c399c04fb6849e7301a4a35a7bd3221ae16e1a81fa9d5a04a112cff08de3cf0a5a93b2a335ed76b2ec26540d669bab1457d1870d68c65f02a94051b239c6ca48b7960442a9ebfb8d612fabec149985b90ed0c9f4bc736c5a0d038089fef9d6047ca70fb6ffab6d9bfd4287bea22ba58dd1dd30516b83da7f2d54f2f32b98951215839ae4a21f574d69fbe848f1443e28c72755ba6ceb8431553e7d9d49d125616122e9fa7c8aa59f291cfa19d7acf835198c7f14572beb5aafe06700f0247268a8d105c24d7f3d98fa90700e76256d498d7557009a309026391afbee6e86da108ac8a78559103c72bbd91a7a6001b30158e697a97b523bf49b9db100d7a36b5b2a44442cf8e442b31f92f4026630ebd511bd341e59be195fc0c763f2f46ee384949daae1ab2311cc326f98135c5e670dc32ea5a212f8a8b41ff396dbd4d192595d764af84b377776fa76b7d34ae4abf2fa584c59f1af00c1015806b9b275092ed77b8804a0f2054f12cd8f80573fd0288724f07abd4d04682a0b63c33379459a49f5feccf38540afec56d67a0a80b864c73ef4809af1002d34b09944bbcde80078be755784da76319405fb8eca5d48572c56a5a790f87f04492ba7e7dfda472ec7d5215d1e9c74bc4817d9a925868a136ae4d69a66f7140f203450a201c2e2edaec4edc10af2b0ce61931247725f7354bf1eba1d6f26d4ab4f958db4afe79f59ccbe2985584f8a49c895c6e84a0882b7d00726ea49ce52022c16aa0391192eea998422dbe7d66f0a41e2209ac95b00a90d52f9e3d98a0dfc9afd5d928b8db4c447522c9197facdb836d3967b9b775a28726538acd6ef12f1b3ae8102a5527b90ce104578d5e3507ac48456c3dcb5db78b32d588c6f6f8a4037aa0bf364beb506782c8171698c08efd4c29596b968e24bf815d502dad856344edd9dd481288a01228d68e406163aabbdcbd990803cf40b750347cb0462c7f5b2642d5344257daba23b4f8ed36722817dab5e23e9134129aaf602104cb188a13cb19109e85427f2e60b82f2ad2accb6c7652a6a675189b5ea35e6c3019e740c828e55706529965cbacfa985736e8517587d67c696f627c97fa34bb69f68a3fab6e58ca475a2ede0fb7dc7b7a02d7eb19c9786293ea900465de629683e351750fb375cc1d7b267ac93360cea29943bfd95c4c1764ae1626fd11fb33f3fd3188ed81f08347791e4b22c2a98de62c0a97dbbf705b4a64c1272c69d88378ca960af3097183acaf7d89518a0b860976ba80b9d134e100729ecb0580681549e7a99f6da638674fef9656c74becde90df76b8de7c996543a5f58dee99d6e50a432c6532d83900c4c89c7e6b645ff2b174c624841116e718d47e7a294729e00b33169f2c0cfcac6cc5d57ddcb8f6be93aad862557cd5ea3a366dc65443376750549e1add646a4719d8f84ea7f6716fac617b9b9a972c5ef47abc6c3c8c6267a97d164bc70c32865651f732965dedec114d5255e927fd8d48755d4e9f24545158374dd844cce228558d3f68dfe0fabcba67f79b96bb571f14d7d9cd29b993ef40637d0ac3083948dee0603ad720ff1e36ed84f7ee8afead6e6c7b842f9cdf62de37dbbcf8be174793bb75b8035c1b0392d1457838f6898cf7c14d9ca2ce77f733a4f3284c1528150e92a75cdb97b4fa3b78d7d4f408059e0df5a0c5f40706cc1b615393bf301b7cded942757be61cc5c1c476835070dacec15a189c4aa7e0c11bafd7178cd425073fac1eb4849a3591118cbeda69e31c62c3483981532bc3af7d3b779b4ba6fd2c6934ec8bf34bc39504159b2977f934d5df4856aff35958b0314cdf494f313f9985ece0c9ac6e2f50777230092db621dcec5deaa56a82c5cb29055b07d13b9a520b7d39784eafa00695c8cbdd973389655c4524ec1ead886316dc8d4ebe4ab6da3f022b25e27d9f0a41598227c60347d7fab6c3c0544522e84388db09efba364fa2295b362a99943eaea5561c7639359420fc8925913bc2444c7cec3f65f52a5d2db6d9a195c6a047b39c77bd293d2d87717eec29fe6f3d56f7292113cd63289a09b76b131b744187f5679d3fc4175a7e8efa22a7a13f6a3a7ad7b911143c20f9571ad41ccd69e90f6b33a646b3c08f8971fdabd81fd812d2f2cd00bdd33213243b19e6a365ef59bb102796ffd8bee86a6d058128ecc5612cb31a128ed24a259930982180f08be2fdf4d5fb591e73d2968dc8ca697dd78f028900f95e15d0c6787f5631c9433604e8d6e47af8125adaf7872e5586ac7b15ecfc2076b3e0ebb743dfdd8b8a79ef50c524900e44d6bd53db07bf14ee2365a5e5dd53916ccd28de79126168f2df12bc0640919562aa354a957eb7e2547d202a8f8d428f488e28fbc29505818d3e3768f1e38475c8f809c535438987a075665c1a88aa33f80ef2268374984b0dfeae6fd7f80a0f9fa8f26ee443077352548098b7693b022ea87b41174a15256a268e0bba90bd39cf8aca845ca632f74ed34a96720016cc55aac7157d34f581c0e57a0f0b439de95ca3f03c18d647939eb2db3a487cdae10144a884c9aafc68e18e36ed7b828d7c1677b13b2f6defe63eb346a7c224b881322c7ce4844aef2f00b7384e1f25d894a64d120bb603a613fe5c9d0836dd153069f48fd91466312c3feaedf496fac2ca3bac3e6a4509b082f6ff2c7e6587b3609d67e45e01051c751ce535b62cab82347fa83dfb6e4768147c54c6e8cbcc0183207f54926ee808214c1833581286313c3b9922df987a953e7a86798bd3e44eb0c7867f04b7360e366c612c66083a9f043f6b1d1adc30ace82bd63503109af7dfa29de7f35ceaa87bebea438eb86a71eb4ed828c47e1f1c65d36e02f6a7aefacadbf7b8a7af7b6389b5f6ce48bef187e37261eaa328e3594ec02c6afb88e7f2cd7fa551158bd682e43f89c6ae47c800f41356b6b37aab47336c76211c6243e582b31a0eb3c5ea162670393d9c6670ad95c3a3ec73fbe5ea2b9e8a35581b01a12c2435da87768e1009193ea1164a8fd01ae5b72626d8398ddf1c63372875bc7b0ed8a4be26889a062c1447d5c3e980ec71dc45b6a00b928a510759ad683a83f91d4954e9179fb9f490b2292305c4413e083daa27122d47a7193ab2192a13d8f08d4b7ccbcfb771ecba8cfa335d917922130c310a83b2dac0c42bba3a7afa36a00ff740680fc015834328e24eb6cbd4ab2ffd5963a5034984209ad47d49d73c193be47e07d99ce8b091ced96415e00adbb1b7c59e7a8667e891944523824c521ba10c9e400bddda4f00e5f2523f1271ec03ecd053966968c6645969cdae390442d8c9209b78b84702cfb0fddcc20f3254b08cc5e94fed4cf9e8804d84b2472b1a5d6e04a492aecf474c3e3e20160f507ec7c7a0fc4762a569742cd138589aa6e0ead8b178ba1b7805d983655a7b0e9cc67b9b684248c0afba12bc10a058ecab9cb0b269eea93860cceef850addc3bcb9c97cbb8a45dd41a6bd8a8fdb5d70e8816669fde4ed52e2df93c1612f30cb1c83e20d3e42bcdc764912ad448f9784c97285f282006272ede7f594d0fcdb8c3711d1eb97c345cd28112892fcd050bdda2a2ca2479d405f2b659bb0cc92959760086cea9539795f86d811f67a7f8a2afb8fe884cff4da28aee5469d1b393018e9bd664f99294f946af4dd1f94925310faf1e4ef46f9eb5572176b84d703f765b7cd248962c46c3ba42778c4e82a6f55adaf1de2e6195f92bb2196cc3d292166cc73bbf06e54b0c69e91e5f2d9e560981213db8deaacf777b7256142892db62f757dbeb605ad5b6f5ceeddf6735e51b886899159666178774a45ffb6f76261160dfe939847d932a54125fc4da832714cade3c48acf5a745f1f1addc6e02e25b821ed10c2f5bc9af24f340fa111bd7d78d912d883c35e44766b19a934f38d803f3bcd9bca2cbb46b89359b03bcf597f86e9a0d942a2159d8c705e2a6792381c0449d2db94310d882a4134d678c53cedd8e96d630a40d6459620b80bd3fbf34e07d5efdd952d25915ed93dcc85cdb55e35856bedea24a6b9b254c4bdbaae8a920365c5fdadbc0b7c215cdab54e09d67d7d2239b697e7ba271324cf5f3e4ba4d531cad3ae5d4101f1b469ca689e93160b73f7f6e2ec9effc4a2204b4403f01f173380b992aa1034a8fb07de5f8a2fdc9339a32f056cb664e05cc480530eaf9b8ac3314813d4f986900f859517775ac1fc2d599317a6353bf25eded422bc2abea5053e5a5bdb5755ba3584544f5638f1e11723616144787b07c6dc461923c736ed7a4f84901f6981a3099cfdc3cce9acb5d801bfeccd368da7e0bbba32c1942d22531dda445d2a615cc07af2c0d8cd2a8353547cd7fde52dabcc7141344f5234e240eca4998b23725e09339b850fb479cad40006e96ab62f93bf2e122abc88960a57b74887831bebc7a891084f2e6ecd45dad21c8c74d8464e401b110dc9d41a1a68f73bcea4ad4ef4f771e3f1ce0a1fa8c69149dfa743fdade7a4a843cf889a01ea2b88f49af5e41cf55192a303a6336f281ee7fa34b80278719922fcea1c0981465ff4436060ced679cf8154b8168b4084e36cfad0bba8250561cb17646cc5e9fd6ed168c74abddc98d7021beea2ebdb1fae475940ab46efe24cf050f477dfa5712400b9600a2e92271b87242f338c465dabfc1adcf3924908e32f35cca66cd3aa42040d364fc178ad5b7d88d5724ba0f8a281f0e35ff1a85abf13fddb055e59f5b9196c12a33b3d03d16bd221260af85ceab8fe4d161ffb4f81ab1364f5a953d6bc66b3a14aaa60e8df4dadb8672ad10b254b48674f6429779598db1440838c17ac04762caf77c50c3447ff88a9d0dcfcea3303c707a49b8e63a43869fe4bde4e7d344882a2acb2867801958654b0f2dba664a4e3cece3828363bde746edbcad070b227d65d9452bcf37e72f05a52e833be271415940f3fff2ec40de2d27f647067f1be866006d5ec747c82ce4a10d92fedd5f351fab451de9d3c88442ed42d0013d5b181bb3b0bed093fdea56d364046b3b5a145f474324a816a26046f25b4e7d6a50684829eb8908b0872362c84fb9d857ebda13071de076428b7967529c107e86c0eda0d2c8df7dc7ebb83f571d9d5b225b592fff4d081faf1df25f3c9ed32901aaf6d82d95f57dc0f07067e2feb8bfd26ad6536f70427777e44fa35a72c7feb845c53746f2a07c1dc94900f40742f5c3e999df67c359e05bf6bed84b1ee60a0a5fd76a8b25fffda90adc72c05a55cb2abefba4f5f04c21935a6d69c3b9e3446554026fb90ee949e6c6d841812b492d53b3a41ccc4def139e76e31f64b7fb2f419ff0c69a1fdd153de52b0dd6f8096542d898a1217ecdaa817907eb49825f576e32a300a131e63381a3f8c76505707e153fd80b8f3b56c435cb546472ff2e62761d91650f0e387d9beb04e767b21eaf32da5f4212464f65505981f2b39014f9d08d83c0d235f04b1fcea21499491f94eb6db2b96e36e02e9b86f35449c1417d20f1f6145ca945971badf9afa8da0517ff89064a112b71e97e99f9dafa881bf1a2f583ed6806a9929425cc8387c6f0a55f3be5dc3bee0b871003e8be40b557dd0476000271a2df15ed7a2810209b9aeb4cdd1b5a109564302c16f25e04d1818b5d4f1e5f7b4cf808934703543e9a97ad902d0143e7bf4118b01357dda2c08dfb7fd74676f265d7d5d43d5494cb062a02e27123370272fdd9ce95e6a0e2abe052079dfbf8c9f4e09c556066d31f72a4e9abf1810fad5d8a1649319ec497c37f3c1fb679a085fdfb1dac3eaae2289a053479abb9cdaeec637967eeb2fbf26bf955f5c1ef4c00db9f18f3a5c2fc1c3106b270b68e19cad90cd7fb3ad2ff3af408aecff3a03012cd53f11cae960949c853b6bb40bd55345e866695dff4fae7ebbd45bb3b07cbc4b660130bd95c1e68e18b0579618d040c07091f363ecd4db2bf1db1e987ca74c76438f70574546a55e47d94b9208ea86eae829f918dc9dc7c5fe3905d3f0b2410aefa76f14049c9c22a50e6f8c318fbe0a4ee92e353f3bf59ecc48309467fe59b67c1ed15645b0d08ebc696e1595e80fd286bd7e278979acaff3462e0c4ce86c6f2daee8ed7e26a885947df756d66735a950caedff791b67f3c19dc648e68e1cc6fa6d9cbfdbbb056352ee234d6310bd73a45fa448cc7516bd152885d057c9341319df677faa3bb3c9a6a43be87a8f797ddd1f8e83b727a76c5245e7a52f45c326a61986d36e2d9a51a5515095a2e84b7b6b4191f7583290cee3b65a65b979ba7ddb575d1807adc9befccf874abc51470a93d967fffc47dde12cd0687be68fc3c6ceed69309cde16f640df28b579ed0810b457414e0bea2a352860f06985044ca2ca446d6494056083408fd9fe6eb5cd0368e5eadafab61c301228eb734ef0040736a2d859d89f03ffbc8872660f32a9c3db6b9589157c6d77935bc1243f89c1c6f10c324b57cdb2c5958bce298dc9ee7a0cdefe821bfc5c78e6bae8d39fde6f152a1b96ada11b96b24d8e66ebc7d8d7863f5cee8644be311c9f77b34deb4523429f7b5dd7412383cffa797ea22c1dea42f167e47cc975aeac2b24dad6efbbe815bbbe337bdb5903552be5a16f6994788ea773aab0061a51ef000ac29418b1a7777e95c859f4f09dc7f0c65e2ba304e20c91b7e3da6d8689066ace278e328e842d481074510c7c3ee8f227a43690c73b818631882c014213264ef11f145c9deea94787bb3e7398a01e4959dae4a73e39926b7c6e0591424f172967109bd94ec41fc0d7e19bd2dd36427d7810a5332ee2e10eddc413bd80203480a7c29f869d54629882e7e0da358af7a4e5baf8c13b1e699e81e7c72ccebd95ec2c92f0ebd450afb61849bc291ecf2fb732f20ae1ab02ef1b274d2748df141a7d10fa54a7b567e45e5574f61e128851f718ced61e06fc8620cbe583f31430927d2ae342b928d1d19beda1df2ad3328bbc56ea23dcfff834afd270b764f8f43af1ba84a6f31c84afaabffd163eb8073103d15f0653b8310093a7373bdb7ce6c3448ae53ec1ee082eb9da9f2b557d402aa4653a38e0fac8da7c3c376e883627330dad1beb394056d2858a30ab2dc7921d6d567b0aafcd2c4055701e45aea1642232326de3095b2dbbb79d970f01cba2ab030508f97d0f8694531202c0f78b9f083ce8f70c2294b004736ca3397bc2b7747353081a5c2761852608027388769c102f818a62948a393940dea7276a03e8ad47489f3e41533f97003aab93d093938753d7afcd496b07554e18288a46b37c2b185584e01a207a8a16477d3698a07cebd4fc9498bd3aedb46f60f16b09728bd7be9095407e1a155903120381d87fe74b09599c5adc7aee6da7af9a0ef72aec82be3feb2179b454fc2bd22f49badfaf3e83163758fd4a75676e10fdfba6585ac47311fda8259502a766d2cf49b52566219a89b0f0647253ab98ed8a2c703a5b014502e79af2236c22c7ec1b97e5dc8ca2e45164cd85261458d4c211c560469f4acdfaa47ec8ad90ba2aea84d0b40e97904ff7672b26583dd3ddda71189ad7573d015351cb289ef81581f635853bc4ad99442dfcc94da3c9e4c4a5865cd1cbc3a5ecc5ee33e5d5854053950a8a6d4d9b6023a6a60e9a59ee7b473c613ca87c79952af7828504e3a40affed03fb2dc6a813781732cb3a0cc5f3649abbf9ca140cf5f75760b4f77315a484878724df4af82c3952c533612bf385362f760aaedc4e9dad9da920b914dfc31532fd3ec2fac52e0e2116272f2f12f6ae1225d14b57092d9da8d7d895084b47a60abf05f119fc3af0ef7babc806f4735bed963d3334f7c5cfe6daf853aecdd6703c08dd65a963acdc863bfb38b7d27c0cb17d845d6ec4129ca2c133da69866ca2bea461a4a300709aee49c7c9f3579b092cd505bf4a039a0f572043b03db69c8235087a22c250b1b97a125c9f97091740932396b9c1514a018ada719cfd1c0201f7aeefe54d9258c3862001988b9c7c0a3179c0952db069f66262dd3774bc7db3b5c5855e15724c10172cf540564d75bcf484e0b74c3b9289483b87cbd2d952491bfccb97a2cc9ecc8f63f7fa261dc3d12520b68212de8f3bbe863875b487b6aa61383799368589308f654c3d760ba9ce3796bdd15ace90c90d9f297e0d33153a27985da6ac10cb41a3f982fd508406e2f8da62bbcd1f476320be4562105ec0710008d07a24dabf2dca492a0cbcc3aacc2293ca0758d75d4bf6a79b74d9399e342e9781349d498c5aa6074e1ebc5a5a419fc1f171b483638b4e1d0b59b44e90fb96751b5e3f4d84fe715bf2658968b124eff06b356f212ab592e9787551d7643da839dca996007a3625dd2dd8d433d7cefa754d51cb5d45f7e711373f4f6003ca044a6e47bcccb257dc1a624113ef682471f23557c5fc83e23e50fb703a45b460d2da66a5beea36c02b1fd8c591dd7a168fea8da459735a90fb0362b6464dafbff25cbf91e3db1d3ba7dff4468915ac2b644139dbdbef8ef101dbd986e8259b2443ca8cf542c048a834579fb94d1f2b2bfd595f5b2689f7572ec4dff285d81bd3a2946c74a506549b1cf2bb9b931447cde893a6af4a95858c40fcb24179647bfbbf0a891b4450285ac24ba576a908d7b253435bc576519be014e99257988e1f787c289b4c653db2dff800973f6f6fc0dfcc368e4e625c62c1c0c842359a6fbab04dad343eb1d9c6a5e1317629d6d06a2f2560478d5c778d7b753a3fcda414af84ee9c401fc91c47b275600815fdb7a5d340141c64efa3e05f3241c81734a8010028abf7f4cc624ef75de107e280b105ca887489a87ecf1ff70a9c5d85553b5c44d930e5f626ecd452c555cfb05d7c1e126a4a5a0a63378c7bc176fcb48cc92cde1f41033793252aefc31fec19f71bc824e4444aa2317901296cc5f641381874f92445d9734cb94148ccc22eb98975978ee1cd31415a8f6a751222ef8e3571d672c80be815e343fbd73fc79d06456bab47a2970674843f98450dacb3925842d574d20fd7c5aa51dc476ad666e093b49d6221b536f75f41f91974c634110ab990306f67264649d0a61b899461f4bd663e63fe17cf41f0f5efd8c67cf9662d85f6ed7cebca0a77c2a7edd0eb73c08740ed3fdbdf3395610cbb4476871982c2fafc1d0d498dca9332f5c78c82d073485d69e8bf4bed786867f6daba115b22294788992403c76b032819983e66ae4a63cbb8b6a854c78a4878f959065ee3acca4ef2b658863ab51bd85dfdd6067c7bc822513a23908993b71e798d78ad28c635c43b671887c1336c708bd5106584c33235f7b621db713be060efbb0c387ef6272e2da54c2a64b3f730688077debc0f182872c5d381de1a302e4b44f929de8596694de264565bc9423e158c3f5cfea3bd5b2b84b4d8dac44885f4da5cac8a1a52977f5b9a264b4cae67d38b449c661a84af4123d4ae92b0fb323a8ba914aba43e11df2ebdd87e7aded82381d3ce0ba1b78ae0196b96264ef5499ddc483468e97a954b42fa657d5e3f892db910006cf898d1560b9ab5f8152b947137c20e10720c1648e0e1260ef228e12dfd9a892cd11f26493ca8faa4dca70b1c1b55c5b2ed3286f89dcec31cc78643544e9ff69760e46c882dbb0059ba95386a995e1e73f9a79f7caf949be659a58ccc5da3c05103fe777cf3f064a47174355926159a591783a793c52b2caa2828b787b581e04234b2d05c18b0776643f839da0e5ff8732fb6fe6d72e2c74c32efc21eab4bd4e827df70a96c04ab6f4c7dfd8e2cd7b3c900cdd4d8d181ee465514602fd3e6846d3bc769f706fa648eb892fae4f90d9cf90cf535faeb00b54bf4383ef42d94923ef9b33185b0129c77f060f8715e818d6ee849049abdbd2d5bfc98a8faa73510bd3b480e03eb0433cf41dfa84e777b5b6ac3ae7c5e63fc74b22319f670592b90338533c92af93d5302ed7d8e52843da4342baf070a8521e148c734e8bae1245052ec97baf04fb46bbc5ef44ea5885e2a85369d601d3c838ab75c480392a2757535ba9a23971ef6ef725b1e04d309b32003fcf3bcd0a814e6876dc681f248c77d1f2a06459e909993b5805f258e16fa5a06e19ae4c494379e1cab3b893390715af0fdd638d36d471ac52453f7f0d470b1c86f6d622f10493025470d193372c083853c32d6fa276b40b8fbb76c05d442f14c51f4635cdf259c3a795ba78cdecdf13eed2bae15010edf14e5e825bb2ece3f4df2b0b1021725c525fbf53cf31205ed2bac079a5b2a9224dba3b81bd5f9175df155eb0fc7bd8a8142c7beb3c590ba399e0a649877f4a5319f2afe3ae7a622ce86a5113c2090f9feb9debd45ec3483ab2358fb1e91762427c82c2c0e3b948f029d786fd5c843d0b443cb971c7010480c2e9644335f3aa2bd5ca417584d70e868bcc8ee36d280ac500b12fd699db74478335d0777b164c4ef23e3791985456fe2bc569df88815bb20e62a988c82ebb91357fcc1080fa885c40291307eeb5fa912561dcb8045d03711d2f6877a479b21625339217c96fd8d7c216e6cb2e3e7ba61a6318cf95efe4a1ea0fa9993896ce51ae2b46c5e37ece0b721643833f261fe00650f5ec57761ea05acff22317f1b1439f7fb05daa2fadff63fbb0e8c5a38ae019ccd234ab3687ecad9df5e2d715fc28fc15a7389f199bf61a8be7f3b76a4108ba135988bb73013af7322c691314a760e3fb2018e46149bb8696af5e83ba58902bfbf180387f70061876d679f3bc88aae2c8cf8eef3669a9e8f97a10f28c7a3aad3c4583616fecd9130c369c7d92322237fa9e693aca58ec04059698005e652b4193d6142b4ba047d33a7689e7e993d562fb3d058eb4f06e30865b60259aebb10e1478a439e21ea470962832e947c692ac1b8c7f1ae5b6b27f3ff8cc3f468ebf086e359521652b81f8dc587ba6cb0ccba9c1a39ea1d138ed5bdddc6e0d2e5d45d6dd73d3c3ab4bf72d2c324528aff77fa83d40326f13524a5bda783734243ffe90f18beb2f1184b02c872845bc6f461c495352e6da26f0a72e896832119afa8357c9242e67f6bc92088f9b8b639f0a8ef00ed3db7bb57167f52375cdc61d724e8c398d9b980b4326803c8cff59aac036bd88c12264d0f8df53d9685db13765c98d8fa123bd691f0f7f0324ba0bb8fbbd660f39497073c9cad9a55a17f768fcd2137236a84078bcd36ca074a9b405e41673c4e93e45021c1bb93d6458340a3359fe8d3c0c31747759462b2f101128fc2196e67d4c6b1f75ba0861f92a68b9b2f912cc0fe7b9f7e4abdc030e3b3407a2a745caf85ea560602e3d34c0d49c1bb28da5ac65e473c9d83dbe1960a6a0c18ec1aba47a9cfb5bd690aa52a441a1d520765429e9ba2be8e0c4131db9b18e39653a8375ef468d1d95002d3bd34cdbec33cadafb484ee6366343a38b5635aa915cf00266830687f807fb1febe4ce9edd42cb4960b6798ed82dd08e40e13897381a9b7a2d98fedae2ac94b157c498e5a173a792f26f9005ffeaf7db25b767599b31a058a74d75a188aa8c104ad706d3302749834f87574880abfcf4a1f13d4d167f33e14eeaf773ddb182940a5853f5dbb5cabd794ed02c646575241013f5d3b78188d2bb1b537387fec546784a4072652ef74a35440d1a3313ae2ce3615b248a21bd4f5b895b9790a90aee14395a03abbff33ab7dde0045008cc900e05f3f2623c793b22ca673c34e09891c8dc0b3693bbd794bad3536ef698d29a7521e00e9f92fa86485dfc339229b4e5eb0a04abb3e92157aebcc06a06fcc034d358b658d093b6457f39062d2a9bab83a06f9f37c16ca72c66bc267ac21c88a9b29d85367f6f3432a5fe75b39a1e34f169ff7ffb63fefb51ea6d2eef27218a7fbc959f5d1445996c540ffba6f0066f08211aaddd06e2db31d06cd55080afe8ac5851638b8625fc5dcfb4a045da16069903cb3e3587f5745bc6003e338d1d7eac258b8675c1be8ac4f12f58514b834c5462263641a14d603c64586afc468cdb6e97a881d552e0f3c73a9e6d5e31f79eaf0ab8bb0b09c29c39e5652b913553caba3d14cad1eb3d9fbf1a5e56ebda3784756b096f79e3e485389031dac902e53878fc5bf5480c9894f276f1b75b6d19ed40501c10a909e399aa4249f7b6062bd8a6f564752613a61f3282d35bae090656ed29669644947c41f1adafc15def7b780a423d24d9e692a2bd17c0c1250578f684dd672df781285706851c70b98a7518cd5e6e7b4e9823a52e2e0670f56d73de8a1fd7c04b5f42623d640f9be479afcea8bfe3b952650665eddc8c9211fce55b93bf4375586c96e44ed3fd6c45cbf015e9dd08da3c124eb542ace6aca9cd32ceeab9cb2a6949a8ac3e858b3fa222c5bd050256e627c1e61c752b0db05f17fb182f8149a20f15becc5b03221d10b292645f1fddcab6fe21f91c0b6f27109ea839a1dea23db0f76b4c98b2e26997a143569e1bf00baf5274331010d4bfa5d873a3e1480bcc1108a534d4c8412a4009eff91b9fdf103e6fc878df4a8d76a908576dfd577185344fd9aec3014eeffae7a98301fa6155511dd493dadaedc35b30943b90a017d4678745331e253a226bda47185daccc9bf4c004bd0a5f28eb45c4f286436aa6aad2389ea6246dc4472d2c289015fdb5bd4c5b059f50060502c215b8668da3d5c271b1f550e15933b3764861015c76008f3f1a9e15e0fb4779d3f15bb4933290339b51c1be5162c7fafcd0f686d230a7dcff20421a0bbb17789a72d683ac71362ce46d0536d12c8433757a44941a6f132503ece0d2d1147eb459326d48e5f9e081668a2220e60b8c73b1353e0e98231eb7d82b37bbb6e667f4c9c48cbd35916b1c374000762a8b5b41ff7481583fcfc06719119b8876b5b42d8501da5c2537ed20e29f14a6dbf28083def6f32e8ae85d0e5ca08e2897bacbcc69534dd7a5dc56eb506583055d1210443f33963cdaef573fe0d4b6035935f7fa08aba6830ab25b0d6f81fbdbfe5bcd79d4277c5d3c3fb6788f2b45dc729b7374c1368a6a5b63c09035fa890317912ab93c964711c3835a695288c8110c9858bb3897af098ced569aa72022fb25448254d79e8644e2c5d1fb565ec17d728fd5e4a6855f9a4122441d7ac74c820ba50cc41d42061d2a86bd50682c6c074563725aa8caa23df8c065032daf835100b0b887ebef72655488c0d6b223531cd0462fbbd2eb089d03b2015763c2bc24ae7a7ddf86b4643876c23185e86d45554f195ddb1592e1090d921e1daf069deb5f215b3f46170fc95dcdf24ff213adad6b2641bc84d9306d51c8b500597394ac73876a53398497fd2d20e15174e3bf4964cea57852e54505febef5612413655172e1c0eb18fbad3a21014200932381141fdd976c4aa198628fe87226201fb2b04826a8f84d54c53718351e9c496a98cf6e3e3b5885110e7a22b14b7ee47bb27e2508acb3e924167aa952acfbe6621bd4a183e618c896ae4242a5f2131a89a9a836f50f7f7d60c2c1a23f69fce2e8e7189d79fc24478f8a0a565fa0244b504f9f6300324e086e269b90f8c62ee3b322336ae86e0ea12e6f8e7cf5bc115a984cf8f9db1b4ae6aa14d4232e77cb47df8a83c4829a463ab3397515c17192e3d1dfcdaa4d5a6c19a38c759b2db34cd619711943e55acf4b242d2d058cfe57a9f85a89931aba805087be03cde557f5aa2faf2b747928f24de84085b7bfd90ed387b27cfdea7726036bb7a9e99047132859bf672777348bb453cefca54c9d20b279a360e49b8ed8e42d464a14252e92bb603784f3333d230bfec505ada392a2640e837adecf9a1b6b51629d747c508fb91138047943ea3295bef9e267f9cfd7b44bb917a7cc0b3f8c55a81cd5bf0877368a9c068f27aadb2e8827816952fac61504016df1b59e07ea7a97ac351ebff2d3acc35f3a35f08daff69346b29bfafa9539c83f3e3d53e4ef511b7cf403f55f7eaa7f42692349e86333065069dd837d61654878a8f050579ada6ad0f6f144d5bc9b6e81b2f381be150715b517d301a3f5eb05fa5a2e67d15bd78e7156b052c46199d699eac4f1a50a9e64497677fd3f23d1bf988d5cd7b4a24edd5ae192038cbabd0beda37f3dfcd428e40c8d32c94923f8a725e2836fa40b35df4f1540f792ab0d880a1f7f63dc0157ec8c07d86d3cca417f5815753939a5c76556b6fc966c56cfb9af6e47cc3803bc8fb243ae1410475b2fcca4a7342fbd5cb76d2840685cb4d86536822722b26cede048f111b6e2e02fe368f8dbf43cda36d778feb6f4087045ac5ac91313174c5312882f162793631d91a1fa3ddc1953b8242bedc4f84b819b2d843c1a7c9f87694a708938e13ec6a81beb0d2b06e3d499baf1cf5a053ac14819625d988f3416d5aa8859d00e7a85001549f772de2c5ac8dae501cc78b7b3d6ea680dfe2e50bf52080a47ba9ec195b0640005e2edc4f2c7bcb89b497c612b5073a008d1eb70abd9d911b3e577d009326c5178d118fea8eaec0ac423b83da5d22b29f09ec2d915a556e431325235c7895f17e12fb14a53eb20b5a6cc4cd0d62e49865db85a696b40788820ff1d939f03caee21717123cb178567befa163c906a98d9d878f8aa7f010c82cca9f01bc79486f9ec9a6cf528236d7bdde26e42a7f5a57d8e77091721ba34410ac7ace78dab6b3d54ecf3435e578eb7b08131c5930c3f3b4830eea3e7dcd35df13a15584e74d96c0cb0d092b0d504ba361549805c7799c8aeb11384965ceff9fc2259c244015bcc172655ef9528b024935027e384a3df383faf14a65d47e2c849b0788f560f85bb77a12686da384af9f597ef2c23beabf97f9abc95c0aaf1dd79c40c0577008ee7c45449e808811d7c2d3dba5ee39639c4e799e7b38902c06b4454495d64075c7e309b1b7332bb181ceedd6f6043dabf6a055ef7e1cf35747e08c2fe6521dc5c7373904341359bddcb0ba4e8d3bac0ce60a79753bc1b963e21f17f6825ff97565804fbe6a9479f27356f2b5a5cf9f2683f12891b2b3b841fd6e5163a9f7eda105625ae23d0f26dfaf8699f9f6cef66c0e9d6aa78a841e85397196f61f3da9b396c83a6f91c2dbc53c7729b18c93f218d9a5bde5eab27978b74a6d459faf25ed423fe42c010bd9ef88e1d50c68ca5684b1309d242ebab9f67bb2adb188e6262aea316d6581ebf0acf79c89cf42fd34f4a1db0c8b28c48538492f89f49b5595e66b319eb025c526ecbbf00b0c0894978b5d4fc644ae309231e940ebfa4022954e8f8c3908f2f0f7fc4bd1ea4eaa3b82a28ab730a5ad4f4dbac538f32b6a0b16792d80d56f2d9e23a65b6ad7f1a887fd70626cdc4ba265dc7445f5daf8627603aa5843a33bb571594926ea541d0df608405eae457f2d4a4624da2e3f9c14839ddff76c02b83bb100e6db65e5a9a93c315bc67e003158123a40c7e3d9aa8ad90b8f4995852e11c6e7d198c12f397be301ae2f43268dcdc5eb7cdac5ac97e614484d094eee2ec07b3599e36bd890f3a8862b89921aaa8575f9ef267f8434f7c159a9cda52846eeb0bae9f852417c6a0daf6158125a26ba8ecb7c52cde60271774b372f6655ec4dcf7a72cdac275c1d54b511deb34af06d08e5c208ddbe48a308d4f20604a07a3a17396ed849b48fad777fd123d36f7ba8beb0397ce52599ffbf8adc30ffed3cc960c8012e256868415fe1553fe48f3f040dfc439567f784b46049b2229db6987e39e4409983b79320c6a3115f30ac1f23afe560013957464b00afe408e9895806ddacd1ba33f47ace46446d03e777d0820e454661179e84e545f073f13c1ad224725946d7014dc9848f88f54f505210bbffcbab45b5b262eceb406b75713d41d4365067136a5a6e2fc90efd2126915b671967fdf9063daa694d79519a12bb21ede009cfa0c60576881cecb9fe9626fceabecfd1d79218bcc982b06d91b751cf25b1a1ec81fc784df59d741b398d753d6e966eaf5a2b49ba4ad7dc5114b6e521f7bdf5bc457ffffbb3de59711e22ede2ead741b509490ca95e4d7fdc15fc15d9810edecfe939e60c19beedd3dd835cbf8f853bef245393834107d7a3ff4c8a9980789a7508d02beff4fcb984758ebbd8a3b06426b64ab11a5117a87ffc5eedc758418d34b906e0b27703d0cb42a701882c68d8a69ebe866c1176809df67c554874e99e4fe1d4431d345be5cf8e26931237c5ca072a1a17767ac82072617c47d9aab1a2d43e20878eead6d145ac558f54dff6544176444c8ce92e168d5f9731174b581195c51b37ab006888902fd0441c12383a9fc79f55daadd41a618f923c048c576ae47e88148d1295c5e76e34906e5857d05ad256f17d949d0513ef2a9f064281e63c9288a6e67690065d76ea4074354c47b6318cc0db170e25968b61b5a42885d826070f50d90c040bfda79ef02e123e3c63d5a35227da02bd253af81ede613cb3ca4851517b86ba2e3d055ec2b3a89656907eeaf29dd2061908142018a0b32296edf23115b18a2df5613686a5ffdc37df40f4f943a04b749af16e9fd126edaec9c4dab12ae3be308c68f88dea64771eb0fed2a10c272bb23ea27b6322be8b661f54e6ecbae5d9d6594fab46d2a09e371a51baeb536193edc0d21ccf6c6d5dd301038446b757f9d4858dbfa37bed59ce1ce14742571d38fe1a73e9d3a56a4e8b8ab4dedeee5cb1bc634df1bd233be2f77de3fe90f652465e13d3bcb244dec82d66c74a9eb8335158d34e26900970beeeaade115b4d5d73c2c8dff1fa4b1e0381dfb16c15ccb25285180c4830b8b1da9c56d83585ba06d6ef598603ac8631a585902854b3dc316eb3c798bc8ec5a76d23ec4536fed624e9b7a41eacc613bc7fb08f8ae5fb0d65bef849446c0e3648f023243c8eb9bc50a1eed96a3aed799616872428371f8a5269725396dbc83505b11a3d26fb35dd59d58e3f1a920ab3c57fd817eaf5e62fe36c1a72f9af27f0a744c41e48b19c9a04eb71da2dc6e8f3b1aeae2c0474bc8112c769f3c4c130b269fdc875b8e4ab10032f7f024ffa87d26d92896296de28a4398bf4ef34110a6ff5190efe05e0dfd0eeb4729b34e620d14c81e4d5e4314527fbaa0f6199a9ff20eede9cd557878925c9171bd8c3876a3e4f38f64c9e8c338da34c836fb75a82f102e8ee09d0341f4df0725b2b705a9bb2ab7fb827532bd522f4b9f50b98ec011446c67578b7d3b59f18d23745f2f3c7a362eb50d05f9f361c1eb2735dd39e13005f4c489ebf58d7632d78a81de4a4af476fd1dba6498f6ea2da6ccf8bae11fd9b36dc099df269dc97fd65dd0432d9469185df0f172e58317cfd47abaf892cadac2f5d2a7f28eb337bb9179148ce1b8984a3fa7c3ed3d923adee5127e920ce3a1df386a9ff1c5985be9d78bf372a315ab542f0e1b042250495ef16e5a3bb3e2d4f39300b842ffa92be6cf8dd08ba076ee0aadfb5af46c7e556bb896b202fa421b4f170090bea127628ca6803e239665222f5bd9c92947a9071102143efab4c1dbda59dfca0fec6d937e194b5514880f641fc34eeaed6b42ba9438b16def4f20869afe6bfeee5b376ec45044fd499d4f34d0a1ca0c18e68ee71b7ae9688c0f427bd2f81b3811ba4b8d65687fbd59970160ee0fe284efea036405d484e9b3fce088315dcb008737e22544e854f3fa4f5668b4492beec3cce04f959614ded6d314c4464a9516c4c83648d6c1c39e26de2c943a516cf2987398be539511f12a2a83ba186bf6528d3f3a3f14df1d06b783238086aa0a57ea0d28f9b1126efd64adeb4bb25a846b455a7da3b1779ad03b4c75f602ecf60bc730bcdbd65132afec1de490acc654ad98a8d47cb954ea802d23eb7a4509762d1ffaac42711be34eac6061fd55b9894889a0bf029711fc73aea00eb2466c6b3731c232fa65c2833a15e52419716ccff7f2711bd8e9e3a6587965280ffe34eafbf769e28b6ffcd0343132a41546fc2c44357b4c601d3844a304b3e01a9abc08bc935126e5fc00a9739517b2776aa0a38a77d25a24b471028fe64696ee64b4760084f8c5df23f43d7f03cc7c0c674c83e70108c86f73adc56ecb14112192633acdae325c46dca7f5cc96d728c700613c0c44ebf9ec3947e57b41274e3b6f0eef349b429e5879874ab02070e66a5435b68a414d514b2ca4e70d82ab0074222efd44d0abb375b9b778d59814754615e09a395e8d320dd1389ed3363b96fec6c8f437ce942c2a694a1df2c0934eb248117e3d15675c4ade6c4cf6d14ff2208724c106f5a0b99dd3338aee5b1d284b93234c57eed8a43c2c6cf528a7413e548aee042bdcb20f21208b61857c8fc61b894e4e18a3b684dbdbc0636b9bc442a9eebc0bdc7e240243b06a0c7a1813b9db49be42a1176623962be0e8dcbec551afbbd158b0fc0c6f7cab2b8e4f0bf5fa8d6244431a7b8a9d1e58055b268ac2d5755c3bed7764031b87b44cd6492d6bfbf5bdce57187fb659536a036fee66638b6aecdda75cc74d0f7f150319a4ad8184cf0487eb69484471278f10dbb9b15458f79e03ce08ca5e3a208b5747850c492abc05ca1a132404db2e9d00d3515aefb39cdd53391ddba74cb46152ce79c7a415a9be4bb29e7f438a9913d1b631cd743dc6ae772a733734f9a4f31147d355f1a0656afb36dd919d6d8caafb0087e092e73624f3c2e27ef23471c241580e5326c5a85deeab7c1703710025d2351dfd7fe384aade99085e7dd458a8d5672a5c834f7f6c8af69064d4f36600605670916c3a66327bddc1112b04ca19acca18fd07a66a366c3fde6617839a4ac7a5c22ab1498a82c9e6ce82e7c065a6eeac51b6c78c27bc1f81dd587dbb3fe28e9fd49aff9e29cef1f82e01ad8c67c791b50a6a29f64fb5a48d631156127d33b3ad63aff8a5d05b047ea74d25050f8b65ae088421956ff50845fbaf6cd3f9322ab44514a5aa9a26d584acb552033dc0b78de89631b1e93fc60c698901b0e8a834c33001173209a357314a0ea8ac5c0871778cab4842166adbe96d263967ac00223158e137fa8a95047565f00473f4803b194b708342189e3d2f2eed808a21f8bee6c77a155748108f383cf28c5004e925fe39b8cc8e936a604f8d615f96ed5196ade870b8266af8177f4e9b8039df11bf290971358051c4d8698a25769852b50fde06597a3809720df0067c4e552c2257d02788fa2570cf8e3faa11f4463515fee5f1a6225c8bd908aae4513ce22becd0fa162700252a733b753046833ee94ceb1ee541eeba51c5feb7f8629919fbf990ffc9b980387ef8d67ab854bedaf605423d0e08071ce3f75d4b0c6b924f77270d1ef8253617754005d324eb1400a290a27a7042517fe7e8fb4ddc8f54ffa5ca7b2a4e15eea32c7769ca00aadd7f8e4d17f7c1547922d08b9731ee806ffec33bfadbba076eacbc85f899d4acba5f8bc3cbb529ea59404c4740dcb6f99912d0e957a2099d408d13d7183831453ef889e022f973020d2ed9c3d5dda59671dd58d6aa25659e94c47b306098b4cfe707a2592d367727c047d478f7817bc082c175b6ca71e8633cb7a822b8f24f03dfffb92af7cdaebc1c8e96e5f9b9de69f94d1e6ea459fafe28e376c02eb88401ab36dd9d4da28fd04bf31eda2da4ee8f7d93bc62994a2850e846e79156fd40e3762f38d7e03fe43b282128c074f6c7433dc0f8d2523d817866d5a1c2a6291ac37c1ec6b2684c0f0c2bc33f78022f296d1de84cdc1e415a31e3128eb30fd4c85d5a01e1abfaf0a8db912db9bd2340001386c9477cb5a0a464986c45dff1c8df31dd5f1ca351cf146d6f4e47da22f6380b16b73fe23200a5bd6705f2184a38da50f2acce953d88ca37f6794f5e9ad03e564469007ebc58c582e48420fc3cd46b58a47476855ae0e8ec1db1c3a6d6f9158bbde7737989a14bcaf5a0dee0bf45afb6c9461d6472f0c1f9852d0e73ae5db9175046b90aaf2f504ec4e48b8d03a99ffb4020d07e8c16aa8b89de1a1a50e34c9927004de55fe969c4393be9b1790077af20b8bd05810ee1e0c7d42ae6baebc3195dddd58320e9ffbc1b731d0d08a0f50975399626c7e8673a1730d60c05b55b860c40a5513be4abe7b687187e1300237766677afd00065efdfccb6db3e7d5b964fd135d96cf374fbb9d043d844d921caefec5dece881ebb87508f1acc2001699ad40ad771a2b474825caf5538ce8be5303c51528a812ee12b8ccc77204019225ef05b21f466e7fb4983c1d64e2b9fc8db4d309e5add6a2bf8d409bb46afa0568ec52efc84cfae207c8519679d37ca858249cf14283d288bb130b1d40f1ce2fe0ba6b500032b7601a405e946a1913d5a9d7c45531107ffd7b4f17a03c7f6d96e1bd05b6ff27deed4d33a5077733d0496bb37100d4f2264e3f662e2f0beac9a31ddacb8ea6bf3fbd5de5b6cd9f3028d46a2bc11b17b00c4ddc135fc99a3677e22b273ffc1b00aafa51dc0a84c2aa6eedbf166a6c020076272ede13cde0f6fab604d10be97878bf3a9986fb275e4cfeb203ee0096a9dec83cc1d8865de58352f7b4acbd302d1f178eb4c2f6d788fc3ed009b6ed1ad63b905309791a6a8276615dcaffe9353d457f20f5ace433f944eb99d4551bc6a60af1cbc79f5796ae6a3d0e834f0c29be9331bbe7822c1bd183137d75d5459e6c8c0f24900a41aac61e57a9829e8256134f4927e0014cc990e3ab34925368efdacdb6b9ff27fe6e539bab93d72691bbcc6cdcad06c1b8e1018110b62a58c7c103a57b169c9bc5585f002b7936ea14d908b5a94b2e4f3e088c1ca99b7f6ba7197c07db3d1e26d7b3bcaf122ac9447e787b0609bfdf7c66799a88048a34d95b54cbd59eeee329491766fbdd4804cf2b7f5550a35ab620455ea3978d4b4bc0dc4284950eb74667dc203c1c1757568825a95dfc1213a270e707640967a5b08d74c15a00a8380155831aaf4b6b582b630ca24f5ed9eb01e1a9d0ed1fded19699e4d0690264f40c2451a482f861d5f0ffcd290fa9edb8fa8dd0a39c42c12d6babd6f576f3885c37ba46d2dbea93ee82e401c9fbd5db28da7b77eeced6e52981f9aa8b815d0f5b043b8ec6245c50727e213180e36f3c57a74294a891acf3cca5aa146c9281c170864172c25a9873f00847fa511e91d0a34ee57b84e2bf065f710e377e8ec3a1dbdc022ab97c9cdcf26070fab4fde6cbe7dd253b899a895c3d3573341dbff2d4f68015f0ebc3dfb9fe35a6a2df9d7b6a3f4938637c99366fdeac58fba53f2c4f7479a576006ccce9e1ee3752a34589acf85766e97cf03c00a799031f0baf71d261a4944b401ec62b5452d7bc8856c6eed555e2ee4908abe899007cf80a6b82034a6ec686aabfb019290237fbd2634c0d59a8c7a719860af6714572c832a6e17311e088a525c00bd4e8ed5cc0f5b794126741c3098d7254b349dd322146df5cbc4f194774cb1e744debd9ae14a050a69d729a69b25029301e2215087bcab9fa9e2c95a38d1b5c4350dae49322bacd84fa94c8f3649d258424e314d993f704e3d6c4825809c1e0979f1a58682cca4d89558dd83a1c63ca0ce88abbb5dbcf07454135be726e0d2e5603bf59090352fa5e957f4191a18f0a53543ac5a43f0b19999b3a09d73920dfe919bf4bea1b504cd5ae100bea3a3938e01ffe483c86429cc100dd6eab4324e604ceb74c51e8e12133ba5913ce8c3b13984bc709a636821de11a83386f8a9f4e7e053707186fd397f2475c335e9d2c910d25c613646b3003462d876740288163e05007af7badf753ab52ad066a2b9ce9a2ea81aecb88fea81f83ad0bc03082cd99cf109e6d6bb042704ad6a0d51fb70b3bf033a2bccf60c787f845230624987e95016654fc6b7ef229d03f14c10857c48aa3d3b19a552333e713f1659bef9f4ba23803e3827e73aacc62d3043cbb31d632d8fa91920efb0f739b3dd0e5db3911fdc9fbc4afcdb6c983471a4f15a77f52386c2951c493ddd5a59f21258a83713e6b2e3bb6f8aca70a6d07aaaf8037bc809c1e4b878772441e4247ad62080db7c6f3347fa195aae936ed8e1d2d0f710bfa6b0df3def34e0e90b14bf246c8892fb00541c485765877d2b45c9ed3c3cdff5655aa2ec3aac2f726a9b6b32ba36df357349b7faa939eaeed5c5dfc78627e4eb35aa14e952b610d1dcdacf8af17ec755fd9e1e6e7995ad22875b75c3a45272cce782fe0ca45892b409217b112c7079714d96cb0846f2876d19e70464bddec5e4ed8fca4e604591f6195e9dff2c254b5cba5311072f7c2904ee7e3714e4f75729918d2ee21d7e8e630d7125ec09aea5aadb60f1b02fd1718c88bacaf4c5f67a9df39a7ad56c060145546eba29c9f21c9ee700cb92d6559f13504928f3c2dda3dccd8822c156b04b18aecf7b2d2eaa5657236baf307a0a12c98136e749dd506c1e0c32cdaca08a64f0329cb79da734fcf1360bf579018841fbac6eeb523e351713b6679f74011b43f5d0901d915df5f21806fdc89b00a958f903da1ee1a690867aee8de4a43e6a3152cb9c8d3610a1235b2ddbaa9f2981d712ac87599ed3f8ea754336899484c9faa177385be7067c2a73b17736440c80e9415c374c6ffc2a75a6ca98a964abd47f6e5277502e04dee3c36f16da779a27309a78b1d5ba12486aeccb9bc0b2f1b83706f0d0be77518f3b7a6955079bccdcc6818406d1e345e11340a520f00a45ae48866d56ccc1a84c4352b00058992181059a6a7c553209cdf6eb7687dbb210eba3594b24d4d63d96f67e22cd7f1620b8619f4f8ddf429d71801545a31ebaf784523d01246621b1d96babfec07cfb89f212e7dc7b7afa45999559f3a810f3fb678e46c2542c663b10700c0b3b878212c7fcc7d69ab4615f0ced6714ff1237ef9c0e0be58f17db50d9c9d7ca5a4f28679edf266543cfbc640eb68e501f11881be88894a045608e91c3f2bcb0da0a8bc8954dd51c9f013b92ea752864c10643fd13f928b4929b43cfb9abaa0dd946f8b0c80b204480d701d2bdb2d64c3b9b65fbd7cfa963437ff9e96f612892c99c04d3aa6a34097e87bf5a3f3b58995941c8d0b7fb1cabf4f652ec30ced9b4037cdea90fd9cc787c46bed2690c59b7524a194e8fc416cdcd8d01ee0f31ec4d97e8c4db25def0ed25d216ece24d3b524302193c50f819c77ee9f29780b6486f852bcd2e4df55c2346fae048a5fd45b5ef968be1fc93874a1cbe1df9385c20f640ab258bac0d34246cd90e365bdb898b83659b98dcb324b33edac307cf79bf66a244fb4cc23982738588a70fdd58561723c10e3066e1726975607937f49ed41c4d4957bdea924a060af2c919988fb08f1c5812dcaf89392aa5fa01a89e0a0b273016461c6d7d5d1bceb65147b6823fb1fb231a804d314f9b461146c94f6987966ec2d6ae18d3de4c37cafd73ce43db8f9df06d38b8796c5de43e8fb21258cc84e7bb247e7544c717fa1adb7bcdcd7f8cb617cdc0050f857c333679a6d1e8f885fc3f79f0e5a9ef6a77e4d0e06e24e040ecbdfacbada5d4ad902a07d2b7d5b96b74ec438d9862e6408b90ea4f2b4de7a948a9413243c24a174fd15cc377b22f6c9353873b26284ad1eac1a9a09ce7ad175e47c21f82ca655a3e5282d992fa808208d1e8809244a5c733b03ce63dffddc48b17143922d02ef4f9e350f14f2af85a01f87649b85b62cdf71ea7304bb5ebe3041c1b80dc2a0093000530fbe7a80a1644c25b1407ad3d4a765053f43478c08f812dec54707a1715ff9b759a797d17bcbb147ed4dc0af06bcaecf25b22b76d6d08b8ce439790f81880dd1fa74ef5edbfce2ef8a8b0ae8a4cec6c33ec5be04e177dc93ad3d919178fe170e86141356e60b824d806eb4b659fa38e988e97aab3394cd5a01095d0ae2e5839098ac6f9091ca55217c5a1491156bb615ba5f967414ad465859f14641621bcf6ed20e12cd7fcfed6b7f7fef566138af51e2f9f72bdb8ddd6c148976c739ef5cbed7d1600a877f8f31f8a5ae0ad8319d68095102b59115fa6a169a24882860b3ef5994053cf3bf50979b578790093ab6543fe93bfa0ad4ee9085ac379b5087ef155ea93c8140bf792ce062a69d32b91e10a40614a2043b5c95a9bdb57f34de727f24617b800d410af0b885b963c068df03d31fc8e7bc01063a21a9286d9a92c1bc0540521b22a8387ee04b4226b2bcafbefeeb8892e3e0b14011ab7578acd2311b7405dcecca207cbd3b3754cef05ba796e3df47b77be1ff8e3fcd4900325010e2438464393605dded202d61cfdea7fec9f25dc615c51ec1398c80955631037d01eeb530d31e8858c78d22d28d1459412b24b752b3e38afa542eafbe6259fbc21f62330fe22a5cac9d5a9c1c2c20fb679edb15d2da71e07dfb802b937215ff025c4bfd9022d463cf722722fba725ce11dac4096fcd7f33b594543bcdc64517f6920a8569fa5b6086593da948893045f2b751e42f5b3ac244d19aacd21840f66ae135f8aeeeb3610ec80d1e4b096a1bd31809aed5edca69f46a6dd1a1457e2214647d5b055903e058343a13de25df8ed0f5a28c06f04026f01760043bb7b65596c120ac7f760202c142389d84d731a1ad85f170f920927141e3637625851883f8058f4f68d7d6da8171f993ba2a7cc9e4ca0e7b3c474afa46f89d4bb6085f9f75d44c111f31b653a263d49041e923637bb9d4652f5b0b15b70a314c480b8ef74d6f2dea01e6e8c1dd30c989920cef4b5346eec2611ccd01e831cd5881cf915041c601387463c41af1419910c9adceb37c655cc055d1457c6121ab60e89ff5a6447e70519ebd0722d79d1daa21e362073a4d92548701adc822f35dffe04492a2a532550db0b332dd172c32fbcd73d068d521d2a5f10767bdf6910b5dd39a13ab6a7a00fdcc34a424f51ae742b9780682e7c7ad5e4a8a1065f40fbdb8b44176e3f9b2d90187d81bfa3013b7ef8b1d2f77b633ec4410006b727333d5199761ae8247854fa2db0524e815fc8b2fd3ffd8d8371731d1f71b982e3c147fc6dd6f653ca0232e342b1e236367915ed8cf90f8f6346167c42ffd2558b4a5abf6f3810316a9dc5c3de18432b468178cb72a8d30aec2ec860f5635b5472daf3b51e0c62245ca8ed903515a37d596ca0e1f183cea12038c59d3539d089e8c74c2cf6ec110ccf2a88b7b682c2d894d2c6e222a1a01bd8849003a99b89f36186f7213da3ce0ab4ba991b7a08b99fa68d8398859ea510e6f2e80e6c4ee082c480fbd1a29dc5ba6f34238c4c0f3910d7badf21c3682b2386a4a810661c886a6f6ff7c9fecb783fbf7ecdabb45efdbf0bf1a714ecca989d8b4f92e4437341d174d3f7250888f7cdd28355eed94011e8b34a68ea456dd062ab53eb0da5e358aafca1438c220b59aadc98370377bf174ba7a56d4620a2f470b056f7f6a65101ef3b1622af863380d624ba096c6032580c3a724502a5d3a4311d73da2904ecfa93d1dc216e6d8c3fcb6d97c498455d8b85a50ea851a6046acf720fee65bf9ee2c3df10eee085113c98397ff7d053f9cf9625f8a59d8570faed1e2eb0fef98dd7494e875b76f6cbddd32d1bad13772ea3abcb01c02e3d6de5cbe89bdfe604079fcbd4377623c0c5179a83f5325713e924e0ec89ac364c8c10a26db7918a6ff526954e41ee67ebfed8394e19de7fdfc8f8865fafb78399a6e9906c646736e879c52c0da8ac7fa629905d0b146a2e01ce3e1f5bfc386bf2badab37b91d308412f80fd075901f53e48d0642ebb2cc2373cdbd60b21325e8f6ce5a9f23bb52729fab42a3624924096c4f76f7b70b18bfe5a70a6a2115ddf436e0c38b975459e5abf7eecc1afb28dbcccf7b72c983cc3023821007b59fd5040487f6bec89786af78fa721a0bae618acd7b6d44f7fc01cbd4559e44484e00abb434ad98ccd0ec55d56a511d3084ecff7128d40692faee86328f8267e46551d2fb303e6f58724deba67e1b1382108d423ecb292cb5bfad681e4242e39c5caf31456406a3cf9b82c3936cb27c168f3f3a3422ff549fe76a92702b35c9f1d35e33652e4f8c47236311f544f86a86835825e3f7723133a6e757e091b085e4fdc4cfaf646b7d1a1087a427ab9c54e11095fbe19fbe12b29e7ae7ebdf95b527f7a85319195414b6a6f4630be40053a0d031faaf6faa1d5bac016108c6a210c8fe401d31a6c4497ac6b255a3d38dc6f1e4405e3003ff14b6c8477eb26ee382dbadc03fee9c59b51b1f9264eeae0a30d209c3137938ce2c5058119089d21ce168cecf8fdbdea4f02e0fa84af8809fad4c85d6c26478736ee95a4f4f10a4237cbdaa6214ba9ecaa17e6fb35234d439e8a9eee04aec573a4f4267426fd33b66151f88328b7c63f0fea61110b062d9daed2b7dbc466d5c40f96b41c737fea4703490674f7267ce431de3abd8e4b7ea9ebf66be2f9f724822b48e906e264b03c7aec3d2adaf7512c8d8c1e058ed07c7ce59a1dc94d6aa75c6ab2bf3dd22a46bb40dd667ee092301b64238b46bd11f7af0dcb722d39115987b59d1a7c3eec0cafb42ce9f5b3dc8c37c7fbded084023afa2e2a52e3886a69fa39a7a934776671b0432a37c9c6d08ea6239705b7f2879af888283b1c2fffe348c9d1b0b82ea970c19632d74f4c9a0760459fdc01833bf394a430156fed53ada339f7e39c4db52c56dde748a8f5aa3d594433c24722fc656ad29b3069ec80cc8431e2d718fe93c1fd63ab8876c1f63b9fbf7fb17930b0fb07da9ea2f376ca3257d9d93789d74d3ef9b862fdf1a7ee4806e5cf205eeef19571a1b1a4663f2a12ae6a1f986307b257467d72da77ee3119a3c20327b1b09296baa9c1e075c28cdd0a28aba029acbb663339a85dcebab45a2fce5408a9375fadd6869bd2301879c26b7f7c4b91dca0824c8ce077b56e9735ec65af0f25e7bcd365e64e8569041326fe746d1b9dad9af62fdd2d096912f7319955471c2de0166f54f4bfc07c2d5178eb1af13b77dee60240ab2f7fb85087bbcee5f2bf042d587eb7cf88e44762336c352b48e439fd1feccf291bdb656716fbe16df014db238628fcd0cfa9dbf3b2fa15e5f30df7bdf912b3ab62be3fbc9d0b06a49635b2b780b37b01aff20223cd6a37e3d14784e85ad5665b4598f13d6a8913e5514f92d5c30e86b7441a348048ab638647c25e936613fbbe5473f3a67479456c731b2bcfd6b5ce0f6fe9e6526924e191ed6067231709880a136d2ed2c17b208becbfb0225b83e960efb2857796892ed376de8f1918a9562e2d95624fa4a9cab4919a91cc08eae3e0fba2922ac3a601f956fda1466c76e946d8a49be1b7e576feb47d778a78296e8895b67bf24ce0fba02b7ae881ce74cb31f557611b704c70d3e1ffc3038c2cc0c2af7513cbd73a1c9742e0cbff769e46be7ec48f599197ca1d1db4caaf4cdda10f531eca52b31d6cd7e267587bb0da5c6458f9fff29f48c32b74c36ff9a3084f0145c569f56729eccae78b8429615197c5f0480e1c1034221cbc86b0a73c246e63d3bb555686b63ee7a2c03df770ef08f4d0fe1530b55299db5c46911ce20b3eff3f56bae0a12b646c7a2c612b457c52e96a081d78eb7bcc14a8d99b46c2f3848226ebce4548dca772af890b62754c275aeeafe969a547014a470560e7fc83ee8aa7ecd7bbde4ab9f36f100bb24f072f5316e1499266bc245a0fdb4ccd0298719ea7e5a4e8e42e61478ac457783d7eea1bb52870dbf05f933777cfe4162533d8e3a73672b8d037d31ff68fef4ac883829ba6cc9ddc4eeb8d81fb3c8b6f3d6dfdc253b12789fd8a5a0f44e0cdd5f99a2511fde56e0206c13cc814a0d18cad2c0ec015ef743b8aed3b4663f5fbf8cfbf351c64e543950b7d1d43db242f46d3dadf9c82fd633042e83413b8d2d71bf4a3d369573cc8a66c440b2372b9768301977901e6f6c99fe09100c7676c95a28ea50a8d1525394a9970699e283ce5e8c2bfa96b31737e4ab9b7c178a3451ae94457c6a5ec1891c10d2e620b4d0e474bff426f88ea7055d89ca2041084263d56d138600ab8ee255b3c05562283a784bd5a775891a6c900705c67e9ee4ac1574c1aaa7bd18ed603736f4d4bf15a55b28b9d5674a564f9b5ccff3410d0c7acefe6cb877a8f9730c28fec4b9b2c302ffd32eedfe6ba91880ce38ecd4a22d954826c0526f2b2d67083f14bb04917769c5d50d1d1176e03d1adb4d2ad3beadac6892705cc7f94559810c2c3fbfda03b2d591a971ff718a1654be70593b8b213d09177bb0f836f1e3b8752d5497a7197135ab264217bbaaecd959bd11a01089fe98770c0f1a14e1aec64d1fcc13c297ceb7bca397e6815262243ad60f0447b84f6ec5847a824cb1280f91039d77535d5840dd276a735adc385f18234e64d230d0343d16f6a5bcaff1dd2a56236530af66ab0700ccae90cfcffc6f03e675e013c8fa1994a6e5ab1eb7cc5f82dde8ae3d42230552b8a05b6519416ce2fc09aa9c12291e3884947dc08d1067b88a5851ab2092384f462ab21696a0f090831325d9fe2a23c69e4c2a4f0bd7e08f70a049b1108d5838717e3e7c01eee0785487432ff724da3ae8cfa091f26b29f23dcecd2410e6f4ebe4ff2d4e387d021762a59939d9517ed28224022c0eba83fbf03839215887749543ed8d05f052f7dee36b6ed9a11e4712096d8e6efcc5924e691cfbd50db66b5fb8d46fc44eef22f46b47db1aeda6659fbe609ca5d7b9d121df0cba906d263154cd7d43475334b0086cefdc2c8d8bce2cb0ab27d180995960a5453c9f9155b59a44a0cb1df4a7626d027cd1f9499416e7ec7763aa368a0601fe4b214813a6ed7c4b96fbc66fa3a5f4f13ddfe534b91070ab39a5d2ad812e24188a18d5015f6e9e5c6348bd081434dfafc1e622c1ae828c9ec446ac6ff2efdc2f05d0a3c4b9200ddcebcad5256c0e7a42b004e88e59f78b68586f4d93d43a49d6bff4e5b9bcae18b46ec65b5eb364e8757b1ed23f5a4b9f8c3e047e521f8960838ab010a087f190c1dd4c8dddd252d236a3d4f2dff9ee97689f6c66133f0dc7c5b88d2cebd9422de49cf20bd6f5a857de9179a6cd08236162deb5724a9fff7da7d93af2dcc6e5591c7071572a63a101bf1d7193c9237a4f05b9a9a52b1077b42ed7c8220bae47ddfbc146eb693175090379d54b0cf1f4b53bd19e849c9341707e49d5610916a128a4a4b225afa1cf15ebf78b38b9932ddbe1873b647a810da95ac8f6d833d3f1f9c4c53aa54bd57a4b34ce6b272648e0ed3ec042e323b4a51adb99df552f3dd68bad7dc8019599e85bb27eab9ae1bd9e578d90d4b6ad2488af5e2a3fc88f7b586863f628da5f815a8d79cb88377f233f47f0bc3eaa3e8a1803f91867d7e50ddc8128630cbce77814c18d19d467ea5dd7a81e8f866ff9555322b15f931fcfbaa95b5c4f89ee1d8b95d93f518ebed2a1f86d72725a2d7df10b3248be9105af0441e16c4991d172f1b730f07cd370ddcb3185b758cb8649b2c70d22f7ea8ee5e6ee7fbae9ee7ed34e6852fb0f6814058db6301c3242a131951eab052b1cf0dff15e5ce511cadc8af9e58d5244565d87603b61f522160b0f966e9df7e15af2d1cc43fbd8343e119dd44e314cb0d00e578ddfc705fdee256c310d1f6ada6d5129e2f908cc3e47f1a23f67d2ae12561fb136559249a4018870db802761a5f8fde975b6e3030506facbf9ef9ac876fea0d40bd3ae885578cc94afd576084642fb9a1e401b8b79820dfa5f95cb2e443c6faa77254041bb141fea56f7ddee5d169a906e21a20af366c1ca84fb0513c49b2ce061e84e5d809ae664b9a465ef2f516e1c0b14e42c6236e03cf4359a05578740cb4a2d00599502dab04b544b000c067f2369bf18dbc96f21aa284a5fa4f09ce1a999e69438b6debb7093a477f0e3d08c9fda2616b36e3b81e1fed27954e56a69bf1c1595f5871bd58cf483961252e530c148165c06baa450a80a485fc40c4df3c6996191fb70e29fe12e893a5ca523402a896ffab0cd79c3edeabad65a531e457cb86b0a23071b5386938a0f78261f4efaf0e26c746683d066011777ab6558568d46c665e4e70ecee9e37c8696fef6f8e9b50585c1d8c42881753ca80bf96cfc8e3306f85de727e054e524e6bb687b3cc1c12f71223860eaf104cc1375a17fade20de110bd71979e4caa0539571e9bce5f956a5973751f7fac149a925bea1b7cf0d5e029c2f403fca2b2385c257a39193bff3d6810c737f2b2c6b4ea03dd50ab7b3817b217660fe0085e0b302755d7780cc6b4980e18a0f115566ca2198b957cf629f0e7312d72de9d9aa846a2ce7599d155f9386c0a5b1bd0317a403f50aa0cdfad4e3a6f8028e22c83a7e4c067da319efa294af0dc5c55d00de288ddf4a9480936e3a47311868e34d1386ef1b28d789ab6eea99b2cd1fc2acac6aff60d83a77c09e4c8f6058d7012761d1932f79237b143567238e88e590085630879b4ffe8a84d6ce8288507794d957043f9235646d98ec5e6ed3ddf10d93f7b7a754eb6c870ff73eff7b11849cc7103fe158754818410105ba6744ca67cda4569d9ec02bbba77b359e0c3618a0ef5f45736bcb43deb5b3fb1a2116694ec1e8df8d45c9944d963a394a9b8d675c6960085c66b3759b506cd7ea81a2787c90e8d9e128a7829cd6712f4415e160719f0d4832544bad4882a72aa11fa61cd53f17726eca5506a49aa227ca387d9b1719bde561c709c305d1d715a346c719c6caab53d83ab6efa486ce840f887d179bbb4a12ce1b9114dd2495dce9e2637224d06df61407b2a1cd2d6c46b2c8e0cb57d06c2bbd6eca59a157bc30e28dc32df463c75fe068706019a9222f4fca37dbdd80e7492eab904c0787912886085209b0f61f6e287d0b019f225dbc3ff67160a8bff922493c89db5cd30eb99f241ea6b2fb4b93cec04ae364058ef2d4db11e64d4779d2dec6cdc75abc8c0fbe7b3029f57984889e6f8e135d88e5b04139ab816c0240b0350476f4c2c6e9d47286641b1fc68d49bdbb60b331dcbecd1bcfc5e60ef33511d3734b0552d47a7fade443becfab95004bc4ffe62d761e8af274dc573d8fb9c7125cce816ccea2739107287d9b082cca5b3e4d174dd1b989031d4840bac27bad70a536c008b69264075cde62b634031414be67d8a1f33d7971040c80fe4c3ef12f39fe652e337ea151061e51eb459988846fa5f1d5107bc76f7bc86d1652b81847e38afed6ec9499af4aa43f675f9e09b61851cde0743812fc9c9cff1fbb8e67b362d5aebe3949f0c9afa0aade64c8e6eed1720ce2ff5be5661c2e5aba3b29f916a4265c5d5aa18b7aa3333f205eaf073792cae2aba9106fc179666cb7aa4c50838411f23c4b6a7aca12f1372152f38b94cf898ee9a6495d9276f05a08246a61b7550643853fd54dabe1196119019effa79004739a03493f494badc052d38b9a2235416d0aaf24f32ac6e4fc4ea89d7718123ff245794bbfabd71e2a00a140f450747236e684fe69a6e0d8ddea6cc1bb66d99a453ac5fbd533675e5dc443a8b9743979a01dd1c5d74e1fe1a23749408e433df58d91cde21fce6196fa81e58a80b0483a01f9e0dc443e450f3bb1bc55928404190a4d84176ff725ead1610ba20db45a3bb4cdd78be2fcc0a811a838fec4e32fe6e3814181fcf67670d1c643155b0d4bc600ff16594ddce54001e688865b0c26447753e383a2bb10425d8da483d0a364ec7255814bba4a99cd50b9722f88456deb405a1e8d926a1ea1d6e28f52f35ce28e3caf8149ca11c7a7e6ec174a049aa41d40b917d445933176e453569ce749e8e0d85b7c5485da5a9ea74e883a33c9063943b436626072ca81074fe56cbdb098af5de203bd5783f7c738fab3d459d8967ed7222ee33088496709f7349b68720d530773c9613970cb7eda03cda59878ab8df058295b415f505cff603422ab446725fb6a17b3b1cedcfe34eca6de8272c50bf331d96f6f9f2c35724a5f13aaf8ccd27ce42a987eefe380e994baf014d90f046989bba8cecee6d9c4d0086370e6df18749a9e1b5cb19eceb1d9136aaf758e93e99cd8b19a87748e59b719e3b3005b1ec3a5a290005148bd704cf1751e5e624a96409128b54515b24e049f15712a07d80f0c1cbff64eb94dbe997a678d18508ebced38b14529a26587d5974693c126c6af7ad36d3f20556a741df4dda1c24444a7d02490deabedcb409699bb3b381f27f30d953f28f232dc17accdf2b2e2c060373d4d2dfb23ba4f799efcf5bce3e85365fea749848452dc77218b97bb0df642d55e1effce5c925c52b135b3555cfbdd86e293c33f90d50705813a07da24007a4b77d17c49aecebbade03bbec67072e55d39666ac8a9f52abe636630c5f0d15a0ae042da150360002fc3fe7fc73345ed41aa68f9ad14f0c7e3263d7e6bd66ea4104cc88d49395705d17418296c99bdf68cfae94fe96cd45ff088fc6c6ec95dc77a817c540bef514e0f06dac9fab797c0fba9e47a6b1aa66d5961816ec1a390ab65c73e4671935632cf71912d1fac64544f207044d44d1d39d6ab734ef793fb04be8464cd20dc8b26365377fff89d437b196bbb134fc8052ebefcfcce2e8d2320cc60f5ece4bff91b0606fd34d2e761a63386658e1683f95705d929f7b99f70fd6d6be8333a224eb02287020c93c9948387bcc9f0cc6a4b26e7c4827f4c070541e710ff158e574488d2261ac716222306de941e03bf98a01b7d3873f493ef1ab25d3740b58fa15f29cb9ba64c037d95489cf92da28b5552663b26d5fcfbdd95a27db3f43428199211678dfc5f5dab3f3d6e55f5d6e5f298ee3678c9b2fa987371ac1a1d2801d36589d1024b77cbd440e212924773f1ceb370a5a5ccdbe5fe8040c740b49570754011d43ee695bc99741dee4d6976a4cf829c50d5ca9f4488a4c156cd1a926cbb3378f51ee6cd4628c54a5b05577075423d56200d427966b0484fafddb9de29679f0c8488fbef782b9f35780f07a5a82585abd0a8b5eaf2562310c36a8edbb41aaf02510f409d014d177d9a72f5d22352db43b3d4146e4a2b4fce540b02d4995f7a9b9592d64f710e9cae676a3a105c23681cd6c54becef5ae85d03f391e2e253b33d486d4961efac2fed3d4f4e6d41062fd8473d3bbeb80c5fd2bdcf268455afab0224ab5b767114e57a6ed3bbef6641af4f55965030fec6f261de4c49a8f901ae8763ccc31df751cd2589a20385b6fe8c3306bb5893456ea8fd919f45083a34c4e45e43c626e526d978063c94150314fead17ef3ec083e63ffb838f3c382e797ab58686e649ec3c7431b043eb93bb66491e08a5f172d45f67bde4cb0d6b2eaf264a8130628eb03e2d7299b6d1386c34826c94081cccab0d41e73a43f67bbd9930e8f038b063ac1b451e3b48b33f78bc97c8865acaaae01e6d24d417d412e0db38532c0f1dd7bfe740d9b1df1412367891a49036d33fd3a004cb010745930aab64909ca314a5394a9772bcf6a18db9cebef54092c3aca54643f675aad8369eaa4dcdf19ce1b9444d637ce6b90dd3b834113eaae746ff51c5fa4ab8bad4d0d364467f788601505662a7b99c7ec595e6ac78ebfbb4eea7b2649a9d752bc12b3e8024ef1d095f325eb37f3f8aed8e294e95d019cb17bf94e7ba39f4dd3e6761dc21ff26fabcbe3789235c14af588b3f3e21bb1e9cf1f68c41c4b0eda197154e8bea1f5c22860422c369fd70de621cb78745e6e488f5957f2ea5538a15a0fdc089ab20bbaa859b75aa465e88d0a24a3065a09fade04f0c6ae894038aa29c678d000f99f6c652a56469735a6b3c17d56e0b0b68452bda52bc4426a4ab47a4f69e9f3f88614f1101e7fd19decfe32c52cccfda02bb764abc90c642c4cff0ed1f82cc9309764b9dc17d909e860e3cb0f5c76d45a26e5c7a7261ab55ac89f07b599867a81c82bff5705f1e5ca0ca91a7ac7f3c654a53a23aad031ce73993020ed0066e795b8e756c8f1c5a6b8387b9213dd139014383ef6c067b32ebd43eb57c5f1391e6ddeface22e5441458b0d7ec252a4bb8a00d2c3f9f65c40c22eb0dbba8a2b0d59b60b123d9c04d69ab3b947d2c0cbcff5a3107dcae77767c13f4f4b18e9bf98ea489c59e4e72d91aa46f7ab4530e7855f115a7b30615f08481f1efbc324c24b8a7efa2d135ebfd9c549df3dcd33ce9a3b22aa005752e7091c40a38e9d63c17c98ebd22e09e2eaa5fe84b08ec25695077a635210a6024ad191727b5bd97726ce028529fa8e50879f083419e7fbfc8d721b2d26d1339de713ad1db3d02f7195d4e811e8c50068b405d39a5c8f6292d5bb22b70f56ef64b45856f652f9f25dea4e4369fd7fdc0419622054746d8dab5698b7f5a507e14af2a850d8ad4d497e70e7d9da5befd9b59969745007d5dc5a76b35c732940bf6021a2e2219cddc4d96ee8447ae658b0371a838044ae1bf8f49707356946241120a6c22d191b6b66600cd533f4ca3aa021b72e118d9255e5e014052223c07251e7749e46409a206242641fb60bc8fb6c3f857d66c01f8cd8f25180af3301f2338bb89b9b68c384dd36d7e2e67599b204efba184cae98d32b8a5805b7fbcaab9ba8a89754fcb9af196b9e6a2cb595e9b584f305b4b6648b7aea7a47cb2def51e2d358e490ec1e73bb3a2ed9cbfa62e27af1f98a088b0cb6180cc38b5e355d599211e29be2045ac70fe4b470ef17f85620893a152c4c17f4dbec6e59bac860504297d9fe46937fa0c2d518b83eea6e7ce4d3e97d0e3d39ccded57ab0915c0176e003b014086391907f8595c951b3eab20db' nonce: '0' storage: {} : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : balance: '1000000000000000001' storage: { "0x00": '0xb157aebf65d6a7e95d50740ed1029e7e599233e72550fe17741a5f893117836d', "0x01": '24575' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashNewAccountFiller.json ================================================ { "extCodeHashNewAccount": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of an account created in same transaction" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "0x75e23f851ce92ee62896c1fb1127d4be2c53f59d": { "code": "0x0000000000000000000000000000000000000000000000000000000000001234", "nonce": "0x01", "storage": { } }, "deadbeef00000000000000000000000000000000": { "storage": { "0x00": "0xe321d900f3fd366734e2d071e30949ded20c27fd638f1a059390091c643b62c5", "0x01": "0x20" } } } } ], "pre": { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } }, "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000000", "code": "{ (MSTORE 0 (CREATE2 0 0 (lll {(MSTORE 0 0x1234) (RETURN 0 32)} 0) 0x10)) [[0]] (EXTCODEHASH (MLOAD 0)) [[1]] (EXTCODESIZE (MLOAD 0)) (STOP)}", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "deadbeef00000000000000000000000000000000", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashNonExistingAccountFiller.yml ================================================ # EXTCODEHASH to a not existing account must be 0 --- extCodeHashNonExistingAccount: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' code: | { (CALL 150000 0xdeadbeef00000000000000000000000000000000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (CALL 150000 0xaeadbeef00000000000000000000000000000000 0 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0) } nonce: '0' storage: {} deadbeef00000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODEHASH 0xdeadbeef00000000000000000000000000000001)) (RETURN 0 32) } nonce: '0' storage: {} aeadbeef00000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (EXTCODESIZE 0xdeadbeef00000000000000000000000000000001)) (RETURN 0 32) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0', "0x01": '0' } deadbeef00000000000000000000000000000001: shouldnotexist: '1' transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashPrecompilesFiller.yml ================================================ # EXTCODEHASH of precompiles addresses --- extCodeHashPrecompiles: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "1000000" currentNumber: "1" currentTimestamp: "1000" pre: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000000' code: | { (CALLDATACOPY 12 0 20) [[0]] (EXTCODEHASH (MLOAD 0)) [[1]] (EXTCODESIZE (MLOAD 0)) } nonce: '0' storage: { # set initial values to be overwritten "0x00": '0xab', "0x01": '0xab'} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int 0 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0xe5fbfc8ab6f527df72b0a0ea8e0605dcc45e3cea1c7f2437b8c06592f7957451', "0x01": '0x16' } - indexes: data: !!int 1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 4 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 5 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 6 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 7 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } - indexes: data: !!int 8 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 095e7baea6a6c7c4c2dfeb977efac326af552d87: balance: '1000000000000000001' storage: { "0x00": '0x00', "0x01": '0x00' } transaction: data: - ':raw 0x095e7baea6a6c7c4c2dfeb977efac326af552d87' - ':raw 0x0000000000000000000000000000000000000001' - ':raw 0x0000000000000000000000000000000000000002' - ':raw 0x0000000000000000000000000000000000000003' - ':raw 0x0000000000000000000000000000000000000004' - ':raw 0x0000000000000000000000000000000000000005' - ':raw 0x0000000000000000000000000000000000000006' - ':raw 0x0000000000000000000000000000000000000007' - ':raw 0x0000000000000000000000000000000000000008' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 095e7baea6a6c7c4c2dfeb977efac326af552d87 value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashSTATICCALLFiller.json ================================================ { "extCodeHashSTATICCALL" : { "_info" : { "comment": "EXTCODEHASH of an account during a STATICCALL" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000001", "storage" : { "0x00" : "0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432", "0x01" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 150000 0 0 0 32) (RETURNDATACOPY 0 0 32) [[0]] (MLOAD 0) (STATICCALL 150000 0 0 0 32) (RETURNDATACOPY 0 0 32) [[1]] (MLOAD 0)}", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODEHASH )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (EXTCODESIZE )) (RETURN 0 32) }", "nonce" : "0", "storage" : { "0x00": "0xdeadbeef" } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x1234", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashSelfFiller.json ================================================ { "extCodeHashSelf": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of the currently executing account" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000001", "storage": { "0x00": "0x8807d680db87f5e22d9914d421554ef0f43ec8f589fff85a094c52a35525d2bf", "0x01": "0x33" } } } } ], "pre": { "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000000", "code": "{ [[0]] (EXTCODEHASH 0xdeadbeef00000000000000000000000000000000) [[1]] (EXTCODESIZE 0xdeadbeef00000000000000000000000000000000) }", "nonce": "0", "storage": { "0x00": "0xdeadbeef" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "deadbeef00000000000000000000000000000000", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashSelfInInitFiller.json ================================================ { "extCodeHashSelfInInit": { "_info": { "comment": "EXTCODEHASH/EXTCODESIZE of the account currently being created" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "1000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [ ">=Cancun" ], "result": { "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000001", "storage": { "0x00": "0xdeadbeef" } }, "0x8d540e2aaf9828712749afedf7c53ed034a6fd0e": { "balance": "0", "storage": { "0x00": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "0x01": "0x00" } } } } ], "pre": { "deadbeef00000000000000000000000000000000": { "balance": "1000000000000000000", "code": "{ (CREATE2 0 0 (lll {[[0]] (EXTCODEHASH (ADDRESS)) [[1]] (EXTCODESIZE (ADDRESS)) (RETURN 0 0)} 0) 0x10) (STOP) }", "nonce": "0", "storage": { "0x00": "0xdeadbeef" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "1000000000000000000", "code": "", "nonce": "0", "storage": { } } }, "transaction": { "data": [ "" ], "gasLimit": [ "400000" ], "gasPrice": "10", "nonce": "0", "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to": "deadbeef00000000000000000000000000000000", "value": [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashSubcallOOGFiller.yml ================================================ # create contract A in a subcall. go OOG in a subcall (revert happens) check EXTCODEHASH of A (in upper call) --- extCodeHashSubcallOOG: _info: comment: "create contract A in a subcall. go OOG in a subcall (revert happens) check EXTCODEHASH of A (in upper call)" env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "10000000" currentNumber: "1" currentTimestamp: "1000" pre: '1000000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (CALLCODE 350000 (CALLDATALOAD 0) 0 0 0 0 32) (SSTORE 1 (EXTCODEHASH (MLOAD 0))) (SSTORE 2 (EXTCODESIZE (MLOAD 0))) (EXTCODECOPY (MLOAD 0) 0 0 32) (SSTORE 3 (MLOAD 0)) (SSTORE 4 (CALLCODE 50000 (MLOAD 0) 0 0 0 0 0)) } nonce: '0' storage: {} '2000000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (CALL 150000 0xa000000000000000000000000000000000000000 0 0 0 0 32) (RETURN 0 32)} nonce: '0' storage: {} '2100000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (CALLCODE 150000 0xa000000000000000000000000000000000000000 0 0 0 0 32) (RETURN 0 32)} nonce: '0' storage: {} '2200000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (DELEGATECALL 150000 0xa000000000000000000000000000000000000000 0 0 0 32) (RETURN 0 32)} nonce: '0' storage: {} '3000000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (CALL 150000 0xa100000000000000000000000000000000000000 0 0 0 0 32) (RETURN 0 32)} nonce: '0' storage: {} '3100000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (CALLCODE 250000 0xa100000000000000000000000000000000000000 0 0 0 0 32) (RETURN 0 32)} nonce: '0' storage: {} '3200000000000000000000000000000000000000': balance: '1000000000000000000' code: | { (DELEGATECALL 150000 0xa100000000000000000000000000000000000000 0 0 0 32) (RETURN 0 32)} nonce: '0' storage: {} #create dynamic contract not going out of gas a000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (CREATE2 0 0 (lll { (MSTORE 0 0x6020602055) (RETURN 27 5) } 0) 0)) (RETURN 0 32) (STOP) } nonce: '0' storage: {} #create dynamic contract and go OOG a100000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (MSTORE 0 (CREATE2 0 0 (lll { (MSTORE 0 0x6020602055) (RETURN 27 5) } 0) 0)) (SSTORE 1 1) (SSTORE 2 1) (SSTORE 3 1) (SSTORE 4 1) (SSTORE 5 1) (SSTORE 6 1) (SSTORE 7 1) (SSTORE 8 1) (SSTORE 9 1) (SSTORE 10 1) (SSTORE 11 1) (SSTORE 12 1) (SSTORE 13 1) (SSTORE 14 1) (RETURN 0 32) (STOP) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: [ !!int 0, !!int 1, !!int 2 ] gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 1000000000000000000000000000000000000000: storage: { "0x01": '0x9ff1f274b33e3b56edd7734520cbcdf2699fc1dc78b51644cdc56ca65bebeeae', "0x02": '0x05', "0x03": '0x6020602055000000000000000000000000000000000000000000000000000000', "0x04": '0x01' } - indexes: data: [ !!int 3, !!int 4, !!int 5 ] gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 62ae0b997c8230e321b19d06b7004f25e1ac0637: shouldnotexist: '1' c566c94b132ce77d6e67add86c5a74e808578876: shouldnotexist: '1' transaction: data: - ':raw 0x0000000000000000000000002000000000000000000000000000000000000000' - ':raw 0x0000000000000000000000002100000000000000000000000000000000000000' - ':raw 0x0000000000000000000000002200000000000000000000000000000000000000' - ':raw 0x0000000000000000000000003000000000000000000000000000000000000000' - ':raw 0x0000000000000000000000003100000000000000000000000000000000000000' - ':raw 0x0000000000000000000000003200000000000000000000000000000000000000' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: '1000000000000000000000000000000000000000' value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashSubcallSuicideCancunFiller.yml ================================================ # transaction to B # B call to A # A delegatecall/callcode to C (C has selfdestruct) # A selfdestructed. returned to B. now we could check extcodehash of A (in account B code) # Cancun version with dynamic contract suicide --- extCodeHashSubcallSuicideCancun: _info: comment: "transaction to B | B call to A | A delegatecall/callcode to C (C has selfdestruct) | A selfdestructed. returned to B. now we could check extcodehash of A (in account B code)" env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "10000000" currentNumber: "1" currentTimestamp: "1000" pre: b000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { ;; create 0x3e180b1862f9d158abb5e519a6d8605540c23682 (Account A) (CREATE 1000000000000000000 0 (lll { (CALL 100000 0xd000000000000000000000000000000000000000 0 0 0 0 0) (RETURN 0 (lll { (SELFDESTRUCT 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b) } 0)) } 0)) (SSTORE 1 (EXTCODEHASH 0xa000000000000000000000000000000000000000)) (SSTORE 2 (EXTCODESIZE 0xa000000000000000000000000000000000000000)) (EXTCODECOPY 0xa000000000000000000000000000000000000000 0 0 32) (SSTORE 3 (MLOAD 0)) (CALL 350000 0xa000000000000000000000000000000000000000 0 0 0 0 32) (SSTORE 4 (EXTCODEHASH 0xa000000000000000000000000000000000000000)) (SSTORE 5 (EXTCODESIZE 0xa000000000000000000000000000000000000000)) (EXTCODECOPY 0xa000000000000000000000000000000000000000 0 0 32) (SSTORE 6 (MLOAD 0)) [[7]] (CALL 350000 0xa000000000000000000000000000000000000000 0 0 0 0 32) } nonce: '0' storage: {} a000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (CALLCODE 350000 0x3e180b1862f9d158abb5e519a6d8605540c23682 0 0 0 0 32) } nonce: '0' storage: {} d000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { [[1]] 1 } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: b000000000000000000000000000000000000000: storage: { "0x01": '0x807d478bd0d0173122f5531d4c43781631444232a0816dd35578747c7d67af0d', "0x02": '0x25', "0x03": '0x60206000600060006000733e180b1862f9d158abb5e519a6d8605540c2368262', "0x04": '0x807d478bd0d0173122f5531d4c43781631444232a0816dd35578747c7d67af0d', "0x05": '0x25', "0x06": '0x60206000600060006000733e180b1862f9d158abb5e519a6d8605540c2368262', "0x07": '0x01' } #CALLCODE to a contract that suicide in Cancun does not delete the caller. even if contract that has suicide is dynamically created a000000000000000000000000000000000000000: nonce: '0' storage: {} code: '0x60206000600060006000733e180b1862f9d158abb5e519a6d8605540c2368262055730f200' balance: '0' d000000000000000000000000000000000000000: storage: { "0x01" : "0x01" } transaction: data: - '' gasLimit: - '500000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b000000000000000000000000000000000000000' value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extCodeHashSubcallSuicideFiller.yml ================================================ # transaction to B # B call to A # A delegatecall/callcode to C (C has selfdestruct) # A selfdestructed. returned to B. now we could check extcodehash of A (in account B code) --- extCodeHashSubcallSuicide: _info: comment: "transaction to B | B call to A | A delegatecall/callcode to C (C has selfdestruct) | A selfdestructed. returned to B. now we could check extcodehash of A (in account B code)" env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "10000000" currentNumber: "1" currentTimestamp: "1000" pre: b000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (SSTORE 1 (EXTCODEHASH 0xa000000000000000000000000000000000000000)) (SSTORE 2 (EXTCODESIZE 0xa000000000000000000000000000000000000000)) (EXTCODECOPY 0xa000000000000000000000000000000000000000 0 0 32) (SSTORE 3 (MLOAD 0)) (CALL 350000 0xa000000000000000000000000000000000000000 0 0 0 0 32) (SSTORE 4 (EXTCODEHASH 0xa000000000000000000000000000000000000000)) (SSTORE 5 (EXTCODESIZE 0xa000000000000000000000000000000000000000)) (EXTCODECOPY 0xa000000000000000000000000000000000000000 0 0 32) (SSTORE 6 (MLOAD 0)) [[7]] (CALL 350000 0xa000000000000000000000000000000000000000 0 0 0 0 32) } nonce: '0' storage: {} a000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (CALLCODE 350000 0xc000000000000000000000000000000000000000 0 0 0 0 32) } nonce: '0' storage: {} c000000000000000000000000000000000000000: balance: '1000000000000000000' code: | { (SELFDESTRUCT 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: b000000000000000000000000000000000000000: storage: { "0x01": '0x367d3c0e810bbdebc72c25e80dcb9a337c7c87e3a36e6fae87d1d51b3c745d24', "0x02": '0x25', "0x03": '0x6020600060006000600073c00000000000000000000000000000000000000062', "0x04": '0x367d3c0e810bbdebc72c25e80dcb9a337c7c87e3a36e6fae87d1d51b3c745d24', "0x05": '0x25', "0x06": '0x6020600060006000600073c00000000000000000000000000000000000000062', "0x07": '0x01' } a000000000000000000000000000000000000000: balance: 0 nonce: 0 code: '0x6020600060006000600073c00000000000000000000000000000000000000062055730f200' storage: {} transaction: data: - '' gasLimit: - '500000' gasPrice: '10' nonce: '0' secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 'b000000000000000000000000000000000000000' value: - '1' ================================================ FILE: tests/static/state_tests/stExtCodeHash/extcodehashEmpty_ParisFiller.yml ================================================ # The extcodehash opcode returns zero when an account is truly empty # (no data what so ever), or when an account only has storage entries. # # When an account has either a balance or a nonce, extcodehash returns # the hash of the empty string. # # This test was requested in issue https://github.com/ethereum/tests/issues/581 extcodehashEmpty_Paris: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'addr $4) (def 'NOP 0) ; If the address is above 0x2000, we should call it first ; and then check the extcodehash (if (> addr 0x2000) (call (gas) addr 0 0 0 0 0) NOP ) ; Normal result [[0]] (extcodesize addr) [[1]] (extcodehash addr) (extcodecopy addr 0 0 @@0) [[2]] @0 ; Send a wei to the account and see that you ALWAYS get the ; empty string's hash, but only for "normal", sub 0x2000 addresses (if (< addr 0x2000) (call (gas) addr 1 0 0 0 0) NOP ) [[3]] (extcodehash addr) ; As long as we're here, check the gas cost of EXTCODEHASH ; Note that the space between the (gas) checks also includes: ; GAS 2 ; PUSH1 3 ; MSTORE 6 ; PUSH1 3 ; CALLDATALOAD 3 ; << EXTCODEHASH is here >> ; POP 2 [0x20] (gas) (extcodehash addr) [0x40] (gas) [[4]] (- @0x20 @0x40 19) ; Also, the EXTCODEHASH cost here is for a previously touched ; account, which makes it a lot lower (>=Cancun) } nonce: '0' storage: {} # Really empty, the EXTCODEHASH is zero # 0000000000000000000000000000000000001000: # balance: 0 # code: 0x # nonce: 0 # storage: {} # If there is a balance, it's the hash of the empty string 0000000000000000000000000000000000001001: balance: 1 code: 0x nonce: 0 storage: {} # The actual balance doesn't matter 0000000000000000000000000000000000001101: balance: 0x100000000000000 code: 0x nonce: 0 storage: {} # If there is a nonce, it's also the hash of the empty string 0000000000000000000000000000000000001002: balance: 0 code: 0x nonce: 1 storage: {} # The nonce value doesn't matter 0000000000000000000000000000000000001102: balance: 0 code: 0x nonce: 1000000000000 storage: {} # Storage doesn't make it look an account exists 0000000000000000000000000000000000001003: balance: 10 code: 0x nonce: 0 storage: 0x00: 0x01000000 0xFFFFFFF: 0xFFFFFFFF 0000000000000000000000000000000000001004: balance: 0 code: :raw 0x00 nonce: 0 storage: {} # What happens when a contract commits suicide? # (nothing, suicide is not processed until the end of the transaction) 000000000000000000000000000000000000DEAD: balance: 100 code: :raw 0x6160A7FF nonce: 0 storage: {} # What happens when it CREATEs another contract, # and that one is empty? # # The new contract is created with nonce:1, so it is never empty # and EXTCODEHASH always returns the hash of the empty string 0000000000000000000000000000000000C0EA7E: balance: 100 code: | { (def 'constructorCode 0x100) (def 'constructorLength 0x020) (def 'addr 0x040) [constructorLength] (lll { ; The constructor code, nothing happens ; except we return an empty buffer with "all" ; the code of the created contract (return 0 0) } constructorCode ; write to 0x100 and above ) [addr] (create 0 constructorCode @constructorLength) [[0]] (extcodehash @addr) } nonce: 0 storage: {} # What happens when it CREATE2s another contract, # and that one is empty? # # The new contract is created with nonce:1, so it is never empty # and EXTCODEHASH always returns the hash of the empty string 000000000000000000000000000000000C0EA7E2: balance: 100 code: | { (def 'constructorCode 0x100) (def 'constructorLength 0x020) (def 'addr 0x040) [constructorLength] (lll { ; The constructor code, nothing happens ; except we return an empty buffer with "all" ; the code of the created contract (return 0 0) } constructorCode ; write to 0x100 and above ) [addr] (create2 0 constructorCode @constructorLength 0x60A7) [[0]] (extcodehash @addr) [[1]] @addr } nonce: 0 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 0 storage: {} transaction: data: # These give an EXTCODEHASH of zero - :label empty :abi f(uint) 0x1000 - :label storage :abi f(uint) 0x1003 # These give an EXTCODEHASH of the empty string - :label balance :abi f(uint) 0x1001 - :label balance :abi f(uint) 0x1101 - :label nonce :abi f(uint) 0x1002 - :label nonce :abi f(uint) 0x1102 # There is a difference between not having code, and having # a single byte of 00 as the code - :label hasCode :abi f(uint) 0x1004 # This contract commits suicide and then we EXTCODEHASH it # However, it seems that suicides don't happen before the end # of the transaction - :label dead :abi f(uint) 0xDEAD # When we create an empty contract, what happens? - :label born :abi f(uint) 0x00C0EA7E - :label born2 :abi f(uint) 0x0C0EA7E2 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label storage gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 0x01: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 0x02: 0x00 0x03: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 0x04: 0x64 # 100 - indexes: data: - :label empty gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 0x01: 0x00 0x02: 0x00 0x03: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 0x04: 0x64 # 100 - indexes: data: - :label balance - :label nonce gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x00 0x01: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 0x02: 0x00 0x03: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 0x04: 0x64 # 100 - indexes: data: - :label hasCode gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x01 0x01: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a 0x02: 0x00 0x03: 0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a 0x04: 0x64 - indexes: data: - :label dead gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x04 0x01: 0x2951f94cc6db6e9b3de9e43ccbd2c84491c46fc3be255c6634299f82b37baaf8 0x02: 0x6160a7ff00000000000000000000000000000000000000000000000000000000 0x03: 0x2951f94cc6db6e9b3de9e43ccbd2c84491c46fc3be255c6634299f82b37baaf8 0x04: 0x64 # 100 - indexes: data: - :label born gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: # We don't care about C0EA7E (which obviously is not empty) # We care about the account it creates. 0000000000000000000000000000000000C0EA7E: storage: 0x00: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 - indexes: data: - :label born2 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: # We don't care about C0EA7E2 (which obviously is not empty) # We care about the account it creates. 000000000000000000000000000000000C0EA7E2: storage: 0x00: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 0x01: 0xb41b458cea588432cef2494454a360143004984c b41b458cea588432cef2494454a360143004984c: nonce: 1 ================================================ FILE: tests/static/state_tests/stHomesteadSpecific/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContractFiller.json ================================================ { "contractCreationOOGdontLeaveEmptyContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1}, "network" : [ ">=Cancun"], "result" : { "5dddfce53ee040d9eb21afbc0ae1bb4dbb0ba643" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (SSTORE 1 0x10) (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (CREATE 0 0 32)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "93056" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000001", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json ================================================ { "contractCreationOOGdontLeaveEmptyContractViaTransaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1}, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "balance" : "0" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1100000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(CALL 50000 0x1000000000000000000000000000000000000001 0 0 64 0 64)}", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{(SSTORE 1 1)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6040600060406000600073100000000000000000000000000000000000000161c350f1" ], "gasLimit" : [ "96000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stHomesteadSpecific/createContractViaContractFiller.json ================================================ { "createContractViaContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "// balance" : "21000 + Code Execution + Contract Creation", "// balance" : "469910", "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (CREATE 0 0 0)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000001", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stHomesteadSpecific/createContractViaContractOOGInitCodeFiller.json ================================================ { "createContractViaContractOOGInitCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1}, "network" : [ ">=Cancun"], "result" : { "4ff884bffc83e888ae11b32b1d94bf9bc8d1732f" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1100000", "code" : "", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (MSTORE 0 0x602060406000f0600c600055)(CREATE 0 20 12)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "105044" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000001", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stHomesteadSpecific/createContractViaTransactionCost53000Filler.json ================================================ { "createContractViaTransactionCost53000" : { "_info" : { "comment" : "trigger transaction creating gasPrice in the state" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1", "//balance" : "470000" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallContractToCreateContractAndCallItOOGFiller.json ================================================ { "CallContractToCreateContractAndCallItOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "1", "nonce" : "1", "storage" : { "0x00" : "0x0c" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "1000", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3)[[0]](CREATE 1 11 21)(CALL 1000 (SLOAD 0) 0 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "203000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallContractToCreateContractNoCashFiller.json ================================================ { "CallContractToCreateContractNoCash" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "10000", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3)[[0]](CREATE 100000 11 21)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallContractToCreateContractOOGBonusGasFiller.json ================================================ { "CallContractToCreateContractOOGBonusGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "1", "nonce" : "1", "storage" : { "0x00" : "0x0c" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "112", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3)[[0]](CREATE 1 11 21)(CALL 0 (SLOAD 0) 12 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallContractToCreateContractOOGFiller.json ================================================ { "CallContractToCreateContractOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "0", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3)[[0]](CREATE 1 11 21)(CALL 0 (SLOAD 0) 0 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractIfCalledFiller.json ================================================ { "CallContractToCreateContractWhichWouldCreateContractIfCalled" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "62c01474f089b07dae603491675dc5b5748f7049" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "2", "nonce" : "2", "storage" : { "0x00" : "0x0c" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "1000", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3)[[0]](CREATE 1 11 21)(CALL 50000 (SLOAD 0) 1 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractInInitCodeFiller.json ================================================ { "CallContractToCreateContractWhichWouldCreateContractInInitCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1", "nonce" : "1" }, "62c01474f089b07dae603491675dc5b5748f7049" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "nonce" : "2", "storage" : { "0x00" : "0x0c" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (CREATE 0 64 32)}", "balance" : "1", "code" : "{(MSTORE 0 0x600c600055602060406000f0)(CREATE 0 20 12)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallRecursiveContractFiller.json ================================================ { "CallRecursiveContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1", "nonce" : "41", "storage" : { "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" } }, "1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" : { "shouldnotexist" : "1" }, "8e3411c91d5dd4081b4846fa2f93808f5ad19686" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : "{[[ 2 ]](ADDRESS)(CODECOPY 0 0 32)(CREATE 0 0 32)}", "nonce" : "40", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/CallTheContractToCreateEmptyContractFiller.json ================================================ { "CallTheContractToCreateEmptyContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1", "nonce" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "0", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : "{(CREATE 0 0 32)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/OutOfGasContractCreationFiller.json ================================================ { "OutOfGasContractCreation" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x600a80600c6000396000f200600160008035811a8100", ":raw 0x600160015560026001556003600155600460015560056001556006600155" ], "gasLimit" : [ "56000", "150000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/OutOfGasPrefundedContractCreationFiller.json ================================================ { "OutOfGasPrefundedContractCreation" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : [0, 1], "value" : -1 }, "network" : [">=Cancun"], "//comment" : "Contract creation OOG on create, and on internal opcode inside create", "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x01" } } }, { "indexes" : { "data" : -1, "gas" : [2], "value" : -1 }, "network" : [">=Cancun"], "//comment" : "Contract creation OOG on internal opcode inside create", "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x02" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0f424000", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "{ (CREATE 1 0 (lll (seq (sstore 0 0x112233) (STOP) ) 0)) (STOP) }" ], "gasLimit" : [ "154000", "65000", "95000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/ReturnTest2Filler.json ================================================ { "ReturnTest2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x15", "0x01" : "0x3f" } } } } ], "pre" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "{(MSTORE 0 0x15)(CALL 7000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 32 32 32) [[0]](MLOAD 0) [[1]](MLOAD 32) (RETURN 0 64)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(MSTORE 0 (MUL 3 (CALLDATALOAD 0)))(RETURN 0 32)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "250000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "194f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/ReturnTestFiller.json ================================================ { "ReturnTest" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x15" } } } } ], "pre" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "{(CALL 2000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 30 1 31 1) [[0]](MLOAD 0) (RETURN 30 2)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(MSTORE 0 0x15) (RETURN 31 1)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "194f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/StackUnderFlowContractCreationFiller.json ================================================ { "StackUnderFlowContractCreation" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "750000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6000f1" ], "gasLimit" : [ "72000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/TransactionCreateAutoSuicideContractFiller.json ================================================ { "TransactionCreateAutoSuicideContract" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "0x600a80600c6000396000fff2ffff600160008035811a81" ], "gasLimit" : [ "55000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "15" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/TransactionCreateRandomInitCodeFiller.json ================================================ { "TransactionCreateRandomInitCode" : { "_info" : { "comment" : "stack underflow in init code" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x600a80600c6000396000f200600160008035811a8100" ], "gasLimit" : [ "64599" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/TransactionCreateStopInInitcodeFiller.json ================================================ { "TransactionCreateStopInInitcode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x600a80600c600039600000f20000600160008035811a81" ], "gasLimit" : [ "55000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/TransactionCreateSuicideInInitcodeFiller.json ================================================ { "TransactionCreateSuicideInInitcode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "{ (SELFDESTRUCT (ADDRESS)) }" ], "gasLimit" : [ "155000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stInitCodeTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stLogTests/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stLogTests/log0_emptyMemFiller.json ================================================ { "log0_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log0_logMemStartTooHighFiller.json ================================================ { "log0_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log0_logMemsizeTooHighFiller.json ================================================ { "log0_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log0_logMemsizeZeroFiller.json ================================================ { "log0_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 1 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log0_nonEmptyMemFiller.json ================================================ { "log0_nonEmptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG0 0 32) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log0_nonEmptyMem_logMemSize1Filler.json ================================================ { "log0_nonEmptyMem_logMemSize1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 0 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log0_nonEmptyMem_logMemSize1_logMemStart31Filler.json ================================================ { "log0_nonEmptyMem_logMemSize1_logMemStart31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_CallerFiller.json ================================================ { "log1_Caller" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG1 0 32 (CALLER)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_MaxTopicFiller.json ================================================ { "log1_MaxTopic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 0 32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_emptyMemFiller.json ================================================ { "log1_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG1 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_logMemStartTooHighFiller.json ================================================ { "log1_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_logMemsizeTooHighFiller.json ================================================ { "log1_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_logMemsizeZeroFiller.json ================================================ { "log1_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 1 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_nonEmptyMemFiller.json ================================================ { "log1_nonEmptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG1 0 32 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_nonEmptyMem_logMemSize1Filler.json ================================================ { "log1_nonEmptyMem_logMemSize1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 0 1 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log1_nonEmptyMem_logMemSize1_logMemStart31Filler.json ================================================ { "log1_nonEmptyMem_logMemSize1_logMemStart31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 31 1 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_CallerFiller.json ================================================ { "log2_Caller" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG2 0 32 0 (CALLER) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_MaxTopicFiller.json ================================================ { "log2_MaxTopic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG2 0 32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_emptyMemFiller.json ================================================ { "log2_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG2 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_logMemStartTooHighFiller.json ================================================ { "log2_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG2 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_logMemsizeTooHighFiller.json ================================================ { "log2_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG2 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_logMemsizeZeroFiller.json ================================================ { "log2_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG2 1 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_nonEmptyMemFiller.json ================================================ { "log2_nonEmptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG2 0 32 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_nonEmptyMem_logMemSize1Filler.json ================================================ { "log2_nonEmptyMem_logMemSize1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG2 0 1 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log2_nonEmptyMem_logMemSize1_logMemStart31Filler.json ================================================ { "log2_nonEmptyMem_logMemSize1_logMemStart31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG2 31 1 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_CallerFiller.json ================================================ { "log3_Caller" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG3 0 32 0 0 (CALLER) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_MaxTopicFiller.json ================================================ { "log3_MaxTopic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG3 0 32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_PCFiller.json ================================================ { "log3_PC" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG3 0 32 (PC) (PC) (PC) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_emptyMemFiller.json ================================================ { "log3_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG3 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_logMemStartTooHighFiller.json ================================================ { "log3_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG3 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_logMemsizeTooHighFiller.json ================================================ { "log3_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG3 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_logMemsizeZeroFiller.json ================================================ { "log3_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG3 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_nonEmptyMemFiller.json ================================================ { "log3_nonEmptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG3 0 32 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_nonEmptyMem_logMemSize1Filler.json ================================================ { "log3_nonEmptyMem_logMemSize1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG3 0 1 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log3_nonEmptyMem_logMemSize1_logMemStart31Filler.json ================================================ { "log3_nonEmptyMem_logMemSize1_logMemStart31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG3 31 1 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_CallerFiller.json ================================================ { "log4_Caller" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG4 0 32 0 0 0 (CALLER) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_MaxTopicFiller.json ================================================ { "log4_MaxTopic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG4 0 32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_PCFiller.json ================================================ { "log4_PC" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG4 0 32 (PC) (PC) (PC) (PC) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_emptyMemFiller.json ================================================ { "log4_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG4 0 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_logMemStartTooHighFiller.json ================================================ { "log4_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG4 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_logMemsizeTooHighFiller.json ================================================ { "log4_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG4 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_logMemsizeZeroFiller.json ================================================ { "log4_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG4 1 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_nonEmptyMemFiller.json ================================================ { "log4_nonEmptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG4 0 32 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_nonEmptyMem_logMemSize1Filler.json ================================================ { "log4_nonEmptyMem_logMemSize1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG4 0 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/log4_nonEmptyMem_logMemSize1_logMemStart31Filler.json ================================================ { "log4_nonEmptyMem_logMemSize1_logMemStart31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG4 31 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stLogTests/logInOOG_CallFiller.json ================================================ { "logInOOG_Call" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 100000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG0 0 32) (MLOAD 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCallsFiller.json ================================================ { "CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "nonce": "1" }, "": { "storage": { "0x08": "0x08d5b6", "0x09": "0x01", "0x00": "0x12", "0x0a": "0x01" } }, "": { "storage": { "0x00": "0x12" } } } } ], "pre": { "": { "nonce": "0x00", "balance": "0xe8d4a51000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x6012600055", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff600073620927c0f160095560ff60ff60ff60ff600073620927c0f2600a55", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0927c0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCallsFiller.json ================================================ { "CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "nonce": "1" }, "": { "storage": { "0x08": "0x08d5b6", "0x09": "0x01" } }, "": { "storage": { "0x08": "0x02a1c7" } }, "": { "storage": { "0x08": "0x030d3e", "0x09": "0x01" } } } } ], "pre": { "": { "nonce": "0x00", "balance": "0xe8d4a51000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff60007362030d40f1600955", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a600855", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff600073620927c0f1600955", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0927c0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevel2WithMemExpandingCallsFiller.json ================================================ { "CallGoesOOGOnSecondLevel2WithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "nonce": "1", "//balance": "999999840000" }, "": { "storage": {} }, "": { "storage": {} }, "": { "storage": {} } } } ], "pre": { "": { "nonce": "0x00", "balance": "0xe8d4a510000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a6008555a6009555a600a55", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff600073620927c0f1600955", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff600073620927c0f1600955", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x027100" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevelWithMemExpandingCallsFiller.json ================================================ { "CallGoesOOGOnSecondLevelWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "nonce": "1" }, "": { "storage": { "0x08" : "0x030956" } }, "": { "storage": {} }, "": { "storage": {} } } } ], "pre": { "": { "nonce": "0x00", "balance": "0xe8d4a51000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff600073620927c0f1600955", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a600855600060006000f050600060006000f0505a6009555a600a55", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff600073620927c0f1600955", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x035b60" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/CreateAndGasInsideCreateWithMemExpandingCallsFiller.json ================================================ { "CreateAndGasInsideCreateWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "1", "//comment" : "CREATE price changed in Shanghai", "//comment" : "Due to eip-3860 (https://eips.ethereum.org/EIPS/eip-3860) pay extra 2 gas for each 32 bytes of initcode", "storage": { "0x0b": "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x09": "0x075596", "0x0a": "0x08d5b6" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40": { "storage": { "0xfd": "0x07e23d" } } } } ], "pre": { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", "balance": "0xe8d4a51000", "code": "0x", "storage": {} }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", "balance": "0x00", "code": "0x5a600a55635a60fd556000526004601c6000f0600b555a600955", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0927c0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/DelegateCallOnEIPWithMemExpandingCallsFiller.json ================================================ { "DelegateCallOnEIPWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "nonce": "1" }, "": { "storage": { "0x08": "0x08d5b6", "0x09": "0x01", "0x00": "0x12" } }, "": { "storage": {} } } } ], "pre": { "": { "nonce": "0x00", "balance": "0xe8d4a51000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x5a60085560ff60ff60ff60ff73620927c0f4600955", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x6012600055", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0927c0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCallsFiller.json ================================================ { "ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "nonce": "1" }, "": { "storage": { "0x01": "0x01" } }, "": { "balance": "100000", "storage": { "0x01": "0x0c" } } } } ], "pre": { "": { "nonce": "0x00", "balance": "0x0186a000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x60ff60ff60ff60ff600073620927c0f1600155", "storage": {} }, "": { "nonce": "0x00", "balance": "0x0186a0", "code": "0x600c600155", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/NewGasPriceForCodesWithMemExpandingCallsFiller.json ================================================ { "NewGasPriceForCodesWithMemExpandingCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "": { "balance": "111" }, "": { "storage": { "0x02": "0x1122334455667788991011121314151617181920000000000000000000000000", "0x03": "0xe8d4a4b47280", "0x00": "0x12", "0x01": "0x20", "0x07": "0x01", "0x04": "0x12", "0x08": "0x01", "0x0a": "0x060ae9", "0x64": "0x11" } }, "": { "nonce": "1" } } } ], "pre": { "": { "nonce": "0x00", "balance": "0x6f", "code": "0x1122334455667788991011121314151617181920212223242526272829303132", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x6011606455", "storage": {} }, "": { "nonce": "0x00", "balance": "0xe8d4a5100000", "code": "0x", "storage": {} }, "": { "nonce": "0x00", "balance": "0x00", "code": "0x733b600155601460006000733c60005160025560005460045560ff60ff60ff60ff600173617530f160055560ff60ff60ff60ff600173617530f260065560ff60ff60ff60ff73617530f460075560ff60ff60ff60ff6000731000000000000000000000000000000000000013617530f160085573316003555a600a55", "storage": { "0x00": "0x12" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0927c0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/OOGinReturnFiller.yml ================================================ OOGinReturn: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: 0x100000000 currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0xDEAD60A7 (return 0 0x100) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | { [0] 0xDEAD60A7 (revert 0 0x100) } nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | { ; Variables are 0x20 bytes (= 256 bits) apart, except for ; code buffers that get 0x100 (256 bytes) (def 'callRet 0x100) (def 'type 0x120) (def 'gas2Use 0x140) (def 'retVal 0x160) ; Other constants (def 'NOP 0) ; No OPeration ; Understand the input. [type] $4 [gas2Use] $36 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [0] 0x60A760A7 [callRet] (call @gas2Use @type 0 0 0 0 0x100) [[0]] @0 ; first 0x20 bytes of return data (if (> (returndatasize) 0) (returndatacopy retVal 0 0x20) NOP) [[1]] @retVal } ; end of LLL code nonce: '0' storage: {} # User account : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Type: 01 - RETURN 02 - REVERT # Gas # Enough gas for the called contract to finish - :abi f(uint,uint) 0x36 - :abi f(uint,uint) 0x36 # Out of gas during the RETURN / REVERT - :abi f(uint,uint) 0x25 - :abi f(uint,uint) 0x25 # Out of gas before getting to the RETURN / REVERT - :abi f(uint,uint) 0x10 - :abi f(uint,uint) 0x10 gasLimit: - 0x900000 gasPrice: '10' nonce: '0' to: secretKey: "" value: - 0 expect: # Calls that return data - indexes: data: - !!int 0 - !!int 1 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: : storage: 0x00: 0xDEAD60A7 0x01: 0xDEAD60A7 # Calls that return data - indexes: data: - !!int 2 - !!int 3 - !!int 4 - !!int 5 gas: !!int 0 value: !!int 0 network: - '>=Cancun' result: : storage: 0x00: 0x60a760a7 ================================================ FILE: tests/static/state_tests/stMemExpandingEIP150Calls/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALLCODE_Bounds2Filler.json ================================================ { "CALLCODE_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "// code" : "(CALLCODE 0x7ffffffffffffff 0 0 0xffffffffffffffff 0 0xffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffff 0xffffffff 0xffffffff 0xffffffff)", "code" : "{ (CALLCODE 0x7ffffffffffffff 0 0xfffffff 0xfffffff 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALLCODE_Bounds3Filler.json ================================================ { "CALLCODE_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "// code" : " ", "code" : "{ (CALLCODE 0x7ffffffffffffff 0 0xffffffff 0xffffffff 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALLCODE_Bounds4Filler.json ================================================ { "CALLCODE_Bounds4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE 0x7ffffffffffffff 0 0 0xffffffffffffffff 0 0xffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "1000000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALLCODE_BoundsFiller.json ================================================ { "CALLCODE_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE 0x7ffffffffffffff 0 0 0 0 0) (CALLCODE 0x7ffffffffffffff 0 0 0xfffffff 0 0xfffffff) (CALLCODE 0x7ffffffffffffff 0 0 0xffffffff 0 0xffffffff) (CALLCODE 0x7ffffffffffffff 0 0xfffffff 0 0xfffffff 0) (CALLCODE 0x7ffffffffffffff 0 0xffffffff 0 0xffffffff 0) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffff 0 0xffffffffffffffff 0) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0) (CALLCODE 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALL_Bounds2Filler.json ================================================ { "CALL_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALL 0x7ffffffffffffff 0 0xfffffff 0xfffffff 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALL_Bounds2aFiller.json ================================================ { "CALL_Bounds2a" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALL 0x7ffffffffffffff 0 0xffffffff 0xffffffff 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALL_Bounds3Filler.json ================================================ { "CALL_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALL 0x7ffffffffffffff 0 0 0xffffffffffffffff 0 0xffffffffffffffff) (CALL 0x7ffffffffffffff 0 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff) (CALL 0x7ffffffffffffff 0 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CALL 0x7ffffffffffffff 0 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (CALL 0x7ffffffffffffff 0 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (CALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (CALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "1000000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CALL_BoundsFiller.json ================================================ { "CALL_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALL 0x7ffffffffffffff 0 0 0 0 0) (CALL 0x7ffffffffffffff 0 0 0xfffffff 0 0xfffffff) (CALL 0x7ffffffffffffff 0 0 0xffffffff 0 0xffffffff) (CALL 0x7ffffffffffffff 0 0xfffffff 0 0xfffffff 0) (CALL 0x7ffffffffffffff 0 0xffffffff 0 0xffffffff 0) (CALL 0x7ffffffffffffff 0 0xffffffffffffffff 0 0xffffffffffffffff 0) (CALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0) (CALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CREATE_Bounds2Filler.json ================================================ { "CREATE_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "100" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "shouldnotexist" : "1" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "100", "code" : "{ (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE 1 0 0xffffffff) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CREATE_Bounds3Filler.json ================================================ { "CREATE_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "100" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "shouldnotexist" : "1" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "100", "code" : "{ (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE 1 0 0xffffffffffffffff) (CREATE 1 0 0xffffffffffffffffffffffffffffffff) (CREATE 1 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CREATE 1 0xfffffff 0) (CREATE 1 0xffffffff 0) (CREATE 1 0xffffffffffffffff 0) (CREATE 1 0xffffffffffffffffffffffffffffffff 0) (CREATE 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) (CREATE 1 0xfffffff 0xfffffff) (CREATE 1 0xffffffff 0xffffffff) (CREATE 1 0xffffffffffffffff 0xffffffffffffffff) (CREATE 1 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (CREATE 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "1000000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/CREATE_BoundsFiller.json ================================================ { "CREATE_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "balance" : "100" }, "13136008b64ff592819b2fa6d43f2835c452020e" : { "shouldnotexist" : "1" }, "7c5a2c91b22d7a9226523d4ba717db6afb741ebd" : { "shouldnotexist" : "1" } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "100", "code" : "{ (MSTORE 0 0x6001600155601080600c6000396000f3006000355415600957005b6020356000 ) (MSTORE8 32 0x35) (MSTORE8 33 0x55) (CREATE 1 0 0) (CREATE 1 0 0xfffffff) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xfffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/DELEGATECALL_Bounds2Filler.json ================================================ { "DELEGATECALL_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (DELEGATECALL 0x7ffffffffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/DELEGATECALL_Bounds3Filler.json ================================================ { "DELEGATECALL_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (DELEGATECALL 0x7ffffffffffffff 0 0xffffffffffffffff 0 0xffffffffffffffff) (DELEGATECALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff) (DELEGATECALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DELEGATECALL 0x7ffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DELEGATECALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DELEGATECALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "1000000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/DELEGATECALL_BoundsFiller.json ================================================ { "DELEGATECALL_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{(DELEGATECALL 0x7ffffffffffffff 0 0 0 0) (DELEGATECALL 0x7ffffffffffffff 0 0xfffffff 0 0xfffffff) (DELEGATECALL 0x7ffffffffffffff 0 0xffffffff 0 0xffffffff) (DELEGATECALL 0x7ffffffffffffff 0xfffffff 0 0xfffffff 0) (DELEGATECALL 0x7ffffffffffffff 0xffffffff 0 0xffffffff 0) (DELEGATECALL 0x7ffffffffffffff 0xffffffffffffffff 0 0xffffffffffffffff 0) (DELEGATECALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0) (DELEGATECALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) (DELEGATECALL 0x7ffffffffffffff 0xfffffff 0xfffffff 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/DUP_BoundsFiller.json ================================================ { "DUP_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1" } } } ], "pre" : { "" : { "balance" : "0", "//code" : "{ (DUP1 0) (DUP1 0xffffffff) (DUP1 0xffffffffffffffff) (DUP1 0xffffffffffffffffffffffffffffffff) (DUP1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP2 0 0) (DUP2 0xffffffff 0xffffffff) (DUP2 0xffffffffffffffff 0xffffffffffffffff) (DUP2 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP2 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP3 0 0 0) (DUP3 0xffffffff 0xffffffff 0xffffffff) (DUP3 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DUP3 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP3 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP4 0 0 0 0) (DUP4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (DUP4 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DUP4 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP4 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP5 0 0 0 0 0) (DUP5 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (DUP5 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DUP5 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP5 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP6 0 0 0 0 0 0) (DUP6 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (DUP6 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DUP6 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP6 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP7 0 0 0 0 0 0 0) (DUP7 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (DUP7 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DUP7 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP7 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (DUP8 0 0 0 0 0 0 0 0) (DUP8 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (DUP8 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (DUP8 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (DUP8 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)}", "code" : ":raw 0x600080505063ffffffff80505067ffffffffffffffff8050506fffffffffffffffffffffffffffffffff8050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff805050600060008150505063ffffffff63ffffffff8150505067ffffffffffffffff67ffffffffffffffff815050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff815050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81505050600060006000825050505063ffffffff63ffffffff63ffffffff825050505067ffffffffffffffff67ffffffffffffffff67ffffffffffffffff82505050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff82505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8250505050600060006000600083505050505063ffffffff63ffffffff63ffffffff63ffffffff83505050505067ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff8350505050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff8350505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835050505050600060006000600060008450505050505063ffffffff63ffffffff63ffffffff63ffffffff63ffffffff8450505050505067ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff845050505050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff845050505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84505050505050600060006000600060006000855050505050505063ffffffff63ffffffff63ffffffff63ffffffff63ffffffff63ffffffff855050505050505067ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff85505050505050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff85505050505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8550505050505050600060006000600060006000600086505050505050505063ffffffff63ffffffff63ffffffff63ffffffff63ffffffff63ffffffff63ffffffff86505050505050505067ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff8650505050505050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff8650505050505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff865050505050505050600060006000600060006000600060008750505050505050505063ffffffff63ffffffff63ffffffff63ffffffff63ffffffff63ffffffff63ffffffff63ffffffff8750505050505050505067ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff67ffffffffffffffff875050505050505050506fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff875050505050505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7fffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "1000000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/FillStackFiller.json ================================================ { "FillStack" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "9223372036854775807", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "code" : "0x5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3504357155320803a975560005155", "nonce" : "0x00", "storage" : { } }, "" : { "//balance" : "3141638", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "code" : "0x5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3504357155320803a975560005155", "nonce" : "0x00", "storage" : { } }, "" : { "//balance" : "250000046", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "//comment" : "Some crafted code for the test", "code" : ":raw 0x5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3504357155320803a975560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3504357155320803a97" ], "gasLimit" : [ "3141592", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "264050067" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/JUMPI_BoundsFiller.json ================================================ { "JUMPI_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "code" : "0x600163ffffffff57600167ffffffffffffffff5760016fffffffffffffffffffffffffffffffff5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5700" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (JUMPI 0xffffffff 1) (JUMPI 0xffffffffffffffff 1) (JUMPI 0xffffffffffffffffffffffffffffffff 1) (JUMPI 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7fffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/JUMP_Bounds2Filler.json ================================================ { "JUMP_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "code" : "0x63ffffffff5667ffffffffffffffff566fffffffffffffffffffffffffffffffff567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56" } } } ], "pre" : { "" : { "balance" : "0", "// code" : "{ (JUMP 0xffffffff) (JUMP 0xffffffffffffffff) (JUMP 0xffffffffffffffffffffffffffffffff) (JUMP 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "code" : ":raw 0x63ffffffff5667ffffffffffffffff566fffffffffffffffffffffffffffffffff567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7fffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/JUMP_BoundsFiller.json ================================================ { "JUMP_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (JUMP 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7fffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/MLOAD_Bounds2Filler.json ================================================ { "MLOAD_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (MLOAD 0xffffffffffffffff) (MLOAD 0xffffffffffffffffffffffffffffffff) (MLOAD 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7ffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/MLOAD_Bounds3Filler.json ================================================ { "MLOAD_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "balance" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (MLOAD 0x400000) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7ffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "35000000", "250000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/MLOAD_BoundsFiller.json ================================================ { "MLOAD_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (MLOAD 0) (MLOAD 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7ffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/MSTORE_Bounds2Filler.json ================================================ { "MSTORE_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (MSTORE 0xffffffffff 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/MSTORE_Bounds2aFiller.json ================================================ { "MSTORE_Bounds2a" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun" : { "balance" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun" : { "balance" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (MSTORE 0x3fffff 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/MSTORE_BoundsFiller.json ================================================ { "MSTORE_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (MSTORE 0xffffffffffffffff 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/POP_BoundsFiller.json ================================================ { "POP_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (POP 0) (POP 0xffffffff) (POP 0xffffffffffffffff) (POP 0xffffffffffffffffffffffffffffffff) (POP 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7ffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/RETURN_BoundsFiller.json ================================================ { "RETURN_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "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", "0x10" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[1]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[2]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[3]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[4]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[5]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[6]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[7]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[8]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[9]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[10]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[11]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[12]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[13]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[14]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[15]] (CALL 0x7ffffffffffffff 0 0 0 0 0) [[16]] (CALL 0x7ffffffffffffff 0 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xfffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffff 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffffffffffffffffffffffff 0xfffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "500000", "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/SLOAD_BoundsFiller.json ================================================ { "SLOAD_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (SLOAD 0) (SLOAD 0xffffffff) (SLOAD 0xffffffffffffffff) (SLOAD 0xffffffffffffffffffffffffffffffff) (SLOAD 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7ffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/SSTORE_BoundsFiller.json ================================================ { "SSTORE_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "storage" : { "0xffffffff" : "0x01", "0xffffffffffffffff" : "0x01", "0xffffffffffffffffffffffffffffffff" : "0x01", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x01", "0x80" : "0xffffffffffffffffffffffffffffffff", "0x0100" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x20" : "0xffffffff", "0x40" : "0xffffffffffffffff" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (SSTORE 0xffffffff 1) (SSTORE 0xffffffffffffffff 1) (SSTORE 0xffffffffffffffffffffffffffffffff 1) (SSTORE 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1) (SSTORE 32 0xffffffff) (SSTORE 64 0xffffffffffffffff) (SSTORE 128 0xffffffffffffffffffffffffffffffff) (SSTORE 256 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0x7ffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stMemoryStressTest/mload32bitBound2Filler.json ================================================ { "mload32bitBound2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "37791080412587", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6401773594005160015500", "nonce" : "0x00", "storage" : { } }, "" : { "//balance" : "377910804069850", "code" : "0x", "nonce" : "0x01", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6401773594005160015500", "nonce" : "0x00", "storage" : { } }, "" : { "//balance" : "377910554219850", "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (MLOAD 6294967296) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "377910804219850", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/mload32bitBoundFiller.json ================================================ { "mload32bitBound" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "17592320524892", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6401000000005160015500", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6401000000005160015500", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (MLOAD 4294967296) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "17592320524892000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/mload32bitBound_MsizeFiller.json ================================================ { "mload32bitBound_Msize" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "175923205248920000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x600163ffffffff525960005500", "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x600163ffffffff525960005500", "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [4294967295] 1 [[ 0 ]] (MSIZE)} ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1759232052489200000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/mload32bitBound_return2Filler.json ================================================ { "mload32bitBound_return2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "175923205248920000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [ 0 ] 1 (RETURN 0 4294967295) } ", "storage": {} }, "" : { "balance" : "1759232052489200000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/mload32bitBound_returnFiller.json ================================================ { "mload32bitBound_return" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "17592320524892", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (RETURN 0 4294967295) } ", "storage": {} }, "" : { "balance" : "1759232052489200000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/static_CALL_Bounds2Filler.json ================================================ { "static_CALL_Bounds2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (STATICCALL 0x7ffffffffffffff 0xfffffff 0xfffffff 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/static_CALL_Bounds2aFiller.json ================================================ { "static_CALL_Bounds2a" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (STATICCALL 0x7ffffffffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/static_CALL_Bounds3Filler.json ================================================ { "static_CALL_Bounds3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (STATICCALL 0x7ffffffffffffff 0 0xffffffffffffffff 0 0xffffffffffffffff) (STATICCALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff) (STATICCALL 0x7ffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (STATICCALL 0x7ffffffffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff) (STATICCALL 0x7ffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff 0xffffffffffffffff) (STATICCALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffff) (STATICCALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryStressTest/static_CALL_BoundsFiller.json ================================================ { "static_CALL_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "//currentGasLimit" : "2^63-1", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (STATICCALL 0x7ffffffffffffff 0 0 0 0) (STATICCALL 0x7ffffffffffffff 0 0xfffffff 0 0xfffffff) (STATICCALL 0x7ffffffffffffff 0 0xffffffff 0 0xffffffff) (STATICCALL 0x7ffffffffffffff 0xfffffff 0 0xfffffff 0) (STATICCALL 0x7ffffffffffffff 0xffffffff 0 0xffffffff 0) (STATICCALL 0x7ffffffffffffff 0xffffffffffffffff 0 0xffffffffffffffff 0) (STATICCALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffff 0) (STATICCALL 0x7ffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 (ADD 1 (SLOAD 0))) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16777216" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stMemoryTest/bufferFiller.yml ================================================ # Check what happens with weird buffer lengths, 0 or negative. buffer: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 000000000000000000000000000000000000c0de: balance: '0x0ba1a9ce0ba1a9ce' code: | { (return 0 0x120) } nonce: 0 storage: {} # To check return. If it reverts the goat survives 000000000000000000000000000000000f30c0de: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; We get length from the caller (def 'length $0) (def 'offset $0x20) [[0]] 0 ; capricide (return offset length) } nonce: 0 storage: 0: 0x60A7 # To check revert. 000000000000000000000000000000000ff0c0de: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; We get length from the caller (def 'length $0) (def 'offset $0x20) (revert offset length) } nonce: 0 storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'opcode $4) (def 'bufferType $36) (def 'NOP 0) ; Variables (def 'length 0x2020) (def 'offset 0x2040) ; bufferTypes 0 is normal, 1 is length zero, 2 is negative length ; bufferType 3 is excessively long, for opcodes with bounds checking ; Add 0 for offset 0x100, 10 for offset 0x0 ; High offsets: ; 20 for 2^256-10 ; 21 for 2^31-1 ; 22 for 2^31 ; 23 for 2^32-1 ; 24 for 2^32 ; 25 for 2^63-1 ; 26 for 2^63 ; 27 for 2^64-1 ; 28 for 2^64 (if (= bufferType 0) { [length] 10 [offset] 0x100 } NOP) (if (= bufferType 1) { [length] 0 [offset] 0x100 } NOP) (if (= bufferType 2) { [length] (- 0 10) [offset] 0x100 } NOP) (if (= bufferType 3) { [length] 0x1000 [offset] 0x100 } NOP) (if (= bufferType 10) { [length] 10 [offset] 0x0 } NOP) (if (= bufferType 11) { [length] 0 [offset] 0x0 } NOP) (if (= bufferType 12) { [length] (- 0 10) [offset] 0x0 } NOP) (if (= bufferType 13) { [length] 0x1000 [offset] 0x0 } NOP) ; High memory offsets, should fail with out of gas (if (= bufferType 20) { [length] 5 [offset] (- 0 10) } NOP) (if (= bufferType 21) { [length] 5 [offset] 0x7FFFFFFF } NOP) (if (= bufferType 22) { [length] 5 [offset] 0x80000000 } NOP) (if (= bufferType 23) { [length] 5 [offset] 0xFFFFFFFF } NOP) (if (= bufferType 24) { [length] 5 [offset] 0x0100000000 } NOP) (if (= bufferType 25) { [length] 5 [offset] 0x7FFFFFFFFFFFFFFF } NOP) (if (= bufferType 26) { [length] 5 [offset] 0x8000000000000000 } NOP) (if (= bufferType 27) { [length] 5 [offset] 0xFFFFFFFFFFFFFFFF } NOP) (if (= bufferType 28) { [length] 5 [offset] 0x010000000000000000 } NOP) (if (= opcode 0x20) (sha3 @offset @length) NOP) (if (= opcode 0x37) (calldatacopy @offset 0 @length) NOP) (if (= opcode 0x39) (codecopy @offset 0 @length) NOP) (if (= opcode 0x3C) (extcodecopy 0xc0de @offset 0 @length) NOP) (if (= opcode 0x3E) (returndatacopy @offset 0 @length) NOP) (if (= opcode 0xA0) (log0 @offset @length) NOP) (if (= opcode 0xA1) (log1 @offset @length 1) NOP) (if (= opcode 0xA2) (log2 @offset @length 1 2) NOP) (if (= opcode 0xA3) (log3 @offset @length 1 2 3) NOP) (if (= opcode 0xA4) (log4 @offset @length 1 2 3 4) NOP) (if (= opcode 0xF0) (create 0 @offset @length) NOP) (if (= opcode 0xF1) (call 0x1000 0xc0de 0 @offset @length 0 0) NOP) (if (= opcode 0x1F1) (call 0x1000 0xc0de 0 0 0 @offset @length) NOP) (if (= opcode 0xF2) (callcode 0x1000 0xc0de 0 @offset @length 0 0) NOP) (if (= opcode 0x1F2) (callcode 0x1000 0xc0de 0 0 0 @offset @length) NOP) (if (= opcode 0xF4) (delegatecall 0x100000 0xc0de @offset @length 0 0) NOP) (if (= opcode 0x1F4) (delegatecall 0x100000 0xc0de 0 0 @offset @length) NOP) (if (= opcode 0xF5) (create2 0 @offset @length 0x5A17) NOP) (if (= opcode 0xFA) (staticcall 0x100000 0xc0de @offset @length 0 0) NOP) (if (= opcode 0x1FA) (staticcall 0x100000 0xc0de 0 0 @offset @length) NOP) ; RETURNDATACOPY, after making sure there is return data (if (= opcode 0x13E) { (call 0x1000 0xc0de 0 0 0 0x100 0x100) (returndatacopy @offset 0 @length) } NOP) ; check return, requires special handling (if (= opcode 0xF3) (call 0x100000 0xf30c0de 0 length 0x40 0 0) NOP) ; check revert, requires special handling (if (= opcode 0xFF) { (call 0x100000 0xff0c0de 0 length 0x40 0 0) [[0]] (returndatasize) } NOP) ; Kill the goat [[0x100]] 0 } nonce: '0' storage: # Sacrificial goat to tell reverts apart from successes 0x100: 0x60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Param #1: The opcode # Param #2: Buffer types: ########### Offset 0x100 ############### # 0 - Valid buffer length (0x100) # 1 - Buffer length zero # 2 - Negative buffer length # 3 - Longer buffer (0x1000) ########### Offset 0x0 ############### # 10 - Valid buffer length # 11 - Buffer length zero # 12 - Negative buffer length # 13 - Longer buffer (0x1000) ########## Very high offsets # 20 - Trying to use memory close to theoretical max (2^256-10) # 21 for 2^31-1 # 22 for 2^31 # 23 for 2^32-1 # 24 for 2^32 # 25 for 2^63-1 # 26 for 2^63 # 27 for 2^64-1 # 28 for 2^64 # # SHA3 - :label ok :abi f(uint,uint) 0x20 0 - :label ok :abi f(uint,uint) 0x20 1 - :label fail :abi f(uint,uint) 0x20 2 - :label ok :abi f(uint,uint) 0x20 10 - :label ok :abi f(uint,uint) 0x20 11 - :label fail :abi f(uint,uint) 0x20 12 - :label ok :abi f(uint,uint) 0x20 13 - :label fail :abi f(uint,uint) 0x20 20 - :label fail :abi f(uint,uint) 0x20 21 - :label fail :abi f(uint,uint) 0x20 22 - :label fail :abi f(uint,uint) 0x20 23 - :label fail :abi f(uint,uint) 0x20 24 - :label fail :abi f(uint,uint) 0x20 25 - :label fail :abi f(uint,uint) 0x20 26 - :label fail :abi f(uint,uint) 0x20 27 - :label fail :abi f(uint,uint) 0x20 28 # CALLDATACOPY - :label ok :abi f(uint,uint) 0x37 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x37 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x37 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x37 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x37 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x37 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x37 20 - :label fail :abi f(uint,uint) 0x37 21 - :label fail :abi f(uint,uint) 0x37 22 - :label fail :abi f(uint,uint) 0x37 23 - :label fail :abi f(uint,uint) 0x37 24 - :label fail :abi f(uint,uint) 0x37 25 - :label fail :abi f(uint,uint) 0x37 26 - :label fail :abi f(uint,uint) 0x37 27 - :label fail :abi f(uint,uint) 0x37 28 # CODECOPY - :label ok :abi f(uint,uint) 0x39 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x39 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x39 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x39 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x39 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x39 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x39 20 - :label fail :abi f(uint,uint) 0x39 21 - :label fail :abi f(uint,uint) 0x39 22 - :label fail :abi f(uint,uint) 0x39 23 - :label fail :abi f(uint,uint) 0x39 24 - :label fail :abi f(uint,uint) 0x39 25 - :label fail :abi f(uint,uint) 0x39 26 - :label fail :abi f(uint,uint) 0x39 27 - :label fail :abi f(uint,uint) 0x39 28 # EXTCODECOPY - :label ok :abi f(uint,uint) 0x3c 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x3c 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x3c 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x3c 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x3c 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x3c 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x3c 20 - :label fail :abi f(uint,uint) 0x3c 21 - :label fail :abi f(uint,uint) 0x3c 22 - :label fail :abi f(uint,uint) 0x3c 23 - :label fail :abi f(uint,uint) 0x3c 24 - :label fail :abi f(uint,uint) 0x3c 25 - :label fail :abi f(uint,uint) 0x3c 26 - :label fail :abi f(uint,uint) 0x3c 27 - :label fail :abi f(uint,uint) 0x3c 28 # RETURNDATACOPY, fails when there is no return data unless asked for 0 bytes - :label fail :abi f(uint,uint) 0x3e 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x3e 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x3e 2 # Negative buffer length - :label fail :abi f(uint,uint) 0x3e 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x3e 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x3e 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x3e 20 - :label fail :abi f(uint,uint) 0x3e 21 - :label fail :abi f(uint,uint) 0x3e 22 - :label fail :abi f(uint,uint) 0x3e 23 - :label fail :abi f(uint,uint) 0x3e 24 - :label fail :abi f(uint,uint) 0x3e 25 - :label fail :abi f(uint,uint) 0x3e 26 - :label fail :abi f(uint,uint) 0x3e 27 - :label fail :abi f(uint,uint) 0x3e 28 # RETURNDATACOPY, after making sure there is return data - :label ok :abi f(uint,uint) 0x13e 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x13e 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x13e 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x13e 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x13e 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x13e 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x13e 20 - :label fail :abi f(uint,uint) 0x13e 21 - :label fail :abi f(uint,uint) 0x13e 22 - :label fail :abi f(uint,uint) 0x13e 23 - :label fail :abi f(uint,uint) 0x13e 24 - :label fail :abi f(uint,uint) 0x13e 25 - :label fail :abi f(uint,uint) 0x13e 26 - :label fail :abi f(uint,uint) 0x13e 27 - :label fail :abi f(uint,uint) 0x13e 28 # RETURNDATACOPY has bounds checking - :label fail :abi f(uint,uint) 0x13e 3 # Huge (out of bounds) - :label fail :abi f(uint,uint) 0x13e 13 # Huge (out of bounds) # LOG0 - :label ok :abi f(uint,uint) 0xa0 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xa0 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xa0 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xa0 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xa0 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xa0 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xa0 20 - :label fail :abi f(uint,uint) 0xa0 21 - :label fail :abi f(uint,uint) 0xa0 22 - :label fail :abi f(uint,uint) 0xa0 23 - :label fail :abi f(uint,uint) 0xa0 24 - :label fail :abi f(uint,uint) 0xa0 25 - :label fail :abi f(uint,uint) 0xa0 26 - :label fail :abi f(uint,uint) 0xa0 27 - :label fail :abi f(uint,uint) 0xa0 28 # LOG1 - :label ok :abi f(uint,uint) 0xa1 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xa1 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xa1 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xa1 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xa1 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xa1 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xa1 20 - :label fail :abi f(uint,uint) 0xa1 21 - :label fail :abi f(uint,uint) 0xa1 22 - :label fail :abi f(uint,uint) 0xa1 23 - :label fail :abi f(uint,uint) 0xa1 24 - :label fail :abi f(uint,uint) 0xa1 25 - :label fail :abi f(uint,uint) 0xa1 26 - :label fail :abi f(uint,uint) 0xa1 27 - :label fail :abi f(uint,uint) 0xa1 28 # LOG2 - :label ok :abi f(uint,uint) 0xa2 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xa2 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xa2 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xa2 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xa2 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xa2 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xa2 20 - :label fail :abi f(uint,uint) 0xa2 21 - :label fail :abi f(uint,uint) 0xa2 22 - :label fail :abi f(uint,uint) 0xa2 23 - :label fail :abi f(uint,uint) 0xa2 24 - :label fail :abi f(uint,uint) 0xa2 25 - :label fail :abi f(uint,uint) 0xa2 26 - :label fail :abi f(uint,uint) 0xa2 27 - :label fail :abi f(uint,uint) 0xa2 28 # LOG3 - :label ok :abi f(uint,uint) 0xa3 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xa3 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xa3 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xa3 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xa3 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xa3 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xa3 20 - :label fail :abi f(uint,uint) 0xa3 21 - :label fail :abi f(uint,uint) 0xa3 22 - :label fail :abi f(uint,uint) 0xa3 23 - :label fail :abi f(uint,uint) 0xa3 24 - :label fail :abi f(uint,uint) 0xa3 25 - :label fail :abi f(uint,uint) 0xa3 26 - :label fail :abi f(uint,uint) 0xa3 27 - :label fail :abi f(uint,uint) 0xa3 28 # LOG4 - :label ok :abi f(uint,uint) 0xa4 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xa4 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xa4 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xa4 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xa4 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xa4 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xa4 20 - :label fail :abi f(uint,uint) 0xa4 21 - :label fail :abi f(uint,uint) 0xa4 22 - :label fail :abi f(uint,uint) 0xa4 23 - :label fail :abi f(uint,uint) 0xa4 24 - :label fail :abi f(uint,uint) 0xa4 25 - :label fail :abi f(uint,uint) 0xa4 26 - :label fail :abi f(uint,uint) 0xa4 27 - :label fail :abi f(uint,uint) 0xa4 28 # CREATE - :label ok :abi f(uint,uint) 0xf0 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xf0 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xf0 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xf0 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xf0 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xf0 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xf0 20 - :label fail :abi f(uint,uint) 0xf0 21 - :label fail :abi f(uint,uint) 0xf0 22 - :label fail :abi f(uint,uint) 0xf0 23 - :label fail :abi f(uint,uint) 0xf0 24 - :label fail :abi f(uint,uint) 0xf0 25 - :label fail :abi f(uint,uint) 0xf0 26 - :label fail :abi f(uint,uint) 0xf0 27 - :label fail :abi f(uint,uint) 0xf0 28 # CALL, check the args buffer - :label ok :abi f(uint,uint) 0xf1 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xf1 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xf1 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xf1 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xf1 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xf1 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xf1 20 - :label fail :abi f(uint,uint) 0xf1 21 - :label fail :abi f(uint,uint) 0xf1 22 - :label fail :abi f(uint,uint) 0xf1 23 - :label fail :abi f(uint,uint) 0xf1 24 - :label fail :abi f(uint,uint) 0xf1 25 - :label fail :abi f(uint,uint) 0xf1 26 - :label fail :abi f(uint,uint) 0xf1 27 - :label fail :abi f(uint,uint) 0xf1 28 # CALL, check the return buffer - :label ok :abi f(uint,uint) 0x1f1 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x1f1 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x1f1 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x1f1 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x1f1 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x1f1 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x1f1 20 - :label fail :abi f(uint,uint) 0x1f1 21 - :label fail :abi f(uint,uint) 0x1f1 22 - :label fail :abi f(uint,uint) 0x1f1 23 - :label fail :abi f(uint,uint) 0x1f1 24 - :label fail :abi f(uint,uint) 0x1f1 25 - :label fail :abi f(uint,uint) 0x1f1 26 - :label fail :abi f(uint,uint) 0x1f1 27 - :label fail :abi f(uint,uint) 0x1f1 28 # CALLCODE, check the args buffer - :label ok :abi f(uint,uint) 0xf2 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xf2 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xf2 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xf2 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xf2 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xf2 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xf2 20 - :label fail :abi f(uint,uint) 0xf2 21 - :label fail :abi f(uint,uint) 0xf2 22 - :label fail :abi f(uint,uint) 0xf2 23 - :label fail :abi f(uint,uint) 0xf2 24 - :label fail :abi f(uint,uint) 0xf2 25 - :label fail :abi f(uint,uint) 0xf2 26 - :label fail :abi f(uint,uint) 0xf2 27 - :label fail :abi f(uint,uint) 0xf2 28 # CALLCODE, check the return buffer - :label ok :abi f(uint,uint) 0x1f2 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x1f2 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x1f2 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x1f2 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x1f2 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x1f2 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x1f2 20 - :label fail :abi f(uint,uint) 0x1f2 21 - :label fail :abi f(uint,uint) 0x1f2 22 - :label fail :abi f(uint,uint) 0x1f2 23 - :label fail :abi f(uint,uint) 0x1f2 24 - :label fail :abi f(uint,uint) 0x1f2 25 - :label fail :abi f(uint,uint) 0x1f2 26 - :label fail :abi f(uint,uint) 0x1f2 27 - :label fail :abi f(uint,uint) 0x1f2 28 # DELEGATECALL, check the args buffer - :label ok :abi f(uint,uint) 0xf4 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xf4 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xf4 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xf4 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xf4 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xf4 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xf4 20 - :label fail :abi f(uint,uint) 0xf4 21 - :label fail :abi f(uint,uint) 0xf4 22 - :label fail :abi f(uint,uint) 0xf4 23 - :label fail :abi f(uint,uint) 0xf4 24 - :label fail :abi f(uint,uint) 0xf4 25 - :label fail :abi f(uint,uint) 0xf4 26 - :label fail :abi f(uint,uint) 0xf4 27 - :label fail :abi f(uint,uint) 0xf4 28 # DELEGATECALL, check the return buffer - :label ok :abi f(uint,uint) 0x1f4 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x1f4 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x1f4 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x1f4 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x1f4 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x1f4 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x1f4 20 - :label fail :abi f(uint,uint) 0x1f4 21 - :label fail :abi f(uint,uint) 0x1f4 22 - :label fail :abi f(uint,uint) 0x1f4 23 - :label fail :abi f(uint,uint) 0x1f4 24 - :label fail :abi f(uint,uint) 0x1f4 25 - :label fail :abi f(uint,uint) 0x1f4 26 - :label fail :abi f(uint,uint) 0x1f4 27 - :label fail :abi f(uint,uint) 0x1f4 28 # CREATE2 - :label ok :abi f(uint,uint) 0xf5 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xf5 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xf5 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xf5 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xf5 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xf5 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xf5 20 - :label fail :abi f(uint,uint) 0xf5 21 - :label fail :abi f(uint,uint) 0xf5 22 - :label fail :abi f(uint,uint) 0xf5 23 - :label fail :abi f(uint,uint) 0xf5 24 - :label fail :abi f(uint,uint) 0xf5 25 - :label fail :abi f(uint,uint) 0xf5 26 - :label fail :abi f(uint,uint) 0xf5 27 - :label fail :abi f(uint,uint) 0xf5 28 # STATICCALL, check the args buffer - :label ok :abi f(uint,uint) 0xfa 0 # Valid buffer length - :label ok :abi f(uint,uint) 0xfa 1 # Buffer length zero - :label fail :abi f(uint,uint) 0xfa 2 # Negative buffer length - :label ok :abi f(uint,uint) 0xfa 10 # Valid buffer length - :label ok :abi f(uint,uint) 0xfa 11 # Buffer length zero - :label fail :abi f(uint,uint) 0xfa 12 # Negative buffer length - :label fail :abi f(uint,uint) 0xfa 20 - :label fail :abi f(uint,uint) 0xfa 21 - :label fail :abi f(uint,uint) 0xfa 22 - :label fail :abi f(uint,uint) 0xfa 23 - :label fail :abi f(uint,uint) 0xfa 24 - :label fail :abi f(uint,uint) 0xfa 25 - :label fail :abi f(uint,uint) 0xfa 26 - :label fail :abi f(uint,uint) 0xfa 27 - :label fail :abi f(uint,uint) 0xfa 28 # STATICCALL, check the return buffer - :label ok :abi f(uint,uint) 0x1fa 0 # Valid buffer length - :label ok :abi f(uint,uint) 0x1fa 1 # Buffer length zero - :label fail :abi f(uint,uint) 0x1fa 2 # Negative buffer length - :label ok :abi f(uint,uint) 0x1fa 10 # Valid buffer length - :label ok :abi f(uint,uint) 0x1fa 11 # Buffer length zero - :label fail :abi f(uint,uint) 0x1fa 12 # Negative buffer length - :label fail :abi f(uint,uint) 0x1fa 20 - :label fail :abi f(uint,uint) 0x1fa 21 - :label fail :abi f(uint,uint) 0x1fa 22 - :label fail :abi f(uint,uint) 0x1fa 23 - :label fail :abi f(uint,uint) 0x1fa 24 - :label fail :abi f(uint,uint) 0x1fa 25 - :label fail :abi f(uint,uint) 0x1fa 26 - :label fail :abi f(uint,uint) 0x1fa 27 - :label fail :abi f(uint,uint) 0x1fa 28 # RETURN, needs special handling - :label ok-f3 :abi f(uint,uint) 0xf3 0 # Valid buffer length - :label ok-f3 :abi f(uint,uint) 0xf3 1 # Buffer length zero - :label fail-f3 :abi f(uint,uint) 0xf3 2 # Negative buffer length - :label ok-f3 :abi f(uint,uint) 0xf3 10 # Valid buffer length - :label ok-f3 :abi f(uint,uint) 0xf3 11 # Buffer length zero - :label fail-f3 :abi f(uint,uint) 0xf3 12 # Negative buffer length - :label fail-f3 :abi f(uint,uint) 0xf3 20 - :label fail-f3 :abi f(uint,uint) 0xf3 21 - :label fail-f3 :abi f(uint,uint) 0xf3 22 - :label fail-f3 :abi f(uint,uint) 0xf3 23 - :label fail-f3 :abi f(uint,uint) 0xf3 24 - :label fail-f3 :abi f(uint,uint) 0xf3 25 - :label fail-f3 :abi f(uint,uint) 0xf3 26 - :label fail-f3 :abi f(uint,uint) 0xf3 27 - :label fail-f3 :abi f(uint,uint) 0xf3 28 # Revert, needs special handling - :label ff-valid :abi f(uint,uint) 0xff 0 # Valid buffer length - :label ff-zero :abi f(uint,uint) 0xff 1 # Zero buffer length - :label ff-zero :abi f(uint,uint) 0xff 2 # Invalid buffer length - :label ff-valid :abi f(uint,uint) 0xff 10 # Valid buffer length - :label ff-zero :abi f(uint,uint) 0xff 11 # Zero buffer length - :label ff-zero :abi f(uint,uint) 0xff 12 # Invalid buffer length - :label ff-zero :abi f(uint,uint) 0xff 20 - :label ff-zero :abi f(uint,uint) 0xff 21 - :label ff-zero :abi f(uint,uint) 0xff 22 - :label ff-zero :abi f(uint,uint) 0xff 23 - :label ff-zero :abi f(uint,uint) 0xff 24 - :label ff-zero :abi f(uint,uint) 0xff 25 - :label ff-zero :abi f(uint,uint) 0xff 26 - :label ff-zero :abi f(uint,uint) 0xff 27 - :label ff-zero :abi f(uint,uint) 0xff 28 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # No revert, valid value - indexes: data: :label ok gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x100: 0 # Revert, invalid value. The goat survives - indexes: data: :label fail gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x100: 0x60A7 # RETURN was a return, not a revert - indexes: data: :label ok-f3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000f30c0de: storage: 0x0: 0 # RETURN failed, caused a revert - indexes: data: :label fail-f3 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: 000000000000000000000000000000000f30c0de: storage: 0x0: 0x60A7 # REVERT with a valid buffer - indexes: data: :label ff-valid gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x0: 10 # REVERT with a size 0 buffer, or a REVERT that fails and therefore returns zero - indexes: data: :label ff-zero gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x0: 0 ================================================ FILE: tests/static/state_tests/stMemoryTest/bufferSrcOffsetFiller.yml ================================================ # Check what happens with various values of the source offset # in opcodes that copy between somewhere else and memory bufferSrcOffset: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: 000000000000000000000000000000000000c0de: balance: '0x0ba1a9ce0ba1a9ce' code: | { (return 0 0x120) } nonce: 0 storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { (def 'opcode $4) (def 'bufferType $36) (def 'bufferLength $68) (def 'NOP 0) ; Variables (def 'srcOffset 0x2020) (def 'offset 0x2040) (def 'length 0x2060) [offset] 0 ; Write to the first word in memory ; bufferType 0 is no offset (0x0) ; bufferType 1 is a reasonable number as an offset (0x10) ; bufferType 2 is a high number that could happen in theory (0x100000) ; bufferType 3 is a negative number (- 0 0x10) ; bufferType 4 is 2^31-1 0x7FFFFFFF ; bufferType 5 is 2^31 0x80000000 ; bufferType 6 is 2^32-1 0xFFFFFFFF ; bufferType 7 is 2^32 0x0100000000 ; bufferType 8 is 2^63-1 0x7FFFFFFFFFFFFFFF ; bufferType 9 is 2^63 0x8000000000000000 ; bufferType 10 is 2^64-1 0xFFFFFFFFFFFFFFFF ; bufferType 11 is 2^64 0x010000000000000000 (if (= bufferType 0) [srcOffset] 0 NOP) (if (= bufferType 1) [srcOffset] 0x10 NOP) (if (= bufferType 2) [srcOffset] 0100000 NOP) (if (= bufferType 3) [srcOffset] (- 0 0x10) NOP) (if (= bufferType 4) [srcOffset] 0x7FFFFFFF NOP) (if (= bufferType 5) [srcOffset] 0x80000000 NOP) (if (= bufferType 6) [srcOffset] 0xFFFFFFFF NOP) (if (= bufferType 7) [srcOffset] 0x0100000000 NOP) (if (= bufferType 8) [srcOffset] 0x7FFFFFFFFFFFFFFF NOP) (if (= bufferType 9) [srcOffset] 0x8000000000000000 NOP) (if (= bufferType 10) [srcOffset] 0xFFFFFFFFFFFFFFFF NOP) (if (= bufferType 11) [srcOffset] 0x010000000000000000 NOP) ; bufferLength 0 is zero length ; bufferLength 1 is a reasonable number as the length (0x10) ; bufferLength 2 is a high number that could happen in theory (0x100000) ; bufferLength 3 is a negative number (- 0 0x10) (if (= bufferLength 0) [length] 0 NOP) (if (= bufferLength 1) [length] 0x10 NOP) (if (= bufferLength 2) [length] 0100000 NOP) (if (= bufferLength 3) [length] (- 0 0x10) NOP) (if (= opcode 0x37) (calldatacopy @offset @srcOffset @length) NOP) (if (= opcode 0x39) (codecopy @offset @srcOffset @length) NOP) (if (= opcode 0x3C) (extcodecopy 0xc0de @offset @srcOffset @length) NOP) (if (= opcode 0x3E) (returndatacopy @offset @srcOffset @length) NOP) ; RETURNDATACOPY, after making sure there is return data (if (= opcode 0x13E) { (call 0x1000 0xc0de 0 0 0 0x100 0x100) (returndatacopy @offset @srcOffset @length) } NOP) ; Kill the goat [[0x100]] 0 ; Write the first two words of memory, which are copied from the source, ; to storage. This is important for cases 4-11, which discover wrap-arounds (if (>= bufferType 3) { [[0]] @0x00 [[1]] @0x20 } NOP) } nonce: '0' storage: # Sacrificial goat to tell reverts apart from successes 0x100: 0x60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Param #1: The opcode # Param #2: bufferType (the source offset value) # 0 is no offset (0x0) # 1 is a reasonable number as an offset (0x10) # 2 is a high number that could happen in theory (0x100000) # 3 is a negative number (- 0 0x10) # At these (4-11) offsets the value should be zero, but if they are type cast # in correctly they wrap around to zero, so we make sure the copied to memory # value is zero # # 4 is 2^31-1 # 5 is 2^31 # 6 is 2^32-1 # 7 is 2^32 # 8 is 2^63-1 # 9 is 2^63 # 10 is 2^64-1 # 11 is 2^64 # Param #3: The bufferLength # 0 is zero length # 1 is a reasonable number as the length (0x10) # 2 is a high number that could happen in theory (0x100000) # 3 is a negative number (- 0 0x10) # CALLDATACOPY # Everything is OK except for a negative length - :label ok :abi f(uint,uint,uint) 0x37 0 0 - :label ok :abi f(uint,uint,uint) 0x37 0 1 - :label ok :abi f(uint,uint,uint) 0x37 0 2 - :label fail :abi f(uint,uint,uint) 0x37 0 3 - :label ok :abi f(uint,uint,uint) 0x37 1 0 - :label ok :abi f(uint,uint,uint) 0x37 1 1 - :label ok :abi f(uint,uint,uint) 0x37 1 2 - :label fail :abi f(uint,uint,uint) 0x37 1 3 - :label ok :abi f(uint,uint,uint) 0x37 2 0 - :label ok :abi f(uint,uint,uint) 0x37 2 1 - :label ok :abi f(uint,uint,uint) 0x37 2 2 - :label fail :abi f(uint,uint,uint) 0x37 2 3 - :label ok :abi f(uint,uint,uint) 0x37 3 0 - :label ok :abi f(uint,uint,uint) 0x37 3 1 - :label ok :abi f(uint,uint,uint) 0x37 3 2 - :label fail :abi f(uint,uint,uint) 0x37 3 3 - :label ok :abi f(uint,uint,uint) 0x37 4 1 - :label ok :abi f(uint,uint,uint) 0x37 5 1 - :label ok :abi f(uint,uint,uint) 0x37 6 1 - :label ok :abi f(uint,uint,uint) 0x37 7 1 - :label ok :abi f(uint,uint,uint) 0x37 8 1 - :label ok :abi f(uint,uint,uint) 0x37 9 1 - :label ok :abi f(uint,uint,uint) 0x37 10 1 - :label ok :abi f(uint,uint,uint) 0x37 11 1 # CODECOPY # Everything is OK except for a negative length - :label ok :abi f(uint,uint,uint) 0x39 0 0 - :label ok :abi f(uint,uint,uint) 0x39 0 1 - :label ok :abi f(uint,uint,uint) 0x39 0 2 - :label fail :abi f(uint,uint,uint) 0x39 0 3 - :label ok :abi f(uint,uint,uint) 0x39 1 0 - :label ok :abi f(uint,uint,uint) 0x39 1 1 - :label ok :abi f(uint,uint,uint) 0x39 1 2 - :label fail :abi f(uint,uint,uint) 0x39 1 3 - :label ok :abi f(uint,uint,uint) 0x39 2 0 - :label ok :abi f(uint,uint,uint) 0x39 2 1 - :label ok :abi f(uint,uint,uint) 0x39 2 2 - :label fail :abi f(uint,uint,uint) 0x39 2 3 - :label ok :abi f(uint,uint,uint) 0x39 3 0 - :label ok :abi f(uint,uint,uint) 0x39 3 1 - :label ok :abi f(uint,uint,uint) 0x39 3 2 - :label fail :abi f(uint,uint,uint) 0x39 3 3 - :label ok :abi f(uint,uint,uint) 0x39 4 1 - :label ok :abi f(uint,uint,uint) 0x39 5 1 - :label ok :abi f(uint,uint,uint) 0x39 6 1 - :label ok :abi f(uint,uint,uint) 0x39 7 1 - :label ok :abi f(uint,uint,uint) 0x39 8 1 - :label ok :abi f(uint,uint,uint) 0x39 9 1 - :label ok :abi f(uint,uint,uint) 0x39 10 1 - :label ok :abi f(uint,uint,uint) 0x39 11 1 # EXTCODECOPY # Everything is OK except for a negative length - :label ok :abi f(uint,uint,uint) 0x3C 0 0 - :label ok :abi f(uint,uint,uint) 0x3C 0 1 - :label ok :abi f(uint,uint,uint) 0x3C 0 2 - :label fail :abi f(uint,uint,uint) 0x3C 0 3 - :label ok :abi f(uint,uint,uint) 0x3C 1 0 - :label ok :abi f(uint,uint,uint) 0x3C 1 1 - :label ok :abi f(uint,uint,uint) 0x3C 1 2 - :label fail :abi f(uint,uint,uint) 0x3C 1 3 - :label ok :abi f(uint,uint,uint) 0x3C 2 0 - :label ok :abi f(uint,uint,uint) 0x3C 2 1 - :label ok :abi f(uint,uint,uint) 0x3C 2 2 - :label fail :abi f(uint,uint,uint) 0x3C 2 3 - :label ok :abi f(uint,uint,uint) 0x3C 3 0 - :label ok :abi f(uint,uint,uint) 0x3C 3 1 - :label ok :abi f(uint,uint,uint) 0x3C 3 2 - :label fail :abi f(uint,uint,uint) 0x3C 3 3 - :label ok :abi f(uint,uint,uint) 0x3C 4 1 - :label ok :abi f(uint,uint,uint) 0x3C 5 1 - :label ok :abi f(uint,uint,uint) 0x3C 6 1 - :label ok :abi f(uint,uint,uint) 0x3C 7 1 - :label ok :abi f(uint,uint,uint) 0x3C 8 1 - :label ok :abi f(uint,uint,uint) 0x3C 9 1 - :label ok :abi f(uint,uint,uint) 0x3C 10 1 - :label ok :abi f(uint,uint,uint) 0x3C 11 1 # RETURNDATACOPY, fails when there is no return data unless asked for 0 bytes # at offset 0 - :label ok :abi f(uint,uint,uint) 0x3E 0 0 - :label fail :abi f(uint,uint,uint) 0x3E 0 1 - :label fail :abi f(uint,uint,uint) 0x3E 0 2 - :label fail :abi f(uint,uint,uint) 0x3E 0 3 - :label fail :abi f(uint,uint,uint) 0x3E 1 0 - :label fail :abi f(uint,uint,uint) 0x3E 1 1 - :label fail :abi f(uint,uint,uint) 0x3E 1 2 - :label fail :abi f(uint,uint,uint) 0x3E 1 3 - :label fail :abi f(uint,uint,uint) 0x3E 2 0 - :label fail :abi f(uint,uint,uint) 0x3E 2 1 - :label fail :abi f(uint,uint,uint) 0x3E 2 2 - :label fail :abi f(uint,uint,uint) 0x3E 2 3 - :label fail :abi f(uint,uint,uint) 0x3E 3 0 - :label fail :abi f(uint,uint,uint) 0x3E 3 1 - :label fail :abi f(uint,uint,uint) 0x3E 3 2 - :label fail :abi f(uint,uint,uint) 0x3E 3 3 - :label fail :abi f(uint,uint,uint) 0x3E 4 1 - :label fail :abi f(uint,uint,uint) 0x3E 5 1 - :label fail :abi f(uint,uint,uint) 0x3E 6 1 - :label fail :abi f(uint,uint,uint) 0x3E 7 1 - :label fail :abi f(uint,uint,uint) 0x3E 8 1 - :label fail :abi f(uint,uint,uint) 0x3E 9 1 - :label fail :abi f(uint,uint,uint) 0x3E 10 1 - :label fail :abi f(uint,uint,uint) 0x3E 11 1 # RETURNDATACOPY, after making sure there is return data # fails if attempting to read beyond the bounds of # that data - :label ok :abi f(uint,uint,uint) 0x13E 0 0 - :label ok :abi f(uint,uint,uint) 0x13E 0 1 - :label fail :abi f(uint,uint,uint) 0x13E 0 2 - :label fail :abi f(uint,uint,uint) 0x13E 0 3 - :label ok :abi f(uint,uint,uint) 0x13E 1 0 - :label ok :abi f(uint,uint,uint) 0x13E 1 1 - :label fail :abi f(uint,uint,uint) 0x13E 1 2 - :label fail :abi f(uint,uint,uint) 0x13E 1 3 - :label fail :abi f(uint,uint,uint) 0x13E 2 0 - :label fail :abi f(uint,uint,uint) 0x13E 2 1 - :label fail :abi f(uint,uint,uint) 0x13E 2 2 - :label fail :abi f(uint,uint,uint) 0x13E 2 3 - :label fail :abi f(uint,uint,uint) 0x13E 3 0 - :label fail :abi f(uint,uint,uint) 0x13E 3 1 - :label fail :abi f(uint,uint,uint) 0x13E 3 2 - :label fail :abi f(uint,uint,uint) 0x13E 3 3 - :label fail :abi f(uint,uint,uint) 0x13E 4 1 - :label fail :abi f(uint,uint,uint) 0x13E 5 1 - :label fail :abi f(uint,uint,uint) 0x13E 6 1 - :label fail :abi f(uint,uint,uint) 0x13E 7 1 - :label fail :abi f(uint,uint,uint) 0x13E 8 1 - :label fail :abi f(uint,uint,uint) 0x13E 9 1 - :label fail :abi f(uint,uint,uint) 0x13E 10 1 - :label fail :abi f(uint,uint,uint) 0x13E 11 1 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # No revert, valid value - indexes: data: :label ok gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: # Values copied from close to the wrap-around boundary 0x000: 0 0x001: 0 # Dead goat 0x100: 0 # Revert, invalid value. The goat survives - indexes: data: :label fail gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x100: 0x60A7 ================================================ FILE: tests/static/state_tests/stMemoryTest/callDataCopyOffsetFiller.json ================================================ { "callDataCopyOffset" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" : { "balance" : "1000000000000000000", "//codeDescription": "/* fill memory up */ /* copy call data to memory with offset > call data length */ /* only part of memory should be zeroed out */", "code": "{ (MSTORE 0x00 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CALLDATACOPY 0x00 0xffff 0x10) (SSTORE 0x00 (MLOAD 0x00)) }", "nonce" : "1", "storage": { } }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "//codeDescription": "{ /*store call data in memory*/ /* make call with the call data*/ ) }", "//code": "{ (asm 0x0123456789abcdef 0x00 mstore) (CALL 0xffff 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0x00 0x00 0x0f 0x00 0x00) }", "//code" : ":raw 0x670123456789abcdef60005260006000600f6000600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61fffff1", "code": ":yul berlin { mstore(0, 0x0123456789abcdef) pop(call(0xffff,0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,0, 0,0x0f, 0,0)) }", "nonce" : "1", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/calldatacopy_dejavu2Filler.json ================================================ { "calldatacopy_dejavu2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0xff" : "0x0badc0ffee" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "//code" : ":raw 0x6005565b005b6042601f536101036000601f3760005180606014600357640badc0ffee60ff55", "code" : ":yul berlin { mstore8(0x1f, 0x42) calldatacopy(0x1f, 0, 0x0103) let mem := mload(0) if eq(mem,0x60) { stop() } sstore(0xff, 0x0badc0ffee) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/calldatacopy_dejavuFiller.json ================================================ { "calldatacopy_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF630FFFFFFF630FFFFFFF37", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/codeCopyOffsetFiller.json ================================================ { "codeCopyOffset" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "//codeDescription": "/* fill memory up */ /* copy call data to memory with offset > call data length */ /* only part of memory should be zeroed out */", "code": "{ (MSTORE 0x00 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (CODECOPY 0x00 0xffff 0x10) (SSTORE 0x00 (MLOAD 0x00)) }", "nonce" : "1", "storage": { } }, "" : { "balance" : "1000000000000000000", "//codeDescription": "{ /*store call data in memory*/ /* make call with the call data*/ ) }", "//code": "{ (asm 0x0123456789abcdef 0x00 mstore) (CALL 0xffff 0x00 0x00 0x0f 0x00 0x00) }", "//code" : ":raw 0x670123456789abcdef60005260006000600f600060007361fffff1", "code" : ":yul berlin { mstore(0, 0x0123456789abcdef) pop(call(0xffff, , 0, 0, 0x0f, 0, 0)) } ", "nonce" : "1", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/codecopy_dejavu2Filler.json ================================================ { "codecopy_dejavu2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":yul berlin { codecopy(0x1f, 0x010000000000000001, 0x0a) let mem := mload(0) if eq(mem, 0) {stop()} }", "//code" : "raw 0x600a68010000000000000001601f3960005180600014600357640badc0ffee60", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/codecopy_dejavuFiller.json ================================================ { "codecopy_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF630FFFFFFF630FFFFFFF39", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/extcodecopy_dejavuFiller.json ================================================ { "extcodecopy_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF630FFFFFFF630FFFFFFF3C", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/log1_dejavuFiller.json ================================================ { "log1_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF630FFFFFFFA1", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/log2_dejavuFiller.json ================================================ { "log2_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF630FFFFFFFA2", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/log3_dejavuFiller.json ================================================ { "log3_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF60FF630FFFFFFFA2", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/log4_dejavuFiller.json ================================================ { "log4_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF60FF60FF630FFFFFFFA2", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem0b_singleByteFiller.json ================================================ { "mem0b_singleByte" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem31b_singleByteFiller.json ================================================ { "mem31b_singleByte" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 30 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32b_singleByteFiller.json ================================================ { "mem32b_singleByte" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 31 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb+1Filler.json ================================================ { "mem32kb+1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d20", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31969 42) [[ 1 ]] (MLOAD 31969) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb+31Filler.json ================================================ { "mem32kb+31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d20", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31999 42) [[ 1 ]] (MLOAD 31999) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb+32Filler.json ================================================ { "mem32kb+32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d20", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 32000 42) [[ 1 ]] (MLOAD 32000) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb+33Filler.json ================================================ { "mem32kb+33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d40", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 32001 42) [[ 1 ]] (MLOAD 32001) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb-1Filler.json ================================================ { "mem32kb-1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d00", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31967 42) [[ 1 ]] (MLOAD 31967) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb-31Filler.json ================================================ { "mem32kb-31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d00", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31937 42) [[ 1 ]] (MLOAD 31937) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb-32Filler.json ================================================ { "mem32kb-32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7ce0", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31936 42) [[ 1 ]] (MLOAD 31936) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb-33Filler.json ================================================ { "mem32kb-33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7ce0", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31935 42) [[ 1 ]] (MLOAD 31935) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kbFiller.json ================================================ { "mem32kb" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d00", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 31968 42) [[ 1 ]] (MLOAD 31968) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte+1Filler.json ================================================ { "mem32kb_singleByte+1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 32000 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte+31Filler.json ================================================ { "mem32kb_singleByte+31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 32030 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte+32Filler.json ================================================ { "mem32kb_singleByte+32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 32031 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte+33Filler.json ================================================ { "mem32kb_singleByte+33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d40" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 32032 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte-1Filler.json ================================================ { "mem32kb_singleByte-1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 31998 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte-31Filler.json ================================================ { "mem32kb_singleByte-31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 31968 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte-32Filler.json ================================================ { "mem32kb_singleByte-32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7ce0" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 31967 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByte-33Filler.json ================================================ { "mem32kb_singleByte-33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7ce0" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 31966 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem32kb_singleByteFiller.json ================================================ { "mem32kb_singleByte" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x7d00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 31999 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem33b_singleByteFiller.json ================================================ { "mem33b_singleByte" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0x40" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 32 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb+1Filler.json ================================================ { "mem64kb+1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa20", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63969 42) [[ 1 ]] (MLOAD 63969) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb+31Filler.json ================================================ { "mem64kb+31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa20", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63999 42) [[ 1 ]] (MLOAD 63999) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb+32Filler.json ================================================ { "mem64kb+32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa20", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 64000 42) [[ 1 ]] (MLOAD 64000) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb+33Filler.json ================================================ { "mem64kb+33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa40", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 64001 42) [[ 1 ]] (MLOAD 64001) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb-1Filler.json ================================================ { "mem64kb-1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa00", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63967 42) [[ 1 ]] (MLOAD 63967) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb-31Filler.json ================================================ { "mem64kb-31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa00", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63937 42) [[ 1 ]] (MLOAD 63937) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb-32Filler.json ================================================ { "mem64kb-32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xf9e0", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63936 42) [[ 1 ]] (MLOAD 63936) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb-33Filler.json ================================================ { "mem64kb-33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xf9e0", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63935 42) [[ 1 ]] (MLOAD 63935) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kbFiller.json ================================================ { "mem64kb" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa00", "0x01" : "0x2a" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 63968 42) [[ 1 ]] (MLOAD 63968) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte+1Filler.json ================================================ { "mem64kb_singleByte+1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 64000 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte+31Filler.json ================================================ { "mem64kb_singleByte+31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 64030 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte+32Filler.json ================================================ { "mem64kb_singleByte+32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa20" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 64031 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte+33Filler.json ================================================ { "mem64kb_singleByte+33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa40" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 64032 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte-1Filler.json ================================================ { "mem64kb_singleByte-1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 63998 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte-31Filler.json ================================================ { "mem64kb_singleByte-31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 63968 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte-32Filler.json ================================================ { "mem64kb_singleByte-32" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xf9e0" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 63967 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByte-33Filler.json ================================================ { "mem64kb_singleByte-33" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xf9e0" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 63966 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mem64kb_singleByteFiller.json ================================================ { "mem64kb_singleByte" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { "0x00" : "0xfa00" } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 63999 42) [[ 0 ]] (MSIZE) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/memCopySelfFiller.yml ================================================ # Copy memory over itself, a weird edge case that caused # Geth <1.10.8 to have an inconsistent state when a CALL to # precompile 4 (the identity precompile) overwrote the memory # where the call parameters were. It caused RETURNDATACOPY # to be invalid afterwards # # This is explained here: https://twitter.com/kelvinfichter/status/1431336698911338496 memCopySelf: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let idPrecomp := 0x04 for { let i := 0} lt(i, 0x0F) { i := add(i, 1) } { mstore8(i, mul(add(i, 1), 0x11)) } // The initial memory value sstore(0, mload(0)) // Call idPrecomp pop(call(gas(), idPrecomp, 0, 0, 10, // input buffer 2, 10 // output buffer (overlapping the input) )) // Memory value immediately after the call sstore(1, mload(0)) // Copy the return data (to check if it is corrupt) returndatacopy(0x20, 0, 10) sstore(2, mload(0x20)) } nonce: 1 storage: 0: 0x60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: - 0x gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: secretKey: "" value: - 0 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # Initial data 0x00: 0x112233445566778899aabbccddeeff0000000000000000000000000000000000 # Data after the call (copied correctly, two bytes ahead of where it was) 0x01: 0x1122112233445566778899aaddeeff0000000000000000000000000000000000 # Result of RETURNDATACOPY, which should be the same as the initial # data, not the new data 0x02: 0x112233445566778899aa00000000000000000000000000000000000000000000 ================================================ FILE: tests/static/state_tests/stMemoryTest/memReturnFiller.json ================================================ { "memReturn" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (CALLDATACOPY 0 0 (CALLDATASIZE)) (RETURN 0 (MSIZE)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "0xff55883355001144bbccddffeeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mload16bitBoundFiller.json ================================================ { "mload16bitBound" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "17592320524892", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (MLOAD 65536) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "175923205248920", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mload8bitBoundFiller.json ================================================ { "mload8bitBound" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] (MLOAD 256) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "220000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mload_dejavuFiller.json ================================================ { "mload_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x630FFFFFFF51", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mstore_dejavuFiller.json ================================================ { "mstore_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60F1630FFFFFFF52", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/mstroe8_dejavuFiller.json ================================================ { "mstroe8_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60F1630FFFFFFF53", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/oogFiller.yml ================================================ # Check for out of gas with various memory opcodes oog: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # SHA3 0000000000000000000000000000000000010020: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Instead of keccak256, which seems to be optimized into // not happening pop(verbatim_2i_1o(hex"20", 0, 0x1000)) } nonce: 1 storage: {} # CALLDATACOPY 0000000000000000000000000000000000010037: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { calldatacopy(0,0,0x1000) } nonce: 1 storage: {} # CODECOPY 0000000000000000000000000000000000010039: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { codecopy(0,0,0x1000) } nonce: 1 storage: {} # EXTCODECOPY 000000000000000000000000000000000001003C: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { extcodecopy(address(),0,0,0x1000) } nonce: 1 storage: {} # RETURNDATACOPY 000000000000000000000000000000000001003E: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Make sure there is return data to be copied pop(call(gas(), 0x1113e, 0, 0, 0x20, 0, 0x20)) returndatacopy(0x1000,0,0x10) } nonce: 1 storage: {} # Create return data 000000000000000000000000000000000001113E: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0, 0x0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20) return(0,0x20) } nonce: 1 storage: {} # MLOAD 0000000000000000000000000000000000010051: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(verbatim_1i_1o(hex"51", 0x1000)) } nonce: 1 storage: {} # MSTORE 0000000000000000000000000000000000010052: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore(0x1000, 0xFF) } nonce: 1 storage: {} # MSTORE8 0000000000000000000000000000000000010053: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { mstore8(0x1000, 0xFF) } nonce: 1 storage: {} # LOG0 00000000000000000000000000000000000100A0: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { log0(0x10000, 0x20) } nonce: 1 storage: {} # LOG1 00000000000000000000000000000000000100A1: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { log1(0x10000, 0x20, 0x1) } nonce: 1 storage: {} # LOG2 00000000000000000000000000000000000100A2: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { log2(0x10000, 0x20, 0x1, 0x2) } nonce: 1 storage: {} # LOG3 00000000000000000000000000000000000100A3: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { log3(0x10000, 0x20, 0x1, 0x2, 0x3) } nonce: 1 storage: {} # LOG4 00000000000000000000000000000000000100A4: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { log4(0x10000, 0x20, 0x1, 0x2, 0x3, 0x4) } nonce: 1 storage: {} # CREATE 00000000000000000000000000000000000100F0: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(create(0, 0x10000, 0x20)) } nonce: 1 storage: {} # CREATE2 00000000000000000000000000000000000100F5: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(create2(0, 0x10000, 0x20, 0x5a17)) } nonce: 1 storage: {} # RETURN 00000000000000000000000000000000000100F3: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { return(0x10000, 0x20) } nonce: 1 storage: {} # CALL 00000000000000000000000000000000000100f1: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(call(gas(), 0x111f1, 0, 0x10000, 0, 0, 0)) } nonce: 1 storage: {} # CALLCODE 00000000000000000000000000000000000100f2: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(callcode(gas(), 0x111f1, 0, 0x10000, 0, 0, 0)) } nonce: 1 storage: {} # DELEGATECALL 00000000000000000000000000000000000100f4: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(delegatecall(gas(), 0x111f1, 0x10000, 0, 0, 0)) } nonce: 1 storage: {} # STATICCALL 00000000000000000000000000000000000100fa: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { pop(staticcall(gas(), 0x111f1, 0x10000, 0, 0, 0)) } nonce: 1 storage: {} # Contract to be called 00000000000000000000000000000000000111f1: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { stop() } nonce: 1 storage: {} cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { let op := calldataload(0x04) let gasAmt := calldataload(0x24) // Call the function that actually goes OOG (or not) sstore(0, call(gasAmt, add(0x10000,op), 0, 0, 0, 0, 0)) } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: # SHA3 0,1 - :label success :abi f(uint,uint) 0x20 0xFFFF - :label failure :abi f(uint,uint) 0x20 1210 # CALLDATACOPY 2,3 - :label success :abi f(uint,uint) 0x37 0xFFFF - :label failure :abi f(uint,uint) 0x37 810 # CODECOPY 4,5 - :label success :abi f(uint,uint) 0x39 0xFFFF - :label failure :abi f(uint,uint) 0x39 810 # EXTCODECOPY 6,7 - :label success :abi f(uint,uint) 0x3C 0xFFFF - :label failure :abi f(uint,uint) 0x3C 700 # RETURNDATACOPY 8,9 - :label success :abi f(uint,uint) 0x3E 0xFFFF - :label success :abi f(uint,uint) 0x3E 3074 # Two failures because @chfast has two memory related # gas costs in his RETURNDATACOPY code, and we want to check both: # 10 - :label failure :abi f(uint,uint) 0x3E 2000 # Memory extension cost # 11 - :label failure :abi f(uint,uint) 0x3E 3073 # Memory copying cost (I think) # MLOAD 12,30 - :label success :abi f(uint,uint) 0x51 0xFFFF - :label failure :abi f(uint,uint) 0x51 400 # MSTORE - :label success :abi f(uint,uint) 0x52 0xFFFF - :label failure :abi f(uint,uint) 0x52 400 # MSTORE8 - :label success :abi f(uint,uint) 0x53 0xFFFF - :label failure :abi f(uint,uint) 0x53 400 # LOG0 - :label success :abi f(uint,uint) 0xa0 0xFFFF - :label failure :abi f(uint,uint) 0xa0 14800 # LOG1 - :label success :abi f(uint,uint) 0xa1 0xFFFF - :label failure :abi f(uint,uint) 0xa1 14800 # LOG2 - :label success :abi f(uint,uint) 0xa2 0xFFFF - :label failure :abi f(uint,uint) 0xa2 14800 # LOG3 - :label success :abi f(uint,uint) 0xa3 0xFFFF - :label failure :abi f(uint,uint) 0xa3 14800 # LOG4 - :label success :abi f(uint,uint) 0xa4 0xFFFF - :label failure :abi f(uint,uint) 0xa4 14800 # CREATE - :label success :abi f(uint,uint) 0xf0 0xFFFF - :label failure :abi f(uint,uint) 0xf0 32000 # CREATE2 - :label success :abi f(uint,uint) 0xf5 0xFFFF - :label failure :abi f(uint,uint) 0xf5 32000 # RETURN - :label success :abi f(uint,uint) 0xf3 0xFFFF - :label failure :abi f(uint,uint) 0xf3 14000 # CALL - :label success :abi f(uint,uint) 0xf1 0xFFFF - :label failure :abi f(uint,uint) 0xf1 700 # CALLCODE - :label success :abi f(uint,uint) 0xf2 0xFFFF - :label failure :abi f(uint,uint) 0xf2 700 # DELEGATECALL - :label success :abi f(uint,uint) 0xf4 0xFFFF - :label failure :abi f(uint,uint) 0xf4 700 # STATICCALL - :label success :abi f(uint,uint) 0xfa 0xFFFF - :label failure :abi f(uint,uint) 0xfa 700 gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" value: - 0 expect: - indexes: data: :label success gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 1 - indexes: data: :label failure gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 0 ================================================ FILE: tests/static/state_tests/stMemoryTest/sha3_dejavuFiller.json ================================================ { "sha3_dejavu" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "52949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x60FF630FFFFFFF20", "nonce" : "0", "storage" : { } }, "" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitGas_1023Filler.json ================================================ { "stackLimitGas_1023" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1021 0x00 MSTORE JUMPDEST GAS 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitGas_1024Filler.json ================================================ { "stackLimitGas_1024" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "code" : "0x6103fe6000525b5a6001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1022 0x00 MSTORE JUMPDEST GAS 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitGas_1025Filler.json ================================================ { "stackLimitGas_1025" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6103ff6000525b5a6001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1023 0x00 MSTORE JUMPDEST GAS 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitPush31_1023Filler.json ================================================ { "stackLimitPush31_1023" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "code" : "0x6103fd6000525b7e0102030405060708090a0102030405060708090a0102030405060708090a016001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1021 0x00 MSTORE JUMPDEST 0x0102030405060708090a0102030405060708090a0102030405060708090a01 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitPush31_1024Filler.json ================================================ { "stackLimitPush31_1024" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "code" : "0x6103fe6000525b7e0102030405060708090a0102030405060708090a0102030405060708090a016001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1022 0x00 MSTORE JUMPDEST 0x0102030405060708090a0102030405060708090a0102030405060708090a01 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitPush31_1025Filler.json ================================================ { "stackLimitPush31_1025" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6103ff6000525b7e0102030405060708090a0102030405060708090a0102030405060708090a016001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1023 0x00 MSTORE JUMPDEST 0x0102030405060708090a0102030405060708090a0102030405060708090a01 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitPush32_1023Filler.json ================================================ { "stackLimitPush32_1023" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "code" : "0x6103fd6000525b7f0102030405060708090a0102030405060708090a0102030405060708090a01026001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1021 0x00 MSTORE JUMPDEST 0x0102030405060708090a0102030405060708090a0102030405060708090a0102 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitPush32_1024Filler.json ================================================ { "stackLimitPush32_1024" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a764000a", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1022 0x00 MSTORE JUMPDEST 0x0102030405060708090a0102030405060708090a0102030405060708090a0102 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stMemoryTest/stackLimitPush32_1025Filler.json ================================================ { "stackLimitPush32_1025" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "0x0de0b6b3a7640000", "code" : "0x6103ff6000525b7f0102030405060708090a0102030405060708090a0102030405060708090a01026001600051036000526000516006570000", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "(asm 1023 0x00 MSTORE JUMPDEST 0x0102030405060708090a0102030405060708090a0102030405060708090a0102 0x01 0x00 MLOAD SUB 0x00 MSTORE 0x00 MLOAD 0x06 JUMPI STOP )", "nonce" : "0", "storage" : { } }, "" : { "balance" : "429496729600", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALLCODEFiller.json ================================================ { "NonZeroValue_CALLCODE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x01", "0x64" : "0x7acb" } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALLCODE 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToEmpty_ParisFiller.json ================================================ { "NonZeroValue_CALLCODE_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "0x7acb" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALLCODE 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToNonNonZeroBalanceFiller.json ================================================ { "NonZeroValue_CALLCODE_ToNonNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" }, "" : { "storage" : { "0x64" : "0x2d0f" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALLCODE 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToOneStorageKey_ParisFiller.json ================================================ { "NonZeroValue_CALLCODE_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "0x7acb" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALLCODE 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALLFiller.json ================================================ { "NonZeroValue_CALL" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x63", "storage" : { "0x01" : "0x01", "0x64" : "0xdc73" } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x01" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALL_ToEmpty_ParisFiller.json ================================================ { "NonZeroValue_CALL_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "11" }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "31435" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALL 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALL_ToNonNonZeroBalanceFiller.json ================================================ { "NonZeroValue_CALL_ToNonNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" }, "" : { "storage" : { "0x64" : "0x2d0f" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALL 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_CALL_ToOneStorageKey_ParisFiller.json ================================================ { "NonZeroValue_CALL_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "11", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "31435" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (CALL 60000 1 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_DELEGATECALLFiller.json ================================================ { "NonZeroValue_DELEGATECALL" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x01", "0x64" : "0x609c" } }, "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (DELEGATECALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToEmpty_ParisFiller.json ================================================ { "NonZeroValue_DELEGATECALL_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "10", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "0x609c" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToNonNonZeroBalanceFiller.json ================================================ { "NonZeroValue_DELEGATECALL_ToNonNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "0x609c" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToOneStorageKey_ParisFiller.json ================================================ { "NonZeroValue_DELEGATECALL_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01", "0x64" : "0x609c" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [0](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[100]] (SUB @0 (GAS)) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_SUICIDEFiller.json ================================================ { "NonZeroValue_SUICIDE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "0x73c94f5374fce5edbc8e2a8697c15331677e6ebf0bff00", "storage" : {} }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "nonce" : "0", "code" : "{ (SELFDESTRUCT 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToEmpty_ParisFiller.json ================================================ { "NonZeroValue_SUICIDE_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x73ff00", "storage" : {} }, "" : { "balance" : "11" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToNonNonZeroBalanceFiller.json ================================================ { "NonZeroValue_SUICIDE_ToNonNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x73ff00", "storage" : {} }, "" : { "balance" : "101" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToOneStorageKey_ParisFiller.json ================================================ { "NonZeroValue_SUICIDE_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "balance" : "0", "code" : "0x73ff00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "11", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { "0x00" : "0x01" } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALLFiller.json ================================================ { "NonZeroValue_TransactionCALL" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x01", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToEmpty_ParisFiller.json ================================================ { "NonZeroValue_TransactionCALL_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "11" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToNonNonZeroBalanceFiller.json ================================================ { "NonZeroValue_TransactionCALL_ToNonNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "101" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToOneStorageKey_ParisFiller.json ================================================ { "NonZeroValue_TransactionCALL_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "11", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithDataFiller.json ================================================ { "NonZeroValue_TransactionCALLwithData" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x01", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToEmpty_ParisFiller.json ================================================ { "NonZeroValue_TransactionCALLwithData_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "11" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalanceFiller.json ================================================ { "NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "101" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToOneStorageKey_ParisFiller.json ================================================ { "NonZeroValue_TransactionCALLwithData_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "11", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stNonZeroCallsTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stPreCompiledContracts/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stPreCompiledContracts/modexpFiller.json ================================================ { "modexp" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,6,7], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01" } } } }, { "indexes" : { "data" : [29], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [1,5,8,9,10,12,13,15,18,19,20,21,22,23,24,30], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [2,28], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [31], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x0100000000000000000000000000000000" } } } }, { "indexes" : { "data" : [32], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x010000000000000000000000000000000000000000" } } } }, { "indexes" : { "data" : [33], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x010000000000000000000000000000000000000000000000000000" } } } }, { "indexes" : { "data" : [34], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x0100000000000000000000000000000000000000" } } } }, { "indexes" : { "data" : [35], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x010000000000000000000000000000" } } } }, { "indexes" : { "data" : [3,4], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab" } } } }, { "indexes" : { "data" : [11, 14, 25, 26], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x0100000000000000000000000000000000000000000000000000000000000000" } } } }, { "indexes" : { "data" : [16,27], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x02000000000000000000000000000000000000000000000000000000000000" } } } }, { "indexes" : { "data" : [17], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01", "0x02" : "0x0200000000000000000000000000000000000000000000000000000000000000" } } } }, { "indexes" : { "data" : [36, 37], "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ (CALLDATACOPY 0 0 (CALLDATASIZE)) [[1]] (CALLCODE (GAS) 5 0 0 (CALLDATASIZE) 1000 32) [[2]](MLOAD 1000) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "(BASE**EXPONENT) % MODULUS", "0 - example: 3**(2**256 - 2**32 - 978) % (2**256 - 2**32 - 977).", "1 - Would be parsed as a base of 0, exponent of 2**256 - 2**32 - 978 and modulus of 2**256 - 2**32 - 978, and so would return 0. Notice how if the length_of_BASE is 0, then it does not interpret any data as the base, instead immediately interpreting the next 32 bytes as length_of_EXPONENT.", "2 - Would parse a base length of 0, a modulus length of 32, and an exponent length of 2**256 - 1, where the base is empty, the modulus is 2**256 - 2 and the exponent is (2**256 - 3) * 256**(2**256 - 33) (yes, that's a really big number). It would then immediately fail, as it's not possible to provide enough gas to make that computation.", "3 - Would parse as a base of 3, an exponent of 65535, and a modulus of 2**255, and it would ignore the remaining 0x07 byte.", "4 - Would also parse as a base of 3, an exponent of 65535 and a modulus of 2**255, as it attempts to grab 32 bytes for the modulus starting from 0x80, but then there is no further data so it right pads it with 31 zeroes.", "5 - Missing values", "6 - Empty value", "7 - 0**0 % 0x80", "8 - 0**0 % 0", "9 - modlength zero", "10 - 0**03 % 04", "11 - 02**00 % 04", "12 - 02**03 % 00", "13 - **03 % 04", "14 - 02** % 04", "15 - 02**03 % ", "16 - 02**03 % 06", "17 - 02**03 % 0006", "18,19,20 - Non-zero length mod, but passed calldata has not enough total length", "21,21,22,23 - Non-zero length exp & mod, but passed data has only base and part of exp / only base", "24 - Non-zero length base & exp & mod and no values in input data - interpreted as all zeroes", "25 - Price calculation when baseLength > modLength", "26 - bigint_expmod precompiled contract returns 1 for 0 ^ 0 mod 100", "27 - 02 ** 03 % 06, but exp with 256 bytes of zero in front.", "28 - base length 4TiB", "29 - exp length 4TiB; returns 0 because mod is zero", "30 - base and mod have zero-length. exp's length is 2^255. Since mod is zero, the result should be zero.", "31,32,33,34,35 - something that should result in 1.", "36 - the input found on 10 Oct. 2017 that overflows the gas calculation", "37 - input found in July 2022, overflows the gas calculation" ], "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", ":raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", ":raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd" , ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020038000000000000000000000000000000000000000000000000000000000000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000080", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000101", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000304", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020004", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020300", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010304", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010204", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000203", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000202030006", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020306", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002020300", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000202030000", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020203", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002023003", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020230", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000202", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002", ":raw 0x000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001001001010010", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000064", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030006", ":raw 0x00000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010035ee4e488f45e64d2f07becd54646357381d32f30b74c299a8c25d5202c04938ef6c4764a04f10fc908b78c4486886000f6d290251a79681a83b950c7e5c37351", ":raw 0x0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000cd935b43e42204fcbfb734a6e27735e8e90204fcc1fd2727bb040f9eecb", ":raw 0x0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060846813a8d2d451387340fa0597c6545ae63", ":raw 0x0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d02534f82b1013f20d9c7d18d62cd95674d2e013f20d9c7d18d62cd95674d2f", ":raw 0x0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000120785e45de3d6be050ba3c4d33ff0bb2d010ace3b1dfe9c49f4c7a8075102fa19a86c010ace3b1dfe9c49f4c7a8075102fa19a86d", ":raw 0x00000000000000000000000000000000000000000000000000000000000000ff2a1e5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010001" ], "gasLimit" : [ "100000000", "90000", "110000", "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts/modexpTestsFiller.yml ================================================ # These are tests for precomp 5, modexp # (specified in https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md) # # For every case there are two parameters to test: # 1. The result # 2. The gas cost modexpTests: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Test for cases where all three parameters are <2^256. : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Our input values, 20 bytes each // This is not the most efficient use of gas, but // this is a test. Readability is more important let base := calldataload(0x04) let expV := calldataload(0x24) let modV := calldataload(0x44) // Prepare the calldata mstore(0x00, 0x20) mstore(0x20, 0x20) mstore(0x40, 0x20) mstore(0x60, base) mstore(0x80, expV) mstore(0xA0, modV) let gas0 := gas() pop(call(gas(), 0x05, 0, 0, 0xC0, 0x100, 0x20)) let gas1 := gas() sstore(0, mload(0x100)) sstore(1, sub(sub(gas0, gas1), 0x14c)) } nonce: 1 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: 0x nonce: 1 storage: {} transaction: data: - :label m_n_01 :abi f(uint,uint,uint) 0 0 0 - :label m_n_01 :abi f(uint,uint,uint) 0 0 1 - :label 0_0_n :abi f(uint,uint,uint) 0 0 2 - :label 0_0_n :abi f(uint,uint,uint) 0 0 4 - :label 0_0_n :abi f(uint,uint,uint) 0 0 8 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x10 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x20 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x40 - :label 0_0_n :abi f(uint,uint,uint) 0 0 100 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x80 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x1001 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x100002 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x10000004 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0x1000000008 - :label 0_0_n :abi f(uint,uint,uint) 0 0 0xFFFFFFFFFFFF - :label 0_0_n :abi f(uint,uint,uint) 0 0 0xFFFFFFFFFFFFFF - :label 0_0_n :abi f(uint,uint,uint) 0 0 0xFFFFFFFFFFFFFFFF - :label m_n_01 :abi f(uint,uint,uint) 0 1 0 - :label m_n_01 :abi f(uint,uint,uint) 0 1 1 - :label 0_m_n :abi f(uint,uint,uint) 0 1 2 - :label 0_m_n :abi f(uint,uint,uint) 0 1 4 - :label 0_m_n :abi f(uint,uint,uint) 0 1 8 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x10 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x20 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x40 - :label 0_m_n :abi f(uint,uint,uint) 0 1 100 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x80 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x1001 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x100002 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x10000004 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0x1000000008 - :label 0_m_n :abi f(uint,uint,uint) 0 1 0xFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 1 0xFFFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 1 0xFFFFFFFFFFFFFFFF - :label m_n_01 :abi f(uint,uint,uint) 0 2 0 - :label m_n_01 :abi f(uint,uint,uint) 0 2 1 - :label 0_m_n :abi f(uint,uint,uint) 0 2 2 - :label 0_m_n :abi f(uint,uint,uint) 0 3 2 - :label 0_m_n :abi f(uint,uint,uint) 0 3 4 - :label 0_m_n :abi f(uint,uint,uint) 0 3 8 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x10 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x20 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x40 - :label 0_m_n :abi f(uint,uint,uint) 0 3 100 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x80 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x1001 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x100002 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x10000004 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0x1000000008 - :label 0_m_n :abi f(uint,uint,uint) 0 3 0xFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 3 0xFFFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 3 0xFFFFFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 2 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 4 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 8 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x10 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x20 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x40 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 100 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x80 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x1001 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x100002 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x10000004 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0x1000000008 - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0xFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0xFFFFFFFFFFFFFF - :label 0_m_n :abi f(uint,uint,uint) 0 0xFFFFFF 0xFFFFFFFFFFFFFFFF - :label m_n_01 :abi f(uint,uint,uint) 1 0 0 - :label m_n_01 :abi f(uint,uint,uint) 1 0 1 - :label 1_0_n :abi f(uint,uint,uint) 1 0 2 - :label 1_0_n :abi f(uint,uint,uint) 1 0 4 - :label 1_0_n :abi f(uint,uint,uint) 1 0 8 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x10 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x20 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x40 - :label 1_0_n :abi f(uint,uint,uint) 1 0 100 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x80 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x1001 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x100002 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x10000004 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0x1000000008 - :label 1_0_n :abi f(uint,uint,uint) 1 0 0xFFFFFFFFFFFF - :label 1_0_n :abi f(uint,uint,uint) 1 0 0xFFFFFFFFFFFFFF - :label 1_0_n :abi f(uint,uint,uint) 1 0 0xFFFFFFFFFFFFFFFF - :label m_n_01 :abi f(uint,uint,uint) 1 1 0 - :label m_n_01 :abi f(uint,uint,uint) 1 1 1 - :label 1_m_n :abi f(uint,uint,uint) 1 1 2 - :label 1_m_n :abi f(uint,uint,uint) 1 1 4 - :label 1_m_n :abi f(uint,uint,uint) 1 1 8 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x10 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x20 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x40 - :label 1_m_n :abi f(uint,uint,uint) 1 1 100 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x80 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x1001 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x100002 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x10000004 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0x1000000008 - :label 1_m_n :abi f(uint,uint,uint) 1 1 0xFFFFFFFFFFFF - :label 1_m_n :abi f(uint,uint,uint) 1 1 0xFFFFFFFFFFFFFF - :label 1_m_n :abi f(uint,uint,uint) 1 1 0xFFFFFFFFFFFFFFFF - :label m_n_01 :abi f(uint,uint,uint) 1 2 0 - :label m_n_01 :abi f(uint,uint,uint) 1 2 1 - :label 1_m_n :abi f(uint,uint,uint) 1 2 2 - :label m_n_01 :abi f(uint,uint,uint) 2 0 0 - :label m_n_01 :abi f(uint,uint,uint) 2 0 1 - :label 2_0_2 :abi f(uint,uint,uint) 2 0 2 - :label m_n_01 :abi f(uint,uint,uint) 2 1 0 - :label m_n_01 :abi f(uint,uint,uint) 2 1 1 - :label 2_n_2 :abi f(uint,uint,uint) 2 1 2 - :label m_n_01 :abi f(uint,uint,uint) 2 2 0 - :label m_n_01 :abi f(uint,uint,uint) 2 2 1 - :label 2_n_2 :abi f(uint,uint,uint) 2 2 2 - :label 3_5_100 :abi f(uint,uint,uint) 3 5 100 - :label 3_9984_39936 :abi f(uint,uint,uint) 3 9984 39936 - :label 3_28948_11579 :abi f(uint,uint,uint) 3 28948 11579 - :label 9_37111_37111 :abi f(uint,uint,uint) 9 37111 37111 - :label 9_3711_37111 :abi f(uint,uint,uint) 9 3711 37111 - :label 49_2401_2401 :abi f(uint,uint,uint) 49 2401 2401 - :label 37120_22411_22000 :abi f(uint,uint,uint) 37120 22411 22000 - :label 37120_37111_0 :abi f(uint,uint,uint) 37120 37111 0 - :label 37120_37111_1 :abi f(uint,uint,uint) 37120 37111 1 - :label 37120_37111_37111 :abi f(uint,uint,uint) 37120 37111 37111 - :label 7120_37111_97 :abi f(uint,uint,uint) 7120 37111 97 - :label 37120_37111_97 :abi f(uint,uint,uint) 37120 37111 97 - :label 39936_1_55201 :abi f(uint,uint,uint) 39936 1 55201 - :label 55190_55190_42965 :abi f(uint,uint,uint) 55190 55190 42965 gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: secretKey: "" value: - 0 expect: - indexes: data: - :label 0_m_n - :label m_n_01 - :label 2_n_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x0 # Result 1: 0x1 # Gas cost - indexes: data: - :label 0_0_n - :label 1_0_n - :label 1_m_n - :label 2_0_2 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x1 # Result 1: 0x1 # Gas cost - indexes: data: - :label 3_5_100 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 43 # Result 1: 0x1 # Gas cost - indexes: data: - :label 3_9984_39936 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x6801 # Result 1: 0x1 # Gas cost - indexes: data: - :label 3_28948_11579 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x1B # Result 1: 0x1 # Gas cost - indexes: data: - :label 9_3711_37111 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x8615 # Result 1: 0x1 # Gas cost - indexes: data: - :label 9_37111_37111 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x1C3B # Result 1: 0x1 # Gas cost - indexes: data: - :label 49_2401_2401 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x00 # Result 1: 0x1 # Gas cost - indexes: data: - :label 37120_22411_22000 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x3e80 # Result 1: 0x1 # Gas cost - indexes: data: - :label 37120_37111_0 - :label 37120_37111_1 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0 # Result 1: 0x1 # Gas cost - indexes: data: - :label 37120_37111_37111 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x1C3B # Result 1: 0x1 # Gas cost - indexes: data: - :label 7120_37111_97 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x50 # Result 1: 0x1 # Gas cost - indexes: data: - :label 37120_37111_97 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x5F # Result 1: 0x1 # Gas cost - indexes: data: - :label 39936_1_55201 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x9C00 # Result 1: 0x1 # Gas cost - indexes: data: - :label 55190_55190_42965 gas: !!int -1 value: !!int -1 network: - '>=Cancun: storage: 0: 0x866A # Result 1: 0x1 # Gas cost ================================================ FILE: tests/static/state_tests/stPreCompiledContracts/precompsEIP2929CancunFiller.yml ================================================ # Check which low address contracts (precompiles) are part of the EIP2929 # access lists. This was the Berlin fork OpenEthereum bug, that they thought # 0x00.000a was in the access list and the other clients disagreed (see # https://twitter.com/ralexstokes/status/1382750525070868484 and # https://twitter.com/ralexstokes/status/1382750938142629889) # # According to EIP2929 (https://eips.ethereum.org/EIPS/eip-2929#abstract) precompiles # are exempt from the opcode cost increases for the first (cold) access, they are # always hot. # # NOTE: This does not apply to sending contracts wei (see below in the definition # of 0xCC..CCC) precompsEIP2929Cancun: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Check if the cost of doing various things to an account is the same # cost the first time as the second # # If the account is a precompile it should be, because it should already # be on the EIP2929 access list. # # NOTE: This does not apply to sending contracts wei. If there is no trie for # a precompile it will have to be created and that costs gas. However, # in the real world (a.k.a. mainnet) all the accounts up to 0x00...00020 # already have a balance (and therefore a trie) and this issue won't # happen with them. # # calldataload(0x04) - account number to check # calldataload(0x24) - action: # 0xf100 - CALL # 0xf101 - CALL and send one wei # 0xf102 - CALL and send one byte of input # 0xf103 - CALL with one wei and one byte # 0xf104 - CALL and receive one byte of output # 0xf105 - CALL with one wei and receive one byte # 0xf200 - CALL # 0xf201 - CALL and send one wei # 0xf202 - CALL and send one byte of input # 0xf203 - CALL with one wei and one byte # 0xf204 - CALL and receive one byte of output # 0xf205 - CALL with one wei and receive one byte # 0xf400 - CALL # 0xf401 - CALL and send one wei # 0xf402 - CALL and send one byte of input # 0xf403 - CALL with one wei and one byte # 0xf404 - CALL and receive one byte of output # 0xf405 - CALL with one wei and receive one byte # 0xfa00 - CALL # 0xfa01 - CALL and send one wei # 0xfa02 - CALL and send one byte of input # 0xfa03 - CALL with one wei and one byte # 0xfa04 - CALL and receive one byte of output # 0xfa05 - CALL with one wei and receive one byte # 0x31 - read the balance # 0x3B - get code size # 0x3C - copy code # 0x3F - get the code hash : code: | :yul berlin optimise { let addrTest := calldataload(0x04) let action := calldataload(0x24) let gas0, gas1, gas2 // Not really needed, but otherwise Yul optimizes and // skips operations we need let useless0, useless1 // Touch the first word of memory here, so it // won't confuse the gas measurement mstore(0x100, 0xDEADBEEF) // Access (so it becomes warm and send it wei) pop(call(0x100000, , 1, 0, 0, 0, 0)) // Switch before measuring, so it won't affect // the gas costs switch action case 0xf100 { gas0 := gas() pop(call(0x100000, addrTest, 0, 0, 0, 0, 0)) gas1 := gas() pop(call(0x100000, addrTest, 0, 0, 0, 0, 0)) gas2 := gas() } case 0xf101 { gas0 := gas() pop(call(0x100000, addrTest, 1, 0, 0, 0, 0)) gas1 := gas() pop(call(0x100000, addrTest, 1, 0, 0, 0, 0)) gas2 := gas() } case 0xf102 { gas0 := gas() pop(call(0x100000, addrTest, 0, 0, 1, 0, 0)) gas1 := gas() pop(call(0x100000, addrTest, 0, 0, 1, 0, 0)) gas2 := gas() } case 0xf103 { gas0 := gas() pop(call(0x100000, addrTest, 1, 0, 1, 0, 0)) gas1 := gas() pop(call(0x100000, addrTest, 1, 0, 1, 0, 0)) gas2 := gas() } case 0xf104 { gas0 := gas() pop(call(0x100000, addrTest, 0, 0, 0, 0, 1)) gas1 := gas() pop(call(0x100000, addrTest, 0, 0, 0, 0, 1)) gas2 := gas() } case 0xf105 { gas0 := gas() pop(call(0x100000, addrTest, 1, 0, 0, 0, 1)) gas1 := gas() pop(call(0x100000, addrTest, 1, 0, 0, 0, 1)) gas2 := gas() } case 0xf200 { gas0 := gas() pop(callcode(0x100000, addrTest, 0, 0, 0, 0, 0)) gas1 := gas() pop(callcode(0x100000, addrTest, 0, 0, 0, 0, 0)) gas2 := gas() } case 0xf201 { gas0 := gas() pop(callcode(0x100000, addrTest, 1, 0, 0, 0, 0)) gas1 := gas() pop(callcode(0x100000, addrTest, 1, 0, 0, 0, 0)) gas2 := gas() } case 0xf202 { gas0 := gas() pop(callcode(0x100000, addrTest, 0, 0, 1, 0, 0)) gas1 := gas() pop(callcode(0x100000, addrTest, 0, 0, 1, 0, 0)) gas2 := gas() } case 0xf203 { gas0 := gas() pop(callcode(0x100000, addrTest, 1, 0, 1, 0, 0)) gas1 := gas() pop(callcode(0x100000, addrTest, 1, 0, 1, 0, 0)) gas2 := gas() } case 0xf204 { gas0 := gas() pop(callcode(0x100000, addrTest, 0, 0, 0, 0, 1)) gas1 := gas() pop(callcode(0x100000, addrTest, 0, 0, 0, 0, 1)) gas2 := gas() } case 0xf205 { gas0 := gas() pop(callcode(0x100000, addrTest, 1, 0, 0, 0, 1)) gas1 := gas() pop(callcode(0x100000, addrTest, 1, 0, 0, 0, 1)) gas2 := gas() } case 0xf400 { gas0 := gas() pop(delegatecall(0x100000, addrTest, 0, 0, 0, 0)) gas1 := gas() pop(delegatecall(0x100000, addrTest, 0, 0, 0, 0)) gas2 := gas() } case 0xf402 { gas0 := gas() pop(delegatecall(0x100000, addrTest, 0, 1, 0, 0)) gas1 := gas() pop(delegatecall(0x100000, addrTest, 0, 1, 0, 0)) gas2 := gas() } case 0xf404 { gas0 := gas() pop(delegatecall(0x100000, addrTest, 0, 0, 0, 1)) gas1 := gas() pop(delegatecall(0x100000, addrTest, 0, 0, 0, 1)) gas2 := gas() } case 0xfa00 { gas0 := gas() pop(staticcall(0x100000, addrTest, 0, 0, 0, 0)) gas1 := gas() pop(staticcall(0x100000, addrTest, 0, 0, 0, 0)) gas2 := gas() } case 0xfa02 { gas0 := gas() pop(staticcall(0x100000, addrTest, 0, 1, 0, 0)) gas1 := gas() pop(staticcall(0x100000, addrTest, 0, 1, 0, 0)) gas2 := gas() } case 0xfa04 { gas0 := gas() pop(staticcall(0x100000, addrTest, 0, 0, 0, 1)) gas1 := gas() pop(staticcall(0x100000, addrTest, 0, 0, 0, 1)) gas2 := gas() } case 0x31 { gas0 := gas() useless0 := balance(addrTest) gas1 := gas() useless1 := balance(addrTest) gas2 := gas() } case 0x3B { gas0 := gas() useless0 := extcodesize(addrTest) gas1 := gas() useless1 := extcodesize(addrTest) gas2 := gas() } case 0x3C { gas0 := gas() extcodecopy(addrTest,0,0,0x100) gas1 := gas() extcodecopy(addrTest,0,0,0x100) gas2 := gas() } case 0x3F { gas0 := gas() useless0 := extcodehash(addrTest) gas1 := gas() useless1 := extcodehash(addrTest) gas2 := gas() } let gasTest1 := sub(gas0, gas1) let gasTest2 := sub(gas1, gas2) sstore(0, eq(gasTest1, gasTest2)) sstore(1, sub(gasTest1, gasTest2)) // Otherwise a Yul optimization throws us off let noOptimization := msize() } nonce: 1 storage: 0: 0x60A7 1: 0x60A7 balance: 0 # Just a normal contract for comparison : code: | :yul berlin { mstore(0,add(1,2)) } nonce: 1 storage: {} balance: 0 # And a contract that has been previously accessed : code: | :yul berlin { mstore(0,add(1,2)) } nonce: 1 storage: {} balance: 0 : balance: '1000000000000000000' code: 0x nonce: '0' storage: {} transaction: data: # The first parameter is the address to call # The second parameter is the action # # :label no means that the address is cold (either there is nothing there, # or it exists but hasn't been touched by the txn yet). # # :label yes means that the address is already warm. As per the EIP, precompiles # are always warm. # Empty account (nothing there) - :label no :abi f(uint,uint) 0x100000 0xf100 # 0 # Normal contract account - :label no :abi f(uint,uint) 0xf100 # 1 # Account that has already been touched # (we touch it earlier in - :label yes :abi f(uint,uint) 0xf100 # 2 # Precompiles - :label yes :abi f(uint,uint) 0x01 0xf100 # 3 - :label yes :abi f(uint,uint) 0x02 0xf100 # 4 - :label yes :abi f(uint,uint) 0x03 0xf100 # 5 - :label yes :abi f(uint,uint) 0x04 0xf100 # 6 - :label yes :abi f(uint,uint) 0x05 0xf100 # 7 - :label yes :abi f(uint,uint) 0x06 0xf100 # 8 - :label yes :abi f(uint,uint) 0x07 0xf100 # 9 - :label yes :abi f(uint,uint) 0x08 0xf100 # 10 - :label yes :abi f(uint,uint) 0x09 0xf100 # 11 - :label yes :abi f(uint,uint) 0x0a 0xf100 # 12 # Not precompiles (so far) - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf100 # 13 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf100 # 14 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf100 # 15 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf100 # 16 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf100 # 17 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf100 # 17 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf100 # 17 - :label no :abi f(uint,uint) 0x12 0xf100 # 17 # When we do send wei there is an extra cost for the first access because it # needs to create the trie for the account. # On a real chain it's possible some precompiles will already have a trie, # once somebody sends wei it gets stuck and unretrievable, but we are running # as part of a highly artificial test blockchain. - :label new :abi f(uint,uint) 0x01 0xf101 # 18 - :label new :abi f(uint,uint) 0x02 0xf101 # 19 - :label new :abi f(uint,uint) 0x03 0xf101 # 20 - :label new :abi f(uint,uint) 0x04 0xf101 # 21 - :label new :abi f(uint,uint) 0x05 0xf101 # 22 - :label new :abi f(uint,uint) 0x06 0xf101 # 23 - :label new :abi f(uint,uint) 0x07 0xf101 # 24 - :label new :abi f(uint,uint) 0x08 0xf101 # 25 # When the transaction is rejected, no cost for the trie - :label yes :abi f(uint,uint) 0x09 0xf101 # 26 - :label yes :abi f(uint,uint) 0x0a 0xf101 # 27 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0b 0xf101 # 28 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0c 0xf101 # 29 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0d 0xf101 # 30 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0e 0xf101 # 31 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0f 0xf101 # 32 - :label all_then_yes_from_prague :abi f(uint,uint) 0x10 0xf101 # 32 - :label all_then_yes_from_prague :abi f(uint,uint) 0x11 0xf101 # 32 - :label all :abi f(uint,uint) 0x12 0xf101 # 32 - :label all :abi f(uint,uint) 0x100000 0xf101 # 33 - :label no :abi f(uint,uint) 0xf101 # 34 - :label yes :abi f(uint,uint) 0xf101 # 35 # If we send data, it behaves normally (except for #8) - :label yes :abi f(uint,uint) 0x01 0xf102 # 36 - :label yes :abi f(uint,uint) 0x02 0xf102 # 37 - :label yes :abi f(uint,uint) 0x03 0xf102 # 38 - :label yes :abi f(uint,uint) 0x04 0xf102 # 39 - :label yes :abi f(uint,uint) 0x05 0xf102 # 40 - :label yes :abi f(uint,uint) 0x06 0xf102 # 41 - :label yes :abi f(uint,uint) 0x07 0xf102 # 42 - :label yes :abi f(uint,uint) 0x08 0xf102 # 43 - :label yes :abi f(uint,uint) 0x09 0xf102 # 44 - :label yes :abi f(uint,uint) 0x0a 0xf102 # 45 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf102 # 46 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf102 # 47 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf102 # 48 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf102 # 49 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf102 # 50 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf102 # 50 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf102 # 50 - :label no :abi f(uint,uint) 0x12 0xf102 # 50 - :label no :abi f(uint,uint) 0x100000 0xf102 # 51 - :label no :abi f(uint,uint) 0xf102 # 52 - :label yes :abi f(uint,uint) 0xf102 # 53 # If we send wei and data - :label new :abi f(uint,uint) 0x01 0xf103 # 54 - :label new :abi f(uint,uint) 0x02 0xf103 # 55 - :label new :abi f(uint,uint) 0x03 0xf103 # 56 - :label new :abi f(uint,uint) 0x04 0xf103 # 57 - :label new :abi f(uint,uint) 0x05 0xf103 # 58 - :label new :abi f(uint,uint) 0x06 0xf103 # 59 - :label new :abi f(uint,uint) 0x07 0xf103 # 60 - :label yes :abi f(uint,uint) 0x08 0xf103 # 61 - :label yes :abi f(uint,uint) 0x09 0xf103 # 62 - :label yes :abi f(uint,uint) 0x0a 0xf103 # 63 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0b 0xf103 # 64 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0c 0xf103 # 65 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0d 0xf103 # 66 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0e 0xf103 # 67 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0f 0xf103 # 68 - :label all_then_yes_from_prague :abi f(uint,uint) 0x10 0xf103 # 68 - :label all_then_yes_from_prague :abi f(uint,uint) 0x11 0xf103 # 68 - :label all :abi f(uint,uint) 0x12 0xf103 # 68 - :label all :abi f(uint,uint) 0x100000 0xf103 # 69 - :label no :abi f(uint,uint) 0xf103 # 70 - :label yes :abi f(uint,uint) 0xf103 # 71 # If we receive data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xf104 # 72 - :label yes :abi f(uint,uint) 0x02 0xf104 # 73 - :label yes :abi f(uint,uint) 0x03 0xf104 # 74 - :label yes :abi f(uint,uint) 0x04 0xf104 # 75 - :label yes :abi f(uint,uint) 0x05 0xf104 # 76 - :label yes :abi f(uint,uint) 0x06 0xf104 # 77 - :label yes :abi f(uint,uint) 0x07 0xf104 # 78 - :label yes :abi f(uint,uint) 0x08 0xf104 # 79 - :label yes :abi f(uint,uint) 0x09 0xf104 # 80 - :label yes :abi f(uint,uint) 0x0a 0xf104 # 81 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf104 # 82 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf104 # 83 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf104 # 84 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf104 # 85 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf104 # 86 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf104 # 86 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf104 # 86 - :label no :abi f(uint,uint) 0x12 0xf104 # 86 - :label no :abi f(uint,uint) 0x100000 0xf104 # 87 - :label no :abi f(uint,uint) 0xf104 # 88 - :label yes :abi f(uint,uint) 0xf104 # 89 # If we send wei and receive data - :label new :abi f(uint,uint) 0x01 0xf105 # 90 - :label new :abi f(uint,uint) 0x02 0xf105 # 91 - :label new :abi f(uint,uint) 0x03 0xf105 # 92 - :label new :abi f(uint,uint) 0x04 0xf105 # 93 - :label new :abi f(uint,uint) 0x05 0xf105 # 94 - :label new :abi f(uint,uint) 0x06 0xf105 # 95 - :label new :abi f(uint,uint) 0x07 0xf105 # 96 - :label new :abi f(uint,uint) 0x08 0xf105 # 97 - :label yes :abi f(uint,uint) 0x09 0xf105 # 98 - :label yes :abi f(uint,uint) 0x0a 0xf105 # 99 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0b 0xf105 # 100 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0c 0xf105 # 101 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0d 0xf105 # 102 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0e 0xf105 # 103 - :label all_then_yes_from_prague :abi f(uint,uint) 0x0f 0xf105 # 104 - :label all_then_yes_from_prague :abi f(uint,uint) 0x10 0xf105 # 104 - :label all_then_yes_from_prague :abi f(uint,uint) 0x11 0xf105 # 104 - :label all :abi f(uint,uint) 0x12 0xf105 # 104 - :label all :abi f(uint,uint) 0x100000 0xf105 # 105 - :label no :abi f(uint,uint) 0xf105 # 106 - :label yes :abi f(uint,uint) 0xf105 # 107 # CALLCODE - :label yes :abi f(uint,uint) 0x01 0xf200 # 108 - :label yes :abi f(uint,uint) 0x02 0xf200 # 109 - :label yes :abi f(uint,uint) 0x03 0xf200 # 110 - :label yes :abi f(uint,uint) 0x04 0xf200 # 111 - :label yes :abi f(uint,uint) 0x05 0xf200 # 112 - :label yes :abi f(uint,uint) 0x06 0xf200 # 113 - :label yes :abi f(uint,uint) 0x07 0xf200 # 114 - :label yes :abi f(uint,uint) 0x08 0xf200 # 115 - :label yes :abi f(uint,uint) 0x09 0xf200 # 116 - :label yes :abi f(uint,uint) 0x0a 0xf200 # 117 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf200 # 118 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf200 # 119 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf200 # 120 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf200 # 121 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf200 # 122 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf200 # 122 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf200 # 122 - :label no :abi f(uint,uint) 0x12 0xf200 # 122 - :label no :abi f(uint,uint) 0x100000 0xf200 # 123 - :label no :abi f(uint,uint) 0xf200 # 124 - :label yes :abi f(uint,uint) 0xf200 # 125 # With DELEGATECALL the second call doesn't cost more - :label yes :abi f(uint,uint) 0x01 0xf201 # 126 - :label yes :abi f(uint,uint) 0x02 0xf201 # 127 - :label yes :abi f(uint,uint) 0x03 0xf201 # 128 - :label yes :abi f(uint,uint) 0x04 0xf201 # 129 - :label yes :abi f(uint,uint) 0x05 0xf201 # 130 - :label yes :abi f(uint,uint) 0x06 0xf201 # 131 - :label yes :abi f(uint,uint) 0x07 0xf201 # 132 - :label yes :abi f(uint,uint) 0x08 0xf201 # 133 - :label yes :abi f(uint,uint) 0x09 0xf201 # 134 - :label yes :abi f(uint,uint) 0x0a 0xf201 # 135 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf201 # 136 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf201 # 137 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf201 # 138 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf201 # 139 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf201 # 140 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf201 # 140 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf201 # 140 - :label no :abi f(uint,uint) 0x12 0xf201 # 140 - :label no :abi f(uint,uint) 0x100000 0xf201 # 141 - :label no :abi f(uint,uint) 0xf201 # 142 - :label yes :abi f(uint,uint) 0xf201 # 143 # If we send data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xf202 # 144 - :label yes :abi f(uint,uint) 0x02 0xf202 # 145 - :label yes :abi f(uint,uint) 0x03 0xf202 # 146 - :label yes :abi f(uint,uint) 0x04 0xf202 # 147 - :label yes :abi f(uint,uint) 0x05 0xf202 # 148 - :label yes :abi f(uint,uint) 0x06 0xf202 # 149 - :label yes :abi f(uint,uint) 0x07 0xf202 # 150 - :label yes :abi f(uint,uint) 0x08 0xf202 # 151 - :label yes :abi f(uint,uint) 0x09 0xf202 # 152 - :label yes :abi f(uint,uint) 0x0a 0xf202 # 153 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf202 # 154 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf202 # 155 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf202 # 156 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf202 # 157 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf202 # 158 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf202 # 158 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf202 # 158 - :label no :abi f(uint,uint) 0x12 0xf202 # 158 - :label no :abi f(uint,uint) 0x100000 0xf202 # 159 - :label no :abi f(uint,uint) 0xf202 # 160 - :label yes :abi f(uint,uint) 0xf202 # 161 # If we send wei and data - :label yes :abi f(uint,uint) 0x01 0xf203 # 162 - :label yes :abi f(uint,uint) 0x02 0xf203 # 163 - :label yes :abi f(uint,uint) 0x03 0xf203 # 164 - :label yes :abi f(uint,uint) 0x04 0xf203 # 165 - :label yes :abi f(uint,uint) 0x05 0xf203 # 166 - :label yes :abi f(uint,uint) 0x06 0xf203 # 167 - :label yes :abi f(uint,uint) 0x07 0xf203 # 168 - :label yes :abi f(uint,uint) 0x08 0xf203 # 169 - :label yes :abi f(uint,uint) 0x09 0xf203 # 170 - :label yes :abi f(uint,uint) 0x0a 0xf203 # 171 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf203 # 172 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf203 # 173 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf203 # 174 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf203 # 175 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf203 # 176 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf203 # 176 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf203 # 176 - :label no :abi f(uint,uint) 0x12 0xf203 # 176 - :label no :abi f(uint,uint) 0x100000 0xf203 # 177 - :label no :abi f(uint,uint) 0xf203 # 178 - :label yes :abi f(uint,uint) 0xf203 # 179 # If we receive data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xf204 # 180 - :label yes :abi f(uint,uint) 0x02 0xf204 # 181 - :label yes :abi f(uint,uint) 0x03 0xf204 # 182 - :label yes :abi f(uint,uint) 0x04 0xf204 # 183 - :label yes :abi f(uint,uint) 0x05 0xf204 # 184 - :label yes :abi f(uint,uint) 0x06 0xf204 # 185 - :label yes :abi f(uint,uint) 0x07 0xf204 # 186 - :label yes :abi f(uint,uint) 0x08 0xf204 # 187 - :label yes :abi f(uint,uint) 0x09 0xf204 # 188 - :label yes :abi f(uint,uint) 0x0a 0xf204 # 189 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf204 # 190 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf204 # 191 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf204 # 192 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf204 # 193 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf204 # 194 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf204 # 194 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf204 # 194 - :label no :abi f(uint,uint) 0x12 0xf204 # 194 - :label no :abi f(uint,uint) 0x100000 0xf204 # 195 - :label no :abi f(uint,uint) 0xf204 # 196 - :label yes :abi f(uint,uint) 0xf204 # 197 # If we send wei and receive data - :label yes :abi f(uint,uint) 0x01 0xf205 # 198 - :label yes :abi f(uint,uint) 0x02 0xf205 # 199 - :label yes :abi f(uint,uint) 0x03 0xf205 # 200 - :label yes :abi f(uint,uint) 0x04 0xf205 # 201 - :label yes :abi f(uint,uint) 0x05 0xf205 # 202 - :label yes :abi f(uint,uint) 0x06 0xf205 # 203 - :label yes :abi f(uint,uint) 0x07 0xf205 # 204 - :label yes :abi f(uint,uint) 0x08 0xf205 # 205 - :label yes :abi f(uint,uint) 0x09 0xf205 # 206 - :label yes :abi f(uint,uint) 0x0a 0xf205 # 207 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf205 # 208 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf205 # 209 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf205 # 210 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf205 # 211 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf205 # 212 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf205 # 212 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf205 # 212 - :label no :abi f(uint,uint) 0x12 0xf205 # 212 - :label no :abi f(uint,uint) 0x100000 0xf205 # 213 - :label no :abi f(uint,uint) 0xf205 # 214 - :label yes :abi f(uint,uint) 0xf205 # 215 # DELEGATECALL - :label yes :abi f(uint,uint) 0x01 0xf400 # 216 - :label yes :abi f(uint,uint) 0x02 0xf400 # 217 - :label yes :abi f(uint,uint) 0x03 0xf400 # 218 - :label yes :abi f(uint,uint) 0x04 0xf400 # 219 - :label yes :abi f(uint,uint) 0x05 0xf400 # 220 - :label yes :abi f(uint,uint) 0x06 0xf400 # 221 - :label yes :abi f(uint,uint) 0x07 0xf400 # 222 - :label yes :abi f(uint,uint) 0x08 0xf400 # 223 - :label yes :abi f(uint,uint) 0x09 0xf400 # 224 - :label yes :abi f(uint,uint) 0x0a 0xf400 # 225 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf400 # 226 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf400 # 227 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf400 # 228 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf400 # 229 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf400 # 230 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf400 # 230 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf400 # 230 - :label no :abi f(uint,uint) 0x12 0xf400 # 230 - :label no :abi f(uint,uint) 0x100000 0xf400 # 231 - :label no :abi f(uint,uint) 0xf400 # 232 - :label yes :abi f(uint,uint) 0xf400 # 233 # If we send data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xf402 # 234 - :label yes :abi f(uint,uint) 0x02 0xf402 # 235 - :label yes :abi f(uint,uint) 0x03 0xf402 # 236 - :label yes :abi f(uint,uint) 0x04 0xf402 # 237 - :label yes :abi f(uint,uint) 0x05 0xf402 # 238 - :label yes :abi f(uint,uint) 0x06 0xf402 # 239 - :label yes :abi f(uint,uint) 0x07 0xf402 # 240 - :label yes :abi f(uint,uint) 0x08 0xf402 # 241 - :label yes :abi f(uint,uint) 0x09 0xf402 # 242 - :label yes :abi f(uint,uint) 0x0a 0xf402 # 243 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf402 # 244 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf402 # 245 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf402 # 246 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf402 # 247 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf402 # 248 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf402 # 248 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf402 # 248 - :label no :abi f(uint,uint) 0x12 0xf402 # 248 - :label no :abi f(uint,uint) 0x100000 0xf402 # 249 - :label no :abi f(uint,uint) 0xf402 # 250 - :label yes :abi f(uint,uint) 0xf402 # 251 # If we receive data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xf404 # 252 - :label yes :abi f(uint,uint) 0x02 0xf404 # 253 - :label yes :abi f(uint,uint) 0x03 0xf404 # 254 - :label yes :abi f(uint,uint) 0x04 0xf404 # 255 - :label yes :abi f(uint,uint) 0x05 0xf404 # 256 - :label yes :abi f(uint,uint) 0x06 0xf404 # 257 - :label yes :abi f(uint,uint) 0x07 0xf404 # 258 - :label yes :abi f(uint,uint) 0x08 0xf404 # 259 - :label yes :abi f(uint,uint) 0x09 0xf404 # 260 - :label yes :abi f(uint,uint) 0x0a 0xf404 # 261 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xf404 # 262 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xf404 # 263 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xf404 # 264 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xf404 # 265 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xf404 # 266 - :label yes_from_prague :abi f(uint,uint) 0x10 0xf404 # 266 - :label yes_from_prague :abi f(uint,uint) 0x11 0xf404 # 266 - :label no :abi f(uint,uint) 0x12 0xf404 # 266 - :label no :abi f(uint,uint) 0x100000 0xf404 # 267 - :label no :abi f(uint,uint) 0xf404 # 268 - :label yes :abi f(uint,uint) 0xf404 # 269 # STATICCALL - :label yes :abi f(uint,uint) 0x01 0xfa00 # 270 - :label yes :abi f(uint,uint) 0x02 0xfa00 # 271 - :label yes :abi f(uint,uint) 0x03 0xfa00 # 272 - :label yes :abi f(uint,uint) 0x04 0xfa00 # 273 - :label yes :abi f(uint,uint) 0x05 0xfa00 # 274 - :label yes :abi f(uint,uint) 0x06 0xfa00 # 275 - :label yes :abi f(uint,uint) 0x07 0xfa00 # 276 - :label yes :abi f(uint,uint) 0x08 0xfa00 # 277 - :label yes :abi f(uint,uint) 0x09 0xfa00 # 278 - :label yes :abi f(uint,uint) 0x0a 0xfa00 # 279 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xfa00 # 280 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xfa00 # 281 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xfa00 # 282 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xfa00 # 283 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xfa00 # 284 - :label yes_from_prague :abi f(uint,uint) 0x10 0xfa00 # 284 - :label yes_from_prague :abi f(uint,uint) 0x11 0xfa00 # 284 - :label no :abi f(uint,uint) 0x12 0xfa00 # 284 - :label no :abi f(uint,uint) 0x100000 0xfa00 # 285 - :label no :abi f(uint,uint) 0xfa00 # 286 - :label yes :abi f(uint,uint) 0xfa00 # 287 # If we send data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xfa02 # 288 - :label yes :abi f(uint,uint) 0x02 0xfa02 # 289 - :label yes :abi f(uint,uint) 0x03 0xfa02 # 290 - :label yes :abi f(uint,uint) 0x04 0xfa02 # 291 - :label yes :abi f(uint,uint) 0x05 0xfa02 # 292 - :label yes :abi f(uint,uint) 0x06 0xfa02 # 293 - :label yes :abi f(uint,uint) 0x07 0xfa02 # 294 - :label yes :abi f(uint,uint) 0x08 0xfa02 # 295 - :label yes :abi f(uint,uint) 0x09 0xfa02 # 296 - :label yes :abi f(uint,uint) 0x0a 0xfa02 # 297 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xfa02 # 298 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xfa02 # 299 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xfa02 # 300 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xfa02 # 301 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xfa02 # 302 - :label yes_from_prague :abi f(uint,uint) 0x10 0xfa02 # 302 - :label yes_from_prague :abi f(uint,uint) 0x11 0xfa02 # 302 - :label no :abi f(uint,uint) 0x12 0xfa02 # 302 - :label no :abi f(uint,uint) 0x100000 0xfa02 # 303 - :label no :abi f(uint,uint) 0xfa02 # 304 - :label yes :abi f(uint,uint) 0xfa02 # 305 # If we receive data, it behaves normally - :label yes :abi f(uint,uint) 0x01 0xfa04 # 306 - :label yes :abi f(uint,uint) 0x02 0xfa04 # 307 - :label yes :abi f(uint,uint) 0x03 0xfa04 # 308 - :label yes :abi f(uint,uint) 0x04 0xfa04 # 309 - :label yes :abi f(uint,uint) 0x05 0xfa04 # 310 - :label yes :abi f(uint,uint) 0x06 0xfa04 # 311 - :label yes :abi f(uint,uint) 0x07 0xfa04 # 312 - :label yes :abi f(uint,uint) 0x08 0xfa04 # 313 - :label yes :abi f(uint,uint) 0x09 0xfa04 # 314 - :label yes :abi f(uint,uint) 0x0a 0xfa04 # 315 - :label yes_from_prague :abi f(uint,uint) 0x0b 0xfa04 # 316 - :label yes_from_prague :abi f(uint,uint) 0x0c 0xfa04 # 317 - :label yes_from_prague :abi f(uint,uint) 0x0d 0xfa04 # 318 - :label yes_from_prague :abi f(uint,uint) 0x0e 0xfa04 # 319 - :label yes_from_prague :abi f(uint,uint) 0x0f 0xfa04 # 320 - :label yes_from_prague :abi f(uint,uint) 0x10 0xfa04 # 320 - :label yes_from_prague :abi f(uint,uint) 0x11 0xfa04 # 320 - :label no :abi f(uint,uint) 0x12 0xfa04 # 320 - :label no :abi f(uint,uint) 0x100000 0xfa04 # 321 - :label no :abi f(uint,uint) 0xfa04 # 322 - :label yes :abi f(uint,uint) 0xfa04 # 323 # Get the account balance - :label yes :abi f(uint,uint) 0x01 0x31 # 324 - :label yes :abi f(uint,uint) 0x02 0x31 # 325 - :label yes :abi f(uint,uint) 0x03 0x31 # 326 - :label yes :abi f(uint,uint) 0x04 0x31 # 327 - :label yes :abi f(uint,uint) 0x05 0x31 # 328 - :label yes :abi f(uint,uint) 0x06 0x31 # 329 - :label yes :abi f(uint,uint) 0x07 0x31 # 330 - :label yes :abi f(uint,uint) 0x08 0x31 # 331 - :label yes :abi f(uint,uint) 0x09 0x31 # 332 - :label yes :abi f(uint,uint) 0x0a 0x31 # 333 - :label yes_from_prague :abi f(uint,uint) 0x0b 0x31 # 334 - :label yes_from_prague :abi f(uint,uint) 0x0c 0x31 # 335 - :label yes_from_prague :abi f(uint,uint) 0x0d 0x31 # 336 - :label yes_from_prague :abi f(uint,uint) 0x0e 0x31 # 337 - :label yes_from_prague :abi f(uint,uint) 0x0f 0x31 # 338 - :label yes_from_prague :abi f(uint,uint) 0x10 0x31 # 338 - :label yes_from_prague :abi f(uint,uint) 0x11 0x31 # 338 - :label no :abi f(uint,uint) 0x12 0x31 # 338 - :label no :abi f(uint,uint) 0x100000 0x31 # 339 - :label no :abi f(uint,uint) 0x31 # 340 - :label yes :abi f(uint,uint) 0x31 # 341 # Get the account codehash - :label yes :abi f(uint,uint) 0x01 0x3f # 342 - :label yes :abi f(uint,uint) 0x02 0x3f # 343 - :label yes :abi f(uint,uint) 0x03 0x3f # 344 - :label yes :abi f(uint,uint) 0x04 0x3f # 345 - :label yes :abi f(uint,uint) 0x05 0x3f # 346 - :label yes :abi f(uint,uint) 0x06 0x3f # 347 - :label yes :abi f(uint,uint) 0x07 0x3f # 348 - :label yes :abi f(uint,uint) 0x08 0x3f # 349 - :label yes :abi f(uint,uint) 0x09 0x3f # 350 - :label yes :abi f(uint,uint) 0x0a 0x3f # 351 - :label yes_from_prague :abi f(uint,uint) 0x0b 0x3f # 352 - :label yes_from_prague :abi f(uint,uint) 0x0c 0x3f # 353 - :label yes_from_prague :abi f(uint,uint) 0x0d 0x3f # 354 - :label yes_from_prague :abi f(uint,uint) 0x0e 0x3f # 355 - :label yes_from_prague :abi f(uint,uint) 0x0f 0x3f # 356 - :label yes_from_prague :abi f(uint,uint) 0x10 0x3f # 356 - :label yes_from_prague :abi f(uint,uint) 0x11 0x3f # 356 - :label no :abi f(uint,uint) 0x12 0x3f # 356 - :label no :abi f(uint,uint) 0x100000 0x3f # 357 - :label no :abi f(uint,uint) 0x3f # 358 - :label yes :abi f(uint,uint) 0x3f # 359 # Copy account code - :label yes :abi f(uint,uint) 0x01 0x3c # 360 - :label yes :abi f(uint,uint) 0x02 0x3c # 361 - :label yes :abi f(uint,uint) 0x03 0x3c # 362 - :label yes :abi f(uint,uint) 0x04 0x3c # 363 - :label yes :abi f(uint,uint) 0x05 0x3c # 364 - :label yes :abi f(uint,uint) 0x06 0x3c # 365 - :label yes :abi f(uint,uint) 0x07 0x3c # 366 - :label yes :abi f(uint,uint) 0x08 0x3c # 367 - :label yes :abi f(uint,uint) 0x09 0x3c # 368 - :label yes :abi f(uint,uint) 0x0a 0x3c # 369 - :label yes_from_prague :abi f(uint,uint) 0x0b 0x3c # 370 - :label yes_from_prague :abi f(uint,uint) 0x0c 0x3c # 371 - :label yes_from_prague :abi f(uint,uint) 0x0d 0x3c # 372 - :label yes_from_prague :abi f(uint,uint) 0x0e 0x3c # 373 - :label yes_from_prague :abi f(uint,uint) 0x0f 0x3c # 374 - :label yes_from_prague :abi f(uint,uint) 0x10 0x3c # 374 - :label yes_from_prague :abi f(uint,uint) 0x11 0x3c # 374 - :label no :abi f(uint,uint) 0x12 0x3c # 374 - :label no :abi f(uint,uint) 0x100000 0x3c # 375 - :label no :abi f(uint,uint) 0x3c # 376 - :label yes :abi f(uint,uint) 0x3c # 377 # Get code size - :label yes :abi f(uint,uint) 0x01 0x3b # 378 - :label yes :abi f(uint,uint) 0x02 0x3b # 379 - :label yes :abi f(uint,uint) 0x03 0x3b # 380 - :label yes :abi f(uint,uint) 0x04 0x3b # 381 - :label yes :abi f(uint,uint) 0x05 0x3b # 382 - :label yes :abi f(uint,uint) 0x06 0x3b # 383 - :label yes :abi f(uint,uint) 0x07 0x3b # 384 - :label yes :abi f(uint,uint) 0x08 0x3b # 385 - :label yes :abi f(uint,uint) 0x09 0x3b # 386 - :label yes :abi f(uint,uint) 0x0a 0x3b # 387 - :label yes_from_prague :abi f(uint,uint) 0x0b 0x3b # 388 - :label yes_from_prague :abi f(uint,uint) 0x0c 0x3b # 389 - :label yes_from_prague :abi f(uint,uint) 0x0d 0x3b # 390 - :label yes_from_prague :abi f(uint,uint) 0x0e 0x3b # 391 - :label yes_from_prague :abi f(uint,uint) 0x0f 0x3b # 392 - :label yes_from_prague :abi f(uint,uint) 0x10 0x3b # 392 - :label yes_from_prague :abi f(uint,uint) 0x11 0x3b # 392 - :label no :abi f(uint,uint) 0x12 0x3b # 392 - :label no :abi f(uint,uint) 0x100000 0x3b # 393 - :label no :abi f(uint,uint) 0x3b # 394 - :label yes :abi f(uint,uint) 0x3b # 395 gasLimit: - '16777216' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '100000' expect: - indexes: data: - :label yes network: - ">=Cancun" result: : storage: # If this is a precompile (or previously accessed acct.), we # expect to always have the same gas cost 0x00: 0x01 0x01: 0x00 - indexes: data: - :label yes_from_prague - :label all_then_yes_from_prague network: - ">=Prague" result: : storage: # If this is a precompile (or previously accessed acct.), we # expect to always have the same gas cost 0x00: 0x01 0x01: 0x00 # The EIP 2929 cost for a new account reference - indexes: data: - :label no network: - ">=Cancun" result: : storage: # If this isn't a precompile, we expect the second call to it to cost # less than the first 0x00: 0x0000 0x01: 0x09c4 - indexes: data: - :label yes_from_prague network: - "Cancun" result: : storage: # If this isn't a precompile, we expect the second call to it to cost # less than the first 0x00: 0x0000 0x01: 0x09c4 # The cost for a new trie - indexes: data: - :label new network: - ">=Cancun" result: : storage: # If we need to create a new trie, that's a different cost # than the EIP 2929 one. 0x00: 0x0000 0x01: 0x61a8 # The cost for a new reference AND a new trie - indexes: data: - :label all network: - ">=Cancun" result: : storage: # If we need to create a new trie, that's a different cost # than the EIP 2929 one. 0x00: 0x0000 0x01: 0x6b6c - indexes: data: - :label all_then_yes_from_prague network: - "Cancun" result: : storage: # If we need to create a new trie, that's a different cost # than the EIP 2929 one. 0x00: 0x0000 0x01: 0x6b6c ================================================ FILE: tests/static/state_tests/stPreCompiledContracts/sec80Filler.json ================================================ { "sec80" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xc001f00d" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : ":raw 0x601b565b6000555b005b630badf00d6003565b63c001f00d6003565b7319e7e376e7c213b7e7e7e46cc70a5dd086daff2a7f22ae6da6b482f9b1b19b0b897c3fd43884180a1c5ee361e1107a1bc635649dda600052601b603f537f16433dce375ce6dc8151d3f0a22728bc4a1d9fd6ed39dfd18b4609331937367f6040527f306964c0cf5d74f04129fdc60b54d35b596dde1bf89ad92cb4123318f4c0e40060605260206080607f60006000600161fffff21560075760805114601257600956", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0Filler.json ================================================ { "CALLCODEEcrecover0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0_0inputFiller.json ================================================ { "CALLCODEEcrecover0_0input" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0_Gas2999Filler.json ================================================ { "CALLCODEEcrecover0_Gas2999" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 2999 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0_NoGasFiller.json ================================================ { "CALLCODEEcrecover0_NoGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : {} } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 0 1 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { "0x00" : "12", "0x01" : "12", "0x02" : "12" } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0_completeReturnValueFiller.json ================================================ { "CALLCODEEcrecover0_completeReturnValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 3000 1 0 0 128 128 32) [[ 0 ]] (MLOAD 128) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0_gas3000Filler.json ================================================ { "CALLCODEEcrecover0_gas3000" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 3000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover0_overlappingInputOutputFiller.json ================================================ { "CALLCODEEcrecover0_overlappingInputOutput" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 64 32) [[ 0 ]] (MOD (MLOAD 64) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover1Filler.json ================================================ { "CALLCODEEcrecover1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 1) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 100000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover2Filler.json ================================================ { "CALLCODEEcrecover2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 33 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 65 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 100000 1 0 0 97 97 32) [[ 0 ]] (MOD (MLOAD 97) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover3Filler.json ================================================ { "CALLCODEEcrecover3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe4319f4b631c6d0fcfc84045dbcb676865fe5e13", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9) (MSTORE 32 27) (MSTORE 64 0x6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a) (MSTORE 96 0x37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d4) [[ 2 ]] (CALLCODE 100000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecover80Filler.json ================================================ { "CALLCODEEcrecover80" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x00b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0x00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecoverH_prefixed0Filler.json ================================================ { "CALLCODEEcrecoverH_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xa0b29af6a56d6cfef6415cb195ccbe540e006d0a", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecoverR_prefixed0Filler.json ================================================ { "CALLCODEEcrecoverR_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x00b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecoverS_prefixed0Filler.json ================================================ { "CALLCODEEcrecoverS_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xb4950a7fad428434b11c357fa6d4b4bcd3096a5d", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0x00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixed0Filler.json ================================================ { "CALLCODEEcrecoverV_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 0x001c) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixedf0Filler.json ================================================ { "CALLCODEEcrecoverV_prefixedf0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 (CALLDATALOAD 0)) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALLCODE 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000f01c", ":raw 0x00000000000000000000000000000000f000000000000000000000000000001c" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_0Filler.json ================================================ { "CALLCODERipemd160_0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "0x600160005260206000602060006000600360fff2600051600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_1Filler.json ================================================ { "CALLCODERipemd160_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (CALLCODE 600 3 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_2Filler.json ================================================ { "CALLCODERipemd160_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xdbc100f916bfbc53535573d98cf0cbb3a5b36124", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 5 0xf34578907f) [[ 2 ]] (CALLCODE 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_3Filler.json ================================================ { "CALLCODERipemd160_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (CALLCODE 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_3_postfixed0Filler.json ================================================ { "CALLCODERipemd160_3_postfixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7730b4642169b0f16752696da8da830a4b429c9d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f00) [[ 2 ]] (CALLCODE 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_3_prefixed0Filler.json ================================================ { "CALLCODERipemd160_3_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00f34578907f) [[ 2 ]] (CALLCODE 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_4Filler.json ================================================ { "CALLCODERipemd160_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1cf4e77f5966e13e109703cd8a0df7ceda7f3dc3", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALLCODE 720 3 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_4_gas719Filler.json ================================================ { "CALLCODERipemd160_4_gas719" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALLCODE 719 3 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODERipemd160_5Filler.json ================================================ { "CALLCODERipemd160_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALLCODE 6000 3 0 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_0Filler.json ================================================ { "CALLCODESha256_0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xec4916dd28fc4c10d78e287ca5d9cc51ee1ae73cbfde08c6b37324cbfaac8bc5" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "0x600160005260206000602060006000600260fff2600051600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_1Filler.json ================================================ { "CALLCODESha256_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (CALLCODE 500 2 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_1_nonzeroValueFiller.json ================================================ { "CALLCODESha256_1_nonzeroValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "200000000", "code" : "{ [[ 2 ]] (CALLCODE 200000 2 0x13 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_2Filler.json ================================================ { "CALLCODESha256_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 5 0xf34578907f) [[ 2 ]] (CALLCODE 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_3Filler.json ================================================ { "CALLCODESha256_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (CALLCODE 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_3_postfix0Filler.json ================================================ { "CALLCODESha256_3_postfix0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x3b745a1c00d035c334f358d007a430e4cf0ae63aa0556fb05529706de546464d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f00) [[ 2 ]] (CALLCODE 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_3_prefix0Filler.json ================================================ { "CALLCODESha256_3_prefix0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00f34578907f) [[ 2 ]] (CALLCODE 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_4Filler.json ================================================ { "CALLCODESha256_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALLCODE 100 2 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_4_gas99Filler.json ================================================ { "CALLCODESha256_4_gas99" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALLCODE 99 2 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CALLCODESha256_5Filler.json ================================================ { "CALLCODESha256_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALLCODE 600 2 0 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0Filler.json ================================================ { "CallEcrecover0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0_0inputFiller.json ================================================ { "CallEcrecover0_0input" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0_Gas2999Filler.json ================================================ { "CallEcrecover0_Gas2999" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 2999 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0_NoGasFiller.json ================================================ { "CallEcrecover0_NoGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 0 1 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { "0x00" : "12", "0x01" : "12", "0x02" : "12" } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0_completeReturnValueFiller.json ================================================ { "CallEcrecover0_completeReturnValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 3000 1 0 0 128 128 32) [[ 0 ]] (MLOAD 128) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0_gas3000Filler.json ================================================ { "CallEcrecover0_gas3000" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 3000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover0_overlappingInputOutputFiller.json ================================================ { "CallEcrecover0_overlappingInputOutput" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 64 32) [[ 0 ]] (MOD (MLOAD 64) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover1Filler.json ================================================ { "CallEcrecover1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 1) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 100000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover2Filler.json ================================================ { "CallEcrecover2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 33 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 65 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 100000 1 0 0 97 97 32) [[ 0 ]] (MOD (MLOAD 97) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover3Filler.json ================================================ { "CallEcrecover3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe4319f4b631c6d0fcfc84045dbcb676865fe5e13", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9) (MSTORE 32 27) (MSTORE 64 0x6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a) (MSTORE 96 0x37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d4) [[ 2 ]] (CALL 100000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover80Filler.json ================================================ { "CallEcrecover80" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x00b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0x00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverCheckLengthFiller.json ================================================ { "CallEcrecoverCheckLength" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0xa0", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 128 0x1122334455667788990011223344556677889900112233445566778899001122) (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MLOAD 128) [[ 1 ]] (MSIZE) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverCheckLengthWrongVFiller.json ================================================ { "CallEcrecoverCheckLengthWrongV" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1122334455667788990011223344556677889900112233445566778899001122", "0x01" : "0xa0", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 128 0x1122334455667788990011223344556677889900112233445566778899001122) (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 29) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MLOAD 128) [[ 1 ]] (MSIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverH_prefixed0Filler.json ================================================ { "CallEcrecoverH_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xa0b29af6a56d6cfef6415cb195ccbe540e006d0a", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverInvalidSignatureFiller.json ================================================ { "CallEcrecoverInvalidSignature" : { "_info" : { "comment": "CALL to ECREC precompile with input which is a completely invalid signature and a 32 byte output range in memory. ECREC should return an empty response and the 32 byte output range should be left unchanged." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1122334455667788991011121314151617181920212223242526272829303132" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 128 0x1122334455667788991011121314151617181920212223242526272829303132) (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MLOAD 128) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverR_prefixed0Filler.json ================================================ { "CallEcrecoverR_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x00b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverS_prefixed0Filler.json ================================================ { "CallEcrecoverS_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xb4950a7fad428434b11c357fa6d4b4bcd3096a5d", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0x00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverUnrecoverableKeyFiller.json ================================================ { "CallEcrecoverUnrecoverableKey" : { "_info" : { "comment": "CALL to ECREC precompile with input that has a valid signature structure but that does not recover a valid key. Specifies a 32 byte output range in memory. ECREC should return an empty response and the 32 byte output range should be left unchanged." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1122334455667788991011121314151617181920212223242526272829303132" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xa8b53bdf3306a35a7103ab5504a0c9b492295564b6202b1942a84ef300107281) (MSTORE 32 0x000000000000000000000000000000000000000000000000000000000000001b) (MSTORE 64 0x3078356531653033663533636531386237373263636230303933666637316633) (MSTORE 96 0x6635336635633735623734646362333161383561613862383839326234653862) (MSTORE 128 0x1122334455667788991011121314151617181920212223242526272829303132) (CALL 300000 1 0 0 128 128 32) (SSTORE 0 (MLOAD 128)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecoverV_prefixed0Filler.json ================================================ { "CallEcrecoverV_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 0x001c) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (CALL 300000 1 0 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallEcrecover_OverflowFiller.yml ================================================ # Test limit RS values for EC Recover precompile (R, S == secp256k1n) # secp256k1n == 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 CallEcrecover_Overflow: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' pre: : code: | :yul berlin { // Copy Hash, V, R, S values calldatacopy(0x00, 0x04, 0x80) // Call the EC Recover Precompile sstore(0, call(3000, 1, 0, 0, 0x80, 0x80, 0x20)) sstore(1, mload(0x80)) } nonce: '0' storage: {} balance: 0 : balance: '1000000000000000000' code: 0x nonce: '0' storage: {} transaction: data: # R Overflow == secp256k1N - :label fail :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 0x1fffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804 # R Overflow == secp256k1N + 1 - :label fail :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142 0x1fffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804 # R High == secp256k1N - 1 (Fails due to R not being able to be a point on the curve, not due to the secp256k1N limit) - :label fail :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140 0xefffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804 # R High == secp256k1N - 2 - :label pass01 :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413f 0xefffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804 # S Overflow == secp256k1N - :label fail :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 # S Overflow == secp256k1N + 1 - :label fail :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142 # S High == secp256k1N - 1 - :label pass02 :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140 # S High == secp256k1N - 2 - :label pass03 :abi f(uint,uint,uint,uint) 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c 0x1c 0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413f gasLimit: - '0x186a0' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '100000' expect: - indexes: data: - :label fail gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 0x01 0x01: 0x00 - indexes: data: - :label pass01 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 0x01 0x01: 0x2182da748249a933bf737586b80212df19b8f829 - indexes: data: - :label pass02 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 0x01 0x01: 0x1b85ac3c9b09de43659c5d04a2d9c75457d9abf4 - indexes: data: - :label pass03 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : storage: 0x00: 0x01 0x01: 0xd0277c8a3eccd462a313fc60161bac36b16e8699 ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_0Filler.json ================================================ { "CallRipemd160_0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "0x600160005260206000602060006000600360fff1600051600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_1Filler.json ================================================ { "CallRipemd160_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (CALL 600 3 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_2Filler.json ================================================ { "CallRipemd160_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xdbc100f916bfbc53535573d98cf0cbb3a5b36124", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 5 0xf34578907f) [[ 2 ]] (CALL 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_3Filler.json ================================================ { "CallRipemd160_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (CALL 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_3_postfixed0Filler.json ================================================ { "CallRipemd160_3_postfixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7730b4642169b0f16752696da8da830a4b429c9d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f00) [[ 2 ]] (CALL 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_3_prefixed0Filler.json ================================================ { "CallRipemd160_3_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00f34578907f) [[ 2 ]] (CALL 6000 3 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_4Filler.json ================================================ { "CallRipemd160_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1cf4e77f5966e13e109703cd8a0df7ceda7f3dc3", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALL 720 3 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_4_gas719Filler.json ================================================ { "CallRipemd160_4_gas719" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALL 719 3 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallRipemd160_5Filler.json ================================================ { "CallRipemd160_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALL 6000 3 0 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_0Filler.json ================================================ { "CallSha256_0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xec4916dd28fc4c10d78e287ca5d9cc51ee1ae73cbfde08c6b37324cbfaac8bc5" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "0x600160005260206000602060006000600260fff1600051600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_1Filler.json ================================================ { "CallSha256_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (CALL 500 2 0 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_1_nonzeroValueFiller.json ================================================ { "CallSha256_1_nonzeroValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000002" : { "balance" : "19" }, "" : { "storage" : { "0x00" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "200000000", "code" : "{ [[ 2 ]] (CALL 200000 2 0x13 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_2Filler.json ================================================ { "CallSha256_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 5 0xf34578907f) [[ 2 ]] (CALL 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_3Filler.json ================================================ { "CallSha256_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (CALL 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_3_postfix0Filler.json ================================================ { "CallSha256_3_postfix0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x3b745a1c00d035c334f358d007a430e4cf0ae63aa0556fb05529706de546464d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f00) [[ 2 ]] (CALL 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_3_prefix0Filler.json ================================================ { "CallSha256_3_prefix0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00f34578907f) [[ 2 ]] (CALL 500 2 0 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_4Filler.json ================================================ { "CallSha256_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALL 100 2 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_4_gas99Filler.json ================================================ { "CallSha256_4_gas99" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALL 99 2 0 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/CallSha256_5Filler.json ================================================ { "CallSha256_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (CALL 600 2 0 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/ecrecoverShortBuffFiller.yml ================================================ # Call the ecrecover precompile with a short (<128 bytes) buffer, or an excessively long one. # These tests are >=TangerineWhistle for using the 63/64th rule, but let's use >=Byzantium. Should be >=FRontier otherwise. # Using # wallet = ethers.Wallet.createRandom() # # SigningKey { # curve: 'secp256k1', # privateKey: '0xaedd8fff1fea5cc2513c2db88712d7e2345cd9ba6bcebdd745ec77640961695e', # publicKey: '0x04b2a40facc0b5f39f3d6f2c8986586ceb8a98cf1574d63f5f797b4db6d3a6ae5efaafdb83ee78f78c2b10021a5cb$ # compressedPublicKey: '0x03b2a40facc0b5f39f3d6f2c8986586ceb8a98cf1574d63f5f797b4db6d3a6ae5e', # _isSigningKey: true # } # # Wallet { # _isSigner: true, # _signingKey: [Function (anonymous)], # address: '0x3f9Ecb7B25fa567AFB2a4c7B633749bdA578B593', # _mnemonic: [Function (anonymous)], # provider: null # } # # zero = "0x0000000000000000000000000000000000000000000000000000000000000000" # # wallet._signingKey().signDigest(zero) # wallet._signingKey().signDigest(zero) # { # r: '0x184870a8e4faa6065ddf65c873935d3e48e3d1c7b7853f25cd79b8247f771910', # s: '0x226140b6b66554c7fcfa38589e433cc148ebe5c8482eb3093ab1d9a932c96f58', # _vs: '0x226140b6b66554c7fcfa38589e433cc148ebe5c8482eb3093ab1d9a932c96f58', # recoveryParam: 0, # v: 27, # yParityAndS: '0x226140b6b66554c7fcfa38589e433cc148ebe5c8482eb3093ab1d9a932c96f58', # compact: '0x184870a8e4faa6065ddf65c873935d3e48e3d1c7b7853f25cd79b8247f771910226140b6b66554c7fcfa38589e$ # } # # ethers.utils.recoverAddress(zero, # "0x184870a8e4faa6065ddf65c873935d3e48e3d1c7b7853f25cd79b8247f771910226140b6b66554c7fcfa38589e433cc148eb$ # # '0x3f9Ecb7B25fa567AFB2a4c7B633749bdA578B593' ecrecoverShortBuff: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '0xFF112233445566' currentNumber: '1' currentTimestamp: '1000' pre: cccccccccccccccccccccccccccccccccccccccc: code: | :yul berlin { let maxLength := 0xA0 // Initialization for { let i := 0 } lt(i, maxLength) { i := add(i, 1) } { // Initialize storage to verify it gets overwritten sstore(i, 0xdead60A7) sstore(add(0x1000,i), 0xdead60A7) } // Create a legitimate signature mstore(0, 0) // The signature (for zero) mstore(0x20, 27) // v mstore(0x40, 0x184870a8e4faa6065ddf65c873935d3e48e3d1c7b7853f25cd79b8247f771910) // r mstore(0x60, 0x226140b6b66554c7fcfa38589e433cc148ebe5c8482eb3093ab1d9a932c96f58) // s // Call ecrecover with every possible length that's too short, the right length // (0x80), and some excessive lengths for { let len := 0 } lt(len, maxLength) { len := add(len,1) } { // Call ecrecoer sstore(len, call(gas(), 1, 0, 0, len, 0x100, 0x20)) // The expected retval is one, so to avoid specifying every length // in the expect: section we subtract one. sstore(len, sub(sload(len), 1)) // The returned address should always be zero, because it is not a valid signature sstore(add(0x1000,len), mload(0x100)) } } nonce: 1 storage: # Some values to make sure we overwrite storage 0x0000: 0x60A7 0x0011: 0x60A7 0x0022: 0x60A7 0x0033: 0x60A7 0x0044: 0x60A7 0x0055: 0x60A7 0x0066: 0x60A7 0x0077: 0x60A7 0x0080: 0x60A7 0x0099: 0x60A7 0x1000: 0x60A7 0x1011: 0x60A7 0x1022: 0x60A7 0x1033: 0x60A7 0x1044: 0x60A7 0x1055: 0x60A7 0x1066: 0x60A7 0x1077: 0x60A7 0x1080: 0x60A7 0x1099: 0x60A7 balance: 0 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: 0x nonce: 1 storage: {} transaction: data: - :raw 0x00 gasLimit: - '0x70ea40' gasPrice: '10' nonce: 1 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: cccccccccccccccccccccccccccccccccccccccc value: - '100000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: cccccccccccccccccccccccccccccccccccccccc: storage: # The return value for ecrecover is always one, the smart contract subtracts that # so we won't have to specify every value 0x00: 0 0x01: 0 # . # . # . 0x9F: 0 # For buffer lengths 0x00 - 0x60 s is zero, so we get a zero as the address 0x1000: 0x00 0x1010: 0x00 0x1030: 0x00 0x1060: 0x00 # For buffer lengths 0x61 - 0x7F we get incorrect addresses, because the input is value # but valid for a different address than ours (because s is a non-zero value, # just not the correct one) 0x1061: 0x8e5817968f74ffb0255ae41eefa6f89dd0183fa1 0x1062: 0xb7529ed60a10291754a635ed9fd67c1723f4d83b 0x1063: 0x0669457ce81442f235ffc4123662ba14a72b3d68 0x1064: 0xdcc53a4a0719101437e8791abf273af5893cb174 0x1065: 0xa1889691e30136d95c0543f516bf2357b282d835 0x1066: 0x06642c4fd062a12b980d2bf28334e48ffe609248 0x1067: 0x628f176bc4c64973abaf9acb6bd8bb8d9b1ae97c 0x1068: 0x16fe7fa0cb8a861f855039c2eda9251ca7cc79d0 0x1069: 0x01c954021193a220878900cf5f7db5b3ea4c2b24 0x106a: 0x5c4725e00d8f9415e2b77630543fe41dcdaaa304 0x106b: 0xf6defd0f92f2a018ba20bf6051698a8dde7cc949 0x106c: 0x99cd51158e59da36ba48b457c02db77c17a6b91a 0x106d: 0xfc4539330fee551b296f9396d01ab7643521d5df 0x106e: 0x389a57ba1c546578b67167c6571d92e047bd4029 0x106f: 0x294091b609877b020b4f5a01357936fc0a877a3f 0x1070: 0xad5a9fc193dcf16041d4e96433ef3a6d82d36b16 0x1071: 0x8324683aaae32ccebdeb758e2777ab2b1ce3d3f1 0x1072: 0x295ad34cb312eaf9574511208848caf57b7429e0 0x1073: 0x0a74178ec0a865b84eed705e85ddf9b5002389ab 0x1074: 0xd1d3bc125318dd71176248d9c86f41a842d4bec9 0x1075: 0xe8e2d3e49d1bb0ddf5beeff311456f251dae9ea9 0x1076: 0xd8765900c0f467df6bc4f514ed39c568497a8ead 0x1077: 0xdb658a31f5a174be0e3fc0d0ce05dd6a76084910 0x1078: 0x1387af122c1e31a2dd1dac303b3f20ad83f0ed1b 0x1079: 0x9ca540e3f00347324bd94a94ce8e3a34b97c8244 0x107a: 0x8d682238981c4940830fa6971d25e036d1fb3d27 0x107b: 0xf571eb5abd7da99c6b32b3f3ed0740f6fac7d14b 0x107c: 0x79e727f2f0f816efd56fc2af37d98af6798551df 0x107d: 0x0f00d6a30e65104b909aa43d947ef2010e09446a 0x107e: 0x4c78739de03a70dbcf9b94bc21daf2bf46d44375 0x107f: 0x364a9dae48110760306b009bf2297819176be559 # # At a length of 0x80 or more we get the correct result 0x1080: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1081: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1082: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1083: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1084: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1085: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1086: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1087: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1088: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1089: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x108a: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x108b: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x108c: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x108d: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x108e: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x108f: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1090: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1091: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1092: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1093: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1094: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1095: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1096: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1097: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1098: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x1099: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x109a: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x109b: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x109c: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x109d: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x109e: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 0x109f: 0x3f9ecb7b25fa567afb2a4c7b633749bda578b593 ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/ecrecoverWeirdVFiller.yml ================================================ # Check various weird V values on ecRecover, see they don't work even though the signature is legal. # These tests are >=Byzantium because using staticcall, but should be >=Frontier otherwise. # Using (on hardhat console): # wallet = ethers.Wallet.createRandom() # zero = "0x0000000000000000000000000000000000000000000000000000000000000000" # wallet._signingKey().signDigest(zero) # ethers.utils.recoverAddress(zero, wallet._signingKey().signDigest(zero).compact) # # Wallet used: # Wallet { # _isSigner: true, # _signingKey: [Function (anonymous)], # address: '0xB957B0Da344F6A17F0081d63be7345A860E5B7A2', # _mnemonic: [Function (anonymous)], # provider: null # } # # wallet._mnemonic() # { # phrase: 'unveil tower patrol spike aerobic vague frown crew agree motor tilt elevator', # path: "m/44'/60'/0'/0/0", # locale: 'en' # } ecrecoverWeirdV: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 pre: : balance: 0 nonce: 1 code: '' storage: {} : balance: 0 code: | :yul berlin { let ecRecoverAddr := 1 // Call ecRecover // Not the most efficient code, but it is more readable to see what each parameter means mstore(0x00, calldataload(0x04)) // msgHash mstore(0x20, calldataload(0x24)) // v mstore(0x40, calldataload(0x44)) // r mstore(0x60, calldataload(0x64)) // s let res := staticcall(gas(), ecRecoverAddr, 0, 0x80, 0x100, 0x100) // write results sstore(0, res) sstore(1, mload(0x100)) sstore(2, mload(0x120)) } nonce: 1 storage: 0: 0x60A7 1: 0x60A7 2: 0x60A7 : balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: # msgHash v r s - :label fail :abi f(uint,uint,uint,uint) 0x7E57 0x7E57 0x7E57 0x7E57 - :label good :abi f(uint,uint,uint,uint) 0x00 27 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label good :abi f(uint,uint,uint,uint) 0x01 28 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label good :abi f(uint,uint,uint,uint) 0xdeaf0dead0600D0F00D00000000000000060A70000000000000F0AD0bad0beef 27 0x8a41a35dfd03f28615dc64b7754457691c66bd73f630c7423280282fa431a5be 0x2d40decf11713d564fa2df10dea5eb2adf45455ed309b4c8cc6853e2498323f5 # Valid signature from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md - :label fail :abi f(uint,uint,uint,uint) 0xdaf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53 37 18515461264373351373200002665853028612451056578545711640558177340181847433846 46948507304638947509940763649030358759909902576025900602547168820602576006531 # Only the bottom bit of V is relevant to the actual signature. # The value is either: # parity+27 (no chaind) # parity+35+2*chainid (with a chainid) # # Try a bunch of values that would be correct, but aren't ecrecover friendly # Chainid 1 - :label fail :abi f(uint,uint,uint,uint) 0x00 37 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 38 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # Chainid 6 - :label fail :abi f(uint,uint,uint,uint) 0x00 47 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 48 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # Chainid 11 - :label fail :abi f(uint,uint,uint,uint) 0x00 57 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 58 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # Chainid 21 - :label fail :abi f(uint,uint,uint,uint) 0x00 77 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 78 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # Chainid 0 - :label fail :abi f(uint,uint,uint,uint) 0x00 35 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 36 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # Chainid 100 - :label fail :abi f(uint,uint,uint,uint) 0x00 235 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 236 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # "Negative" chainId values - :label fail :abi f(uint,uint,uint,uint) 0x01 0 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 1 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 2 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 3 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 4 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 5 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 6 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 7 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 8 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 # V values above one byte - :label fail :abi f(uint,uint,uint,uint) 0x00 0x0000000000ff 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 0x000000000100 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 0x0000000010ff 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 0x000000001100 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 0x0000000100ff 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 0x000000010100 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 0x0000123456ff 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 0x000012345700 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 - :label fail :abi f(uint,uint,uint,uint) 0x00 0xdeadbeef00ff 0xce354e1b07ba96e325aa4851999f07aabcb4471e49f0a0daafed98caab963f03 0x79d9f3993cdd509f1bfba63dbd23dbdff879fb95203a5049f348a95ce8249f3b - :label fail :abi f(uint,uint,uint,uint) 0x01 0xdeadbeef0100 0x541c4ce1565a646ddde26e1b483a88a6500ce15bd24622492f05cdd18b97161d 0x1827e364c15cfa61dab02339904b1e542f3939c6e8d6367d352026e71ffd6af5 gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: value: - 0 secretKey: "" expect: # The result with invalid parameters (parameters that aren't a valid signature - indexes: data: :label fail gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 1 0x01: 0 0x02: 0 # Valid parameters (with the B95...7A2 address) - indexes: data: :label good gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 1 0x01: 0xB957B0Da344F6A17F0081d63be7345A860E5B7A2 0x02: 0 ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/modexpRandomInputFiller.json ================================================ { "modexpRandomInput": { "_info" : { "comment" : "Fuzzed input discovered by Guido" }, "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x1", "currentTimestamp": "1000" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre": { "" : { "balance" : "1000000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction": { "data": [ ":raw 0x00000000000000000000000000000000000000000000000000000000000000e300000000000000000000000000000000000000000000000000", ":raw 0x00000000008000000000000000000000000000000000000000000000000000000000000400000000000000000000000a", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001147000000000000000000000000000000000000000000000000000000000061660350000000000000000000000000000000000000000000000000000000000000008" ], "gasLimit": [ "710000", "7000000" ], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "0x0000000000000000000000000000000000000005", "value": [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/modexp_0_0_0_20500Filler.json ================================================ { "modexp_0_0_0_20500": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x1", "currentTimestamp": "1000" }, "pre": { "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "balance": "999999999999868434", "nonce": "1", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760846004356004013511151558576004356004013560200160043560040161014037600161024061014051610160600060056305f5e0fff11558576001610220526102206021806102808284600060046015f150505061028080516020820120905060005561028060206020820352604081510160206001820306601f820103905060208203f350005b", "storage": {} }, "3535353535353535353535353535353535353535": { "balance": "131566", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } }, "transaction": { "data": [ "0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa62c", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760846004356004013511151558576004356004013560200160043560040161014037600161024061014051610160600060056305f5e0fff11558576001610220526102206021806102808284600060046015f150505061028080516020820120905060005561028060206020820352604081510160206001820306601f820103905060208203f350005b", "storage": {} }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "//balance": "999999999999825894", "nonce": "2", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "3535353535353535353535353535353535353535": { "//balance": "174106", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760846004356004013511151558576004356004013560200160043560040161014037600161024061014051610160600060056305f5e0fff11558576001610220526102206021806102808284600060046015f150505061028080516020820120905060005561028060206020820352604081510160206001820306601f820103905060208203f350005b", "storage": { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "nonce": "2", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "3535353535353535353535353535353535353535": { "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } } } ], "_info": { "comment": "Puts the base 0, exponent 0 and modulus 0 into the MODEXP precompile, saves the hash of the result. Gives the execution 20500 gas" } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/modexp_0_0_0_22000Filler.json ================================================ { "modexp_0_0_0_22000": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x1", "currentTimestamp": "1000" }, "pre": { "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "balance": "999999999999868434", "nonce": "1", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760846004356004013511151558576004356004013560200160043560040161014037600161024061014051610160600060056305f5e0fff11558576001610220526102206021806102808284600060046015f150505061028080516020820120905060005561028060206020820352604081510160206001820306601f820103905060208203f350005b", "storage": {} }, "3535353535353535353535353535353535353535": { "balance": "131566", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } }, "transaction": { "data": [ "0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xbc08", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "storage": { "0x00": "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "nonce": "2" }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } } } ], "_info": { "comment": "Puts the base 0, exponent 0 and modulus 0 into the MODEXP precompile, saves the hash of the result. Gives the execution 22000 gas" } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/modexp_0_0_0_25000Filler.json ================================================ { "modexp_0_0_0_25000": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x1", "currentTimestamp": "1000" }, "pre": { "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "balance": "999999999999868434", "nonce": "1", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760846004356004013511151558576004356004013560200160043560040161014037600161024061014051610160600060056305f5e0fff11558576001610220526102206021806102808284600060046015f150505061028080516020820120905060005561028060206020820352604081510160206001820306601f820103905060208203f350005b", "storage": {} }, "3535353535353535353535353535353535353535": { "balance": "131566", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } }, "transaction": { "data": [ "0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb7c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "storage": { "0x00": "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "nonce": "2" }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } } } ], "_info": { "comment": "Puts the base 0, exponent 0 and modulus 0 into the MODEXP precompile, saves the hash of the result. Gives the execution 25000 gas" } } } ================================================ FILE: tests/static/state_tests/stPreCompiledContracts2/modexp_0_0_0_35000Filler.json ================================================ { "modexp_0_0_0_35000": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x1", "currentTimestamp": "1000" }, "pre": { "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "balance": "999999999999868434", "nonce": "1", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760846004356004013511151558576004356004013560200160043560040161014037600161024061014051610160600060056305f5e0fff11558576001610220526102206021806102808284600060046015f150505061028080516020820120905060005561028060206020820352604081510160206001820306601f820103905060208203f350005b", "storage": {} }, "3535353535353535353535353535353535353535": { "balance": "131566", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } }, "transaction": { "data": [ "0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xded0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "c305c901078781c232a2a521c2af7980f8385ee9": { "balance": "0", "nonce": "1", "storage": { "0x00": "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } }, "0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "nonce": "2" }, "0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} }, "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "code": "0x", "storage": {} } } } ], "_info": { "comment": "Puts the base 0, exponent 0 and modulus 0 into the MODEXP precompile, saves the hash of the result. Gives the execution 35000 gas" } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call1MB1024CalldepthFiller.json ================================================ { "Call1MB1024Calldepth" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "882500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "//balance" : "0x0fffffffffffff", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x45", "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "//balance" : "0x0fffffffffffff", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) [[ 0 ]] (+ @@0 1) (if (LT @@0 1024) [[ 1 ]] (CALL (- (GAS) 1005000) 0 0 1000000 0 0) [[ 2 ]] 1 ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call20KbytesContract50_1Filler.json ================================================ { "Call20KbytesContract50_1" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "882500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x0e90" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x32" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "//comment" : "Some crazy code", "code" : ":raw 0x6001600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) [[ 0 ]] (CALL 88250000000 0 0 0 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "12500000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call20KbytesContract50_2Filler.json ================================================ { "Call20KbytesContract50_2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "882500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x02" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x32" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b60326080511015604057600060006000600060007364148c1c2280f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "//comment" : "Some crazy code", "code" : ":raw 0x60015b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) [[ 0 ]] (CALL 88250000000 0 0 0 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call20KbytesContract50_3Filler.json ================================================ { "Call20KbytesContract50_3" : { "_info" : { "comment": "Potentially broken test: gas optimization shows that we can go as low as 212,154 gas limit and it would still have the same traces as with 250 million." }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "882500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x02" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x32" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "//comment" : "Some crazy code", "code" : ":raw 0x6001614a8e565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) [[ 0 ]] (CALL 88250000000 0 0 0 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call50000Filler.json ================================================ { "Call50000" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "860000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c3506000600173610640f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c3506000600173610640f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 1600 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call50000_ecrecFiller.json ================================================ { "Call50000_ecrec" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602c576000600061c3506000600160016101f4f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602c576000600061c3506000600160016101f4f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 500 1 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call50000_identity2Filler.json ================================================ { "Call50000_identity2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "882500000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x602a6001525b61c350608051101560325761c350600161c35060006001600461061cf16000556001608051016080526005565b60805160015560015160025500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x602a6001525b61c350608051101560325761c350600161c35060006001600461061cf16000556001608051016080526005565b60805160015560015160025500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) [ 1 ] 42 (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 1564 4 1 0 50000 1 50000) ) [[ 1 ]] @i [[ 2 ]] @1 }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call50000_identityFiller.json ================================================ { "Call50000_identity" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "882500000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602c576000600061c35060006001600461061cf16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602c576000600061c35060006001600461061cf16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 1564 4 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call50000_rip160Filler.json ================================================ { "Call50000_rip160" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "3925000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602d576000600061c35060006001600362013178f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602d576000600061c35060006001600362013178f16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 78200 3 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Call50000_sha256Filler.json ================================================ { "Call50000_sha256" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "3925000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun=Cancun=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c3506000600173610640f26000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c3506000600173610640f26000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALLCODE 1600 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Create1000ByzantiumFiller.json ================================================ { "Create1000Byzantium" : { "_info" : { "comment": "Gas analysis showed this test's gas can go as low as 21053, and still yield the same traces, which implies the test is broken" }, "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "8600000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun=Cancun=Cancun=Cancun=Cancun=Cancun 0)", "//comment9" : " {", "//comment10" : " a.call('just', 'call');", "//comment11" : " count = count - 1;", "//comment12" : " }", "//comment13" : " }", "//comment14" : "}", "balance" : "5000000000000000", "code" : ":raw 0x60003560e060020a9004806361a4770614601557005b601e6004356024565b60006000f35b60008160008190555073b94f5374fce5edbc8e2a8697c15331677e6ebf0b90505b600082131560bf5780600160a060020a03166000600060007f6a7573740000000000000000000000000000000000000000000000000000000081526004017f63616c6c000000000000000000000000000000000000000000000000000000008152602001600060008560155a03f150506001820391506045565b505056", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "5000000", "code" : "{ (CALLDATACOPY 0 0 50000) }", "nonce" : "0", "storage" : { } }, "c9c5a15a403e41498b6f69f6f89dd9f5892d21f7" : { "balance" : "5000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x61a47706000000000000000000000000000000000000000000000000000000000000c350" ], "gasLimit" : [ "150000", "250000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "6a7eeac5f12b409d42028f66b0b2132535ee158cfda439e3bfdd4558e8f4bf6c", "to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Return50000Filler.json ================================================ { "Return50000" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "8825000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x600161c34f35f300", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0xc350" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x600161c34f35f300", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c350600060007361061cf16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (RETURN (CALLDATALOAD 49999) 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 1564 0 0 50000 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/Return50000_2Filler.json ================================================ { "Return50000_2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "8825000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x61c34f356000526001600051f300", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c350600060007361061cf16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0xc350" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x61c34f356000526001600051f300", "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015603f576000600061c350600060007361061cf16000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ [ 0 ] (CALLDATALOAD 49999) (RETURN @0 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (CALL 1564 0 0 50000 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000", "16000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stQuadraticComplexityTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stRandom/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest0Filler.json ================================================ { "randomStatetest0" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff857ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1302056f60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff857ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1302056f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1631233707" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest100Filler.json ================================================ { "randomStatetest100" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x414243444342444283f24455", "nonce" : "0", "storage" : { "0x020000" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x414243444342444283f24455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest102Filler.json ================================================ { "randomStatetest102" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x157094ffff1a04893a9cf3858b857655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f00000000000000000000000044447f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f157094ffff1a04893a9cf3858b85765560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f00000000000000000000000044447f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f157094ffff1a04893a9cf3858b8576" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "634395362" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest103Filler.json ================================================ { "randomStatetest103" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe92357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff597f00000000000000000000000000000000000000000000000000000000000000019385a39988160a205a93196d336428", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe92357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff597f00000000000000000000000000000000000000000000000000000000000000019385a39988160a205a93196d336428" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1592853550" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest104Filler.json ================================================ { "randomStatetest104" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x147d6b978c780a82619772417d5b6a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f147d6b978c780a82619772417d5b6a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f147d6b978c780a82619772417d5b6a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "977250261" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest105Filler.json ================================================ { "randomStatetest105" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x9914639111156d1759ff65039a02926c" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f9914639111156d1759ff65039a02926c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f9914639111156d1759ff65039a02926c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1449730295" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest106Filler.json ================================================ { "randomStatetest106" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x327043726481f25094828e2115577955" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f327043726481f25094828e211557795560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f327043726481f25094828e21155779" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1107240556" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest107Filler.json ================================================ { "randomStatetest107" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff6bacfb1469f9a4d5674a85b75f951d72d7a58e4a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50960005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b509" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1335641355" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest108Filler.json ================================================ { "randomStatetest108" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41443442f34241", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest10Filler.json ================================================ { "randomStatetest10" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000120417f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3508859a1740a0528f26a635216cd980a9a9255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000120417f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3508859a1740a0528f26a635216cd980a9a92" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "364185236" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest110Filler.json ================================================ { "randomStatetest110" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x97543c343476cb7c8c84066217f10255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000016f97543c343476cb7c8c84066217f1025560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000016f97543c343476cb7c8c84066217f102" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "736834619" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest111Filler.json ================================================ { "randomStatetest111" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c35059a17f0000000000000000000000000000000000000000000000000000000000000001f38f07bf60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c35059a17f0000000000000000000000000000000000000000000000000000000000000001f38f07bf" ], "gasLimit" : [ "0x7a120" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "50481116" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest112Filler.json ================================================ { "randomStatetest112" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x549c5779398a848c3530751465054155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f549c5779398a848c353075146505415560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f549c5779398a848c35307514650541" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2006825126" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest114Filler.json ================================================ { "randomStatetest114" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3584357ea388725483637d4471727f55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f3584357ea388725483637d4471727f5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f3584357ea388725483637d4471727f" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1067998899" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest115Filler.json ================================================ { "randomStatetest115" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x15448e363302150a6f56518aa0053155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f15448e363302150a6f56518aa005315560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f15448e363302150a6f56518aa00531" ], "gasLimit" : [ "0x30de0e" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1948713091" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest116Filler.json ================================================ { "randomStatetest116" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000753933760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000007539337" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "372067975" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest117Filler.json ================================================ { "randomStatetest117" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8aa4a4980274f18c6158368d41571455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006f8aa4a4980274f18c6158368d4157145560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006f8aa4a4980274f18c6158368d415714" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1763362724" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest118Filler.json ================================================ { "randomStatetest118" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x55817c037fa45bf3850320309a8f0255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f55817c037fa45bf3850320309a8f025560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f55817c037fa45bf3850320309a8f02" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1190213224" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest119Filler.json ================================================ { "randomStatetest119" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x52503b127c115a9673a4313790956655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x4559437f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f52503b127c115a9673a431379095665560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x4559437f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f52503b127c115a9673a43137909566" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "412561866" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest11Filler.json ================================================ { "randomStatetest11" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa093f3408a6e531735960a7617127a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506fa093f3408a6e531735960a7617127a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506fa093f3408a6e531735960a7617127a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1762251756" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest120Filler.json ================================================ { "randomStatetest120" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe820860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8208" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1887172074" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest121Filler.json ================================================ { "randomStatetest121" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x305842321509108c689f7ca3195a9d55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350456f305842321509108c689f7ca3195a9d5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350456f305842321509108c689f7ca3195a9d" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1227523279" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest122Filler.json ================================================ { "randomStatetest122" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa2825b6c338f8d717156560af045136b" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fa2825b6c338f8d717156560af045136b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fa2825b6c338f8d717156560af045136b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "538407333" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest124Filler.json ================================================ { "randomStatetest124" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x01" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08125580355b17457f7463587b9a7a435560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08125580355b17457f7463587b9a7a43" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1751381635" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest125Filler.json ================================================ { "randomStatetest125" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001207f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe406f", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001207f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe406f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "781711523" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest126Filler.json ================================================ { "randomStatetest126" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x4142", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x4142", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest129Filler.json ================================================ { "randomStatetest129" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x166e733343093a31a33b8e025a027055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f166e733343093a31a33b8e025a02705560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f166e733343093a31a33b8e025a0270" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1110233548" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest12Filler.json ================================================ { "randomStatetest12" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x165490a41215369ef276037941163355" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000027f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f165490a41215369ef27603794116335560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000027f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f165490a41215369ef2760379411633" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1165421411" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest130Filler.json ================================================ { "randomStatetest130" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x368a668b76306d181a39361198831755" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000016f368a668b76306d181a3936119883175560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000016f368a668b76306d181a393611988317" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1912800960" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest131Filler.json ================================================ { "randomStatetest131" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x36ff85758270710168547a9777886096" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000014416f36ff85758270710168547a977788609660005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000014416f36ff85758270710168547a9777886096" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "474455952" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest133Filler.json ================================================ { "randomStatetest133" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000035830b503516a46d0b03", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000035830b503516a46d0b03" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1524251084" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest134Filler.json ================================================ { "randomStatetest134" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x417f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff557f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff55836b636c9c395a0732014533405560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x417f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff557f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff55836b636c9c395a073201453340" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "65268053" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest135Filler.json ================================================ { "randomStatetest135" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0075a0b64319218663016870455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0075a0b643192186630168704" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1650167023" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest137Filler.json ================================================ { "randomStatetest137" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5a130e86ca17390989355f092a255600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000087f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5a130e86ca17390989355f092a25560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000087f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5a130e86ca17390989355f092a2" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "866944487" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest138Filler.json ================================================ { "randomStatetest138" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0000000000000000000000000000000000020000" : { "balance" : "50000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f0000000000000000000000000000000000000000000000000000000000000001f1595160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f0000000000000000000000000000000000000000000000000000000000000001f15951" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1998228906" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest139Filler.json ================================================ { "randomStatetest139" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x020000" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x33447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff434461334515455560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x33447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff43446133451545" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x409ceff3" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest13Filler.json ================================================ { "randomStatetest13" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe307f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000005255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe307f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000001000000000000000000000000000000000000000052" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "936808044" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest142Filler.json ================================================ { "randomStatetest142" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x0431107c88" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff959137630364087e1a640431107c880160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff959137630364087e1a640431107c8801" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1842485664" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest143Filler.json ================================================ { "randomStatetest143" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0xae72e2bf2302ebcd309e003e5be58830f96deddaf87bb89eeea159388bfe3ec1" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x414341414243421a2055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest144Filler.json ================================================ { "randomStatetest144" : { "env" : { "currentCoinbase" : "b0085a57673c8f7d78fb870418f622e42fd686e4", "currentDifficulty" : "131072", "currentGasLimit" : "0x5c1948c7", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x59", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x35", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "b0085a57673c8f7d78fb870418f622e42fd686e4" : { "code" : "0x", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x03255f99de856501", "code" : ":raw 0x621da82575e942e4fd977abdb407069cf700116e02b4f9b25d866b6d13163fff2b8ef03cf8ab5d662afb7bb5c9e68462741090bc0976c9705b40411efe39e80c20b572c5e3d75f788f9be2f0981672b8de37f9e2d1515046cb77cc3ee74646fb096eadce98908499b6fd54725f3c6a725968761ba50494d1ecaf1e787db9a052952427c4f271c28d3e25728b2b76439a3166cd0ed37f30ec2421ed38ebd3b00b89ba9208391dc274e4eefa69161a37dfff7111756dd7971065f05aa9de4867609e7d847a290d0eeb08cde2ff294ae11dd16f8a3e32494d943fa0622cc04cd7476b6d2a1008e4ad1e2c33e2928e707c797f2a1a586bbf78658189bf58172ff77130be2ffc9bbf7f171939be260b30eb65b46a6cf107be1c9ed5c92c99d69fe0559389600e6013601c60096016601260016001600c6017016d200351654b9773409608aaa7db1f67b518d025727bdc6e0463b2bc334b658536d84dadc47a2288da62c36b9a35bf8934e3781a4c44e91637ce5c6b2f916d76706529d728b6f5ee076013601e601960086005601c6013601d96423568ce21a850c04a77ceb9", "nonce" : "0x59", "storage" : { } }, "" : { "balance" : "0x2401ac5958344e85", "code" : "0x", "nonce" : "0x35", "storage" : { } }, "" : { "balance" : "0x71e90493e6eb4c59", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x166e31b12700cdefa7a0591398d415023175d1e5a1eca036986533972cab6625e976572ee91c150c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0xe8", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x3ced74ed" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest145Filler.json ================================================ { "randomStatetest145" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000139133360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001391333" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2115970778" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest146Filler.json ================================================ { "randomStatetest146" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x434243434444424350303614f20a", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest147Filler.json ================================================ { "randomStatetest147" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "00000000000000000000000000007fffffffffff" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x657ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43659a936055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x657ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43659a9360" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1090344298" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest148Filler.json ================================================ { "randomStatetest148" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x50000000000000000000000000000000000000000000000000000000000000" : "0x34847e390773919b1655907716447255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000006f34847e390773919b165590771644725560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000006f34847e390773919b16559077164472" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "811630515" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest149Filler.json ================================================ { "randomStatetest149" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff099055510760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0990555107" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1968716197" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest14Filler.json ================================================ { "randomStatetest14" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } }, "fffffffffffffffffffffffffffffffffffffffe" : { "code" : "0x", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff20547f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff61853634f06b907f899d7455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff20547f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff61853634f06b907f899d74" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "308810775" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest150Filler.json ================================================ { "randomStatetest150" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x668254d76c6f24d4806677d83f3a46a1a66f20ae2688cf4b75842ac7265966f5f5ca603e6062a268aba89067dc278e1f86710462dae624ac683889038d26894af02617c06b39c4988a5a60a12c0d9ad0ca65839c92f7c75c6ad3d6a7b617ac7fbd41f5a29377ca6ad48748a94e31302254147fb3b5857568e516cb6e8aa23577af85d0e508dc17dc50e246130be577cb59826adc86af6c107fd8a98f47cccd9d22a867a43cd8ad77bbe8bb737af5acc0be67fd7b054f7281e771891dc4aad180996b9cb71c6016d0f6a9148c775e57ac8456a883eedc3182623898f32b5c83760465a2061c7652e785e7eef7a97b0aa6d6c15b5c296bcf05ee2e9b87aa60b5741b3f7d69a1df03df117b848b3a75f81c12dee2244f76e56bb261e9c75fb5ccc769db72bfaeadee3f68cf22bbca665b0647ac74c1409778c71b73ed4adaa2c6ba1c181b0747c27506478c403b3943129e79223e788bf8b81f60abecb73be035d03a8bbdfa112cd8cb2f7a1065250292740d2d72259b4d7e3ef844783da8118b72912b9f96a61f6168f160ef69d7dd3dfc7e4ef204766f789cbaf2abeceadcf5bdd8dddfef773f0a628afdf3988861662b77882a5cebffc61e75f11835b109e81f7c915a91c13b09097b792d3d59de0ef5b0f00f95ea49860917656263925da2fd6685359c6d7e4c3c4d2001a30111de14c56503788453df98a29b8715561b2c2021cf78e0ccc4701b192ebf67bb6f522656788b3d21428b50a2fa16224d926ce2ea5944760d501bfa0774238c6351dd224b743d3fc4d5a309166016a71b1c230fe9afd6479324716e71e3b27bdd3fb18cccc42f6ec973129f7958435f45da181aeb1608ed31713c33330ab4d2d4af54dd92d1df1560086014601d601f636b1d9a3573632aec0540f16cfb040c16bd7c3761bdb86dd6be658d2aefe157396217393663769965a66479176d702e7e2d5697681aac1beccc55825241cd77551f39526cfa77838faa9c4759aafa5c64df5e9199976f35f8298acd398d1913c1fd2ddacbbeac7cc29daee12c057385808f19d07110f30cfd900a130b0a713468bceaf4236153ab6c7bdc39cf86d0a5b03684624d187473b42a2968f1128872724b3d42218dbac11f5a9492651f09a866f61a72535c373274618d5914163abc7481bb7789394e62f247e78e7f83af55a5686926972af7c6519658aee40a564e3c2950f874def7a2110af0526f75629b20a108e1cfba0db03fcdee497ee2f8bcf78ef14317", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x70afe04f9b9074d39383f0718bb0b14ecdb6680c54b4c20ae65044c572a5c832c15f55e8c1b63ffbb7da41d4c8faa43f087b1960b54938bbdb14f35e3552723ad2053a3c74b98d0320f74bbe4ff06630f30e1caa6e13797a14d07bb94ae4972ce38da7aefa2ab07aedb81397137b698a63675aa8895c5b1207be9262507b0866acfa180cfbbdff5572fb9a74b245d1180e80a93b2dc5bcf891e1b84d6c66ab13b03e937d4268f4e9be0381417c1db9b7341c9912e685e38ee499f1fb82b027b84e01ef235f18b95b0bf567fcfcc5181f51c6dd0465d063d0f11f267ccd81aa8d4fda65e7e213e5ae4a6da0c6493209753a089323c5bfdde091556681b0648f59b8b2684d82a240f7d5b8eefd645e6320270660e960467877a8561129b7114a617d36423905813b7dc594d88b0eb751ba946f54595f624b07da116f0971fc6e540a966364c8a1df698688b1ba91f9ac7a74f878a61c87ad3240d656c9ee80fd90d4f8c01ca89c8bc537380df079ba8a2e6f2a3cbeb6bfb9687a7cc323f2a9eafd81789ae783355764b23354ba3f693c4d774ed6ab89da8846604172ad96ab938a4beff64adf9594812f491a0ba98e6f77d4c40454047c20cfb2625c43608dc26d032e6f8b53bfc1243fbd23a14c077e2071997635fdb2ffb317cd0e116f1ea7649dcf80ead9dea010cc4e456893f16d7c534f980d27c3312f34fbf5c8ba9b" ], "gasLimit" : [ "0x79c0a002" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x6c44fb37" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest151Filler.json ================================================ { "randomStatetest151" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41424143445a42f35b10773574016c9f", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest153Filler.json ================================================ { "randomStatetest153" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" : "0x00", "0xae72e2bf2302ebcd309e003e5be58830f96deddaf87bb89eeea159388bfe3ec1" : "0x020000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x44420b4442432055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest154Filler.json ================================================ { "randomStatetest154" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7db1267c8bba268d1408f7b3e269afee3fea86c5bc8aec8108fd6aaa954f5173b7d0e2328333e94698e0d570db9b316cba0adbae609d611ba1a2326004600d6005600f632de40a2773635c2491eef1", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7767cc78eeac8d9db5297bde12b635c487b138a0dd4601a9236656945997db45a668500a3ba6eac5489fca6a1a60998fdd14d1f8b6df2f71d56852c0f085c7c3ba826a746e9dce4335b97488b092df3db7c8097366963ffc1f51e7f4740935567fc404dab22917cbb1e5cf6252d6e99952a889ec687e6bcdb9b3358f2b287d5d38793a6e6105063e96947760c35c317e5798e9a5f3cfef9030ea32917ec50268953856b1eae69744b4815f4808e2bcceaa482030b32689f51807af6e6840942dae7592985e688975e0ee12dbdc39eedbf43aabc2563df850d6781ed002fe78bd48083bb42742ee243eea1ecd201eef18f00f330fee8836df1234700f5824b76290232dd1863a69ca84d2786e74eed98d42b740cc037b156dd261441220cfaf15857c6e8b6f5e1eb9aee8d63ad473477df11660ac765fa5eebfccfed05bacf2809818d01db511686cde018f146e78fee9bff3ffe90a1b54cdc57ec52b6fda22f7f81fc1d9724b375ce206d29176797f9e42c2ec1ef6b468f7f8fbdb5011c4ddcddd72a6adde7d3d077cf96f9d13893a46aaaf5acc241eabd8712b6a2deea63f6f91cf162e2d6d65579257a17d7c66e07570d11280dc99" ], "gasLimit" : [ "0x6065bf3a" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x651c295b" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest155Filler.json ================================================ { "randomStatetest155" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3494f39b6ca29473a199580308910155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f3494f39b6ca29473a19958030891015560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f3494f39b6ca29473a1995803089101" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "579536172" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest156Filler.json ================================================ { "randomStatetest156" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x813982583141966b389c159aa48b3a88" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506f813982583141966b389c159aa48b3a8860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506f813982583141966b389c159aa48b3a88" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2147378193" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest157Filler.json ================================================ { "randomStatetest157" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0966ff351691689162f371a38d9b789e4360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0966ff351691689162f371a38d9b789e43" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "391059071" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest158Filler.json ================================================ { "randomStatetest158" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe435060005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4350" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x383bfc76" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest159Filler.json ================================================ { "randomStatetest159" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x00", "storage" : { "0xcbd00120239df2d03db2fdd9c233df848ead9d3c84d4" : "0xf327f570c11aa84a7a5480b98c51" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x324260e172acf6051580ff4e3ba75da449e7ab2b705cf75873b252caf4b51def86cf4988747e4b77d541c09d316acfebf3871d3a1944a5b975670f11d63a7d9c9b49750a0734d7313f746ba5fba6f3ff04148f4f39e4a28cc271e1ae0b89f2ad1413af2317c6a9628006d4157cdf7a3f30103f20611fe88431b16a79be995278aec271b56bc32543196c650621b66f1bfc718c0d9360cfb17a079aeca76a0b08cb4f0e5789426a6a26c3bef3710be80e4d646135f26076a178e17952f1667fa85f3b72ffa4c95bda9db87e2b8409a9b1c9e27346e5b9a49fd3689f943925eb4618577675acf6bf7b1b665940c32ef9086a95914496bc8bb76245fa2dc9cd3e29618e568966b2893ecd2e84766a8cf184a772e70b3e042b9584601e600b600760136304b1e2f2736339570738f16df327f570c11aa84a7a5480b98c5175cbd00120239df2d03db2fdd9c233df848ead9d3c84d4556f6030a17e0f41dfce8be36a92b0d5e0d67a71c146187edefc7923a8aad22ca228ecee824c2d7c237ace7e52fd62bd649662a4fe5f78a0b34d84a28c14c9fea0f18d1d55870173546b3b99e17cae467e2f1667b7c9445b11382bf9d7ff632d1ccdc973ba913d9ebbb219ac7aa0f3b579caa81065e433d2b8cf8cbfb998ec52fe1eaea6d87bc7728315cc653ccf904948918741", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x712b835f3d9d2bd711b82bc3789135c9552a3962223b777f55a33e73998ad2f06a4ed6f25fc8856c8a525749b27c6ad568ed749589e17633797a16e71f79b4ef7d8aaf5252de3ab771d75b7888230935e2229a77019eb0de19bf8ce156f43713d4e7fc7c8e4a05eb7055bfcc74d63886a235d3195ec4ffb5b8d0e2981d360ab96470716c3480ed32bf1d810d463fee63f646c5d23572f2e778741514e9d2ddcda7c7311236f8fc564c6459f2044db767566340f115b2161c6c58dca4273276ab7dba59a8f7837bf38e2015040e0729abbead0f19b1cdc778a8e61745a96c3e4f4597566f4597629c6bfddff7c6b18ba01f163a6b65a66bbfa71fb76accc5decebf659df24d36b38e70fe2db90ba399950f4d2d3d08f96436f19563b113bc79206663747a4f9f4bbf7319ef422e02dc9d5b8a0aa64e2e5b106c5417559c69c67bd576141c2a77da9a695bc048023ce2e47da6a3a27314e6991ebcc4fa88351f556caea7aeacbe4b858d7c11d1ff9c90ce3ee7a294a8413e8a5b2b1ccc42328418739d2df3584249817040e86e243c89afb2608b9b32380916ca3d656a1d839af675f3768808b0d0c6811c472a67e9be5dfbee8a030e5bbcf28c327338b6bd2dd7e091d3d38d9de8e3bddab3afa5f2137180693f02159392a9ed8ce9213f4ee0908279692e61162f1e9695507c8f6aa90dc83ee13fbd09ed79dc7b1c7d54d52e4a0c4e4bf10760f3c845556086393fa12177a43230b0fc7994cdf997c343261e41c8a45ae19aa4ece5f45bc15dcb82c2bc436a9619e2eb92ae524b6df5ad7cc65340247d3475a2201d93c64bfb9a1e40d5610f512588865e49183ff9617d21896e1be033b42b4f21d5ecb6fea5f9fbed7d1554d470c21e1608c1a10ab043396c4076460fb57a54e9f9f708b5ee060c65e9c9ebed92d33960cf6bfa527276b5263aa69f84387464e0318ce3bd82632ca685ac74e4f0b09a9f8e6d7b40bfb9d53bddefd5bad10f40b972dd05b8617f4e892ef5a7f911a891213690d15f69429e9601dae799c9fd8a6c4c562cd8adfed3855eb4e661a663d96255a76b91d63a23edfc368d558c89287d0b88c712797e6fb21f4a84c6407a61a713c1ba9d957622fe80be46092751640e498de7687a828b2ff6b864fb279ea72f1e53c3b5848c1fd8b9533fc2772829b26881802082d00eb7ca786f7446a0f860299c628bc20e5deefd8b8360897931a41e6ff3d9f9554552fa142eb6c03a1683933c3f0cdcd9b7dc73410aee35eecfe12e2ae69036a27ae906232544439d735b8a404c30cae29e5fa56924e7b036f8b66b8e9970dd8113a8188b654f1cb648d8300f20b08869b0625d10dbb1d8db409d64e141c19b2f83" ], "gasLimit" : [ "0x6307f1d1" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x24a7152f" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest15Filler.json ================================================ { "randomStatetest15" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x436af043189b6197733280a2f1f03855" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000016f436af043189b6197733280a2f1f0385560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000016f436af043189b6197733280a2f1f038" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1501832876" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest161Filler.json ================================================ { "randomStatetest161" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x458a458076526052650a418c9b40863c" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001416f458a458076526052650a418c9b40863c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001416f458a458076526052650a418c9b40863c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "757362865" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest162Filler.json ================================================ { "randomStatetest162" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x355a7f614497339e3b63878b36980455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f355a7f614497339e3b63878b3698045560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f355a7f614497339e3b63878b369804" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "725006509" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest163Filler.json ================================================ { "randomStatetest163" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000000034577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426259cb6142a1196e3168c986758aa4", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000000034577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426259cb6142a1196e3168c986758aa4" ], "gasLimit" : [ "0x16bc578c" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1579124913" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest164Filler.json ================================================ { "randomStatetest164" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "", "" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000831305395560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000083130539" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1836140782" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest166Filler.json ================================================ { "randomStatetest166" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8eb7099d9f160532785143c5937e1855" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff817f0000000000000000000000010000000000000000000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350456f8eb7099d9f160532785143c5937e185560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff817f0000000000000000000000010000000000000000000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350456f8eb7099d9f160532785143c5937e18" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1614644579" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest167Filler.json ================================================ { "randomStatetest167" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa00b875630178a439384941395369e55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001437f0000000000000000000000000000000000000000000000000000000000000001027f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fa00b875630178a439384941395369e5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001437f0000000000000000000000000000000000000000000000000000000000000001027f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fa00b875630178a439384941395369e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "428826795" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest169Filler.json ================================================ { "randomStatetest169" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x33c6014b" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest16Filler.json ================================================ { "randomStatetest16" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005531848f7aa4516d7d7578797e", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005531848f7aa4516d7d7578797e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1047145130" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest171Filler.json ================================================ { "randomStatetest171" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000197ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000197ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1726364132" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest172Filler.json ================================================ { "randomStatetest172" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "354059144" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest173Filler.json ================================================ { "randomStatetest173" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6bacfb1469f9a4d5674a85b75f951d72d7a58e4a" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b509ff979443703ca35560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b509ff979443703ca3" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1285346393" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest174Filler.json ================================================ { "randomStatetest174" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x434155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest175Filler.json ================================================ { "randomStatetest175" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x6985f2837e09689844171a0235833c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f6985f2837e09689844171a0235833c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f6985f2837e09689844171a0235833c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2139752886" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest176Filler.json ================================================ { "randomStatetest176" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350427f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff041469988517f6889d92799e74664160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350427f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff041469988517f6889d92799e746641" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "242920391" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest177Filler.json ================================================ { "randomStatetest177" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7e24654d920bee1c2af8b3225f6035ea04b87e1d3f2486057268ed05d8d6e5a67f3da4409848b450c9ab9713bf10ec5124e50fda175accc13d0db75bbc03a25a066d85332a97eae6e7219bc62ce53f23690f1df7f7b11c1659165b7c438533bc1f73a59ae2c28e633d8c971763576dd25386518678a15c64a2682c68bf3c1a7433af2e6dd0276f494254235fe7b28b1f997661eba4767c05f37a8b9b7980106e2bbe8744bed6d0f782ac6a99e07d9486451ab20e48c9e99f083973d5a10a57f4c3e7e3fa3bfd63a39006f35f7325ae8b67348d74c87e78d6dc699541fdf8d085697e58b02f9fef3f78554901cc888449b92fe07e74fb3069f7be725f408005886e73e720275f04f63284f6f10b6df25694b3a55936d06ed8c18d03d868d30b7766bd0d6a111f734650113a9f6b31ef3be38904ccd66a304bbf877e9d6ccc3e98fa65a685b0bf181c6dd67c9db728914ff2977b8c19193f67b9053f72c819b5bc5542945bd6a9079965d91f47a11f3862d346cb6b70d29eca71b0d12d01996b89763f13059617d671ddc626d93a3e3fda99999484470e34277f9ac904a6be6b8b9f0a91e98e2759a946222e419d34089491db069bbeeea7d19868e6fef55cd7440fbbdd7bf7cab153de2f407fc2c1f51952d5d5388159f73c98deb0a3f75d04eb70cee4f3dd886b6ba2ab3d1e110db841c50767a4e0ed4abca1bd1d6688861c4bb169fa8b63d253f1a4636a3979396965ae9c16c2197c57851d68f1ee6fff3c92e794d07cc6d2f5b964448fee1c3f52921cd138bfe26f57a3ce26ae8e622c80fcfb7f414b5750048e67dd2c715bdf907a881ef7a77dc8b166b413ebb4261bda628c26666d7ec3d2d20bdc7e117960da38d995574327fc1b63764875b839f395793a937b5f2793db93b23b7160bb44cf7bf515a85769d5f51851260f073969b185817c3e5b658753947f6ae534b0e68afa57a476ff52028737e7d342c1ddc7c5dc786fe6216838882c6f6e8519b16b2d9451ea2f048765576af461aab462031f6a64f0ae07fa9a64d4772252eb9e6aa14429a7e2a1d43482699065e44695fbea176d63d01d22231d221b6f8dfda47f5164a47454ab396f17257ddec269f67ed7c6d17ffac1c61372aaf587427eee43772c5f28fde9d395b65bf2d77e4eaa635bea61396414a53508797e2506ed2f921f29bf2fda1796f4396c4edb6f6ecc6d79fd82d9838a512df1454ce72268d8a32e0971c718b6836e4bcb788766f266a3edfdd24686274f684c4b0a7fd7082159766f4670a09a9e231bf61fe5f955a75b8870744ec89c81940d46be921c40917862e1c186679f354a704fd5537ceb310616acf9779c43c8f585c064fafa775d279d62aec380625fc16d601ef067eddffdf0f1359f386970fe2eb95c063421601a7a5f9256a6398651be88998deb83d16edd603992a27f758bda8c1bf974e49a52cf19c9bc32a79db4778535677e3caeae7f2f6ac54f147d2729c30d694bcb622c13106c3382d4c27bc4ee55eadb4921d97965e605bd3daa1c233230119dce876049813474dc4b3ec1d0ea8d73d182beb19cd3c8f198578d863907a60fd633a65872d93e47dc134fc815d9800bad3f2d58bb97b5776f42800f1f182951ba5aced03a7c3abd859969483189606297788fbf5565010d13f07077752867293dbfe29b7346020ef70d18cacd7508ccb3731b39", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x387814bf0652a6f3aefce6ef7be00599328bbf7e802e1ea22644a96fbf319d273c0e715067e4e5e74ecfc3ae60fd917b9224a4bbaa6db919506fc9e3cd4792dbecb1427e907653a3e359acf57c1e4afae77816fdc406706133e14efc6fe3ed1dc01f663f8e79c5fb6a32685ec748da76ab766d20766430b1775afa280f1c02e5617230d3b68fa16d4d73a1b27ae07b1096d44b02414374765d0907504a2f25e45aee4fdbb17b244e93714f36d9c035346d67ce3c18bf3d3af42f3b5f807689e8f429c0070a5812d602d25c4664cccfa7ddff8188f174c046eef00dcd5355c37d900a2ce940246fcaada0526acdd4eaf98a420bae34e22b37" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x72f740ab" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest178Filler.json ================================================ { "randomStatetest178" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7d342beabe599e4bc177fd97d36df48d50650ba6129a9a83d4cf809ec21452357c620167f530c3265be9887f6e5b8186decdc00a6a801e5f56dd8d9d36a4806dbccc299e4bbf46ad577e25b5b1fc76b6999cb23a6a03c4035e36b8494135ee170647395da00b6e0a64c43f3358b8bdcf593c89fb70b865ef153b5195c77959256beb4f932095eb8ac80bc2c050f6f550a362aac77f5c4b197151df039d64b77dca22eb8fd4b8cf50fb85a36f1d909d1919a47fe97de5526726b4a47b866b7b13471056439457cd7cbc5060d978056ff5dd24a1f49e50b9f5924f473b2dc5306d67054ca575d0603e616291a3601460106009601f6338a57ddc73630e3319c8f133", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x66fd78520a4acd897a6e29cf1b15f576b05a2bc0c18bb93a759d3f5e1ac5d34ba1e261c70b7afd59945da98cc373eac6aa543bae2e6726e3ff03ad2e788dc33f3b736ef736637d8ac680281bb29884e641473063e58e7318f5f4cbade311c02eed1c323c19bba7df4729406464b42ed0cb6d0189be83857fb09713ae69e7d2d472e6d85d23920625c84c39489fc80d272868f40c64cc6cb93ea5741d1918dfc8f61086b1b0637390a1934b637c37ec94877d3ea763b20b9e04fa589f30da18f1565bcf15ad38bc735b9d45b5d963cadd77e9e3db27853e7462a6417a4ac9af38f967a198c6f50deb53634bcbbe9c6a83a7357847acc4f6360fa46e43595a8936969798890170a6874b4e67391c228e9d0a754f68635d505c3f9a8c2555728626e286db52177c2228fb04d4b702bea78df3747d6fa1079394222b8d2a0dfc34ce6d9e5664062fa8977526ced3516147e12a7b9e36f6628dd9efe320bef809146e8fad97d5aedf559bcc15442b1fd347758332cb1d4bb96471a01de009dc175e3eae40d189755a7c1f46c55d3353af6fd0ee638735594b4bb2e6aa99fdbc96508431f421dd770b6379f9b5cbee55423a23c5538390612dc07c752c39f1c87a02777b0fa261dd883d49b2ae5c02c6e81bd0a53ba5d53e12530485664f77811ffaca4c688d18d6122f3a564151676f40f70e45da4fe562355ba17d36458de5f760c8148a11b1fece135e184d2dbf9ecf019d634d8498ae6c6862431f356e1940bc7bb1a252ece1b1605e467f328c79bb45440e29a9444f1948f3737dc02ec2c10862323af3bae0db487768f3aa49fb0967d7eb138302bcb9cedb6b327f4d35a39cf561f1ee73c294825a5de76bd6bf707c5a660e3a417b6ac0586e80ecb6300ea61a618b628d8fcc6c80a37fbfda4e162006259f39441a81fd310c9a323be96b826199149ebdb88ea3e87df96d06c71959b65c4a3e73b50da0a67590625ad154729d9a0a585ba3fc028fc342115f2308566e69cd557f7a7a73474bae3846016f5281b41609a85ee1b4244652d5c1360c9d30fe27dd2d62b415d06a278aafd0816e734b76a3500869747b893809a7c2a185836da26ef253e0a0de429e617a82f8f17f055b1b67fe7366d9a5a491fb47f997937d38e7e8d4cbe8fa227c8b70f8a70e7b667883e393d677c86a9c8ec7144c61cf62e2403893" ], "gasLimit" : [ "0x38c2a77b" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x6f33bb2d" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest179Filler.json ================================================ { "randomStatetest179" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x515480126a50a173506e066762129255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f515480126a50a173506e06676212925560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f515480126a50a173506e0667621292" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1584198892" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest17Filler.json ================================================ { "randomStatetest17" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x01" : "0x00", "0x03e8" : "0x01", "0x7f000000000000000000000000000000000000000000000000000000000000c3" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001427f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001430a7f000000000000000000000000000000000000000000000000000000000000000106813b375560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001427f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001430a7f000000000000000000000000000000000000000000000000000000000000000106813b37" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1639312514" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest180Filler.json ================================================ { "randomStatetest180" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x11576b693c128a9e0820609c050a219d" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001447f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000006f11576b693c128a9e0820609c050a219d60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001447f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000006f11576b693c128a9e0820609c050a219d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "566466109" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest183Filler.json ================================================ { "randomStatetest183" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x4134547075687854849d7b6465863055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000436f4134547075687854849d7b646586305560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000436f4134547075687854849d7b64658630" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1159080385" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest184Filler.json ================================================ { "randomStatetest184" : { "env" : { "currentCoinbase" : "6d6e40885310545835a5b582dbc23ef026404bda", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x102b7fe66d", "currentNumber" : "0x01", "currentTimestamp" : "10000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x75", "storage" : { "0x8c" : "0x823a02877cef7c1afb60663009def564" } }, "" : { "code" : "0x", "nonce" : "0x1d", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x070a217c02c8f2d4", "code" : ":raw 0x6f823a02877cef7c1afb60663009def564608c557bad2ae05769b991313726edbfa0881d9cc955b0f5154751da315696ea7ce130184b64f2507582c502d450349ff24fb8aeb2a46146687b666bd7bd0364946cb720c76d483f5afea0049251fd9793c4b0376afbb4ebcdc42fdd42edcd4b619cec787638009cea26a1abe570e3186ab790b7dc7db36e4cda2570b0847adf6e39579c7c43a4ac976cd507d493cdfaebe09936078e31c71c4665d34a4b816b8004", "nonce" : "0x75", "storage" : { } }, "" : { "balance" : "0x9740421ff0ff3ae3", "code" : "0x", "nonce" : "0x1d", "storage" : { } }, "" : { "balance" : "0x10c1142f2b8e8eb058", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x64dd3e4e84676723342c1dfaf9af4ef3" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x1c", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x6d1dd024" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest185Filler.json ================================================ { "randomStatetest185" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff411a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000162805a8d3aa3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff411a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000162805a8d3aa3" ], "gasLimit" : [ "0x6ab0d01f" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1159525186" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest187Filler.json ================================================ { "randomStatetest187" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x75988036a0562096036b04518877199d" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f75988036a0562096036b04518877199d60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f75988036a0562096036b04518877199d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "925780098" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest188Filler.json ================================================ { "randomStatetest188" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x7859f3837971879455" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff817f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4286687859f383797187945560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff817f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4286687859f38379718794" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x49195164" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest189Filler.json ================================================ { "randomStatetest189" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000035900bf3740474765060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000035900bf37404747650" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1090808233" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest18Filler.json ================================================ { "randomStatetest18" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001077f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3504419860b9754998d503105a033436e67133a60005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001077f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3504419860b9754998d503105a033436e67133a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x6ec35ec4" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest190Filler.json ================================================ { "randomStatetest190" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "94912880" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest191Filler.json ================================================ { "randomStatetest191" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x678f0443457084700b645760018a1055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000010000000000000000000000000000000000000000447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f678f0443457084700b645760018a105560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000010000000000000000000000000000000000000000447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f678f0443457084700b645760018a10" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "385910599" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest192Filler.json ================================================ { "randomStatetest192" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff347f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff347f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe04" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1168450397" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest194Filler.json ================================================ { "randomStatetest194" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff097f0000000000000000000000005560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff097f000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "827862267" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest195Filler.json ================================================ { "randomStatetest195" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x010000000000000000000000000000000000000000" : "0xfffffffffffffffffffffffe0000000000000000000000010000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097f000000000000000000000001000000000000000000000000000000000000000055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097f0000000000000000000000010000000000000000000000000000000000000000" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "307405855" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest196Filler.json ================================================ { "randomStatetest196" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xf4" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003703659c5b3a6d7b9a93543660005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003703659c5b3a6d7b9a935436" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "672785598" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest197Filler.json ================================================ { "randomStatetest197" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000016e6a078e5652549f57423955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000016e6a078e5652549f574239" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1542389267" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest198Filler.json ================================================ { "randomStatetest198" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x42417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09ff614044129a0169a2689415", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09ff614044129a0169a2689415" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "968197125" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest199Filler.json ================================================ { "randomStatetest199" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0x2e" : "0x03e8" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x30424543074242413155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest19Filler.json ================================================ { "randomStatetest19" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xff59876660063b7c8df1ff088a841455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f0000000000000000000000000000000000000000000000000000000000000001587f000000000000000000000000000000000000000000000000000000000000c3506fff59876660063b7c8df1ff088a84145560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f0000000000000000000000000000000000000000000000000000000000000001587f000000000000000000000000000000000000000000000000000000000000c3506fff59876660063b7c8df1ff088a8414" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "500004062" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest1Filler.json ================================================ { "randomStatetest1" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : ":raw 0x454543414341444259f2", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest200Filler.json ================================================ { "randomStatetest200" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x42051af2a24050039e9d3a678b028a0a" : "0x42051af2a24050039e9d3a678b028a0a" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x437f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000346f42051af2a24050039e9d3a678b028a0a8055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x437f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000346f42051af2a24050039e9d3a678b028a0a80" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1062273821" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest201Filler.json ================================================ { "randomStatetest201" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09ff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8b8263974074da449e6861039960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09ff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8b8263974074da449e68610399" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "953592918" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest202Filler.json ================================================ { "randomStatetest202" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xc350" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6750a3190486f0", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6750a3190486f0" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x3158e7cd" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest204Filler.json ================================================ { "randomStatetest204" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff000000000000000000000000ffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff098255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0982" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1983843477" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest205Filler.json ================================================ { "randomStatetest205" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x3360b261edefa0326fdc74d570982966277b49cdb30a453fa06c34a7423da44ba2d04341af08c478b17a57318ab10ab43b3744333b0aa8864ac27b3fd022e380056735a5fcda3e9fdc25695972a076884de6d6b6b06dd45416c8110bae3c70576b433a4672777847e81823024ddd1292b929ad28e64a732b74c0ae1941d5936ecd35738e2f279273788f4aaf19907a532a6b0f117c32b6cb967aae8bdfcf86e2d4d64599986abcf65a20754f5a816c58ed669138f6a0448670b906bbf1eb145ced896c578de5aa27769006b1a784e84b6316d4e60c7053b0b6550c70a177cb7a3e88d4e83fb1897a09c2161ff6cc2679c178292687137854da672e316c66ef03dc9ac37e8e430b7c64d1939bf67383c4bafeb2f0471fe896b7c0e114bf6f152b266cc769ae4d38f3df618f5eeb9085601f601060086016632c019e2e73626b8a0ef179e6b62e86237845e9605d61219d97c1d0145516f5355fe73384e87a6a87cc6d2378c81797ac3746bc562e2fd1145e14781307bc4ada39732e9d0e8725fde75c5abc313c11e3238c7cd9b7186a6a14f8d5c3cad9da5339446ad1311ccc67a0691559157a674825358b301ac42d7bcae31beb8b0849903402175ca3740f3fd690ad66287d6bf67a98c09e6de5717596052d30f4b9bb8046a6b67ef51b1b13c496e97bf9a2e67aeca97fa10a266f8cf22c10cc0375b514b25de466a146576b2cb565754efc80d4b8aa5497aa0fb4cbab90ee57298d322474d276366e04eab856c9f6070c80701fa30596dd0b6ea5bc38ba64e1d16aff1b8c61caa379064465a9308dbb1465294ddcb5fa32833e4ffb049c71761ed93472c7e58f171c6c8b51e2ec704d34897b80466e826b0c1ce2488511cbb1aaad26b075ed5ebf070be6e14eaa6b973423bcb2e0541307d88ff66d1b7e29fffb10218ca75bf3f9957d6ee27a0945278d5f9303b3e3f28a325a7f17905f7467c4afcbb3a43dbbd37e9591e3f5a82841ee9cb8b23f68b4572e8cd96d0f7daacbd3ab3bd5a8f427baf6ea7ae70d98d3948eafb74e2e4a158ac116c5219403c9073a457409c6e464bae32b2c856b15bda1b2176295fd1cecfe7d794ab2692061aa79387004112272204198437fc78d1dbe0e8932ce6f47828a2bf4df47446291b99d92a90de3623954589d36", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x74ac5e422199cb842b1fdcdef502d4142d033387c6d17fe1f03f0fc4a3c05daadf323f3bb04b7e33dbad9b32f058aa6df6d54c8d7ac95568ba4a6b33a2b0ce8d8c7480ab9e818cf8998564e6d38b92aa1ecd76aa8aff266dd266c96af419778c16a109cba6976922093e50bda96ac1333a946574ad748ad839546ff861257bb6a41cab34045ea7335e1c9667c67424f9baf8781e79e002a233a622f41f2744c21b6baed43543e0dfb9aa81fd1050326b0ebad84fda176f3438d3a7f083" ], "gasLimit" : [ "0x6f63a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x4dd39b8a" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest206Filler.json ================================================ { "randomStatetest206" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x45736d8e806138378d62087320313c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000427f0000000000000000000000000000000000000000000000000000000000000001427f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000006f45736d8e806138378d62087320313c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000427f0000000000000000000000000000000000000000000000000000000000000001427f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000006f45736d8e806138378d62087320313c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2091011439" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest207Filler.json ================================================ { "randomStatetest207" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0x01" : "0x2e" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x43413160439155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest208Filler.json ================================================ { "randomStatetest208" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffd000000000000000100000001" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2144690611" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest209Filler.json ================================================ { "randomStatetest209" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0951537d3c6474623b781181a355", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0951537d3c6474623b781181a3" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "833511346" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest20Filler.json ================================================ { "randomStatetest20" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x31417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0315208a675944747f7430661519049a55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x31417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0315208a675944747f7430661519049a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1758540724" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest210Filler.json ================================================ { "randomStatetest210" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff000000000000000000000001fffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1780157802" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest211Filler.json ================================================ { "randomStatetest211" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7e7a980b5b1c50ebb63d8e2211d3a79e841ee5e5946b7969dfb6ca1309c99e8f68d4ee9a50996902ee4e6937e1d07ad872cf04eb2a61fc336025a3648d5818a6457dc24f19f38d3deebb09968c812740339c6df46af95b7b0283acb1944a8ca37fbaaafeac115b9ec5adc16fea5a3a828d3483e495506a790ca75d8238ebbed6477c213d0177c10b33b6cf9362273973809ac39f11dffee928f3fb18e975186fb4a74e56142d4431bfa392dd5f71d32b6c40a2bd0beb6a8b24fc592b25f0680306f11e049124ec396ea3858d3339145af8c1c16747bea056639a7faf446cd9c7bf446ed2de67f1665adc479874053c2c53f0fc53a12af3c1951fdc7a5d20aee8f96874f392a4aa2a84a99c9390ab4bd4c39f521a2b91c2ea90", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7205d6a65458a0cdecda703b9d5440616f95b179076dfa7631cbf765dab81235497f97ddb6e8d399d5294ea49cfd736cdfa49a08a76dc08eff97542b54399a1b5f86b168d33cd083ac41074aa37e2f3f77a248d5db21a54d72c5053f2a79b2048d142fd588c56c48e39fa86bd16645ae7e31281c806dc847b38aba609fb88b5a3c6ce02d711bc1cb89419d740c65fcd7cd9abc94d8aaf97bfb874ed35e242cee6a462cac825efc8b53b43f7687a32b635c969cb779fecda8dcbd0dd35ef6ab482083a8b91f6199bb8050971caa227ac9ad77edf44708d99ac08e92c8c1ff6e536a3eb4625c2d8c514c8a799391a90cb528870e725560136162fb2632b2485e26d9604de562740ee89a2a5b4b1976272d046167f2151feea60ecc547dc9dc31b91ee0a712579874ebef218c4f015cbd8e76040f19d828eed7f9c070a127ce6067ad9831363977e2846559c8b97cfb3b0e8502cd54779657ab8571534f06e34b0d78259338706fac01057e66310e07ef4017629f7bf12ca747aafe8d7ccfcb78b5535dd267e3b445028e40113e1b9ccb7174b36264cfc5606cc1b4815c744393665f0a1c2ce78ff3679513083c95496a6869fe735535b8751fc5455769b44d7c9689576f2b76cb63bae9b5a47f8afd0c0466e798bf78d10b0efecc7e30695891cdc85e5f7a2827dc0b2ad41f92666faa9578ad77aa79aef0363cf4c69574bdfb74601f99ca8df4fbb481dd921b4b580a789e59c7557f305a1804f30d08c10394bc281772eef178800e0f79161010fdff6e028d5be7c0dfc295520e9b5f7fb781fb23ebd9657a42d8623d58350d43a9031a8b7e23c72ea3af0b137386987549539d695dd3e19c2cac0855644773b40cae7e824e3912190e7a6aec7bb06e5c923de8750674988f11efac6aabfc209262900167c7c18e7826b18c6e65696c94c79ed8f574d69ffb0de2046a602f2e9eeb57a764e01cae63fc0e6c11703a61af60fd0c2a6af1e06d545b5ed713146d8b98783da81f50ff3aa0e244e15e73dc099f2266d4ee2fc130375a1cf3341167c5c0586d179a0d6f622951a8e0fc895e4edf64bb1ec825496d2d85c826a263045936448e65d6608d729e8aeb3f8cf65a8addee9da3fe2b2ba4a0e6de6576a5221a372b64abb962d43a76c4519471d55c4425b57b3fef0f46bc07b1e1b4126cab307a91392cedd4fab180e6a943c648703e5058ea2aaa6aa3c1b019a9538e604a7581ea0f2b78b7ad3673313b8d926ab9ad21f10f2c3055732cf0b787838b61e5b85a079913a88cff7819d4066d551729495f62f0f4710cb0962d2460b57e5a5d09a316f7bdd937dd7f809b72c2e4b898648da7f7aea76ec34a016ab863705ad67458a497014e10e75f7d7710fc7784743cc30aa920ad10d24a82a074fa0db118dd5887c4346712f22b6d2e55e99769224338e00cd62030907f6df46f4b14bbd57d01102d02153fb569e432111eaafdd9bb68ff7d35f7590dff5a35eeea2bf69beae63c3e4e6fcbdc19d79f7bb919b2165aab76ce9cc9882ea258d9fd497168b5e9ed5ea3f323f94d5c6a6de663222b5971a8238121faeed83a8e" ], "gasLimit" : [ "0x927c0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x5c537837" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest212Filler.json ================================================ { "randomStatetest212" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06180908ff3a68f28e61990a525560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06180908ff3a68f28e61990a52" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "49732651" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest214Filler.json ================================================ { "randomStatetest214" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7b056b335a15a48d7b8841163a503963" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff150a6f7b056b335a15a48d7b8841163a50396360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff150a6f7b056b335a15a48d7b8841163a503963" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2101620901" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest215Filler.json ================================================ { "randomStatetest215" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x728f4f1065583139780a981510173b9c" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff446f728f4f1065583139780a981510173b9c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff446f728f4f1065583139780a981510173b9c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "812357921" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest216Filler.json ================================================ { "randomStatetest216" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x766d67fe07853208991306449455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506d766d67fe0785320899130644945560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506d766d67fe078532089913064494" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "679576029" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest217Filler.json ================================================ { "randomStatetest217" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7f000000000000000000000000000000000000000000000000000000000000" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001377f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c35060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001377f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "473066872" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest219Filler.json ================================================ { "randomStatetest219" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x6253443a4104027144577f3399832055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3506f6253443a4104027144577f339983205560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3506f6253443a4104027144577f33998320" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "73663722" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest220Filler.json ================================================ { "randomStatetest220" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x420380a03c4282a3540a1a333a843a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000016f420380a03c4282a3540a1a333a843a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000016f420380a03c4282a3540a1a333a843a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "207355039" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest221Filler.json ================================================ { "randomStatetest221" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x977789947e197f828151867a73771a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006f977789947e197f828151867a73771a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006f977789947e197f828151867a73771a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1862685167" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest222Filler.json ================================================ { "randomStatetest222" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000001000000000000000000000000000000000000000043397f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3508160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000001000000000000000000000000000000000000000043397f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c35081" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1727622047" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest225Filler.json ================================================ { "randomStatetest225" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x69786c858e0703566f95f89931119019" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff506f69786c858e0703566f95f8993111901960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff506f69786c858e0703566f95f89931119019" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "159749189" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest226Filler.json ================================================ { "randomStatetest226" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { "0x00" : "0x55" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5a605560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5a60" ], "gasLimit" : [ "0x6ac3e368" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x1c91b9d0" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest227Filler.json ================================================ { "randomStatetest227" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x108fa27475689e44993a528752a15233" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000006f108fa27475689e44993a528752a152335955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000006f108fa27475689e44993a528752a1523359" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1176634565" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest228Filler.json ================================================ { "randomStatetest228" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41434543454541443b5455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest22Filler.json ================================================ { "randomStatetest22" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "000000000000417fffffffffffffffffffffffff" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x6d417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e969f926084143c7960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6d417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e969f926084143c79" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1814313700" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest230Filler.json ================================================ { "randomStatetest230" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350427f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350427f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "856911811" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest231Filler.json ================================================ { "randomStatetest231" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7b98a491727a089df3365353329e8055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000006f7b98a491727a089df3365353329e805560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000006f7b98a491727a089df3365353329e80" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1271549054" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest232Filler.json ================================================ { "randomStatetest232" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0945415883ff9d7760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0945415883ff9d77" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2122038787" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest233Filler.json ================================================ { "randomStatetest233" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42057f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff517f000000000000000000000001000000000000000000000000000000000000000065715460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42057f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff517f0000000000000000000000010000000000000000000000000000000000000000657154" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2008364606" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest236Filler.json ================================================ { "randomStatetest236" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000004339185560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000010000000000000000000000000000000000000000433918" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1566255112" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest237Filler.json ================================================ { "randomStatetest237" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "", "0xef" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001537f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000039385560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001537f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000003938" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "978542004" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest238Filler.json ================================================ { "randomStatetest238" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7c748813587e990566719934f342316c" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f7c748813587e990566719934f342316c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f7c748813587e990566719934f342316c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "267928924" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest23Filler.json ================================================ { "randomStatetest23" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x89418c1076f1544315601489386c9155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001427f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f89418c1076f1544315601489386c915560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001427f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f89418c1076f1544315601489386c91" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "667758155" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest242Filler.json ================================================ { "randomStatetest242" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2110467172" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest243Filler.json ================================================ { "randomStatetest243" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x42454466407640686255455866849055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506f4245446640764068625545586684905560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506f424544664076406862554558668490" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "77136812" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest244Filler.json ================================================ { "randomStatetest244" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x4542074343424141315155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest245Filler.json ================================================ { "randomStatetest245" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x877c3914165043458789" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff157f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0469877c39141650434587895560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff157f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0469877c3914165043458789" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "278621847" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest246Filler.json ================================================ { "randomStatetest246" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xd9250a4f8c" : "0x00", "0xe03b" : "0x03e8" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : ":raw 0x434241314441434293170955", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest247Filler.json ================================================ { "randomStatetest247" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe04" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1135930745" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest248Filler.json ================================================ { "randomStatetest248" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xc360" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001427f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8636f2599055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001427f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8636f25990" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "549769638" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest249Filler.json ================================================ { "randomStatetest249" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000012807f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000012807f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000039" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1871659531" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest24Filler.json ================================================ { "randomStatetest24" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x41417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff459d7f0000000000000000000000000000000000000000000000000000000000000001817f000000000000000000000000000000000000000000000000000000000000c35095418211337b0530435560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x41417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff459d7f0000000000000000000000000000000000000000000000000000000000000001817f000000000000000000000000000000000000000000000000000000000000c35095418211337b053043" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1715561909" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest250Filler.json ================================================ { "randomStatetest250" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000627f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000006a328b186e166407917c7af102925060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000627f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000006a328b186e166407917c7af1029250" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1535680761" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest251Filler.json ================================================ { "randomStatetest251" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c3505b7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000006867f1", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c3505b7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000006867f1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "395877699" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest252Filler.json ================================================ { "randomStatetest252" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x387b414543444043899e863a628b55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest254Filler.json ================================================ { "randomStatetest254" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x059b6b83f294740688598c52195a9255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000001000000000000000000000000000000000000000041417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f059b6b83f294740688598c52195a925560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000001000000000000000000000000000000000000000041417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f059b6b83f294740688598c52195a92" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1544798975" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest257Filler.json ================================================ { "randomStatetest257" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff337f000000000000000000000000000000000000000000000000000000000000000099447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350735b9f81208b6f526655", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff337f000000000000000000000000000000000000000000000000000000000000000099447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350735b9f81208b6f5266" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "519689383" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest259Filler.json ================================================ { "randomStatetest259" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x04831adc0812f0954492740790070955" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f04831adc0812f095449274079007095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f04831adc0812f09544927407900709" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "250917223" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest25Filler.json ================================================ { "randomStatetest25" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6844f1389163a444405b123678749c55", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6844f1389163a444405b123678749c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x731ee4d0" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest260Filler.json ================================================ { "randomStatetest260" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350f36409156a6aa261413b56f20855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350f36409156a6aa261413b56f208" ], "gasLimit" : [ "0x7a120" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1762323696" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest261Filler.json ================================================ { "randomStatetest261" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000001231b61993", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000001231b61993" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x14fb56ac" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest263Filler.json ================================================ { "randomStatetest263" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1165785335" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest265Filler.json ================================================ { "randomStatetest265" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3503b7f000000000000000000000000000000000000000000000000000000000000c3506a7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000745b9b824070397f921960005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3503b7f000000000000000000000000000000000000000000000000000000000000c3506a7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000745b9b824070397f9219" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x2217865b" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest266Filler.json ================================================ { "randomStatetest266" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x3041047f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000005555945667793459633c993060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x3041047f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000005555945667793459633c9930" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "249765705" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest267Filler.json ================================================ { "randomStatetest267" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5a132776d398e3b7c14686a07346f600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x447f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5a132776d398e3b7c14686a07346f60005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5a132776d398e3b7c14686a07346f" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "256968366" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest268Filler.json ================================================ { "randomStatetest268" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7466f0a0733d86326393406340944255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000016f7466f0a0733d8632639340634094425560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000016f7466f0a0733d863263934063409442" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "593549642" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest269Filler.json ================================================ { "randomStatetest269" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6676029968ffa27d0455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6676029968ffa27d04" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1239417538" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest26Filler.json ================================================ { "randomStatetest26" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0x2e" : "0x03e8" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x434242445b41310755", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest270Filler.json ================================================ { "randomStatetest270" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0xc350" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001395560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000139" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1633146389" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest271Filler.json ================================================ { "randomStatetest271" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001457f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000357f00000000000000000000000000000000000000000000000000000000000000000b6d7d958a0269995560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001457f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000357f00000000000000000000000000000000000000000000000000000000000000000b6d7d958a026999" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "193990328" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest273Filler.json ================================================ { "randomStatetest273" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "balance" : "1000000000000100000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x4342424343425b4495fff04285609955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest274Filler.json ================================================ { "randomStatetest274" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffffa405457f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000088015a9a0542a13a051497514215", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffffa405457f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000088015a9a0542a13a051497514215" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "191496672" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest275Filler.json ================================================ { "randomStatetest275" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x437f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000197ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09656756323c597455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x437f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000197ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09656756323c5974" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "4157391" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest276Filler.json ================================================ { "randomStatetest276" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x4382349f7b370589141a31f39741a4f2" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f4382349f7b370589141a31f39741a4f260005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f4382349f7b370589141a31f39741a4f2" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1026778874" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest278Filler.json ================================================ { "randomStatetest278" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7f000000000000000000000000000000000000000000000000000000000000" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001377f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001377f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1577249919" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest279Filler.json ================================================ { "randomStatetest279" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000010000000000000000000000000000000000000000947f00000000000000000000000060005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000010000000000000000000000000000000000000000947f000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x4e91b038" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest27Filler.json ================================================ { "randomStatetest27" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff000000000000000000000001fffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000000960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000009" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "541933198" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest280Filler.json ================================================ { "randomStatetest280" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x423b3c407e7c6f16718668738d193cf2" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000000143507f000000000000000000000000000000000000000000000000000000000000c350417f00000000000000000000000000000000000000000000000000000000000000006f423b3c407e7c6f16718668738d193cf260005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000000143507f000000000000000000000000000000000000000000000000000000000000c350417f00000000000000000000000000000000000000000000000000000000000000006f423b3c407e7c6f16718668738d193cf2" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "809294938" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest281Filler.json ================================================ { "randomStatetest281" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x649a7a3457645670a27fa170639718a2" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000457f000000000000000000000000000000000000000000000000000000000000c350417f00000000000000000000000000000000000000000000000000000000000000016f649a7a3457645670a27fa170639718a260005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000457f000000000000000000000000000000000000000000000000000000000000c350417f00000000000000000000000000000000000000000000000000000000000000016f649a7a3457645670a27fa170639718a2" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1714316412" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest282Filler.json ================================================ { "randomStatetest282" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff429d415560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff429d41" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2067523496" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest283Filler.json ================================================ { "randomStatetest283" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000013960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000139" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1602431327" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest285Filler.json ================================================ { "randomStatetest285" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x413443f3404242433389ff723810", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest286Filler.json ================================================ { "randomStatetest286" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { "0x00" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x5a7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009582860460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x5a7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000095828604" ], "gasLimit" : [ "0x7b20fbbe" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1522313647" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest287Filler.json ================================================ { "randomStatetest287" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ff7f00000000000000000000000100000000000000000000000000000000000000000759", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ff7f00000000000000000000000100000000000000000000000000000000000000000759" ], "gasLimit" : [ "0xeeda71" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1406933351" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest288Filler.json ================================================ { "randomStatetest288" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x76404140424242458c1f11410b", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest28Filler.json ================================================ { "randomStatetest28" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "" : "0x38129d68939a19a2697172926f6a6736" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000006f38129d68939a19a2697172926f6a67363055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000006f38129d68939a19a2697172926f6a673630" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1370440167" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest290Filler.json ================================================ { "randomStatetest290" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe830960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8309" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1834111958" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest291Filler.json ================================================ { "randomStatetest291" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff", "0x01" : "0x01" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000015560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x3f7ada4a" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest292Filler.json ================================================ { "randomStatetest292" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000417f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000013063a09c825a338e", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000417f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000013063a09c825a338e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "828199880" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest293Filler.json ================================================ { "randomStatetest293" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" : "0x458962699489837460090897f3056682" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f458962699489837460090897f3056682845560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f458962699489837460090897f305668284" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1022808999" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest294Filler.json ================================================ { "randomStatetest294" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d0718f377825843028dfa02158878", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d0718f377825843028dfa02158878" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1741399653" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest295Filler.json ================================================ { "randomStatetest295" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000031353a0b3c8b17eb55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000031353a0b3c8b17eb" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "587483939" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest296Filler.json ================================================ { "randomStatetest296" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000385b9655558f510a6c73", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000385b9655558f510a6c73" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "185739865" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest297Filler.json ================================================ { "randomStatetest297" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x91085661509214157d9c8a7775851855" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe426f91085661509214157d9c8a777585185560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe426f91085661509214157d9c8a77758518" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2086766474" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest298Filler.json ================================================ { "randomStatetest298" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7c542006528b69ff3a7a3a0401613c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3500a6f7c542006528b69ff3a7a3a0401613c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3500a6f7c542006528b69ff3a7a3a0401613c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2114938379" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest299Filler.json ================================================ { "randomStatetest299" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x540813697adf70f20906389d128bf055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f540813697adf70f20906389d128bf05560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f540813697adf70f20906389d128bf0" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "440906036" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest29Filler.json ================================================ { "randomStatetest29" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "558543347" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest2Filler.json ================================================ { "randomStatetest2" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3412a47c889e8da06a04049f04988855" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000058437f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000016f3412a47c889e8da06a04049f0498885560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000058437f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000016f3412a47c889e8da06a04049f049888" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2083830597" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest300Filler.json ================================================ { "randomStatetest300" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c350757f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c35060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c350757f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1430892634" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest301Filler.json ================================================ { "randomStatetest301" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x737aa092f1975664518a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003784946a737aa092f1975664518a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003784946a737aa092f1975664518a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "323025358" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest302Filler.json ================================================ { "randomStatetest302" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000971a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f00000000000000000000000000000000000000000000000000000000000000006989206c0b8a01867bf155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000971a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f00000000000000000000000000000000000000000000000000000000000000006989206c0b8a01867bf1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x774e407c" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest303Filler.json ================================================ { "randomStatetest303" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000457f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff441a35803a0ba46699913755", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000457f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff441a35803a0ba466999137" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x377df0d4" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest304Filler.json ================================================ { "randomStatetest304" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000a27f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff42070b8c5430070bf15560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000a27f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff42070b8c5430070bf1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x293d448f" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest305Filler.json ================================================ { "randomStatetest305" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x606e048240069c409313318736200b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f606e048240069c409313318736200b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f606e048240069c409313318736200b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "218159006" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest306Filler.json ================================================ { "randomStatetest306" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x60d36e84517b3285b0867cd4144ff5f688d60b6a07592395d95e37246c06736c78c9fa9e4b5e5db5a4b6ac4ced6dd169cda4fc3c11e9a6f0b4cec2f56019617df7a363788c155473412582d556f06c6d5864cf4be6a2d1318b8e40ba1377454cc8d0510823591dee680d7dddc8c149bfcc24c65c69e66c2b9d3e28f05faf2587c446509405759901ec0946bf3d786827225faf5da81e158cd9b2b4666f71a29fbe89f77c340dcbd7d67aedf852136b6c76affb38beb802e0af269e65c22f52807c677b5e2c7d8c473aff18fe912c7ed21ab60fe5d4916a76c93539332c6ab16b3f81b990f4b34b0228c7f5b1656bdd21d458717330e4be7d7bb91cc95818140eef086cd82d2d6f0d66c92a7ffb27125a625c77a8967268f212339508d6f60d9c93a9e201f2ae883cb9752460ec0dcb4ba3b84a4db899c29f08ef1b0f506b4f3c05601f6001601060116328b0eb5f73630a4eb375f17df238e15d7d51240301521f173d628e7a68d01354faaf406ce541f753db89671f6aedcf261f632e6244e8c3799a2de002f15ba4681fd3c609c0f522dfd964f95def9926f812327781b2de33196cc22776e9b26d8a0d65c57bdac987d0b3e0db66c0f1232c7add3365f209cc53592f73502d0c5889b1bbf131f8bb6a6b5e2e067b9ef676768d48b3f5790c3304e046f0a9c8a838a0596583d6258f196dcf982a9de5cec4f871470e7a6c9289615e1e7d140fdc038972916223fb8012e29350295f3919cb28a36411845930d5e91b68510faac5e0677953467cedb653f73818749e8cbaf15a5d64ba7ee5cabc98137167b924a2aac9147f159713d115e0225a84a54d6471dc7a01a7e4e814145305c9d04d2880c5be42fc6c52ced3e983d91a580a4142021b73e99c3180117914b9ad03c580a8dac862be9b599a73ccfcfb230bcffc425c13c265f3b06b8c9f104c10752740765567374c211601a5f51501d18c48081998ff7b7a8bfdf0bec9eb4385b554870a996e0cab662d991d0e5f9357f2f99f98", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x79f7441ed5bec692c84f9c7783152d38908fea76de8a06eca5ebcf7e81423a68b78d5f1a84706bdb516f17a29dd779ee16374163c1ab2a85a2097e7b6235aecf7cc509b9d184688f56ccfe8638c51ee70858f690e71b338261fd2b72db56f2a0923a6d1bc51dd15ff9aae18348213d68fc8e120c307a7490f46b2d528d86e503a251fd188764646dd3b8bc3c7066a32dcaa91da430f61aed0466338f17d9703f1c8648d0b19db4fcdcd0893f0f6f21c789306b8f8d110fbd563111fd088de367b9f001758786ced578880bb55e224855b0293f9277dc7201e63845a8d8eae7dc8e3e642820b61315716544e2fd297f018fe1df86427052e3a85c0c7748f6fa89b890be2a3b916794ecfff1e87a87582c991b0c61687637866981d0819020714fbaee296a9ac19ac255226d4d2cf967104b669a622e77fc4c7469aee1553e5cf5cb2a79726f07829adfa8a988fb07479add89c1a8947d88a9b361493025a66fd49776d7304a036894ecda2e148f7f87270cdd52727667c09ee625c7a37ac99ab8a195cd0a97fa9e7247f9d0f17888132eb3f44d24d3d49c0a2e6d4850ee413c36893d04dfa9826f7236a10c77f7da3d31db8eae3070972c9d722347d4a95604d40ba66a2f53710451be8f1994756471ba4d09257f6abe619cc850f123d4715bacc2b9cf167be82e629cf36521b290bab47b9597664c0890a5d6242211d344805a3d75460c21ca9ad05dec187ddecc44c9b1c0b4c0d34c66926db22974c0bc059a6aa6354a43bf26f06e7dfa7f0e07f4f3607a8bc1227b7f0d65d660aa3c1eb7731850729f5dc3285b398806dd4b54aecbe7cb367573a1aa8f062b33e27db1e2fdef478ac306ec57be3b6b0fd0fbbe558507ead60ce60a61eade67afdd8ba512300ecc686d511310578908f49660d163e372ddd2636dbf1c1b6d39292b97dbd48fee420c354d341365e64505aeffc89b6e764afc7f97200924ff8d68846e387f6bca4c4ea3f4e04ac8061efd5260577aa69c34a7287609d2448bb32d2687a46d54c893ba21520ec26e792c836ebb8c9c1005ab55d99c62150413fb7a7f8e2ec4766471e2452ee833fa10995e94d2c1cf89c64260836aab9b3c6a1f699776b5900f48b7c1f97dba13656a85fea0cc2d4fe85aa7a9766d767cfd6a3314acc32eea93e15c3077fa26a3917a48af0765b5690af372219af6c2e7e5b194e6db7f76ca0b28647c5066bfbf142ac3eb1361b77953e328106b1e817e8649a9bdf4f27834bd25279dc2b7a6fab4d4e4830602f84d298f5d2682183a226118fc6c452c99ead827293548afcfeaf9655e76240e57846151bb7b1c1cc5971f0ad83dc7b02c05c2bc0a3adeb65bf608eb5c0aaf186a887a4357e31bdd83940e443289727a6e36bfc974bc20e97fa8983f18137be520500b388fe2f63185c5c66bcc71a48c7fc9c210f73a4a73c4561f62adb5ed9d7ae9a0e4833f198dd3faa1af3ad59c282f3277fac135659e7eb7c9926fd5e954f6f42a9cd2cb6498da0767958716" ], "gasLimit" : [ "0x7576e7c8" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x5af02372" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest307Filler.json ================================================ { "randomStatetest307" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "In Shanghai it is impossible to pay for such CREATE instruction", "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : {} }, "62c01474f089b07dae603491675dc5b5748f7049" : { "shouldnotexist" : "1" }, "91ed00a0a906270d466af043c4e111dadca970a3" : { "shouldnotexist" : "1" }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5547f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000037f055", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5547f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000037f0" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1254784781" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest308Filler.json ================================================ { "randomStatetest308" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x43454545085a55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest30Filler.json ================================================ { "randomStatetest30" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "" : "0x2e" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41314155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest310Filler.json ================================================ { "randomStatetest310" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x44587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x650645597c796e9c979555" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x44587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff59907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a37160b6a650645597c796e9c97955560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x44587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff59907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a37160b6a650645597c796e9c9795" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "460778909" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest311Filler.json ================================================ { "randomStatetest311" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x13971264a1197d72ff18971902387b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f13971264a1197d72ff18971902387b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f13971264a1197d72ff18971902387b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "97322261" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest312Filler.json ================================================ { "randomStatetest312" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000187b55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000187b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "992438124" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest313Filler.json ================================================ { "randomStatetest313" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x0b7f00000000000000000000000000000000000000000000000000000000000000013c7f000000000000000000000000000000000000000000000000000000000000c350a345457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8287a3208c8c5a60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0b7f00000000000000000000000000000000000000000000000000000000000000013c7f000000000000000000000000000000000000000000000000000000000000c350a345457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8287a3208c8c5a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "827973881" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest315Filler.json ================================================ { "randomStatetest315" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x98516a388683755669892b8b37195755" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff067f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f98516a388683755669892b8b3719575560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff067f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f98516a388683755669892b8b371957" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "332964958" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest316Filler.json ================================================ { "randomStatetest316" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "973933687" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest318Filler.json ================================================ { "randomStatetest318" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8206a30a83887e5a3164667796308d55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f8206a30a83887e5a3164667796308d5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f8206a30a83887e5a3164667796308d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "603571959" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest31Filler.json ================================================ { "randomStatetest31" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x010000000000000000000000000000000000000000" : "0xc350", "0x387f000000000000000000000001000000000000000000000000000000000000" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x387f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000090375560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x387f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009037" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1344810912" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest320Filler.json ================================================ { "randomStatetest320" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45457f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3505b0a36095511805131558f14fc3b", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45457f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3505b0a36095511805131558f14fc3b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "831662408" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest321Filler.json ================================================ { "randomStatetest321" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033a06869867986202413a537c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033a06869867986202413a537c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1664390209" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest322Filler.json ================================================ { "randomStatetest322" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x1206060508840294304101a3128f3455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000000000000000000000000000000000000000c3506f1206060508840294304101a3128f345560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000000000000000000000000000000000000000c3506f1206060508840294304101a3128f34" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "824326372" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest323Filler.json ================================================ { "randomStatetest323" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x6f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe74977f000000000000000000000000000000000000000000000000000000000000c3506f6b7936181136392060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe74977f000000000000000000000000000000000000000000000000000000000000c3506f6b79361811363920" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1955628831" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest325Filler.json ================================================ { "randomStatetest325" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81090360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe810903" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "457480517" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest326Filler.json ================================================ { "randomStatetest326" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000000034577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426259cb6142a1196e3168c986758aa4", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000000034577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426259cb6142a1196e3168c986758aa4" ], "gasLimit" : [ "0x16bc578c" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1579124913" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest327Filler.json ================================================ { "randomStatetest327" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001458b5554397513", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001458b5554397513" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "592296179" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest329Filler.json ================================================ { "randomStatetest329" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa48d775458574133769c8b750207ff55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff426fa48d775458574133769c8b750207ff5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff426fa48d775458574133769c8b750207ff" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1532627820" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest332Filler.json ================================================ { "randomStatetest332" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7c098e7d625a64319d9e514bf3507555" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f7c098e7d625a64319d9e514bf350755560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506f7c098e7d625a64319d9e514bf35075" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1406473566" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest333Filler.json ================================================ { "randomStatetest333" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x410263f305963310856c15ff5037a055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f410263f305963310856c15ff5037a05560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f410263f305963310856c15ff5037a0" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "807710883" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest334Filler.json ================================================ { "randomStatetest334" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x424468208e181851308b7c7a776863a1" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000013a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f424468208e181851308b7c7a776863a160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000013a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f424468208e181851308b7c7a776863a1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "916012823" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest335Filler.json ================================================ { "randomStatetest335" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350617e7608617c95f3ff584076e07b5a4460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350617e7608617c95f3ff584076e07b5a44" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1650737351" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest336Filler.json ================================================ { "randomStatetest336" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x41443442f34241", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41443442f34241", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest337Filler.json ================================================ { "randomStatetest337" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xc350", "0x0b9af27e9a6468a1" : "0xc350" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350670b9af27e9a6468a15560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350670b9af27e9a6468a1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x13da3c95" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest338Filler.json ================================================ { "randomStatetest338" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0xffffffff85620cd197ae9f93" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff677a9df32e6851606c0119065560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff677a9df32e6851606c011906" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1766886327" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest339Filler.json ================================================ { "randomStatetest339" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x89029e850708a293905668f1a367a255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506f89029e850708a293905668f1a367a25560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3506f89029e850708a293905668f1a367a2" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1064880298" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest33Filler.json ================================================ { "randomStatetest33" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { "0x00" : "0x6940566279386017a362876372698f55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000015a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3506f6940566279386017a362876372698f5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000015a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3506f6940566279386017a362876372698f" ], "gasLimit" : [ "0x7da7527b" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "123424954" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest340Filler.json ================================================ { "randomStatetest340" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "39040167" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest341Filler.json ================================================ { "randomStatetest341" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b940860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b9408" ], "gasLimit" : [ "0x432380" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1485632" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest342Filler.json ================================================ { "randomStatetest342" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x36314297399455797b42569e8f055655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000000041147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f36314297399455797b42569e8f05565560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000000041147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f36314297399455797b42569e8f0556" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1662167236" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest343Filler.json ================================================ { "randomStatetest343" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xc350", "0x7f000000000000000000000000000000000000000000000000000000000000" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff1110103741355560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff111010374135" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1301366640" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest345Filler.json ================================================ { "randomStatetest345" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000000035420b417f056699168fa16d8d94113b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000000035420b417f056699168fa16d8d94113b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "12028215" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest346Filler.json ================================================ { "randomStatetest346" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "87977970" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest347Filler.json ================================================ { "randomStatetest347" : { "env" : { "currentCoinbase" : "a7f7c8ef9bbbcfb0f7e81c1fd46bb732fba60592", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x0b3be1fc", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0xe9", "storage" : { } }, "" : { "code" : "0x36", "nonce" : "0x59", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x33498455", "code" : ":raw 0x64d552603c577e9a3805d8c55157a82b7660ef2a049cfbf79c15fa8e3261f121d213590fa3917d7d442a5e8734af2aaa4c859b452eed7860c2f7e051580427b6c3cc6d7fee617a0d64ef63e192256de5d2ea2689decfd971c7478effb06aa9e792747ce0492abde8c2f270e93d5ed0b213fed7ae59294537d4864c0e68bbe30ec5d1e6b854027862cfcbea15e8367dfaa080ee0da2b0d2ca892f5a764354370466ccddd03115ec8a7ad2e6c62c29425a45ec842fb74c369fb15a42e4b4e48b3eb70be2a0847469987980e6eaa539365a491d2366334f78f03acb177809e7525add39a234d3d2ef1cf8544a52389411ef846d3cd7f36d0d1db7f414860020171f07598cfb620e15a9681c843d60aee9fb8a4e7e37713afbf6ef9d1667513975c76f26ac35ce209b1e0a3bb7c19821368931537b4095ea42b32baf1ba596b9af5cce961ae705f8c9c5465e349633529871f64351169e7fe48ccbb866952fabbfcf40df723c564e109dbd4c9c15ee9ad625e96a5765f6f56ee0601677961da7ebad5f583f6eb6da7c8348425fe784f532f288963ccdbf9de3ac3ebc38b75a806b40e51b895c662d0bcab255a04b723f1e500517d17eb720e02f445cb046bd0fe7d2759438c79aa2dfcaef1cf57e4eb9c832f7ef449a9c32f673728f4b0dccdfa8fb1d447e2f681076ac51a98f76600a66b4692ca7e1e9c89f64cdf879cb0c625514977ebca28f2ec8bb3a092bd0c30849558fe16a4b7070cb05aec329c0286c26fff57795ce4ac7601160ea2d6656c8f2a554b43e263cc3a60e9fd0a26c0a5f7202f02888a731e84ab326610c77771f85025eb8c552943d2da5de48786015f5b8b5921d26c1e277d5a4cda5f1f77ec5f3a83e6ed6821ff025370e2fad05a0f364f58f3705c8761904d63e0f2e5bdbe2b0b1ddf82bb441c547634e8c1864737333e845ffa373c102303f727bfa14f4c445711f6f9695c36f3627df02a1fe2d7eca55faed6984000ab2a99545148bbe7369a47367bc24256acd6a3a22d5fb32434b1998297ae6b2edf08b72dc4598aa600e16707699a84e55ef611ea0e6da482f6c6e9d05d54bbb4ad06cd62622e469fbcd3e637a8f0d2ac9149b7076cce991cb5d4b4de1229e3decbcf46a3c7e46aa1fdc218d936e56f55b5a38bbd798361040e1badb1ab06adc38a723badfa07a95f78553de4df879855274a1904a31276d7938818021e69d8f5b9279478808a236deefd761df6bc151fded80bbe4ba725e7db7b9fc507f0b8121a009384c7bc4443747bd1ac9dc7682b32bec0937c7fb27ba3926acd0d67b41ba6c951788f1bb1b1168229d15cafdc63209c95df646566024013d766a01d6b8051c357243c9f464f423a2ae8efa4f9efd95777099eac9b0825d18018a5afcb6cecd9ab9a9655ae262db08a271d8adedbc3e7eb6acfd2d576ec297c09c4bd47a80dacd2b123e4e4e6232ef6d70acb10f2f44a62bbcef65a72576506ea119b051880b515f4414920badcd6f726c04e821516f6123c9c52f29e19bfe0fb10fab76536535cc0e01115c83369d4083db2d669654c2fe8c00e37bd78f663a2ce2425d2ce358e213d6c601208bb644fa656678de7633147fbd152c2ae682dec269245f07ba3c79f4e6e1978d40f42a494d44eba128b9d0228d637900cbab73455423156417fae331d26494d1ed4d06ecf206736f04292d5470d5091c48a80ba737372c35729c829af30db3625785ba0b3cfc4240d002276760f2770ead609b52db934a53063ec1c05488188fb37ce61059909b6c975c0e9401ef3b71b6d0ddae39867f3f0878bd172851a98a233fcafae289fc634c36c8b3064926d92deda3d8c5074d6a56daa511e7e693aab3d4347cebdd5b63238acdeedc3d8eb8f69ea18cb429ee8f09c26845507ba28eba916c74fd62cd9e587a8f013122d93579b6b7da091527251a4b70051be4f0f96f61e5dc4ab713c473174c7e2ebb463615b03c4787b74e8c204975399439fa553838f186ae028a47f3ccd46c5fcc46c11a36219f3ba1d34def7bee989fa61e60a2abd3652df9f8e5a1b53d9608e3bb04f5e852333d9c7d761836ef5761178bd07fde9a0ded16e1659a6c80281c259ce42e3fdbe23664ce783b58d595", "nonce" : "0xe9", "storage" : { } }, "" : { "balance" : "0x4ea91708", "code" : ":raw 0x36", "nonce" : "0x59", "storage" : { } }, "" : { "balance" : "0x1024d289465fa51769", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x73151af76abac2a99afe60eff5cfd8f68daf1b35e0608a690494ef4b1d043bf90e00916acf5f0332c3ef3aa972eba960aa557dc165d1a3c726953fc637fe643a60543de4159f3bc09673cd054235ddb44769fa2d6edb61b6e71feff2662043418ac9d2337bce1df4b842fbf8f07395b44bb506e8955d22a12176e2fb8e25bc546d77a6f5049a09f3126c915f14979d8c7c0cf88425567c6b8a6865b78e6d76208a641cb0d0651a758d9afdd5e36b2dcf740a8a1e2b19ebb0bc8ad6ac032577f3b5d483e40d0c9a40aaf32cebc478c0962e1ac5f6c648f47665f0850054ab4caab6eca1a24242087387c96452ad72e76a42a175db6c69a2d8cbcd70759249b040a797894765385557e947875851cfe9734edc8b613cbb6bf40b41b762fa3bcbc6b59ecc66971fef9e8ed16d691702b224f0e2f8ad12577a943401f57334d3207b884a40ed472960f03e4cab61c98268b5a73b6372ab45a7a4" ], "gasLimit" : [ "0x8409f3" ], "gasPrice" : "0x1d", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x7f3e3a6ac8834e68" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest348Filler.json ================================================ { "randomStatetest348" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x18208119191509036365739735608a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000142186f18208119191509036365739735608a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000142186f18208119191509036365739735608a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1329276634" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest349Filler.json ================================================ { "randomStatetest349" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x01" : "0x00", "0x03e8" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe04425560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0442" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "201035010" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest350Filler.json ================================================ { "randomStatetest350" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0908" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1634268072" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest351Filler.json ================================================ { "randomStatetest351" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7f00000000000000000000000000000000000000000000000000000000000000" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0509355534707785320175fca41455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0509355534707785320175fca414" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1215186094" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest352Filler.json ================================================ { "randomStatetest352" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000003a457f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000013428284f28a980b4539a39d1408", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000003a457f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000013428284f28a980b4539a39d1408" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x014eb9ae" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest353Filler.json ================================================ { "randomStatetest353" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000120ba49036880f86529655", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000120ba49036880f865296" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1727538107" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest354Filler.json ================================================ { "randomStatetest354" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350603b35641a8e739f86980a433760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350603b35641a8e739f86980a4337" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "615164662" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest355Filler.json ================================================ { "randomStatetest355" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000457f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001666b56e87c5a499d5389306e55", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000457f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001666b56e87c5a499d5389306e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x275009c5" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest356Filler.json ================================================ { "randomStatetest356" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000827f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000827f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe04" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1329095939" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest357Filler.json ================================================ { "randomStatetest357" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09377c5380715560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09377c538071" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1516457170" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest358Filler.json ================================================ { "randomStatetest358" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x679b82a092078f136b5541888c057a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000c3506f679b82a092078f136b5541888c057a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000c3506f679b82a092078f136b5541888c057a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "623856537" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest359Filler.json ================================================ { "randomStatetest359" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff428d06809e75f26764867d853b0555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff428d06809e75f26764867d853b05" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "801407730" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest360Filler.json ================================================ { "randomStatetest360" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x0441548af30803135562840563829c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000016f0441548af30803135562840563829c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000016f0441548af30803135562840563829c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "991329291" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest361Filler.json ================================================ { "randomStatetest361" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x9e9092673a8f430b6ba1152090181655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x41417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff066f9e9092673a8f430b6ba115209018165560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x41417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff066f9e9092673a8f430b6ba11520901816" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1958353085" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest362Filler.json ================================================ { "randomStatetest362" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffff6bacfb1469f9a4d5674a85b75f951d72d7a58e4a" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50955", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b509" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "822238394" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest363Filler.json ================================================ { "randomStatetest363" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7b20937d953695f369719f9a44790555" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f7b20937d953695f369719f9a4479055560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f7b20937d953695f369719f9a447905" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1276687966" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest364Filler.json ================================================ { "randomStatetest364" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7332988d746694918859185920446d55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350076f7332988d746694918859185920446d5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350076f7332988d746694918859185920446d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "630230945" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest365Filler.json ================================================ { "randomStatetest365" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "", "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x00" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000143b420785375560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000143b42078537" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1219277154" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest366Filler.json ================================================ { "randomStatetest366" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x516f0395f57433725580758f32f19455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff446f516f0395f57433725580758f32f1945560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff446f516f0395f57433725580758f32f194" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2102558524" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest367Filler.json ================================================ { "randomStatetest367" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x7a5959339f3342838b55600051" : "0x880ad67c991058b3847ec9f491f7a8d6ecbb1dff5c2326e7e8e9eb560ca29ecd" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5447f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b51905810a6c7a5959339f3342838b5560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5447f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b51905810a6c7a5959339f3342838b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "734254896" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest368Filler.json ================================================ { "randomStatetest368" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "1000", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b54206f06d870339356057907760005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b54206f06d8703393560579077" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1135359124" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest369Filler.json ================================================ { "randomStatetest369" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000001000000000000000000000000000000000000000060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f0000000000000000000000010000000000000000000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "471893354" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest36Filler.json ================================================ { "randomStatetest36" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000010000000000000000000000000000000000000000448243628c0970843ba460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000010000000000000000000000000000000000000000448243628c0970843ba4" ], "gasLimit" : [ "0x5a7f675f" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2098819291" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest370Filler.json ================================================ { "randomStatetest370" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x44207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001145344846604627f5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x44207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001145344846604627f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1561176030" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest371Filler.json ================================================ { "randomStatetest371" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "2118132562", "nonce" : "0", "storage" : { "0x00" : "0xc350", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000435a10395560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000435a1039" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2118132562" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest372Filler.json ================================================ { "randomStatetest372" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0x945304eb96065b2a98b57a48a06ae28d285a71b4" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f0000000000000000000000000000000000000000000000000000000000000001180860005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000011808" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1833691657" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest376Filler.json ================================================ { "randomStatetest376" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09ff8c316460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09ff8c3164" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1872596219" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest378Filler.json ================================================ { "randomStatetest378" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "balance" : "1675637682", "nonce" : "0", "storage" : { "0x00" : "0x855b445834721a5706f2891711f00255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff547f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000005a7f00000000000000000000000000000000000000000000000000000000000000016f855b445834721a5706f2891711f0025560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff547f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000005a7f00000000000000000000000000000000000000000000000000000000000000016f855b445834721a5706f2891711f002" ], "gasLimit" : [ "0x4961239b" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1675637682" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest379Filler.json ================================================ { "randomStatetest379" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x424255", "nonce" : "0", "storage" : { "0x01" : "0x00", "0x03e8" : "0x03e8" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x424255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest37Filler.json ================================================ { "randomStatetest37" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa49835863514f0f29b930b97f1169355" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000016fa49835863514f0f29b930b97f116935560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000016fa49835863514f0f29b930b97f11693" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1992729901" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest380Filler.json ================================================ { "randomStatetest380" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "628563350", "nonce" : "0", "storage" : { "0x00" : "0x967737653485593c63408b3994397555" } }, "" : { "code" : "0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f967737653485593c63408b399439755560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f967737653485593c63408b39943975" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "628563350" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest381Filler.json ================================================ { "randomStatetest381" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "756682627", "nonce" : "0", "storage" : { "0x00" : "0x098ba088881a64904570927a86183555" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f098ba088881a64904570927a8618355560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f098ba088881a64904570927a861835" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "756682627" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest382Filler.json ================================================ { "randomStatetest382" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "883821556", "nonce" : "0", "storage" : { "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "883821556" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest383Filler.json ================================================ { "randomStatetest383" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1668923511", "nonce" : "0", "storage" : { "" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09150255436c75107e", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09150255436c75107e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1668923511" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest384Filler.yml ================================================ # Created by tests/src/Templates/Random/randomTest.js randomStatetest384: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 pre: # Perform the random action : balance: 1000000000000000000 code: :raw 0x786675A4758D443DBFF535F034A4EDA729A6FFC1E59F674E0C553b655D7974272AC76e18CE2014249172572ED5EAC0B9D2E461FFFF169061FFFF16a033114861C0CD619FE161A9BB61AD137F4D84673D975D1811374A239EF14EE26532D643CC4DD6E9115E28815562C2EB945AF46c513376BC288AA1FDB973C149CD143b7889CC6512F8D604E5D0656C17F2D45B916DF6816A1999719F2B71D521394F07100138B341F1DEBC06C3FB3CBC600116586008015760CB505B7227E1DC4C54400E52AB133F162C6DF107151D1145939445807e5153417E8FF00D138F0DFFC0CD79CED2ECECD6F0DCE826302E4129CB6C37AB43415B6145C16173CE6152A9610C307FA5D352916626FE6BE4AA6EF0E7634DB7909FD79752E5BCB504B358D36AF708495AF461FFFF169061FFFF16a26cE900F727806828F5EE6088EBF861FFFF165170015C1269FA9F5387AB7387A81F5190564098601F9471B46EB2F2D66EE0B4C6845455E9C5EEFF021875BAE1D66F6CB6213C6CE69859F1046AE4CB5E5B743AB76d66120B1A7A97C93A6A04BD493F4A07963d0b69471B70DEC306FA6142CE9c60FF164303406aA04EA7E0BD9D9CDA29962B05067246CE83AB26762D5E2CFB614AA2394AD1D70EA938856b938D5C3FF280BF7EFDA95E668a70149AFA7A18BF9C2D796DE03773E0D35C9A7e8E0E968BA16F3AD59D6442DDBDB9E537908DB1F791BB3F17B33A14333401071961A1689c7b413ED4A9B16E7D66A17B07730188A08FA9E6148100F0311EA269ECC588607D7fCBFFF9F42E22612E938809AF2674B0CEDC8548F47EE642097C0C4ABC9BF7C76B9678996410D0BF28E5E3E1B35B37FFCE70E346E013D5345494D47690334261771761ABAE6174FD61F1957F1396B439A0049676213FD1FF8B75232DBD2117C0C5DCC184D76E2534EA9628AC5AF4863a9761FFFF169061FFFF16a07e486085A7047BD1ACAB7C048C2AE5A07A9E25934021CFAF0651EFBD393B72141461FFFF165361FFFF169061FFFF16a16a84ED962562151D0B903FB2863004140473380357280D5DBC434298AC45559FC2855C0D2A045a66AF59655ED483A0583160FF16430340795F1536B1893659FBB9FFA023722BEB2F24B5693BE6B572737FED1b9d0a646F7A2658B58b5B417220E684F471111724A4F72553B4FDC9593AE22C96959961A631615AD461199161F3F6618FE07F39DBE091B64B8BE6A557A93BF2C25DD042E8C8FEA4DB3BD8EE5BE3EABDE2835E5AF105600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055601155601255601355601455601555601655601755601855601955601a55601b55601c55601d55601e5561273961C065F3 nonce: 1 storage: {} # Explain the random action # PUSH25 # EXTCODESIZE # PUSH6 # PUSH15 # LOG0 # CALLER # GT # BASEFEE # # DELEGATECALL # PUSH2 # PUSH2 # PUSH2 # PUSH2 # PUSH32 # GAS # DELEGATECALL # # PUSH13 # EQ # EXTCODESIZE # PUSH25 # PUSH18 # # JUMPI # PUSH1 01 # AND # PC # PUSH1 08 # ADD # JUMPI # PUSH1 # POP # JUMPDEST # # PUSH19 # GASLIMIT # SWAP4 # SWAP5 # GASLIMIT # DUP1 # PUSH31 # NUMBER # COINBASE # JUMPDEST # # DELEGATECALL # PUSH2 # PUSH2 # PUSH2 # PUSH2 # PUSH32 # GAS # DELEGATECALL # # LOG2 # PUSH13 # # MLOAD # PUSH2 0xFFFF # AND # MLOAD # # PUSH17 # SWAP9 # PUSH1 # SWAP5 # PUSH18 # PUSH22 # PUSH14 # SMOD # SWAP7 # RETURNDATASIZE # SIGNEXTEND # PUSH10 # SWAP13 # # BLOCKHASH # PUSH1 FF # AND # NUMBER # SUB # BLOCKHASH # # PUSH11 # SDIV # MOD # PUSH19 # CODESIZE # DUP6 # PUSH12 # DUP11 # PUSH17 # PUSH31 # NOT # PUSH2 # SWAP13 # PUSH28 # DUP9 # PUSH1 # PUSH32 # SWAP7 # PUSH25 # SWAP1 # CALLER # TIMESTAMP # # DELEGATECALL # PUSH2 # PUSH2 # PUSH2 # PUSH2 # PUSH32 # GAS # DELEGATECALL # # DUP7 # GASPRICE # SWAP8 # LOG0 # PUSH31 # EQ # # MSTORE8 # PUSH2 0xFFFF # AND # MLOAD # # LOG1 # PUSH11 # DUP7 # ADDRESS # DIV # EQ # DIV # PUSH20 # GAS # PUSH7 # PC # BALANCE # # BLOCKHASH # PUSH1 FF # AND # NUMBER # SUB # BLOCKHASH # # PUSH26 # SHL # SWAP14 # EXP # PUSH5 # DUP12 # JUMPDEST # COINBASE # PUSH19 # SWAP7 # SWAP6 # SWAP10 # # CALL # PUSH2 # PUSH2 # PUSH2 # PUSH2 # PUSH2 # PUSH32 # GAS # CALL # # SDIV : balance: 1000000000000000000000 code: '0x' nonce: 1 storage: {} transaction: data: - 0x gasLimit: - 0x1000000 nonce: 1 to: value: - 0 secretKey: "" gasPrice: 100 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: {} ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest39Filler.json ================================================ { "randomStatetest39" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff715de955" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9604638ea2179a58035560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9604638ea2179a5803" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "272686139" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest3Filler.json ================================================ { "randomStatetest3" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000000000000000000000000000000000000000c3504160005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000000000000000000000000000000000000000c35041" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x5eaa223f" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest41Filler.json ================================================ { "randomStatetest41" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x010000000000000000000000000000000000000000" : "0x4cd81adcb05087c4859b28e08fedc25944c5e206071ceafb0ef91f522b9c97" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350517f0000000000000000000000010000000000000000000000000000000000000000417f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b56a84a10719a1786a6510349b028255", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350517f0000000000000000000000010000000000000000000000000000000000000000417f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b56a84a10719a1786a6510349b0282" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "78505988" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest42Filler.json ================================================ { "randomStatetest42" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x00", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3505a7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350356436f0f119011a5560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3505a7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350356436f0f119011a" ], "gasLimit" : [ "0x0d2fbf7d" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x61b9caa3" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest43Filler.json ================================================ { "randomStatetest43" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "", "0x41861a3755a196f259a1" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3b0a55096941861a3755a196f259a155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3b0a55096941861a3755a196f259a1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "580684794" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest45Filler.json ================================================ { "randomStatetest45" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43147256a3130255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43147256a31302" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1998384914" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest47Filler.json ================================================ { "randomStatetest47" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x1544898b167c6a6f6d5b953714457e55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350437f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f1544898b167c6a6f6d5b953714457e5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350437f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f1544898b167c6a6f6d5b953714457e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2007082101" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest48Filler.json ================================================ { "randomStatetest48" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x38785231d8e75db11d6da7040cee1a12ebf739e5022caa60f92d51636060b6d96d698fc0e9ced2f6a0087344559c43612f0561a73ba3600a600d6014600963186262c1736370f82d9ff1604166f49ef1fea120af77ba4cce3f35bc52ca5c40bf14c77e95ea92e69520143ff9c7827bcfe760aee06d241e31a0773476da22f7ce8131475838c23b59f7a3c46b2b99c0955e169ee3527ca9f7674467bdf2c0eebf6f60129232", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x76dd12f3185b84dfc71eb93f4df4ca30dcf34446f25793016424a5e33b6a65fb5d64a9394d7ebefb1c15de971a2d2f53377765d50c698d4e26adea05dd2f6a1688f60eb8b172d796a45c6f79596bfb719df5a571ce8c339e9d7e9b3905324643a2b9fd541956552fc258e688303ecb25082776fde7334cdf046f70c8669a6a05c36909038278e925f0156be9ddb9b83786de8a325ab28e61d18397714bcda0fd5ca879c870d383721c638733b1f78074cc1079e72e0bbbad262348a8976eaaf313a261dccb69dbaf283beebcac7ac3b8166a4deb1fe5099a1c7f3ef595357e76ca260a703bec4848a3cc9804d6de6e5b853b54dd65979292f596ee132edf67eb948e4e4d22f9cb7629bf8b642cb921b2ed9b13e47cb06d6c6f4384c7b372ee7cb61f76a363f8fa68309e3d308179ad3e15fd752d6586e9030c8c1f274878bf7fbe1b569944fdda166c47411878f3702bbe1bbabbce8b10701076e0338bfa289d424c13f4f438474afd71abc18290e0a3c853537a13ce9869d3942c7b6802bfb0f345a9af828b96" ], "gasLimit" : [ "0x7e6bc9f8" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x5c4c6e38" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest49Filler.json ================================================ { "randomStatetest49" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x859c" : "" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000807f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000061859c55", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000807f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000061859c" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x69d65f4b" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest4Filler.json ================================================ { "randomStatetest4" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350617e7608617c95f3ff584076e07b5a4460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350617e7608617c95f3ff584076e07b5a44" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1650737351" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest51Filler.json ================================================ { "randomStatetest51" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001757f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57a7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83189b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000001757f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57a7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83189b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1062041617" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest52Filler.json ================================================ { "randomStatetest52" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x59a130a10a189fc653057a185b886c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe410a81437f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f59a130a10a189fc653057a185b886c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe410a81437f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f59a130a10a189fc653057a185b886c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "667679116" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest53Filler.json ================================================ { "randomStatetest53" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b940860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b9408" ], "gasLimit" : [ "0x432380" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1485632" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest54Filler.json ================================================ { "randomStatetest54" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001c9206e3b8f9d858f438a", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001c9206e3b8f9d858f438a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1174580620" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest55Filler.json ================================================ { "randomStatetest55" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084967f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016f3a5b594088a2f238089b71", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084967f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016f3a5b594088a2f238089b71" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1086316137" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest57Filler.json ================================================ { "randomStatetest57" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f000000000000000000000000000000000000000000000000000000000000c350819055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f000000000000000000000000000000000000000000000000000000000000c3508190" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "277972730" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest58Filler.json ================================================ { "randomStatetest58" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x02947d567838719e97f3" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe096902947d567838719e97f30160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe096902947d567838719e97f301" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "520154270" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest59Filler.json ================================================ { "randomStatetest59" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x3a06756406548b99" : "0xffffffffffffffffffffffff0000000000000000000000000000000000000002" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0208673a06756406548b9955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0208673a06756406548b99" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "630320886" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest5Filler.json ================================================ { "randomStatetest5" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1016957738" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest60Filler.json ================================================ { "randomStatetest60" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x969001091aa15b8b9b75459d015a0455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f969001091aa15b8b9b75459d015a045560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f969001091aa15b8b9b75459d015a04" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1423842991" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest62Filler.json ================================================ { "randomStatetest62" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7268713013964a96ac57580433250155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000016f7268713013964a96ac5758043325015560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000016f7268713013964a96ac575804332501" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1228914584" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest63Filler.json ================================================ { "randomStatetest63" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x977f157e088003767a86928e82529655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f977f157e088003767a86928e8252965560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f977f157e088003767a86928e825296" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "833723715" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest64Filler.json ================================================ { "randomStatetest64" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0x01", "0x82fa967fba85f07810930c28609bb009d805556c23cf249922cca1350e4008c5" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50a5560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50a" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "873959833" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest66Filler.json ================================================ { "randomStatetest66" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x010000000000000000000000000000000000000000" : "0xffffffffffffffffffffffff6bacfb1469f9a4d5674a85b75f951d72d7a58e4a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f000000000000000000000001000000000000000000000000000000000000000055", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f0000000000000000000000010000000000000000000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "794190030" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest67Filler.json ================================================ { "randomStatetest67" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x699776659a06a27607a2166d53733155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000016f699776659a06a27607a2166d5373315560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000016f699776659a06a27607a2166d537331" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2113087573" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest69Filler.json ================================================ { "randomStatetest69" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x15a0770a7676611a6595057b768b6455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43596f15a0770a7676611a6595057b768b645560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43596f15a0770a7676611a6595057b768b64" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "795619675" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest6Filler.json ================================================ { "randomStatetest6" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x1732797105f237768fe506871ac85355" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004143416f1732797105f237768fe506871ac8535560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004143416f1732797105f237768fe506871ac853" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "841471566" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest72Filler.json ================================================ { "randomStatetest72" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff417f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe65688dff579830091304", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff417f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe65688dff579830091304" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x5ded2cc8" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest73Filler.json ================================================ { "randomStatetest73" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5b573198d729b711671056e0a0555346138" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5b573198d729b711671056e0a055534613855", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5b573198d729b711671056e0a0555346138" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "84268071" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest74Filler.json ================================================ { "randomStatetest74" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x141097788a7b5a72139c07076f184255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3a7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f141097788a7b5a72139c07076f18425560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3a7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f141097788a7b5a72139c07076f1842" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1223108496" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest75Filler.json ================================================ { "randomStatetest75" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x5893504553386c7d1540017792877655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f5893504553386c7d154001779287765560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f5893504553386c7d15400177928776" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "180160312" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest77Filler.json ================================================ { "randomStatetest77" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x79a06df1a08d05373216d37219034155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000141937f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f79a06df1a08d05373216d3721903415560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000141937f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f79a06df1a08d05373216d372190341" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1249250523" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest78Filler.json ================================================ { "randomStatetest78" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000437f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1174648789aa349e0915aa5911", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000437f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1174648789aa349e0915aa5911" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "181540957" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest80Filler.json ================================================ { "randomStatetest80" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5681069127b3b9c877d6f6169ff36600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f0000000000000000000000010000000000000000000000000000000000000000117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5681069127b3b9c877d6f6169ff3660005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f0000000000000000000000010000000000000000000000000000000000000000117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5681069127b3b9c877d6f6169ff36" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "517580214" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest81Filler.json ================================================ { "randomStatetest81" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x616c327e0435743c515b078453a03c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff436f616c327e0435743c515b078453a03c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff436f616c327e0435743c515b078453a03c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "898282209" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest82Filler.json ================================================ { "randomStatetest82" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000000655", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000000006" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1676520806" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest83Filler.json ================================================ { "randomStatetest83" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa1109af20740728e72150a7a9c095955" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6fa1109af20740728e72150a7a9c09595560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6fa1109af20740728e72150a7a9c0959" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1015118220" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest84Filler.json ================================================ { "randomStatetest84" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000001000000000000000000000000000000000000000044457f0000000000000000000000000000000000000000000000000000000000000001187f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff52155955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000001000000000000000000000000000000000000000044457f0000000000000000000000000000000000000000000000000000000000000001187f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff521559" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "679746513" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest85Filler.json ================================================ { "randomStatetest85" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x01" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f25b557e348ff374819d123109539b55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f25b557e348ff374819d123109539b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "994504369" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest87Filler.json ================================================ { "randomStatetest87" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x446e638e7e16736c030393727d748174" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000005b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f446e638e7e16736c030393727d74817460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000005b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f446e638e7e16736c030393727d748174" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2065587657" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest88Filler.json ================================================ { "randomStatetest88" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x01" : "0x00", "0x01000000000000000000000000000000000000000000000000000000000000" : "0x34f06a7014541167033909103620f355" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000004343537f000000000000000000000000000000000000000000000000000000000000c350117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000016f34f06a7014541167033909103620f35560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000004343537f000000000000000000000000000000000000000000000000000000000000c350117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000016f34f06a7014541167033909103620f3" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1050242229" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest89Filler.json ================================================ { "randomStatetest89" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x05648ce0ad106b7a6f3483379e62876b" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000016f05648ce0ad106b7a6f3483379e62876b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000016f05648ce0ad106b7a6f3483379e62876b" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1090727739" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest90Filler.json ================================================ { "randomStatetest90" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x116b4177f25178d7048212877e956855" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff45157f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000016f116b4177f25178d7048212877e95685560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff45157f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000016f116b4177f25178d7048212877e9568" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "168858958" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest92Filler.json ================================================ { "randomStatetest92" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x59640c655956799087168f0658a11a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006f59640c655956799087168f0658a11a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006f59640c655956799087168f0658a11a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "472110012" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest95Filler.json ================================================ { "randomStatetest95" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff14447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff14447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x7e83fa74" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest96Filler.json ================================================ { "randomStatetest96" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x183b68a09b08953085a854a39d921255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f183b68a09b08953085a854a39d92125560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006f183b68a09b08953085a854a39d9212" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1246597060" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest97Filler.json ================================================ { "randomStatetest97" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "code" : "0x7f000000000000000000000000587f0000000000000000000000000000000000000000000000000000000000000001957f0000000000000000000000000000000000000000000000000000000000000000407f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3509781040107338b35071887a186", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000587f0000000000000000000000000000000000000000000000000000000000000001957f0000000000000000000000000000000000000000000000000000000000000000407f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3509781040107338b35071887a186", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000587f0000000000000000000000000000000000000000000000000000000000000001957f0000000000000000000000000000000000000000000000000000000000000000407f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3509781040107338b35071887a186" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "335580338" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest98Filler.json ================================================ { "randomStatetest98" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "", "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000000b085560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000000b08" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "588937108" ] } } } ================================================ FILE: tests/static/state_tests/stRandom/randomStatetest9Filler.json ================================================ { "randomStatetest9" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x757fb845405bf1ff959ba03a9c336b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000016f757fb845405bf1ff959ba03a9c336b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000016f757fb845405bf1ff959ba03a9c336b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "217035801" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest384Filler.json ================================================ { "randomStatetest384" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x16133502727c0a7f679b456df0935763" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f16133502727c0a7f679b456df093576360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f16133502727c0a7f679b456df0935763" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2066470732" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest385Filler.json ================================================ { "randomStatetest385" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x785188182063156955631a7a85093a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000547f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f785188182063156955631a7a85093a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000547f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f785188182063156955631a7a85093a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "768381138" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest386Filler.json ================================================ { "randomStatetest386" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff047f000000000000000000000000000000000000000000000000000000000000000105133641010b811160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff047f000000000000000000000000000000000000000000000000000000000000000105133641010b8111" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "433564740" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest387Filler.json ================================================ { "randomStatetest387" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350617e7608617c95f3ff584076e07b5a4460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350617e7608617c95f3ff584076e07b5a44" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1650737351" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest388Filler.json ================================================ { "randomStatetest388" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5765b8f743b9979a0905b6a189165600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5765b8f743b9979a0905b6a18916560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5765b8f743b9979a0905b6a189165" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1175166777" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest389Filler.json ================================================ { "randomStatetest389" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000427f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3503a86385458123760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000427f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3503a863854581237" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1542544795" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest393Filler.json ================================================ { "randomStatetest393" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20b39838f628b96846cff0455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20b39838f628b96846cff04" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "490453529" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest395Filler.json ================================================ { "randomStatetest395" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x823140710bf13990e4500136726d8b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447f0000000000000000000000000000000000000000000000000000000000000001417f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f823140710bf13990e4500136726d8b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447f0000000000000000000000000000000000000000000000000000000000000001417f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f823140710bf13990e4500136726d8b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1520198127" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest396Filler.json ================================================ { "randomStatetest396" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001719f197c5560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001719f197c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x4ca4d183" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest397Filler.json ================================================ { "randomStatetest397" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x413443f3404242433389ff723810", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest398Filler.json ================================================ { "randomStatetest398" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3781413b695a69079d7f510582920755" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000006f3781413b695a69079d7f51058292075560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000006f3781413b695a69079d7f5105829207" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "110765790" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest399Filler.json ================================================ { "randomStatetest399" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x98324016076d428a9898129b16849a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4544437f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f98324016076d428a9898129b16849a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4544437f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f98324016076d428a9898129b16849a" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "546942842" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest401Filler.json ================================================ { "randomStatetest401" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c35044427f000000000000000000000000ff60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c35044427f000000000000000000000000ff" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "588192910" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest402Filler.json ================================================ { "randomStatetest402" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x62138c87028162ea32a2db7e30100455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f62138c87028162ea32a2db7e3010045560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f62138c87028162ea32a2db7e301004" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "938198850" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest404Filler.json ================================================ { "randomStatetest404" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6a7f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906606425655", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6a7f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9066064256" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "108687806" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest405Filler.json ================================================ { "randomStatetest405" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x318d0707977199361171756f6d458e55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff44457f0000000000000000000000010000000000000000000000000000000000000000037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f318d0707977199361171756f6d458e5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff44457f0000000000000000000000010000000000000000000000000000000000000000037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f318d0707977199361171756f6d458e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "274296751" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest406Filler.json ================================================ { "randomStatetest406" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0xb58b8e99f33c647165337e389f7b9c909cba" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "code" : "0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b58b8e99f33c647165337e389f7b9c909cba5560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b58b8e99f33c647165337e389f7b9c909cba" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1160230573" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest407Filler.json ================================================ { "randomStatetest407" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x6d71656f054471181163037902615b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000006f6d71656f054471181163037902615b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000006f6d71656f054471181163037902615b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "825575416" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest408Filler.json ================================================ { "randomStatetest408" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x80656e8e6478946a323482135a8bf755" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f80656e8e6478946a323482135a8bf75560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe447f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f80656e8e6478946a323482135a8bf7" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1672298879" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest409Filler.json ================================================ { "randomStatetest409" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } }, "ffffffffffffffffffffffffffffffffffffffff" : { "balance" : "1090686083", "code" : "0x", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x5b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000001000000000000000000000000000000000000000009ff511287868833063aa3579d8e585560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x5b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000001000000000000000000000000000000000000000009ff511287868833063aa3579d8e58" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1090686083" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest410Filler.json ================================================ { "randomStatetest410" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000045086201771880f35560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000045086201771880f3" ], "gasLimit" : [ "0x030d40" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1969973721" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest411Filler.json ================================================ { "randomStatetest411" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x44a17892738b6895619d7a93507d649d" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006f44a17892738b6895619d7a93507d649d60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006f44a17892738b6895619d7a93507d649d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2119897718" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest412Filler.json ================================================ { "randomStatetest412" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa46ef06a5a858b9742198a37e1153c55" } }, "" : { "code" : "0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6fa46ef06a5a858b9742198a37e1153c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6fa46ef06a5a858b9742198a37e1153c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "123532973" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest413Filler.json ================================================ { "randomStatetest413" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x086e2055149345ad1a018b0637081455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe037f00000000000000000000000000000000000000000000000000000000000000016f086e2055149345ad1a018b063708145560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe037f00000000000000000000000000000000000000000000000000000000000000016f086e2055149345ad1a018b06370814" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1206033425" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest414Filler.json ================================================ { "randomStatetest414" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6251437f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000fffffffffffffffffffffffffffffffffffffffff11460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6251437f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000fffffffffffffffffffffffffffffffffffffffff114" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1088932905" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest415Filler.json ================================================ { "randomStatetest415" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000000142427f000000000000000000000000357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff62010a8c8794a17e8ea4f260005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000000142427f000000000000000000000000357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff62010a8c8794a17e8ea4f2" ], "gasLimit" : [ "0x927c0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1235296517" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest416Filler.json ================================================ { "randomStatetest416" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x01" : "" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f0000000000000000000000004355", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f00000000000000000000000043" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x4f622410" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest417Filler.json ================================================ { "randomStatetest417" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x4343424344444242f26d69", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest418Filler.json ================================================ { "randomStatetest418" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12a36234970658a03160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12a36234970658a031" ], "gasLimit" : [ "0x17647ecd" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1705540168" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest419Filler.json ================================================ { "randomStatetest419" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x73095b7ee211595a6b80a311900a7855" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f73095b7ee211595a6b80a311900a785560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f73095b7ee211595a6b80a311900a78" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1783425972" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest420Filler.json ================================================ { "randomStatetest420" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000003a7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001817d7b8956970660129f5015fe0a355560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000003a7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001817d7b8956970660129f5015fe0a35" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1657754250" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest421Filler.json ================================================ { "randomStatetest421" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x38454051968ff184a47d500912319717" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x437f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f38454051968ff184a47d50091231971760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x437f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f38454051968ff184a47d500912319717" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1389450591" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest422Filler.json ================================================ { "randomStatetest422" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe527f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe527f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1285310456" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest424Filler.json ================================================ { "randomStatetest424" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x18116552626186825096665471140a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000436f18116552626186825096665471140a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000436f18116552626186825096665471140a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1271738191" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest425Filler.json ================================================ { "randomStatetest425" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x885707818b889a89975552f012844255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f885707818b889a89975552f01284425560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f885707818b889a89975552f0128442" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "574036597" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest426Filler.json ================================================ { "randomStatetest426" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x456d1687795a95938b0139976099f055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f456d1687795a95938b0139976099f05560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f456d1687795a95938b0139976099f0" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1631269834" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest428Filler.json ================================================ { "randomStatetest428" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x4244417b4542404409523b200283", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest429Filler.json ================================================ { "randomStatetest429" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x98121f38878672908777347633136655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f98121f3887867290877734763313665560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f98121f388786729087773476331366" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1412476335" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest430Filler.json ================================================ { "randomStatetest430" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7d41a29934035b748e96a3135b696455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000006f7d41a29934035b748e96a3135b69645560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000006f7d41a29934035b748e96a3135b6964" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1811277343" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest433Filler.json ================================================ { "randomStatetest433" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350a3f305205bf156207259573055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350a3f305205bf1562072595730" ], "gasLimit" : [ "0x7a120" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "630948579" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest435Filler.json ================================================ { "randomStatetest435" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x33797f" : "0x01c0" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000000447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042613488076233797f553960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000000447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042613488076233797f5539" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1256168470" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest436Filler.json ================================================ { "randomStatetest436" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8108067a345b7a76a20a835a0a0b6c10" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x367f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000456f8108067a345b7a76a20a835a0a0b6c1060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x367f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000456f8108067a345b7a76a20a835a0a0b6c10" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1464160030" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest437Filler.json ================================================ { "randomStatetest437" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x6bacfb1469f9a4d5674a85b75f951d72d7a58e4b" : "0x01" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000013a1339085560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000013a133908" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1752414467" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest438Filler.json ================================================ { "randomStatetest438" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1071528892" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest439Filler.json ================================================ { "randomStatetest439" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x5b1609653438813340097c53a4931655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f5b1609653438813340097c53a493165560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f5b1609653438813340097c53a49316" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "398066515" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest440Filler.json ================================================ { "randomStatetest440" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01513a9b8216816f74f3676e9ea26155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000045457f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff416f01513a9b8216816f74f3676e9ea2615560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000045457f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff416f01513a9b8216816f74f3676e9ea261" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1245697846" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest442Filler.json ================================================ { "randomStatetest442" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cae", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cae" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff917f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3501833815560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff917f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350183381" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "794450594" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest443Filler.json ================================================ { "randomStatetest443" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001155933704", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001155933704" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1499936335" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest444Filler.json ================================================ { "randomStatetest444" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000607f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff661392843555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000607f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6613928435" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1481275721" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest445Filler.json ================================================ { "randomStatetest445" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008756993365a1376155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008756993365a13761" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "340638033" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest446Filler.json ================================================ { "randomStatetest446" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xfffffffffffffffffffffffe000000000000000000000001ffffffffffffffff" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "141749433" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest447Filler.json ================================================ { "randomStatetest447" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff085560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x1569eba8" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest448Filler.json ================================================ { "randomStatetest448" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b940860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b9408" ], "gasLimit" : [ "0x432380" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1485632" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest449Filler.json ================================================ { "randomStatetest449" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x197f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b66e4ff65a056f39b529f", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x197f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b66e4ff65a056f39b529f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1857649905" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest450Filler.json ================================================ { "randomStatetest450" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x0a" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000033a8060005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a764000000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000033a80" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x50f09196" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest451Filler.json ================================================ { "randomStatetest451" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xed05989a0659453076573a8704117455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000006fed05989a0659453076573a870411745560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000006fed05989a0659453076573a87041174" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "812425754" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest452Filler.json ================================================ { "randomStatetest452" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x0a3289746806163630047dff98310555" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006f0a3289746806163630047dff9831055560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006f0a3289746806163630047dff983105" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1492613506" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest454Filler.json ================================================ { "randomStatetest454" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f0000000000000000000000000a84339188646595668352a061855560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f0000000000000000000000000a84339188646595668352a06185" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1431310051" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest455Filler.json ================================================ { "randomStatetest455" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x858b1411f218693ca2245b918274f355" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000006f858b1411f218693ca2245b918274f35560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000006f858b1411f218693ca2245b918274f3" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "737734735" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest456Filler.json ================================================ { "randomStatetest456" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41424143445a42f35b10773574016c9f", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest457Filler.json ================================================ { "randomStatetest457" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x949fa28af308a37a136c626218927d55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x44417f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f949fa28af308a37a136c626218927d5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x44417f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f949fa28af308a37a136c626218927d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "316557712" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest458Filler.json ================================================ { "randomStatetest458" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7689747fb3520231748bbe5eb9617666e630019e3e84ce7179c5d83b7e36050e5c05623956e599f54eb56213e4f96f69f402cd73e13c366095a3fe56bdd6a815d9ba23f3a9729bc462385c697ed9f24192c949e33ff7ed256c84979d70148b8fd8a62438ca053de2642271456dde46ce78cf7c6d1d2cc48eee658a73ad9f9ca1e550720490e2d0769e0a429773e42fc965ea1030f6c0787b4e7bc4915150a99fc758d3373561d8917c4c7d605f0cd8d2203f4d69606198437429e2f2d2bf742b28760a9c0ab51203d0c5d5b9e16d74ce0428945aaff2d0f99240a901d3233bd04e366c367ab93ecea0c206fbf01084254636df9c1f308c7d6875d5d5d37f3ce27989e39048f175f0d2dc49eaa86530def7ab70553f5d3904c843b5736025e321e7e2ab92af570e5b3bef4014c54e65316bb546eb8906f155f7b9405326740104d8f5d98dc97ac374ad0c58f4385e086891b9b2657e982eb15a367eab6683b51ea9f219abae5ca39f669a1a88a82e14efd4192a3edbe04a12d35679cf6338130d67f37c324464d16cc866be846b0304ef9fd3c6611e6cdf1277d65f6b2a58ffb61ba979740b8df72816602071e979e6029c9307d718ffdc70f37ea0019353c06b0fb56d8e3738dfdb18418e952092e8625b51749f276cc6ae416a85bd070c61e65240d8c2719c76b0420f84ece41c9be0f93d4f30581c28f69768395163937f95b86da30fa76b6937870245d9250e06b6e07dffea8f849a37647378dd59ac8365a37dd908eea26be2f53375e1dbee32ecaa7e957eace8c6f0883e4ef830485bd43b2b7851a0b11497f752d3ee4560e312a7a91b7b2a88c109737c92feb7807d481ac3fd823f038c4ba82df40a60982a7c7a6f6ba2cb95233c257b30e1c9d3c84aa37b6f4268fec34fb9eef1f8602e6a7bf1ebfa162680b57af09f7a7fc584055ff32d68a92e59ddaf20bcaaaa70d5970fd71c04cdbab46cf86e566e870664b6df2c6861347b2a3886788bbebbd03cbb51ed29357f699c8b974c61528a0423f67a837bfab83afa78a0bff70a653ea0f398f73632d5e3bea0a31115d65486fb6d667110448e0208264a3f76f35972666e7aa7339f23b08e6028616337a0366016601d6014600b630e6db38e73635706352bf1695bb9e53d5ad3ba1191ea65ae1880d46c687605148e427a09d40172dbdd5fc72fffb1443080a39a0ee77feed9ddc9050affce41d68c34ad97c484f204a987bcfaf46b9fa4a9ed2dad3738771a3cf86b43f303a8db8cde3ed8a40ae35574b9084f4cab88701d150e628d9b2a33e71c8f9fb0ce9e72866257691776f999b7ddf64f22532351bd34743e08facd1acc94b0d6b56bf97491d5ed9d726af684d1a47abcb243b7c29d12a315e939f70af8d2617df63567c3bc56c16609a27871af77631fe1ccaa0d15f8da9bd9a712a544abb92b925b1d7561fced60b09b6b22f2121b105a65a209e151b76b31be481d57353d10a1d968ca7a185495a8a2935571a0d17443a327bf11cb421baca9064bc4e4497c7d4c486c40082cc2d01b3f6023b726de95ac2ad53ae0b731d741676338181e66c8ac8daf0d54776827987e79d9f617c51f6f4b87cf8fee734c99e5e3fc2e37f17e626cbfd1195157215d10fa39b4b0947c3339139b280c0b042da7ec93a24416d5c52e0ba21ec9d39d6fbcd3d74266580eef6ca9bb9d76bb4dc441f3d6d0cf38307b505251deea82ab39f9ccd17a6507bf16b38640679c22f2134e8258f79b", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6cff89fd2305930f9a427748410969e86bfeabd7748df8c60e9075e32f95abb7b73e260fc345efb09ac919b22eb90402ff6b737a79722d83372adc70ef947e3a28e6dda50601f52fea5b45a7294d90ea73bb64de313534dce604ebc4a22c7519bd1a15bc91aca303759ffdfc849b53ca82e03b1df66d1ede5b09b519084802396f8849817328c82f591c11d4b40c0653e1ec91398ca9a1a6b872165aac3c0567020253bc3f5221edb93cbbd87c7486136d4f5649a5f1ad8808013f373cbffc6c40c8707f2e0449a9ce33beba84b4974ed62803f8dd900ba3b47d3cc55ba503f903701f1188" ], "gasLimit" : [ "0x612fcece" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x7f120206" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest460Filler.json ================================================ { "randomStatetest460" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x16a23c6c90739ba201697b4315778a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000003a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350046f16a23c6c90739ba201697b4315778a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000003a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350046f16a23c6c90739ba201697b4315778a" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1518569663" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest461Filler.json ================================================ { "randomStatetest461" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0xc380" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350517f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4251525960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350517f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42515259" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "548509958" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest462Filler.json ================================================ { "randomStatetest462" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8e0186019d029d1354681482826f3755" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f8e0186019d029d1354681482826f375560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f0000000000000000000000007f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f8e0186019d029d1354681482826f37" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1447977690" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest464Filler.json ================================================ { "randomStatetest464" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffffffffffffffffffff" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8209" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2396601" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest465Filler.json ================================================ { "randomStatetest465" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000437f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000160005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000437f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x5de12c27" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest466Filler.json ================================================ { "randomStatetest466" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x020000", "0x83" : "0x03e8" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff4244904244045560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff424490424404" ], "gasLimit" : [ "0xd9acdb" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x6ac01f3a" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest467Filler.json ================================================ { "randomStatetest467" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x700ab6605e03171122aeebd20b63699a72d454628639346ffaf92bcd1855c6dde5c90ba78a966a256c777ce8880c23f90f4a2ecc999a6cd42da7121d5e1fde1c9c340f9660b571a71e20a5753bc4e291adbd41a228289a0be175a606bc44dd2079ece46a2cba498bee0d80a41673d8016e7232f97a66b29954364570f6e2d08b6d429c6a75f737c594aca21580bc0d60e67c38a50ce1ddf0ce9963fd79da8a590429f5fcfb6e7fd9ee2d27201f95707235ce3dbc5997e44baa174111977f51dc6b333a9a63483e6a3d6f423ed5778057702664b65d4af9aab14d773a787d60bd24c439b29533c6b172278b6a78e64f8e319fbd6b45eeca466afd1eb2eecbaeed773da8711c4c65787e0a0a1297f525b7418f49fbc1b2446a847d74bb0a66e3b06ef70d8a8aa09a910a6be623c6a8239960381512da962eb868a21f99d90741128fcb711e029cff42f4f8f5d35947c4a7b39cff7fd46f916cc8612b146bbf52db1cd36e6c2fce7cd9ed232e21946081d78d87e61bc42fce313fa32b458d1e898e52cc2e607570a7e1d2ae3b5b7d58e0a70396bcfaae0789cd9202876488bb595d457a45bc48e190f5d56b34be6d244070ffe02107ceaf9313db08d9a1809b366fc956e6c5567da1d8a656406871eb0dd46268b5127366225cb464667bd081c949847a95e2821f589dad60c061ef2fa36b9e17c2b3a94181a8f8a89b486734ca1a8a0c86c26d076004601160066012635e0d738673636158e2e1f166e10de5d590572335", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6f42af68ebb8fbfe65896d2993c75a18b06dbf26336197db938986312c4ea88b7aab8c2cd436a05c5b765989d8ad6c97257fe7c4f1f33d9644b8e03c6898c8946d19a4dfed187482dd95f88ea4f0c43f39f4ab261808bf1b1f658f0979b867eeb00baeadab37700449f879522b0bba9c6f2d87d2541b0b943275c57530b3790b225dd318baeca448b045ccf1477837e4156d992ad881869b91a5f7f71de5884a703c659316ab330af945c7fd906936c695fe79134e48e46153702e81da6d3da14e05b90ae63b037d7b9e4fb17367c1e737162043aa587f4bb580e87cfaad897bc8e3152e3741f1ba345cc4c762c99caede0c3c0de9f33e7c89de151164142941ef1cc6b81f618255c88f3e04316de6ff3f8b87fb187d3661e8d861b8134d518cfe5123377034be1a24c27e19133f7fdcbddcadd272d4eb1f5205b897290ed5b28741f1d13f595f15604097426e31e5a64a6665f31f2ebca84c5be5d27a8632d85d7e123bac508bf47f6274f38f9f580ad68134f4d4e654d56693448be12412a37275c071ba6b6b017df1ec3d04f5b5fe7af2c0aa65ed17249093e9601064716ca4d232779ee3cf649bff458fb2a37fd534556a505f3dbc4f9afd77cb7e2e37e0a6a739404993d8f68975614f1988a7130cadc9245f9616c4776a3bfe77f48bb80ed67553de915c99302d13cc7ab0253d6f415cb1499866f3a0512a188aa35477c52c8b4cce48dd291dc9fabd99de813a0e0db12447a11917353860c06efdf1c9532e0cf08a7c0a3185ab81d417" ], "gasLimit" : [ "0x69126cad" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x6e30a0e3" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest469Filler.json ================================================ { "randomStatetest469" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350f36409156a6aa261413b56f20855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350f36409156a6aa261413b56f208" ], "gasLimit" : [ "0x7a120" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1762323696" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest470Filler.json ================================================ { "randomStatetest470" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1740863815" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest471Filler.json ================================================ { "randomStatetest471" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x061870135504" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09650618701355040655183a51377d8260005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09650618701355040655183a51377d82" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1662521271" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest472Filler.json ================================================ { "randomStatetest472" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000041437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff090a60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000041437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff090a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1691421230" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest473Filler.json ================================================ { "randomStatetest473" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffff6bacfb1469f9a4d5674a85b75f951d72d7a58e4a" : "0xc350" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff317f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b59102095560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff317f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5910209" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1147652673" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest474Filler.json ================================================ { "randomStatetest474" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7d6f6b1051778ea1670387810b580555" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe027f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f7d6f6b1051778ea1670387810b58055560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe027f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f7d6f6b1051778ea1670387810b5805" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2065350381" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest475Filler.json ================================================ { "randomStatetest475" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xfffffffffffffffffffffffe000000000000000000000001ffffffffffffffff" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "428358692" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest476Filler.json ================================================ { "randomStatetest476" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000010000000000000000000000000000000000000000448243628c0970843ba460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000010000000000000000000000000000000000000000448243628c0970843ba4" ], "gasLimit" : [ "0x5a7f675f" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2098819291" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest477Filler.json ================================================ { "randomStatetest477" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x9084a3758d3456763aa4f09c8b735b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f9084a3758d3456763aa4f09c8b735b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f9084a3758d3456763aa4f09c8b735b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "11119317" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest478Filler.json ================================================ { "randomStatetest478" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001447f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f1606588a909558021569", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001447f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f1606588a909558021569" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "844312201" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest480Filler.json ================================================ { "randomStatetest480" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x5af3a474ff64f3a37d51f36a6a607f55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff037f0000000000000000000000000000000000000000000000000000000000000000427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f5af3a474ff64f3a37d51f36a6a607f5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff037f0000000000000000000000000000000000000000000000000000000000000000427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f5af3a474ff64f3a37d51f36a6a607f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "745095931" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest481Filler.json ================================================ { "randomStatetest481" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09437f0000000000000000000000010000000000000000000000000000000000000000a2695a7d52064361127350", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x447f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09437f0000000000000000000000010000000000000000000000000000000000000000a2695a7d52064361127350" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1124860809" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest482Filler.json ================================================ { "randomStatetest482" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x027c9d313d9b09376505927c8e715655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f027c9d313d9b09376505927c8e71565560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f027c9d313d9b09376505927c8e7156" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1668252863" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest483Filler.json ================================================ { "randomStatetest483" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe840955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8409" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2129514006" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest484Filler.json ================================================ { "randomStatetest484" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff35427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000595584a2558493a25b5a6a60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff35427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000595584a2558493a25b5a6a" ], "gasLimit" : [ "0x07a120" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "465395296" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest485Filler.json ================================================ { "randomStatetest485" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000008e447f00000000000000000000000100000000000000000000000000000000000000003a1a7e", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000008e447f00000000000000000000000100000000000000000000000000000000000000003a1a7e" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1573164058" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest487Filler.json ================================================ { "randomStatetest487" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "1", "storage" : { } }, "ffffffffffffffffffffffffffffffffffff3cae" : { "code" : "0x", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0308ff9f708d1710086a73a0766a6b55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0308ff9f708d1710086a73a0766a6b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "841051523" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest488Filler.json ================================================ { "randomStatetest488" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3250648093577f6364a218f0907e7d55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000427f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f3250648093577f6364a218f0907e7d5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000427f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f3250648093577f6364a218f0907e7d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1401176215" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest489Filler.json ================================================ { "randomStatetest489" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x2b8e846b91987417705a126e77076455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000456f2b8e846b91987417705a126e7707645560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000456f2b8e846b91987417705a126e770764" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1856101458" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest491Filler.json ================================================ { "randomStatetest491" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa0f670645a778c71127d3b5598308b17" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000006fa0f670645a778c71127d3b5598308b1760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000006fa0f670645a778c71127d3b5598308b17" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1805810722" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest493Filler.json ================================================ { "randomStatetest493" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff", "0xffffffffffffffffffffffffffffffffffffffff" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1422979897" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest494Filler.json ================================================ { "randomStatetest494" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x847f000000000000000000000000000000000000000000000000000000000000c35043657f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4362f03c897f50f073f219105455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x847f000000000000000000000000000000000000000000000000000000000000c35043657f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4362f03c897f50f073f2191054" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1741426477" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest495Filler.json ================================================ { "randomStatetest495" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "00000000427fffffffffffffffffffffffffffff" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7e6410f26f519c538ea2070a6c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7e6410f26f519c538ea2070a6c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "211829998" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest496Filler.json ================================================ { "randomStatetest496" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f0000000000000000000000000000000000000000000000000000000000000000355b7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3500b0b0207965560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f0000000000000000000000000000000000000000000000000000000000000000355b7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3500b0b020796" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "256677208" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest497Filler.json ================================================ { "randomStatetest497" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0904" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1143211377" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest498Filler.json ================================================ { "randomStatetest498" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x00", "storage" : { "0x94198cdb286cd2f21f06659320130750e7aa2c83ceb28015" : "0xebb0472b3e" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x6bd243dbcfdc6982733e4cd6261574fc6cdec93282ff50ef24d8be05d58be29301ddb00d7547f6b65997e73d232b76d6484c11eb15c87b01f89e2779c427711ba193e4e163967efd1b9315187c3227f67b9282fc7524692fbf851cb370d396d53f7a86353aacecc5c1eadeddbb3925522f935fc5ed03568fbf40261c056a124f1334cc9fa8eea2bdbf68f04c10cc08b6babcbb6ee8d3fb88dd42d06d445b5eab34cb5d64408cf652fd7568acaa81b573f66fa8781e83185438e42796631ae9a9987f714d986f94fc6354921a9367bb6b9e555f24107cb814557f8bd87547ad612c3e726f9f495b0ac9e37fbe5f23014c68d8d032bfae779a5213c33778af679417d77733645f87b6042be92c553dbb6d85a2c56b21a53c0e612ae0a8d78d60f162b52efea464ebb0472b3e7794198cdb286cd2f21f06659320130750e7aa2c83ceb2801555785c9f02455252560846587006e90cbffc955445d9ef1f55eeb07011c02cee02df12dc35b36702539873e4b766e4ae9e829a442460dd7f845cd37dc08f93bef98a4d5b53ecd4cf4dd1a5c416f92116160f0fb673c30b7873b85a2ff6331a5d371f3d109f5794d712e03493b17fc562ac7589411127e654ce32d273f8300cc8544e7bd782aa7828b543958dadf872d7f13401a51b13835cc8a36be87cc7347cdf0f7aa2df420bb03e925c117d4befbc7e69472fd75f01f3f6c966de818174aba3b7a43014c3dd39414fb3d239d72e06852ae48e6203c60a7e844d6fd61c5b519d43780d383d103989f9bfce5ed122804cba183c188f5ce47c348a96973eca904f096aed4fb77d40ca9139447527f267a028eae5e3706e1975fc3e38327505e81d0e8c9fab1f60ec7ece71cc87510f308984ebdcb8ab84e1905dfdc0a19ee3c5f37e88dc3a9f26497c51427da28f6d777d9585b4ec790722bacaa179b1dc5b086d945623f9d29f6013600c60096019634f4421eb73631ac754faf17506f9cc63229e7fe309b7a2f1acf074a43aa4dd2b75bf6dadf21aadb9a3e239a9592f576c9265eebd2420e2626d2b2f1f7ee7a56725d7d4fe23da45725e8b709d2976703147ef66a8fc9a6c1225df7b79eec95ddda5e91c6e19bbc55baf9d6c440cc805f0d229738d17a76f95e329f94d5bc48cc5964933f9597fb57a6f7290649722d68a72fa2d081c4547943b3bbca2edc5f4032c5c916e585fa6abd1b209e2b6fb64498a37b9796c95da3fdb8013c13ef99ed49b29282ae55458c651fdb8598b527024d2da1e8a7015f65ee4ab0178b68ab8c877d55f3c89a7f1f7bc6c0d86bc69688cbcc252972693993bf766aac4efb2b65b216cca2e721dea3f3b3df3abbbfb7b8d", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7349d4fb4fa5c26263087f9f9885a7033ed1f85282806175626c7aff6e85d032f987501c7f07e672602eea9a752c14f2fea044cbadb4acbbbece186bfae0ddfa5c3a4f602e8674516e7ead3a1b9f0c321f53474588f38a996f7512fbdf364372a2f5b5329a5866cb8867c09526eabd04524486650cba94b9d20e8079263be537932206f67f64915b81ac1ea4b1f3723baa86b2d9ad667f11ff36b05f0ec27d14051ce250c5c524eaa31472f153582c9aafa7a0b317230863944f1b5e7444ad06685190a6f9ff72b7af0f52a4619591d022037c3bd19aa01d358a540c4ec6e43870dc653bab5c707f953b919477ed89448472e11b10e241ad82a32be02adf21cd183ae47f2776bce3701b75afea9a175cd04e616f3a1913f3be49294c5e633b4d01cf719e06325d1f498e74d5a153c41ba83f49339f6d7f4711edfa5370e2ee9c7986401c6b27b5cb4f46435c84c8f0239876415740df4646423c790ce1917c3e178e3f0117f07b8ae37a6353868f7ca9313379cd727ae9732fb0a56da2b8a4cb682eb38ca47df0353f6b9322ac474740ac5b14488677765f48677e720ed20e2c76b94ca77acdd3e9e54f2230a0c2d1203130ebbf95aeb6212d52393d33efa63f79c2feba7168b770a3cd3fa97b8b515fd38a19958fccde6ec198be7d2f780422a69c9047ab7474d8f1c3272b9836bca4050a856a916e9bb30724727d1ba26058199098d65ad54d5580e51dcb2bd077db415b0ff41457c68f61d0f86d8c4c549388abf78a75cc9163016c7e988e60e97b95f1d253b52168cbb01407c8ebca87f950ca4049e12ac76cbe3e374065a3c7703bcd5f7af279a1c12425c93ef8e74a12b699f4a9c651db15561be1d91ca95575636dad39636bea70b5309b3354a73bb1b83ba72ff63f69182888e8f17d3e1ec0367173eb3831614e653fc63989af65bc9b676645638915ede2603666ccff0c03af0fda7ad7b7e846076158daad3df7ad07e1cfe8ce41757c4d77f02d65bee264fe0a98374a61532e797167af5719a427a267234fa27697f1a3f47a1453ea150821da1c665de7878ac0e5e26fc78911427cc1d8d0b029ee09bf9322446635d50de718ecb79f" ], "gasLimit" : [ "0x3121542d" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x74c15a91" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest499Filler.json ================================================ { "randomStatetest499" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000399f869aff3b06333860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000399f869aff3b063338" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2058040485" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest500Filler.json ================================================ { "randomStatetest500" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x87196584968a97046c67919931148255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f87196584968a97046c6791993114825560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f87196584968a97046c679199311482" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "34424143" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest501Filler.json ================================================ { "randomStatetest501" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xffffffffffffffffffffffff0000000000000000000000000000000000000000" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0955" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "156676500" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest502Filler.json ================================================ { "randomStatetest502" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb59c66369a85a46da1821861586378600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b59c66369a85a46da182186158637860005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b59c66369a85a46da1821861586378" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "345377880" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest503Filler.json ================================================ { "randomStatetest503" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x0886a83c66553c9889528d8f1294ff55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f0886a83c66553c9889528d8f1294ff5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f0886a83c66553c9889528d8f1294ff" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2071462314" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest504Filler.json ================================================ { "randomStatetest504" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f0000000000000000000000000000000000000000000000000000000000000001e37f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c35001589a84106d9c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f0000000000000000000000000000000000000000000000000000000000000001e37f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c35001589a84106d9c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1095126158" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest505Filler.json ================================================ { "randomStatetest505" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x44a06f550371317376738c5399843755" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f44a06f550371317376738c539984375560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe457f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000006f44a06f550371317376738c53998437" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1075033443" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest506Filler.json ================================================ { "randomStatetest506" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xa218f370862059149e3cff20", "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x00" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000042377f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006ba218f370862059149e3cff2060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000042377f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000006ba218f370862059149e3cff20" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "947509958" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest507Filler.json ================================================ { "randomStatetest507" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { "0x00" : "0x99a4527612a199a06d1a348b02563a9b" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x5a7f0000000000000000000000010000000000000000000000000000000000000000327f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000006f99a4527612a199a06d1a348b02563a9b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x5a7f0000000000000000000000010000000000000000000000000000000000000000327f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000006f99a4527612a199a06d1a348b02563a9b" ], "gasLimit" : [ "0x6f62fdbd" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "696746762" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest508Filler.json ================================================ { "randomStatetest508" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41414444424143448231537241317f55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest509Filler.json ================================================ { "randomStatetest509" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x4542", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x4542", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest510Filler.json ================================================ { "randomStatetest510" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { "0x00" : "0xf23a88535564545969f162615b933255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000447f00000000000000000000000000000000000000000000000000000000000000005a456ff23a88535564545969f162615b93325560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000447f00000000000000000000000000000000000000000000000000000000000000005a456ff23a88535564545969f162615b9332" ], "gasLimit" : [ "0x55fe2d15" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1913364794" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest511Filler.json ================================================ { "randomStatetest511" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x6a52027f41f267453843630a66444145" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff416f6a52027f41f267453843630a6644414560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff416f6a52027f41f267453843630a66444145" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "462006051" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest512Filler.json ================================================ { "randomStatetest512" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3b5bff40567097749951500263449255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f3b5bff4056709774995150026344925560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f3b5bff405670977499515002634492" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "871411208" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest513Filler.json ================================================ { "randomStatetest513" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3b437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001982046817382a13afa3760088d55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3b437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001982046817382a13afa3760088d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "406473464" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest514Filler.json ================================================ { "randomStatetest514" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x8ea356796d65546d3883768f55" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe44447f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506c8ea356796d65546d3883768f5560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe44447f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3506c8ea356796d65546d3883768f" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x105d80ad" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest516Filler.json ================================================ { "randomStatetest516" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x32787358019b3918686193ffffffffffffffffffcd878ca7fe64c6e7979e6c" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6a32787358019b39186861940960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6a32787358019b391868619409" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "46630890" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest517Filler.json ================================================ { "randomStatetest517" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x450831a46a867f32569596f0099f7b8c", "0xffffffffffffffffffffffffffffffffffffffff" : "0x0a" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3a6f450831a46a867f32569596f0099f7b8c915560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3a6f450831a46a867f32569596f0099f7b8c91" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1922148943" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest518Filler.json ================================================ { "randomStatetest518" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3c589f416d947a5134f268515b6c9255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f3c589f416d947a5134f268515b6c925560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f3c589f416d947a5134f268515b6c92" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1096593865" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest519Filler.json ================================================ { "randomStatetest519" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000001000000000000000000000000000000000000000009457f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3501a02556b85a4531155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000001000000000000000000000000000000000000000009457f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3501a02556b85a45311" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "245898175" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest520Filler.json ================================================ { "randomStatetest520" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff0000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff19030860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff190308" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "333039523" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest521Filler.json ================================================ { "randomStatetest521" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000", "" : "0xffffffffffffffffffffffffffffffffffffffffff8c6faa686b95a88965926d" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6a73905597946a57769a6d9209335560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6a73905597946a57769a6d920933" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2095633379" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest523Filler.json ================================================ { "randomStatetest523" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x417f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4450427f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000003560080b348d5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x417f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4450427f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000003560080b348d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1463926659" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest524Filler.json ================================================ { "randomStatetest524" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034208a340a9e5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034208a340a9e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1968091255" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest525Filler.json ================================================ { "randomStatetest525" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02207160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe022071" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "177899732" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest526Filler.json ================================================ { "randomStatetest526" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5419e01950777810975058c746f55600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5417e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5419e01950777810975058c746f5560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5417e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5419e01950777810975058c746f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "984138850" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest527Filler.json ================================================ { "randomStatetest527" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x347f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff80a160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x347f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff80a1" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "179309326" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest528Filler.json ================================================ { "randomStatetest528" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f000000000000000000000000000000000000000000000000000000000000c350397ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a9d30390b8c858455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f000000000000000000000000000000000000000000000000000000000000c350397ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a9d30390b8c8584" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "532918830" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest531Filler.json ================================================ { "randomStatetest531" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41414143434344456a12c140f3933655", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest532Filler.json ================================================ { "randomStatetest532" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x78297ba08ba478507f413b3597109c55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe54447f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f78297ba08ba478507f413b3597109c5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe54447f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f78297ba08ba478507f413b3597109c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1139122760" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest533Filler.json ================================================ { "randomStatetest533" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x5255" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001847f00000000000000000000000100000000000000000000000000000000000000003a0761525560005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001847f00000000000000000000000100000000000000000000000000000000000000003a076152" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x70d690f4" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest534Filler.json ================================================ { "randomStatetest534" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xf3075243846d88747b6a9e7ff28c6155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000001000000000000000000000000000000000000000045437f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff457f0000000000000000000000000000000000000000000000000000000000000000436ff3075243846d88747b6a9e7ff28c615560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000001000000000000000000000000000000000000000045437f0000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff457f0000000000000000000000000000000000000000000000000000000000000000436ff3075243846d88747b6a9e7ff28c61" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1440446145" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest535Filler.json ================================================ { "randomStatetest535" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000055", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x4cd4dc30" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest536Filler.json ================================================ { "randomStatetest536" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350537f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9309f3999c7d92795a947a6f317f55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350537f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9309f3999c7d92795a947a6f317f" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1392179737" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest537Filler.json ================================================ { "randomStatetest537" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0xb5688068515a6a996a540a03686d6d600051" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5688068515a6a996a540a03686d6d60005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5688068515a6a996a540a03686d6d" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1910780625" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest539Filler.json ================================================ { "randomStatetest539" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "" : "0x94200bf18b0b316e" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff096794200bf18b0b316e415560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff096794200bf18b0b316e41" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1428708105" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest541Filler.json ================================================ { "randomStatetest541" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000004335696e089257368d07897d57350b105560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff457f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000004335696e089257368d07897d57350b10" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "525505301" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest542Filler.json ================================================ { "randomStatetest542" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0xffffffffffffffffffffffffffffffffffffffff" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000397f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000925560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000397f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000092" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2111491039" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest543Filler.json ================================================ { "randomStatetest543" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000004586", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000004586" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x025dcd0a" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest544Filler.json ================================================ { "randomStatetest544" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3503b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff097f000000000000000000000000000000000000000000000000000000000000000055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3503b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff097f0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1348206974" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest545Filler.json ================================================ { "randomStatetest545" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0x133f69d3addbd85daa8b17484bed8731" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350637c9c8213300560005155", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350637c9c82133005" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "321021476" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest546Filler.json ================================================ { "randomStatetest546" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x895258826c3557659220867173150155" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff447f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f0000000000000000000000010000000000000000000000000000000000000000956f895258826c355765922086717315015560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff447f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007f0000000000000000000000010000000000000000000000000000000000000000956f895258826c35576592208671731501" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1796553007" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest547Filler.json ================================================ { "randomStatetest547" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c35014623971943854a009768255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c35014623971943854a0097682" ], "gasLimit" : [ "0x605781c3" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1980806241" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest548Filler.json ================================================ { "randomStatetest548" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x777a349a646633977da01a315a3c0355" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000019417f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f777a349a646633977da01a315a3c035560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000010000000000000000000000000000000000000000417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000019417f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f777a349a646633977da01a315a3c03" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "715419522" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest550Filler.json ================================================ { "randomStatetest550" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x4472a17829659c94a29041419564313a" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f4472a17829659c94a29041419564313a60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f4472a17829659c94a29041419564313a" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1391193544" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest552Filler.json ================================================ { "randomStatetest552" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x6a72a37b5219f089416d4336a08e8255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff42147ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe547f00000000000000000000000000000000000000000000000000000000000000006f6a72a37b5219f089416d4336a08e825560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff42147ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe547f00000000000000000000000000000000000000000000000000000000000000006f6a72a37b5219f089416d4336a08e82" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1809429900" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest553Filler.json ================================================ { "randomStatetest553" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x94819c780585376da073368c45828ca0" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000016f94819c780585376da073368c45828ca060005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000016f94819c780585376da073368c45828ca0" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "143286" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest554Filler.json ================================================ { "randomStatetest554" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x601460dca06029728b67ba4c2fc8c63c46f19bb45a4be3f678b30669ba571e944074c21b140a7a65d14a921ec804a45ecf4d952aa923fb23a0574acd8ef9f82c7db17e157f651bbeb520203bd398160345137b0419a395630fce1a7ed24c0cccfd91766140e0682f6bd571db701b4616b567f215faf42fb37d2a7c43c05a634612322eda99f09cc2907a6cba01bb6869b7d24b897ec43b9b63a8747a897af14c1f4c0b186c6311d36de86b8c8172aa43c3dfe3ea16503380877fa7f32deb9f60254d124338105942b4b5b88c443351de5ebf14c2380f4a91327d68a0da66abd627db75739942675f5855728fd677646cafec536e37d0da8122cf8681bc106013601b600360086307efe33a7363176fe819f16566b603cccf387c5f10e5cdb2ba1b456d2a0386ee72ddf3ff65b33a551afa423f8af05e347b5c50b6fe69c77f0682ef890d8ed8ab3833f128389f6407911fb20590642c9765e97c7f31dfa251377a47ca45b72ce5c1896a697990d60a01cabaf5e4d8f55f11fd37427351d1f8e89810c7aeec6482fd03d7e7ca58fbaae361e3936936543d6dacb1f97f19c3721866491bad73f32faea37b4a8c273668e04dff8863a542e11775a693c3b4bcd4fc1a87ddb6450f8f6c2f1ba807aaffb67e62af22cd93175b5ffb428ee9116dad4a695aa514b8ca4d615fd728a61c124c796554a98241320ac2d6b9f16ee1c203dbba537a211142df4c2e626e4108f87ab6d5b8e9ce86f92aba50a47acc60d734e7a066131d99dad149451b386120eed210723bd8304caa61048c67512ca417ae8857a46ad24ca1f2cb75f75ef86a927152bd86981a216d8147f49ead4be46967dd10751491f9f1ac2f50fd5dad394b7838a9eb89b372698362647bddbb90586e4e921a8cc96ea0c50d07da472b3e6360a39c", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x336e88fae59ccc17cac0ec3a4a984fcdc77c2ba8961cb09c97e4f874f69667ea58bce674fe4d474c8898fff5b73e6a7e25d7d5e25ccea0601ea15066d5497deee377fccbfcf7d46f462eb9d2fe6a3782658a9ffd73aa457677100ca7d35d68df5ee8465c2ca2af480e6e3cb204021b6ae2234a9f3462784bb45c4f087003c9352268b7e9890647fba7f034faad2663bfb15f1e0b7381d4fe5d7ba9c59455e62fe93c8cca7dd3f20d81644c2494b098686d466eb0fec9f497f163bdf627d76f49e3d1b74b142996652c0d53f709553560656e36e89deb34f32a7b7b5dfb3b309d57704dfa8c0ec20f2c0f70e1761c949c14c6fd619d947e42f23136ff517ac0b92f6df9d2989eb6828d7213a0b9a20959957ade2b1c1f6222920664c7ddf31a037c866146cabefec6c2f9f02d050c2ec8ef5da91eb65cc7d0b0d7eb3654407e7cb3eae4ea612eb678374b229c0e0fcc178293fd5d500210352eea769ccafa6c7a7e444322c60c241a937bbcf365ba988cb9f0628f7a33e43ba75bc44c38707ca76e02d3ff70e772c56dc9b9bcfd8116b972e66b6a28583e9f272065e9b7f112858c5f71c66dd37755c458bd56109d4dec2015b23774fa549dd52567557117d2fbda2a4f53cbd065fc9b907736d432b2730969562ce445fd6f9dcf91e092390173406e5b047944eafa8607c63c7e79aa872e5ce29de18e48ed9a62f440a0d4d4651d624ff767ac7fc52281bc7fec896a501952622f30e718b484e56e8ca7ab57c2ef2a6d37944e14759a52961dda795af1e984eea7d2689937b0a76ab8494b7acf579c90a0eb949199c0f87e566759722c0799c2c03a027b51a87372e64f7a1fb661d72eac23f2dc691d34981660bf7cfa421c5bf5e3225a4653ae7e0e43bfe4af206d4e69635b55c24537fe20705e010f348d477b1aef6aeb2388b508a44e640353e169a37221ba3dcf805c6a9ebe283a53e9dcbaee4081a098" ], "gasLimit" : [ "0x6dfddcf1" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x485341cc" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest555Filler.json ================================================ { "randomStatetest555" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3b8f936e6f3874603c59120707e3588c" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000c3506f3b8f936e6f3874603c59120707e3588c60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff437f000000000000000000000000000000000000000000000000000000000000c3506f3b8f936e6f3874603c59120707e3588c" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "119135864" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest556Filler.json ================================================ { "randomStatetest556" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x726e757692a2ad96526b9e8b77a33a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f726e757692a2ad96526b9e8b77a33a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f726e757692a2ad96526b9e8b77a33a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1156625804" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest558Filler.json ================================================ { "randomStatetest558" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x43767855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest559Filler.json ================================================ { "randomStatetest559" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000ffffffffffffffffffffffff" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000008509ff1555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000008509ff15" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "312647948" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest560Filler.json ================================================ { "randomStatetest560" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c35059a17f0000000000000000000000000000000000000000000000000000000000000001f38f07bf60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c35059a17f0000000000000000000000000000000000000000000000000000000000000001f38f07bf" ], "gasLimit" : [ "0x7a120" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "50481116" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest562Filler.json ================================================ { "randomStatetest562" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350a094448744", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350a094448744" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x591bc129" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest563Filler.json ================================================ { "randomStatetest563" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe418b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000461098038315ba267", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe418b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000461098038315ba267" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1283542119" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest564Filler.json ================================================ { "randomStatetest564" : { "env" : { "currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x945304eb96065b2a98b57a48a06ae28d285a71b5" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "code" : ":raw 0x5b7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4550081655", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x5b7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe45500816" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "286796184" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest565Filler.json ================================================ { "randomStatetest565" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x7f00000000000000000000000100000000000000000000000000000000000000" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c350137f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000010000000000000000000000000000000000000000923760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c350137f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000009237" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "684525926" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest566Filler.json ================================================ { "randomStatetest566" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x9a7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000117f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f00000000000000000000000093963332578665734360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x9a7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000117f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000939633325786657343" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "565778672" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest567Filler.json ================================================ { "randomStatetest567" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe906697998df1160b", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe906697998df1160b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "600472398" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest569Filler.json ================================================ { "randomStatetest569" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000097f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8e0781816fff31986c0a773c9b014460005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000097f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8e0781816fff31986c0a773c9b0144" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1737878734" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest571Filler.json ================================================ { "randomStatetest571" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x0a" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000015b7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000003c6508766c8b6b403a60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000015b7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000003c6508766c8b6b403a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1402161028" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest572Filler.json ================================================ { "randomStatetest572" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f000000000000000000000000440ba13b38", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097f000000000000000000000000440ba13b38" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1943383964" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest574Filler.json ================================================ { "randomStatetest574" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x369354827d7433a335af55600051" : "0x014f8b588e368f08461f9f01b866e43aa79bbadc0980b242070b8cfbfc6540" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001047f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff046d369354827d7433a335af5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000001047f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff046d369354827d7433a335af" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1595303022" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest575Filler.json ================================================ { "randomStatetest575" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000095949655558f6771c7798d047d7b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000095949655558f6771c7798d047d7b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "181388892" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest576Filler.json ================================================ { "randomStatetest576" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086053a0b43890710810651116e1555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086053a0b43890710810651116e15" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x2dcb28af" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest577Filler.json ================================================ { "randomStatetest577" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0x2e" : "0x020000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x45414344434244413155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest578Filler.json ================================================ { "randomStatetest578" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x01" : "0x00", "0x03e8" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350457f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff4255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350457f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff42" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "399078357" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest579Filler.json ================================================ { "randomStatetest579" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f2075b67c755", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f2075b67c7" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1929468879" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest580Filler.json ================================================ { "randomStatetest580" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x4640879d18777b953a209836379a3055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000457f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f4640879d18777b953a209836379a305560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000457f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000006f4640879d18777b953a209836379a30" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "741737505" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest581Filler.json ================================================ { "randomStatetest581" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } }, "ffffffffffffffffffffffffffffffffffffffff" : { "code" : "0x", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001037f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff44920907ff7e7d701260005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000001037f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff44920907ff7e7d7012" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1563515411" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest582Filler.json ================================================ { "randomStatetest582" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000045086201771880f35560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000045086201771880f3" ], "gasLimit" : [ "0x030d40" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1969973721" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest583Filler.json ================================================ { "randomStatetest583" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000425162327c5536a36af3809c3a8f396660005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000425162327c5536a36af3809c3a8f3966" ], "gasLimit" : [ "0x62ab0e44" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1472402212" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest584Filler.json ================================================ { "randomStatetest584" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff", "" : "0xffffffffffffffffffffffff0000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe96921909335560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9692190933" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "352685837" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest585Filler.json ================================================ { "randomStatetest585" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "380785530" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest586Filler.json ================================================ { "randomStatetest586" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0xc350" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000013760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000000137" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1708929612" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest587Filler.json ================================================ { "randomStatetest587" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8b7152a3958a923c1665b27557089a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350117f0000000000000000000000000000000000000000000000000000000000000001457f0000000000000000000000006f8b7152a3958a923c1665b27557089a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350117f0000000000000000000000000000000000000000000000000000000000000001457f0000000000000000000000006f8b7152a3958a923c1665b27557089a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "291521552" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest588Filler.json ================================================ { "randomStatetest588" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x00", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41437f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43063760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41437f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff430637" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1725348983" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest589Filler.json ================================================ { "randomStatetest589" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b940860005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff583481f36a85646d53671639175b9408" ], "gasLimit" : [ "0x432380" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1485632" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest592Filler.json ================================================ { "randomStatetest592" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff000000000000000000000000ffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1664737509" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest596Filler.json ================================================ { "randomStatetest596" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x7066a3507f6e09065394563830652055" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001317f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f7066a3507f6e0906539456383065205560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001317f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f7066a3507f6e090653945638306520" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "765064321" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest597Filler.json ================================================ { "randomStatetest597" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000967f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3a7e737d40070a156482930a0875", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000967f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3a7e737d40070a156482930a0875" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x70062d18" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest599Filler.json ================================================ { "randomStatetest599" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x8d6c60440a44449372068a976a838255" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f8d6c60440a44449372068a976a83825560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f8d6c60440a44449372068a976a8382" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1108427958" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest600Filler.json ================================================ { "randomStatetest600" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x0b6f37208e76a402927039198c969907" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c35043457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f0b6f37208e76a402927039198c96990760005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c35043457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f0b6f37208e76a402927039198c969907" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "181662108" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest601Filler.json ================================================ { "randomStatetest601" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350377f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000000b3a09785b1084418866100af0868a3455", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350377f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000000b3a09785b1084418866100af0868a34" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2056709657" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest602Filler.json ================================================ { "randomStatetest602" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff60005155", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x25d01724" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest603Filler.json ================================================ { "randomStatetest603" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x655860560745326476a03cdc36063455" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000427f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000086f655860560745326476a03cdc3606345560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000427f0000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000086f655860560745326476a03cdc360634" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "603781106" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest604Filler.json ================================================ { "randomStatetest604" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe44a4418a83039c0587363b0518204006065a06", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000437f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe44a4418a83039c0587363b0518204006065a06" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1287981996" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest605Filler.json ================================================ { "randomStatetest605" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffff00000000000000000000000000000000000000e9" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905803850855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350437f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9058038508" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1694516474" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest607Filler.json ================================================ { "randomStatetest607" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0955", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "275642360" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest608Filler.json ================================================ { "randomStatetest608" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "514995498" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest609Filler.json ================================================ { "randomStatetest609" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000001a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000001a736e628f796436739660005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000001a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000001a736e628f7964367396" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1675392723" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest610Filler.json ================================================ { "randomStatetest610" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01f353a2437e4384726497587b855655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f01f353a2437e4384726497587b85565560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f01f353a2437e4384726497587b8556" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2145229980" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest611Filler.json ================================================ { "randomStatetest611" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000000000000000000000000000000000000000000001437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b9b84a360005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000000000000000000000000000000000000000000001437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b9b84a3" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "40953114" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest612Filler.json ================================================ { "randomStatetest612" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xc350", "0xffffffffffffffffffffffffffffffffffffffff" : "0x010000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff095560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "721306946" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest615Filler.json ================================================ { "randomStatetest615" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0xffffffffffffffffffffffff000000000000000000000000ffffffffffffffff" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe837f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000009556c6f390a3054d7368a9a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe837f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000001000000000000000000000000000000000000000009556c6f390a3054d7368a9a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2076977514" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest616Filler.json ================================================ { "randomStatetest616" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x86a2409b991539f0423c0342363c3b55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f86a2409b991539f0423c0342363c3b5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000006f86a2409b991539f0423c0342363c3b" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1167366767" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest618Filler.json ================================================ { "randomStatetest618" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000100000000000000000000000000000000000000003bf1135a3a58", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000427f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff437f00000000000000000000000100000000000000000000000000000000000000003bf1135a3a58" ], "gasLimit" : [ "0x3d0d185c" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1398079665" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest620Filler.json ================================================ { "randomStatetest620" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x6c54a420327d73727d9d1a667bf38955" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f0000000000000000000000010000000000000000000000000000000000000000457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6c54a420327d73727d9d1a667bf3895560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff427f0000000000000000000000010000000000000000000000000000000000000000457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6c54a420327d73727d9d1a667bf389" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1643601446" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest621Filler.json ================================================ { "randomStatetest621" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x3ba187a19366899e595220741232905b" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000441a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f3ba187a19366899e595220741232905b60005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007f0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000441a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6f3ba187a19366899e595220741232905b" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2143896087" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest624Filler.json ================================================ { "randomStatetest624" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x43424244457943455409635939", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest625Filler.json ================================================ { "randomStatetest625" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3015560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa301" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1618548956" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest626Filler.json ================================================ { "randomStatetest626" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350f4fd94058f06a255", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350f4fd94058f06a2" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1996511098" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest627Filler.json ================================================ { "randomStatetest627" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0x707f3b" : "0x01" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x424243434442424254f262707f3b55", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest628Filler.json ================================================ { "randomStatetest628" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { "0x2e" : "" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x41413155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest629Filler.json ================================================ { "randomStatetest629" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x427277147c617f4354a35a1a47977a55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000347f000000000000000000000000116f427277147c617f4354a35a1a47977a5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000347f000000000000000000000000116f427277147c617f4354a35a1a47977a" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1003338368" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest630Filler.json ================================================ { "randomStatetest630" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x9461a46e61507a1206917b17137e7e55" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001427f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f9461a46e61507a1206917b17137e7e5560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001427f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f9461a46e61507a1206917b17137e7e" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "411786818" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest632Filler.json ================================================ { "randomStatetest632" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x434243434444424350303614f20a", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x42" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest633Filler.json ================================================ { "randomStatetest633" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x82941340756317567250f1573a897655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006f82941340756317567250f1573a89765560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006f82941340756317567250f1573a8976" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1358306105" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest635Filler.json ================================================ { "randomStatetest635" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000005b7fffffffffffffffffff" : { "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6a5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe66f2707d83713b6b8f320855", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff6a5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe66f2707d83713b6b8f3208" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1615246365" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest636Filler.json ================================================ { "randomStatetest636" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x00", "storage" : { "0x3c4d8f92f8c27517f0addd45e050bfcf" : "0x9be8fbaa90" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x74619921c0750ac3268e7a6703ca2bf6c43308e6fc36607561af1ca16db843f7a2e05bfc2e46afc179930b7a8724a04f9f561bdc65bba0ad5797dde0a28d5e8aca56e1510b724f676a6d33dee473d74664561e49e3d86338c8dcf260f06cbfa6283966d2d0f2591f54088e6f36545c0d90fcdea10d5629629ffb1b16626c339f6490829f1b1675f0f2f62b0b7c9d3f070fafd53f99f90f31e19e81d3db688929213e34affc41116e6ae6f54ad5c2062b27a9fbec78a52f7a26c6347408631a6c0efcf33fe576953a4043e846b686471403f38a615a0a8e601d600a600e60146301019a517363314bc0fef1600c7eb69785d3593d3a8552018a4faba5b591975e8b8056ebc01f5ce5f5f7c04eca9062b458a835649be8fbaa906f3c4d8f92f8c27517f0addd45e050bfcf55792d8bf87c39d39ed9b1ef6c8c070d8da4a624ce548b37d03ae8107ca6da49be4adffc9f5ae896c52b936a18bed4bd9fcbae531274706e9e9b9030619a40714bb4b22e7bef8cf7b01551327188ee4bb6247118d0e95549a92f7dd9305484cc054e5f206d70d008699a85896061427b05ae2a7f16230f66ab4dd548e03b0972010f5afff39a4f9a90e55e91584e86629f3e8775f53da16fceedd834103a50dbe72a6634e4dbf374c70e6bd041628dc8b30de3c3d7aa0e7bb48df927c78ed30b286e249c2cbe79fb55956f492e413e771d0cd63f7357ab1e9a38026a4ba9278427812728699a2c747189", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x648ae7baf084600e60746edc292e4f932e5d92d41f0bef49fc6b696d03a44c705cb4daaf5160107d58356b0c4e1a7d81fb0b606143c7db58d8147776c02745b7de14b2c388e49568e963334e695b39de93766519c9912b2dccb22bb3bd486cdf043cbc5c0cd3b4a35f6addc01cb4ad9b448c0c60ff6c78c1acc568b086c8181a90b01f613e5e6116e776e8d170f52005efeb96d06594b7477815ea249e6143aaee6798a00d9dbba0552a73cd878ec8872e0e494df0325b92e8c7753a084c6b9763c56059eb608978797530a734a7ced61643b84aece9a39344fab3c6363d62631369ff8d931e17c50dcadb1f72256d2bcfd07e62b68627374ae05b8ff70a238f6b8717aebdaa6cd0696889d903742f20f313a8e4bcb5efae0edcbb74f41e2027dc90b56ee50a7c151872c3f01c0746579073c26c78e58ca65d93cd6c945401024b70fae5f6e17c1bc9636bd85c6c721b77f39c71e417a9bc43cf7288a2888f33b863c22e5e606ef703db601f52cf73b09b88fe1772d6693064e95ea20aa3da12c76fc929d6982f7ae98c71958c5fdd80f52a8d673027f0fa96116b85636464219d046962e9e728f947cc66e8a58061111b752dbc3bbd70bf3fa2e463969371f089c8226cb217fcf86fed7c5c87ada364a13ca107785a1e76d56edd7b1f02caac7915e522478f790322601868ed8a345ba615388b5d77d405d62f0abd72ed81f218f27c6ee6a6cde612b9c528d4107c25f6d842f8d91a37f4f098e3f552a5ce3c14d301fd1a0c7711f831c8c07197a419447c10662351b792bb34eef76c6f5d66414b182911d942896b1bb156c0ba37a9bfe4420bc17ddfe7be8daeabb37222d4ae081dd889cb787c9bf801b07e186f274a70549a04" ], "gasLimit" : [ "0x61826421" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x74ff9009" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest637Filler.json ================================================ { "randomStatetest637" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x44931064138e9df1768334028c201471" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f44931064138e9df1768334028c20147160005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f44931064138e9df1768334028c201471" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1479766116" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest638Filler.json ================================================ { "randomStatetest638" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0xffffffffffffffffffffffff0000000000000000000000000000000000000000" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0960005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2032022422" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest639Filler.json ================================================ { "randomStatetest639" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : ":raw 0x6e993d78e80807a0d34bdbfa4e0afa9d7eab95e6f8772a548229700e2dcc612ac9ceeb898af8436680a2e1074df8ced0137964d71c8fe8a10fb58f8706ea3ee1b54a0848e742ca357e3d023460c161b1f5a17c48da2ae1e6987c52223414746fab0e39130693d15a48d39b5130096a7c1570c4fb89343ef5d10e912decba682bf205de79e84c573c9e2b0ffbd4d6117e40046b4c2d77156ada28960d9bb97f56d243429aa245c32e1f800a686ebe298dd08349d864486d7a1569b5aae495776bb5e71206cd09f54d1cd713966557567542184c74b95cc0d8ac3d0e05d0264b8d42a3563826123fc0d964521b61b86374591a821818672ef0dea05d259bc4f98c34418d9e7a677173b211649c07df7670aca688053842de6157c4fb5e678adc0611fcc20a1d836ec69b9370d09b83f1b0293a1b102d6d73978584b14fb2ab517001867e6545dd2dc3438f9c7828f6d3c6e4da98113ce2486c1ad028dc9947b28590071b977e651d352b078cb96b27f9ff7252c9f3ce9e5151ae7af1064ab8a5d92ed543b9d59c341f85bb22aa2fa7d7ee7310ac8f519e66da165b9efe3663657b1e28f4eb3e7338391339af5346d12c14bbc0863c26d7e999776c7939cefac542ed69f518bbef5461c0df385004f5411c3faaa65c7b6abf900ca1ef1f40bb938f727695a1ca14012ba07cc01548f3df75544b11bb52b7693bed7e2fc1537b2f8d63c4db4c3d8fc72b6f5f7e7b4d1ec8c1ac89230936975d19626788f03504a8c9acf66437d6d885607778bee6fe54742ddc9a7d8373dbfe2e21aacf8816944c02ef983260156009600960186329ec801e736356837182f175259fc2ea2df7d720fb0914ed44bcb12b8ff15e712ef67d868fe7fba6b46fac671a45bcace82fa83b87b8744835ac63d2b6cf3d157d7526909f9c4d1efbf68d780af1c0f2dabbfc53d2c71dc461bf7f788e3a9c48cd1df8d146a7df97125985162ecd37b059204323d066cb4709a3a1715f7c4a9fb905c26ba87933ef2499d3447d5cd4df27a6205c8a1ce06719c3e065e66ab80222ff7ed1f72f533a1160330dbd8dcd0489ec2dac84d7522a4d8732c5ae9e08d9a251682fb33fa08ecc05197d897a1d5f28328caa78ca6cd6b86fd08a1748fa959665861d18c25a3cae79732fe4fb3ad8b48c17c8efeeb5ec22be8b20ec4eae2955d65b9a6c1415c23047aa8f2c29aeddd78765c1bc3eda63416d84cdb9b8d7942020db3b1ed861a966475eb6ef9f9920692a879ee6bf9d0a1dd9d386", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x2e", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "0x" ], "gasLimit" : [ "0x6015cf8f" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x49c00898" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest640Filler.json ================================================ { "randomStatetest640" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000807f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff50885560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000807f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff5088" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "6954369" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest641Filler.json ================================================ { "randomStatetest641" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x29199c9aa4054170f1a15a55056f9655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f29199c9aa4054170f1a15a55056f965560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f29199c9aa4054170f1a15a55056f96" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "252246116" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest642Filler.json ================================================ { "randomStatetest642" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x406fbe7b1f887c", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x70", "storage" : { } }, "" : { "code" : "", "nonce" : "0xa3", "storage" : { } } } } ], "pre":{ "" : { "balance" : "0x26551a696cacb206", "code" : "", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x577686e8d1344340", "code" : ":raw 0x62f46a4f547b169c9edf92f4b39273fe47accc75d1209ae58463c2585607ce051ff6714c4f0fbf6de0659784434fb240652ff52d08576408f168a43a6651f765a4788a05537086290691d5a3239db43eefea96b0012ea26534e99e4ba9ee7f92f37fa731707f800683bafb70815757d861ad8cc6804154ce5b9de3146b58cd53", "nonce" : "0x70", "storage" : { } }, "" : { "balance" : "0x11bae0bb79d6a164", "code" : "", "nonce" : "0xa3", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x73ac858c3531a0d29ea7a15dfca264e244056b35816eb2fa5e8b941bb7e03e269017ca7b29556e2c50a4525c68460af5ba912653059274ec9907faed7f4ceacf55ed7b50228e7e26e7113d6751750964de40c9f5bb9f378e19edc3fd6ffd6af7ee7710107f382df318b8e1c707719add3db4b00892ddfba9f3e970c8aa9b41f208c53bf041556585635e6534916c5ec0ba7162ea7979164bb27d007c198e1e50cb945b54a4dca4ac110de1a1d47f43fa61c9a6e916d30c3e89695e77cb0da0bcea3bd98260927c609b5782488c5d7e06f07fc67aa5f1cb3c2d7ee74a4054d94e0108b3c962a00fb567a505e96a974f83567a74b898ddd6136e1e6634e4c85cb37db14f98d0080ac548e092928b6eee8d6863592d990f9298d7040cfa486e4e881b0f19eb06892d2185cc0b295d7f2669f00ac67c30de107cd324610a5af8bb29d11354783888e7b8ba5ab533f959729b6e25886d426bbf4cd00626cffbc0ec6beb6a62ae0d9e7166a6303d22036c2b3d45e88057940ada00938e" ], "gasLimit" : [ "0x4ac88d" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "0x0000000000000000000000000000000000000007", "value" : [ "0xf5e5cc4b" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest643Filler.json ================================================ { "randomStatetest643" : { "_info" : { "comment" : "Return ~1 MB out of bounds of the init code. should throw codesize error after EIP158 and create empty account before EIP158" }, "env" : { "currentCoinbase":"", "currentDifficulty":"0x20000", "currentGasLimit":"0x7f0d477519ac97", "currentNumber":"0x01", "currentTimestamp":"0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0xd2", "storage" : { } }, "" : { "code" : "", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0xf3", "storage" : { } } } } ], "pre" : { "" : { "balance":"0x3f91b25c1601534b", "code":":raw 0x79ecfecf2ab84463f738fc85b069590fcff0334fb1a7108861a44465a26237bc83297ff893a1a95c84afbecc79e1ee4acc8fca826df1ab268bdfd9e712ad0d261f5ede0b6545e6a7d462826d39eb0ac5b4c3ef35f0b4e6d9e05f0773fc63be0c082847f6f9f7728764e142fcd95702c36d65c1e55ec0e2128768030e4eb0de74b57969caa2f2493998537ad0ecba9400ebae911dad6f98bd15da63a8614aa455dc593fa70386a260c66270f1d7527b75f1bf8a683b5d1721f7dd57755bd6a9bed9f874e3876cfcac6762ea51", "nonce":"0xd2", "storage" : {} }, "" : { "balance":"0xa015cddab7107b04", "code":"", "nonce":"0x00", "storage" : {} }, "" : { "balance":"0x262e8de142312a2d", "code":":raw 0x436debc3912504eded08f73b9ff9490d73fc4f820a0890b7e8417fa97940713aeb870e59a790607f6b3d5649e57458ea8692da323253735967657e3fc6e02f6de1c0ff6cc18e051bdd52ad7b1eb441440620426b3485ab683d44ff8d5544eb7f7fb3e1f4c30063640b5a626f341b6271dd596212084762084319736338f86b9af4", "nonce":"0xf3", "storage" : {} } }, "transaction" : { "data" : [ ":raw 0x620d15bc62074ac2f3789b4ff89d27fb5018b60a3730731819c16c8a1e6513c3c2703e63f82ce3617b9c5bdd435cc4e8eaffa5d05d45aef99b6726757bbe89b4ae0e5b9b6062855c2d525b6ca347c35412d0ab99dbc839a14f619a34621beef752635999fd987437da3edb75b58f986d9b62ffc1e6dae25c7e0c019f73922a0ab96d77aef70627e71d0a63d38d2d09afec6a9f6dd36fff38e99a634e506f29060c4e3c3371d213d31078939857877d1780bc984b1ae1225b8dc7cc534cd080ba4b324f436d2c211b3c30889cf66d57b8f669c1be7711d78254d859636790551a4a0f6e0c06664680c8fadd1d7e7b3e887ea3cff5077d014551ed36a72977742f6dcee4113c33297428527783529e675399ca43d5df7d9a4151fcac7093585bb8c6df7d6563faafe035226b81786f72b243bfdbc99e8fd67571df50e0ed7a8e1aaca76fcc65151e7730dee525a07c75d1b3855ae0bfbe0d79ff4905974c837e30a06fb163d89d" ], "gasLimit" : [ "0x9628e5" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"", "value" : [ "0xf0ec2ce5" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest644Filler.json ================================================ { "randomStatetest644" : { "_info" : { "comment" : "Geth Failed this test on Frontier and Homestead" }, "env":{ "currentCoinbase":"", "currentDifficulty":"0x20000", "currentGasLimit":"0x60ca5bfb0d6208", "currentNumber":"0x01", "currentTimestamp":"0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x94", "storage" : { } }, "" : { "code" : "", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x1c", "storage" : { } }, "" : { "nonce" : "0x1c", "storage" : { } } } } ], "pre":{ "":{ "balance":"0x23c22aeb4961b17e", "code":":raw 0x73a66737fdcc16cd591384a0b12fb650ce85011e553b7d85cc6995d8948ac88f5726f16627d809c92dba32d01471809ad1c5046b53687d1ff18bca5a755a0c6cd7ce36e1dc18c7c2a909f6bc0073d53f4c10a2121e6b4f0aeadc71b441c331b19ec57822835269748ae558697a082470abaa3595d4b8256f8954c7ed655896eb04017a7f522be50fd88e38ee27de7ebd20794466f490bcb43162328a337a6e42fd88cacf6a8ecb264fe21836cf31d0ae7be53da5fe2cac802905640c0a18b2ccfd806fed6d7cbaf1fc19c6931d6c37b9320599ca5061121076a6546fc888f04e94c09adcc8a3cc9d002448838977c1010c1cdef7438b3d1e99cf6d78b9d4f55962b04476323f3441", "nonce":"0x94", "storage":{ } }, "":{ "balance":"0x236d08fe524712cb", "code":"", "nonce":"0x00", "storage":{ } }, "":{ "balance":"0x9183fd5b40d86e03", "code":":raw 0x74357a5ade2da3b4a5f5459faff84e5ea9b714b60ed26257ef597d9aa2e6d9316426366fe24fb9ed56c4a9e5dcf06af08c42368fdaa12b71476283c5bd6147ed93625663ae6252d373624971d86228ec1a730000000000000000000000000000000000000005630c30a604f478fe44add6669b247cad0f00251697572fa913a16c98038931df54", "nonce":"0x1c", "storage":{ } }, "":{ "balance":"0x532f42c819fa5bed", "code":":raw 0x77351c4c5a02c8f13fa7c7f5800fa5c9ba2f3b971c13764f9b61c2db66c3f909c17e434a68d685402956cc341dbf6779516900ed0a1e2666dfa40e70f3bcee773c2bffd5b5422a2cf32b19e541f15ae2b6fbe16fd19bbd567728190f83569f036dccd3886aa69c1e685736da06152e3b24728b13546ea1abd48ee47b1b2e1ec70b37fa14cc709d35fce7380230f426455385da80771ffc6e261f3bfe7bfe7f1827d17b0cf49a7d7ff8ceb60b6a86ebbb762eb3e4dd1a8a09eaa9a500bc65cbefd4251865b70ca7e26682f1a2bad52a4a697aa0baf4ebe05130ec6a62e66e719d6bb753654f0ff08533f6d088e16d682dca6786082a55eda4d65f21e91074345d12b775ce0f47447731e5eeeff44ca0a946e1df77f77e3d07cc9daa30a1b2941c17f9039ffa3baddf70dce808a071acb22d3fe0b1ecea101f659fd3fcfe7d9f16546273b0236232b79262118942733c6247f037626ab8de621acb67625b60d5636bd2696273630b2df5d6f1623402af629589806317ef5652f032", "nonce":"0x1c", "storage":{ } } }, "transaction":{ "data":[ ":raw 0x7300000000000000000000000000000000000000013b7ea30da9ff11bd5f11e4529c93ce4b37d5a256d61e1f1a0ecccb5fbb21fec97f6b3d456b8caaaa84ef30a44fd8779fae5a48354b937835d82d57999d194d4edfbaf0a8dd026d727e3315a53e907b0e1873b4dcb7f806014bc23164e8cc0560256f0c6a8c09c0df2f0f8208ff622bb459d46ffab16ce9d64bcf9cec668338ebbc7f9e64656ae99c617d0dd709c1f78f96bea46e2df76db8418e2b657fc77ff2f979952911a73b767a6ce270c7392d2ff340648610fe0219aaf24df2b26e97e2761497bc6b97dea1269de3aca3b69ec7098a7257114a4a2e22c401ec6319bc2deb70980ebef372a327809b3c2473ab86578d2fccd458e6b99a277c4a1d3e96351fbebe62fe63d300444afd3a9077c20905d2a92b5b2945de6bf9b28d1d42795ca74b029dce6934312994a31fed72e45da26c73c636b40b1f6d529f35488625624a9dfd0b62309f286277b5ab6259b2fd62144722631c4722737300000000000000000000000000000000000000056317345497f13368b2a96595a00933d8dd6dc111a13b90768f330898544a443407620316d3625614816282f1e9622e741d73631d791a38fa" ], "gasLimit":[ "0xbef7" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"0x0000000000000000000000000000000000000001", "value":[ "0xf3107ce3" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest645Filler.json ================================================ { "randomStatetest645" : { "_info" : { "comment" : "Geth Failed this test on Frontier and Homestead" }, "env":{ "currentCoinbase":"", "currentDifficulty":"0x20000", "currentGasLimit":"0x2ecf1b8c64c9dc", "currentNumber":"0x01", "currentTimestamp":"0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x1d", "storage" : { } }, "" : { "code" : "", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0xaf", "storage" : { } }, "" : { "code" : "", "nonce" : "0x1c", "storage" : { } } } } ], "pre":{ "":{ "balance":"0xbcbaf5a33577f162", "code":":raw 0x58679b8e24022d8c28f3620b55a06384bc2f83136515b61916f0f579ea3e9d28799d45aa77bf1fc1a84edf0193dea2d610209eaaf9c814", "nonce":"0x1d", "storage":{} }, "":{ "balance":"0x6f1f70fea641f30a", "code":"", "nonce":"0x00", "storage":{} }, "":{ "balance":"0x2be1cfd5d6d6b0b7", "code":":raw 0x63cbb01282621d72de5268022948f746c938a0cb7c01ef17f23ed237d9f3262c4eb1b95112820595b127c516074df06223db7e0c396eb18074f148d96fd766dda35b6cc250661b5f83f0ed625ba68a5ff49aa1", "nonce":"0xaf", "storage":{} }, "":{ "balance":"0xb3508c0f8a22f8a1", "code":"", "nonce":"0x1c", "storage":{} } }, "transaction":{ "data":[ ":raw 0x326e3696ffc10e3e95c67d29784a35ba967d416feb1e1712098bcbb4d20454c1681694f51d8591ff7b80f0e4da50c89a0a777fa7666abccfbd600e213bd71da4925c2a2115799e9c3bb1622f075452" ], "gasLimit":[ "0x695a" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"0x0000000000000000000000000000000000000003", "value":[ "0xf2d6bf97", "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest646Filler.json ================================================ { "randomStatetest646" : { "_info" : { "comment" : "Geth Failed this test on all networks" }, "env":{ "currentCoinbase":"0xd94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty":"0x20000", "currentGasLimit":"0x42fe8c95373ea1", "currentNumber":"0x01", "currentTimestamp":"0x03e8" }, "expect": [ { "//comment" : "Shanghai fails to pay for create, the test still must pass on previous nets", "network" : [">=Cancun"], "result" : { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "", "nonce" : "0x01", "storage" : { } }, "0xb1c0d37237a1f6bd6202aed4b5a7290dfcda6591" : { "shouldnotexist" : "1" }, "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "", "nonce" : "0x07", "storage" : { } }, "0xffffffffffffffffffffffffffffffffffffffff" : { "nonce" : "28", "storage" : {} } } } ], "pre":{ "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b":{ "balance":"0x54465ef1c769628b", "code":"", "nonce":"0x00", "storage":{ } }, "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b":{ "balance":"0x33888d4ce6b934", "code":"", "nonce":"0x07", "storage":{ } }, "0xffffffffffffffffffffffffffffffffffffffff":{ "balance":"0xd61773f0c27b842f", "code":":raw 0x64ba8b878e0154689b908f27acb42e5269603972609834bf9a7e578e45609242172907dd75a92555656c5aa6e9248162013ffa6203864863446d325df0336d2c38cfa2f1cdf8cb623c0591987419", "nonce":"0x1c", "storage":{ } } }, "transaction":{ "data":[ ":raw 0x785196fdcb5d7e54c4b381e68c7eaeae2735e5537830130057f554672e70a6b867385ea2714ea3185b854bf0b4f9617fb47e6afe9ed4ed68f94b50776420fa24010960ce6b65e2a1ebdce518181d6c69a678989d767fc3d28b6c524f52a87d05519cb32e38fbdc5f801f756922b90c0e2e5bc848bb9c6a5d08ee65470af4fbbeacf87a65c90dc57babd8cdc9819f898551925828bfd360e8a1f1616619d171c23004b0045424cc962e09d8a65d9fd94af9863d61eba97d76dc150e19d991ff1b5fd340dd4fd7e522a659ddf69bcbc729599667aa30536cd85576cc3477495dae10c85b56" ], "gasLimit":[ "0x584d31" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to":"0xffffffffffffffffffffffffffffffffffffffff", "value":[ "0x5684b90a" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest647Filler.json ================================================ { "randomStatetest647" : { "_info" : { "comment" : "Malicious bytecode found by fuzztest tool: returndatacopy(0,-1)" }, "env":{ "currentCoinbase":"0xd94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty":"0x20000", "currentGasLimit":"0x42fe8c95373ea1", "currentNumber":"0x01", "currentTimestamp":"0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "":{ "nonce":"1" } } } ], "pre":{ "":{ "balance":"100000000000", "code":"", "nonce":"0x00", "storage":{ } }, "":{ "balance":"0x00", "code":":raw 0x6001600160000360003e00", "nonce":"0x07", "storage":{ } } }, "transaction":{ "data":[ "" ], "gasLimit":[ "0x584d31" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"", "value":[ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest648Filler.json ================================================ { "randomStatetest648" : { "_info" : { "comment" : "Consensus issue test produced by fuzz testing team 00000005-storagefuzz-1" }, "env":{ "currentCoinbase": "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty": "0x20000", "currentGasLimit": "0x26e1f476fe1e22", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "":{ "nonce":"1" } } } ], "pre":{ "": { "code": ":raw 0x600060006000600060f15af450600060005060f5fffd", "storage": {}, "balance": "0x0", "nonce": "0x0" }, "": { "code": ":raw 0x600050", "storage": {}, "balance": "0x0", "nonce": "0x0" }, "": { "code": "0x", "storage": {}, "balance": "0xffffffff", "nonce": "0x0" } }, "transaction":{ "data":[ ":raw 0x384c289327fda733f319011b605929b98b6cc52e4915c942369264c71a3ca70ebce56fef7e41103f1acc71e91f299bf6c5730b265d6f9d475936735ea60c58b9bb125a78178171784759606d696e98f8522b52fe213edee397b3df6ca9f0c6" ], "gasLimit":[ "0x53dad" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"", "value":[ "0xdb2206" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest649Filler.json ================================================ { "randomStatetest649" : { "_info" : { "comment" : "Consensus issue test produced by fuzz testing team FuzzyVM-1240834021-1071009090.json.min" }, "env":{ "currentCoinbase": "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty": "0x20000", "currentGasLimit": "0x26e1f476fe1e22", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "":{ "nonce": "1" } } } ], "pre":{ "": { "code": ":raw 0x7f6c756dbf65726963616e207f9439303733373936353331363631303037345a056000527f7265737582673075742074650041030a000000efbf7125e86c756dbf657269636020527f616e207f9439303733373936353331363631303037345a0572657375826730757f742074650041030a000000efbf7125e86c756dbf65726963616e207f943930377f33373936353331363631303037345a057265737582673075742074650041030a7cefbf7125e86c756dbf65726963616e207f9439303733373936353331367f3631303037345a057265737582673075742074650041030a000000efbf7125e8606c60e053607560e153606d60e25360bf60e353606560e453607260e553606960e653606360e75360e860006000f06000600060006000845a6950507f7f9439303733373936353331363631303037345a05726573758267307574207460005260206000f35b410061943961207f61616e616963616572600563012b9bbff167000000000000015f565b670000000000004ca65661363551613636556136555161363755613675516136385561369551613639556136b55161363a556136d55161363b556136f55161363c556137155161363d556137355161363e556137555161363f55613775516136405561379551613641556137b551613642556137d551613643556137f55161364455613815516136455561383551613646556138555161364755613875516136485561389551613649556138b55161364a556138d55161364b556138f55161364c556139155161364d556139355161364e556139555161364f55613975516136505561399551613651556139b551613652556139d551613653556139f55161365455613a155161365555613a355161365655613a555161365755613a755161365855613a955161365955613ab55161365a55613ad55161365b55613af55161365c00", "storage": {}, "balance": "0x0", "nonce": "0x0" }, "": { "code": "0x", "storage": {}, "balance": "0x3fffffffffffffff", "nonce": "0x0" } }, "transaction":{ "data":[ ":raw 0x756dbf65726963616e207f9439303733373936353331363631303037345a057265737582673075742074650041030a000000efbf7125e86c756dbf65726963616e207f9439303733373936353331363631303037345a0572657375826730757420746500" ], "gasLimit":[ "0x24174" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"", "value":[ "0xefbf7125" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetest650Filler.json ================================================ { "randomStatetest650" : { "_info" : { "comment" : "Consensus issue test produced by fuzz testing team FuzzyVM-1061441003-276458261" }, "env":{ "currentCoinbase":"b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty":"0x20000", "currentGasLimit":"0x26e1f476fe1e22", "currentNumber":"0x1", "currentTimestamp":"0x3e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "":{ "nonce": "1" } } } ], "pre":{ "":{ "code":":raw 0x60006000526310000000602052600060405260f66060536073606153600a60625360ef60635360bf60645360bd60655360ef60665360bf60675360bd60685360ef60695360bf606a5360bd606b5360ef606c5360bf606d5360bd606e536003606f536040600060706000600562d51402fa6000635a430010557fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff16010615a436159ce6199b4610295600761d514f17fbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730a6000527fefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6736020527f0aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f66040527f730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4300106060527ff6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a43006080527f10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a4360a0527e10f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a60c052604360e053600060e153601060e25360f660e353607360e453600a60e55360ef60e65360bf60e75360bd60e85360ef60e95360bf60ea5360bd60eb5360ef60ec5360bf60ed5360bd60ee536020600060ef600063bfbdefbf6002622368eff1", "storage":{}, "balance":"0x0", "nonce":"0x0" }, "":{ "code":"0x", "storage":{}, "balance":"0x3fffffffffffffff", "nonce":"0x0" } }, "transaction":{ "data":[ ":raw 0x000000d514029599b459ce6d7f5a430010f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730aefbfbdefbfbdefbfbdefbfbd03000000d514029599b459ce6d7f5a430010f6730aefbfbdefbfbdefbfbdefbfbd0300" ], "gasLimit":[ "0x124f80" ], "gasPrice":"0x0a", "nonce":"0x00", "secretKey":"", "to":"", "value":[ "0xefbfbd03" ] } } } ================================================ FILE: tests/static/state_tests/stRandom2/randomStatetestFiller.json ================================================ { "randomStatetest" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x29199c9aa4054170f1a15a55056f9655" } }, "" : { "nonce" : "0", "storage" : { } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f29199c9aa4054170f1a15a55056f965560005155", "nonce" : "0", "storage" : { } }, "" : { "balance" : "46", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f29199c9aa4054170f1a15a55056f96" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "252246116" ] } } } ================================================ FILE: tests/static/state_tests/stRecursiveCreate/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stRecursiveCreate/recursiveCreateFiller.json ================================================ { "recursiveCreate" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "d2571607e241ecf590ed94b12d87c94babe36db6" : { "nonce" : "0x02" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{(CODECOPY 0 0 32)(CREATE 0 0 32)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "465224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stRecursiveCreate/recursiveCreateReturnValueFiller.json ================================================ { "recursiveCreateReturnValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "balance" : "0" }, "" : { "balance" : "9631760", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 [[ 2 ]] 0 [[ 3 ]] 0 [[ 4 ]] 0 [[ 5 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "0x01", "0x05" : "0x01" } }, "" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund50_2Filler.json ================================================ { "refund50_2" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x0a" : "0x01", "0x0b" : "0x01" } }, "" : { "balance" : "0" }, "" : { "balance" : "9278060", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 10 ]] 1 [[ 11 ]] 1 [[ 1 ]] 0 [[ 2 ]] 0 [[ 3 ]] 0 [[ 4 ]] 0 [[ 5 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "0x01", "0x05" : "0x01" } }, "" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund50percentCapFiller.json ================================================ { "refund50percentCap" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x0a" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0b" : "0x0de0b6b3a7640000" } }, "" : { "balance" : "0" }, "" : { "balance" : "9236640" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ @@1 @@2 [[ 10 ]] (EXP 2 0xff) [[ 11 ]] (BALANCE (ADDRESS)) [[ 1 ]] 0 [[ 2 ]] 0 [[ 3 ]] 0 [[ 4 ]] 0 [[ 5 ]] 0 [[ 6 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "0x01", "0x05" : "0x01", "0x06" : "0x01" } }, "" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund600Filler.json ================================================ { "refund600" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x0b" : "0x0de0b6b3a7640000" } }, "" : { "balance" : "0" }, "" : { "balance" : "9395440" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ @@1 @@2 [[ 10 ]] (EXP 2 0xffff) [[ 11 ]] (BALANCE (ADDRESS)) [[ 1 ]] 0 [[ 2 ]] 0 [[ 3 ]] 0 [[ 4 ]] 0 [[ 5 ]] 0 [[ 6 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "0x01", "0x05" : "0x01", "0x06" : "0x01" } }, "" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refundFFFiller.yml ================================================ # The refund for opcode FF (SELFDESTRUCT) # # There should be a refund in Berlin, but not in London (EIP 3529) # The Berlin refund is 14303, not the expected 24000, because it is limited # to half the gas used by the transaction. refundFF: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000 currentBaseFee: 1000 pre: : balance: 0 code: | :yul berlin { selfdestruct() } nonce: 1 storage: {} # The recipient of the balance from SELFDESTRUCT : balance: 0 code: 0x nonce: 1 storage: {} : balance: 1000028607000 code: '0x' nonce: 1 storage: {} transaction: data: - data: :raw 0x00 accessList: [] gasLimit: - 2601000 nonce: 1 to: value: - 0 secretKey: "" gasPrice: 1000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : # Without a refund, the balance would be 1000000000000 # There is no refund in London balance: 1000000000000 ================================================ FILE: tests/static/state_tests/stRefundTest/refundMaxFiller.yml ================================================ # Get the maximum refund (by refunding eight SSTOREs, in a transaction that doesn't # do much other than that) and see what it is. # # The cost of the transaction without refunds is 61057 gas # (obtained by running with newVal := ) # # Berlin Refund: 30528 gas ( 61057 / 2 ) # London Refund: 12211 gas ( 61057 / 5 ) # # EIP 3529 sets MAX_REFUND_QUOTIENT to 5 (previously it was 2) refundMax: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { let newVal := 0 sstore(0x00,newVal) sstore(0x01,newVal) sstore(0x02,newVal) sstore(0x03,newVal) sstore(0x04,newVal) sstore(0x05,newVal) sstore(0x06,newVal) sstore(0x07,newVal) // Get rid of Yul optimizations newVal := msize() } nonce: 1 storage: 0x00: 0x60A7 0x01: 0x60A7 0x02: 0x60A7 0x03: 0x60A7 0x04: 0x60A7 0x05: 0x60A7 0x06: 0x60A7 0x07: 0x60A7 : balance: 1000061060000 code: '0x' nonce: 1 storage: {} transaction: data: - data: :raw 0x00 accessList: [] gasLimit: - 2601000 nonce: 1 to: value: - 0 secretKey: "" gasPrice: 1000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : # Without a refund, the balance would be 1000000000000 # The London refund is 12218000 wei, which is 12218 gas balance: 1000012218000 ================================================ FILE: tests/static/state_tests/stRefundTest/refundSSTOREFiller.yml ================================================ # Calculate the refund provided by a single SSTORE that replaces a value with zero # # Berlin: 13005 gas # London: 4800 gas (as per EIP 3529) refundSSTORE: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x1000000 currentBaseFee: 1000 pre: : balance: '1000000000000000000' code: | :yul berlin { sstore(0,0x0) } nonce: 1 storage: 0x00: 0x60A7 : balance: 1000026010000 code: '0x' nonce: 1 storage: {} transaction: data: - data: :raw 0x00 accessList: [] gasLimit: - 2601000 nonce: 1 to: value: - 0 secretKey: "" gasPrice: 1000 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : # Without a refund, the balance would be 1000000000000 # The London refund is 4800000 wei, which is 4800 gas balance: 1000004800000 ================================================ FILE: tests/static/state_tests/stRefundTest/refundSuicide50procentCapFiller.json ================================================ { "refundSuicide50procentCap" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x0a" : "0x01", "0x0b" : "0x00", "0x17" : "0x0107a7" } }, "" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "2000000000000000000", "storage" : { "0x0a" : "0x01", "0x0b" : "0x01", "0x17" : "0x0166fa" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [22] (GAS) [[ 10 ]] 1 [[ 11 ]] (CALL (CALLDATALOAD 0) 0 0 0 0 0 ) [[ 1 ]] 0 [[ 2 ]] 0 [[ 3 ]] 0 [[ 4 ]] 0 [[ 5 ]] 0 [[ 6 ]] 0 [[ 7 ]] 0 [[ 8 ]] 0 [[ 23 ]] (SUB @22 (GAS)) }", "nonce" : "0", "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x04" : "0x01", "0x05" : "0x01", "0x06" : "0x01", "0x07" : "0x01", "0x08" : "0x01" } }, "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001f4", ":raw 0x0000000000000000000000000000000000000000000000000000000000010000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_CallAFiller.json ================================================ { "refund_CallA" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "0" }, "" : { "balance" : "19540690", "nonce" : "1" }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 5500 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "20000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_CallA_OOGFiller.json ================================================ { "refund_CallA_OOG" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "0" }, "" : { "balance" : "2689310", "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 6000 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "3000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "31069" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_CallA_notEnoughGasInCallFiller.json ================================================ { "refund_CallA_notEnoughGasInCall" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "0" }, "" : { "balance" : "691700", "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 5005 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "85000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_CallToSuicideNoStorageFiller.json ================================================ { "refund_CallToSuicideNoStorage" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "2000000000000000010", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL (CALLDATALOAD 0) 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001f4", ":raw 0x0000000000000000000000000000000000000000000000000000000000010000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_CallToSuicideStorageFiller.json ================================================ { "refund_CallToSuicideStorage" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "2000000000000000010", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL (CALLDATALOAD 0) 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001f4", ":raw 0x0000000000000000000000000000000000000000000000000000000000010000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_CallToSuicideTwiceFiller.json ================================================ { "refund_CallToSuicideTwice" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "2000000000000000010", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL (CALLDATALOAD 0) 0 0 0 0 0 ) (CALL (CALLDATALOAD 0) 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001f4", ":raw 0x0000000000000000000000000000000000000000000000000000000000010000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_NoOOG_1Filler.json ================================================ { "refund_NoOOG_1" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "balance" : "0" }, "" : { "balance" : "10289940", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10502000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "26006" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_OOGFiller.json ================================================ { "refund_OOG" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "0" }, "" : { "balance" : "239950", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "500000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "26005" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_TxToSuicideFiller.json ================================================ { "refund_TxToSuicide" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000010", "storage" : { } }, "" : { "balance" : "0" }, "" : { "balance" : "99463960", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT 0x095e7baea6a6c7c4c2dfeb977efac326af552d87) }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "61003" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_TxToSuicideOOGFiller.json ================================================ { "refund_TxToSuicideOOG" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "balance" : "99789980", "nonce" : "1" }, "" : { "balance" : "1000000000000000000", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT 0x095e7baea6a6c7c4c2dfeb977efac326af552d87) }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "21002" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_changeNonZeroStorageFiller.json ================================================ { "refund_changeNonZeroStorage" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x01" : "0x17" } }, "" : { "balance" : "0" }, "" : { "balance" : "1009739930", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 23 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "1010000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "228500" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_getEtherBackFiller.json ================================================ { "refund_getEtherBack" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "228500", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { } }, "" : { "balance" : "0" }, "" : { "balance" : "1022637930", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "1022850000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "228500" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_multimpleSuicideFiller.json ================================================ { "refund_multimpleSuicide" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000" }, "" : { "balance" : "0" }, "" : { "balance" : "102679610", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "//comment1" : "contract Killer {", "//comment2" : " function homicide() {", "//comment3" : " suicide(msg.sender);", "//comment4" : " }", "//comment5" : "", "//comment6" : " function multipleHomocide() {", "//comment7" : " Killer k = this;", "//comment8" : " k.homicide();", "//comment9" : " k.homicide();", "//comment10" : " }", "//comment11" : "", "//comment12" : " function run() returns (bool)", "//comment13" : " {", "//comment14" : " multipleHomocide();", "//comment15" : " return true;", "//comment16" : " }", "//comment17" : "}", "code" : ":raw 0x606060405260e060020a600035046309e587a58114610031578063c04062261461004d578063dd4f1f2a1461005a575b005b61002f3373ffffffffffffffffffffffffffffffffffffffff16ff5b6100f5600061010961005e565b61002f5b60003090508073ffffffffffffffffffffffffffffffffffffffff166309e587a56040518160e060020a0281526004018090506000604051808303816000876161da5a03f1156100025750604080517f09e587a500000000000000000000000000000000000000000000000000000000815290516004828101926000929190829003018183876161da5a03f1156100025750505050565b604080519115158252519081900360200190f35b5060019056", "storage" : { } }, "" : { "balance" : "103000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRefundTest/refund_singleSuicideFiller.json ================================================ { "refund_singleSuicide" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000" }, "" : { "balance" : "0" }, "" : { "balance" : "29732660", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "nonce" : "1", "code" : "", "storage" : {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "//comment1" : "contract Killer {", "//comment2" : " function homicide() {", "//comment3" : " suicide(msg.sender);", "//comment4" : " }", "//comment5" : "", "//comment6" : " function multipleHomocide() {", "//comment7" : " Killer k = this;", "//comment8" : " k.homicide();", "//comment9" : " }", "//comment10" : "", "//comment11" : " function run() returns (bool)", "//comment12" : " {", "//comment13" : " multipleHomocide();", "//comment14" : " return true;", "//comment15" : " }", "//comment16" : "}", "code" : ":raw 0x606060405260e060020a600035046309e587a58114602e5780632e4699ed146049578063c040622614609b575b005b602c3373ffffffffffffffffffffffffffffffffffffffff16ff5b602c5b60003090508073ffffffffffffffffffffffffffffffffffffffff166309e587a56040518160e060020a0281526004018090506000604051808303816000876161da5a03f11560025750505050565b60a5600060b9604c565b604080519115158252519081900360200190f35b5060019056", "storage" : { } }, "" : { "balance" : "30000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stReturnDataTest/call_ecrec_success_empty_then_returndatasizeFiller.json ================================================ { "call_ecrec_success_empty_then_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00": "0x00" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x9000 0x1 0 0 0 0 0xaa) (SSTORE 0 (RETURNDATASIZE)) )}", "nonce" : "0x00", "storage" : { "0x00": "0x60A7" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/call_outsize_then_create_successful_then_returndatasizeFiller.json ================================================ { "call_outsize_then_create_successful_then_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32) (STOP) ) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0 0 0 0 0x20) (CREATE 0 0 (lll (seq (mstore 0 0x112233) (RETURN 0 32) (STOP) ) 0)) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/call_then_call_value_fail_then_returndatasizeFiller.json ================================================ { "call_then_call_value_fail_then_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0 0 0 0 0x20) (CALL 0x0900000000 0xffffffffffff 0 0 0 0x20) (SSTORE 0 (RETURNDATASIZE)) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/call_then_create_successful_then_returndatasizeFiller.json ================================================ { "call_then_create_successful_then_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32) (STOP) ) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0 0 0 0 0) (CREATE 0 0 (lll (seq (mstore 0 0x112233) (RETURN 0 32) (STOP) ) 0)) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/clearReturnBufferFiller.yml ================================================ clearReturnBuffer: # Make sure that if information is returned by an intermediate step it is not # Returned by subsequent steps. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Return a buffer (of a specified length) : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // no need to complicate things with an ABI let bufLen := calldataload(0) mstore(0, 0x60A7) return(0, bufLen) } nonce: 1 storage: {} # Revert a buffer (of a specified length) : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // no need to complicate things with an ABI let bufLen := calldataload(0) mstore(0, 0x60A7) revert(0, bufLen) } nonce: 1 storage: {} # This contract is CALLed to receive a buffer # which it then does not return : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // no need to complicate things with an ABI let addr := calldataload(0x00) let bufLen := calldataload(0x20) let static := calldataload(0x40) mstore(0, bufLen) pop(call(gas(), addr, 0, 0, 0x20, 0, 0x20)) sstore(0, returndatasize()) sstore(1, address()) stop() } nonce: 1 storage: {} # This contract is CALLed to receive a buffer # which it then does not return, without SSTORE because it is # for static calls : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // no need to complicate things with an ABI let addr := calldataload(0x00) let bufLen := calldataload(0x20) let static := calldataload(0x40) mstore(0, bufLen) pop(call(gas(), addr, 0, 0, 0x20, 0, 0x20)) sstore(0, returndatasize()) sstore(1, address()) stop() } nonce: 1 storage: {} # This contract is CALLed to receive a buffer # which it then does not return. It fails : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // no need to complicate things with an ABI let addr := calldataload(0x00) let bufLen := calldataload(0x20) mstore(0, bufLen) pop(call(gas(), addr, 0, 0, 0x20, 0, 0x20)) // Crash with an illegal opcode verbatim_0i_0o("0xFE") } nonce: 1 storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // The operation that we ran and that after which we're supposed // to have an empty buffer // // 0xF0 means CREATE // 0xF1 means CALL // 0xF2 means CALLCODE // 0xF4 means DELEGATECALL // 0xF5 means CREATE2 // 0xFA means STATICCALL // 0x11 means that operation, but it fails let operation := calldataload(0x04) // 0xF3F3 means the buffer is RETURNed // 0xFDFD means the buffer is REVERTed let bufferFrom := calldataload(0x24) // The length of the buffer that the RETURN or REVERT returns let bufLen := calldataload(0x44) let codeLen // Put the constructor code at 0x00-length, and return that length function makeConstructor(addr, len) -> retVal { // The constructor code CALLs the appropriate contract with the specified // buffer length // // Write the buffer length to memory (so we can send it) // 0x0 PUSH32 mstore8(0x0, 0x7F) mstore(0x1, len) // 0x21 PUSH1 0 mstore8(0x21, 0x60) mstore8(0x22, 0x00) // 0x23 MSTORE mstore8(0x23, 0x52) // With the buffer length handled, the next step is to PUSH // the call parameters // 0x24 PUSH1 0xFF (return buffer length) mstore8(0x24, 0x60) mstore8(0x25, 0xFF) // 0x26 PUSH1 0x20 (return buffer location) mstore8(0x26, 0x60) mstore8(0x27, 0x20) // 0x28 PUSH1 0x20 (argument length) mstore8(0x28, 0x60) mstore8(0x29, 0x20) // 0x2A PUSH1 0x00 (argument location) mstore8(0x2A, 0x60) mstore8(0x2B, 0x00) // 0x2C PUSH1 0x00 (value) mstore8(0x2C, 0x60) mstore8(0x2D, 0x00) // 0x2E PUSH32 bufferFrom (address to call) mstore8(0x2E, 0x7F) mstore(0x2F, addr) // 0x4F GAS (the gas to send for the call) mstore8(0x4F, 0x5A) // 0x50 CALL mstore8(0x50, 0xF1) // Write the return data (first word and size) to storage as // a sanity check (to make sure there really was a buffer to erase) // 0x51 PUSH 0x20 (the return data location) mstore8(0x51, 0x60) mstore8(0x52, 0x20) // 0x53 MLOAD mstore8(0x53, 0x51) // 0x54 PUSH1 0 mstore8(0x54, 0x60) mstore8(0x55, 0x00) // 0x56 SSTORE mstore8(0x56, 0x55) // 0x57 RETURNDATASIZE mstore8(0x57, 0x3D) // 0x58 PUSH1 1 mstore8(0x58, 0x60) mstore8(0x59, 0x01) // 0x5A SSTORE mstore8(0x5A, 0x55) // 0x5B STOP mstore8(0x5B, 0x00) // Return the length retVal := 0x5C } // function makeConstructor // Put the constructor code at 0x00-length, and return that length - but this // constructor fails with an illegal opcode function makeFailConstructor(addr, len) -> retVal { let endOfGood := makeConstructor(addr, len) // Replace the STOP with 0xFE, which is the designated bad opcode mstore8(sub(endOfGood, 1), 0xFE) retVal := endOfGood } switch operation case 0xF0 { // CREATE codeLen := makeConstructor(bufferFrom, bufLen) pop(create(0, 0, codeLen)) } case 0x11F0 { // CREATE, which fails codeLen := makeFailConstructor(bufferFrom, bufLen) pop(create(0, 0, codeLen)) } case 0xF5 { // CREATE2 codeLen := makeConstructor(bufferFrom, bufLen) pop(create2(0, 0, codeLen, 0x5a17)) } case 0x11F5 { // CREATE2, which fails codeLen := makeFailConstructor(bufferFrom, bufLen) pop(create2(0, 0, codeLen, 0x5a17)) } case 0xF1 { // CALL mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(call(gas(), 0x00ca11ed, 0, 0, 0x40, 0x100, 0x20)) } case 0x11F1 { // CALL, but it fails mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(call(gas(), 0xbad0ca11, 0, 0, 0x40, 0x100, 0x20)) } case 0xF2 { // CALLCODE mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(callcode(gas(), 0x00ca11ed, 0, 0, 0x40, 0x100, 0x20)) } case 0x11F2 { // CALLCODE, but it fails mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(callcode(gas(), 0xbad0ca11, 0, 0, 0x40, 0x100, 0x20)) } case 0xF4 { // DELEGATECALL mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(delegatecall(gas(), 0x00ca11ed, 0, 0x40, 0x100, 0x20)) } case 0x11F4 { // DELEGATECALL, but it fails mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(delegatecall(gas(), 0xbad0ca11, 0, 0x40, 0x100, 0x20)) } case 0xFA { // STATICCALL mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(staticcall(gas(), 0x57A700ca11ed, 0, 0x40, 0x100, 0x20)) } case 0x11FA { // STATICCALL, but it fails mstore(0x00, bufferFrom) mstore(0x20, bufLen) pop(staticcall(gas(), 0xbad0ca11, 0, 0x40, 0x100, 0x20)) } default { // We shouldn't get here revert(0,0) } // End of switch operation sstore(0, returndatasize()) // Should be zero // We can't do returndatacopy() here because it causes the transaction // to revert sstore(1, mload(0)) } nonce: 1 storage: # To verify it is overwritten 0: 0x60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: 1 storage: {} transaction: data: # CREATE inside which a RETURN returns a 0x20 byte buffer - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x20 # Same as above but with REVERT - :abi f(uint,uint,uint) 0xF0 0xFDFD 0x20 # Try different buffer sizes - :abi f(uint,uint,uint) 0xF0 0xF3F3 0x01 - :abi f(uint,uint,uint) 0xF0 0xF3F3 0x10 - :abi f(uint,uint,uint) 0xF0 0xF3F3 0xFF - :abi f(uint,uint,uint) 0xF0 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0xF0 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0xF0 0xF3F3 0x1000 # Different buffer sizes and REVERTs - :abi f(uint,uint,uint) 0xF0 0xF3FD 0x01 - :abi f(uint,uint,uint) 0xF0 0xFDFD 0x10 - :abi f(uint,uint,uint) 0xF0 0xFDFD 0xFF - :abi f(uint,uint,uint) 0xF0 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0xF0 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0xF0 0xFDFD 0x1000 # Same as the tests above, but with CREATE2 - :abi f(uint,uint,uint) 0xF5 0xF3F3 0x20 - :abi f(uint,uint,uint) 0xF5 0xFDFD 0x20 - :abi f(uint,uint,uint) 0xF5 0xF3F3 0x01 - :abi f(uint,uint,uint) 0xF5 0xF3F3 0x10 - :abi f(uint,uint,uint) 0xF5 0xF3F3 0xFF - :abi f(uint,uint,uint) 0xF5 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0xF5 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0xF5 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0xF5 0xF3FD 0x01 - :abi f(uint,uint,uint) 0xF5 0xFDFD 0x10 - :abi f(uint,uint,uint) 0xF5 0xFDFD 0xFF - :abi f(uint,uint,uint) 0xF5 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0xF5 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0xF5 0xFDFD 0x1000 # CALL - :abi f(uint,uint,uint) 0xF1 0xF3F3 0x20 - :abi f(uint,uint,uint) 0xF1 0xFDFD 0x20 - :abi f(uint,uint,uint) 0xF1 0xF3F3 0x01 - :abi f(uint,uint,uint) 0xF1 0xF3F3 0x10 - :abi f(uint,uint,uint) 0xF1 0xF3F3 0xFF - :abi f(uint,uint,uint) 0xF1 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0xF1 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0xF1 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0xF1 0xF3FD 0x01 - :abi f(uint,uint,uint) 0xF1 0xFDFD 0x10 - :abi f(uint,uint,uint) 0xF1 0xFDFD 0xFF - :abi f(uint,uint,uint) 0xF1 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0xF1 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0xF1 0xFDFD 0x1000 # CALLCODE - :abi f(uint,uint,uint) 0xF2 0xF3F3 0x20 - :abi f(uint,uint,uint) 0xF2 0xFDFD 0x20 - :abi f(uint,uint,uint) 0xF2 0xF3F3 0x01 - :abi f(uint,uint,uint) 0xF2 0xF3F3 0x10 - :abi f(uint,uint,uint) 0xF2 0xF3F3 0xFF - :abi f(uint,uint,uint) 0xF2 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0xF2 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0xF2 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0xF2 0xF3FD 0x01 - :abi f(uint,uint,uint) 0xF2 0xFDFD 0x10 - :abi f(uint,uint,uint) 0xF2 0xFDFD 0xFF - :abi f(uint,uint,uint) 0xF2 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0xF2 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0xF2 0xFDFD 0x1000 # DELEGATECALL - :abi f(uint,uint,uint) 0xF4 0xF3F3 0x20 - :abi f(uint,uint,uint) 0xF4 0xFDFD 0x20 - :abi f(uint,uint,uint) 0xF4 0xF3F3 0x01 - :abi f(uint,uint,uint) 0xF4 0xF3F3 0x10 - :abi f(uint,uint,uint) 0xF4 0xF3F3 0xFF - :abi f(uint,uint,uint) 0xF4 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0xF4 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0xF4 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0xF4 0xF3FD 0x01 - :abi f(uint,uint,uint) 0xF4 0xFDFD 0x10 - :abi f(uint,uint,uint) 0xF4 0xFDFD 0xFF - :abi f(uint,uint,uint) 0xF4 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0xF4 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0xF4 0xFDFD 0x1000 # STATICCALL - :abi f(uint,uint,uint) 0xFA 0xF3F3 0x20 - :abi f(uint,uint,uint) 0xFA 0xFDFD 0x20 - :abi f(uint,uint,uint) 0xFA 0xF3F3 0x01 - :abi f(uint,uint,uint) 0xFA 0xF3F3 0x10 - :abi f(uint,uint,uint) 0xFA 0xF3F3 0xFF - :abi f(uint,uint,uint) 0xFA 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0xFA 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0xFA 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0xFA 0xF3FD 0x01 - :abi f(uint,uint,uint) 0xFA 0xFDFD 0x10 - :abi f(uint,uint,uint) 0xFA 0xFDFD 0xFF - :abi f(uint,uint,uint) 0xFA 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0xFA 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0xFA 0xFDFD 0x1000 # CALL, which fails - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0x20 - :abi f(uint,uint,uint) 0x11F1 0xFDFD 0x20 - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0x01 - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0x10 - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0xFF - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0x11F1 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0x11F1 0xF3FD 0x01 - :abi f(uint,uint,uint) 0x11F1 0xFDFD 0x10 - :abi f(uint,uint,uint) 0x11F1 0xFDFD 0xFF - :abi f(uint,uint,uint) 0x11F1 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0x11F1 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0x11F1 0xFDFD 0x1000 # CALLCODE, which fails - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0x20 - :abi f(uint,uint,uint) 0x11F2 0xFDFD 0x20 - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0x01 - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0x10 - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0xFF - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0x11F2 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0x11F2 0xF3FD 0x01 - :abi f(uint,uint,uint) 0x11F2 0xFDFD 0x10 - :abi f(uint,uint,uint) 0x11F2 0xFDFD 0xFF - :abi f(uint,uint,uint) 0x11F2 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0x11F2 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0x11F2 0xFDFD 0x1000 # DELEGATECALL, which fails - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0x20 - :abi f(uint,uint,uint) 0x11F4 0xFDFD 0x20 - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0x01 - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0x10 - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0xFF - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0x11F4 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0x11F4 0xF3FD 0x01 - :abi f(uint,uint,uint) 0x11F4 0xFDFD 0x10 - :abi f(uint,uint,uint) 0x11F4 0xFDFD 0xFF - :abi f(uint,uint,uint) 0x11F4 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0x11F4 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0x11F4 0xFDFD 0x1000 # STATICCALL, which fails - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0x20 - :abi f(uint,uint,uint) 0x11FA 0xFDFD 0x20 - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0x01 - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0x10 - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0xFF - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0x11FA 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0x11FA 0xF3FD 0x01 - :abi f(uint,uint,uint) 0x11FA 0xFDFD 0x10 - :abi f(uint,uint,uint) 0x11FA 0xFDFD 0xFF - :abi f(uint,uint,uint) 0x11FA 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0x11FA 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0x11FA 0xFDFD 0x1000 # CREATE, which fails - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x20 - :abi f(uint,uint,uint) 0x11F0 0xFDFD 0x20 - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x01 - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x10 - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0xFF - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0x11F0 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0x11F0 0xF3FD 0x01 - :abi f(uint,uint,uint) 0x11F0 0xFDFD 0x10 - :abi f(uint,uint,uint) 0x11F0 0xFDFD 0xFF - :abi f(uint,uint,uint) 0x11F0 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0x11F0 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0x11F0 0xFDFD 0x1000 # CREATE2, which fails - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0x20 - :abi f(uint,uint,uint) 0x11F5 0xFDFD 0x20 - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0x01 - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0x10 - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0xFF - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0x0100 - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0x0FFF - :abi f(uint,uint,uint) 0x11F5 0xF3F3 0x1000 - :abi f(uint,uint,uint) 0x11F5 0xF3FD 0x01 - :abi f(uint,uint,uint) 0x11F5 0xFDFD 0x10 - :abi f(uint,uint,uint) 0x11F5 0xFDFD 0xFF - :abi f(uint,uint,uint) 0x11F5 0xFDFD 0x0100 - :abi f(uint,uint,uint) 0x11F5 0xFDFD 0x0FFF - :abi f(uint,uint,uint) 0x11F5 0xFDFD 0x1000 gasLimit: - '16777216' gasPrice: '10' nonce: 1 to: value: - '1' secretKey: "" expect: # Regardless of how we got the buffer, it shouldn't be returned to the # top level - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 0 # RETURNDATASIZE 1: 'ANY' ================================================ FILE: tests/static/state_tests/stReturnDataTest/create_callprecompile_returndatasizeFiller.json ================================================ { "create_callprecompile_returndatasize" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00": "0x00" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CREATE 0 0 (lll (seq (mstore 0 0x112233) (CALL 0x9000 4 0 0 32 0 32) (SSTORE 0 (RETURNDATASIZE)) (RETURN 0 32) (STOP) ) 0)) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/modexp_modsize0_returndatasizeFiller.json ================================================ { "modexp_modsize0_returndatasize" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x01" } } } }, { "indexes" : { "data" : 2, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x64" } } } }, { "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x0100" } } } }, { "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "", "code" : "{ (CALLDATACOPY 0 0 (CALLDATASIZE)) [[1]] (CALLCODE (GAS) 5 0 0 (CALLDATASIZE) 1000 32) [[2]](MLOAD 1000) [[3]](RETURNDATASIZE) }", "nonce" : "0", "storage" : { "0x03" : "0xffffffff" } }, "" : { "balance" : "1000000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "modlength zero", "modlength one", "modlength 100", "modlength 256", "modlength 999188" ], "data" : [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000101", ":raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010101", ":raw 0x0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000645442ddc2b70f66c1f6d2b296c0a875be7eddd0a80958cbc7425f1899ccf90511a5c318226e48ee23f130b44dc17a691ce66be5da18b85ed7943535b205aa125e9f59294a00f05155c23e97dac6b3a00b0c63c8411bf815fc183b420b4d9dc5f715040d5c60957f52d334b843197adec58c131c907cd96059fc5adce9dda351b5df3d666fcf3eb63c46851c1816e323f2119ebdf5ef35", ":raw 0x000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100f536269e59acdb356459b59f1ea6acc924650f8f05dae101a3b463d33342dcc6265d1ba9465fd0f1106b3f03a4af0a0b553e8b6ba8682584ba19c3835430ff310904a717282064031bcf9185dd172dad65305ee0e61d0c638b0a0ef0f4e51653996020c2723faea116881e25fb3d554dbc51b180052c981fc79ca93567eb6ff0e619deeb2984ae3ca232523aa5bd21ea4f8caa12cb8cd90dbafb9bd6951dcaef0fc4a74d195f5341bc6c3d7217df82597b84c4e1bbef4f2ce8c32aedbd99430f4e1a59b886c4ceb9bf7a00a415c207f3a4ccf95d5483642f95a9b240806c508c29bb48de38c8e1229257d5d807229fb3708ad6ac619b133fd7c1fe3c375f90ce55689018465a8a3d7c08097d415c702e7f57fcd6de6ea55cca75c49b835c6c90172753948fbd5dee5a74a422e3169d0cf5665ffc9198dc7f3fa502da817f1c81af0843ef5bec2ca2e8f3e24a76ac7322dab5a5bda802b247f1cf5282936cd1cb115f40e71db8d62b58c7d6c0ae7c78888987c22ff6afae345ade859a9beb127d", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f3f14010101" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_0_0_following_successful_createFiller.json ================================================ { "returndatacopy_0_0_following_successful_create" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "storage" : { "0x00" : "0x00" } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x00", "// code" : "create should succeed. RETURNDATACOPY should also succeed in Byzantium.", "code" : "{ (CREATE 0 0 (lll (seq (SSTORE 0 1) (STOP)) 0)) (RETURNDATACOPY 0 0 0) (SSTORE 0 0) (STOP) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_afterFailing_createFiller.json ================================================ { "returndatacopy_afterFailing_create" : { "_info" : { "comment" : "Returndatacopy after failing create case due to 0xfd code." }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x20", "0x01" : "0x02" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (MSTORE 0 0x600260005260206000fd) (create 0 22 10) (SSTORE 0 (RETURNDATASIZE)) (RETURNDATACOPY 0 0 32) (SSTORE 1 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_failing_callcodeFiller.json ================================================ { "returndatacopy_after_failing_callcode" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x10000000", "code": "", "nonce": "0x00", "storage": {} }, "": { "balance" : "0x00", "code": "{ (CALLCODE 0 0 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) (SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : ":raw 0xfd", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffff" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_failing_delegatecallFiller.json ================================================ { "returndatacopy_after_failing_delegatecall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x100000", "code": "", "nonce": "0x00", "storage": {} }, "": { "balance" : "0x00", "code": "{ (DELEGATECALL 10000 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) ( SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : ":raw 0xfd", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_failing_staticcallFiller.json ================================================ { "returndatacopy_after_failing_staticcall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x100000", "code": "", "nonce": "0x0", "storage": {} }, "": { "balance" : "0x00", "code": "{ (STATICCALL 0 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) ( SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 (CALLER)) (RETURN 0 32) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_revert_in_staticcallFiller.json ================================================ { "returndatacopy_after_revert_in_staticcall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "": { "balance" : "0x1000000", "code": "", "nonce": "0x0", "storage": {} }, "": { "balance" : "0x00", "code": "{ (STATICCALL 60000 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) ( SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 (CALLER)) (REVERT 0 32) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_successful_callcodeFiller.json ================================================ { "returndatacopy_after_successful_callcode" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance" : "0x00", "code": "{ (CALLCODE 60000 0 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) (SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (RETURN 0 32) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_successful_delegatecallFiller.json ================================================ { "returndatacopy_after_successful_delegatecall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance" : "0x00", "code": "{ (DELEGATECALL 60000 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) ( SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 (CALLER)) (RETURN 0 32) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_after_successful_staticcallFiller.json ================================================ { "returndatacopy_after_successful_staticcall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "": { "balance" : "0x1000000", "code": "", "nonce": "0x0", "storage": {} }, "": { "balance" : "0x00", "code": "{ (STATICCALL 60000 0 0 0 0) (RETURNDATACOPY 0x0 0x0 32) ( SSTORE 0 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 (CALLER)) (RETURN 0 32) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_callFiller.json ================================================ { "returndatacopy_following_call" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0 0 0 0 0) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_createFiller.json ================================================ { "returndatacopy_following_create" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (create (STOP)) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_failing_callFiller.json ================================================ { "returndatacopy_following_failing_call" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x00", "// code" : "Something that fails.", "code" : ":raw 0xfd", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "// code" : "CALL should fail because of an invalid instruction, and RETURNDATACOPY should also fail because of out-of-bound access. SSTORE should not be reached", "code" : "{ (CALL 0x0900000000 0 0 0 0 0) (RETURNDATACOPY 0 1 32) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_revertFiller.json ================================================ { "returndatacopy_following_revert" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (REVERT 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0 0 0 0 0) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_revert_in_createFiller.json ================================================ { "returndatacopy_following_revert_in_create" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (CREATE 0 0 (lll (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (REVERT 0 32) (STOP) ) 0)) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_successful_createFiller.json ================================================ { "returndatacopy_following_successful_create" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x02" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (create (STOP)) (RETURNDATACOPY 0 1 32) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_following_too_big_transferFiller.json ================================================ { "returndatacopy_following_too_big_transfer" : { "_info" : { "comment" : "This test tries RETURNDATACOPY with a non-zero size after a CALL that fails because of insufficient balance." }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 10000000 0 0 0 0) (RETURNDATACOPY 0 0 32) (SSTORE 0 200) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_initialFiller.json ================================================ { "returndatacopy_initial" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "{ (MSTORE 0 0x112233445566778899aabbccddeeff) (RETURNDATACOPY 0 0 32) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_initial_256Filler.json ================================================ { "returndatacopy_initial_256" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "{ (RETURNDATACOPY (- 0 (CALLDATALOAD 0)) 0 0x64) (MSTORE 0 0x112233445566778899aabbccddeeff) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "// data" : [ "0: the sum of RETURNDATACOPY's first and third arguments is 2^256", "1: one smaller", "2: one bigger", "anyway the RETURNDATACOPY should cause an exceptional halt." ], "data" : [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000064", ":raw 0x0000000000000000000000000000000000000000000000000000000000000063", ":raw 0x0000000000000000000000000000000000000000000000000000000000000065" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_initial_big_sumFiller.json ================================================ { "returndatacopy_initial_big_sum" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "{ (MSTORE 0 0x112233445566778899aabbccddeeff) (RETURNDATACOPY 0 (EXP 2 63) (EXP 2 63)) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatacopy_overrunFiller.json ================================================ { "returndatacopy_overrun" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff) (RETURN 0 32)) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (CALL 0x0900000000 0 0 0 0 0) (RETURNDATACOPY 0 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 100) (SSTORE 0 (MLOAD 0)) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_failing_callcodeFiller.json ================================================ { "returndatasize_after_failing_callcode" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x10000000", "code": "", "nonce": "0x0", "storage": {} }, "": { "balance" : "0x00", "code": "{ (seq (CALLCODE 100000 0 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffff" } }, "" : { "balance" : "0x6400000000", "//code": "an invalid opcode", "code" : ":raw 0xfd", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x030d40" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to": "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_failing_delegatecallFiller.json ================================================ { "returndatasize_after_failing_delegatecall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x1000000", "nonce": "0x0", "code": "", "storage": { } }, "": { "balance" : "0x00", "code": "{ (seq (DELEGATECALL 10000 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "//code": "an invalid opcode", "code" : ":raw 0xfd", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_failing_staticcallFiller.json ================================================ { "returndatasize_after_failing_staticcall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x100000", "nonce": "0x0", "code": "", "storage": {} }, "" : { "balance" : "0x00", "code": "{ (seq (STATICCALL 60000 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "//code": "an invalid opcode", "code" : ":raw 0xfd", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_oog_after_deeperFiller.json ================================================ { "returndatasize_after_oog_after_deeper" : { "_info" : { "comment" : "transaction calls A (CALL B(CALL C(RETURN) OOG) 'check buffers')" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance": "0x1000000000", "code": "", "nonce": "0x0", "storage": {} }, "": { "balance" : "0x00", "code": "{ (seq (SSTORE 2 (CALL 100000 0 0 0 0 32)) (SSTORE 0 (RETURNDATASIZE))) (SSTORE 1 (MLOAD 0))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffff", "0x01" : "0xffffffff", "0x02" : "0xffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (seq (CALL 100000 0 0 0 0 0) (while 1 (SSTORE 0 1)) )}", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x100000000000", "code" : "", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x00", "code" : "{ (seq (MSTORE 0 255) (RETURN 0 32) )}", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x030d40" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to": "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_successful_callcodeFiller.json ================================================ { "returndatasize_after_successful_callcode" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance" : "0x00", "code": "{ (seq (CALLCODE 60000 0 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)))}", "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (RETURN 0 6) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x06" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_successful_delegatecallFiller.json ================================================ { "returndatasize_after_successful_delegatecall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance" : "0x00", "code": "{ (seq (DELEGATECALL 60000 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 (CALLER)) (RETURN 0 20) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x14" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_after_successful_staticcallFiller.json ================================================ { "returndatasize_after_successful_staticcall" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "pre" : { "" : { "balance" : "0x00", "code": "{ (seq (STATICCALL 60000 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)))}", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "balance" : "0x6400000000", "code" : "{ (MSTORE 0x0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (RETURN 0 6) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x06" } } } } ], "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_bugFiller.json ================================================ { "returndatasize_bug" : { "_info" : { "comment" : "RETURNDATASIZE after a failing CALL (due to insufficient balance) should return 0" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "{ (CALL 1 50000 0 0 0 0) (SSTORE 0 (RETURNDATASIZE)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "{ (CALL 10 1 50000 0 0 0 0) (SSTORE 1 1) }", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_following_successful_createFiller.json ================================================ { "returndatasize_following_successful_create" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect": [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (CREATE 0 0 (lll (seq (mstore 0 0x112233) (RETURN 0 32) (STOP) ) 0)) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_initialFiller.json ================================================ { "returndatasize_initial" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "{ (SSTORE 0 (RETURNDATASIZE)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/returndatasize_initial_zero_readFiller.json ================================================ { "returndatasize_initial_zero_read" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x1a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "{ (RETURNDATACOPY 0 0 0) (SSTORE 0 (MLOAD 0)) }", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "", ":raw 0x992919aa" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stReturnDataTest/revertRetDataSizeFiller.yml ================================================ revertRetDataSize: # After a reverted call RETURNDATASIZE should return zero, even if # there was returned data previously env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: cccccccccccccccccccccccccccccccccccccccc: balance: '0x0ba1a9ce0ba1a9ce' code: | { ; $4 is the type of thing that fails ; $36 is the failure itself (def 'callType $4) (def 'call 0xf1) (def 'callcode 0xf2) (def 'delegatecall 0xf4) (def 'staticcall 0xfa) (def 'create 0xf0) (def 'create2 0xf5) (def 'failureType $36) (def 'oog 0) ; We need these values for CREATE(2) (def 'uf 0x0200) (def 'jmp 0x0300) (def 'jmpi 0x0400) (def 'badOpcode 0x0500) (def 'badCall 0xFF00) (def 'NOP 0) ; Code for CREATE(2) to fail (def 'codeLoc 0x0000) (def 'codeLength 0x0100) (if (= failureType oog) [codeLength] (lll (sha3 0 (- 0 1)) codeLoc) NOP ) (if (= failureType badCall) [codeLength] (call (gas) 0xFF00 0 0 0 0 0) NOP ) ; lll protects us from the other failures, so we need to use vm code (if (= failureType uf) { (mstore8 codeLoc 0x50) ; POP (mstore8 (+ codeLoc 1) 0x00) ; STOP [codeLength] 2 } NOP ) (if (= failureType jmp) { (mstore8 codeLoc 0x60) ; PUSH1 0x00 (mstore8 (+ codeLoc 1) 0x00) (mstore8 (+ codeLoc 2) 0x56) ; JUMP (mstore8 (+ codeLoc 2) 0x00) ; STOP [codeLength] 4 } NOP ) (if (= failureType jmpi) { (mstore8 codeLoc 0x60) ; PUSH1 0x01 (mstore8 (+ codeLoc 1) 0x01) (mstore8 (+ codeLoc 2) 0x60) ; PUSH1 0x01 (mstore8 (+ codeLoc 3) 0x01) (mstore8 (+ codeLoc 4) 0x57) ; JUMPI (mstore8 (+ codeLoc 5) 0x00) ; STOP [codeLength] 6 } NOP ) (if (= failureType badOpcode) { (mstore8 codeLoc 0xFE) ; Invalid opcode (mstore8 (+ codeLoc 1) 0x00) ; STOP [codeLength] 2 } NOP ) ; The actual failures start here ---------------------------------------- (if (and (= callType call) (= failureType oog)) { (call (gas) 0x1000 0 0 0 0 0x40) [[0]] (returndatasize) (call 0 0x1000 0 0 0 0 0x40) [[1]] (returndatasize) } NOP) ; If failureType isn't zero, it's the address of a contract to call (if (and (= callType call) (> failureType 0)) { (call (gas) 0x1000 0 0 0 0 0x40) [[0]] (returndatasize) (call (- (gas) 0xF0000) failureType 0 0 0 0 0x40) [[1]] (returndatasize) } NOP) (if (and (= callType callcode) (= failureType oog)) { (callcode (gas) 0x1000 0 0 0 0 0x40) [[0]] (returndatasize) (callcode 0 0x1000 0 0 0 0 0x40) [[1]] (returndatasize) } NOP) ; If failureType isn't zero, it's the address of a contract to call (if (and (= callType callcode) (> failureType 0)) { (call (gas) 0x1000 0 0 0 0 0x40) [[0]] (returndatasize) (callcode (gas) failureType 0 0 0 0 0x40) [[1]] (returndatasize) } NOP) (if (and (= callType delegatecall) (= failureType oog)) { (delegatecall (gas) 0x1000 0 0 0 0x40) [[0]] (returndatasize) (delegatecall 0 0x1000 0 0 0 0x40) [[1]] (returndatasize) } NOP) ; If failureType isn't zero, it's the address of a contract to call (if (and (= callType delegatecall) (> failureType 0)) { (call (gas) 0x1000 0 0 0 0 0x40) [[0]] (returndatasize) (delegatecall (gas) failureType 0 0 0 0x40) [[1]] (returndatasize) } NOP) (if (and (= callType staticcall) (= failureType oog)) { (staticcall (gas) 0x1000 0 0 0 0x40) [[0]] (returndatasize) (staticcall 0 0x1000 0 0 0 0x40) [[1]] (returndatasize) } NOP) ; If failureType isn't zero, it's the address of a contract to call (if (and (= callType staticcall) (> failureType 0)) { (call (gas) 0x1000 0 0 0 0 0x40) [[0]] (returndatasize) (staticcall (gas) failureType 0 0 0 0x40) [[1]] (returndatasize) } NOP) (if (= callType create) { (staticcall (gas) 0x1000 0 0 0 0x40) [[0]] (returndatasize) (create 0 codeLoc @codeLength) [[1]] (returndatasize) } NOP) (if (= callType create2) { (staticcall (gas) 0x1000 0 0 0 0x40) [[0]] (returndatasize) (create2 0x5a17 0 codeLoc @codeLength) [[1]] (returndatasize) } NOP) ; Show we got here [[2]] 0x60A7 } nonce: '0' storage: # Verify it gets overwritten 0: 0x60A7 1: 0x60A7 # Call and try to return a 0x40 byte value 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { [0x00] (/ (- 0 1) 2) [0x20] (+ @0x00 1) (return 0 0x40) } nonce: '0' storage: {} # Stack underflow 0000000000000000000000000000000000000200: balance: '0x0ba1a9ce0ba1a9ce' nonce: '0' storage: {} # POP # STOP code: :raw 0x5000 # JUMP to a place that isn't a JUMPDEST 0000000000000000000000000000000000000300: balance: '0x0ba1a9ce0ba1a9ce' nonce: '0' storage: {} # PUSH1 00 # JUMP code: :raw 0x600056 # JUMPI to a place that isn't a JUMPDEST 0000000000000000000000000000000000000400: balance: '0x0ba1a9ce0ba1a9ce' nonce: '0' storage: {} # PUSH1 01 # PUSH1 01 # JUMPI code: :raw 0x6001600157 # Bad opcode 0000000000000000000000000000000000000500: balance: '0x0ba1a9ce0ba1a9ce' nonce: '0' storage: {} code: :raw 0xFE00 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # Out of gas - :abi f(uint,uint) 0xF1 0x0000 # CALL - :abi f(uint,uint) 0xF2 0x0000 # CALLCODE - :abi f(uint,uint) 0xF4 0x0000 # DELEGATECALL - :abi f(uint,uint) 0xFA 0x0000 # STATICCALL - :abi f(uint,uint) 0xF0 0x0000 # CREATE - :abi f(uint,uint) 0xF5 0x0000 # CREATE2 # Stack underflow - :abi f(uint,uint) 0xF1 0x0200 # CALL - :abi f(uint,uint) 0xF2 0x0200 # CALLCODE - :abi f(uint,uint) 0xF4 0x0200 # DELEGATECALL - :abi f(uint,uint) 0xFA 0x0200 # STATICCALL - :abi f(uint,uint) 0xF0 0x0200 # CREATE - :abi f(uint,uint) 0xF5 0x0200 # CREATE2 # JUMP - :abi f(uint,uint) 0xF1 0x0300 # CALL - :abi f(uint,uint) 0xF2 0x0300 # CALLCODE - :abi f(uint,uint) 0xF4 0x0300 # DELEGATECALL - :abi f(uint,uint) 0xFA 0x0300 # STATICCALL - :abi f(uint,uint) 0xF0 0x0300 # CREATE - :abi f(uint,uint) 0xF5 0x0300 # CREATE2 # JUMPI - :abi f(uint,uint) 0xF1 0x0400 # CALL - :abi f(uint,uint) 0xF2 0x0400 # CALLCODE - :abi f(uint,uint) 0xF4 0x0400 # DELEGATECALL - :abi f(uint,uint) 0xFA 0x0400 # STATICCALL - :abi f(uint,uint) 0xF0 0x0400 # CREATE - :abi f(uint,uint) 0xF5 0x0400 # CREATE2 # Bad opcode tests - :abi f(uint,uint) 0xF1 0x0500 # CALL - :abi f(uint,uint) 0xF2 0x0500 # CALLCODE - :abi f(uint,uint) 0xF4 0x0500 # DELEGATECALL - :abi f(uint,uint) 0xFA 0x0500 # STATICCALL - :abi f(uint,uint) 0xF0 0x0500 # CREATE - :abi f(uint,uint) 0xF5 0x0500 # CREATE2 # Call a non-existent contract - :abi f(uint,uint) 0xF1 0xFF00 # CALL - :abi f(uint,uint) 0xF2 0xFF00 # CALLCODE - :abi f(uint,uint) 0xF4 0xFF00 # DELEGATECALL - :abi f(uint,uint) 0xFA 0xFF00 # STATICCALL - :abi f(uint,uint) 0xF0 0xFF00 # CREATE - :abi f(uint,uint) 0xF5 0xFF00 # CREATE2 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # CALL/CREATE failure, including OOG, gives a RETURNDATASIZE of zero and # continues the transaction - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0: 0x40 # First returndatasize 1: 0x00 # Second returndatasize 2: 0x60A7 # GOAT at the end of the run ================================================ FILE: tests/static/state_tests/stReturnDataTest/subcallReturnMoreThenExpectedFiller.yml ================================================ # https://github.com/ethereum/tests/issues/558 (subcall/opcode return more data then expected) --- subcallReturnMoreThenExpected: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "10000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: "https://github.com/ethereum/tests/issues/558 (subcall/opcode return more data then expected)" pre: : balance: '1000000000000000000' code: | { ;; Get returndata from a subcall (CALL 200000 0 0 0 0 12) [[0]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) (DELEGATECALL 200000 0 0 0 12) [[1]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) (STATICCALL 200000 0 0 0 12) [[2]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) (CALLCODE 200000 0 0 0 0 12) [[3]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) ;; Get revert data from a subcall (CALL 200000 0 0 0 0 12) [[4]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) (DELEGATECALL 200000 0 0 0 12) [[5]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) (STATICCALL 200000 0 0 0 12) [[6]] (MLOAD 0) (MSTORE 0 0x0000000000000000000000000000000000000000000000000000000000000000) (CALLCODE 200000 0 0 0 0 12) [[7]] (MLOAD 0) } nonce: '0' storage: {} : balance: '1000000000000000000' code: | { (MSTORE 0 0x1122334455667788991011121314151617181920212223242526272829303132) (MSTORE 32 0x3334353637383940414243444546474849505152535455565758596061626364) (RETURN 0 64) } nonce: '0' storage: {} : balance: '1000000000000000000' code: | { (MSTORE 0 0x1122334455667788991011121314151617181920212223242526272829303132) (MSTORE 32 0x3334353637383940414243444546474849505152535455565758596061626364) (REVERT 0 64) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : balance: '1000000000000000001' storage: { "0x00": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x01": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x02": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x03": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x04": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x05": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x06": '0x1122334455667788991011120000000000000000000000000000000000000000', "0x07": '0x1122334455667788991011120000000000000000000000000000000000000000' } transaction: data: - '' gasLimit: - '400000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stReturnDataTest/tooLongReturnDataCopyFiller.yml ================================================ tooLongReturnDataCopy: _info: comment: Ori Pomerantz qbzzt1@gmail.com # When a contract ends (RETURN or REVERT), it returns a buffer. That buffer # is available either directly (written to memory specified in the CALL opcode) # or through RETURNDATACOPY. However, if you attempt in RETURNDATACOPY to read # beyond the buffer size the contract reverts. This test verifies this behavior. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentNumber: 1 currentTimestamp: 1000 currentGasLimit: 0x10000000000000 currentBaseFee: 10 pre: # Return the requested amount of data : balance: 0 code: | :yul berlin { // How many bytes to return let byteCount := calldataload(0) // Some junk data mstore(0, 0x1F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201FF) sstore(0, byteCount) // Return the result return(0x00, byteCount) } nonce: 1 storage: {} # Revert with the requested amount of data : balance: 0 code: | :yul berlin { // How many bytes to return let byteCount := calldataload(0) // Some junk data mstore(0, 0x1F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201FF) sstore(0, byteCount) // Return the result revert(0x00, byteCount) } nonce: 1 storage: {} # Call 0xC0DE or 0x0BAD and then copy return data (possibly an excessive # amount of it) : balance: 1000000000000000000 code: | :yul berlin { let lengthReturned := calldataload(0x04) let offsetCopied := calldataload(0x24) let lengthCopied := calldataload(0x44) let contract := calldataload(0x64) mstore(0, lengthReturned) // The length of the buffer to be returned is part of the calldata // for this contract. However, it is necessary to send it to the // contract we're calling (either or ) so it will know // what size of buffer to return to us let retVal := call(gas(), contract, 0, 0, 0x20, // input buffer with lengthReturned 0, 0x100) // output buffer // Copy the return data (which fails if // offsetCopied+lengthCopied > lengthReturned) returndatacopy(0x100, offsetCopied, lengthCopied) // Show that other copies of excess length work (otherwise // the goat will never die) extcodecopy(, 0,0, add(0x20,extcodesize())) calldatacopy(0,0, add(0x20,calldatasize())) codecopy(0,0, add(0x20,codesize())) // If we get here, kill the goat to show success sstore(0, 0xDEAD) } nonce: 1 storage: 0: 0x60A7 # To be overwritten : balance: 1000000000000000000000 code: '0x' nonce: 1 storage: {} transaction: data: # Parameters: # 1. The length of the returned buffer # 2. The offset for the RETURNDATACOPY opcode # 3. The length for the RETURNDATACOPY opcode # 4. The contract call. # - contract that returns a buffer # - contract that reverts with a buffer # In both cases, the returned buffer is the length specified in the first parameter # Receive an empty buffer, copy zero bytes from offset zero. - :label success :abi f(uint,uint,uint,uint) 0x00 0x00 0x00 # Receive an empty buffer, copy the first byte from it - :label fail :abi f(uint,uint,uint,uint) 0x00 0x00 0x01 # Receive sixteen bytes, copy the first eight - :label success :abi f(uint,uint,uint,uint) 0x10 0x00 0x08 # Receive sixteen bytes, copy the first sixteen - :label success :abi f(uint,uint,uint,uint) 0x10 0x00 0x10 # Receive sixteen bytes, copy the first seventeen - :label fail :abi f(uint,uint,uint,uint) 0x10 0x00 0x11 # Receive sixteen bytes, copy fifteen (except for the first one) - :label success :abi f(uint,uint,uint,uint) 0x10 0x01 0x0f # Receive sixteen bytes, copy sixteen (except for the first one) - :label fail :abi f(uint,uint,uint,uint) 0x10 0x01 0x10 # Receive sixteen bytes, copy numbers 8-15 - :label success :abi f(uint,uint,uint,uint) 0x10 0x08 0x08 # Receive sixteen bytes, copy numbers 9-16 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x09 0x08 # Receive sixteen bytes, copy numbers 16-23 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x10 0x08 # Receive sixteen bytes, copy numbers 16-31 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x10 0x10 # Receive sixteen bytes, copy numbers 32-47 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x20 0x10 # Show that REVERT behaves the same way as RETURN # Receive an empty buffer, copy zero bytes from offset zero. - :label success :abi f(uint,uint,uint,uint) 0x00 0x00 0x00 # Receive an empty buffer, copy the first byte from it - :label fail :abi f(uint,uint,uint,uint) 0x00 0x00 0x01 # Receive sixteen bytes, copy the first eight - :label success :abi f(uint,uint,uint,uint) 0x10 0x00 0x08 # Receive sixteen bytes, copy the first sixteen - :label success :abi f(uint,uint,uint,uint) 0x10 0x00 0x10 # Receive sixteen bytes, copy the first seventeen - :label fail :abi f(uint,uint,uint,uint) 0x10 0x00 0x11 # Receive sixteen bytes, copy fifteen (except for the first one) - :label success :abi f(uint,uint,uint,uint) 0x10 0x01 0x0f # Receive sixteen bytes, copy sixteen (except for the first one) - :label fail :abi f(uint,uint,uint,uint) 0x10 0x01 0x10 # Receive sixteen bytes, copy numbers 8-15 - :label success :abi f(uint,uint,uint,uint) 0x10 0x08 0x08 # Receive sixteen bytes, copy numbers 9-16 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x09 0x08 # Receive sixteen bytes, copy numbers 16-23 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x10 0x08 # Receive sixteen bytes, copy numbers 16-31 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x10 0x10 # Receive sixteen bytes, copy numbers 32-47 - :label fail :abi f(uint,uint,uint,uint) 0x10 0x20 0x10 gasLimit: - 0x1000000 nonce: 1 to: value: - 0 secretKey: "" gasPrice: 100 expect: # If we attempt to copy more than RETURNDATASIZE(), the transaction reverts # and the goat lives - indexes: data: :label fail gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: # The result we expect 0x00: 0x60A7 # If we attempt to copy RETURNDATASIZE() or less, we get to the # capraicide code and the goat dies - indexes: data: :label success gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0x00: 0xDEAD ================================================ FILE: tests/static/state_tests/stRevertTest/LoopCallsDepthThenRevert2Filler.json ================================================ { "LoopCallsDepthThenRevert2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun=Cancun=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xc1" } }, "" : { "storage" : { "0x00" : "0xc0" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (+ (SLOAD 0) 1) (CALL (GAS) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (+ (SLOAD 0) 1) (CALL (GAS) 0 0 0 0 0) }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/LoopCallsThenRevertFiller.json ================================================ { "LoopCallsThenRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x00" : "0x0352" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "//code" : "{ (JUMPDEST) [[0]] (- (SLOAD 0) 1) (CALL 50000 0 0 0 0 0) (JUMPI 0 (SLOAD 0))}", "code" : ":raw 0x5b600160005403600055600060006000600060007361c350f150600054600057", "nonce" : "0", "storage" : { "0x00" : "0x0352" } }, "" : { "balance" : "", "code" : "{ [[0]] (ADD 1 (SLOAD 0)) }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/LoopDelegateCallsDepthThenRevertFiller.json ================================================ { "LoopDelegateCallsDepthThenRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x0182" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (+ (SLOAD 0) 1) (DELEGATECALL (GAS) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (+ (SLOAD 0) 1) (DELEGATECALL (GAS) 0 0 0 0) }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/NashatyrevSuicideRevertFiller.json ================================================ { "NashatyrevSuicideRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x01" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : ":raw 0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680639c3674fc14610049578063c040622614610058575b610000565b3461000057610056610067565b005b3461000057610065610147565b005b600060405160a680610200833901809050604051809103906000f080156100005790508073ffffffffffffffffffffffffffffffffffffffff1660405180807f6628290000000000000000000000000000000000000000000000000000000000815250600301905060405180910390207c010000000000000000000000000000000000000000000000000000000090046040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018090506000604051808303816000876161da5a03f19250505050610000565b50565b3073ffffffffffffffffffffffffffffffffffffffff1660405180807f6261642829000000000000000000000000000000000000000000000000000000815250600501905060405180910390207c010000000000000000000000000000000000000000000000000000000090046040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018090506000604051808303816000876161da5a03f192505050505b56006060604052346000575b608f806100176000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806326121ff014603c575b6000565b3460005760466048565b005b3373ffffffffffffffffffffffffffffffffffffffff16ff5b5600a165627a7a723058203d1a897befde21eff26abc325fb3da2f526bbc99de1c5c857d1835f673744ebd0029a165627a7a72305820850a52b31ec4745b7af15ba3bffdb1ba17f5d9a00a5f263ee287a92b568f534c0029", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/PythonRevertTestTue201814-1430Filler.json ================================================ { "PythonRevertTestTue201814-1430": { "_info" : { "comment" : "A random test that had failed in Python ethereum implementation" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "": { "storage": {} }, "": { "storage": {} }, "": { "storage": {} }, "": { "storage": {} }, "": { "storage": {} } } } ], "pre": { "": { "code": ":raw 0x6102fa60ff60f561014873630277795afa689497edb6a665eae52f3d625249756103a55260a860fb60cb3e6102dd6103e0fd6f568a159c0cae9044d258c55b10f4d100628d29ab781df7fcebb789e2a8cdbaa9c67c42cd1ebe81716ead0e94c7216d279dd3a0b3de311596d54729287873449ccce511e6991b3dc636a178159a3d9a06227462cd9a6768ccba17c2cb06de468e95730bf78e55af17e19973f2c3f5d4c21c169890b9a9672491f91aa1e7142667060d385ed594e21b6d02b23a6c4c50e7ab6a3ef66f83a2927f9845b4ba85c4fdfbd0054a0123ad93eff4b525b0f4b08d285f36f3bcac6a985b66906c348472b7cb047bc5a02e618666f0c50eecdc11f20fc1dc41c2fd957752e55ede4e56f469f536a04d436ad418a1ca7a44c0173c10f1806ba284f9c9c7c13670005de594dec538cd56c2746b3bfdfa7683ae0df68bbcb5347d61be606ef617322e6448e3e4124dbe061257a8f486529de397f08ce92502a37b957f855818082b5b5b49e36de5a83e8a270663088571bf2fdf8f5f2961031452326fb9499741e3859928a237f5e5df84c13c6043556b1e82328f9093e64defbdd07d7774d84835800999791abc41260472d96f604d07198e859adc0b70806beae7200cf116d2b55e89ddd564abc36d900e69a68b0f0e9e4f129987288153605d7d01c42f3b109ed2bd72a6cf13500241c2a5e5c4e17ea9ed9b05ba9b57d70d63d270ece77f6ecf21d3a41ad554f79584dcab761d4c8437774cad4bb13b2bece140358df93e76c0f49abe102cd44e474ab71c0237247865fa2add74c8b2a33d6f7041c5718a2554a72662720296dff5b377b559df4558b8a5b2c9e7d15eb3947a70064f935c8fdf0a4e726f644aa31b42c10280e50ea92a366c3d060c1270c6a16a75522fbeb3d7cca702807f5217816eab9cceb9e237ee8fde4ed3a23d3ec87adb334ac1caa7e06523b0132dd615cf3fc16140d34c191617823c3a7bf47c42bc36b69cb4385463595c7f6f9ea451e05303603e0cd401e13d6ff744e2a673824d943941551704ff14df7fa8646efbb2d8abc4ac6e258e9924924b8001f8f0650d66b37411d484b18f41e77c792bd1c169fa52bbfc8af4a45f20acb0ef95db2ecbc0d4eadbbbf6732f648bd33b36336dc0faf0cf1970bcd38093a50a44fd6b253b0e74f2706239c499217b8c3263dae332e254711d5d5e7e795c998cceed14cf46977e7d3cbb35783c79ef0530c3a8ac3fd8d49f10bb0ae919fa149adead67dae035627de430622813ac6271b518733c7fb9ba628e056e0e87e029b8e5f42821d775338e6774301ecb428b3938236ee22b7d0b5edf2ad6997869f427ba0672a7168614233e85f61dae5ed4283a53f60570116dad586dce62833a62ca8c914c641f8660526101d761010761031c736333d3d55ff4611a5b631c4ea729816102566103ce6101c161014a73000000000000000000000000000000000000000663202b2ea8f4610221610106602e3e648a95029ecb72849fe0943cb9d854c7d50ad04cfdfe648e286876b8f2b53e55fe01a152c8496cbcc6997447062b734cebde04796c6452e9efc4aba5bf071cbff56208a525a8ef5f52399b4f33697bd988884f58166d734881774eff46d77bb189c89c55b1c6591f178d2d7c21bf2b023adf9bc5b8621235e3346d98d56047a3f71241fd5a24abbb0c73fc463fb8a5e67e32055696fe51258dd07526ebd87e439bcebb514ae26dc12d653a5c1263705109097ec5dcdb3918ab114985f7097fd3003b50e58fba91007825a6b800f644eaa306051808460fc3b2d8e276b2187c7b583ff29ee0b0c34f9ee57bac9ebb996402e3300ddf06c760fc5f531f746b1e2beda7a15c07f90f92422822e8d33c5d2409ea7375197f7cd6d61770eddb078206cfc7c5006cd0e97da9ec65fa4fc683da22cfaf6dfc995feb5f8386a052851fc502f32e7ef9346e3d4633def4c0a4b9be12f2cd7c646062e14ca37cfb977524f677714c3d994ea05f1997a2462fc0ab20ed2a5958f37126029b6102056102c9605d6103a1736302e83dbef4", "nonce": "0x1d", "balance": "0x845252b8509dc215", "storage": {} }, "": { "code": ":raw 0x7abee2a270429abbd3ff3b9945f72f58dcf4f8b344417a87dfa1ebd7601f5232609b6103ee61027b6101326342a46f5073632c1e2816f26101726101ec61013161012473632318d76ffa7201a0ff381bb40bb828d7781d2ef7c0fd8695f77c05465fbadf99fdffef2afd94b0e76531b6ea0d23d2332d13c20368a072644e41bc113079a6b1ebc3464527e34c26a4379f9dfe4f8e57981a9fc08558c90d537538079f1921b60fe6fa448171fec55c4c63e81171221164cf72f489a45775e83a2f5427eab647b075a910929de0a6554fc1426b49547acd8e2c770339616ce9c501fb746715dd4a20219229d0673ac055997e3bd089a6663f6dff488574195b848fbb357eb7be1fff076e997770d03b7028536103b36102846103056102db736347cfe65df4423a6b8679871dc28aa5a1399b21c86102e460476101f3605b73ffffffffffffffffffffffffffffffffffffffff6311ecd01bfa76afa8155ecd75dd05f9d7eb42fa3e79c6a2109dff2a1e5361030a6101b2fd610263605861011761027f63459d135b7300000000000000000000000000000000000000056342ce224df274e612fbe000bed18eec8345f005f537c72820d8b97360e3526b50ae523a8f7467ae14a8bd9a6aaee55862b685e32476cc6762ae2c4068cf55729540d111f44c9260e76101bc6103f33e68639458dae7ad2a9b38629ed3bb1060d861036afd610123610359636db4b55bf0626021696101775263ea8a7b3a641bcf9219191a6103be6103716101f73e74c0413cb5d609ca9a51645238e4f1f8268f973c3a0169a0b67479a345d1e700655360166101736102f2610214633ff89b317300000000000000000000000000000000000000066335adeabdf13d7ee6d218af54c3d8045447d06c726801695cfa26fdfaa6460a8685cd662855a5547f5716140ae0b1e25aeaf04ae7cf54e8aa7a22206da5a6e52bdd3ef82ad40a46815177d25811167b0a3f66a727652592924dc1291a6085d537c5da6101b1601d6103a33e752d6272a54f882460bc76407d6361c40cc56bc88a8bc960726103ec6102c16101f373635f449586f4", "nonce": "0x1d", "balance": "0x882fd85bc18c9f00", "storage": {} }, "": { "code": "", "nonce": "0x00", "balance": "0xab56295c9d120548", "storage": {} }, "": { "code": ":raw 0x601361019f6101013e6f338db2b1165b4918f178852663192a956d79a68b50eefdc639ca0b62ab4d52771db054ccc801c0666b34b3c6242bbfc5e98f20c14fb95e016718be9ad033d50e21675ff59297861847ea6a911a6a9d135e2f826dc6037d850e0db21d105b8732a34b873c7d943050b8659794f0bd3e841d35a2231e65f697f8cde1176728fa2051e87933cf66858e4e5e91baa7764fc1e9ffe4c7b15ba600e88f095989dc68f47ed704be2b99601761021563200fbd63f07e41c7f86732f4d5419b41e6887cca98e0943f141a5c66df98bd0c6d6c4cec657893afaa8ce1769c96cd0751aa76a98c8196fa8c92e70d7bda176299c91c3e7a7f05de3181109b8194387746f9ec15a6e0233f759e43360bd4e0a06e4e9f395117afcd072774ce12d13dc761016152303a683305858002a92140b678508e3a3be377d4825dbf618a393c7c061e75a8a496a33afe0f72017f2e33549e321838b083d48893f23dced4597e2e9ea08fe3f80970d6334b6c6f1fde8bcc81d03a7ccc244231cb6606dba6d06ec1c5158ef0db6994192acbd4cac6ab6ac8449d80fc2c32471946e071d9606bd390266d7f712766f4765076283ad6687450d7ab4df6f3f6ee9661014a70b802ec9d7ed96dc0b9ce7bd14b193dc1f05376d11ce19283c7f651d4d2e7c180715ff7fcbc995ea8b2766213cc517d6dad16d17f29a93220ce0ddb0a65d3d474dbc39cba5bcb3d4fcf9fef1910607d64c04511df277f522ab2475fbb2ba0720711a903dbecfa0429bf11e6e90cbb0f13d4ee050c52c87365e0216b4096186fc604fb563fa59f1263ee91d5695e407fdffe82ca1558f7876a93f3a218dd9ba6901fdea93d6be498f0b0e1874331115e31aa6fad4d87227362a9ec3e1c1be11cdb2309697bbc0c692eeadfa9161669b8aec24564487dc74f8e7d17e6a133b5dbe576838697de73f856197203ef1a3a54f7edb0dbd60f9d5274db6b5c1477169b77f0d817ed731a20db4b9e5b83d2786bffefab084a31c4afda168156612f281da0be688e5bdb1f3176ed78bc62343a7665abad6573482449e68b3acfe820993d77df5785384d51aaa0612dab5ddbf2a9bf550736ad422933878861011961023ffd608f61022d61021661036e635af7465b73ffffffffffffffffffffffffffffffffffffffff63792c6916f16ed70693587df6ccfae5218d01559bac60156102006101adfd", "nonce": "0x15", "balance": "0x5b1936a53e6e440f", "storage": {} }, "": { "code": ":raw 0x610326610100f379c940b5f2046740058558468f238b85db7f6bbe3f3d51e92a3e3268b7f7c4147541c695f376705288410b81b217e80726fb9e4c5c7b4c49eca0c1b6b97e117c16c26c9816459f38396ffc36da48d65defdc7d055cbc846c07e81cfab0fb607c6cbc968774d4de7df8e3236f581e688cc2081a96b1cad9e0609b70f4fddda49ae97714e7d325ceab23acd5f46ba15b5210474116121921a04f68f3f933b9ad91b735bf71bfe41da706499c5d47b6de1fe398cb91fdf66481cbb8661d71d457cf3cef75dabf5ea496d7012f4c56b9fe70e6c4204720e3ce66874cead08499d57a547b97d37744ce205e051f296fb116fc9e5f3c280919aff3c93c5d5cefff9a6102d86103ca6364b68c8ef07d", "nonce": "0x1d", "balance": "0x054c814f188394c8", "storage": {} } }, "env": { "currentNumber": "0x01", "currentDifficulty": "0x20000", "currentTimestamp": "0x03e8", "currentGasLimit": "0x14a0583da74c9c", "currentCoinbase": "" }, "transaction": { "secretKey": "", "gasLimit": [ "0x2857ab" ], "nonce": "0x00", "value": [ "0x254ffcc0" ], "to": "", "gasPrice": "0x0a", "data": [ ":raw 0x66a9b45d44c78cfe774333fe0c49418dd61f183d41132f5340e48ababb825a26eb0a75c0ca693a8b465121200fd21a7b4c365a65a3255278f672705e5ca0f6146fccd36a6e5b9decfb6e5096887651e829313a2cc9d5b518e25861c31ba04ed3f5a3310bd966993aa534b00785778d9545342410ce8c156d780a8cb4a65efed30aa9d6bd63c4778a134c9cb0c677ecda48aacef0c191de37e3cfdae69153747c2406995ea81bbae6a201663b9b37a6a9f597ae4f40e44e74ea92616bc2956328ced0d77412c265c2925470320e5f285d15a08a263b0a444516817c266bd51fe726677144df3c080d07dd47c4eb9e44a87541ddc5a697163260a06921033eb3542b375cd0d073dfb48f6acde07152794b5539563efff1afed3b0a6b15166526175e7184b83cc2de68df61ec5d65d1eee66ea376fcb84f2c73335db9fba49e3d40638cd7f462f1d3b315f17b8dc1f692a68b2431b166ee71a4ba159dd322b9fa5f3237dfb85d2594056102f261025b61021d6101d3631fe4bdc373ffffffffffffffffffffffffffffffffffffffff631ea09dc6f263edd580947c8177bd72d2244f7652371e3428d28bc6356c553b18d00e6b3cf60206c273abbd7763059f61940b0d19fde33f7b5a96080d25791e9ae89c718dd41c3f57b0c304fbb83978de28d23499bdd19c0472301ff527ccc9f7ed74a8dbd906b468d448fba77f38f193e3047b02e40beb08b4f11707681ef103ec1b00585a85f27227a179f15e7e97a359268b06ff34bcee23a869974fbca6e201cb16179743ac0f8c9f8603d570e26a5aad5217ebfff3140716923723efaa79b6cd87fbc9fd408d4ac5a048e43fb4e7a2b94053bf1fb7257562977725cde415738a99e1a7690cbe409744b737367dedc82e3063516c5bc57e35fcb2038306d9a3a6e46103515279ddcb9d30879e470f5dd81e1148184f62bd61ae9708ff61cee25c63694a73437a42be5043b1fde117ba383682ba0d91e0db8b29c882a044d0c8bb49056a25a66d8480df1b1ccc2564791df94f43d5802aa8f44bf70a6817ed784e5725bdc7718a54d6a567234286085240ba847d575dac25d7fc32c59999a9d38fee0d25e7c23986009c5bb022f7d28a2cab6e01a4bb37dd42ea42d5141d55f5730c7bd82bf08bff3928aea77e7153bcc4a3a53996be367ec98cb6fe85797e771d020284d4d302c8b4ebe6b28a9c64a9ae2ad6894716732f6b245e7fdc5243f79a0ae9b8d874900caa1c5796a2854ceddb00a82b4ec01b513ed61c72ce89400a06fe90a109bad6d5e028143e7552937a0136347eb71a49db0072c87bd437b9cd7b2f7e6e9f3a85875c9ede6036650f9d06d4c2e8692caf2e87043c0bf5a2359c66431acbb35dcbfc6a7b86074b99c9e6f959d8417784e5e40c854c280218c0cd4e98dc3bc44f7d651d7191ead455" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertDepth2Filler.json ================================================ { "RevertDepth2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (ADD 1 (SLOAD 0)) [[1]] (CALL 150000 0 0 0 0 0) [[2]] (CALL 150000 0 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (ADD 1 (SLOAD 0)) [[1]] (CALL 50000 0 0 0 0 0)}", "nonce" : "", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (ADD 1 (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (ADD 1 (SLOAD 0)) [[1]] (CALL 50000 0 0 0 0 0) [[2]] (GAS)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "In transaction T to A, A call B call C, then A call D calls C, D fails after calling C.", "data" : [ "" ], "gasLimit" : [ "170685", "136685" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertDepthCreateAddressCollisionFiller.json ================================================ { "RevertDepthCreateAddressCollision" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "0x60016000556000600060006000600073600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "" : { "storage" : { } } } }, { "//comment" : "OOG in subcall", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "0x60016000556000600060006000600073600035f1600155600c60045500", "nonce" : "54", "storage" : { "0x00" : "0x01", "0x04" : "0x0c" } }, "" : { "storage" : { } } } }, { "//comment" : "OOG after subcall", "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0x05", "code" : "0x60016000556000600060006000600073600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "" : { "storage" : { } } } }, { "//comment" : "double OOG", "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "0x60016000556000600060006000600073600035f1600155600c60045500", "nonce" : "54", "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "5", "code" : "{ [[0]] 1 [[1]] (CALL (CALLDATALOAD 0) 0 0 0 0 0) [[4]] 12 }", "nonce" : "54", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[2]] 8 (CREATE 0 0 0) [[3]] 12}", "nonce" : "", "storage" : { } } }, "transaction" : { "//0 data" : "Call with value to address A, then another call X, in the call X CREATE of account A, OOG -> revert call X.", "//1 data" : "d0g0 - double OOG, d0g1 - OOG inside subcall, d1g0 - OOG after subcall, d1g1 - no OOG", "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000ea60", ":raw 0x000000000000000000000000000000000000000000000000000000000001ea60" ], "gasLimit" : [ "110000", "160000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1", "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertDepthCreateOOGFiller.json ================================================ { "RevertDepthCreateOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "NO OOG", "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "nonce" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { "0x02" : "0x08", "0x03" : "0x0c" } } } }, { "//comment" : "OOG in subcall", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "shouldnotexist" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x04" : "0x0c" } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } }, { "//comment" : "OOG after subcall / double OOG", "indexes" : { "data" : [1, 0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3e180b1862f9d158abb5e519a6d8605540c23682" : { "shouldnotexist" : "1" }, "a000000000000000000000000000000000000000" : { "storage" : { } }, "b000000000000000000000000000000000000000" : { "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a000000000000000000000000000000000000000" : { "balance" : "5", "code" : "{ [[0]] 1 [[1]] (CALL (CALLDATALOAD 0) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[4]] 12 }", "nonce" : "54", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[2]] 8 (CREATE 0 0 0) [[3]] 12}", "nonce" : "", "storage" : { } } }, "transaction" : { "//data" : "Call with value to address A, then another call X, in the call X CREATE of account A, OOG -> revert call X.", "// data" : "d0g0 - double OOG, d0g1 - OOG inside subcall, d1g0 - OOG after subcall, d1g1 - no OOG", "data" : [ ":raw 0x000000000000000000000000000000000000000000000000000000000000ea60", ":raw 0x000000000000000000000000000000000000000000000000000000000001ea60" ], "gasLimit" : [ "110000", "180000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "1", "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertInCallCodeFiller.json ================================================ { "RevertInCallCode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x20", "0x02" : "0x2232" } } } } ], "pre" : { "" : { "balance" : "1000", "code" : "{ [[ 0 ]] (CALLCODE 50000 1000 0 64 0 64 ) [[ 1 ]] (RETURNDATASIZE) (RETURNDATACOPY 64 0 32) [[ 2 ]] (MLOAD 64) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 0x2232) (REVERT 0 32) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "105044" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertInCreateInInit_ParisFiller.json ================================================ { "RevertInCreateInInit_Paris" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "10", "code" : "", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "{ (seq (address) (CREATE 0 0 (lll (seq (mstore 0 0x112233) (revert 0 32)) 0)) (SSTORE 0 (RETURNDATASIZE)) (returndatacopy 0 0 32) (sstore 1 (mload 0)) (STOP) ) }" ], "gasLimit" : [ "200000" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertInDelegateCallFiller.json ================================================ { "RevertInDelegateCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01": "0x20", "0x02": "0x0a" } } } } ], "pre" : { "" : { "balance" : "1000", "code" : "{ [[ 0 ]] (DELEGATECALL 50000 0 64 0 64 ) [[ 1 ]] (RETURNDATASIZE) (RETURNDATACOPY 63 0 32) [[2]](MLOAD 63)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 32 10) (REVERT 32 32) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "105044" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertInStaticCallFiller.json ================================================ { "RevertInStaticCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000", "code" : "{ [[ 0 ]] (STATICCALL 50000 0 64 0 64 )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (REVERT 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "105044" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOnEmptyStackFiller.json ================================================ { "RevertOnEmptyStack" : { "_info" : { "comment" : "Calling a runtime code that contains only a single `REVERT` should consume all gas." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "99999980000000", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "100000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : ":raw 0xfd", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeCallsFiller.json ================================================ { "RevertOpcodeCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x02" : "0x0e" } } } }, { "//comment" : "OOG", "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x02" : "0x0e" } } } }, { "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : 2, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x02" : "0x0e" } } } }, { "indexes" : { "data" : 2, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : 3, "gas" : [0], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x01", "0x02" : "0x0e" } }, "" : { "nonce" : "0", "storage" : { "0x04" : "0x00", "0x05" : "0x0e" } } } }, { "indexes" : { "data" : 3, "gas" : [1], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x00" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x02" : "0x00" } }, "" : { "nonce" : "0", "storage" : { "0x04" : "0x00", "0x05" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[10]] (CALL 260000 (CALLDATALOAD 0) 0 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALL 50000 0 0 0 0 0) [[2]] 14 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALLCODE 50000 0 0 0 0 0) [[2]] 14 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (DELEGATECALL 50000 0 0 0 0) [[2]] 14 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALL 100000 0 0 0 0 0) [[2]] 14 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[4]] (CALL 50000 0 0 0 0 0) [[5]] 14 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[1]] 12 (REVERT 0 1) [[3]] 13 }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "460000", "83622" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeCreateFiller.json ================================================ { "RevertOpcodeCreate" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1", "storage" : { "0x00" : "0x0c", "0x01" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1", "// code" : "{ [[0]] 1 (REVERT 0 1) [[1]] 12 }", "code" : "{ (MSTORE 0 0x600160005560016000fd6011600155 ) [[1]](CREATE 1 17 15) [[0]] 12 }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x600160005560016000fe6011600155" ], "gasLimit" : [ "460000", "70000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeDirectCallFiller.json ================================================ { "RevertOpcodeDirectCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x02" : "0x0e" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[10]] (CALL 60000 (CALLDATALOAD 0) 0 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "// code" : "!!! STRANGE: CALL works, but if called from 094... it won't work. even if gas is enough. seems to be OOG.", "code" : "{ [[0]] (CALL 50000 0 0 0 0 0) [[2]] 14 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[1]] 12 (REVERT 0 1) [[3]] 13 }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000" ], "gasLimit" : [ "460000", "62912" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeFiller.json ================================================ { "RevertOpcode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "0", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "// code" : "{ [[0]] 1 (REVERT 0 1) [[1]] 11 }", "code" : ":raw 0x600160005560016000fd6011600155", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "800000", "30000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "10" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeInCallsOnNonEmptyReturnDataFiller.json ================================================ { "RevertOpcodeInCallsOnNonEmptyReturnData" : { "_info" : { "comment" : "This test checks that the returndata buffer is changed when a subcall REVERTs. In each test case, a non-empty returndata buffer is set up, and then calls into a contract that REVERTs." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x02" : "0x01" } } } }, { "indexes" : { "data" : 0, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x02" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : 2, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x02" : "0x01" } } } }, { "indexes" : { "data" : 2, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0", "storage" : { "0x05" : "0x01" } } } }, { "indexes" : { "data" : 3, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { "0x0a" : "0xff" } }, "" : { "nonce" : "0", "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0", "storage" : { "0x05" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ (CALL 0 0 0 0 0 0) [[10]] (CALL 260000 (CALLDATALOAD 0) 0 0 0 0 0)}", "nonce" : "0", "storage" : { "0x0a" : "0xff" } }, "" : { "balance" : "1", "code" : "{ (CALL 0 0 0 0 0 0) [[0]] (CALL 50000 0 0 0 0 0) [[2]] (RETURNDATASIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ (CALL 0 0 0 0 0 0) [[0]] (CALLCODE 50000 0 0 0 0 0) [[2]] (RETURNDATASIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ (CALL 0 0 0 0 0 0) [[0]] (DELEGATECALL 50000 0 0 0 0) [[2]] (RETURNDATASIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ (CALL 0 0 0 0 0 0) [[0]] (CALL 100000 0 0 0 0 0) [[2]] (RETURNDATASIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ (CALL 0 0 0 0 0 0) [[4]] (CALL 50000 0 0 0 0 0) [[5]] (RETURNDATASIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "//comment" : "Recording it's called at [[1]], and reverting. The store into [[3]] should not be reached.", "code" : "{ [[1]] 12 (REVERT 0 1) [[3]] 13 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "// comment" : "This should return 12 as a return value. This sets the returndata buffer of the caller to be 64-byte long.", "code" : "{ [1] 12 (RETURN 0 64) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "860000", "28000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeInCreateReturnsFiller.json ================================================ { "RevertOpcodeInCreateReturns" : { "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0a00000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x20" } } } } ], "pre" : { "" : { "balance" : "0x00", "code" : "{ (seq (CREATE 0 0 (lll (seq (mstore 0 0x112233) (revert 0 32)) 0)) (SSTORE 0 (RETURNDATASIZE)) (STOP) )}", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeInInitFiller.json ================================================ { "RevertOpcodeInInit" : { "_info" : { "comment" : "TODO revertOpcodeInInit followed by OOG" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{ [[0]] 1 (REVERT 0 1) [[1]] 12 }", "data" : [ ":raw 0x600160005560016000fd6011600155" ], "gasLimit" : [ "160000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0", "10" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeMultipleSubCallsFiller.json ================================================ { "RevertOpcodeMultipleSubCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x0c", "0x05" : "0x0c", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x0c", "0x05" : "0x0c", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : 2, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x0c", "0x05" : "0x0c", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : 3, "gas" : [0,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x0c", "0x05" : "0x0c", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : [1,2], "gas" : 2, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x00", "0x05" : "0x00", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : 0, "gas" : [2], "value" : [1,0] }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x0c", "0x05" : "0x0c", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } }, { "indexes" : { "data" : -1, "gas" : [1,3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "nonce" : "0x00", "storage" : { "0x04" : "0x00", "0x05" : "0x00", "0x0a" : "0x00", "0x0b" : "0x00", "0x0c" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALL 260000 (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) }", "nonce" : "0", "storage" : {} }, "" : { "balance" : "0", "//0 code" : "simple calls", "//1 code" : "call -> callA-> revert | callB -> revert | some code * and OOG scenarios", "code" : "{ [[10]](CALL 50000 0 0 0 0 0) [[11]](CALL 50000 0 0 0 0 0) [[12]](CALL 50000 0 0 0 0 0) [[4]]12 [[5]]12 }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[10]](CALLCODE 50000 0 0 0 0 0) [[11]](CALLCODE 50000 0 0 0 0 0) [[12]](CALLCODE 50000 0 0 0 0 0) [[4]]12 [[5]]12 }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[10]](DELEGATECALL 50000 0 0 0 0) [[11]](DELEGATECALL 50000 0 0 0 0) [[12]](DELEGATECALL 50000 0 0 0 0) [[4]]12 [[5]]12 }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[10]](CALL 50000 0 0 0 0 0) [[11]](DELEGATECALL 50000 0 0 0 0) [[12]](CALLCODE 50000 0 0 0 0 0) [[4]]12 [[5]]12 }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[1]] 12 (REVERT 0 1) }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[2]] 12 (REVERT 0 1) }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[3]] 12 (REVERT 0 1) }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "800000", "126200", "160000", "50000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "10" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeReturnFiller.json ================================================ { "RevertOpcodeReturn" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x726576657274206d657373616765" } }, "" : { "storage" : { } } } }, { "indexes" : { "data" : [1,2,3,4,5], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[1]](CALL 150000 (CALLDATALOAD 0) 0 0 0 0 32) [[2]] (MLOAD 0) }", "nonce" : "", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 0x72657665727465642064617461) (MSTORE 0 0x726576657274206d657373616765) (REVERT 0 32) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 0x72657665727465642064617461) (MSTORE 0 0x726576657274206d657373616765) (REVERT 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 0x72657665727465642064617461) (MSTORE 0 0x726576657274206d657373616765) (REVERT 0 0xfffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 0x72657665727465642064617461) (MSTORE 0 0x726576657274206d657373616765) (REVERT 0x0100 0x00) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 0x72657665727465642064617461) (MSTORE 0 0x726576657274206d657373616765) (REVERT 0x01 0x00) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 0 0x72657665727465642064617461) (MSTORE 0 0x726576657274206d657373616765) (REVERT 0xfffffffffffffffffffffffffffff 0x00) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "800000", "80000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertOpcodeWithBigOutputInInitFiller.json ================================================ { "RevertOpcodeWithBigOutputInInit" : { "_info" : { "comment" : "A REVERT with a big output should not be confused with a big code deployment. This test contains a REVERT in a contract init code that returns a big returndata." }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{ [[0]] 1 (REVERT 0 24600) [[1]] 12 }", "data" : [ ":raw 0x600160005560016000fd6011600155" ], "gasLimit" : [ "1600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0", "10" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrecompiledTouchExactOOG_ParisFiller.json ================================================ { "RevertPrecompiledTouchExactOOG_Paris" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "DATA 0-7 - precompiles CALL, 8-15 - DELEGATECALL, 16-23 - CALLCODE, 24-31 - STATICCALL", "indexes" : { "data" : [0,8,16,24], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [1,9,17,25], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [2,10,18,26], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [3,11,19,27], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [4,12,20,28], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [5,13,21,29], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [6,14,22,30], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [7,15,23,31], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "//comment" : "DATA 0-7 - precompiles CALL, 8-15 - DELEGATECALL, 16-23 - CALLCODE, 24-31 - STATICCALL", "indexes" : { "data" : [8,16], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [0,24], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [9,17], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [1,25], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [10,18], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [2,26], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [11,19], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [3,27], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [12,20], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [4,28], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [13,21], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [5,29], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [14,22], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [6,30], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [15,23], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [7,31], "gas" : 2, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} }, { "indexes" : { "data" : [7,31], "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }} } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 (CALLDATALOAD 32) 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALL precompiles and OOG", "balance" : "0", "code" : "{ (CALL (GAS) (CALLDATASIZE) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "DELEGATECALL precompiles and OOG", "balance" : "0", "code" : "{ (DELEGATECALL (GAS) (CALLDATASIZE) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALLCODE precompiles and OOG", "balance" : "0", "code" : "{ (CALLCODE (GAS) (CALLDATASIZE) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "STATICCALL precompiles and OOG", "balance" : "0", "code" : "{ (STATICCALL (GAS) (CALLDATASIZE) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007", ":raw 0x00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007", ":raw 0x00000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007", ":raw 0x00000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007", ":raw 0x00000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008" ], "gasLimit" : [ "22500", "120000", "69000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrecompiledTouch_ParisFiller.json ================================================ { "RevertPrecompiledTouch_Paris" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,3], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" } } }, { "indexes" : { "data" : [1,2], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" }, "" : { "nonce" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALL precompiles and OOG", "balance" : "0", "code" : "{ (CALL 50000 1 0 0 0 0 0) (CALL 50000 2 0 0 0 0 0) (CALL 50000 3 0 0 0 0 0) (CALL 50000 4 0 0 0 0 0) (CALL 50000 5 0 0 0 0 0) (CALL 50000 6 0 0 0 0 0) (CALL 50000 7 0 0 0 0 0) (CALL 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "DELEGATECALL precompiles and OOG", "balance" : "0", "code" : "{ (DELEGATECALL 50000 1 0 0 0 0) (DELEGATECALL 50000 2 0 0 0 0) (DELEGATECALL 50000 3 0 0 0 0) (DELEGATECALL 50000 4 0 0 0 0) (DELEGATECALL 50000 5 0 0 0 0) (DELEGATECALL 50000 6 0 0 0 0) (DELEGATECALL 50000 7 0 0 0 0) (DELEGATECALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALLCODE precompiles and OOG", "balance" : "0", "code" : "{ (CALLCODE 50000 1 0 0 0 0 0) (CALLCODE 50000 2 0 0 0 0 0) (CALLCODE 50000 3 0 0 0 0 0) (CALLCODE 50000 4 0 0 0 0 0) (CALLCODE 50000 5 0 0 0 0 0) (CALLCODE 50000 6 0 0 0 0 0) (CALLCODE 50000 7 0 0 0 0 0) (CALLCODE 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "STATICCALL precompiles and OOG", "balance" : "0", "code" : "{ (STATICCALL 50000 1 0 0 0 0) (STATICCALL 50000 2 0 0 0 0) (STATICCALL 50000 3 0 0 0 0) (STATICCALL 50000 4 0 0 0 0) (STATICCALL 50000 5 0 0 0 0) (STATICCALL 50000 6 0 0 0 0) (STATICCALL 50000 7 0 0 0 0) (STATICCALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrecompiledTouch_nonceFiller.json ================================================ { "RevertPrecompiledTouch_nonce" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALL precompiles and OOG", "balance" : "0", "code" : "{ (CALL 50000 1 0 0 0 0 0) (CALL 50000 2 0 0 0 0 0) (CALL 50000 3 0 0 0 0 0) (CALL 50000 4 0 0 0 0 0) (CALL 50000 5 0 0 0 0 0) (CALL 50000 6 0 0 0 0 0) (CALL 50000 7 0 0 0 0 0) (CALL 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "DELEGATECALL precompiles and OOG", "balance" : "0", "code" : "{ (DELEGATECALL 50000 1 0 0 0 0) (DELEGATECALL 50000 2 0 0 0 0) (DELEGATECALL 50000 3 0 0 0 0) (DELEGATECALL 50000 4 0 0 0 0) (DELEGATECALL 50000 5 0 0 0 0) (DELEGATECALL 50000 6 0 0 0 0) (DELEGATECALL 50000 7 0 0 0 0) (DELEGATECALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALLCODE precompiles and OOG", "balance" : "0", "code" : "{ (CALLCODE 50000 1 0 0 0 0 0) (CALLCODE 50000 2 0 0 0 0 0) (CALLCODE 50000 3 0 0 0 0 0) (CALLCODE 50000 4 0 0 0 0 0) (CALLCODE 50000 5 0 0 0 0 0) (CALLCODE 50000 6 0 0 0 0 0) (CALLCODE 50000 7 0 0 0 0 0) (CALLCODE 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "STATICCALL precompiles and OOG", "balance" : "0", "code" : "{ (STATICCALL 50000 1 0 0 0 0) (STATICCALL 50000 2 0 0 0 0) (STATICCALL 50000 3 0 0 0 0) (STATICCALL 50000 4 0 0 0 0) (STATICCALL 50000 5 0 0 0 0) (STATICCALL 50000 6 0 0 0 0) (STATICCALL 50000 7 0 0 0 0) (STATICCALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrecompiledTouch_noncestorageFiller.json ================================================ { "RevertPrecompiledTouch_noncestorage" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALL precompiles and OOG", "balance" : "0", "code" : "{ (CALL 50000 1 0 0 0 0 0) (CALL 50000 2 0 0 0 0 0) (CALL 50000 3 0 0 0 0 0) (CALL 50000 4 0 0 0 0 0) (CALL 50000 5 0 0 0 0 0) (CALL 50000 6 0 0 0 0 0) (CALL 50000 7 0 0 0 0 0) (CALL 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "DELEGATECALL precompiles and OOG", "balance" : "0", "code" : "{ (DELEGATECALL 50000 1 0 0 0 0) (DELEGATECALL 50000 2 0 0 0 0) (DELEGATECALL 50000 3 0 0 0 0) (DELEGATECALL 50000 4 0 0 0 0) (DELEGATECALL 50000 5 0 0 0 0) (DELEGATECALL 50000 6 0 0 0 0) (DELEGATECALL 50000 7 0 0 0 0) (DELEGATECALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALLCODE precompiles and OOG", "balance" : "0", "code" : "{ (CALLCODE 50000 1 0 0 0 0 0) (CALLCODE 50000 2 0 0 0 0 0) (CALLCODE 50000 3 0 0 0 0 0) (CALLCODE 50000 4 0 0 0 0 0) (CALLCODE 50000 5 0 0 0 0 0) (CALLCODE 50000 6 0 0 0 0 0) (CALLCODE 50000 7 0 0 0 0 0) (CALLCODE 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "STATICCALL precompiles and OOG", "balance" : "0", "code" : "{ (STATICCALL 50000 1 0 0 0 0) (STATICCALL 50000 2 0 0 0 0) (STATICCALL 50000 3 0 0 0 0) (STATICCALL 50000 4 0 0 0 0) (STATICCALL 50000 5 0 0 0 0) (STATICCALL 50000 6 0 0 0 0) (STATICCALL 50000 7 0 0 0 0) (STATICCALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrecompiledTouch_storage_ParisFiller.json ================================================ { "RevertPrecompiledTouch_storage_Paris" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,3], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10" }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : [1,2], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALL precompiles and OOG", "balance" : "0", "code" : "{ (CALL 50000 1 0 0 0 0 0) (CALL 50000 2 0 0 0 0 0) (CALL 50000 3 0 0 0 0 0) (CALL 50000 4 0 0 0 0 0) (CALL 50000 5 0 0 0 0 0) (CALL 50000 6 0 0 0 0 0) (CALL 50000 7 0 0 0 0 0) (CALL 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "DELEGATECALL precompiles and OOG", "balance" : "0", "code" : "{ (DELEGATECALL 50000 1 0 0 0 0) (DELEGATECALL 50000 2 0 0 0 0) (DELEGATECALL 50000 3 0 0 0 0) (DELEGATECALL 50000 4 0 0 0 0) (DELEGATECALL 50000 5 0 0 0 0) (DELEGATECALL 50000 6 0 0 0 0) (DELEGATECALL 50000 7 0 0 0 0) (DELEGATECALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "CALLCODE precompiles and OOG", "balance" : "0", "code" : "{ (CALLCODE 50000 1 0 0 0 0 0) (CALLCODE 50000 2 0 0 0 0 0) (CALLCODE 50000 3 0 0 0 0 0) (CALLCODE 50000 4 0 0 0 0 0) (CALLCODE 50000 5 0 0 0 0 0) (CALLCODE 50000 6 0 0 0 0 0) (CALLCODE 50000 7 0 0 0 0 0) (CALLCODE 50000 8 0 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "//comment" : "STATICCALL precompiles and OOG", "balance" : "0", "code" : "{ (STATICCALL 50000 1 0 0 0 0) (STATICCALL 50000 2 0 0 0 0) (STATICCALL 50000 3 0 0 0 0) (STATICCALL 50000 4 0 0 0 0) (STATICCALL 50000 5 0 0 0 0) (STATICCALL 50000 6 0 0 0 0) (STATICCALL 50000 7 0 0 0 0) (STATICCALL 50000 8 0 0 0 0) [[1]] (GAS) [[2]] (GAS) [[3]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundCallFiller.json ================================================ { "RevertPrefoundCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALL 50000 0 0 32 0 32) [[1]]12 }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "94000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundCallOOGFiller.json ================================================ { "RevertPrefoundCallOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALL 50000 0 0 32 0 32) [[1]]12 [[2]]12 }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "63000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundEmptyCallOOG_ParisFiller.json ================================================ { "RevertPrefoundEmptyCallOOG_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALL 50000 0 0 32 0 32) [[1]]12 [[2]]12 }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "63000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundEmptyCall_ParisFiller.json ================================================ { "RevertPrefoundEmptyCall_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10", "nonce" : "0" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CALL 50000 0 0 32 0 32) [[1]]12 }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "94000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundEmptyOOG_ParisFiller.json ================================================ { "RevertPrefoundEmptyOOG_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CREATE 0 0 32) (KECCAK256 0x00 0x2fffff) }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "930000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundEmpty_ParisFiller.json ================================================ { "RevertPrefoundEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "7db299e0885c85039f56fa504a13dd8ce8a56aa7" : { "balance" : "10", "code" : "", "nonce" : "1", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "7db299e0885c85039f56fa504a13dd8ce8a56aa7" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "a000000000000000000000000000000000000000" : { "balance" : "1", "code" : "{ [[0]] (CREATE 0 0 32) [[1]]12 }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "940000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundFiller.json ================================================ { "RevertPrefound" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "7db299e0885c85039f56fa504a13dd8ce8a56aa7" : { "balance" : "1", "code" : "", "nonce" : "1", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "7db299e0885c85039f56fa504a13dd8ce8a56aa7" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "a000000000000000000000000000000000000000" : { "balance" : "1", "code" : "{ [[0]] (CREATE 0 0 32) [[1]]12}", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "1040000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertPrefoundOOGFiller.json ================================================ { "RevertPrefoundOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (CREATE 0 0 32) (KECCAK256 0x00 0x2fffff) }", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "so X has nothing but the balance Transaction calls A A creates X A went OOG", "data" : [ "" ], "gasLimit" : [ "930000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertSubCallStorageOOG2Filler.json ================================================ { "RevertSubCallStorageOOG2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "nonce" : "0", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "nonce" : "0", "storage" : { "0x00" : "0x0d", "0x01" : "0x0e" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : 1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "//0 code" : "contract A {", "//1 code" : " int s;", "//2 code" : " int s2;", "//3 code" : " function run() returns (bool){", "//4 code" : " stor();", "//5 code" : " s = 13;", "//6 code" : " s2 = 14;", "//7 code" : " }", "//8 code" : " function stor() {", "//9 code" : " s = 12;", "//a code" : " }", "//b code" : "}", "code" : ":raw 0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b28175c4146046578063c0406226146052575b6000565b3460005760506076565b005b34600057605c6081565b604051808215151515815260200191505060405180910390f35b600c6000819055505b565b600060896076565b600d600081905550600e6001819055505b905600a165627a7a72305820b7c6987c21e63fed8a74d899557744a3be8d3fda191ce0f56cf261d6b860f6b40029", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "contract A calls itself. In the sub-call, storage is modified, the calls returns successfully. After that, storage is modified again and then an exception occurs. 0xc0406226 == sha(run())", "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "61500", "181000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/RevertSubCallStorageOOGFiller.json ================================================ { "RevertSubCallStorageOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "nonce" : "0", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0d", "0x02" : "0x0e" } } } }, { "indexes" : { "data" : -1, "gas" : [0,1], "value" : 1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "//0 code" : "contract A {", "//1 code" : " int s;", "//2 code" : " int s2;", "//3 code" : " int s3;", "//4 code" : " function run() returns (bool){", "//5 code" : " stor();", "//6 code" : " s2 = 13;", "//7 code" : " s3 = 14;", "//8 code" : " }", "//9 code" : " function stor() {", "//a code" : " s = 12;", "//b code" : " }", "//c code" : "}", "code" : ":raw 0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b28175c4146046578063c0406226146052575b6000565b3460005760506076565b005b34600057605c6081565b604051808215151515815260200191505060405180910390f35b600c6000819055505b565b600060896076565b600d600181905550600e600281905550600190505b905600a165627a7a723058202a8a75d7d795b5bcb9042fb18b283daa90b999a11ddec892f548732235342eb60029", "nonce" : "", "storage" : { } } }, "transaction" : { "// data" : "contract A calls itself. In the sub-call, storage is modified, the calls returns successfully. After that, storage is modified again and then an exception occurs. 0xc0406226 == sha(run())", "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "81000", "181000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/TouchToEmptyAccountRevert2_ParisFiller.json ================================================ { "TouchToEmptyAccountRevert2_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](CALL 130000 0 0 0 0 0) [[1]](CALL 130000 0 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[2]](CALL 130000 0 0 0 0 0) (KECCAK256 0x00 0x2fffff) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/TouchToEmptyAccountRevert3_ParisFiller.json ================================================ { "TouchToEmptyAccountRevert3_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](CALL 130000 0 0 0 0 0) [[1]](CALL 130000 0 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[2]](CALL 100000 0 0 0 0 0) (KECCAK256 0x00 0x2fffff) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/TouchToEmptyAccountRevert_ParisFiller.json ================================================ { "TouchToEmptyAccountRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](CALL 30000 0 0 0 0 0) [[2]] 1 }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[1]](CALL 30000 0 0 0 0 0) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "70000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stRevertTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stRevertTest/costRevertFiller.yml ================================================ # Check how much gas is deducted by various types of revert # The REVERT opcode has a decent cost # Erroring out costs all the available gas costRevert: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # REVERT opcode 0000000000000000000000000000000000001000: balance: '0x0ba1a9ce0ba1a9ce' code: | { (revert 0 0x10) } nonce: '0' storage: {} # Out of gas 0000000000000000000000000000000000001001: balance: '0x0ba1a9ce0ba1a9ce' code: | { (while 1 (sha3 0 0x1000000)) } nonce: '0' storage: {} # Extreme out of gas (gas cost of an opcode > 2^64) 0000000000000000000000000000000000001002: balance: '0x0ba1a9ce0ba1a9ce' code: | { (sha3 0 (- 0 1)) } nonce: '0' storage: {} # The next invalid states are difficult/impossible to do in LLL # so they use the assembled version of contract 0x1001, except change the # last part from (revert 0 0x10) to whatever is needed # Invalid opcode 0000000000000000000000000000000000001003: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x610103600155600060006000600061dead6175305a03f450BA nonce: '0' storage: {} # Jump to a non jumpdest (pc=0, which is a PUSH2) 0000000000000000000000000000000000001004: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x610104600155600060006000600061dead6175305a03f450600056 nonce: '0' storage: {} # Stack underflow 0000000000000000000000000000000000001005: balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x1000 nonce: '0' storage: {} # Stack overflow 0000000000000000000000000000000000001006: # The code that does the overflow: # 0 5B JUMPDEST # 1 58 PC # 2 6004 PUSH1 4 # 4 58 PC # 5 03 SUB # 6 56 JUMP balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x5b586004580356 nonce: '0' storage: {} CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC: balance: '0x0ba1a9ce0ba1a9ce' code: | { (if (= $36 0) { ; CALL [0x00] (gas) ; Leave us some gas even if the call takes all of it (call (- (gas) 30000) $4 0 0 0 0 0) [0x20] (gas) ; Opcodes between the two gas measurements cost 42 gas ; 0-1 GAS 2 0 79978808 ; 1-1 PUSH1 3 2 79978806 ; 2-1 MSTORE 6 5 79978803 ; 3-1 PUSH1 3 11 79978797 ; 4-1 PUSH1 3 14 79978794 ; 5-1 PUSH1 3 17 79978791 ; 6-1 PUSH1 3 20 79978788 ; 7-1 PUSH1 3 23 79978785 ; 8-1 PUSH1 3 26 79978782 ; 9-1 CALLDATALOAD 3 29 79978779 ; 10-1 PUSH2 3 38 79978770 ; 11-1 GAS 2 41 79978767 ; 12-1 SUB 3 43 79978765 ; ; The call goes here, and the cost varies based ; on what the call does ; ; 17-1 POP 2 24761 79954047 ; Calculate gas cost [[0]] (- @0x00 @0x20 42) } 0) (if (= $36 1) { ; DELEGATECALL [0x00] (gas) ; Leave us some gas even if the call takes all of it (delegatecall (- (gas) 30000) $4 0 0 0 0) [0x20] (gas) ; Opcodes between the two gas measurements cost 39 gas, ; no need to push the value so one less parameter ; Calculate gas cost [[0]] (- @0x00 @0x20 39) } 0) (if (= $36 2) { ; STATICCALL [0x00] (gas) ; Leave us some gas even if the call takes all of it (staticcall (- (gas) 30000) $4 0 0 0 0) [0x20] (gas) ; Opcodes between the two gas measurements cost 39 gas, ; no need to push the value so one less parameter ; Calculate gas cost [[0]] (- @0x00 @0x20 39) } 0) (if (= $36 3) { ; CALLCODE [0x00] (gas) ; Leave us some gas even if the call takes all of it (callcode (- (gas) 30000) $4 0 0 0 0 0) [0x20] (gas) ; Calculate gas cost [[0]] (- @0x00 @0x20 42) } 0) ; If the gas cost is above 0x04000000, assume it means "all the gas" [[0]] (if (> @@0 0x04000000) 0xFFFFFF @@0) } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: # CALL - :label revert :abi f(uint,uint) 0x1000 0 - :label outOfGas :abi f(uint,uint) 0x1001 0 - :label xtremeOOG :abi f(uint,uint) 0x1002 0 - :label badOpcode :abi f(uint,uint) 0x1003 0 - :label jumpBadly :abi f(uint,uint) 0x1004 0 - :label stackUnder :abi f(uint,uint) 0x1005 0 - :label stackOver :abi f(uint,uint) 0x1006 0 # DELEGATECALL - :label revert :abi f(uint,uint) 0x1000 1 - :label outOfGas :abi f(uint,uint) 0x1001 1 - :label xtremeOOG :abi f(uint,uint) 0x1002 1 - :label badOpcode :abi f(uint,uint) 0x1003 1 - :label jumpBadly :abi f(uint,uint) 0x1004 1 - :label stackUnder :abi f(uint,uint) 0x1005 1 - :label stackOver :abi f(uint,uint) 0x1006 1 # STATICCALL - :label revert :abi f(uint,uint) 0x1000 2 - :label outOfGas :abi f(uint,uint) 0x1001 2 - :label xtremeOOG :abi f(uint,uint) 0x1002 2 - :label badOpcode :abi f(uint,uint) 0x1003 2 - :label jumpBadly :abi f(uint,uint) 0x1004 2 - :label stackUnder :abi f(uint,uint) 0x1005 2 - :label stackOver :abi f(uint,uint) 0x1006 2 # CALLCODE - :label revert :abi f(uint,uint) 0x1000 3 - :label outOfGas :abi f(uint,uint) 0x1001 3 - :label xtremeOOG :abi f(uint,uint) 0x1002 3 - :label badOpcode :abi f(uint,uint) 0x1003 3 - :label jumpBadly :abi f(uint,uint) 0x1004 3 - :label stackUnder :abi f(uint,uint) 0x1005 3 - :label stackOver :abi f(uint,uint) 0x1006 3 gasLimit: - '80000000' gasPrice: '10' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: - indexes: data: - :label revert gas: !!int -1 value: !!int -1 network: - '>=Cancun=Cancun: balance: '0x0ba1a9ce0ba1a9ce' code: | { [[2]] 0x60A7 } nonce: '0' storage: {} # REVERT opcode : balance: '0x0ba1a9ce0ba1a9ce' code: | { [[1]] 0x1000 (delegatecall (- (gas) 30000) 0xDEAD 0 0 0 0) (revert 0 0x10) } nonce: '0' storage: {} # Out of gas : balance: '0x0ba1a9ce0ba1a9ce' code: | { [[1]] 0x1001 (delegatecall (- (gas) 30000) 0xDEAD 0 0 0 0) (while 1 (sha3 0 0x1000000)) } nonce: '0' storage: {} # Extreme out of gas (gas cost of an opcode > 2^64) : balance: '0x0ba1a9ce0ba1a9ce' code: | { [[1]] 0x1002 (delegatecall (- (gas) 30000) 0xDEAD 0 0 0 0) (sha3 0 (- 0 1)) } nonce: '0' storage: {} # The next invalid states are difficult/impossible to do in LLL # so they use the assembled version of contract 0x1001, except change the # last part from (revert 0 0x10) to whatever is needed # Invalid opcode : balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x610103600155600060006000600061dead6175305a03f450BA nonce: '0' storage: {} # Jump to a non jumpdest (pc=0, which is a PUSH2) : balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x610104600155600060006000600061dead6175305a03f450600056 nonce: '0' storage: {} # Stack underflow : balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x610105600155600060006000600061dead6175305a03f450010101 nonce: '0' storage: {} # Stack overflow : # The code that does the overflow: # n 5B JUMPDEST # n+1 58 PC # n+2 6004 PUSH1 4 # n+4 58 PC # n+5 03 SUB # n+6 56 JUMP balance: '0x0ba1a9ce0ba1a9ce' code: :raw 0x610106600155600060006000600061dead6175305a03f4505b586004580356 nonce: '0' storage: {} : balance: '0x0ba1a9ce0ba1a9ce' code: | { [[0]] 0x60A7 (delegatecall (gas) (+ 0x1000 $4) 0 0 0 0) } nonce: '0' storage: {} : balance: 0x100000000000 code: '0x' nonce: '0' storage: {} transaction: data: - :label revert :abi f(uint) 0 - :label outOfGas :abi f(uint) 1 - :label xtremeOOG :abi f(uint) 2 - :label badOpcode :abi f(uint) 3 - :label jumpBadly :abi f(uint) 4 - :label stackUnder :abi f(uint) 5 - :label stackOver :abi f(uint) 6 gasLimit: - '16777216' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: - :label revert - :label outOfGas - :label xtremeOOG - :label badOpcode - :label jumpBadly - :label stackUnder - :label stackOver gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : storage: 0: 0x60A7 # CCCCCCC changes state 1: 0x00 # The contract that reverted does not 2: 0x00 # Neither does a contract called by the reverter ================================================ FILE: tests/static/state_tests/stSLoadTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSLoadTest/sloadGasCostFiller.json ================================================ { "sloadGasCost": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "2100" } } } } ], "pre": { "": { "balance": "", "//code": "record the gas, prep and run the operation, then record the gas again. Drop output, subtract 5 for GAS and DUP1, what is left is the cost of the operation, store in storage 0x01.", "code": "(asm GAS DUP1 SLOAD GAS SWAP1 POP SWAP1 SUB 5 SWAP1 SUB 0x01 SSTORE)", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["100000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/SstoreCallToSelfSubRefundBelowZeroFiller.json ================================================ { "SstoreCallToSelfSubRefundBelowZero": { "_info": { "comment": "Test where accnt has slot 1 value of '2', is cleared, then calls itself and overwrites with '3', causing a refund-deduction in second call context" }, "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "0x1000000000", "currentNumber": "0x01", "currentTimestamp": "0x03e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x01" }, "" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { "0x01" : "0x03" } } } } ], "pre": { "": { "balance": "0x00", "code": ":raw 0x3330146015576000600155600080808080305af1005b600360015500", "nonce": "0x00", "storage": { "0x01": "0x0000000000000000000000000000000000000000000000000000000000000002" } }, "": { "balance": "0xffffffffffffffff", "code": "", "nonce": "0x00", "storage": {} } }, "transaction": { "data": [ "0x" ], "gasLimit": [ "0x241eb2" ], "gasPrice": "0x0a", "nonce": "0x00", "secretKey": "", "to": "", "value": [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSStoreTest/sstoreGasFiller.yml ================================================ # Check the gas cost of sstore in different circumstances sstoreGas: _info: comment: Ori Pomerantz qbzzt1@gmail.com env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" pre: : balance: '0x0ba1a9ce0ba1a9ce' code: | :yul berlin { // Use storage of 0x1000 and above for gas figures let storageLoc := 0x1000 // Gas spent on the measurement (two PUSHs, GAS, and SWAPs as // needed for the variables) let measureGas := 8 let gas0, gas1 // Cold storage, non-zero to non-zero gas0 := gas() sstore(0, 0xBEEF) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Warm storage, non-zero to non-zero gas0 := gas() sstore(0, 0xDEADBEEF) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Warm storage, non-zero to zero gas0 := gas() sstore(0, 0) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Warm storage, zero to zero gas0 := gas() sstore(0, 0) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Warm storage, zero to non-zero gas0 := gas() sstore(0, 0x1234) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Cold storage, non-zero to zero gas0 := gas() sstore(1, 0) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Cold storage, zero to non-zero gas0 := gas() sstore(2, 0x60A7) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Cold storage, zero to zero gas0 := gas() sstore(3, 0) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Warm storage, zero to non-zero (cell started as zero) gas0 := gas() sstore(3, 0x60A7) gas1 := gas() sstore(storageLoc, sub(sub(gas0, gas1), measureGas)) storageLoc := add(storageLoc, 1) // Cleanup sstore(0, 0) sstore(1, 0) sstore(2, 0) sstore(3, 0) } nonce: 1 storage: 0: 0x60A7 1: 0x60A7 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: 1 storage: {} transaction: data: - 0x gasLimit: - 16777216 gasPrice: 10 nonce: 1 to: value: - 0 secretKey: '' expect: - network: - '>=Cancun' result: : storage: 0x1000: 5000 # Non zero to non zero, cold storage 0x1001: 100 # Non zero to non zero, warm storage 0x1002: 100 # Non zero to zero, warm storage 0x1003: 100 # Zero to zero, warm storage 0x1004: 100 # Zero to non zero, warm storage 0x1005: 5000 # Non zero to zero, cold storage 0x1006: 22100 # Zero to non zero, cold storage 0x1007: 2200 # Zero to zero, cold storage 0x1008: 20000 # Zero to non-zero, warm storage that started as zero ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0to0Filler.json ================================================ { "sstore_0to0" : { "_info" : { "comment" : "change 0 -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xcd47252107ce09ad27592121f5b5e3e30c4ce2db" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0to0to0Filler.json ================================================ { "sstore_0to0to0" : { "_info" : { "comment" : "change 0 -> 0 -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x0bdfb5bb25de41df5ef3e68904843c7a7b92d35f" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 0 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 0 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0to0toXFiller.json ================================================ { "sstore_0to0toX" : { "_info" : { "comment" : "change 0 -> 0 -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x4b7e4a91b95b23146401605d2adce6ab6ffd64e1" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0toXFiller.json ================================================ { "sstore_0toX" : { "_info" : { "comment" : "change 0 -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xcd47252107ce09ad27592121f5b5e3e30c4ce2db" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0toXto0Filler.json ================================================ { "sstore_0toXto0" : { "_info" : { "comment" : "change 0 -> X -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x7564c2d690ab324d8fa20707f2bbdcff4367bb92" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0toXto0toXFiller.json ================================================ { "sstore_0toXto0toX" : { "_info" : { "comment" : "change 0 -> X -> 0 -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xcacdb18e817dcdf3677f6f905a75474af3b8693c" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 0) (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0toXtoXFiller.json ================================================ { "sstore_0toXtoX" : { "_info" : { "comment" : "change 0 -> X -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xf797d87eb948007fd777404ef459196b099d3ebe" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 1 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 1 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_0toXtoYFiller.json ================================================ { "sstore_0toXtoY" : { "_info" : { "comment" : "change 0 -> X -> Y" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xef24be216c6eaaade3b2496281d7b66fc2669f03" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 1 }", "nonce" : "", "storage" : { } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 1 }", "nonce" : "", "storage" : { } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_Xto0Filler.json ================================================ { "sstore_Xto0" : { "_info" : { "comment" : "change X -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x00" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x7564c2d690ab324d8fa20707f2bbdcff4367bb92" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "3000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_Xto0to0Filler.json ================================================ { "sstore_Xto0to0" : { "_info" : { "comment" : "change X -> 0 -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xa3febbc9c8c7e91ba2c2bc7cd8b426240c8d6d95" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_Xto0toXFiller.json ================================================ { "sstore_Xto0toX" : { "_info" : { "comment" : "change X -> 0 -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xeedfcf2cf4289ff428de4801d7cb0554e27809f3" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_Xto0toXto0Filler.json ================================================ { "sstore_Xto0toXto0" : { "_info" : { "comment" : "change X -> 0 -> X -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x00" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xa26b643c4ba8272d24f60806a37b20f255620586" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_Xto0toYFiller.json ================================================ { "sstore_Xto0toY" : { "_info" : { "comment" : "change X -> 0 -> Y" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x7123afcd1c327c946e05b4fb8aea10ad0f85cb52" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x02" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 0 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 0) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoXFiller.json ================================================ { "sstore_XtoX" : { "_info" : { "comment" : "change X -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xf797d87eb948007fd777404ef459196b099d3ebe" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "3000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoXto0Filler.json ================================================ { "sstore_XtoXto0" : { "_info" : { "comment" : "change X -> X -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x01b59db2b74b93797420b1a86a28fe35f1e7d0dd" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoXtoXFiller.json ================================================ { "sstore_XtoXtoX" : { "_info" : { "comment" : "change X -> X -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xba3394a0586b8419b4cf72c7d0f7e75a55a703f8" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoXtoYFiller.json ================================================ { "sstore_XtoXtoY" : { "_info" : { "comment" : "change X -> X -> Y" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x6ab22377d181d9f2d8b5bffc62ac497abbd7cfc5" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x02" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 2) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 2) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoYFiller.json ================================================ { "sstore_XtoY" : { "_info" : { "comment" : "change X -> Y" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x02" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x7e6ef1efbe92ad9adcfd8c92ba7932c904d03735" : { "storage" : { "0x00" : "0x02", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "3000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoYto0Filler.json ================================================ { "sstore_XtoYto0" : { "_info" : { "comment" : "change X -> Y -> 0" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x96606e69ee07f3ba565d1f25edea6c691a780e71" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 0 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 0 0) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoYtoXFiller.json ================================================ { "sstore_XtoYtoX" : { "_info" : { "comment" : "change X -> Y -> X" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0x90b7d8d4bc39664e30be0c2380e2b04aa15c6518" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoYtoYFiller.json ================================================ { "sstore_XtoYtoY" : { "_info" : { "comment" : "change X -> Y -> Y" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xa84440891ddec0f3a6fa2423d55e437383ad272b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x02" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 1 }", "nonce" : "", "storage" : { "0x01" : "0x02" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 2) (SSTORE 0 1) (SSTORE 0 1) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_XtoYtoZFiller.json ================================================ { "sstore_XtoYtoZ" : { "_info" : { "comment" : "change X -> Y -> Z" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "CALL to a contract", "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x03" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { } } } }, { "//comment" : "CALLCODE AND DELEGATECALL", "indexes" : { "data" : [1, 2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b000000000000000000000000000000000000000" : { "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x01" : "0x03" } } } }, { "//comment" : "STATICCALL, fails on storage change", "indexes" : { "data" : 3, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "inside CREATE2 init code", "indexes" : { "data" : 4, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0xde59ca290fa8b9e3db697325d153c540ac08321d" : { "storage" : { "0x00" : "0x03", "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } } } }, { "//comment" : "ALL of above but going OOG", "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } }, { "//comment" : "ALL of above but REVERT at the end", "indexes" : { "data" : [5,6,7,8,9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "dea0000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 3 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "c000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 2 [[1]] 3 }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 0 3) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (STATICCALL 300000 0xc000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32)}", "{ (seq (CREATE2 0 0 (lll (seq (SSTORE 0 1) (SSTORE 0 2) (SSTORE 0 3) (SSTORE 1 1) ) 0) 0) (CALL 600000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (REVERT 0 32) (STOP) ) }" ], "gasLimit" : [ "1000000", "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_changeFromExternalCallInInitCodeFiller.json ================================================ { "sstore_changeFromExternalCallInInitCode" : { "_info" : { "comment" : "account already has storage X. create -> in init code change that account's storage -> 0 -> change it to X again " }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "call ", "indexes" : { "data" : [0, 1, 3], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "bea0000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "//comment" : "call + revert", "indexes" : { "data" : [2, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "bea0000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "6602cfc925be62bf18470598a98f72812a1ebef2" : { "shouldnotexist" : "1" } } }, { "//comment" : "callcode", "indexes" : { "data" : [4], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "bea0000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "//comment" : "callcode + create2", "indexes" : { "data" : [5, 7], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "bea0000000000000000000000000000000000000" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "0x0f446e1bd7a5da68b5e3a305c7030e3aa8efc293" : { "nonce" : "1", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "bea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ (SSTORE 1 0) (SSTORE 1 1) (SSTORE 0 1) }", "nonce" : "", "storage" : { "0x01" : "0x01" } }, "dea0000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "{ (CALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) }", "{ (seq (CREATE2 0 0 (lll (seq (CALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) ) 0) 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (CALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) ) 0) 0) (REVERT 0 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (CALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) ) 0) 0) (CALL 200000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (CALLCODE 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) }", "{ (seq (CREATE2 0 0 (lll (seq (CALLCODE 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) ) 0) 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (CALLCODE 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) ) 0) 0) (REVERT 0 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (CALLCODE 100000 0xbea0000000000000000000000000000000000000 0 0 0 0 0) ) 0) 0) (CALL 200000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (DELEGATECALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) }", "{ (seq (CREATE2 0 0 (lll (seq (DELEGATECALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) ) 0) 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (DELEGATECALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) ) 0) 0) (REVERT 0 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (DELEGATECALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) ) 0) 0) (CALL 200000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }", "{ (STATICCALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) }", "{ (seq (CREATE2 0 0 (lll (seq (STATICCALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) ) 0) 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (STATICCALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) ) 0) 0) (REVERT 0 0) (STOP) ) }", "{ (seq (CREATE2 0 0 (lll (seq (STATICCALL 100000 0xbea0000000000000000000000000000000000000 0 0 0 0) ) 0) 0) (CALL 200000 0xdea0000000000000000000000000000000000000 0 0 0 0 0) (STOP) ) }" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSStoreTest/sstore_gasLeftFiller.json ================================================ { "sstore_gasLeft": { "_info": { "comment": "Checks EIP-1706/EIP-2200 out of gas requirement for non-mutating SSTOREs." }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x020000", "currentGasLimit": "10000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": [0, 1, 3, 4, 6, 7], "gas": 0, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "0x00" } } } }, { "indexes": { "data": [2, 5, 8], "gas": 0, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "0x01" } } } } ], "pre": { "": { "balance": "1000000000000", "code": "", "nonce": "0", "storage": {} }, "": { "balance": "", "code": "{ [[1]] 1 }", "nonce": "", "storage": { "0x01": "0x01" } }, "": { "balance": "", "code": "{ [[1]] 1 }", "nonce": "", "storage": {} } }, "transaction": { "//comment": [ "Each opcode is tested at 3 different GAS levels, one that will hit the SLOAD at 2299, 2300, and 2301.", "Only the call with 2301 should succeed, which results in the 'when' clause calling the 0xc0... contract and setting state 0x...01 to 0x01.", "Validation consists of seeing if the flag is set or not." ], "data": [ "{ (when (CALL 2305 0 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ (when (CALL 2306 0 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ (when (CALL 2307 0 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ [[1]] 1 (when (CALLCODE 2305 0 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ [[1]] 1 (when (CALLCODE 2306 0 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ [[1]] 1 (when (CALLCODE 2307 0 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ [[1]] 1 (when (DELEGATECALL 2305 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ [[1]] 1 (when (DELEGATECALL 2306 0 0 0 0) (CALL 30000 0 0 0 0 0)) }", "{ [[1]] 1 (when (DELEGATECALL 2307 0 0 0 0) (CALL 30000 0 0 0 0 0)) }" ], "gasLimit": ["200000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["1"] } } } ================================================ FILE: tests/static/state_tests/stSelfBalance/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSelfBalance/selfBalanceCallTypesFiller.json ================================================ { "selfBalanceCallTypes": { "_info": { "comment": "SELFBALANCE tests inside CALL, DELEGATECALL, and CALLCODE" }, "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "//comment": "For all CALL calls, expect storage in contract called to be modified", "indexes": { "data": [0], "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x11": "0x01" } }, "": { "storage": { "0x21": "0x1100" } }, "": { "storage": { "0x31": "0x05" } }, "": { "storage": { "0x41": "0x1300", "0x42": "0x12ff", "0x43": "0x01" } } } }, { "//comment": "For all DELEGATECALL and CALLCODE calls, expect storage in caller to be modified", "indexes": { "data": [1, 2], "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x00": "", "0x01": "", "0x02": "", "0x03": "", "0x11": "0x01", "0x21": "0x2000", "0x31": "0x05", "0x41": "0x2000", "0x42": "0x1fff", "0x43": "0x01" } } } } ], "pre": { "": { "balance": "0x1000", "code": "{ [[ 0x11 ]] (EQ (SELFBALANCE) (BALANCE (ADDRESS))) }", "nonce": "0", "storage": {} }, "": { "balance": "0x1100", "code": "{ [[ 0x21 ]] (SELFBALANCE) }", "//code": "0x47600155", "nonce": "0", "storage": {} }, "": { "balance": "0x1200", "//code": "record the gas, run the operation, then record the gas again. Drop output, subtract 2 for GAS, what is left is the cost of the operation, store in storage 0x01.", "code": "(asm GAS SELFBALANCE GAS SWAP1 POP SWAP1 SUB 2 SWAP1 SUB 0x31 SSTORE)", "nonce": "0", "storage": {} }, "": { "balance": "0x1300", "code": "(asm SELFBALANCE DUP1 0x41 SSTORE 0 0 0 0 1 0 0 CALL POP SELFBALANCE DUP1 0x42 SSTORE SWAP1 SUB 0x43 SSTORE)", "nonce": "0", "storage": {} }, "": { "balance": "0x02000", "//comment1": "starting at storage 0, call each contract by address until contract 0x0 is reached", "//comment2": "If calldata 0 is 1 then CALL, if calldata 0 is 2 then DELEGATECALL, if calldata 0 is 3 then CALLCODE", "code": "{(set 'i 0) (while @@ @i {(when (eq 0x01 $0x0) (call allgas @@ @i 0 0 0 0 0)) (when (eq 0x02 $0x0) (delegatecall allgas @@ @i 0 0 0 0)) (when (eq 0x03 $0x0) (callcode allgas @@ @i 0 0 0 0 0)) [i]:(+ @i 1)})}", "nonce": "0", "storage": { "0x00": "", "0x01": "", "0x02": "", "0x03": "" } }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000001", ":raw 0x0000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": ["1000000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stSelfBalance/selfBalanceEqualsBalanceFiller.json ================================================ { "selfBalanceEqualsBalance": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "0x01" } } } } ], "pre": { "": { "balance": "0x01f4", "code": "{ [[ 1 ]] (EQ (SELFBALANCE) (BALANCE (ADDRESS))) }", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["100000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stSelfBalance/selfBalanceFiller.json ================================================ { "selfBalance": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "0x01f4" } } } } ], "pre": { "": { "balance": "0x01f4", "code": "{ [[ 1 ]] (SELFBALANCE) }", "//code": "0x47600155", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["100000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stSelfBalance/selfBalanceGasCostFiller.json ================================================ { "selfBalanceGasCost": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "5" } } } } ], "pre": { "": { "balance": "", "//code": "record the gas, run the operation, then record the gas again. Drop output, subtract 2 for GAS, what is left is the cost of the operation, store in storage 0x01.", "code": "(asm GAS SELFBALANCE GAS SWAP1 POP SWAP1 SUB 2 SWAP1 SUB 0x01 SSTORE)", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["100000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stSelfBalance/selfBalanceUpdateFiller.json ================================================ { "selfBalanceUpdate": { "env": { "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x20000", "currentGasLimit": "10000000000", "currentNumber": "1", "currentTimestamp": "1000" }, "expect": [ { "indexes": { "data": -1, "gas": -1, "value": -1 }, "network": [">=Cancun"], "result": { "": { "storage": { "0x01": "0x01f4", "0x02": "0x01f3", "0x03": "0x01" } } } } ], "pre": { "": { "balance": "0x01f4", "code": "(asm SELFBALANCE DUP1 1 SSTORE 0 0 0 0 1 0 0 CALL POP SELFBALANCE DUP1 2 SSTORE SWAP1 SUB 3 SSTORE)", "nonce": "0", "storage": {} }, "": { "balance": "1000000000000000000000", "code": "", "nonce": "0", "storage": {} } }, "transaction": { "data": ["0x"], "gasLimit": ["200000"], "gasPrice": "10", "nonce": "0", "secretKey": "", "to": "", "value": ["0"] } } } ================================================ FILE: tests/static/state_tests/stShift/.stub ================================================ This file is here to keep the directory ================================================ FILE: tests/static/state_tests/stShift/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stShift/sar00Filler.json ================================================ { "sar00" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 0; PUSH1 0; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x600060001d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar01Filler.json ================================================ { "sar01" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 0; PUSH1 1; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x600060011d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar10Filler.json ================================================ { "sar10" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x01" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 0; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x600160001d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar11Filler.json ================================================ { "sar11" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 1; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x600160011d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_0_256-1Filler.json ================================================ { "sar_0_256-1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x00; SAR; PUSH1 0; SSTORE", "code" : "{ (SSTORE 0 (SAR 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)) }", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^254_254Filler.json ================================================ { "sar_2^254_254" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x01" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x4000000000000000000000000000000000000000000000000000000000000000; PUSH1 0xfe; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f400000000000000000000000000000000000000000000000000000000000000060fe1d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255-1_248Filler.json ================================================ { "sar_2^255-1_248" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x7f" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0xf8; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f81d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255-1_254Filler.json ================================================ { "sar_2^255-1_254" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x01" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0xfe; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60fe1d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255-1_255Filler.json ================================================ { "sar_2^255-1_255" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0xff; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff1d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255-1_256Filler.json ================================================ { "sar_2^255-1_256" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH2 0x0100; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101001d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255_1Filler.json ================================================ { "sar_2^255_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xc000000000000000000000000000000000000000000000000000000000000000" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH1 1; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f800000000000000000000000000000000000000000000000000000000000000060011d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255_255Filler.json ================================================ { "sar_2^255_255" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH1 0xff; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f800000000000000000000000000000000000000000000000000000000000000060ff1d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255_256Filler.json ================================================ { "sar_2^255_256" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH2 0x0100; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f80000000000000000000000000000000000000000000000000000000000000006101001d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^255_257Filler.json ================================================ { "sar_2^255_257" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH2 0x0101; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7f80000000000000000000000000000000000000000000000000000000000000006101011d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^256-1_0Filler.json ================================================ { "sar_2^256-1_0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1d60005500", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x00; SAR; PUSH1 0; SSTORE", "code" : "{ (SSTORE 0 (SAR 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0)) }", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^256-1_1Filler.json ================================================ { "sar_2^256-1_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x01; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60011d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^256-1_255Filler.json ================================================ { "sar_2^256-1_255" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0xff; SAR; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff1d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/sar_2^256-1_256Filler.json ================================================ { "sar_2^256-1_256" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH2 0x0100; SAR; PUSH2 0100; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101001d600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shiftSignedCombinationsFiller.yml ================================================ # https://github.com/ethereum/tests/issues/564 --- shiftSignedCombinations: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: "100000000" currentNumber: "1" currentTimestamp: "1000" _info: comment: "https://github.com/ethereum/tests/issues/564" pre: : balance: '1000000000000000000' code: | { (def 'sstore_n 0) (MSTORE sstore_n 0x0ff) ;; Number of the first args (def 'counter_i 32) (def 'counter_i_max 6) ;; Number of the second args (def 'counter_j 64) (def 'counter_j_max 14) ;; Set of the first args (def 'data_istart 10100) (MSTORE (ADD data_istart (MUL 32 0)) 0x0000000000000000000000000000000000000000000000000000000000000080) (MSTORE (ADD data_istart (MUL 32 1)) 0x0000000000000000000000000000000000000000000000000000000000008000) (MSTORE (ADD data_istart (MUL 32 2)) 0x0000000000000000000000000000000000000000000000000000000080000000) (MSTORE (ADD data_istart (MUL 32 3)) 0x0000000000000000000000000000000000000000000000008000000000000000) (MSTORE (ADD data_istart (MUL 32 4)) 0x0000000000000000000000000000000080000000000000000000000000000000) (MSTORE (ADD data_istart (MUL 32 5)) 0x8000000000000000000000000000000000000000000000000000000000000000) ;; Set of the second args (def 'data_jstart 20100) (MSTORE (ADD data_jstart (MUL 32 0)) 0x0000000000000000000000000000000000000000000000000000000000000000) (MSTORE (ADD data_jstart (MUL 32 1)) 0x0000000000000000000000000000000000000000000000000000000000000001) (MSTORE (ADD data_jstart (MUL 32 2)) 0x0000000000000000000000000000000000000000000000000000000000000002) (MSTORE (ADD data_istart (MUL 32 3)) 0x0000000000000000000000000000000000000000000000000000000000000005) (MSTORE (ADD data_jstart (MUL 32 4)) 0x00000000000000000000000000000000000000000000000000000000000000fe) (MSTORE (ADD data_jstart (MUL 32 5)) 0x00000000000000000000000000000000000000000000000000000000000000ff) (MSTORE (ADD data_jstart (MUL 32 6)) 0x0000000000000000000000000000000000000000000000000000000000000100) (MSTORE (ADD data_jstart (MUL 32 7)) 0x0000000000000000000000000000000000000000000000000000000000000101) (MSTORE (ADD data_jstart (MUL 32 8)) 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE (ADD data_jstart (MUL 32 9)) 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe) (MSTORE (ADD data_jstart (MUL 32 10)) 0x8000000000000000000000000000000000000000000000000000000000000000) (MSTORE (ADD data_jstart (MUL 32 11)) 0xa000000000000000000000000000000000000000000000000000000000000000) (MSTORE (ADD data_jstart (MUL 32 12)) 0x5555555555555555555555555555555555555555555555555555555555555555) (MSTORE (ADD data_jstart (MUL 32 13)) 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) (def 'increment_storage (MSTORE sstore_n (ADD 1 (MLOAD sstore_n)))) (def 'sstore_debug ;; put debug information about which opcode was called with what arguments. 0x80 is put instead of 0x00 (seq increment_storage (IF (EQ (MLOAD (ADD data_istart (MUL 32 (MLOAD counter_i)))) 0) (SSTORE (MLOAD sstore_n) 0x80) (SSTORE (MLOAD sstore_n) (MLOAD (ADD data_istart (MUL 32 (MLOAD counter_i))))) ) increment_storage (IF (EQ (MLOAD (ADD data_jstart (MUL 32 (MLOAD counter_j)))) 0) (SSTORE (MLOAD sstore_n) 0x80) (SSTORE (MLOAD sstore_n) (MLOAD (ADD data_jstart (MUL 32 (MLOAD counter_j))))) ) ) ) (FOR ;; init (MSTORE counter_i 0) ;; condition (LT (MLOAD counter_i) counter_i_max) ;; post step (MSTORE counter_i (ADD 1 (MLOAD counter_i))) ;; body (seq (FOR ;; init (MSTORE counter_j 0) ;; condition (LT (MLOAD counter_j) counter_j_max) ;; post step (MSTORE counter_j (ADD 1 (MLOAD counter_j))) ;; body (seq ;; put debug 1d - SAR, 1b - SHL, 1c - SHR increment_storage (SSTORE (MLOAD sstore_n) 0x1000001d) sstore_debug ;; put sar of (i,j) increment_storage (SSTORE (MLOAD sstore_n) (SAR (MLOAD (ADD data_istart (MUL 32 (MLOAD counter_i)))) (MLOAD (ADD data_jstart (MUL 32 (MLOAD counter_j)))) ) ) ;; put debug 1d - SAR, 1b - SHL, 1c - SHR increment_storage (SSTORE (MLOAD sstore_n) 0x1000001b) sstore_debug ;; put shl of (i,j) increment_storage (SSTORE (MLOAD sstore_n) (SHL (MLOAD (ADD data_istart (MUL 32 (MLOAD counter_i)))) (MLOAD (ADD data_jstart (MUL 32 (MLOAD counter_j)))) ) ) ;; put debug 1d - SAR, 1b - SHL, 1c - SHR increment_storage (SSTORE (MLOAD sstore_n) 0x1000001c) sstore_debug ;; put shr of (i,j) increment_storage (SSTORE (MLOAD sstore_n) (SHR (MLOAD (ADD data_istart (MUL 32 (MLOAD counter_i)))) (MLOAD (ADD data_jstart (MUL 32 (MLOAD counter_j)))) ) ) ) ) ;;//FOR ) ) ;;//FOR (STOP) } nonce: '0' storage: {} : balance: '1000000000000000000' code: '' nonce: '0' storage: {} expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun: balance: '1000000000000000001' storage: { "0x0100" : "0x1000001d", "0x0101" : "0x80", "0x0102" : "0x80", "0x0104" : "0x1000001b", "0x0105" : "0x80", "0x0106" : "0x80", "0x0108" : "0x1000001c", "0x0109" : "0x80", "0x010a" : "0x80", "0x010c" : "0x1000001d", "0x010d" : "0x80", "0x010e" : "0x01", "0x0110" : "0x1000001b", "0x0111" : "0x80", "0x0112" : "0x01", "0x0113" : "0x0100000000000000000000000000000000", "0x0114" : "0x1000001c", "0x0115" : "0x80", "0x0116" : "0x01", "0x0118" : "0x1000001d", "0x0119" : "0x80", "0x011a" : "0x02", "0x011c" : "0x1000001b", "0x011d" : "0x80", "0x011e" : "0x02", "0x011f" : "0x0200000000000000000000000000000000", "0x0120" : "0x1000001c", "0x0121" : "0x80", "0x0122" : "0x02", "0x0124" : "0x1000001d", "0x0125" : "0x80", "0x0126" : "0x80", "0x0128" : "0x1000001b", "0x0129" : "0x80", "0x012a" : "0x80", "0x012c" : "0x1000001c", "0x012d" : "0x80", "0x012e" : "0x80", "0x0130" : "0x1000001d", "0x0131" : "0x80", "0x0132" : "0xfe", "0x0134" : "0x1000001b", "0x0135" : "0x80", "0x0136" : "0xfe", "0x0137" : "0xfe00000000000000000000000000000000", "0x0138" : "0x1000001c", "0x0139" : "0x80", "0x013a" : "0xfe", "0x013c" : "0x1000001d", "0x013d" : "0x80", "0x013e" : "0xff", "0x0140" : "0x1000001b", "0x0141" : "0x80", "0x0142" : "0xff", "0x0143" : "0xff00000000000000000000000000000000", "0x0144" : "0x1000001c", "0x0145" : "0x80", "0x0146" : "0xff", "0x0148" : "0x1000001d", "0x0149" : "0x80", "0x014a" : "0x0100", "0x014c" : "0x1000001b", "0x014d" : "0x80", "0x014e" : "0x0100", "0x014f" : "0x010000000000000000000000000000000000", "0x0150" : "0x1000001c", "0x0151" : "0x80", "0x0152" : "0x0100", "0x0154" : "0x1000001d", "0x0155" : "0x80", "0x0156" : "0x0101", "0x0158" : "0x1000001b", "0x0159" : "0x80", "0x015a" : "0x0101", "0x015b" : "0x010100000000000000000000000000000000", "0x015c" : "0x1000001c", "0x015d" : "0x80", "0x015e" : "0x0101", "0x0160" : "0x1000001d", "0x0161" : "0x80", "0x0162" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0163" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0164" : "0x1000001b", "0x0165" : "0x80", "0x0166" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0167" : "0xffffffffffffffffffffffffffffffff00000000000000000000000000000000", "0x0168" : "0x1000001c", "0x0169" : "0x80", "0x016a" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x016b" : "0xffffffffffffffffffffffffffffffff", "0x016c" : "0x1000001d", "0x016d" : "0x80", "0x016e" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x016f" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0170" : "0x1000001b", "0x0171" : "0x80", "0x0172" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0173" : "0xfffffffffffffffffffffffffffffffe00000000000000000000000000000000", "0x0174" : "0x1000001c", "0x0175" : "0x80", "0x0176" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0177" : "0xffffffffffffffffffffffffffffffff", "0x0178" : "0x1000001d", "0x0179" : "0x80", "0x017a" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x017b" : "0xffffffffffffffffffffffffffffffff80000000000000000000000000000000", "0x017c" : "0x1000001b", "0x017d" : "0x80", "0x017e" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0180" : "0x1000001c", "0x0181" : "0x80", "0x0182" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0183" : "0x80000000000000000000000000000000", "0x0184" : "0x1000001d", "0x0185" : "0x80", "0x0186" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0187" : "0xffffffffffffffffffffffffffffffffa0000000000000000000000000000000", "0x0188" : "0x1000001b", "0x0189" : "0x80", "0x018a" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x018c" : "0x1000001c", "0x018d" : "0x80", "0x018e" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x018f" : "0xa0000000000000000000000000000000", "0x0190" : "0x1000001d", "0x0191" : "0x80", "0x0192" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0193" : "0x55555555555555555555555555555555", "0x0194" : "0x1000001b", "0x0195" : "0x80", "0x0196" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0197" : "0x5555555555555555555555555555555500000000000000000000000000000000", "0x0198" : "0x1000001c", "0x0199" : "0x80", "0x019a" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x019b" : "0x55555555555555555555555555555555", "0x019c" : "0x1000001d", "0x019d" : "0x80", "0x019e" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x019f" : "0xffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x01a0" : "0x1000001b", "0x01a1" : "0x80", "0x01a2" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x01a3" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00000000000000000000000000000000", "0x01a4" : "0x1000001c", "0x01a5" : "0x80", "0x01a6" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x01a7" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x01a8" : "0x1000001d", "0x01a9" : "0x8000", "0x01aa" : "0x80", "0x01ac" : "0x1000001b", "0x01ad" : "0x8000", "0x01ae" : "0x80", "0x01b0" : "0x1000001c", "0x01b1" : "0x8000", "0x01b2" : "0x80", "0x01b4" : "0x1000001d", "0x01b5" : "0x8000", "0x01b6" : "0x01", "0x01b8" : "0x1000001b", "0x01b9" : "0x8000", "0x01ba" : "0x01", "0x01bc" : "0x1000001c", "0x01bd" : "0x8000", "0x01be" : "0x01", "0x01c0" : "0x1000001d", "0x01c1" : "0x8000", "0x01c2" : "0x02", "0x01c4" : "0x1000001b", "0x01c5" : "0x8000", "0x01c6" : "0x02", "0x01c8" : "0x1000001c", "0x01c9" : "0x8000", "0x01ca" : "0x02", "0x01cc" : "0x1000001d", "0x01cd" : "0x8000", "0x01ce" : "0x80", "0x01d0" : "0x1000001b", "0x01d1" : "0x8000", "0x01d2" : "0x80", "0x01d4" : "0x1000001c", "0x01d5" : "0x8000", "0x01d6" : "0x80", "0x01d8" : "0x1000001d", "0x01d9" : "0x8000", "0x01da" : "0xfe", "0x01dc" : "0x1000001b", "0x01dd" : "0x8000", "0x01de" : "0xfe", "0x01e0" : "0x1000001c", "0x01e1" : "0x8000", "0x01e2" : "0xfe", "0x01e4" : "0x1000001d", "0x01e5" : "0x8000", "0x01e6" : "0xff", "0x01e8" : "0x1000001b", "0x01e9" : "0x8000", "0x01ea" : "0xff", "0x01ec" : "0x1000001c", "0x01ed" : "0x8000", "0x01ee" : "0xff", "0x01f0" : "0x1000001d", "0x01f1" : "0x8000", "0x01f2" : "0x0100", "0x01f4" : "0x1000001b", "0x01f5" : "0x8000", "0x01f6" : "0x0100", "0x01f8" : "0x1000001c", "0x01f9" : "0x8000", "0x01fa" : "0x0100", "0x01fc" : "0x1000001d", "0x01fd" : "0x8000", "0x01fe" : "0x0101", "0x0200" : "0x1000001b", "0x0201" : "0x8000", "0x0202" : "0x0101", "0x0204" : "0x1000001c", "0x0205" : "0x8000", "0x0206" : "0x0101", "0x0208" : "0x1000001d", "0x0209" : "0x8000", "0x020a" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x020b" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x020c" : "0x1000001b", "0x020d" : "0x8000", "0x020e" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0210" : "0x1000001c", "0x0211" : "0x8000", "0x0212" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0214" : "0x1000001d", "0x0215" : "0x8000", "0x0216" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0217" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0218" : "0x1000001b", "0x0219" : "0x8000", "0x021a" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x021c" : "0x1000001c", "0x021d" : "0x8000", "0x021e" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0220" : "0x1000001d", "0x0221" : "0x8000", "0x0222" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0223" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0224" : "0x1000001b", "0x0225" : "0x8000", "0x0226" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0228" : "0x1000001c", "0x0229" : "0x8000", "0x022a" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x022c" : "0x1000001d", "0x022d" : "0x8000", "0x022e" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x022f" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0230" : "0x1000001b", "0x0231" : "0x8000", "0x0232" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0234" : "0x1000001c", "0x0235" : "0x8000", "0x0236" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0238" : "0x1000001d", "0x0239" : "0x8000", "0x023a" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x023c" : "0x1000001b", "0x023d" : "0x8000", "0x023e" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0240" : "0x1000001c", "0x0241" : "0x8000", "0x0242" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0244" : "0x1000001d", "0x0245" : "0x8000", "0x0246" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x0247" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0248" : "0x1000001b", "0x0249" : "0x8000", "0x024a" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x024c" : "0x1000001c", "0x024d" : "0x8000", "0x024e" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x0250" : "0x1000001d", "0x0251" : "0x80000000", "0x0252" : "0x80", "0x0254" : "0x1000001b", "0x0255" : "0x80000000", "0x0256" : "0x80", "0x0258" : "0x1000001c", "0x0259" : "0x80000000", "0x025a" : "0x80", "0x025c" : "0x1000001d", "0x025d" : "0x80000000", "0x025e" : "0x01", "0x0260" : "0x1000001b", "0x0261" : "0x80000000", "0x0262" : "0x01", "0x0264" : "0x1000001c", "0x0265" : "0x80000000", "0x0266" : "0x01", "0x0268" : "0x1000001d", "0x0269" : "0x80000000", "0x026a" : "0x02", "0x026c" : "0x1000001b", "0x026d" : "0x80000000", "0x026e" : "0x02", "0x0270" : "0x1000001c", "0x0271" : "0x80000000", "0x0272" : "0x02", "0x0274" : "0x1000001d", "0x0275" : "0x80000000", "0x0276" : "0x80", "0x0278" : "0x1000001b", "0x0279" : "0x80000000", "0x027a" : "0x80", "0x027c" : "0x1000001c", "0x027d" : "0x80000000", "0x027e" : "0x80", "0x0280" : "0x1000001d", "0x0281" : "0x80000000", "0x0282" : "0xfe", "0x0284" : "0x1000001b", "0x0285" : "0x80000000", "0x0286" : "0xfe", "0x0288" : "0x1000001c", "0x0289" : "0x80000000", "0x028a" : "0xfe", "0x028c" : "0x1000001d", "0x028d" : "0x80000000", "0x028e" : "0xff", "0x0290" : "0x1000001b", "0x0291" : "0x80000000", "0x0292" : "0xff", "0x0294" : "0x1000001c", "0x0295" : "0x80000000", "0x0296" : "0xff", "0x0298" : "0x1000001d", "0x0299" : "0x80000000", "0x029a" : "0x0100", "0x029c" : "0x1000001b", "0x029d" : "0x80000000", "0x029e" : "0x0100", "0x02a0" : "0x1000001c", "0x02a1" : "0x80000000", "0x02a2" : "0x0100", "0x02a4" : "0x1000001d", "0x02a5" : "0x80000000", "0x02a6" : "0x0101", "0x02a8" : "0x1000001b", "0x02a9" : "0x80000000", "0x02aa" : "0x0101", "0x02ac" : "0x1000001c", "0x02ad" : "0x80000000", "0x02ae" : "0x0101", "0x02b0" : "0x1000001d", "0x02b1" : "0x80000000", "0x02b2" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02b3" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02b4" : "0x1000001b", "0x02b5" : "0x80000000", "0x02b6" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02b8" : "0x1000001c", "0x02b9" : "0x80000000", "0x02ba" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02bc" : "0x1000001d", "0x02bd" : "0x80000000", "0x02be" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x02bf" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02c0" : "0x1000001b", "0x02c1" : "0x80000000", "0x02c2" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x02c4" : "0x1000001c", "0x02c5" : "0x80000000", "0x02c6" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x02c8" : "0x1000001d", "0x02c9" : "0x80000000", "0x02ca" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x02cb" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02cc" : "0x1000001b", "0x02cd" : "0x80000000", "0x02ce" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x02d0" : "0x1000001c", "0x02d1" : "0x80000000", "0x02d2" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x02d4" : "0x1000001d", "0x02d5" : "0x80000000", "0x02d6" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x02d7" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02d8" : "0x1000001b", "0x02d9" : "0x80000000", "0x02da" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x02dc" : "0x1000001c", "0x02dd" : "0x80000000", "0x02de" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x02e0" : "0x1000001d", "0x02e1" : "0x80000000", "0x02e2" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x02e4" : "0x1000001b", "0x02e5" : "0x80000000", "0x02e6" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x02e8" : "0x1000001c", "0x02e9" : "0x80000000", "0x02ea" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x02ec" : "0x1000001d", "0x02ed" : "0x80000000", "0x02ee" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x02ef" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02f0" : "0x1000001b", "0x02f1" : "0x80000000", "0x02f2" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x02f4" : "0x1000001c", "0x02f5" : "0x80000000", "0x02f6" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x02f8" : "0x1000001d", "0x02f9" : "0x05", "0x02fa" : "0x80", "0x02fc" : "0x1000001b", "0x02fd" : "0x05", "0x02fe" : "0x80", "0x0300" : "0x1000001c", "0x0301" : "0x05", "0x0302" : "0x80", "0x0304" : "0x1000001d", "0x0305" : "0x05", "0x0306" : "0x01", "0x0308" : "0x1000001b", "0x0309" : "0x05", "0x030a" : "0x01", "0x030b" : "0x20", "0x030c" : "0x1000001c", "0x030d" : "0x05", "0x030e" : "0x01", "0x0310" : "0x1000001d", "0x0311" : "0x05", "0x0312" : "0x02", "0x0314" : "0x1000001b", "0x0315" : "0x05", "0x0316" : "0x02", "0x0317" : "0x40", "0x0318" : "0x1000001c", "0x0319" : "0x05", "0x031a" : "0x02", "0x031c" : "0x1000001d", "0x031d" : "0x05", "0x031e" : "0x80", "0x0320" : "0x1000001b", "0x0321" : "0x05", "0x0322" : "0x80", "0x0324" : "0x1000001c", "0x0325" : "0x05", "0x0326" : "0x80", "0x0328" : "0x1000001d", "0x0329" : "0x05", "0x032a" : "0xfe", "0x032b" : "0x07", "0x032c" : "0x1000001b", "0x032d" : "0x05", "0x032e" : "0xfe", "0x032f" : "0x1fc0", "0x0330" : "0x1000001c", "0x0331" : "0x05", "0x0332" : "0xfe", "0x0333" : "0x07", "0x0334" : "0x1000001d", "0x0335" : "0x05", "0x0336" : "0xff", "0x0337" : "0x07", "0x0338" : "0x1000001b", "0x0339" : "0x05", "0x033a" : "0xff", "0x033b" : "0x1fe0", "0x033c" : "0x1000001c", "0x033d" : "0x05", "0x033e" : "0xff", "0x033f" : "0x07", "0x0340" : "0x1000001d", "0x0341" : "0x05", "0x0342" : "0x0100", "0x0343" : "0x08", "0x0344" : "0x1000001b", "0x0345" : "0x05", "0x0346" : "0x0100", "0x0347" : "0x2000", "0x0348" : "0x1000001c", "0x0349" : "0x05", "0x034a" : "0x0100", "0x034b" : "0x08", "0x034c" : "0x1000001d", "0x034d" : "0x05", "0x034e" : "0x0101", "0x034f" : "0x08", "0x0350" : "0x1000001b", "0x0351" : "0x05", "0x0352" : "0x0101", "0x0353" : "0x2020", "0x0354" : "0x1000001c", "0x0355" : "0x05", "0x0356" : "0x0101", "0x0357" : "0x08", "0x0358" : "0x1000001d", "0x0359" : "0x05", "0x035a" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x035b" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x035c" : "0x1000001b", "0x035d" : "0x05", "0x035e" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x035f" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0", "0x0360" : "0x1000001c", "0x0361" : "0x05", "0x0362" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0363" : "0x07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0364" : "0x1000001d", "0x0365" : "0x05", "0x0366" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0367" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0368" : "0x1000001b", "0x0369" : "0x05", "0x036a" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x036b" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0", "0x036c" : "0x1000001c", "0x036d" : "0x05", "0x036e" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x036f" : "0x07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0370" : "0x1000001d", "0x0371" : "0x05", "0x0372" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0373" : "0xfc00000000000000000000000000000000000000000000000000000000000000", "0x0374" : "0x1000001b", "0x0375" : "0x05", "0x0376" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0378" : "0x1000001c", "0x0379" : "0x05", "0x037a" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x037b" : "0x0400000000000000000000000000000000000000000000000000000000000000", "0x037c" : "0x1000001d", "0x037d" : "0x05", "0x037e" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x037f" : "0xfd00000000000000000000000000000000000000000000000000000000000000", "0x0380" : "0x1000001b", "0x0381" : "0x05", "0x0382" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0384" : "0x1000001c", "0x0385" : "0x05", "0x0386" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0387" : "0x0500000000000000000000000000000000000000000000000000000000000000", "0x0388" : "0x1000001d", "0x0389" : "0x05", "0x038a" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x038b" : "0x02aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x038c" : "0x1000001b", "0x038d" : "0x05", "0x038e" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x038f" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0", "0x0390" : "0x1000001c", "0x0391" : "0x05", "0x0392" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0393" : "0x02aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x0394" : "0x1000001d", "0x0395" : "0x05", "0x0396" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x0397" : "0xfd55555555555555555555555555555555555555555555555555555555555555", "0x0398" : "0x1000001b", "0x0399" : "0x05", "0x039a" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x039b" : "0x5555555555555555555555555555555555555555555555555555555555555540", "0x039c" : "0x1000001c", "0x039d" : "0x05", "0x039e" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x039f" : "0x0555555555555555555555555555555555555555555555555555555555555555", "0x03a0" : "0x1000001d", "0x03a1" : "0x80000000000000000000000000000000", "0x03a2" : "0x80", "0x03a4" : "0x1000001b", "0x03a5" : "0x80000000000000000000000000000000", "0x03a6" : "0x80", "0x03a8" : "0x1000001c", "0x03a9" : "0x80000000000000000000000000000000", "0x03aa" : "0x80", "0x03ac" : "0x1000001d", "0x03ad" : "0x80000000000000000000000000000000", "0x03ae" : "0x01", "0x03b0" : "0x1000001b", "0x03b1" : "0x80000000000000000000000000000000", "0x03b2" : "0x01", "0x03b4" : "0x1000001c", "0x03b5" : "0x80000000000000000000000000000000", "0x03b6" : "0x01", "0x03b8" : "0x1000001d", "0x03b9" : "0x80000000000000000000000000000000", "0x03ba" : "0x02", "0x03bc" : "0x1000001b", "0x03bd" : "0x80000000000000000000000000000000", "0x03be" : "0x02", "0x03c0" : "0x1000001c", "0x03c1" : "0x80000000000000000000000000000000", "0x03c2" : "0x02", "0x03c4" : "0x1000001d", "0x03c5" : "0x80000000000000000000000000000000", "0x03c6" : "0x80", "0x03c8" : "0x1000001b", "0x03c9" : "0x80000000000000000000000000000000", "0x03ca" : "0x80", "0x03cc" : "0x1000001c", "0x03cd" : "0x80000000000000000000000000000000", "0x03ce" : "0x80", "0x03d0" : "0x1000001d", "0x03d1" : "0x80000000000000000000000000000000", "0x03d2" : "0xfe", "0x03d4" : "0x1000001b", "0x03d5" : "0x80000000000000000000000000000000", "0x03d6" : "0xfe", "0x03d8" : "0x1000001c", "0x03d9" : "0x80000000000000000000000000000000", "0x03da" : "0xfe", "0x03dc" : "0x1000001d", "0x03dd" : "0x80000000000000000000000000000000", "0x03de" : "0xff", "0x03e0" : "0x1000001b", "0x03e1" : "0x80000000000000000000000000000000", "0x03e2" : "0xff", "0x03e4" : "0x1000001c", "0x03e5" : "0x80000000000000000000000000000000", "0x03e6" : "0xff", "0x03e8" : "0x1000001d", "0x03e9" : "0x80000000000000000000000000000000", "0x03ea" : "0x0100", "0x03ec" : "0x1000001b", "0x03ed" : "0x80000000000000000000000000000000", "0x03ee" : "0x0100", "0x03f0" : "0x1000001c", "0x03f1" : "0x80000000000000000000000000000000", "0x03f2" : "0x0100", "0x03f4" : "0x1000001d", "0x03f5" : "0x80000000000000000000000000000000", "0x03f6" : "0x0101", "0x03f8" : "0x1000001b", "0x03f9" : "0x80000000000000000000000000000000", "0x03fa" : "0x0101", "0x03fc" : "0x1000001c", "0x03fd" : "0x80000000000000000000000000000000", "0x03fe" : "0x0101", "0x0400" : "0x1000001d", "0x0401" : "0x80000000000000000000000000000000", "0x0402" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0403" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0404" : "0x1000001b", "0x0405" : "0x80000000000000000000000000000000", "0x0406" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0408" : "0x1000001c", "0x0409" : "0x80000000000000000000000000000000", "0x040a" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x040c" : "0x1000001d", "0x040d" : "0x80000000000000000000000000000000", "0x040e" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x040f" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0410" : "0x1000001b", "0x0411" : "0x80000000000000000000000000000000", "0x0412" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0414" : "0x1000001c", "0x0415" : "0x80000000000000000000000000000000", "0x0416" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x0418" : "0x1000001d", "0x0419" : "0x80000000000000000000000000000000", "0x041a" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x041b" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x041c" : "0x1000001b", "0x041d" : "0x80000000000000000000000000000000", "0x041e" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0420" : "0x1000001c", "0x0421" : "0x80000000000000000000000000000000", "0x0422" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0424" : "0x1000001d", "0x0425" : "0x80000000000000000000000000000000", "0x0426" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0427" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0428" : "0x1000001b", "0x0429" : "0x80000000000000000000000000000000", "0x042a" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x042c" : "0x1000001c", "0x042d" : "0x80000000000000000000000000000000", "0x042e" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x0430" : "0x1000001d", "0x0431" : "0x80000000000000000000000000000000", "0x0432" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0434" : "0x1000001b", "0x0435" : "0x80000000000000000000000000000000", "0x0436" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x0438" : "0x1000001c", "0x0439" : "0x80000000000000000000000000000000", "0x043a" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x043c" : "0x1000001d", "0x043d" : "0x80000000000000000000000000000000", "0x043e" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x043f" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0440" : "0x1000001b", "0x0441" : "0x80000000000000000000000000000000", "0x0442" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x0444" : "0x1000001c", "0x0445" : "0x80000000000000000000000000000000", "0x0446" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x0448" : "0x1000001d", "0x0449" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x044a" : "0x80", "0x044c" : "0x1000001b", "0x044d" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x044e" : "0x80", "0x0450" : "0x1000001c", "0x0451" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0452" : "0x80", "0x0454" : "0x1000001d", "0x0455" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0456" : "0x01", "0x0458" : "0x1000001b", "0x0459" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x045a" : "0x01", "0x045c" : "0x1000001c", "0x045d" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x045e" : "0x01", "0x0460" : "0x1000001d", "0x0461" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0462" : "0x02", "0x0464" : "0x1000001b", "0x0465" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0466" : "0x02", "0x0468" : "0x1000001c", "0x0469" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x046a" : "0x02", "0x046c" : "0x1000001d", "0x046d" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x046e" : "0x80", "0x0470" : "0x1000001b", "0x0471" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0472" : "0x80", "0x0474" : "0x1000001c", "0x0475" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0476" : "0x80", "0x0478" : "0x1000001d", "0x0479" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x047a" : "0xfe", "0x047c" : "0x1000001b", "0x047d" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x047e" : "0xfe", "0x0480" : "0x1000001c", "0x0481" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0482" : "0xfe", "0x0484" : "0x1000001d", "0x0485" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0486" : "0xff", "0x0488" : "0x1000001b", "0x0489" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x048a" : "0xff", "0x048c" : "0x1000001c", "0x048d" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x048e" : "0xff", "0x0490" : "0x1000001d", "0x0491" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0492" : "0x0100", "0x0494" : "0x1000001b", "0x0495" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0496" : "0x0100", "0x0498" : "0x1000001c", "0x0499" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x049a" : "0x0100", "0x049c" : "0x1000001d", "0x049d" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x049e" : "0x0101", "0x04a0" : "0x1000001b", "0x04a1" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04a2" : "0x0101", "0x04a4" : "0x1000001c", "0x04a5" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04a6" : "0x0101", "0x04a8" : "0x1000001d", "0x04a9" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04aa" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04ab" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04ac" : "0x1000001b", "0x04ad" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04ae" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04b0" : "0x1000001c", "0x04b1" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04b2" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04b4" : "0x1000001d", "0x04b5" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04b6" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x04b7" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04b8" : "0x1000001b", "0x04b9" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04ba" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x04bc" : "0x1000001c", "0x04bd" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04be" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", "0x04c0" : "0x1000001d", "0x04c1" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04c2" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04c3" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04c4" : "0x1000001b", "0x04c5" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04c6" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04c8" : "0x1000001c", "0x04c9" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04ca" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04cc" : "0x1000001d", "0x04cd" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04ce" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x04cf" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04d0" : "0x1000001b", "0x04d1" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04d2" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x04d4" : "0x1000001c", "0x04d5" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04d6" : "0xa000000000000000000000000000000000000000000000000000000000000000", "0x04d8" : "0x1000001d", "0x04d9" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04da" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x04dc" : "0x1000001b", "0x04dd" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04de" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x04e0" : "0x1000001c", "0x04e1" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04e2" : "0x5555555555555555555555555555555555555555555555555555555555555555", "0x04e4" : "0x1000001d", "0x04e5" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04e6" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x04e7" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x04e8" : "0x1000001b", "0x04e9" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04ea" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "0x04ec" : "0x1000001c", "0x04ed" : "0x8000000000000000000000000000000000000000000000000000000000000000", "0x04ee" : "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } transaction: data: - '' gasLimit: - '80000000' gasPrice: '10' nonce: '0' secretKey: "" to: value: - '1' ================================================ FILE: tests/static/state_tests/stShift/shl01-0100Filler.json ================================================ { "shl01-0100" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x60016101001b600055", "storage" : { "0x00" : "0x00" } }, "" : { "//balance" : "999999999999886994", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH2 0x0100; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x60016101001b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl01-0101Filler.json ================================================ { "shl01-0101" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x60016101011b600055", "storage" : { "0x00" : "0x00" } }, "" : { "//balance" : "999999999999886994", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH2 0x0101; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x60016101011b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl01-ffFiller.json ================================================ { "shl01-ff" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x600160ff1b600055", "storage" : { "0x00" : "0x8000000000000000000000000000000000000000000000000000000000000000" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 0xff; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x600160ff1b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl01Filler.json ================================================ { "shl01" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x600060011b600055", "storage" : { "0x00" : "0x00" } }, "" : { "//balance" : "999999999999886994", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 0; PUSH1 1; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x600060011b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl10Filler.json ================================================ { "shl10" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x600160001b600055", "storage" : { "0x00" : "0x01" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 0; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x600160001b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl11Filler.json ================================================ { "shl11" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x600160011b600055", "storage" : { "0x00" : "0x02" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 1; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x600160011b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl_-1_0Filler.json ================================================ { "shl_-1_0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b600055", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x00; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl_-1_1Filler.json ================================================ { "shl_-1_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60011b600055", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x01; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60011b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl_-1_255Filler.json ================================================ { "shl_-1_255" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff1b600055", "storage" : { "0x00" : "0x8000000000000000000000000000000000000000000000000000000000000000" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0xff; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff1b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl_-1_256Filler.json ================================================ { "shl_-1_256" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101001b600055", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH2 0x0100; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101001b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shl_2^255-1_1Filler.json ================================================ { "shl_2^255-1_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x01; SHL; PUSH1 0; SSTORE", "code" : ":raw 0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60011b600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr01Filler.json ================================================ { "shr01" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 0; PUSH1 1; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x600060011c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr10Filler.json ================================================ { "shr10" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x01" } }, "" : { "//balance" : "999999999999873988", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 0; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x600160001c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr11Filler.json ================================================ { "shr11" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "//balance" : "999999999999886994", "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH1 1; PUSH1 1; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x600160011c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_-1_0Filler.json ================================================ { "shr_-1_0" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x00; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_-1_1Filler.json ================================================ { "shr_-1_1" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0x01; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60011c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_-1_255Filler.json ================================================ { "shr_-1_255" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x01" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH1 0xff; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff1c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_-1_256Filler.json ================================================ { "shr_-1_256" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; PUSH2 0x0100; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101001c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_2^255_1Filler.json ================================================ { "shr_2^255_1" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x4000000000000000000000000000000000000000000000000000000000000000" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH1 1; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7f800000000000000000000000000000000000000000000000000000000000000060011c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_2^255_255Filler.json ================================================ { "shr_2^255_255" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x01" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH1 0xff; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7f800000000000000000000000000000000000000000000000000000000000000060ff1c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_2^255_256Filler.json ================================================ { "shr_2^255_256" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH2 0x0100; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7f80000000000000000000000000000000000000000000000000000000000000006101001c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stShift/shr_2^255_257Filler.json ================================================ { "shr_2^255_257" : { "_info" : { "comment" : "Taken from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x00" : "0x00" } }, "" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000; PUSH2 0x0101; SHR; PUSH1 0; SSTORE", "code" : ":raw 0x7f80000000000000000000000000000000000000000000000000000000000000006101011c600055", "nonce" : "0", "storage" : { "0x00" : "0x03" } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/AmbiguousMethodFiller.json ================================================ { "AmbiguousMethod" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x014f" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1" : "contract contract1", "//comment2" : "{", "//comment3" : " uint value;", "//comment4" : " function run()", "//comment5" : " {", "//comment6" : " value = 225;", "//comment7" : " }", "//comment8" : "}", "//comment9" : "", "//comment10" : "contract contract2", "//comment11" : "{", "//comment12" : " uint value2;", "//comment13" : " function run()", "//comment14" : " {", "//comment15" : " value2 = 335;", "//comment16" : " }", "//comment17" : "}", "code" : ":raw 0x60003560e060020a90048063c040622614601557005b601b6021565b60006000f35b61014f60008190555056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "5000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/ByZeroFiller.json ================================================ { "ByZero" : { "_info" : { "comment" : "DIV/SDIV/MOD/SMOD by zero tests" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0", "//comment" : "No code is returned", "code" : "", "storage" : { "0x00" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "1", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "//comment" : "store 1 at the result of {DIV,SDIV,MOD,SMOD}(1,0)", "data" : [ ":raw 0x600160006001045500", ":raw 0x600160006001055500", ":raw 0x600160006001065500", ":raw 0x600160006001075500" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/CallInfiniteLoopFiller.json ================================================ { "CallInfiniteLoop" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "100000", "//comment1" : "contract recursiveMethods", "//comment2" : "{", "//comment3" : " function testInfiniteLoop()", "//comment4" : " {", "//comment5" : " while(true){}", "//comment6" : " }", "//comment7" : " ", "//comment8" : " function testRecursiveMethods()", "//comment9" : " {", "//comment10" : " testRecursiveMethods2();", "//comment11" : " }", "//comment12" : " ", "//comment13" : " function testRecursiveMethods2()", "//comment14" : " {", "//comment15" : " testRecursiveMethods();", "//comment16" : " }", "//comment17" : "}", "code" : ":raw 0x60003560e060020a90048063296df0df1460295780634893d88a146035578063981a316514604157005b602f604d565b60006000f35b603b6062565b60006000f35b6047605a565b60006000f35b5b600115605857604e565b565b60606062565b565b6068605a565b56", "nonce" : "0", "storage" : { } }, "" : { "balance" : "500000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x296df0df" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/CallLowLevelCreatesSolidityFiller.json ================================================ { "CallLowLevelCreatesSolidity" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "nonce" : "1", "storage" : { "0x00" : "0xe1", "0x01" : "" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1": "contract subcaller", "//comment2": "{", "//comment3": " function init(address a)", "//comment4": " {", "//comment5": " main(a).setdata(225);", "//comment6": " }", "//comment7": "}", "//comment8": "", "//comment9": "contract main", "//comment10": "{", "//comment11": " uint data;", "//comment12": " address msgsender;", "//comment13": " function run() returns (uint)", "//comment14": " {", "//comment15": " data = 1;", "//comment16": " msgsender = ;", "//comment17": " subcaller a = new subcaller();", "//comment18": " a.init(msgsender);", "//comment19": " return data;", "//comment20": " }", "//comment21": " ", "//comment22": " function setdata(uint _data)", "//comment23": " {", "//comment24": " data = _data;", "//comment25": " }", "//comment26": "}", "code" : ":raw 0x60003560e060020a9004806330debb4214610021578063c04062261461003257005b61002c6004356100c7565b60006000f35b61003a610044565b8060005260206000f35b60006000600160008190555073600181905550606a6100d2600039606a60006000f0905080600160a060020a03166319ab453c600060008260e060020a026000526004600154600160a060020a03168152602001600060008660325a03f16100bc57005b505060005491505090565b80600081905550505600605e80600c6000396000f30060003560e060020a9004806319ab453c14601557005b601e6004356024565b60006000f35b80600160a060020a03166330debb42600060008260e060020a02600052600460e18152602001600060008660325a03f1605957005b50505056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/CallRecursiveMethodsFiller.json ================================================ { "CallRecursiveMethods" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : {} }, "" : { "balance" : "100000", "//comment1" : "contract recursiveMethods", "//comment2" : "{", "//comment3" : " function testInfiniteLoop()", "//comment4" : " {", "//comment5" : " while(true){}", "//comment6" : " }", "//comment7" : " ", "//comment8" : " function testRecursiveMethods()", "//comment9" : " {", "//comment10" : " testRecursiveMethods2();", "//comment11" : " }", "//comment12" : " ", "//comment13" : " function testRecursiveMethods2()", "//comment14" : " {", "//comment15" : " testRecursiveMethods();", "//comment16" : " }", "//comment17" : "}", "code" : ":raw 0x7c01000000000000000000000000000000000000000000000000000000006000350463296df0df811460415780634893d88a14604d578063981a316514605957005b60476065565b60006000f35b6053607a565b60006000f35b605f6072565b60006000f35b5b6001156070576066565b565b6078607a565b565b60806072565b56", "nonce" : "0", "storage" : { } }, "" : { "balance" : "5000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x981a3165" ], "gasLimit" : [ "60000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/ContractInheritanceFiller.json ================================================ { "ContractInheritance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1" : "contract base", "//comment2" : "{", "//comment3" : " function methodA() returns (uint32)", "//comment4" : " {", "//comment5" : " return 1;", "//comment6" : " }", "//comment7" : "}", "//comment8" : "", "//comment9" : "contract frombase is base", "//comment10" : "{", "//comment11" : " function methodA() returns (uint32)", "//comment12" : " {", "//comment13" : " return 2;", "//comment14" : " }", "//comment15" : "}", "//comment16" : "", "//comment17" : "contract main", "//comment18" : "{", "//comment19" : " bool returnValue;", "//comment20" : " function run() returns (bool)", "//comment21" : " {", "//comment22" : " returnValue = testInheretance();", "//comment23" : " return returnValue;", "//comment24" : " }", "//comment25" : " ", "//comment26" : " function testInheretance() returns (bool res)", "//comment27" : " {", "//comment28" : " res = true;", "//comment29" : " base contract1 = new base();", "//comment30" : " if (contract1.methodA() != 1)", "//comment31" : " return false;", "//comment32" : "", "//comment33" : " frombase contract2 = new frombase();", "//comment34" : " if (contract2.methodA() != 2)", "//comment35" : " return false;", "//comment36" : " }", "//comment37" : "}", "code" : ":raw 0x7c010000000000000000000000000000000000000000000000000000000060003504633e0bca3b8114610039578063c0406226146100a857005b6100b55b600160008060456101ec8339604560006000f091508173ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f161011957005b6100bf60006100c961003d565b8060005260206000f35b8060005260206000f35b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016919091179081905560ff16919050565b505060005163ffffffff166002141561019d575b5b505090565b505060005163ffffffff1660011415610194575b60456101a7600039604560006000f090508073ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f16100ff57005b60009250610114565b600092506101145600603980600c6000396000f3007c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60026000818152602090f3603980600c6000396000f3007c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60016000818152602090f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "5000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "35000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/CreateContractFromMethodFiller.json ================================================ { "CreateContractFromMethod" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "0", "code" : "0x60003560e060020a90048062f55d9d14601e578063b9c3d0a514602d57005b60276004356046565b60006000f35b6033603d565b8060005260206000f35b600060e1905090565b80600160a060020a0316ff5056", "nonce" : "1", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "100000", "//comment1": "contract TestContract", "//comment2": "{", "//comment3": " function testMethod() returns (int res)", "//comment4": " {", "//comment5": " return 225;", "//comment6": " }", "//comment7": "", "//comment8": " function destroy(address sendFoundsTo)", "//comment9": " {", "//comment10": " suicide(sendFoundsTo);", "//comment11": " }", "//comment12": "}", "//comment13": "", "//comment14": "contract main", "//comment15": "{", "//comment16": " function run() returns (uint)", "//comment17": " {", "//comment18": " createContractFromMethod();", "//comment19": " }", "//comment20": " ", "//comment21": " function createContractFromMethod() returns (TestContract a)", "//comment22": " {", "//comment23": " a = new TestContract();", "//comment24": " }", "//comment25": "}", "code" : ":raw 0x60003560e060020a900480637ee17e1214601f578063c040622614602b57005b60256047565b60006000f35b6031603b565b8060005260206000f35b600060436047565b5090565b60006060605d600039606060006000f09050905600605480600c6000396000f30060003560e060020a90048062f55d9d14601e578063b9c3d0a514602d57005b60276004356046565b60006000f35b6033603d565b8060005260206000f35b600060e1905090565b80600160a060020a0316ff5056", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/RecursiveCreateContractsCreate4ContractsFiller.json ================================================ { "RecursiveCreateContractsCreate4Contracts" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0x03", "storage" : { "0x00" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", "0x01" : "0x04" } }, "2b25ae4b13cb6e06869f694d29de45e7614ebd97" : { "nonce" : "0x01", "storage" : { "0x00" : "0x01" } }, "5d35480c6e7f8952363fa280a0a96906da981f63" : { "balance" : "0x02", "nonce" : "0x01" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "b88de88b35ecbf3c141e3caae2baf35834d18f63" : { "balance" : "0x02", "nonce" : "0x02", "storage" : { "0x00" : "0x02" } }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "nonce" : "0x01", "storage" : { "0x00" : "0x03" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000000000000000000", "//comment1" : "contract recursiveCreate1", "//comment2" : "{", "//comment3" : " uint depp;", "//comment4" : " function recursiveCreate1(address a, uint depth)", "//comment5" : " {", "//comment6" : " depth = depth - 1;", "//comment7" : "depp = depth;", "//comment8" : " if(depth > 0)", "//comment9" : " main(a).create2(depth);", "//comment10" : " }", "//comment11" : "}", "//comment12" : "", "//comment13" : "contract recursiveCreate2", "//comment14" : "{", "//comment15" : " uint depp;", "//comment16" : " function recursiveCreate2(address a, uint depth)", "//comment17" : " {", "//comment18" : " depth = depth - 1;", "//comment19" : "depp = depth;", "//comment20" : " if(depth > 0)", "//comment21" : " recursiveCreate1 rec1 = new recursiveCreate1(a, depth);", "//comment22" : " }", "//comment23" : "}", "//comment24" : "", "//comment25" : "contract main", "//comment26" : "{", "//comment27" : " address maincontract;", "//comment28" : " uint depp;", "//comment29" : " function run(uint depth)", "//comment30" : " {", "//comment31" : " maincontract = 0x095e7baea6a6c7c4c2dfeb977efac326af552d87;", "//comment32" : " depp = depth;", "//comment33" : " recursiveCreate1 rec1 = new recursiveCreate1(maincontract, depth);", "//comment34" : " }", "//comment35" : "", "//comment36" : " function create2(uint depth)", "//comment37" : " {", "//comment38" : " recursiveCreate2 rec2 = new recursiveCreate2(maincontract, depth);", "//comment39" : " address(rec2).send(2);", "//comment40" : " }", "//comment41" : "}", "code" : ":raw 0x60003560e060020a90048063820b13f614610021578063a444f5e91461003257005b61002c600435610093565b60006000f35b61003d600435610043565b60006000f35b600073095e7baea6a6c7c4c2dfeb977efac326af552d8760008190555081600181905550606b6101ad600039606b600054600160a060020a0316815260200182815260200160006000f090505050565b600060c86100e560003960c8600054600160a060020a0316815260200182815260200160006000f0905080600160a060020a0316600060026000600060006000848787f16100dd57005b50505050505600604060c860043960045160245160006001820391508160008190555060008211602657604c565b606b605d600039606b83600160a060020a0316815260200182815260200160006000f090505b505050600180605c6000396000f300006040606b6004396004516024516001810390508060008190555060008111602457605b565b81600160a060020a031663820b13f6600060008260e060020a026000526004858152602001600060008660325a03f1605857005b50505b5050600180606a6000396000f300006040606b6004396004516024516001810390508060008190555060008111602457605b565b81600160a060020a031663820b13f6600060008260e060020a026000526004858152602001600060008660325a03f1605857005b50505b5050600180606a6000396000f30000", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "500000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xa444f5e90000000000000000000000000000000000000000000000000000000000000004" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/RecursiveCreateContractsFiller.json ================================================ { "RecursiveCreateContracts" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x314dc6448d9338c15b0a00000001", "nonce" : "0x01", "storage" : { "0x00" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", "0x01" : "0x0304" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "nonce" : "0x01", "storage" : { "0x00" : "0x0303" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000000000000000000", "//comment1" : "contract recursiveCreate1", "//comment2" : "{", "//comment3" : " uint depp;", "//comment4" : " function recursiveCreate1(address a, uint depth)", "//comment5" : " {", "//comment6" : " depth = depth - 1;", "//comment7" : "depp = depth;", "//comment8" : " if(depth > 0)", "//comment9" : " main(a).create2(depth);", "//comment10" : " }", "//comment11" : "}", "//comment12" : "", "//comment13" : "contract recursiveCreate2", "//comment14" : "{", "//comment15" : " uint depp;", "//comment16" : " function recursiveCreate2(address a, uint depth)", "//comment17" : " {", "//comment18" : " depth = depth - 1;", "//comment19" : "depp = depth;", "//comment20" : " if(depth > 0)", "//comment21" : " recursiveCreate1 rec1 = new recursiveCreate1(a, depth);", "//comment22" : " }", "//comment23" : "}", "//comment24" : "", "//comment25" : "contract main", "//comment26" : "{", "//comment27" : " address maincontract;", "//comment28" : " uint depp;", "//comment29" : " function run(uint depth)", "//comment30" : " {", "//comment31" : " maincontract = 0x095e7baea6a6c7c4c2dfeb977efac326af552d87;", "//comment32" : " depp = depth;", "//comment33" : " recursiveCreate1 rec1 = new recursiveCreate1(maincontract, depth);", "//comment34" : " }", "//comment35" : "", "//comment36" : " function create2(uint depth)", "//comment37" : " {", "//comment38" : " recursiveCreate2 rec2 = new recursiveCreate2(maincontract, depth);", "//comment39" : " address(rec2).send(2);", "//comment40" : " }", "//comment41" : "}", "code" : ":raw 0x60003560e060020a90048063820b13f614610021578063a444f5e91461003257005b61002c600435610093565b60006000f35b61003d600435610043565b60006000f35b600073095e7baea6a6c7c4c2dfeb977efac326af552d8760008190555081600181905550606b6101ad600039606b600054600160a060020a0316815260200182815260200160006000f090505050565b600060c86100e560003960c8600054600160a060020a0316815260200182815260200160006000f0905080600160a060020a0316600060026000600060006000848787f16100dd57005b50505050505600604060c860043960045160245160006001820391508160008190555060008211602657604c565b606b605d600039606b83600160a060020a0316815260200182815260200160006000f090505b505050600180605c6000396000f300006040606b6004396004516024516001810390508060008190555060008111602457605b565b81600160a060020a031663820b13f6600060008260e060020a026000526004858152602001600060008660325a03f1605857005b50505b5050600180606a6000396000f300006040606b6004396004516024516001810390508060008190555060008111602457605b565b81600160a060020a031663820b13f6600060008260e060020a026000526004858152602001600060008660325a03f1605857005b50505b5050600180606a6000396000f30000", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "500000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xa444f5e90000000000000000000000000000000000000000000000000000000000000304" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestBlockAndTransactionPropertiesFiller.json ================================================ { "TestBlockAndTransactionProperties" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1" : "contract main", "//comment2" : "{", "//comment3" : " bool returnValue;", "//comment4" : " function run() returns (bool)", "//comment5" : " {", "//comment6" : " returnValue = testBlockAndTransactionProperties();", "//comment7" : " return returnValue;", "//comment8" : " }", "//comment9" : "", "//comment10" : " function testBlockAndTransactionProperties() returns (bool res)", "//comment11" : " {", "//comment12" : " res = true;", "//comment13" : " if (block.coinbase != 0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba)", "//comment14" : " return false;", "//comment15" : "", "//comment16" : " if (block.difficulty != 45678256)", "//comment17" : " return false;", "//comment18" : "", "//comment19" : " if (block.gaslimit != 0x7fffffffffffffff)", "//comment20" : " return false;", "//comment21" : "", "//comment22" : " if (block.number != 120)", "//comment23" : " return false;", "//comment24" : "", "//comment25" : " //try to call this", "//comment26" : " block.blockhash(120);", "//comment27" : " block.timestamp;", "//comment28" : " msg.gas;", "//comment29" : "", "//comment30" : " if (msg.sender != )", "//comment31" : " return false;", "//comment32" : "", "//comment33" : " if (msg.value != 100)", "//comment34" : " return false;", "//comment35" : "", "//comment36" : " if (tx.gasprice != 1)", "//comment37" : " return false;", "//comment38" : "", "//comment39" : " if (tx.origin != )", "//comment40" : " return false;", "//comment41" : "", "//comment42" : " }", "//comment43" : "}", "code" : ":raw 0x60606040526000357c010000000000000000000000000000000000000000000000000000000090048063c040622614610044578063e97384dc1461006957610042565b005b610051600480505061008e565b60405180821515815260200191505060405180910390f35b61007660048050506100c9565b60405180821515815260200191505060405180910390f35b60006100986100c9565b600060006101000a81548160ff02191690830217905550600060009054906101000a900460ff1690506100c6565b90565b6000600190508050732adc25665018aa1fe0e6bc666dac8fc2697ff9ba4173ffffffffffffffffffffffffffffffffffffffff1614151561010d57600090506101f7565b6302b8feb04414151561012357600090506101f7565b677fffffffffffffff4514151561013d57600090506101f7565b60784314151561015057600090506101f7565b6078405042505a50733373ffffffffffffffffffffffffffffffffffffffff1614151561019457600090506101f7565b6064341415156101a757600090506101f7565b60013a1415156101ba57600090506101f7565b733273ffffffffffffffffffffffffffffffffffffffff161415156101f657600090506101f7565b5b9056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestContractInteractionFiller.json ================================================ { "TestContractInteraction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1": "contract TestContract", "//comment2": "{", "//comment3": " function testMethod() returns (int res)", "//comment4": " {", "//comment5": " return 225;", "//comment6": " }", "//comment7": "", "//comment8": " function destroy(address sendFoundsTo)", "//comment9": " {", "//comment10": " suicide(sendFoundsTo);", "//comment11": " }", "//comment12": "}", "//comment13": "contract main", "//comment14": "{", "//comment15": " bool returnValue;", "//comment16": " function run() returns (bool)", "//comment17": " {", "//comment18": " returnValue = testContractInteraction();", "//comment19": " return returnValue;", "//comment20": " }", "//comment21": "", "//comment22" : " function testContractInteraction() returns (bool res)", "//comment23" : " {", "//comment24" : " TestContract a = new TestContract();", "//comment25" : " if (a.testMethod() == 225)", "//comment26" : " return true;", "//comment27" : " return false;", "//comment28" : " }", "//comment29": "}", "code" : ":raw 0x7c01000000000000000000000000000000000000000000000000000000006000350463c04062268114610039578063ed973fe91461004b57005b6100416100ea565b8060005260206000f35b61005361005d565b8060005260206000f35b60006000608161011a600039608160006000f0905073ffffffffffffffffffffffffffffffffffffffff811663b9c3d0a5602060007fb9c3d0a50000000000000000000000000000000000000000000000000000000081526004600060008660325a03f16100c757005b505060005160e1146100d8576100e1565b600191506100e6565b600091505b5090565b60006100f461005d565b600060006101000a81548160ff0219169083021790555060ff600160005404169050905600607580600c6000396000f3007c01000000000000000000000000000000000000000000000000000000006000350462f55d9d81146036578063b9c3d0a514604557005b603f6004356055565b60006000f35b604b6070565b8060005260206000f35b8073ffffffffffffffffffffffffffffffffffffffff16ff50565b60e19056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestContractSuicideFiller.json ================================================ { "TestContractSuicide" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "nonce" : "1", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1": "contract TestContract", "//comment2": "{", "//comment3": " function testMethod() returns (int res)", "//comment4": " {", "//comment5": " return 225;", "//comment6": " }", "//comment7": "", "//comment8": " function destroy(address sendFoundsTo)", "//comment9": " {", "//comment10": " suicide(sendFoundsTo);", "//comment11": " }", "//comment12": "}", "//comment13": "contract main", "//comment14": "{", "//comment15": " bool returnValue;", "//comment16": " function run() returns (bool)", "//comment17": " {", "//comment18": " returnValue = testContractSuicide();", "//comment19": " return returnValue;", "//comment20": " }", "//comment21": "", "//comment22": " function testContractSuicide() returns (bool res)", "//comment23": " {", "//comment24": " TestContract a = new TestContract();", "//comment25": " a.destroy(block.coinbase);", "//comment26": " if (a.testMethod() == 225) //we should be able to call a contract", "//comment27": " return true;", "//comment28": " return false;", "//comment29": " }", "//comment30": "}", "code" : ":raw 0x7c01000000000000000000000000000000000000000000000000000000006000350463a60eedda8114610039578063c04062261461004b57005b61004161005d565b8060005260206000f35b61005361015a565b8060005260206000f35b60006000608161018a600039608160006000f0905073ffffffffffffffffffffffffffffffffffffffff811662f55d9d6000807ef55d9d00000000000000000000000000000000000000000000000000000000825260044173ffffffffffffffffffffffffffffffffffffffff168152602001600060008660325a03f16100e057005b505073ffffffffffffffffffffffffffffffffffffffff811663b9c3d0a5602060007fb9c3d0a50000000000000000000000000000000000000000000000000000000081526004600060008660325a03f161013757005b505060005160e11461014857610151565b60019150610156565b600091505b5090565b600061016461005d565b600060006101000a81548160ff0219169083021790555060ff600160005404169050905600607580600c6000396000f3007c01000000000000000000000000000000000000000000000000000000006000350462f55d9d81146036578063b9c3d0a514604557005b603f600435605a565b60006000f35b604b6055565b8060005260206000f35b60e190565b8073ffffffffffffffffffffffffffffffffffffffff16ff5056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestCryptographicFunctionsFiller.json ================================================ { "TestCryptographicFunctions" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1": "contract main", "//comment2": "{", "//comment3": " bool returnValue;", "//comment4": " function run() returns (bool)", "//comment5": " {", "//comment6": " returnValue = testKeywords();", "//comment7": " return returnValue;", "//comment8": " }", "//comment9": "", "//comment10": " function testKeywords() returns (bool res)", "//comment11": " {", "//comment12": " //some simple checks for the if statement", "//comment13": " //if, else, while, for, break, continue, return", "//comment14": " int i = 0;", "//comment15": " res = false;", "//comment16": "", "//comment17": " if (i == 0)", "//comment18": " {", "//comment19": " if( i <= -25)", "//comment20": " {", "//comment21": " return false;", "//comment22": " }", "//comment23": " else", "//comment24": " {", "//comment25": " while(i < 10)", "//comment26": " i++;", "//comment27": "", "//comment28": " if (i == 10)", "//comment29": " {", "//comment30": " for(var j=10; j>0; j--)", "//comment31": " {", "//comment32": " i--;", "//comment33": " }", "//comment34": " }", "//comment35": " }", "//comment36": " }", "//comment37": "", "//comment38": " if (i == 0)", "//comment39": " return true;", "//comment40": "", "//comment41": " return false;", "//comment42": " }", "//comment43": "}", "code" : ":raw 0x7c01000000000000000000000000000000000000000000000000000000006000350463380e439681146037578063c040622614604757005b603d6084565b8060005260206000f35b604d6057565b8060005260206000f35b6000605f6084565b600060006101000a81548160ff0219169083021790555060ff60016000540416905090565b6000808160011560cd575b600a82121560a157600190910190608f565b81600a1460ac5760c9565b50600a5b60008160ff16111560c85760019182900391900360b0565b5b60d5565b6000925060ed565b8160001460e05760e8565b6001925060ed565b600092505b50509056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestOverflowFiller.json ================================================ { "TestOverflow" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1" : "contract main", "//comment2" : "{", "//comment3" : " bool returnValue;", "//comment4" : " function run() returns (bool)", "//comment5" : " {", "//comment6" : " returnValue = testOverflow();", "//comment7" : " return returnValue;", "//comment8" : " }", "//comment9" : "", "//comment10" : " function testOverflow() returns (bool res)", "//comment11" : " {", "//comment12" : " res = true;", "//comment13" : " uint256 a = 115792089237316195423570985008687907853269984665640564039457584007913129639935;", "//comment14" : " if (a + 1 != 0)", "//comment15" : " return false;", "//comment16" : "", "//comment17" : " uint32 b = 4294967295;", "//comment18" : " if (b + 1 != 0)", "//comment19" : " return false;", "//comment20" : "", "//comment21" : " uint64 c = 18446744073709551615;", "//comment22" : " if (c + 1 != 0)", "//comment23" : " return false;", "//comment24" : " }", "//comment25" : "}", "code" : ":raw 0x6000357c0100000000000000000000000000000000000000000000000000000000900480638040cac41461003a578063c04062261461004c57005b610042610099565b8060005260206000f35b61005461005e565b8060005260206000f35b6000610068610099565b600060006101000a81548160ff02191690830217905550600060009054906101000a900460ff169050610096565b90565b60006000600060006001935083507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff925060006001840114156100db576100e4565b6000935061013b565b63ffffffff915060006001830163ffffffff1614156101025761010b565b6000935061013b565b67ffffffffffffffff905060006001820167ffffffffffffffff1614156101315761013a565b6000935061013b565b5b5050509056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "5000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestStoreGasPricesFiller.json ================================================ { "TestStoreGasPrices" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x5661", "0x01" : "0x71", "0x02" : "0x71", "0x03" : "0x71", "0x04" : "0x71", "0x05" : "0x71" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1" : "contract main", "//comment2" : "{", "//comment3" : " uint[32] m_gasUsed;", "//comment4" : " int storage;", "//comment5" : " function run() returns (bool)", "//comment6" : " {", "//comment7" : " uint startgas = msg.gas;", "//comment8" : "", "//comment9" : " storage = 1; //zero to non zero", "//comment10" : " m_gasUsed[0] = startgas - msg.gas;", "//comment11" : " startgas = msg.gas;", "//comment12" : "", "//comment13" : " storage = 2; /\non zero to non zero", "//comment14" : " m_gasUsed[1] = startgas - msg.gas;", "//comment15" : " startgas = msg.gas;", "//comment16" : "", "//comment17" : " storage = 2; /\non zero to same non zero", "//comment18" : " m_gasUsed[2] = startgas - msg.gas;", "//comment19" : " startgas = msg.gas;", "//comment20" : "", "//comment21" : " storage = 24784793845734; /\non zero to huge non zero", "//comment22" : " m_gasUsed[3] = startgas - msg.gas;", "//comment23" : " startgas = msg.gas;", "//comment24" : "", "//comment25" : " storage = 2; //huge non zero to non zero", "//comment26" : " m_gasUsed[4] = startgas - msg.gas;", "//comment27" : " startgas = msg.gas;", "//comment28" : "", "//comment29" : " storage = 0; /\non zero to zero", "//comment30" : " m_gasUsed[5] = startgas - msg.gas;", "//comment31" : " startgas = msg.gas;", "//comment32" : "", "//comment33" : " return true;", "//comment34" : " }", "//comment35" : "}", "code" : ":raw 0x7c01000000000000000000000000000000000000000000000000000000006000350463c04062268114602d57005b6033603d565b8060005260206000f35b600060005a600160205590505a81036000555a600260205590505a81036001555a600260205590505a81036002555a65168aa8d53fe660205590505a81036003555a600260205590505a81036004555a600060205590505a81036005555a5060019291505056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "500000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "35000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/TestStructuresAndVariablessFiller.json ================================================ { "TestStructuresAndVariabless" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0xff", "0x02" : "", "0x03" : "0xff", "0x04" : "0x676c6f62616c2064617461203332206c656e67746820737472696e6700000000", "0x05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc" : "" } } } } ], "pre" : { "" : { "balance" : "100000", "//comment1" : "contract main", "//comment2" : "{", "//comment3" : " struct StructTest", "//comment4" : " {", "//comment5" : " address addr;", "//comment6" : " int amount;", "//comment7" : " bytes32 str;", "//comment8" : " mapping (uint => address) funders;", "//comment9" : " }", "//comment10" : "", "//comment11" : " bool returnValue;", "//comment12" : " int globalValue;", "//comment13" : " StructTest globalData;", "//comment14" : " function run() returns (bool)", "//comment15" : " {", "//comment16" : " globalValue = 255;", "//comment17" : " globalData.addr = ;", "//comment18" : " globalData.amount = 255;", "//comment19" : " globalData.str = 'global data 32 length string';", "//comment20" : " globalData.funders[0] = ;", "//comment21" : " returnValue = testStructuresAndVariabless();", "//comment22" : " return returnValue;", "//comment23" : " }", "//comment24" : "", "//comment25" : " function testStructuresAndVariabless() returns (bool res)", "//comment26" : " {", "//comment27" : " res = true;", "//comment28" : " if (globalValue != 255)", "//comment29" : " return false;", "//comment30" : "", "//comment31" : " if (globalValue != globalData.amount)", "//comment32" : " return false;", "//comment33" : "", "//comment34" : " if (globalData.addr != )", "//comment35" : " return false;", "//comment36" : "", "//comment37" : " if (globalData.str != 'global data 32 length string')", "//comment38" : " return false;", "//comment39" : "", "//comment40" : " if (globalData.funders[0] != )", "//comment41" : " return false;", "//comment42" : " }", "//comment43" : "}", "code" : ":raw 0x7c010000000000000000000000000000000000000000000000000000000060003504632a9afb838114610039578063c04062261461004b57005b61004161005d565b8060005260206000f35b61005361016c565b8060005260206000f35b600160ff8154141561006e57610076565b506000610169565b60015460035414156100875761008f565b506000610169565b7373ffffffffffffffffffffffffffffffffffffffff60016002540481161614156100cd576100d5565b506000610169565b7f676c6f62616c2064617461203332206c656e67746820737472696e670000000060045414156101045761010c565b506000610169565b6005600080815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673141561016057610168565b506000610169565b5b90565b600060ff8060015550736002805473ffffffffffffffffffffffffffffffffffffffff1916821790555060ff80600355507f676c6f62616c2064617461203332206c656e67746820737472696e67000000008060045550736005600080815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555061022f61005d565b600060006101000a81548160ff0219169083021790555060ff6001600054041690509056", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xc0406226" ], "gasLimit" : [ "350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stSolidityTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSpecialTest/FailedCreateRevertsDeletionParisFiller.json ================================================ { "FailedCreateRevertsDeletionParis" : { "_info" : { "comment" : "A modification of stRevertTests/RevertInCreateInInit. That test, for EIP158 only, accidentally tested the case where a contract creation transaction touches an empty account and then fails. This one tests the same thing not just for EIP158 but any network thereafter." }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x0a10000000", "currentNumber" : "0x01", "currentTimestamp" : "0x03e8" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "10", "code" : "", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0x6400000000", "code" : "", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "{ (seq (address) (CREATE 0 0 (lll (seq (mstore 0 0x112233) (revert 0 32)) 0)) (invalid) ) }" ], "gasLimit" : [ "0x0186a0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x00" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/JUMPDEST_AttackFiller.json ================================================ { "JUMPDEST_Attack" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x600060006000600060003061c3505a03f1005b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/JUMPDEST_AttackwithJumpFiller.json ================================================ { "JUMPDEST_AttackwithJump" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6003565b600060006000600060003061c3505a03f1005b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/OverflowGasMakeMoneyFiller.json ================================================ { "OverflowGasMakeMoney" : { "_info" : { "comment" : "Apparently this test was testing theoretical issue occur when tr gas > block gas limit overflow. no longer the case" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "92143648376000353180", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "501" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/StackDepthLimitSECFiller.json ================================================ { "StackDepthLimitSEC" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x0a", "code" : "0x600060006000600060003060405a03f1" }, "//a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//balance" : "99943010" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x305032503350600460006000396000515060046000600037600051506f600060006000600060003060405a03f160005260106010f3" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSpecialTest/block504980Filler.json ================================================ { "block504980" : { "env" : { "currentCoinbase" : "1cdc8315bdb1362de8b7b2fa9ee75dc873037179", "currentDifficulty" : "0x020000", "currentGasLimit" : "3141592", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0x01" }, "0000000000000000000000000000000000000001" : { "balance" : "0x01" }, "0000000000000000000000000000000000000002" : { "balance" : "0x01" }, "0000000000000000000000000000000000000003" : { "balance" : "0x01" }, "0000000000000000000000000000000000000004" : { "balance" : "0x01" }, "0ea65418d7bf32680f55572c943a94b590804998" : { "balance" : "0x00", "nonce" : "0x00", "storage" : { "0x065d5efdfcc0fba693dc9e467f633097ffdc97401901463ad0e28855486d1edf" : "0xb9d69098a6acfe0c6411bcaaf430f78d363a9adc32b78bc2e15ccd6e883e9784", "0x12643ff300762717d27efb567b82c65560d7b43249d908504e5510863ab82aac" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d7" : "0x05", "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d8" : "0x01", "0x19efb13d6576359514ace5211988a8d51379fa88ccd2b886b409f842b13d7932" : "0xc849cc595b452d11c206d2eb8cdfa06de211e3ff19ee0e0276dc857c05d4fe", "0x1b37e91bf8580c7c6bcf8cdff25c7ed78180124a94af6f30c40d476a3d079ad6" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", "0x2bf9fd8facdd6fd9c84657f5ad7381a5aecf670cda68cb3c5829b6532c865506" : "0x53098a1d111586dbcc0d051846284f5803c63c313e7f7e6d84430435d11d4c50", "0x3111bfd25728c0adfad0f8c1ad79cb1b91167267deca98de88f156ed25caeedc" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", "0x3379e7ae125c5c5d623d1d993c1459b61d6723b1c30d1aa026c48f6a6155b8ea" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee2" : "0x01", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee3" : "0x01", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee4" : "0x01", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee5" : "0x01", "0x39050607fe892059a6344ab0f594f382fb0b345cab373497246dbe86fe7e14e7" : "0x2b3bca833e482737e7e47b1568e6f890f8e1666490d38fe130abd6f0ccb109cf", "0x417be8bc6791807372e0222a350bb8a5d67bbc8d7595c301d8a5a8372cfdcef1" : "0xabd4971b4605a7155802f70e08298b1ceb0e4e4eaccccd348f77a77227f73a7f", "0x41e9a54b3ee0c276aa076babb161de12b0f8916b47f8f6fb85cc387cf34696dd" : "0x22f2f444ebda9d2913ffef5059b039ec9b5876aa71821991c2515bf79f64935e", "0x45ceb8da6fb8936592d3bce4883f1a6a34d636f559e0a1070a5802a65ac39bd5" : "0x57a5122ff3bf737b0de0f9f08011a8648c19e43ff071fb7086234723c9383f1f", "0x4aa6b934608a45c8f53a945c05ddee1814a3b9f63a048fc7ad3d47e67156f024" : "0xd03862becedada67b4825a0238f3e67495ccb595cd7d08f1bd5d3160644b9299", "0x4b8b58f0b0e326a5907d1a810e5ff31e05b4cab45125b776db8577e7dbc46bce" : "0x2f0000000000000000", "0x4c33460347337bfc7df08bf182988301b7b426a27a67f1c6c634f637c60e87ac" : "0xbab4ab2ad4eafe7c84ef6a8cd69157d9ce6b843793a2cd0877b8e91f63cb2d4d", "0x58da0c0c256bba101ce36fad8bf838717a57e6ab850a191dc9c09da9ce56bf1b" : "0x05", "0x5cb38b16db1d632086d4af695de7f5f242a6e40947067f96edd566fe2ac438ef" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", "0x64a9621cc4ba92bf738c55010c609dfaa3972a1138c30b5adcef1ba2363b360e" : "0xd7953bfe8cb591f129fd0862a9e9c421151e2b5831560ff5215d23f751364b35", "0x696664a5f0ab5acd9304a377fb684f2d3fe6bb60b8a95cb2bdbb57db767e7a84" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", "0x69ad1d19e617936abdf05133bf268dc8ced6b518f22b249b5860967d07006487" : "0x8c803b48b383ddabd1b3afe858efb48c203229b7317dd76149dddab4253b858a", "0x70b3bf53996fac325eb67608a4eeb0cd0b55def6255d7ed42ad28ec07238b5d6" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", "0x7a9dcee62e3e02cc8e020f372df2efdeb835f091c1ef1dbe221072d1095aabd2" : "0x2f0000000000000000", "0x7e4d8c0f6d8abb4ce1ae45b254046aceedabfa9548851b8b5d3e2c0637c985fd" : "0x0b", "0x7e95f3cc3315d289c52253baaba29b1b00c86816e6b788d50795279a8baa00db" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", "0x8da187157087529ee4e9c381f8e3149c56acf3bdfda29b8b9b4532f24b83f5fe" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", "0x9001f91ddaef87bc067886e874c0749998c9b58b2ec8472ca014ca8b55f88578" : "0x0fb76974eefca01f33fb38646c2d3c1536f1a763d7aff53ab7f877d4c5ea7fd0", "0x9ed0cedd2a9a78d949f40019f53d10031aef6ed342c97e01fc03b481ee56b3cb" : "0x04", "0x9fddf1db29caa5c1239edd86e9e0835cdfe41f7253ec78f62d3da8558d6f3cd7" : "0x104eef8fa35bf39f677d81855bc0b9f42317f32792e98e95e4df441deb634211", "0xa0953566119395c11186b334805fc1a16175ecac0ecc93ae0322264f0dc2e40d" : "0x10c5a00466ab7c0adae1e93537cc275ea8cf23ff509d5466a1fd6f56b0a61d1b", "0xaa0dbf8241ef3ae07c254e6869e84895ba2be0779a7f261c8308a3114be1c54a" : "0x04", "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2d" : "0x01", "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2e" : "0x01", "0xb4a2b68c48ef78aeb641ee538fad51781022fd23ed9d93d211017db6a02376ce" : "0x0fbc06642245cf2fed7ed46ea0a18a7185830b6f2c4e0a4ca55246041e8bfa72", "0xba8d79990898383919e437f2458b93b340072c89d963808d9e04f51858e3c5ec" : "0x41d2cac534d90a0dbd199117481a63e32cc11411dab2eaa36c91c0eec62823cf", "0xbb3bc1a2015123750df57d4ceff7e28cb847910b79b34841de905b59a8bb177c" : "0x734417eb19e1873427257f1ea1594748c16cfa866a7b7cf896e281f2ec774a40", "0xbf30cdcb83ab2bd5f5eee691ffa4107b58b75ba6a5c2e6754d4c5c0437f2876c" : "0x05", "0xc2a26b80067fc36b8268b0d5b31afff953fa91cebea39f191e2763d6e71259b9" : "0x02a43c547fe8de2400d2a141016550e8bae058d41164247c099e787ddd40e789", "0xc98339d275eef16e0562ca8521212cef61aa0f39b12e2a27502aaa97a9e5e70f" : "0x5a3de2a5c268cdb75f4b01507aa80c4e4a1bc67bcb0df265bbb00060774e5978", "0xcbd6ae6bd61bc9270ec836f1919b3268113abe076c7febfdb8cf573b199ce9a9" : "0xf402b17773c1f7534034ee58dc0d2a3421470a7a67daf4fa790dc3b420eef790", "0xd2c8cbb562fccd0c9a3d0d491b7f65cc6a89856498f933427d9d21b745b9d50e" : "0x3625a26fdb7b747501f1ee2500f98c49d9cd290383a21254587c3c49d2805321", "0xd66f52a4e24585238ccc03443b2fdb8b2b100259bc7260f39097c7c339211ffe" : "0x1641851904381915c86b60df7e288896fb5f8ebad65d594829fb9f2b59cd1da6", "0xd8f720c05a5526dd621d1831ae122abddd3dfecd8b63b0ba4c92fa7b2ade44ff" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", "0xdc22d3171b82817c910bbeac1f8b50c8de99f8c524f172aef3491981bd5ed4fb" : "0x94b8cba4ea090d1c392fbc94b82fb9ef9f468a15bbc537f4d051776f4d422b1d", "0xdce8adbdefa929dbe60245f359446db4174c62824b42e5d4d9e7b834b4d61deb" : "0x2c9069845b2e74c577ff1cd18df6bc452805f527a9ee91fd4a059e0408b5dea6", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d196" : "0x01", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d197" : "0x01", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d198" : "0x01", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d199" : "0x01", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d19a" : "0x01", "0xe54f074c81bfa60b5bf413934c108086298b77291560edfeead8aa1232e95236" : "0x0f40aaa24323c9e6983ccffafeebe4b426509b901e8c98b8a40d881804804e6b", "0xe66c0f55f66c752edf73027d45b7b1ae729ae15e1c67c362dbc6f25edf8d76ff" : "0x01", "0xe983d899f807bbcb5881f2ddf875b2ebb5cb8a7a4e77a8c98a40aaae6a468735" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", "0xed7d6e2d40fbd5046412ffad1c45b63d87c6197182d6dbc66bb1e5c6e4ded5c7" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", "0xf043b5a1952847579f233706a8f130889a484d2da3e574fdd5859f05aaf52111" : "0x02", "0xf40f4cfdacb62dd799f36b580349fac1f4a4caf8dd3383cc387c35adb6574e21" : "0x2f0000000000000000", "0xf60fa6e25e9028a6dc6b26bbc1eadae3da157df0d1d6f6628bc33cad68a7e455" : "0x2d7d00618c059ebe40593b9497c633e1ac6e161dadbd5bb734c2663cd3e8a8e1", "0xfd280ac5182d5b2366122f38acfa6dc471240ffde9d5feb985ce7a2325c960e7" : "0x03" } }, "142a6927cf0060133187ba8a8e74d641438f0c1c" : { "balance" : "0x00", "code" : "0x600061031f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e602052730ea65418d7bf32680f55572c943a94b5908049986040526327138bfb81141561038d57600435608052601c6044599059016000905201637a66d7ca601c8203526080516004820152602060e06024836000602051602d5a03f15060e051905060a052601c604459905901600090520163c60409c6601c820352608051600482015260206101206024836000602051602d5a03f150610120519050430561010052600061014052600061016052600061018052600260a051016101005112151561010a576001610140525b60006101a052610100516101c0525b606461010051016101c051121561018457601c606459905901600090520163cc1c944e601c82035260805160048201526101c051602482015260206101e06044836000604051602d5a03f1506101e05190506101a051016101a05260016101c051016101c052610119565b6005601c606459905901600090520163cc1c944e601c820352608051600482015260a051602482015260206102006044836000604051602d5a03f1506102005190501280156101d357806101db565b600a6101a051125b9050156101eb57610140516101ee565b60005b1561033657601c604459905901600090520163c5476efe601c820352608051600482015260206102406024836000602051602d5a03f15061024051905050601c6064599059016000905201637265802d601c82035260805160048201526000602482015260206102606044836000602051602d5a03f15061026051905050601c606459905901600090520163c286273a601c82035260805160048201526000602482015260206102806044836000602051602d5a03f15061028051905050601c6044599059016000905201637a66d7ca601c820352608051600482015260206102a06024836000602051602d5a03f1506102a051905060a052601c608459905901600090520163bb8e4196601c820352608051600482015260a051602482015261010051604482015260206102c06064836000604051602d5a03f1506102c051905050610343565b6001610160526001610180525b61014051156103555761016051610358565b60005b156103665761018051610369565b60005b1561037f5760016102e05260206102e0f361038c565b6000610300526020610300f35b5b50", "nonce" : "0x00", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" }, "c9ae5868651bf7b7db6e360217db49ce4e69c07e" : { "balance" : "0x00", "code" : "0x600061083f537c010000000000000000000000000000000000000000000000000000000060003504637a66d7ca8114156100665760043560405260606060599059016000905260008152604051816020015260008160400152809050205460605260206060f35b63c60409c68114156100a55760043560405260606060599059016000905260008152604051816020015260018160400152809050205460a052602060a0f35b63186335768114156100e45760043560405260606060599059016000905260008152604051816020015260028160400152809050205460e052602060e0f35b63b3903c8a8114156101bc57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610120526101205180602002602001599059016000905281815260208101905090506101605260006101c0525b610120516101c051121561019f57608060805990590160009052600081526040518160200152600481604001526101c051816060015280905020546101c05160200261016051015260016101c051016101c052610147565b6101605160206040820352602060208203510260400160408203f3505b636824e0fb8114156101fd57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610220526020610220f35b633db16be381141561023e57600435604052606060605990590160009052600081526040518160200152600681604001528090502054610260526020610260f35b63c33878588114156102e05760006102a0526000546102c0526102c05180602002602001599059016000905281815260208101905090506102e0525b6102c0516102a05112156102c357604060405990590160009052600181526102a051816020015280905020546102a0516020026102e051015260016102a051016102a05261027a565b6102e05160206040820352602060208203510260400160408203f3505b63175c63228114156102fa57600054610380526020610380f35b63d861f2b4811415610336576004356103a052604060405990590160009052600181526103a051816020015280905020546103c05260206103c0f35b63b0dab01f81141561044f57600435610400526024356104205260443561044052606435610460526000606060605990590160009052600081526104005181602001526001816040015280905020541415610441576104205160606060599059016000905260008152610400518160200152600081604001528090502055610440516060606059905901600090526000815261040051816020015260018160400152809050205561046051606060605990590160009052600081526104005181602001526006816040015280905020556104005160406040599059016000905260018152600054816020015280905020556001600054016000556001610520526020610520f361044e565b6000610540526020610540f35b5b63aac2ffb58114156104b95760043560405260016060606059905901600090526000815260405181602001526002816040015280905020540160606060599059016000905260008152604051816020015260028160400152809050205560016105a05260206105a0f35b637265802d811415610507576004356040526024356105c0526105c0516060606059905901600090526000815260405181602001526002816040015280905020556001610600526020610600f35b63c5476efe811415610571576004356040526001606060605990590160009052600081526040518160200152600081604001528090502054016060606059905901600090526000815260405181602001526000816040015280905020556001610660526020610660f35b63c551e31e81141561063b576004356040526024356106805260606060599059016000905260008152604051816020015260058160400152809050205461012052610680516080608059905901600090526000815260405181602001526004816040015261012051816060015280905020556001606060605990590160009052600081526040518160200152600581604001528090502054016060606059905901600090526000815260405181602001526005816040015280905020556001610720526020610720f35b633d90504581141561067c57600435604052606060605990590160009052600081526040518160200152600381604001528090502054610740526020610740f35b631cda01ef8114156106e65760043560405260016060606059905901600090526000815260405181602001526003816040015280905020540160606060599059016000905260008152604051816020015260038160400152809050205560016107c05260206107c0f35b63c286273a811415610734576004356040526024356107e0526107e0516060606059905901600090526000815260405181602001526003816040015280905020556001610820526020610820f35b50", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x0a4470e9d0419df71f6257fcdfd2c0a3bad96a23f5ab414bc10aaf1a31a536a7" : "0xb4876148229c22bd2291f1a4f5468c8c789b23639370c4d447f270ba341dbbec", "0x16ef4193a274568d283ff919c299729e07696d9ada48187b81d68e12e7b962de" : "0x0a103c04e7ecb9b3395f77c7b0cad28e62c85f042de4767ccc6c005e6f47f8d4", "0x1f1866e966f321b84535705846689749d34d5dc02994613e2931973c605d9e93" : "0xc723d0aa4a60529fe42277c8094aa19263aff36650136efc5edfd0785d457634", "0x252a4ec7133643fddcdb22a86c415f78b2dd251f18d1efcd6a44acf590c4ae72" : "0x9caf94b82715869e71d3cee986094ea612f0258570b7e5ef47b5d09e9515322b", "0x41b451e8d86d28add758cbd3f48a18fd04b11a80288c1dc434a5bf2d8fb1ca64" : "0xb602498f12a8b4af3a1fca357cea6b19bcd163dfec1d845364ce1395f7c21fa7", "0x491d10658c1ec762152d8ad2d890ad59111b1ee7b4bc25736046923d3534d9a5" : "0x629e", "0x5b0e8552efd72a845e47318abbbef9dc9fcdfe0d1a06cda44494401301581511" : "0xfbc98f4017ae5c20459daadaa6bee519b6de871d3dbaa9ab3f34340fef4cb643", "0x5b672a107ba6fab01cbddf079042e9f6176a8e6f154584fc4df4b15674c9456e" : "0x1603da41d610854d85536b37d000e5eb7ca09786c43f50e7441c0afbff1de0a9", "0x605b934bd26c9ecdf7029a7dc062d3a6b87338511cff96e0c5f13de9eea3462e" : "0xf0d24f3d0eda573fc5d43e3d0680993c51293752cd6de205040d3197f412f475", "0x618355e25491dfe86175f9d9b3147e4d680aa561d98384e3621dc6a3088b0846" : "0x6b2e6d2d5deb27dffec973f23af4caf111e66d1397f467dbbedf5ab2192fb6b6", "0x65112936bec0f1e84fda6623fb54e12baadc8a4a208c8c4eb3ed5e79cbd7e85f" : "0xa59ac24e3e0663413d0f87516ba8fb44c6c3e14da8eaabbde80f8ee285f65934", "0x687cb2122de7bacf42b9cd380b04ff2a2ce92a0b63706a9a78263b3ce86f3313" : "0x0200000000000000", "0x72a539b064c98d29a514ee55694225e05fb41fe63e5fe710e4536bd9ba3591b4" : "0x338ecfe6c523ed1184918b19584d97dd1095ecaadc49c7ba9da62b8b513026e0", "0x7aeb0a0ce8882a12d853078382a2bc72f7a94af6109f167de37b36c0a7deb828" : "0x4c428400ea8a7bd7c46ba9895b508770efa4551f0d793e1beb1207da01d9962f", "0x7c8f4a98e086f64e28c75f54712b5d44bec3c29b5c70519e8880d3046a5618dc" : "0xaafc1f2601752b114d722070f75539bfec7faf49f0d48a48d27862f0c3b09903", "0x809c325f50acf5787776e960985e72443b4330ad1e2f466557fffee16ba51d44" : "0xb940a56e64b5b661d87919b8ef03640ec077a6d72dd0b524adedaa7ddc91ff7a", "0x84e4a80d33c5d2abd2b0a5aec0fdc5eaeed90ab31db556e404a81718ea286e39" : "0x1c", "0x877305412fa2486f563c457b744e5c8b1e4d0eca73371de5e771f2abc263f4dc" : "0x7088a36f67276d475aa62127cfde9790cc802fdf3a54df49461a25eb8bf15707", "0x922a8f2fc1cbe67c8acc6a8a720983c366d71d3e2e78e3048949ebc913ea611a" : "0x50fb9f913ca102534bb0a8eb8ebf19c68dfd16ffe5e207bcc580084cd4ecd8b4", "0x987cb9ecfd8ce499d9d0e9e6b7da29617aa02774a34f4a8ea54442f44a1e1936" : "0x5179f98f555f1e9f1d4a335d16f41154579a53e361e9859269b6fa74ea9c7d21", "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d" : "0x0f69b5", "0xb16b117660f31197087f4d6fe50d3d4579152244956f753f9653ccf85f4b35c4" : "0x830272e3bb35226b047244cbdc46f1b6b864a280461e7a592f70e0863f4f1d33", "0xb1f1aaedfb83c7755a2bffc9e2557f1723f9abe5642397963e76248c9209af57" : "0xe9be955c5fbfcd846d7425eaea05ce897786aefad99665342cbf30761b352526", "0xb7bd50fdf7b043411c9ac33f0af2cebc69c393eb0b91f4976946f9c7b15ad0da" : "0xfccca0e7832bae9afe799a6d6177dc3869fa6c5b5105f8df6f365de5723820ec", "0xbc96058eb03504ee6f5c0a9582f8720d99a6e9738b171499507facff0b2c0b5b" : "0x9db6a4f2766b51013b8d2f9038131d1bb4af725d019d111d7e26ff96c023b23f", "0xc186c4f377b7f13892ade9656acd1522aa1f8ac151ac4f62457b5073241d79fc" : "0x7289738fef00f1770eeb098db9bd486c01ac12398d79cdf935514a128c585c51", "0xcae57ae3017972d63effd8eae44f5054402c3e890d154b905ed6b5b533327fa9" : "0xd2e4bf465e61993d13089b940a7c55017a5117d8e43e4115550a139e1d4b3e3a", "0xcf569ee7bf3accc0f893dffd04f1a757f373efe80893eff504fb3678f688ec1d" : "0x03", "0xd69b7284545a9f5275df64ce94848dc954fcb8a8b525e7ac801517c12a75af84" : "0x4202995350abae303b43e564aa79121a30b5f1aea31f69cd25e07dd3fa64dce7", "0xd8f6f90f51e657690ee28d1cc80d81bc1b89290065891fdd853d09caaaf756aa" : "0x01", "0xde72f8eed43cc2a5a3eaa51483d14b17dc92bb26c154ae184cee4b4895011edc" : "0x47ce2b6fdb72c3fabb9c74f82c1e3e522bcd42e614fd85c208ac3c4c840cea72", "0xe0e687ddf317f3d2b209ae3884148eff0f636e16827f82eded14ada8fc603009" : "0xfa7c8939f9b033162cf8d75ea69671bb8a27041bd4cdc76594e61e99333cb041", "0xe8cda339d72a1a350b62f1e3fa52e254c395cc9fdd9f60adb21c7633fbdab531" : "0x128c4fdf4801a30eae99dd58f0f3ff5ca65f71b66a9ac0f38dd450fb24b4aaaa", "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x14", "0xf9a3bf5f2ccb903ee1a7644113b794db0260de404fb8f11203e75a7fff151618" : "0xbd94773c0d85c68240ae8dfd53d9d33cd137509bfc5d3433381299df768c8377" } }, "e509e3a93beb1eba72f8cb8d25f93a85e2d54afb" : { "nonce" : "0x00", "storage" : { "0x0f299dbbe3a7a5d949fe794e9a47b3106699c8110ff986eb84921c183e69e7f0" : "0x2f0000000000000000", "0x1edcd36f61cae5dc6414157dfbadf9f11ca013ac763e27f8af55feaa8a239c89" : "0x01", "0x689082d076ec3c02cbe4b99f6d9833e3c4a161072fd42fb7649eee5189a67ccc" : "0x63524e3fe4791aefce1e932bbfb3fdf375bfad89", "0xaf1d6676be3ab502a59d91f6f5c49baffc15b2cfc65a41c4d96857c0f535adba" : "0x01d60000000000000000", "0xdf1a770f69d93d1719292f384fdb4da22c0e88aef2ba462bff16674bc7848730" : "0x1c11aa45c792e202e9ffdc2f12f99d0d209bef70", "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x02" } }, "f1562e1c0d0baa3ea746442bb7f11153fcf5cfda" : { "code" : "0x600061067f537c010000000000000000000000000000000000000000000000000000000060003504632f300bee8114156100ac576004356040526024356060526044356080526002608051018080602002602001599059016000905281815260208101905090506801000000000000000081526060516080516020028201526001604051036001608051016020028201528060206040820352602060208203510260400160408203f35050505b63a647a5b98114156102c85736599059016000905236600482376004356020820101610100526024356020820101610160526044356020820101610180526064356101a05260843560805250602061010051035180806020026020015990590160009052818152602081019050905060005b6101a0518112156101d557600060005b608051811215610162578060200261010051015181608051850201602002610160510151028201915060018101905061012e565b50680100000000000000008105905060005b6080518112156101c857700100000000000000000000000000000000836020026101805101518260805186020160200261016051015184020205816020028501510381602002850152600181019050610174565b505060018101905061011e565b50600060005b60805181121561020357806020028301518160200284015102820191506001810190506101db565b5068010000000000000000810590506002810560005b600b81121561024257600282680100000000000000008502058301059150600181019050610219565b5060005b60805181121561027657816801000000000000000082602002860151020581602002850152600181019050610246565b5050506001608051602002610100510151036080516020028201526001608051016020026101005101516001608051016020028201528060206040820352602060208203510260400160408203f35050505b635b18022981141561037957365990590160009052366004823760043560208201016103005260243560208201016103205260443560805250600060005b60805181121561033f57680100000000000000008160200261032051015182602002610300510151020582019150600181019050610306565b6000610320515114151561036657610320515168010000000000000000830205915061036b565b600091505b81610380526020610380f350505b63f4ca7dc481141561057157365990590160009052366004823760043560208201016103a05260243560208201016103c0526044356101a0526064356080525060206103c051035160026080510a806020026020015990590160009052818152602081019050905060005b60805181121561044d5760005b6080518112156104415768010000000000000000816020026103a0510151836020026103a051015102058160805184020160200284015101816080518402016020028401526001810190506103f1565b506001810190506103e4565b81905090508180602002602001599059016000905281815260208101905090506080516101a05102806020026020015990590160009052818152602081019050905060005b6101a05181121561051e5760005b6080518112156105125760005b608051811215610506576801000000000000000082608051830201602002870151826080518602016020026103c051015102058260805185020160200285015101826080518502016020028501526001810190506104ad565b506001810190506104a0565b50600181019050610492565b819050905060005b848112156105525780602002820151816020026103c05101510381602002840152600181019050610526565b508160206040820352602060208203510260400160408203f350505050505b63232b273481141561069d57365990590160009052366004823760043560208201016106205260243560208201016102805260443560208201016103c052606435610640526084356101a05260a435608052506000610280515112156106025760005b6080518112156106005780602002610280510151600003816020026102805101526001810190506105d4565b505b60005b6101a05181121561067f5760005b60805181121561067357680100000000000000006801000000000000000082602002610280510151610640510205826080518502016020026103c05101510205826020026106205101510182602002610620510152600181019050610613565b50600181019050610605565b6106205160206040820352602060208203510260400160408203f350505b50", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "0000000000000000000000000000000000000000" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "0000000000000000000000000000000000000001" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "0000000000000000000000000000000000000002" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "0000000000000000000000000000000000000003" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "0000000000000000000000000000000000000004" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "0ea65418d7bf32680f55572c943a94b590804998" : { "balance" : "0", "code" : ":raw 0x600061289f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e60205263c4982a8581141561012757600435606052602435608052608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460a05260a051806020026020015990590160009052818152602081019050905060e0526000610140525b60a05161014051121561010b5760a060a0599059016000905260008152606051816020015260805181604001526001816060015261014051816080015280905020546101405160200260e051015260016101405101610140526100ad565b60e05160206040820352602060208203510260400160408203f3505b63cc1c944e8114156101765760043560605260243560805260806080599059016000905260008152606051816020015260805181604001526000816060015280905020546101a05260206101a0f35b6395a405b98114156101d5576004356060526024356080526044356101e05260a060a059905901600090526000815260605181602001526080518160400152600181606001526101e05181608001528090502054610200526020610200f35b6371ebb662811415610224576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600281606001528090502054610240526020610240f35b637a57a3db811415610325576004356060526024356080526044356102805260c060c0599059016000905260008152606051816020015260805181604001526003816060015261028051816080015260008160a0015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156102e95780840154816020028301526001810190506102c8565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63f73dc690811415610394576004356060526024356080526044356103c0526064356103e05260c060c059905901600090526000815260605181602001526080518160400152600381606001526103c05181608001526103e0518160a001528090502054610400526020610400f35b6354cc61098114156103f3576004356060526024356080526044356103c05260a060a059905901600090526000815260605181602001526080518160400152600481606001526103c05181608001528090502054610440526020610440f35b63c63ef546811415610442576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600581606001528090502054610480526020610480f35b639381779b8114156105335760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600681606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156104f75780840154816020028301526001810190506104d6565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b634f9c6eeb8114156106245760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600781606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156105e85780840154816020028301526001810190506105c7565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637dc121958114156107155760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600881606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156106d95780840154816020028301526001810190506106b8565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63fa9832d18114156108065760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600981606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156107ca5780840154816020028301526001810190506107a9565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b632c5a40d58114156108f75760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600a81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156108bb57808401548160200283015260018101905061089a565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63e05dcb568114156109eb5760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600b81606001526000816080015280905020600260806080599059016000905260008152606051816020015260805181604001526000816060015280905020546020020180806020015990590160009052818152602081019050905060005b602083048112156109af57808401548160200283015260018101905061098e565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63586b5be0811415610a3a576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600c81606001528090502054610b80526020610b80f35b63eb8af5aa811415610b585760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600d81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610b1c578084015481602002830152600181019050610afb565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637ab6ea8a811415610c765760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600e81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610c3a578084015481602002830152600181019050610c19565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b632b810cb9811415610d945760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600f81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610d58578084015481602002830152600181019050610d37565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637fb42e46811415610e855760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601081606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215610e49578084015481602002830152600181019050610e28565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63734fa727811415610f765760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601181606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215610f3a578084015481602002830152600181019050610f19565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63c67fa8578114156110675760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601281606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b6020830481121561102b57808401548160200283015260018101905061100a565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b635ed853e48114156111855760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601381606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215611149578084015481602002830152600181019050611128565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63b86f51258114156112a35760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601481606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215611267578084015481602002830152600181019050611246565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63bc3d7d858114156113945760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601581606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215611358578084015481602002830152600181019050611337565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63a2302f2f81141561148157600435606052602435611680526044356116a0526116a05160a060a0599059016000905260008152606051816020015261168051816040015260018160600152608060805990590160009052600081526060518160200152611680518160400152600081606001528090502054816080015280905020556001608060805990590160009052600081526060518160200152611680518160400152600081606001528090502054016080608059905901600090526000815260605181602001526116805181604001526000816060015280905020556001611740526020611740f35b63058ca2bc8114156114dd576004356060526024356080526044356117605261176051608060805990590160009052600081526060518160200152608051816040015260028160600152809050205560016117a05260206117a0f35b635d3b965b8114156116175736599059016000905236600482376004356060526024356080526044356102805260643560208201016117e052608435611800525060c060c0599059016000905260008152606051816020015260805181604001526003816060015261028051816080015260008160a001528090502060206117e05103516020026020810460005b8181121561158c57806020026117e05101518482015560018101905061156b565b602083066020036101000a600003816020026117e05101511684820155505050506118005160806080599059016000905260008152606051816020015260805181604001526002816060015280905020540160806080599059016000905260008152606051816020015260805181604001526002816060015280905020556001611900526020611900f35b63b0e14f0f81141561167357600435606052602435608052604435611920526119205160806080599059016000905260008152606051816020015260805181604001526005816060015280905020556001611960526020611960f35b636acccdbc8114156117395736599059016000905236600482376004356060526024356080526044356020820101611980525060a060a05990590160009052600081526060518160200152608051816040015260068160600152600081608001528090502060206119805103516020026020810460005b8181121561170b5780602002611980510151848201556001810190506116ea565b602083066020036101000a600003816020026119805101511684820155505050506001611a40526020611a40f35b63a1fa51f98114156117ff5736599059016000905236600482376004356060526024356080526044356020820101611a60525060a060a0599059016000905260008152606051816020015260805181604001526007816060015260008160800152809050206020611a605103516020026020810460005b818112156117d15780602002611a60510151848201556001810190506117b0565b602083066020036101000a60000381602002611a605101511684820155505050506001611b20526020611b20f35b63cd87f43a8114156118c55736599059016000905236600482376004356060526024356080526044356020820101611b40525060a060a0599059016000905260008152606051816020015260805181604001526008816060015260008160800152809050206020611b405103516020026020810460005b818112156118975780602002611b4051015184820155600181019050611876565b602083066020036101000a60000381602002611b405101511684820155505050506001611c00526020611c00f35b63222a866381141561198b5736599059016000905236600482376004356060526024356080526044356020820101611c20525060a060a0599059016000905260008152606051816020015260805181604001526009816060015260008160800152809050206020611c205103516020026020810460005b8181121561195d5780602002611c205101518482015560018101905061193c565b602083066020036101000a60000381602002611c205101511684820155505050506001611ce0526020611ce0f35b63b39e1faa811415611a515736599059016000905236600482376004356060526024356080526044356020820101611d00525060a060a059905901600090526000815260605181602001526080518160400152600a816060015260008160800152809050206020611d005103516020026020810460005b81811215611a235780602002611d0051015184820155600181019050611a02565b602083066020036101000a60000381602002611d005101511684820155505050506001611dc0526020611dc0f35b63e365736b811415611b175736599059016000905236600482376004356060526024356080526044356020820101611de0525060a060a059905901600090526000815260605181602001526080518160400152600b816060015260008160800152809050206020611de05103516020026020810460005b81811215611ae95780602002611de051015184820155600181019050611ac8565b602083066020036101000a60000381602002611de05101511684820155505050506001611ea0526020611ea0f35b63aad7d6e3811415611b7357600435606052602435608052604435611ec052611ec0516080608059905901600090526000815260605181602001526080518160400152600c816060015280905020556001611f00526020611f00f35b6301112b27811415611c395736599059016000905236600482376004356060526024356080526044356020820101611f20525060a060a059905901600090526000815260605181602001526080518160400152600d816060015260008160800152809050206020611f205103516020026020810460005b81811215611c0b5780602002611f2051015184820155600181019050611bea565b602083066020036101000a60000381602002611f205101511684820155505050506001611fe0526020611fe0f35b63bdbb239b811415611cff5736599059016000905236600482376004356060526024356080526044356020820101612000525060a060a059905901600090526000815260605181602001526080518160400152600e8160600152600081608001528090502060206120005103516020026020810460005b81811215611cd1578060200261200051015184820155600181019050611cb0565b602083066020036101000a6000038160200261200051015116848201555050505060016120c05260206120c0f35b6305a0cd48811415611dc557365990590160009052366004823760043560605260243560805260443560208201016120e0525060a060a059905901600090526000815260605181602001526080518160400152600f8160600152600081608001528090502060206120e05103516020026020810460005b81811215611d9757806020026120e051015184820155600181019050611d76565b602083066020036101000a600003816020026120e051015116848201555050505060016121a05260206121a0f35b63aaa1fe35811415611e8b57365990590160009052366004823760043560605260243560805260443560208201016121c0525060a060a05990590160009052600081526060518160200152608051816040015260108160600152600081608001528090502060206121c05103516020026020810460005b81811215611e5d57806020026121c051015184820155600181019050611e3c565b602083066020036101000a600003816020026121c05101511684820155505050506001612280526020612280f35b632be4935d811415611f5157365990590160009052366004823760043560605260243560805260443560208201016122a0525060a060a05990590160009052600081526060518160200152608051816040015260118160600152600081608001528090502060206122a05103516020026020810460005b81811215611f2357806020026122a051015184820155600181019050611f02565b602083066020036101000a600003816020026122a05101511684820155505050506001612360526020612360f35b6313a8350d8114156120175736599059016000905236600482376004356060526024356080526044356020820101612380525060a060a05990590160009052600081526060518160200152608051816040015260128160600152600081608001528090502060206123805103516020026020810460005b81811215611fe9578060200261238051015184820155600181019050611fc8565b602083066020036101000a600003816020026123805101511684820155505050506001612440526020612440f35b63cb540b458114156120dd5736599059016000905236600482376004356060526024356080526044356020820101612460525060a060a05990590160009052600081526060518160200152608051816040015260138160600152600081608001528090502060206124605103516020026020810460005b818112156120af57806020026124605101518482015560018101905061208e565b602083066020036101000a600003816020026124605101511684820155505050506001612520526020612520f35b63be0306278114156121a35736599059016000905236600482376004356060526024356080526044356020820101612540525060a060a05990590160009052600081526060518160200152608051816040015260148160600152600081608001528090502060206125405103516020026020810460005b81811215612175578060200261254051015184820155600181019050612154565b602083066020036101000a600003816020026125405101511684820155505050506001612600526020612600f35b6383fd77f08114156122695736599059016000905236600482376004356060526024356080526044356020820101612620525060a060a05990590160009052600081526060518160200152608051816040015260158160600152600081608001528090502060206126205103516020026020810460005b8181121561223b57806020026126205101518482015560018101905061221a565b602083066020036101000a6000038160200261262051015116848201555050505060016126e05260206126e0f35b63594622058114156122d5576004356060526024356080526044356103c052606435612700526127005160a060a059905901600090526000815260605181602001526080518160400152600481606001526103c051816080015280905020556001612740526020612740f35b63bb8e419681141561244857600435606052602435612760526044356127805260006127a0525b6080608059905901600090526000815260605181602001526001612760510381604001526000816060015280905020546127a051121561243b5760a060a05990590160009052600081526060518160200152600161276051038160400152600181606001526127a0518160800152809050205460a060a05990590160009052600081526060518160200152612780518160400152600181606001526080608059905901600090526000815260605181602001526127805181604001526000816060015280905020548160800152809050205560016080608059905901600090526000815260605181602001526127805181604001526000816060015280905020540160806080599059016000905260008152606051816020015261278051816040015260008160600152809050205560016127a051016127a0526122fc565b6001612880526020612880f35b50", "nonce" : "0", "storage" : { "0x065d5efdfcc0fba693dc9e467f633097ffdc97401901463ad0e28855486d1edf" : "0xb9d69098a6acfe0c6411bcaaf430f78d363a9adc32b78bc2e15ccd6e883e9784", "0x12643ff300762717d27efb567b82c65560d7b43249d908504e5510863ab82aac" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d7" : "0x0000000000000000000000000000000000000000000000000000000000000005", "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d8" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x19efb13d6576359514ace5211988a8d51379fa88ccd2b886b409f842b13d7932" : "0x00c849cc595b452d11c206d2eb8cdfa06de211e3ff19ee0e0276dc857c05d4fe", "0x1b37e91bf8580c7c6bcf8cdff25c7ed78180124a94af6f30c40d476a3d079ad6" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", "0x2bf9fd8facdd6fd9c84657f5ad7381a5aecf670cda68cb3c5829b6532c865506" : "0x53098a1d111586dbcc0d051846284f5803c63c313e7f7e6d84430435d11d4c50", "0x3111bfd25728c0adfad0f8c1ad79cb1b91167267deca98de88f156ed25caeedc" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", "0x3379e7ae125c5c5d623d1d993c1459b61d6723b1c30d1aa026c48f6a6155b8ea" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee2" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee3" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee4" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee5" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x39050607fe892059a6344ab0f594f382fb0b345cab373497246dbe86fe7e14e7" : "0x2b3bca833e482737e7e47b1568e6f890f8e1666490d38fe130abd6f0ccb109cf", "0x417be8bc6791807372e0222a350bb8a5d67bbc8d7595c301d8a5a8372cfdcef1" : "0xabd4971b4605a7155802f70e08298b1ceb0e4e4eaccccd348f77a77227f73a7f", "0x41e9a54b3ee0c276aa076babb161de12b0f8916b47f8f6fb85cc387cf34696dd" : "0x22f2f444ebda9d2913ffef5059b039ec9b5876aa71821991c2515bf79f64935e", "0x45ceb8da6fb8936592d3bce4883f1a6a34d636f559e0a1070a5802a65ac39bd5" : "0x57a5122ff3bf737b0de0f9f08011a8648c19e43ff071fb7086234723c9383f1f", "0x4aa6b934608a45c8f53a945c05ddee1814a3b9f63a048fc7ad3d47e67156f024" : "0xd03862becedada67b4825a0238f3e67495ccb595cd7d08f1bd5d3160644b9299", "0x4b8b58f0b0e326a5907d1a810e5ff31e05b4cab45125b776db8577e7dbc46bce" : "0x00000000000000000000000000000000000000000000002f0000000000000000", "0x4c33460347337bfc7df08bf182988301b7b426a27a67f1c6c634f637c60e87ac" : "0xbab4ab2ad4eafe7c84ef6a8cd69157d9ce6b843793a2cd0877b8e91f63cb2d4d", "0x58da0c0c256bba101ce36fad8bf838717a57e6ab850a191dc9c09da9ce56bf1b" : "0x0000000000000000000000000000000000000000000000000000000000000005", "0x5cb38b16db1d632086d4af695de7f5f242a6e40947067f96edd566fe2ac438ef" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", "0x64a9621cc4ba92bf738c55010c609dfaa3972a1138c30b5adcef1ba2363b360e" : "0xd7953bfe8cb591f129fd0862a9e9c421151e2b5831560ff5215d23f751364b35", "0x696664a5f0ab5acd9304a377fb684f2d3fe6bb60b8a95cb2bdbb57db767e7a84" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", "0x69ad1d19e617936abdf05133bf268dc8ced6b518f22b249b5860967d07006487" : "0x8c803b48b383ddabd1b3afe858efb48c203229b7317dd76149dddab4253b858a", "0x70b3bf53996fac325eb67608a4eeb0cd0b55def6255d7ed42ad28ec07238b5d6" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", "0x7a9dcee62e3e02cc8e020f372df2efdeb835f091c1ef1dbe221072d1095aabd2" : "0x00000000000000000000000000000000000000000000002f0000000000000000", "0x7e4d8c0f6d8abb4ce1ae45b254046aceedabfa9548851b8b5d3e2c0637c985fd" : "0x000000000000000000000000000000000000000000000000000000000000000b", "0x7e95f3cc3315d289c52253baaba29b1b00c86816e6b788d50795279a8baa00db" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", "0x8da187157087529ee4e9c381f8e3149c56acf3bdfda29b8b9b4532f24b83f5fe" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", "0x9001f91ddaef87bc067886e874c0749998c9b58b2ec8472ca014ca8b55f88578" : "0x0fb76974eefca01f33fb38646c2d3c1536f1a763d7aff53ab7f877d4c5ea7fd0", "0x9ed0cedd2a9a78d949f40019f53d10031aef6ed342c97e01fc03b481ee56b3cb" : "0x0000000000000000000000000000000000000000000000000000000000000004", "0x9fddf1db29caa5c1239edd86e9e0835cdfe41f7253ec78f62d3da8558d6f3cd7" : "0x104eef8fa35bf39f677d81855bc0b9f42317f32792e98e95e4df441deb634211", "0xa0953566119395c11186b334805fc1a16175ecac0ecc93ae0322264f0dc2e40d" : "0x10c5a00466ab7c0adae1e93537cc275ea8cf23ff509d5466a1fd6f56b0a61d1b", "0xaa0dbf8241ef3ae07c254e6869e84895ba2be0779a7f261c8308a3114be1c54a" : "0x0000000000000000000000000000000000000000000000000000000000000004", "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2d" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2e" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xb4a2b68c48ef78aeb641ee538fad51781022fd23ed9d93d211017db6a02376ce" : "0x0fbc06642245cf2fed7ed46ea0a18a7185830b6f2c4e0a4ca55246041e8bfa72", "0xba8d79990898383919e437f2458b93b340072c89d963808d9e04f51858e3c5ec" : "0x41d2cac534d90a0dbd199117481a63e32cc11411dab2eaa36c91c0eec62823cf", "0xbb3bc1a2015123750df57d4ceff7e28cb847910b79b34841de905b59a8bb177c" : "0x734417eb19e1873427257f1ea1594748c16cfa866a7b7cf896e281f2ec774a40", "0xbf30cdcb83ab2bd5f5eee691ffa4107b58b75ba6a5c2e6754d4c5c0437f2876c" : "0x0000000000000000000000000000000000000000000000000000000000000005", "0xc2a26b80067fc36b8268b0d5b31afff953fa91cebea39f191e2763d6e71259b9" : "0x02a43c547fe8de2400d2a141016550e8bae058d41164247c099e787ddd40e789", "0xc98339d275eef16e0562ca8521212cef61aa0f39b12e2a27502aaa97a9e5e70f" : "0x5a3de2a5c268cdb75f4b01507aa80c4e4a1bc67bcb0df265bbb00060774e5978", "0xcbd6ae6bd61bc9270ec836f1919b3268113abe076c7febfdb8cf573b199ce9a9" : "0xf402b17773c1f7534034ee58dc0d2a3421470a7a67daf4fa790dc3b420eef790", "0xd2c8cbb562fccd0c9a3d0d491b7f65cc6a89856498f933427d9d21b745b9d50e" : "0x3625a26fdb7b747501f1ee2500f98c49d9cd290383a21254587c3c49d2805321", "0xd66f52a4e24585238ccc03443b2fdb8b2b100259bc7260f39097c7c339211ffe" : "0x1641851904381915c86b60df7e288896fb5f8ebad65d594829fb9f2b59cd1da6", "0xd8f720c05a5526dd621d1831ae122abddd3dfecd8b63b0ba4c92fa7b2ade44ff" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", "0xdc22d3171b82817c910bbeac1f8b50c8de99f8c524f172aef3491981bd5ed4fb" : "0x94b8cba4ea090d1c392fbc94b82fb9ef9f468a15bbc537f4d051776f4d422b1d", "0xdce8adbdefa929dbe60245f359446db4174c62824b42e5d4d9e7b834b4d61deb" : "0x2c9069845b2e74c577ff1cd18df6bc452805f527a9ee91fd4a059e0408b5dea6", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d196" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d197" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d198" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d199" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d19a" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xe54f074c81bfa60b5bf413934c108086298b77291560edfeead8aa1232e95236" : "0x0f40aaa24323c9e6983ccffafeebe4b426509b901e8c98b8a40d881804804e6b", "0xe66c0f55f66c752edf73027d45b7b1ae729ae15e1c67c362dbc6f25edf8d76ff" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xe983d899f807bbcb5881f2ddf875b2ebb5cb8a7a4e77a8c98a40aaae6a468735" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", "0xed7d6e2d40fbd5046412ffad1c45b63d87c6197182d6dbc66bb1e5c6e4ded5c7" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", "0xf043b5a1952847579f233706a8f130889a484d2da3e574fdd5859f05aaf52111" : "0x0000000000000000000000000000000000000000000000000000000000000002", "0xf40f4cfdacb62dd799f36b580349fac1f4a4caf8dd3383cc387c35adb6574e21" : "0x00000000000000000000000000000000000000000000002f0000000000000000", "0xf60fa6e25e9028a6dc6b26bbc1eadae3da157df0d1d6f6628bc33cad68a7e455" : "0x2d7d00618c059ebe40593b9497c633e1ac6e161dadbd5bb734c2663cd3e8a8e1", "0xfd280ac5182d5b2366122f38acfa6dc471240ffde9d5feb985ce7a2325c960e7" : "0x0000000000000000000000000000000000000000000000000000000000000003" } }, "142a6927cf0060133187ba8a8e74d641438f0c1c" : { "balance" : "0", "code" : ":raw 0x600061031f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e602052730ea65418d7bf32680f55572c943a94b5908049986040526327138bfb81141561038d57600435608052601c6044599059016000905201637a66d7ca601c8203526080516004820152602060e06024836000602051602d5a03f15060e051905060a052601c604459905901600090520163c60409c6601c820352608051600482015260206101206024836000602051602d5a03f150610120519050430561010052600061014052600061016052600061018052600260a051016101005112151561010a576001610140525b60006101a052610100516101c0525b606461010051016101c051121561018457601c606459905901600090520163cc1c944e601c82035260805160048201526101c051602482015260206101e06044836000604051602d5a03f1506101e05190506101a051016101a05260016101c051016101c052610119565b6005601c606459905901600090520163cc1c944e601c820352608051600482015260a051602482015260206102006044836000604051602d5a03f1506102005190501280156101d357806101db565b600a6101a051125b9050156101eb57610140516101ee565b60005b1561033657601c604459905901600090520163c5476efe601c820352608051600482015260206102406024836000602051602d5a03f15061024051905050601c6064599059016000905201637265802d601c82035260805160048201526000602482015260206102606044836000602051602d5a03f15061026051905050601c606459905901600090520163c286273a601c82035260805160048201526000602482015260206102806044836000602051602d5a03f15061028051905050601c6044599059016000905201637a66d7ca601c820352608051600482015260206102a06024836000602051602d5a03f1506102a051905060a052601c608459905901600090520163bb8e4196601c820352608051600482015260a051602482015261010051604482015260206102c06064836000604051602d5a03f1506102c051905050610343565b6001610160526001610180525b61014051156103555761016051610358565b60005b156103665761018051610369565b60005b1561037f5760016102e05260206102e0f361038c565b6000610300526020610300f35b5b50", "nonce" : "0", "storage" : { } }, "1cdc8315bdb1362de8b7b2fa9ee75dc873037179" : { "balance" : "0x01", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "9761fecf88590592cf05ce545504d376d1693ab3" : { "balance" : "0", "code" : ":raw 0x60006105df537c010000000000000000000000000000000000000000000000000000000060003504730ea65418d7bf32680f55572c943a94b59080499860205273e509e3a93beb1eba72f8cb8d25f93a85e2d54afb60405273c9ae5868651bf7b7db6e360217db49ce4e69c07e60605273f1562e1c0d0baa3ea746442bb7f11153fcf5cfda60805263546fdeb381141561038d5760043560c05260243560e05260443561010052606435610120526084356101405260026101005101601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f150604081019050905090506000600161010051016020028201511415610250576060601c61014c59905901600090520163e365736b601c82035260c051600482015260e0516024820152601c6084599059016000905201632f300bee601c82035260026004820152600560248201526101005160448201528460408160200201599059016000905281602002604001816064856000608051602d5a03f1506040810190509050905060208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16101fc57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161022357fe5b50808401935050808303602061028082846000602051602d5a03f15061028051905090509050905061037d565b6060601c61014c59905901600090520163e365736b601c82035260c051600482015260e0516024820152601c6084599059016000905201632f300bee601c820352600160016101005101602002850151036004820152600560248201526101005160448201528460408160200201599059016000905281602002604001816064856000608051602d5a03f1506040810190509050905060208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf161032d57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161035457fe5b5080840193505080830360206102c082846000602051602d5a03f1506102c05190509050905090505b5060016102e05260206102e0f350505b63de9080c88114156107645760043560c05260243560e05260443561010052606435610120526084356101405260026101005101601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201528160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201632c5a40d5601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f1506040810190509050905061012051806020026020015990590160009052818152602081019050905060005b610120518112156104ee57601c60645990590160009052016328c8b315601c82035260c051600482015281602482015260206103606044836000604051602d5a03f15061036051905081602002830152600181019050610493565b5060a0601c61020c59905901600090520163a647a5b9601c8203528460208103516020026020018360048401526020820360a484015280610148840152808401935050508360208103516020026020018360248401526020820360c484015280610168840152808401935050508260208103516020026020018360448401526020820360e4840152806101888401528084019350505061012051606482015261010051608482015281600401599059016000905260a48160a484600060046022f16105b557fe5b60a4810192506101488201518080858260a487015160006004600a8705601201f16105dc57fe5b508084019350506101688201518080858260c487015160006004600a8705601201f161060457fe5b508084019350506101888201518080858260e487015160006004600a8705601201f161062c57fe5b5080840193505080830387604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905092506060601c61014c59905901600090520163e365736b601c82035260c051600482015260e05160248201528460208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16106df57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161070657fe5b5080840193505080830360206103c082846000602051602d5a03f1506103c05190509050905090505060006101005160200284015114156107525760006103e05260206103e0f361075f565b6001610400526020610400f35b505050505b63384ca8dd811415610a665760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c606459905901600090520163fa9832d1601c82035260c051600482015260e05160248201526101005160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c608459905901600090520163aad7d6e3601c82035260c051600482015260e05160248201526060601c61014c599059016000905201635b180229601c8203528360208103516020026020018360048401526020820360648401528060c8840152808401935050508460208103516020026020018360248401526020820360848401528060e88401528084019350505061010051604482015281600401599059016000905260648160648460006004601cf161090157fe5b60648101925060c882015180808582606487015160006004600a8705601201f161092757fe5b5080840193505060e882015180808582608487015160006004600a8705601201f161094e57fe5b50808401935050808303602061044082846000608051602d5a03f150610440519050905090509050604482015260206104606064836000602051602d5a03f150610460519050506060601c61014c59905901600090520163222a8663601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf1610a0757fe5b6064810192506101088201518080858260a487015160006004600a8705601201f1610a2e57fe5b50808401935050808303602061048082846000602051602d5a03f1506104805190509050905090505060016104a05260206104a0f350505b63d5dc5af1811415610d4b5760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201632c5a40d5601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f150604081019050905090506080601c6101ac59905901600090520163f4ca7dc4601c82035283602081035160200260200183600484015260208203608484015280610108840152808401935050508260208103516020026020018360248401526020820360a4840152806101288401528084019350505061012051604482015261010051606482015281600401599059016000905260848160848460006004601ff1610be757fe5b60848101925061010882015180808582608487015160006004600a8705601201f1610c0e57fe5b508084019350506101288201518080858260a487015160006004600a8705601201f1610c3657fe5b5080840193505080830361014051604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905090506060601c61014c59905901600090520163b39e1faa601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf1610cec57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f1610d1357fe5b5080840193505080830360206104c082846000602051602d5a03f1506104c05190509050905090505060016104e05260206104e0f350505b630939aa8c81141561114c5760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201637dc12195601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c606459905901600090520163586b5be0601c82035260c051600482015260e051602482015260206105006044836000602051602d5a03f150610500519050601c606459905901600090520163eb8af5aa601c82035260c051600482015260e05160248201526101205160408160200201599059016000905281602002604001816044856000602051602d5a03f1506040810190509050905060c0601c61026c59905901600090520163232b2734601c8203528260208103516020026020018360048401526020820360c484015280610188840152808401935050508560208103516020026020018360248401526020820360e4840152806101a88401528084019350505084602081035160200260200183604484015260208203610104840152806101c8840152808401935050508360648201526101205160848201526101005160a482015281600401599059016000905260c48160c484600060046025f1610f9657fe5b60c4810192506101888201518080858260c487015160006004600a8705601201f1610fbd57fe5b508084019350506101a88201518080858260e487015160006004600a8705601201f1610fe557fe5b508084019350506101c88201518080858261010487015160006004600a8705601201f161100e57fe5b5080840193505080830361012051604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905090506060601c61014c5990590160009052016301112b27601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16110c457fe5b6064810192506101088201518080858260a487015160006004600a8705601201f16110eb57fe5b50808401935050808303602061058082846000602051602d5a03f15061058051905090509050905050600060016101005101602002850151141561113a5760006105a05260206105a0f3611147565b60016105c05260206105c0f35b505050505b50", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4000000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "b03f030056db7d467d778326658bac0d1b35d8f7" : { "balance" : "0", "code" : ":raw 0x600061075f537c010000000000000000000000000000000000000000000000000000000060003504731e147037f0a63df228fe6e7aef730f1ea31c8ce3602052730ea65418d7bf32680f55572c943a94b59080499860405273e509e3a93beb1eba72f8cb8d25f93a85e2d54afb60605273c9ae5868651bf7b7db6e360217db49ce4e69c07e60805273142a6927cf0060133187ba8a8e74d641438f0c1c60a05273b163e767e4c1ba5ae88b2ee7594f3a3fec2bb09660c05273ba7b277319128ef4c22635534d0f61dffdaa13ab60e052739761fecf88590592cf05ce545504d376d1693ab36101005273f70bbc50f1468cecae0761ef09386a87c1c696ea6101205273a89d22f049aaa5bbfb5f1a1939fff3ae7a26ae746101405273174827f7e53e8ce13b047adcac0eb3f2cb0c3285610160526336a560bd811415610a88576004356101a052601c60445990590160009052016327138bfb601c8203526101a051600482015260206101e0602483600060a051602d5a03f1506101e05190501515610195576001600003610200526020610200f35b601c6044599059016000905201637a66d7ca601c8203526101a051600482015260206102206024836000608051602d5a03f150610220519050601c606459905901600090520163cc1c944e601c8203526101a05160048201528160248201526020610260604483600061028051602d5a03f150610260519050601c60445990590160009052016380b5e7bd601c8203526101a051600482015260206102a06024836000606051602d5a03f1506102a0519050808202601c60445990590160009052016318633576601c8203526101a051600482015260206103006024836000608051602d5a03f150610300519050600981141561036d57601c60c459905901600090520163ac44d71e601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061036060a483600061016051602d5a03f15061036051905050601c6064599059016000905201637265802d601c8203526101a05160048201526000602482015260206103806044836000608051602d5a03f15061038051905050601c604459905901600090520163c5476efe601c8203526101a051600482015260206103a06024836000608051602d5a03f1506103a051905050600185016103c05260206103c0f3610a3a565b60008114156103cd57601c60c459905901600090520163ef72638a601c8203526101a051600482015285602482015284604482015283606482015282608482015260206103e060a483600060c051602d5a03f1506103e051905050610a39565b600181141561042d57601c60c459905901600090520163a63e976c601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061040060a483600060e051602d5a03f15061040051905050610a38565b600281141561048d57601c60c459905901600090520163533ea0ed601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061042060a483600060e051602d5a03f15061042051905050610a37565b600381141561085057601c606459905901600090520163e05dcb56601c8203526101a0516004820152856024820152600285016040816020020159905901600090528160200260400181604485600061028051602d5a03f15060408101905090509050601c6044599059016000905201633d905045601c8203526101a051600482015260206104806024836000608051602d5a03f150610480519050600481141561063357601c60c4599059016000905201630939aa8c601c8203526101a051600482015287602482015286604482015285606482015284608482015260206104e060a483600061010051602d5a03f1506104e05190506104c052601c606459905901600090520163c286273a601c8203526101a05160048201526000602482015260206105006044836000608051602d5a03f1506105005190505060016104c05114156105e55782610520526020610520f361062e565b601c604459905901600090520163aac2ffb5601c8203526101a051600482015260206105406024836000608051602d5a03f1506105405190505060018301610560526020610560f35b610804565b600081141561069457601c60c459905901600090520163546fdeb3601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061058060a483600061010051602d5a03f15061058051905050610803565b6001811415610742576000601c60c459905901600090520163de9080c8601c8203526101a051600482015288602482015287604482015286606482015285608482015260206105a060a483600061010051602d5a03f1506105a0519050141561073257601c6044599059016000905201631cda01ef601c8203526101a051600482015260206105c06024836000608051602d5a03f1506105c0519050505b826105e05260206105e0f3610802565b60028114156107a357601c60c459905901600090520163384ca8dd601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061060060a483600061010051602d5a03f15061060051905050610801565b600381141561080057601c60c459905901600090520163d5dc5af1601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061062060a483600061010051602d5a03f150610620519050505b5b5b5b5b601c6044599059016000905201631cda01ef601c8203526101a051600482015260206106406024836000608051602d5a03f1506106405190505082610660526020610660f35050610a36565b60048114156108b157601c60c459905901600090520163f6559853601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061068060a483600061012051602d5a03f15061068051905050610a35565b600581141561091257601c60c459905901600090520163d8e5473d601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106a060a483600061012051602d5a03f1506106a051905050610a34565b600681141561097357601c60c459905901600090520163090507ea601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106c060a483600061012051602d5a03f1506106c051905050610a33565b60078114156109d457601c60c4599059016000905201635b911842601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106e060a483600061014051602d5a03f1506106e051905050610a32565b6008811415610a3157601c60c459905901600090520163abe22b84601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061070060a483600061014051602d5a03f150610700519050505b5b5b5b5b5b5b5b5b5b601c604459905901600090520163aac2ffb5601c8203526101a051600482015260206107206024836000608051602d5a03f1506107205190505060018101610740526020610740f350505050505b50", "nonce" : "0", "storage" : { } }, "c9ae5868651bf7b7db6e360217db49ce4e69c07e" : { "balance" : "0", "code" : ":raw 0x600061083f537c010000000000000000000000000000000000000000000000000000000060003504637a66d7ca8114156100665760043560405260606060599059016000905260008152604051816020015260008160400152809050205460605260206060f35b63c60409c68114156100a55760043560405260606060599059016000905260008152604051816020015260018160400152809050205460a052602060a0f35b63186335768114156100e45760043560405260606060599059016000905260008152604051816020015260028160400152809050205460e052602060e0f35b63b3903c8a8114156101bc57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610120526101205180602002602001599059016000905281815260208101905090506101605260006101c0525b610120516101c051121561019f57608060805990590160009052600081526040518160200152600481604001526101c051816060015280905020546101c05160200261016051015260016101c051016101c052610147565b6101605160206040820352602060208203510260400160408203f3505b636824e0fb8114156101fd57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610220526020610220f35b633db16be381141561023e57600435604052606060605990590160009052600081526040518160200152600681604001528090502054610260526020610260f35b63c33878588114156102e05760006102a0526000546102c0526102c05180602002602001599059016000905281815260208101905090506102e0525b6102c0516102a05112156102c357604060405990590160009052600181526102a051816020015280905020546102a0516020026102e051015260016102a051016102a05261027a565b6102e05160206040820352602060208203510260400160408203f3505b63175c63228114156102fa57600054610380526020610380f35b63d861f2b4811415610336576004356103a052604060405990590160009052600181526103a051816020015280905020546103c05260206103c0f35b63b0dab01f81141561044f57600435610400526024356104205260443561044052606435610460526000606060605990590160009052600081526104005181602001526001816040015280905020541415610441576104205160606060599059016000905260008152610400518160200152600081604001528090502055610440516060606059905901600090526000815261040051816020015260018160400152809050205561046051606060605990590160009052600081526104005181602001526006816040015280905020556104005160406040599059016000905260018152600054816020015280905020556001600054016000556001610520526020610520f361044e565b6000610540526020610540f35b5b63aac2ffb58114156104b95760043560405260016060606059905901600090526000815260405181602001526002816040015280905020540160606060599059016000905260008152604051816020015260028160400152809050205560016105a05260206105a0f35b637265802d811415610507576004356040526024356105c0526105c0516060606059905901600090526000815260405181602001526002816040015280905020556001610600526020610600f35b63c5476efe811415610571576004356040526001606060605990590160009052600081526040518160200152600081604001528090502054016060606059905901600090526000815260405181602001526000816040015280905020556001610660526020610660f35b63c551e31e81141561063b576004356040526024356106805260606060599059016000905260008152604051816020015260058160400152809050205461012052610680516080608059905901600090526000815260405181602001526004816040015261012051816060015280905020556001606060605990590160009052600081526040518160200152600581604001528090502054016060606059905901600090526000815260405181602001526005816040015280905020556001610720526020610720f35b633d90504581141561067c57600435604052606060605990590160009052600081526040518160200152600381604001528090502054610740526020610740f35b631cda01ef8114156106e65760043560405260016060606059905901600090526000815260405181602001526003816040015280905020540160606060599059016000905260008152604051816020015260038160400152809050205560016107c05260206107c0f35b63c286273a811415610734576004356040526024356107e0526107e0516060606059905901600090526000815260405181602001526003816040015280905020556001610820526020610820f35b50", "nonce" : "0", "storage" : { "0x0000000000000000000000000000000000000000000000000000000000000000" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0a4470e9d0419df71f6257fcdfd2c0a3bad96a23f5ab414bc10aaf1a31a536a7" : "0xb4876148229c22bd2291f1a4f5468c8c789b23639370c4d447f270ba341dbbec", "0x16ef4193a274568d283ff919c299729e07696d9ada48187b81d68e12e7b962de" : "0x0a103c04e7ecb9b3395f77c7b0cad28e62c85f042de4767ccc6c005e6f47f8d4", "0x1f1866e966f321b84535705846689749d34d5dc02994613e2931973c605d9e93" : "0xc723d0aa4a60529fe42277c8094aa19263aff36650136efc5edfd0785d457634", "0x252a4ec7133643fddcdb22a86c415f78b2dd251f18d1efcd6a44acf590c4ae72" : "0x9caf94b82715869e71d3cee986094ea612f0258570b7e5ef47b5d09e9515322b", "0x41b451e8d86d28add758cbd3f48a18fd04b11a80288c1dc434a5bf2d8fb1ca64" : "0xb602498f12a8b4af3a1fca357cea6b19bcd163dfec1d845364ce1395f7c21fa7", "0x491d10658c1ec762152d8ad2d890ad59111b1ee7b4bc25736046923d3534d9a5" : "0x000000000000000000000000000000000000000000000000000000000000629e", "0x5b0e8552efd72a845e47318abbbef9dc9fcdfe0d1a06cda44494401301581511" : "0xfbc98f4017ae5c20459daadaa6bee519b6de871d3dbaa9ab3f34340fef4cb643", "0x5b672a107ba6fab01cbddf079042e9f6176a8e6f154584fc4df4b15674c9456e" : "0x1603da41d610854d85536b37d000e5eb7ca09786c43f50e7441c0afbff1de0a9", "0x605b934bd26c9ecdf7029a7dc062d3a6b87338511cff96e0c5f13de9eea3462e" : "0xf0d24f3d0eda573fc5d43e3d0680993c51293752cd6de205040d3197f412f475", "0x618355e25491dfe86175f9d9b3147e4d680aa561d98384e3621dc6a3088b0846" : "0x6b2e6d2d5deb27dffec973f23af4caf111e66d1397f467dbbedf5ab2192fb6b6", "0x65112936bec0f1e84fda6623fb54e12baadc8a4a208c8c4eb3ed5e79cbd7e85f" : "0xa59ac24e3e0663413d0f87516ba8fb44c6c3e14da8eaabbde80f8ee285f65934", "0x687cb2122de7bacf42b9cd380b04ff2a2ce92a0b63706a9a78263b3ce86f3313" : "0x0000000000000000000000000000000000000000000000000200000000000000", "0x72a539b064c98d29a514ee55694225e05fb41fe63e5fe710e4536bd9ba3591b4" : "0x338ecfe6c523ed1184918b19584d97dd1095ecaadc49c7ba9da62b8b513026e0", "0x7aeb0a0ce8882a12d853078382a2bc72f7a94af6109f167de37b36c0a7deb828" : "0x4c428400ea8a7bd7c46ba9895b508770efa4551f0d793e1beb1207da01d9962f", "0x7c8f4a98e086f64e28c75f54712b5d44bec3c29b5c70519e8880d3046a5618dc" : "0xaafc1f2601752b114d722070f75539bfec7faf49f0d48a48d27862f0c3b09903", "0x809c325f50acf5787776e960985e72443b4330ad1e2f466557fffee16ba51d44" : "0xb940a56e64b5b661d87919b8ef03640ec077a6d72dd0b524adedaa7ddc91ff7a", "0x84e4a80d33c5d2abd2b0a5aec0fdc5eaeed90ab31db556e404a81718ea286e39" : "0x000000000000000000000000000000000000000000000000000000000000001c", "0x877305412fa2486f563c457b744e5c8b1e4d0eca73371de5e771f2abc263f4dc" : "0x7088a36f67276d475aa62127cfde9790cc802fdf3a54df49461a25eb8bf15707", "0x922a8f2fc1cbe67c8acc6a8a720983c366d71d3e2e78e3048949ebc913ea611a" : "0x50fb9f913ca102534bb0a8eb8ebf19c68dfd16ffe5e207bcc580084cd4ecd8b4", "0x987cb9ecfd8ce499d9d0e9e6b7da29617aa02774a34f4a8ea54442f44a1e1936" : "0x5179f98f555f1e9f1d4a335d16f41154579a53e361e9859269b6fa74ea9c7d21", "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d" : "0x00000000000000000000000000000000000000000000000000000000000f69b5", "0xb16b117660f31197087f4d6fe50d3d4579152244956f753f9653ccf85f4b35c4" : "0x830272e3bb35226b047244cbdc46f1b6b864a280461e7a592f70e0863f4f1d33", "0xb1f1aaedfb83c7755a2bffc9e2557f1723f9abe5642397963e76248c9209af57" : "0xe9be955c5fbfcd846d7425eaea05ce897786aefad99665342cbf30761b352526", "0xb7bd50fdf7b043411c9ac33f0af2cebc69c393eb0b91f4976946f9c7b15ad0da" : "0xfccca0e7832bae9afe799a6d6177dc3869fa6c5b5105f8df6f365de5723820ec", "0xbc96058eb03504ee6f5c0a9582f8720d99a6e9738b171499507facff0b2c0b5b" : "0x9db6a4f2766b51013b8d2f9038131d1bb4af725d019d111d7e26ff96c023b23f", "0xc186c4f377b7f13892ade9656acd1522aa1f8ac151ac4f62457b5073241d79fc" : "0x7289738fef00f1770eeb098db9bd486c01ac12398d79cdf935514a128c585c51", "0xcae57ae3017972d63effd8eae44f5054402c3e890d154b905ed6b5b533327fa9" : "0xd2e4bf465e61993d13089b940a7c55017a5117d8e43e4115550a139e1d4b3e3a", "0xcf569ee7bf3accc0f893dffd04f1a757f373efe80893eff504fb3678f688ec1d" : "0x0000000000000000000000000000000000000000000000000000000000000003", "0xd69b7284545a9f5275df64ce94848dc954fcb8a8b525e7ac801517c12a75af84" : "0x4202995350abae303b43e564aa79121a30b5f1aea31f69cd25e07dd3fa64dce7", "0xd8f6f90f51e657690ee28d1cc80d81bc1b89290065891fdd853d09caaaf756aa" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0xde72f8eed43cc2a5a3eaa51483d14b17dc92bb26c154ae184cee4b4895011edc" : "0x47ce2b6fdb72c3fabb9c74f82c1e3e522bcd42e614fd85c208ac3c4c840cea72", "0xe0e687ddf317f3d2b209ae3884148eff0f636e16827f82eded14ada8fc603009" : "0xfa7c8939f9b033162cf8d75ea69671bb8a27041bd4cdc76594e61e99333cb041", "0xe8cda339d72a1a350b62f1e3fa52e254c395cc9fdd9f60adb21c7633fbdab531" : "0x128c4fdf4801a30eae99dd58f0f3ff5ca65f71b66a9ac0f38dd450fb24b4aaaa", "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x0000000000000000000000000000000000000000000000000000000000000014", "0xf9a3bf5f2ccb903ee1a7644113b794db0260de404fb8f11203e75a7fff151618" : "0xbd94773c0d85c68240ae8dfd53d9d33cd137509bfc5d3433381299df768c8377" } }, "e509e3a93beb1eba72f8cb8d25f93a85e2d54afb" : { "balance" : "0", "code" : ":raw 0x6000610b7f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e6020526308d3d58781141561024557600435606052606060605990590160009052600081526060518160200152600181604001528090502054608052600060806080599059016000905260008152606051816020015260028160400152328160600152809050205414151561014e57608060805990590160009052600081526060518160200152600281604001523281606001528090502054608052682f000000000000000060a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020553260a060a05990590160009052600081526060518160200152600081604001526080518160600152600181608001528090502055610238565b608051608060805990590160009052600081526060518160200152600281604001523281606001528090502055682f000000000000000060a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020553260a060a059905901600090526000815260605181602001526000816040015260805181606001526001816080015280905020556001606060605990590160009052600081526060518160200152600181604001528090502054016060606059905901600090526000815260605181602001526001816040015280905020555b60016101e05260206101e0f35b6328c8b31581141561029d576004356060526024356102005260a060a0599059016000905260008152606051816020015260008160400152610200518160600152600081608001528090502054610220526020610220f35b6374af23ec8114156103865760043560605260243561026052608060805990590160009052600081526060518160200152600281604001526102605181606001528090502054610200526000610200511415610332576102605160a060a05990590160009052600081526060518160200152600081604001526102005181606001526001816080015280905020541415610335565b60005b156103475760006102c05260206102c0f35b60a060a05990590160009052600081526060518160200152600081604001526102005181606001526000816080015280905020546102e05260206102e0f35b6384d646ee8114156103dc5760043560605260243560805260a060a05990590160009052600081526060518160200152600081604001526080518160600152600181608001528090502054610320526020610320f35b63f42294278114156106f45760043561026052601c602459905901600090520163175c6322601c82035260206103a06004836000602051602d5a03f1506103a0519050610360526102605115610581576103605160020280602002602001599059016000905281815260208101905090506103c05261036051806020026020015990590160009052818152602081019050905061042052601c602459905901600090520163c3387858601c8203526103605160408160200201599059016000905281602002604001816004856000602051602d5a03f150604081019050905090506104205260006104c05260006104e0525b610360516104c051121561057c576104c051602002610420510151606052601c60645990590160009052016374af23ec601c82035260605160048201526102605160248201526020610520604483600030602d5a03f1506105205190506105005260006105005114151561056c576060516104e0516020026103c05101526105005160016104e051016020026103c051015260026104e051016104e0525b60016104c051016104c0526104ce565b6106d7565b32610260526103605160020280602002602001599059016000905281815260208101905090506103c05261036051806020026020015990590160009052818152602081019050905061042052601c602459905901600090520163c3387858601c8203526103605160408160200201599059016000905281602002604001816004856000602051602d5a03f150604081019050905090506104205260006104c05260006104e0525b610360516104c05112156106d6576104c051602002610420510151606052601c60645990590160009052016374af23ec601c820352606051600482015261026051602482015260206105c0604483600030602d5a03f1506105c0519050610500526000610500511415156106c6576060516104e0516020026103c05101526105005160016104e051016020026103c051015260026104e051016104e0525b60016104c051016104c052610628565b5b6103c05160206040820352602060208203510260400160408203f3505b6380b5e7bd81141561073557600435606052606060605990590160009052600081526060518160200152600181604001528090502054610600526020610600f35b63156f1c328114156107865760043560605260243561064052608060805990590160009052600081526060518160200152600281604001526106405181606001528090502054610660526020610660f35b63b3a24fc081141561087857365990590160009052366004823760043560208201016106c0526024356106e05250600260206106c0510351018060200260200159905901600090528181526020810190509050610700523261070051526106e051602061070051015260026104c0525b600260206106c0510351016104c05112156108385760026104c051036020026106c05101516104c05160200261070051015260016104c051016104c0526107f6565b60206107005103516020026020599059016000905260208183610700516000600287604801f15080519050905061076052610760516107c05260206107c0f35b63e346f5fc811415610a1c576004356107e0526024356108005260006104c0525b606060605990590160009052600081526107e05181602001526001816040015280905020546104c05112156109e65760a060a05990590160009052600081526107e0518160200152600081604001526104c0518160600152600181608001528090502054610840526108405160a060a0599059016000905260008152610800518160200152600081604001526104c051816060015260018160800152809050205560a060a05990590160009052600081526107e0518160200152600081604001526104c051816060015260008160800152809050205460a060a0599059016000905260008152610800518160200152600081604001526104c05181606001526000816080015280905020556104c0516080608059905901600090526000815261080051816020015260028160400152610840518160600152809050205560016104c051016104c052610899565b6104c051606060605990590160009052600081526108005181602001526001816040015280905020556001610920526020610920f35b633fb57036811415610b5457600435606052602435610940526060606059905901600090526000815260605181602001526001816040015280905020546109605261096051608060805990590160009052600081526060518160200152600281604001526109405181606001528090502055600060a060a05990590160009052600081526060518160200152600081604001526109605181606001526000816080015280905020556109405160a060a05990590160009052600081526060518160200152600081604001526109605181606001526001816080015280905020556001606060605990590160009052600081526060518160200152600181604001528090502054016060606059905901600090526000815260605181602001526001816040015280905020556001610a40526020610a40f35b6312709a33811415610beb57600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020540160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610ac0526020610ac0f35b633229cf6e811415610c8257600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020540360a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610b20526020610b20f35b63a75f5c6a811415610ce557600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610b60526020610b60f35b50", "nonce" : "0", "storage" : { "0x0f299dbbe3a7a5d949fe794e9a47b3106699c8110ff986eb84921c183e69e7f0" : "0x00000000000000000000000000000000000000000000002f0000000000000000", "0x1edcd36f61cae5dc6414157dfbadf9f11ca013ac763e27f8af55feaa8a239c89" : "0x0000000000000000000000000000000000000000000000000000000000000001", "0x689082d076ec3c02cbe4b99f6d9833e3c4a161072fd42fb7649eee5189a67ccc" : "0x00000000000000000000000063524e3fe4791aefce1e932bbfb3fdf375bfad89", "0xaf1d6676be3ab502a59d91f6f5c49baffc15b2cfc65a41c4d96857c0f535adba" : "0x0000000000000000000000000000000000000000000001d60000000000000000", "0xdf1a770f69d93d1719292f384fdb4da22c0e88aef2ba462bff16674bc7848730" : "0x0000000000000000000000001c11aa45c792e202e9ffdc2f12f99d0d209bef70", "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x0000000000000000000000000000000000000000000000000000000000000002" } }, "f1562e1c0d0baa3ea746442bb7f11153fcf5cfda" : { "balance" : "0", "code" : ":raw 0x600061067f537c010000000000000000000000000000000000000000000000000000000060003504632f300bee8114156100ac576004356040526024356060526044356080526002608051018080602002602001599059016000905281815260208101905090506801000000000000000081526060516080516020028201526001604051036001608051016020028201528060206040820352602060208203510260400160408203f35050505b63a647a5b98114156102c85736599059016000905236600482376004356020820101610100526024356020820101610160526044356020820101610180526064356101a05260843560805250602061010051035180806020026020015990590160009052818152602081019050905060005b6101a0518112156101d557600060005b608051811215610162578060200261010051015181608051850201602002610160510151028201915060018101905061012e565b50680100000000000000008105905060005b6080518112156101c857700100000000000000000000000000000000836020026101805101518260805186020160200261016051015184020205816020028501510381602002850152600181019050610174565b505060018101905061011e565b50600060005b60805181121561020357806020028301518160200284015102820191506001810190506101db565b5068010000000000000000810590506002810560005b600b81121561024257600282680100000000000000008502058301059150600181019050610219565b5060005b60805181121561027657816801000000000000000082602002860151020581602002850152600181019050610246565b5050506001608051602002610100510151036080516020028201526001608051016020026101005101516001608051016020028201528060206040820352602060208203510260400160408203f35050505b635b18022981141561037957365990590160009052366004823760043560208201016103005260243560208201016103205260443560805250600060005b60805181121561033f57680100000000000000008160200261032051015182602002610300510151020582019150600181019050610306565b6000610320515114151561036657610320515168010000000000000000830205915061036b565b600091505b81610380526020610380f350505b63f4ca7dc481141561057157365990590160009052366004823760043560208201016103a05260243560208201016103c0526044356101a0526064356080525060206103c051035160026080510a806020026020015990590160009052818152602081019050905060005b60805181121561044d5760005b6080518112156104415768010000000000000000816020026103a0510151836020026103a051015102058160805184020160200284015101816080518402016020028401526001810190506103f1565b506001810190506103e4565b81905090508180602002602001599059016000905281815260208101905090506080516101a05102806020026020015990590160009052818152602081019050905060005b6101a05181121561051e5760005b6080518112156105125760005b608051811215610506576801000000000000000082608051830201602002870151826080518602016020026103c051015102058260805185020160200285015101826080518502016020028501526001810190506104ad565b506001810190506104a0565b50600181019050610492565b819050905060005b848112156105525780602002820151816020026103c05101510381602002840152600181019050610526565b508160206040820352602060208203510260400160408203f350505050505b63232b273481141561069d57365990590160009052366004823760043560208201016106205260243560208201016102805260443560208201016103c052606435610640526084356101a05260a435608052506000610280515112156106025760005b6080518112156106005780602002610280510151600003816020026102805101526001810190506105d4565b505b60005b6101a05181121561067f5760005b60805181121561067357680100000000000000006801000000000000000082602002610280510151610640510205826080518502016020026103c05101510205826020026106205101510182602002610620510152600181019050610613565b50600181019050610605565b6106205160206040820352602060208203510260400160408203f350505b50", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x36a560bd00000000000000000000000000000000000000000000000000000000000f69b5" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10000000000000", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b03f030056db7d467d778326658bac0d1b35d8f7", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/deploymentErrorFiller.json ================================================ { "deploymentError" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "314159200", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "code" : "0x606060405236156100a35760e060020a60003504630a19b14a81146100ab578063278b8c0e146100e25780632e1a7d4d14610111578063338b5dea14610125578063577863941461015057806365e17c9d146101595780636c86888b1461016b57806393f0bb51146101da5780639e281a9814610207578063c281309e14610232578063d0e30db01461023b578063f7888aec14610287578063fb6e155f146102bb575b6103e6610002565b6103e660043560243560443560643560843560a43560c43560e4356101043561012435610144356000600034111561042b57610002565b6103e660043560243560443560643560843560a43560c43560e43561010435600060003411156108b457610002565b6103e66004356000341115610ab357610002565b6103e66004356024356000341180610146575081600160a060020a03166000145b15610b6157610002565b6103e860035481565b6103fa600254600160a060020a031681565b61041760043560243560443560643560843560a43560c43560e43561010435610124356101443561016435600160a060020a038c8116600090815260208181526040808320938516835292905290812054839010801590610c96575082610c938e8e8e8e8e8e8e8e8e8e6102df565b6103e660043560243560443560643560843560a43560c43560e435610104356000341115610ca457610002565b6103e66004356024356000341180610228575081600160a060020a03166000145b15610d3057610002565b6103e860045481565b6103e633600160a060020a03166000908152600080516020610f9f8339815191526020526040902054610ea390345b6000828201610f8f8482108015906102825750838210155b610660565b6103e8600435602435600160a060020a03828116600090815260208181526040808320938516835292905220545b92915050565b6103e860043560243560443560643560843560a43560c43560e43561010435610124355b600060006000600060028e8e8e8e8e8e6040518087600160a060020a0316606060020a02815260140186815260200185600160a060020a0316606060020a02815260140184815260200183815260200182815260200196505050505050506020604051808303816000866161da5a03f1156100025750506040805180516000828152602083810180865283905260ff8c1684860152606084018b9052608084018a90529351919650600160a060020a038c169360019360a0808201949293601f19840193928390039091019190866161da5a03f11561000257505060206040510351600160a060020a03161480156103d75750894311155b1515610f295760009350610f18565b005b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60028c8c8c8c8c8c6040518087600160a060020a0316606060020a02815260140186815260200185600160a060020a0316606060020a02815260140184815260200183815260200182815260200196505050505050506020604051808303816000866161da5a03f1156100025750506040805180516000828152602083810180865283905260ff8a168486015260608401899052608084018890529351919450600160a060020a038a169360019360a0818101949293601f19840193928390039091019190866161da5a03f11561000257505060206040510351600160a060020a031614801561051b5750874311155b801561054057506000818152600160205260409020548b9061053d908461026a565b11155b80156105715750600160a060020a038c81166000908152602081815260408083203390941683529290522054829010155b80156105b457508a6105838a8461060a565b811561000257600160a060020a038c8116600090815260208181526040808320938c16835292905220549190049010155b151561062b57610002565b600160a060020a038d81166000908152602081815260408083203385168452909152808220939093559088168152205460035461066c9190670de0b6b3a7640000906106bc90869083035b6000828202610f8f8483148061028257508385838115610002570414610660565b600160a060020a038c811660009081526020818152604080832033909416835292905220546105bf90835b6000610f96838311155b801515610ab057610002565b600160a060020a038d81166000908152602081815260408083208b8516845290915280822093909355600254909116815220546003546106c89190670de0b6b3a7640000906106bc90869061060a565b8115610002570461026a565b600160a060020a038d8116600090815260208181526040808320600254851684528252808320949094558d83168252818152838220928a168252919091522054610717908c61076c8c8661060a565b600160a060020a038b81166000908152602081815260408083208b851684529091528082209390935533909116815220546004546107789190670de0b6b3a7640000908e906107cd906107e09084038f61060a565b81156100025704610656565b600160a060020a038b8116600090815260208181526040808320338516845290915280822093909355600254909116815220546004546107e69190670de0b6b3a7640000908e906107cd906107e0908f61060a565b811561000257048115610002570461026a565b8761060a565b600160a060020a038b81166000908152602081815260408083206002549094168352928152828220939093558381526001909252902054610827908361026a565b6000828152600160205260409020557f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8c838c8e8d830281156100025760408051600160a060020a03968716815260208101959095529285168484015204606083015289831660808301523390921660a082015290519081900360c00190a1505050505050505050505050565b60028a8a8a8a8a8a6040518087600160a060020a0316606060020a02815260140186815260200185600160a060020a0316606060020a02815260140184815260200183815260200182815260200196505050505050506020604051808303816000866161da5a03f1156100025750506040805180516000828152602083810180865283905260ff8916848601526060840188905260808401879052935191945033600160a060020a03169360019360a0818101949293601f19840193928390039091019190866161da5a03f115610002575050604051601f190151600160a060020a0316146109a257610002565b6000818152600160209081526040918290208b90558151600160a060020a038d811682529181018c90528a821681840152606081018a90526080810189905260a081018890523390911660c082015260ff861660e08201526101008101859052610120810184905290517f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0918190036101400190a150505050505050505050565b33600160a060020a03166000818152600080516020610f9f8339815191526020908152604080832054815193845291830193909352818301849052606082015290517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679181900360800190a15b50565b33600160a060020a03166000908152600080516020610f9f833981519152602052604090205481901015610ae657610002565b33600160a060020a03166000908152600080516020610f9f8339815191526020526040902054610b169082610656565b33600160a060020a03166000818152600080516020610f9f8339815191526020526040808220939093559151909183919081818185876185025a03f1925050501515610a4357610002565b81600160a060020a03166323b872dd3330846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a031681526020018281526020019350505050602060405180830381600087803b15610002576161da5a03f1156100025750506040515115159050610bdd57610002565b600160a060020a038281166000908152602081815260408083203390941683529290522054610c0c908261026a565b600160a060020a03838116600081815260208181526040808320339095168084529482529182902085905581519283528201929092528082018490526060810192909252517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a15050565b5060015b9c9b505050505050505050505050565b10155b1515610c7f57506000610c83565b60408051600160a060020a038b81168252602082018b905289811682840152606082018990526080820188905260a08201879052331660c082015260ff851660e08201526101008101849052610120810183905290517f91daf02b6d1454acd74c097a67e389a9d9371da3ff51366947022dc36748ce4d918190036101400190a1505050505050505050565b600160a060020a03828116600090815260208181526040808320339094168352929052205481901015610d6257610002565b600160a060020a038281166000908152602081815260408083203390941683529290522054610d919082610656565b600160a060020a03838116600081815260208181526040808320339095168084529482528083209590955584517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810194909452602484018690529351919363a9059cbb936044818101949293918390030190829087803b15610002576161da5a03f1156100025750506040515115159050610e3057610002565b600160a060020a03828116600081815260208181526040808320339095168084529482529182902054825193845290830193909352818101849052606082019290925290517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679181900360800190a15050565b33600160a060020a03166000818152600080516020610f9f8339815191526020908152604080832085905580519283529082019290925234818301526060810192909252517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a1565b8093505b5050509a9950505050505050505050565b600083815260016020526040902054610f43908e90610656565b600160a060020a038d8116600090815260208181526040808320938d16835292905220549092508b90610f76908f61060a565b81156100025704905080821015610f1457819350610f18565b9392505050565b508082036102b556ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060405260405160608061100383395060c06040525160805160a05160028054600160a060020a031916909317909255600355600455610fbf806100446000396000f3606060405236156100a35760e060020a60003504630a19b14a81146100ab578063278b8c0e146100e25780632e1a7d4d14610111578063338b5dea14610125578063577863941461015057806365e17c9d146101595780636c86888b1461016b57806393f0bb51146101da5780639e281a9814610207578063c281309e14610232578063d0e30db01461023b578063f7888aec14610287578063fb6e155f146102bb575b6103e6610002565b6103e660043560243560443560643560843560a43560c43560e4356101043561012435610144356000600034111561042b57610002565b6103e660043560243560443560643560843560a43560c43560e43561010435600060003411156108b457610002565b6103e66004356000341115610ab357610002565b6103e66004356024356000341180610146575081600160a060020a03166000145b15610b6157610002565b6103e860035481565b6103fa600254600160a060020a031681565b61041760043560243560443560643560843560a43560c43560e43561010435610124356101443561016435600160a060020a038c8116600090815260208181526040808320938516835292905290812054839010801590610c96575082610c938e8e8e8e8e8e8e8e8e8e6102df565b6103e660043560243560443560643560843560a43560c43560e435610104356000341115610ca457610002565b6103e66004356024356000341180610228575081600160a060020a03166000145b15610d3057610002565b6103e860045481565b6103e633600160a060020a03166000908152600080516020610f9f8339815191526020526040902054610ea390345b6000828201610f8f8482108015906102825750838210155b610660565b6103e8600435602435600160a060020a03828116600090815260208181526040808320938516835292905220545b92915050565b6103e860043560243560443560643560843560a43560c43560e43561010435610124355b600060006000600060028e8e8e8e8e8e6040518087600160a060020a0316606060020a02815260140186815260200185600160a060020a0316606060020a02815260140184815260200183815260200182815260200196505050505050506020604051808303816000866161da5a03f1156100025750506040805180516000828152602083810180865283905260ff8c1684860152606084018b9052608084018a90529351919650600160a060020a038c169360019360a0808201949293601f19840193928390039091019190866161da5a03f11561000257505060206040510351600160a060020a03161480156103d75750894311155b1515610f295760009350610f18565b005b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60028c8c8c8c8c8c6040518087600160a060020a0316606060020a02815260140186815260200185600160a060020a0316606060020a02815260140184815260200183815260200182815260200196505050505050506020604051808303816000866161da5a03f1156100025750506040805180516000828152602083810180865283905260ff8a168486015260608401899052608084018890529351919450600160a060020a038a169360019360a0818101949293601f19840193928390039091019190866161da5a03f11561000257505060206040510351600160a060020a031614801561051b5750874311155b801561054057506000818152600160205260409020548b9061053d908461026a565b11155b80156105715750600160a060020a038c81166000908152602081815260408083203390941683529290522054829010155b80156105b457508a6105838a8461060a565b811561000257600160a060020a038c8116600090815260208181526040808320938c16835292905220549190049010155b151561062b57610002565b600160a060020a038d81166000908152602081815260408083203385168452909152808220939093559088168152205460035461066c9190670de0b6b3a7640000906106bc90869083035b6000828202610f8f8483148061028257508385838115610002570414610660565b600160a060020a038c811660009081526020818152604080832033909416835292905220546105bf90835b6000610f96838311155b801515610ab057610002565b600160a060020a038d81166000908152602081815260408083208b8516845290915280822093909355600254909116815220546003546106c89190670de0b6b3a7640000906106bc90869061060a565b8115610002570461026a565b600160a060020a038d8116600090815260208181526040808320600254851684528252808320949094558d83168252818152838220928a168252919091522054610717908c61076c8c8661060a565b600160a060020a038b81166000908152602081815260408083208b851684529091528082209390935533909116815220546004546107789190670de0b6b3a7640000908e906107cd906107e09084038f61060a565b81156100025704610656565b600160a060020a038b8116600090815260208181526040808320338516845290915280822093909355600254909116815220546004546107e69190670de0b6b3a7640000908e906107cd906107e0908f61060a565b811561000257048115610002570461026a565b8761060a565b600160a060020a038b81166000908152602081815260408083206002549094168352928152828220939093558381526001909252902054610827908361026a565b6000828152600160205260409020557f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8c838c8e8d830281156100025760408051600160a060020a03968716815260208101959095529285168484015204606083015289831660808301523390921660a082015290519081900360c00190a1505050505050505050505050565b60028a8a8a8a8a8a6040518087600160a060020a0316606060020a02815260140186815260200185600160a060020a0316606060020a02815260140184815260200183815260200182815260200196505050505050506020604051808303816000866161da5a03f1156100025750506040805180516000828152602083810180865283905260ff8916848601526060840188905260808401879052935191945033600160a060020a03169360019360a0818101949293601f19840193928390039091019190866161da5a03f115610002575050604051601f190151600160a060020a0316146109a257610002565b6000818152600160209081526040918290208b90558151600160a060020a038d811682529181018c90528a821681840152606081018a90526080810189905260a081018890523390911660c082015260ff861660e08201526101008101859052610120810184905290517f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0918190036101400190a150505050505050505050565b33600160a060020a03166000818152600080516020610f9f8339815191526020908152604080832054815193845291830193909352818301849052606082015290517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679181900360800190a15b50565b33600160a060020a03166000908152600080516020610f9f833981519152602052604090205481901015610ae657610002565b33600160a060020a03166000908152600080516020610f9f8339815191526020526040902054610b169082610656565b33600160a060020a03166000818152600080516020610f9f8339815191526020526040808220939093559151909183919081818185876185025a03f1925050501515610a4357610002565b81600160a060020a03166323b872dd3330846040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a031681526020018281526020019350505050602060405180830381600087803b15610002576161da5a03f1156100025750506040515115159050610bdd57610002565b600160a060020a038281166000908152602081815260408083203390941683529290522054610c0c908261026a565b600160a060020a03838116600081815260208181526040808320339095168084529482529182902085905581519283528201929092528082018490526060810192909252517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a15050565b5060015b9c9b505050505050505050505050565b10155b1515610c7f57506000610c83565b60408051600160a060020a038b81168252602082018b905289811682840152606082018990526080820188905260a08201879052331660c082015260ff851660e08201526101008101849052610120810183905290517f91daf02b6d1454acd74c097a67e389a9d9371da3ff51366947022dc36748ce4d918190036101400190a1505050505050505050565b600160a060020a03828116600090815260208181526040808320339094168352929052205481901015610d6257610002565b600160a060020a038281166000908152602081815260408083203390941683529290522054610d919082610656565b600160a060020a03838116600081815260208181526040808320339095168084529482528083209590955584517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810194909452602484018690529351919363a9059cbb936044818101949293918390030190829087803b15610002576161da5a03f1156100025750506040515115159050610e3057610002565b600160a060020a03828116600081815260208181526040808320339095168084529482529182902054825193845290830193909352818101849052606082019290925290517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679181900360800190a15050565b33600160a060020a03166000818152600080516020610f9f8339815191526020908152604080832085905580519283529082019290925234818301526060810192909252517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a1565b8093505b5050509a9950505050505050505050565b600083815260016020526040902054610f43908e90610656565b600160a060020a038d8116600090815260208181526040808320938d16835292905220549092508b90610f76908f61060a565b81156100025704905080821015610f1457819350610f18565b9392505050565b508082036102b556ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb50000000000000000000000001ed014aec47fae44c9e55bac7662c0b78ae617980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa87bee538000" ], "gasLimit" : [ "5000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/eoaEmptyParisFiller.yml ================================================ # When an externally owned account empties itself by sending all its wei to a contract, what happens? # Based on https://github.com/ethereumjs/ethereumjs-monorepo/pull/2383 eoaEmptyParis: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: 1000000000 code: '' nonce: 0 storage: {} # EOA with only a balance 000000000000000000000000000000000000BAD1: balance: 1 code: 0x nonce: 0 storage: {} # EOA with only a nonce 000000000000000000000000000000000000BAD2: balance: 0 code: 0x nonce: 1 storage: {} # EOA with balance and nonce 000000000000000000000000000000000000BAD3: balance: 1 code: 0x nonce: 1 storage: {} # EOA with storage (shouldn't happen) 000000000000000000000000000000000000BAD4: balance: 10 code: 0x nonce: 0 storage: 0xDEAD: 0xBEEF # A suicidal contract that sends its value to the EOA 000000000000000000000000000000000000DEAD: balance: 10000 code: | :yul berlin { selfdestruct(origin()) } nonce: 1 storage: {} 000000000000000000000000000000000000C0DE: balance: 0 code: | :yul berlin { let eoa := origin() // external owner account sstore(0, eoa) sstore(0x31, balance(eoa)) // balance at this point, where it is assumed we used gasLimit gas sstore(0x3B, extcodesize(eoa)) sstore(0x3F, extcodehash(eoa)) sstore(0x013F, extcodehash(add(eoa, 0x1))) sstore(0xBAD1, extcodehash(0xBAD1)) sstore(0xBAD2, extcodehash(0xBAD2)) sstore(0xBAD3, extcodehash(0xBAD3)) sstore(0xBAD4, extcodehash(0xBAD4)) sstore(0xBAD5, extcodehash(0xBAD5)) // The gas cost of calling the EOA (it should be warm) let gas0 := gas() pop(call(gas(), eoa, calldataload(4), 0, 0, 0, 0)) sstore(0xF1, sub(gas0, gas())) // Gas cost of selfdestruct going to the EOA (should also be warm) gas0 := gas() pop(call(gas(), 0xDEAD, 0, 0, 0, 0, 0)) sstore(0xFF, sub(gas0, gas())) } nonce: 1 storage: {} transaction: data: # First parameter - value to send when calling our caller - :abi f(uint) 0 - :abi f(uint) 1 gasLimit: - 10000000 # gasLimit*gasPrice = EOA balance - 9999999 # Lower gas limit, should only affect BALANCE gasPrice: 100 nonce: 0 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 0x000000000000000000000000000000000000C0DE value: - 0 - 100 expect: - indexes: data: !!int 0 gas: !!int 0 # gasLimit*gasPrice = EOA balance value: !!int 0 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 000000000000000000000000000000000000C0DE: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b # EOA account 0x31: 0 # Balance (zero) 0x3B: 0 # EXTCODESIZE 0x3F: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # EXTCODEHASH of active EOA 0x13F: 0 # EXTCODEHASH of empty addr 0xF1: 118 # CALL to a warm address (100) + misc. costs 0xFF: 7626 # CALL to an address that then SELFDESTRUCTS sending the EOA its balance + misc. costs # EXTHASHCODE for various nearly empty EOAs 0xBAD1: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance only 0xBAD2: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Nonce only 0xBAD3: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance and nonce 0xBAD4: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Storage only, which can't happen in an EOA - indexes: data: !!int 1 # Send some value gas: !!int 0 # gasLimit*gasPrice = EOA balance value: !!int 0 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 000000000000000000000000000000000000C0DE: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b # EOA account 0x31: 0 # Balance (zero) 0x3B: 0 # EXTCODESIZE 0x3F: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # EXTCODEHASH of active EOA 0x13F: 0 # EXTCODEHASH of empty addr 0xF1: 6818 # Call with a value costs 6700 more + misc. costs 0xFF: 7626 # CALL to an address that then SELFDESTRUCTS sending the EOA its balance + misc. costs # EXTHASHCODE for various nearly empty EOAs 0xBAD1: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance only 0xBAD2: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Nonce only 0xBAD3: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance and nonce 0xBAD4: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Storage only, which can't happen in an EOA - indexes: data: !!int -1 gas: !!int 0 # gasLimit*gasPrice = EOA balance value: !!int 1 # But there is also a value, so this fails network: - '>=Cancun' result: {} expectException: '>=Cancun': TransactionException.INSUFFICIENT_ACCOUNT_FUNDS - indexes: data: !!int 0 gas: !!int 1 # gasLimit*gasPrice < EOA balance value: !!int 0 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 000000000000000000000000000000000000C0DE: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b # EOA account 0x31: 100 # Balance (100 wei at this point) 0x3B: 0 # EXTCODESIZE 0x3F: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # EXTCODEHASH of active EOA 0x13F: 0 # EXTCODEHASH of empty addr 0xF1: 118 # CALL to a warm address (100) + misc. costs 0xFF: 7626 # CALL to an address that then SELFDESTRUCTS sending the EOA its balance + misc. costs # EXTHASHCODE for various nearly empty EOAs 0xBAD1: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance only 0xBAD2: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Nonce only 0xBAD3: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance and nonce 0xBAD4: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Storage only, which can't happen in an EOA - indexes: data: !!int 1 # Have value, which increases the cost of call gas: !!int 1 # gasLimit*gasPrice < EOA balance value: !!int 0 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 000000000000000000000000000000000000C0DE: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b # EOA account 0x31: 100 # Balance (100 wei at this point) 0x3B: 0 # EXTCODESIZE 0x3F: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # EXTCODEHASH of active EOA 0x13F: 0 # EXTCODEHASH of empty addr 0xF1: 6818 # CALL to a warm address (100) + sending a value + misc. costs 0xFF: 7626 # CALL to an address that then SELFDESTRUCTS sending the EOA its balance + misc. costs # EXTHASHCODE for various nearly empty EOAs 0xBAD1: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance only 0xBAD2: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Nonce only 0xBAD3: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance and nonce 0xBAD4: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Storage only, which can't happen in an EOA - indexes: data: !!int 0 gas: !!int 1 # gasLimit*gasPrice + value = EOA balance value: !!int 1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 000000000000000000000000000000000000C0DE: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b # EOA account 0x31: 0 # Balance (zero) 0x3B: 0 # EXTCODESIZE 0x3F: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # EXTCODEHASH of active EOA 0x13F: 0 # EXTCODEHASH of empty addr 0xF1: 118 # CALL to a warm address (100) + misc. costs 0xFF: 7626 # CALL to an address that then SELFDESTRUCTS sending the EOA its balance + misc. costs # EXTHASHCODE for various nearly empty EOAs 0xBAD1: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance only 0xBAD2: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Nonce only 0xBAD3: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance and nonce 0xBAD4: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Storage only, which can't happen in an EOA - indexes: data: !!int 1 # Send value gas: !!int 1 # gasLimit*gasPrice + value = EOA balance value: !!int 1 network: - '>=Cancun' result: a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 1 000000000000000000000000000000000000C0DE: storage: 0: 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b # EOA account 0x31: 0 # Balance (zero) 0x3B: 0 # EXTCODESIZE 0x3F: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # EXTCODEHASH of active EOA 0x13F: 0 # EXTCODEHASH of empty addr 0xF1: 6818 # CALL to a warm address (100) + cost of sending value + misc. costs 0xFF: 7626 # CALL to an address that then SELFDESTRUCTS sending the EOA its balance + misc. costs # EXTHASHCODE for various nearly empty EOAs 0xBAD1: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance only 0xBAD2: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Nonce only 0xBAD3: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Balance and nonce 0xBAD4: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 # Storage only, which can't happen in an EOA ================================================ FILE: tests/static/state_tests/stSpecialTest/failed_tx_xcf416c53_ParisFiller.json ================================================ { "failed_tx_xcf416c53_Paris" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "200000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0x02" }, "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7c0100000000000000000000000000000000000000000000000000000000600035046397dd3054811415610065576004356040526024356060526040516060515b808212156100625760006000600060006000866000f150600182019150610040565b50505b50", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x97dd3054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bc" ], "gasLimit" : [ "16300000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/gasPrice0Filler.json ================================================ { "gasPrice0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0xa0340" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/makeMoneyFiller.json ================================================ { "makeMoney" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "999999999999999987" }, "" : { "balance" : "999254550" }, "" : { "balance" : "1000000000000000023" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f20060003554156009570060203560003555) (CALL 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x600160015532600255", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "228500" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/push32withoutByteFiller.json ================================================ { "push32withoutByte" : { "_info" : { "comment" : "push expect 32 bytes. but we have only 10 byte" }, "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "3141592", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "//balance" : "999999999999978997", "nonce" : "2" } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x7f11223344556677889910", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000000000000", "code" : "", "nonce" : "1", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/selfdestructEIP2929Filler.json ================================================ { "selfdestructEIP2929": { "_info" : { "comment" : "Martin: @tkstanczak requested a state-test regarding selfdestructs in relation to EIP-2929. I made one, which tests different variants of hot/cold accounts, and even precompile beneficiaries. https://github.com/holiman/goevmlab/blob/selfdestruct_2929/examples/selfdestruct_2929/main.go#L94" }, "env": { "currentCoinbase": "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty": "0x20000", "currentGasLimit": "0x26e1f476fe1e22", "currentNumber": "0x1", "currentTimestamp": "0x3e8" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre": { "": { "code": "0x", "storage": {}, "balance": "0x0", "nonce": "0x1" }, "": { "code": "0x", "storage": {}, "balance": "0x0", "nonce": "0x1" }, "": { "code": ":raw 0x6000600060006000600060cc6000f1506000600060006000600060dd6000f1506000600060006000600060036000f15060aa6000526000600060206000600061dead5af15060aa6000526000600060206000600061dead5af15060bb6000526000600060206000600061dead5af15060bb6000526000600060206000600061dead5af15060cc6000526000600060206000600061dead5af15060cc6000526000600060206000600061dead5af15060dd6000526000600060206000600061dead5af15060dd6000526000600060206000600061dead5af15060016000526000600060206000600061dead5af15060016000526000600060206000600061dead5af15060026000526000600060206000600061dead5af15060026000526000600060206000600061dead5af15060036000526000600060206000600061dead5af1506001600155", "storage": {}, "balance": "0x1", "nonce": "0x1" }, "": { "code": ":raw 0x60003574ffffffffffffffffffffffffffffffffffffffffff16ff", "storage": {}, "balance": "0x1", "nonce": "0x1" }, "": { "code": "0x", "storage": {}, "balance": "0xde0b6b3a7640000", "nonce": "0x0" } }, "transaction": { "gasPrice": "0x0a", "nonce": "0x0", "to": "", "data": [ "" ], "gasLimit": [ "0x7a1200" ], "value": [ "0x0" ], "secretKey": "" } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/sha3_dejaFiller.json ================================================ { "sha3_deja" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6042601f53600064ffffffffff2080", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSpecialTest/tx_e1c174e2Filler.json ================================================ { "tx_e1c174e2" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "3141592", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x160000000000000000000000000000000000000000" : "0x01" } }, "" : { "nonce" : "0x19" } } } ], "pre" : { "" : { "balance" : "0", "code" : ":raw 0x600061155f537c0100000000000000000000000000000000000000000000000000000000600035046355f10aaf8114156100655760043560405260003413156100525760006000600060003433611388f1505b600c604051026007015460605260206060f35b6369e0998b81141561053f5760043560805260243560a052604435604052600060805113151561009a57600260c052602060c0f35b600060a0511315156100b157600360e052602060e0f35b60006040511315156100ca576004610100526020610100f35b670de0b6b3a7640000600c6040510260030154600a0a600c60405102600401540260a05160805102050261012052600c604051026005015434121561012f5760003413156101225760006000600060003433611388f1505b600b610140526020610140f35b610120513412156101605760003413156101535760006000600060003433611388f1505b6014610160526020610160f35b6101205134131561018057600060006000600061012051340333611388f1505b60e0599059016000905260068152600160208201526040516040820152608051606082015260a05160808201523360a08201524360c082015260208101905061018052610180516020602082035102812090506101c05260086101c05102740e0000000000000000000000000000000000000000015415156104be576101c05160086101c05102740e00000000000000000000000000000000000000000155600160086101c05102740e0000000000000000000000000000000000000001015560405160086101c05102740e0000000000000000000000000000000000000002015560805160086101c05102740e0000000000000000000000000000000000000003015560a05160086101c05102740e000000000000000000000000000000000000000401553360086101c05102740e000000000000000000000000000000000000000501554360086101c05102740e0000000000000000000000000000000000000006015560086101c05102740e00000000000000000000000000000000000000000160086101c05102740e00000000000000000000000000000000000000070155600c60405102600b0154610200526101c05160a060a05990590160009052600081526040518160200152600c81604001526102005181606001526001816080015280905020556102005160a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020556101c05160a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526000816080015280905020556101c051600c60405102600b01556001600c60405102600a015401600c60405102600a01556002600114156104b95760805160806080599059016000905260048152338160200152604051816040015260008160600152809050205403608060805990590160009052600481523381602001526040518160400152600081606001528090502055608051608060805990590160009052600481523381602001526040518160400152600181606001528090502054016080608059905901600090526004815233816020015260405181604001526001816060015280905020555b6104cb565b6015610300526020610300f35b601c60c05990590160009052013381526001602082015260a051604082015260805160608201526101c05160808201526040517f9463d1cc4aa2db0dc624c996b1846f028d43c48cfc8b9f427f13336e4a73226460a083a2506101c051610340526020610340f36000610360526020610360f35b630909f073811415610a0c5760043560805260243560a0526044356040526000608051131515610576576002610380526020610380f35b600060a05113151561058f5760036103a05260206103a0f35b60006040511315156105a85760046103c05260206103c0f35b670de0b6b3a7640000600c6040510260030154600a0a600c60405102600401540260a05160805102050261012052600c60405102600501546101205112156106105760003413156106035760006000600060003433611388f1505b600b6103e05260206103e0f35b60806080599059016000905260048152338160200152604051816040015260008160600152809050205461040052608051610400511215156109ff5760e0599059016000905260068152600260208201526040516040820152608051606082015260a05160808201523360a08201524360c082015260208101905061018052610180516020602082035102812090506101c05260086101c05102740e00000000000000000000000000000000000000000154151561098a576101c05160086101c05102740e00000000000000000000000000000000000000000155600260086101c05102740e0000000000000000000000000000000000000001015560405160086101c05102740e0000000000000000000000000000000000000002015560805160086101c05102740e0000000000000000000000000000000000000003015560a05160086101c05102740e000000000000000000000000000000000000000401553360086101c05102740e000000000000000000000000000000000000000501554360086101c05102740e0000000000000000000000000000000000000006015560086101c05102740e00000000000000000000000000000000000000000160086101c05102740e00000000000000000000000000000000000000070155600c60405102600b0154610200526101c05160a060a05990590160009052600081526040518160200152600c81604001526102005181606001526001816080015280905020556102005160a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020556101c05160a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526000816080015280905020556101c051600c60405102600b01556001600c60405102600a015401600c60405102600a01556002600214156109855760805160806080599059016000905260048152338160200152604051816040015260008160600152809050205403608060805990590160009052600481523381602001526040518160400152600081606001528090502055608051608060805990590160009052600481523381602001526040518160400152600181606001528090502054016080608059905901600090526004815233816020015260405181604001526001816060015280905020555b610997565b6015610560526020610560f35b601c60c05990590160009052013381526002602082015260a051604082015260805160608201526101c05160808201526040517f9463d1cc4aa2db0dc624c996b1846f028d43c48cfc8b9f427f13336e4a73226460a083a2506101c051610580526020610580f35b60006105a05260206105a0f35b639998bd008114156117335736599059016000905236600482376004356105e0526024356020820101610600525034610620526000610640525b602061060051035161064051121561170a57610640516020026106005101516101c05260086101c05102740e0000000000000000000000000000000000000006015443131515610a9d576016610660526020610660f35b60086101c05102740e00000000000000000000000000000000000000020154604052600c604051026002015461068052600c60405102600301546106a052600c60405102600401546106c052600c60405102600501546106e05260086101c05102740e000000000000000000000000000000000000000101546107005260086101c05102740e0000000000000000000000000000000000000003015460805260086101c05102740e0000000000000000000000000000000000000004015460a05260086101c05102740e0000000000000000000000000000000000000005015461072052600161070051141561110e576080608059905901600090526004815233816020015260405181604001526000816060015280905020546104005260006104005113156110fc57608051610400516105e05180821215610be05781610be2565b805b9050905080821215610bf45781610bf6565b805b90509050610760526106a051600a0a6106c05102670de0b6b3a764000060a05161076051020205610120526106e051610120511215610c5b576000610620511315610c4e5760006000600060006106205133611388f1505b600c610800526020610800f35b608051610760511215610cb0576107605160086101c05102740e000000000000000000000000000000000000000301540360086101c05102740e00000000000000000000000000000000000000030155610fd4565b600060086101c05102740e00000000000000000000000000000000000000000155600060086101c05102740e00000000000000000000000000000000000000010155600060086101c05102740e00000000000000000000000000000000000000020155600060086101c05102740e00000000000000000000000000000000000000030155600060086101c05102740e00000000000000000000000000000000000000040155600060086101c05102740e00000000000000000000000000000000000000050155600060086101c05102740e00000000000000000000000000000000000000060155600060086101c05102740e0000000000000000000000000000000000000007015560a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020546108205260a060a05990590160009052600081526040518160200152600c81604001526101c0518160600152600181608001528090502054610860526108205115610e3a5761086051610e3d565b60005b15610eb7576108605160a060a05990590160009052600081526040518160200152600c81604001526108205181606001526001816080015280905020556108205160a060a05990590160009052600081526040518160200152600c8160400152610860518160600152600281608001528090502055610f06565b6108205115610f055761082051600c60405102600b0155600060a060a05990590160009052600081526040518160200152600c81604001526108205181606001526001816080015280905020555b5b6108605115610f4657600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526001816080015280905020555b6108205115610f8657600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020555b600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526000816080015280905020556001600c60405102600a015403600c60405102600a01555b6107605160806080599059016000905260048152338160200152604051816040015260008160600152809050205403608060805990590160009052600481523381602001526040518160400152600081606001528090502055610760516080608059905901600090526004815261072051816020015260405181604001526000816060015280905020540160806080599059016000905260048152610720518160200152604051816040015260008160600152809050205560006000600060006101205133611388f150601c60a05990590160009052016002815260a05160208201526107605160408201526101c051606082015261072051336040517f0f9fe89f83633cc2eca9b17e1f77422f037cb026eaca4e6a5337fa1595f50a81608085a450611109565b600a6109e05260206109e0f35b611680565b600261070051141561167f576000610620511315611671576106e0516106205112156111605760006106205113156111535760006000600060006106205133611388f1505b600c610a00526020610a00f35b6106a051600a0a6106c05102670de0b6b3a764000060a051608051020205610a205261062051610a205180821215611198578161119a565b805b9050905061012052610a205161012051121561121b57670de0b6b3a764000060a0516106a051600a0a6106c0510261012051020505610760526107605160086101c05102740e000000000000000000000000000000000000000301540360086101c05102740e00000000000000000000000000000000000000030155611546565b60805161076052600060086101c05102740e00000000000000000000000000000000000000000155600060086101c05102740e00000000000000000000000000000000000000010155600060086101c05102740e00000000000000000000000000000000000000020155600060086101c05102740e00000000000000000000000000000000000000030155600060086101c05102740e00000000000000000000000000000000000000040155600060086101c05102740e00000000000000000000000000000000000000050155600060086101c05102740e00000000000000000000000000000000000000060155600060086101c05102740e0000000000000000000000000000000000000007015560a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020546108205260a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526001816080015280905020546108605261082051156113ac57610860516113af565b60005b15611429576108605160a060a05990590160009052600081526040518160200152600c81604001526108205181606001526001816080015280905020556108205160a060a05990590160009052600081526040518160200152600c8160400152610860518160600152600281608001528090502055611478565b61082051156114775761082051600c60405102600b0155600060a060a05990590160009052600081526040518160200152600c81604001526108205181606001526001816080015280905020555b5b61086051156114b857600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526001816080015280905020555b61082051156114f857600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020555b600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526000816080015280905020556001600c60405102600a015403600c60405102600a01555b6107605160806080599059016000905260048152610720518160200152604051816040015260018160600152809050205403608060805990590160009052600481526107205181602001526040518160400152600181606001528090502055610760516080608059905901600090526004815233816020015260405181604001526000816060015280905020540160806080599059016000905260048152338160200152604051816040015260008160600152809050205560006000600060006101205161072051611388f150601c60a05990590160009052016001815260a05160208201526107605160408201526101c051606082015261072051336040517f0f9fe89f83633cc2eca9b17e1f77422f037cb026eaca4e6a5337fa1595f50a81608085a45061167e565b600a610c00526020610c00f35b5b5b60a051600c6040510260070155601c60a059905901600090520161070051815260a05160208201526107605160408201524260608201526040517f50944f09ce56f9f0e2cb67683c9b451049c39f60452b850b169148f3daa51ed6608083a250610760516105e051036105e052610120516106205103610620526001610640510161064052610a46565b61062051156117265760006000600060006106205133611388f1505b6001610c20526020610c20f35b6334a501c781141561185b57600435608052602435604052601c60845990590160009052016327f08b00601c82035233600482015230602482015260805160448201526020610c406064836000600c6040510260020154602d5a03f150610c405190501561184e57608060805990590160009052600481523381602001526040518160400152600081606001528090502054610400526080516104005101610c8052610c8051608060805990590160009052600481523381602001526040518160400152600081606001528090502055601c60405990590160009052016080518152336040517f301cd746dbb5e7f9ade2bcd9e8a849b968bfcc222de48d2086ba200184acc83d602084a350610c8051610cc0526020610cc0f35b6000610ce0526020610ce0f35b63e1ed3ad3811415611982576004356080526024356040526080608059905901600090526004815233816020015260405181604001526000816060015280905020546104005260805161040051121515611975576080516104005103608060805990590160009052600481523381602001526040518160400152600081606001528090502055601c60645990590160009052016386744558601c82035233600482015260805160248201526020610d606044836000600c6040510260020154602d5a03f150610d60519050610d4052601c60405990590160009052016080518152336040517ffa4460934f383b326d79dcd4f1e59a17ac8ee9a87312169933e7f68b85c1a8ce602084a350610d4051610d80526020610d80f35b6000610da0526020610da0f35b63327a22f1811415611f08576004356101c05260086101c05102740e000000000000000000000000000000000000000101546107005260086101c05102740e0000000000000000000000000000000000000003015460805260086101c05102740e0000000000000000000000000000000000000004015460a05260086101c05102740e000000000000000000000000000000000000000501546107205260086101c05102740e00000000000000000000000000000000000000020154604052600c604051026002015461068052600c60405102600301546106a052600c60405102600401546106c05261072051331415611efb57600060086101c05102740e00000000000000000000000000000000000000000155600060086101c05102740e00000000000000000000000000000000000000010155600060086101c05102740e00000000000000000000000000000000000000020155600060086101c05102740e00000000000000000000000000000000000000030155600060086101c05102740e00000000000000000000000000000000000000040155600060086101c05102740e00000000000000000000000000000000000000050155600060086101c05102740e00000000000000000000000000000000000000060155600060086101c05102740e0000000000000000000000000000000000000007015560a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020546108205260a060a05990590160009052600081526040518160200152600c81604001526101c0518160600152600181608001528090502054610860526108205115611c005761086051611c03565b60005b15611c7d576108605160a060a05990590160009052600081526040518160200152600c81604001526108205181606001526001816080015280905020556108205160a060a05990590160009052600081526040518160200152600c8160400152610860518160600152600281608001528090502055611ccc565b6108205115611ccb5761082051600c60405102600b0155600060a060a05990590160009052600081526040518160200152600c81604001526108205181606001526001816080015280905020555b5b6108605115611d0c57600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526001816080015280905020555b6108205115611d4c57600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020555b600060a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526000816080015280905020556001600c60405102600a015403600c60405102600a01556001610700511415611dde57670de0b6b3a76400006106a051600a0a6106c0510260a0516080510205026101205260006000600060006101205133611388f150611e9c565b6002610700511415611e9b5760805160806080599059016000905260048152338160200152604051816040015260018160600152809050205403608060805990590160009052600481523381602001526040518160400152600181606001528090502055608051608060805990590160009052600481523381602001526040518160400152600081606001528090502054016080608059905901600090526004815233816020015260405181604001526000816060015280905020555b5b601c60a059905901600090520133815260a051602082015260805160408201526101c05160608201526040517f0ac6333455d304288767a0f1039d666d16882d10b6ea83693d2556e4c8098001608083a2506001610f40526020610f40f35b6000610f60526020610f60f35b63d91e22f48114156122f057600435610f8052602435610680526044356106a0526064356106c0526084356106e05260a435610fa0526001741600000000000000000000000000000000000000005401610fc0526000610f8051131515611f7657601e610fe0526020610fe0f35b610f8051740d0000000000000000000000000000000000000000015415611fa457601f611000526020611000f35b600061068051131515611fbe576020611020526020611020f35b6000610fa0511215611fd7576021611040526020611040f35b60006106a0511215611ff0576022611060526020611060f35b60006106c0511215612009576023611080526020611080f35b60006106e05112156120225760246110a05260206110a0f35b6000601c606459905901600090520163c32d01a1601c82035233600482015230602482015260206110c0604483600061068051602d5a03f1506110c05190501415156120755760286110e05260206110e0f35b6001601c60645990590160009052016383b58638601c820352306004820152600060248201526020611100604483600061068051602d5a03f1506111005190501415156120c9576029611120526020611120f35b6000601c60445990590160009052016326690247601c8203523060048201526020611140602483600061068051602d5a03f15061114051905014151561211657602a611160526020611160f35b6000601c60645990590160009052016386744558601c820352336004820152600060248201526020611180604483600061068051602d5a03f15061118051905014151561216a57602b6111a05260206111a0f35b6000601c60845990590160009052016327f08b00601c8203523060048201523360248201526000604482015260206111c0606483600061068051602d5a03f1506111c05190501415156121c457602c6111e05260206111e0f35b610fc051600c610fc0510255610f8051600c610fc051026001015561068051600c610fc0510260020155610fa051600c610fc05102600601556106a051600c610fc05102600301556106c051600c610fc05102600401556106e051600c610fc05102600501556001600c610fc051026007015533600c610fc051026008015543600c610fc0510260090155610fc05161068051740c00000000000000000000000000000000000000000155610fc051610f8051740d00000000000000000000000000000000000000000155610fc0517416000000000000000000000000000000000000000055601c6040599059016000905201610fc05181527f1238fe6d44cf796960d61b74766b3a383110e472d849f5ca16ae50215bc05e58602082a1506001611200526020611200f35b634156966181141561232a576004356112205261122051740c00000000000000000000000000000000000000000154611240526020611240f35b63fcde9f7881141561236457600435610f8052610f8051740d00000000000000000000000000000000000000000154611260526020611260f35b636e5b4343811415612392577416000000000000000000000000000000000000000054611280526020611280f35b63fafa69c28114156124e657600435610fc0526101805990590160009052600b81526020810190506112a052600c610fc05102546112a05152600c610fc051026001015460206112a0510152600c610fc051026002015460406112a0510152600c610fc051026003015460606112a0510152600c610fc051026004015460806112a0510152600c610fc051026005015460a06112a0510152600c610fc051026007015460c06112a0510152600c610fc051026008015460e06112a0510152600c610fc05102600901546101006112a0510152600c610fc05102600a01546101206112a0510152600c610fc05102600601546101406112a05101526112a051156124b2576112a05160206040820352602060208203510260400160408203f3505b60405990590160009052600181526000602082015260208101905060206040820352602060208203510260400160408203f3505b639cfc153581141561262e57600435604052600c60405102600a015461134052600c60405102600b01546101c0526113405180602002602001599059016000905281815260208101905090506106005260006113a0525b611340516113a05112156125d45760a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526000816080015280905020546113a05160200261060051015260a060a05990590160009052600081526040518160200152600c81604001526101c05181606001526002816080015280905020546101c05260016113a051016113a05261253d565b61060051156125fa576106005160206040820352602060208203510260400160408203f3505b60405990590160009052600181526000602082015260208101905060206040820352602060208203510260400160408203f3505b630f7181908114156127e957600435610fc052610120599059016000905260088152602081019050610180526008610fc05102740e0000000000000000000000000000000000000000015461018051526008610fc05102740e0000000000000000000000000000000000000001015460206101805101526008610fc05102740e0000000000000000000000000000000000000002015460406101805101526008610fc05102740e0000000000000000000000000000000000000003015460606101805101526008610fc05102740e0000000000000000000000000000000000000004015460806101805101526008610fc05102740e0000000000000000000000000000000000000005015460a06101805101526008610fc05102740e0000000000000000000000000000000000000006015460c06101805101526008610fc05102740e0000000000000000000000000000000000000007015460e061018051015261018051156127b5576101805160206040820352602060208203510260400160408203f3505b60405990590160009052600181526000602082015260208101905060206040820352602060208203510260400160408203f3505b631c9aa4b6811415612893576004356112205260243560405260605990590160009052600281526080608059905901600090526004815261122051816020015260405181604001526000816060015280905020546020820152608060805990590160009052600481526112205181602001526040518160400152600181606001528090502054604082015260208101905060206040820352602060208203510260400160408203f3505b50", "nonce" : "0", "storage" : { "0x00000000000000000000000d0000000000000000000000000000000000505347" : "0x00", "0x0000000000000000000000160000000000000000000000000000000000000000" : "0x01" } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "24", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xd91e22f40000000000000000000000000000000000000000000000000000000000505347000000000000000000000000000000000000000000000000000000002450534700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit" : [ "500000" ], "gasPrice" : "0x0c416c1984", "nonce" : "24", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stStackTests/shallowStackFiller.json ================================================ { "shallowStack" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "42949672960000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "//0 data" : "Data is corrupted. Number of elements pop'ed from the stack is < then pushed", "//1 data" : { "0x6002600101600055" : "{[[0]](ADD 1 2)}" }, "data" : [ ":raw 0x600101600055", ":raw 0x600102600055", ":raw 0x600103600055", ":raw 0x600104600055", ":raw 0x600105600055", ":raw 0x600106600055", ":raw 0x600107600055", ":raw 0x6002600108600055", ":raw 0x6002600109600055", ":raw 0x60010a600055", ":raw 0x60010b600055", ":raw 0x600110600055", ":raw 0x600111600055", ":raw 0x600112600055", ":raw 0x600113600055", ":raw 0x600114600055", ":raw 0x15600055", ":raw 0x600116600055", ":raw 0x600117600055", ":raw 0x600118600055", ":raw 0x19600055", ":raw 0x60011a600055", ":raw 0x600120600055", ":raw 0x31600055", ":raw 0x35600055", ":raw 0x6001600237600055", ":raw 0x6001600239600055", ":raw 0x3b600055", ":raw 0x6001600260033c600055", ":raw 0x40600055", ":raw 0x50600055", ":raw 0x51600055", ":raw 0x600152600055", ":raw 0x600153600055", ":raw 0x54600055", ":raw 0x600155600055", ":raw 0x56600055", ":raw 0x600157600055", ":raw 0x80600055", ":raw 0x600181600055", ":raw 0x6002600182600055", ":raw 0x60036002600183600055", ":raw 0x600460036002600184600055", ":raw 0x6005600460036002600185600055", ":raw 0x60066005600460036002600186600055", ":raw 0x600760066005600460036002600187600055", ":raw 0x6008600760066005600460036002600188600055", ":raw 0x60096008600760066005600460036002600189600055", ":raw 0x60106009600860076006600560046003600260018a600055", ":raw 0x601160106009600860076006600560046003600260018b600055", ":raw 0x6012601160106009600860076006600560046003600260018c600055", ":raw 0x60136012601160106009600860076006600560046003600260018d600055", ":raw 0x601460136012601160106009600860076006600560046003600260018e600055", ":raw 0x60136012601160106009600860076006600560046003600260018f600055", ":raw 0x600190600055", ":raw 0x6002600191600055", ":raw 0x60036002600192600055", ":raw 0x600460036002600193600055", ":raw 0x6005600460036002600194600055", ":raw 0x60066005600460036002600195600055", ":raw 0x600760066005600460036002600196600055", ":raw 0x6008600760066005600460036002600197600055", ":raw 0x60096008600760066005600460036002600198600055", ":raw 0x601060096008600760066005600460036002600199600055", ":raw 0x601160106009600860076006600560046003600260019a600055", ":raw 0x6012601160106009600860076006600560046003600260019b600055", ":raw 0x60136012601160106009600860076006600560046003600260019c600055", ":raw 0x601460136012601160106009600860076006600560046003600260019d600055", ":raw 0x6015601460136012601160106009600860076006600560046003600260019e600055", ":raw 0x6012601160106009600860076006600560046003600260019f600055", ":raw 0x6001a0600055", ":raw 0x60026001a1600055", ":raw 0x600360026001a2600055", ":raw 0x6004600360026001a3600055", ":raw 0x60056004600360026001a4600055", ":raw 0x60026001f0600055", ":raw 0x600660056004600360026001f1600055", ":raw 0x600660056004600360026001f2600055", ":raw 0x6001f3600055", ":raw 0x60056004600360026001f4600055", ":raw 0xff600055" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowDUPFiller.json ================================================ { "stackOverflowDUP" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1025 times DUP" ], "data" : [ ":raw 0x600180808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080", ":raw 0x60016002818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181", ":raw 0x6001600260038282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282", ":raw 0x600160026003600483838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383", ":raw 0x60016002600360046005848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484", ":raw 0x6001600260036004600560068585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585", ":raw 0x600160026003600460056006600786868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686", ":raw 0x60016002600360046005600660076008878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787", ":raw 0x6001600260036004600560066007600860098888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", ":raw 0x600160026003600460056006600760086009601089898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989", ":raw 0x600160026003600460056006600760086009601060118a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a", ":raw 0x6001600260036004600560066007600860096010601160128b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b", ":raw 0x60016002600360046005600660076008600960106011601260138c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c", ":raw 0x600160026003600460056006600760086009601060116012601360148d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d", ":raw 0x6001600260036004600560066007600860096010601160126013601460158e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e", ":raw 0x60016002600360046005600660076008600960106011601260136014601560168f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowFiller.json ================================================ { "stackOverflow" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1025 times ADDRESS", "1025 times ORIGIN", "1025 times CALLER", "1025 times CALLVALUE", "1025 times CALLDATASIZE", "1025 times CODESIZE", "1025 times GASPRICE", "1025 times COINBASE", "1025 times TIMESTAMP", "1025 times NUMBER", "1025 times DIFFICULTY", "1025 times GASLIMIT", "1025 times PC", "1025 times MSIZE", "1025 times GAS", "1025 times PUSH", "1025 times DUP" ], "data" : [ ":raw 0x3030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030", ":raw 0x3232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232", ":raw 0x3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333", ":raw 0x3434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434", ":raw 0x3636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636", ":raw 0x3838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838", ":raw 0x3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a", ":raw 0x4141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141", ":raw 0x4242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", ":raw 0x4343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343", ":raw 0x4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444", ":raw 0x4545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545", ":raw 0x5858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858", ":raw 0x5959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959", ":raw 0x5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a", ":raw 0x60006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowM1DUPFiller.json ================================================ { "stackOverflowM1DUP" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1025 times DUP" ], "data" : [ ":raw 0x6001808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080", ":raw 0x600160028181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181", ":raw 0x60016002600382828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282", ":raw 0x6001600260036004838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383", ":raw 0x600160026003600460058484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484", ":raw 0x60016002600360046005600685858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585", ":raw 0x6001600260036004600560066007868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686", ":raw 0x600160026003600460056006600760088787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787", ":raw 0x60016002600360046005600660076008600988888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", ":raw 0x6001600260036004600560066007600860096010898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989", ":raw 0x600160026003600460056006600760086009601060118a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a", ":raw 0x6001600260036004600560066007600860096010601160128b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b", ":raw 0x60016002600360046005600660076008600960106011601260138c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c", ":raw 0x600160026003600460056006600760086009601060116012601360148d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d", ":raw 0x6001600260036004600560066007600860096010601160126013601460158e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e", ":raw 0x60016002600360046005600660076008600960106011601260136014601560168f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowM1Filler.json ================================================ { "stackOverflowM1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1024 times ADDRESS", "1024 times ORIGIN", "1024 times CALLER", "1024 times CALLVALUE", "1024 times CALLDATASIZE", "1024 times CODESIZE", "1024 times GASPRICE", "1024 times COINBASE", "1024 times TIMESTAMP", "1024 times NUMBER", "1024 times DIFFICULTY", "1024 times GASLIMIT", "1024 times PC", "1024 times MSIZE", "1024 times GAS", "1024 times PUSH", "1024 times DUP" ], "data" : [ ":raw 0x30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030", ":raw 0x32323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232", ":raw 0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333", ":raw 0x34343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434", ":raw 0x36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636", ":raw 0x38383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838", ":raw 0x3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a", ":raw 0x41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141", ":raw 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", ":raw 0x43434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343", ":raw 0x44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444", ":raw 0x45454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545", ":raw 0x58585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858", ":raw 0x59595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959", ":raw 0x5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a", ":raw 0x6000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowM1PUSHFiller.json ================================================ { "stackOverflowM1PUSH" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1025 times PUSH", "1025 times DUP" ], "data" : [ ":raw 0x610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000", ":raw 0x62000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000", ":raw 0x6300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000", ":raw 0x640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000", ":raw 0x65000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000", ":raw 0x6600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000", ":raw 0x670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000", ":raw 0x68000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000", ":raw 0x6900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000", ":raw 0x6a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a0000000000000000000000", ":raw 0x6b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b000000000000000000000000", ":raw 0x6c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c00000000000000000000000000", ":raw 0x6d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d0000000000000000000000000000", ":raw 0x6e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e000000000000000000000000000000", ":raw 0x6f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f00000000000000000000000000000000", ":raw 0x700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000", ":raw 0x71000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000", ":raw 0x7200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000", ":raw 0x730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000", ":raw 0x74000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000", ":raw 0x7500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000", ":raw 0x760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000", ":raw 0x77000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000", ":raw 0x7800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000", ":raw 0x790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000", ":raw 0x7a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a000000000000000000000000000000000000000000000000000000", ":raw 0x7b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000", ":raw 0x7c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000", ":raw 0x7d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000", ":raw 0x7e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000000000000000000000000000000000000000000", ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowPUSHFiller.json ================================================ { "stackOverflowPUSH" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1025 times PUSH", "1025 times DUP" ], "data" : [ ":raw 0x610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000610000", ":raw 0x6200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000620000006200000062000000", ":raw 0x63000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000630000000063000000006300000000", ":raw 0x640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000640000000000", ":raw 0x6500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000650000000000006500000000000065000000000000", ":raw 0x66000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000660000000000000066000000000000006600000000000000", ":raw 0x670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000670000000000000000", ":raw 0x6800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000680000000000000000006800000000000000000068000000000000000000", ":raw 0x69000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000690000000000000000000069000000000000000000006900000000000000000000", ":raw 0x6a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a00000000000000000000006a0000000000000000000000", ":raw 0x6b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b0000000000000000000000006b000000000000000000000000", ":raw 0x6c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c000000000000000000000000006c00000000000000000000000000", ":raw 0x6d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d00000000000000000000000000006d0000000000000000000000000000", ":raw 0x6e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e0000000000000000000000000000006e000000000000000000000000000000", ":raw 0x6f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f000000000000000000000000000000006f00000000000000000000000000000000", ":raw 0x700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000700000000000000000000000000000000000", ":raw 0x7100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000710000000000000000000000000000000000007100000000000000000000000000000000000071000000000000000000000000000000000000", ":raw 0x72000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000720000000000000000000000000000000000000072000000000000000000000000000000000000007200000000000000000000000000000000000000", ":raw 0x730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000730000000000000000000000000000000000000000", ":raw 0x7400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000740000000000000000000000000000000000000000007400000000000000000000000000000000000000000074000000000000000000000000000000000000000000", ":raw 0x75000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000750000000000000000000000000000000000000000000075000000000000000000000000000000000000000000007500000000000000000000000000000000000000000000", ":raw 0x760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000", ":raw 0x7700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000000000", ":raw 0x78000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000", ":raw 0x790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000790000000000000000000000000000000000000000000000000000", ":raw 0x7a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000007a000000000000000000000000000000000000000000000000000000", ":raw 0x7b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000", ":raw 0x7c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000", ":raw 0x7d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000", ":raw 0x7e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000000000000000000000000000000000000000000", ":raw 0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stackOverflowSWAPFiller.json ================================================ { "stackOverflowSWAP" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1025 - N followed by a SWAP" ], "data" : [ ":raw 0x600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600090"], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/stacksanitySWAPFiller.json ================================================ { "stacksanitySWAP" : { "_info" : { "comment" : "checks stack usage for SWAP" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "42949672960", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "1" } } } ], "pre" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "4294967296000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "1024 times PUSH followed by a SWAP" ], "data" : [ ":raw 0x600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600090"], "gasLimit" : [ "6000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStackTests/underflowTestFiller.yml ================================================ underflowTest: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 10 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: # Run the opcode ADD with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode ADD with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MUL with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MUL with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SUB with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SUB with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DIV with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DIV with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SDIV with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SDIV with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MOD with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MOD with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SMOD with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SMOD with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode ADDMOD with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode ADDMOD with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060800800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MULMOD with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MULMOD with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060800900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXP with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800A00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXP with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800A00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SIGNEXTEND with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560800B00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SIGNEXTEND with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060800B00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LT with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LT with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode GT with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode GT with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SLT with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SLT with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SGT with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SGT with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EQ with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EQ with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode ISZERO with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001551500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode ISZERO with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode AND with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode AND with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode OR with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode OR with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode XOR with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode XOR with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode NOT with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001551900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode NOT with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode BYTE with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801A00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode BYTE with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801A00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SHL with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801B00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SHL with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801B00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SHR with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801C00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SHR with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801C00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SAR with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560801D00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SAR with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060801D00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SHA3 with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560802000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SHA3 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060802000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode BALANCE with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001553100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode BALANCE with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560803100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALLDATALOAD with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001553500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALLDATALOAD with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560803500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALLDATACOPY with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060803700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALLDATACOPY with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060803700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CODECOPY with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060803900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CODECOPY with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060803900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXTCODESIZE with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001553B00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXTCODESIZE with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560803B00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXTCODECOPY with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060803C00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXTCODECOPY with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060803C00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXTCODEHASH with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001553F00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode EXTCODEHASH with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560803F00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode BLOCKHASH with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001554000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode BLOCKHASH with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560804000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode POP with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001555000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode POP with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560805000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MLOAD with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001555100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MLOAD with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560805100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MSTORE with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560805200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MSTORE with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060805200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MSTORE8 with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560805300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode MSTORE8 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060805300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SLOAD with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001555400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SLOAD with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560805400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG0 with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080A000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG0 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080A000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG1 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080A100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG1 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080A100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG2 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080A200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG2 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080A200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG3 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080A300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG3 with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080A300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG4 with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080A400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode LOG4 with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080A400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CREATE with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080F000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CREATE with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080F000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALL with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080F100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALL with 7 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080F100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALLCODE with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080F200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CALLCODE with 7 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080F200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode RETURN with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080F300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode RETURN with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080F300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DELEGATECALL with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080F400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DELEGATECALL with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080F400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CREATE2 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080F500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode CREATE2 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080F500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode STATICCALL with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080FA00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode STATICCALL with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080FA00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP1 with 0 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001558000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP1 with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560808000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP2 with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560808100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP2 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060808100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP3 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060808200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP3 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060808200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP4 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060808300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP4 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060808300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP5 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060808400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP5 with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060808400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP6 with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060808500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP6 with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060808500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP7 with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060808600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP7 with 7 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060808600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP8 with 7 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060808700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP8 with 8 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060808700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP9 with 8 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060808800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP9 with 9 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060808800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP10 with 9 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060808900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP10 with 10 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060808900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP11 with 10 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060808a00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP11 with 11 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060808a00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP12 with 11 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060808b00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP12 with 12 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060808b00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP13 with 12 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060808c00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP13 with 13 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060808c00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP14 with 13 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060808d00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP14 with 14 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060806080608060808d00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP15 with 14 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060806080608060808e00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP15 with 15 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060806080608060808e00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP16 with 15 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060806080608060808f00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode DUP16 with 16 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060806080608060808f00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP1 with 1 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560809000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP1 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060809000 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP2 with 2 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060809100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP2 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060809100 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP3 with 3 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060809200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP3 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060809200 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP4 with 4 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060809300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP4 with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060809300 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP5 with 5 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060809400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP5 with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060809400 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP6 with 6 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060809500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP6 with 7 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060809500 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP7 with 7 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060809600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP7 with 8 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060809600 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP8 with 8 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060809700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP8 with 9 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060809700 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP9 with 9 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060809800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP9 with 10 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060809800 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP10 with 10 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060809900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP10 with 11 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060809900 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP11 with 11 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060809a00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP11 with 12 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060809a00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP12 with 12 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060809b00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP12 with 13 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060809b00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP13 with 13 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060809c00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP13 with 14 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060806080608060809c00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP14 with 14 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060806080608060809d00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP14 with 15 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060806080608060809d00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP15 with 15 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x60016001556080608060806080608060806080608060806080608060806080608060809e00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP15 with 16 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060806080608060809e00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP16 with 16 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x600160015560806080608060806080608060806080608060806080608060806080608060809f00 nonce: 0 storage: 0x01: 0x60A7 # Run the opcode SWAP16 with 17 parameters : balance: 0 # Kill the goat. If the goat is alive, it means the transaction reverted # Then push 0x80 the number of parameters and follow that with the opcode # being tested code: :raw 0x6001600155608060806080608060806080608060806080608060806080608060806080608060809f00 nonce: 0 storage: 0x01: 0x60A7 # Call different contracts depending on the parameter : code: | { [[0]] 0x60A7 (call (gas) $4 0 0 0 0 0) [[1]] 0x60A7 } nonce: '0' storage: {} balance: 0 : balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # The parameter's value is the contract to call. It is # *0x100 + # For example, 0x0100 is ADD with zero parameters and 0x0101 is ADD with # one parameter - :label ADD-1 :abi f(uint) - :label ADD-2 :abi f(uint) - :label MUL-1 :abi f(uint) - :label MUL-2 :abi f(uint) - :label SUB-1 :abi f(uint) - :label SUB-2 :abi f(uint) - :label DIV-1 :abi f(uint) - :label DIV-2 :abi f(uint) - :label SDIV-1 :abi f(uint) - :label SDIV-2 :abi f(uint) - :label MOD-1 :abi f(uint) - :label MOD-2 :abi f(uint) - :label SMOD-1 :abi f(uint) - :label SMOD-2 :abi f(uint) - :label ADDMOD-2 :abi f(uint) - :label ADDMOD-3 :abi f(uint) - :label MULMOD-2 :abi f(uint) - :label MULMOD-3 :abi f(uint) - :label EXP-1 :abi f(uint) - :label EXP-2 :abi f(uint) - :label SIGNEXTEND-1 :abi f(uint) - :label SIGNEXTEND-2 :abi f(uint) - :label LT-1 :abi f(uint) - :label LT-2 :abi f(uint) - :label GT-1 :abi f(uint) - :label GT-2 :abi f(uint) - :label SLT-1 :abi f(uint) - :label SLT-2 :abi f(uint) - :label SGT-1 :abi f(uint) - :label SGT-2 :abi f(uint) - :label EQ-1 :abi f(uint) - :label EQ-2 :abi f(uint) - :label ISZERO-0 :abi f(uint) - :label ISZERO-1 :abi f(uint) - :label AND-1 :abi f(uint) - :label AND-2 :abi f(uint) - :label OR-1 :abi f(uint) - :label OR-2 :abi f(uint) - :label XOR-1 :abi f(uint) - :label XOR-2 :abi f(uint) - :label NOT-0 :abi f(uint) - :label NOT-1 :abi f(uint) - :label BYTE-1 :abi f(uint) - :label BYTE-2 :abi f(uint) - :label SHL-1 :abi f(uint) - :label SHL-2 :abi f(uint) - :label SHR-1 :abi f(uint) - :label SHR-2 :abi f(uint) - :label SAR-1 :abi f(uint) - :label SAR-2 :abi f(uint) - :label SHA3-1 :abi f(uint) - :label SHA3-2 :abi f(uint) - :label BALANCE-0 :abi f(uint) - :label BALANCE-1 :abi f(uint) - :label CALLDATALOAD-0 :abi f(uint) - :label CALLDATALOAD-1 :abi f(uint) - :label CALLDATACOPY-2 :abi f(uint) - :label CALLDATACOPY-3 :abi f(uint) - :label CODECOPY-2 :abi f(uint) - :label CODECOPY-3 :abi f(uint) - :label EXTCODESIZE-0 :abi f(uint) - :label EXTCODESIZE-1 :abi f(uint) - :label EXTCODECOPY-3 :abi f(uint) - :label EXTCODECOPY-4 :abi f(uint) - :label EXTCODEHASH-0 :abi f(uint) - :label EXTCODEHASH-1 :abi f(uint) - :label BLOCKHASH-0 :abi f(uint) - :label BLOCKHASH-1 :abi f(uint) - :label POP-0 :abi f(uint) - :label POP-1 :abi f(uint) - :label MLOAD-0 :abi f(uint) - :label MLOAD-1 :abi f(uint) - :label MSTORE-1 :abi f(uint) - :label MSTORE-2 :abi f(uint) - :label MSTORE8-1 :abi f(uint) - :label MSTORE8-2 :abi f(uint) - :label SLOAD-0 :abi f(uint) - :label SLOAD-1 :abi f(uint) - :label LOG0-1 :abi f(uint) - :label LOG0-2 :abi f(uint) - :label LOG1-2 :abi f(uint) - :label LOG1-3 :abi f(uint) - :label LOG2-3 :abi f(uint) - :label LOG2-4 :abi f(uint) - :label LOG3-4 :abi f(uint) - :label LOG3-5 :abi f(uint) - :label LOG4-5 :abi f(uint) - :label LOG4-6 :abi f(uint) - :label CREATE-2 :abi f(uint) - :label CREATE-3 :abi f(uint) - :label CALL-6 :abi f(uint) - :label CALL-7 :abi f(uint) - :label CALLCODE-6 :abi f(uint) - :label CALLCODE-7 :abi f(uint) - :label RETURN-1 :abi f(uint) - :label RETURN-2 :abi f(uint) - :label DELEGATECALL-5 :abi f(uint) - :label DELEGATECALL-6 :abi f(uint) - :label CREATE2-3 :abi f(uint) - :label CREATE2-4 :abi f(uint) - :label STATICCALL-5 :abi f(uint) - :label STATICCALL-6 :abi f(uint) - :label DUP1-0 :abi f(uint) - :label DUP1-1 :abi f(uint) - :label DUP2-1 :abi f(uint) - :label DUP2-2 :abi f(uint) - :label DUP3-2 :abi f(uint) - :label DUP3-3 :abi f(uint) - :label DUP4-3 :abi f(uint) - :label DUP4-4 :abi f(uint) - :label DUP5-4 :abi f(uint) - :label DUP5-5 :abi f(uint) - :label DUP6-5 :abi f(uint) - :label DUP6-6 :abi f(uint) - :label DUP7-6 :abi f(uint) - :label DUP7-7 :abi f(uint) - :label DUP8-7 :abi f(uint) - :label DUP8-8 :abi f(uint) - :label DUP9-8 :abi f(uint) - :label DUP9-9 :abi f(uint) - :label DUP10-9 :abi f(uint) - :label DUP10-10 :abi f(uint) - :label DUP11-10 :abi f(uint) - :label DUP11-11 :abi f(uint) - :label DUP12-11 :abi f(uint) - :label DUP12-12 :abi f(uint) - :label DUP13-12 :abi f(uint) - :label DUP13-13 :abi f(uint) - :label DUP14-13 :abi f(uint) - :label DUP14-14 :abi f(uint) - :label DUP15-14 :abi f(uint) - :label DUP15-15 :abi f(uint) - :label DUP16-15 :abi f(uint) - :label DUP16-16 :abi f(uint) - :label SWAP1-1 :abi f(uint) - :label SWAP1-2 :abi f(uint) - :label SWAP2-2 :abi f(uint) - :label SWAP2-3 :abi f(uint) - :label SWAP3-3 :abi f(uint) - :label SWAP3-4 :abi f(uint) - :label SWAP4-4 :abi f(uint) - :label SWAP4-5 :abi f(uint) - :label SWAP5-5 :abi f(uint) - :label SWAP5-6 :abi f(uint) - :label SWAP6-6 :abi f(uint) - :label SWAP6-7 :abi f(uint) - :label SWAP7-7 :abi f(uint) - :label SWAP7-8 :abi f(uint) - :label SWAP8-8 :abi f(uint) - :label SWAP8-9 :abi f(uint) - :label SWAP9-9 :abi f(uint) - :label SWAP9-10 :abi f(uint) - :label SWAP10-10 :abi f(uint) - :label SWAP10-11 :abi f(uint) - :label SWAP11-11 :abi f(uint) - :label SWAP11-12 :abi f(uint) - :label SWAP12-12 :abi f(uint) - :label SWAP12-13 :abi f(uint) - :label SWAP13-13 :abi f(uint) - :label SWAP13-14 :abi f(uint) - :label SWAP14-14 :abi f(uint) - :label SWAP14-15 :abi f(uint) - :label SWAP15-15 :abi f(uint) - :label SWAP15-16 :abi f(uint) - :label SWAP16-16 :abi f(uint) - :label SWAP16-17 :abi f(uint) gasLimit: - '8000000' gasPrice: '10' nonce: '0' to: value: - '1' secretKey: "" expect: - indexes: data: :label ADD-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label ADD-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label MUL-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label MUL-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SUB-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SUB-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DIV-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DIV-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SDIV-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SDIV-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label MOD-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label MOD-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SMOD-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SMOD-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label ADDMOD-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label ADDMOD-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label MULMOD-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label MULMOD-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label EXP-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label EXP-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SIGNEXTEND-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SIGNEXTEND-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label LT-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label LT-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label GT-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label GT-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SLT-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SLT-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SGT-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SGT-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label EQ-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label EQ-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label ISZERO-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label ISZERO-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label AND-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label AND-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label OR-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label OR-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label XOR-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label XOR-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label NOT-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label NOT-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label BYTE-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label BYTE-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SHL-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SHL-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SHR-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SHR-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SAR-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SAR-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SHA3-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SHA3-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label BALANCE-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label BALANCE-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CALLDATALOAD-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CALLDATALOAD-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CALLDATACOPY-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CALLDATACOPY-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CODECOPY-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CODECOPY-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label EXTCODESIZE-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label EXTCODESIZE-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label EXTCODECOPY-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label EXTCODECOPY-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label EXTCODEHASH-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label EXTCODEHASH-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label BLOCKHASH-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label BLOCKHASH-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label POP-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label POP-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label MLOAD-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label MLOAD-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label MSTORE-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label MSTORE-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label MSTORE8-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label MSTORE8-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SLOAD-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SLOAD-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label LOG0-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label LOG0-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label LOG1-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label LOG1-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label LOG2-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label LOG2-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label LOG3-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label LOG3-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label LOG4-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label LOG4-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CREATE-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CREATE-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CALL-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CALL-7 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CALLCODE-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CALLCODE-7 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label RETURN-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label RETURN-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DELEGATECALL-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DELEGATECALL-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label CREATE2-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label CREATE2-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label STATICCALL-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label STATICCALL-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP1-0 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP1-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP2-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP2-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP3-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP3-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP4-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP4-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP5-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP5-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP6-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP6-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP7-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP7-7 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP8-7 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP8-8 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP9-8 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP9-9 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP10-9 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP10-10 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP11-10 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP11-11 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP12-11 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP12-12 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP13-12 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP13-13 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP14-13 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP14-14 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP15-14 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP15-15 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label DUP16-15 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label DUP16-16 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP1-1 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP1-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP2-2 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP2-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP3-3 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP3-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP4-4 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP4-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP5-5 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP5-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP6-6 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP6-7 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP7-7 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP7-8 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP8-8 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP8-9 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP9-9 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP9-10 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP10-10 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP10-11 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP11-11 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP11-12 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP12-12 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP12-13 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP13-13 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP13-14 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP14-14 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP14-15 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP15-15 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP15-16 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 - indexes: data: :label SWAP16-16 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x60A7 - indexes: data: :label SWAP16-17 network: - '>=Cancun' result: : storage: 0x00: 0x60A7 0x01: 0x60A7 : storage: 0x01: 0x01 ================================================ FILE: tests/static/state_tests/stStackTests/underflowTestGen.js ================================================ #! /usr/bin/node // Generate the underTestFiller.yml, which is repetitive and boring. // // Ori Pomerantz qbzzt1@gmail.com // // These tests run an opcode with an insufficient number of stack // parameters and see that the transaction reverts. // Each opcode in the test is executed twice, once with just enough // parameters, and once with one less than that. // It would have been better to test all cases (0,1 for two parameters,etc), // but that creates an unyieldy 500 test case monster. // Every entry in this table has three fields: // OPCODE in text (ADD, PUSH1, etc.) // OPCODE in machine language (01 for ADD, 02 for MUL, etc.) // The correct number of parameters // // This table excludes opcodes such as ADDRESS and CALLER that don't // take parameters, and therefore never experience underflow // // This is a var because we'll add the DUP and SWAP opcodes, which are // each a series, in code later. var opcodes = [ ["ADD", "01", 2], ["MUL", "02", 2], ["SUB", "03", 2], ["DIV", "04", 2], ["SDIV", "05", 2], ["MOD", "06", 2], ["SMOD", "07", 2], ["ADDMOD", "08", 3], ["MULMOD", "09", 3], ["EXP", "0A", 2], ["SIGNEXTEND", "0B", 2], ["LT", "10", 2], ["GT", "11", 2], ["SLT", "12", 2], ["SGT", "13", 2], ["EQ", "14", 2], ["ISZERO","15", 1], ["AND", "16", 2], ["OR", "17", 2], ["XOR", "18", 2], ["NOT", "19", 1], ["BYTE", "1A", 2], ["SHL", "1B", 2], ["SHR", "1C", 2], ["SAR", "1D", 2], ["SHA3", "20", 2], ["BALANCE", "31", 1], ["CALLDATALOAD", "35", 1], ["CALLDATACOPY", "37", 3], ["CODECOPY", "39", 3], ["EXTCODESIZE", "3B", 1], ["EXTCODECOPY", "3C", 4], // ["RETURNDATACOPY","3E", 3], fails when there is no return data to copy ["EXTCODEHASH", "3F", 1], ["BLOCKHASH", "40", 1], ["POP", "50", 1], ["MLOAD", "51", 1], ["MSTORE", "52", 2], ["MSTORE8", "53", 2], ["SLOAD", "54", 1], // ["SSTORE", "55", 2], produces an "unexpected" entry in storage // ["JUMP", "56", 1], we try to jump, but not to a JUMPDEST // ["JUMPI", "57", 2], same as JUMP ["LOG0", "A0", 2], ["LOG1", "A1", 3], ["LOG2", "A2", 4], ["LOG3", "A3", 5], ["LOG4", "A4", 6], ["CREATE", "F0", 3], ["CALL", "F1", 7], ["CALLCODE","F2", 7], ["RETURN", "F3", 2], ["DELEGATECALL", "F4", 6], ["CREATE2", "F5", 4], ["STATICCALL", "FA", 6] // REVERT and SELFDESTRUCT don't continue the normal run ] // Add the DUP opcodes for (var i=1; i<17; i++) { opcodes.push([`DUP${i}`, (0x7F+i).toString(16), i]) } for (var i=1; i<17; i++) { opcodes.push([`SWAP${i}`, (0x8F+i).toString(16), i+1]) } // if (true) console.log(opcodes) const boilerPlate1 = ` underflowTest: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 100000000 currentNumber: 1 currentTimestamp: 1000 _info: comment: Ori Pomerantz qbzzt1@gmail.com pre: ` const boilerPlate2 = ` # Call different contracts depending on the parameter cccccccccccccccccccccccccccccccccccccccc: code: | { [[0]] 0x60A7 (call (gas) $4 0 0 0 0 0) [[1]] 0x60A7 } nonce: '0' storage: {} balance: 0 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '0x0ba1a9ce0ba1a9ce' code: '0x' nonce: '0' storage: {} transaction: data: # The parameter's value is the contract to call. It is # *0x100 + # For example, 0x0100 is ADD with zero parameters and 0x0101 is ADD with # one parameter ` const boilerPlate3 = ` gasLimit: - '80000000' gasPrice: '1' nonce: '0' to: cccccccccccccccccccccccccccccccccccccccc value: - '1' secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: ` // Create the contract to test an opcode with a specific number of // parameters (good is true iff the number of parameters is valid for // that opcode). Return a structure with the relevant entries for the // pre section, the transaction.data section, and the expect section. const createOpcodeTest = (opcodeName, opcode, params, good) => { // The 20 byte address addr = (parseInt(opcode,16)*0x100+params).toString(16).padStart(40, '0') // The code, PUSH1 0x80 (however many times) followed by the opcode var code = '' for(var i=0; i=Istanbul' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 0x60A7 0x01: 0x60A7 ${addr}: storage: 0x01: ${good ? "0x01" : "0x60A7"} ` } // return {} } // createOpcodeTest // x = createOpcodeTest("ADD", 0x01, 2, true) // The variables that will collect the output // of createOpcodeTest var preCollector = "" var dataCollector = "" var expectCollector = "" // For every opcode for (var i=0; i=Cancun" result: b000000000000000000000000000000000000000: storage: '0x00': '0x01' a000000000000000000000000000000000000000: storage: # precompiled contract #1 - Recovery of ECDSA signature '0x00': '0x01' '0x01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x03': '0x01' '0x04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x06': '0x01' '0x07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x09': '0x01' '0x10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x11': '0x01' '0x12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x13': '0x01' '0x14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x16': '0x01' '0x17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x19': '0x01' '0x20': '0x01' pre: b000000000000000000000000000000000000000: balance: '0' nonce: '0' storage: {} code: | { [[ 0 ]] (CALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0 0 0 ) } a000000000000000000000000000000000000000: balance: '0' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 [[ 0x00 ]] (STATICCALL (GAS) 1 0 128 1000 32) [[ 0x01 ]] (MOD @1000 (EXP 2 160)) [[ 0x02 ]] (EQ (ORIGIN) @@1) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x03 ]] (STATICCALL (GAS) 2 0 32 1000 32) [[ 0x04 ]] @0 [[ 0x05 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x06 ]] (STATICCALL (GAS) 3 0 32 1000 32) [[ 0x07 ]] @0 [[ 0x08 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x09 ]] (STATICCALL (GAS) 4 0 32 1000 32) [[ 0x10 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 [[ 0x11 ]] (STATICCALL (GAS) 5 0 0xa1 1000 32) [[ 0x12 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 [[ 0x13 ]] (STATICCALL (GAS) 6 0 128 1000 64) [[ 0x14 ]] @1000 [[ 0x15 ]] @1032 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1032 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 [[ 0x16 ]] (STATICCALL (GAS) 7 0 96 1000 64) [[ 0x17 ]] @1000 [[ 0x18 ]] @1032 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1032 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa [[ 0x19 ]] (STATICCALL (GAS) 8 0 0x0180 1000 32) [[ 0x20 ]] @1000 } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '1000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticCall/StaticcallToPrecompileFromContractInitializationFiller.yml ================================================ --- StaticcallToPrecompileFromContractInitialization: _info: comment: | STATICCALL to precompiled contracts from contract initialization code. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: storage: '0x00': '0xfad204ed1275b429b66c9ce0614d62832d6b2580' fad204ed1275b429b66c9ce0614d62832d6b2580: storage: # precompiled contract #1 - Recovery of ECDSA signature '0x00': '0x01' '0x01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x03': '0x01' '0x04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x06': '0x01' '0x07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x09': '0x01' '0x10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x11': '0x01' '0x12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x13': '0x01' '0x14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x16': '0x01' '0x17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x19': '0x01' '0x20': '0x01' pre: a000000000000000000000000000000000000000: balance: '0' nonce: '0' storage: {} code: | { (CALLDATACOPY 0 0 (CALLDATASIZE)) [[ 0 ]] (CREATE2 0 0 (CALLDATASIZE) 0x5a175a175a17) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 [[ 0x00 ]] (STATICCALL 400000 1 0 128 1000 32) [[ 0x01 ]] (MOD @1000 (EXP 2 160)) [[ 0x02 ]] (EQ (ORIGIN) @@1) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x03 ]] (STATICCALL (GAS) 2 0 32 1000 32) [[ 0x04 ]] @0 [[ 0x05 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x06 ]] (STATICCALL (GAS) 3 0 32 1000 32) [[ 0x07 ]] @0 [[ 0x08 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x09 ]] (STATICCALL (GAS) 4 0 32 1000 32) [[ 0x10 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 [[ 0x11 ]] (STATICCALL (GAS) 5 0 0xa1 1000 32) [[ 0x12 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 [[ 0x13 ]] (STATICCALL (GAS) 6 0 128 1000 64) [[ 0x14 ]] @1000 [[ 0x15 ]] @1032 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1032 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 [[ 0x16 ]] (STATICCALL (GAS) 7 0 96 1000 64) [[ 0x17 ]] @1000 [[ 0x18 ]] @1032 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1032 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa [[ 0x19 ]] (STATICCALL (GAS) 8 0 0x0180 1000 32) [[ 0x20 ]] @1000 } gasLimit: - '1000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'a000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticCall/StaticcallToPrecompileFromTransactionFiller.yml ================================================ --- StaticcallToPrecompileFromTransaction: _info: comment: | STATICCALL to precompiled contracts from transaction code. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: storage: # precompiled contract #1 - Recovery of ECDSA signature '0x00': '0x01' '0x01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x03': '0x01' '0x04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x06': '0x01' '0x07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x09': '0x01' '0x10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x11': '0x01' '0x12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x13': '0x01' '0x14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x16': '0x01' '0x17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x19': '0x01' '0x20': '0x01' pre: a000000000000000000000000000000000000000: balance: '0' code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 [[ 0x00 ]] (STATICCALL (GAS) 1 0 128 1000 32) [[ 0x01 ]] (MOD @1000 (EXP 2 160)) [[ 0x02 ]] (EQ (ORIGIN) @@1) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x03 ]] (STATICCALL (GAS) 2 0 32 1000 32) [[ 0x04 ]] @0 [[ 0x05 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x06 ]] (STATICCALL (GAS) 3 0 32 1000 32) [[ 0x07 ]] @0 [[ 0x08 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 [[ 0x09 ]] (STATICCALL (GAS) 4 0 32 1000 32) [[ 0x10 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 [[ 0x11 ]] (STATICCALL (GAS) 5 0 0xa1 1000 32) [[ 0x12 ]] @1000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 [[ 0x13 ]] (STATICCALL (GAS) 6 0 128 1000 64) [[ 0x14 ]] @1000 [[ 0x15 ]] @1032 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1032 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 [[ 0x16 ]] (STATICCALL (GAS) 7 0 96 1000 64) [[ 0x17 ]] @1000 [[ 0x18 ]] @1032 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 1032 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa [[ 0x19 ]] (STATICCALL (GAS) 8 0 0x0180 1000 32) [[ 0x20 ]] @1000 } nonce: '0' storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '1000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'a000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticCall/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stStaticCall/static_ABAcalls0Filler.json ================================================ { "static_ABAcalls0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x24" : "0x00" } }, "" : { "storage" : { "0x26" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000", "storage" : { "0x24" : "0x00" } }, "" : { "storage" : { "0x26" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ (PC) ]] (STATICCALL 100000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { [[ (PC) ]] (ADD 1 (STATICCALL 50000 0 0 0 0)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 (PC)) (STATICCALL 100000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { (MSTORE 1 (PC)) (STATICCALL 50000 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ABAcalls1Filler.json ================================================ { "static_ABAcalls1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x26" : "0x00" } }, "" : { "storage" : { "0x29" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x26" : "0x00" } }, "" : { "storage" : { "0x29" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ (PC) ]] (STATICCALL (- (GAS) 100000) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { [[ (PC) ]] (ADD 1 (STATICCALL (- (GAS) 100000) 0 0 0 0)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 (PC)) (STATICCALL (- (GAS) 100000) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { (MSTORE (PC) (ADD 1 (STATICCALL (- (GAS) 100000) 0 0 0 0)) ) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ABAcalls2Filler.json ================================================ { "static_ABAcalls2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (ADD (SLOAD 0) 1) (STATICCALL (- (GAS) 100000) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : " { [[ 0 ]] (ADD (SLOAD 0) 1) (STATICCALL (- (GAS) 100000) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ ( MSTORE 0 (ADD (MLOAD 0) 1)) (STATICCALL (- (GAS) 100000) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : " { ( MSTORE 0 (ADD (MLOAD 0) 1)) (STATICCALL (- (GAS) 100000) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ABAcalls3Filler.json ================================================ { "static_ABAcalls3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1025000", "code" : "{ [[ 0 ]] (ADD (SLOAD 0) 1) (STATICCALL (- (GAS) 100000) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : " { [[ 0 ]] (ADD (SLOAD 0) 1) (STATICCALL (- (GAS) 100000) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1025000", "code" : "{ (MSTORE 0 (ADD (SLOAD 0) 1)) (STATICCALL (- (GAS) 100000) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : " { (MSTORE 0 (ADD (SLOAD 0) 1)) (STATICCALL (- (GAS) 100000) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ABAcallsSuicide0Filler.json ================================================ { "static_ABAcallsSuicide0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x26" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x26" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ (PC) ]] (STATICCALL 100000 0 0 0 0) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{ [[ (PC) ]] (ADD 1 (STATICCALL 50000 0 0 0 0)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE (PC) (STATICCALL 100000 0 0 0 0)) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{ (MSTORE (PC) (ADD 1 (STATICCALL 50000 0 0 0 0)) ) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ABAcallsSuicide1Filler.json ================================================ { "static_ABAcallsSuicide1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { } }, "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "shouldnotexist" : "1" }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (STATICCALL (CALLDATALOAD 0) 0x945304eb96065b2a98b57a48a06ae28d285a71b5 0 32 0 0) }", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (STATICCALL (SUB (CALLDATALOAD 0) 50000) 0x095e7baea6a6c7c4c2dfeb977efac326af552d87 0 32 0 0) (SELFDESTRUCT 0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6) } ", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000186a0", ":raw 0x00000000000000000000000000000000000000000000000000000000000486a0" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CALL_OneVCallSuicideFiller.json ================================================ { "static_CALL_OneVCallSuicide" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1" }, "" : { "storage" : { "0x01" : "0x00", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "{ [[1]](STATICCALL 60000 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "1", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CALL_ZeroVCallSuicideFiller.json ================================================ { "static_CALL_ZeroVCallSuicide" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "code" : "0x73ff00" }, "" : { "storage" : { "0x00" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 60000 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CREATE_ContractSuicideDuringInitFiller.json ================================================ { "static_CREATE_ContractSuicideDuringInit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "11", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "11", "code" : "{ (SSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "e94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "11", "code" : "{ (CALL 100 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 1 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{(STATICCALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) (MSTORE 0 0x64600c6000556000526005601bf3) (SELFDESTRUCT 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b)}", "data" : [ ":raw 0x600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273c94f5374fce5edbc8e2a8697c15331677e6ebf0bff", ":raw 0x600060006000600073b94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273c94f5374fce5edbc8e2a8697c15331677e6ebf0bff", ":raw 0x600060006000600073d94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273c94f5374fce5edbc8e2a8697c15331677e6ebf0bff", ":raw 0x600060006000600073e94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273c94f5374fce5edbc8e2a8697c15331677e6ebf0bff" ], "gasLimit" : [ "150000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturnFiller.json ================================================ { "static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturn" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "storage" : { "0x01" : "0x00" } }, "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10", "storage" : { "0x01" : "0x00" } }, "094f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "storage" : { "0x01" : "0x00" } }, "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } }, "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } }, "094f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{(MSTORE 1 1) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{ (STATICCALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) (MSTORE 0 0x64600c6000556000526005601bf3) (SELFDESTRUCT 0xd94f5374fce5edbc8e2a8697c15331677e6ebf0b) (STATICCALL 60000 0xd94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) [[0]]11 (RETURN 18 14)}", "data" : [ ":raw 0x600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273d94f5374fce5edbc8e2a8697c15331677e6ebf0bff600060006000600073d94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa50600b600055600e6012f3", ":raw 0x600060006000600073094f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273d94f5374fce5edbc8e2a8697c15331677e6ebf0bff600060006000600073194f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa50600b600055600e6012f3" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CREATE_ContractSuicideDuringInit_WithValueFiller.json ================================================ { "static_CREATE_ContractSuicideDuringInit_WithValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } }, "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "This indicates that a call from transaction was initiated", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "{(STATICCALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) (MSTORE 0 0x64600c6000556000526005601bf3) (SELFDESTRUCT 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b)}", "data" : [ ":raw 0x600060006000600073c94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273c94f5374fce5edbc8e2a8697c15331677e6ebf0bff", ":raw 0x600060006000600073d94f5374fce5edbc8e2a8697c15331677e6ebf0b61ea60fa506d64600c6000556000526005601bf360005273c94f5374fce5edbc8e2a8697c15331677e6ebf0bff" ], "gasLimit" : [ "150000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CREATE_EmptyContractAndCallIt_0weiFiller.json ================================================ { "static_CREATE_EmptyContractAndCallIt_0wei" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "//comment" : "CREATE price changed in Shanghai", "//comment" : "Due to eip-3860 (https://eips.ethereum.org/EIPS/eip-3860) pay extra 2 gas for each 32 bytes of initcode", "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x02" : "0x07abf8", "0x03" : "0x01", "0x64" : "0x06fe6e" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CREATE 0 0 32) [[2]](GAS) [[3]] (STATICCALL 60000 (SLOAD 1) 0 0 0 0) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CREATE_EmptyContractWithStorageAndCallIt_0weiFiller.json ================================================ { "static_CREATE_EmptyContractWithStorageAndCallIt_0wei" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "//comment" : "CREATE price changed in Shanghai", "//comment" : "Due to eip-3860 (https://eips.ethereum.org/EIPS/eip-3860) pay extra 2 gas for each 32 bytes of initcode", "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0xf1ecf98489fa9ed60a664fc4998db699cfa39d40", "0x02" : "0x06f4f0", "0x03" : "0x01", "0x64" : "0x064766" } }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x01" : "0x0c" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "// code" : "{ [[0]]12 (STATICCALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0)}", "code" : "{ [[0]](GAS) (MSTORE 0 0x600c6000556000600060006000600073c94f5374fce5edbc8e2a8697c1533167) (MSTORE 32 0x7e6ebf0b61ea60f1000000000000000000000000000000000000000000000000) [[1]] (CREATE 0 0 64) [[2]] (GAS) [[3]] (STATICCALL 60000 (SLOAD 1) 0 0 0 0) [[100]] (GAS) }", "storage": { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "{[[1]]12}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1024BalanceTooLow2Filler.json ================================================ { "static_Call1024BalanceTooLow2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (STATICCALL 0xfffffffffff @@0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ (MSTORE 0 (ADD (MLOAD 0) 1)) (MSTORE 32 (STATICCALL 0xfffffffffff (MLOAD 0) 0 0 0)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "0x10000000d788" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1024BalanceTooLowFiller.json ================================================ { "static_Call1024BalanceTooLow" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (STATICCALL 0xfffffffffff @@0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ (MSTORE 0 (ADD (MLOAD 0) 1)) (MSTORE 32 (STATICCALL 0xfffffffffff (MLOAD 0) 0 0 0)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "17592186099592" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1024OOGFiller.json ================================================ { "static_Call1024OOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x03e9" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (STATICCALL (MUL (SUB (GAS) 10000) (SUB 1 (DIV @@0 1025))) 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ (MSTORE 0 (ADD (MLOAD 0) 1)) (STATICCALL (MUL (SUB (GAS) 10000) (SUB 1 (DIV (MLOAD 0) 1025))) 0 0 0 0) (MSTORE 32 (ADD 1(MUL (MLOAD 0) 1000))) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "15720826" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1024PreCalls2Filler.json ================================================ { "static_Call1024PreCalls2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0400", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "{ (MSTORE 0 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ [[ 2 ]] (STATICCALL 0xffff 0 0 0 0) [[ 3 ]] (STATICCALL 0xffff 0 0 0 0) [[ 0 ]] (ADD @@0 1) [[ 1 ]] (DELEGATECALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ (STATICCALL 0xffff 0 0 0 0) (STATICCALL 0xffff 0 0 0 0) (MSTORE 0 (ADD (MLOAD 0) 1)) (DELEGATECALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1024PreCalls3Filler.json ================================================ { "static_Call1024PreCalls3" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ [[ 2 ]] (STATICCALL 0xffff 0 0 0 0) [[ 3 ]] (STATICCALL 0xffff 0 0 0 0) [[ 0 ]] (ADD @@0 1) [[ 1 ]] (STATICCALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ (STATICCALL 0xffff 0 0 0 0) (STATICCALL 0xffff 0 0 0 0) (MSTORE 0 (ADD (MLOAD 0) 1)) (STATICCALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1024PreCallsFiller.json ================================================ { "static_Call1024PreCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x01", "0x03" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ [[ 2 ]] (STATICCALL 0xffff 0 0 0 0) [[ 3 ]] (STATICCALL 0xffff 0 0 0 0) [[ 0 ]] (ADD @@0 1) [[ 1 ]] (STATICCALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "2024", "code" : "{ (STATICCALL 0xffff 0 0 0 0) (STATICCALL 0xffff 0 0 0 0) (MSTORE 0 (ADD (MLOAD 0) 1)) (STATICCALL 0xfffffffffff 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call10Filler.json ================================================ { "static_Call10" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0a" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "code" : "{ (def 'i 0x80) (for {} (< @i 10) [i](+ @i 1) [[ 0 ]](STATICCALL 0xfffffffffff 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "code" : "{ (def 'i 0x80) (for {} (< @i 10) [i](+ @i 1) (MSTORE 0 (STATICCALL 0xfffffffffff 0 50000 0 0)) ) (MSTORE 32 @i)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call1MB1024CalldepthFiller.json ================================================ { "static_Call1MB1024Calldepth" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "892500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) [[ 0 ]] (+ @@0 1) (if (LT @@0 1024) [[ 1 ]] (STATICCALL (- (GAS) 1005000) 0 1000000 0 0) [[ 2 ]] 1 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (MSTORE 0 (+ (MLOAD 0) 1)) (if (LT (MLOAD 0) 1024) (MSTORE 32 (STATICCALL (- (GAS) 1005000) 0 1000000 0 0)) (MSTORE 64 1) ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "882500000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000Filler.json ================================================ { "static_Call50000" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "4503599627370505", "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "50000" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "balance" : "0x1b58", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x20" : "0xc350" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "{ (MSTORE 0 (SLOAD 0)) }", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "7000", "code" : "{ (SSTORE 0 (SLOAD 0)) }", "nonce" : "0", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (STATICCALL 100000 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (SSTORE 0 (STATICCALL 100000 0 50000 0 0)) ) (SSTORE 32 @i ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "90000000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000_ecrecFiller.json ================================================ { "static_Call50000_ecrec" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "95000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x01" : "0xc350" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (STATICCALL 500 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (MSTORE 0 (STATICCALL 500 1 0 50000 0 0)) ) (MSTORE 32 @i ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "94500000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000_identity2Filler.json ================================================ { "static_Call50000_identity2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "8925000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x02" : "0x2a", "0x01" : "0xc350" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) [ 1 ] 42 (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (STATICCALL 1564 4 0 50000 1 50000) ) [[ 1 ]] @i [[ 2 ]] @1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) [ 1 ] 42 (for {} (< @i 50000) [i](+ @i 1) (MSTORE 0 (STATICCALL 1564 4 0 50000 1 50000)) ) (MSTORE 32 @i) (MSTORE 64 @1 ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "882500000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000_identityFiller.json ================================================ { "static_Call50000_identity" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "89250000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (STATICCALL 1564 4 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (MSTORE 0 (STATICCALL 1564 4 0 50000 0 0)) ) (MSTORE 32 @i ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "88250000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000_rip160Filler.json ================================================ { "static_Call50000_rip160" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "39250000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "code" : "0x5b61c3506080511015602b576000600061c3506000600362013178fa6000556001608051016080526000565b60805160015500", "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (STATICCALL 78200 3 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (MSTORE 0 (STATICCALL 78200 3 0 50000 0 0)) ) (MSTORE 32 @i) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3925000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000bytesContract50_1Filler.json ================================================ { "static_Call50000bytesContract50_1" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "892500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : ":raw 0x6001600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) [[ 0 ]] (STATICCALL 88250000000 0 0 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : ":raw 0x60016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016001016000", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) (MSTORE 0 (STATICCALL 88250000000 0 0 0 0)) ) (MSTORE 32 @i) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "882500000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000bytesContract50_2Filler.json ================================================ { "static_Call50000bytesContract50_2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "892500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : ":raw 0x60015b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) [[ 0 ]] (STATICCALL 88250000000 0 0 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : ":raw 0x60015b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b600101", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) (MSTORE 0 (STATICCALL 88250000000 0 0 0 0)) ) (MSTORE 32 @i ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "882500000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Call50000bytesContract50_3Filler.json ================================================ { "static_Call50000bytesContract50_3" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "892500000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "nonce" : "0x01", "storage" : { } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : ":raw 0x600161da8e565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b600101600055", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) [[ 0 ]] (STATICCALL 88250000000 0 0 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : ":raw 0x600161da8e565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b600101", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50) [i](+ @i 1) (MSTORE 0 (STATICCALL 88250000000 0 0 0 0)) ) (MSTORE 32 @i ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "882500000000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallAndCallcodeConsumeMoreGasThenTransactionHasFiller.json ================================================ { "static_CallAndCallcodeConsumeMoreGasThenTransactionHas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x08" : "0x00", "0x09" : "0x00", "0x0a" : "0x00" } }, "" : { "code" : "0x601260005500", "nonce" : "0x00", "storage" : { } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x12", "0x09" : "0x01", "0x0a" : "0x01" } }, "" : { "code" : "0x601260005200", "nonce" : "0x00", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "//0 code" : "By new EIP150 rules this transaction would be executed even if call consumes more gas then transaction has.", "//1 code" : "Staticcall goes oog and eats 600k gas", "code" : "{ (SSTORE 9 (STATICCALL 600000 0 0 0 0)) (SSTORE 10 (CALLCODE 600000 0 0 0 0 0)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should be 12 in the post state", "code" : "{ (SSTORE 0 0x12) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "//0 code" : "By new EIP150 rules this transaction would be executed even if call consumes more gas then transaction has.", "//1 code" : "Staticcall goes oog and eats 600k gas", "code" : "{ (SSTORE 9 (STATICCALL 600000 0 0 0 0)) (SSTORE 10 (CALLCODE 600000 0 0 0 0 0)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 0 0x12) } ", "storage": { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallAskMoreGasOnDepth2ThenTransactionHasFiller.json ================================================ { "static_CallAskMoreGasOnDepth2ThenTransactionHas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x08" : "0x01", "0x09" : "0x01" } }, "" : { "storage" : { "0x08" : "0x00", "0x09" : "0x00" } }, "" : { "storage" : { "0x08" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x08" : "0x01", "0x09" : "0x01" } }, "" : { "storage" : { "0x08" : "0x00", "0x09" : "0x00" } }, "" : { "storage" : { "0x08" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "ordinal call should work but on second depth it has call that asks more gas than left", "code" : "{ (SSTORE 8 1) (SSTORE 9 (STATICCALL 200000 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 8 (GAS)) (MSTORE 9 (STATICCALL 600000 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should be set in the post state", "code" : "{ (SSTORE 8 1)} ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "ordinal call should work but on second depth it has call that asks more gas than left", "code" : "{ (SSTORE 8 1) (SSTORE 9 (STATICCALL 200000 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 8 (GAS)) (MSTORE 9 (STATICCALL 600000 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "should be set in the post state", "code" : "{ (MSTORE 8 (GAS))} ", "storage": { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallContractToCreateContractAndCallItOOGFiller.json ================================================ { "static_CallContractToCreateContractAndCallItOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "1", "nonce" : "1", "storage" : { "0x00" : "0x0c" } } } }, { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0x00", "0x02" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "1000", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3)[[0]](CREATE 1 11 21) (STATICCALL 1000 (SLOAD 0) 0 0 0 0) (IF (EQ (CALLDATALOAD 0) 0) (KECCAK256 0x00 0x2fffff) (GAS) ) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00", ":raw 0x01" ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallContractToCreateContractOOGBonusGasFiller.json ================================================ { "static_CallContractToCreateContractOOGBonusGas" : { "_info" : { "comment": "Gas analysis showed this test's gas can go as low as 101174, and still yield the same traces, which implies the test is broken" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun=Cancun=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "0", "storage" : { "0x00" : "0x00" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : 1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "0", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3) [[0]](CREATE 1 11 21) (STATICCALL 0 (SLOAD 0) 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallContractToCreateContractWhichWouldCreateContractIfCalledFiller.json ================================================ { "static_CallContractToCreateContractWhichWouldCreateContractIfCalled" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6", "0x01" : "0x00" } }, "62c01474f089b07dae603491675dc5b5748f7049" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "1", "nonce" : "1", "storage" : { "0x00" : "0x0c" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "//" : "{[[0]] 12 (MSTORE 32 0x602060406000f0)(RETURN 57 7)}", "balance" : "1000", "code" : "{(MSTORE 0 0x600c60005566602060406000f060205260076039f3) [[ 0 ]](CREATE 1 11 21) [[ 1 ]] (STATICCALL 150000 (SLOAD 0) 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0Filler.json ================================================ { "static_CallEcrecover0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0_0inputFiller.json ================================================ { "static_CallEcrecover0_0input" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 8, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x00" } } } }, { "indexes" : { "data" : [0,1,4,5,6,7], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01", "0x00" : "0x8209944e898f69a7bd10a23c839d341e935fd5ca" } } } }, { "indexes" : { "data" : 3, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01", "0x00" : "0x4300a157335cb7c9fc9423e011d7dd51090d093f" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (STATICCALL 300000 (CALLDATALOAD 0) 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001", ":raw 0x0000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0000000000000000000000000000000000000000000000000000000000000003", ":raw 0x0000000000000000000000000000000000000000000000000000000000000004", ":raw 0x0000000000000000000000000000000000000000000000000000000000000005", ":raw 0x0000000000000000000000000000000000000000000000000000000000000006", ":raw 0x0000000000000000000000000000000000000000000000000000000000000007", ":raw 0x0000000000000000000000000000000000000000000000000000000000000008" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0_Gas2999Filler.json ================================================ { "static_CallEcrecover0_Gas2999" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 2999 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0_NoGasFiller.json ================================================ { "static_CallEcrecover0_NoGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 0 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0_completeReturnValueFiller.json ================================================ { "static_CallEcrecover0_completeReturnValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 13000 1 0 128 128 32) [[ 0 ]] (MLOAD 128) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0_gas3000Filler.json ================================================ { "static_CallEcrecover0_gas3000" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 3000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover0_overlappingInputOutputFiller.json ================================================ { "static_CallEcrecover0_overlappingInputOutput" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 64 32) [[ 0 ]] (MOD (MLOAD 64) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover1Filler.json ================================================ { "static_CallEcrecover1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 1) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 100000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover2Filler.json ================================================ { "static_CallEcrecover2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 33 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 65 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 100000 1 0 97 97 32) [[ 0 ]] (MOD (MLOAD 97) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover3Filler.json ================================================ { "static_CallEcrecover3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe4319f4b631c6d0fcfc84045dbcb676865fe5e13", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9) (MSTORE 32 27) (MSTORE 64 0x6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a) (MSTORE 96 0x37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d4) [[ 2 ]] (STATICCALL 100000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecover80Filler.json ================================================ { "static_CallEcrecover80" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x00b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0x00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecoverCheckLengthFiller.json ================================================ { "static_CallEcrecoverCheckLength" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0xa0", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 128 0x1122334455667788990011223344556677889900112233445566778899001122) (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MLOAD 128) [[ 1 ]] (MSIZE) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecoverCheckLengthWrongVFiller.json ================================================ { "static_CallEcrecoverCheckLengthWrongV" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1122334455667788990011223344556677889900112233445566778899001122", "0x01" : "0xa0", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 128 0x1122334455667788990011223344556677889900112233445566778899001122) (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 29) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MLOAD 128) [[ 1 ]] (MSIZE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecoverH_prefixed0Filler.json ================================================ { "static_CallEcrecoverH_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xa0b29af6a56d6cfef6415cb195ccbe540e006d0a", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecoverR_prefixed0Filler.json ================================================ { "static_CallEcrecoverR_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x00b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecoverS_prefixed0Filler.json ================================================ { "static_CallEcrecoverS_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xb4950a7fad428434b11c357fa6d4b4bcd3096a5d", "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 28) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0x00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallEcrecoverV_prefixed0Filler.json ================================================ { "static_CallEcrecoverV_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c) (MSTORE 32 0x001c) (MSTORE 64 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f) (MSTORE 96 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549) [[ 2 ]] (STATICCALL 300000 1 0 128 128 32) [[ 0 ]] (MOD (MLOAD 128) (EXP 2 160)) [[ 1 ]] (EQ (ORIGIN) (SLOAD 0)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3652240" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallGoesOOGOnSecondLevel2Filler.json ================================================ { "static_CallGoesOOGOnSecondLevel2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "OOG Call transaction has less gas then in example above", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 600000 0 32 0 0) [[ 1 ]] 1 } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 8 (GAS)) (MSTORE 9 (STATICCALL 600000 (CALLDATALOAD 0) 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 1 1) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "storage": { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "160000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallGoesOOGOnSecondLevelFiller.json ================================================ { "static_CallGoesOOGOnSecondLevel" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "OOG Call because call goes OOG on second level", "code" : "{ (SSTORE 9 (STATICCALL 600000 0 0 0 0)) [[ 10 ]] (GAS) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "Inner CaLL goes OOG on EIP150", "code" : "{ (MSTORE 8 (GAS)) (MSTORE 9 (STATICCALL 600000 0 0 0 0)) } ", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (KECCAK256 0x00 0x2fffff) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "220000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentitiy_1Filler.json ================================================ { "static_CallIdentitiy_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (STATICCALL 500 4 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_1_nonzeroValueFiller.json ================================================ { "static_CallIdentity_1_nonzeroValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000004" : { "balance" : "19" }, "" : { "storage" : { "0x00" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "200000000", "code" : "{ [[ 2 ]] (STATICCALL 200000 4 0 0 0 32) (CALL 50000 4 0x13 0 0 0 0) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_2Filler.json ================================================ { "static_CallIdentity_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xf34578907f", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (STATICCALL 500 4 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_3Filler.json ================================================ { "static_CallIdentity_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xf34578907f", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (STATICCALL 500 4 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_4Filler.json ================================================ { "static_CallIdentity_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 100 4 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_4_gas17Filler.json ================================================ { "static_CallIdentity_4_gas17" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 17 4 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_4_gas18Filler.json ================================================ { "static_CallIdentity_4_gas18" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 18 4 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallIdentity_5Filler.json ================================================ { "static_CallIdentity_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 600 4 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallLoseGasOOGFiller.json ================================================ { "static_CallLoseGasOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x03e9" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1024", "code" : "{ [[ 0 ]] (ADD @@0 1) [[ 1 ]] (STATICCALL (ADD 1(MUL @@0 100000)) 0 0 0 0) [[ 2 ]] (ADD 1(MUL @@0 1000)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBomb0Filler.json ================================================ { "static_CallRecursiveBomb0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "2000000000", "code" : "{ [[ 0 ]] (STATICCALL 100000000 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (+ (MLOAD 0) 1)) (STATICCALL (- (GAS) 11000) (ADDRESS) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBomb0_OOG_atMaxCallDepthFiller.json ================================================ { "static_CallRecursiveBomb0_OOG_atMaxCallDepth" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "110000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (CALLCODE (GAS) 0 0 0 0 0) [[ 1 ]] 1 } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 (+ (SLOAD 0) 1)) (MSTORE 2 (MUL (DIV (MLOAD 0) 0x0402) 0xfffffffffffffffffff)) (STATICCALL (- (GAS) 1024) (ADDRESS) 0 (MUL (DIV (MLOAD 0) 0x0402) 0xfffffffffffffffffff) 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBomb1Filler.json ================================================ { "static_CallRecursiveBomb1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (CALLCODE (GAS) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 (+ (MLOAD 0) 1)) (STATICCALL (- (GAS) 15000) (ADDRESS) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "20622100" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBomb2Filler.json ================================================ { "static_CallRecursiveBomb2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (CALLCODE (GAS) 0 0 0 0 0) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 (+ (MLOAD 0) 1)) (STATICCALL (- (GAS) 15000) (ADDRESS) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "20622099" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBomb3Filler.json ================================================ { "static_CallRecursiveBomb3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (CALLCODE ( - (GAS) 100000) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 (+ (SLOAD 0) 1)) (STATICCALL (- (GAS) 224) (ADDRESS) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBombLog2Filler.json ================================================ { "static_CallRecursiveBombLog2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "20000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (STATICCALL ( - (GAS) 100000) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (GAS)) (LOG0 0 32) (STATICCALL (- (GAS) 25000) (ADDRESS) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBombLogFiller.json ================================================ { "static_CallRecursiveBombLog" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (STATICCALL (- (GAS) 100000) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG0 0 32) (STATICCALL (- (GAS) 25000) (ADDRESS) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBombPreCall2Filler.json ================================================ { "static_CallRecursiveBombPreCall2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "{ (STATICCALL 100000 0xbad304eb96065b2a98b57a48a06ae28d285a71b5 0 0 0 0) [[ 0 ]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (+ (MLOAD 0) 1)) (STATICCALL (- (GAS) 224000) (ADDRESS) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRecursiveBombPreCallFiller.json ================================================ { "static_CallRecursiveBombPreCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "{ (STATICCALL 100000 0xbad304eb96065b2a98b57a48a06ae28d285a71b5 0 0 0 0) [[ 0 ]] (DELEGATECALL 0x7ffffffffffffff 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (+ (MLOAD 0) 1)) (STATICCALL (- (GAS) 224000) 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "9214364837600034817" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_1Filler.json ================================================ { "static_CallRipemd160_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (STATICCALL 600 3 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_2Filler.json ================================================ { "static_CallRipemd160_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xdbc100f916bfbc53535573d98cf0cbb3a5b36124", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 5 0xf34578907f) [[ 2 ]] (STATICCALL 6000 3 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_3Filler.json ================================================ { "static_CallRipemd160_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (STATICCALL 6000 3 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_3_postfixed0Filler.json ================================================ { "static_CallRipemd160_3_postfixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7730b4642169b0f16752696da8da830a4b429c9d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f00) [[ 2 ]] (STATICCALL 6000 3 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_3_prefixed0Filler.json ================================================ { "static_CallRipemd160_3_prefixed0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00f34578907f) [[ 2 ]] (STATICCALL 6000 3 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_4Filler.json ================================================ { "static_CallRipemd160_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x1cf4e77f5966e13e109703cd8a0df7ceda7f3dc3", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 720 3 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_4_gas719Filler.json ================================================ { "static_CallRipemd160_4_gas719" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 719 3 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallRipemd160_5Filler.json ================================================ { "static_CallRipemd160_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 6000 3 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_1Filler.json ================================================ { "static_CallSha256_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 2 ]] (STATICCALL 500 2 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_1_nonzeroValueFiller.json ================================================ { "static_CallSha256_1_nonzeroValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000002" : { "balance" : "19" }, "" : { "storage" : { "0x00" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "200000000", "code" : "{ [[ 2 ]] (STATICCALL 200000 2 0 0 0 32) [[ 0 ]] (MLOAD 0) (CALL (GAS) 2 19 0 0 0 0) (CALLCODE (GAS) 2 19 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_2Filler.json ================================================ { "static_CallSha256_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 5 0xf34578907f) [[ 2 ]] (STATICCALL 500 2 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_3Filler.json ================================================ { "static_CallSha256_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f) [[ 2 ]] (STATICCALL 500 2 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_3_postfix0Filler.json ================================================ { "static_CallSha256_3_postfix0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x3b745a1c00d035c334f358d007a430e4cf0ae63aa0556fb05529706de546464d", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xf34578907f00) [[ 2 ]] (STATICCALL 500 2 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_3_prefix0Filler.json ================================================ { "static_CallSha256_3_prefix0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0x00f34578907f) [[ 2 ]] (STATICCALL 500 2 0 37 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_4Filler.json ================================================ { "static_CallSha256_4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 100 2 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_4_gas99Filler.json ================================================ { "static_CallSha256_4_gas99" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 99 2 0 32 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "365224" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallSha256_5Filler.json ================================================ { "static_CallSha256_5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) [[ 2 ]] (STATICCALL 600 2 0 1000000 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallToNameRegistrator0Filler.json ================================================ { "static_CallToNameRegistrator0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (STATICCALL 100000 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CallToReturn1Filler.json ================================================ { "static_CallToReturn1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x2a" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 31 1) [[ 1 ]] @0 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x602a601f536001601ff3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CalltoReturn2Filler.json ================================================ { "static_CalltoReturn2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x3700ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (STATICCALL 5000 0 64 0 2 ) [[ 1 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CheckCallCostOOGFiller.json ================================================ { "static_CheckCallCostOOG" : { "_info" : { "comment" : "Check balance in blackbox, just fill the balance consumed" }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "100000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 100 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 1 1) (KECCAK256 0x00 0x2fffff) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "22000", "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CheckOpcodes2Filler.json ================================================ { "static_CheckOpcodes2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0, 2, 3, 4], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ [[1]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 (CALL 100000 0 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{(MSTORE 0 0) (MSTORE 0 (CALL 100000 1 0 0 0 0)) (MSTORE 1 1) (MSTORE 2 1) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 (CALLCODE 100000 0 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 (CALLCODE 100000 1 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 (DELEGATECALL 100000 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 1 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 1 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } } }, "transaction" : { "// data" : [ "10 - staticcall -> call -> check", "20 - staticcall -> call with value (oogs here because call has value) -> check", "30 - staticcall -> callcode -> check", "40 - staticcall -> callcode with value -> check", "50 - staticcall -> delegatecall -> check" ], "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "335000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "100" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CheckOpcodes3Filler.json ================================================ { "static_CheckOpcodes3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0, 2, 3, 4], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : [1], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ [[1]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (MSTORE 0 (CALL 100000 0 0 32 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{(MSTORE 0 ) (MSTORE 0 (CALL 100000 1 0 32 0 0)) (MSTORE 1 1) (MSTORE 2 1) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 32 ) (MSTORE 0 (CALLCODE 100000 0 32 64 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (MSTORE 0 (CALLCODE 100000 1 0 32 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (MSTORE 0 (DELEGATECALL 100000 0 32 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 0 (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 2)) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 1 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } } }, "transaction" : { "// data" : [ "10 - staticcall -> call -> check", "20 - staticcall -> call with value (oogs here because call has value) -> check", "30 - staticcall -> callcode -> check", "40 - staticcall -> callcode with value -> check", "50 - staticcall -> delegatecall -> check" ], "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "335000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "100" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CheckOpcodes4Filler.json ================================================ { "static_CheckOpcodes4" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "", "0x05" : "", "0x06" : "" } } } }, { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : 1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01", "0x02" : "0x01", "0x03" : "", "0x04" : "0x64", "0x05" : "", "0x06" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ [[1]] (STATICCALL 100000 0 0 0 0) [[2]] (STATICCALL 100000 0 0 0 0) [[3]] (CALLER) [[4]] (CALLVALUE) [[5]] (ORIGIN) [[6]] (ADDRESS) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } } }, "transaction" : { "// data" : [ "0 - staticcall -> do smth | staticcall -> check | check " ], "data" : [ "" ], "gasLimit" : [ "50000", "335000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "100" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CheckOpcodes5Filler.json ================================================ { "static_CheckOpcodes5" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x00" } } } }, { "indexes" : { "data" : [0,1], "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : [2], "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : [3], "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : [4], "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ [[1]] (CALL 250000 (CALLDATALOAD 0) 0 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 0 ) (CALL 100000 0 0 32 0 0) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (CALL 100000 10 0 32 0 0) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (CALLCODE 100000 0 0 32 0 0) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (CALLCODE 100000 1 0 32 0 0) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "{ (MSTORE 0 ) (DELEGATECALL 100000 0 32 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 50000 (CALLDATALOAD 0) 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } } }, "transaction" : { "// data" : [ "0 - call | callcode | delegatecall -> staticcall -> check " ], "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "50000", "335000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "100" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_CheckOpcodesFiller.json ================================================ { "static_CheckOpcodes" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x00" } } } }, { "indexes" : { "data" : 0, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ [[1]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "// code" : "check ORIGIN, CALLER, ADDRESS, CALLVALUE inside staticcall", "code" : "{ (STATICCALL 100000 0 0 0 0) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "storage": { } } }, "transaction" : { "// data" : [ "0 - staticcall -> check", "1 - staticcall -> staticcall -> check" ], "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "50000", "335000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "100" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ExecuteCallThatAskForeGasThenTrabsactionHasFiller.json ================================================ { "static_ExecuteCallThatAskForeGasThenTrabsactionHas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [1,2], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x00" } } } }, { "indexes" : { "data" : [0], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[1]] (STATICCALL 600000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000", "code" : "{ (SSTORE 1 1) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_InternalCallHittingGasLimit2Filler.json ================================================ { "static_InternalCallHittingGasLimit2" : { "env" : { "currentCoinbase" : "2adf5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "47766", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ [[ 1 ]] (STATICCALL 25000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "47766" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_InternalCallHittingGasLimitFiller.json ================================================ { "static_InternalCallHittingGasLimit" : { "env" : { "currentCoinbase" : "2adf5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "22000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000", "code" : "{ (STATICCALL 5000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "21100" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_InternalCallStoreClearsOOGFiller.json ================================================ { "static_InternalCallStoreClearsOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "20", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "0000000000000000000000000000000000000000" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 0)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//" : "gas = 19 going OOG, gas = 20 fine", "balance" : "10", "code" : "{ [[ 1 ]] (STATICCALL 40000 0 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_LoopCallsDepthThenRevert2Filler.json ================================================ { "static_LoopCallsDepthThenRevert2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun=Cancun=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[ 0 ]] (CALL ( - (GAS) 100000) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (STATICCALL (GAS) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (STATICCALL (GAS) 0 0 0 0) }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_LoopCallsThenRevertFiller.json ================================================ { "static_LoopCallsThenRevert" : { "_info" : { "comment": "Requires a separate pre-alloc group due to time required to fill when grouped with other tests.", "pytest_marks": ["pre_alloc_group"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (MSTORE 0 850) [[ 0 ]] (CALL (- (GAS) 10000) 0 0 32 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "//code" : "{ (JUMPDEST) (MSTORE 0 (- (CALLDATALOAD 0) 1)) (STATICCALL 50000 0 0 0 0) (JUMPI 0 (MLOAD 0))}", "code" : ":raw 0x5b60016000350360005260006000600060007361c350fa50600051600057", "nonce" : "0", "storage" : { "0x00" : "0x0352" } }, "" : { "balance" : "", "code" : "{ (MSTORE 0 (ADD 1 (MLOAD 0))) }", "nonce" : "", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000", "9000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_PostToReturn1Filler.json ================================================ { "static_PostToReturn1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01", "0x02" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[1]](STATICCALL 30000 0 64 0 0 ) [[2]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_RETURN_BoundsFiller.json ================================================ { "static_RETURN_Bounds" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "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", "0x10" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[1]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[2]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[3]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[4]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[5]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[6]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[7]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[8]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[9]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[10]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[11]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[12]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[13]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[14]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[15]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[16]] (STATICCALL 0x7ffffffffffffff 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xfffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffff 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffffffffffffffffffffffff 0xfffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_RETURN_BoundsOOGFiller.json ================================================ { "static_RETURN_BoundsOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "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", "0x10" : "0x01" } } } }, { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[1]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[2]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[3]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[4]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[5]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[6]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[7]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[8]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[9]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[10]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[11]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[12]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[13]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[14]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[15]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) [[16]] (STATICCALL 0x7ffffffffffffff 0 0 0 0) (IF (EQ (CALLDATALOAD 0) 0) (KECCAK256 0x00 0x2fffff) (GAS) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xfffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffff 0xfffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffff 0xffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffff 0xffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xfffffffffffffffffffffffffff 0xfffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (RETURN 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00", ":raw 0x0000000000000000000000000000000000000001" ], "gasLimit" : [ "15000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_RawCallGasAskFiller.json ================================================ { "static_RawCallGasAsk" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000001" : { "storage" : { "0x01" : "0x0e9f83" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000001" : { "storage" : { "0x01" : "0x0e9f83" } } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3000000000000000000000000000000000000001" : { "storage" : { "0x01" : "0x0e9c1b" } } } }, { "indexes" : { "data" : 3, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "4000000000000000000000000000000000000001" : { "storage" : { "0x01" : "0x0e9c1b" } } } } ], "pre" : { "094f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "code" : "{ (MSTORE 0 (GAS)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "1000000000000", "code" : "{ (CALL (GAS) (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 3000000 0x094f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) [[1]] (GAS) }", "storage": { } }, "2000000000000000000000000000000000000001" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 130000 0x094f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) [[1]] (GAS) }", "storage": { } }, "3000000000000000000000000000000000000001" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 3000000 0x094f5374fce5edbc8e2a8697c15331677e6ebf0b 0 8000 0 8000) [[1]] (GAS) }", "storage": { } }, "4000000000000000000000000000000000000001" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 130000 0x094f5374fce5edbc8e2a8697c15331677e6ebf0b 0 8000 0 8000) [[1]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000001", ":raw 0x0000000000000000000000002000000000000000000000000000000000000001", ":raw 0x0000000000000000000000003000000000000000000000000000000000000001", ":raw 0x0000000000000000000000004000000000000000000000000000000000000001" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_Return50000_2Filler.json ================================================ { "static_Return50000_2" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "89250000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "0x0fffffffffffff", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0xc350" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (MSTORE 0 (CALLDATALOAD 49999)) (RETURN (MLOAD 0) 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ [[ 0 ]] (CALL (GAS) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0xfffffffffffff", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) [[ 0 ]] (STATICCALL 1564 0 50000 0 0) ) [[ 1 ]] @i }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "15500000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ReturnTest2Filler.json ================================================ { "static_ReturnTest2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x15", "0x01" : "0x3f" } } } } ], "pre" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "{(MSTORE 0 0x15)(STATICCALL 7000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 32 32 32) [[0]](MLOAD 0) [[1]](MLOAD 32) (RETURN 0 64)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(MSTORE 0 (MUL 3 (CALLDATALOAD 0)))(RETURN 0 32)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "250000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "194f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ReturnTestFiller.json ================================================ { "static_ReturnTest" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x15" } } } } ], "pre" : { "194f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "{(STATICCALL 2000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 30 1 31 1) [[0]](MLOAD 0) (RETURN 30 2)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(MSTORE 0 0x15) (RETURN 31 1)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "194f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_RevertDepth2Filler.json ================================================ { "static_RevertDepth2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ [[0]] (ADD 1 (SLOAD 0)) [[1]] (STATICCALL 150000 0 0 0 0) [[2]] (STATICCALL 150000 0 0 0 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (STATICCALL 50000 0 0 0 0) (MSTORE 1 1) }", "nonce" : "", "storage" : { } }, "" : { "balance" : "", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (STATICCALL 50000 0 0 0 0) (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : "In transaction T to A, A call B call C, then A call D calls C, D fails after calling C.", "data" : [ "" ], "gasLimit" : [ "1706850" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_RevertOpcodeCallsFiller.json ================================================ { "static_RevertOpcodeCalls" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (STATICCALL 50000 0 0 0 0) [[1]] (RETURNDATASIZE)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ (REVERT 0 1) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "460000", "88000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ZeroValue_CALL_OOGRevertFiller.json ================================================ { "static_ZeroValue_CALL_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (STATICCALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) (KECCAK256 0x00 0x2fffff) [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1350000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_ZeroValue_SUICIDE_OOGRevertFiller.json ================================================ { "static_ZeroValue_SUICIDE_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : {} }, "" : { "storage" : {} } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (STATICCALL 100000 0 0 0 0) (KECCAK256 0x00 0x2fffff) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callBasicFiller.json ================================================ { "static_callBasic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0, 1], "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } }, { "indexes" : { "data" : [2], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : [3], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "23" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ [[ 0 ]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { [[ 1 ]] 1 } ", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "23", "code" : " { [[ 1 ]] 0 } ", "nonce" : "0", "storage" : { "0x01" : "0x00" } }, "" : { "balance" : "23", "code" : " { (CALL 40000 0 0 0 0 0) (MSTORE 1 1) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { (LOG0 1 10) (MSTORE 1 1) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { (CALLCODE 40000 1 0 0 0 0) (MSTORE 1 1) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { (MSTORE 1 1) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callChangeRevertFiller.json ================================================ { "static_callChangeRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "" : { "balance" : "0x02" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "0x00" } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x01" } }, "" : { "balance" : "0x02" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (CALL 350000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 100000 1 0 0 0 0) [[ 1 ]] (STATICCALL 100000 0 0 0 0) [[ 2 ]] (CALL 100000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 100000 1 0 0 0 0) [[ 1 ]] (STATICCALL 100000 0 0 0 0) [[ 2 ]] (CALL 100000 1 0 0 0 0) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 100000 1 0 0 0 0) [[ 1 ]] (STATICCALL 100000 0 0 0 0) [[ 2 ]] (CALL 100000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "", "code" : "{ (MSTORE 1 1) (SSTORE 1 (SLOAD 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callCreate2Filler.json ================================================ { "static_callCreate2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x13136008b64ff592819b2fa6d43f2835c452020e", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000001" : { "storage" : { "0x00" : "0x5dddfce53ee040d9eb21afbc0ae1bb4dbb0ba643", "0x01" : "0x00" } }, "5dddfce53ee040d9eb21afbc0ae1bb4dbb0ba643" : { "code" : "0x6001600155", "storage" : { } } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000001" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } } } } ], "pre" : { "a000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ (CALL 600000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CREATE 1 0 0) [[ 1 ]] (STATICCALL 300000 (SLOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3 ) [[ 0 ]] (CREATE 1 18 14) [[ 1 ]] (STATICCALL 300000 (SLOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000002" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x6460016001556000526005601bf3 ) [[ 0 ]] (CREATE 1 18 14) [[ 1 ]] (STATICCALL 300000 (SLOAD 0) 0 0 0 0) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000", ":raw 0x0000000000000000000000001000000000000000000000000000000000000001", ":raw 0x0000000000000000000000001000000000000000000000000000000000000002" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callCreate3Filler.json ================================================ { "static_callCreate3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x13136008b64ff592819b2fa6d43f2835c452020e", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "a000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ (CALL 600000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "//0 code" : "{ (STATICCALL 100000 (ADDRESS) 0 0 0 0) } ", "//1 code" : "{ (MSTORE 0 0x600060006000600030620186a0fa) (RETURN 18 14) }", "code" : "{ (MSTORE 0 0x6d600060006000600030620186a0fa600052600e6012f3) [[ 0 ]] (CREATE 1 9 23) [[ 1 ]] (STATICCALL 30000 (SLOAD 0) 0 0 0 0) [[ 2 ]] 1 }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x0000000000000000000000001000000000000000000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "a000000000000000000000000000000000000000", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callCreateFiller.json ================================================ { "static_callCreate" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,2,3], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : [1], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 300000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALL 150000 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (DELEGATECALL 150000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 150000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CREATE 0 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callOutput1Filler.json ================================================ { "static_callOutput1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (STATICCALL 50000 0 0 0 0) [[ 0 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callOutput2Filler.json ================================================ { "static_callOutput2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (STATICCALL 50000 0 32 0 0) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callOutput3FailFiller.json ================================================ { "static_callOutput3Fail" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (STATICCALL 50000 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callOutput3Filler.json ================================================ { "static_callOutput3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (STATICCALL 50000 0 0 0 32) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callOutput3partialFailFiller.json ================================================ { "static_callOutput3partialFail" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (STATICCALL 50000 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x016001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callOutput3partialFiller.json ================================================ { "static_callOutput3partial" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6) (STATICCALL 50000 0 0 0 10) [[ 0 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001600101600055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callToCallCodeOpCodeCheckFiller.json ================================================ { "static_callToCallCodeOpCodeCheck" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ [[ 0 ]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ (MSTORE 0 (CALLCODE 100000 0 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callToCallOpCodeCheckFiller.json ================================================ { "static_callToCallOpCodeCheck" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ [[ 0 ]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ (MSTORE 0 (CALL 100000 0 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callToDelCallOpCodeCheckFiller.json ================================================ { "static_callToDelCallOpCodeCheck" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "Static call succeed", "code" : "{ [[ 0 ]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ (MSTORE 0 (DELEGATECALL 100000 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callToStaticOpCodeCheckFiller.json ================================================ { "static_callToStaticOpCodeCheck" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ [[ 0 ]] (STATICCALL 100000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "// code" : "Static call success", "code" : "{ (MSTORE 0 (STATICCALL 100000 0 0 0 0)) (if (= 1 (MLOAD 0)) (MSTORE 1 1) (SSTORE 1 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (if (= (ORIGIN)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (CALLER)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= (ADDRESS)) (MSTORE 1 1) (SSTORE 1 2) ) (if (= 0 (CALLVALUE)) (MSTORE 1 1) (SSTORE 1 2) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callWithHighValueAndGasOOGFiller.json ================================================ { "static_callWithHighValueAndGasOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x3700ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (CALL 500000 (CALLDATALOAD 0) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (STATICCALL 0xffffffffffffffffffffffff 0 64 0 2 ) [[ 1 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (STATICCALL 0xffffffffffffffffffffffff 0 64 0 2 ) [[ 1 ]] (MLOAD 0)}", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{ (KECCAK256 0x00 0x2fffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callWithHighValueAndOOGatTxLevelFiller.json ================================================ { "static_callWithHighValueAndOOGatTxLevel" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "code" : "{ [[ 0 ]] (STATICCALL 3000001 0 0 0 0 ) [[ 1 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callWithHighValueFiller.json ================================================ { "static_callWithHighValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 50000 0 64 0 2 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callWithHighValueOOGinCallFiller.json ================================================ { "static_callWithHighValueOOGinCall" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "100000", "code" : "{ [[ 0 ]] (ADD (STATICCALL 10 0 0 0 0 ) 1) [[ 1 ]] (MLOAD 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_call_OOG_additionalGasCosts1Filler.json ================================================ { "static_call_OOG_additionalGasCosts1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 6000 0x1000000000000000000000000000000000000001 0 64 0 64 ) [[ 1 ]] (GAS) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "30000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_call_OOG_additionalGasCosts2_ParisFiller.json ================================================ { "static_call_OOG_additionalGasCosts2_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } }, "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 6000 0 64 0 64 ) [[ 1 ]] (GAS) }", "storage": {} }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "30000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_call_value_inheritFiller.json ================================================ { "static_call_value_inherit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (STATICCALL 50000 0 0 0 32) [[1]] (MLOAD 0) }", "nonce" : "0", "storage" : { "0x01": "0x01" } }, "" : { "balance" : "1", "code" : "{ (MSTORE 0 (CALLVALUE)) (RETURN 0 32) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "460000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_call_value_inherit_from_callFiller.json ================================================ { "static_call_value_inherit_from_call" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1", "code" : "{ [[0]] (STATICCALL 50000 0 0 0 32) [[1]] (MLOAD 0) }", "nonce" : "0", "storage" : { "0x01": "0x01" } }, "" : { "balance" : "0", "code" : "{ (CALL 100000 10 0 0 0 0) }", "nonce" : "0", "storage" : {} }, "" : { "balance" : "1", "code" : "{ (MSTORE 0 (CALLVALUE)) (RETURN 0 32) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "460000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcall_00Filler.json ================================================ { "static_callcall_00" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x02" : "0x00", "0x04" : "0x00", "0x07" : "0x00", "0xe6" : "0x00", "0xe8" : "0x00", "0xec" : "0x00", "0xee" : "0x00", "0xf0" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x02" : "0x00", "0x04" : "0x00", "0x07" : "0x00", "0xe6" : "0x00", "0xe8" : "0x00", "0xec" : "0x00", "0xee" : "0x00", "0xf0" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 230 (ADDRESS)) (SSTORE 232 (ORIGIN)) (SSTORE 236 (CALLDATASIZE)) (SSTORE 238 (CODESIZE)) (SSTORE 240 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 1) (MSTORE 32 (CALLER)) (MSTORE 64 (CALLVALUE)) (MSTORE 96 (ADDRESS)) (MSTORE 128 (ORIGIN)) (MSTORE 160 (CALLDATASIZE)) (MSTORE 192 (CODESIZE)) (MSTORE 224 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcall_00_OOGEFiller.json ================================================ { "static_callcall_00_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 2 1) (STATICCALL 120020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (MSTORE 2 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 2 1) (STATICCALL 20020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcall_00_OOGE_1Filler.json ================================================ { "static_callcall_00_OOGE_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x02" : "0x00", "0x05" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x02" : "0x00", "0x05" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 2 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 5 (CALLVALUE)) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 2 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "380066" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcall_00_OOGE_2Filler.json ================================================ { "static_callcall_00_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x02" : "0x00", "0x05" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 2 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 2 1) (SSTORE 5 (CALLVALUE)) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 2 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "150066" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcall_00_SuicideEndFiller.json ================================================ { "static_callcall_00_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 32 1) (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000Filler.json ================================================ { "static_callcallcall_000" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { "0x014a" : "0x00", "0x014c" : "0x00", "0x0150" : "0x00", "0x0152" : "0x00", "0x0154" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x07" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { } }, "" : { "storage" : { } }, "" : { "storage" : { "0x014a" : "0x00", "0x014c" : "0x00", "0x0150" : "0x00", "0x0152" : "0x00", "0x0154" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x07" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 650000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 400000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 250000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 300000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 250000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000_OOGEFiller.json ================================================ { "static_callcallcall_000_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 300000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 120020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 600000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 300000 0 64 0 64 )(MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 120020 0 64 0 64 )(MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000_OOGMAfter2Filler.json ================================================ { "static_callcallcall_000_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x6f" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 700000 0 64 0 64 ) [[ 111 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 450000 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 120020 0 64 0 64 ) (MSTORE 32 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000_OOGMAfterFiller.json ================================================ { "static_callcallcall_000_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x6f" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 600150 0 64 0 64 ) [[ 111 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 400080 0 64 0 64 ) (SSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 120020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000_OOGMBeforeFiller.json ================================================ { "static_callcallcall_000_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 600000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) (STATICCALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000_SuicideEndFiller.json ================================================ { "static_callcallcall_000_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_000_SuicideMiddleFiller.json ================================================ { "static_callcallcall_000_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcall_ABCB_RECURSIVEFiller.json ================================================ { "static_callcallcall_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 25000000 0 64 0 64 ) (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 1000000 0 64 0 64 ) (MSTORE 4 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 5 1) (STATICCALL 500000 0 64 0 64 ) (MSTORE 6 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001Filler.json ================================================ { "static_callcallcallcode_001" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x03" : "0x00", "0x04" : "0x00" } }, "" : { "storage" : { "0x014a" : "0x00", "0x014c" : "0x00", "0x0150" : "0x00", "0x0152" : "0x00", "0x0154" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x07" : "0x00" } }, "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 300000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (DELEGATECALL 250000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (SSTORE 4 (CALLER)) (SSTORE 7 (CALLVALUE)) (SSTORE 330 (ADDRESS)) (SSTORE 332 (ORIGIN)) (SSTORE 336 (CALLDATASIZE)) (SSTORE 338 (CODESIZE)) (SSTORE 340 (GASPRICE)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 300000 0 64 0 64 )(MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (DELEGATECALL 250000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_2Filler.json ================================================ { "static_callcallcallcode_001_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x014a" : "0x00", "0x014c" : "0x00", "0x0150" : "0x00", "0x0152" : "0x00", "0x0154" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x07" : "0x00" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x014a" : "0x00", "0x014c" : "0x00", "0x0150" : "0x00", "0x0152" : "0x00", "0x0154" : "0x00", "0x02" : "0x00", "0x03" : "0x00", "0x04" : "0x00", "0x07" : "0x00" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 300000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 2 ]] (CALLCODE 250000 3 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 0x11223344) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 300000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 4 1) (CALLCODE 250000 0 0 64 0 64 ) (MSTORE 6 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGEFiller.json ================================================ { "static_callcallcallcode_001_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 600000 0 64 0 64 ) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 300000 0 64 0 64 ) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 120020 0 64 0 64 ) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGE_2Filler.json ================================================ { "static_callcallcallcode_001_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{ [[ 0 ]] (CALL (GAS) (CALLDATALOAD 0) (CALLVALUE) 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 120020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 120020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGMAfter2Filler.json ================================================ { "static_callcallcallcode_001_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 600150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (SSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 120020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGMAfterFiller.json ================================================ { "static_callcallcallcode_001_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 600150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 400085 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 400085 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 120020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGMAfter_2Filler.json ================================================ { "static_callcallcallcode_001_OOGMAfter_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 60150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400085 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400085 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGMAfter_3Filler.json ================================================ { "static_callcallcallcode_001_OOGMAfter_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 600150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (SSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 120020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGMBefore2Filler.json ================================================ { "static_callcallcallcode_001_OOGMBefore2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 600000 0 32 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (STATICCALL 400080 (CALLDATALOAD 0) 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 1 1) (CALLCODE 120020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (CALLCODE 120020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_OOGMBeforeFiller.json ================================================ { "static_callcallcallcode_001_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 600000 0 32 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 400080 (CALLDATALOAD 0) 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) (DELEGATECALL 120020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 1 1) (DELEGATECALL 120020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_SuicideEnd2Filler.json ================================================ { "static_callcallcallcode_001_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000" }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_SuicideEndFiller.json ================================================ { "static_callcallcallcode_001_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x03" : "0x00" } }, "" : { "balance" : "10000000000" }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_SuicideMiddle2Filler.json ================================================ { "static_callcallcallcode_001_SuicideMiddle2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_001_SuicideMiddleFiller.json ================================================ { "static_callcallcallcode_001_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE2Filler.json ================================================ { "static_callcallcallcode_ABCB_RECURSIVE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 25000000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 1000000 0 64 0 64 ) (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 1 1) (CALLCODE 500000 0 0 64 0 64 ) (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "static_callcallcallcode_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 25000000 0 64 0 64 ) (MSTORE 31 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 1000000 0 64 0 64 ) (MSTORE 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 1 1) (DELEGATECALL 500000 0 64 0 64 ) (MSTORE 21 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcode_01_2Filler.json ================================================ { "static_callcallcode_01_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 350000 0 32 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 250000 2 0 32 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 0x11223344) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 350000 0 32 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (CALLCODE 250000 0 0 32 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 0x11223344) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcode_01_OOGE_2Filler.json ================================================ { "static_callcallcode_01_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 150000 0 32 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 20020 (CALLDATALOAD 0) 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (MSTORE 2 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcode_01_SuicideEnd2Filler.json ================================================ { "static_callcallcode_01_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcode_01_SuicideEndFiller.json ================================================ { "static_callcallcode_01_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "balance" : "10000000000" }, "" : { "storage" : { "0x02" : "0x00", "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010Filler.json ================================================ { "static_callcallcodecall_010" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (DELEGATECALL 300000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 250000 0 64 0 64 ) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_2Filler.json ================================================ { "static_callcallcodecall_010_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 300000 2 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 300000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGEFiller.json ================================================ { "static_callcallcodecall_010_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 500000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 300000 (CALLDATALOAD 0) 0 64 0 64 ) (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120020 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120020 0 64 0 64 ) (SSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGE_2Filler.json ================================================ { "static_callcallcodecall_010_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 350000 0 32 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (CALLCODE 200000 0 0 32 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120020 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGMAfter2Filler.json ================================================ { "static_callcallcodecall_010_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 60150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 400080 0 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 400080 0 0 64 0 64 ) (SSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGMAfterFiller.json ================================================ { "static_callcallcodecall_010_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 600150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 400080 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120040 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGMAfter_2Filler.json ================================================ { "static_callcallcodecall_010_OOGMAfter_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 600150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 400080 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120040 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGMAfter_3Filler.json ================================================ { "static_callcallcodecall_010_OOGMAfter_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 600150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (CALLCODE 400080 0 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 400080 0 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGMBefore2Filler.json ================================================ { "static_callcallcodecall_010_OOGMBefore2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 800000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 400080 (CALLDATALOAD 0) 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (STATICCALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_OOGMBeforeFiller.json ================================================ { "static_callcallcodecall_010_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00", "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 500000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 400080 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (STATICCALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_SuicideEnd2Filler.json ================================================ { "static_callcallcodecall_010_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_SuicideEndFiller.json ================================================ { "static_callcallcodecall_010_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0x00" } }, "" : { "balance" : "10000000000" }, "" : { "storage" : { "0x03" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_SuicideMiddle2Filler.json ================================================ { "static_callcallcodecall_010_SuicideMiddle2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "balance" : "10000000000", "storage" : { "0x03" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_010_SuicideMiddleFiller.json ================================================ { "static_callcallcodecall_010_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE2Filler.json ================================================ { "static_callcallcodecall_ABCB_RECURSIVE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "static_callcallcodecall_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011Filler.json ================================================ { "static_callcallcodecallcode_011" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0x00", "0x04" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (DELEGATECALL 300000 0 64 0 64 ) (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 11 1) (DELEGATECALL 250000 0 64 0 64 ) (MSTORE 11 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_2Filler.json ================================================ { "static_callcallcodecallcode_011_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 300000 (CALLDATALOAD 0) 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 250000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 250000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGEFiller.json ================================================ { "static_callcallcodecallcode_011_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 20020 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGE_2Filler.json ================================================ { "static_callcallcodecallcode_011_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (CALLCODE 100000 (CALLDATALOAD 0) 0 0 64 0 64 ) (MSTORE 3 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 11) (CALLCODE 20020 0 0 64 0 64 ) (MSTORE 13 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 11) (CALLCODE 20020 1 0 64 0 64 ) (MSTORE 13 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter2Filler.json ================================================ { "static_callcallcodecallcode_011_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 60150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 40080 0 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 40080 0 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 20020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGMAfterFiller.json ================================================ { "static_callcallcodecallcode_011_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 60140 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) (DELEGATECALL 40080 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) (DELEGATECALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_1Filler.json ================================================ { "static_callcallcodecallcode_011_OOGMAfter_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 60140 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 40080 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_2Filler.json ================================================ { "static_callcallcodecallcode_011_OOGMAfter_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (STATICCALL 60150 (CALLDATALOAD 0) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (CALLCODE 40080 0 0 64 0 64 ) (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (CALLCODE 40080 0 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (CALLCODE 20020 0 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore2Filler.json ================================================ { "static_callcallcodecallcode_011_OOGMBefore2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,1], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : [2], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 32 1) (CALLCODE 40080 (CALLDATALOAD 0) 0 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (CALLCODE 20020 0 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (CALLCODE 20020 0 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "{ (CALLCODE 20020 1 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_OOGMBeforeFiller.json ================================================ { "static_callcallcodecallcode_011_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 40080 (CALLDATALOAD 0) 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd2Filler.json ================================================ { "static_callcallcodecallcode_011_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (CALLCODE 100000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_SuicideEndFiller.json ================================================ { "static_callcallcodecallcode_011_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle2Filler.json ================================================ { "static_callcallcodecallcode_011_SuicideMiddle2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } }, "" : { "balance" : "10000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (CALLCODE 100000 0 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (CALLCODE 50000 0 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddleFiller.json ================================================ { "static_callcallcodecallcode_011_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "balance" : "10000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (DELEGATECALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE2Filler.json ================================================ { "static_callcallcodecallcode_ABCB_RECURSIVE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVEFiller.json ================================================ { "static_callcallcodecallcode_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcode_checkPCFiller.json ================================================ { "static_callcode_checkPC" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x03" : "0x23" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (STATICCALL 1000000 0 64 0 64 ) [[3]] (PC)}", "storage": {} }, "" : { "balance" : "10000000000", "code" : "{}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecall_10Filler.json ================================================ { "static_callcodecall_10" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 250000 0 64 0 64 ) (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecall_10_2Filler.json ================================================ { "static_callcodecall_10_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 1 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecall_10_OOGEFiller.json ================================================ { "static_callcodecall_10_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecall_10_OOGE_2Filler.json ================================================ { "static_callcodecall_10_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } }, "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 2 1) (STATICCALL 20020 (CALLDATALOAD 0) 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecall_10_SuicideEnd2Filler.json ================================================ { "static_callcodecall_10_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000" } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : 1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000001" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecall_10_SuicideEndFiller.json ================================================ { "static_callcodecall_10_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "nonce" : "0", "balance" : "1000000000000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 50000 (CALLDATALOAD 0) 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SSTORE 2 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100Filler.json ================================================ { "static_callcodecallcall_100" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 300000 0 64 0 64 ) (MSTORE 5 (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_2Filler.json ================================================ { "static_callcodecallcall_100_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 300000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGE2Filler.json ================================================ { "static_callcodecallcall_100_OOGE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (STATICCALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGEFiller.json ================================================ { "static_callcodecallcall_100_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 32 (CALLDATALOAD 0)) (STATICCALL 100000 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 (CALLDATALOAD 32) 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGMAfter2Filler.json ================================================ { "static_callcodecallcall_100_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 600150 (CALLDATALOAD 0) (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGMAfterFiller.json ================================================ { "static_callcodecallcall_100_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 60150 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 20020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGMAfter_2Filler.json ================================================ { "static_callcodecallcall_100_OOGMAfter_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (DELEGATECALL 601500 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 120020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGMAfter_3Filler.json ================================================ { "static_callcodecallcall_100_OOGMAfter_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : [0] }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : [1] }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (CALLCODE 60150 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 20020 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGMBefore2Filler.json ================================================ { "static_callcodecallcall_100_OOGMBefore2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_OOGMBeforeFiller.json ================================================ { "static_callcodecallcall_100_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 40080 (CALLDATALOAD 0) 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 3 1) (STATICCALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_SuicideEnd2Filler.json ================================================ { "static_callcodecallcall_100_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_SuicideEndFiller.json ================================================ { "static_callcodecallcall_100_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_SuicideMiddle2Filler.json ================================================ { "static_callcodecallcall_100_SuicideMiddle2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_100_SuicideMiddleFiller.json ================================================ { "static_callcodecallcall_100_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE2Filler.json ================================================ { "static_callcodecallcall_ABCB_RECURSIVE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVEFiller.json ================================================ { "static_callcodecallcall_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101Filler.json ================================================ { "static_callcodecallcallcode_101" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 300000 0 64 0 64 ) (MSTORE 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (DELEGATECALL 250000 0 64 0 64 ) (MSTORE 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_2Filler.json ================================================ { "static_callcodecallcallcode_101_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (CALLCODE 350000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 300000 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 250000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 250000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGEFiller.json ================================================ { "static_callcodecallcallcode_101_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 200000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 120020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGE_2Filler.json ================================================ { "static_callcodecallcallcode_101_OOGE_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 0 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 20020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter2Filler.json ================================================ { "static_callcodecallcallcode_101_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 60150 0x1000000000000000000000000000000000000001 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 0x1000000000000000000000000000000000000002 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000002" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (CALLCODE 20020 0x1000000000000000000000000000000000000003 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000003" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGMAfterFiller.json ================================================ { "static_callcodecallcallcode_101_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 60150 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_1Filler.json ================================================ { "static_callcodecallcallcode_101_OOGMAfter_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (CALLCODE 700150 0 0 64 0 64 ) (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 120020 0 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ (CALLCODE 700150 0 0 64 0 64 ) (MSTORE 3 1)}", "storage": {} }, "" : { "balance" : "0", "code" : "{ (STATICCALL 400080 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 120020 0 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "1720000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_3Filler.json ================================================ { "static_callcodecallcallcode_101_OOGMAfter_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE (GAS) (CALLDATALOAD 0) 0 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (DELEGATECALL 60150 0 64 0 64 ) [[ 1 ]] (GAS) }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (STATICCALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (DELEGATECALL 60150 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (STATICCALL 40080 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 20020 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore2Filler.json ================================================ { "static_callcodecallcallcode_101_OOGMBefore2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (CALLCODE 20020 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_OOGMBeforeFiller.json ================================================ { "static_callcodecallcallcode_101_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) (STATICCALL 40080 0 64 0 64 ) (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (DELEGATECALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd2Filler.json ================================================ { "static_callcodecallcallcode_101_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_SuicideEndFiller.json ================================================ { "static_callcodecallcallcode_101_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle2Filler.json ================================================ { "static_callcodecallcallcode_101_SuicideMiddle2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (CALLCODE 50000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddleFiller.json ================================================ { "static_callcodecallcallcode_101_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "1000000000000000000000000000000000000000" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "1000000000000000000000000000000000000000" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0x1000000000000000000000000000000000000001 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) (STATICCALL 100000 0x1000000000000000000000000000000000000002 0 64 0 64 ) (MSTORE 32 1) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000002" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT 0x1000000000000000000000000000000000000000) (DELEGATECALL 50000 0x1000000000000000000000000000000000000003 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000003" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "1000000000000000000000000000000000000000", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE2Filler.json ================================================ { "static_callcodecallcallcode_ABCB_RECURSIVE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 (CALLDATALOAD 0) (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 500000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 500000 1 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVEFiller.json ================================================ { "static_callcodecallcallcode_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_1102Filler.json ================================================ { "static_callcodecallcodecall_1102" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (CALLCODE 300000 (- (CALLVALUE) 1) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (STATICCALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1", "2" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110Filler.json ================================================ { "static_callcodecallcodecall_110" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (DELEGATECALL 300000 0 64 0 64 ) (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 250000 0 64 0 64 ) (MSTORE 1 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_2Filler.json ================================================ { "static_callcodecallcodecall_110_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 350000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (CALLCODE 300000 ( - (CALLVALUE) 1) 0 64 0 64 ) (MSTORE 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 1 1) (STATICCALL 250000 0 64 0 64 ) (MSTORE 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1", "2" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGE2Filler.json ================================================ { "static_callcodecallcodecall_110_OOGE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 100000 (- (CALLVALUE) 1) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1", "2" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGEFiller.json ================================================ { "static_callcodecallcodecall_110_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter2Filler.json ================================================ { "static_callcodecallcodecall_110_OOGMAfter2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 60150 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 40080 ( - (CALLVALUE) 1) 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1", "2" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGMAfterFiller.json ================================================ { "static_callcodecallcodecall_110_OOGMAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 60150 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_2Filler.json ================================================ { "static_callcodecallcodecall_110_OOGMAfter_2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (DELEGATECALL 60150 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 40080 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_3Filler.json ================================================ { "static_callcodecallcodecall_110_OOGMAfter_3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "{ [[ 0 ]] (CALLCODE 60150 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "storage": {} }, "" : { "balance" : "0", "code" : "{ (CALLCODE 40080 (- (CALLVALUE) 1) 0 64 0 64 ) (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (MSTORE 3 1) }", "storage": {} }, "" : { "balance" : "1000000000000000000", "nonce" : "0", "code" : "", "storage": {} } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore2Filler.json ================================================ { "static_callcodecallcodecall_110_OOGMBefore2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALLCODE 40080 (- (CALLVALUE) 1) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1", "2" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_OOGMBeforeFiller.json ================================================ { "static_callcodecallcodecall_110_OOGMBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 40080 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) (STATICCALL 20020 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd2Filler.json ================================================ { "static_callcodecallcodecall_110_SuicideEnd2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x2cebff" } } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : 1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x2cb7a7" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 100000 (CALLVALUE) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_SuicideEndFiller.json ================================================ { "static_callcodecallcodecall_110_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x2cec03" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 50000 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle2Filler.json ================================================ { "static_callcodecallcodecall_110_SuicideMiddle2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 150000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] (GAS) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 100000 (CALLVALUE) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddleFiller.json ================================================ { "static_callcodecallcodecall_110_SuicideMiddle" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 100000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (SELFDESTRUCT ) (STATICCALL 50000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE2Filler.json ================================================ { "static_callcodecallcodecall_ABCB_RECURSIVE2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 25000000 (CALLVALUE) 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 1000000 0 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0", "1" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVEFiller.json ================================================ { "static_callcodecallcodecall_ABCB_RECURSIVE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "3000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 25000000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (DELEGATECALL 1000000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 500000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_callcodecallcodecallcode_111_SuicideEndFiller.json ================================================ { "static_callcodecallcodecallcode_111_SuicideEnd" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (STATICCALL 100000 0 64 0 64) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (CALLCODE 50000 0 0 64 0 64 ) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10000000000", "code" : "{ (MSTORE 3 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_calldelcode_01Filler.json ================================================ { "static_calldelcode_01" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 350000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 250000 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (MSTORE 1 0x11223344) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_calldelcode_01_OOGEFiller.json ================================================ { "static_calldelcode_01_OOGE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ 0 ]] (STATICCALL 150000 0 64 0 64 ) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (DELEGATECALL 20020 (CALLDATALOAD 0) 0 64 0 64 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (SSTORE 2 1) (MSTORE 2 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "172000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_contractCreationMakeCallThatAskMoreGasThenTransactionProvidedFiller.json ================================================ { "static_contractCreationMakeCallThatAskMoreGasThenTransactionProvided" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce" : "1" } } }, { "indexes" : { "data" : 2, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce" : "1" } } }, { "indexes" : { "data" : 3, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1100000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(STATICCALL 50000 0x1000000000000000000000000000000000000001 0 64 0 64)}", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "100000", "code" : "{(SSTORE 1 1)}", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000001" : { "balance" : "100000", "code" : "{(MSTORE 1 1)}", "nonce" : "0", "storage" : { } }, "3000000000000000000000000000000000000001" : { "balance" : "100000", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } }, "4000000000000000000000000000000000000001" : { "balance" : "100000", "code" : "{ (CALLCODE 1000 0x4000000000000000000000000000000000000004 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "5000000000000000000000000000000000000001" : { "balance" : "100000", "code" : "{ (CALLCODE 1000000 0x4000000000000000000000000000000000000004 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "4000000000000000000000000000000000000004" : { "balance" : "100000", "code" : "{ (MSTORE 1 1) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x604060006040600073100000000000000000000000000000000000000161c350fa", ":raw 0x604060006040600073200000000000000000000000000000000000000161c350fa", ":raw 0x604060006040600073300000000000000000000000000000000000000161c350fa", ":raw 0x604060006040600073400000000000000000000000000000000000000161c350fa" ], "gasLimit" : [ "96000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_contractCreationOOGdontLeaveEmptyContractViaTransactionFiller.json ================================================ { "static_contractCreationOOGdontLeaveEmptyContractViaTransaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1}, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1100000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000", "code" : "{(STATICCALL 50000 0x1000000000000000000000000000000000000001 0 64 0 64)}", "nonce" : "0", "storage" : { } }, "1000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{(MSTORE 1 1)}", "nonce" : "0", "storage" : { } }, "2000000000000000000000000000000000000001" : { "balance" : "0", "code" : "{ (def 'i 0x80) (for {} (< @i 50000) [i](+ @i 1) (EXTCODESIZE 1)) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x604060006040600073200000000000000000000000000000000000000161c350fa" ], "gasLimit" : [ "96000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_emptyMemFiller.json ================================================ { "static_log0_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) [[ 1 ]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_logMemStartTooHighFiller.json ================================================ { "static_log0_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_logMemsizeTooHighFiller.json ================================================ { "static_log0_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_logMemsizeZeroFiller.json ================================================ { "static_log0_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 1 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_nonEmptyMemFiller.json ================================================ { "static_log0_nonEmptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG0 0 32) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_nonEmptyMem_logMemSize1Filler.json ================================================ { "static_log0_nonEmptyMem_logMemSize1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 0 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "2100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log0_nonEmptyMem_logMemSize1_logMemStart31Filler.json ================================================ { "static_log0_nonEmptyMem_logMemSize1_logMemStart31" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG0 31 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log1_MaxTopicFiller.json ================================================ { "static_log1_MaxTopic" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 0 32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log1_emptyMemFiller.json ================================================ { "static_log1_emptyMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (LOG1 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log1_logMemStartTooHighFiller.json ================================================ { "static_log1_logMemStartTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log1_logMemsizeTooHighFiller.json ================================================ { "static_log1_logMemsizeTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 1 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log1_logMemsizeZeroFiller.json ================================================ { "static_log1_logMemsizeZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 1000 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd) (LOG1 1 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_log_CallerFiller.json ================================================ { "static_log_Caller" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 50000 (CALLDATALOAD 0) 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG0 0 32 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG1 0 32 (CALLER) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG2 0 32 0 (CALLER) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG3 0 32 0 0 (CALLER) ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE8 0 0xff) (LOG4 0 32 0 0 0 (CALLER) )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000", ":raw 0x000000000000000000000000" ], "gasLimit" : [ "210000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_makeMoneyFiller.json ================================================ { "static_makeMoney" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010" }, "" : { "balance" : "97747000" }, "" : { "balance" : "1000000000000000000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f20060003554156009570060203560003555) (STATICCALL 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : ":raw 0x600160015532600255", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "228500" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_refund_CallAFiller.json ================================================ { "static_refund_CallA" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL 5500 0 0 0 0 ) [[ 1 ]] 1}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "200000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 1 ]] 0 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_refund_CallToSuicideNoStorageFiller.json ================================================ { "static_refund_CallToSuicideNoStorage" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL (CALLDATALOAD 0) 0 0 0 0 ) [[ 2 ]] 1 }", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "10000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001f4", ":raw 0x0000000000000000000000000000000000000000000000000000000000010000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticCall/static_refund_CallToSuicideTwiceFiller.json ================================================ { "static_refund_CallToSuicideTwice" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "2000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x01" : "0x01" }, "code" : "0x73ff00" } } }, { "indexes" : { "data" : 0 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1000000000000000010", "storage" : { "0x00" : "0x00", "0x01" : "0x01" } }, "" : { "nonce" : "0" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (STATICCALL (CALLDATALOAD 0) 0 0 0 0 ) (CALL (CALLDATALOAD 0) 0 0 0 0 0 )}", "nonce" : "0", "storage" : { "0x01" : "0x01" } }, "" : { "balance" : "100000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { "0x01" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001f4", ":raw 0x0000000000000000000000000000000000000000000000000000000000010000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallWithNOTZeroValueToPrecompileFromCalledContractFiller.yml ================================================ --- CallWithNOTZeroValueToPrecompileFromCalledContract: _info: comment: | Contract B calls contract A. Contract A staticcalls contract CALL-00X. Contract CALL-00X calls precompiled contracts with non zero value. It should interrupt for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 - !!int 1 - !!int 2 - !!int 3 - !!int 4 - !!int 5 - !!int 6 - !!int 7 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: '1000' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' : balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0x01' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' pre: : balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x02': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [ 0 ] (CALLDATALOAD 0) [[ 0x01 ]] (CALL (GAS) 0 0 32 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } : balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x02': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) (CALLDATALOAD 0) 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } : balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 (CALL (GAS) 1 2 0 128 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 2 2 0 32 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 3 2 0 32 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 4 2 0 32 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 (CALL (GAS) 5 2 0 0xa1 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 (CALL (GAS) 6 2 0 128 0x2000 64) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 (CALL (GAS) 7 2 0 96 0x2000 64) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa (CALL (GAS) 8 2 0 0x0180 0x2000 32) } : balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '' to: '' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallWithNOTZeroValueToPrecompileFromContractInitializationFiller.yml ================================================ --- CallWithNOTZeroValueToPrecompileFromContractInitialization: _info: comment: | Contract A creates new contract. New contract initialization code staticcalls contract CALL-00X. Contract CALL-00X calls precompiled contracts with non zero value. It should interrupt for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 - !!int 1 - !!int 2 - !!int 3 - !!int 4 - !!int 5 - !!int 6 - !!int 7 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xf7b0c3906cdfc0b8a638d274d3bcbbd6318e9ac1' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' f7b0c3906cdfc0b8a638d274d3bcbbd6318e9ac1: storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' pre: a000000000000000000000000000000000000000: balance: '1000' nonce: '1' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x02': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALLDATACOPY 0 0 (CALLDATASIZE)) [[ 0x01 ]] (CREATE 0 0 (CALLDATASIZE)) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } ca11001000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 (CALL (GAS) 1 2 0 128 0x2000 32) } ca11002000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 2 2 0 32 0x2000 32) } ca11003000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 3 2 0 32 0x2000 32) } ca11004000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 4 2 0 32 0x2000 32) } ca11005000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 (CALL (GAS) 5 2 0 0xa1 0x2000 32) } ca11006000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 (CALL (GAS) 6 2 0 128 0x2000 64) } ca11007000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 (CALL (GAS) 7 2 0 96 0x2000 64) } ca11008000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa (CALL (GAS) 8 2 0 0x0180 0x2000 32) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11001000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11002000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11003000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11004000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11005000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11006000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11007000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) 0xca11008000000000000000000000000000000000 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'a000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallWithNOTZeroValueToPrecompileFromTransactionFiller.yml ================================================ --- CallWithNOTZeroValueToPrecompileFromTransaction: _info: comment: | Contract A staticcalls contract CALL-00X. Contract CALL-00X calls precompiled contracts with non zero value. It should interrupt for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 - !!int 1 - !!int 2 - !!int 3 - !!int 4 - !!int 5 - !!int 6 - !!int 7 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' pre: : balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x02': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed [[ 0x01 ]] (STATICCALL (GAS) (CALLDATALOAD 0) 0 0 0 0) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } : balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 (CALL (GAS) 1 2 0 128 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 2 2 0 32 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 3 2 0 32 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 (CALL (GAS) 4 2 0 32 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 (CALL (GAS) 5 2 0 0xa1 0x2000 32) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 (CALL (GAS) 6 2 0 128 0x2000 64) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 (CALL (GAS) 7 2 0 96 0x2000 64) } : balance: '1000' nonce: '0' storage: {} code: | { ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa (CALL (GAS) 8 2 0 0x0180 0x2000 32) } : balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' - ':raw 0x000000000000000000000000' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '' to: '' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallWithZeroValueToPrecompileFromCalledContractFiller.yml ================================================ --- CallWithZeroValueToPrecompileFromCalledContract: _info: comment: | Contract C calls contract B. Contract B staticcalls contract A. Contract A calls precompiled contracts with 0 value. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1000' storage: {} c000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' b000000000000000000000000000000000000000: balance: '1000' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' pre: c000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALL (GAS) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0a01 ]] @0x0a0100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0a02 ]] @0x0a0200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0a03 ]] @0x0a0300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0a04 ]] @0x0a0400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0a05 ]] @0x0a0500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0a06 ]] @0x0a0600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0a07 ]] @0x0a0700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0a08 ]] @0x0a0800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0a09 ]] @0x0a0900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0a10 ]] @0x0a1000 } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (CALL (GAS) 1 0 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (CALL (GAS) 2 0 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (CALL (GAS) 3 0 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (CALL (GAS) 4 0 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (CALL (GAS) 5 0 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (CALL (GAS) 6 0 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (CALL (GAS) 7 0 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (CALL (GAS) 8 0 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'c000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallWithZeroValueToPrecompileFromContractInitializationFiller.yml ================================================ --- CallWithZeroValueToPrecompileFromContractInitialization: _info: comment: | Contract B creates new contract. New contract initialization code staticcalls contract A. Contract A calls precompiled contracts with 0 value. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: b000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfd7776b1a634b0dc19301b174ccf30d4d24070a8' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' fd7776b1a634b0dc19301b174ccf30d4d24070a8: storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' pre: b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALLDATACOPY 0 0 (CALLDATASIZE)) [[ 0x01 ]] (CREATE2 0 0 (CALLDATASIZE) 0x5a175a175a17) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (CALL (GAS) 1 0 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (CALL (GAS) 2 0 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (CALL (GAS) 3 0 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (CALL (GAS) 4 0 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (CALL (GAS) 5 0 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (CALL (GAS) 6 0 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (CALL (GAS) 7 0 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (CALL (GAS) 8 0 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0a01 ]] @0x0a0100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0a02 ]] @0x0a0200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0a03 ]] @0x0a0300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0a04 ]] @0x0a0400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0a05 ]] @0x0a0500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0a06 ]] @0x0a0600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0a07 ]] @0x0a0700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0a08 ]] @0x0a0800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0a09 ]] @0x0a0900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0a10 ]] @0x0a1000 } gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallWithZeroValueToPrecompileFromTransactionFiller.yml ================================================ --- CallWithZeroValueToPrecompileFromTransaction: _info: comment: | Contract B staticcalls contract A. Contract A calls precompiled contracts with 0 value. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1000' storage: {} b000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' pre: b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0a01 ]] @0x0a0100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0a02 ]] @0x0a0200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0a03 ]] @0x0a0300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0a04 ]] @0x0a0400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0a05 ]] @0x0a0500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0a06 ]] @0x0a0600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0a07 ]] @0x0a0700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0a08 ]] @0x0a0800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0a09 ]] @0x0a0900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0a10 ]] @0x0a1000 } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (CALL (GAS) 1 0 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (CALL (GAS) 2 0 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (CALL (GAS) 3 0 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (CALL (GAS) 4 0 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (CALL (GAS) 5 0 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (CALL (GAS) 6 0 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (CALL (GAS) 7 0 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (CALL (GAS) 8 0 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallcodeToPrecompileFromCalledContractFiller.yml ================================================ --- CallcodeToPrecompileFromCalledContract: _info: comment: | Contract C calls contract B. Contract B staticcalls contract A. Contract A callcodes precompiled contracts. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1000' storage: {} c000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' b000000000000000000000000000000000000000: balance: '1000' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' # precompiled contract #1 - Recovery of ECDSA signature '0x0b00': '0x01' '0x0b01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0b02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0b03': '0x01' '0x0b04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0b05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0b06': '0x01' '0x0b07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0b08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0b09': '0x01' '0x0b10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0b11': '0x01' '0x0b12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0b13': '0x01' '0x0b14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0b15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0b16': '0x01' '0x0b17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0b18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0b19': '0x01' '0x0b20': '0x01' pre: c000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALL (GAS) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0b00 ]] @0x0b0000 [[ 0x0a01 ]] @0x0a0100 [[ 0x0b01 ]] @0x0b0100 [[ 0x0a02 ]] @0x0a0200 [[ 0x0b02 ]] @0x0b0200 [[ 0x0a03 ]] @0x0a0300 [[ 0x0b03 ]] @0x0b0300 [[ 0x0a04 ]] @0x0a0400 [[ 0x0b04 ]] @0x0b0400 [[ 0x0a05 ]] @0x0a0500 [[ 0x0b05 ]] @0x0b0500 [[ 0x0a06 ]] @0x0a0600 [[ 0x0b06 ]] @0x0b0600 [[ 0x0a07 ]] @0x0a0700 [[ 0x0b07 ]] @0x0b0700 [[ 0x0a08 ]] @0x0a0800 [[ 0x0b08 ]] @0x0b0800 [[ 0x0a09 ]] @0x0a0900 [[ 0x0b09 ]] @0x0b0900 [[ 0x0a10 ]] @0x0a1000 [[ 0x0b10 ]] @0x0b1000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0b11 ]] @0x0b1100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0b12 ]] @0x0b1200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0b13 ]] @0x0b1300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0b14 ]] @0x0b1400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0b15 ]] @0x0b1500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0b16 ]] @0x0b1600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0b17 ]] @0x0b1700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0b18 ]] @0x0b1800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0b19 ]] @0x0b1900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0b20 ]] @0x0b2000 } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (CALLCODE (GAS) 1 0 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0000 ] (CALLCODE (GAS) 1 1 0 128 0x2020 32) [ 0x0b0100 ] (MOD @0x2020 (EXP 2 160)) [ 0x0b0200 ] (EQ (ORIGIN) @0x0b0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (CALLCODE (GAS) 2 0 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0300 ] (CALLCODE (GAS) 2 1 0 32 0x2020 32) [ 0x0b0400 ] @0 [ 0x0b0500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (CALLCODE (GAS) 3 0 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0600 ] (CALLCODE (GAS) 3 1 0 32 0x2020 32) [ 0x0b0700 ] @0 [ 0x0b0800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (CALLCODE (GAS) 4 0 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0900 ] (CALLCODE (GAS) 4 1 0 32 0x2020 32) [ 0x0b1000 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (CALLCODE (GAS) 5 0 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1100 ] (CALLCODE (GAS) 5 1 0 0xa1 0x2020 32) [ 0x0b1200 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (CALLCODE (GAS) 6 0 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1300 ] (CALLCODE (GAS) 6 1 0 128 0x3000 64) [ 0x0b1400 ] @0x3000 [ 0x0b1500 ] @0x3020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (CALLCODE (GAS) 7 0 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1600 ] (CALLCODE (GAS) 7 1 0 96 0x3000 64) [ 0x0b1700 ] @0x3000 [ 0x0b1800 ] @0x3020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (CALLCODE (GAS) 8 0 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1900 ] (CALLCODE (GAS) 8 1 0 0x0180 0x2020 32) [ 0x0b2000 ] @0x2020 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'c000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallcodeToPrecompileFromContractInitializationFiller.yml ================================================ --- CallcodeToPrecompileFromContractInitialization: _info: comment: | Contract B creates new contract. New contract initialization code staticcalls contract A. Contract A callcodes precompiled contracts. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: b000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xb2bc42a2d3b34f228ba399e53ab6f1b3d2672177' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' b2bc42a2d3b34f228ba399e53ab6f1b3d2672177: storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' # precompiled contract #1 - Recovery of ECDSA signature '0x0b00': '0x01' '0x0b01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0b02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0b03': '0x01' '0x0b04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0b05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0b06': '0x01' '0x0b07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0b08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0b09': '0x01' '0x0b10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0b11': '0x01' '0x0b12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0b13': '0x01' '0x0b14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0b15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0b16': '0x01' '0x0b17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0b18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0b19': '0x01' '0x0b20': '0x01' pre: b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALLDATACOPY 0 0 (CALLDATASIZE)) [[ 0x01 ]] (CREATE2 0 0 (CALLDATASIZE) 0x5a175a17) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (CALLCODE (GAS) 1 0 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0000 ] (CALLCODE (GAS) 1 1 0 128 0x2020 32) [ 0x0b0100 ] (MOD @0x2020 (EXP 2 160)) [ 0x0b0200 ] (EQ (ORIGIN) @0x0b0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (CALLCODE (GAS) 2 0 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0300 ] (CALLCODE (GAS) 2 1 0 32 0x2020 32) [ 0x0b0400 ] @0 [ 0x0b0500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (CALLCODE (GAS) 3 0 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0600 ] (CALLCODE (GAS) 3 1 0 32 0x2020 32) [ 0x0b0700 ] @0 [ 0x0b0800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (CALLCODE (GAS) 4 0 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0900 ] (CALLCODE (GAS) 4 1 0 32 0x2020 32) [ 0x0b1000 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (CALLCODE (GAS) 5 0 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1100 ] (CALLCODE (GAS) 5 1 0 0xa1 0x2020 32) [ 0x0b1200 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (CALLCODE (GAS) 6 0 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1300 ] (CALLCODE (GAS) 6 1 0 128 0x3000 64) [ 0x0b1400 ] @0x3000 [ 0x0b1500 ] @0x3020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (CALLCODE (GAS) 7 0 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1600 ] (CALLCODE (GAS) 7 1 0 96 0x3000 64) [ 0x0b1700 ] @0x3000 [ 0x0b1800 ] @0x3020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (CALLCODE (GAS) 8 0 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1900 ] (CALLCODE (GAS) 8 1 0 0x0180 0x2020 32) [ 0x0b2000 ] @0x2020 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0b00 ]] @0x0b0000 [[ 0x0a01 ]] @0x0a0100 [[ 0x0b01 ]] @0x0b0100 [[ 0x0a02 ]] @0x0a0200 [[ 0x0b02 ]] @0x0b0200 [[ 0x0a03 ]] @0x0a0300 [[ 0x0b03 ]] @0x0b0300 [[ 0x0a04 ]] @0x0a0400 [[ 0x0b04 ]] @0x0b0400 [[ 0x0a05 ]] @0x0a0500 [[ 0x0b05 ]] @0x0b0500 [[ 0x0a06 ]] @0x0a0600 [[ 0x0b06 ]] @0x0b0600 [[ 0x0a07 ]] @0x0a0700 [[ 0x0b07 ]] @0x0b0700 [[ 0x0a08 ]] @0x0a0800 [[ 0x0b08 ]] @0x0b0800 [[ 0x0a09 ]] @0x0a0900 [[ 0x0b09 ]] @0x0b0900 [[ 0x0a10 ]] @0x0a1000 [[ 0x0b10 ]] @0x0b1000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0b11 ]] @0x0b1100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0b12 ]] @0x0b1200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0b13 ]] @0x0b1300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0b14 ]] @0x0b1400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0b15 ]] @0x0b1500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0b16 ]] @0x0b1600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0b17 ]] @0x0b1700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0b18 ]] @0x0b1800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0b19 ]] @0x0b1900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0b20 ]] @0x0b2000 } gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/CallcodeToPrecompileFromTransactionFiller.yml ================================================ --- CallcodeToPrecompileFromTransaction: _info: comment: | Contract B staticcalls contract A. Contract A callcodes precompiled contracts. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1000' storage: {} b000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' # precompiled contract #1 - Recovery of ECDSA signature '0x0b00': '0x01' '0x0b01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0b02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0b03': '0x01' '0x0b04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0b05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0b06': '0x01' '0x0b07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0b08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0b09': '0x01' '0x0b10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0b11': '0x01' '0x0b12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0b13': '0x01' '0x0b14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0b15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0b16': '0x01' '0x0b17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0b18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0b19': '0x01' '0x0b20': '0x01' pre: b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0b00 ]] @0x0b0000 [[ 0x0a01 ]] @0x0a0100 [[ 0x0b01 ]] @0x0b0100 [[ 0x0a02 ]] @0x0a0200 [[ 0x0b02 ]] @0x0b0200 [[ 0x0a03 ]] @0x0a0300 [[ 0x0b03 ]] @0x0b0300 [[ 0x0a04 ]] @0x0a0400 [[ 0x0b04 ]] @0x0b0400 [[ 0x0a05 ]] @0x0a0500 [[ 0x0b05 ]] @0x0b0500 [[ 0x0a06 ]] @0x0a0600 [[ 0x0b06 ]] @0x0b0600 [[ 0x0a07 ]] @0x0a0700 [[ 0x0b07 ]] @0x0b0700 [[ 0x0a08 ]] @0x0a0800 [[ 0x0b08 ]] @0x0b0800 [[ 0x0a09 ]] @0x0a0900 [[ 0x0b09 ]] @0x0b0900 [[ 0x0a10 ]] @0x0a1000 [[ 0x0b10 ]] @0x0b1000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0b11 ]] @0x0b1100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0b12 ]] @0x0b1200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0b13 ]] @0x0b1300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0b14 ]] @0x0b1400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0b15 ]] @0x0b1500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0b16 ]] @0x0b1600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0b17 ]] @0x0b1700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0b18 ]] @0x0b1800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0b19 ]] @0x0b1900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0b20 ]] @0x0b2000 } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (CALLCODE (GAS) 1 0 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0000 ] (CALLCODE (GAS) 1 1 0 128 0x2020 32) [ 0x0b0100 ] (MOD @0x2020 (EXP 2 160)) [ 0x0b0200 ] (EQ (ORIGIN) @0x0b0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (CALLCODE (GAS) 2 0 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0300 ] (CALLCODE (GAS) 2 1 0 32 0x2020 32) [ 0x0b0400 ] @0 [ 0x0b0500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (CALLCODE (GAS) 3 0 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0600 ] (CALLCODE (GAS) 3 1 0 32 0x2020 32) [ 0x0b0700 ] @0 [ 0x0b0800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (CALLCODE (GAS) 4 0 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b0900 ] (CALLCODE (GAS) 4 1 0 32 0x2020 32) [ 0x0b1000 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (CALLCODE (GAS) 5 0 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1100 ] (CALLCODE (GAS) 5 1 0 0xa1 0x2020 32) [ 0x0b1200 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (CALLCODE (GAS) 6 0 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1300 ] (CALLCODE (GAS) 6 1 0 128 0x3000 64) [ 0x0b1400 ] @0x3000 [ 0x0b1500 ] @0x3020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (CALLCODE (GAS) 7 0 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1600 ] (CALLCODE (GAS) 7 1 0 96 0x3000 64) [ 0x0b1700 ] @0x3000 [ 0x0b1800 ] @0x3020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x3020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (CALLCODE (GAS) 8 0 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; non zero value [ 0x0b1900 ] (CALLCODE (GAS) 8 1 0 0x0180 0x2020 32) [ 0x0b2000 ] @0x2020 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/DelegatecallToPrecompileFromCalledContractFiller.yml ================================================ --- DelegatecallToPrecompileFromCalledContract: _info: comment: | Contract C calls contract B. Contract B staticcalls contract A. Contract A delegatecalls precompiled contracts. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1000' storage: {} c000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' b000000000000000000000000000000000000000: balance: '1000' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' pre: c000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALL (GAS) 0xb000000000000000000000000000000000000000 0 0 0 0 0) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0a01 ]] @0x0a0100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0a02 ]] @0x0a0200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0a03 ]] @0x0a0300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0a04 ]] @0x0a0400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0a05 ]] @0x0a0500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0a06 ]] @0x0a0600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0a07 ]] @0x0a0700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0a08 ]] @0x0a0800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0a09 ]] @0x0a0900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0a10 ]] @0x0a1000 } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (DELEGATECALL (GAS) 1 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (DELEGATECALL (GAS) 2 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (DELEGATECALL (GAS) 3 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (DELEGATECALL (GAS) 4 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (DELEGATECALL (GAS) 5 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (DELEGATECALL (GAS) 6 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (DELEGATECALL (GAS) 7 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (DELEGATECALL (GAS) 8 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'c000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/DelegatecallToPrecompileFromContractInitializationFiller.yml ================================================ --- DelegatecallToPrecompileFromContractInitialization: _info: comment: | Contract B staticcalls contract A. Contract A delegatecalls precompiled contracts. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: - !!int 0 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: b000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfd7776b1a634b0dc19301b174ccf30d4d24070a8' '0x02': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' fd7776b1a634b0dc19301b174ccf30d4d24070a8: storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' pre: b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (CALLDATACOPY 0 0 (CALLDATASIZE)) [[ 0x01 ]] (CREATE2 0 0 (CALLDATASIZE) 0x5a175a175a17) [[ 0x02 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (DELEGATECALL (GAS) 1 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (DELEGATECALL (GAS) 2 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (DELEGATECALL (GAS) 3 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (DELEGATECALL (GAS) 4 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (DELEGATECALL (GAS) 5 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (DELEGATECALL (GAS) 6 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (DELEGATECALL (GAS) 7 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (DELEGATECALL (GAS) 8 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0a01 ]] @0x0a0100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0a02 ]] @0x0a0200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0a03 ]] @0x0a0300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0a04 ]] @0x0a0400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0a05 ]] @0x0a0500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0a06 ]] @0x0a0600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0a07 ]] @0x0a0700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0a08 ]] @0x0a0800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0a09 ]] @0x0a0900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0a10 ]] @0x0a1000 } gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/DelegatecallToPrecompileFromTransactionFiller.yml ================================================ --- DelegatecallToPrecompileFromTransaction: _info: comment: | Contract B staticcalls contract A. Contract A delegatecalls precompiled contracts. It should execute successfully for each precompiled contract. env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: a000000000000000000000000000000000000000: balance: '1000' storage: {} b000000000000000000000000000000000000000: balance: '1100' storage: '0x00': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' '0x01': '0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed' # precompiled contract #1 - Recovery of ECDSA signature '0x0a00': '0x01' '0x0a01': '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b' '0x0a02': '0x01' # precompiled contract #2 - Hash function SHA256 '0x0a03': '0x01' '0x0a04': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a05': '0x73f5062fb68ed2a1ec82ff8c73f9251bb9cf53a623bc93527e16bc5ae29dad74' # precompiled contract #3 - Hash function RIPEMD160 '0x0a06': '0x01' '0x0a07': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' '0x0a08': '0x14ef238cfa4075e9ede92f18b1566c1dd0b99aaa' # precompiled contract #4 - Identity '0x0a09': '0x01' '0x0a10': '0x0ccccccccccccccccccccccccccccccccccccccccccccccccccc000000' # precompiled contract #5 - Modular exponentiation '0x0a11': '0x01' '0x0a12': '0x01' # precompiled contract #6 - Addition on elliptic curve alt_bn128 '0x0a13': '0x01' '0x0a14': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a15': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #7 - Scalar multiplication on elliptic curve alt_bn128 '0x0a16': '0x01' '0x0a17': '0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49' '0x0a18': '0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f' # precompiled contract #8 - Checking a pairing equation on curve alt_bn128 '0x0a19': '0x01' '0x0a20': '0x01' pre: b000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: '0x00': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' '0x01': '0xdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf' code: | { [[ 0x00 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed (STATICCALL (GAS) 0xa000000000000000000000000000000000000000 0 0 0x0a0000 0x012020) [[ 0x01 ]] 0xfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeedfeed ;; save results to store [[ 0x0a00 ]] @0x0a0000 [[ 0x0a11 ]] @0x0a1100 [[ 0x0a01 ]] @0x0a0100 [[ 0x0a12 ]] @0x0a1200 [[ 0x0a02 ]] @0x0a0200 [[ 0x0a13 ]] @0x0a1300 [[ 0x0a03 ]] @0x0a0300 [[ 0x0a14 ]] @0x0a1400 [[ 0x0a04 ]] @0x0a0400 [[ 0x0a15 ]] @0x0a1500 [[ 0x0a05 ]] @0x0a0500 [[ 0x0a16 ]] @0x0a1600 [[ 0x0a06 ]] @0x0a0600 [[ 0x0a17 ]] @0x0a1700 [[ 0x0a07 ]] @0x0a0700 [[ 0x0a18 ]] @0x0a1800 [[ 0x0a08 ]] @0x0a0800 [[ 0x0a19 ]] @0x0a1900 [[ 0x0a09 ]] @0x0a0900 [[ 0x0a20 ]] @0x0a2000 [[ 0x0a10 ]] @0x0a1000 } a000000000000000000000000000000000000000: balance: '1000' nonce: '0' storage: {} code: | { ;; Recovery of ECDSA signature [ 0x00 ] 0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c [ 0x20 ] 28 [ 0x40 ] 0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f [ 0x60 ] 0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549 ;; zero value [ 0x0a0000 ] (DELEGATECALL (GAS) 1 0 128 0x2000 32) [ 0x0a0100 ] (MOD @0x2000 (EXP 2 160)) [ 0x0a0200 ] (EQ (ORIGIN) @0x0a0100) [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function SHA256 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0300 ] (DELEGATECALL (GAS) 2 0 32 0x2000 32) [ 0x0a0400 ] @0 [ 0x0a0500 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Hash function RIPEMD160 [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0600 ] (DELEGATECALL (GAS) 3 0 32 0x2000 32) [ 0x0a0700 ] @0 [ 0x0a0800 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Identity [ 0x00 ] 0x0000000ccccccccccccccccccccccccccccccccccccccccccccccccccc000000 ;; zero value [ 0x0a0900 ] (DELEGATECALL (GAS) 4 0 32 0x2000 32) [ 0x0a1000 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Modular exponentiation [ 0x00 ] 1 [ 0x20 ] 32 [ 0x40 ] 32 [ 0x60 ] 0x03fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0x80 ] 0x2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc [ 0xa0 ] 0x2f00000000000000000000000000000000000000000000000000000000000000 ;; zero value [ 0x0a1100 ] (DELEGATECALL (GAS) 5 0 0xa1 0x2000 32) [ 0x0a1200 ] @0x2000 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x80 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0xa0 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Addition on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286 [ 0x60 ] 0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4 ;; zero value [ 0x0a1300 ] (DELEGATECALL (GAS) 6 0 128 0x2000 64) [ 0x0a1400 ] @0x2000 [ 0x0a1500 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x60 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Scalar multiplication on elliptic curve alt_bn128 [ 0x00 ] 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2 [ 0x20 ] 0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000003 ;; zero value [ 0x0a1600 ] (DELEGATECALL (GAS) 7 0 96 0x2000 64) [ 0x0a1700 ] @0x2000 [ 0x0a1800 ] @0x2020 [ 0x00 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x20 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x40 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 [ 0x2020 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; Checking a pairing equation on curve alt_bn128 ;; proof.A + vk.A + negateG1(proof.Ap) + P2 [ 0x0000 ] 0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59 [ 0x0020 ] 0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41 [ 0x0040 ] 0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7 [ 0x0060 ] 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678 [ 0x0080 ] 0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d [ 0x00a0 ] 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550 [ 0x00c0 ] 0x111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c [ 0x00e0 ] 0x2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411 [ 0x0100 ] 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 [ 0x0120 ] 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed [ 0x0140 ] 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b [ 0x0160 ] 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa ;; zero value [ 0x0a1900 ] (DELEGATECALL (GAS) 8 0 0x0180 0x2000 32) [ 0x0a2000 ] @0x2000 [ 0x2000 ] 0x0000000000000000000000000000000000000000000000000000000000000000 ;; return all computed values to caller for checking (RETURN 0x0a0000 0x012020) } a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '4000000' gasPrice: '10' nonce: '0' secretKey: '0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8' to: 'b000000000000000000000000000000000000000' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/StaticcallForPrecompilesIssue683Filler.yml ================================================ --- StaticcallForPrecompilesIssue683: _info: comment: | Bytecode from issue 683, that initially show the problem with staticcall in hevm. Issue link: https://github.com/ethereum/tests/issues/683 Pullrequest link with original bytecode: https://github.com/dapphub/dapptools/pull/360 env: currentCoinbase: '0xcafe000000000000000000000000000000000001' currentDifficulty: '0x20000' currentGasLimit: '10000000' currentNumber: '1' currentTimestamp: '1000' expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: : balance: '1100' storage: '0x00': '0x01' pre: : balance: '1000' nonce: '0' storage: {} code: ':raw 0x600080541515601d576001815580818283305afa15601b578081fd5b005b80818283600160025af15050' : balance: '1000000000000000000' code: '' nonce: '0' storage: {} transaction: data: - '' gasLimit: - '1000000' gasPrice: '10' nonce: '0' secretKey: '' to: '' value: - '100' ================================================ FILE: tests/static/state_tests/stStaticFlagEnabled/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/ABAcalls0Filler.json ================================================ { "ABAcalls0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x24" : "0x01" } }, "" : { "storage" : { "0x26" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ (PC) ]] (CALL 100000 24 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { [[ (PC) ]] (ADD 1 (CALL 50000 23 0 0 0 0)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/ABAcalls1Filler.json ================================================ { "ABAcalls1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun" : { "storage" : { "0x26" : "0x01" } }, "" : { "storage" : { "0x29" : "0x02" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ (PC) ]] (CALL (- (GAS) 100000) 24 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : " { [[ (PC) ]] (ADD 1 (CALL (- (GAS) 100000) 23 0 0 0 0)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/ABAcalls2Filler.json ================================================ { "ABAcalls2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0xc9" } }, "" : { "storage" : { "0x00" : "0xc9" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (ADD (SLOAD 0) 1) (CALL (- (GAS) 100000) 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : " { [[ 0 ]] (ADD (SLOAD 0) 1) (CALL (- (GAS) 100000) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/ABAcalls3Filler.json ================================================ { "ABAcalls3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" ], "result" : { "" : { "storage" : { "0x00" : "0x34" } }, "" : { "storage" : { "0x00" : "0x34" } } } } ], "pre" : { "" : { "balance" : "1025000", "code" : "{ [[ 0 ]] (ADD (SLOAD 0) 1) (CALL (- (GAS) 100000) 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : " { [[ 0 ]] (ADD (SLOAD 0) 1) (CALL (- (GAS) 100000) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/ABAcallsSuicide0Filler.json ================================================ { "ABAcallsSuicide0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x26" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ (PC) ]] (CALL 100000 24 0 0 0 0) (SELFDESTRUCT ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{ [[ (PC) ]] (ADD 1 (CALL 50000 23 0 0 0 0)) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/ABAcallsSuicide1Filler.json ================================================ { "ABAcallsSuicide1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { } }, "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "shouldnotexist" : "1" }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ (PC) ]] (CALL (CALLDATALOAD 0) 0x945304eb96065b2a98b57a48a06ae28d285a71b5 24 0 32 0 0) }", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) [[ (PC) ]] (ADD 1 (CALL (SUB (CALLDATALOAD 0) 50000) 0x095e7baea6a6c7c4c2dfeb977efac326af552d87 23 0 32 0 0)) (SELFDESTRUCT 0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6) } ", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000186a0", ":raw 0x00000000000000000000000000000000000000000000000000000000000486a0" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/Call10Filler.json ================================================ { "Call10" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0a" } } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "7000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "code" : "{ (def 'i 0x80) (for {} (< @i 10) [i](+ @i 1) [[ 0 ]](CALL 0xfffffffffff 1 0 50000 0 0) ) [[ 1 ]] @i}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "0x30d40" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBomb0Filler.json ================================================ { "CallRecursiveBomb0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "11000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0139", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "2000000000", "code" : "{ (CALL 100000000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 11000) (ADDRESS) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBomb0_OOG_atMaxCallDepthFiller.json ================================================ { "CallRecursiveBomb0_OOG_atMaxCallDepth" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "110000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x02ed", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 2 ]] (MUL (DIV @@0 0x0402) 0xfffffffffffffffffff) [[ 1 ]] (CALL (- (GAS) 1024) (ADDRESS) 0 0 (MUL (DIV @@0 0x0402) 0xfffffffffffffffffff) 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBomb1Filler.json ================================================ { "CallRecursiveBomb1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x100", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 15000) (ADDRESS) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "20622100" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBomb2Filler.json ================================================ { "CallRecursiveBomb2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x100", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 15000) (ADDRESS) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "20622099" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBomb3Filler.json ================================================ { "CallRecursiveBomb3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x12", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 224) (ADDRESS) 0 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBombLog2Filler.json ================================================ { "CallRecursiveBombLog2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "11000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0142", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (CALL 100000000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 (GAS)) (LOG0 0 32) [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 25000) (ADDRESS) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallRecursiveBombLogFiller.json ================================================ { "CallRecursiveBombLog" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun" : { "storage" : { "0x00" : "0x0141", "0x01" : "0x01" } }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "20000000", "code" : "{ (CALL 100000000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (LOG0 0 32) [[ 0 ]] (+ (SLOAD 0) 1) [[ 1 ]] (CALL (- (GAS) 25000) (ADDRESS) 0 0 0 0 0) } ", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistrator0Filler.json ================================================ { "CallToNameRegistrator0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 100000 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigLeftFiller.json ================================================ { "CallToNameRegistratorAddressTooBigLeft" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 1000 0xaa 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigRightFiller.json ================================================ { "CallToNameRegistratorAddressTooBigRight" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 1000 aa 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorMemOOGAndInsufficientBalanceFiller.json ================================================ { "CallToNameRegistratorMemOOGAndInsufficientBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 0xffffffffff 23 0 0xffffffffffff 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory0Filler.json ================================================ { "CallToNameRegistratorNotMuchMemory0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 500 23 0 64 987654 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory1Filler.json ================================================ { "CallToNameRegistratorNotMuchMemory1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 500 23 987654 0 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "290000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorOutOfGasFiller.json ================================================ { "CallToNameRegistratorOutOfGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 100 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory0Filler.json ================================================ { "CallToNameRegistratorTooMuchMemory0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 500 23 987654321 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory1Filler.json ================================================ { "CallToNameRegistratorTooMuchMemory1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 500 23 0 9865432 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory2Filler.json ================================================ { "CallToNameRegistratorTooMuchMemory2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 500 23 0 64 987654 1) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToNameRegistratorZeorSizeMemExpansionFiller.json ================================================ { "CallToNameRegistratorZeorSizeMemExpansion" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 5000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "500000", "50000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToReturn1Filler.json ================================================ { "CallToReturn1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALL 1000 23 0 0 31 1) [[ 1 ]] @0 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155602a601f536001601ff3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToReturn1ForDynamicJump0Filler.json ================================================ { "CallToReturn1ForDynamicJump0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001601f600060006017736103e8f1600055600051565b6023602355", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155602a601f536001601ff3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CallToReturn1ForDynamicJump1Filler.json ================================================ { "CallToReturn1ForDynamicJump1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6001601f600060006017736103e8f160005560005156605b6023602355", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155602b601f536001601ff3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CalltoReturn2Filler.json ================================================ { "CalltoReturn2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALL 5000 23 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f2", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/CreateHashCollisionFiller.json ================================================ { "CreateHashCollision" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "storage" : { "0x00" : "0x00" } }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "42", "code" : "0x60016001016055", "storage" : { } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 3 29) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "d2571607e241ecf590ed94b12d87c94babe36db6" : { "balance" : "42", "code" : ":raw 0x60016001016055", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/PostToReturn1Filler.json ================================================ { "PostToReturn1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x01" : "0x00", "0x02" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[1]](CALL 30000 23 0 64 0 0 ) [[2]] 1 }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x603760005360026000f2", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/TestNameRegistratorFiller.json ================================================ { "TestNameRegistrator" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/balanceInputAddressTooBigFiller.json ================================================ { "balanceInputAddressTooBig" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (BALANCE aa ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callValueFiller.json ================================================ { "callValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x0186a0" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (CALLVALUE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callcodeTo0Filler.json ================================================ { "callcodeTo0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (CALLCODE 50000 0 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callcodeToNameRegistrator0Filler.json ================================================ { "callcodeToNameRegistrator0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALLCODE 1000 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigLeftFiller.json ================================================ { "callcodeToNameRegistratorAddresTooBigLeft" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALLCODE 1000 0xaa 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigRightFiller.json ================================================ { "callcodeToNameRegistratorAddresTooBigRight" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALLCODE 1000 aa 23 0 64 64 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callcodeToNameRegistratorZeroMemExpanionFiller.json ================================================ { "callcodeToNameRegistratorZeroMemExpanion" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALLCODE 5000 23 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6000355415600957005b60203560003555", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "50000", "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callcodeToReturn1Filler.json ================================================ { "callcodeToReturn1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) (MSTORE 32 0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa ) [[ 0 ]] (CALLCODE 50000 23 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : ":raw 0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/callerAccountBalanceFiller.json ================================================ { "callerAccountBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x0de0b6b3a16c9860" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (balance (caller)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorFiller.json ================================================ { "createNameRegistrator" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 3 29) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorOOG_MemExpansionOOVFiller.json ================================================ { "createNameRegistratorOOG_MemExpansionOOV" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "10000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 11000 3 0xffffffffffffffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds0Filler.json ================================================ { "createNameRegistratorOutOfMemoryBonds0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 0xfffffffffff 29) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds1Filler.json ================================================ { "createNameRegistratorOutOfMemoryBonds1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 3 0xfffffffffff) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorValueTooHighFiller.json ================================================ { "createNameRegistratorValueTooHigh" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "d2571607e241ecf590ed94b12d87c94babe36db6" : { "shouldnotexist" : "1" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 1000000000000000001 3 29) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorZeroMem2Filler.json ================================================ { "createNameRegistratorZeroMem2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorZeroMemExpansionFiller.json ================================================ { "createNameRegistratorZeroMemExpansion" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 0 0) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createNameRegistratorZeroMemFiller.json ================================================ { "createNameRegistratorZeroMem" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "nonce" : "1", "storage" : { "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ (MSTORE 0 0x601080600c6000396000f3006000355415600957005b60203560003555) [[ 0 ]] (CREATE 23 3 0) }", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/createWithInvalidOpcodeFiller.json ================================================ { "createWithInvalidOpcode" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : ":raw 0x444242424245434253f0", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/currentAccountBalanceFiller.json ================================================ { "currentAccountBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x0de0b6b3a76586a0" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (balance (address)) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/doubleSelfdestructTestFiller.yml ================================================ doubleSelfdestructTest: _info: comment: | The first test case required here https://github.com/ethereum/tests/issues/431#issue-306081539 Implements: SUC007.0, SUC007.1, SUC007.2, SUC007.3, SUC008.0, SUC008.1, SUC008.2, SUC008.3 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x20000' currentGasLimit: '10000000000' currentNumber: '1' currentTimestamp: '1000' pre: 000000000000000000000000000000000000c0de: balance: 1_000_000 code: | :yul berlin { // If there's data, call this again and then // try to selfdestruct. // Necessary to use data, because delegatecall and staticcall don't // affect calldata if gt(calldatasize(), 2) { // Type of call to make let opcode := shr(248, calldataload(0)) // Address for caller selfdestruct let caller_ff := and(shr(232, calldataload(0)), 0xFFFF) // Address for called selfdestruct, which we need to send with the call let called_ff := and(shr(216, calldataload(0)), 0xFFFF) mstore8(0, and(shr(8, called_ff), 0xFF)) mstore8(1, and(called_ff, 0xFF)) if eq(opcode, 0xF1) { pop(call(gas(), 0xc0de, 0, 0,2, 0,0)) } if eq(opcode, 0xF2) { pop(callcode(gas(), 0xc0de, 0, 0,2, 0,0)) } if eq(opcode, 0xF4) { pop(delegatecall(gas(), 0xc0de, 0,2, 0,0)) } if eq(opcode, 0xFA) { pop(staticcall(gas(), 0xc0de, 0,2, 0,0)) } selfdestruct(caller_ff) } // If there are only two bytes of call data, that is the // selfdestruct address let called_ff := and(shr(240, calldataload(0)), 0xFFFF) if eq(calldatasize(), 2) { selfdestruct(called_ff) } } nonce: 1 storage: {} a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: 0x nonce: 1 storage: {} transaction: data: # Byte 1 is the call opcode to use # Bytes 2-3 are the address for a caller selfdestruct # Bytes 4-5 are the address for a called selfdestruct # - :label called-self-destruct :raw 0xF110011002 # CALL - :label called-self-destruct :raw 0xF210011002 # CALLCODE - :label called-self-destruct :raw 0xF410011002 # DELEGATECALL # In the case of STATICCALL the called SELFDESTRUCT is ineffective. - :label caller-self-destruct :raw 0xFA10011002 # STATICCALL # When the called is 0xC0DE, the balance is destroyed - :label code-self-destruct :raw 0xF11001c0de # CALL - :label code-self-destruct :raw 0xF21001c0de # CALLCODE - :label code-self-destruct :raw 0xF41001c0de # DELEGATECALL # In the case of STATICCALL the called SELFDESTRUCT is ineffective. - :label caller-self-destruct :raw 0xFA1001c0de # STATICCALL gasLimit: - 16777216 gasPrice: 10 nonce: 1 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 to: 000000000000000000000000000000000000c0de value: - 1 expect: - indexes: data: - :label called-self-destruct network: - '>=Cancun' result: # Caller self destruct 0000000000000000000000000000000000001001: shouldnotexist: 1 # Called self destruct 0000000000000000000000000000000000001002: balance: 1_000_001 - indexes: data: - :label caller-self-destruct network: - '>=Cancun' result: # Caller self destruct 0000000000000000000000000000000000001001: balance: 1000001 nonce: 0 # Called self destruct 0000000000000000000000000000000000001002: shouldnotexist: 1 # The code itself 000000000000000000000000000000000000c0de: nonce: 1 - indexes: data: - :label code-self-destruct network: - '>=Cancun' result: # Caller self destruct 0000000000000000000000000000000000001001: balance: 1000001 nonce: 0 # Called self destruct 000000000000000000000000000000000000c0de: nonce: 1 ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/doubleSelfdestructTouch_ParisFiller.yml ================================================ doubleSelfdestructTouch_Paris: _info: comment: | A single contract can execute SELFDESTRUCT multiple times using by being called multiple times. The second and later SELFDESTRUCTs have little effect but can touch some new beneficiary addresses. env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 1 currentGasLimit: 30000000 currentNumber: 1 currentTimestamp: 999 pre: # Tx sender : nonce: 0 balance: 100000002 storage: {} code: '' # Tx target contract : nonce: 0 balance: 0 storage: {} code: | :yul berlin { let v0 := callvalue() let v1 := shr(1, v0) let r1 := call(70000, , v1, 0, 0, 0, 0) let v2 := sub(v0, v1) let r2 := call(70000, , v2, 0, 0, 0, 0) } # Selfdestruct : nonce: 0 balance: 0 storage: 0: 0 1: 2: code: | :yul berlin { let index := add(sload(0), 1) sstore(0, index) selfdestruct(sload(index)) } # Empty account 1 : nonce: 0 balance: 10 storage: {} code: "" # Empty account 2 : nonce: 0 balance: 10 storage: {} code: "" transaction: data: - '' gasLimit: - 10000000 gasPrice: 10 nonce: 0 to: secretKey: "" value: - 0 # Sends no value - 1 # Sends 1 value to the second empty account 0xe49702 - 2 # Sends 1 value to both empty accounts 0xe49701 and 0xe49702 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int 0 network: - ">=Cancun" result: : nonce: 1 : nonce: 0 balance: 0 storage: {} : balance: 10 : balance: 10 - indexes: data: !!int -1 gas: !!int -1 value: !!int 1 network: - ">=Cancun" result: : nonce: 1 : nonce: 0 balance: 0 storage: {} : balance: 10 : nonce: 0 balance: 11 # Received via SELFDESTRUCT - indexes: data: !!int -1 gas: !!int -1 value: !!int 2 network: - ">=Cancun" result: : nonce: 1 : nonce: 0 balance: 0 storage: {} : nonce: 0 balance: 11 # Received via SELFDESTRUCT : nonce: 0 balance: 11 # Received via SELFDESTRUCT ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/extcodecopyFiller.json ================================================ { "extcodecopy" : { "_info" : { "comment" : "God knows what is happening in this test" }, "env" : { "currentCoinbase" : "4401fcaf7d64d53fb1cfc5c9045c32aa919a8c82", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x58272e28", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "00000000002147c39fd6b5c19b7b89fc003e6b16" : { "nonce" : "0x00", "storage" : { } }, "4401fcaf7d64d53fb1cfc5c9045c32aa919a8c82" : { "nonce" : "0x00", "storage" : { } }, "" : { "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "" : { "balance" : "0x05c81eb0", "code" : ":raw 0x7f15688566a82f5f946c68028bf626b349e495daa43e33529a76437ac416cd1b7d6e7dae7454bb193b1c28e64a6a935bc373cea0c5cc171fa61277e5604a3bc8aef4de3d38820658600b80797ada6e82e95f6520383f95f5c7dae56b4dc13b6f22ecabfce07c3cff51", "nonce" : "0xfe", "storage" : { } }, "" : { "balance" : "0x4d6769f8", "code" : ":raw 0x5a60106017601160116018601c600f601b601d5f60026013600f601a8d5a5b7679177b5dd41a23db52998c4dcd14e88390dcc9f3ed5783601660145f6013600d601f60016011600e600c600d601f60138c7a58f20fd882eb51408a52e569ce80e93270ab53ae9de3fec5498a5c72ce1fcd11bb1553736959df779a616b738c1f407c12459490afe302da311a673488d09e71041d0761dee4829e3c38e0b1b1787810f2e11e2289983c1ab47cf5ebd38c12f1719232b5f3a7b27a9ea8858a071c4169392ec725646311235cbd9534e5d7cd8cb5e2287738a43f803384f4e62fe6629ea2e609a71759edab5c3a58b87e94c95f710aa6059b0663c9f374ce6ea0a000c5d594c41252d4a74d64896a987cc57c24df2ce8ffb85adcc27dce2d19f7006fbc1c5a7b79a319418fd6c27ddebcf170192262d82c1053333f6115c8b258b81e2e84d723c98dbd4535de7f922723a15827bbcfd07f9e2c5027c7736ed68c61b332059d7ec1bae1c1fd41a361d35b996d9740a588b6abf3293236afb927717328c014846148ce67eaf2b33d90672366dafeaae0714eb39e7fd5076a831d8eb4a3546288a3e1a0087aebe80b6bbfa4041330b05d094a697236fe7654d8a7ce630f83a832620125d781666e898f7fdcfd0031", "nonce" : "0xdd", "storage" : { } }, "" : { "balance" : "0x4f6ca7b90ceb5fd4", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6e27b0577f2549e5fa01e3db96e7b03a62e489115538620295677faf15040c1c1796bad130e2462a8b8d6bbe0fa35bf12087047ef4ff4e66df8772196b4401998ff7f4219c013a0d927b22d8d3fdf625809abb182507d180e687b666f4f1e4f3b8172e87760f436c701264b89739f3d7c50ec524f16b1a4f91397b760a5209b9b7710544694ecf2729643b3ca545c7" ], "gasLimit" : [ "0x186a0" ], "gasPrice" : "0x1cd49878", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x24a39757" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/multiSelfdestructFiller.yml ================================================ multiSelfdestruct: _info: comment: | Implements: SUC000, SUC001, SUC002, SUC003, SUC004, SUC005 env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: 0x20000 currentGasLimit: 0xFF112233445566 currentNumber: 1 currentTimestamp: 1000 currentBaseFee: 1000 pre: # Suicidal contract. # Byte 0: What do to # 00 - nothing # 01-FE - transfer that many wei # FF - self destruct # Bytes 1&2: Recipient address 000000000000000000000000000000000000dead: balance: 3 nonce: 1 code: | :yul berlin { let operation := shr(248, calldataload(0)) let recipient := and(shr(232, calldataload(0)), 0xFFFF) // Don't do anything if eq(operation, 0) { stop() } // Selfdestruct if eq(operation, 0xFF) { selfdestruct(recipient) } // Send value // If the call fails, revert if eq(call(gas(), recipient, operation, 0,0, 0,0),0) { revert(0,0) } } storage: {} # Run the tests. One parameter (single byte) # 01 - SUC001, does not suicide, just receive more funds via call. # check the balance of contractA # (must be 0, the second transfer funds erased) # 02 - SUC002 does another suicide to dest1 (so dest1 now have 3 + x) # 03 - SUC003 does another suicide to dest2 (so both dest1 and dest2 have # some balance) # 04 - SUC004 tries to make value transfer but fails because initial suicide # 0ed the balance (answering this (check that it is immediately # and not by the end of tx)) # 05 - SUC005 receives more funds and try to transfer it # (same as SUC004, but this time work because it received funds # via 2nd call) cccccccccccccccccccccccccccccccccccccccc: balance: 100000000 nonce: 1 code: | :yul berlin { let delme // Selfdestruct, send balance to 0x1000 // SUC000 mstore8(0, 0xFF) mstore8(1, 0x10) mstore8(2, 0x00) delme := call(gas(), 0xdead, 0, 0,3, 0,0) sstore(0x00, delme) sstore(0x01, balance(0x1000)) sstore(0x02, balance(0xdead)) let test := shr(248, calldataload(0)) switch test case 1 { // call with all zeros, so it won't do anything delme := call(gas(), 0xdead, 2, 3,3, 0,0) } case 2 { // Another suicide to 0x1000 delme := call(gas(), 0xdead, 2, 0,3, 0,0) } case 3 { // Suicide to 0x1001 mstore8(2, 1) delme := call(gas(), 0xdead, 2, 0,3, 0,0) } case 4 { // Attempt to transfer WEI you don't have to 0x1001 mstore8(0,1) mstore8(2,1) delme := call(gas(), 0xdead, 0, 0,3, 0,0) } case 5 { // Attempt to transfer WEI you do have to 0x1001 mstore8(0,1) mstore8(2,1) delme := call(gas(), 0xdead, 2, 0,3, 0,0) } default { revert(0,0) } // Store the results sstore(0x10, delme) sstore(0x11, balance(0x1000)) sstore(0x12, balance(0xdead)) sstore(0x13, balance(0x1001)) } storage: 0x00: 0x60A7 0x01: 0x60A7 0x10: 0x60A7 0x11: 0x60A7 0x12: 0x60A7 0x13: 0x60A7 a94f5374fce5edbc8e2a8697c15331677e6ebf0b: balance: '1000000000000000000' code: '0x' nonce: 1 storage: {} transaction: data: - :raw 0x01 - :raw 0x02 - :raw 0x03 - :raw 0x04 - :raw 0x05 gasLimit: - 10000000 gasPrice: 1000 nonce: 1 to: cccccccccccccccccccccccccccccccccccccccc value: - 0 secretKey: "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" expect: # SUC001 - indexes: data: !!int 0 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 1 # Call to 0xDEAD was successful 0x01: 3 # All wei transferred to 0x1000 0x02: 0 # 0xDEAD didn't keep any 0x10: 1 # Second call to 0xDEAD was successful 0x11: 3 # WEI balance of 0x1000, unchanged 0x12: 2 # WEI balance of 0xDEAD, not zeroed out yet # Now (post tx) 0xDEAD no longer exists, so balance=0 000000000000000000000000000000000000dead: balance: 2 nonce: 1 # SUC002 - indexes: data: !!int 1 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 1 # Call to 0xDEAD was successful 0x01: 3 # All wei transferred to 0x1000 0x02: 0 # 0xDEAD didn't keep any 0x10: 1 # Second call to 0xDEAD was successful 0x11: 5 # WEI balance of 0x1000, two more WEI transferred 0x12: 0 # WEI balance of 0xDEAD, zeroed by second selfdestruct # Now (post tx) 0xDEAD no longer exists, so balance=0 000000000000000000000000000000000000dead: nonce: 1 balance: 0 # SUC003 - indexes: data: !!int 2 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 1 # Call to 0xDEAD was successful 0x01: 3 # All wei transferred to 0x1000 0x02: 0 # 0xDEAD didn't keep any 0x10: 1 # Second call to 0xDEAD was successful 0x11: 3 # WEI balance of 0x1000 0x12: 0 # WEI balance of 0xDEAD, zeroed by second selfdestruct 0x13: 2 # WEI balance of 0x1001 # Now (post tx) 0xDEAD no longer exists, so balance=0 000000000000000000000000000000000000dead: nonce: 1 balance: 0 # SUC004 - indexes: data: !!int 3 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 1 # Call to 0xDEAD was successful 0x01: 3 # All wei transferred to 0x1000 0x02: 0 # 0xDEAD didn't keep any 0x10: 0 # Second call to 0xDEAD failed 0x11: 3 # WEI balance of 0x1000 0x12: 0 # WEI balance of 0xDEAD, still zero 0x13: 0 # WEI balance of 0x1001, zero because the transfer failed # Now (post tx) 0xDEAD no longer exists, so balance=0 000000000000000000000000000000000000dead: balance: 0 nonce: 1 # SUC005 - indexes: data: !!int 4 network: - '>=Cancun' result: cccccccccccccccccccccccccccccccccccccccc: storage: 0x00: 1 # Call to 0xDEAD was successful 0x01: 3 # All wei transferred to 0x1000 0x02: 0 # 0xDEAD didn't keep any 0x10: 1 # Second call to 0xDEAD successful 0x11: 3 # WEI balance of 0x1000 0x12: 1 # WEI balance of 0xDEAD, one (2-1) 0x13: 1 # WEI balance of 0x1001, one (because that's how much we transfer) # Now (post tx) 0xDEAD no longer exists, so balance=0 000000000000000000000000000000000000dead: balance: 1 nonce: 1 ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/return0Filler.json ================================================ { "return0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "23", "code" : "{ (MSTORE8 0 55) (RETURN 0 1)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/return1Filler.json ================================================ { "return1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "23", "code" : "{ (MSTORE8 0 55) (RETURN 0 2)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/return2Filler.json ================================================ { "return2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "23", "code" : "{ (MSTORE8 0 55) (RETURN 0 33)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideAddressFiller.json ================================================ { "suicideAddress" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1000000000000100000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (ADDRESS) (SELFDESTRUCT (ADDRESS))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideCallerAddresTooBigLeftFiller.json ================================================ { "suicideCallerAddresTooBigLeft" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0", "nonce" : "0", "storage" : { "0x00" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (CALLER) (SELFDESTRUCT 0xaaa94f5374fce5edbc8e2a8697c15331677e6ebf0b)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideCallerAddresTooBigRightFiller.json ================================================ { "suicideCallerAddresTooBigRight" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "4f5374fce5edbc8e2a8697c15331677e6ebf0baa" : { "balance" : "1000000000000100000" } } } ], "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (CALLER) (SELFDESTRUCT 0xa94f5374fce5edbc8e2a8697c15331677e6ebf0baa)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideCallerFiller.json ================================================ { "suicideCaller" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "0", "storage" : { "0x00" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (CALLER) (SELFDESTRUCT (CALLER))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideNotExistingAccountFiller.json ================================================ { "suicideNotExistingAccount" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "aa1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "1000000000000100000" } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT 0xaa1722f3947def4cf144679da39c4c32bdc35681 )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideOriginFiller.json ================================================ { "suicideOrigin" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "nonce" : "0", "balance" : "0", "storage" : { "0x00" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[0]] (ORIGIN) (SELFDESTRUCT (ORIGIN))}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideSendEtherPostDeathFiller.json ================================================ { "suicideSendEtherPostDeath" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x989680", "currentNumber" : "0x01", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "nonce" : "0", "balance" : "0", "storage" : { }, "code" : "0x60606040526000357c01000000000000000000000000000000000000000000000000000000009004806335f46994146100445780634d536fe31461005157610042565b005b61004f600450610072565b005b61005c60045061008d565b6040518082815260200191505060405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff16ff5b565b600060003073ffffffffffffffffffffffffffffffffffffffff166335f46994604051817c01000000000000000000000000000000000000000000000000000000000281526004018090506000604051808303816000876161da5a03f115610002575050503073ffffffffffffffffffffffffffffffffffffffff163190503373ffffffffffffffffffffffffffffffffffffffff16600082604051809050600060405180830381858888f1935050505050809150610147565b509056" } } } ], "pre" : { "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60606040526000357c01000000000000000000000000000000000000000000000000000000009004806335f46994146100445780634d536fe31461005157610042565b005b61004f600450610072565b005b61005c60045061008d565b6040518082815260200191505060405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff16ff5b565b600060003073ffffffffffffffffffffffffffffffffffffffff166335f46994604051817c01000000000000000000000000000000000000000000000000000000000281526004018090506000604051808303816000876161da5a03f115610002575050503073ffffffffffffffffffffffffffffffffffffffff163190503373ffffffffffffffffffffffffffffffffffffffff16600082604051809050600060405180830381858888f1935050505050809150610147565b509056", "nonce" : "0x00", "storage" : { } }, "" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "transaction" : { "data" : [ "0x4d536fe3" ], "gasLimit" : [ "0x2dc6c0" ], "gasPrice" : "0x0a", "nonce" : "0x00", "secretKey" : "", "to" : "", "value" : [ "0x0186a0" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/suicideSendEtherToMeFiller.json ================================================ { "suicideSendEtherToMe" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "999999999999639980", "nonce" : "1" }, "" : { "balance" : "1000000000000100000", "nonce" : "0", "storage" : {} } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ (SELFDESTRUCT (ADDRESS) )}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "1000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stSystemOperationsTest/testRandomTestFiller.json ================================================ { "testRandomTest" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "nonce" : "2", "storage" : { "0xebcce5f60530275ee9318ce1eff9e4bfee810172" : "0x03e8" } } } } ], "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", "code" : ":raw 0x424443444243434383f0155af055", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "300000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial00_2_ParisFiller.json ================================================ { "sstore_combinations_initial00_2_Paris" : { "_info" : { "comment" : "sstore 0 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 426) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 427) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 428) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 429) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 430) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 431) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 432) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 433) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 434) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 435) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 436) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 437) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 438) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 439) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 440) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 441) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 442) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 443) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 444) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 445) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 446) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 447) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 448) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 449) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 450) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 451) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 452) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 453) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 454) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 455) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 456) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 457) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 458) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 459) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 460) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 461) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 462) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 463) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 464) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 465) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 466) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 467) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 468) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 469) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 470) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 471) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 472) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 473) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 474) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 475) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 476) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 477) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 478) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 479) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 480) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 481) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 482) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 483) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 484) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 485) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 486) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 487) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 488) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 489) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 490) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 491) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 492) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 493) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 494) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 495) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 496) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 497) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 498) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 499) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 500) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 501) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 502) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 503) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 504) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 505) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 506) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 507) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 508) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 509) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 510) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 511) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 512) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 513) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 514) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 515) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 516) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 517) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 518) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 519) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 520) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 521) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 522) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 523) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 524) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 525) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 526) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 527) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 528) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 529) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 530) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 531) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 532) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 533) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 534) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 535) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 536) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 537) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 538) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 539) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 540) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 541) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 542) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 543) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 544) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 545) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 546) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 547) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 548) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 549) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 550) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 551) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 552) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 553) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 554) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 555) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 556) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 557) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 558) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 559) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 560) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 561) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 562) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 563) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 564) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 565) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 566) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 567) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 568) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 569) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 570) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 571) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 572) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 573) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 574) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 575) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 576) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 577) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 578) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 579) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 580) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 581) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 582) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 583) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 584) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 585) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 586) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 587) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 588) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 589) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 590) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 591) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 592) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 593) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 594) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 595) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 596) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 597) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 598) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 599) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 600) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 601) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 602) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 603) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 604) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 605) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 606) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 607) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 608) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 609) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 610) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 611) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 612) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 613) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 614) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 615) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 616) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 617) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 618) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 619) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 620) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 621) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 622) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 623) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 624) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 625) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 626) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 627) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 628) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 629) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 630) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 631) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 632) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 633) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 634) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 635) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 636) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 637) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 638) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 639) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 640) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 641) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 642) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 643) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 644) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 645) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 646) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 647) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 648) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 649) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 650) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 651) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 652) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 653) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 654) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 655) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 656) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 657) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 658) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 659) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 660) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 661) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 662) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 663) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 664) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 665) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 666) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 667) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 668) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 669) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 670) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 671) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 672) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 673) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 674) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 675) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 676) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 677) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 678) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 679) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 680) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 681) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 682) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 683) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 684) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 685) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 686) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 687) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 688) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 689) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 690) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 691) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 692) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 693) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 694) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 695) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 696) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 697) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 698) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 699) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 700) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 701) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 702) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 703) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 704) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 705) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 706) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 707) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 708) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 709) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 710) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 711) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 712) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 713) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 714) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 715) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 716) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 717) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 718) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 719) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 720) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 721) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 722) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 723) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 724) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 725) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 726) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 727) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 728) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 729) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 730) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 731) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 732) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 733) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 734) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 735) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 736) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 737) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 738) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 739) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 740) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 741) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 742) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 743) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 744) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 745) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 746) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 747) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 748) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 749) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 750) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 751) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 752) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 753) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 754) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 755) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 756) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 757) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 758) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 759) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 760) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 761) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 762) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 763) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 764) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 765) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 766) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 767) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 768) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 769) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 770) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 771) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 772) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 773) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 774) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 775) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 776) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 777) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 778) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 779) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 780) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 781) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 782) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 783) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 784) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 785) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 786) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 787) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 788) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 789) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 790) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 791) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 792) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 793) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 794) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 795) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 796) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 797) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 798) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 799) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 800) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 801) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 802) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 803) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 804) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 805) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 806) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 807) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 808) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 809) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 810) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 811) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 812) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 813) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 814) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 815) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 816) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 817) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 818) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 819) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 820) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 821) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 822) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 823) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 824) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 825) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 826) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 827) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 828) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 829) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 830) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 831) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 832) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 833) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 834) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 835) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 836) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 837) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 838) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 839) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 840) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 841) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 842) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 843) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 844) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 845) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 846) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 847) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 848) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 849) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial00_ParisFiller.json ================================================ { "sstore_combinations_initial00_Paris" : { "_info" : { "comment" : "sstore 0 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "//comment" : "", "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 2) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 3) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 4) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 5) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 6) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 7) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 8) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 9) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 10) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 11) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 12) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 13) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 14) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 15) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 16) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 17) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 18) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 19) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 20) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 21) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 22) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 23) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 24) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 25) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 26) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 27) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 28) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 29) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 30) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 31) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 32) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 33) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 34) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 35) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 36) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 37) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 38) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 39) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 40) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 41) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 42) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 43) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 44) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 45) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 46) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 47) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 48) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 49) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 50) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 51) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 52) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 53) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 54) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 55) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 56) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 57) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 58) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 59) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 60) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 61) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 62) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 63) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 64) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 65) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 66) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 67) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 68) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 69) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 70) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 71) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 72) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 73) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 74) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 75) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 76) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 77) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 78) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 79) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 80) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 81) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 82) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 83) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 84) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 85) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 86) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 87) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 88) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 89) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 90) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 91) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 92) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 93) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 94) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 95) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 96) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 97) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 98) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 99) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 100) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 101) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 102) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 103) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 104) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 105) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 106) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 107) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 108) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 109) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 110) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 111) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 112) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 113) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 114) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 115) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 116) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 117) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 118) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 119) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 120) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 121) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 122) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 123) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 124) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 125) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 126) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 127) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 128) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 129) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 130) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 131) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 132) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 133) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 134) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 135) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 136) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 137) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 138) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 139) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 140) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 141) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 142) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 143) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 144) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 145) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 146) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 147) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 148) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 149) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 150) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 151) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 152) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 153) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 154) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 155) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 156) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 157) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 158) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 159) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 160) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 161) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 162) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 163) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 164) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 165) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 166) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 167) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 168) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 169) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 170) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 171) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 172) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 173) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 174) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 175) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 176) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 177) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 178) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 179) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 180) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 181) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 182) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 183) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 184) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 185) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 186) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 187) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 188) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 189) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 190) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 191) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 192) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 193) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 194) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 195) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 196) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 197) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 198) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 199) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 200) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 201) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 202) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 203) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 204) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 205) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 206) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 207) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 208) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 209) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 210) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 211) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 212) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 213) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 214) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 215) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 216) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 217) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 218) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 219) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 220) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 221) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 222) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 223) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 224) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 225) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 226) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 227) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 228) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 229) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 230) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 231) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 232) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 233) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 234) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 235) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 236) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 237) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 238) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 239) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 240) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 241) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 242) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 243) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 244) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 245) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 246) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 247) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 248) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 249) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 250) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 251) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 252) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 253) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 254) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 255) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 256) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 257) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 258) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 259) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 260) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 261) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 262) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 263) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 264) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 265) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 266) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 267) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 268) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 269) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 270) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 271) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 272) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 273) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 274) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 275) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 276) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 277) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 278) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 279) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 280) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 281) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 282) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 283) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 284) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 285) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 286) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 287) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 288) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 289) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 290) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 291) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 292) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 293) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 294) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 295) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 296) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 297) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 298) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 299) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 300) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 301) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 302) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 303) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 304) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 305) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 306) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 307) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 308) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 309) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 310) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 311) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 312) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 313) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 314) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 315) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 316) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 317) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 318) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 319) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 320) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 321) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 322) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 323) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 324) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 325) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 326) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 327) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 328) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 329) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 330) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 331) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 332) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 333) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 334) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 335) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 336) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 337) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 338) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 339) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 340) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 341) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 342) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 343) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 344) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 345) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 346) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 347) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 348) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 349) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 350) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 351) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 352) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 353) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 354) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 355) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 356) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 357) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 358) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 359) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 360) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 361) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 362) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 363) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 364) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 365) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 366) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 367) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 368) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 369) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 370) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 371) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 372) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 373) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 374) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 375) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 376) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 377) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 378) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 379) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 380) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 381) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 382) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 383) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 384) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 385) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 386) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 387) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 388) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 389) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 390) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 391) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 392) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 393) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 394) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 395) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 396) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 397) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 398) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 399) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 400) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 401) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 402) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 403) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 404) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 405) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 406) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 407) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 408) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 409) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 410) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 411) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 412) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 413) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 414) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 415) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 416) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 417) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 418) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 419) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 420) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 421) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 422) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 423) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 424) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 425) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial01_2_ParisFiller.json ================================================ { "sstore_combinations_initial01_2_Paris" : { "_info" : { "comment" : "sstore 0 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 1276) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1277) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1278) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1279) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1280) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1281) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1282) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1283) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1284) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1285) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1286) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1287) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1288) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1289) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1290) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1291) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1292) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1293) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1294) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1295) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1296) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1297) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1298) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1299) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1300) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1301) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1302) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1303) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1304) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1305) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1306) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1307) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1308) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1309) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1310) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1311) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1312) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1313) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1314) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1315) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1316) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1317) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1318) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1319) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1320) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1321) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1322) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1323) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1324) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1325) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1326) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1327) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1328) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1329) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1330) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1331) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1332) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1333) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1334) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1335) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1336) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1337) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1338) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1339) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1340) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1341) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1342) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1343) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1344) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1345) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1346) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1347) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1348) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1349) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1350) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1351) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1352) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1353) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1354) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1355) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1356) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1357) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1358) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1359) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1360) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1361) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1362) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1363) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1364) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1365) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1366) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1367) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1368) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1369) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1370) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1371) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1372) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1373) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1374) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1375) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1376) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1377) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1378) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1379) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1380) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1381) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1382) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1383) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1384) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1385) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1386) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1387) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1388) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1389) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1390) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1391) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1392) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1393) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1394) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1395) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1396) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1397) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1398) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1399) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1400) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1401) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1402) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1403) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1404) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1405) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1406) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1407) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1408) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1409) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1410) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1411) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1412) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1413) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1414) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1415) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1416) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1417) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1418) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1419) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1420) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1421) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1422) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1423) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1424) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1425) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1426) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1427) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1428) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1429) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1430) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1431) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1432) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1433) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1434) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1435) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1436) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1437) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1438) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1439) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1440) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1441) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1442) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1443) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1444) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1445) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1446) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1447) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1448) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1449) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1450) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1451) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1452) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1453) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1454) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1455) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1456) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1457) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1458) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1459) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1460) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1461) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1462) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1463) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1464) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1465) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1466) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1467) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1468) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1469) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1470) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1471) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1472) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1473) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1474) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1475) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1476) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1477) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1478) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1479) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1480) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1481) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1482) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1483) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1484) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1485) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1486) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1487) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1488) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1489) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1490) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1491) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1492) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1493) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1494) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1495) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1496) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1497) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1498) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1499) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1500) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1501) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1502) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1503) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1504) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1505) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1506) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1507) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1508) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1509) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1510) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1511) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1512) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1513) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1514) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1515) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1516) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1517) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1518) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1519) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1520) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1521) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1522) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1523) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1524) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1525) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1526) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1527) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1528) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1529) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1530) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1531) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1532) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1533) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1534) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1535) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1536) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1537) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1538) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1539) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1540) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1541) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1542) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1543) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1544) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1545) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1546) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1547) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1548) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1549) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1550) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1551) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1552) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1553) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1554) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1555) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1556) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1557) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1558) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1559) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1560) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1561) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1562) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1563) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1564) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1565) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1566) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1567) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1568) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1569) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1570) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1571) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1572) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1573) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1574) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1575) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1576) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1577) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1578) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1579) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1580) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1581) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1582) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1583) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1584) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1585) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1586) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1587) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1588) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1589) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1590) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1591) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1592) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1593) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1594) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1595) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1596) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1597) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1598) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1599) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1600) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1601) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1602) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1603) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1604) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1605) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1606) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1607) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1608) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1609) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1610) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1611) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1612) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1613) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1614) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1615) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1616) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1617) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1618) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1619) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1620) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1621) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1622) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1623) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1624) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1625) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1626) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1627) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1628) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1629) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1630) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1631) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1632) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1633) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1634) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1635) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1636) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1637) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1638) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1639) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1640) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1641) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1642) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1643) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1644) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1645) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1646) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1647) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1648) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1649) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1650) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1651) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1652) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1653) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1654) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1655) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1656) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1657) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1658) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1659) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1660) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1661) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1662) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1663) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1664) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1665) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1666) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1667) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1668) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1669) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1670) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1671) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1672) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1673) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1674) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1675) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1676) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1677) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1678) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1679) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1680) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1681) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1682) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1683) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1684) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1685) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1686) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1687) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1688) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1689) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1690) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1691) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1692) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1693) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1694) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1695) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1696) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1697) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1698) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1699) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1700) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1701) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1702) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1703) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1704) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1705) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1706) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1707) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1708) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1709) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1710) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1711) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1712) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1713) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1714) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1715) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1716) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1717) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1718) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1719) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1720) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1721) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1722) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1723) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1724) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1725) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1726) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1727) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1728) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial01_ParisFiller.json ================================================ { "sstore_combinations_initial01_Paris" : { "_info" : { "comment" : "sstore 0 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 850) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 851) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 852) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 853) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 854) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 855) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 856) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 857) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 858) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 859) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 860) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 861) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 862) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 863) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 864) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 865) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 866) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 867) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 868) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 869) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 870) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 871) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 872) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 873) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 874) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 875) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 876) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 877) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 878) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 879) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 880) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 881) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 882) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 883) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 884) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 885) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 886) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 887) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 888) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 889) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 890) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 891) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 892) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 893) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 894) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 895) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 896) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 897) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 898) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 899) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 900) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 901) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 902) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 903) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 904) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 905) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 906) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 907) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 908) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 909) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 910) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 911) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 912) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 913) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 914) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 915) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 916) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 917) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 918) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 919) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 920) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 921) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 922) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 923) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 924) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 925) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 926) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 927) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 928) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 929) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 930) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 931) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 932) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 933) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 934) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 935) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 936) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 937) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 938) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 939) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 940) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 941) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 942) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 943) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 944) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 945) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 946) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 947) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 948) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 949) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 950) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 951) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 952) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 953) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 954) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 955) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 956) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 957) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 958) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 959) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 960) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 961) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 962) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 963) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 964) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 965) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 966) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 967) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 968) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 969) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 970) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 971) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 972) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 973) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 974) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 975) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 976) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 977) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 978) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 979) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 980) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 981) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 982) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 983) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 984) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 985) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 986) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 987) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 988) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 989) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 990) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 991) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 992) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 993) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 994) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 995) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 996) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 997) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 998) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 999) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1000) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1001) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1002) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1003) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1004) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1005) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1006) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1007) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1008) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1009) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1010) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1011) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1012) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1013) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1014) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1015) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1016) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1017) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1018) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1019) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1020) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1021) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1022) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1023) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1024) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1025) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1026) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1027) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1028) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1029) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1030) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1031) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1032) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1033) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1034) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1035) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1036) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1037) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1038) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1039) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1040) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1041) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1042) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1043) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1044) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1045) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1046) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1047) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1048) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1049) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1050) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1051) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1052) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1053) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1054) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1055) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1056) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1057) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1058) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1059) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1060) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1061) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1062) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1063) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1064) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1065) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1066) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1067) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1068) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1069) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1070) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1071) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1072) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1073) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1074) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1075) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1076) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1077) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1078) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1079) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1080) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1081) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1082) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1083) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1084) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1085) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1086) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1087) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1088) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1089) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1090) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1091) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1092) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1093) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1094) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1095) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1096) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1097) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1098) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1099) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1100) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1101) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1102) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1103) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1104) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1105) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1106) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1107) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1108) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1109) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1110) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1111) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1112) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1113) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1114) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1115) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1116) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1117) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1118) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1119) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1120) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1121) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1122) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1123) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1124) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1125) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1126) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1127) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1128) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1129) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1130) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1131) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1132) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1133) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1134) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1135) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1136) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1137) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1138) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1139) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1140) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1141) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1142) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1143) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1144) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1145) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1146) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1147) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1148) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1149) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1150) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1151) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1152) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1153) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1154) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1155) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1156) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1157) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1158) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1159) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1160) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1161) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1162) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1163) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1164) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1165) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1166) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1167) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1168) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1169) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1170) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1171) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1172) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1173) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1174) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1175) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1176) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1177) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1178) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1179) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1180) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1181) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1182) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1183) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1184) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1185) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1186) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1187) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1188) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1189) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1190) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1191) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1192) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1193) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1194) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1195) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1196) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1197) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1198) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1199) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1200) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1201) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1202) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1203) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1204) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1205) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1206) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1207) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1208) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1209) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1210) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1211) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1212) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1213) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1214) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1215) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1216) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1217) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1218) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1219) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1220) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1221) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1222) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1223) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1224) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1225) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1226) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1227) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1228) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1229) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1230) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1231) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1232) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1233) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1234) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1235) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1236) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1237) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1238) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1239) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1240) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1241) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1242) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1243) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1244) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1245) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1246) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1247) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1248) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1249) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1250) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1251) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1252) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1253) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1254) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1255) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1256) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1257) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1258) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1259) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1260) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1261) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1262) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1263) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1264) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1265) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1266) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1267) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1268) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1269) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1270) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1271) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1272) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1273) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1274) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1275) (DELEGATECALL 300000 0xb000000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb000000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial10_2_ParisFiller.json ================================================ { "sstore_combinations_initial10_2_Paris" : { "_info" : { "comment" : "sstore 1 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 426) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 427) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 428) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 429) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 430) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 431) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 432) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 433) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 434) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 435) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 436) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 437) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 438) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 439) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 440) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 441) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 442) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 443) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 444) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 445) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 446) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 447) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 448) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 449) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 450) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 451) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 452) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 453) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 454) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 455) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 456) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 457) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 458) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 459) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 460) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 461) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 462) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 463) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 464) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 465) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 466) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 467) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 468) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 469) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 470) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 471) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 472) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 473) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 474) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 475) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 476) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 477) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 478) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 479) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 480) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 481) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 482) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 483) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 484) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 485) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 486) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 487) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 488) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 489) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 490) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 491) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 492) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 493) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 494) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 495) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 496) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 497) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 498) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 499) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 500) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 501) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 502) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 503) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 504) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 505) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 506) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 507) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 508) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 509) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 510) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 511) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 512) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 513) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 514) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 515) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 516) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 517) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 518) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 519) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 520) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 521) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 522) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 523) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 524) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 525) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 526) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 527) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 528) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 529) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 530) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 531) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 532) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 533) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 534) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 535) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 536) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 537) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 538) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 539) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 540) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 541) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 542) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 543) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 544) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 545) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 546) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 547) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 548) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 549) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 550) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 551) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 552) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 553) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 554) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 555) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 556) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 557) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 558) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 559) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 560) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 561) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 562) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 563) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 564) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 565) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 566) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 567) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 568) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 569) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 570) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 571) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 572) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 573) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 574) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 575) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 576) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 577) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 578) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 579) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 580) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 581) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 582) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 583) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 584) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 585) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 586) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 587) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 588) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 589) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 590) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 591) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 592) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 593) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 594) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 595) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 596) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 597) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 598) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 599) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 600) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 601) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 602) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 603) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 604) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 605) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 606) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 607) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 608) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 609) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 610) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 611) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 612) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 613) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 614) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 615) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 616) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 617) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 618) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 619) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 620) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 621) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 622) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 623) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 624) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 625) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 626) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 627) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 628) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 629) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 630) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 631) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 632) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 633) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 634) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 635) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 636) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 637) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 638) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 639) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 640) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 641) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 642) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 643) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 644) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 645) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 646) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 647) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 648) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 649) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 650) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 651) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 652) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 653) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 654) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 655) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 656) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 657) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 658) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 659) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 660) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 661) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 662) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 663) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 664) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 665) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 666) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 667) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 668) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 669) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 670) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 671) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 672) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 673) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 674) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 675) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 676) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 677) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 678) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 679) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 680) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 681) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 682) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 683) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 684) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 685) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 686) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 687) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 688) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 689) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 690) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 691) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 692) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 693) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 694) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 695) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 696) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 697) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 698) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 699) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 700) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 701) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 702) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 703) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 704) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 705) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 706) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 707) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 708) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 709) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 710) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 711) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 712) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 713) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 714) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 715) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 716) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 717) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 718) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 719) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 720) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 721) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 722) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 723) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 724) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 725) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 726) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 727) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 728) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 729) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 730) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 731) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 732) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 733) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 734) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 735) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 736) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 737) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 738) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 739) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 740) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 741) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 742) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 743) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 744) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 745) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 746) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 747) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 748) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 749) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 750) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 751) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 752) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 753) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 754) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 755) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 756) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 757) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 758) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 759) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 760) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 761) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 762) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 763) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 764) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 765) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 766) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 767) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 768) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 769) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 770) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 771) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 772) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 773) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 774) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 775) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 776) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 777) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 778) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 779) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 780) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 781) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 782) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 783) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 784) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 785) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 786) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 787) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 788) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 789) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 790) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 791) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 792) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 793) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 794) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 795) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 796) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 797) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 798) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 799) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 800) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 801) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 802) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 803) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 804) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 805) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 806) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 807) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 808) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 809) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 810) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 811) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 812) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 813) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 814) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 815) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 816) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 817) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 818) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 819) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 820) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 821) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 822) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 823) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 824) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 825) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 826) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 827) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 828) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 829) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 830) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 831) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 832) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 833) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 834) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 835) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 836) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 837) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 838) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 839) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 840) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 841) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 842) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 843) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 844) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 845) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 846) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 847) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 848) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 849) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial10_ParisFiller.json ================================================ { "sstore_combinations_initial10_Paris" : { "_info" : { "comment" : "sstore 1 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 2) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 3) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 4) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 5) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 6) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 7) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 8) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 9) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 10) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 11) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 12) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 13) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 14) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 15) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 16) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 17) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 18) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 19) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 20) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 21) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 22) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 23) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 24) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 25) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 26) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 27) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 28) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 29) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 30) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 31) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 32) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 33) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 34) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 35) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 36) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 37) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 38) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 39) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 40) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 41) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 42) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 43) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 44) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 45) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 46) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 47) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 48) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 49) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 50) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 51) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 52) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 53) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 54) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 55) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 56) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 57) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 58) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 59) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 60) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 61) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 62) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 63) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 64) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 65) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 66) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 67) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 68) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 69) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 70) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 71) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 72) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 73) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 74) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 75) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 76) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 77) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 78) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 79) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 80) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 81) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 82) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 83) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 84) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 85) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 86) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 87) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 88) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 89) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 90) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 91) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 92) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 93) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 94) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 95) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 96) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 97) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 98) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 99) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 100) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 101) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 102) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 103) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 104) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 105) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 106) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 107) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 108) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 109) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 110) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 111) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 112) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 113) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 114) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 115) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 116) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 117) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 118) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 119) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 120) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 121) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 122) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 123) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 124) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 125) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 126) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 127) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 128) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 129) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 130) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 131) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 132) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 133) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 134) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 135) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 136) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 137) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 138) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 139) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 140) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 141) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 142) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 143) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 144) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 145) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 146) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 147) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 148) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 149) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 150) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 151) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 152) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 153) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 154) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 155) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 156) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 157) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 158) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 159) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 160) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 161) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 162) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 163) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 164) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 165) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 166) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 167) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 168) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 169) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 170) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 171) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 172) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 173) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 174) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 175) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 176) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 177) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 178) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 179) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 180) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 181) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 182) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 183) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 184) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 185) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 186) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 187) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 188) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 189) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 190) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 191) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 192) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 193) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 194) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 195) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 196) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 197) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 198) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 199) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 200) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 201) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 202) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 203) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 204) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 205) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 206) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 207) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 208) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 209) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 210) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 211) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 212) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 213) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 214) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 215) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 216) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 217) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 218) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 219) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 220) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 221) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 222) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 223) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 224) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 225) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 226) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 227) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 228) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 229) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 230) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 231) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 232) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 233) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 234) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 235) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 236) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 237) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 238) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 239) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 240) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 241) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 242) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 243) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 244) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 245) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 246) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 247) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 248) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 249) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 250) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 251) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 252) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 253) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 254) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 255) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 256) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 257) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 258) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 259) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 260) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 261) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 262) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 263) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 264) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 265) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 266) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 267) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 268) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 269) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 270) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 271) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 272) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 273) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 274) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 275) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 276) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 277) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 278) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 279) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 280) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 281) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 282) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 283) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 284) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 285) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 286) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 287) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 288) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 289) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 290) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 291) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 292) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 293) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 294) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 295) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 296) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 297) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 298) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 299) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 300) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 301) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 302) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 303) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 304) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 305) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 306) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 307) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 308) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 309) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 310) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 311) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 312) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 313) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 314) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 315) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 316) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 317) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 318) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 319) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 320) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 321) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 322) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 323) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 324) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 325) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 326) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 327) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 328) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 329) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 330) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 331) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 332) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 333) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 334) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 335) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 336) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 337) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 338) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 339) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 340) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 341) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 342) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 343) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 344) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 345) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 346) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 347) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 348) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 349) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 350) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 351) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 352) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 353) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 354) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 355) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 356) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 357) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 358) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 359) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 360) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 361) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 362) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 363) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 364) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 365) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 366) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 367) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 368) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 369) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 370) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 371) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 372) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 373) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 374) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 375) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 376) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 377) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 378) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 379) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 380) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 381) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 382) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 383) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 384) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 385) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 386) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 387) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 388) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 389) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 390) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 391) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 392) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 393) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 394) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 395) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 396) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 397) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 398) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 399) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 400) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 401) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 402) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 403) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 404) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 405) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 406) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 407) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 408) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 409) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 410) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 411) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 412) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 413) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 414) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 415) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 416) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 417) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 418) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 419) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 420) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 421) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 422) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 423) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 424) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 425) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial11_2_ParisFiller.json ================================================ { "sstore_combinations_initial11_2_Paris" : { "_info" : { "comment" : "sstore 1 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 1276) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1277) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1278) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1279) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1280) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1281) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1282) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1283) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1284) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1285) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1286) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1287) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1288) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1289) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1290) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1291) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1292) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1293) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1294) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1295) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1296) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1297) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1298) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1299) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1300) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1301) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1302) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1303) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1304) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1305) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1306) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1307) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1308) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1309) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1310) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1311) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1312) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1313) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1314) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1315) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1316) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1317) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1318) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1319) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1320) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1321) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1322) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1323) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1324) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1325) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1326) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1327) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1328) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1329) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1330) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1331) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1332) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1333) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1334) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1335) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1336) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1337) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1338) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1339) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1340) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1341) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1342) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1343) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1344) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1345) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1346) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1347) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1348) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1349) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1350) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1351) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1352) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1353) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1354) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1355) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1356) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1357) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1358) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1359) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1360) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1361) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1362) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1363) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1364) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1365) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1366) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1367) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1368) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1369) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1370) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1371) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1372) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1373) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1374) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1375) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1376) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1377) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1378) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1379) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1380) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1381) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1382) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1383) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1384) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1385) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1386) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1387) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1388) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1389) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1390) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1391) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1392) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1393) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1394) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1395) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1396) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1397) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1398) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1399) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1400) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1401) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1402) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1403) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1404) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1405) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1406) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1407) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1408) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1409) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1410) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1411) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1412) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1413) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1414) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1415) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1416) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1417) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1418) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1419) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1420) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1421) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1422) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1423) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1424) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1425) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1426) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1427) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1428) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1429) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1430) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1431) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1432) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1433) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1434) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1435) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1436) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1437) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1438) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1439) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1440) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1441) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1442) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1443) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1444) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1445) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1446) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1447) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1448) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1449) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1450) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1451) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1452) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1453) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1454) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1455) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1456) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1457) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1458) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1459) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1460) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1461) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1462) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1463) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1464) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1465) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1466) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1467) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1468) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1469) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1470) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1471) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1472) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1473) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1474) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1475) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1476) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1477) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1478) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1479) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1480) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1481) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1482) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1483) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1484) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1485) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1486) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1487) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1488) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1489) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1490) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1491) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1492) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1493) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1494) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1495) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1496) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1497) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1498) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1499) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1500) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1501) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1502) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1503) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1504) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1505) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1506) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1507) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1508) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1509) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1510) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1511) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1512) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1513) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1514) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1515) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1516) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1517) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1518) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1519) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1520) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1521) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1522) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1523) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1524) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1525) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1526) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1527) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1528) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1529) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1530) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1531) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1532) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1533) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1534) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1535) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1536) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1537) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1538) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1539) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1540) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1541) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1542) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1543) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1544) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1545) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1546) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1547) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1548) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1549) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1550) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1551) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1552) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1553) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1554) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1555) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1556) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1557) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1558) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1559) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1560) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1561) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1562) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1563) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1564) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1565) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1566) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1567) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1568) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1569) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1570) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1571) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1572) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1573) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1574) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1575) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1576) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1577) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1578) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1579) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1580) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1581) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1582) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1583) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1584) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1585) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1586) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1587) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1588) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1589) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1590) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1591) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1592) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1593) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1594) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1595) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1596) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1597) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1598) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1599) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1600) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1601) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1602) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1603) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1604) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1605) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1606) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1607) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1608) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1609) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1610) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1611) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1612) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1613) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1614) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1615) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1616) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1617) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1618) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1619) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1620) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1621) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1622) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1623) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1624) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1625) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1626) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1627) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1628) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1629) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1630) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1631) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1632) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1633) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1634) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1635) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1636) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1637) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1638) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1639) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1640) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1641) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1642) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1643) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1644) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1645) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1646) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1647) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1648) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1649) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1650) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1651) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1652) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1653) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1654) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1655) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1656) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1657) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1658) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1659) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1660) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1661) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1662) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1663) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1664) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1665) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1666) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1667) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1668) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1669) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1670) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1671) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1672) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1673) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1674) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1675) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1676) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1677) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1678) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1679) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1680) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1681) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1682) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1683) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1684) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1685) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1686) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1687) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1688) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1689) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1690) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1691) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1692) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1693) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1694) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1695) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1696) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1697) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1698) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1699) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1700) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1701) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1702) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1703) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1704) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1705) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1706) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1707) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1708) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1709) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1710) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1711) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1712) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1713) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1714) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1715) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1716) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1717) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1718) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1719) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1720) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1721) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1722) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1723) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1724) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1725) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1726) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1727) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1728) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial11_ParisFiller.json ================================================ { "sstore_combinations_initial11_Paris" : { "_info" : { "comment" : "sstore 1 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 850) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 851) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 852) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 853) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 854) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 855) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 856) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 857) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 858) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 859) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 860) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 861) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 862) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 863) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 864) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 865) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 866) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 867) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 868) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 869) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 870) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 871) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 872) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 873) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 874) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 875) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 876) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 877) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 878) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 879) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 880) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 881) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 882) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 883) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 884) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 885) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 886) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 887) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 888) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 889) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 890) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 891) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 892) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 893) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 894) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 895) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 896) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 897) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 898) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 899) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 900) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 901) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 902) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 903) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 904) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 905) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 906) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 907) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 908) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 909) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 910) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 911) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 912) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 913) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 914) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 915) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 916) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 917) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 918) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 919) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 920) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 921) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 922) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 923) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 924) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 925) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 926) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 927) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 928) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 929) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 930) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 931) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 932) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 933) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 934) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 935) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 936) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 937) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 938) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 939) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 940) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 941) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 942) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 943) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 944) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 945) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 946) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 947) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 948) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 949) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 950) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 951) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 952) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 953) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 954) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 955) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 956) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 957) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 958) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 959) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 960) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 961) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 962) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 963) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 964) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 965) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 966) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 967) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 968) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 969) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 970) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 971) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 972) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 973) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 974) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 975) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 976) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 977) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 978) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 979) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 980) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 981) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 982) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 983) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 984) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 985) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 986) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 987) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 988) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 989) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 990) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 991) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 992) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 993) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 994) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 995) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 996) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 997) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 998) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 999) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1000) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1001) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1002) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1003) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1004) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1005) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1006) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1007) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1008) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1009) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1010) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1011) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1012) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1013) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1014) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1015) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1016) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1017) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1018) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1019) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1020) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1021) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1022) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1023) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1024) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1025) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1026) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1027) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1028) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1029) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1030) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1031) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1032) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1033) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1034) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1035) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1036) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1037) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1038) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1039) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1040) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1041) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1042) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1043) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1044) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1045) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1046) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1047) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1048) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1049) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1050) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1051) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1052) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1053) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1054) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1055) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1056) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1057) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1058) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1059) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1060) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1061) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1062) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1063) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1064) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1065) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1066) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1067) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1068) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1069) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1070) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1071) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1072) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1073) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1074) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1075) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1076) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1077) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1078) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1079) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1080) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1081) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1082) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1083) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1084) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1085) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1086) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1087) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1088) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1089) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1090) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1091) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1092) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1093) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1094) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1095) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1096) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1097) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1098) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1099) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1100) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1101) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1102) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1103) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1104) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1105) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1106) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1107) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1108) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1109) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1110) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1111) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1112) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1113) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1114) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1115) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1116) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1117) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1118) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1119) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1120) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1121) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1122) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1123) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1124) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1125) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1126) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1127) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1128) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1129) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1130) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1131) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1132) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1133) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1134) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1135) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1136) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1137) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1138) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1139) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1140) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1141) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1142) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1143) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1144) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1145) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1146) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1147) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1148) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1149) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1150) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1151) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1152) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1153) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1154) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1155) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1156) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1157) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1158) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1159) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1160) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1161) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1162) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1163) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1164) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1165) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1166) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1167) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1168) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1169) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1170) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1171) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1172) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1173) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1174) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1175) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1176) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1177) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1178) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1179) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1180) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1181) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1182) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1183) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1184) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1185) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1186) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1187) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1188) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1189) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1190) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1191) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1192) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1193) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1194) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1195) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1196) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1197) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1198) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1199) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1200) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1201) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1202) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1203) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1204) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1205) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1206) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1207) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1208) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1209) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1210) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1211) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1212) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1213) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1214) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1215) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1216) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1217) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1218) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1219) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1220) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1221) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1222) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1223) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1224) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1225) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1226) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1227) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1228) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1229) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1230) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1231) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1232) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1233) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1234) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1235) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1236) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1237) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1238) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1239) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1240) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1241) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1242) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1243) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1244) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1245) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1246) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1247) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1248) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1249) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1250) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1251) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1252) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1253) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1254) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1255) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1256) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1257) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1258) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1259) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1260) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1261) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1262) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1263) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1264) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1265) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1266) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1267) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1268) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1269) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1270) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1271) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1272) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1273) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1274) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1275) (DELEGATECALL 300000 0xb100000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb100000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial20_2_ParisFiller.json ================================================ { "sstore_combinations_initial20_2_Paris" : { "_info" : { "comment" : "sstore 2 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 426) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 427) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 428) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 429) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 430) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 431) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 432) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 433) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 434) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 435) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 436) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 437) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 438) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 439) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 440) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 441) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 442) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 443) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 444) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 445) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 446) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 447) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 448) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 449) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 450) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 451) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 452) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 453) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 454) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 455) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 456) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 457) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 458) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 459) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 460) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 461) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 462) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 463) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 464) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 465) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 466) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 467) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 468) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 469) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 470) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 471) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 472) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 473) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 474) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 475) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 476) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 477) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 478) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 479) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 480) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 481) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 482) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 483) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 484) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 485) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 486) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 487) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 488) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 489) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 490) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 491) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 492) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 493) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 494) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 495) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 496) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 497) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 498) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 499) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 500) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 501) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 502) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 503) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 504) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 505) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 506) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 507) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 508) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 509) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 510) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 511) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 512) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 513) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 514) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 515) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 516) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 517) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 518) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 519) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 520) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 521) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 522) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 523) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 524) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 525) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 526) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 527) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 528) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 529) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 530) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 531) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 532) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 533) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 534) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 535) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 536) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 537) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 538) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 539) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 540) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 541) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 542) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 543) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 544) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 545) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 546) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 547) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 548) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 549) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 550) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 551) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 552) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 553) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 554) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 555) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 556) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 557) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 558) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 559) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 560) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 561) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 562) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 563) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 564) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 565) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 566) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 567) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 568) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 569) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 570) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 571) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 572) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 573) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 574) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 575) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 576) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 577) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 578) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 579) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 580) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 581) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 582) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 583) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 584) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 585) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 586) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 587) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 588) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 589) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 590) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 591) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 592) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 593) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 594) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 595) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 596) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 597) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 598) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 599) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 600) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 601) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 602) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 603) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 604) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 605) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 606) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 607) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 608) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 609) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 610) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 611) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 612) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 613) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 614) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 615) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 616) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 617) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 618) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 619) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 620) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 621) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 622) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 623) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 624) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 625) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 626) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 627) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 628) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 629) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 630) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 631) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 632) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 633) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 634) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 635) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 636) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 637) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 638) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 639) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 640) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 641) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 642) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 643) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 644) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 645) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 646) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 647) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 648) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 649) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 650) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 651) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 652) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 653) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 654) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 655) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 656) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 657) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 658) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 659) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 660) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 661) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 662) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 663) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 664) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 665) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 666) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 667) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 668) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 669) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 670) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 671) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 672) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 673) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 674) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 675) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 676) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 677) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 678) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 679) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 680) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 681) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 682) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 683) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 684) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 685) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 686) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 687) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 688) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 689) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 690) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 691) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 692) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 693) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 694) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 695) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 696) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 697) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 698) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 699) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 700) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 701) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 702) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 703) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 704) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 705) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 706) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 707) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 708) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 709) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 710) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 711) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 712) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 713) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 714) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 715) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 716) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 717) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 718) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 719) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 720) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 721) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 722) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 723) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 724) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 725) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 726) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 727) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 728) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 729) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 730) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 731) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 732) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 733) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 734) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 735) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 736) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 737) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 738) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 739) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 740) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 741) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 742) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 743) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 744) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 745) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 746) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 747) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 748) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 749) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 750) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 751) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 752) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 753) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 754) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 755) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 756) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 757) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 758) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 759) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 760) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 761) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 762) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 763) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 764) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 765) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 766) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 767) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 768) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 769) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 770) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 771) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 772) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 773) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 774) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 775) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 776) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 777) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 778) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 779) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 780) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 781) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 782) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 783) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 784) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 785) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 786) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 787) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 788) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 789) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 790) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 791) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 792) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 793) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 794) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 795) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 796) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 797) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 798) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 799) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 800) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 801) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 802) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 803) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 804) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 805) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 806) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 807) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 808) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 809) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 810) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 811) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 812) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 813) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 814) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 815) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 816) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 817) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 818) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 819) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 820) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 821) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 822) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 823) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 824) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 825) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 826) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 827) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 828) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 829) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 830) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 831) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 832) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 833) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 834) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 835) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 836) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 837) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 838) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 839) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 840) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 841) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 842) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 843) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 844) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 845) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 846) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 847) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 848) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 849) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial20_ParisFiller.json ================================================ { "sstore_combinations_initial20_Paris" : { "_info" : { "comment" : "sstore 2 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 2) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 3) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 4) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 5) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 6) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 7) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 8) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 9) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 10) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 11) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 12) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 13) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 14) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 15) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 16) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 17) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 18) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 19) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 20) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 21) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 22) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 23) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 24) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 25) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 26) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 27) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 28) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 29) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 30) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 31) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 32) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 33) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 34) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 35) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 36) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 37) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 38) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 39) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 40) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 41) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 42) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 43) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 44) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 45) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 46) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 47) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 48) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 49) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 50) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 51) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 52) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 53) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 54) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 55) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 56) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 57) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 58) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 59) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 60) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 61) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 62) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 63) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 64) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 65) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 66) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 67) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 68) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 69) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 70) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 71) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 72) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 73) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 74) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 75) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 76) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 77) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 78) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 79) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 80) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 81) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 82) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 83) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 84) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 85) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 86) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 87) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 88) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 89) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 90) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 91) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 92) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 93) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 94) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 95) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 96) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 97) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 98) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 99) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 100) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 101) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 102) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 103) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 104) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 105) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 106) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 107) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 108) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 109) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 110) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 111) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 112) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 113) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 114) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 115) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 116) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 117) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 118) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 119) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 120) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 121) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 122) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 123) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 124) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 125) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 126) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 127) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 128) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 129) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 130) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 131) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 132) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 133) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 134) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 135) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 136) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 137) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 138) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 139) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 140) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 141) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 142) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 143) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 144) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 145) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 146) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 147) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 148) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 149) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 150) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 151) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 152) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 153) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 154) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 155) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 156) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 157) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 158) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 159) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 160) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 161) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 162) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 163) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 164) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 165) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 166) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 167) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 168) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 169) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 170) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 171) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 172) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 173) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 174) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 175) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 176) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 177) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 178) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 179) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 180) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 181) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 182) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 183) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 184) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 185) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 186) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 187) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 188) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 189) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 190) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 191) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 192) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 193) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 194) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 195) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 196) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 197) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 198) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 199) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 200) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 201) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 202) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 203) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 204) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 205) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 206) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 207) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 208) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 209) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 210) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 211) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 212) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 213) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 214) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 215) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 216) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 217) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 218) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 219) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 220) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 221) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 222) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 223) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 224) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 225) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 226) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 227) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 228) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 229) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 230) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 231) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 232) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 233) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 234) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 235) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 236) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 237) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 238) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 239) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 240) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 241) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 242) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 243) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 244) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 245) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 246) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 247) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 248) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 249) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 250) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 251) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 252) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 253) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 254) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 255) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 256) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 257) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 258) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 259) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 260) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 261) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 262) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 263) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 264) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 265) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 266) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 267) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 268) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 269) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 270) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 271) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 272) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 273) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 274) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 275) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 276) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 277) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 278) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 279) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 280) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 281) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 282) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 283) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 284) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 285) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 286) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 287) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 288) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 289) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 290) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 291) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 292) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 293) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 294) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 295) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 296) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 297) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 298) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 299) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 300) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 301) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 302) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 303) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 304) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 305) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 306) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 307) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 308) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 309) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 310) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 311) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 312) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 313) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 314) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 315) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 316) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 317) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 318) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 319) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 320) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 321) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 322) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 323) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 324) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 325) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 326) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 327) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 328) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 329) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 330) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 331) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 332) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 333) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 334) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 335) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 336) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 337) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 338) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 339) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 340) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 341) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 342) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 343) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 344) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 345) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 346) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 347) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 348) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 349) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 350) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 351) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 352) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 353) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 354) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 355) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 356) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 357) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 358) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 359) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 360) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 361) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 362) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 363) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 364) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 365) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 366) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 367) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 368) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 369) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 370) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 371) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 372) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 373) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 374) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 375) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 376) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 377) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 378) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 379) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 380) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 381) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 382) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 383) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 384) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 385) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 386) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 387) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 388) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 389) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 390) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 391) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 392) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 393) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 394) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 395) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 396) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 397) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 398) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 399) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 400) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 401) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 402) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 403) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 404) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 405) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 406) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 407) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 408) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 409) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 410) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 411) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 412) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 413) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 414) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 415) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 416) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 417) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 418) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 419) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 420) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 421) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 422) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 423) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 424) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 425) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial21_2_ParisFiller.json ================================================ { "sstore_combinations_initial21_2_Paris" : { "_info" : { "comment" : "sstore 2 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 1276) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1277) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1278) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1279) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1280) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1281) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1282) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1283) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1284) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1285) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1286) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1287) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1288) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1289) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1290) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1291) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1292) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1293) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1294) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1295) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1296) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1297) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1298) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1299) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1300) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1301) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1302) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1303) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1304) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1305) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1306) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1307) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1308) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1309) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1310) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1311) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1312) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1313) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1314) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1315) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1316) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1317) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1318) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1319) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1320) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1321) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1322) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1323) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1324) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1325) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1326) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1327) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1328) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1329) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1330) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1331) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1332) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1333) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1334) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1335) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1336) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1337) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1338) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1339) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1340) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1341) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1342) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1343) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1344) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1345) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1346) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1347) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1348) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1349) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1350) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1351) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1352) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1353) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1354) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1355) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1356) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1357) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1358) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1359) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1360) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1361) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1362) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1363) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1364) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1365) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1366) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1367) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1368) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1369) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1370) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1371) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1372) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1373) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1374) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1375) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1376) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1377) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1378) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1379) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1380) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1381) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1382) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1383) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1384) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1385) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1386) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1387) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1388) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1389) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1390) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1391) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1392) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1393) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1394) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1395) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1396) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1397) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1398) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1399) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1400) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1401) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1402) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1403) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1404) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1405) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1406) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1407) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1408) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1409) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1410) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1411) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1412) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1413) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1414) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1415) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1416) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1417) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1418) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1419) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1420) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1421) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1422) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1423) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1424) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1425) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1426) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1427) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1428) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1429) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1430) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1431) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1432) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1433) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1434) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1435) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1436) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1437) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1438) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1439) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1440) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1441) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1442) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1443) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1444) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1445) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1446) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1447) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1448) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1449) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1450) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1451) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1452) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1453) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1454) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1455) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1456) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1457) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1458) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1459) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1460) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1461) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1462) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1463) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1464) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1465) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1466) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1467) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1468) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1469) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1470) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1471) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1472) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1473) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1474) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1475) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1476) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1477) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1478) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1479) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1480) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1481) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1482) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1483) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1484) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1485) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1486) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1487) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1488) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1489) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1490) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1491) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1492) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1493) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1494) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1495) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1496) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1497) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1498) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1499) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1500) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1501) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1502) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1503) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1504) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1505) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1506) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1507) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1508) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1509) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1510) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1511) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1512) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1513) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1514) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1515) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1516) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1517) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1518) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1519) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1520) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1521) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1522) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1523) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1524) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1525) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1526) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1527) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1528) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1529) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1530) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1531) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1532) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1533) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1534) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1535) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1536) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1537) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1538) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1539) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1540) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1541) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1542) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1543) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1544) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1545) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1546) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1547) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1548) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1549) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1550) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1551) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1552) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1553) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1554) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1555) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1556) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1557) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1558) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1559) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1560) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1561) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1562) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1563) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1564) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1565) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1566) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1567) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1568) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1569) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1570) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1571) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1572) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1573) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1574) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1575) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1576) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1577) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1578) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1579) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1580) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1581) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1582) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1583) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1584) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1585) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1586) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1587) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1588) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1589) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1590) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1591) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1592) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1593) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1594) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1595) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1596) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1597) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1598) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1599) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1600) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1601) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1602) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1603) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1604) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1605) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1606) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1607) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1608) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1609) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1610) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1611) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1612) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1613) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1614) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1615) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1616) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1617) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1618) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1619) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1620) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1621) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1622) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1623) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1624) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1625) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1626) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1627) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1628) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1629) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1630) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1631) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1632) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1633) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1634) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1635) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1636) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1637) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1638) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1639) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1640) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1641) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1642) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1643) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1644) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1645) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1646) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1647) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1648) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1649) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1650) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1651) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1652) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1653) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1654) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1655) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1656) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1657) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1658) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1659) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1660) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1661) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1662) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1663) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1664) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1665) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1666) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1667) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1668) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1669) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1670) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1671) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1672) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1673) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1674) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1675) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1676) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1677) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1678) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1679) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1680) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1681) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1682) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1683) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1684) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1685) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1686) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1687) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1688) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1689) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1690) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1691) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1692) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1693) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1694) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1695) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1696) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1697) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1698) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1699) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1700) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1701) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1702) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1703) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1704) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1705) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1706) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1707) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1708) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1709) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1710) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1711) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1712) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1713) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1714) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1715) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1716) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1717) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1718) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1719) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1720) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1721) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1722) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1723) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1724) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1725) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1726) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1727) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1728) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTimeConsuming/sstore_combinations_initial21_ParisFiller.json ================================================ { "sstore_combinations_initial21_Paris" : { "_info" : { "comment" : "sstore 2 -> {calltype} -> change to {0, 1, 2} |-> {calltype} -> {non, oog, revert} |-> {calltype} -> change to {0, 1, 2} |-> {non, oog, revert}", "pytest_marks": ["slow"] }, "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "2000000000000000000000000000000000000000" : { "//comment" : "indicates that call finished without OOG", "storage" : { "0x01" : "0x01" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b000000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { } }, "b100000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "b200000000000000000000000000000000000000" : { "balance" : "", "code" : "{ [[0]] 0 [[1]] 1 [[2]] 2 }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } }, "1000000000000000000000000000000000000000" : { "balance" : "10", "//code" : "do nothing", "code" : "", "nonce" : "", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01" } }, "2000000000000000000000000000000000000000" : { "balance" : "", "//code" : "runs oog", "code" : "{ [[1]] 1 [[1]] 0 [[2]] 1 [[2]] 0 [[3]] 1 [[3]] 0 [[4]] 1 [[4]] 0 [[5]] 1 [[5]] 0 [[6]] 1 [[6]] 0 [[7]] 1 [[7]] 0 [[8]] 1 [[8]] 0 [[9]] 1 [[9]] 0 [[10]] 1 [[10]] 0 [[11]] 1 [[11]] 0 [[12]] 1 [[12]] 0 [[13]] 1 [[13]] 0 [[14]] 1 [[14]] 0 [[15]] 1 [[15]] 0 [[16]] 1 [[16]] 0 [[1]] 1 }", "nonce" : "", "storage" : { } }, "3000000000000000000000000000000000000000" : { "balance" : "", "//code" : "do revert", "code" : "{ (REVERT 0 32) }", "nonce" : "", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x02" : "0x02" } } }, "transaction" : { "data" : [ "{ (MSTORE 100 850) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 851) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 852) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 853) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 854) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 855) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 856) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 857) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 858) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 859) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 860) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 861) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 862) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 863) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 864) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 865) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 866) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 867) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 868) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 869) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 870) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 871) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 872) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 873) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 874) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 875) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 876) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 877) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 878) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 879) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 880) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 881) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 882) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 883) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 884) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 885) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 886) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 887) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 888) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 889) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 890) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 891) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 892) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 893) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 894) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 895) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 896) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 897) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 898) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 899) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 900) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 901) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 902) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 903) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 904) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 905) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 906) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 907) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 908) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 909) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 910) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 911) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 912) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 913) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 914) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 915) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 916) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 917) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 918) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 919) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 920) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 921) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 922) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 923) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 924) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 925) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 926) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 927) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 928) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 929) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 930) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 931) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 932) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 933) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 934) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 935) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 936) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 937) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 938) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 939) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 940) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 941) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 942) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 943) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 944) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 945) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 946) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 947) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 948) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 949) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 950) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 951) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 952) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 953) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 954) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 955) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 956) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 957) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 958) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 959) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 960) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 961) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 962) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 963) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 964) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 965) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 966) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 967) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 968) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 969) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 970) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 971) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 972) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 973) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 974) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 975) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 976) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 977) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 978) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 979) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 980) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 981) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 982) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 983) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 984) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 985) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 986) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 987) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 988) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 989) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 990) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 991) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 992) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 993) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 994) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 995) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 996) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 997) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 998) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 999) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1000) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1001) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1002) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1003) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1004) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1005) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1006) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1007) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1008) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1009) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1010) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1011) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1012) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1013) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1014) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1015) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1016) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1017) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1018) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1019) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1020) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1021) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1022) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1023) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1024) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1025) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1026) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1027) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1028) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1029) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1030) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1031) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1032) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1033) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1034) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1035) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1036) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1037) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1038) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1039) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1040) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1041) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1042) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1043) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1044) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1045) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1046) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1047) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1048) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1049) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1050) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1051) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1052) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1053) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1054) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1055) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1056) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1057) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1058) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1059) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1060) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1061) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1062) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1063) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1064) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1065) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1066) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1067) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1068) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1069) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1070) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1071) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1072) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1073) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1074) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1075) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1076) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1077) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1078) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1079) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1080) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1081) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1082) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1083) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1084) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1085) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1086) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1087) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1088) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1089) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1090) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1091) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1092) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1093) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1094) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1095) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1096) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1097) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1098) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1099) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1100) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1101) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1102) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1103) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1104) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1105) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1106) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1107) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1108) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1109) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1110) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1111) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1112) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1113) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1114) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1115) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1116) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1117) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1118) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1119) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1120) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1121) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1122) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1123) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1124) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1125) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1126) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1127) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1128) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1129) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1130) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1131) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1132) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1133) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1134) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1135) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1136) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1137) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1138) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1139) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1140) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1141) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1142) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1143) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1144) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1145) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1146) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1147) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1148) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1149) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1150) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1151) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1152) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1153) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1154) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1155) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1156) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1157) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1158) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1159) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1160) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1161) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1162) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1163) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1164) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1165) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1166) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1167) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1168) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1169) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1170) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1171) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1172) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1173) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1174) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1175) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1176) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1177) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1178) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1179) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1180) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1181) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1182) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1183) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1184) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1185) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1186) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1187) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1188) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1189) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1190) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1191) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1192) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1193) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1194) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1195) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1196) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1197) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1198) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1199) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1200) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1201) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1202) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1203) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1204) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1205) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1206) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1207) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1208) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1209) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1210) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1211) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1212) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1213) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1214) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1215) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1216) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1217) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1218) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1219) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1220) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1221) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1222) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1223) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1224) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1225) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1226) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1227) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1228) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1229) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1230) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1231) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1232) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1233) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1234) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1235) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1236) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1237) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1238) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1239) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1240) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1241) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1242) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1243) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1244) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1245) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1246) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1247) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1248) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1249) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1250) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1251) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1252) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1253) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1254) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1255) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1256) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1257) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1258) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1259) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1260) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (STATICCALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1261) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1262) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1263) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1264) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1265) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1266) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALLCODE 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1267) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1268) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1269) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (DELEGATECALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1270) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1271) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1272) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (STATICCALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1273) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x1000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1274) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x2000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } ", "{ (MSTORE 100 1275) (DELEGATECALL 300000 0xb200000000000000000000000000000000000000 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALLCODE 300000 0xb200000000000000000000000000000000000000 0 0 32 0 0) (CALL 300000 0x3000000000000000000000000000000000000000 0 0 0 0 0) (CALL 600000 0x2000000000000000000000000000000000000000 0 0 0 0 0) } " ], "gasLimit" : [ "2000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/ContractStoreClearsOOGFiller.json ================================================ { "ContractStoreClearsOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } } } } ], "pre" : { "" : { "balance" : "30000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 12)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "23000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/ContractStoreClearsSuccessFiller.json ================================================ { "ContractStoreClearsSuccess" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "10", "storage" : { } } } } ], "pre" : { "" : { "balance" : "140000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 0)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "130000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/CreateMessageRevertedFiller.json ================================================ { "CreateMessageReverted" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "0", "nonce" : "0" } } } ], "pre" : { "" : { "balance" : "30000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{(MSTORE 0 0x600c600055) (CREATE 0 27 5)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "21882" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/CreateMessageSuccessFiller.json ================================================ { "CreateMessageSuccess" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100", "nonce" : "1" }, "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "storage" : { "0x00" : "0x0c" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "400000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code" : "{(MSTORE 0 0x600c600055) (CREATE 0 27 5)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "131882" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/CreateTransactionSuccessFiller.json ================================================ { "CreateTransactionSuccess" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "100", "code" : "0x60e060020a600035048063f8a8fd6d14601457005b601a6020565b60006000f35b56", "nonce" : "1", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x602280600c6000396000f30060e060020a600035048063f8a8fd6d14601457005b601a6020565b60006000f35b56" ], "gasLimit" : [ "70000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/EmptyTransaction3Filler.json ================================================ { "EmptyTransaction3" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "code" : "0x" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//balance" : "47000", "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "55000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/HighGasLimitFiller.json ================================================ { "HighGasLimit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "900" } } } ], "pre" : { "" : { "balance" : "115792089237316195423570985008687907853269984665640564039457584007913129639935", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x3240349548983454" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "900" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/HighGasPriceParisFiller.yml ================================================ # Send a transaction where gasLimit * gasPrice > 256bit # i.e. the 257th bit is set, and the value formed by the remaining 256 least significant bits # is a number less than or equal to the balance. --- HighGasPriceParis: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: : balance: 1000000000 code: '' nonce: 0 storage: {} : balance: 10 code: '' nonce: 0 storage: {} transaction: data: - '' gasLimit: - 21000 # gasPrice = (2**256 + 1000000000) // 21000 # ((gasPrice * 21000) & (2**256-1)) + value < balance gasPrice: 5513909011300771210646237381366090850155713555506693525688456381329244268 nonce: 0 secretKey: "" to: '' value: - 1 expect: - network: - '>=Cancun' expectException: ">=EIP158" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW" result: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba: shouldnotexist : "true" : balance : "10" ================================================ FILE: tests/static/state_tests/stTransactionTest/InternalCallHittingGasLimit2Filler.json ================================================ { "InternalCallHittingGasLimit2" : { "env" : { "currentCoinbase" : "2adf5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "47766", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALL 25000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{[[1]]55}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "47766" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/InternalCallHittingGasLimitFiller.json ================================================ { "InternalCallHittingGasLimit" : { "env" : { "currentCoinbase" : "2adf5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "22000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { } } } } ], "pre" : { "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000", "code" : "{ (CALL 5000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{[[1]]55}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "21100" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/InternalCallHittingGasLimitSuccessFiller.json ================================================ { "InternalCallHittingGasLimitSuccess" : { "env" : { "currentCoinbase" : "2adf5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "220000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "storage" : { "0x01" : "0x37" } } } } ], "pre" : { "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{ (CALL 25000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "code" : "{[[1]]55}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "150000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/InternalCallStoreClearsOOGFiller.json ================================================ { "InternalCallStoreClearsOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "" : { "nonce" : "1" }, "" : { "balance" : "20" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 0)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "//" : "gas = 19 going OOG, gas = 20 fine", "balance" : "10", "code" : "{ (CALL 40000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/InternalCallStoreClearsSuccessFiller.json ================================================ { "InternalCallStoreClearsSuccess" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "storage" : { } }, "" : { "nonce" : "1" }, "" : { "balance" : "19" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 0)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "//" : "gas = 19 going OOG, gas = 20 fine", "balance" : "10", "code" : "{ (CALL 100000 1 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "160000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/NoSrcAccount1559Filler.yml ================================================ # Send type 2 (EIP-1559) transactions from a non existent address NoSrcAccount1559: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: # The empty address is a94f5374fce5edbc8e2a8697c15331677e6ebf0b. # Just a random address to call : balance: 0 code: :raw 0x00 nonce: 0 storage: {} transaction: # Regardless of access list, these fields specify this is type 2 (EIP-1559) maxPriorityFeePerGas: 10 maxFeePerGas: 2000 data: # Empty access list - data: :raw 0x00 accessList: [] # Access list, but no storage keys - data: :raw 0x00 accessList: - address: storageKeys: [] # Access list with a storage key - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 gasLimit: - 21000 # Minimum - 210000 # Higher than minimum - 0 # We have enough ETH for this one nonce: 0 secretKey: "" to: value: - 0 - 1 expect: # Transaction type 2 starts at London # Not enough ETH for executing the transaction - network: - '>=Cancun' indexes: data: !!int -1 gas: !!int 0 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" #Nimbus get different exception type here "=Cancun' indexes: data: !!int -1 gas: !!int 1 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "=Cancun' indexes: data: !!int -1 gas: !!int 2 value: !!int 1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun' indexes: data: !!int -1 gas: !!int 2 value: !!int 0 expectException: ">=Cancun" : "TransactionException.INTRINSIC_GAS_TOO_LOW" ": balance: 0 nonce: 0x60A7 code: 0x storage: {} transaction: # Regardless of access list, these fields specify this is type 2 (EIP-1559) maxPriorityFeePerGas: 10 maxFeePerGas: 2000 data: # Empty access list - data: :raw 0x00 accessList: [] # Access list, but no storage keys - data: :raw 0x00 accessList: - address: 0xd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0 storageKeys: [] # Access list with a storage key - data: :raw 0x00 accessList: - address: 0xd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0 storageKeys: - 0x00 - 0x01 gasLimit: - 21000 # Minimum - 210000 # Higher than minimum - 0 # We have enough ETH for this one nonce: 0 secretKey: "" to: "" # Account creation txn value: - 0 - 1 expect: # Transaction type 2 starts at London # Not enough ETH for executing the transaction - network: - '>=Cancun' indexes: data: !!int -1 gas: !!int 0 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun' indexes: data: !!int -1 gas: !!int 1 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "=Cancun' indexes: data: !!int -1 gas: !!int 2 value: !!int 1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun' indexes: data: !!int -1 gas: !!int 2 value: !!int 0 expectException: ">=Cancun" : "TransactionException.INTRINSIC_GAS_TOO_LOW" ": balance: 0 code: :raw 0x00 nonce: 0 storage: {} transaction: data: # Nothing - 0x # Some junk data - :raw 0xDEAD60A7 # The accessList makes this transaction type 1. # Empty access list - data: :raw 0x00 accessList: [] # Access list, but no storage keys - data: :raw 0x00 accessList: - address: storageKeys: [] # Access list with a storage key - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 gasLimit: - 21000 # Minimum - 210000 # Higher than minimum - 0 # We have enough ETH for this one gasPrice: 100 nonce: 0 secretKey: "" to: "" value: - 0 - 1 expect: # Not enough ETH for executing the transaction - network: - '>=Cancun' indexes: data: !!int 0 gas: !!int 0 value: !!int -1 expectException: ">=Homestead" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" #nimbus have different exception type here "=Cancun' indexes: data: !!int 1 gas: !!int 0 value: !!int -1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" #nimbus have different exception type here result: {} - network: - '>=Cancun' indexes: data: 0-1 gas: !!int 1 value: !!int -1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" result: {} # Not enough ETH for the value we transfer - network: - '>=Cancun' indexes: data: 0-1 gas: !!int 2 value: !!int 1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" #nimbus have different exception type here result: {} # Gas limit of zero, should be at least 21000 - network: - '>=Cancun' indexes: data: 0-1 gas: !!int 2 value: !!int 0 expectException: ">=Frontier" : "TransactionException.INTRINSIC_GAS_TOO_LOW" result: {} # Transaction type 1 starts at Berlin # Not enough ETH for executing the transaction - network: - '>=Cancun' indexes: data: 2-4 gas: !!int 0 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun' indexes: data: 2-4 gas: !!int 1 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "=Cancun' indexes: data: 2-4 gas: !!int 2 value: !!int 1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun' indexes: data: 2-4 gas: !!int 2 value: !!int 0 expectException: ">=Cancun" : "TransactionException.INTRINSIC_GAS_TOO_LOW" ": balance: 0 code: :raw 0x00 nonce: 0 storage: {} transaction: data: # Nothing - 0x # Some junk data - :raw 0xDEAD60A7 # The accessList makes this transaction type 1. # Empty access list - data: :raw 0x00 accessList: [] # Access list, but no storage keys - data: :raw 0x00 accessList: - address: storageKeys: [] # Access list with a storage key - data: :raw 0x00 accessList: - address: storageKeys: - 0x00 - 0x01 gasLimit: - 21000 # Minimum - 210000 # Higher than minimum - 0 # We have enough ETH for this one gasPrice: 100 nonce: 0 secretKey: "" to: value: - 0 - 1 expect: # Not enough ETH for executing the transaction - network: - '>=Cancun' indexes: data: !!int 0 gas: 0-1 value: !!int -1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" result: {} - network: - '>=Cancun' indexes: data: !!int 1 gas: !!int 0 value: !!int -1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" # Nimbus check triggers a different exception in this case result: {} - network: - '>=Cancun' indexes: data: !!int 1 gas: !!int 1 value: !!int -1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" result: {} # Not enough ETH for the value we transfer - network: - '>=Cancun' indexes: data: 0-1 gas: !!int 2 value: !!int 1 expectException: ">=Frontier" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" result: {} # Gas limit of zero, should be at least 21000 - network: - '>=Cancun' indexes: data: 0-1 gas: !!int 2 value: !!int 0 expectException: ">=Frontier" : "TransactionException.INTRINSIC_GAS_TOO_LOW" result: {} # Transaction type 1 starts at Berlin # Not enough ETH for executing the transaction - network: - '>=Cancun' indexes: data: !!int 2 gas: !!int 0 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" # Nimbus check triggers a different exception in this case "=Cancun' indexes: data: !!int 2 gas: !!int 1 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "=Cancun' indexes: data: !!int 3 gas: !!int 0 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" # Nimbus check triggers a different exception in this case "=Cancun' indexes: data: !!int 3 gas: !!int 1 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "=Cancun' indexes: data: !!int 4 gas: !!int 0 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" # Nimbus check triggers a different exception in this case "=Cancun' indexes: data: !!int 4 gas: !!int 1 value: !!int -1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS" "=Cancun' indexes: data: 2-4 gas: !!int 2 value: !!int 1 expectException: ">=Cancun" : "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS|TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun' indexes: data: 2-4 gas: !!int 2 value: !!int 0 expectException: ">=Cancun" : "TransactionException.INTRINSIC_GAS_TOO_LOW" "=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1", "storage": { "0x00": "0x38600060013960015160005560006000f3000000000000000000000000000000" } } } }, { "//comment": "RETURNDATASIZE: not supported in earlier networks", "indexes" : { "data" : 37, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1" } } }, { "//comment": "RETURNDATACOPY: not supported in earlier networks", "indexes" : { "data" : 38, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1" } } }, { "indexes" : { "data" : 120, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "2" } } }, { "indexes" : { "data" : 124, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1" } } }, { "indexes" : { "data" : 125, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1" } } }, { "indexes" : { "data" : 126, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "shouldnotexist": "1" } } }, { "indexes" : { "data" : 127, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "shouldnotexist": "1" } } }, { "indexes" : { "data" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1" } } }, { "indexes" : { "data" : [":label invalid_first_byte_ef"], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "shouldnotexist": "1" } } }, { "indexes" : { "data" : [":label side_effects"], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage": { "1": "0", "0" : "1" } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "nonce": "1" } } }, { "indexes" : { "data" : [":label side_effects_invalid_opcode"], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage": {} }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "shouldnotexist": "1" } } }, { "indexes" : { "data" : [":label side_effects_return_ef"], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage": {} }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f": { "shouldnotexist": "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code": "0x", "nonce": "0", "storage": { "0x00": "0x00" } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "code": ":yul berlin { sstore(0, 1) }", "nonce": "0", "storage": {} }, "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", "//code": "{ 0xffff (RETURN 0x0 0x4) }", "code": ":raw 0x61ffff5060046000f3", "nonce": "1", "storage": {} } }, "transaction" : { "data" : [ ":raw 0x0060016000f3", ":raw 0x60016001015060006000f3", ":raw 0x60016001025060006000f3", ":raw 0x60016001035060006000f3", ":raw 0x60016001045060006000f3", ":raw 0x60016001055060006000f3", ":raw 0x60016001065060006000f3", ":raw 0x60016001075060006000f3", ":raw 0x600160016001085060006000f3", ":raw 0x600160016001095060006000f3", ":raw 0x600160010a5060006000f3", ":raw 0x600160010b5060006000f3", ":raw 0x60016001105060006000f3", ":raw 0x60016001115060006000f3", ":raw 0x60016001125060006000f3", ":raw 0x60016001135060006000f3", ":raw 0x60016001145060006000f3", ":raw 0x6000155060006000f3", ":raw 0x60006000165060006000f3", ":raw 0x60006000175060006000f3", ":raw 0x60006000185060006000f3", ":raw 0x6000195060006000f3", ":raw 0x67805020100804020160001a5060006000f3", ":raw 0x600060002060006000f3", ":raw 0x305060006000f3", ":raw 0x6000315060006000f3", ":raw 0x325060006000f3", ":raw 0x335060006000f3", ":raw 0x345060006000f3", ":raw 0x6000355060006000f3", ":raw 0x365060006000f3", ":raw 0x6000600060003760006000f3", ":raw 0x385060006000f3", ":raw 0x38600060013960015160005560006000f3", ":raw 0x3a5060006000f3", ":raw 0x60003b5060006000f3", ":raw 0x6014600060007310000000000000000000000000000000000000103c60006000f3", ":raw 0x3d5060006000f3", ":raw 0x6000600060003e60006000f3", ":raw 0x60005060005060006000f3", ":raw 0x6000515060006000f3", ":raw 0x600060005260006000f3", ":raw 0x60ff60005360006000f3", ":raw 0x6000545060006000f3", ":raw 0x600160015560006000f3", ":raw 0x600456005b60006000f3", ":raw 0x6001600657005b60006000f3", ":raw 0x585060006000f3", ":raw 0x595060006000f3", ":raw 0x5a5060006000f3", ":raw 0x5b60006000f3", ":raw 0x60ff5060006000f3", ":raw 0x61ffff5060006000f3", ":raw 0x62ffffff5060006000f3", ":raw 0x63ffffffff5060006000f3", ":raw 0x64ffffffffff5060006000f3", ":raw 0x65ffffffffffff5060006000f3", ":raw 0x66ffffffffffffff5060006000f3", ":raw 0x67ffffffffffffffff5060006000f3", ":raw 0x68ffffffffffffffffff5060006000f3", ":raw 0x69ffffffffffffffffffff5060006000f3", ":raw 0x6affffffffffffffffffffff5060006000f3", ":raw 0x6bffffffffffffffffffffffff5060006000f3", ":raw 0x6cffffffffffffffffffffffffff5060006000f3", ":raw 0x6dffffffffffffffffffffffffffff5060006000f3", ":raw 0x6effffffffffffffffffffffffffffff5060006000f3", ":raw 0x6fffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x70ffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x71ffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x72ffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x73ffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x74ffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x75ffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x76ffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x77ffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x78ffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x79ffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x7affffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5060006000f3", ":raw 0x60ff80505060006000f3", ":raw 0x60ff60ff8150505060006000f3", ":raw 0x60ff60ff60ff825050505060006000f3", ":raw 0x60ff60ff60ff60ff83505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff8450505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff855050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff86505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff8750505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff885050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff89505050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff8a50505050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff8b5050505050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff8c505050505050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff8d50505050505050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff8e5050505050505050505050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff8f505050505050505050505050505050505060006000f3", ":raw 0x60ff60ff90505060006000f3", ":raw 0x60ff60ff60ff9150505060006000f3", ":raw 0x60ff60ff60ff60ff925050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff93505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff9450505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff955050505050505060006000f3", ":raw 0x60ff60ff60ff60ff60ff60ff60ff60ff96505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff9750505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff985050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff99505050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff9a50505050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff9b5050505050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff9c505050505050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff9d50505050505050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff9e5050505050505050505050505050505060006000f3", ":raw 0x600060ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff60ff9f505050505050505050505050505050505060006000f3", ":raw 0x60006000a060006000f3", ":raw 0x60ff60006000a160006000f3", ":raw 0x60ff60ff60006000a260006000f3", ":raw 0x60ff60ff60ff60006000a360006000f3", ":raw 0x60ff60ff60ff60ff60006000a460006000f3", ":raw 0x6000600060fff05060006000f3", ":raw 0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66064f15060006000f3", ":raw 0x60006000600060006000730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66064f25060006000f3", ":raw 0x60006000f3", ":raw 0x6000600060006000730f572e5295c57f15886f9b263e2f6d2d6c7b5ec6620186a0f45060006000f3", ":raw 0x6000600060006000730f572e5295c57f15886f9b263e2f6d2d6c7b5ec6612710fa5060006000f3", ":raw 0x60006000fd60006000f3", ":raw 0x32ff", ":label invalid_first_byte_ef :raw 0xef", ":label side_effects :yul berlin { pop(call(50000, 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b, 0, 0, 0, 0, 0)) }", ":label side_effects_invalid_opcode :yul berlin { pop(call(50000, 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b, 0, 0, 0, 0, 0)) invalid() }", ":label side_effects_return_ef :yul berlin { pop(call(50000, 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b, 0, 0, 0, 0, 0)) mstore8(0, 0xef) return(0, 1) }" ], "gasLimit" : [ "400000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/OverflowGasRequire2Filler.json ================================================ { "OverflowGasRequire2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "0x7fffffffffffffff", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : ["Cancun"], "result" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6357f", "nonce" : "1" } } }, { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : ["Prague"], "result" : { "" : { "//comment" : "TODO: why prague gas eaten has changed exactly this value?", "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5f97f", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x3240349548983454" ], "gasLimit" : [ "1152921504606846976" ], "gasPrice" : "80", "nonce" : "0", "secretKey" : "", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/PointAtInfinityECRecoverFiller.yml ================================================ # Call ECRecover on invalid msg, v, r, s --- PointAtInfinityECRecover: env: currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba currentDifficulty: '0x020000' currentGasLimit: '89128960' currentBaseFee: '10' currentNumber: '1' currentTimestamp: '1000' pre: : balance: '0xffffffff' code: ':yul berlin { mstore(0, 0x6b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9) mstore(32, 0x1b) mstore(64, 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798) mstore(96, 0x6b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9) sstore(0, call(1000000, 1, 0, 0, 128, 0, 32)) sstore(1, mload(0)) }' nonce: 0 storage: {} : balance: '0xde0b6b3a7640000' code: '' nonce: 0 storage: {} transaction: data: - '' gasLimit: - 10000000 gasPrice: 10 nonce: 0 secretKey: "" to: '' value: - 0 expect: - indexes: data: !!int -1 gas: !!int -1 value: !!int -1 network: - '>=Cancun' result: : nonce: 1 : nonce: 0 storage: 0: 1 1: '0x6b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9' ================================================ FILE: tests/static/state_tests/stTransactionTest/StoreClearsAndInternalCallStoreClearsOOGFiller.json ================================================ { "StoreClearsAndInternalCallStoreClearsOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "" : { "nonce" : "1" }, "" : { "balance" : "20", "storage" : { "0x04" : "0x0c" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 0)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "" : { "balance" : "500000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0) (CALL 20000 1 0 0 0 0) }", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/StoreClearsAndInternalCallStoreClearsSuccessFiller.json ================================================ { "StoreClearsAndInternalCallStoreClearsSuccess" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "1", "storage" : { } }, "" : { "balance" : "19", "storage" : { "0x04" : "0x0c" } } } } ], "pre" : { "" : { "balance" : "0", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0)(SSTORE 4 0)(SSTORE 5 0)(SSTORE 6 0)(SSTORE 7 0)(SSTORE 8 0)(SSTORE 9 0)}", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c", "0x05" : "0x0c", "0x06" : "0x0c", "0x07" : "0x0c", "0x08" : "0x0c", "0x09" : "0x0c" } }, "" : { "balance" : "500000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "//" : "gas = 19 going OOG, gas = 20 fine", "balance" : "10", "code" : "{(SSTORE 0 0)(SSTORE 1 0)(SSTORE 2 0)(SSTORE 3 0) (CALL 50000 1 0 0 0 0) }", "nonce" : "0", "storage" : { "0x00" : "0x0c", "0x01" : "0x0c", "0x02" : "0x0c", "0x03" : "0x0c", "0x04" : "0x0c" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/StoreGasOnCreateFiller.json ================================================ { "StoreGasOnCreate" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "f1ecf98489fa9ed60a664fc4998db699cfa39d40" : { "storage" : { "//comment" : "CREATE price changed in Shanghai", "//comment" : "Due to eip-3860 (https://eips.ethereum.org/EIPS/eip-3860) pay extra 2 gas for each 32 bytes of initcode", "0xfd" : "0x012f39" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "400000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "// code" : "{ [[0]] (GAS) }", "code" : "{ (MSTORE 0 0x5a60fd55) (CREATE 0 28 4)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "131882" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/SuicidesAndInternalCallSuicidesBonusGasAtCallFailedFiller.json ================================================ { "SuicidesAndInternalCallSuicidesBonusGasAtCallFailed" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "20", "code" : "0x6001ff00" } } } ], "pre" : { "0000000000000000000000000000000000000000" : { "balance" : "0", "code" : "{(SELFDESTRUCT 0x0000000000000000000000000000000000000001)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10", "code" : "{(CALL 0 0x0000000000000000000000000000000000000000 0 0 0 0 0) (SELFDESTRUCT 0)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "50000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/SuicidesAndInternalCallSuicidesBonusGasAtCallFiller.json ================================================ { "SuicidesAndInternalCallSuicidesBonusGasAtCall" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "shouldnotexist" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "0x6000600060006000600160006000f1506000ff00", "storage" : {} } } } ], "pre" : { "0000000000000000000000000000000000000000" : { "balance" : "0", "code" : "{(SELFDESTRUCT 0x0000000000000000000000000000000000000001)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10", "code" : "{(CALL 0 0x0000000000000000000000000000000000000000 1 0 0 0 0) (SELFDESTRUCT 0)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "50000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/SuicidesAndInternalCallSuicidesOOGFiller.json ================================================ { "SuicidesAndInternalCallSuicidesOOG" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "0" }, "" : { "nonce" : "1" }, "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "0", "code" : "{(SELFDESTRUCT 0x0000000000000000000000000000000000000001)}", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "{(CALL 22000 1 0 0 0 0) (SELFDESTRUCT 0)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "50000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/SuicidesAndInternalCallSuicidesSuccessFiller.json ================================================ { "SuicidesAndInternalCallSuicidesSuccess" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : 0, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : 1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "0000000000000000000000000000000000000001" : { "balance" : "1", "storage" : { } } } } ], "pre" : { "0000000000000000000000000000000000000000" : { "balance" : "0", "code" : "{(SELFDESTRUCT 0x0000000000000000000000000000000000000001)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "180000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000", "code" : "{(CALL (CALLDATALOAD 0) 0x0000000000000000000000000000000000000000 1 0 0 0 0) (SELFDESTRUCT 0)}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000055f0", ":raw 0x000000000000000000000000000000000000000000000000000000000000aaf0" ], "gasLimit" : [ "150000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/SuicidesAndSendMoneyToItselfEtherDestroyedFiller.json ================================================ { "SuicidesAndSendMoneyToItselfEtherDestroyed" : { "env" : { "currentCoinbase" : "", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "1010", "code" : "0x73ff00", "nonce" : "0" } } } ], "pre" : { "" : { "balance" : "0", "code" : "", "nonce" : "1", "storage" : { } }, "" : { "balance" : "122000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000", "code" : "{(SELFDESTRUCT )}", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "31700" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/SuicidesStopAfterSuicideFiller.json ================================================ { "SuicidesStopAfterSuicide" : { "env" : { "currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "storage" : {} }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "0x6000ff600060006000600060006000617530f100", "storage" : {} } } } ], "pre" : { "0000000000000000000000000000000000000000" : { "balance" : "1110", "code" : "{(SELFDESTRUCT 0x0000000000000000000000000000000000000001)}", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "122000000", "code" : "", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "10000", "code" : "{(SELFDESTRUCT 0) (CALL 30000 0x0000000000000000000000000000000000000000 0 0 0 0 0) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "83700" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "10" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/TransactionDataCosts652Filler.json ================================================ { "TransactionDataCosts652" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "10000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x00000000000000000000112233445566778f32" ], "gasLimit" : [ "22000", "72000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/TransactionSendingToEmptyFiller.json ================================================ { "TransactionSendingToEmpty" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "code" : "0x" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "53000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/TransactionSendingToZeroFiller.json ================================================ { "TransactionSendingToZero" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "0000000000000000000000000000000000000000" : { "balance" : "1" }, "" : { "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "100000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "25000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "0000000000000000000000000000000000000000", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/TransactionToAddressh160minusOneFiller.json ================================================ { "TransactionToAddressh160minusOne" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "ffffffffffffffffffffffffffffffffffffffff" : { "balance" : "100" } } } ], "pre" : { "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "22000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "0xffffffffffffffffffffffffffffffffffffffff", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/TransactionToItselfFiller.json ================================================ { "TransactionToItself" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "balance" : "999790000", "nonce" : "1" } } } ], "pre" : { "" : { "balance" : "1000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "25000" ], "gasPrice" : "10", "nonce" : "", "secretKey" : "", "to" : "", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stTransactionTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stTransitionTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stTransitionTest/createNameRegistratorPerTxsAfterFiller.json ================================================ { "createNameRegistratorPerTxsAfter" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x0186a0", "code" : "0x396000f3006000355415600957005b60", "nonce" : "0x01", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155601080600c6000396000f3006000355415600957005b60203560003555" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stTransitionTest/createNameRegistratorPerTxsAtFiller.json ================================================ { "createNameRegistratorPerTxsAt" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x0186a0", "code" : "0x396000f3006000355415600957005b60", "nonce" : "0x01", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155601080600c6000396000f3006000355415600957005b60203560003555" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stTransitionTest/createNameRegistratorPerTxsBeforeFiller.json ================================================ { "createNameRegistratorPerTxsBefore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x0186a0", "code" : "0x396000f3006000355415600957005b60", "nonce" : "0x01", "storage" : { "0x01" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6001600155601080600c6000396000f3006000355415600957005b60203560003555" ], "gasLimit" : [ "200000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100000" ] } } } ================================================ FILE: tests/static/state_tests/stTransitionTest/delegatecallAfterTransitionFiller.json ================================================ { "delegatecallAfterTransition" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 500000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{[[ 1 ]] (CALLER) [[ 2 ]] (CALLVALUE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stTransitionTest/delegatecallAtTransitionFiller.json ================================================ { "delegatecallAtTransition" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 500000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{[[ 1 ]] (CALLER) [[ 2 ]] (CALLVALUE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stTransitionTest/delegatecallBeforeTransitionFiller.json ================================================ { "delegatecallBeforeTransition" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "30000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "storage" : { "0x00" : "0x01", "0x01" : "" } } } } ], "pre" : { "" : { "balance" : "1000000000000000000", "code" : "{ [[ 0 ]] (DELEGATECALL 500000 0 64 0 2 ) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "23", "code" : "{[[ 1 ]] (CALLER) [[ 2 ]] (CALLVALUE) }", "nonce" : "0", "storage" : { } }, "" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "3000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stWalletTest/dayLimitConstructionFiller.json ================================================ { "dayLimitConstruction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : [0,1], "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x01", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x00", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060409081526001600081815581805533600160a060020a0316600381905581526101026020529190912055620151804204610107556109b4806100456000396000f300606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "817083", "1217083" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/dayLimitConstructionOOGFiller.json ================================================ { "dayLimitConstructionOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//balance" : "0x0de0b6b3a75a8a75", "code" : "0x", "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060409081526001600081815581805533600160a060020a0316600381905581526101026020529190912055620151804204610107556109b4806100456000396000f300606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "0x04661a" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/dayLimitConstructionPartialFiller.json ================================================ { "dayLimitConstructionPartial" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x01", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060409081526001600081815581805533600160a060020a0316600381905581526101026020529190912055620151804204610107556109b4806100456000396000f300606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "817082" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/dayLimitResetSpentTodayFiller.json ================================================ { "dayLimitResetSpentToday" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0xc8", "code" : "0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x02", "0x0105" : "0x02", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x0105" : "0x02", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x5c52c2f5" ], "gasLimit" : [ "0x09b335" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/dayLimitSetDailyLimitFiller.json ================================================ { "dayLimitSetDailyLimit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0xc8", "code" : "0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x0105" : "0x02", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xb20d30a90000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit" : [ "0x09b335" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/dayLimitSetDailyLimitNoDataFiller.json ================================================ { "dayLimitSetDailyLimitNoData" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0xc8", "code" : "0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100985760e060020a6000350463173825d9811461009a5780632f54bf6e146100f65780634123cb6b1461011a5780635c52c2f5146101235780637065cb4814610154578063746c917114610188578063b20d30a914610191578063b75c7dc6146101c5578063ba51a6df146101f5578063c2cf732614610229578063f00d4b5d14610269578063f1736d86146102a2575b005b6100986004356000600036436040518084848082843750505090910190815260405190819003602001902090506105b9815b600160a060020a0333166000908152610102602052604081205481808083811415610719576108b0565b6102ac6004355b600160a060020a0316600090815261010260205260408120541190565b6102ac60015481565b6100986000364360405180848480828437505050909101908152604051908190036020019020905061070b816100cc565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610531816100cc565b6102ac60005481565b610098600435600036436040518084848082843750505090910190815260405190819003602001902090506106ff816100cc565b610098600435600160a060020a03331660009081526101026020526040812054908080838114156102be57610340565b61009860043560003643604051808484808284375050509091019081526040519081900360200190209050610678816100cc565b6102ac600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156106d1576106f5565b6100986004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506103ca816100cc565b6102ac6101055481565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156103405781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156103c3576103d8836100fd565b156103e357506103c5565b600160a060020a03841660009081526101026020526040812054925082141561040c57506103c5565b6103475b6101045460005b8181101561085f576101048054829081101561000257600091825260008051602061099483398151915201541461048a5761010480546101039160009184908110156100025760008051602061099483398151915201548252506020919091526040812081815560018101829055600201555b600101610417565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561052c5761053f826100fd565b1561054a575061052e565b610552610410565b60015460fa90106105675761056561057c565b505b60015460fa9010610492575061052e565b6106365b600060015b600154811015610899575b600154811080156105ac5750600281610100811015610002570154600014155b156108b95760010161058c565b156103c557600160a060020a0383166000908152610102602052604081205492508214156105e7575061052c565b6001600160005054036000600050541115610602575061052c565b600060028361010081101561000257508301819055600160a060020a03841681526101026020526040812055610578610410565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561052c5760015482111561068d575061052e565b600082905561069a610410565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106f057600094506106f5565b600194505b5050505092915050565b1561052c575061010555565b1561052e5760006101065550565b60008681526101036020526040812080549094509092508214156107a2578154835560018381018390556101048054918201808255828015829011610771578183600052602060002091820191016107719190610885565b5050506002840181905561010480548892908110156100025760009190915260008051602061099483398151915201555b506001820154600284900a908116600014156108b05760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a182546001901161089d57600086815261010360205260409020600201546101048054909190811015610002576040600090812060008051602061099483398151915292909201819055808255600180830182905560029092015595506108b09050565b61010480546000808355919091526103c590600080516020610994833981519152908101905b808211156108995760008155600101610885565b5090565b8254600019018355600183018054821790555b50505050919050565b5b600180541180156108dc57506001546002906101008110156100025701546000145b156108f057600180546000190190556108ba565b600154811080156109135750600154600290610100811015610002570154600014155b801561092d57506002816101008110156100025701546000145b1561098e57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61058156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xb20d30a9" ], "gasLimit" : [ "0x09b335" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedAddOwnerAddMyselfFiller.json ================================================ { "multiOwnedAddOwnerAddMyself" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7065cb48000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedAddOwnerFiller.json ================================================ { "multiOwnedAddOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x7065cb480000000000000000000000003fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeOwnerFiller.json ================================================ { "multiOwnedChangeOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x62ce4f671906be9a217487bb98e428b08e12100fb0007df10572ca00206e7d73" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xf00d4b5d000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeOwnerNoArgumentFiller.json ================================================ { "multiOwnedChangeOwnerNoArgument" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xf00d4b5d" ], "gasLimit" : [ "0x0bc2b7" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeOwner_fromNotOwnerFiller.json ================================================ { "multiOwnedChangeOwner_fromNotOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xf00d4b5d000000000000000000000000b94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeOwner_toIsOwnerFiller.json ================================================ { "multiOwnedChangeOwner_toIsOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xf00d4b5d000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeRequirementTo0Filler.json ================================================ { "multiOwnedChangeRequirementTo0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xba51a6df0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeRequirementTo1Filler.json ================================================ { "multiOwnedChangeRequirementTo1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xba51a6df0000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedChangeRequirementTo2Filler.json ================================================ { "multiOwnedChangeRequirementTo2" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xba51a6df0000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedConstructionCorrectFiller.json ================================================ { "multiOwnedConstructionCorrect" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x01", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060409081526001600081815581805533600160a060020a0316600381905581526101026020529182205561090a90819061003b90396000f300606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedConstructionNotEnoughGasFiller.json ================================================ { "multiOwnedConstructionNotEnoughGas" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "1000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//balance" : "0x0de0b6b3a760163f", "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060409081526001600081815581805533600160a060020a0316600381905581526101026020529182205561090a90819061003b90396000f300606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "0x03e9c1" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedConstructionNotEnoughGasPartialFiller.json ================================================ { "multiOwnedConstructionNotEnoughGasPartial" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "nonce" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "0x", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x606060409081526001600081815581805533600160a060020a0316600381905581526101026020529182205561090a90819061003b90396000f300606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "601249", "751249" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedIsOwnerFalseFiller.json ================================================ { "multiOwnedIsOwnerFalse" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x2f54bf6e000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedIsOwnerTrueFiller.json ================================================ { "multiOwnedIsOwnerTrue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x2f54bf6e000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedRemoveOwnerByNonOwnerFiller.json ================================================ { "multiOwnedRemoveOwnerByNonOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x173825d9000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedRemoveOwnerFiller.json ================================================ { "multiOwnedRemoveOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x7c01000000000000000000000000000000000000000000000000000000006000350463173825d981146100655780632f54bf6e146100b75780637065cb48146100e8578063b75c7dc614610105578063ba51a6df14610142578063f00d4b5d1461015f57005b6101816004356000604060003680828437909120905061046d815b73ffffffffffffffffffffffffffffffffffffffff3316600090815261010260205260408120548180808381141561058f57610586565b6101876004355b73ffffffffffffffffffffffffffffffffffffffff16600090815261010260205260408120541190565b610181600435604060003680828437909120905061037c81610080565b61018160043573ffffffffffffffffffffffffffffffffffffffff3316600090815261010260205260408120549080808381141561019157610213565b610181600435604060003680828437909120905061053381610080565b6101816004356024356000604060003680828437909120905061028681610080565b60006000f35b8060005260206000f35b5050506000828152610103602052604081206001810154600284900a929083168190111561021357815460018084018054919092018455849003905573ffffffffffffffffffffffffffffffffffffffff3316604090815260608690527fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b9080a15b5050505050565b015573ffffffffffffffffffffffffffffffffffffffff84811660008181526101026020526040808220829055928616808252908390208590559082526060527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9080a15b505b505050565b1561027f57610294836100be565b1561029f5750610281565b73ffffffffffffffffffffffffffffffffffffffff84166000908152610102602052604081205492508214156102d55750610281565b6102f75b6101045460005b8181101561080c5761010480548290811061085457005b73ffffffffffffffffffffffffffffffffffffffff8316600283610100811061021a57005b015560015473ffffffffffffffffffffffffffffffffffffffff831660008181526101026020908152604091829020939093559081527f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a15b505b50565b156103775761038a826100be565b156103955750610379565b61039d6102d9565b60015460fa901015156103b4576103b26103cb565b505b60015460fa901015156103f55750610379565b6104255b600060015b6001548110156106f7575b600154811080156107535750600281610100811061074c57005b6001805481019081905573ffffffffffffffffffffffffffffffffffffffff831690600290610100811061031c57005b5073ffffffffffffffffffffffffffffffffffffffff831660409081527f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da90602090a1505050565b156102815773ffffffffffffffffffffffffffffffffffffffff83166000908152610102602052604081205492508214156104a85750610377565b60016001600050540360006000505411156104c35750610377565b600060028361010081106104d357005b015573ffffffffffffffffffffffffffffffffffffffff8316600090815261010260205260408120556103c76102d9565b60408281527facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da90602090a15050565b15610377576001548211156105485750610379565b60008290556105046102d9565b82547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018355600183018054821790555b50505050919050565b600086815261010360205260408120805490945090925082141561061a5781548355600183810183905561010480549182018082558280158290116106a6578286527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe9081019082015b808211156106a457600081556001016105f9565b6000918252602090912001555b506001820154600284900a908116600014156105865773ffffffffffffffffffffffffffffffffffffffff3316604090815260608790527fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda9080a182546001901115156105555760008681526101036020526101048054604090922060020154909181106106c057005b505b505050600284018190556101048054889290811061060d57005b6000918252602080832090910182905587825261010390526040812081815560018181018390556002909101919091559450610586565b5090565b01546000145b1561076057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b60018054118015610701575060015460029061010081106106fb57005b0154600014155b1561072f576001016103db565b600154811080156107845750600154600290610100811061077d57005b0154600014155b801561079f5750600281610100811061079957005b01546000145b156107b85760015460029061010081106107bd57005b01555b6103d0565b015460028261010081106107cd57005b015580610102600060028361010081106107e357005b01548152602081019190915260400160009081209190915560015460029061010081106107b557005b61010480546000808355919091527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe908101905b8082111561027f5760008155600101610840565b60009182526020822001541415156108a6576101048054610103916000918490811061087c57005b60009182526020808320909101548352820192909252604001812081815560018101829055600201555b6001016102e056", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x7c01000000000000000000000000000000000000000000000000000000006000350463173825d981146100655780632f54bf6e146100b75780637065cb48146100e8578063b75c7dc614610105578063ba51a6df14610142578063f00d4b5d1461015f57005b6101816004356000604060003680828437909120905061046d815b73ffffffffffffffffffffffffffffffffffffffff3316600090815261010260205260408120548180808381141561058f57610586565b6101876004355b73ffffffffffffffffffffffffffffffffffffffff16600090815261010260205260408120541190565b610181600435604060003680828437909120905061037c81610080565b61018160043573ffffffffffffffffffffffffffffffffffffffff3316600090815261010260205260408120549080808381141561019157610213565b610181600435604060003680828437909120905061053381610080565b6101816004356024356000604060003680828437909120905061028681610080565b60006000f35b8060005260206000f35b5050506000828152610103602052604081206001810154600284900a929083168190111561021357815460018084018054919092018455849003905573ffffffffffffffffffffffffffffffffffffffff3316604090815260608690527fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b9080a15b5050505050565b015573ffffffffffffffffffffffffffffffffffffffff84811660008181526101026020526040808220829055928616808252908390208590559082526060527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9080a15b505b505050565b1561027f57610294836100be565b1561029f5750610281565b73ffffffffffffffffffffffffffffffffffffffff84166000908152610102602052604081205492508214156102d55750610281565b6102f75b6101045460005b8181101561080c5761010480548290811061085457005b73ffffffffffffffffffffffffffffffffffffffff8316600283610100811061021a57005b015560015473ffffffffffffffffffffffffffffffffffffffff831660008181526101026020908152604091829020939093559081527f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a15b505b50565b156103775761038a826100be565b156103955750610379565b61039d6102d9565b60015460fa901015156103b4576103b26103cb565b505b60015460fa901015156103f55750610379565b6104255b600060015b6001548110156106f7575b600154811080156107535750600281610100811061074c57005b6001805481019081905573ffffffffffffffffffffffffffffffffffffffff831690600290610100811061031c57005b5073ffffffffffffffffffffffffffffffffffffffff831660409081527f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da90602090a1505050565b156102815773ffffffffffffffffffffffffffffffffffffffff83166000908152610102602052604081205492508214156104a85750610377565b60016001600050540360006000505411156104c35750610377565b600060028361010081106104d357005b015573ffffffffffffffffffffffffffffffffffffffff8316600090815261010260205260408120556103c76102d9565b60408281527facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da90602090a15050565b15610377576001548211156105485750610379565b60008290556105046102d9565b82547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018355600183018054821790555b50505050919050565b600086815261010360205260408120805490945090925082141561061a5781548355600183810183905561010480549182018082558280158290116106a6578286527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe9081019082015b808211156106a457600081556001016105f9565b6000918252602090912001555b506001820154600284900a908116600014156105865773ffffffffffffffffffffffffffffffffffffffff3316604090815260608790527fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda9080a182546001901115156105555760008681526101036020526101048054604090922060020154909181106106c057005b505b505050600284018190556101048054889290811061060d57005b6000918252602080832090910182905587825261010390526040812081815560018181018390556002909101919091559450610586565b5090565b01546000145b1561076057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b60018054118015610701575060015460029061010081106106fb57005b0154600014155b1561072f576001016103db565b600154811080156107845750600154600290610100811061077d57005b0154600014155b801561079f5750600281610100811061079957005b01546000145b156107b85760015460029061010081106107bd57005b01555b6103d0565b015460028261010081106107cd57005b015580610102600060028361010081106107e357005b01548152602081019190915260400160009081209190915560015460029061010081106107b557005b61010480546000808355919091527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe908101905b8082111561027f5760008155600101610840565b60009182526020822001541415156108a6576101048054610103916000918490811061087c57005b60009182526020808320909101548352820192909252604001812081815560018101829055600201555b6001016102e056", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x173825d9000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedRemoveOwner_mySelfFiller.json ================================================ { "multiOwnedRemoveOwner_mySelf" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x173825d9000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedRemoveOwner_ownerIsNotOwnerFiller.json ================================================ { "multiOwnedRemoveOwner_ownerIsNotOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x173825d9000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/multiOwnedRevokeNothingFiller.json ================================================ { "multiOwnedRevokeNothing" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0xc8", "code" : "0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } } } } ], "pre" : { "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100775760e060020a6000350463173825d981146100795780632f54bf6e146100d55780634123cb6b146100f95780637065cb4814610102578063746c917114610136578063b75c7dc61461013f578063ba51a6df1461016f578063c2cf7326146101a3578063f00d4b5d146101e3575b005b610077600435600060003643604051808484808284375050509091019081526040519081900360200190209050610529815b600160a060020a033316600090815261010260205260408120548180808381141561066f57610806565b61021c6004355b600160a060020a0316600090815261010260205260408120541190565b61021c60015481565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506104a1816100ab565b61021c60005481565b610077600435600160a060020a033316600090815261010260205260408120549080808381141561022e576102b0565b610077600435600036436040518084848082843750505090910190815260405190819003602001902090506105e8816100ab565b61021c600435602435600082815261010360209081526040808320600160a060020a03851684526101029092528220548290818181141561064157610665565b61007760043560243560006000364360405180848480828437505050909101908152604051908190036020019020905061033a816100ab565b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a92908316819011156102b05781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a038316600283610100811015610002570155600160a060020a0384811660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b1561033357610348836100dc565b156103535750610335565b600160a060020a03841660009081526101026020526040812054925082141561037c5750610335565b6102b75b6101045460005b818110156107b557610104805482908110156100025760009182526000805160206108ea8339815191520154146103fa576101048054610103916000918490811015610002576000805160206108ea83398151915201548252506020919091526040812081815560018101829055600201555b600101610387565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b1561049c576104af826100dc565b156104ba575061049e565b6104c2610380565b60015460fa90106104d7576104d56104ec565b505b60015460fa9010610402575061049e565b6105a65b600060015b6001548110156107ef575b6001548110801561051c5750600281610100811015610002570154600014155b1561080f576001016104fc565b1561033557600160a060020a038316600090815261010260205260408120549250821415610557575061049c565b6001600160005054036000600050541115610572575061049c565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556104e8610380565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b1561049c576001548211156105fd575061049e565b600082905561060a610380565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156106605760009450610665565b600194505b5050505092915050565b60008681526101036020526040812080549094509092508214156106f85781548355600183810183905561010480549182018082558280158290116106c7578183600052602060002091820191016106c791906107db565b505050600284018190556101048054889290811015610002576000919091526000805160206108ea83398151915201555b506001820154600284900a908116600014156108065760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a18254600190116107f35760008681526101036020526040902060020154610104805490919081101561000257604060009081206000805160206108ea83398151915292909201819055808255600180830182905560029092015595506108069050565b6101048054600080835591909152610335906000805160206108ea833981519152908101905b808211156107ef57600081556001016107db565b5090565b8254600019018355600183018054821790555b50505050919050565b5b6001805411801561083257506001546002906101008110156100025701546000145b156108465760018054600019019055610810565b600154811080156108695750600154600290610100811015610002570154600014155b801561088357506002816101008110156100025701546000145b156108e457600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6104f156004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0xb75c7dc66e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletAddOwnerRemovePendingTransactionFiller.json ================================================ { "walletAddOwnerRemovePendingTransaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x03", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x05" : "0xbbb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x3412a0f379bad2d2f891e4db16a42d964dd63a031e22596f10b4dab2aaa1d252" : "0x03", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "100000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb2" : "0x01", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb3" : "0x02", "0x4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" : "0x6877e4536b661640954061cdbc3a9761fb5245c340fcb1721307cd9d5f285c96", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d0" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d1" : "0x09", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } }, "transaction" : { "data" : [ ":raw 0x7065cb48000000000000000000000000bbb1cd2cd96c6d5c0b5eb3322d807b34482481d4" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletChangeOwnerRemovePendingTransactionFiller.json ================================================ { "walletChangeOwnerRemovePendingTransaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x0107" : "0x0c22e4", "0x03" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x62ce4f671906be9a217487bb98e428b08e12100fb0007df10572ca00206e7d73" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "100000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb2" : "0x01", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb3" : "0x02", "0x4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" : "0x6877e4536b661640954061cdbc3a9761fb5245c340fcb1721307cd9d5f285c96", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d0" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d1" : "0x09", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } }, "transaction" : { "data" : [ ":raw 0xf00d4b5d000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletChangeRequirementRemovePendingTransactionFiller.json ================================================ { "walletChangeRequirementRemovePendingTransaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "100000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb2" : "0x01", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb3" : "0x02", "0x4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" : "0x6877e4536b661640954061cdbc3a9761fb5245c340fcb1721307cd9d5f285c96", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d0" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d1" : "0x09", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } }, "transaction" : { "data" : [ ":raw 0xba51a6df0000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletConfirmFiller.json ================================================ { "walletConfirm" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" : { "balance" : "0x09", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x5b", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "100000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb2" : "0x01", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb3" : "0x02", "0x4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" : "0x6877e4536b661640954061cdbc3a9761fb5245c340fcb1721307cd9d5f285c96", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d0" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d1" : "0x09", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } }, "transaction" : { "data" : [ ":raw 0x797af6276877e4536b661640954061cdbc3a9761fb5245c340fcb1721307cd9d5f285c96" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletConstructionFiller.json ================================================ { "walletConstruction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : [0,1], "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x01", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x00", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6060604052604051602080611014833960806040818152925160016000818155818055600160a060020a03331660038190558152610102909452938320939093556201518042046101075582917f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c91a250610f958061007f6000396000f300606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "1225023", "1825023" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletConstructionOOGFiller.json ================================================ { "walletConstructionOOG" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : 0, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "shouldnotexist" : "1" } } }, { "indexes" : { "data" : -1, "gas" : 1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "1", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x00", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6060604052604051602080611014833960806040818152925160016000818155818055600160a060020a03331660038190558152610102909452938320939093556201518042046101075582917f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c91a250610f958061007f6000396000f300606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "427222", "1225022" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletConstructionPartialFiller.json ================================================ { "walletConstructionPartial" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x01", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x00", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x6060604052604051602080611014833960806040818152925160016000818155818055600160a060020a03331660038190558152610102909452938320939093556201518042046101075582917f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c91a250610f958061007f6000396000f300606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" ], "gasLimit" : [ "2225022" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletDefaultFiller.json ================================================ { "walletDefault" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0xc8", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletDefaultWithOutValueFiller.json ================================================ { "walletDefaultWithOutValue" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "//balance" : "0x0de0b6b3a75e9e3d", "code" : "0x", "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletExecuteOverDailyLimitMultiOwnerFiller.json ================================================ { "walletExecuteOverDailyLimitMultiOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x00", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x5fd43ee7113b9859f7cab1408959b063a9b2e07b4c9ec4098b2768db95a4cba8" : "0x02", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" : "0x28e0e8f21c16f43aaa1e26147fb1cc74296cd3823267fa5bebc02e090063c36d", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043e" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043f" : "0x09", "0x5fd43ee7113b9859f7cab1408959b063a9b2e07b4c9ec4098b2768db95a4cba7" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x02", "0x01" : "0x02", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } }, "transaction" : { "data" : [ ":raw 0xb61d27f6000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000060" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwnerFiller.json ================================================ { "walletExecuteOverDailyLimitOnlyOneOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x0105" : "0x04", "0x0107" : "0x00", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043e" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043f" : "0x09" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0105" : "0x04", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xb61d27f6000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000060" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwnerNewFiller.json ================================================ { "walletExecuteOverDailyLimitOnlyOneOwnerNew" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x0106" : "0x04", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043f" : "0x09", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043e" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x04", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xb61d27f6000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000060" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletExecuteUnderDailyLimitFiller.json ================================================ { "walletExecuteUnderDailyLimit" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "100", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0104" : "0x01", "0x0105" : "0xff", "0x0106" : "0x0c22e4", "0x0107" : "0x00", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043e" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x69d836d8d4229a4b7482679c45208e1a6079c5be2775a4a87ca2d168319c043f" : "0x09" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0105" : "0xff", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xb61d27f6000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000060" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletKillFiller.json ================================================ { "walletKill" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0", "nonce" : "0", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x0104" : "0x01", "0x0106" : "0x0c22e4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xcbf0b0c0000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "1" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletKillNotByOwnerFiller.json ================================================ { "walletKillNotByOwner" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x02", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0xc8", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0xcbf0b0c0000000000000000000000000aaaf5374fce5edbc8e2a8697c15331677e6ebaaa" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletKillToWalletFiller.json ================================================ { "walletKillToWallet" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x02", "storage" : {} }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "nonce" : "0", "balance" : "200", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x0104" : "0x01", "0x0106" : "0x0c22e4", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0106" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01" } } }, "transaction" : { "data" : [ "0xcbf0b0c0000000000000000000000000ec0e71ad0a90ffe1909d27dac207f7680abba42d" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "100" ] } } } ================================================ FILE: tests/static/state_tests/stWalletTest/walletRemoveOwnerRemovePendingTransactionFiller.json ================================================ { "walletRemoveOwnerRemovePendingTransaction" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x20000", "currentGasLimit" : "100000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "code" : "0x", "nonce" : "0x01", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : "0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x01" } } } } ], "pre" : { "3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4" : { "balance" : "100000000000000", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0x0de0b6b3a75ef08f", "code" : "0x", "nonce" : "0x01", "storage" : { } }, "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { "balance" : "0x64", "code" : ":raw 0x606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e146101675780634123cb6b1461018f5780635c52c2f5146101985780637065cb48146101c9578063746c9171146101fd578063797af62714610206578063b20d30a914610219578063b61d27f61461024d578063b75c7dc61461026e578063ba51a6df1461029e578063c2cf7326146102d2578063cbf0b0c014610312578063f00d4b5d14610346578063f1736d861461037f575b61038960003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b610389600435600060003643604051808484808284375050509091019081526040519081900360200190209050610693815b600160a060020a0333166000908152610102602052604081205481808083811415610c1357610d6c565b61038b6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61038b60015481565b610389600036436040518084848082843750505090910190815260405190819003602001902090506107e58161013d565b6103896004356000364360405180848480828437505050909101908152604051908190036020019020905061060b8161013d565b61038b60005481565b61038b6004355b600081610a4b8161013d565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107d98161013d565b61038b6004803590602480359160443591820191013560006108043361016e565b610389600435600160a060020a033316600090815261010260205260408120549080808381141561039d5761041f565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107528161013d565b61038b600435602435600082815261010360209081526040808320600160a060020a0385168452610102909252822054829081818114156107ab576107cf565b610389600435600036436040518084848082843750505090910190815260405190819003602001902090506107f38161013d565b6103896004356024356000600036436040518084848082843750505090910190815260405190819003602001902090506104ac8161013d565b61038b6101055481565b005b60408051918252519081900360200190f35b5050506000828152610103602052604081206001810154600284900a929083168190111561041f5781546001838101805492909101845590849003905560408051600160a060020a03331681526020810187905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5050505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b505b505050565b156104a5576104ba8361016e565b156104c557506104a7565b600160a060020a0384166000908152610102602052604081205492508214156104ee57506104a7565b6104265b6101045460005b81811015610eba57610104805461010891600091849081101561000257600080516020610f7583398151915201548252506020918252604081208054600160a060020a0319168155600181018290556002810180548382559083528383209193610f3f92601f9290920104810190610a33565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005081905550600160005054610102600050600084600160a060020a03168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3826040518082600160a060020a0316815260200191505060405180910390a15b505b50565b15610606576106198261016e565b156106245750610608565b61062c6104f2565b60015460fa90106106415761063f610656565b505b60015460fa901061056c5750610608565b6107105b600060015b600154811015610a47575b600154811080156106865750600281610100811015610002570154600014155b15610d7557600101610666565b156104a757600160a060020a0383166000908152610102602052604081205492508214156106c15750610606565b60016001600050540360006000505411156106dc5750610606565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556106526104f2565b5060408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b15610606576001548211156107675750610608565b60008290556107746104f2565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001830154600282900a908116600014156107ca57600094506107cf565b600194505b5050505092915050565b15610606575061010555565b156106085760006101065550565b156106065781600160a060020a0316ff5b15610a2357610818846000610e4f3361016e565b156108d4577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f15060009350610a2392505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061090490508161020d565b158015610927575060008181526101086020526040812054600160a060020a0316145b15610a235760008181526101086020908152604082208054600160a060020a03191688178155600181018790556002018054858255818452928290209092601f01919091048101908490868215610a2b579182015b82811115610a2b57823582600050559160200191906001019061097c565b50600050507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b5061099a9291505b80821115610a475760008155600101610a33565b5090565b15610c005760008381526101086020526040812054600160a060020a031614610c0057604080516000918220805460018201546002929092018054600160a060020a0392909216949293909291819084908015610acd57820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b50509250505060006040518083038185876185025a03f1505050600084815261010860209081526040805181842080546001820154600160a060020a033381811686529685018c905294840181905293166060830181905260a06080840181815260029390930180549185018290527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a985095968b969294929390929160c083019085908015610ba257820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b505097505050505050505060405180910390a160008381526101086020908152604082208054600160a060020a031916815560018101839055600281018054848255908452828420919392610c0692601f9290920104810190610a33565b50919050565b505050600191505061018a565b6000868152610103602052604081208054909450909250821415610c9c578154835560018381018390556101048054918201808255828015829011610c6b57818360005260206000209182019101610c6b9190610a33565b50505060028401819055610104805488929081101561000257600091909152600080516020610f7583398151915201555b506001820154600284900a90811660001415610d6c5760408051600160a060020a03331681526020810188905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1825460019011610d59576000868152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610f758339815191529290920181905580825560018083018290556002909201559550610d6c9050565b8254600019018355600183018054821790555b50505050919050565b5b60018054118015610d9857506001546002906101008110156100025701546000145b15610dac5760018054600019019055610d76565b60015481108015610dcf5750600154600290610100811015610002570154600014155b8015610de957506002816101008110156100025701546000145b15610e4a57600154600290610100811015610002578101549082610100811015610002578101919091558190610102906000908361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b61065b565b1561018a5761010754610e655b62015180420490565b1115610e7e57600061010655610e79610e5c565b610107555b6101065480830110801590610e9c5750610106546101055490830111155b15610eb25750610106805482019055600161018a565b50600061018a565b6106066101045460005b81811015610f4a5761010480548290811015610002576000918252600080516020610f75833981519152015414610f3757610104805461010391600091849081101561000257600080516020610f7583398151915201548252506020919091526040812081815560018101829055600201555b600101610ec4565b5050506001016104f9565b61010480546000808355919091526104a790600080516020610f7583398151915290810190610a3356004c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe", "nonce" : "0x00", "storage" : { "0x00" : "0x01", "0x01" : "0x02", "0x0104" : "0x01", "0x0107" : "0x0c22e4", "0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x04" : "0x3fb1cd2cd96c6d5c0b5eb3322d807b34482481d4", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb2" : "0x01", "0x3736dca762b6fcb9a97d5eafda4032fdba21dbfa25f875001d51e03eff955fb3" : "0x02", "0x4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe" : "0x6877e4536b661640954061cdbc3a9761fb5245c340fcb1721307cd9d5f285c96", "0x6e369836487c234b9e553ef3f787c2d8865520739d340c67b3d251a33986e58d" : "0x01", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d0" : "0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "0x915023a2112bb78c86fa558abc0217ea6818d13895b90ce6be233397f55eb1d1" : "0x09", "0xd3e69d8c7f41f7aeaf8130ddc53047aeee8cb46a73d6bae86b7e7d6bf8312e6b" : "0x02" } } }, "transaction" : { "data" : [ ":raw 0x173825d9000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b" ], "gasLimit" : [ "10000000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "a95defe70ebea7804f9c3be42d20d24375e2a92b9d9666b832069c5f3cd423dd", "to" : "ec0e71ad0a90ffe1909d27dac207f7680abba42d", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALLCODE_OOGRevertFiller.json ================================================ { "ZeroValue_CALLCODE_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALLCODE_ToEmpty_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_CALLCODE_ToEmpty_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "10", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevertFiller.json ================================================ { "ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "100" }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALL_OOGRevertFiller.json ================================================ { "ZeroValue_CALL_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALL_ToEmpty_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_CALL_ToEmpty_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "10", "storage" : {} }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALL_ToNonZeroBalance_OOGRevertFiller.json ================================================ { "ZeroValue_CALL_ToNonZeroBalance_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "100" }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_CALL_ToOneStorageKey_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_CALL_ToOneStorageKey_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_DELEGATECALL_OOGRevertFiller.json ================================================ { "ZeroValue_DELEGATECALL_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "1" }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]](GAS) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToEmpty_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_DELEGATECALL_ToEmpty_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "10", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevertFiller.json ================================================ { "ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "100" }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x64" : "0x00" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]] (GAS) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "135000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_SUICIDE_OOGRevertFiller.json ================================================ { "ZeroValue_SUICIDE_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : {} }, "" : { "storage" : {} } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 40000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 [[100]](GAS) }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "100000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_SUICIDE_ToEmpty_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_SUICIDE_ToEmpty_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : {} }, "" : { "balance" : "10", "storage" : {} } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 50000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "75000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevertFiller.json ================================================ { "ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevert" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : {} }, "" : { "balance" : "100" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 50000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 }", "storage": { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "75000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert_ParisFiller.json ================================================ { "ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "nonce" : "1" }, "" : { "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (CALL 50000 0 0 0 0 0) [[2]]12 [[3]]12 [[4]]12 }", "storage": { "0x00" : "0x01" } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { "0x00" : "0x01" } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "75000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsRevert/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALLCODEFiller.json ================================================ { "ZeroValue_CALLCODE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//comment" : " Zero-value call to nonexistent account: should (i) charge only 700 gas, (ii) not create an account", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) [[100]] 1 }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALLCODE_ToEmpty_ParisFiller.json ================================================ { "ZeroValue_CALLCODE_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "10", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALLCODE_ToNonZeroBalanceFiller.json ================================================ { "ZeroValue_CALLCODE_ToNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALLCODE_ToOneStorageKey_ParisFiller.json ================================================ { "ZeroValue_CALLCODE_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (CALLCODE 60000 0 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALLFiller.json ================================================ { "ZeroValue_CALL" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "//comment" : " Zero-value call to nonexistent account: should (i) charge only 700 gas, (ii) not create an account", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0 0) [[100]] 1 }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALL_ToEmpty_ParisFiller.json ================================================ { "ZeroValue_CALL_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10" }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "//comment" : " Zero-value call to empty account: should (i) charge only 700 gas, (ii) delete an account", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALL_ToNonZeroBalanceFiller.json ================================================ { "ZeroValue_CALL_ToNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "//comment" : " Zero-value call to empty account: should (i) charge only 700 gas, (ii) delete an account", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_CALL_ToOneStorageKey_ParisFiller.json ================================================ { "ZeroValue_CALL_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "//comment" : " Zero-value call to empty account: should (i) charge only 700 gas, (ii) delete an account", "code" : "{ [[0]](GAS) [[1]] (CALL 60000 0 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_DELEGATECALLFiller.json ================================================ { "ZeroValue_DELEGATECALL" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 0 0) [[100]] 1 }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToEmpty_ParisFiller.json ================================================ { "ZeroValue_DELEGATECALL_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "10", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToNonZeroBalanceFiller.json ================================================ { "ZeroValue_DELEGATECALL_ToNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToOneStorageKey_ParisFiller.json ================================================ { "ZeroValue_DELEGATECALL_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun" ], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } }, "" : { "storage" : { "0x00" : "0x08d5b6", "0x01" : "0x01", "0x64" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ [[0]](GAS) [[1]] (DELEGATECALL 60000 0 0 0 0) [[100]] 1 }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_SUICIDEFiller.json ================================================ { "ZeroValue_SUICIDE" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0", "balance" : "0", "code" : "0x73c94f5374fce5edbc8e2a8697c15331677e6ebf0bff00", "storage" : {} }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b) }", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_SUICIDE_ToEmpty_ParisFiller.json ================================================ { "ZeroValue_SUICIDE_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "0", "nonce" : "0", "code" : "0x73ff00", "storage" : {} }, "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_SUICIDE_ToNonZeroBalanceFiller.json ================================================ { "ZeroValue_SUICIDE_ToNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [ ">=Cancun"], "result" : { "" : { "nonce" : "0", "balance" : "0", "code" : "0x73ff00", "storage" : {} }, "" : { "balance" : "100" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { } }, "" : { "balance" : "100", "nonce" : "0", "code" : "", "storage": { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_SUICIDE_ToOneStorageKey_ParisFiller.json ================================================ { "ZeroValue_SUICIDE_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun"], "result" : { "" : { "balance" : "", "nonce" : "0", "code" : "0x73ff00", "storage" : { "0x00" : "0x01" } }, "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "0", "nonce" : "0", "code" : "{ (SELFDESTRUCT ) }", "storage": { "0x00" : "0x01" } }, "" : { "balance" : "10", "nonce" : "0", "code" : "", "storage": { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALLFiller.json ================================================ { "ZeroValue_TransactionCALL" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALL_ToEmpty_ParisFiller.json ================================================ { "ZeroValue_TransactionCALL_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALL_ToNonZeroBalanceFiller.json ================================================ { "ZeroValue_TransactionCALL_ToNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey_ParisFiller.json ================================================ { "ZeroValue_TransactionCALL_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ "" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALLwithDataFiller.json ================================================ { "ZeroValue_TransactionCALLwithData" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "shouldnotexist" : "1" }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "nonce" : "0x01" } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToEmpty_ParisFiller.json ================================================ { "ZeroValue_TransactionCALLwithData_ToEmpty_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToNonZeroBalanceFiller.json ================================================ { "ZeroValue_TransactionCALLwithData_ToNonZeroBalance" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : -1, "gas" : -1, "value" : -1 }, "network" : [ ">=Cancun"], "result" : { "" : { "balance" : "100" } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "100", "code" : "", "nonce" : "0", "storage" : { } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey_ParisFiller.json ================================================ { "ZeroValue_TransactionCALLwithData_ToOneStorageKey_Paris" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x020000", "currentGasLimit" : "10000000", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "network" : [">=Cancun" ], "result" : { "" : { "balance" : "10", "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "" : { "balance" : "1000000000000", "code" : "", "nonce" : "0", "storage" : { } }, "" : { "balance" : "10", "code" : "", "nonce" : "0", "storage" : { "0x00" : "0x01" } } }, "transaction" : { "data" : [ ":raw 0x1122334455667788991011121314151617181920" ], "gasLimit" : [ "600000" ], "gasPrice" : "10", "nonce" : "0", "secretKey" : "", "to" : "", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroCallsTest/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stZeroKnowledge/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_2_28000_128Filler.json ================================================ { "ecmul_1-2_2_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "balance": "100000000", "nonce": "133", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "balance": "100000000", "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x85", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "134", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "134", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_2_28000_96Filler.json ================================================ { "ecmul_1-2_2_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "132", "balance": "999999999994222676", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5777324", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "30000", "90000", "110000", "200000", "40000" ], "gasPrice": "0x0a", "nonce": "0x84", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "133", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3,4], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "133", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_128Filler.json ================================================ { "ecmul_1-2_340282366920938463463374607431768211456_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "57", "balance": "999999999997410898", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2589102", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x39", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "58", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "58", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_80Filler.json ================================================ { "ecmul_1-2_340282366920938463463374607431768211456_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "58", "balance": "999999999997367538", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2632462", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "59", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "59", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_96Filler.json ================================================ { "ecmul_1-2_340282366920938463463374607431768211456_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "56", "balance": "999999999997454130", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2545870", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x38", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "57", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "57", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_128Filler.json ================================================ { "ecmul_1-2_340282366920938463463374607431768211456_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "154", "balance": "999999999993368996", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6631004", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "155", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_80Filler.json ================================================ { "ecmul_1-2_340282366920938463463374607431768211456_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "155", "balance": "999999999993337736", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6662264", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "156", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_96Filler.json ================================================ { "ecmul_1-2_340282366920938463463374607431768211456_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "153", "balance": "999999999993400125", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6599875", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x99", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "154", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "154", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5616_21000_128Filler.json ================================================ { "ecmul_1-2_5616_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "71", "balance": "999999999996788370", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3211630", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb060", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x47", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "72", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "72", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5616_21000_96Filler.json ================================================ { "ecmul_1-2_5616_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "70", "balance": "999999999996833394", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3166606", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xafe0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x46", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "71", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "71", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5616_28000_128Filler.json ================================================ { "ecmul_1-2_5616_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "168", "balance": "999999999992801283", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7198717", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcbb8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa8", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "169", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5617_21000_128Filler.json ================================================ { "ecmul_1-2_5617_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "81", "balance": "999999999996329874", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3670126", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb0a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x51", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "82", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "82", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5617_21000_96Filler.json ================================================ { "ecmul_1-2_5617_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "80", "balance": "999999999996374962", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3625038", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xb020", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x50", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "81", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "81", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5617_28000_128Filler.json ================================================ { "ecmul_1-2_5617_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "178", "balance": "999999999992387396", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7612604", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcbf8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb2", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "179", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_5617_28000_96Filler.json ================================================ { "ecmul_1-2_5617_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "177", "balance": "999999999992420381", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7579619", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xcb78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "178", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_616_28000_96Filler.json ================================================ { "ecmul_1-2_616_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "167", "balance": "999999999992834204", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7165796", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "30000", "90000", "110000", "200000", "40000" ], "gasPrice": "0x0a", "nonce": "0xa7", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "168", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3,4], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "168", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9935_21000_128Filler.json ================================================ { "ecmul_1-2_9935_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "91", "balance": "999999999995870546", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4129454", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb120", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "92", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "92", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9935_21000_96Filler.json ================================================ { "ecmul_1-2_9935_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "90", "balance": "999999999995915762", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4084238", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xb0a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "91", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "91", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9935_28000_128Filler.json ================================================ { "ecmul_1-2_9935_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "188", "balance": "999999999991972677", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8027323", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcc78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xbc", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "189", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9935_28000_96Filler.json ================================================ { "ecmul_1-2_9935_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "187", "balance": "999999999992005790", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7994210", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0x7bf8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xbb", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "188", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "188", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9_21000_128Filler.json ================================================ { "ecmul_1-2_9_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "46", "balance": "999999999997894386", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2105614", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "47", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9_21000_96Filler.json ================================================ { "ecmul_1-2_9_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "45", "balance": "999999999997937618", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2062382", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "46", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "46", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9_28000_128Filler.json ================================================ { "ecmul_1-2_9_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "143", "balance": "999999999993795772", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6204228", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "144", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-2_9_28000_96Filler.json ================================================ { "ecmul_1-2_9_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "142", "balance": "999999999993826901", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6173099", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "143", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "143", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_21000_128Filler.json ================================================ { "ecmul_1-3_0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "16", "balance": "999999999999206642", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "793358", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x10", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_21000_64Filler.json ================================================ { "ecmul_1-3_0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "balance": "999999999999163346", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "836654", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": [ "0xa820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x11", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_21000_80Filler.json ================================================ { "ecmul_1-3_0_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "balance": "999999999999120306", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "879694", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x12", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "19", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_21000_96Filler.json ================================================ { "ecmul_1-3_0_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "balance": "999999999999249810", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "750190", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xf", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "16", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_28000_128Filler.json ================================================ { "ecmul_1-3_0_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "113", "balance": "999999999995031504", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4968496", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc478", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x71", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "114", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_28000_64Filler.json ================================================ { "ecmul_1-3_0_28000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "114", "balance": "999999999994981208", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5018792", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": [ "0xc378", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x72", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "115", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_28000_80_ParisFiller.json ================================================ { "ecmul_1-3_0_28000_80_Paris": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "balance" : "100000000", "storage": {}, "nonce": "115", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "balance" : "10", "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x73", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "116", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_0_28000_96Filler.json ================================================ { "ecmul_1-3_0_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "112", "balance": "999999999995081672", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4918328", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x70", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "113", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_1_21000_128Filler.json ================================================ { "ecmul_1-3_1_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "30", "balance": "999999999998594162", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1405838", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "31", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_1_21000_96Filler.json ================================================ { "ecmul_1-3_1_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "29", "balance": "999999999998637394", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1362606", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "30", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_1_28000_128Filler.json ================================================ { "ecmul_1-3_1_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "127", "balance": "999999999994435633", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5564367", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "128", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_1_28000_96Filler.json ================================================ { "ecmul_1-3_1_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "126", "balance": "999999999994485865", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5514135", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "127", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_2_21000_128Filler.json ================================================ { "ecmul_1-3_2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "40", "balance": "999999999998153778", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1846222", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x28", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "41", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_2_21000_96Filler.json ================================================ { "ecmul_1-3_2_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "39", "balance": "999999999998197010", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1802990", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x27", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "40", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_2_28000_128Filler.json ================================================ { "ecmul_1-3_2_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "137", "balance": "999999999994039858", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5960142", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x89", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "138", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_2_28000_96Filler.json ================================================ { "ecmul_1-3_2_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "136", "balance": "999999999994090090", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5909910", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x88", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "137", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_128Filler.json ================================================ { "ecmul_1-3_340282366920938463463374607431768211456_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "63", "balance": "999999999997139538", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2860462", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "64", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_80Filler.json ================================================ { "ecmul_1-3_340282366920938463463374607431768211456_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "64", "balance": "999999999997096178", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2903822", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x40", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "65", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_96Filler.json ================================================ { "ecmul_1-3_340282366920938463463374607431768211456_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "62", "balance": "999999999997182770", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2817230", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "63", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_128Filler.json ================================================ { "ecmul_1-3_340282366920938463463374607431768211456_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "160", "balance": "999999999993151145", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6848855", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa0", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "161", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_80Filler.json ================================================ { "ecmul_1-3_340282366920938463463374607431768211456_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "161", "balance": "999999999993100785", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6899215", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "162", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_96Filler.json ================================================ { "ecmul_1-3_340282366920938463463374607431768211456_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "159", "balance": "999999999993201377", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6798623", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "160", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5616_21000_128Filler.json ================================================ { "ecmul_1-3_5616_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "75", "balance": "999999999996600210", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3399790", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb060", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "76", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5616_21000_96Filler.json ================================================ { "ecmul_1-3_5616_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "74", "balance": "999999999996645234", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3354766", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xafe0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "75", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5616_28000_128Filler.json ================================================ { "ecmul_1-3_5616_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "172", "balance": "999999999992642426", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7357574", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcbb8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xac", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "173", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5616_28000_96Filler.json ================================================ { "ecmul_1-3_5616_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "171", "balance": "999999999992694450", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7305550", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xcb38", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xab", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "172", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5617_21000_128Filler.json ================================================ { "ecmul_1-3_5617_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "85", "balance": "999999999996141458", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3858542", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb0a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x55", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "86", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5617_21000_96Filler.json ================================================ { "ecmul_1-3_5617_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "84", "balance": "999999999996186546", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3813454", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xb020", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x54", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "85", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5617_28000_128Filler.json ================================================ { "ecmul_1-3_5617_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "182", "balance": "999999999992228283", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7771717", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcbf8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb6", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "183", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_5617_28000_96Filler.json ================================================ { "ecmul_1-3_5617_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "181", "balance": "999999999992280371", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7719629", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xcb78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb5", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "182", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9935_21000_128Filler.json ================================================ { "ecmul_1-3_9935_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "95", "balance": "999999999995681618", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4318382", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb120", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "96", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9935_21000_96Filler.json ================================================ { "ecmul_1-3_9935_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "94", "balance": "999999999995726834", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4273166", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xb0a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "95", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9935_28000_128Filler.json ================================================ { "ecmul_1-3_9935_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "192", "balance": "999999999991813052", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8186948", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcc78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xc0", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "193", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9935_28000_96Filler.json ================================================ { "ecmul_1-3_9935_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "191", "balance": "999999999991865268", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8134732", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xcbf8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xbf", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "192", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9_21000_128Filler.json ================================================ { "ecmul_1-3_9_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "50", "balance": "999999999997713394", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2286606", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x32", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "51", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9_21000_96Filler.json ================================================ { "ecmul_1-3_9_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "49", "balance": "999999999997756626", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2243374", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x31", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "50", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9_28000_128Filler.json ================================================ { "ecmul_1-3_9_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "147", "balance": "999999999993644083", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6355917", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x93", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "148", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_1-3_9_28000_96Filler.json ================================================ { "ecmul_1-3_9_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "146", "balance": "999999999993694315", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6305685", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x92", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "147", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_21000_128Filler.json ================================================ { "ecmul_7827-6598_0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "balance": "999999999999391026", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "608974", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xc", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_21000_64Filler.json ================================================ { "ecmul_7827-6598_0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "balance": "999999999999343826", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "656174", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000401a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6" ], "gasLimit": [ "0xb760", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xd", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_21000_80Filler.json ================================================ { "ecmul_7827-6598_0_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "balance": "999999999999296882", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "703118", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000501a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb7e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xe", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_21000_96Filler.json ================================================ { "ecmul_7827-6598_0_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "balance": "999999999999438098", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "561902", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb7e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_28000_128Filler.json ================================================ { "ecmul_7827-6598_0_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "109", "balance": "999999999995186579", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4813421", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd3b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "110", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_28000_64Filler.json ================================================ { "ecmul_7827-6598_0_28000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "110", "balance": "999999999995151479", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4848521", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000401a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6" ], "gasLimit": [ "0xd2b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "111", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_28000_80Filler.json ================================================ { "ecmul_7827-6598_0_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "111", "balance": "999999999995116641", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4883359", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000501a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd338", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "112", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_0_28000_96Filler.json ================================================ { "ecmul_7827-6598_0_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "108", "balance": "999999999995221548", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4778452", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd338", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1456_21000_128Filler.json ================================================ { "ecmul_7827-6598_1456_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "60", "balance": "999999999997277170", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2722830", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "61", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "61", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1456_21000_80Filler.json ================================================ { "ecmul_7827-6598_1456_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "61", "balance": "999999999997229906", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2770094", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000501a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xb820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "62", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "62", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1456_21000_96Filler.json ================================================ { "ecmul_7827-6598_1456_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "59", "balance": "999999999997324306", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2675694", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xb820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "60", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "60", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1456_28000_128Filler.json ================================================ { "ecmul_7827-6598_1456_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "157", "balance": "999999999993271574", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6728426", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "158", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1456_28000_80Filler.json ================================================ { "ecmul_7827-6598_1456_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "158", "balance": "999999999993236410", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6763590", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000501a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xd378", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "159", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1456_28000_96Filler.json ================================================ { "ecmul_7827-6598_1456_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "156", "balance": "999999999993306607", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6693393", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "34000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x0467d6413c98fb304cd61014865afdb7b3b81fa53f7ef4046e6a833162c5bb5c" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "157", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "157", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1_21000_128Filler.json ================================================ { "ecmul_7827-6598_1_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "28", "balance": "999999999998684658", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1315342", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "29", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "29", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1_21000_96Filler.json ================================================ { "ecmul_7827-6598_1_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "balance": "999999999998731794", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1268206", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xb820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "28", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "28", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1_28000_128Filler.json ================================================ { "ecmul_7827-6598_1_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "125", "balance": "999999999994521029", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5478971", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "126", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_1_28000_96Filler.json ================================================ { "ecmul_7827-6598_1_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "124", "balance": "999999999994556062", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5443938", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "34000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "125", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "125", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_2_21000_128Filler.json ================================================ { "ecmul_7827-6598_2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "38", "balance": "999999999998244274", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1755726", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x26", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "39", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "39", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_2_21000_96Filler.json ================================================ { "ecmul_7827-6598_2_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "37", "balance": "999999999998291410", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1708590", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xb820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x25", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "38", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "38", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_2_28000_128Filler.json ================================================ { "ecmul_7827-6598_2_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "135", "balance": "999999999994125254", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5874746", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x87", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "136", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_2_28000_96Filler.json ================================================ { "ecmul_7827-6598_2_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "134", "balance": "999999999994160287", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5839713", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0x8378", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x86", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "135", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "135", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5616_21000_128Filler.json ================================================ { "ecmul_7827-6598_5616_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "73", "balance": "999999999996694290", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3305710", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xbfa0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x49", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "74", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "74", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5616_21000_96Filler.json ================================================ { "ecmul_7827-6598_5616_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "72", "balance": "999999999996743218", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3256782", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xbf20", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x48", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "73", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "73", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5616_28000_128Filler.json ================================================ { "ecmul_7827-6598_5616_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "170", "balance": "999999999992731406", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7268594", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xdaf8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xaa", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "171", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5616_28000_96Filler.json ================================================ { "ecmul_7827-6598_5616_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "169", "balance": "999999999992768231", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7231769", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "34000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa9", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xac1de87792e425a22b81bdf624dc1b24fee26f16e9a879172aebc261cc51a2fe" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "170", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "170", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5617_21000_128Filler.json ================================================ { "ecmul_7827-6598_5617_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "83", "balance": "999999999996235666", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3764334", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xbfe0", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x53", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "84", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "84", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5617_21000_96Filler.json ================================================ { "ecmul_7827-6598_5617_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "82", "balance": "999999999996284658", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3715342", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xbf60", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x52", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "83", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "83", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5617_28000_128Filler.json ================================================ { "ecmul_7827-6598_5617_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "180", "balance": "999999999992317391", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7682609", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xdb38", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb4", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "181", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_5617_28000_96Filler.json ================================================ { "ecmul_7827-6598_5617_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "179", "balance": "999999999992354280", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7645720", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xdab8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb3", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "180", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9935_21000_128Filler.json ================================================ { "ecmul_7827-6598_9935_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "93", "balance": "999999999995776082", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4223918", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc060", "50000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0,1], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "94", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "94", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9935_21000_96Filler.json ================================================ { "ecmul_7827-6598_9935_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "92", "balance": "999999999995825202", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4174798", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xbfe0", "50000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0,1], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "93", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "93", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9935_28000_128Filler.json ================================================ { "ecmul_7827-6598_9935_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "190", "balance": "999999999991902416", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8097584", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xdbb8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xbe", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "191", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9935_28000_96Filler.json ================================================ { "ecmul_7827-6598_9935_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "189", "balance": "999999999991939433", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8060567", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xbd", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa34b6e4f9c282ff62c1e6f53fd92ad8efd8346d9866333a95ab4506a8158afc7" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "190", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "190", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9_21000_128Filler.json ================================================ { "ecmul_7827-6598_9_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "48", "balance": "999999999997803890", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2196110", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x30", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "49", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x00" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "49", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9_21000_96Filler.json ================================================ { "ecmul_7827-6598_9_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "47", "balance": "999999999997851026", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2148974", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xb820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "48", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "48", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9_28000_128Filler.json ================================================ { "ecmul_7827-6598_9_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "145", "balance": "999999999993729479", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6270521", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000801a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f600000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x91", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "146", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecmul_7827-6598_9_28000_96Filler.json ================================================ { "ecmul_7827-6598_9_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "144", "balance": "999999999993764512", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6235488", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000601a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0x8378", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x90", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xc7b29565a7dd9915e6fd86d026aef2fc454506bae7f90e2f2bec5f25f01b2d95" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "145", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "145", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (11999875504842010600789954262886096740416429265635183817701593963271973497827, 11843594000332171325303933275547366297934113019079887694534126289021216356598) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_bad_length_191Filler.json ================================================ { "ecpairing_bad_length_191": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "balance": "999999999998797605", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1202395", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000bf00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7d00" ], "gasLimit": [ "0x3aba8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_bad_length_193Filler.json ================================================ { "ecpairing_bad_length_193": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "balance": "999999999998557053", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1442947", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0x3ac68", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_empty_dataFiller.json ================================================ { "ecpairing_empty_data": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "balance": "999999999999746703", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "253297", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0x25028", "80000", "85000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x00" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_empty_data_insufficient_gasFiller.json ================================================ { "ecpairing_empty_data_insufficient_gas": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "1", "balance": "999999999999868294", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "131706", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "40000", "80000", "150000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0,1], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x00" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_inputsFiller.yml ================================================ ecpairing_inputs: _info: comment: Various inputs to the bn254_pairing precompile env: currentCoinbase: 00000000000000000000000000000000c014bace currentDifficulty: 0x20000 currentGasLimit: 15000000 currentNumber: 1 currentTimestamp: 1000 expect: - indexes: data: :label positive gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000c0de: storage: 01: 1 - indexes: data: :label negative gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000c0de: storage: 01: 0 - indexes: data: - :label invalid_g1_point - :label invalid_g2_point - :label invalid_g2_subgroup gas: !!int -1 value: !!int -1 network: - ">=Cancun" result: 000000000000000000000000000000000000c0de: storage: 01: 0xfe pre: 00000000000000000000000000000000c014bace: nonce: 1 balance: 0 code: '' storage: { } 000000000000000000000000000000000000c0de: nonce: 0 balance: 0 code: | :yul shanghai { let size := calldatasize() calldatacopy(0, 0, size) let status := staticcall(0xffffffff, 8, 0, size, 0, 0x20) let result := 0xfe if status { result := mload(0) } sstore(1, result) } storage: 01: 0xcc # placeholder for the result a94f5374fce5edbc8e2a8697c15331677e6ebf0b: nonce: 0 balance: 1000000000000000000 code: '' storage: { } transaction: to: 000000000000000000000000000000000000c0de nonce: 0 gasPrice: 10 secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 gasLimit: - 15000000 value: - 0 data: - :label negative :raw 0x142c9123c08a0d7f66d95f3ad637a06b95700bc525073b75610884ef45416e1610104c796f40bfeef3588e996c040d2a88c0b4b85afd2578327b99413c6fe820198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d - :label negative :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092a62b029973fcd9ec18db33eb4c7b6b649a2e6196561761789e39bc84f11ac0a59f2672462be814a277f495d53244691c40da85d39b210ed3e099b397a4cf92ad603022931e8c20c927fa114866ca26b305156336511a9224d6bd88e5ba7fb2b44dd02df7f7a846f546c77f3330cc171abeea7747ec03607c4b754a07101421f4b96b82bd3631447045f1bb66198fa6a904e48092750762efd419fb5ff52b51fac61c1a7265d0e1a6433e9767cb51c71e9ac5a119be9894f509bf92b0fb1b4198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label negative :raw 0x104f6d8507d6a112e8fd516d70bfe3d2474539948276d36eee987be127a9e3ab199eef24146007e80386f391edc886f5ddba22b5cf131efa3b6ae71a673fc88e198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa2642f046ad222f094c9282816131317b8d52fc0fee64f26898232432d34fdae605a5f2a2e8f15ba27e90f54faff78391b307b402a0ae995d1c12f92c0b574593198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label negative :raw 0x1f0ab114f50077d71a195869dd8c07e2a031a55a8dac07c522ee7ac74136c50c229c9d498f5ca70a27612a244743773fe22668370a91410b645fe22f2e6eb78c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284869d750e478e4b09637f7ae55bcce23bd622f04e986e1cba0f64b59b023200a88bc2898a2930aee2b92055ca2f97360a79c598f5e8998fed7add43a692d1021f4f3ddd5250962baaefc6ef587f464c8fdad1bb7812b292dce48d5462039df14044ca96015f3c6666f98d756fbf7bd0e12c3e884db4100391da8a47deff16e00b30c250f71db58eb20e14d67cd98ebb47790a7e7d45d30a90ce707175f295b1e45eca08667a7cfe06158fae4a38cac01a37853e730eaa28b2f7167fd74c22d - :label negative :raw 0x0624d2c76767981fadc8f74f29c034f7ae0522585e1e0201308109c40d1d5420251ba3c545339bbe22da0fe90692a099384c435ec0902c99be7e7a84d62bb49c0c0b524584214b17414a25236e4e2b6f4bf398ec62e9abeb7ea1f158d89df05b0e05f600bf1408ab25c0f3dbb98ff26c4d85a6ce6a63bebc3b2e360de77cf6062488eb90497d64621124420825abd353268fe00bd90726991d0ce623e59da9c62340b1fb006017382cb76606a873f48de8f31434cc243c8f465cb908d8cc734618cde0d7bde7e1da88fb8192ce94bea754f24a53f1f000f15b4c5c151c12df4f0066b16bf4229edf5375b78a5c7469ddf68f7d5c7577642ed2c90d5d42c231ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa2948734db775bb41a29257214b19a6356e6640894c2a48f201addce62de7b41e1bb87bddbe46d75809751232405928c3314934082052131a64574ff5a59c7db7198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa09c91a687e6c44f2917682dc5d0a34be7c77fff361aa36610effab6f6d2d87ac13849277ed76b58020ab993f1847ebcc0f1bcf711fba15f4a7a80ab72b4fe9642f0c63d0c53b3dfbca27b6b43ae7fbf55a38d78a21470996485b03128accc20800556502356e37ed150db2e36531b0f275fd6835c0fc1945922e270b48c48a8602644c27b5dbd793592a70b735e22c798a5e309fa17a992a7dc2a050e01b298f194776b6a53439d7336f389d2a8f6651e40885f5ca2538b0dc9cb534fb23f7fa1e379e19dbffba1edf0a04505f67229e707a4b82f19285d3c186964e83e1553608ee58baa16641b1513f007da7d3cf58b503b80f73c7d8e792db63def167e0d82b1f95d6aa6fd6f5e6978d0135c206079770d5c3ba001967c5d94c5902f95fe9264ad64952cb1d30a7230bca35b3907b2457abdcd6052e14e2a132d76822222514f79ce35164acfdb802551e02a9aebdb20bf4248c0ccf5c6cf5e576908778410f8dfb99aaa272bbaa49012da81dfafa1a3c07eba89355602143c58f63df2939117a8203a67ab052af18032434b61fe6b33e0a6ad5ab70d57aef4444478b42ba123a80e91f77c135f657e2dbf5af0d07e9a4fb63585b88e5439ddab7741c0961198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e104316c97997c17267a1bb67365523b4388e1306d66ea6e4d8f4a4a4b65f5c7d06e286b49c56f6293b2cea30764f0d5eabe5817905468a41f09b77588f692e8b081070efe3d4913dde35bba2513c426d065dee815c478700cef07180fb6146182432428b1490a4f25053d4c20c8723a73de6f0681bd3a8fca41008a6c3c288252d50f18403272e96c10135f96db0f8d0aec25033ebdffb88d2e7956c9bb198ec072462211ebc0a2f042f993d5bd76caf4adb5e99610dcf7c1d992595e6976aa3 - :label positive :raw 0x0084c3136563609ce6d7218719af3024e2163ea8124130cfb61c2521379b00672e775227ccd46bb5bd8b9f9714ecae9e037f8e91246b2a7e171337cf1332e3411fee9eea81af0f92485cb60cec6fdd90385b3f390c67d0885520bea38a07bb081242a8a318ba046cd7f4b87b4ede31c0c19f823ce0ab3192f36acc7683a9170411d50fa9a8a15815baf103030117065601aff6b54f4242d2a5a14e3147e89e25133ca084be363f41cb3886eed01fa8d896a609c22e099c4c9f5bb5a4363a57ad2f9b2caf0345e3ec3eccbc16af5713bbf15eaf2a17cd9f7a02966bd5e7ccd6fe185a77dfe45c4c1c9042c67fdb65d25bbd8b6f79dfdde27458a35792653443f3198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x00898cc97b5a1f95221e7272c6ea8ceb56e702d678ac6c24275a4f6147d2b27916f336255e3f8970fd79a12281e6a6bee510e7d2ce5117214f4dd8c764e00ef312580b380ddf94a3370e6842e68b260a12012ab02c883678abf3f0f37606f55c268f02e60dfc36a40bb1fa3dba22bba44953358031876c21748d5d57dfb39ef407c890d2b747cb1e0456c9c1b30c03badffb8cde540704104b016976d0a374472a3e2918076d66622d7d6014299b77850a74b2691dda1dadcd0232fbbfe2a9e02781b3ace921b11d98193720d1493609c4d47f607a2266d608185c6382b5d23519797c215563c8b73cc7f0041d1f5fe1ce017b36afbeffe56683e3ffccb9380b198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x082a5b0eb620c491dc7cfbf269ea3e9db35fdaf6c7c4baa25a829127a56f63c41c49e6c57c3c0ddca035138e5aadb79ac638f67a918e6a4377200ebfa80ed1880bf4734681e3030e126c2a595de85f80b46bd327bae8a860a3ed5f5be7318037116c5e07de19e858eb720604f6e2935bf0f5e40d9194cfba05bfea0ab69f1d82263ee7293c68743b04034a5b63e1d2b65261f7c6758d8084a50419cc65d02ad214189e61084d61cf2ad9b6140b951ca35ae18a008cb3c1c4904e59f462e66b0428ec2c3d544a901ad85af62e1ec02aac643e707a3a45983ef168877b6901a19d108e7a47061fd472bd715c35b71b842fc1914a8972e472a2a4faa4880e0d2787198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x09148ba3625b1d4862ecfed71970e395d22bc4dafaa4a662546e4fb39141d8ba0a8f563782b2b31347c9e7ced5a21d959a38f4ae4bbc7cd37b1180a0d491cad617f32b902d2096a48b25f94ad6c692a99c68e937a4bae3c820f25093cf2786ab155c57d2b7f4aefc0e1a44a78c7d59d2cac917546717c665dc001fa43cf5775317b81fe685dd2e24a14899ef74821d1d147b88fe0c63d0921eb45c191146e7e41c9ae775eba85ea225258c9bafdf5cbad6106cd79194f4b0f8e7814068370daf302ac8191cd6d55b858891d05b919ad95f5e2f16b78c5b0ad2ecc72c3fe238421a924fa7e779ad503830c25838c2489d9bbc21fd519ceb3f4a10f4dc3e3b72be198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x0ee7f0252e8210eaa3ee452c8731ad6864d8506ba61836f48c99a16a03d59b0d2ba1ddc868f452ef0cfdcac410e9d38d726557b05edc84f8d4f62203acc1f9f029aa08ecade2c1d537c14baf6cf62758c02e6f3c4eeb0b621ad3ab941b1559de11eac12aaf058f799ee8146f36a0bbbf8e67a0aa0f9e2c192bafd05ff8da45d303b7bd661becfa6ff5092b36f1768c815434f3b7f4254fb4b8abf68e36086cd3196caa297895d4a1d58a5fe388416fbac2a74fb9beb835dbbbaa8f6b63bf9cab29a00816ed140fc36e515f43fb054c891b4b07f013c9e6d5c3f284c8528c71ae2f060699e8f54b1028b78e5f016d8142563947adcac5a5857137b6958ddc995e141dd828af529924148912360fd71ef6a365a707173aa2c06c8290d54fae458e1cf61d5e9ceced0c662c6e2df96d63adc7d84e182fa0f62e08b9afdd5c90545e01f3e8049b7934995dee28faa0e401289b92ccd1a2f408c85383f5312f528c9e2c6aaa06b56e9d6c98a701b4a9cf2f8cfddbfa93d7104d5eafbad9a84b5174e5 - :label positive :raw 0x0f740d88de760df099674c96dd2d476b42673d0f2972e6d5d1f9dba95a29d26a04a44d72c2a82088da663ff162fe2d3ddd4a139e1ef6c0bbb1124d8de75f7c68196346d9774f017c351dbbdd99960e834b188b3347b92fac7f83cc6453617fe11e3ba24a0848096a0d6484133af97b7487ca9a4309cb5574d8bb96cfd7f22678235603772d0e9cf9503d05742962b07cd0af71a7c7b757960ced6fcfa74d3ded1ceed193f30fbbe5e9a9438e82bac927a0977b49f6e476aee20923e1a230f2c4201af9371c7cea66800f961d6a7219da9c27fbe61b5df43fccb275d8c034bf8e1f0e7c5a1143b0f8e850d9516ea2c836b0331521829dc2b71dbf775078c770f4198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x107b8a2cb6318aabd95763c0cafc3b24d8a9acdf8dd967176f05c400951b3e0613a1c9847bf87c8cc79ef1120ed6e3e98412f0dd4e9c8c8c421057a2353279e6198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa2fb5b7e464a0a76d9aca8698e73802782da01fce50384f459be1427855c0eb502e6c7af07418cd0203fad6a1abde95e745c41a78c6ad1ae7b1b2ada2e643fd37260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55 - :label positive :raw 0x117196c7ea11e6362bca58533a55de3deadc441b18b0a7ca68557f374dfed6a629b1b63f1d649480aa9655406c454b55cbbf8d29f3aedc30de3b0745bed3be52226ad93c0a164e73d8d9161f9d0206ab232fa5a08cb349f7df3633096cd04e920de4a56223ee43aa3c4a18bf4c84be1879dd9182fd4a03318a4bebd642627d1e142a0ed74ba11936e27101a43db8e16f6a603953c3ea4b14eaebbe117970268a2abced69ffbce2e34440530111050a4d72282dd5f4faa7703d5762d04327175619eedb06c5d1f53510f7f7464b39730659eccf0e9dfeec2cc131fd0d27c4f8e3043aaea131d0e69b79a816b675ac0dd21b4796046c149ca16df5884d615025c5238f967690e26443e6f5207b5c2af7fedb837d534282c7db1ca926a9bc06a7390ec4c043a606711a021205ef7d97785d9ae246ba06b2912e24ff9e669fb700b42714a2e42c4bd73a79cd7b2243d1b784cadb22a58e6360be1af873424efd420c12f54bdcf07ff30854629a0531065973197e685193051f2fa11a7761b0cc39f6 - :label positive :raw 0x13b076f9e2ddf66bd1e9ec7509945ec37289d9ad65f210ed35e78ba2b02e7e3d2c6d9689097e79c4227b7b8519e4850be2d795f9496a70ae8607a3172208371a0774089b1be2375b269ac0cd913803af1e8e967c7a12ded9e38bbfe816cb6b2b25e481bf589a76e531e3cbaee9b47a07fb832b052a71029665a5ca89f1eb6d6b0f10223646f0d0f8f79189c456f40295fa02708a2629b8a88d7ae36caab470552b4bf562f83ed28edf524edc1646b4c4cd538bec5d544d8071f0c73406339b2e2043a8194e50b9ff3b93d13873035fee0ccc3b4a0fda33d34ac7a4771c9b884d291b24054553ecab7eb9a6807281a895bdcf29e95d8d3a2552749b7fc0932637198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x15d6eaaa18c5737e7bd229c2900f8deddf6da9c0e20e7e905e7b7491d041eaba2ab7d1b2a259b85054253da8947c2fd38b04a4ede3bfa6e258e22f668dcb5a63092a62b029973fcd9ec18db33eb4c7b6b649a2e6196561761789e39bc84f11ac0a59f2672462be814a277f495d53244691c40da85d39b210ed3e099b397a4cf92ad603022931e8c20c927fa114866ca26b305156336511a9224d6bd88e5ba7fb2b44dd02df7f7a846f546c77f3330cc171abeea7747ec03607c4b754a07101421f4b96b82bd3631447045f1bb66198fa6a904e48092750762efd419fb5ff52b51fac61c1a7265d0e1a6433e9767cb51c71e9ac5a119be9894f509bf92b0fb1b4198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x16f5d1473d8a9012df4efc624ae3b5fc3b1c1742bb73b9b62aa50c0dec9848ad1b2381a593f0a661db10b659329907fb62b4f5fd196092ef235f0775463b11f3054f9c54b1560a307e173c70fce534a2e4c7b248ec342f968a9db905fb31ba362513859b9c3a196e357d5d4f34e17f5cb2d78f4160103ecae86cb57a3e48ef7715e96b3ad7bfbccc491029f30be0ced0654c6c2600b49bfafc70af802b305a09154bb828c71576e1809723e3bbb5d459ece5bdccb9bcdff733761fe908e1e1d52f91cec7b5d03d4c5930875239f825c55849b352fa27b4e20581fc4a68950c752ee478820a0dc3f22866e7c5111d6fd1f057c18b7c9c1568173916ce67555c47198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x18dd52daaa11ff5dbb97c8776924d95b1bb86bf16481ba52519674873e0279ea0b32f4758cc18142794358e62b9c29951d3cb7e705d97e4cefd8422fa340ed5804cbac0707b92f59b87024017aae6941a3d8f42c6b93c619fa85cd54a3f0596325ef128bd051c44f95f7aa6122a390666691c2ec8a328f5302605f0aaae670db14a3194db0c978125b0212d2dbcf3639650e40f8acaeff5a5c20ba700de3966f004d3f0a629eb1456685db5a1b94d4b2f8dc0a9cdc5d29cccc5b596d88ba29fe0bcf53d38a1b0732fd90b73149559e0ee767f525875ebdb26f7f123136282afa28e440620ea4064d1f0190c75e2a36003f18643507a927926130eb54ecc1004d198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x1b6e4577cc71df5e856ed88d2d14a464343f140b07693e3b08308570b28fd55b24198aa6ee0f5bfec020ad2ff15729434439e4af7554fa0f7395ee20cb926346246b8e8c771c3db7226a8066537632923d7d5a542f8e0d600e7f0195240f1ec513cbe706f9ba436dd4a781fab85fa2e9d82854446cf91182dcfa66eb68c4b7e72533a60b837f9cf4838c4c38f4f9c8988fee10c9895753e7925a86330e925db702f47f10f7da957cfcc613361ab6aaeb67f14d22c06eec14e47e36988c4ee06705a596bd22bbb13dc898acfdd420c88893dd09f7fd4875e8b3fb65b54ad9643f2847ab3c7d853e89cfdf520de28e1092c1955b7e17d9cba5808f047a3d6898fd2f64f057deda8bbb646d5b9864d9789a696abf2a42218f7af28baae517f5e45723bd3952d332068086b2079260b285896cb84c73ece3647094fac90d8b1374c21eebb3f8ea3c3d9147fa09e4506bcff1c222a02ea8b4904fc6df3bca1cc0505e133d9a4794eb099e9bdf82a6fecdb2e2e29b0867bf0fe557475dc758d796714e - :label positive :raw 0x1ee2af29808bc7baad8eb3e87bf55588ef59763ae59585453aa57222a60409141756d11b0679f2e3c44a95592d270f55f76670c2d248fe2c0b391a11aa90d0ec0ea16e33157b6d0f197ed197ce3ad5b93ac91458632464dd5e4aa23ec628e6cb03c160eb0d2ab47566d495f1a53b7b1cdb659cb64e26c848c74267bc74ffeec81d5ee181514337f685e60ba02daccded24ea3122fb04d9da37790f3dce54587803087c55d223005ff8ad78f6f417b19caff564e8b8cb820d0eadb6bec43f0cf902b88f6e24920bd60dbbf082df1cd200abf141b6c01e7fcb262525364c14c20502958d26f4e6ad2d9b1db8a6b23e7fa5dc4d0e4c6673b0f840c000eeac001988198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x1f357db2cd961c374f81a4ae374f5306787361c3aea270815962003c0915b5d2044c12e4c6321f0a73b09480c1d7a84ce30ee9219b3b649ff36ec7553150428f1b789c458e1e033db933f65230c01f173dc581494d23407494818cbc70c5e4eb05685001b0f48e5191bc50797f1330beb69d7dabe58b9b7d0c9c86c61c8d2a3301c8dc500074bc4207038e94f028d954405d8b6ff8b3f1b52a7ce67c97382c0b0a9c7d7844ca3f0a571b04211c021dc96a29628119b067364a06fea760698a060452283eefd9b336e591f37119aa473f03932c9c6d7cb0256c93e2bb7ebc214024a87b7afbb4143434a5aecbec2c38e02c7e01e8b056b812c80deab761bd942906b4a2cadf0c0d14e9015f1dd1833e1a71bdecfcc8d400f0c96c309dd8f3f30e243fddb630078af3593c50273c6fbc2c33f2fc6e208ad1e6dd537079f569cd5f25e6c61eb8d52bfe15205fb66a6e90da703a7cb8b441023f90ae987e35c72f800e8e708e896b7ba90163f4dd87bb6660359ca5558473831dea4aac4d222fe443 - :label positive :raw 0x21b1479be2a88d421d6aa893a59fe4966322436bcd047e610f90929a5823188a2feb0baed066808be65012e37e364243877a4d47b75cd9ffe4a5df3011a68f90198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa1aa2ba0e64e80047d931df5931420de2d4dc0b7b6fc83121a9f155ddf9d6577520108e265338e3f2bdcc276bf69d955d60c73419d7ba24c25a40e9efd4cb24b80dbbd035ab913dc40917c815e66941eef6529d94ecbaaee8f77efe9aac45aab22ff4691bd3aa5f5bbb6067c1a4392dc87bb7a9997f7a660dd960df462203c18f2d4e9ee9f56967d24826884a2473b374d24b5afef1cb8d11555a2a62249b44a907a93f02c17da88bbef2e8b41a34ee1137aa7edb0459e06be0bd88ef68a876b0 - :label positive :raw 0x2371e7d92e9fc444d0e11526f0752b520318c80be68bf0131704b36b7976572e2dca8f05ed5d58e0f2e13c49ae40480c0f99dfcd9268521eea6c81c6387b66c4051a93d697db02afd3dcf8414ecb906a114a2bfdb6b06c95d41798d1801b3cbd2e275fef7a0bdb0a2aea77d8ec5817e66e199b3d55bc0fa308dcdda74e85060b1c7e33c2a72d6e12a31eababad3dbc388525135628102bb64742d9e325f43410115dc41fa10b2dbf99036f252ad6f00e8876b22f02cb4738dc4413b22ea9b2df09a760ea8f9bd87dc258a949395a03f7d2500c6e72c61f570986328a096b610a148027063c072345298117eb2cb980ad79601db31cc69bba6bcbe4937ada6720198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x23e6648726d779a5e9943a9cb2c3d89cc966f0ca965bbe7bbdc1bd93df6429302a1e299a0d2c7fb74af9e086c19b07b357c55e76d2c65fba3b122c8158ee2b76071a0694c6a785ae2ff2553f4c06e2d24d031b86a4023a0d41a095b9d35ec8d30c1ab42b9a9d852e0901c708a5a0dfa9920e0ba08828620a5ebbdf1ffb8f9d851741332dcd8798b695edf6be41e0e58803ab926516d0d600514c4572575b29241a64993ddd9be2bab46a7190024de9e051862f46ac3130db54ede8c322e604a22e198a9651f4d48dc87f0ebc9fba1061d49962668790edc37948681da728a79f1649dc12a9101ad7e6c1631c1290bec29720bf5617ee6b5afa720733748bc3fe2ae647da926e44cc8e5476a15ffc62f11eafc89cb7d1d9ea1107403e1773c49a2408eaaabd36aa0a8dc6db3fb091f3c8b4df202714f74ae8d8cca11a216a301725ef6bf83c607781e9c1696e31cb5baa60b9e2deb0856479b342737592c0961211d363f2f2fc286d903a1e94c6673714464530bdb734ded5608b4654466d3f35 - :label positive :raw 0x24ab69f46f3e3333027d67d51af71571141bd5652b9829157a3c5d12684619840f0e1495665bccf97d627b714e8a49e9c77c21e8d5b383ad7dde7e50040d0f622cab595b9d579f8b82e433249b83ae1d7b62d7073a4f67cb3aeb9b316988907f1326d1905ffde0c77e8ebd98257aa239b05ae76c8ec7723ec19bbc8282b0debe130502106676b537e01cc356765e91c005d6c4bd1a75f5f6d41d2556c73e56ac2dc4cb08068b4aa5f14b7f1096ab35d5c13d78319ec7e66e9f67a1ff20cbbf031459f4140b271cbc8746de9dfcb477d5b72d50ef95bec5fef4a68dd69ddfdb2e2c589584551d16a9723b5d356d1ee2066d10381555cdc739e39efca2612fc544229ab0abdb0a7d1a5f0d93fb36ce41e12a31ba52fd9e3c27bebce524ab6c4e9b00f8756832b244377d06e2d00eeb95ec8096dcfd81f4e4931b50fea23c04a2fe29605352ce973ec48d1ab2c8355643c999b70ff771946078b519c556058c3d56059a65ae6e0189d4e04a966140aa40f781a1345824a90a91bb035e12ad29af1d - :label positive :raw 0x2b5154892605b4b57c6f309a1f39d91a89d985264f9dc47342470b5605532939153954f4ac012e3d5860731081c59b0b5d9df76eeeca47c1ede99d0a73a8d1351b7962c4f91943b75bfa71d26698f33807c0a82c4aff43116e6b0e97e087d64e0337b7f3f182a6241093041180e874062c10467e0147e1abd93857dda7e6aa34153cac48663d8de0c9f23d1a2cecf0bd14f6d7cf877ef833751f8a524d0f4c1c1ff902721cd414e4c564c569143a0356d3b6cb7b1970067365c0a0f8ecb4976b0da26ca39baccc3b276b50cbd06db50b1c544055c0c636256fa35afdafee49bf2238e1b69bc5e674c9351b702c26021f8eb254e0f890595f5f22ca04b205748003d0a15ac5814b86f5463c48d5f7d398da010569d67f979b2af9381802b485fd2d3de1b5338ac2222d3d1bfca2e20f7c1a280780ba9abd54b46d42380fda599c243c33dbb5c54e9566fdda8567e059b596fba1e9afef57deb1703f27cd93ce7419779141bb51eaa0ea4f1fd39efc61aee4e6b40316248277599c599ec30c8dd4 - :label positive :raw 0x2cc6c9acabc199e21be075d6d7885acfa1f38fec18999d78105c87e55a5d8eb7238e3f5edea71116b4905645df360589eed6e69ff4145a28c6ae29599ccb590e0e8248a6ccd8770c3cdbbd6d7f247c76f189978508b6f3514877833b00a7c593261d44028c3119ad2707a456739918ad10b51e7257b539a34e7f479f2e76707a2b359c070959c19eb7bb2bf1dbbb2cc060558f6dd682965535cba0f2392d13b818a023e2b4d60c38c7c0ab6af9ff0887dd192ac88b5070851f4d0e7495a1144d0ed1531303f89b56ebe6e9a39e7b7c4b5f2385d774ab00ab0b3c32c9b110552a0794c8d242f2aa6f638a597e53d8f236c780fcac4a7e2cabcb688896a84046c713532c71aeac024eea1bbccb01b45ceb4ad91e106200b7e25b0e30bc588d783520692d41373a18914e163949fa765d49dbaa5999b1d606300a469555da182b591fe664fc1dc73f67d3261d81477fd5b43e9b7d9a376a09e4a2b82f935ce0ef730abd60b3b4ca1e15eae3dd484e5e22f0f8f50dfbc756b40cb2406e6a1d86c07c - :label positive :raw 0x2e565cd418929c3795adf3ea378f2616af24a1d7a93962c5be375e7fbdfe3d731197465669e70fd0793c00fb922d25dd53c8c35d4d686985e4e04741569497d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a781e0964591a816d07c8d6aa23d23b2ad50ae3acc529f877abf4d13e3f35e0fc25d443ba88ff661c914498d09f6c47bd3db7f8768c13ac2602e02250c34d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label positive :raw 0x2e5e8d67b60e1d06acd7a490f8394be4aab0eca89eac6738fff6664263500f2b23a1b85312f58351b078bfabd3ab8517e383900cc23a4d9a8fdb0a5ae691bd0023751d707cd5ababe78100ade4bcc1691182ef8a6086be7af4a0a62b52d7a5940dea3332f3c63c37814cba5afb4380c5c3ee3920ef5de5484c1961a98430c2820c10e66f5bd143c35562d6b5f1bd6d0a256f4afb69641a3d8c871f5caa98fa6a1c8f31e252726f5fb9f5f444f60b32fcf94ba5e077c9724d36246ec666d767cc1f0befe534aa028faf6181644d6774e4e14f600a5657b3e2f6287115317f678c13357844009932b0b873101c362a9ee9fea643412da278256377c345e3f409dc1db60e215fc52c5af9d1b5045473f2f06bb20399de3cde3ce877ba545b994f3327c359cd987e9f2d05f015974e1b18b98b8f9684a24b0a50441244333bf5a35a023036aeb27f556ca1e93dd351651594c723239a7c0cb15b8ab7a0446ba789ff17e4fcbe1d017009100203f39e446d7b686e30fce3323ef61d46bc956143947c - :label positive :raw 0x30618669fa4f387a7e9fcbf763bc0dc9908cf927d1f92b585ca17d46b7e97fd902acc05526844e174394b69b1e0b78d24f7b5bd0cfadcb6a33aa6dc090d9028f160c5af4494850ee7590972d0efda781e2879e76c807a16dd60ede657e0be6a8230f495774d31e8b73bf7ce73e6f87826d7a59e1c47b508d5f953a61c2b4939f0492560c98f9feab356c744c09f1ec80f5fc9cc579f9929a3c7d9046585431b7273a1175635e2ab1f1b63838c13bd9d1daf4dad2620a0e72beae5f66ab88acab0f0887388fbcfeed9d128b7324b47676549d378c55d6d28b80cc179258a2801711423de6d1555acffe946eebaee182f8d007d5bafea10c7e00236552de1c68b32b74c50fe814021736df034cfe502673b483baa8f12825b9c7f74c59943ca53516196e1e69cee3dc1a0ceebcd6163c57f0155afb41d78aac57966a2681fccd0229b85e084727db2843d66cc73e163875ae0cdf5ce9386bd6b2be7018476d460625bb91869e1c2453109ba45cda0fa3f4ba9b8186df72098e81ca6f131140d8b0 - :label positive :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label positive :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103aa4b2aeff1bc7afc5cd39952c872c8f29d64188e8d18c1b65e526d6277a33209854e0ac153a98eff0fd08a0c73d46dbbe4209f8a6a4f2aad914e40686f4720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label positive :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef4aac9b7954d5fc6eafae7f4f4c2a732ab05b45f8d50d102cee4973f36eb2c23db7d30c99e0a2a7f3bb5cd1f04635aaea58732b58887df93d9239c28230d282bd99d31a5054f2556d226f2e5ef0e075423d8604178b2e2c08006311caee54f0f11afb0c6073d12d21b13f4f78210e8ca9a66729206d3fcc2c1b04824c425f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label positive :raw 0x06236320cf783a01e2b8be7816a84671de9e8bebda0e8f957809ee1253565bae0a4ce1ac405b9974e4eaf9342c2a43bd1fdc4edc2bd18235249bf51ec43287440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label positive :raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label positive :raw 0x24ab69f46f3e3333027d67d51af71571141bd5652b9829157a3c5d12684619840f0e1495665bccf97d627b714e8a49e9c77c21e8d5b383ad7dde7e50040d0f622cab595b9d579f8b82e433249b83ae1d7b62d7073a4f67cb3aeb9b316988907f1326d1905ffde0c77e8ebd98257aa239b05ae76c8ec7723ec19bbc8282b0debe130502106676b537e01cc356765e91c005d6c4bd1a75f5f6d41d2556c73e56ac2dc4cb08068b4aa5f14b7f1096ab35d5c13d78319ec7e66e9f67a1ff20cbbf031459f4140b271cbc8746de9dfcb477d5b72d50ef95bec5fef4a68dd69ddfdb2e2c589584551d16a9723b5d356d1ee2066d10381555cdc739e39efca2612fc544229ab0abdb0a7d1a5f0d93fb36ce41e12a31ba52fd9e3c27bebce524ab6c4e9b00f8756832b244377d06e2d00eeb95ec8096dcfd81f4e4931b50fea23c04a2fe29605352ce973ec48d1ab2c8355643c999b70ff771946078b519c556058c3d56059a65ae6e0189d4e04a966140aa40f781a1345824a90a91bb035e12ad29af1d1459f4140b271cbc8746de9dfcb477d5b72d50ef95bec5fef4a68dd69ddfdb2e2c589584551d16a9723b5d356d1ee2066d10381555cdc739e39efca2612fc544229ab0abdb0a7d1a5f0d93fb36ce41e12a31ba52fd9e3c27bebce524ab6c4e9b00f8756832b244377d06e2d00eeb95ec8096dcfd81f4e4931b50fea23c04a2fe29605352ce973ec48d1ab2c8355643c999b70ff771946078b519c556058c3d56059a65ae6e0189d4e04a966140aa40f781a1345824a90a91bb035e12ad29af1d24ab69f46f3e3333027d67d51af71571141bd5652b9829157a3c5d12684619840f0e1495665bccf97d627b714e8a49e9c77c21e8d5b383ad7dde7e50040d0f622cab595b9d579f8b82e433249b83ae1d7b62d7073a4f67cb3aeb9b316988907f1326d1905ffde0c77e8ebd98257aa239b05ae76c8ec7723ec19bbc8282b0debe130502106676b537e01cc356765e91c005d6c4bd1a75f5f6d41d2556c73e56ac2dc4cb08068b4aa5f14b7f1096ab35d5c13d78319ec7e66e9f67a1ff20cbbf03 - :label positive :raw 0x1147057b17237df94a3186435acf66924e1d382b8c935fdd493ceb38c38def7303cd046286139915160357ce5b29b9ea28bfb781b71734455d20ef1a64be76ca0daa7cc4983cf74c94607519df747f61e317307c449bafb6923f6d6a65299a7e1d48db8f275830859fd61370addbc5d5ef3f0ce7491d16918e065f7e3727439d1ca8ac2f4a0f540e5505edbe1d15d13899a2a0dfccb012d068134ac66edec6252162c315417d1d12c9d7028c5619015391003a9006d4d8979784c7af2c4537a30d221a19ca86dafa8cb804daff78fd3d1bed30aa32e7d4029b1aa69afda2d750018628c766a98de1d0cca887a6d90303e68a7729490f25f937b76b57624ba0be14550ccf7139312da6fa9eb1259c6365b0bd688a27473ccb42bc5cd6f14c8abd165f8721ee9f614382c8c7edb103c941d3a55c1849c9787f34317777d5d9365b0d19da7439edb573a1b3e357faade63d5d68b6031771fd911459b7ab0bda9d3f25a50a44d10c99c5f107e3b3874f717873cb2d4674699a468204df27c0c50a9a0d7136c59b907615e1b45cf730fbfd6cf38b7e126e85e52be804620a23ace4fb03e80c29d24ed5cc407329ae093bb1be00f9e3c9332f532bc3658937110d76072129813bd7247065ac58eac42c81e874044e199f48c12aa749a9fe6bb6e4bddc1b72b9ab4579283e62445555d5b2921424213d09a776152361c46988b82be8a7111bc8198f932e379b8f9825f01af0f5e5cacbf8bfe274bf674f6eaa6e338e04259f58d438fd6391e158c991e155966218e6a432703a84068a325439657498571ba47a91d487cce77aa78390a295df54d9351637d67810c400415fb374278e3f24318bbc05a4e4d779b9498075841c360c6973c1c51dea254281829bbc9aef33198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa1e219772c16eee72450bbf43e9cadae7bf6b2e6ae6637cfeb1d1e8965287acfb0347e7bf4245debd3d00b6f51d2d50fd718e6769352f4fe1db0efe492fed2fc324fdcc7d4ed0953e3dad500c7ef9836fc61ded44ba454ec76f0a6d0687f4c1b4282b18f7e59c1db4852e622919b2ce9aa5980ca883eac312049c19a3deb79f6d0c9d6ce303b7811dd7ea506c8fa124837405bd209b8731bda79a66eb7206277b1ac5dac62d2332faa8069faca3b0d27fcdf95d8c8bafc9074ee72b5c1f33aa70 - :label positive :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000be00be00bebebebebebe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca71ca8d3c16d87cfd450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x000000000000000000000000000000000000ffff7d7d7d7d7d7d7d7d7d7d7d7d30644e72e131a0297d7d7d7dffffffffff00000000000000000000000000000000000000000000000000000000ff7d7d7d7d7d817d7d7d7d7dffffffffffa100000000000000ffffffffffffffffffffffffffff7d7d7d7d7d7d7d7d7d7d7d7d30644e72e131a0297d7d7d7dffffffffff00000000000000000000000000000000000000000000000000000000ff7d7d7d7d7d817d7d7d7d7d827d7d7d7d7d7d - :label invalid_g1_point :raw 0x0000000000002900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x000000000000fffffffffdfffffe2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x30644e72e131a029b85045ac81ec585dffffffffffffffffffffffffffffffffffff7d7dffff7d817f827d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d767d7d7d7d7d7d797d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d8d7d7d7d7d7d7d7dffffffffffffffffffffff01ffffffffffffffffffffff747d7d7d7d7d7d7d7d7dfd7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7dffffffffffffffffffffffff29ffffff0affffff0a - :label invalid_g1_point :raw 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g1_point :raw 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47000000000000000000000000000000000000000000000000000000000000000000000000ffffff000060bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad0c693395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g1_point :raw 0x25a78fa05de3e5f7c69f35ab209d6595697e8664c3572a57ea0c971fe33532ed0bc38b0a2d9961cf8d392de63be18471ffaaa192111cd8adccc98b7d790b61140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008013e823575500fffffffffffffffa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x2dec711c75595613e8f7e4723c19f6e69be2ebafe07e965a001f4fa00a41eecc10246180d145035dfe0e334a8e1f4274a189b8dde0b2cc683cddfd9cae9b634b198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208d16d87cfd4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g1_point :raw 0x0a12d3fb2743836bbbb51414a351e5e70429a5de70c0fe7cec084e47d6027709006a8c414196abf21da0b3f6944846c77a1032b519baa1abf125f4f84010c47a250f9cf43675bc1077753c607600f3e51b627a10f3aa68a7e462d89a6bd2a21312ae5d695c4f9792cf70228a1ba07e5e0c2cb47d7aecbae923a84a3734a94ff10bdcd3d0b8e47a925f98bad0184dfe81967aaff8db8f0dfae31afccbcb8c4bd6148dff646f2764243ba9100a930eb7cc8c766b58e0d9953256698da5dbe66cc31f372b78747db898121455853a5672e71977957f134615fd0dd1fab4938b65e7201458c7d8ec49141bd3289f8cc4d19bb52041d51187432579e2e67cab27c847198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa2110e6d9f2378c1c1cd070a3f1507c3aa924a60f67259abe487621b0d3c5c38f0c26130b8aaa54109a5d82fbb2782b9ed461a4b8faa69341ccf652d2f73e188722f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a482a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f80efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b300710c68e1b8b73a72a289422d2b6f841cc56fe8c51105021c56ae30c3ae1aca0b2ff392a2fc535427ec9b7e1ae1c35a7961986788cf648349190dd92e182f05198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daabebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebefdbebebebeabc689bebebebe43be92be5fbebebebebebebebebebebebebebebebebebebebebebebe9ebebebe2abebebebebebebebebebebebebebebebebebe - :label invalid_g2_point :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffff0000000000000000ffffffffffffffffffff - :label invalid_g2_point :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d00e9ff0000000000000000ffffffffffffffffbfffffffffffffffffffa120000000000000fffffffffff7ffffffffffff000000000000000000000000000000000000000000000000000000002d0002ff0000000000000000ffffffffffffffffbfffffffffffffffffffa120000000000000ff007d7d7d7d7d7d7d7d7d7d - :label invalid_g2_point :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a0294fafba497e1ec6d18c48814a69000000010000000030000000cd71ec682d26313681ea8a1a9a410c862cc44a5d0000000000000000000001158d600a2d8411f2e9bd1a1b51eac64e43b0c511f2e9bd1a1b51eac64e43b0c511fc9ba8b80b727a2c28ee454fc286fd659262c510a3e7f11a4b0e4b74bebafc - :label invalid_g2_point :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d00e9ff0000000000000000ffffffffffffffffbfb2ffffffffffffffffa120000000000000fffffffffff7ffffffffffff000000000000000000000000000000000000000000000000000000002d0002ff0000000000000000ffffffffffffffffbfffffffffffffffffffa120000000000000ff007d7d7d7d7d7d7d7d7d7d - :label invalid_g2_point :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8ffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_point :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffa10000000000ffffffffffffffffffa100000000000000000000000000000000000000000000000000000000000000000016c46ebe0077418d002f28e20236919ad92313729f18578ba8547626478ea52c2b5b688b4d8078d1e1acd7acc7be7f9e0e30812ce2925b35559213646c93237f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_point :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000fb55bf7df894a746fbe20b6f8c54d0dc0d9fd4ed005174a42fc3c45e6e27f912a20d63d446eb175733853b88dd36708eb7a81f5c79e7659c3a6e2b2c470077005ed60ba723a2dd3a5fc35520f982963de61e3b563636fe6996cc2c3008035720ad16f835a46faca48c6d39ae00a10d3514e93ae3b946ee2f009ea2dccff97e198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed09068950585ff0759e99ecad6903000000000000000000000000000000002c000000000000000000000085b7aef328c21800deef5e0000aa426a00665e0000aa - :label invalid_g2_point :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8329a0d6d5e7d14a774c3abff1435361da2ee5d8b4f3ee62085ce779f248b41d4a2fd37ae5468f6a17b7f9a0bcca02ee128bdced61402a566e4eee2d0fa825f03d198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_point :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47000000000000004500000000000000000000000000000000000000000000000107b55de1642362d16b8fc4dccfec9e794d24968511cf8e252ed27afc4d72ca1e0301cb4d7e0b7b52a6a8f78613c403ead1543fedb0d3f28c77685fdb9eaa27420cdc335fa81dff303b71cffb0256d7097c2b4c6715ca7b1589ea9386a41c2f851223d6bb1f3e68ddfb08f4c95f590f99227fb681a3b0abdf685cf12bde37d8ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000001f1cd7f247f2ae1ba9a1aeb4b32ed4c8c13c70c8861b6ab5340e276c58e1046b13d7de2b557e0ae2b53380ad596ba79f07c037c9d9aa17cf407e9ed86201436e - :label invalid_g2_point :raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed95bc4b313370b38ef355acdadcd122975b4b313370b38ef355acdadcd122975b120000c8db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_point :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1 - :label invalid_g2_point :raw 0x2a4f1dbc9fe6d2882462fb11afeae7b7f2a0cf213b1f19c45cb222336283f3801141763c897c9a90e387ea80f68eb88c2d79aab680196d9538cd2ca632a5e81b0e540f5b5be91f82ed05349750761224f543068ce30d2d5e838bf66866f345200fa5ac8c46f725e54505019bda3356ef6e35b0a89b9b4f79bb0c62211235c9312e6d97a1f7e0428fc0be6be02c811095f5166710dcbe869c36a8ef89cac63e012657bbaf3bcfd106dd677eef03172f693a6c919776f441dc0fd47a4bd91d0487225fdab8fe6cd876363d27075cdf0d01c209da61b1634b574a5d811cfae407001216b7c3e2adc07c3bef31771c7bb9e1d02f07ff3a5b74953c4fd5bf9a7a6dff25f63fcc543337b8f6275f97d6479633b921541a96ac1bc2aff2e0905db7407c206776f9480168741eca625c06e5526b4664a02ce664bc656f39664d96278b6e1e40e8084fd648ba315f691e8367be1d4c13844421c87223d84829c31a0d7afe24b8042d4cb604ae66c0dc97ca8a9c2d22c743335d92bc401700f6b00d5cdc5b - :label invalid_g2_point :raw 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0203d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db841213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db922160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2e8ff2110ede0e189426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_point :raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba2e89718ad33c8bed92e210e81d1853435399a271913a6520736a4729cf0d51eb01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb314a9a87b789a58af499b314e13c3d65bede56c07ea2d418d6874857b70763713178fb49a2d6cd347dc58973ff49613a20757d0fcc22079f9abd10c3baee2459000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000070a77c19a07df2e666ea36f7879462c0a78ebbdf5c70b3dd35d438dc58f0d9d0a2dd5b476a606a8243e7e879bddaa8086ba658087aacc4d986a10c74dd9e7742d46618f9d516e0f07a59d3c97f5e167a1b49ebe9fb30dd05bded8185a545420 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb43 - :label invalid_g2_subgroup :raw 0x0a96696a78e6818da746c504a8b83f7a3faea0dfee0a2c52751f3cfae5fe979b017a319dce2d1976671eddd5b909781c102e5eed5c40db00bdbd19a14397b889198e9393920daef312c20b9f1099ecefa8b45575d349b0a6f04c16d0d58af9001800deef121f1e76426a00665e5c4479674322d4f75edaddde46bd5cd992f6ed05a7a5759338c23ca603c1c4adf979e004c2f3e3c5bad6f07693c59a85d600a922376289c558493c1d6cc413a5f07dcb54526a964e4e687b65a881aa9752faa2 - :label invalid_g2_subgroup :raw 0x111f95e1632a3624dd29bbc012e6462b7836eb9c80e281b9381e103aebe632372b38b76d492b3af692eb99d03cd8dcfd8a8c3a6e4a161037c42f542af5564c41198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b924933879 - :label invalid_g2_subgroup :raw 0x17956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800104e75a20b641566a0c71c9069a5256391aa31e22021d36c037c108dfb79c66200bf257ae3d66a589214f980a2ae34f9544be2fcbcc13b21f4c1642f31aa4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800104e75a20b641566a0c71c9069a5256391aa31e22021d36c037c108dfb79c66200bf257ae3d66a589214f980a2ae34f9544be2fcbcc13b21f4c1642f31aa4d20 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000012ab9bb0c853fb1d884197cdefdf654c01a289b677094fe609c835d2b249dcc51460243cc357281001b8b257c6396865c729761ac575a85b2f8f0e58af439c84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000fb1b0e8c8b85ec99ebedae0880006b0809f5151890cca524eea2c0b3ad87f3229d3e6bc7f0886b75e186b10564dc990258855e0311e3e2e72f9d9c0dfab4f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000fb1b0e8c8b85ec99ebedae0880006b0809f5151890cca524eea2c0b3ad87f3229d3e6bc7f0886b75e186b10564dc990258855e0311e3e2e72f9d9c0dfab4f0d - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114cc34c5044c87540b942287d555ce935499ce155202081ca5ce495c356896009fd9490a6f214b7729f9574d53fce82a2d46b3ccf7499ab5616b2c4f36582d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192b7e3a0ca8b63592989fe8b2589465703315272bc730644e72e131a029b85045b68181585d00001b86b77538000000000100000000128a694e7017ae1db6a312c9ef648b1a4910a41e684cb554302044a2065f04680df2d76a91278279cf401d431c31876ee9c8ad35070694552ccbd368755413830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192b7e3a0ca8b63592989fe8b2589465703315272bc730644e72e131a029b85045b68181585d00001b86b77538000000000100000000128a694e7017ae1db6a312c9ef648b1a4910a41e684cb554302044a2065f04680df2d76a91278279cf401d431c31876ee9c8ad35070694552ccbd36875541383 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b000000000045000000002a00000000008000000000000000000130644e72e131a029b65045b68181585d2b0d3025c6abdbaa75ef4d163a7cfd4017c66e1806ece8d631d792f8cbd8bdf7514a9058c183a3b2fcda7e86c44b7752301a6a722cdc812165b619f3cd2b21250d7f7083d0b984fdaf8636202e4ae0470000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2b0d3025c6ab2eb4fbef4d16d87cfd4000000000005b004500000000000000002a000000000000000000000000000001109beddbaa84026c8f71d34a485af27fe418028129b55b0a0df51e3dba2310021aea54403ce01876467152aa79ca1f227b6b1e0f95b56cb0537583190252556d - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000fb55bf7df894a746fbe20b6f8c54d5dc0d9fd4eda4742fc35100c45e6e27f912a20d63d446eb175733853b88dd36708eb7a81f5c79e7659c3a6e2b2c470077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000fb55bf7df894a746fbe20b6f8c549feddc0dd0d4005174a42fc3c45e6e27f912a20d63d446eb175733853b88dd36708eb7a81f5c79e7659c3a6e2b2c470077 - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea1146af1a0c4df0000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015d42e5a1c18703100bef65a743007bead1fc389b7d8f0a8ccda34b7d30620cb1c4156d243211b733af4f4fff11b9c0928308bf3c3102415e3105b986166d0cd00000000000000000000000000000000000000000000f8ffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249409822e0000000000000000000000000000000000000001154baf30644e72e131a029b85045b66ac4175696816a916871ca8d3c208c161a46c432126f44fab27034ba2832173059ebf31a96607ada20f006b4f12d4a8bad410d8f02eee77897359cfc599b6ca4e8c2a47f641fc0cd6d4146d8eca263a85c7aa36500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b92493387900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b924933879 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb43000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb43 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb431a3cf0c503b2dbc6e1b0f8aea605de20d8612fe14627c6f4d3706f8272a1cf842a0bb098018ca4392a1ddc08b9605602aed954308944ac729e2f99bfdd0166dd0000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000024b364d16400886c82900af060fd117cb2f4e0b93590cbf6ec34ed97f4c391ec26a10e3233aeff776d578de9178a9b7bb919e6eb6cf2cf924eb16ec8dc659af9 - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b05040ff00000000000000000000000000000000000000002e00d573b028b22b9d347da8044a53c94b6c3aee7d9bfb00ab2c0a10eb4775e619e1a75be1c5d39a105504a0e5d16c949524742dde6bbb6e831668fef921a1430000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b050ffffffff585d97816a86b77537dafbef4d16d87cfd4500000000005b00450000f400000000002a00647d903b504c1a020000000000012db3d49da56012cf4f73cbf19fdb59ef41356cebb4f4b6f692f9a38fb282a9ff2d96db5d24dcea418a44feae6052fbc7788e65e521b17232666818386252176a - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000107b55de1642362d16b8f25dccf30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d800000009eae594f627b7ccf496d680f0266e7364f51d2d99ccd69801f29137d889e1e006ea1409d3f9bb38bd40e8da0701d122e059a02fc3c3c4a99a8cbf6e4290bdc0000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000107b55de1642362d16b8f25dccf30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d800000009eae594f627b7ccf496d680f0266e7364f51d2d99ccd69801f29137d889e1e006ea1409d3f9bb38bd40e8da0701d122e059a02fc3c3c4a99a8cbf6e4290bdc0 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000005b00450000000000da76b36b83c72830000000000000000000000830644e72e131a029b85045b68181585d97816a916871ca8d104d5b2baf5734631b8765e7f5163862fcd3bc29f751af42d869a0c8a329f5a53472d3c977038bb7068cd6bc298bd1ec695a49e1db0620332f26e03a4a0ed9076973c1fea43099f2000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000005b00450000fc00000000002a00647d903b504c1a0200000000000130644e72e131a029b85045b68181585d97816a86b77537dafbef4d16d87cfd450125b8edede9e4f320e4dbfd7ee46d23a82508c3b44dbb99cb29724daaa5c5602d663cc48c6d7469cc9df0e861f3a9b93239af8001f8ecf28b4572f201ef1369000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a86b77538dafbef4d16d87cfd4500000000005b004500000000000000002a00647d903b504c1a02000000000001247f1f6fbf2fe1fff7e28d816724080774979f57692c2fa8569ea1a3ce52dfc51f5c96f77d84ae24b701a32ff1b8d95b982c76bf5ab02e605c9ba4fa9f45b958 - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002012cd187faae3648a35e12cc197ddb26d9d3a44a625d97816a86b77537dafbef30644e72e131a029b050ffffffff5802086325c1129ad4a34ebb48ee9634016008aef33d9388c8f993f0af340e047c1c9519d222062186f7b025291b6f6f4ef2293f1064b0e3345895dc4968bc8bb52fcbe960621c1f15cd7c693c7347078e32000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45012cd187faae3648a35e12cc197ddb26d9d3a44a625d97816a86b77537dafbef30644e72e131a029b050ffffffff5802086325c1129ad4a34ebb48ee9634016008aef33d9388c8f993f0af340e047c1c9519d222062186f7b025291b6f6f4ef2293f1064b0e3345895dc4968bc8bb52fcbe960621c1f15cd7c693c7347078e32 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b05045b68181585d97816a86b77537dafbef4d16d87cfd4500000000005b00450000fc00000000002a00647d903b504c1a020000000000012c32d7465b0607cfaebe0b13577b25e42fe6d9e49eeb9d5c0ca78cc17e114cbc2cd71c8288ebbd272a784c5b4921128cb68e9e2ddaaec0595b266126c4e526bd000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b05045b68181585d97816a86b77537dafbef4d16d87cfd4500000000005b00450000fc00000000002a00647d903b504c1a020000000000012c32d7465b0607cfaebe0b13577b25e42fe6d9e49eeb9d5c0ca78cc17e114cbc2cd71c8288ebbd272a784c5b4921128cb68e9e2ddaaec0595b266126c4e526bd - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a86b77538dafbef4d16d87cfd4500000000005b004500000000000000002a000000000000000000000000000001124ca5dc43ed1e22d1c616b50a7d4249a012c1d65330ae8e4cad70567c8231bb23f9415fa570e58e0ac61e4e6e7a6bd02a564f6b206a9d4645401b1d677bf3ab000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a86b77538dafbef4d16d87cfd4500000000005b004500000000000000002a000000000000000000000000000001124ca5dc43ed1e22d1c616b50a7d4249a012c1d65330ae8e4cad70567c8231bb23f9415fa570e58e0ac61e4e6e7a6bd02a564f6b206a9d4645401b1d677bf3ab - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a86b77538dafbef4d16d87cfd4500000000005b004500000000000000002a00647d903b504c1a02000000000001247f1f6fbf2fe1fff7e28d816724080774979f57692c2fa8569ea1a3ce52dfc51f5c96f77d84ae24b701a32ff1b8d95b982c76bf5ab02e605c9ba4fa9f45b958000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a86b77538dafbef4d16d87cfd4500000000005b004500000000000000002a00647d903b504c1a02000000000001247f1f6fbf2fe1fff7e28d816724080774979f57692c2fa8569ea1a3ce52dfc51f5c96f77d84ae24b701a32ff1b8d95b982c76bf5ab02e605c9ba4fa9f45b958 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a916871ca8d30140b193f92396c00000000005b0045000000000000000000000000000000080000000000000001301a8b8043356b83c4341d5e9cfc67071c61c0b053ec979b59ad8c0455b71c9815f88e8c709168c1ab898ca5288423b585331497f16b2c074dcbf76c2480e8c9000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d30140b193f92396c00000000005b0045000000000000000000000000000000080000000000000001301a8b8043356b83c4341d5e9cfc67071c61c0b053ec979b59ad8c0455b71c9815f88e8c709168c1ab898ca5288423b585331497f16b2c074dcbf76c2480e8c9 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd452b0d3f819fd0046aee4d0e54cc759ad714c473bd5f86a0d68df977f7450390f730644e72e131a029b85045ae0000000000000107b55de1642362d16b8fc4dccf2a5c3a27c4a417ea34f627b9481b9004e3b0ef59619daa16e846d8a152d6bf771301a8bb9c71966a4b557a21eea89447294e8a9cc1308f0c8eecb16dfbf5d53b000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000004500000000000000000000000000000000000000000000000107b55de1642362d16b8fc4dccfec9e794d24968511cf8e252ed27afc4d72ca1e0301cb4d7e0b7b52a6a8f78613c403ead1543fedb0d3f28c77685fdb9eaa2742 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd0000000000005b0045000000000000000000000000000000000000000000000001112006831f3f0e121585c21cdf0aaf63f09728bcfee141bb4cd407caae7715e319df1e217ad7b1f874726c6683ab87b423c1737f46a54dc5356a9b617c6b9e28000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1 - :label invalid_g2_subgroup :raw 0x003db26a0b244fb3fd47f7f5f0f8a289e088fd932d340f0592696503fc62124824c9b9423ef04336563adc35604ba729a4c9e6104bfcb55517e3198b8edbdf981800deef121f1e76426a00665e5c4479674322d4f75edaddde46bd5cd992f6ed198e9393920d483a7260bfb731dd5d25f1aa493335a9e71297e485b7aef312c20b9f1099ecefa8b45575d349b0a6f04c16d0d58af9007f2c6d8bd7aa763a3b0e0b7c77862fe8d10d489a493a1a5c5d0f282c7d4e8148f340653c4b6297a1088f003db26a0b244fb3fd47f7f5f0f8a289e088fd932d340f0592696503fc62124824c9b9423ef04336563adc35604ba729a4c9e6104bfcb55517e3198b8edbdf98198e9393920d483a7260bfb731dd5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed2ba3e0cab22efbfef96e027f1a29ba7ec11a0f824024a3787d3cb8370b9eed71103ce48dac2e3ff691b61c7e4466adf35aa183aade7f15386bf7c789628b1b0e - :label invalid_g2_subgroup :raw 0x0d1e4322f03fa0515f8ed6cb02b15e5a024b5092003dd7792d2ac055f14ac67d155c53a1daa56e3a5e9bd097cebfcd44038f2c606c8951310aae0ea01a44725300000000000000279573fbfe8e6c2300000000000030640472e131a029b85045255495ffba02a0ed6877a0a6ed4684235053c04cc3aaa05934e35bbb953673af0e1cec4c9d6d3921992e4c5c71523f5d097cde90f25b3e6c52c9c63e764a67870fe0cfe24e0b2f78d4f909c9131e3794fa911b1109df4a567b1423475cf409c1000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4700000000000000000000000000000000000000fcff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000212a3b4059e59d125dd17f662945170e1e13024fae97a401895690acac63cf681aecb67409d1d9c142ffd13375bd79fd0457deb278dfa91b5756378fb837fd60 - :label invalid_g2_subgroup :raw 0x0e474956b0fbc11ba65f3c7632afb3c66a98340871cee7c974db4461d8791b8d25410e545457af7bb0e9d2f1f8126180f11dec9bfcf69cd2934e6814741c9aa2231e75fddf7e2fa8b38b7dd6fd13eb4b7046000000000000000000000200650000000000000000000000000000000000000000000000002546ac8393e836a2970d312fc0ac642c207b5b36e17990b4f7d0ef39cfe6f0d46b9c556a0b7935714b1e4cd9fd726048138dcdea456203d4b7414f3ba5ef7b37817aa98874d71c191f2e5efcb149c6a4914b8d85be71e79254f9fdf19f62de2b2f6cc0822e578a420f07fd874051cb395ca999e596047a25fc6bc12cba97dab578f9f903612c1c757f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_subgroup :raw 0x102c9afaa6ac9d2553d0f47e2a945816f56b10014ddcc00ef63f5cda3d1431020db583622c614b32310911623e2f71f7871413d13dc372ace97f1813d2622d590a0e124cd6005b33c8a16492b1b451897b1679f44f3d288585ec8f82b49f6f501579cd1aa3fb1bf108c6b7b5d1f4ae1fae44099a8bf5fddc74d87665e29812ba0d5db514ca1c318cc409bcbf9a75055b1a8e7b783127734d902b6118b518ee962f24a2abda945e843c6952a5f0632365146cfd4e2034b70e41a78772fc404bea102c9afaa6ac9d2553d0f47e2a945816f56b10014ddcc00ef63f5cda3d14310222aecb10b4d054f7874734544351e666106d56c02aae57e052a17403061acfee0a0e124cd6005b33c8a16492b1b451897b1679f44f3d288585ec8f82b49f6f501579cd1aa3fb1bf108c6b7b5d1f4ae1fae44099a8bf5fddc74d87665e29812ba0d5db514ca1c318cc409bcbf9a75055b1a8e7b783127734d902b6118b518ee962f24a2abda945e843c6952a5f0632365146cfd4e2034b70e41a78772fc404bea - :label invalid_g2_subgroup :raw 0x11c8f0ea735e099781f852fb93256540c7c7611ba324f67680f3dbfc00bbdda12d7fb8d83e13afa4ea8a9d8817cd5b7c5b1804aa1006af2a8ab7e9c7757b300c040000002db3759aaff5357156bc2e8d52eacd11efb7d108d3b4034162839a9300000000003000000000000000000000000000000000000000000031000000000649ebc27a3909e089c6023c7ed952098a3e5547ce56e79953929ba4d718f1311c2c7e752e7947b506c14a8300a0d15d9022bd6fba67461cc8a0783dfeba77fb11c8f0ea735e099781f852fb93256540c7c7611ba324f67680f3dbfc00bbdda102e4959aa31df084cdc5a82e69b3fce13c6965e7586b1b62b168a24f6301cd3b040000002db3759aaff5357156bc2e8d52eacd11efb7d108d3b4034162839a9300000000003000000000000000000000000000000000000000000031000000000649ebc27a3909e089c6023c7ed952098a3e5547ce56e79953929ba4d718f1311c2c7e752e7947b506c14a8300a0d15d9022bd6fba67461cc8a0783dfeba77fb - :label invalid_g2_subgroup :raw 0x12ca97e893996e5bb392c57abba4578276654d2856b336b640eafd84de31140e055370544625ea3c3e85a42831dcaf47353695b158149bc2d5bf4061326f089e0e80426227ce5fd647afba497e7ea7a2687e956e978e3572c3df73e9278302b9000000000000000000000000000000000000000000000000000000c451f8749a05602fde384569be9950c3466d0fb40a66a63f202c3a685856cd21c76cea2be70ed4f367e657bc59c785bf6bf6ac33fb4b653e8bd68d1d838e0416e8c47b5f5312ca97e893996e5bb392c57abba4578276654d2856b336b640eafd84de31140e2b10de1e9b0bb5ed79caa18e4fa4a916624ad4e0105d2eca66614bb5a60df4a90e80426227ce5fd647afba497e7ea7a2687e956e978e3572c3df73e9278302b9000000000000000000000000000000000000000000000000000000c451f8749a05602fde384569be9950c3466d0fb40a66a63f202c3a685856cd21c76cea2be70ed4f367e657bc59c785bf6bf6ac33fb4b653e8bd68d1d838e0416e8c47b5f53 - :label invalid_g2_subgroup :raw 0x1425b11b4fe47a394dbfc0ad3e99dc93c3e1c0980b9bcb68529ba9de33dbf585168b8cdff7ae7d084fd111608fa03e018b415fd4f0755f7e8f039a2d852bda0e0000000000000000000000000000000000000000000000000000000000005b00149bb18d1ece5fd647afba497e7ea7a2687e956e978e3072c4fc9ec579b809462061ebaffaedc532d8bb542f9d93cae5dc6c4b431833ee0a7be4d053e2e0d60d03c12e282e4442c88f5235d004e8edba3080754ca41c976d03cd332a9b6fa42d1425b11b4fe47a394dbfc0ad3e99dc93c3e1c0980b9bcb68529ba9de33dbf58519d8c192e9832321687f3455f1e11a5c0c400abc77fc6b0ead1cf1e953512339149bb18d1ece5fd647afba497e7ea7a2687e956e978e3572c4fc9ec579b809460000000000000000000000000000000000000000000000000000000000005b0029e864b516b661105d0a2708f21beaae1bf1636608ac53864c4d8f0ea2e7dc3805c3b957caa8f4c5f248e3e6e754304e9ba7e5b6dd3a4ece125f47811a525e65 - :label invalid_g2_subgroup :raw 0x1565586940bbb0e082639a1e2c9ecfe96bff6cbda25a93c4d462b8360230067219767d96dd90432f459bf8f6181c9fea507bf7bcd4063fd070fe8e72093e8bf900000000000000000000000000000000000000000000000000000000000000e8000000000000000000000000000000000000000000000000000000000000000023812d70e97cfd777c5cf0b64b18400f3ea88afb56146bfc1f34071eebb0599827352c710f0e1711b5d18e672b5cab3c369cd8d84b70ed159bb712c7d929c8e51565586940bbb0e082639a1e2c9ecfe96bff6cbda25a93c4d462b8360230067216edd0dc03a15cfa72b44cc06964b873470572d4946b8abccb21fda4cf3e714e252b5ec0e7df7df26d0cc46dd811ace847a4174aa634c8d9269ccebb52845d7829a0fe67466554bc0a6c97089dec1ebac672344bc3a69b8fc6904f9b83438cbb24c159cda85a7f7e04f7e128101e8fbe502fee784946ffce0a9174424f0254b22b0c8ac28082e97eae5ee175ae2c1a6e466c7dd693238a386ec80f7743ffc517 - :label invalid_g2_subgroup :raw 0x17ac723d48c98fce706845b61c254630acb6da96a9620fc6cd07276a4ef8936d1a515b7e403d2a46bb5387138f17d33c2b12e3d5051f9d22042921f35031035e000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d8ad25dc006eea79b9c052a6a367b209d5c9215c8a4c325555a7e1e608abed022dd54ed23382326a8df674c7be35d7ac181c9625a10f508dd7fbd109760d76217ac723d48c98fce706845b61c254630acb6da96a9620fc6cd07276a4ef8936d1612f2f4a0f475e2fcfcbea2f26985216c6e86bc63522d6b37f76a23884bf9e9062ca96b10a86be7bc151a74e01170193f2ad046c2f5eb3a25a95592cc3a17752043c18fe0a47868239575b1c3700be7308890370eb6982f4e3e36916ebc28f52b7d22180be2bdca69028c5bf32181d203b2350781d675098b320766f5dcd9b02a21aa3010f604fea531e9264671d546cc94d8a0ddab42b7146573f5c1ed26fb - :label invalid_g2_subgroup :raw 0x1c4189bbfe590521da71e6834b73a622528fd923e9421f18df9a48e9123b16aa15c8e4948927f2e089accb33c8d51b4c83ca69505f4a7801399573273d7439910000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800023ad956e40f22f18bf59310f6d23055f2a3fdc2713f05cf1b099a18041cd498220b15bb64c3c6223098439e4fc7e9b2bd956ed94b2bf1f066c281d41c8560ee51c4189bbfe590521da71e6834b73a622528fd923e9421f18df9a48e9123b16aa1a9b69de5809ad492ea37a82b8ac3d1113b701410927528c028b18ef9b08c3b60000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800023ad956e40f22f18bf59310f6d23055f2a3fdc2713f05cf1b099a18041cd498220b15bb64c3c6223098439e4fc7e9b2bd956ed94b2bf1f066c281d41c8560ee5 - :label invalid_g2_subgroup :raw 0x1c934d642c245e76eb0c016b17e8eced3a1cf56ef6d787eace40bc0cb933dea902567d6e1141f67673e6f17a705f3d9764c6d5673f1f93e2ed5a21fd38e9a572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007700000000000000000000001f3953d0d836a44e15aebef16dd187ccf9493693379fe7d1c5a2cf2deb87f89c0dd737c063475fc587c1574a8ff4e9e4f933118d67bb7ba4a70c79c1ccb0d3441c934d642c245e76eb0c016b17e8eced3a1cf56ef6d787eace40bc0cb933dea92e0dd104cfefa9b34469543c11221ac632ba952a295236aa4ec66a199f9357d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007700000000000000000000001f3953d0d836a44e15aebef16dd187ccf9493693379fe7d1c5a2cf2deb87f89c0dd737c063475fc587c1574a8ff4e9e4f933118d67bb7ba4a70c79c1ccb0d344 - :label invalid_g2_subgroup :raw 0x1ced814234531c29aa14f95e3a3f59657aacea69fa4c35dfa5b8e03c87e8075725c3327a2c4f61437d53abbb2bb75dc1dc4f2427c3e9d7714d5d83dae80697690ec85b4f8a9224b27145b3757b7bf6e7397bc04c8634404d924689e27bb8a261000000000000000000000000000000000000000000000000000000000000bf890e717255b589c7286f7bde23fe6ac9d838262d9e7ba5bc603e410abf27aada5b1760bbdb5183ae4e28f049cfe75fb9600b8fd03e63d9aa1a9bd709d23afbc12f1ced814234531c29aa14f95e3a3f59657aacea69fa4c35dfa5b8e03c87e807570aa11bf8b4e23ee63afc99fb55c9fa9bbb324669a487f31beec3083bf07665de0ec85b4f8a9224b27145b3757b7bf6e7397bc04c8634404d924689e27bb8a261000000000000000000000000000000000000000000000000000000000000bf890e717255b589c7286f7bde23fe6ac9d838262d9e7ba5bc603e410abf27aada5b1760bbdb5183ae4e28f049cfe75fb9600b8fd03e63d9aa1a9bd709d23afbc12f - :label invalid_g2_subgroup :raw 0x1f9d02fa71d0ae244edc79709af68216d99a978a5e8fd92ebe793fff8317aad42cd6a493d88a0a87a6f6818c23fa87ff12fd84e5641e1081e849f6e88a488a4304bb53b8977e5f92a0bc372742c48309445cd3cfa9a62aee49f8130962b4b3b9203e205db4f19b37b60121b83a7333706db86431c6d835849957edf0509de1521f544b5e4ab6d13dcb7e89582aaee12a8410a7c6b2d8a5de7bd83e8cdb1fb1a82baef43e095caaf7c2aca272aee277d1da98d74656f2ca01b833c67dcc08ca5d000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1 - :label invalid_g2_subgroup :raw 0x225fdab8fe6cd876363d27075cdf0d01c209da61b1634b574a5d811cfae407001216b7c3e2adc07c3bef31771c7bb9e1d02f07ff3a5b74953c4fd5bf9a7a6dff25f63fcc543337b8f6275f97d6479633b921541a96e0f2acaf901bc25db7407c206776f9480168741eca625c06e5526b4664a02ce664bc656f39664d96278b6e1e40e8084fd648ba315f691e8367be1d4c13844421c87223d84829c31a0d7afe24b8042d4cb604ae66c0dc97ca8a9c2d22c743335d92bc401700f6b00d5cdc5b2a4f1dbc9fe6d2882462fb11afeae7b7f2a0cf213b1f19c45cb222336283f3801141763c897c9a90e387ea80f68eb88c2d79aab680196d9538cd2ca632a5e81b0e540f5b5be91f82ed05349750761224f543068ce30d2d5e838bf66866f345200fa5ac8c46f725e54505019bda3356ef6e35b0a89b9b4f79bb0c62211235c9312e6d97a1f7e0428fc0be6be02c811095f5166710dcbe869c36a8ef89cac63e012657bbaf3bcfd106dd677eef03172f693a6c919776f441dc0fd47a4bd91d0487 - :label invalid_g2_subgroup :raw 0x22847a3cd1cb28b60a51b54991d6dd86d206aa12b3873942c45a120b2e63a49226c3889c7b08d9288f13f64e6e3f166c59f57b5c014cbecf815a4aba4ebabbfb2e91f2b0f4f7a42c870fe8f6236ec1042bdeb2586a641808a5e09019514e83a02b078a1f12cb5426b6bcfeb9548566afb4bdf7454190eaf97f63e210f3a94ce1008a9ede8dde2c849793027433d90c626bc326bdc248dc223f537f7152955dac00b319b7060ad49091d9b52015b4ae8085bf6739b7f5a2c098c2f113ff33806a22847a3cd1cb28b60a51b54991d6dd86d206aa12b3873942c45a120b2e63a49226c3889c7b08d9288f13f64e6e3f166c59f57b5c014cbecf815a4aba4ebabbfb2e91f2b0f4f7a42c870fe8f6236ec1042bdeb2586a641808a5e09019514e83a02b078a1f12cb5426b6bcfeb9548566afb4bdf7454190eaf97f63e210f3a94ce1008a9ede8dde2c849793027433d90c626bc326bdc248dc223f537f7152955dac00b319b7060ad49091d9b52015b4ae8085bf6739b7f5a2c098c2f113ff33806a - :label invalid_g2_subgroup :raw 0x26581613e6c802822867d2b3a0867fd7fd8cea503764ae1a9d01ec0d5364d1be0530ae3d4fe87ac76da4382835135ac0aec9b1ecd0705cf84c21b48327eade5407a13e1be6f9072893c0e5bb528c5cc22dd6370308dda1613068e064c6e5d15a067239c795d2ea27b85d93e54fc221d81e9de3ebc8e43c20d63608e7078fab6822fa7ea234e21aec74f4db0b365ae1e7cc6e7f4aac89bc460d0308b83399be8627705b19388ebeddbd35a5ce72830ec07e3f1bca3f4e9fdc0aebaab5a1fe91b126581613e6c802822867d2b3a0867fd7fd8cea503764ae1a9d01ec0d5364d1be2b33a035914925624aac0d8e4c6dfd9ce8b7b8a498016d94effed793b0921ef307a13e1be6f9072893c0e5bb528c5cc22dd6370308dda1613068e064c6e5d15a067239c795d2ea27b85d93e54fc221d81e9de3ebc8e43c20d63608e7078fab6822fa7ea234e21aec74f4db0b365ae1e7cc6e7f4aac89bc460d0308b83399be8627705b19388ebeddbd35a5ce72830ec07e3f1bca3f4e9fdc0aebaab5a1fe91b1 - :label invalid_g2_subgroup :raw 0x28100e22df4dc1c6bf8801f63ffdef2af6bfb80147994395be6dc792479ca4f517414e05ac69d56dec03e0af314645b463414a7d831aff54459b6d409351a5a400002851fd14fbaa7fd586e3039a2d9fa136c42685cb2b5904bf0591b95b52fc000000000000000000000000000000000000000000000000000000000000000024d852a54e2d52ffc43b2e4f1993fd159ae7ec19af2f3ad548f6daa33bd0de310b0fabbc2f33ea444e5f3c92269f11fc30c048463973a914a6787dbd616e703e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_subgroup :raw 0x299a5917adb7b45c30cea045edaa623f5036280df176f4a2c751ca728c2c9e3a2bedf30ba7d8bd0814e9d091913ea5bc6a4b60ee993e949507832df60190651900000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000213d689af09b7f52ac4a04c34bcdb2f90521b1cd213edcfe48fa3063520b6be22ef0f3110ea3051248e907221493e6c2943ebe8d70794188a515ec23df5d9b2b299a5917adb7b45c30cea045edaa623f5036280df176f4a2c751ca728c2c9e3a04765b673958e321a3667524f042b2a12d3609a2cf3335f8349d5e20d6ec982e00000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000213d689af09b7f52ac4a04c34bcdb2f90521b1cd213edcfe48fa3063520b6be22ef0f3110ea3051248e907221493e6c2943ebe8d70794188a515ec23df5d9b2b - :label invalid_g2_subgroup :raw 0x2deb529e45720f20be41088dfd7489c315e9e18fe23dd1c8a8183295dc770dee1090b3fcd1898780c332b7d73a602cadd1b26029124db9da19941250eda890b500000000000000000000000000ff0a69a42c284614e3d7de26b3f9b2f3c71ff600000000000000000000000000000000000000000000000000000000000000001e2c7f9d6a525b6af5dad683c5e6408661da29780860c3209b2dddcad5a88795033123665850406fc2428227bbb3509fc71c911cf41623de1605cd3e0a281b902deb529e45720f20be41088dfd7489c315e9e18fe23dd1c8a8183295dc770dee1090b3fcd1898780c332b7d73a602cadd1b26029124db9da19941250eda890b5000000000000000000000000000000000000000000275680008ded35ba000000000000000000000000000000000000000000000000000000000000000000000019367fe97b92d85d7c29090c2313de1a85f030239cfa71f939a197249cb17b890465a8498153883aca20e4de66ac02b1b6957fab9b4bce71df334cd6bee5ff95 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b92493387900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b92493387900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b924933879 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000005b004500000000000000000000000000000000000000000000000830644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d81702c919c023ce224a0c0b121dd4f578b39e0ddf00a55580b03265cb32fcb623bbf778240f6bf16b9a25500a02b09fbe8abfa933f9ee09effb104d712baf573463ef8c000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000830644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d81702c919c023ce224a0c0b121dd4f578b39e0ddf00a55580b03265cb32fcb623bbf778240f6bf16b9a25500a02b09fbe8abfa933f9ee09effb104d712baf573463ef8c000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000004500000000000000000000000000000000000000000000000107b55de1642362d16b8fc4dccfec9e794d24968511cf8e252ed27afc4d72ca1e0301cb4d7e0b7b52a6a8f78613c403ead1543fedb0d3f28c77685fdb9eaa2742000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000004500000000000000000000000000000000000000000000000107b55de1642362d16b8fc4dccfec9e794d24968511cf8e252ed27afc4d72ca1e0301cb4d7e0b7b52a6a8f78613c403ead1543fedb0d3f28c77685fdb9eaa2742000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000004500000000000000000000000000000000000000000000000107b55de1642362d16b8fc4dccfec9e794d24968511cf8e252ed27afc4d72ca1e0301cb4d7e0b7b52a6a8f78613c403ead1543fedb0d3f28c77685fdb9eaa2742 - :label invalid_g2_subgroup :raw 0x0272af94b7aeb772c1666db65ff3987fd8ec43b8454aad395232b5eef18ca2c51d5fc6b50ef577096ec2489356e8ecccd5ed5a144928c5338af5549701dbb40d255495ffba02a0ed6877a0a6ed658c93a1487a3319aaa05934e35bbb953673af00000000000000279573fbfe8e6c2300000000000030640472e131a029b85045090d17c2eaeda0d61dd0442997d161e176fb98a27091fe8b6b5746fe2f344a0f26f1f16556d24506af1fd1c8cb4b3b6dfa73e2ce958c50e3b937fd59a1df623f0272af94b7aeb772c1666db65ff3987fd8ec43b8454aad395232b5eef18ca2c5130487bdd23c2920498dfd232a986b90c194107d1f490559b12b377fd6a1493a255495ffba02a0ed6877a0a6ed658c93a1487a3319aaa05934e35bbb953673af00000000000000279573fbfe8e6c2300000000000030640472e131a029b85045090d17c2eaeda0d61dd0442997d161e176fb98a27091fe8b6b5746fe2f344a0f26f1f16556d24506af1fd1c8cb4b3b6dfa73e2ce958c50e3b937fd59a1df623f000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4700000000000000000000000000000000000000fcff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000212a3b4059e59d125dd17f662945170e1e13024fae97a401895690acac63cf681aecb67409d1d9c142ffd13375bd79fd0457deb278dfa91b5756378fb837fd60 - :label invalid_g2_subgroup :raw 0x17956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a17956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a17956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a - :label invalid_g2_subgroup :raw 0x1bbefdb0536c0996d663a908adc2cae17180c53d971e73fe234a6927cd10da332481152785517c274b2dc4ab7b6cacbbdc7d7b8e4dd396faa05a119761130e5c039a49879c785fd647afba497e7ea7a2687e956e978e3572c3df73e9278302b9194b9757129492217d64c4b267e5e935137ae3859ec8b99cf6e6dc61ca90bdfd1c67b6b637c528053a25079e25734a67ffc5388209d11839b3ff1f92591c81ee09750d9bc6fdb71f16e6a69eea50e7288aac1c25a5cd674ca9c57d8ac06fac691bbefdb0536c0996d663a908adc2cae17180c53d971e73fe234a6927cd10da330be3394b5be024026d22810b0614aba1bb03ef031a9e33929bc67a7f7769eeeb039a49879c785fd647afba497e7ea7a2687e956e978e3572c3df73e9278302b9194b9757129492217d64c4b267e5e935137ae3859ec8b99cf6e6dc61ca90bdfd1c67b6b637c528053a25079e25734a67ffc5388209d11839b3ff1f92591c81ee09750d9bc6fdb71f16e6a69eea50e7288aac1c25a5cd674ca9c57d8ac06fac6929a0d6d5e7d14a774c3abff1435361da2ee5d8b4f3ee62085ce779f248b41d4a2fd37ae5468f6a17b7f9a0bcca02ee128bdced61402a566e4eee2d0fa825f03d198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - :label invalid_g2_subgroup :raw 0x299a5917adb7b45c30cea045edaa623f5036280df176f4a2c751ca728c2c9e3a2bedf30ba7d8bd0814e9d091913ea5bc6a4b60ee993e949507832df60190651900000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000213d689af09b7f52ac4a04c34bcdb2f90521b1cd213edcfe48fa3063520b6be22ef0f3110ea3051248e907221493e6c2943ebe8d70794188a515ec23df5d9b2b299a5917adb7b45c30cea045edaa623f5036280df176f4a2c751ca728c2c9e3a04765b673958e321a3667524f042b2a12d3609a2cf3335f8349d5e20d6ec982e00000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000213d689af09b7f52ac4a04c34bcdb2f90521b1cd213edcfe48fa3063520b6be22ef0f3110ea3051248e907221493e6c2943ebe8d70794188a515ec23df5d9b2b299a5917adb7b45c30cea045edaa623f5036280df176f4a2c751ca728c2c9e3a2bedf30ba7d8bd0814e9d091913ea5bc6a4b60ee993e949507832df60190651900000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000213d689af09b7f52ac4a04c34bcdb2f90521b1cd213edcfe48fa3063520b6be22ef0f3110ea3051248e907221493e6c2943ebe8d70794188a515ec23df5d9b2b - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a77c09a07dfaf666ea36f7879462c0a78eb28f5c70b5ed35d438dc58f0d9d058bcabf53ccb1b6f2ad14e6bc531485dba856600b7941c8c5a4968940fba978210dc371bfd9736eb879d25be8a799eff45bea91130b9b2768689786235accd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800104e7500000000000000000000000000000000000000000000000000000000000000000a535bc14c0f581a039d0bfb15e730b6bbb3d6e33ecda8c74ebd901deeb4ef8423e99eadcc72ced9221df2db154b36f6931270c3f21f4ec8c4206b9211924bb203a99966a8db46602ac05b8f0d7669c3bc066fb7b9a188cc79e5239e27e3580517e54f1fff192038a907711c8123997f785d2c2c9a214355466b60652ee53e4d00c662006274fb346e22eeb59635c82cb4e20e34da7230644e72e131c82cb4e2000000104e75a20b64000000000000000000150000000000000000006629c731270ef2ea6f8c3dad3832f95f309cb6a1591ad53af025c6e0809992f15234e5fe1b37771ce3bb5a62017c56c496e57673e2617634e900c587724d21f24e603a6303a99966a8db46602ac05b8f0d7669c3bc066fb7b9a188cc79e5239e27e35805187eff52e2187ff10f48d49a005dbede1f243e64ce508737f5b52bb1a997befa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf0000000000000000001284bdd8e69832b232222d3493a6abb523575be2a5af6e88f5501cef408aa5bb0ca4d5b3c58e0bc7be2c8885e53c673b54f3057cff97cb1020cb2f5a9f61affb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005908648c919b2bd65122716e5e4aa74fb342e22eeb59635c84bb4e20e34da7230644e72e131a0296427b6542e3a6a00ccfa1d43577c305499096bbd8414f16c0df67cf39cb400a898e9aa727937ca9e07d92185f3fba6aa42be45ddad4fdadb145da376a6ec6d77185df39edde6e9037e58065a054cda2796f4e669bcdcbf1f - :label invalid_g2_subgroup :raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b92493387900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b92493387900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b92493387900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a8305b993046905746641a19b500ebbbd30cf0068a845bfbee9de55b8fe57d1dee8243ef33537f73ef4ace4279d86344d93a5dc8c20c69045865c0fa3b924933879 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a0290000000000000000000000000000000040000000000000000001000000000000000000000000000000000000000017f66b9111253405000006f2a18a982e6e9436f171f8bcdb4f60b9ea1dafaf115f9228e11ddd98ca9680304502b9c299712d0cf851e73adc8ce68c549a5b2ae712a44811db357d3bdb9717956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a17956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a17956b549321b92c524d191a62b90c81f08e694af4dceb00a80094e53120d39e2fd15d78815388959caa54affa2d7b2c8d52c528e6a1f6c0a50fcf0498fac7ee30644e72e131a0290000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000016b9e28a32ee61a7ad5bd4bad29d64fc35a8fb46b510be2067907069497ae1f0c3c07c40f41a731fe27d953f1154b4e9a8acf3ef44608817150de0df916503a - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d977f9597358c206e72c88c16e622b8b2000000000000004500000000000000000000000107b55de1642362d16b8fc4dc2a314eca6adb97bf3a3872a406ecf97bf2bdd210b6cba667eba043f71c1ffc200ba9caa5888ae7c0e6d2b54181905e66769d9ed9badc43da3d9f3e56b46cb43b0acfd59a153bdc736907cc4a640a2fb675cdaa8066a58616537ce4cd7145aa061b1d6bf901bda3c5e3df60e3741d6f5d6660f4034e2f99545e0dc71e9b53af2c30644e72e131a029b85045b68181585d977f956e978c3572c8208c166622b8b2000000000000004500000000000000000000000107b55de1642362d16b8fc4dc2ad9bb009c15bdc11d5ed75a805d5f24ba0e10e5b7953e281e241f72d208ce880d6f072450fd6ef76dd73ff2924238cbee09ea4c6281b867a897d85d8d091b330acfd59a153bdc736907cc4a640a2fb675cdaa8066a58616537ce4cd7145aa061b1d6bf901bda3c5e3df60e3741d6f5d6660f4034e2f99545e0dc71e9b53af2c30644e72e131a029b85045b68181585d977f956e978c3572c8208c166622b8b2000000000000004500000000000000000000000107b55de1642362d16b8fc4dc2ad9bb009c15bdc11d5ed75a805d5f24ba0e10e5b7953e281e241f72d208ce880d6f072450fd6ef76dd73ff2924238cbee09ea4c6281b867a897d85d8d091b330acfd59a153bdc736907cc4a640a2fb675cdaa8066a58616537ce4cd7145aa061546e279df73fc63d470e4d30d63e9003120768e1a423138de12c4f83d294e1b30644e72e131a029b85045b68181585d977f956e978c3572c8208c166622b8b2000000000000004500000000000000000000000107b55de1642362d16b8fc4dc2ad9bb009c15bdc11d5ed75a805d5f24ba0e10e5b7953e281e241f72d208ce880d6f072450fd6ef76dd73ff2924238cbee09ea4c6281b867a897d85d8d091b33 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb431a5d389ca17607c4b12d7f1c8463b960754dbbb74ee00f645ca559f5ee759ad5231fdb414002b25ebeed48fd799214f4db09a7dae25ac92c15b7e429e1800a70297861ced3673fa135f178751f203f13d8a4c9f15ad9fdbb4bb7468154af97f71698710af2efbde1687bc1530e7da2ca42c8e85baf594682890d36c8fb8d08f9106f1d083223bd63d1630baf008588ac9c0392c289c68afee37b013030a9f7d10128036f1a405f40bce08bc346f0f83cb8ca2fe81d18fdfffa984c97cef373580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb431c251d57a884434484d488b3fa5bb0b0d8566a251bfa57cdcfa452ee114a19601bcd6dec5e0b17fb9bb77b1145793cd6a99534de85911f41c37934fc6f1f508e203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c15393157ad3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000005b004500000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45218c0cef2a606613357bfaa3c880e71ff8490195337fa26205a21ccd9a6949a313fed2c79add9d85b9949c5852ef8cccf02b69ea6fc4db0d1660ac7b50df39e1 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21cc9a9eb823f8d97adee0206828c9f19eaf8f536c23207d68ae3d056a1480bb21990ddb90388b94f31089d3b4ff594d5449c04fcdf2a3681017b5d7749367ba1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21cc9a9eb823f8d97adee0206828c9f19eaf8f536c23207d68ae3d056a1480bb21990ddb90388b94f31089d3b4ff594d5449c04fcdf2a3681017b5d7749367ba1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21cc9a9eb823f8d97adee0206828c9f19eaf8f536c23207d68ae3d056a1480bb21990ddb90388b94f31089d3b4ff594d5449c04fcdf2a3681017b5d7749367ba1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21cc9a9eb823f8d97adee0206828c9f19eaf8f536c23207d68ae3d056a1480bb21990ddb90388b94f31089d3b4ff594d5449c04fcdf2a3681017b5d7749367ba1 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb43000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000020833e47a2eaa8bbe12d33b2da1a4fa8d763f5c567fe0da6c5c9da2e246f2096f28dc125bf7443bc1826c69fe4c7bf30c26ec60882350e784c4848c822726eb43 - :label invalid_g2_subgroup :raw 0x01ea6e2eae2a2501d6830a3f5ea1353a5f920719aaeeea537dde0df31bec7a802b40433b22aaaec8f6d6d21dc04994ab99ba4a4b16545f63430a6ecf01881e090000000004000000000000000000000000000000000000000000000000000000196ec634c6397f591ebee925f9fa9e89a1fa55ba5e38d5cb0f7dcfa49e0c0ae4260377b5b8fed1c2f2a2f848038464ffc8c3bd1d71844fcc85f64b478248b21d0990a17d0f06d3bb026b17967cc55b2160d7570fde6a448502bd28e8192db67e01ea6e2eae2a2501d6830a3f5ea1353a5f920719aaeeea537dde0df31bec7a8005240b37be86f160c1797398c137c3b1fdc72046521d6b29f9161d47d6f4df3e0000000004000000000000000000000000000000000000000000000000000000196ec634c6397f591ebee925f9fa9e89a1fa55ba5e38d5cb0f7dcfa49e0c0ae4260377b5b8fed1c2f2a2f848038464ffc8c3bd1d71844fcc85f64b478248b21d0990a17d0f06d3bb026b17967cc55b2160d7570fde6a448502bd28e8192db67e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020d7d3be95c6b1fc7d70f2edc7b7bf6e7397bc04bc6aaa0584b9e5bbc064de4fa30644e72e131a029b85045b68181585d97816a9168543fedb0d3f28c77685fdb10fb4e584f10053cba1117d920db188f54d1ab64e66e10b6177401a44c71e25020f50c6423205b18d96cdf7a832041d89076cf36dcde6700e62833186acd60b6 - :label invalid_g2_subgroup :raw 0x03a99966a8db46602ac05b8f0d7669c3bc066fb7b9a188cc79e5239e27e35805187eff52e2187ff10f48d49a005dbede1f243e64ce508737f5b52bb1a997befa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf0000000000000000001284bdd8e69832b232222d3493a6abb523575be2a5af6e88f5501cef408aa5bb0ca4d5b3c58e0bc7be2c8885e53c673b54f3057cff97cb1020cb2f5a9f61affb03a99966a8db46602ac05b8f0d7669c3bc066fb7b9a188cc79e5239e27e3580517e54f1fff192038a907711c8123997f785d2c2c9a214355466b60652ee53e4d00c662006274fb346e22eeb59635c82cb4e20e34da7230644e72e131c82cb4e2000000104e75a20b64000000000000000000150000000000000000006629c731270ef2ea6f8c3dad3832f95f309cb6a1591ad53af025c6e0809992f15234e5fe1b37771ce3bb5a62017c56c496e57673e2617634e900c587724d21f24e603a630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800104e75a20b641566a0c71c9069a5256391aa31e22021d36c037c108dfb79c66200bf257ae3d66a589214f980a2ae34f9544be2fcbcc13b21f4c1642f31aa4d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x0cdc335fa81dff303b71cffb0256d7097c2b4c6715ca7b1589ea9386a41c2f851e4077b7c1f3374bbd4750ed222848c47501b40fc4c11eadd3c39aeafa452459000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000001f1cd7f247f2ae1ba9a1aeb4b32ed4c8c13c70c8861b6ab5340e276c58e1046b13d7de2b557e0ae2b53380ad596ba79f07c037c9d9aa17cf407e9ed86201436e0cdc335fa81dff303b71cffb0256d7097c2b4c6715ca7b1589ea9386a41c2f851223d6bb1f3e68ddfb08f4c95f590f99227fb681a3b0abdf685cf12bde37d8ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000001f1cd7f247f2ae1ba9a1aeb4b32ed4c8c13c70c8861b6ab5340e276c58e1046b13d7de2b557e0ae2b53380ad596ba79f07c037c9d9aa17cf407e9ed86201436e000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000004500000000000000000000000000000000000000000000000107b55de1642362d16b8fc4dccfec9e794d24968511cf8e252ed27afc4d72ca1e0301cb4d7e0b7b52a6a8f78613c403ead1543fedb0d3f28c77685fdb9eaa274212ee4836f908e5e39090a4124b75f3ec5b665a729997f55cdea80f76ab940c5902a12ba6400116479dcf5179e4d06471a65e72229fb444b34d8f07458a4a81570000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000fb55bf7df894a746fbe20b6f8c54d5dc0d9fd4eda4742fc35100c45e6e27f912a20d63d446eb175733853b88dd36708eb7a81f5c79e7659c3a6e2b2c470077 - :label invalid_g2_subgroup :raw 0x1838ccf8d820349a8c38a57dc0a5495577898e422509e4c9636e9737fe0dcd9116f566a30b7d2579fd6109eb09d66c005fdccdc0d91b28f43be34c5668f34f812a9a64f273fa329bc9c98ff2083c627609e2219177b9c5df7286af31a3b27e8120d85101e1e6af0126c00a95c645b192b3ea69ed72297deac1fbb0e6bd1440c600ec155ab3cd58005b488308578aaeeaeae9c65939f785bf693fa5763c174dd624d3b2adb35ad17933d0317a00436d10f2d6908faf109e7fe3db77a39d5c1711175bcec7c4c77c612df588174dd44362722f7b8e588a0ef599129cf123f63b8d2e1ff6c569e5cb0d20fb28504057d4f7ed248900ac99bd0f31a853af5c10a806198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21cc9a9eb823f8d97adee0206828c9f19eaf8f536c23207d68ae3d056a1480bb21990ddb90388b94f31089d3b4ff594d5449c04fcdf2a3681017b5d7749367ba1000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd451800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21cc9a9eb823f8d97adee0206828c9f19eaf8f536c23207d68ae3d056a1480bb21990ddb90388b94f31089d3b4ff594d5449c04fcdf2a3681017b5d7749367ba1 - :label invalid_g2_subgroup :raw 0x1bbf3321bfdf76e22ca0e95089338a772a4a2982dbede2571c14a258bd9874ff2b5aa74efa3429cd77acc68bd2e487960f34074d3a725444b06a552c1be0ca442471fa6c0785556dacbe4d9570fa9e89a2fa55ba5e38d5cb0f7dcfa49e0c0ae4181b42bbb36f2bb465708c62b0bd12ae5d6922cf5c4f928a7097f8db8f0dfae3103e85ddefbe5900ded1384badbc32c907c50baa4282172d02562116005aecdf2cce8d04251b64ced66cc7b66a1c54000e17872b10b4793f5bd81052e5ef3e5c1bbf3321bfdf76e22ca0e95089338a772a4a2982dbede2571c14a258bd9874ff0509a723e6fd765c40a37f2aae9cd0c7884d63442dff76488bb636eabc9c33032471fa6c0785556dacbe4d9570fa9e89a2fa55ba5e38d5cb0f7dcfa49e0c0ae4181b42bbb36f2bb465708c62b0bd12ae5d6922cf5c4f928a7097f8db8f0dfae3103e85ddefbe5900ded1384badbc32c907c50baa4282172d02562116005aecdf2cce8d04251b64ced66cc7b66a1c54000e17872b10b4793f5bd81052e5ef3e5c00710c68e1b8b73a72a289422d2b6f841cc56fe8c51105021c56ae30c3ae1aca0b2ff392a2fc535427ec9b7e1ae1c35a7961986788cf648349190dd92e182f05198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daabebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebefdbebebebeabc689bebebebe43be92be5fbebebebebebebebebebebebebebebebebebebebebebebe9ebebebe2abebebebebebebebebebebebebebebebebebe - :label invalid_g2_subgroup :raw 0x29c19b11665cbeb0fd496542e6115ceef9b628ab4bc7419802e7016cf1b2c931057cdbec3f7c2ad0f4da33b3cfd3234ea29f71c6c46b8b90eb2d4a5851adf74b00bb00b95e1b59fca2159a5f33f27f36b15fe6bcda0b1ee0381b0ef7dd804bd625ed3c1a0120b6531e39cca6f67f35f9a849cfbfe958cc1840d1c20cc6b3e1ad08cbba5815581dcea62fa0426dbff39c8f0e9fdc451b1fb127a4e7a4c058799619068e06466a9dd7543ac89d53a17a8beb6c11c59c3af32ea0c1bbc55e0fae7b2c52ab9e7e9296183b9695387e3ae3d06c9d11a98676e4e046914b36b636ddc4050abc3606826f8aeaac5aa7be9f44d15a55805037eb2b260c32d43bd32adef10763b017bc2777ac81ff30fff09f65381c24912bfc9d1490a23765b4830f0aae2b71c998abc367ad761da7e9900eb7e579989f82eee3338c17b8dc17e53e052b21e242369877673070a6b8b0307da6e84e32bdfb3eb09d514b25e8704bd55d431782c07d2d471af10469a13476a49ec51d1bc538d49bbaf85a63fdb6b412fb4a1bc85b155eee2e33bf5322810c7c0150158f373e998316edf821ae9804a2ac191899a5e18c57f4e6b5f736c2f21e95f4147a4235ed2c1f6e6615eb0e00979f0920568d8f3b2f2d0a6a596ea20b3e62191baf420de10125557f9a665900a82a5925a43a697ceaa9deba01a97d8722815e8185973a402e11fdca62fa908da409c4054081d5b9d0e3aa18a31cc5f9d0fa925205fd50a71edf4ca157a607587e24571c9cacf3b3d821146083f9e5fe6be23546643e3ad4540a1f02c02728010a4b9f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c166622b860000000000000004500000000000000000000000107b55de1642362d16b8fc4dc2215436159d2bdb4e084a6c63bd04f6b84d69bfad793da72c21b421f3f89b22f22b811a1a4fa51df281657f0b0a1add382fab768ac1ed8886bf979e2bf11402d - :label invalid_g2_subgroup :raw 0x2deb529e45720f20be41088dfd7489c315e9e18fe23dd1c8a8183295dc770dee1090b3fcd1898780c332b7d73a602cadd1b26029124db9da19941250eda890b500000000000000000000000000ff0a69a42c284614e3d7de26b3f9b2f3c71ff600000000000000000000000000000000000000000000000000000000000000001e2c7f9d6a525b6af5dad683c5e6408661da29780860c3209b2dddcad5a88795033123665850406fc2428227bbb3509fc71c911cf41623de1605cd3e0a281b902deb529e45720f20be41088dfd7489c315e9e18fe23dd1c8a8183295dc770dee1090b3fcd1898780c332b7d73a602cadd1b26029124db9da19941250eda890b5000000000000000000000000000000000000000000275680008ded35ba000000000000000000000000000000000000000000000000000000000000000000000019367fe97b92d85d7c29090c2313de1a85f030239cfa71f939a197249cb17b890465a8498153883aca20e4de66ac02b1b6957fab9b4bce71df334cd6bee5ff952deb529e45720f20be41088dfd7489c315e9e18fe23dd1c8a8183295dc770dee1090b3fcd1898780c332b7d73a602cadd1b26029124db9da19941250eda890b5000000000000000000000000000000000000000000275680008ded35ba000000000000000000000000000000000000000000000000000000000000000000000019367fe97b92d85d7c29090c2313de1a85f030239cfa71f939a197249cb17b890465a8498153883aca20e4de66ac02b1b6957fab9b4bce71df334cd6bee5ff952deb529e45720f20be41088dfd7489c315e9e18fe23dd1c8a8183295dc770dee1090b3fcd1898780c332b7d73a602cadd1b26029124db9da19941250eda890b5000000000000000000000000000000000000000000275680008ded35ba000000000000000000000000000000000000000000000000000000000000000000000019367fe97b92d85d7c29090c2313de1a85f030239cfa71f939a197249cb17b890465a8498153883aca20e4de66ac02b1b6957fab9b4bce71df334cd6bee5ff95 - :label invalid_g2_subgroup :raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a36c98d1ece5fd647afba497e7ea7a2687e956e978e3572c3df75e9278302b9000000000000000000000000000000000000000000000000000000991b498795099a3faf27255b9542daf48d9588fc4d6927c7fcd88c5784a4245345474e1e4509a44ea53f191ddef8a32ec03a7e1a24e06588f8de364ba0024b3b8a062ca91a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a36c98d1ece5fd647afba497e7ea7a2687e956e978e3572c3df75e9278302b9000000000000000000000000000000000000000000000000000000991b498795099a3faf27255b9542daf48d9588fc4d6927c7fcd88c5784a4245345474e1e4509a44ea53f191ddef8a32ec03a7e1a24e06588f8de364ba0024b3b8a062ca91a000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a68917120ca8d3c8c16d87cfd4500000000005b004500000000000000000000000000000000000000004000000111ee2be185fb562c979eeb452df376f91c7852bfb8a6d5727024444a2fc58c152825d78e66be7952503e9e1bf2d8aad4c39f4ce4095349043106508bab20d6e5 - :label invalid_g2_subgroup :raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000310000000000000000000000000ccc369050590000000000000000000000000000000000000000000000000000000000000000034e16015e4aeadb3c1c93fd54f496a6a75271f9e514b6c51782d145a1771a9827910e860d8264c87a784c364d78f117ca598153fc5947c915eb6e2e7e0ad6d5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - :label invalid_g2_subgroup :raw 0x06e42bc7eb32a979b39a77435202c2a062c8bef977f46500b040fa35b8a45b2315ca114b0522bdd5e928f9629ed2a283d36141f3307071cad74fb768721cbb0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e42bc7eb32a979b39a77435202c2a062c8bef977f46500b040fa35b8a45b231a9a3d27dc0ee253cf274c53e2aeb5d9c420289e380158c264d0d4ae6660423900000000000000000000000000000000000000000000010000000000000000001611179006befd3749602129813bd7247045ac58ea0000000100000000000000202a170a4a4385bdcefbe36ade6cc7c0e9834b78fc6ca233e8de345a2d5782dc1699f57deaacb74e8b98bd8532c3f152570db884fc1755fbc0c8cb3ef54a537f26c6e104e6c30ed077379b1762d05ac66a6d8e1bb0699ff4f8e3fa52568f0f7709179c965e45c4f28e2ee2affb9b86744b8f29df08357dc80776ecede39adc7f221276dfff5b3a2b6a46ec6c0e0891aefd121170d8361187b73b46e1c6b1218f29255d7955576bba25241ec1edfdfc08c9b8d29379d4213025fa95b0dbdd16460ff9fdfcccda82fb0dd8f17931e05823321073a1a4e484699acdc9d0f14ea6f60c25b531fed0c7e8899296888cc0b27fbb6dbfc2041d482e21d908e240772a2326c6e104e6c30ed077379b1762d05ac66a6d8e1bb0699ff4f8e3fa52568f0f7709179c965e45c4f28e2ee2affb9b86744b8f29df08357dc80776ecede39adc7f221276dfff5b3a2b6a46ec6c0e0891aefd121170d8361187b73b46e1c6b1218f29255d7955576bba25241ec1edfdfc08c9b8d29379d4213025fa95b0dbdd16460ff9fdfcccda82fb0dd8f17931e05823321073a1a4e484699acdc9d0f14ea6f60c25b531fed0c7e8899296888cc0b27fbb6dbfc2041d482e21d908e240772a2326c6e104e6c30ed077379b1762d05ac66a6d8e1bb0699ff4f8e3fa52568f0f7709179c965e45c4f28e2ee2affb9b86744b8f29df08357dc80776ecede39adc7f221276dfff5b3a2b6a46ec6c0e0891aefd121170d8361187b73b46e1c6b1218f29255d7955576bba25241ec1edfdfc08c9b8d29379d4213025fa95b0dbdd16460ff9fdfcccda82fb0dd8f17931e05823321073a1a4e484699acdc9d0f14ea6f60c25b531fed0c7e8899296888cc0b27fbb6dbfc2041d482e21d908e240772a2326c6e104e6c30ed077379b1762d05ac66a6d8e1bb0699ff4f8e3fa52568f0f7709179c965e45c4f28e2ee2affb9b86744b8f29df08357dc80776ecede39adc7f221276dfff5b3a2b6a46ec6c0e0891aefd121170d8361187b73b46e1c6b1218f29255d7955576bba25241ec1edfdfc08c9b8d29379d4213025fa95b0dbdd16460ff9fdfcccda82fb0dd8f17931e05823321073a1a4e484699acdc9d0f14ea6f60c25b531fed0c7e8899296888cc0b27fbb6dbfc2041d482e21d908e240772a23 ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_one_point_failFiller.json ================================================ { "ecpairing_one_point_fail": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "balance": "999999999999442450", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "557550", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3abe8", "90000", "100000" ], "gasPrice": "0x0a", "nonce": "0x4", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_one_point_insufficient_gasFiller.json ================================================ { "ecpairing_one_point_insufficient_gas": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "balance": "999999999999603066", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "396934", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "75000", "90000", "100000" ], "gasPrice": "0x0a", "nonce": "0x3", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_one_point_not_in_subgroupFiller.json ================================================ { "ecpairing_one_point_not_in_subgroup": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "balance": "999999999994821439", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5178561", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800d3270b7da683f988d3889abcdad9776ecd45abaca689f1118c3fd33404b4392588360d269af2cd3e0803839ea274c2b8f062a6308e8da85fd774c26f1bcb87" ], "gasLimit": [ "0x39be8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x14", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "21", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_one_point_with_g1_zeroFiller.json ================================================ { "ecpairing_one_point_with_g1_zero": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "balance": "999999999999224771", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "775229", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3ab68", "90000", "100000" ], "gasPrice": "0x0a", "nonce": "0x5", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_one_point_with_g2_zeroFiller.json ================================================ { "ecpairing_one_point_with_g2_zero": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "balance": "999999999999007220", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "992780", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0x38c68", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_one_point_with_g2_zero_and_g1_invalidFiller.json ================================================ { "ecpairing_one_point_with_g2_zero_and_g1_invalid": { "_info" : { "comment" : "Use the ecpairing checker with one point, where g1 is not on the curve but g2 is zero. cpp-ethereum once had a bug in this case; as soon as cpp-ethereum recognized g2 zero, it returned something without checking the validity of g1" }, "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "balance": "999999999999007220", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0x38c68", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ] } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_g2_by_curve_orderFiller.json ================================================ { "ecpairing_perturb_g2_by_curve_order": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "balance": "999999999993618935", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6381065", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c248652d61f350be9ffaba461cdfdd9cd68f770b1d71184b6e8ac0b2f0c992f6ee090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3abe8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x19", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulusFiller.json ================================================ { "ecpairing_perturb_g2_by_field_modulus": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "balance": "999999999993378319", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6621681", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed396ad8433991909fa4eedf63ea8d8bf353cc9bc4d925598091cd66f3a99f94a212c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3ab68", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus_againFiller.json ================================================ { "ecpairing_perturb_g2_by_field_modulus_again": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "balance": "999999999993137831", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6862169", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b432cad18bcbe0e1502fbb7370f4c98ed7b5351fa74b59e08890758183f777af1" ], "gasLimit": [ "0x3ab68", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "28", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_g2_by_oneFiller.json ================================================ { "ecpairing_perturb_g2_by_one": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "balance": "999999999993859423", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6140577", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c31800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3ab68", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x18", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_curve_orderFiller.json ================================================ { "ecpairing_perturb_zeropoint_by_curve_order": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "22", "balance": "999999999994344367", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5655633", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3b2e8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x16", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "23", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_field_modulusFiller.json ================================================ { "ecpairing_perturb_zeropoint_by_field_modulus": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "23", "balance": "999999999994101959", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5898041", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3b368", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x17", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_oneFiller.json ================================================ { "ecpairing_perturb_zeropoint_by_one": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "21", "balance": "999999999994584919", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5415081", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3aba8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x15", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "22", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_three_point_fail_1Filler.json ================================================ { "ecpairing_three_point_fail_1": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "19", "balance": "999999999995221106", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4778894", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000240105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f00cacf3523caf879d7d05e30549f1e6fdce364cbb8724b0329c6c2a39d4f018e0692e55db067300e6e3fe56218fa2f940054e57e7ef92bf7d475a9d8a8502fd200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x672a8", "90000", "110000", "150000" ], "gasPrice": "0x0a", "nonce": "0x13", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_three_point_match_1Filler.json ================================================ { "ecpairing_three_point_match_1": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "balance": "999999999995612837", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4387163", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000240105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b4a106054688728c9972c8512e9789e9567aae23e302ccd75000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0x653a8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x12", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "19", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_fail_1Filler.json ================================================ { "ecpairing_two_point_fail_1": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "balance": "999999999998316309", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1683691", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x507a8", "90000", "110000" ], "gasPrice": "0x0a", "nonce": "0x9", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_fail_2Filler.json ================================================ { "ecpairing_two_point_fail_2": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "16", "balance": "999999999996222247", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3777753", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000180105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd03042700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002105384b6dd6c48634b9fe89cb3e19667c1fe6736c69df070d674c95a42b3b8242c0d8e67f0f2c14c43734b430d8be4265af8c4f7a67deb0b029fd2dff99cc6b9015eaec465d922580c7de5d4a5c26de75eaf2af6841b7412ef2eebd1e051076f1b4c21849e48de12d1bae2bad3299717aa8664ade430e19dec72a6e10a39b0ab" ], "gasLimit": [ "0x517e8", "90000", "110000", "140000" ], "gasPrice": "0x0a", "nonce": "0x10", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_match_1Filler.json ================================================ { "ecpairing_two_point_match_1": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "balance": "999999999997710931", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2289069", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x50f68", "90000", "110000", "140000" ], "gasPrice": "0x0a", "nonce": "0xb", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_match_2Filler.json ================================================ { "ecpairing_two_point_match_2": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "balance": "999999999997150602", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2849398", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d" ], "gasLimit": [ "0x507a8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xd", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_match_3Filler.json ================================================ { "ecpairing_two_point_match_3": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "balance": "999999999996843881", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3156119", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x517a8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xe", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_match_4Filler.json ================================================ { "ecpairing_two_point_match_4": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "balance": "999999999996533064", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3466936", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000180105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b4a106054688728c9972c8512e9789e9567aae23e302ccd75" ], "gasLimit": [ "0x517a8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xf", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "16", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_match_5Filler.json ================================================ { "ecpairing_two_point_match_5": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "balance": "999999999995911366", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4088634", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x4e7a8", "90000", "110000", "140000" ], "gasPrice": "0x0a", "nonce": "0x11", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_point_oogFiller.json ================================================ { "ecpairing_two_point_oog": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "balance": "999999999997402226", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2597774", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x3d6e8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xc", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/ecpairing_two_points_with_one_g2_zeroFiller.json ================================================ { "ecpairing_two_points_with_one_g2_zero": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "balance": "999999999998009588", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1990412", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit": [ "0x4e828", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012c576107806004356004013511151558576004356004013560200160043560040161014037602061092061014051610160600060086305f5e0fff11558576020610900526109006040806109608284600060046018f150505061096080516020820120905060005561096060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000008": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the given data into the ECPAIRING precompile" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/pairingTestFiller.json ================================================ { "pairingTest" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "14012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,1,2,3,4], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : [1,2,3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "indexes" : { "data" : [5], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "//comment1" : "zeroCash transaction data", "//comment2" : "inputLength, data1, data2, data3, ...", "code" : "{(MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) (MSTORE 128 (CALLDATALOAD 128)) (MSTORE 160 (CALLDATALOAD 160)) (MSTORE 192 (CALLDATALOAD 192)) (MSTORE 224 (CALLDATALOAD 224)) (MSTORE 256 (CALLDATALOAD 256)) (MSTORE 288 (CALLDATALOAD 288)) (MSTORE 320 (CALLDATALOAD 320)) (MSTORE 352 (CALLDATALOAD 352)) (MSTORE 384 (CALLDATALOAD 384)) (MSTORE 416 (CALLDATALOAD 416)) (MSTORE 448 (CALLDATALOAD 448)) (MSTORE 480 (CALLDATALOAD 480)) (MSTORE 512 (CALLDATALOAD 512)) (MSTORE 544 (CALLDATALOAD 544)) (MSTORE 576 (CALLDATALOAD 576)) (MSTORE 608 (CALLDATALOAD 608)) (MSTORE 640 (CALLDATALOAD 640)) (MSTORE 672 (CALLDATALOAD 672)) (MSTORE 704 (CALLDATALOAD 704)) (MSTORE 736 (CALLDATALOAD 736)) [[0]](CALLCODE 500000 8 0 32 (CALLDATALOAD 0) 1000 32) [[1]] (MLOAD 1000) }", "nonce" : "0", "storage" : { } }, "c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "//comment" : "NEGATE", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000) [[0]](CALLCODE 5000000 7 0 0 96 1000 64) [[1]](MLOAD 1000) [[2]](MLOAD 1032) }", "nonce" : "0", "storage" : { } }, "d94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "//comment" : "ADD", "code" : "{ (MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) [[0]](CALLCODE 5000000 6 0 0 128 1000 64) [[1]](MLOAD 1000) [[2]](MLOAD 1032) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "//dataValues" : [ " AP 111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c103188585e2364128fe25c70558f1560f4f9350baf3959e603cc91486e110936", "-AP 111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411", " BP 06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db90e4e3ed0898ba2ce904a02b739caf9931f9b43c600154592cee5239435f91f76", "-BP 06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db922160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1", " CP 1b9e027bd5cfc2cb5db82d4dc9677ac795ec500ecd47deee3b5da006d6d049b81e8cfd56691c1245342d15eff3d1ce17c85fed7538c3614d46996d8f85a5c226", "-CP 1b9e027bd5cfc2cb5db82d4dc9677ac795ec500ecd47deee3b5da006d6d049b811d7511c78158de484232fc68daf8a45cf217d1c2fae693ff5871e8752d73b21", "PR.A 1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41", "PR.B 1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f", "PR.C 0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", "PR.H 1abb4a25eb9379ae96c84fff9f0540abcfc0a0d11aeda02d4f37e4baf74cb0c11ff09a73b455eca26257dc97dbe2c2572e162a9eefc4ce83ac7869b267acc4de", "PR.K 2f2ea0b3da1e8ef11914acf8b2e1b32d99df51f5f4f206fc6b947eae860eddb6068134ddb33dc888ef446b648d72338684d678d2eb2371c61a50734d78da4b72", "VK.A 209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550", "VK.B 2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0203d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84", "VK.C 2e89718ad33c8bed92e210e81d1853435399a271913a6520736a4729cf0d51eb01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb314a9a87b789a58af499b314e13c3d65bede56c07ea2d418d6874857b70763713178fb49a2d6cd347dc58973ff49613a20757d0fcc22079f9abd10c3baee24590", "VK.Z 217cee0a9ad79a4493b5253e2e4e3a39fc2df38419f230d341f60cb064a0ac290a3d76f140db8418ba512272381446eb73958670f00cf46f1d9e64cba057b53c26f64a8ec70387a13e41430ed3ee4a7db2059cc5fc13c067194bcc0cb49a98552fd72bd9edb657346127da132e5b82ab908f5816c826acb499e22f2412d1a2d7", "VK.Gamma 25f83c8b6ab9de74e7da488ef02645c5a16a6652c3c71a15dc37fe3a5dcb7cb122acdedd6308e3bb230d226d16a105295f523a8a02bfc5e8bd2da135ac4c245d065bbad92e7c4e31bf3757f1fe7362a63fbfee50e7dc68da116e67d600d9bf6806d302580dc0661002994e7cd3a7f224e7ddc27802777486bf80f40e4ca3cfdb", "VK.GammaBeta1 15794ab061441e51d01e94640b7e3084a07e02c78cf3103c542bc5b298669f2114db745c6780e9df549864cec19c2daf4531f6ec0c89cc1c7436cc4d8d300c6d", "-VK.GammaBeta1 15794ab061441e51d01e94640b7e3084a07e02c78cf3103c542bc5b298669f211b88da1679b0b64a63b7e0e7bfe52aae524f73a55be7fe70c7e9bfc94b4cf0da", "VK.GammaBeta2 1f39e4e4afc4bc74790a4a028aff2c3d2538731fb755edefd8cb48d6ea589b5e283f150794b6736f670d6a1033f9b46c6f5204f50813eb85c8dc4b59db1c5d39140d97ee4d2b36d99bc49974d18ecca3e7ad51011956051b464d9e27d46cc25e0764bb98575bd466d32db7b15f582b2d5c452b36aa394b789366e5e3ca5aabd4", "P2 198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", "PR.A + PR.C 1496064626ba8bffeb7805f0d16143a65649bb0850333ea512c03fcdaf31e25407b4f210ab542533f1ee5633ae4406cd16c63494b537ce3f1cf4afff6f76a48f", "vkx 26dcfbc2e0bc9d82efb4acd73cb3e99730e27e10177fcfb78b6399a4bfcdf39127c440dbd5053253a3a692f9bf89b9b6e9612127cf97db1e11ffa9679acc933b", "vkx + PR.A + PR.C 186bac5188a98c45e6016873d107f5cd131f3a3e339d0375e58bd6219347b0081e396bc242de0214898b0f68035f53ad5a6f96c6c8390ac56ed6ec9561d23159", "-(vkx + PR.A + PR.C) 186bac5188a98c45e6016873d107f5cd131f3a3e339d0375e58bd6219347b008122ae2b09e539e152ec5364e7e2204b03d11d3caa038bfc7cd499f8176aacbee", "vkx + PR.A 20a754d2071d4d53903e3b31a7e98ad6882d58aec240ef981fdf0a9d22c5926a29c853fcea789887315916bbeb89ca37edb355b4f980c9a12a94f30deeed3021", "-PR.H 1abb4a25eb9379ae96c84fff9f0540abcfc0a0d11aeda02d4f37e4baf74cb0c11073b3ff2cdbb38755f8691ea59e9606696b3ff278acfc098fa8226470d03869", "-PR.C 0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2198a1f162a73261f112401aa2db79c7dab1533c9935c77290a6ce3b191f2318d", " 1122334455667788991011121314151617181920212223242526272829303132" ], "//dataMeaning" : [ "[0] proof.A + vk.A + negateG1(proof.Ap) + P2", "[1] vk.B + proof.B + negateG1(proof.Bp) + P2", "[2] proof.C + vk.C + negateG1(proof.Cp) + P2", "[3] proof.K + vk.gamma + negateG1(addG1(vkx, addG1(proof.A, proof.C))) + vk.gammaBeta2 + negateG1(vk.gammaBeta1) + proof.B", "[4] addG1(vkx, proof.A) + proof.B + negateG1(proof.H) + vk.Z + negateG1(proof.C) + P2", "[5] proof.A + vk.A + proof.Ap + P2" ], "data" : [ ":raw 0x00000000000000000000000000000000000000000000000000000000000001801c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", ":raw 0x00000000000000000000000000000000000000000000000000000000000001802eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0203d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db841213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db922160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", ":raw 0x00000000000000000000000000000000000000000000000000000000000001800f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba2e89718ad33c8bed92e210e81d1853435399a271913a6520736a4729cf0d51eb01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb314a9a87b789a58af499b314e13c3d65bede56c07ea2d418d6874857b70763713178fb49a2d6cd347dc58973ff49613a20757d0fcc22079f9abd10c3baee245901b9e027bd5cfc2cb5db82d4dc9677ac795ec500ecd47deee3b5da006d6d049b811d7511c78158de484232fc68daf8a45cf217d1c2fae693ff5871e8752d73b21198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", ":raw 0x00000000000000000000000000000000000000000000000000000000000002402f2ea0b3da1e8ef11914acf8b2e1b32d99df51f5f4f206fc6b947eae860eddb6068134ddb33dc888ef446b648d72338684d678d2eb2371c61a50734d78da4b7225f83c8b6ab9de74e7da488ef02645c5a16a6652c3c71a15dc37fe3a5dcb7cb122acdedd6308e3bb230d226d16a105295f523a8a02bfc5e8bd2da135ac4c245d065bbad92e7c4e31bf3757f1fe7362a63fbfee50e7dc68da116e67d600d9bf6806d302580dc0661002994e7cd3a7f224e7ddc27802777486bf80f40e4ca3cfdb186bac5188a98c45e6016873d107f5cd131f3a3e339d0375e58bd6219347b008122ae2b09e539e152ec5364e7e2204b03d11d3caa038bfc7cd499f8176aacbee1f39e4e4afc4bc74790a4a028aff2c3d2538731fb755edefd8cb48d6ea589b5e283f150794b6736f670d6a1033f9b46c6f5204f50813eb85c8dc4b59db1c5d39140d97ee4d2b36d99bc49974d18ecca3e7ad51011956051b464d9e27d46cc25e0764bb98575bd466d32db7b15f582b2d5c452b36aa394b789366e5e3ca5aabd415794ab061441e51d01e94640b7e3084a07e02c78cf3103c542bc5b298669f211b88da1679b0b64a63b7e0e7bfe52aae524f73a55be7fe70c7e9bfc94b4cf0da1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f", ":raw 0x000000000000000000000000000000000000000000000000000000000000024020a754d2071d4d53903e3b31a7e98ad6882d58aec240ef981fdf0a9d22c5926a29c853fcea789887315916bbeb89ca37edb355b4f980c9a12a94f30deeed30211213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f1abb4a25eb9379ae96c84fff9f0540abcfc0a0d11aeda02d4f37e4baf74cb0c11073b3ff2cdbb38755f8691ea59e9606696b3ff278acfc098fa8226470d03869217cee0a9ad79a4493b5253e2e4e3a39fc2df38419f230d341f60cb064a0ac290a3d76f140db8418ba512272381446eb73958670f00cf46f1d9e64cba057b53c26f64a8ec70387a13e41430ed3ee4a7db2059cc5fc13c067194bcc0cb49a98552fd72bd9edb657346127da132e5b82ab908f5816c826acb499e22f2412d1a2d70f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2198a1f162a73261f112401aa2db79c7dab1533c9935c77290a6ce3b191f2318d198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", ":raw 0x00000000000000000000000000000000000000000000000000000000000001801c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c103188585e2364128fe25c70558f1560f4f9350baf3959e603cc91486e110936198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa" ], "gasLimit" : [ "10000000", "90000", "110000", "150000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/pointAddFiller.json ================================================ { "pointAdd" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0], "gas" : [0,1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x02" : "0x15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4" } } } }, { "indexes" : { "data" : [1], "gas" : -1, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [2,5,6], "gas" : [0,1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [3,4], "gas" : [0,1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [7], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x02" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4" } } } }, { "indexes" : { "data" : [8], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x02" : "0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f" } } } }, { "indexes" : { "data" : [9], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x059a381fec09e29448a58ae8905f41d1eb8ff0ed755aa0f827821aefde02ec7d", "0x02" : "0x269d2516bf8c4f5798cc1267162e59add561e5537a328fe0f28a252fa287a72a" } } } }, { "indexes" : { "data" : [9], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x059a381fec09e29448a58ae8905f41d1eb8ff0ed755aa0f827821aefde02ec7d", "0x02" : "0x269d2516bf8c4f5798cc1267162e59add561e5537a328fe0f28a252fa287a72a" } } } }, { "indexes" : { "data" : [7], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x02" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4" } } } }, { "indexes" : { "data" : [8], "gas" : [2,1], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x02" : "0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f" } } } }, { "//comment" : "OOG happens", "indexes" : { "data" : [0,2,3,4,5,6,7,8,9], "gas" : 3, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "code" : "{(MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) [[0]](CALLCODE 500000 6 0 0 128 200 64) [[1]] (MLOAD 200) [[2]] (MLOAD 232) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "(1,2) + (1,2)", "(0,0) + (0,0)", "(x,x) + (invalid)", "(x,x) + (0,0)", "(0,0) + (x,x)", "(invalid) + (x,x)", "(invalid) + (invalid)", "(x,x) + (x,x)", "(x,x) + (y,y)", "(x,x) + (1,2)" ], "data" : [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc2860217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit" : [ "1000000", "110000", "150000", "70000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/pointAddTruncFiller.json ================================================ { "pointAddTrunc" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0], "gas" : [0,1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x02" } } } }, { "indexes" : { "data" : [1], "gas" : [0,1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [5,6], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00", "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [3], "gas" : [0], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [4], "gas" : [0,1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x00", "0x02" : "0x00" } } } }, { "indexes" : { "data" : [7], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [8], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [9], "gas" : [0], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [2,3,7,8,9], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2", "0x02" : "0x16da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba" } } } }, { "indexes" : { "data" : [5,6], "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "//comment" : "All OOG", "indexes" : { "data" : [0,2,3,5,6,7,8,9], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "//comment" : "All OOG", "indexes" : { "data" : [1,4], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "code" : "{(MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) [[0]](CALLCODE 500000 6 0 0 64 200 64) [[1]] (MLOAD 200) [[2]] (MLOAD 232) }", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "(1,2) + (1,2)", "(0,0) + (0,0)", "(x,x) + (invalid)", "(x,x) + (0,0)", "(0,0) + (x,x)", "(invalid) + (x,x)", "(invalid) + (invalid)", "(x,x) + (x,x)", "(x,x) + (y,y)", "(x,x) + (1,2)" ], "data" : [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25919bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc2860217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4", ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit" : [ "1000000", "110000", "200000", "80000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/pointMulAdd2Filler.json ================================================ { "pointMulAdd2" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0,1,2,3,4,5,6,7,8,9,12,26], "gas" : [0], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } } } }, { "indexes" : { "data" : [10], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x0b" : "0x1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", "0x14" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x15" : "0x1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83" } } } }, { "indexes" : { "data" : [11], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x0769bf9ac56bea3ff40232bcb1b6bd159315d84715b8e679f2d355961915abf0", "0x0b" : "0x05acb4b400e90c0063006a39f478f3e865e306dd5cd56f356e2e8cd8fe7edae6", "0x14" : "0x0769bf9ac56bea3ff40232bcb1b6bd159315d84715b8e679f2d355961915abf0", "0x15" : "0x05acb4b400e90c0063006a39f478f3e865e306dd5cd56f356e2e8cd8fe7edae6" } } } }, { "indexes" : { "data" : [13,15], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x0b" : "0x15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", "0x14" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x15" : "0x15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4" } } } }, { "indexes" : { "data" : [14], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x01", "0x0b" : "0x02", "0x14" : "0x01", "0x15" : "0x02" } } } }, { "indexes" : { "data" : [16], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x01", "0x0b" : "0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45", "0x14" : "0x01", "0x15" : "0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45" } } } }, { "indexes" : { "data" : [17], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x113aeccecdaf57cd8c0aace591774949dcdaf892555fa86726fa7e679b89c067", "0x0b" : "0x0bffba84127a19abde488a8251a9a3fce33b34a76f96aafb11ab4a6cef3e9979" } } } }, { "indexes" : { "data" : [18], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1fd3b816d9951dcb9aa9797d25e51a865987703ae83cd69c4658679f0350ae2b", "0x0b" : "0x29ce3d80a74ddc13784beb25ca9fbfd048a3265a32c6f38b92060c5093a0e7a7", "0x14" : "0x1fd3b816d9951dcb9aa9797d25e51a865987703ae83cd69c4658679f0350ae2b", "0x15" : "0x29ce3d80a74ddc13784beb25ca9fbfd048a3265a32c6f38b92060c5093a0e7a7" } } } }, { "indexes" : { "data" : [19], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628", "0x0b" : "0x069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad", "0x14" : "0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628", "0x15" : "0x069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad" } } } }, { "indexes" : { "data" : [20], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x1fd3b816d9951dcb9aa9797d25e51a865987703ae83cd69c4658679f0350ae2b", "0x0b" : "0x29ce3d80a74ddc13784beb25ca9fbfd048a3265a32c6f38b92060c5093a0e7a7", "0x14" : "0x2c15ed1902e189486ab6b625aa982510aef6246b21a1e1bcea382da4d735e8ba", "0x15" : "0x02103e58cbd2fa8081763442ab46c26a9b8051e9b049c3948c8d7d0e139c5e3f" } } } }, { "indexes" : { "data" : [21], "gas" : [0,3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x1d78954c630b3895fbbfafac1294f2c0158879fdc70bfe18222890e7bfb66fba", "0x0b" : "0x101c3346e98b136a7078aebd427dced763722d77e3d7985342e0bffcc6ea4d56" } } } }, { "indexes" : { "data" : [22], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x2fa739d4cde056d8fd75427345cbb34159856e06a4ffad64159c4773f23fbf4b", "0x0b" : "0x1eed5d5325c31fc89dd541a13d7f63b981fae8d4bf78a6b08a38a601fcfea97b", "0x14" : "0x2fa739d4cde056d8fd75427345cbb34159856e06a4ffad64159c4773f23fbf4b", "0x15" : "0x1eed5d5325c31fc89dd541a13d7f63b981fae8d4bf78a6b08a38a601fcfea97b" } } } }, { "indexes" : { "data" : [23], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d352", "0x0b" : "0x1d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b0", "0x14" : "0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d352", "0x15" : "0x1d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b0" } } } }, { "indexes" : { "data" : [24], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x2fa739d4cde056d8fd75427345cbb34159856e06a4ffad64159c4773f23fbf4b", "0x0b" : "0x1eed5d5325c31fc89dd541a13d7f63b981fae8d4bf78a6b08a38a601fcfea97b", "0x14" : "0x08e2142845db159bd105879a109fe7a6f254ed3ddae0e9cd8a2aeae05e5f647b", "0x15" : "0x221108ee615499d2e0a1113ca1a858a34e055f9da2d30e6e6ab392b049944a92" } } } }, { "indexes" : { "data" : [25], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x0769bf9ac56bea3ff40232bcb1b6bd159315d84715b8e679f2d355961915abf0", "0x0b" : "0x2ab799bee0489429554fdb7c8d086475319e63b40b9c5b57cdf1ff3dd9fe2261", "0x14" : "0x0769bf9ac56bea3ff40232bcb1b6bd159315d84715b8e679f2d355961915abf0", "0x15" : "0x2ab799bee0489429554fdb7c8d086475319e63b40b9c5b57cdf1ff3dd9fe2261" } } } }, { "indexes" : { "data" : [27], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x01", "0x0b" : "0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45", "0x14" : "0x01", "0x15" : "0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45" } } } }, { "indexes" : { "data" : [28], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x0b" : "0x1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", "0x14" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x15" : "0x1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83" } } } }, { "indexes" : { "data" : [29], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x01", "0x0b" : "0x02", "0x14" : "0x01", "0x15" : "0x02" } } } }, { "indexes" : { "data" : [30], "gas" : [0,3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x113aeccecdaf57cd8c0aace591774949dcdaf892555fa86726fa7e679b89c067", "0x0b" : "0x246493eeceb7867dda07bb342fd7b460b44635e9f8db1f922a7541a9e93e63ce" } } } }, { "indexes" : { "data" : [31], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1fd3b816d9951dcb9aa9797d25e51a865987703ae83cd69c4658679f0350ae2b", "0x0b" : "0x069610f239e3c41640045a90b6e1988d4ede443735aad701aa1a7fc644dc15a0", "0x14" : "0x1fd3b816d9951dcb9aa9797d25e51a865987703ae83cd69c4658679f0350ae2b", "0x15" : "0x069610f239e3c41640045a90b6e1988d4ede443735aad701aa1a7fc644dc15a0" } } } }, { "indexes" : { "data" : [32], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628", "0x0b" : "0x29c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a", "0x14" : "0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628", "0x15" : "0x29c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a" } } } }, { "indexes" : { "data" : [33], "gas" : [0], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x1fd3b816d9951dcb9aa9797d25e51a865987703ae83cd69c4658679f0350ae2b", "0x0b" : "0x069610f239e3c41640045a90b6e1988d4ede443735aad701aa1a7fc644dc15a0", "0x14" : "0x2c15ed1902e189486ab6b625aa982510aef6246b21a1e1bcea382da4d735e8ba", "0x15" : "0x2e54101a155ea5a936da1173d63a95f2fc0118a7b82806f8af930f08c4e09f08" } } } }, { "indexes" : { "data" : [34], "gas" : [0,3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x1d78954c630b3895fbbfafac1294f2c0158879fdc70bfe18222890e7bfb66fba", "0x0b" : "0x20481b2bf7a68cbf47d796f93f038986340f3d19849a3239f93fcc1a1192aff1" } } } }, { "indexes" : { "data" : [35], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x2fa739d4cde056d8fd75427345cbb34159856e06a4ffad64159c4773f23fbf4b", "0x0b" : "0x1176f11fbb6e80611a7b04154401f4a4158681bca8f923dcb1e7e614db7e53cc", "0x14" : "0x2fa739d4cde056d8fd75427345cbb34159856e06a4ffad64159c4773f23fbf4b", "0x15" : "0x1176f11fbb6e80611a7b04154401f4a4158681bca8f923dcb1e7e614db7e53cc" } } } }, { "indexes" : { "data" : [36], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d352", "0x0b" : "0x12f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a97", "0x14" : "0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d352", "0x15" : "0x12f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a97" } } } }, { "indexes" : { "data" : [37], "gas" : [0], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x2fa739d4cde056d8fd75427345cbb34159856e06a4ffad64159c4773f23fbf4b", "0x0b" : "0x1176f11fbb6e80611a7b04154401f4a4158681bca8f923dcb1e7e614db7e53cc", "0x14" : "0x08e2142845db159bd105879a109fe7a6f254ed3ddae0e9cd8a2aeae05e5f647b", "0x15" : "0x0e5345847fdd0656d7af3479dfd8ffba497c0af3c59ebc1ed16cf9668ee8b2b5" } } } }, { "indexes" : { "data" : -1, "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "indexes" : { "data" : [10,11,13,14,15,16,18,19,22,23,25,27,28,29,32,35,36], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "indexes" : { "data" : [0,1,2,3,4,5,6,7,8,9,12,26], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } } } }, { "indexes" : { "data" : [17], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x113aeccecdaf57cd8c0aace591774949dcdaf892555fa86726fa7e679b89c067", "0x0b" : "0x0bffba84127a19abde488a8251a9a3fce33b34a76f96aafb11ab4a6cef3e9979" } } } }, { "indexes" : { "data" : [20,24,31,33,37], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x00" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "//00 code" : " 00-32 : x", "//01 code" : " 32-64 : y", "//02 code" : " 64-96 : a", "//03 code" : " 96-128 : b", "//04 code" : "128-160 : x2", "//05 code" : "160-192 : y2", "//06 code" : "192-224 : z", "//07 code" : "300-332 : x+a", "//08 code" : "332-364 : y+b", "//09 code" : "400-432 : x2*z", "//0a code" : "432-464 : y2*z", "//0b code" : " [[0]] : add(xy + ab)", "//0c code" : " [[1]] : mul(x2y2 * z)", "//0d code" : " [[2]] : (x + a) == (x2 * z)", "//0e code" : " [[3]] : (y + b) == (y2 * z)", "//0f code" : " [[0a]] : x + a", "//10 code" : " [[0b]] : y + b", "//11 code" : " [[14]] : x2 * z", "//12 code" : " [[15]] : y2 * z", "code" : "{(MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) (MSTORE 128 (CALLDATALOAD 128)) (MSTORE 160 (CALLDATALOAD 160)) (MSTORE 192 (CALLDATALOAD 192)) [[0]](CALLCODE 500000 6 0 0 128 300 64) [[1]](CALLCODE 500000 7 0 128 96 400 64) [[10]] (MLOAD 300) [[11]] (MLOAD 332) [[20]] (MLOAD 400) [[21]] (MLOAD 432) [[2]] (EQ (SLOAD 10) (SLOAD 20)) [[3]] (EQ (SLOAD 11) (SLOAD 21))}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "[0] (x,y) + (x,y) == (x,y) * 2", "[1] (x,y) + (x,y) + (x,y) == (x,y) * 3", "[2] (-x, -y) + (x,y) == (x,y) * 0", "[3] (-x, -y) + (0, 0) == (x, y) * -1", "[4] (-x, -y) + (-x, -y) == (x, y) * -2", "[5] (x, y) + (0, 0) == (x, y) * 1", "[6] (-x, -y) + (0, 0) == (x, y) * -1", "[7] (-x, -y) + (-x, -y) == (x, y) * -2", "[8] (-x, -y) + (0, 0) == (x, y) * -1", "[9] (-x, -y) + (-x, -y) == (x, y) * -2", "[10] (x,y) + (x,y) == (x,y) * 2", "[11] (x,y) + (x,y) + (x,y) == (x,y) * 3", "[12] (-x, -y) + (x,y) == (x,y) * 0", "[13] (-x, -y) + (-x, -y) == (-x,-y) * 2", "[14] (-x, -y) + (0, 0) == (x, y) * -1", "[15] (-x, -y) + (-x, -y) == (x, y) * -2", "[16] (x, y) + (0, 0) == (x, y) * 1", "[17] (-x, -y) + (x,y) == (x,y) * 0", "[18] (-x, -y) + (-x, -y) == (-x,-y) * 2", "[19] (-x, -y) + (0, 0) == (x, y) * -1", "[20] (-x, -y) + (-x, -y) == (x, y) * -2", "[21] (-x, -y) + (x,y) == (x,y) * 0", "[22] (-x, -y) + (-x, -y) == (-x,-y) * 2", "[23] (-x, -y) + (0, 0) == (x, y) * -1", "[24] (-x, -y) + (-x, -y) == (x, y) * -2", "[25] (x,y) + (x,y) + (x,y) == (x,y) * 3", "[26] (-x, -y) + (x,y) == (x,y) * 0", "[27] (-x, -y) + (0, 0) == (x, y) * -1", "[28] (-x, -y) + (-x, -y) == (x, y) * -2", "[29] (x, y) + (0, 0) == (x, y) * 1", "[30] (-x, -y) + (x,y) == (x,y) * 0", "[31] (-x, -y) + (-x, -y) == (-x,-y) * 2", "[32] (-x, -y) + (0, 0) == (x, y) * -1", "[33] (-x, -y) + (-x, -y) == (x, y) * -2", "[34] (-x, -y) + (x,y) == (x,y) * 0", "[35] (-x, -y) + (-x, -y) == (-x,-y) * 2", "[36] (-x, -y) + (0, 0) == (x, y) * -1", "[37] (-x, -y) + (-x, -y) == (x, y) * -2" ], "data" : [ ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", ":raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", ":raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff", ":raw 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", ":raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46", ":raw 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45", ":raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ":raw 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", ":raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000002", ":raw 0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000003", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff", ":raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000001", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad0000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e5628069ef5e376c0a1ea82f9dfc2e0001a7f385d655eef9a6f976c7a5d2c493ea3ad000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b0000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000000", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b02f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b02f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b00000000000000000000000000000000000000000000000000000000000000002", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b02f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d3521d701ec9e3fca50e84777f0f68caff5bff48cf6a6bd4428462ae9366cf0582b0000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", ":raw 0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", ":raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", ":raw 0x000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd450000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff", ":raw 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a0000000000000000000000000000000000000000000000000000000000000002", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46", ":raw 0x0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a0ccbec17235f5b9cc5e42f3df6364a76ecdd0101ddda8fc5dc0ba0b59c0e562829c5588f6a70fe3f355665f3a1813dde5f24053278d75af5cfa62eea8f3e599a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a9700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a972f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a972f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a970000000000000000000000000000000000000000000000000000000000000002", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ":raw 0x2f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a972f588cffe99db877a4434b598ab28f81e0522910ea52b45f0adaa772b2d5d35212f42fa8fd34fb1b33d8c6a718b6590198389b26fc9d8808d971f8b009777a9700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" ], "gasLimit" : [ "2000000", "90000", "110000", "150000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge/pointMulAddFiller.json ================================================ { "pointMulAdd" : { "env" : { "currentCoinbase" : "68795C4AA09D6f4Ed3E5DeDDf8c2AD3049A601da", "currentDifficulty" : "0x020000", "currentGasLimit" : "4012015", "currentNumber" : "1", "currentTimestamp" : "1000" }, "expect" : [ { "indexes" : { "data" : [0], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x0b" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4", "0x14" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x15" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4" } } } }, { "indexes" : { "data" : [1], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x0b" : "0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f", "0x14" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x15" : "0x018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f" } } } }, { "indexes" : { "data" : [2], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } } } }, { "indexes" : { "data" : [3], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x255e468453d7636cc1563e43f7521755f95e6c56043c7321b4ae04e772945fb0", "0x0b" : "0x0225c5f1623620fd84bfbab2d861a9d1e570f7727c540f403085998ebaf407c4", "0x14" : "0x255e468453d7636cc1563e43f7521755f95e6c56043c7321b4ae04e772945fb0", "0x15" : "0x0225c5f1623620fd84bfbab2d861a9d1e570f7727c540f403085998ebaf407c4" } } } }, { "indexes" : { "data" : [4], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x0b" : "0x2eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db8", "0x14" : "0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49", "0x15" : "0x2eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db8" } } } }, { "indexes" : { "data" : [5], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x255e468453d7636cc1563e43f7521755f95e6c56043c7321b4ae04e772945fb0", "0x0b" : "0x0225c5f1623620fd84bfbab2d861a9d1e570f7727c540f403085998ebaf407c4", "0x14" : "0x255e468453d7636cc1563e43f7521755f95e6c56043c7321b4ae04e772945fb0", "0x15" : "0x0225c5f1623620fd84bfbab2d861a9d1e570f7727c540f403085998ebaf407c4" } } } }, { "indexes" : { "data" : [6], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01", "0x0a" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x0b" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4", "0x14" : "0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc286", "0x15" : "0x0217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4" } } } }, { "indexes" : { "data" : [7], "gas" : [0,3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x0a" : "0x030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", "0x0b" : "0x15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", "0x14" : "0x01", "0x15" : "0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45" } } } }, { "indexes" : { "data" : [8], "gas" : 0, "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } } } }, { "indexes" : { "data" : -1, "gas" : [1,2], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "indexes" : { "data" : [0,1,3,4,5,6], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { } } } }, { "indexes" : { "data" : [2,8], "gas" : [3], "value" : -1 }, "network" : [">=Cancun"], "result" : { "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "storage" : { "0x00" : "0x01", "0x01" : "0x01", "0x02" : "0x01", "0x03" : "0x01" } } } } ], "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "1000000000000000000", "code" : "", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "", "//00 code0" : " 00-32 : x", "//01 code" : " 32-64 : y", "//02 code" : " 64-96 : a", "//03 code" : " 96-128 : b", "//04 code" : "128-160 : x2", "//05 code" : "160-192 : y2", "//06 code" : "192-224 : z", "//07 code" : "300-332 : x+a", "//08 code" : "332-364 : y+b", "//09 code" : "400-432 : x2*z", "//0a code" : "432-464 : y2*z", "//0b code" : " [[0]] : add(xy + ab)", "//0c code" : " [[1]] : mul(x2y2 * z)", "//0d code" : " [[2]] : (x + a) == (x2 * z)", "//0e code" : " [[3]] : (y + b) == (y2 * z)", "//0f code" : " [[0a]] : x + a", "//10 code" : " [[0b]] : y + b", "//11 code" : " [[14]] : x2 * z", "//12 code" : " [[15]] : y2 * z", "code" : "{(MSTORE 0 (CALLDATALOAD 0)) (MSTORE 32 (CALLDATALOAD 32)) (MSTORE 64 (CALLDATALOAD 64)) (MSTORE 96 (CALLDATALOAD 96)) (MSTORE 128 (CALLDATALOAD 128)) (MSTORE 160 (CALLDATALOAD 160)) (MSTORE 192 (CALLDATALOAD 192)) [[0]](CALLCODE 500000 6 0 0 128 300 64) [[1]](CALLCODE 500000 7 0 128 96 400 64) [[10]] (MLOAD 300) [[11]] (MLOAD 332) [[20]] (MLOAD 400) [[21]] (MLOAD 432) [[2]] (EQ (SLOAD 10) (SLOAD 20)) [[3]] (EQ (SLOAD 11) (SLOAD 21))}", "nonce" : "0", "storage" : { } } }, "transaction" : { "// data" : [ "(x,y) + (x,y) == (x,y) * 2", "(x,y) + (x,y) + (x,y) == (x,y) * 3", "(-x, -y) + (x,y) == (x,y) * 0", "(-x, -y) + (-x, -y) == (-x,-y) * 2", "(-x, -y) + (0, 0) == (x, y) * -1", "(-x, -y) + (-x, -y) == (x, y) * -2", "(x, y) + (0, 0) == (x, y) * 1", "(1, 2) + (1, 2) == (1, 2) * -1", "(1, 2) + (-1, -2) == (1, 2) * 0", "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "data" : [ ":raw 0x0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0000000000000000000000000000000000000000000000000000000000000002", ":raw 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc2860217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d40f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba0000000000000000000000000000000000000000000000000000000000000003", ":raw 0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db81f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f0000000000000000000000000000000000000000000000000000000000000000", ":raw 0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db81f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db81f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db80000000000000000000000000000000000000000000000000000000000000002", ":raw 0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", ":raw 0x1f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db81f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c492eddcb59a6517e86bfbe35c9691479fffc6e0580000ca2706c983ff7afcb1db81f4d1d80177b1377743d1901f70d7389be7f7a35a35bfd234a8aaee615b88c49018683193ae021a2f8920fed186cde5d9b1365116865281ccf884c1f28b1df8f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff", ":raw 0x1de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc2860217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001de49a4b0233273bba8146af82042d004f2085ec982397db0d97da17204cc2860217327ffc463919bef80cc166d09c6172639d8589799928761bcd9f22c903d40000000000000000000000000000000000000000000000000000000000000001", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", ":raw 0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit" : [ "2000000", "90000", "110000", "192000" ], "gasPrice" : "10", "nonce" : "1", "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", "value" : [ "0" ] } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/__init__.py ================================================ """Static State Tests Fillers from ethereum/tests repo.""" REFERENCE_SPEC_GIT_PATH = "" REFERENCE_SPEC_VERSION = "" ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_21000_0Filler.json ================================================ { "ecadd_0-0_0-0_21000_0": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "balance": "999999999999739314", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "260686", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa660", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 0 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_21000_128Filler.json ================================================ { "ecadd_0-0_0-0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "1", "balance": "999999999999868434", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "131566", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_21000_192Filler.json ================================================ { "ecadd_0-0_0-0_21000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "balance": "999999999999696722", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "303278", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa9a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_21000_64Filler.json ================================================ { "ecadd_0-0_0-0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "balance": "999999999999825266", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "174734", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa7a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_21000_80_ParisFiller.json ================================================ { "ecadd_0-0_0-0_21000_80_Paris": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "balance": "999999999999782354", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance" : "10", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_25000_0Filler.json ================================================ { "ecadd_0-0_0-0_25000_0": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "22", "balance": "999999999998969603", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1030397", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb600", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x16", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "23", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 0 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_25000_128Filler.json ================================================ { "ecadd_0-0_0-0_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "19", "balance": "999999999999072914", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "927086", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb840", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x13", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_25000_192Filler.json ================================================ { "ecadd_0-0_0-0_25000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "23", "balance": "999999999998940623", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1059377", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb940", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x17", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_25000_64Filler.json ================================================ { "ecadd_0-0_0-0_25000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "balance": "999999999999028346", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "971654", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb740", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x14", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "21", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 64 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_0-0_25000_80Filler.json ================================================ { "ecadd_0-0_0-0_25000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "21", "balance": "999999999998999040", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1000960", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb7c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x15", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "22", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 80 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_1-2_21000_128Filler.json ================================================ { "ecadd_0-0_1-2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "balance": "999999999999653298", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "346702", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_1-2_21000_192Filler.json ================================================ { "ecadd_0-0_1-2_21000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "balance": "999999999999610002", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "389998", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xaa20", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_1-2_25000_128Filler.json ================================================ { "ecadd_0-0_1-2_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "balance": "999999999998910793", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1089207", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xb8c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x18", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_1-2_25000_192Filler.json ================================================ { "ecadd_0-0_1-2_25000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "balance": "999999999998881097", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1118903", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb9c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x19", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_1-3_21000_128Filler.json ================================================ { "ecadd_0-0_1-3_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "balance": "999999999999246482", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "753518", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xf", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "16", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (1, 3) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-0_1-3_25000_128Filler.json ================================================ { "ecadd_0-0_1-3_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "33", "balance": "999999999998626359", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1373641", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": [ "0xb8c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x21", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "34", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 0) and (1, 3) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-3_1-2_21000_128Filler.json ================================================ { "ecadd_0-3_1-2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "balance": "999999999999160018", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "839982", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x11", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 3) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_0-3_1-2_25000_128Filler.json ================================================ { "ecadd_0-3_1-2_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "35", "balance": "999999999998531895", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1468105", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xb900", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x23", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "36", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (0, 3) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_0-0_21000_128Filler.json ================================================ { "ecadd_1-2_0-0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "balance": "999999999999523410", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "476590", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_0-0_21000_192Filler.json ================================================ { "ecadd_1-2_0-0_21000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "balance": "999999999999480114", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "519886", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xaa20", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_0-0_21000_64Filler.json ================================================ { "ecadd_1-2_0-0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "balance": "999999999999566450", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "433550", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_0-0_25000_128Filler.json ================================================ { "ecadd_1-2_0-0_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "balance": "999999999998821705", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1178295", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb8c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "28", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_0-0_25000_192Filler.json ================================================ { "ecadd_1-2_0-0_25000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "28", "balance": "999999999998792009", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1207991", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb9c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "29", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_0-0_25000_64Filler.json ================================================ { "ecadd_1-2_0-0_25000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "balance": "999999999998851139", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1148861", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xb7c0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 64 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_1-2_21000_128Filler.json ================================================ { "ecadd_1-2_1-2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "balance": "999999999999436562", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "563438", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa9a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_1-2_21000_192Filler.json ================================================ { "ecadd_1-2_1-2_21000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "12", "balance": "999999999999393138", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "606862", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xaaa0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xc", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_1-2_25000_128Filler.json ================================================ { "ecadd_1-2_1-2_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "29", "balance": "999999999998762051", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1237949", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xb940", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "30", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-2_1-2_25000_192Filler.json ================================================ { "ecadd_1-2_1-2_25000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "30", "balance": "999999999998732227", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1267773", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xba40", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "31", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 2) and (1, 2) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-3_0-0_21000_80Filler.json ================================================ { "ecadd_1-3_0-0_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "16", "balance": "999999999999203186", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "796814", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x10", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "17", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 3) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1-3_0-0_25000_80_ParisFiller.json ================================================ { "ecadd_1-3_0-0_25000_80_Paris": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "34", "balance": "999999999998579063", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance" : "10", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb840", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x22", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "35", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (1, 3) and (0, 0) into the ECADD precompile, truncating or expanding the input data to 80 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_21000_192Filler.json ================================================ { "ecadd_1145-3932_1145-4651_21000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "balance": "999999999999298098", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "701902", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c017c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "35000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xe", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "15", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (10744596414106452074759370245733544594153395043370666422502510773307029471145, 848677436511517736191562425154572367705380862894644942948681172815252343932) and (10744596414106452074759370245733544594153395043370666422502510773307029471145, 21039565435327757486054843320102702720990930294403178719740356721829973864651) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_25000_192Filler.json ================================================ { "ecadd_1145-3932_1145-4651_25000_192": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x64b98f570e1e53ac1b472a4fc89919f2d76166fb5494b817bca7677f3a51c497" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "32", "balance": "999999999998664381", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1335619", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c017c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xd940", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x20", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "33", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (10744596414106452074759370245733544594153395043370666422502510773307029471145, 848677436511517736191562425154572367705380862894644942948681172815252343932) and (10744596414106452074759370245733544594153395043370666422502510773307029471145, 21039565435327757486054843320102702720990930294403178719740356721829973864651) into the ECADD precompile, truncating or expanding the input data to 192 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_21000_128Filler.json ================================================ { "ecadd_1145-3932_2969-1336_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "13", "balance": "999999999999349458", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "650542", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008017c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98" ], "gasLimit": [ "35000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xd", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x64b98f570e1e53ac1b472a4fc89919f2d76166fb5494b817bca7677f3a51c497" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "14", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (10744596414106452074759370245733544594153395043370666422502510773307029471145, 848677436511517736191562425154572367705380862894644942948681172815252343932) and (1624070059937464756887933993293429854168590106605707304006200119738501412969, 3269329550605213075043232856820720631601935657990457502777101397807070461336) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_25000_128Filler.json ================================================ { "ecadd_1145-3932_2969-1336_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "31", "balance": "999999999998702141", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1297859", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008017c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98" ], "gasLimit": [ "0xd840", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x64b98f570e1e53ac1b472a4fc89919f2d76166fb5494b817bca7677f3a51c497" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "32", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (10744596414106452074759370245733544594153395043370666422502510773307029471145, 848677436511517736191562425154572367705380862894644942948681172815252343932) and (1624070059937464756887933993293429854168590106605707304006200119738501412969, 3269329550605213075043232856820720631601935657990457502777101397807070461336) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_6-9_19274124-124124_21000_128Filler.json ================================================ { "ecadd_6-9_19274124-124124_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "18", "balance": "999999999999116658", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "883342", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000126198c000000000000000000000000000000000000000000000000000000000001e4dc" ], "gasLimit": [ "0xaae0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x12", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "19", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (6, 9) and (19274124, 124124) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecadd_6-9_19274124-124124_25000_128Filler.json ================================================ { "ecadd_6-9_19274124-124124_25000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "36", "balance": "999999999998484535", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1515465", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000126198c000000000000000000000000000000000000000000000000000000000001e4dc" ], "gasLimit": [ "0xba80", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x24", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060066305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "37", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the points (6, 9) and (19274124, 124124) into the ECADD precompile, truncating or expanding the input data to 128 bytes. Gives the execution 25000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_21000_0Filler.json ================================================ { "ecmul_0-0_0_21000_0": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "balance": "999999999999696274", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "303726", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa660", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x5", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 0 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_21000_128Filler.json ================================================ { "ecmul_0-0_0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "balance": "999999999999825394", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "174606", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_21000_40Filler.json ================================================ { "ecmul_0-0_0_21000_40": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "6", "balance": "999999999999653682", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "346318", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa7a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 40 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_21000_64Filler.json ================================================ { "ecmul_0-0_0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "3", "balance": "999999999999782226", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "217774", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa7a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x3", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_21000_80Filler.json ================================================ { "ecmul_0-0_0_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "4", "balance": "999999999999739314", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "260686", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "5", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_21000_96Filler.json ================================================ { "ecmul_0-0_0_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "1", "balance": "999999999999868434", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "131566", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "2", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_28000_0Filler.json ================================================ { "ecmul_0-0_0_28000_0": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "102", "balance": "999999999995407094", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4592906", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc1b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x66", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "103", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 0 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_28000_128Filler.json ================================================ { "ecmul_0-0_0_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "99", "balance": "999999999995499905", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4500095", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x63", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "100", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_28000_40Filler.json ================================================ { "ecmul_0-0_0_28000_40": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "103", "balance": "999999999995376614", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4623386", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc2f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x67", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "104", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 40 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_28000_64Filler.json ================================================ { "ecmul_0-0_0_28000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "100", "balance": "999999999995468837", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4531163", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc2f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x64", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "101", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_28000_80Filler.json ================================================ { "ecmul_0-0_0_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "101", "balance": "999999999995438031", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4561969", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc378", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x65", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "102", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_0_28000_96Filler.json ================================================ { "ecmul_0-0_0_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "98", "balance": "999999999995545842", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4454158", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "35000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x62", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x00" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "99", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "99", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_1_21000_128Filler.json ================================================ { "ecmul_0-0_1_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "balance": "999999999998861618", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1138382", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x18", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_1_21000_96Filler.json ================================================ { "ecmul_0-0_1_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "23", "balance": "999999999998904722", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1095278", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x17", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "24", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_1_28000_128Filler.json ================================================ { "ecmul_0-0_1_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "121", "balance": "999999999994649583", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5350417", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x79", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "122", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_1_28000_96Filler.json ================================================ { "ecmul_0-0_1_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "120", "balance": "999999999994680584", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5319416", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xc3b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x78", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "121", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_2_21000_128Filler.json ================================================ { "ecmul_0-0_2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "34", "balance": "999999999998421234", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1578766", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x22", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "35", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "35", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_2_21000_96Filler.json ================================================ { "ecmul_0-0_2_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "33", "balance": "999999999998464338", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1535662", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x21", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "34", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "34", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_2_28000_128Filler.json ================================================ { "ecmul_0-0_2_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "131", "balance": "999999999994253808", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5746192", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x83", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "132", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_2_28000_96Filler.json ================================================ { "ecmul_0-0_2_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "130", "balance": "999999999994284809", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5715191", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x82", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "131", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "131", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_128Filler.json ================================================ { "ecmul_0-0_340282366920938463463374607431768211456_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "54", "balance": "999999999997540466", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2459534", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x36", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "55", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "55", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_80Filler.json ================================================ { "ecmul_0-0_340282366920938463463374607431768211456_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "55", "balance": "999999999997497234", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2502766", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x37", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "56", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "56", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_96Filler.json ================================================ { "ecmul_0-0_340282366920938463463374607431768211456_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "53", "balance": "999999999997583570", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2416430", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x35", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "54", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "54", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_128Filler.json ================================================ { "ecmul_0-0_340282366920938463463374607431768211456_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "151", "balance": "999999999993462258", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6537742", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x97", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "152", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_80Filler.json ================================================ { "ecmul_0-0_340282366920938463463374607431768211456_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "152", "balance": "999999999993431126", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6568874", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xc3b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x98", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "153", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_96Filler.json ================================================ { "ecmul_0-0_340282366920938463463374607431768211456_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "150", "balance": "999999999993493259", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6506741", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x96", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "151", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "151", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5616_21000_128Filler.json ================================================ { "ecmul_0-0_5616_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "69", "balance": "999999999996878418", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3121582", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xafe0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x45", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "70", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "70", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5616_21000_96Filler.json ================================================ { "ecmul_0-0_5616_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "68", "balance": "999999999996923314", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3076686", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xaf60", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x44", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "69", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "69", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5616_28000_128Filler.json ================================================ { "ecmul_0-0_5616_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "166", "balance": "999999999992867128", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7132872", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcb38", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa6", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "167", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5616_28000_96Filler.json ================================================ { "ecmul_0-0_5616_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "165", "balance": "999999999992899921", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7100079", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa5", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "166", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "166", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5617_21000_128Filler.json ================================================ { "ecmul_0-0_5617_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "79", "balance": "999999999996420050", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3579950", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb020", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "80", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "80", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5617_21000_96Filler.json ================================================ { "ecmul_0-0_5617_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "78", "balance": "999999999996465010", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3534990", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xafa0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4e", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "79", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "79", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5617_28000_128Filler.json ================================================ { "ecmul_0-0_5617_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "176", "balance": "999999999992453369", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7546631", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcb78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb0", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "177", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_5617_28000_96Filler.json ================================================ { "ecmul_0-0_5617_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "175", "balance": "999999999992486226", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7513774", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xaf", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "176", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "176", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9935_21000_128Filler.json ================================================ { "ecmul_0-0_9935_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "89", "balance": "999999999995960978", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4039022", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb0a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x59", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "90", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "90", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9935_21000_96Filler.json ================================================ { "ecmul_0-0_9935_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "88", "balance": "999999999996006066", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3993934", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xb020", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x58", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "89", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "89", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9935_28000_128Filler.json ================================================ { "ecmul_0-0_9935_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "186", "balance": "999999999992038906", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7961094", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcbf8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xba", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "187", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9935_28000_96Filler.json ================================================ { "ecmul_0-0_9935_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "185", "balance": "999999999992071891", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7928109", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xcb78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb9", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "186", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9_21000_128Filler.json ================================================ { "ecmul_0-0_9_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "44", "balance": "999999999997980850", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2019150", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "45", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "45", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9_21000_96Filler.json ================================================ { "ecmul_0-0_9_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "43", "balance": "999999999998023954", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1976046", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "44", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "44", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9_28000_128Filler.json ================================================ { "ecmul_0-0_9_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "141", "balance": "999999999993858033", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6141967", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "142", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-0_9_28000_96Filler.json ================================================ { "ecmul_0-0_9_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "140", "balance": "999999999993889034", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6110966", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "141", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "141", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 0) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_21000_128Filler.json ================================================ { "ecmul_0-3_0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "balance": "999999999999034034", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "965966", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x14", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "21", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_21000_64Filler.json ================================================ { "ecmul_0-3_0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "21", "balance": "999999999998990802", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1009198", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": [ "0xa7e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x15", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "22", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_21000_80Filler.json ================================================ { "ecmul_0-3_0_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "22", "balance": "999999999998947826", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1052174", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x16", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "23", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_21000_96Filler.json ================================================ { "ecmul_0-3_0_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "19", "balance": "999999999999077138", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "922862", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa860", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x13", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "20", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_28000_128Filler.json ================================================ { "ecmul_0-3_0_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "117", "balance": "999999999994830896", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5169104", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc438", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x75", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "118", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_28000_64Filler.json ================================================ { "ecmul_0-3_0_28000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "118", "balance": "999999999994780664", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5219336", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003" ], "gasLimit": [ "0xc338", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x76", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "119", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_28000_80Filler.json ================================================ { "ecmul_0-3_0_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "119", "balance": "999999999994730688", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5269312", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x77", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "120", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_0_28000_96Filler.json ================================================ { "ecmul_0-3_0_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "116", "balance": "999999999994881000", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5119000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x74", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "117", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_1_21000_128Filler.json ================================================ { "ecmul_0-3_1_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "32", "balance": "999999999998507634", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1492366", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x20", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "33", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_1_21000_96Filler.json ================================================ { "ecmul_0-3_1_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "31", "balance": "999999999998550802", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1449198", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1f", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "32", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_1_28000_128Filler.json ================================================ { "ecmul_0-3_1_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "129", "balance": "999999999994335105", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5664895", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc478", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x81", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "130", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_1_28000_96Filler.json ================================================ { "ecmul_0-3_1_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "128", "balance": "999999999994385273", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5614727", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x80", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x556a3c03566b04196c534f5612f50167917d72e6ab9b687e10e72dbe0e0f9279" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "129", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_2_21000_128Filler.json ================================================ { "ecmul_0-3_2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "42", "balance": "999999999998067250", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1932750", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x2a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "43", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_2_21000_96Filler.json ================================================ { "ecmul_0-3_2_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "41", "balance": "999999999998110418", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1889582", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x29", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "42", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_2_28000_128Filler.json ================================================ { "ecmul_0-3_2_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "139", "balance": "999999999993939330", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6060670", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc478", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "140", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_2_28000_96Filler.json ================================================ { "ecmul_0-3_2_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "138", "balance": "999999999993989498", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6010502", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x94b60ed39c6fe45858b5931190d93861a2d2538991194cdf9a39b5e83dec0827" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "139", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_128Filler.json ================================================ { "ecmul_0-3_340282366920938463463374607431768211456_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "66", "balance": "999999999997009778", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2990222", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x42", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "67", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_80Filler.json ================================================ { "ecmul_0-3_340282366920938463463374607431768211456_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "67", "balance": "999999999996966482", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3033518", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x43", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "68", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_96Filler.json ================================================ { "ecmul_0-3_340282366920938463463374607431768211456_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "65", "balance": "999999999997052946", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2947054", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x41", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "66", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_128Filler.json ================================================ { "ecmul_0-3_340282366920938463463374607431768211456_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "163", "balance": "999999999993000385", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6999615", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc478", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa3", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "164", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_80Filler.json ================================================ { "ecmul_0-3_340282366920938463463374607431768211456_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "164", "balance": "999999999992950089", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7049911", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa4", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "165", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_96Filler.json ================================================ { "ecmul_0-3_340282366920938463463374607431768211456_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "162", "balance": "999999999993050553", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6949447", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000100000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa2", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xa97df6032909972db52b8144798569bb6169ec8b3e065841da96b3d866aa131e" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "163", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 340282366920938463463374607431768211456 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5616_21000_128Filler.json ================================================ { "ecmul_0-3_5616_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "77", "balance": "999999999996510098", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3489902", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb020", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4d", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "78", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5616_21000_96Filler.json ================================================ { "ecmul_0-3_5616_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "76", "balance": "999999999996555058", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3444942", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xafa0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x4c", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "77", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5616_28000_128Filler.json ================================================ { "ecmul_0-3_5616_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "174", "balance": "999999999992538314", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7461686", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcb78", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xae", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "175", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5616_28000_96_ParisFiller.json ================================================ { "ecmul_0-3_5616_28000_96_Paris": { "_info" : { "comment" : "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495616 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" }, "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "balance" : "1500000", "storage": {}, "nonce": "173", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "balance" : "10", "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000" ], "gasLimit": [ "0xcaf8", "90000", "110000" ], "gasPrice": "0x0a", "nonce": "0xad", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": [0,1,2], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x289df36ee06bbcd57a9ce2a88d2bcda09715d42f96f7f23c48cdd54e2002f059" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "174", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ] } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5617_21000_128Filler.json ================================================ { "ecmul_0-3_5617_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "87", "balance": "999999999996051218", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3948782", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb060", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x57", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "88", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5617_21000_96Filler.json ================================================ { "ecmul_0-3_5617_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "86", "balance": "999999999996096242", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "3903758", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xafe0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x56", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "87", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5617_28000_128Filler.json ================================================ { "ecmul_0-3_5617_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "184", "balance": "999999999992124043", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7875957", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcbb8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb8", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "185", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_5617_28000_96Filler.json ================================================ { "ecmul_0-3_5617_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "183", "balance": "999999999992176067", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "7823933", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001" ], "gasLimit": [ "0xcb38", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xb7", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "184", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 21888242871839275222246405745257275088548364400416034343698204186575808495617 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9935_21000_128Filler.json ================================================ { "ecmul_0-3_9935_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "97", "balance": "999999999995591122", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4408878", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xb0e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x61", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "98", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9935_21000_96Filler.json ================================================ { "ecmul_0-3_9935_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "96", "balance": "999999999995636274", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4363726", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xb060", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x60", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "97", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9935_28000_128Filler.json ================================================ { "ecmul_0-3_9935_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "194", "balance": "999999999991708556", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8291444", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xcc38", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xc2", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "195", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9935_28000_96Filler.json ================================================ { "ecmul_0-3_9935_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "193", "balance": "999999999991760708", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "8239292", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ], "gasLimit": [ "0xcbb8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xc1", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0x40c97882e95e71d48d97c8655188333e16470e807a99282b8795064ca6ca4dcf" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "194", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 115792089237316195423570985008687907853269984665640564039457584007913129639935 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9_21000_128Filler.json ================================================ { "ecmul_0-3_9_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "52", "balance": "999999999997626866", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2373134", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x34", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "53", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9_21000_96Filler.json ================================================ { "ecmul_0-3_9_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "51", "balance": "999999999997670034", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "2329966", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x33", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "52", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9_28000_128Filler.json ================================================ { "ecmul_0-3_9_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "149", "balance": "999999999993543555", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6456445", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc478", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x95", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "150", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_0-3_9_28000_96Filler.json ================================================ { "ecmul_0-3_9_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "148", "balance": "999999999993593723", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "6406277", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x94", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xf348aa9f55b137fd60af9c782c04ea7c52c0b193972d1c3aa63d78a110fa2e20" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "149", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (0, 3) and the factor 9 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_21000_128Filler.json ================================================ { "ecmul_1-2_0_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "balance": "999999999999567602", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "432398", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa920", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x8", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_21000_64Filler.json ================================================ { "ecmul_1-2_0_21000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "9", "balance": "999999999999524306", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "475694", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa820", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x9", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_21000_80Filler.json ================================================ { "ecmul_1-2_0_21000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "10", "balance": "999999999999481266", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "518734", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0xa", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "11", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_21000_96Filler.json ================================================ { "ecmul_1-2_0_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "7", "balance": "999999999999610770", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "389230", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa8a0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "8", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_28000_128Filler.json ================================================ { "ecmul_1-2_0_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "105", "balance": "999999999995314743", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4685257", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc478", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x69", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "106", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_28000_64Filler.json ================================================ { "ecmul_1-2_0_28000_64": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "106", "balance": "999999999995283547", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4716453", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xc378", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "107", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 64 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_28000_80Filler.json ================================================ { "ecmul_1-2_0_28000_80": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "107", "balance": "999999999995252613", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4747387", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x6b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "108", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 80 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_0_28000_96Filler.json ================================================ { "ecmul_1-2_0_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "104", "balance": "999999999995345808", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "4654192", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc3f8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x68", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "105", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 0 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_1_21000_128Filler.json ================================================ { "ecmul_1-2_1_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "balance": "999999999998775154", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1224846", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x1a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "27", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_1_21000_96Filler.json ================================================ { "ecmul_1-2_1_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "25", "balance": "999999999998818386", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1181614", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x19", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "26", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_1_28000_128Filler.json ================================================ { "ecmul_1-2_1_28000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "123", "balance": "999999999994587322", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5412678", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xc4b8", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7b", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": -1, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "124", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_1_28000_96Filler.json ================================================ { "ecmul_1-2_1_28000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "122", "balance": "999999999994618451", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "5381549", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001" ], "gasLimit": [ "33000", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x7a", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "123", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "123", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 1 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 28000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_2_21000_128Filler.json ================================================ { "ecmul_1-2_2_21000_128": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "36", "balance": "999999999998334770", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1665230", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000" ], "gasLimit": [ "0xa960", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x24", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "37", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "37", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 128 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/static/state_tests/stZeroKnowledge2/ecmul_1-2_2_21000_96Filler.json ================================================ { "ecmul_1-2_2_21000_96": { "env": { "currentCoinbase": "0x3535353535353535353535353535353535353535", "currentDifficulty": "0x020000", "currentGasLimit": "0x5f5e100", "currentNumber": "0x01", "currentTimestamp": "1000" }, "pre": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": ":raw 0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "35", "balance": "999999999998378002", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "balance": "1621998", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } }, "transaction": { "data": [ ":raw 0x30c8d1da00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002" ], "gasLimit": [ "0xa8e0", "90000", "110000", "200000" ], "gasPrice": "0x0a", "nonce": "0x23", "secretKey": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "to": "0xc305c901078781c232a2a521c2af7980f8385ee9", "value": [ "0x00" ] }, "expect": [ { "indexes": { "data": 0, "gas": 0, "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": {}, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "36", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } }, { "indexes": { "data": 0, "gas": [1,2,3], "value": 0 }, "network": [ ">=Cancun" ], "result": { "24143873e0e0815fdcbcffdbe09c979cbf9ad013": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000001": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "dceceaf3fc5c0a63d195d69b1a90011b7b19650d": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "c305c901078781c232a2a521c2af7980f8385ee9": { "storage": { "0x00" : "0x8a5045bc7a493061be89fdbc32ea8ae69e8d8b55ebe445fa41fa534b1543ab50" }, "nonce": "1", "balance": "0", "code": "0x600035601c52740100000000000000000000000000000000000000006020526fffffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff000000000000000000000000000000016060527402540be3fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffdabf41c00000000000000000000000002540be40060a0526330c8d1da600051141561012b5760c06004356004013511151558576004356004013560200160043560040161014037604061026061014051610160600060076305f5e0fff11558576040610240526102406060806102c0828460006004601bf15050506102c08051602082012090506000556102c060206020820352604081510160206001820306601f820103905060208203f350005b" }, "0000000000000000000000000000000000000005": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "13cbb8d99c6c4e0f2728c7d72606e78a29c4e224": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000000": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000003": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "82a978b3f5962a5b0957d9ee9eef472ee55b42f1": { "storage": {}, "nonce": "36", "code": "0x" }, "0000000000000000000000000000000000000006": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "0000000000000000000000000000000000000007": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "598443f1880ef585b21f1d7585bd0577402861e5": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "7d577a597b2742b498cb5cf0c26cdcd726d39e6e": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "0000000000000000000000000000000000000004": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "e0fc04fa2d34a66b779fd5cee748268032a146c0": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "3535353535353535353535353535353535353535": { "storage": {}, "nonce": "0", "code": "0x" }, "0000000000000000000000000000000000000002": { "storage": {}, "nonce": "0", "balance": "1", "code": "0x" }, "77db2bebba79db42a978f896968f4afce746ea1f": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "10a1c1cb95c92ec31d3f22c66eef1d9f3f258c6b": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" }, "90f0b1ebbba1c1936aff7aaf20a7878ff9e04b6c": { "storage": {}, "nonce": "0", "balance": "1000000000000000000", "code": "0x" } } } ], "_info": { "comment": "Puts the point (1, 2) and the factor 2 into the ECMUL precompile, truncating or expanding the input data to 96 bytes. Gives the execution 21000 bytes" } } } ================================================ FILE: tests/unscheduled/__init__.py ================================================ """ Test cases for unscheduled EVM functionality. A temporary home for features that are not yet CFI'd for inclusion in the next hardfork. """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/__init__.py ================================================ """ Test cases for [EIP-7692: EVM Object Format (EOFv1) Meta](https://eips.ethereum.org/EIPS/eip-7692). Test cases for the EIPs included in EIP-7692 EOFv1 Meta. * [EIP-663: SWAPN, DUPN and EXCHANGE instructions](https://eips.ethereum.org/EIPS/eip-663). * [EIP-3540: EOF - EVM Object Format v1](https://eips.ethereum.org/EIPS/eip-3540). * [EIP-3670: EOF - Code Validation](https://eips.ethereum.org/EIPS/eip-3670). * [EIP-4200: EOF - Static relative jumps](https://eips.ethereum.org/EIPS/eip-4200). * [EIP-4750: EOF - Functions](https://eips.ethereum.org/EIPS/eip-4750). * [EIP-5450: EOF - Stack Validation](https://eips.ethereum.org/EIPS/eip-5450). * [EIP-6206: EOF - JUMPF and non-returning functions](https://eips.ethereum.org/EIPS/eip-6206). * [EIP-7069: Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069). * [EIP-7480: EOF - Data section access instructions](https://eips.ethereum.org/EIPS/eip-7480). * [EIP-7620: EOF Contract Creation](https://eips.ethereum.org/EIPS/eip-7620). * [EIP-7873: EOF - TXCREATE and InitcodeTransaction type](https://eips.ethereum.org/EIPS/eip-7873). ## Devnet Specifications - [ethpandaops/eof-devnet-0](https://notes.ethereum.org/@ethpandaops/eof-devnet-0). """ EOF_FORK_NAME = "EOFv1" ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/__init__.py ================================================ """ EOF - EVM Object Format v1 tests. Test cases for [EIP-3540: EOF - EVM Object Format v1](https://eips.ethereum.org/EIPS/eip-3540). EIP-3540 introduces a structured format for EVM bytecode, with separate sections for code and data. Opcodes introduced: None (defines a new bytecode structure but no new opcodes). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/opcodes.py ================================================ """EOF Valid Opcodes.""" from typing import List from ethereum_test_vm import Opcodes as Op V1_EOF_OPCODES: List[Op] = [ # new eof ops # EIP-663 Swap and Dup Op.DUPN, Op.SWAPN, Op.EXCHANGE, # EIP-4200 Relative Jumps Op.RJUMP, Op.RJUMPI, Op.RJUMPV, # EIP-4750 functions Op.CALLF, Op.RETF, # EIP-6209 JUMPF Instruction Op.JUMPF, # EIP-7069 Revamped EOF Call Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, Op.RETURNDATALOAD, # EIP-7480 EOF Data Section Access Op.DATALOAD, Op.DATALOADN, Op.DATASIZE, Op.DATACOPY, # EIP-7620 EOF Create and Return Contract operation Op.EOFCREATE, # EIP-7873 TXCREATE and InitcodeTransaction Op.TXCREATE, # EIP-7620 EOF Create and Return Contract operation Op.RETURNCODE, # Non-deprecated Legacy Opcodes Op.STOP, Op.ADD, Op.MUL, Op.SUB, Op.DIV, Op.SDIV, Op.MOD, Op.SMOD, Op.ADDMOD, Op.MULMOD, Op.EXP, Op.SIGNEXTEND, Op.LT, Op.GT, Op.SLT, Op.SGT, Op.EQ, Op.ISZERO, Op.AND, Op.OR, Op.XOR, Op.NOT, Op.BYTE, Op.SHL, Op.SHR, Op.SAR, Op.SHA3, Op.ADDRESS, Op.BALANCE, Op.ORIGIN, Op.CALLER, Op.CALLVALUE, Op.CALLDATALOAD, Op.CALLDATASIZE, Op.CALLDATACOPY, Op.CODESIZE, Op.CODECOPY, Op.GASPRICE, Op.EXTCODESIZE, Op.EXTCODECOPY, Op.RETURNDATASIZE, Op.RETURNDATACOPY, Op.EXTCODEHASH, Op.BLOCKHASH, Op.COINBASE, Op.TIMESTAMP, Op.NUMBER, Op.PREVRANDAO, Op.GASLIMIT, Op.CHAINID, Op.SELFBALANCE, Op.BASEFEE, Op.POP, Op.MLOAD, Op.MSTORE, Op.MSTORE8, Op.SLOAD, Op.SSTORE, Op.MSIZE, Op.GAS, Op.JUMPDEST, Op.PUSH1, Op.PUSH2, Op.PUSH3, Op.PUSH4, Op.PUSH5, Op.PUSH6, Op.PUSH7, Op.PUSH8, Op.PUSH9, Op.PUSH10, Op.PUSH11, Op.PUSH12, Op.PUSH13, Op.PUSH14, Op.PUSH15, Op.PUSH16, Op.PUSH17, Op.PUSH18, Op.PUSH19, Op.PUSH20, Op.PUSH21, Op.PUSH22, Op.PUSH23, Op.PUSH24, Op.PUSH25, Op.PUSH26, Op.PUSH27, Op.PUSH28, Op.PUSH29, Op.PUSH30, Op.PUSH31, Op.PUSH32, Op.DUP1, Op.DUP2, Op.DUP3, Op.DUP4, Op.DUP5, Op.DUP6, Op.DUP7, Op.DUP8, Op.DUP9, Op.DUP10, Op.DUP11, Op.DUP12, Op.DUP13, Op.DUP14, Op.DUP15, Op.DUP16, Op.SWAP1, Op.SWAP2, Op.SWAP3, Op.SWAP4, Op.SWAP5, Op.SWAP6, Op.SWAP7, Op.SWAP8, Op.SWAP9, Op.SWAP10, Op.SWAP11, Op.SWAP12, Op.SWAP13, Op.SWAP14, Op.SWAP15, Op.SWAP16, Op.LOG0, Op.LOG1, Op.LOG2, Op.LOG3, Op.LOG4, Op.CREATE, Op.CALL, # Op.CALLCODE, Op.RETURN, Op.DELEGATECALL, Op.CREATE2, Op.STATICCALL, Op.REVERT, Op.INVALID, # Op.SELFDESTRUCT, ] """ List of all valid EOF V1 opcodes for Shanghai. """ V1_EOF_DEPRECATED_OPCODES = [ Op.SELFDESTRUCT, Op.CALLCODE, Op.JUMP, Op.JUMPI, Op.PC, ] """ List of opcodes that will be deprecated for EOF V1. For these opcodes we will also add the correct expected amount of stack items so the container is not considered invalid due to buffer underflow. """ V1_EOF_ONLY_OPCODES = [ Op.DUPN, Op.SWAPN, Op.EXCHANGE, # EIP-4200 Relative Jumps Op.RJUMP, Op.RJUMPI, Op.RJUMPV, # EIP-4750 functions Op.CALLF, Op.RETF, # EIP-6209 JUMPF Instruction Op.JUMPF, # EIP-7069 Revamped EOF Call Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, # EIP-7480 EOF Data Section Access Op.DATALOAD, Op.DATALOADN, Op.DATASIZE, Op.DATACOPY, # EIP-7620 EOF Create and Return Contract operation Op.EOFCREATE, Op.RETURNCODE, ] """ List of valid EOF V1 opcodes that are disabled in legacy bytecode. """ VALID_TERMINATING_OPCODES = [ Op.STOP, Op.RETURN, Op.REVERT, Op.INVALID, Op.RETF, Op.JUMPF, ] INVALID_TERMINATING_OPCODES = [op for op in V1_EOF_OPCODES if op not in VALID_TERMINATING_OPCODES] INVALID_OPCODES = [ bytes([i]) for i in range(256) if i not in [x.int() for x in V1_EOF_OPCODES] + [x.int() for x in V1_EOF_DEPRECATED_OPCODES] ] ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/spec.py ================================================ """EOF V1 Constants used throughout all tests.""" ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py ================================================ """ EOF Container: check how every opcode behaves in the middle of the valid eof container code. """ import itertools from typing import Any, Dict, Generator, List, Tuple import pytest from ethereum_test_tools import EOFException, EOFTestFiller, Opcode, UndefinedOpcodes from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.constants import MAX_RUNTIME_STACK_HEIGHT from ethereum_test_types.eof.v1 import Container, ContainerKind, Section from ethereum_test_types.eof.v1.constants import MAX_STACK_INCREASE_LIMIT from ethereum_test_vm import Bytecode from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) all_opcodes = set(Op) undefined_opcodes = set(UndefinedOpcodes) # Invalid Opcodes will produce EOFException.UNDEFINED_INSTRUCTION when used in # EOFContainer invalid_eof_opcodes = { Op.CODESIZE, Op.SELFDESTRUCT, Op.CREATE2, Op.CODECOPY, Op.EXTCODESIZE, Op.EXTCODECOPY, Op.EXTCODEHASH, Op.JUMP, Op.JUMPI, Op.PC, Op.GAS, Op.CREATE, Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, } valid_eof_opcodes = all_opcodes - invalid_eof_opcodes # Halting the execution opcodes can be placed without STOP instruction at the # end halting_opcodes = { Op.STOP, Op.RETURNCODE, Op.RETURN, Op.REVERT, Op.INVALID, } # Opcodes that end the code section and can be placed without STOP instruction # at the end section_terminating_opcodes = { Op.RETF, Op.JUMPF, } data_portion_opcodes = {op for op in all_opcodes if op.has_data_portion()} # NOTE: `sorted` is used to ensure that the tests are collected in a # deterministic order. @pytest.mark.parametrize( "opcode", sorted((all_opcodes | undefined_opcodes) - {Op.RETF}), ) def test_all_opcodes_in_container( eof_test: EOFTestFiller, opcode: Opcode, ) -> None: """ Test all opcodes inside valid container 257 because 0x5B is duplicated. """ data_portion = 1 if opcode == Op.CALLF else 0 opcode_with_data_portion = opcode[data_portion] if opcode.has_data_portion() else opcode # opcode_with_data_portion has the correct minimum stack height bytecode = Op.PUSH0 * opcode_with_data_portion.min_stack_height + opcode_with_data_portion if opcode not in (halting_opcodes | section_terminating_opcodes): bytecode += Op.STOP sections = [Section.Code(code=bytecode)] match opcode: case Op.EOFCREATE | Op.RETURNCODE: sections.append( Section.Container( container=Container( sections=[ Section.Code(code=Op.REVERT(0, 0)), ] ) ) ) case Op.CALLF: sections.append( Section.Code( code=Op.RETF, code_outputs=0, ) ) sections.append(Section.Data("1122334455667788" * 4)) if opcode == Op.RETURNCODE: eof_code = Container(sections=sections, kind=ContainerKind.INITCODE) else: eof_code = Container(sections=sections) eof_test( container=eof_code, expect_exception=( None if opcode in valid_eof_opcodes else EOFException.UNDEFINED_INSTRUCTION ), ) @pytest.mark.parametrize( "opcode", sorted(invalid_eof_opcodes | undefined_opcodes), ) @pytest.mark.parametrize( "terminating_opcode", sorted(halting_opcodes) + [Op.RJUMP], ) def test_invalid_opcodes_after_stop( eof_test: EOFTestFiller, opcode: Opcode, terminating_opcode: Opcode, ) -> None: """ Test that an invalid opcode placed after STOP (terminating instruction) invalidates EOF. """ terminating_code = Bytecode(terminating_opcode) match terminating_opcode: # Enhance the code for complex opcodes. case Op.RETURNCODE: terminating_code = Op.RETURNCODE[0] case Op.RETURN | Op.REVERT: terminating_code = Op.PUSH0 + Op.PUSH0 + terminating_opcode case Op.RJUMP: terminating_code = Op.RJUMP[-3] eof_code = Container( kind=ContainerKind.INITCODE if terminating_opcode == Op.RETURNCODE else ContainerKind.RUNTIME, sections=[ Section.Code(code=terminating_code + opcode), Section.Data("00" * 32), ] + ( [Section.Container(container=Container.Code(Op.INVALID))] if terminating_opcode == Op.RETURNCODE else [] ), ) eof_test( container=eof_code, expect_exception=EOFException.UNDEFINED_INSTRUCTION, ) @pytest.mark.parametrize( "opcode", sorted( valid_eof_opcodes - halting_opcodes - section_terminating_opcodes - {Op.RJUMP, Op.RJUMPI, Op.RJUMPV} ), ) def test_all_invalid_terminating_opcodes( eof_test: EOFTestFiller, opcode: Opcode, ) -> None: """Test all opcodes that are invalid as the last opcode in a container.""" if opcode.has_data_portion(): # Add the appropriate data portion to the opcode by using the get_item # method. On the CALLF opcode we need to reference the second code # section, hence the [1] index. opcode = opcode[0] if opcode != Op.CALLF else opcode[1] bytecode = (Op.PUSH0 * opcode.min_stack_height) + opcode sections = [Section.Code(code=bytecode)] if opcode == Op.CALLF[1]: sections += [Section.Code(code=Op.RETF, code_outputs=0)] elif opcode == Op.EOFCREATE[0]: sections += [ Section.Container( container=Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0)), Section.Container(Container.Code(code=Op.STOP)), ] ) ) ] sections += [Section.Data(b"\0" * 32)] eof_test( container=Container( sections=sections, ), expect_exception=EOFException.MISSING_STOP_OPCODE, ) @pytest.mark.parametrize( "opcode", sorted(halting_opcodes | section_terminating_opcodes), ) def test_all_unreachable_terminating_opcodes_after_stop( eof_test: EOFTestFiller, opcode: Opcode, ) -> None: """Test all terminating opcodes after stop.""" match opcode: case Op.STOP: sections = [Section.Code(code=Op.STOP + Op.STOP)] case Op.RETF: sections = [ Section.Code(code=Op.CALLF[1] + Op.STOP), Section.Code(code=Op.STOP + Op.RETF, code_outputs=0), ] case Op.JUMPF: sections = [ Section.Code(code=Op.STOP + Op.JUMPF[1]), Section.Code(code=Op.STOP), ] case Op.RETURNCODE: sections = [ Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container( container=Container( sections=[ Section.Code(code=Op.STOP + Op.RETURNCODE[0](0, 0)), Section.Container(Container.Code(code=Op.STOP)), ] ) ), ] case Op.RETURN | Op.REVERT | Op.INVALID: sections = [ Section.Code(code=Op.PUSH0 + Op.PUSH0 + Op.STOP + opcode), ] case _: raise NotImplementedError(f"Opcode {opcode} is not implemented") eof_test( container=Container( sections=sections, ), expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS if opcode != Op.RETURNCODE else EOFException.INCOMPATIBLE_CONTAINER_KIND, ) @pytest.mark.parametrize( "opcode", sorted((halting_opcodes | section_terminating_opcodes) - {Op.STOP}), ) def test_all_unreachable_terminating_opcodes_before_stop( eof_test: EOFTestFiller, opcode: Opcode, ) -> None: """Test all opcodes terminating opcodes before.""" match opcode: case Op.RETF: sections = [ Section.Code(code=Op.CALLF[1] + Op.STOP), Section.Code(code=Op.RETF + Op.STOP, code_outputs=0), ] case Op.JUMPF: sections = [ Section.Code(code=Op.JUMPF[1] + Op.STOP), Section.Code(code=Op.STOP), ] case Op.RETURNCODE: sections = [ Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container( container=Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0) + Op.STOP), Section.Container(Container.Code(code=Op.STOP)), ] ) ), ] case Op.RETURN | Op.REVERT | Op.INVALID: sections = [ Section.Code(code=Op.PUSH1(0) + Op.PUSH1(0) + opcode + Op.STOP), ] case _: raise NotImplementedError(f"Opcode {opcode} is not implemented") eof_test( container=Container( sections=sections, ), expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS if opcode != Op.RETURNCODE else EOFException.INCOMPATIBLE_CONTAINER_KIND, ) @pytest.mark.parametrize( "opcode", sorted(op for op in valid_eof_opcodes if op.pushed_stack_items > op.popped_stack_items) + [ Op.DUPN[0xFF], ], ) @pytest.mark.parametrize( "exception", # We test two types of exceptions here: # 1. Invalid max stack height, where we modify the `max_stack_height` # field of the code section to the maximum stack height allowed by # the EIP-3540, so the code still has to be checked for stack overflow. # # 2. Max stack height above limit, where we don't modify the # `max_stack_height` field of the code section, so the actual # code doesn't have to be verified for the stack overflow. [EOFException.INVALID_MAX_STACK_INCREASE, EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT], ) def test_all_opcodes_stack_overflow( eof_test: EOFTestFiller, opcode: Opcode, exception: EOFException, ) -> None: """ Test stack overflow on all opcodes that push more items than they pop. """ opcode = opcode[0] if opcode.has_data_portion() else opcode assert opcode.pushed_stack_items - opcode.popped_stack_items == 1 opcode_count = MAX_RUNTIME_STACK_HEIGHT - opcode.min_stack_height bytecode = Op.PUSH0 * opcode.min_stack_height bytecode += opcode * opcode_count bytecode += Op.STOP kwargs: Dict[str, Any] = {"code": bytecode} if exception == EOFException.INVALID_MAX_STACK_INCREASE: # Lie about the max stack height to make the code be checked for stack # overflow. kwargs["max_stack_height"] = MAX_STACK_INCREASE_LIMIT sections = [Section.Code(**kwargs)] if opcode == Op.DATALOADN[0]: sections.append(Section.Data(b"\0" * 32)) eof_code = Container(sections=sections) eof_test( container=eof_code, expect_exception=exception, ) def valid_opcode_combinations( compute_max_stack_height_options: List[bool], truncate_all_options: List[bool], opcodes: List[Opcode], ) -> Generator[Tuple[bool, bool, Opcode], None, None]: """ Create valid parameter combinations for test_truncated_data_portion_opcodes(). """ for opcode, truncate_all, compute_max_stack_height in itertools.product( opcodes, truncate_all_options, compute_max_stack_height_options ): opcode_with_data_portion: bytes = bytes(opcode[1]) # Skip invalid or redundant combinations to avoid using pytest.skip in # the test if len(opcode_with_data_portion) == 2 and truncate_all: continue if ( compute_max_stack_height and max(opcode.min_stack_height, opcode.pushed_stack_items) == 0 ): continue yield compute_max_stack_height, truncate_all, opcode @pytest.mark.parametrize( "compute_max_stack_height, truncate_all, opcode", valid_opcode_combinations([False, True], [False, True], sorted(data_portion_opcodes)), ) def test_truncated_data_portion_opcodes( eof_test: EOFTestFiller, opcode: Opcode, truncate_all: bool, compute_max_stack_height: bool, ) -> None: """ Test that an instruction with data portion and truncated immediate bytes (therefore a terminating instruction is also missing) invalidates EOF. """ opcode_with_data_portion: bytes = bytes(opcode[1]) # Compose instruction bytes with empty imm bytes (truncate_all) or 1 byte # shorter imm bytes. opcode_bytes = opcode_with_data_portion[0:1] if truncate_all else opcode_with_data_portion[:-1] if opcode.min_stack_height > 0: opcode_bytes = bytes(Op.PUSH0 * opcode.min_stack_height) + opcode_bytes max_stack_height = ( max(opcode.min_stack_height, opcode.pushed_stack_items) if compute_max_stack_height else 0 ) eof_code = Container( sections=[ Section.Code(opcode_bytes, max_stack_height=max_stack_height), # Provide data section potentially confused with missing imm bytes. Section.Data(b"\0" * 64), ] ) eof_test( container=eof_code, expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py ================================================ """EOF validation tests for EIP-3540 container size.""" import pytest from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_INITCODE_SIZE from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "6b313505c75afa49a4f34de39c609ebebc7be87f" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) VALID_CONTAINER = Container(sections=[Section.Code(code=Op.STOP)]) @pytest.mark.parametrize( "over_limit", [0, 1, 2, 2**16 - MAX_INITCODE_SIZE], ) @pytest.mark.eof_test_only def test_max_size( eof_test: EOFTestFiller, over_limit: int, ) -> None: """Verify EOF container valid at maximum size, invalid above.""" # Expand the minimal EOF code by more noop code, reaching the desired # target container size. code = Container( sections=[ Section.Code( code=Op.JUMPDEST * (MAX_INITCODE_SIZE - len(VALID_CONTAINER) + over_limit) + Op.STOP ) ] ) assert len(code) == MAX_INITCODE_SIZE + over_limit eof_test( container=code, expect_exception=None if over_limit == 0 else EOFException.CONTAINER_SIZE_ABOVE_LIMIT, ) @pytest.mark.parametrize( "size", [MAX_INITCODE_SIZE + 1, MAX_INITCODE_SIZE * 2], ) @pytest.mark.eof_test_only def test_above_max_size_raw( eof_test: EOFTestFiller, size: int, ) -> None: """ Verify EOF container invalid above maximum size, regardless of header contents. """ code = Op.INVALID * size eof_test( container=Container(raw_bytes=code), expect_exception=EOFException.CONTAINER_SIZE_ABOVE_LIMIT, ) @pytest.mark.parametrize( "code", [ pytest.param( Container(sections=[Section.Code(code=Op.STOP, custom_size=MAX_INITCODE_SIZE)]), id="1st_code_section", ), pytest.param( Container( sections=[ Section.Code(code=Op.STOP), Section.Code(code=Op.STOP, custom_size=MAX_INITCODE_SIZE), ] ), id="2nd_code_section", ), pytest.param( Container( sections=[ Section.Code(code=Op.STOP), Section.Container(container=Op.STOP, custom_size=MAX_INITCODE_SIZE), ] ), id="1st_container_section", ), pytest.param( Container( sections=[ Section.Code(code=Op.STOP), Section.Container(container=Op.STOP), Section.Container(container=Op.STOP, custom_size=MAX_INITCODE_SIZE), ] ), id="2nd_container_section", ), ], ) def test_section_after_end_of_container( eof_test: EOFTestFiller, code: Container, ) -> None: """ Verify EOF container is invalid if any of sections declares above container size. """ eof_test( container=code, expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py ================================================ """EOF validation tests for EIP-3540 container format.""" import itertools import pytest from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_types.eof.v1 import ( AutoSection, Container, ContainerKind, Section, SectionKind, ) from ethereum_test_types.eof.v1.constants import ( MAX_CODE_INPUTS, MAX_CODE_OUTPUTS, MAX_CODE_SECTIONS, MAX_STACK_INCREASE_LIMIT, ) from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) VALID_CONTAINER = Container(sections=[Section.Code(code=Op.STOP)]) @pytest.mark.parametrize( "container", [ Container( name="single_code_section_max_stack_size", sections=[ Section.Code( code=(Op.CALLER * MAX_STACK_INCREASE_LIMIT) + (Op.POP * MAX_STACK_INCREASE_LIMIT) + Op.STOP, max_stack_height=MAX_STACK_INCREASE_LIMIT, ), ], ), Container( name="code_section_with_inputs_outputs", sections=[ Section.Code( code=(Op.PUSH0 + Op.CALLF[1] + Op.STOP), ), Section.Code( code=Op.POP + Op.PUSH0 + Op.RETF, code_inputs=1, code_outputs=1, ), ], ), Container( name="code_section_input_maximum", sections=[ Section.Code( code=((Op.PUSH0 * MAX_CODE_INPUTS) + Op.CALLF[1] + Op.STOP), max_stack_height=MAX_CODE_INPUTS, ), Section.Code( code=(Op.POP * MAX_CODE_INPUTS) + Op.RETF, code_inputs=MAX_CODE_INPUTS, code_outputs=0, max_stack_height=MAX_CODE_INPUTS, ), ], ), Container( name="code_section_output_maximum", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), max_stack_height=MAX_CODE_OUTPUTS, ), Section.Code( code=(Op.PUSH0 * MAX_CODE_OUTPUTS) + Op.RETF, code_inputs=0, code_outputs=MAX_CODE_OUTPUTS, max_stack_height=MAX_CODE_OUTPUTS, ), ], ), Container( name="multiple_code_sections", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( code=Op.RETF, code_inputs=0, code_outputs=0, ), ], ), Container( name="multiple_code_sections_max_inputs_max_outputs", sections=[ Section.Code( (Op.PUSH0 * MAX_CODE_OUTPUTS) + Op.CALLF[1] + Op.STOP, max_stack_height=MAX_CODE_OUTPUTS, ), Section.Code( code=Op.RETF, code_inputs=MAX_CODE_INPUTS, code_outputs=MAX_CODE_OUTPUTS, max_stack_height=MAX_CODE_INPUTS, ), ], ), Container( name="single_subcontainer_without_data", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container(Container.Code(Op.INVALID)), ], ), Container( name="single_subcontainer_with_data", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container(Container.Code(Op.INVALID)), Section.Data(data="0xAA"), ], ), ], ids=lambda c: c.name, ) def test_valid_containers( eof_test: EOFTestFiller, container: Container, ) -> None: """Test various types of valid containers.""" assert container.validity_error is None, ( f"Valid container with validity error: {container.validity_error}" ) eof_test(container=container) @pytest.mark.parametrize( "container", [ Container( name="empty_container", raw_bytes=b"", validity_error=[ EOFException.INVALID_MAGIC, ], ), Container( name="single_code_section_no_data_section", sections=[ Section.Code(Op.STOP), ], auto_data_section=False, validity_error=[ EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND, ], ), Container( name="incomplete_magic", raw_bytes="ef", validity_error=EOFException.INVALID_MAGIC, ), Container( name="no_version", raw_bytes="ef00", validity_error=[EOFException.INVALID_VERSION, EOFException.INVALID_MAGIC], ), Container( name="no_type_header", raw_bytes="ef00 01", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="no_type_section_size", raw_bytes="ef00 01 01", validity_error=[ EOFException.MISSING_HEADERS_TERMINATOR, EOFException.INVALID_TYPE_SECTION_SIZE, ], ), Container( name="incomplete_type_section_size", raw_bytes="ef00010100", validity_error=[ EOFException.INCOMPLETE_SECTION_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE, ], ), Container( name="no_code_header", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04]), validity_error=[ EOFException.MISSING_CODE_HEADER, EOFException.MISSING_HEADERS_TERMINATOR, ], ), Container( name="no_code_header_2", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0xFE]), validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_code_header_3", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x00]), validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_code_header_4", sections=[ Section(kind=SectionKind.TYPE, data="00800000"), Section.Data("da"), ], expected_bytecode="ef0001 010004 ff0001 00 00800000 da", validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="code_section_count_missing", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02]), validity_error=EOFException.INCOMPLETE_SECTION_NUMBER, ), Container( name="code_section_count_incomplete", raw_bytes="ef00 01 01 0004 02 00", validity_error=EOFException.INCOMPLETE_SECTION_NUMBER, ), Container( name="code_section_size_missing", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01]), validity_error=[ EOFException.MISSING_HEADERS_TERMINATOR, EOFException.ZERO_SECTION_SIZE, ], ), Container( name="code_section_size_incomplete", raw_bytes="ef00 01 01 0004 02 0001 00", validity_error=[EOFException.INCOMPLETE_SECTION_SIZE, EOFException.ZERO_SECTION_SIZE], ), Container( name="code_section_count_0x8000_truncated", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x80, 0x00]), validity_error=EOFException.TOO_MANY_CODE_SECTIONS, ), Container( name="code_section_count_0xFFFF_truncated", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0xFF, 0xFF]), validity_error=EOFException.TOO_MANY_CODE_SECTIONS, ), pytest.param( Container( name="code_section_count_0x8000", raw_bytes=bytes( [0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x80, 0x00] + [0x00, 0x01] * 0x8000 ), validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT, ), marks=pytest.mark.eof_test_only(reason="initcode too large"), ), pytest.param( Container( name="code_section_count_0xFFFF", raw_bytes=bytes( [0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0xFF, 0xFF] + [0x00, 0x01] * 0xFFFF ), validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT, ), marks=pytest.mark.eof_test_only(reason="initcode too large"), ), Container( name="code_section_size_0x8000_truncated", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0x80, 0x00]), validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="code_section_size_0xFFFF_truncated", raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0xFF, 0xFF]), validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="terminator_incomplete", header_terminator=b"", sections=[ Section(kind=SectionKind.TYPE, data=b"", custom_size=4), Section.Code(code=b"", custom_size=0x01), ], expected_bytecode="ef00 01 01 0004 02 0001 0001 ff 0000", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="truncated_header_data_section", raw_bytes="ef00 01 01 0004 02 0001 0001", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="no_data_section_size", raw_bytes="ef00 01 01 0004 02 0001 0001 ff", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="data_section_size_incomplete", raw_bytes="ef00 01 01 0004 02 0001 0001 ff 00", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="no_container_section_count", raw_bytes="ef00 01 01 0004 02 0001 0001 03", validity_error=EOFException.INCOMPLETE_SECTION_NUMBER, ), Container( name="incomplete_container_section_count", raw_bytes="ef00 01 01 0004 02 0001 0001 03 00", validity_error=EOFException.INCOMPLETE_SECTION_NUMBER, ), Container( name="zero_container_section_count", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0000 ff 0000 00 00800000 00", validity_error=EOFException.ZERO_SECTION_SIZE, ), Container( name="no_container_section_size", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="incomplete_container_section_size", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 00", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="incomplete_container_section_size_2", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 0000", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="incomplete_container_section_size_3", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 000000", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="incomplete_container_section_size_4", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0002 00000001", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="incomplete_container_section_size_5", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0002 00000001 00", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="incomplete_container_section_size_6", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0002 00000001 0000", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="incomplete_container_section_size_7", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0002 00000001 000000", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( name="zero_size_container_section", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 00000000 ff 0000 00 00800000 00", validity_error=EOFException.ZERO_SECTION_SIZE, ), Container( name="container_section_size_2bytes", raw_bytes="ef00 01 01 0004 02 0001 000b 03 0001 0014 ff 0000 00 00800004" "6000600060006000ec0000" "ef00 01 01 0004 02 0001 0001 ff 0000 00 00800000 fe", validity_error=EOFException.MISSING_DATA_SECTION, ), Container( name="truncated_header_data_section_with_container_section", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 00000001", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="no_data_section_size_with_container_section", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 00000001 ff", validity_error=EOFException.MISSING_HEADERS_TERMINATOR, ), Container( name="data_section_size_incomplete_with_container_section", raw_bytes="ef00 01 01 0004 02 0001 0001 03 0001 00000001 ff 00", validity_error=EOFException.INCOMPLETE_SECTION_SIZE, ), Container( # EOF code missing mandatory type section name="EOF1I4750_0001", raw_bytes="ef00010200010001ff00000000800000fe", validity_error=EOFException.MISSING_TYPE_HEADER, ), Container( # EOF code containing multiple type headers name="multiple_type_headers_1", # EOF1I4750_0002 raw_bytes="ef0001010004010004ff00000000800000fe", validity_error=EOFException.MISSING_CODE_HEADER, ), Container( # EOF code containing multiple type headers, second one matches # code length name="multiple_type_headers_2", raw_bytes="ef0001010004010001ff00000000800000fe", validity_error=EOFException.MISSING_CODE_HEADER, ), Container( # EOF code containing multiple type headers followed by 2 code # sections name="multiple_type_headers_3", sections=[ Section(kind=SectionKind.TYPE, data="00800000"), Section(kind=SectionKind.TYPE, data="00800000"), Section.Code(Op.JUMPF[1]), Section.Code(Op.INVALID), ], validity_error=EOFException.MISSING_CODE_HEADER, ), Container( # EOF code containing type section size (Size 1) name="EOF1I4750_0003", raw_bytes="ef00010100010200010001ff00000000800000fe", validity_error=[ EOFException.INVALID_TYPE_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], ), Container( # EOF code containing type section size (Size 8 - 1 Code section) name="EOF1I4750_0004", raw_bytes="ef00010100080200010001ff00000000800000fe", validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( # EOF code containing type section size (Size 8 - 3 Code sections) name="EOF1I4750_0005", raw_bytes="ef0001010008020003000100010001ff0000000080000000800000fefefe", validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="no_sections", sections=[], auto_data_section=False, auto_type_section=AutoSection.NONE, expected_bytecode="ef0001 00", validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_code_section_header", sections=[ Section(kind=SectionKind.TYPE, data=b"\0\x80\0\0"), Section.Data("0x00"), ], expected_bytecode="ef00 01 01 0004 ff 0001 00 00800000 00", auto_type_section=AutoSection.NONE, validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="too_many_code_sections", sections=[ Section.Code(Op.JUMPF[i + 1] if i < MAX_CODE_SECTIONS else Op.STOP) for i in range(MAX_CODE_SECTIONS + 1) ], validity_error=EOFException.TOO_MANY_CODE_SECTIONS, ), Container( name="zero_code_sections_header", raw_bytes="ef00 01 01 0004 02 0000 ff 0000 00 00800000", validity_error=[ EOFException.ZERO_SECTION_SIZE, EOFException.INCOMPLETE_SECTION_NUMBER, ], ), Container( name="zero_code_sections_header_empty_type_section", raw_bytes="ef00 01 01 0000 02 0000 ff 0000 00", validity_error=[ EOFException.ZERO_SECTION_SIZE, EOFException.INCOMPLETE_SECTION_NUMBER, ], ), # The basic `no_section_terminator` cases just remove the terminator # and the `00` for zeroth section inputs looks like one. Error is # because the sections are wrongly sized. Container( name="no_section_terminator", header_terminator=bytes(), sections=[Section.Code(code=Op.STOP)], validity_error=[ EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_FIRST_SECTION_TYPE, ], ), Container( name="no_section_terminator_1", header_terminator=bytes(), sections=[Section.Code(code=Op.STOP, custom_size=2)], validity_error=[ EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_FIRST_SECTION_TYPE, ], ), Container( name="no_section_terminator_2", header_terminator=bytes(), sections=[Section.Code(code="0x", custom_size=3)], validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="no_section_terminator_3", header_terminator=bytes(), sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)], validity_error=[ EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_FIRST_SECTION_TYPE, ], ), # The following cases just remove the terminator and the `00` for # zeroth section inputs looks like one. Section bodies are as the size # prescribes here, so the error is about the inputs of zeroth section. Container( name="no_section_terminator_section_bodies_ok_1", header_terminator=bytes(), sections=[Section.Code(code=Op.JUMPDEST + Op.STOP, custom_size=1)], validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ), Container( name="no_section_terminator_section_bodies_ok_2", header_terminator=bytes(), sections=[Section.Code(code=Op.JUMPDEST * 2 + Op.STOP, custom_size=2)], validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ), # Here the terminator is missing but made to look like a different # section or arbitrary byte Container( name="no_section_terminator_nonzero", header_terminator=b"01", sections=[Section.Code(code=Op.STOP)], validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_section_terminator_nonzero_1", header_terminator=b"02", sections=[Section.Code(code=Op.STOP, custom_size=2)], validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_section_terminator_nonzero_2", header_terminator=b"03", sections=[Section.Code(code="0x", custom_size=3)], validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_section_terminator_nonzero_3", header_terminator=b"04", sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)], validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_section_terminator_nonzero_4", header_terminator=b"fe", sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)], validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="truncated_before_type_section", sections=[ Section(kind=SectionKind.TYPE, data=b"", custom_size=4), Section.Code(code=b"", custom_size=0x01), ], expected_bytecode="ef00 01 01 0004 02 0001 0001 ff 0000 00", validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="truncated_type_section_before_outputs", sections=[ Section(kind=SectionKind.TYPE, data=b"\0", custom_size=4), Section.Code(code=b"", custom_size=0x01), ], expected_bytecode="ef00 01 01 0004 02 0001 0001 ff 0000 00 00", validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="truncated_type_section_before_max_stack_height", sections=[ Section(kind=SectionKind.TYPE, data=b"\0\x80", custom_size=4), Section.Code(code=b"", custom_size=0x01), ], expected_bytecode="ef00 01 01 0004 02 0001 0001 ff 0000 00 0080", validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="truncated_type_section_truncated_max_stack_height", sections=[ Section(kind=SectionKind.TYPE, data=b"\0\x80\0", custom_size=4), Section.Code(code=b"", custom_size=0x01), ], expected_bytecode="ef00 01 01 0004 02 0001 0001 ff 0000 00 008000", validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="no_code_section_contents", sections=[Section.Code(code="0x", custom_size=0x01)], validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="incomplete_code_section_contents", sections=[ Section.Code(code=Op.STOP, custom_size=0x02), ], validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="trailing_bytes_after_code_section", sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)], extra=bytes([0xDE, 0xAD, 0xBE, 0xEF]), validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="empty_code_section", sections=[Section.Code(code="0x")], # TODO the exception must be about code section # EOFException.INVALID_CODE_SECTION, validity_error=EOFException.ZERO_SECTION_SIZE, ), Container( name="empty_code_section_with_non_empty_data", sections=[ Section.Code(code="0x"), Section.Data(data="0xDEADBEEF"), ], # TODO the exception must be about code section # EOFException.INVALID_CODE_SECTION, validity_error=EOFException.ZERO_SECTION_SIZE, ), Container( name="no_container_section_contents", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section(kind=SectionKind.CONTAINER, data=b"", custom_size=20), ], validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="no_container_section_contents_with_data", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section(kind=SectionKind.CONTAINER, data=b"", custom_size=20), Section.Data(b"\0" * 20), ], validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED, ), Container( name="no_data_section_contents", sections=[ Section.Code(Op.STOP), Section.Data(data="0x", custom_size=1), ], code="ef0001 010004 0200010001 ff0001 00 00800000 00", validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED, ), Container( name="data_section_contents_incomplete", sections=[ Section.Code(Op.STOP), Section.Data(data="0xAABBCC", custom_size=4), ], validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED, ), Container( name="data_section_preceding_code_section", auto_data_section=False, auto_sort_sections=AutoSection.NONE, sections=[ Section.Data(data="0xDEADBEEF"), Section.Code(Op.STOP), ], validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="data_section_without_code_section", sections=[Section.Data(data="0xDEADBEEF")], # TODO the actual exception should be # EOFException.MISSING_CODE_HEADER validity_error=[EOFException.ZERO_SECTION_SIZE, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_section_terminator_3a", header_terminator=bytes(), sections=[Section.Code(code="0x030004")], # TODO the exception must be about terminator validity_error=[ EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_FIRST_SECTION_TYPE, ], ), Container( name="no_section_terminator_4a", header_terminator=bytes(), sections=[ Section.Code(Op.STOP), Section.Data(data="0xAABBCCDD"), ], # TODO: The error of this validation can be random. validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ), Container( name="trailing_bytes_after_data_section", extra=bytes([0xEE]), sections=[ Section.Code(code=Op.PUSH1(0) + Op.STOP), Section.Data(data="0xAABBCCDD"), ], # TODO should be more specific exception about trailing bytes validity_error=EOFException.INVALID_SECTION_BODIES_SIZE, ), Container( name="multiple_data_sections", sections=[ Section.Code(code=Op.PUSH1(0) + Op.STOP), Section.Data(data="0xAABBCC"), Section.Data(data="0xAABBCC"), ], expected_bytecode=( "ef00 01 01 0004 02 0001 0003 ff 0003 ff 0003 00 00800001 600000 AABBCC AABBCC" ), validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="multiple_code_headers", sections=[ Section.Code(Op.JUMPF[1]), Section.Data(data="0xAA"), Section.Code(Op.STOP), ], auto_sort_sections=AutoSection.ONLY_BODY, expected_bytecode=( "ef00 01 01 0008 02 0001 0003 ff 0001 02 0001 0001 00" "00800000 00800000 E50001 00 AA" ), validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="multiple_code_headers_2", sections=[ Section.Code(Op.JUMPF[1]), Section.Code(Op.STOP), Section.Data(data="0xAA"), ], skip_join_concurrent_sections_in_header=True, expected_bytecode=( "ef00 01 01 0008 02 0001 0003 02 0001 0001 ff 0001 00" "00800000 00800000 E50001 00 AA" ), validity_error=[ EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND, ], ), Container( name="duplicated_code_header", sections=[ Section.Code(Op.STOP), Section.Code( b"", custom_size=1, skip_types_header_listing=True, skip_types_body_listing=True, ), Section.Data(data="0xAA"), ], skip_join_concurrent_sections_in_header=True, expected_bytecode=( "ef00 01 01 0004 02 0001 0001 02 0001 0001 ff 0001 00 00800000 00 AA" ), validity_error=[ EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND, ], ), Container( name="multiple_code_and_data_sections", sections=[ Section.Code(Op.JUMPF[1]), Section.Code(Op.STOP), Section.Data(data="0xAA"), Section.Data(data="0xAA"), ], expected_bytecode=( "ef00 01 01 0008 02 0002 0003 0001 ff 0001 ff 0001 00" "00800000 00800000 E50001 00 AA AA" ), validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="multiple_code_and_data_sections_2", sections=[ Section.Code(Op.JUMPF[1]), Section.Code(Op.STOP), Section.Data(data="0xAA"), Section.Data(data="0xAA"), ], skip_join_concurrent_sections_in_header=True, expected_bytecode=( "ef00 01 01 0008 02 0001 0003 02 0001 0001 ff 0001 ff 0001 00" "00800000 00800000 E50001 00 AA AA" ), validity_error=[ EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND, ], ), Container( name="multiple_container_headers", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[1](0, 0, 0, 0) + Op.STOP), Section.Container(Container.Code(code=Op.INVALID)), Section.Data(data="0xAA"), Section.Container(Container.Code(code=Op.INVALID)), ], auto_sort_sections=AutoSection.ONLY_BODY, expected_bytecode=( "ef00 01 01 0004 02 0001 0015 03 0001 00000014 ff 0001 03 0001 00000014 00" "00800005 6000600060006000ec00 6000600060006000ec01 00" "ef00 01 01 0004 02 0001 0001 ff 0000 00 00800000 fe" "ef00 01 01 0004 02 0001 0001 ff 0000 00 00800000 fe" "aa" ), validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="multiple_container_headers_2", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[1](0, 0, 0, 0) + Op.STOP), Section.Container(Container.Code(code=Op.INVALID)), Section.Container(Container.Code(code=Op.INVALID)), Section.Data(data="0xAA"), ], skip_join_concurrent_sections_in_header=True, expected_bytecode=( "ef00 01 01 0004 02 0001 0015 03 0001 00000014 03 0001 00000014 ff 0001 00" "00800005 6000600060006000ec00 6000600060006000ec01 00" "ef00 01 01 0004 02 0001 0001 ff 0000 00 00800000 fe" "ef00 01 01 0004 02 0001 0001 ff 0000 00 00800000 fe" "aa" ), validity_error=[ EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND, ], ), Container( name="duplicated_container_header", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container(Container.Code(code=Op.INVALID)), Section(kind=SectionKind.CONTAINER, data=b"", custom_size=20), Section.Data(data="0xAA"), ], skip_join_concurrent_sections_in_header=True, expected_bytecode=( "ef00 01 01 0004 02 0001 000b 03 0001 00000014 03 0001 00000014 ff 0001 00" "00800004 6000600060006000ec00 00" "ef00 01 01 0004 02 0001 0001 ff 0000 00 00800000 fe" "aa" ), validity_error=[ EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND, ], ), Container( name="unknown_section_1", sections=[ Section.Code(Op.STOP), Section.Data(data="0x"), Section(kind=4, data="0x01"), ], auto_sort_sections=AutoSection.NONE, validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="unknown_section_2", sections=[ Section(kind=4, data="0x01"), Section.Data(data="0x"), Section.Code(Op.STOP), ], auto_sort_sections=AutoSection.NONE, # TODO the exception should be about unknown section definition validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="unknown_section_empty", sections=[ Section.Code(Op.STOP), Section.Data(data="0x"), Section(kind=4, data="0x"), ], auto_sort_sections=AutoSection.NONE, validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_type_section", sections=[ Section.Code(code=Op.STOP), Section.Data("0x00"), ], auto_type_section=AutoSection.NONE, validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_type_section_2_codes", sections=[ Section.Code(Op.INVALID), Section.Code(Op.INVALID), ], auto_type_section=AutoSection.NONE, auto_data_section=False, expected_bytecode="ef0001 020002 0001 0001 00 fefe", validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_type_section_data_section", sections=[ Section.Code(Op.INVALID), Section.Data("0xda"), ], auto_type_section=AutoSection.NONE, expected_bytecode="ef0001 020001 0001 ff0001 00 feda", validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="no_type_section_container_section", sections=[ Section.Code(Op.INVALID), Section.Container( Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0)), Section.Container(container=Container.Code(code=Op.STOP)), ], ) ), ], auto_type_section=AutoSection.NONE, expected_bytecode="ef0001 020001 0001 030001 00000034 ff0000 00 fe" "ef0001 010004 020001 0006 030001 00000014 ff0000 00 00800002 60006000ee00" "ef0001 010004 020001 0001 ff0000 00 0080000000", validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="too_many_type_sections", sections=[ Section(kind=SectionKind.TYPE, data="0x00000000"), Section(kind=SectionKind.TYPE, data="0x00000000"), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="too_many_type_sections_2", sections=[ Section(kind=SectionKind.TYPE, data="0x00800000"), Section(kind=SectionKind.TYPE, data="0x00800000"), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="empty_type_section_empty_code", sections=[ Section(kind=SectionKind.TYPE), Section.Code(), ], expected_bytecode="ef00 01 01 0000 02 0001 0000 ff 0000 00", validity_error=[ EOFException.ZERO_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], ), Container( name="empty_type_section_with_code", sections=[ Section(kind=SectionKind.TYPE), Section.Code(Op.STOP), ], expected_bytecode="ef00 01 01 0000 02 0001 0001 ff 0000 00 00", validity_error=[ EOFException.ZERO_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], ), Container( name="type_section_too_small_single_code_section_1", sections=[ Section(kind=SectionKind.TYPE, data="0x00"), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="type_section_too_small_single_code_section_2", sections=[ Section(kind=SectionKind.TYPE, data="0x008000"), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="type_section_too_big_single_code_section", sections=[ Section(kind=SectionKind.TYPE, data="0x0080000000"), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="type_section_too_small_multiple_code_sections_1", sections=[ Section(kind=SectionKind.TYPE, data="0x0080000000"), Section.Code(Op.STOP), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="type_section_too_small_multiple_code_sections_2", sections=[ Section(kind=SectionKind.TYPE, data="0x008000000080"), Section.Code(Op.STOP), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="type_section_too_big_multiple_code_sections", sections=[ Section(kind=SectionKind.TYPE, data="0x008000000080000000"), Section.Code(Op.STOP), Section.Code(Op.STOP), ], auto_type_section=AutoSection.NONE, validity_error=EOFException.INVALID_TYPE_SECTION_SIZE, ), Container( name="multiple_code_section_non_zero_inputs", sections=[ Section.Code(code=Op.POP + Op.RETF, code_inputs=1), Section.Code(Op.STOP), ], # TODO the actual exception should be # EOFException.INVALID_TYPE_BODY, validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ), Container( name="multiple_code_section_non_zero_outputs", sections=[ Section.Code(code=Op.PUSH0, code_outputs=1), Section.Code(Op.STOP), ], # TODO the actual exception should be # EOFException.INVALID_TYPE_BODY, validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ), Container( name="data_section_before_code_with_type", sections=[ Section.Data(data="0xAA"), Section.Code(Op.STOP), ], auto_sort_sections=AutoSection.NONE, validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ), Container( name="data_section_listed_in_type", sections=[ Section.Data(data="0x00", force_type_listing=True), Section.Code(Op.STOP), ], validity_error=[ EOFException.INVALID_TYPE_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], ), Container( name="single_code_section_incomplete_type", sections=[ Section(kind=SectionKind.TYPE, data="0x00", custom_size=2), Section.Code(Op.STOP), ], validity_error=[ EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE, ], ), Container( name="code_section_input_too_large", sections=[ Section.Code( code=((Op.PUSH0 * (MAX_CODE_INPUTS + 1)) + Op.CALLF[1] + Op.STOP), max_stack_height=(MAX_CODE_INPUTS + 1), ), Section.Code( code=(Op.POP * (MAX_CODE_INPUTS + 1)) + Op.RETF, code_inputs=(MAX_CODE_INPUTS + 1), code_outputs=0, max_stack_height=(MAX_CODE_INPUTS + 1), ), ], validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT, ), Container( name="invalid_inputs_to_non_returning_code_section_2", sections=[ Section.Code( code=Op.PUSH1(0) * 128 + Op.CALLF[1] + Op.STOP, max_stack_height=128, ), Section.Code( Op.STOP, code_inputs=128, code_outputs=0, max_stack_height=128, ), ], validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT, ), Container( name="code_section_output_too_large", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), max_stack_height=(MAX_CODE_OUTPUTS + 2), ), Section.Code( code=(Op.PUSH0 * (MAX_CODE_OUTPUTS + 2)) + Op.RETF, code_inputs=0, code_outputs=(MAX_CODE_OUTPUTS + 2), max_stack_height=(MAX_CODE_OUTPUTS + 2), ), ], validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT, ), Container( name="single_code_section_max_stack_size_too_large", sections=[ Section.Code( code=Op.CALLER * 1024 + Op.POP * 1024 + Op.STOP, max_stack_height=1024, ), ], # TODO auto types section generation probably failed, the exception # must be about code validity_error=EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT, ), ], ids=lambda c: c.name, ) def test_invalid_containers( eof_test: EOFTestFiller, container: Container, ) -> None: """Test invalid containers.""" assert container.validity_error is not None, "Invalid container without validity error" eof_test( container=container, expect_exception=container.validity_error, ) @pytest.mark.parametrize( "magic", set(itertools.product([0, 1, 0x60, 0xEE, 0xEF, 0xF0, 0xFF], [0, 1, 2, 0xFE, 0xFF])) - {(0xEF, 0)}, ) def test_magic_validation( eof_test: EOFTestFiller, magic: tuple[int, int], ) -> None: """Verify EOF container 2-byte magic.""" code = bytearray(bytes(VALID_CONTAINER)) code[0:2] = magic eof_test( container=Container(raw_bytes=bytes(code)), expect_exception=EOFException.INVALID_MAGIC, ) @pytest.mark.parametrize("version", [0, 2, 0xEF, 0xFE, 0xFF]) def test_version_validation( eof_test: EOFTestFiller, version: int, ) -> None: """Verify EOF container version.""" code = bytearray(bytes(VALID_CONTAINER)) code[2] = version eof_test( container=Container(raw_bytes=bytes(code)), expect_exception=EOFException.INVALID_VERSION, ) @pytest.mark.parametrize("plus_data", [False, True]) @pytest.mark.parametrize("plus_container", [False, True]) def test_single_code_section( eof_test: EOFTestFiller, plus_data: bool, plus_container: bool, ) -> None: """Verify EOF container single code section.""" sections = [Section.Code(Op.RETURNCODE[0](0, 0) if plus_container else Op.STOP)] if plus_container: sections.append( Section.Container( container=Container( sections=[ Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP) for i in range(MAX_CODE_SECTIONS) ], ) ) ) if plus_data: sections.append(Section.Data(data=b"\0")) eof_test( container=Container( name="single_code_section", sections=sections, kind=ContainerKind.INITCODE if plus_container else ContainerKind.RUNTIME, ), ) @pytest.mark.parametrize("plus_data", [False, True]) @pytest.mark.parametrize("plus_container", [False, True]) def test_max_code_sections( eof_test: EOFTestFiller, plus_data: bool, plus_container: bool, ) -> None: """Verify EOF container maximum number of code sections.""" if plus_container: sections = [ Section.Code( Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.RETURNCODE[0](0, 0) ) for i in range(MAX_CODE_SECTIONS) ] sections.append( Section.Container( container=Container( sections=[ Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP) for i in range(MAX_CODE_SECTIONS) ], ) ) ) else: sections = [ Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP) for i in range(MAX_CODE_SECTIONS) ] if plus_data: sections.append(Section.Data(data=b"\0")) eof_test( container=Container( name="max_code_sections", sections=sections, kind=ContainerKind.INITCODE if plus_container else ContainerKind.RUNTIME, ), ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py ================================================ """EOF Classes example use.""" import pytest from ethereum_test_tools import Bytecode, EOFException, EOFTestFiller from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import AutoSection, Container, Section from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_eof_example(eof_test: EOFTestFiller) -> None: """Example of python EOF classes.""" # Lets construct an EOF container code eof_code = Container( name="valid_container_example", sections=[ # TYPES section is constructed automatically based on CODE # CODE section Section.Code( code=Op.CALLF[1](Op.PUSH0) + Op.STOP, # bytecode to be # deployed in the body # Code: call section 1 with a single zero as input, then stop. max_stack_increase=1, # define code header (in body) stack # size ), # There can be multiple code sections Section.Code( # Remove input and call section 2 with no inputs, then remove # output and return code=Op.POP + Op.CALLF[2]() + Op.POP + Op.RETF, code_inputs=1, code_outputs=0, max_stack_increase=0, ), Section.Code( # Call section 3 with two inputs (address twice), return code=Op.CALLF[3](Op.DUP1, Op.ADDRESS) + Op.POP + Op.POP + Op.RETF, code_outputs=1, max_stack_increase=3, ), Section.Code( # Duplicate one input and return code=Op.DUP1 + Op.RETF, code_inputs=2, code_outputs=3, max_stack_increase=1, ), # DATA section Section.Data("0xef"), ], expected_bytecode="ef00010100100200040005000600080002ff000100" "00800001 01000000 00010003 02030001" "5fe300010050e3000250e43080e300035050e480e4ef", ) eof_test( container=eof_code, expect_exception=eof_code.validity_error, ) def test_eof_example_custom_fields(eof_test: EOFTestFiller) -> None: """Example of python EOF container class tuning.""" # if you need to overwrite certain structure bytes, you can use # customization. this is useful for unit testing the eof structure format, # you can reorganize sections and overwrite the header bytes for testing # purposes. most of the combinations are covered by the unit tests # This features are subject for development and will change in the future eof_code = Container( name="valid_container_example_2", magic=b"\xef\x00", # magic can be overwritten for test purposes, # (default is 0xEF00) version=b"\x01", # version can be overwritten for testing purposes # (default is 0x01) header_terminator=b"\x00", # terminator byte can be overwritten # (default is 0x00) extra=b"", # extra bytes to be trailed after the container body bytes # (default is None) sections=[ # TYPES section is constructed automatically based on CODE # CODE section Section.Code( code=Op.PUSH1(2) + Op.STOP, # this is the actual bytecode to be deployed in the # body max_stack_height=1, # define code header (in body) stack size ), # DATA section Section.Data( data="0xef", # custom_size overrides the size bytes, so you can put only 1 # byte into data but still make the header size of 2 to produce # invalid section # # if custom_size != len(data), the section will be invalid custom_size=1, ), ], # auto generate types section based on provided code sections # AutoSection.ONLY_BODY - means the section will be generated only for # the body bytes # # AutoSection.ONLY_BODY - means the section will be generated only for # the header bytes auto_type_section=AutoSection.AUTO, # auto generate default data section (0x empty), by default is True auto_data_section=True, # auto sort section by order 01 02 03 04 # AutoSection.ONLY_BODY - means the sorting will be done only for the # body bytes # AutoSection.ONLY_BODY - means the section will be done only for the # header bytes auto_sort_sections=AutoSection.AUTO, ) eof_test( container=eof_code, expect_exception=eof_code.validity_error, ) @pytest.mark.parametrize( "data_section_bytes", (b"\x01", b"\xef"), ) @pytest.mark.parametrize( "code_section_code, exception", [(Op.PUSH1(10) + Op.STOP, None), (Op.PUSH1(14), EOFException.MISSING_STOP_OPCODE)], ) def test_eof_example_parameters( eof_test: EOFTestFiller, data_section_bytes: bytes, code_section_code: Bytecode, exception: EOFException, ) -> None: """Example of EOF example parameters.""" eof_code = Container( name="parametrized_eof_example", sections=[ Section.Code( code=code_section_code, max_stack_height=1, ), Section.Data(data_section_bytes), ], validity_error=exception, ) eof_test( container=eof_code, expect_exception=eof_code.validity_error, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_execution.py ================================================ """Execution of basic EOF containers.""" import pytest from ethereum_test_base_types import Storage from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) EXPECTED_STORAGE = (bytes.fromhex("EF"), bytes.fromhex("BADDCAFE")) """Expected storage (key => value) to be produced by the EOF containers""" @pytest.mark.parametrize( "container", ( Container( name="store_from_push", sections=[Section.Code(Op.SSTORE(*EXPECTED_STORAGE) + Op.STOP)], ), Container( name="store_with_data", sections=[ Section.Code(Op.SSTORE(Op.DATALOADN[0], Op.DATALOADN[32]) + Op.STOP), Section.Data( EXPECTED_STORAGE[0].rjust(32, b"\x00") + EXPECTED_STORAGE[1].rjust(32, b"\x00") ), ], ), ), ids=lambda x: x.name, ) def test_eof_execution( state_test: StateTestFiller, pre: Alloc, container: Container, ) -> None: """Test simple contracts that are expected to succeed on call.""" env = Environment() storage = Storage() sender = pre.fund_eoa() container_address = pre.deploy_contract(container) caller_contract = Op.SSTORE( storage.store_next(1), Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0) ) caller_address = pre.deploy_contract(caller_contract) tx = Transaction( to=caller_address, gas_limit=1_000_000, gas_price=10, protected=False, sender=sender, ) post = { caller_address: Account(storage=storage), container_address: Account(storage=dict([EXPECTED_STORAGE])), } state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py ================================================ """Execution of CALLF, RETF opcodes within EOF V1 containers tests.""" from typing import List import pytest from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_CODE_SECTIONS, MAX_RETURN_STACK_HEIGHT from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4750.md" REFERENCE_SPEC_VERSION = "90f716078d0b08ce508a1e57803f885cc2f2e15e" # List all containers used within execution tests, since they will need to be # valid EOF V1 containers too pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) contract_call_within_deep_nested_callf = Container( name="contract_call_within_deep_nested_callf", sections=[ Section.Code( code=Op.CALLF[1] + Op.SSTORE(0, 1) + Op.STOP, ) ] + [ # All sections call next section and on return, store a 1 # to their call stack height key Section.Code( code=(Op.CALLF[i] + Op.SSTORE(i - 1, 1) + Op.RETF), code_inputs=0, code_outputs=0, ) for i in range(2, MAX_CODE_SECTIONS) ] + [ # Last section makes external contract call Section.Code( code=( Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH2(0x200) + Op.EXTCALL + Op.ISZERO + Op.PUSH2(MAX_CODE_SECTIONS - 1) + Op.SSTORE + Op.RETF ), code_inputs=0, code_outputs=0, ) ], ) recursive_contract_call_within_deep_nested_callf = Container( name="recursive_contract_call_within_deep_nested_callf", sections=[ # All sections call next section and on return, store a 1 # to their call stack height key Section.Code( code=Op.CALLF[i + 1] + Op.SSTORE(i, 1) + Op.STOP, ) for i in range(MAX_CODE_SECTIONS - 1) ] + [ # Last section makes external contract call Section.Code( code=( Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH2(0x200) + Op.GAS + Op.CALL + Op.PUSH2(MAX_CODE_SECTIONS - 1) + Op.SSTORE + Op.RETF ), code_inputs=0, code_outputs=0, ) ], ) CALL_SUCCEED_CONTRACTS: List[Container] = [ Container( name="function_finishes_contract_execution", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), ), Section.Code( code=(Op.RETF), code_inputs=0, code_outputs=0, ), ], ), Container( name="max_recursive_callf", sections=[ Section.Code( code=(Op.PUSH1(1) + Op.CALLF[1] + Op.STOP), ), Section.Code( code=( Op.DUP1 + Op.PUSH2(MAX_RETURN_STACK_HEIGHT) + Op.SUB + Op.RJUMPI[len(Op.POP) + len(Op.RETF)] + Op.POP + Op.RETF + Op.PUSH1(1) + Op.ADD + Op.CALLF[1] + Op.RETF ), code_inputs=1, code_outputs=0, max_stack_height=3, ), ], ), Container( name="max_recursive_callf_sstore", sections=[ Section.Code( code=Op.SSTORE(0, 1) + Op.CALLF[1] + Op.STOP, max_stack_height=2, ), Section.Code( code=( Op.PUSH0 + Op.SLOAD + Op.DUP1 + Op.PUSH2(MAX_RETURN_STACK_HEIGHT) + Op.SUB + Op.RJUMPI[len(Op.POP) + len(Op.STOP)] + Op.POP + Op.RETF + Op.PUSH1(1) + Op.ADD + Op.PUSH0 + Op.SSTORE + Op.CALLF[1] + Op.RETF ), code_inputs=0, code_outputs=0, max_stack_height=3, ), ], ), Container( name="max_recursive_callf_memory", sections=[ Section.Code( code=(Op.PUSH1(1) + Op.PUSH0 + Op.MSTORE + Op.CALLF[1] + Op.STOP), ), Section.Code( code=( Op.PUSH0 + Op.MLOAD + Op.DUP1 + Op.PUSH2(MAX_RETURN_STACK_HEIGHT) + Op.SUB + Op.RJUMPI[len(Op.POP) + len(Op.RETF)] + Op.POP + Op.RETF + Op.PUSH1(1) + Op.ADD + Op.PUSH0 + Op.MSTORE + Op.CALLF[1] + Op.RETF ), code_inputs=0, code_outputs=0, max_stack_height=3, ), ], ), ] """ List of all EOF V1 Containers that simply need to succeed on execution. """ CALL_FAIL_CONTRACTS: List[Container] = [ Container( name="invalid_opcode", sections=[ Section.Code( code=(Op.INVALID), ), ], ), Container( name="overflow_recursive_callf", sections=[ Section.Code( code=(Op.PUSH1(1) + Op.CALLF[1] + Op.STOP), ), Section.Code( code=( Op.DUP1 + Op.PUSH2(MAX_RETURN_STACK_HEIGHT + 1) + Op.SUB + Op.RJUMPI[len(Op.POP) + len(Op.RETF)] + Op.POP + Op.RETF + Op.PUSH1(1) + Op.ADD + Op.CALLF[1] + Op.RETF ), code_inputs=1, code_outputs=0, max_stack_height=3, ), ], ), Container( name="overflow_recursive_callf_sstore", sections=[ Section.Code( code=Op.SSTORE(0, 1) + Op.CALLF[1] + Op.STOP, max_stack_height=2, ), Section.Code( code=( Op.PUSH0 + Op.SLOAD + Op.DUP1 + Op.PUSH2(MAX_RETURN_STACK_HEIGHT + 1) + Op.SUB + Op.RJUMPI[len(Op.POP) + len(Op.RETF)] + Op.POP + Op.RETF + Op.PUSH1(1) + Op.ADD + Op.PUSH0 + Op.SSTORE + Op.CALLF[1] + Op.RETF ), code_inputs=0, code_outputs=0, max_stack_height=3, ), ], ), Container( name="overflow_recursive_callf_memory", sections=[ Section.Code( code=Op.MSTORE(0, 1) + Op.CALLF[1] + Op.STOP, max_stack_height=2, ), Section.Code( code=( Op.PUSH0 + Op.MLOAD + Op.DUP1 + Op.PUSH2(MAX_RETURN_STACK_HEIGHT + 1) + Op.SUB + Op.RJUMPI[len(Op.POP) + len(Op.RETF)] + Op.POP + Op.RETF + Op.PUSH1(1) + Op.ADD + Op.PUSH0 + Op.MSTORE + Op.CALLF[1] + Op.RETF ), code_inputs=0, code_outputs=0, max_stack_height=3, ), ], ), ] """ List of all EOF V1 Containers that simply need to fail (exceptional halt) on execution. These contracts have a valid EOF V1 container format but fail when executed. """ VALID: List[Container] = CALL_SUCCEED_CONTRACTS + CALL_FAIL_CONTRACTS """ List of all EOF V1 Containers used during execution tests. """ @pytest.mark.parametrize("container", CALL_SUCCEED_CONTRACTS, ids=lambda x: x.name) def test_eof_functions_contract_call_succeed( state_test: StateTestFiller, pre: Alloc, container: Container, ) -> None: """Test simple contracts that are simply expected to succeed on call.""" env = Environment() sender = pre.fund_eoa() container_address = pre.deploy_contract(container) caller_contract = Op.SSTORE(0, Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0)) + Op.STOP() caller_address = pre.deploy_contract(caller_contract) tx = Transaction( to=caller_address, gas_limit=50000000, gas_price=10, protected=False, data="", sender=sender, ) post = {caller_address: Account(storage={0: 1})} state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize("container", CALL_FAIL_CONTRACTS, ids=lambda x: x.name) def test_eof_functions_contract_call_fail( state_test: StateTestFiller, pre: Alloc, container: Container, ) -> None: """Test simple contracts that are simply expected to fail on call.""" env = Environment() sender = pre.fund_eoa() container_address = pre.deploy_contract(container) caller_contract = Op.SSTORE(Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0), 1) + Op.STOP() caller_address = pre.deploy_contract(caller_contract) tx = Transaction( to=caller_address, gas_limit=50000000, gas_price=10, protected=False, data="", sender=sender, ) post = {caller_address: Account(storage={0: 1})} state_test( env=env, pre=pre, post=post, tx=tx, ) def test_eof_functions_contract_call_within_deep_nested( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Test performing a call within a nested callf and verify correct behavior of return stack in calling contract. TODO: This test belongs in EIP-7069 test folder, not code validation. """ env = Environment() nested_callee_address = pre.deploy_contract(code=Op.SSTORE(0, 1) + Op.STOP()) contract_call_within_deep_nested_callf = Container( name="contract_call_within_deep_nested_callf", sections=[ Section.Code( code=Op.CALLF[1] + Op.SSTORE(0, 1) + Op.STOP, ) ] + [ # All sections call next section and on return, store a 1 # to their call stack height key Section.Code( code=(Op.CALLF[i] + Op.SSTORE(i - 1, 1) + Op.RETF), code_outputs=0, ) for i in range(2, MAX_CODE_SECTIONS) ] + [ # Last section makes external contract call Section.Code( code=( Op.EXTCALL(nested_callee_address, 0, 0, 0) + Op.ISZERO + Op.PUSH2(MAX_CODE_SECTIONS - 1) + Op.SSTORE + Op.RETF ), code_outputs=0, ) ], ) callee_address = pre.deploy_contract(contract_call_within_deep_nested_callf) sender = pre.fund_eoa() tx = Transaction( to=callee_address, gas_limit=50000000, gas_price=10, protected=False, data="", sender=sender, ) post = { callee_address: Account(storage=dict.fromkeys(range(MAX_CODE_SECTIONS), 1)), nested_callee_address: Account( storage={ 0: 1, } ), } state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py ================================================ """test execution semantics changes.""" import pytest from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Storage, Transaction, keccak256, ) from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container from .. import EOF_FORK_NAME pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4750.md" REFERENCE_SPEC_VERSION = "90f716078d0b08ce508a1e57803f885cc2f2e15e" def test_legacy_calls_eof_sstore( state_test: StateTestFiller, pre: Alloc, ) -> None: """Test EXTCODE* opcodes calling EOF and legacy contracts.""" env = Environment() eof_code = Container.Code(Op.RJUMP[0] + Op.STOP) address_eof_contract = pre.deploy_contract(eof_code) legacy_code = Op.PUSH1(2) + Op.JUMPDEST + Op.STOP address_legacy_contract = pre.deploy_contract(legacy_code) storage_test = Storage() test_contract_code = ( Op.SSTORE(storage_test.store_next(4), Op.EXTCODESIZE(address_legacy_contract)) + Op.EXTCODECOPY(address_legacy_contract, 0, 0, Op.EXTCODESIZE(address_legacy_contract)) + Op.SSTORE( storage_test.store_next(bytes(legacy_code).ljust(32, b"\0")), Op.MLOAD(0), ) + Op.SSTORE( storage_test.store_next(legacy_code.keccak256()), Op.EXTCODEHASH(address_legacy_contract), ) + Op.SSTORE(storage_test.store_next(2), Op.EXTCODESIZE(address_eof_contract)) + Op.EXTCODECOPY(address_eof_contract, 0x20, 0, 6) + Op.SSTORE(storage_test.store_next(b"\xef".ljust(32, b"\0")), Op.MLOAD(0x20)) + Op.MSTORE(0x40, b"\xcc" * 32) # clobber memory slot + Op.EXTCODECOPY(address_eof_contract, 0x40, len(eof_code) - 4, 8) # out-of-bounds "read" + Op.SSTORE(storage_test.store_next(b"\xcc" * 24), Op.MLOAD(0x40)) + Op.SSTORE( storage_test.store_next(keccak256(b"\xef\x00")), Op.EXTCODEHASH(address_eof_contract), ) ) address_test_contract = pre.deploy_contract(test_contract_code) sender = pre.fund_eoa() tx = Transaction( sender=sender, to=address_test_contract, gas_limit=50_000_000, gas_price=10, protected=False, data="", ) post = { address_test_contract: Account(storage=storage_test), } state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py ================================================ """ EOF validation tests for EIP-3540 migrated from ethereum/tests/src/EOFTestsFiller/EIP3540/validInvalidFiller.yml. """ import pytest from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container, Section from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "eof_code,exception", [ pytest.param( # Deployed code without data section Container( name="EOF1V3540_0001", sections=[ Section.Code(code=Op.PUSH1[0] + Op.POP + Op.STOP), ], ), None, id="EOF1V3540_0001_deployed_code_without_data_section", ), pytest.param( # Deployed code with data section Container( name="EOF1V3540_0002", sections=[ Section.Code(code=Op.PUSH1[0] + Op.POP + Op.STOP), Section.Data("aabbccdd"), ], ), None, id="EOF1V3540_0002_deployed_code_with_data_section", ), pytest.param( # Empty code section with non-empty data section Container( sections=[Section.Code(code_outputs=0), Section.Data("aabb")], expected_bytecode="ef00010100040200010000ff00020000000000aabb", ), EOFException.ZERO_SECTION_SIZE, id="EOF1I3540_0012_empty_code_section_with_non_empty_data_section", ), pytest.param( # No section terminator after data section size Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff0002")), EOFException.MISSING_HEADERS_TERMINATOR, id="EOF1I3540_0020_no_section_terminator_after_data_section_size", ), pytest.param( # No type section contents Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff000200")), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0021_no_type_section_contents", ), pytest.param( # Type section contents (no outputs and max stack) Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff00020000")), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0022_invalid_type_section_no_outputs_and_max_stack", ), pytest.param( # Type section contents (no max stack) Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff0002000000")), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0023_invalid_type_section_no_max_stack", ), pytest.param( # Type section contents (max stack incomplete) Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff000200000000")), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0024_invalid_type_section_max_stack_incomplete", ), pytest.param( # No code section contents Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff00020000000000")), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0025_no_code_section_contents", ), pytest.param( # Code section contents incomplete Container(raw_bytes=bytes.fromhex("ef00010100040200010029ff000000000000027f")), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0026_code_section_contents_incomplete", ), pytest.param( # Trailing bytes after code section Container( raw_bytes=bytes.fromhex("ef0001 010004 0200010001 ff0000 00 00800000 fe aabbcc") ), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0027_trailing_bytes_after_code_section", ), pytest.param( # Trailing bytes after code section with wrong first section type Container( raw_bytes=bytes.fromhex("ef0001 010004 0200010001 ff0000 00 00000000 fe aabbcc") ), [EOFException.INVALID_FIRST_SECTION_TYPE, EOFException.INVALID_SECTION_BODIES_SIZE], id="EOF1I3540_0027_trailing_bytes_after_code_section_with_wrong_first_section_type", ), pytest.param( # Empty code section Container(raw_bytes=bytes.fromhex("ef00010100040200010000ff00000000000000")), EOFException.ZERO_SECTION_SIZE, id="EOF1I3540_0028_empty_code_section", ), pytest.param( # Code section preceding type section Container(raw_bytes=bytes.fromhex("ef00010200010001010004ff00020000000000feaabb")), [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0030_code_section_preceding_type_section", ), pytest.param( # Data section preceding type section Container(raw_bytes=bytes.fromhex("ef0001ff000201000402000100010000000000feaabb")), [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0031_data_section_preceding_type_section", ), pytest.param( # Data section preceding code section Container(raw_bytes=bytes.fromhex("ef0001010004ff000202000100010000000000feaabb")), [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0032_data_section_preceding_code_section", ), pytest.param( # Data section without code section Container(raw_bytes=bytes.fromhex("ef0001010004ff00020000000000aabb")), [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0033_data_section_without_code_section", ), pytest.param( # No data section Container(raw_bytes=bytes.fromhex("ef000101000402000100010000000000fe")), [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0034_no_data_section", ), pytest.param( # Trailing bytes after data section Container( sections=[ Section.Code(Op.INVALID), Section.Data("aabb"), ], extra="ccdd", expected_bytecode="ef0001 010004 0200010001 ff0002 00 00800000 fe aabbccdd", ), EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1I3540_0035_trailing_bytes_after_data_section", ), pytest.param( # Trailing bytes after data section with wrong first section type Container( raw_bytes=bytes.fromhex("ef0001 010004 0200010001 ff0002 00 00000000 fe aabbccdd") ), [EOFException.INVALID_FIRST_SECTION_TYPE, EOFException.INVALID_SECTION_BODIES_SIZE], id="EOF1I3540_0035_trailing_bytes_after_data_section_with_wrong_first_section_type", ), pytest.param( # Multiple data sections Container( raw_bytes=bytes.fromhex("ef00010100040200010001ff0002ff00020000000000feaabbaabb") ), [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0036_multiple_data_sections", ), pytest.param( # Multiple code and data sections Container( raw_bytes=bytes.fromhex( "ef000101000802000200010001ff0002ff0002000000000000000000fefeaabbaabb" ) ), [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0037_multiple_code_and_data_sections", ), pytest.param( # Unknown section ID (at the beginning) Container(raw_bytes=bytes.fromhex("ef00010400010100040200010001ff00000000000000fe")), [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0038_unknown_section_id_at_the_beginning_05", ), pytest.param( # Unknown section ID (at the beginning) Container(raw_bytes=bytes.fromhex("ef00010500010100040200010001ff00000000000000fe")), [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0039_unknown_section_id_at_the_beginning_06", ), pytest.param( # Unknown section ID (at the beginning) Container(raw_bytes=bytes.fromhex("ef0001fe00010100040200010001ff00000000000000fe")), [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0040_unknown_section_id_at_the_beginning_ff", ), pytest.param( # Unknown section ID (after types section) Container(raw_bytes=bytes.fromhex("ef00010100040400010200010001ff00000000000000fe")), [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0041_unknown_section_id_after_types_section_05", ), pytest.param( # Unknown section ID (after types section) Container(raw_bytes=bytes.fromhex("ef00010100040500010200010001ff00000000000000fe")), [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0042_unknown_section_id_after_types_section_06", ), pytest.param( # Unknown section ID (after types section) Container(raw_bytes=bytes.fromhex("ef0001010004fe00010200010001ff00000000000000fe")), [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0043_unknown_section_id_after_types_section_ff", ), pytest.param( # Unknown section ID (after code section) Container(raw_bytes=bytes.fromhex("ef00010100040200010001050001ff00000000000000fe")), [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0044_unknown_section_id_after_code_section_05", ), pytest.param( # Unknown section ID (after code section) Container(raw_bytes=bytes.fromhex("ef00010100040200010001060001ff00000000000000fe")), [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0045_unknown_section_id_after_code_section_06", ), pytest.param( # Unknown section ID (after code section) Container(raw_bytes=bytes.fromhex("ef00010100040200010001040001ff00000000000000fe")), [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0046_unknown_section_id_after_code_section_04", ), pytest.param( # Unknown section ID (after data section) Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff00000500010000000000fe")), [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0047_unknown_section_id_after_data_section_05", ), pytest.param( # Unknown section ID (after data section) Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff00000600010000000000fe")), [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0048_unknown_section_id_after_data_section_06", ), pytest.param( # Unknown section ID (after data section) Container(raw_bytes=bytes.fromhex("ef00010100040200010001ff00000400010000000000fe")), [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND], id="EOF1I3540_0049_unknown_section_id_after_data_section_04", ), pytest.param( Container( name="EOF1I3540_0002 (Invalid) Invalid magic", raw_bytes="ef01010100040200010001ff00000000000000fe", ), EOFException.INVALID_MAGIC, id="EOF1I3540_0002_invalid_incorrect_magic_01", ), pytest.param( Container( name="EOF1I3540_0003", raw_bytes="ef02010100040200010001ff00000000000000fe", ), EOFException.INVALID_MAGIC, id="EOF1I3540_0003_invalid_incorrect_magic_02", ), pytest.param( Container( name="EOF1I3540_0004", raw_bytes="efff010100040200010001ff00000000000000fe", ), EOFException.INVALID_MAGIC, id="EOF1I3540_0004_invalid_incorrect_magic_ff", ), pytest.param( Container( name="EOF1I3540_0006 (Invalid) Invalid version", raw_bytes="ef00000100040200010001ff00000000000000fe", ), EOFException.INVALID_VERSION, id="EOF1I3540_0006_invalid_incorrect_version_00", ), pytest.param( Container( name="EOF1I3540_0007", raw_bytes="ef00020100040200010001ff00000000000000fe", ), EOFException.INVALID_VERSION, id="EOF1I3540_0007_invalid_incorrect_version_02", ), pytest.param( Container( name="EOF1I3540_0008", raw_bytes="ef00ff0100040200010001ff00000000000000fe", ), EOFException.INVALID_VERSION, id="EOF1I3540_0008_invalid_incorrect_version_ff", ), ], ) def test_migrated_valid_invalid( eof_test: EOFTestFiller, eof_code: Container, exception: EOFExceptionInstanceOrList | None, ) -> None: """Verify EOF container construction and exception.""" eof_test( container=eof_code, expect_exception=exception, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py ================================================ """Tests all EOF-only opcodes in legacy contracts and expects failure.""" import pytest from ethereum_test_base_types import Account from ethereum_test_specs import StateTestFiller from ethereum_test_tools import Initcode from ethereum_test_tools import Opcodes as Op from ethereum_test_types import Alloc, Environment, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7692.md" REFERENCE_SPEC_VERSION = "f0e7661ee0d16e612e0931ec88b4c9f208e9d513" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) slot_code_executed = b"EXEC" slot_code_worked = b"WORK" slot_create_address = b"ADDR" value_code_executed = b"exec" value_code_worked = b"work" value_non_execution_canary = b"brid" value_create_failed = 0 eof_opcode_blocks = [ pytest.param(Op.PUSH0 + Op.DUPN[0], id="DUPN"), pytest.param(Op.PUSH0 + Op.PUSH0 + Op.SWAPN[0], id="SWAPN"), pytest.param(Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.EXCHANGE[2, 3], id="EXCHANGE"), pytest.param(Op.RJUMP[0], id="RJUMP"), pytest.param(Op.PUSH0 + Op.RJUMPI[0], id="RJUMPI"), pytest.param(Op.PUSH0 + Op.RJUMPV[0, 0], id="RJUMPI"), pytest.param(Op.CALLF[1], id="CALLF"), pytest.param(Op.RETF, id="RETF"), pytest.param(Op.JUMPF[0], id="JUMPF"), pytest.param(Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1(2) + Op.EXTCALL, id="EXTCALL"), pytest.param( Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1(2) + Op.EXTDELEGATECALL, id="EXTDELEGATECALL" ), pytest.param( Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1(2) + Op.EXTSTATICCALL, id="EXTSTATICCALL" ), pytest.param(Op.DATALOAD(0), id="DATALOAD"), pytest.param(Op.DATALOADN[0], id="DATALOADN"), pytest.param(Op.DATASIZE, id="DATASIZE"), pytest.param(Op.DATACOPY(0, 0, 32), id="DATACOPY"), pytest.param(Op.EOFCREATE[0](0, 0, 0, 0), id="EOFCREATE"), # pytest.param(Op.TXCREATE(0, 0, 0, 0, 0), id="TXCREATE"), not EOF-only # anymore pytest.param(Op.RETURNCODE[0], id="RETURNCODE"), ] @pytest.mark.parametrize( "code", eof_opcode_blocks, ) def test_opcodes_in_legacy(state_test: StateTestFiller, pre: Alloc, code: Opcodes) -> None: """Test all EOF only opcodes in legacy contracts and expects failure.""" env = Environment() address_test_contract = pre.deploy_contract( code=code + Op.SSTORE(slot_code_executed, value_code_executed), storage={slot_code_executed: value_non_execution_canary}, ) post = { # assert the canary is not over-written. If it was written then the EOF # opcode was valid address_test_contract: Account(storage={slot_code_executed: value_non_execution_canary}), } sender = pre.fund_eoa() tx = Transaction( sender=sender, to=address_test_contract, gas_limit=5_000_000, gas_price=10, protected=False, data="", ) state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "code", eof_opcode_blocks, ) def test_opcodes_in_create_tx(state_test: StateTestFiller, pre: Alloc, code: Opcodes) -> None: """Test all EOF only opcodes in create tx and expects failure.""" env = Environment() sender = pre.fund_eoa() tx = Transaction( sender=sender, to=None, gas_limit=5_000_000, gas_price=10, protected=False, data=code, ) post = { # Should revert in initcode, which results in no contract created tx.created_contract: Account.NONEXISTENT } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "legacy_create_opcode", [ pytest.param(Op.CREATE, id="CREATE"), pytest.param(Op.CREATE2, id="CREATE2"), ], ) @pytest.mark.parametrize( "code", eof_opcode_blocks, ) def test_opcodes_in_create_operation( state_test: StateTestFiller, pre: Alloc, code: Opcodes, legacy_create_opcode: Opcodes, ) -> None: """Test opcodes in create operation.""" env = Environment() init_code = Initcode(initcode_prefix=code, deploy_code=Op.RETURN(0, 0)) factory_code = ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_create_address, legacy_create_opcode(size=Op.CALLDATASIZE)) + Op.SSTORE(slot_code_worked, value_code_worked) ) sender = pre.fund_eoa() contract_address = pre.deploy_contract(code=factory_code) post = { contract_address: Account( storage={slot_create_address: value_create_failed, slot_code_worked: value_code_worked} ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, data=init_code, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( ("ext_call_opcode"), [ pytest.param(Op.EXTCALL, id="EXTCALL"), pytest.param(Op.EXTDELEGATECALL, id="EXTDELEGATECALL"), pytest.param(Op.EXTSTATICCALL, id="EXTSTATICCALL"), ], ) @pytest.mark.parametrize( "code", eof_opcode_blocks, ) def test_opcodes_in_eof_calling_legacy( state_test: StateTestFiller, pre: Alloc, code: Opcodes, ext_call_opcode: Op, ) -> None: """Test all opcodes in eof calling legacy and expects failure.""" env = Environment() address_test_contract = pre.deploy_contract( code=code + Op.SSTORE(slot_code_executed, value_code_executed), storage={slot_code_executed: value_non_execution_canary}, ) address_entry_contract = pre.deploy_contract( code=Container( sections=[ Section.Code( ext_call_opcode(address=address_test_contract) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) ] ), storage={slot_code_executed: value_non_execution_canary}, ) post = { # assert the canary is not over-written. If it was written then the EOF # opcode was valid address_test_contract: Account(storage={slot_code_executed: value_non_execution_canary}), address_entry_contract: Account( storage={ slot_code_executed: value_non_execution_canary, slot_code_worked: value_code_worked, } ), } sender = pre.fund_eoa() tx = Transaction( sender=sender, to=address_entry_contract, gas_limit=5_000_000, gas_price=10, protected=False, data="", ) state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py ================================================ """EOF Container construction test.""" import pytest from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList from ethereum_test_tools import EOFException, EOFTestFiller, extend_with_defaults from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container, Section from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( **extend_with_defaults( defaults={ # second section is mentioned in code header array "skip_header_listing": False, # second section code is in container's body "skip_body_listing": False, # code input bytes not listed in container's body "skip_types_body_listing": False, # code input bytes size not added to types section size "skip_types_header_listing": False, "expected_code": "", "expected_exception": None, }, cases=[ pytest.param( { "skip_header_listing": True, "skip_body_listing": True, "expected_code": "ef00010100080200010003ff0004000080000" "1000000003050000bad60A7", "expected_exception": [ EOFException.INVALID_TYPE_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], }, id="drop_code_section_and_header", ), pytest.param( { "skip_header_listing": True, "skip_body_listing": False, "expected_code": "ef00010100080200010003ff0004000080000" "1000000003050003050000bad60A7", "expected_exception": [ EOFException.INVALID_TYPE_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], }, id="drop_code_header", ), pytest.param( { "skip_header_listing": False, "skip_body_listing": True, "expected_code": "ef000101000802000200030003ff000400008" "00001000000003050000bad60A7", "expected_exception": [ EOFException.UNREACHABLE_CODE_SECTIONS, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, ], }, id="drop_code_section", ), pytest.param( { "skip_header_listing": False, "skip_body_listing": False, "expected_code": "ef000101000802000200030003ff000400008" "00001000000003050003050000bad60A7", "expected_exception": EOFException.UNREACHABLE_CODE_SECTIONS, }, id="layout_ok_code_bad", ), pytest.param( { "skip_header_listing": True, "skip_body_listing": True, "skip_types_body_listing": True, "expected_code": "ef00010100080200010003ff000400008000013050000bad60a7", "expected_exception": [ EOFException.INVALID_TYPE_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE, ], }, id="drop_types_header", ), pytest.param( { "skip_header_listing": True, "skip_body_listing": True, "skip_types_body_listing": True, "skip_types_header_listing": True, "expected_code": "ef00010100040200010003ff000400008000013050000bad60a7", "expected_exception": None, }, id="drop_everything", ), ], ) ) def test_code_section_header_body_mismatch( eof_test: EOFTestFiller, skip_header_listing: bool, skip_body_listing: bool, skip_types_body_listing: bool, skip_types_header_listing: bool, expected_code: str, expected_exception: EOFExceptionInstanceOrList | None, ) -> None: """Inconsistent number of code sections (between types and code).""" eof_code = Container( name="EOF1I0018", sections=[ Section.Code( code=Op.ADDRESS + Op.POP + Op.STOP, ), Section.Code( code=Op.ADDRESS + Op.POP + Op.STOP, code_inputs=0, code_outputs=0, max_stack_height=0, # whether to not mention it in code section header list skip_header_listing=skip_header_listing, # whether to not print its code in containers body skip_body_listing=skip_body_listing, # whether to not print its input bytes in containers body skip_types_body_listing=skip_types_body_listing, # whether to not calculate its input bytes size in types # section's header skip_types_header_listing=skip_types_header_listing, ), Section.Data("0x0bad60A7"), ], ) # TODO remove this after Container class implementation is reliable assert bytes(eof_code).hex() == bytes.fromhex(expected_code).hex() eof_test( container=eof_code, expect_exception=expected_exception, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py ================================================ """Different variations of EOF sections displacement.""" from enum import Enum from typing import List import pytest from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import AutoSection, Container, Section, SectionKind from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) class SectionTest(Enum): """Enum for the test type.""" MISSING = 1 WRONG_ORDER = 2 class CasePosition(Enum): """Enum for the test position.""" BODY = 1 HEADER = 2 BODY_AND_HEADER = 3 def get_expected_code_exception( section_kind: SectionKind, section_test: SectionTest, test_position: CasePosition ) -> tuple[str, EOFExceptionInstanceOrList | None]: """ Verification vectors with code and exception based on test combinations. """ match (section_kind, section_test, test_position): case (SectionKind.TYPE, SectionTest.MISSING, CasePosition.HEADER): return ( "ef00010200010003ff00010000800001305000ef", [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.TYPE, SectionTest.MISSING, CasePosition.BODY): return ( "ef00010100040200010003ff000100305000ef", [ EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_FIRST_SECTION_TYPE, ], ) case (SectionKind.TYPE, SectionTest.MISSING, CasePosition.BODY_AND_HEADER): return ( "ef00010200010003ff000100305000ef", [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.TYPE, SectionTest.WRONG_ORDER, CasePosition.HEADER): return ( "ef00010200010003010004ff00010000800001305000ef", [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.TYPE, SectionTest.WRONG_ORDER, CasePosition.BODY): return ( "ef00010100040200010003ff00010030500000800001ef", # TODO why invalid first section type? it should say that the # body incorrect EOFException.INVALID_FIRST_SECTION_TYPE, ) case (SectionKind.TYPE, SectionTest.WRONG_ORDER, CasePosition.BODY_AND_HEADER): return ( "ef00010200010003010004ff00010030500000800001ef", [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.CODE, SectionTest.MISSING, CasePosition.HEADER): return ( "ef0001010004ff00010000800001305000ef", [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.CODE, SectionTest.MISSING, CasePosition.BODY): return ( "ef00010100040200010003ff00010000800001ef", # TODO should be an exception of empty code bytes, because it # can understand that last byte is data section byte [EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.CODE, SectionTest.MISSING, CasePosition.BODY_AND_HEADER): return ( "ef0001010004ff00010000800001ef", [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.CODE, SectionTest.WRONG_ORDER, CasePosition.HEADER): return ( "ef0001010004ff000102000100030000800001305000ef", [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.CODE, SectionTest.WRONG_ORDER, CasePosition.BODY): return ( "ef00010100040200010003ff00010000800001ef305000", EOFException.UNDEFINED_INSTRUCTION, ) case (SectionKind.CODE, SectionTest.WRONG_ORDER, CasePosition.BODY_AND_HEADER): return ( "ef0001010004ff000102000100030000800001ef305000", [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.DATA, SectionTest.MISSING, CasePosition.HEADER): return ( "ef000101000402000100030000800001305000ef", [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.DATA, SectionTest.MISSING, CasePosition.BODY): return ( "ef00010100040200010003ff00010000800001305000", EOFException.TOPLEVEL_CONTAINER_TRUNCATED, ) case (SectionKind.DATA, SectionTest.MISSING, CasePosition.BODY_AND_HEADER): return ( "ef000101000402000100030000800001305000", [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.DATA, SectionTest.WRONG_ORDER, CasePosition.HEADER): return ( "ef0001ff000101000402000100030000800001305000ef", [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) case (SectionKind.DATA, SectionTest.WRONG_ORDER, CasePosition.BODY): return ( "ef00010100040200010003ff000100ef00800001305000", EOFException.INVALID_FIRST_SECTION_TYPE, ) case (SectionKind.DATA, SectionTest.WRONG_ORDER, CasePosition.BODY_AND_HEADER): return ( "ef0001ff0001010004020001000300ef00800001305000", [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND], ) return "", None @pytest.mark.parametrize("section_kind", [SectionKind.TYPE, SectionKind.CODE, SectionKind.DATA]) @pytest.mark.parametrize("section_test", [SectionTest.MISSING, SectionTest.WRONG_ORDER]) @pytest.mark.parametrize( "test_position", [CasePosition.BODY, CasePosition.HEADER, CasePosition.BODY_AND_HEADER] ) def test_section_order( eof_test: EOFTestFiller, section_kind: SectionKind, section_test: SectionTest, test_position: CasePosition, ) -> None: """Test sections order and it appearance in body and header.""" def calculate_skip_flag(kind: SectionKind, position: CasePosition) -> bool: return ( False if (section_kind != kind) else ( True if section_test == SectionTest.MISSING and (test_position == position or test_position == CasePosition.BODY_AND_HEADER) else False ) ) def make_section_order(kind: SectionKind) -> List[Section]: if section_test != SectionTest.WRONG_ORDER: return [section_type, section_code, section_data] if kind == SectionKind.TYPE: return [section_code, section_type, section_data] if kind == SectionKind.CODE: return [section_type, section_data, section_code] if kind == SectionKind.DATA: return [section_data, section_type, section_code] return [section_type, section_code, section_data] section_code = Section.Code( code=Op.ADDRESS + Op.POP + Op.STOP, skip_header_listing=calculate_skip_flag(SectionKind.CODE, CasePosition.HEADER), skip_body_listing=calculate_skip_flag(SectionKind.CODE, CasePosition.BODY), ) section_type = Section( kind=SectionKind.TYPE, data=bytes.fromhex("00800001"), custom_size=4, skip_header_listing=calculate_skip_flag(SectionKind.TYPE, CasePosition.HEADER), skip_body_listing=calculate_skip_flag(SectionKind.TYPE, CasePosition.BODY), ) section_data = Section.Data( "ef", skip_header_listing=calculate_skip_flag(SectionKind.DATA, CasePosition.HEADER), skip_body_listing=calculate_skip_flag(SectionKind.DATA, CasePosition.BODY), ) expected_code, expected_exception = get_expected_code_exception( section_kind, section_test, test_position ) eof_code = Container( sections=make_section_order(section_kind), auto_type_section=AutoSection.NONE, auto_sort_sections=( AutoSection.AUTO if section_test != SectionTest.WRONG_ORDER else ( AutoSection.ONLY_BODY if test_position == CasePosition.HEADER else ( AutoSection.ONLY_HEADER if test_position == CasePosition.BODY else AutoSection.NONE ) ) ), expected_bytecode=expected_code, ) eof_test( container=eof_code, expect_exception=expected_exception, ) @pytest.mark.parametrize("container_position", range(4)) @pytest.mark.parametrize( "test_position", [CasePosition.BODY, CasePosition.HEADER, CasePosition.BODY_AND_HEADER] ) def test_container_section_order( eof_test: EOFTestFiller, container_position: int, test_position: CasePosition, ) -> None: """ Test containers section being out of order in the header and/or body. This extends and follows the convention of the test_section_order() for the optional container section. """ if container_position == 2: pytest.skip("Skip valid container section position") section_code = Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) # TODO: Migrated tests had the following infinite loop, so it is kept # here to equalize code coverage. + Op.RJUMP[0] + Op.STOP() ) section_type = Section(kind=SectionKind.TYPE, data=bytes.fromhex("00800004")) section_data = Section.Data("ef") section_container = Section.Container(Container.Code(Op.INVALID)) sections = [section_type, section_code, section_data] sections.insert(container_position, section_container) eof_code = Container( sections=sections, auto_type_section=AutoSection.NONE, auto_sort_sections=( AutoSection.ONLY_BODY if test_position == CasePosition.HEADER else ( AutoSection.ONLY_HEADER if test_position == CasePosition.BODY else AutoSection.NONE ) ), ) def get_expected_exception() -> EOFExceptionInstanceOrList | None: match container_position, test_position: case 2, _: return None # Valid containers section position case 0, CasePosition.BODY: # Messes up with the type section return EOFException.INVALID_FIRST_SECTION_TYPE case 1, CasePosition.BODY: # Messes up with the code section return EOFException.UNDEFINED_INSTRUCTION case 3, CasePosition.BODY: # Data section messes up with the # container section return EOFException.INVALID_MAGIC case 0, CasePosition.HEADER | CasePosition.BODY_AND_HEADER: return EOFException.MISSING_TYPE_HEADER case 1, CasePosition.HEADER | CasePosition.BODY_AND_HEADER: return EOFException.MISSING_CODE_HEADER case 3, CasePosition.HEADER | CasePosition.BODY_AND_HEADER: return EOFException.MISSING_TERMINATOR case _: return None eof_test( container=eof_code, expect_exception=get_expected_exception(), ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py ================================================ """EOF Container, test custom_size field for sections.""" from enum import IntEnum import pytest from ethereum_test_exceptions.exceptions import EOFExceptionInstanceOrList from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container, Section, SectionKind from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) class SectionSize(IntEnum): """Enum for the section size.""" NORMAL = -1 ZERO = 0 UNDERSIZE = 2 OVERSIZE = 100 HUGE = 0x8000 MAX = 0xFFFF CONTAINER_BIG = 0x00010000 CONTAINER_MAX = 0xFFFFFFFF def __str__(self) -> str: """Return string representation of the section kind.""" return self.name @pytest.mark.parametrize( "section_kind, section_size, exception", [ pytest.param(SectionKind.DATA, SectionSize.NORMAL, None), pytest.param(SectionKind.DATA, SectionSize.ZERO, EOFException.INVALID_SECTION_BODIES_SIZE), pytest.param( SectionKind.DATA, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param( SectionKind.DATA, SectionSize.OVERSIZE, EOFException.TOPLEVEL_CONTAINER_TRUNCATED ), pytest.param( SectionKind.DATA, SectionSize.HUGE, EOFException.TOPLEVEL_CONTAINER_TRUNCATED ), pytest.param(SectionKind.DATA, SectionSize.MAX, EOFException.TOPLEVEL_CONTAINER_TRUNCATED), pytest.param( SectionKind.CODE, SectionSize.NORMAL, None, marks=pytest.mark.skip(reason="duplicate") ), pytest.param(SectionKind.CODE, SectionSize.ZERO, EOFException.ZERO_SECTION_SIZE), pytest.param( SectionKind.CODE, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param( SectionKind.CODE, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param(SectionKind.CODE, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE), pytest.param(SectionKind.CODE, SectionSize.MAX, EOFException.INVALID_SECTION_BODIES_SIZE), pytest.param( SectionKind.TYPE, SectionSize.NORMAL, None, marks=pytest.mark.skip(reason="duplicate") ), pytest.param( SectionKind.TYPE, SectionSize.ZERO, [EOFException.ZERO_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE], id="type_size_zero", ), pytest.param( SectionKind.TYPE, SectionSize.UNDERSIZE, [EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE], id="type_size_undersize", ), pytest.param( SectionKind.TYPE, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param(SectionKind.TYPE, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE), pytest.param( SectionKind.TYPE, SectionSize.MAX, [EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE], id="type_size_max", ), pytest.param( SectionKind.CONTAINER, SectionSize.NORMAL, None, marks=pytest.mark.skip(reason="duplicate"), ), pytest.param(SectionKind.CONTAINER, SectionSize.ZERO, EOFException.ZERO_SECTION_SIZE), pytest.param( SectionKind.CONTAINER, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param( SectionKind.CONTAINER, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param( SectionKind.CONTAINER, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE ), pytest.param( SectionKind.CONTAINER, SectionSize.CONTAINER_BIG, EOFException.INVALID_SECTION_BODIES_SIZE, ), pytest.param( SectionKind.CONTAINER, SectionSize.CONTAINER_MAX, EOFException.INVALID_SECTION_BODIES_SIZE, ), ], ) def test_section_size( eof_test: EOFTestFiller, section_size: SectionSize, section_kind: SectionKind, exception: EOFExceptionInstanceOrList, ) -> None: """ Test custom_size is auto, more or less than the actual size of the section. """ eof_code = Container() if section_size != SectionSize.NORMAL and section_kind == SectionKind.TYPE: eof_code.sections.append( Section( kind=SectionKind.TYPE, data="0x00800001", custom_size=section_size, ), ) if section_size != SectionSize.NORMAL and section_kind == SectionKind.CODE: eof_code.sections.append( Section.Code( code=Op.ADDRESS + Op.POP + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, custom_size=section_size, ) ) else: eof_code.sections.append( Section.Code( code=Op.ADDRESS + Op.POP + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, ) ) if section_size != SectionSize.NORMAL and section_kind == SectionKind.CONTAINER: eof_code.sections.append( Section.Container( container=Container( sections=[ Section.Code(Op.RETURNCODE[0](0, 0)), Section.Container(container=Container(sections=[Section.Code(Op.STOP)])), ] ), custom_size=section_size, ) ) else: eof_code.sections.append( Section.Container( container=Container( sections=[ Section.Code(Op.RETURNCODE[0](0, 0)), Section.Container(container=Container(sections=[Section.Code(Op.STOP)])), ] ), ) ) if section_size != SectionSize.NORMAL and section_kind == SectionKind.DATA: eof_code.sections.append(Section.Data("0x00daaa", custom_size=section_size)) else: eof_code.sections.append(Section.Data("0x00aaaa")) eof_test( container=eof_code, expect_exception=exception, ) @pytest.mark.parametrize( "truncation_len, exception", [ # The original container is not valid by itself because its 2-byte code # section starts with the terminating instruction: INVALID. pytest.param(0, EOFException.UNREACHABLE_INSTRUCTIONS), pytest.param(1, EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1_truncated_section_2"), pytest.param(3, EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1_truncated_section_1"), pytest.param(6, EOFException.INVALID_SECTION_BODIES_SIZE, id="EOF1_truncated_section_0"), ], ) def test_truncated_container_without_data( eof_test: EOFTestFiller, truncation_len: int, exception: EOFException, ) -> None: """ Test takes a semi-valid container and removes some bytes from its tail. Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases without data section). """ container = Container(sections=[Section.Code(Op.INVALID + Op.INVALID)]) bytecode = bytes(container) eof_test( container=Container(raw_bytes=bytecode[: len(bytecode) - truncation_len]), expect_exception=exception, ) @pytest.mark.parametrize( "truncation_len, exception", [ pytest.param(0, None), pytest.param(1, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, id="EOF1_truncated_section_4"), pytest.param(2, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, id="EOF1_truncated_section_3"), ], ) def test_truncated_container_with_data( eof_test: EOFTestFiller, truncation_len: int, exception: EOFException, ) -> None: """ Test takes a valid container with data and removes some bytes from its tail. Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases with data section). """ data = b"\xaa\xbb" container = Container( sections=[ Section.Code(Op.INVALID), Section.Data(data[0 : (len(data) - truncation_len)], custom_size=2), ] ) eof_test( container=container, expect_exception=exception, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/__init__.py ================================================ """ Test cases for [EIP-4200: EOF - Static relative jumps](https://eips.ethereum.org/EIPS/eip-4200). EIP-4200 replaces dynamic jump instructions with relative jump offsets for improved control flow predictability. Opcodes introduced: `RJUMP` (`0xE0`), `RJUMPI` (`0xE1`), `RJUMPV` (`0xE2`). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/helpers.py ================================================ """EOF RJump tests helpers.""" import itertools from enum import Enum """Storage addresses for common testing fields""" _slot = itertools.count() next(_slot) # don't use slot 0 slot_code_worked = next(_slot) slot_conditional_result = next(_slot) slot_last_slot = next(_slot) """Storage values for common testing fields""" value_code_worked = 0x2015 value_calldata_true = 10 value_calldata_false = 11 class JumpDirection(Enum): """Enum for the direction of the jump.""" FORWARD = 1 BACKWARD = -1 ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py ================================================ """EOF JUMPF tests covering stack and code validation rules.""" import pytest from ethereum_test_tools import Account, EOFException, EOFStateTestFiller, EOFTestFiller from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import JumpDirection, slot_code_worked, value_code_worked REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4200.md" REFERENCE_SPEC_VERSION = "17d4a8d12d2b5e0f2985c866376c16c8c6df7cba" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) RJUMP_LEN = len(Op.RJUMP[0]) def test_rjump_negative( eof_state_test: EOFStateTestFiller, ) -> None: """Test for a forward RJUMPI and backward RJUMP.""" eof_state_test( container=Container.Code( Op.PUSH1[1] + Op.RJUMPI[7] # RJUMP cannot be used because of the backward jump restriction + Op.SSTORE(slot_code_worked, Op.MLOAD(0)) + Op.STOP + Op.MSTORE(0, value_code_worked) + Op.RJUMP[-16] ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjump_positive_negative( eof_state_test: EOFStateTestFiller, ) -> None: """ EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative). """ eof_state_test( container=Container.Code( Op.PUSH0 + Op.RJUMPI[3] + Op.RJUMP[7] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP + Op.RJUMP[-10], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjump_zero( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0002 (Valid) EOF code containing RJUMP (Zero).""" eof_state_test( container=Container.Code( Op.RJUMP[0] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjump_maxes( eof_state_test: EOFStateTestFiller, ) -> None: """ EOF1V4200_0003 EOF with RJUMP containing the max positive and negative offset (32767). """ eof_state_test( container=Container.Code( Op.PUSH0 + Op.RJUMPI[RJUMP_LEN] # The push/jumpi is to allow the NOOPs to be forward referenced + Op.RJUMP[0x7FFF] + Op.NOOP * (0x7FFF - 7) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP + Op.RJUMP[0x8000], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjump_max_bytecode_size( eof_test: EOFTestFiller, ) -> None: """ EOF1V4200_0003 EOF with RJUMP containing the maximum offset that does not exceed the maximum bytecode size. """ noop_count = MAX_BYTECODE_SIZE - 27 code = ( Op.RJUMPI[RJUMP_LEN](Op.ORIGIN) # The jumpi is to allow the NOOPs to be forward referenced + Op.RJUMP[len(Op.NOOP) * noop_count] + (Op.NOOP * noop_count) + Op.STOP ) container = Container.Code(code) assert len(container) == MAX_BYTECODE_SIZE eof_test(container=container) def test_rjump_truncated_rjump( eof_test: EOFTestFiller, ) -> None: """EOF1I4200_0001 (Invalid) EOF code containing truncated RJUMP.""" eof_test( container=Container.Code(Op.RJUMP), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) def test_rjump_truncated_rjump_2( eof_test: EOFTestFiller, ) -> None: """EOF1I4200_0002 (Invalid) EOF code containing truncated RJUMP.""" eof_test( container=Container.Code(Op.RJUMP + b"\x00"), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) @pytest.mark.parametrize("offset", [-5, -13]) def test_rjump_into_header( eof_test: EOFTestFiller, offset: int, ) -> None: """ EOF1I4200_0003 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping into header). """ eof_test( container=Container.Code(Op.RJUMP[offset]), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_before_header( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0004 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping before code begin). """ eof_test( container=Container.Code(Op.RJUMP[-23]), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_data( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0005 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping into data section). """ eof_test( container=Container( sections=[ Section.Code(Op.RJUMP[2]), Section.Data(data=b"\xaa\xbb\xcc"), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_outside_other_section_before( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMP with target outside code bounds (prior code section). """ eof_test( container=Container( sections=[ Section.Code(code=Op.JUMPF[1]), Section.Code(code=Op.RJUMP[-6]), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_outside_other_section_after( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMP with target outside code bounds (Subsequent code section). """ eof_test( container=Container( sections=[ Section.Code(code=Op.JUMPF[1]), Section.Code(code=Op.RJUMP[3] + Op.JUMPF[2]), Section.Code(code=Op.STOP), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_after_container( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0006 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping after code end). """ eof_test( container=Container.Code(Op.RJUMP[2]), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_to_code_end( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0007 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping to code end). """ eof_test( container=Container.Code(Op.RJUMP[1] + Op.STOP), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("offset", range(1, Op.RJUMP.data_portion_length + 1)) def test_rjump_into_self_data_portion( eof_test: EOFTestFiller, offset: int, ) -> None: """ EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP immediate. """ eof_test( container=Container.Code(Op.RJUMP[-offset] + Op.STOP), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_self_remaining_code( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP but remaining unreachable code. """ eof_test( container=Container.Code(Op.RJUMP[-len(Op.RJUMP[0])] + Op.STOP), expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS, ) @pytest.mark.parametrize("stack_height_spread", [-1, 0, 1, 2]) def test_rjump_into_self( eof_test: EOFTestFiller, stack_height_spread: int, ) -> None: """EOF code containing RJUMP with target self RJUMP.""" # Create variadic stack height by the parametrized spread. stack_spread_code = Bytecode() if stack_height_spread >= 0: stack_spread_code = Op.RJUMPI[stack_height_spread](0) + Op.PUSH0 * stack_height_spread eof_test( container=Container.Code(stack_spread_code + Op.RJUMP[-len(Op.RJUMP[0])]), ) def test_rjump_into_self_pre_code( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMP with target self RJUMP with non-zero stack before RJUMP. """ eof_test( container=Container.Code(Op.PUSH1[0] + Op.RJUMP[-len(Op.RJUMP[0])]), ) @pytest.mark.parametrize( "container", [ Container( name="forwards_rjump_0", sections=[ Section.Code( code=Op.RJUMP[0] + Op.STOP, max_stack_increase=0, ), ], expected_bytecode="ef00010100040200010004ff00000000800000e0000000", ), Container( name="forwards_rjump_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[3] + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000bff000000008000025f6000e10003e000011900", ), Container( name="forwards_rjump_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[8] + Op.PUSH1[0] + Op.RJUMPI[6] + Op.RJUMP[4] + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010013ff000000008000025f6000e100086000e10006e00004e000011900", ), Container( name="forwards_rjump_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[3] + Op.RJUMP[1] + Op.PUSH0 + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000bff000000008000025f6000e10003e000015f00", ), Container( name="forwards_rjump_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[8] + Op.PUSH1[0] + Op.RJUMPI[7] + Op.RJUMP[5] + Op.PUSH0 + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010014ff000000008000025f6000e100086000e10007e000055fe000011900", ), Container( name="forwards_rjump_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.RJUMP[0] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000cff000000008000035f6000e100025f5fe0000000", ), Container( name="forwards_rjump_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[3] + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010013ff000000008000055f6000e100025f5f5f6000e10003e000011900", ), Container( name="forwards_rjump_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[8] + Op.PUSH1[0] + Op.RJUMPI[6] + Op.RJUMP[4] + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef0001010004020001001bff000000008000055f6000e100025f5f5f6000e100086000e10006e00004e000011900", ), Container( name="forwards_rjump_variable_stack_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[3] + Op.RJUMP[1] + Op.PUSH0 + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010013ff000000008000055f6000e100025f5f5f6000e10003e000015f00", ), Container( name="forwards_rjump_variable_stack_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[8] + Op.PUSH1[0] + Op.RJUMPI[7] + Op.RJUMP[5] + Op.PUSH0 + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001001bff000000008000045f6000e100025f5f6000e100086000e10007e000055fe000011900", ), ], ids=lambda x: x.name, ) def test_rjump_valid_forward( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a valid code section containing at least one forward RJUMP. These tests exercise the stack height validation. """ eof_test(container=container) @pytest.mark.parametrize( "container", [ Container( name="backwards_rjump_1", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.RJUMP[-5], max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010005ff000000008000015f50e0fffb", ), Container( name="backwards_rjump_2", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[1] + Op.RJUMPI[3] + Op.RJUMP[-8] + Op.RJUMP[-11], max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000dff000000008000015f506001e10003e0fff8e0fff5", ), Container( name="backwards_rjump_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.RJUMP[-3], max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000bff000000008000035f6000e100025f5fe0fffd", ), Container( name="backwards_rjump_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.RJUMP[-5], max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001000dff000000008000045f6000e100025f5f5f50e0fffb", ), Container( name="backwards_rjump_variable_stack_2", sections=[ Section.Code( code=( Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[1] + Op.RJUMPI[3] + Op.RJUMP[-8] + Op.RJUMP[-11] ), max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010015ff000000008000045f6000e100025f5f5f506001e10003e0fff8e0fff5", ), ], ids=lambda x: x.name, ) def test_rjump_valid_backward( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a valid code section containing at least one backward RJUMP. These tests exercise the stack height validation. """ eof_test(container=container) def test_rjump_into_stack_height_diff( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMP with target instruction that causes stack height difference. """ eof_test( container=Container.Code(Op.PUSH1[0] + Op.RJUMP[-(len(Op.RJUMP[0]) + len(Op.PUSH1[0]))]), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_rjump_into_stack_height_diff_2( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMP with target instruction that cause stack height difference. """ eof_test( container=Container.Code( Op.PUSH1[0] + Op.POP + Op.RJUMP[-(len(Op.RJUMP[0]) + len(Op.POP))] ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) @pytest.mark.parametrize( "container", [ Container( name="backwards_rjump_3", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[1] + Op.RJUMPI[3] + Op.RJUMP[-8] + Op.PUSH0 + Op.RJUMP[-12], max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000eff000000008000015f506001e10003e0fff85fe0fff4", ), Container( name="backwards_rjump_4", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMP[-4], max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010004ff000000008000015fe0fffc", ), Container( name="backwards_rjump_5", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.RJUMP[-4], max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010005ff000000008000015f50e0fffc", ), Container( name="backwards_rjump_8", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.PUSH0 + Op.RJUMP[-11], max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000bff000000008000015f506000e1fff95fe0fff5", ), Container( name="backwards_rjump_variable_stack_3", sections=[ Section.Code( code=( Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[1] + Op.RJUMPI[3] + Op.RJUMP[-8] + Op.PUSH0 + Op.RJUMP[-12] ), max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010016ff000000008000045f6000e100025f5f5f506001e10003e0fff85fe0fff4", ), Container( name="backwards_rjump_variable_stack_4", sections=[ Section.Code( code=( Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.RJUMP[-7] ), max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010011ff000000008000045f6000e100025f5f6000e100015fe0fff9", ), Container( name="backwards_rjump_variable_stack_5", sections=[ Section.Code( code=( Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.POP + Op.RJUMP[-7] ), max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010011ff000000008000045f6000e100025f5f6000e1000150e0fff9", ), Container( name="backwards_rjump_variable_stack_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.RJUMP[-4], max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001000cff000000008000045f6000e100025f5f5fe0fffc", ), Container( name="backwards_rjump_variable_stack_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.RJUMP[-4], max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000dff000000008000035f6000e100025f5f5f50e0fffc", ), Container( name="backwards_rjump_variable_stack_8", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.PUSH0 + Op.RJUMP[-11], max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010013ff000000008000045f6000e100025f5f5f506000e1fff95fe0fff5", ), ], ids=lambda x: x.name, ) def test_rjump_backward_invalid_max_stack_height( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a code section containing at least one backward RJUMP invalid because of the incorrect max stack height. """ eof_test(container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH) def test_rjump_into_stack_underflow( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMP with target instruction that cause stack underflow. """ eof_test( container=Container.Code( Op.ORIGIN + Op.RJUMPI[len(Op.RJUMP[0])] + Op.RJUMP[len(Op.STOP)] + Op.STOP + Op.POP + Op.STOP ), expect_exception=EOFException.STACK_UNDERFLOW, ) def test_rjump_into_rjump( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0009 (Invalid) EOF code containing RJUMP with target other RJUMP immediate. """ eof_test( container=Container.Code(Op.RJUMP[1] + Op.RJUMP[0]), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_rjumpi( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0010 (Invalid) EOF code containing RJUMP with target RJUMPI immediate. """ eof_test( container=Container.Code(Op.RJUMP[5] + Op.STOP + Op.PUSH1[1] + Op.RJUMPI[-6] + Op.STOP), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("jump", [JumpDirection.FORWARD, JumpDirection.BACKWARD]) def test_rjump_into_push_1(eof_test: EOFTestFiller, jump: JumpDirection) -> None: """ EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH1 immediate. """ code = ( Op.PUSH1[1] + Op.RJUMP[-4] if jump == JumpDirection.BACKWARD else Op.RJUMP[1] + Op.PUSH1[1] ) + Op.STOP eof_test( container=Container.Code(code), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "opcode", [ Op.PUSH2, Op.PUSH3, Op.PUSH4, Op.PUSH5, Op.PUSH6, Op.PUSH7, Op.PUSH8, Op.PUSH9, Op.PUSH10, Op.PUSH11, Op.PUSH12, Op.PUSH13, Op.PUSH14, Op.PUSH15, Op.PUSH16, Op.PUSH17, Op.PUSH18, Op.PUSH19, Op.PUSH20, Op.PUSH21, Op.PUSH22, Op.PUSH23, Op.PUSH24, Op.PUSH25, Op.PUSH26, Op.PUSH27, Op.PUSH28, Op.PUSH29, Op.PUSH30, Op.PUSH31, Op.PUSH32, ], ) @pytest.mark.parametrize("jump", [JumpDirection.FORWARD, JumpDirection.BACKWARD]) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjump_into_push_n( eof_test: EOFTestFiller, opcode: Op, jump: JumpDirection, data_portion_end: bool, ) -> None: """ EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH2+ immediate. """ data_portion_length = int.from_bytes(opcode, byteorder="big") - 0x5F if jump == JumpDirection.FORWARD: offset = data_portion_length if data_portion_end else 1 code = Op.RJUMP[offset] + opcode[0] + Op.STOP else: offset = -4 if data_portion_end else -4 - data_portion_length + 1 code = opcode[0] + Op.RJUMP[offset] eof_test( container=Container.Code(code), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("target_rjumpv_table_size", [1, 256]) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjump_into_rjumpv( eof_test: EOFTestFiller, target_rjumpv_table_size: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0012 (Invalid) EOF code containing RJUMP with target RJUMPV immediate. """ invalid_destination = 4 + (2 * target_rjumpv_table_size) if data_portion_end else 4 target_jump_table = [0 for _ in range(target_rjumpv_table_size)] eof_test( container=Container.Code( Op.RJUMP[invalid_destination] + Op.STOP + Op.PUSH1[1] + Op.RJUMPV[target_jump_table] + Op.STOP, ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjump_into_callf( eof_test: EOFTestFiller, data_portion_end: bool, ) -> None: """ EOF1I4200_0013 (Invalid) EOF code containing RJUMP with target CALLF immediate. """ invalid_destination = 2 if data_portion_end else 1 eof_test( container=Container( sections=[ Section.Code( code=Op.RJUMP[invalid_destination] + Op.CALLF[1] + Op.STOP, ), Section.Code( code=Op.SSTORE(1, 1) + Op.RETF, code_outputs=0, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_dupn( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMP with target DUPN immediate.""" eof_test( container=Container.Code( Op.PUSH1[1] + Op.PUSH1[1] + Op.RJUMP[1] + Op.DUPN[1] + Op.SSTORE + Op.STOP, ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_swapn( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMP with target SWAPN immediate.""" eof_test( container=Container.Code( Op.PUSH1[1] + Op.PUSH1[1] + Op.RJUMP[1] + Op.SWAPN[1] + Op.SSTORE + Op.STOP, ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_exchange( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMP with target EXCHANGE immediate.""" eof_test( container=Container.Code( Op.PUSH1[1] + Op.PUSH1[2] + Op.PUSH1[3] + Op.RJUMP[1] + Op.EXCHANGE[0x00] + Op.SSTORE + Op.STOP, ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_eofcreate( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMP with target EOFCREATE immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 4 + Op.RJUMP[1] + Op.EOFCREATE[0] + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container( container=Container.Code(code=Op.STOP), ), ] ) ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjump_into_returncode( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMP with target RETURNCODE immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 2 + Op.RJUMP[1] + Op.RETURNCODE[0], ), Section.Container( container=Container.Code(code=Op.STOP), ), ] ) ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "unreachable_op", [Op.STOP, Op.PUSH1[0], Op.PUSH2[0], Op.RJUMP[-3], Op.RJUMP[0], Op.INVALID], ) @pytest.mark.parametrize( "terminating_op", [Op.STOP, Op.RJUMP[-3], Op.INVALID], ) def test_rjump_unreachable_code( eof_test: EOFTestFiller, unreachable_op: Op, terminating_op: Op, ) -> None: """EOF code containing instructions skipped by RJUMP.""" container = Container.Code( code=(Op.RJUMP[len(unreachable_op)] + unreachable_op + terminating_op) ) eof_test( container=container, expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS, ) def test_rjump_backwards_reference_only( eof_test: EOFTestFiller, ) -> None: """EOF code containing instructions only reachable by backwards RJUMP.""" container = Container.Code( code=(Op.RJUMP[RJUMP_LEN] + Op.RJUMP[RJUMP_LEN] + Op.RJUMP[-(2 * RJUMP_LEN)] + Op.STOP) ) eof_test( container=container, expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS, ) def test_rjump_backwards_illegal_stack_height( eof_test: EOFTestFiller, ) -> None: """Invalid backward jump, found via fuzzing coverage.""" eof_test( container=Container.Code( code=( Op.PUSH0 + Op.RJUMPI[3] + Op.RJUMP(7) + Op.PUSH2[0x2015] + Op.PUSH3[0x015500] + Op.RJUMP[-10] ), max_stack_increase=0x24, ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_rjump_backwards_infinite_loop( eof_test: EOFTestFiller, ) -> None: """Validate that a backwards RJUMP as terminal operation is valid.""" eof_test( container=Container( name="backwards_rjump_terminal", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[3] + Op.RJUMP[7] + Op.SSTORE(1, 0x2015) + Op.STOP + Op.RJUMP[-10] ), Section.Data(data="0xdeadbeef"), ], ), ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py ================================================ """EOF JUMPF tests covering stack and code validation rules.""" import pytest from ethereum_test_tools import ( Account, Alloc, Environment, EOFException, EOFStateTestFiller, EOFTestFiller, StateTestFiller, Transaction, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import ( JumpDirection, slot_code_worked, slot_conditional_result, value_calldata_false, value_calldata_true, value_code_worked, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4200.md" REFERENCE_SPEC_VERSION = "17d4a8d12d2b5e0f2985c866376c16c8c6df7cba" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) RJUMP_LEN = len(Op.RJUMP[0]) RJUMPI_LEN = len(Op.RJUMPI[0]) @pytest.mark.parametrize( "calldata", [pytest.param(b"\x00", id="False"), pytest.param(b"\x01", id="True")], ) def test_rjumpi_condition_forwards( state_test: StateTestFiller, pre: Alloc, calldata: bytes, ) -> None: """Test RJUMPI contract switching based on external input (forwards).""" env = Environment() sender = pre.fund_eoa(10**18) contract_address = pre.deploy_contract( code=Container.Code( Op.PUSH1(0) + Op.CALLDATALOAD + Op.RJUMPI[6] + Op.SSTORE(slot_conditional_result, value_calldata_false) + Op.STOP + Op.SSTORE(slot_conditional_result, value_calldata_true) + Op.STOP, ) ) tx = Transaction( to=contract_address, gas_limit=10_000_000, data=calldata, sender=sender, ) post = { contract_address: Account( storage={ slot_conditional_result: value_calldata_false if calldata == b"\0" else value_calldata_true } ) } state_test(env=env, tx=tx, pre=pre, post=post) @pytest.mark.parametrize( "calldata", [pytest.param(b"\x00", id="False"), pytest.param(b"\x01", id="True")], ) def test_rjumpi_condition_backwards( state_test: StateTestFiller, pre: Alloc, calldata: bytes, ) -> None: """Test RJUMPI contract switching based on external input.""" env = Environment() sender = pre.fund_eoa(10**18) contract_address = pre.deploy_contract( code=Container.Code( Op.PUSH1(1) + Op.RJUMPI[6] + Op.SSTORE(slot_conditional_result, value_calldata_true) + Op.STOP + Op.PUSH0 + Op.CALLDATALOAD + Op.RJUMPI[-11] + Op.SSTORE(slot_conditional_result, value_calldata_false) + Op.STOP, ) ) tx = Transaction( to=contract_address, gas_limit=10_000_000, data=calldata, sender=sender, ) post = { contract_address: Account( storage={ slot_conditional_result: value_calldata_false if calldata == b"\0" else value_calldata_true } ) } state_test(env=env, tx=tx, pre=pre, post=post) @pytest.mark.parametrize( "calldata", [pytest.param(b"\x00", id="False"), pytest.param(b"\x01", id="True")], ) def test_rjumpi_condition_zero( state_test: StateTestFiller, pre: Alloc, calldata: bytes, ) -> None: """ Test RJUMPI contract switching based on external input (condition zero). """ env = Environment() sender = pre.fund_eoa(10**18) contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.CALLDATALOAD + Op.RJUMPI[0] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ] ), ) tx = Transaction( to=contract_address, gas_limit=10_000_000, data=calldata, sender=sender, ) post = {contract_address: Account(storage={slot_code_worked: value_code_worked})} state_test(env=env, tx=tx, pre=pre, post=post) def test_rjumpi_forwards( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0004 (Valid) EOF code containing RJUMPI (Positive).""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[3] + Op.NOOP + Op.NOOP + Op.STOP + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpi_backwards( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0005 (Valid) EOF code containing RJUMPI (Negative).""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[7] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP + Op.PUSH1(1) + Op.RJUMPI[-12] + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpi_zero( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0006 (Valid) EOF code containing RJUMPI (Zero).""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[0] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpi_max_forward( eof_state_test: EOFStateTestFiller, ) -> None: """ EOF1V4200_0007 (Valid) EOF with RJUMPI containing the maximum offset (32767). """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[32767] + Op.NOOP * 32768 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpi_max_backward( eof_state_test: EOFStateTestFiller, ) -> None: """EOF with RJUMPI containing the maximum negative offset (-32768).""" ( eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[0x7FFF] + Op.NOOP * (0x7FFF - 7) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP + Op.PUSH0 + Op.RJUMPI[0x8000] + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ), ) @pytest.mark.parametrize( "container", [ Container( name="forwards_rjumpi_0", sections=[ Section.Code( code=Op.PUSH1[1] + Op.RJUMPI[0] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010006ff000000008000016001e1000000", ), Container( name="forwards_rjumpi_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010008ff000000008000025f6000e100011900", ), Container( name="forwards_rjumpi_10", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.POP + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000cff000000008000025f6000e1000450e000011900", ), Container( name="forwards_rjumpi_11", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[3] + Op.RJUMP[0] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000aff000000008000025f6000e10003e0000000", ), Container( name="forwards_rjumpi_12", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.PUSH0 + Op.RJUMP[0] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000bff000000008000025f6000e100045fe0000000", ), Container( name="forwards_rjumpi_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[6] + Op.PUSH1[0] + Op.RJUMPI[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000dff000000008000025f6000e100066000e100011900", ), Container( name="forwards_rjumpi_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010008ff000000008000025f6000e100015f00", ), Container( name="forwards_rjumpi_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[7] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.NOT + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000eff000000008000035f6000e100075f6000e100011900", ), Container( name="forwards_rjumpi_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.PUSH1[10] + Op.GT + Op.RJUMPI[4] + Op.DUP1 + Op.RJUMPI[-14] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef00010100040200010010ff000000008000035f60010180600a11e1000480e1fff200", ), Container( name="forwards_rjumpi_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.PUSH1[10] + Op.GT + Op.RJUMPI[5] + Op.PUSH0 + Op.DUP1 + Op.RJUMPI[-13] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef00010100040200010011ff000000008000035f60010180600a11e100055f80e1fff300", ), Container( name="forwards_rjumpi_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.PUSH0 + Op.RJUMP[1] + Op.PUSH0 + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000cff000000008000025f6000e100045fe000015f00", ), Container( name="forwards_rjumpi_8", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.PUSH0 + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000cff000000008000025f6000e100045fe000011900", ), Container( name="forwards_rjumpi_9", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.POP + Op.RJUMP[1] + Op.POP + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000cff000000008000025f6000e1000450e000015000", ), Container( name="forwards_rjumpi_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[1] + Op.RJUMPI[0] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001000eff000000008000045f6000e100025f5f6001e1000000", ), Container( name="forwards_rjumpi_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010010ff000000008000055f6000e100025f5f5f6000e100011900", ), Container( name="forwards_rjumpi_variable_stack_10", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.POP + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010014ff000000008000055f6000e100025f5f5f6000e1000450e000011900", ), Container( name="forwards_rjumpi_variable_stack_11", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[3] + Op.RJUMP[0] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010012ff000000008000055f6000e100025f5f5f6000e10003e0000000", ), Container( name="forwards_rjumpi_variable_stack_12", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.PUSH0 + Op.RJUMP[0] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010013ff000000008000055f6000e100025f5f5f6000e100045fe0000000", ), Container( name="forwards_rjumpi_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[6] + Op.PUSH1[0] + Op.RJUMPI[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010015ff000000008000055f6000e100025f5f5f6000e100066000e100011900", ), Container( name="forwards_rjumpi_variable_stack_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010010ff000000008000055f6000e100025f5f5f6000e100015f00", ), Container( name="forwards_rjumpi_variable_stack_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[7] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.NOT + Op.STOP, max_stack_increase=6, ), ], expected_bytecode="ef00010100040200010016ff000000008000065f6000e100025f5f5f6000e100075f6000e100011900", ), Container( name="forwards_rjumpi_variable_stack_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.PUSH1[10] + Op.GT + Op.RJUMPI[4] + Op.DUP1 + Op.RJUMPI[-14] + Op.STOP, max_stack_increase=6, ), ], expected_bytecode="ef00010100040200010018ff000000008000065f6000e100025f5f5f60010180600a11e1000480e1fff200", ), Container( name="forwards_rjumpi_variable_stack_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.PUSH1[10] + Op.GT + Op.RJUMPI[5] + Op.PUSH0 + Op.DUP1 + Op.RJUMPI[-13] + Op.STOP, max_stack_increase=6, ), ], expected_bytecode="ef00010100040200010019ff000000008000065f6000e100025f5f5f60010180600a11e100055f80e1fff300", ), Container( name="forwards_rjumpi_variable_stack_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.PUSH0 + Op.RJUMP[1] + Op.PUSH0 + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010014ff000000008000055f6000e100025f5f5f6000e100045fe000015f00", ), Container( name="forwards_rjumpi_variable_stack_8", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.PUSH0 + Op.RJUMP[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010014ff000000008000055f6000e100025f5f5f6000e100045fe000011900", ), Container( name="forwards_rjumpi_variable_stack_9", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[4] + Op.POP + Op.RJUMP[1] + Op.POP + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010014ff000000008000055f6000e100025f5f5f6000e1000450e000015000", ), ], ids=lambda x: x.name, ) def test_rjumpi_valid_forward( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a valid code section containing at least one forward RJUMPI. These tests exercise the stack height validation. """ eof_test(container=container) @pytest.mark.parametrize( "container", [ Container( name="backwards_rjumpi_0", sections=[ Section.Code( code=Op.PUSH1[0] + Op.RJUMPI[-5] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010006ff000000008000016000e1fffb00", ), Container( name="backwards_rjumpi_1", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010008ff000000008000015f506000e1fff900", ), Container( name="backwards_rjumpi_2", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.PUSH1[0] + Op.RJUMPI[-12] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000dff000000008000015f506000e1fff96000e1fff400", ), Container( name="backwards_rjumpi_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.RJUMPI[-7] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010009ff00000000800002 5f60010180e1fff900", ), Container( name="backwards_rjumpi_7", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.RJUMP[-10], max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000aff000000008000015f506000e1fff9e0fff6", ), Container( name="backwards_rjumpi_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[-5] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001000eff000000008000045f6000e100025f5f6000e1fffb00", ), Container( name="backwards_rjumpi_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010010ff000000008000045f6000e100025f5f5f506000e1fff900", ), Container( name="backwards_rjumpi_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.PUSH1[0] + Op.RJUMPI[-12] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010015ff000000008000045f6000e100025f5f5f506000e1fff96000e1fff400", ), Container( name="backwards_rjumpi_variable_stack_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.RJUMPI[-7] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010011ff000000008000055f6000e100025f5f5f60010180e1fff900", ), Container( name="backwards_rjumpi_variable_stack_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.RJUMP[-10], max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010012ff000000008000045f6000e100025f5f5f506000e1fff9e0fff6", ), ], ids=lambda x: x.name, ) def test_rjumpi_valid_backward( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a valid code section containing at least one backward RJUMPI. These tests exercise the stack height validation. """ eof_test(container=container) def test_rjumpi_max_bytecode_size( eof_test: EOFTestFiller, ) -> None: """ EOF1V4200_0003 EOF with RJUMPI containing the maximum offset that does not exceed the maximum bytecode size. """ noop_count = MAX_BYTECODE_SIZE - 24 code = Op.RJUMPI[len(Op.NOOP) * noop_count](Op.ORIGIN) + (Op.NOOP * noop_count) + Op.STOP container = Container.Code(code=code) assert len(container) == MAX_BYTECODE_SIZE eof_test(container=container) def test_rjumpi_truncated( eof_test: EOFTestFiller, ) -> None: """EOF1I4200_0014 (Invalid) EOF code containing truncated RJUMPI.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPI, ) ], ), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) def test_rjumpi_truncated_2( eof_test: EOFTestFiller, ) -> None: """EOF1I4200_0015 (Invalid) EOF code containing truncated RJUMPI.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPI + b"\x00", ) ], ), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) @pytest.mark.parametrize("offset", [-7, -15]) def test_rjumpi_into_header( eof_test: EOFTestFiller, offset: int, ) -> None: """ EOF1I4200_0016 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping into header). """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[offset] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_jump_before_header( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0017 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to before code begin). """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[-25] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_data( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0018 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping into data section). """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[2] + Op.STOP, ), Section.Data(data=b"\xaa\xbb\xcc"), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_after_container( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0019 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to after code end). """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[2] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_to_code_end( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0020 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to code end). """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[1] + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("offset", range(1, Op.RJUMP.data_portion_length + 1)) def test_rjumpi_into_self_data_portion( eof_test: EOFTestFiller, offset: int, ) -> None: """ EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate (with offset). """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[-offset] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("stack_height_spread", [-1, 0, 1, 2]) def test_rjumpi_into_self( eof_test: EOFTestFiller, stack_height_spread: int, ) -> None: """ EOF code containing RJUMPI targeting itself (-3). This can never be valid because this is backward jump and RJUMPI consumes one stack item. """ # Create variadic stack height by the parametrized spread. stack_spread_code = Bytecode() if stack_height_spread >= 0: stack_spread_code = Op.RJUMPI[stack_height_spread](0) + Op.PUSH0 * stack_height_spread eof_test( container=Container( sections=[ Section.Code( code=stack_spread_code + Op.RJUMPI[-len(Op.RJUMPI[0])](0) + Op.STOP, ) ], ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_rjumpi_into_stack_height_diff( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMPI with target instruction that causes stack height difference. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPI[-(len(Op.RJUMPI[0]) + len(Op.PUSH1(0)) + len(Op.PUSH1(0)))] + Op.STOP, ), ], ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_rjumpi_into_stack_underflow( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMPI with target instruction that cause stack underflow. """ eof_test( container=Container( sections=[ Section.Code( code=Op.ORIGIN + Op.RJUMPI[len(Op.STOP)] + Op.STOP + Op.POP + Op.STOP ), ], ), expect_exception=EOFException.STACK_UNDERFLOW, ) def test_rjumpi_skips_stack_underflow( eof_test: EOFTestFiller, ) -> None: """ EOF code containing RJUMPI where the default path produces a stack underflow. """ eof_test( container=Container( sections=[ Section.Code(code=Op.ORIGIN + Op.RJUMPI[len(Op.POP)] + Op.POP + Op.STOP), ], ), expect_exception=EOFException.STACK_UNDERFLOW, ) def test_rjumpi_into_rjump( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0023 (Invalid) EOF code containing RJUMPI with target RJUMP immediate. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[3] + Op.STOP + Op.RJUMP[-9], ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_rjumpi( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0022 (Invalid) EOF code containing RJUMPI with target other RJUMPI immediate. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[5] + Op.STOP + Op.PUSH1(1) + Op.RJUMPI[-11] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("jump", [JumpDirection.FORWARD, JumpDirection.BACKWARD]) def test_rjumpi_into_push_1( eof_test: EOFTestFiller, jump: JumpDirection, ) -> None: """ EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH1 immediate. """ code = ( Op.PUSH1[1] + Op.RJUMPI[-4] if jump == JumpDirection.BACKWARD else Op.PUSH1[1] + Op.RJUMPI[1] + Op.PUSH1[1] + Op.POP ) + Op.STOP eof_test( container=Container( sections=[ Section.Code(code=code), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "opcode", [ Op.PUSH2, Op.PUSH3, Op.PUSH4, Op.PUSH5, Op.PUSH6, Op.PUSH7, Op.PUSH8, Op.PUSH9, Op.PUSH10, Op.PUSH11, Op.PUSH12, Op.PUSH13, Op.PUSH14, Op.PUSH15, Op.PUSH16, Op.PUSH17, Op.PUSH18, Op.PUSH19, Op.PUSH20, Op.PUSH21, Op.PUSH22, Op.PUSH23, Op.PUSH24, Op.PUSH25, Op.PUSH26, Op.PUSH27, Op.PUSH28, Op.PUSH29, Op.PUSH30, Op.PUSH31, Op.PUSH32, ], ) @pytest.mark.parametrize("jump", [JumpDirection.FORWARD, JumpDirection.BACKWARD]) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpi_into_push_n( eof_test: EOFTestFiller, opcode: Op, jump: JumpDirection, data_portion_end: bool, ) -> None: """ EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH2+ immediate. """ data_portion_length = int.from_bytes(opcode, byteorder="big") - 0x5F if jump == JumpDirection.FORWARD: offset = data_portion_length if data_portion_end else 1 code = Op.PUSH1(1) + Op.RJUMPI[offset] + opcode[0] + Op.STOP else: offset = -4 if data_portion_end else -4 - data_portion_length + 1 code = opcode[0] + Op.RJUMPI[offset] + Op.STOP eof_test( container=Container( sections=[ Section.Code(code=code), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("target_rjumpv_table_size", [1, 256]) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpi_into_rjumpv( eof_test: EOFTestFiller, target_rjumpv_table_size: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0025 (Invalid) EOF code containing RJUMPI with target RJUMPV immediate. """ invalid_destination = 4 + (2 * target_rjumpv_table_size) if data_portion_end else 4 target_jump_table = [0 for _ in range(target_rjumpv_table_size)] eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[invalid_destination] + Op.STOP + Op.PUSH1(1) + Op.RJUMPV[target_jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpi_into_callf( eof_test: EOFTestFiller, data_portion_end: bool, ) -> None: """ EOF1I4200_0026 (Invalid) EOF code containing RJUMPI with target CALLF immediate. """ invalid_destination = 2 if data_portion_end else 1 eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPI[invalid_destination] + Op.CALLF[1] + Op.STOP, ), Section.Code( code=Op.SSTORE(1, 1) + Op.RETF, code_outputs=0, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_dupn( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMPI with target DUPN immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.PUSH1(1) + Op.PUSH1(1) + Op.RJUMPI[1] + Op.DUPN[1] + Op.SSTORE + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_swapn( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMPI with target SWAPN immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.PUSH1(1) + Op.PUSH1(1) + Op.RJUMPI[1] + Op.SWAPN[1] + Op.SSTORE + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_exchange( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMPI with target EXCHANGE immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.PUSH1(2) + Op.PUSH1(3) + Op.PUSH1(1) + Op.RJUMPI[1] + Op.EXCHANGE[0x00] + Op.SSTORE + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_eofcreate( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMPI with target EOFCREATE immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 5 + Op.RJUMPI[1] + Op.EOFCREATE[0] + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container( container=Container.Code(code=Op.STOP), ), ] ) ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_into_returncode( eof_test: EOFTestFiller, ) -> None: """EOF code containing RJUMPI with target RETURNCODE immediate.""" eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 3 + Op.RJUMPI[1] + Op.RETURNCODE[0], ), Section.Container( container=Container.Code(code=Op.STOP), ), ] ) ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpi_backwards_reference_only( eof_test: EOFTestFiller, ) -> None: """EOF code containing instructions only reachable by backwards RJUMPI.""" container = Container.Code( code=( Op.RJUMP[RJUMP_LEN] + Op.RJUMP[RJUMPI_LEN + len(Op.ORIGIN)] + Op.ORIGIN + Op.RJUMPI[-(RJUMP_LEN + RJUMPI_LEN + len(Op.ORIGIN))] + Op.STOP ) ) eof_test( container=container, expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS, ) def test_rjumpi_stack_validation( eof_test: EOFTestFiller, ) -> None: """ Check that you can get to the same opcode with two different stack heights Spec now allows this: 4.b in https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation. """ container = Container.Code(code=Op.RJUMPI[1](1) + Op.ADDRESS + Op.NOOP + Op.STOP) eof_test( container=container, expect_exception=None, ) def test_rjumpi_at_the_end( eof_test: EOFTestFiller, ) -> None: """ Test invalid RJUMPI as the end of a code section. https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i: This implies that the last instruction must be a terminating instruction or RJUMP. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RJUMPI[1] + Op.STOP + Op.RJUMPI[-4], ) ], ), expect_exception=EOFException.MISSING_STOP_OPCODE, ) def test_tangled_rjumpi( eof_test: EOFTestFiller, ) -> None: """EOF code containing tangled RJUMPI paths.""" container = Container.Code( code=( Op.PUSH0 # [0,0] + Op.PUSH0 # [1,1] + Op.RJUMPI[8] # [2,2] + Op.PUSH1(127) # [1,1] + Op.RJUMPI[7] # [2,2] + Op.RJUMP[5] # [1,1] + Op.PUSH0 # [1,1] + Op.RJUMP[0] # [2,1] + Op.LT # [1,x] + Op.STOP # [1,x] ) ) eof_test( container=container, expect_exception=EOFException.STACK_UNDERFLOW, ) def test_rjumpi_backwards_onto_dup( eof_test: EOFTestFiller, ) -> None: """Backwards jumpi onto a dup.""" container = Container.Code( code=(Op.PUSH0 + Op.DUP1 + Op.RJUMPI[-4] + Op.STOP), max_stack_increase=2, ) eof_test( container=container, ) def test_rjumpi_backwards_min_stack_wrong( eof_test: EOFTestFiller, ) -> None: """Backwards rjumpi where min_stack does not match.""" container = Container.Code( code=( Op.PUSH0 # (0, 0) + Op.PUSH1(0) # (1, 1) + Op.RJUMPI[1] # (2, 2) To PUSH1 + Op.PUSH0 # (1, 1) + Op.PUSH1(4) # (1, 2) + Op.RJUMPI[-9] # (2, 3) To first RJUMPI with (1, 2) + Op.STOP # (1, 2) ), max_stack_increase=3, ) eof_test( container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_rjumpi_rjumpv_backwards_min_stack_wrong( eof_test: EOFTestFiller, ) -> None: """Backwards rjumpi rjumpv where min_stack does not match.""" container = Container.Code( code=( Op.PUSH0 # (0, 0) + Op.PUSH1(0) # (1, 1) + Op.RJUMPI[1] # (2, 2) To PUSH1 + Op.PUSH0 # (1, 1) + Op.PUSH1(4) # (1, 2) + Op.RJUMPV[-10] # (2, 3) To first RJUMPI with (1, 2) + Op.STOP # (1, 2) ), max_stack_increase=3, ) eof_test( container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_double_rjumpi_stack_underflow( eof_test: EOFTestFiller, ) -> None: """Two RJUMPIs, causing the min stack to underflow.""" container = Container.Code( code=( Op.PUSH0 # (0, 0) + Op.PUSH0 # (1, 1) + Op.RJUMPI[5] # (2, 2) To RETURN + Op.PUSH0 # (1, 1) + Op.PUSH0 # (2, 2) + Op.RJUMPI[0] # (3, 3) + Op.RETURN # (1, 2) Underflow ), max_stack_increase=3, ) eof_test( container=container, expect_exception=EOFException.STACK_UNDERFLOW, ) def test_double_rjumpi_stack_height_mismatch( eof_test: EOFTestFiller, ) -> None: """ Test stack height check of the backward RJUMP targeted by two RJUMPIs with the non-uniform stack height range. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 # BEGIN: (0, 0) + Op.PUSH0 # (1, 1) + Op.RJUMPI[3] # (2, 2) to LAST + Op.RJUMPI[0] # (1, 1) to LAST + Op.RJUMP[-11], # LAST: (0, 1) to BEGIN; stack height mismatch max_stack_increase=2, ), ], ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_double_rjumpi_invalid_max_stack_height( eof_test: EOFTestFiller, ) -> None: """ Test max stack height of the final block targeted by two RJUMPIs with the non-uniform stack height range. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 # (0, 0) + Op.PUSH0 # (1, 1) + Op.RJUMPI[3] # (2, 2) to EXIT + Op.RJUMPI[0] # (1, 1) to EXIT + Op.PUSH0 # EXIT: (0, 1) + Op.PUSH0 # (1, 2) + Op.INVALID, # (2, 3) max_stack_increase=2, # should be 3 ), ], ), expect_exception=EOFException.INVALID_MAX_STACK_INCREASE, ) @pytest.mark.parametrize( "container", [ Container( name="backwards_rjumpi_10", sections=[ Section.Code( code=Op.PUSH1[190] + Op.PUSH1[0] + Op.RJUMPI[1] + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-11] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000eff0000000080000360be6000e10001506000e1fff500", ), Container( name="backwards_rjumpi_3", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[-13] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000eff000000008000025f506000e1fff95f6000e1fff300", ), Container( name="backwards_rjumpi_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.DUP1 + Op.RJUMPI[-8] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000aff000000008000025f6001018080e1fff800", ), Container( name="backwards_rjumpi_8", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-6] + Op.PUSH0 + Op.RJUMP[-10], max_stack_increase=1, ), ], ), Container( name="backwards_rjumpi_9", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[-11] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000dff000000008000035f6000e100015f6000e1fff500", ), Container( name="backwards_rjumpi_variable_stack_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-7] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[-13] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010016ff000000008000055f6000e100025f5f5f506000e1fff95f6000e1fff300", ), Container( name="backwards_rjumpi_variable_stack_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[1] + Op.ADD + Op.DUP1 + Op.DUP1 + Op.RJUMPI[-8] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010012ff000000008000055f6000e100025f5f5f6001018080e1fff800", ), Container( name="backwards_rjumpi_variable_stack_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.RJUMPI[-4] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010010ff000000008000055f6000e100025f5f5f5f5f50e1fffc00", ), Container( name="backwards_rjumpi_variable_stack_6a", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH0 + Op.RJUMPI[-5] + Op.STOP, max_stack_increase=5, ), ], ), Container( name="backwards_rjumpi_variable_stack_8", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPI[-8] + Op.PUSH0 + Op.RJUMP[-10], max_stack_increase=4, ), ], ), ], ids=lambda x: x.name, ) def test_rjumpi_backward_invalid_max_stack_height( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a code section containing at least one backward RJUMPI invalid because of the incorrect max stack height. """ eof_test(container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py ================================================ """EOF JUMPF tests covering stack and code validation rules.""" import pytest from ethereum_test_tools import Account, EOFException, EOFStateTestFiller, EOFTestFiller from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import JumpDirection, slot_code_worked, slot_conditional_result, value_code_worked REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4200.md" REFERENCE_SPEC_VERSION = "17d4a8d12d2b5e0f2985c866376c16c8c6df7cba" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) RJUMP_LEN = len(Op.RJUMP[0]) @pytest.mark.parametrize( "calldata", [ pytest.param(0, id="c0"), pytest.param(1, id="c1"), pytest.param(3, id="c3"), pytest.param(255, id="c255"), pytest.param(256, id="c256"), pytest.param(2**256 - 1, id="c2^256-1"), ], ) @pytest.mark.parametrize( "table_size", [ pytest.param(1, id="t1"), pytest.param(3, id="t3"), pytest.param(256, id="t256"), ], ) def test_rjumpv_condition( eof_state_test: EOFStateTestFiller, calldata: int, table_size: int, ) -> None: """Test RJUMPV contract switching based on external input.""" value_fall_through = 0xFFFF value_base = 0x1000 # Force a `PUSH2` instruction to be used on all targets target_length = 7 jump_table = [(i + 1) * target_length for i in range(table_size)] jump_targets = sum( (Op.SSTORE(slot_conditional_result, i + value_base) + Op.STOP) for i in range(table_size) ) fall_through_case = Op.SSTORE(slot_conditional_result, value_fall_through) + Op.STOP eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.CALLDATALOAD + Op.RJUMPV[jump_table] + fall_through_case + jump_targets, ) ] ), data=calldata.to_bytes(32, "big"), container_post=Account( storage={ slot_conditional_result: calldata + value_base if calldata < table_size else value_fall_through, } ), ) def test_rjumpv_forwards( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0008 (Valid) EOF with RJUMPV table size 1 (Positive).""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPV[3] + Op.NOOP + Op.NOOP + Op.STOP + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpv_backwards( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0009 (Valid) EOF with RJUMPV table size 1 (Negative).""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPI[7] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP + Op.PUSH1(0) + Op.RJUMPV[-13] + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpv_backwards_onto_dup( eof_test: EOFTestFiller, ) -> None: """Backwards jumpv vector onto a dup.""" container = Container.Code( code=(Op.PUSH0 + Op.DUP1 + Op.RJUMPV[-5] + Op.STOP), max_stack_increase=2, ) eof_test( container=container, ) @pytest.mark.parametrize("length", [8, 9]) def test_rjumpv_backwards_large_table( eof_test: EOFTestFiller, length: int, ) -> None: """Backwards jump vector with a large table.""" jump_table = [0] * length jump_table += [length * -2 - 6] container = Container.Code( code=(Op.RJUMPV[jump_table](length) + Op.STOP), max_stack_increase=1, ) eof_test( container=container, ) def test_rjumpv_zero( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0010 (Valid) EOF with RJUMPV table size 1 (Zero).""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPV[0] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpv_size_3( eof_state_test: EOFStateTestFiller, ) -> None: """EOF1V4200_0011 (Valid) EOF with RJUMPV table size 3.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPV[3, 0, -10] + Op.NOOP + Op.NOOP + Op.STOP + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( "target", [0, 1, 100, 254, 255, 256], ) def test_rjumpv_full_table( eof_state_test: EOFStateTestFiller, target: int, ) -> None: """ EOF1V4200_0012/13/14/15 (Valid) EOF with RJUMPV table size 256 (target parameterized). """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH2[target] + Op.RJUMPV[range(256)] + Op.NOOP * 256 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpv_max_forwards( eof_state_test: EOFStateTestFiller, ) -> None: """ EOF1V4200_0016 (Valid) EOF with RJUMPV containing the maximum offset (32767). """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[32767] + Op.NOOP * 32768 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_rjumpv_truncated_empty( eof_test: EOFTestFiller, ) -> None: """ EOF1I4200_0027 (Invalid) EOF code containing RJUMPV with max_index 0 but no immediates. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV, ) ], ), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) @pytest.mark.parametrize( "branches", [1, 2, 256], ) @pytest.mark.parametrize( "byte_count_last_branch", [0, 1], ) def test_rjumpv_truncated( eof_test: EOFTestFiller, branches: int, byte_count_last_branch: int, ) -> None: """EOF1I4200_0028/29/30 (Invalid) EOF code containing truncated RJUMPV.""" rjumpv_bytes = int.to_bytes(branches - 1, 1, "big") rjumpv_bytes += b"\0" * ((2 * (branches - 1)) + byte_count_last_branch) eof_test( container=Container.Code(code=Op.PUSH1(1) + Op.RJUMPV[rjumpv_bytes]), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_header( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """ EOF1I4200_0031 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping into header). """ invalid_destination = -5 - (2 * table_size) jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize("offset", [-13, -23]) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_before_container( eof_test: EOFTestFiller, table_size: int, invalid_index: int, offset: int, ) -> None: """ EOF1I4200_0032 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to before code begin). """ invalid_destination = offset - (2 * table_size) jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_data( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """ EOF1I4200_0033 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping into data section). """ invalid_destination = 2 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP, ), Section.Data(data=b"\xaa\xbb\xcc"), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_after_container( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """ EOF1I4200_0034 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to after code end). """ invalid_destination = 2 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_at_end( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """ EOF1I4200_0035 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to code end). """ invalid_destination = 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpv_into_self_data_portion( eof_test: EOFTestFiller, table_size: int, invalid_index: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0036 (Invalid) EOF code containing RJUMPV with target same RJUMPV immediate. """ invalid_destination = -1 if data_portion_end else -(2 * table_size) - 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize("stack_height_spread", [-1, 0, 1, 2]) def test_rjumpv_into_self( eof_test: EOFTestFiller, table_size: int, invalid_index: int, stack_height_spread: int, ) -> None: """ EOF code containing RJUMPV targeting itself. This can never be valid because this is backward jump and RJUMPV consumes one stack item. """ # Create variadic stack height by the parametrized spread. stack_spread_code = Bytecode() if stack_height_spread >= 0: stack_spread_code = Op.RJUMPI[stack_height_spread](0) + Op.PUSH0 * stack_height_spread jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = -len(Op.RJUMPV[jump_table]) eof_test( container=Container( sections=[ Section.Code( code=stack_spread_code + Op.RJUMPV[jump_table](0) + Op.STOP, # max stack increase is computed correctly ) ], ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_stack_height_diff( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """ EOF code containing RJUMPV with target instruction that causes stack height difference. """ jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = -(len(Op.RJUMPV[jump_table]) + len(Op.PUSH1[0]) + len(Op.PUSH1[0])) eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1[0] + Op.PUSH1[0] + Op.RJUMPV[jump_table] + Op.STOP, ), ], ), expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_stack_underflow( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """ EOF code containing RJUMPV with target instruction that cause stack underflow. """ jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = 1 eof_test( container=Container( sections=[ Section.Code(code=Op.ORIGIN + Op.RJUMPV[jump_table] + Op.STOP + Op.POP + Op.STOP), ], ), expect_exception=EOFException.STACK_UNDERFLOW, ) @pytest.mark.parametrize( "table_size", [ pytest.param(1, id="t1"), pytest.param(256, id="t256"), ], ) def test_rjumpv_skips_stack_underflow( eof_test: EOFTestFiller, table_size: int, ) -> None: """ EOF code containing RJUMPV where the default path produces a stack underflow. """ jump_table = [1 for _ in range(table_size)] eof_test( container=Container( sections=[ Section.Code(code=Op.ORIGIN + Op.RJUMPV[jump_table] + Op.POP + Op.STOP), ], ), expect_exception=EOFException.STACK_UNDERFLOW, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpv_into_rjump( eof_test: EOFTestFiller, table_size: int, invalid_index: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0037 (Invalid) EOF code containing RJUMPV with target RJUMP immediate. """ invalid_destination = 3 if data_portion_end else 2 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination if table_size > 1: valid_index = 0 if valid_index == invalid_index: valid_index += 1 jump_table[valid_index] = 1 eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP + Op.RJUMP[0] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpv_into_rjumpi( eof_test: EOFTestFiller, table_size: int, invalid_index: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0038 (Invalid) EOF code containing RJUMPV with target RJUMPI immediate. """ invalid_destination = 5 if data_portion_end else 4 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination if table_size > 1: valid_index = 0 if valid_index == invalid_index: valid_index += 1 jump_table[valid_index] = 1 eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP + Op.PUSH1(1) + Op.RJUMPI[0] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize("jump", [JumpDirection.FORWARD, JumpDirection.BACKWARD]) def test_rjumpv_into_push_1( eof_test: EOFTestFiller, jump: JumpDirection, table_size: int, invalid_index: int, ) -> None: """ EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate. """ if jump == JumpDirection.FORWARD: invalid_destination = 2 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination code = ( Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP + Op.PUSH1(1) + Op.PUSH1(1) + Op.SSTORE + Op.STOP ) else: invalid_destination = -(2 * table_size) - 3 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination code = Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP eof_test( container=Container( sections=[Section.Code(code=code)], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "opcode", [ Op.PUSH2, Op.PUSH3, Op.PUSH4, Op.PUSH5, Op.PUSH6, Op.PUSH7, Op.PUSH8, Op.PUSH9, Op.PUSH10, Op.PUSH11, Op.PUSH12, Op.PUSH13, Op.PUSH14, Op.PUSH15, Op.PUSH16, Op.PUSH17, Op.PUSH18, Op.PUSH19, Op.PUSH20, Op.PUSH21, Op.PUSH22, Op.PUSH23, Op.PUSH24, Op.PUSH25, Op.PUSH26, Op.PUSH27, Op.PUSH28, Op.PUSH29, Op.PUSH30, Op.PUSH31, Op.PUSH32, ], ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) @pytest.mark.parametrize("jump", [JumpDirection.FORWARD, JumpDirection.BACKWARD]) def test_rjumpv_into_push_n( eof_test: EOFTestFiller, opcode: Op, jump: JumpDirection, table_size: int, invalid_index: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSHN immediate. """ data_portion_length = int.from_bytes(opcode, byteorder="big") - 0x5F if jump == JumpDirection.FORWARD: invalid_destination = data_portion_length + 1 if data_portion_end else 2 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination code = ( Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP + opcode[1] + Op.PUSH1(1) + Op.SSTORE + Op.STOP ) else: invalid_destination = ( -(2 * table_size) - 3 if data_portion_end else -(2 * table_size) - 2 - data_portion_length ) jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination code = opcode[1] + Op.RJUMPV[jump_table] + Op.STOP eof_test( container=Container( sections=[Section.Code(code=code)], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "source_table_size,invalid_index", [ pytest.param(1, 0, id="s1i0"), pytest.param(256, 0, id="s256i0"), pytest.param(256, 255, id="s256i255"), ], ) @pytest.mark.parametrize("target_table_size", [1, 256], ids=["t1", "t256"]) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpv_into_rjumpv( eof_test: EOFTestFiller, source_table_size: int, target_table_size: int, invalid_index: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0040 (Invalid) EOF code containing RJUMPV with target other RJUMPV immediate. """ invalid_destination = 4 + (2 * target_table_size) if data_portion_end else 4 source_jump_table = [0 for _ in range(source_table_size)] source_jump_table[invalid_index] = invalid_destination target_jump_table = [0 for _ in range(target_table_size)] eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[source_jump_table] + Op.STOP + Op.PUSH1(1) + Op.RJUMPV[target_jump_table] + Op.STOP, ) ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) @pytest.mark.parametrize( "data_portion_end", [True, False], ids=["data_portion_end", "data_portion_start"], ) def test_rjumpv_into_callf( eof_test: EOFTestFiller, table_size: int, invalid_index: int, data_portion_end: bool, ) -> None: """ EOF1I4200_0041 (Invalid) EOF code containing RJUMPV with target CALLF immediate. """ invalid_destination = 2 if data_portion_end else 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.CALLF[1] + Op.STOP, ), Section.Code( code=Op.SSTORE(1, 1) + Op.RETF, code_outputs=0, ), ] ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_dupn( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """EOF code containing RJUMPV with target DUPN immediate.""" invalid_destination = 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.PUSH1(1) + Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.DUPN[1] + Op.SSTORE + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_swapn( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """EOF code containing RJUMPV with target SWAPN immediate.""" invalid_destination = 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.PUSH1(1) + Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.SWAPN[1] + Op.SSTORE + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_exchange( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """EOF code containing RJUMPV with target EXCHANGE immediate.""" invalid_destination = 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(1) + Op.PUSH1(2) + Op.PUSH1(3) + Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.EXCHANGE[0x00] + Op.SSTORE + Op.STOP, ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_eofcreate( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """EOF code containing RJUMPV with target EOFCREATE immediate.""" invalid_destination = 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 5 + Op.RJUMPV[jump_table] + Op.EOFCREATE[0] + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container( container=Container.Code(Op.STOP), ), ] ) ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) @pytest.mark.parametrize( "table_size,invalid_index", [ pytest.param(1, 0, id="t1i0"), pytest.param(256, 0, id="t256i0"), pytest.param(256, 255, id="t256i255"), ], ) def test_rjumpv_into_returncode( eof_test: EOFTestFiller, table_size: int, invalid_index: int, ) -> None: """EOF code containing RJUMPV with target RETURNCODE immediate.""" invalid_destination = 1 jump_table = [0 for _ in range(table_size)] jump_table[invalid_index] = invalid_destination eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 3 + Op.RJUMPV[jump_table] + Op.RETURNCODE[0], ), Section.Container( container=Container.Code(Op.STOP), ), ] ) ), ], ), expect_exception=EOFException.INVALID_RJUMP_DESTINATION, ) def test_rjumpv_backwards_reference_only( eof_test: EOFTestFiller, ) -> None: """EOF code containing instructions only reachable by backwards RJUMPV.""" rjumpv_len = len(Op.RJUMPV[0]) container = Container.Code( code=( Op.RJUMP[RJUMP_LEN] + Op.RJUMP[rjumpv_len + len(Op.ORIGIN)] + Op.ORIGIN + Op.RJUMPV[-(RJUMP_LEN + rjumpv_len + len(Op.ORIGIN))] + Op.STOP ) ) eof_test( container=container, expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS, ) def test_rjumpv_at_the_end( eof_test: EOFTestFiller, ) -> None: """ https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i: This implies that the last instruction may be a terminating instruction or RJUMPV. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPI[1] + Op.STOP + Op.RJUMPV[-7](1), ) ], ), expect_exception=EOFException.MISSING_STOP_OPCODE, ) def test_rjumpv_backwards_min_stack_wrong( eof_test: EOFTestFiller, ) -> None: """Backwards rjumpv where min_stack does not match.""" container = Container.Code( code=( Op.PUSH0 # (0, 0) + Op.PUSH1(0) # (1, 1) + Op.RJUMPV[1] # (2, 2) To PUSH1 + Op.PUSH0 # (1, 1) + Op.PUSH1(4) # (1, 2) + Op.RJUMPV[-11] # (2, 3) To first RJUMPV with (1, 2) + Op.STOP # (1, 2) ), max_stack_increase=3, ) eof_test( container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_rjumpv_rjumpi_backwards_min_stack_wrong( eof_test: EOFTestFiller, ) -> None: """Backwards rjumpv rjumpi where min_stack does not match.""" container = Container.Code( code=( Op.PUSH0 # (0, 0) + Op.PUSH1(0) # (1, 1) + Op.RJUMPV[1] # (2, 2) To PUSH1 + Op.PUSH0 # (1, 1) + Op.PUSH1(4) # (1, 2) + Op.RJUMPI[-10] # (2, 3) To first RJUMPV with (1, 2) + Op.STOP # (1, 2) ), max_stack_increase=3, ) eof_test( container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH, ) def test_double_rjumpv( eof_test: EOFTestFiller, ) -> None: """Two RJUMPVs, causing the min stack to underflow.""" container = Container.Code( code=(Op.PUSH0 + Op.PUSH0 + Op.RJUMPV[6] + Op.PUSH0 + Op.PUSH0 + Op.RJUMPV[0] + Op.RETURN), max_stack_increase=3, ) eof_test( container=container, expect_exception=EOFException.STACK_UNDERFLOW, ) @pytest.mark.parametrize( "container", [ Container( name="forwards_rjumpv_0", sections=[ Section.Code( code=Op.PUSH1(1) + Op.RJUMPV[0] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010007ff000000008000016001e200000000", ), Container( name="forwards_rjumpv_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1(0) + Op.RJUMPV[1] + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010009ff000000008000025f6000e20000011900", ), Container( name="forwards_rjumpv_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[2, 3]] + Op.PUSH0 + Op.POP + Op.NOT + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000dff000000008000025f6000e201000200035f501900", ), Container( name="forwards_rjumpv_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[1] + Op.PUSH0 + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010009ff000000008000025f6000e20000015f00", ), Container( name="forwards_rjumpv_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[1, 2]] + Op.PUSH0 + Op.PUSH0 + Op.NOT + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000dff000000008000035f6000e201000100025f5f1900", ), Container( name="forwards_rjumpv_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[5, 10]] + Op.PUSH1(1) + Op.RJUMP[7] + Op.PUSH1(2) + Op.RJUMP[2] + Op.PUSH1(3) + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010016ff000000008000025f6000e2010005000a6001e000076002e00002600300", ), Container( name="forwards_rjumpv_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[4, 9]] + Op.PUSH0 + Op.RJUMP[8] + Op.PUSH0 + Op.PUSH0 + Op.RJUMP[3] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010016ff000000008000045f6000e201000400095fe000085f5fe000035f5f5f00", ), Container( name="forwards_rjumpv_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[4, 9]] + Op.POP + Op.RJUMP[8] + Op.POP + Op.POP + Op.RJUMP[3] + Op.POP + Op.POP + Op.POP + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010019ff000000008000055f5f5f5f6000e2010004000950e000085050e0000350505000", ), Container( name="forwards_rjumpv_8", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[3] + Op.RJUMP[0] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000bff000000008000025f6000e2000003e0000000", ), Container( name="forwards_rjumpv_9", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[4] + Op.PUSH0 + Op.RJUMP[0] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef0001010004020001000cff000000008000025f6000e20000045fe0000000", ), Container( name="forwards_rjumpv_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1(1) + Op.RJUMPV[0] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001000fff000000008000045f6000e100025f5f6001e200000000", ), Container( name="forwards_rjumpv_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[1] + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010011ff000000008000055f6000e100025f5f5f6000e20000011900", ), Container( name="forwards_rjumpv_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[2, 3]] + Op.PUSH0 + Op.POP + Op.NOT + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010015ff000000008000055f6000e100025f5f5f6000e201000200035f501900", ), Container( name="forwards_rjumpv_variable_stack_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[1] + Op.PUSH0 + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010011ff000000008000055f6000e100025f5f5f6000e20000015f00", ), Container( name="forwards_rjumpv_variable_stack_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[1, 2]] + Op.PUSH0 + Op.PUSH0 + Op.NOT + Op.STOP, max_stack_increase=6, ), ], expected_bytecode="ef00010100040200010015ff000000008000065f6000e100025f5f5f6000e201000100025f5f1900", ), Container( name="forwards_rjumpv_variable_stack_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[5, 10]] + Op.PUSH1(1) + Op.RJUMP[7] + Op.PUSH1(2) + Op.RJUMP[2] + Op.PUSH1(3) + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef0001010004020001001eff000000008000055f6000e100025f5f5f6000e2010005000a6001e000076002e00002600300", ), Container( name="forwards_rjumpv_variable_stack_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[4, 9]] + Op.PUSH0 + Op.RJUMP[8] + Op.PUSH0 + Op.PUSH0 + Op.RJUMP[3] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.STOP, max_stack_increase=7, ), ], expected_bytecode="ef0001010004020001001eff000000008000075f6000e100025f5f5f6000e201000400095fe000085f5fe000035f5f5f00", ), Container( name="forwards_rjumpv_variable_stack_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[[4, 9]] + Op.POP + Op.RJUMP[8] + Op.POP + Op.POP + Op.RJUMP[3] + Op.POP + Op.POP + Op.POP + Op.STOP, max_stack_increase=8, ), ], expected_bytecode="ef00010100040200010021ff000000008000085f6000e100025f5f5f5f5f5f6000e2010004000950e000085050e0000350505000", ), Container( name="forwards_rjumpv_variable_stack_8", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[3] + Op.RJUMP[0] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010013ff000000008000055f6000e100025f5f5f6000e2000003e0000000", ), Container( name="forwards_rjumpv_variable_stack_9", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[4] + Op.PUSH0 + Op.RJUMP[0] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010014ff000000008000055f6000e100025f5f5f6000e20000045fe0000000", ), ], ids=lambda x: x.name, ) def test_rjumpv_valid_forward( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a valid code section containing at least one forward RJUMPV. These tests exercise the stack height validation. """ eof_test(container=container) @pytest.mark.parametrize( "container", [ Container( name="backwards_rjumpv_0", sections=[ Section.Code( code=Op.PUSH1[0] + Op.RJUMPV[-6] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010007ff000000008000016000e200fffa00", ), Container( name="backwards_rjumpv_1", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef00010100040200010009ff000000008000015f506000e200fff800", ), Container( name="backwards_rjumpv_2", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.PUSH1[0] + Op.RJUMPV[-14] + Op.STOP, max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000fff000000008000015f506000e200fff86000e200fff200", ), Container( name="backwards_rjumpv_4", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.RJUMP[-11], max_stack_increase=1, ), ], expected_bytecode="ef0001010004020001000bff000000008000015f506000e200fff8e0fff5", ), Container( name="backwards_rjumpv_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[-6] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef0001010004020001000fff000000008000045f6000e100025f5f6000e200fffa00", ), Container( name="backwards_rjumpv_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010011ff000000008000045f6000e100025f5f5f506000e200fff800", ), Container( name="backwards_rjumpv_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.PUSH1[0] + Op.RJUMPV[-14] + Op.STOP, max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010017ff000000008000045f6000e100025f5f5f506000e200fff86000e200fff200", ), Container( name="backwards_rjumpv_variable_stack_4", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.RJUMP[-11], max_stack_increase=4, ), ], expected_bytecode="ef00010100040200010013ff000000008000045f6000e100025f5f5f506000e200fff8e0fff5", ), ], ids=lambda x: x.name, ) def test_rjumpv_valid_backward( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a valid code section containing at least one backward RJUMPV. These tests exercise the stack height validation. """ eof_test(container=container) @pytest.mark.parametrize( "container", [ Container( name="backwards_rjumpv_3", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[-15] + Op.STOP, max_stack_increase=2, ), ], expected_bytecode="ef00010100040200010010ff000000008000025f506000e200fff85f6000e200fff100", ), Container( name="backwards_rjumpv_5", sections=[ Section.Code( code=Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-7] + Op.PUSH0 + Op.RJUMP[-11], max_stack_increase=1, ), ], ), Container( name="backwards_rjumpv_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[-12] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000eff000000008000035f6000e100015f6000e200fff400", ), Container( name="backwards_rjumpv_7", sections=[ Section.Code( code=Op.PUSH1[190] + Op.PUSH1[0] + Op.RJUMPI[1] + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-12] + Op.STOP, max_stack_increase=3, ), ], expected_bytecode="ef0001010004020001000fff0000000080000360be6000e10001506000e200fff400", ), Container( name="backwards_rjumpv_variable_stack_3", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-8] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[-15] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010018ff000000008000055f6000e100025f5f5f506000e200fff85f6000e200fff100", ), Container( name="backwards_rjumpv_variable_stack_5", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-7] + Op.PUSH0 + Op.RJUMP[-11], max_stack_increase=4, ), ], ), Container( name="backwards_rjumpv_variable_stack_6", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPV[-12] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010016ff000000008000055f6000e100025f5f5f6000e100015f6000e200fff400", ), Container( name="backwards_rjumpv_variable_stack_7", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.POP + Op.PUSH1[0] + Op.RJUMPV[-12] + Op.STOP, max_stack_increase=5, ), ], expected_bytecode="ef00010100040200010017ff000000008000055f6000e100025f5f5f5f6000e10001506000e200fff400", ), ], ids=lambda x: x.name, ) def test_rjumpv_backward_invalid_max_stack_height( eof_test: EOFTestFiller, container: Container, ) -> None: """ Validate a code section containing at least one backward RJUMPV invalid because of the incorrect max stack height. """ eof_test(container=container, expect_exception=EOFException.STACK_HEIGHT_MISMATCH) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4750_functions/__init__.py ================================================ """ Test cases for [EIP-4750: EOF - Functions](https://eips.ethereum.org/EIPS/eip-4750). EIP-4750 formalizes functions in the EVM object format, introducing callable units of code. Opcodes introduced: `CALLF` (`0xE3`), `RETF` (`0xE4`). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4750_functions/helpers.py ================================================ """EOF Functions tests helpers.""" import itertools """Storage addresses for common testing fields""" _slot = itertools.count() next(_slot) # don't use slot 0 slot_code_worked = next(_slot) slot_last_slot = next(_slot) slot_stack_canary = next(_slot) """Storage values for common testing fields""" value_code_worked = 0x2015 value_canary_written = 0xDEADB12D ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_callf_execution.py ================================================ """EOF CALLF execution tests.""" import math import pytest from ethereum_test_base_types import Hash, Storage from ethereum_test_specs import StateTestFiller from ethereum_test_tools import Account, EOFStateTestFiller from ethereum_test_tools import Opcodes as Op from ethereum_test_types import Alloc, Environment, Transaction from ethereum_test_types.eof.v1 import Container, Section from .. import EOF_FORK_NAME from ..eip7620_eof_create.helpers import ( value_canary_should_not_change, value_canary_to_be_overwritten, ) from .helpers import ( slot_code_worked, slot_stack_canary, value_canary_written, value_code_worked, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4750.md" REFERENCE_SPEC_VERSION = "14400434e1199c57d912082127b1d22643788d11" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "n,result", ((0, 1), (1, 1), (5, 120), (57, math.factorial(57)), (58, math.factorial(58) % 2**256)), ) def test_callf_factorial(eof_state_test: EOFStateTestFiller, n: int, result: int) -> None: """Test factorial implementation with recursive CALLF instructions.""" eof_state_test( container=Container( sections=[ Section.Code( Op.SSTORE(0, Op.CALLF[1](Op.CALLDATALOAD(0))) + Op.STOP, ), Section.Code( Op.PUSH1[1] + Op.DUP2 + Op.GT + Op.RJUMPI[4] + Op.POP + Op.PUSH1[1] + Op.RETF + Op.PUSH1[1] + Op.DUP2 + Op.SUB + Op.CALLF[1] + Op.DUP2 + Op.MUL + Op.SWAP1 + Op.POP + Op.RETF, code_inputs=1, code_outputs=1, ), ] ), data=Hash(n), container_post=Account(storage={0: result}), ) @pytest.mark.parametrize( "n,result", ((0, 1), (1, 1), (13, 233), (27, 196418)), ) def test_callf_fibonacci(eof_state_test: EOFStateTestFiller, n: int, result: int) -> None: """ Test fibonacci sequence implementation with recursive CALLF instructions. """ eof_state_test( container=Container( sections=[ Section.Code( Op.SSTORE(0, Op.CALLF[1](Op.CALLDATALOAD(0))) + Op.STOP, ), Section.Code( Op.PUSH1[2] + Op.DUP2 + Op.GT + Op.RJUMPI[4] + Op.POP + Op.PUSH1[1] + Op.RETF + Op.PUSH1[2] + Op.DUP2 + Op.SUB + Op.CALLF[1] + Op.PUSH1[1] + Op.DUP3 + Op.SUB + Op.CALLF[1] + Op.ADD + Op.SWAP1 + Op.POP + Op.RETF, code_inputs=1, code_outputs=1, ), ] ), gas_limit=15_000_000, data=Hash(n), container_post=Account(storage={0: result}), ) @pytest.mark.parametrize( "container", ( Container( name="callf_sub_retf", sections=[ Section.Code( Op.SSTORE( slot_code_worked, Op.CALLF[1](value_code_worked + 1, 1), ) + Op.STOP, max_stack_increase=2, ), Section.Code( Op.SUB + Op.RETF, code_inputs=2, code_outputs=1, ), ], ), Container( name="max_code_sections_retf2", sections=[ Section.Code( Op.CALLF[1] + Op.SSTORE + Op.STOP, ) ] + [ Section.Code( Op.CALLF[i] + Op.RETF, code_outputs=2, max_stack_increase=2, ) for i in range(2, 1024) ] + [ Section.Code( Op.PUSH2[value_code_worked] + Op.PUSH1[slot_code_worked] + Op.RETF, code_outputs=2, ), ], ), Container( name="multiple_sections_of_different_types", # EOF1V4750_0005 sections=[ Section.Code( Op.PUSH0 + Op.CALLF[1] + Op.CALLF[2] + Op.PUSH0 + Op.CALLF[3] + Op.SSTORE + Op.STOP, max_stack_increase=4, ), Section.Code( Op.POP + Op.RETF, code_inputs=1, code_outputs=0, ), Section.Code( Op.PUSH2[value_code_worked] + Op.RETF, code_outputs=1, ), Section.Code( Op.DUP2 + Op.PUSH2[slot_code_worked] + Op.RETF, code_inputs=2, code_outputs=4, ), ], ), ), ids=lambda x: x.name, ) def test_callf(eof_state_test: EOFStateTestFiller, container: Container) -> None: """Test basic usage of CALLF and RETF instructions.""" eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( "container", ( Container( name="no_inputs", sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH0 + Op.POP + Op.RETF, code_outputs=0, ), ], ), Container( name="with_inputs", sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH0 + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_increase=1, ), ], ), Container( name="at_callf", sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.CALLF[2] + # stack has 1024 items Op.POP + Op.RETF, code_outputs=0, ), Section.Code( Op.PUSH0 + Op.RETF, # stack has 1024 items code_outputs=1, ), ], ), Container( name="at_push0", sections=[ Section.Code( code=Op.PUSH0 * 1022 + Op.CALLF[1] + Op.POP * 1022 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH0 + # stack has 1023 items Op.CALLF[2] + Op.POP + Op.RETF, code_outputs=0, ), Section.Code( Op.PUSH0 + # stack has 1024 items Op.POP + Op.RETF, code_outputs=0, ), ], ), Container( name="nested_with_inputs_at_push0", sections=[ Section.Code( code=Op.PUSH0 * 1022 + Op.CALLF[1] + Op.POP * 1022 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH0 + # Stack has 1023 items Op.CALLF[2] + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_increase=1, ), Section.Code( Op.PUSH0 + # Stack has 1024 items Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_increase=1, ), ], ), Container( name="store_value_unmodified_by_callf", sections=[ Section.Code( Op.PUSH2[value_code_worked] # to be stored after CALLF + Op.PUSH0 # input to CALLF + Op.CALLF[1] + Op.PUSH1[slot_code_worked] + Op.SSTORE + Op.STOP, max_stack_increase=2, ), Section.Code( Op.POP # clear input + Op.PUSH0 * 1023 # reach max stack height + Op.POP * 1023 + Op.RETF, # return nothing code_inputs=1, code_outputs=0, ), ], ), Container( name="with_rjumpi", sections=[ Section.Code( Op.PUSH1[1] # input[1] to CALLF + Op.PUSH0 # input[0] to CALLF + Op.CALLF[1] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, max_stack_increase=2, ), Section.Code( Op.POP # clear input[0] + Op.RJUMPI[2 * 1023] # jump to RETF based on input[1] + Op.PUSH0 * 1023 # reach max stack height + Op.POP * 1023 + Op.RETF, # return nothing code_inputs=2, code_outputs=0, ), ], ), ), ids=lambda x: x.name, ) def test_callf_operand_stack_size_max( eof_state_test: EOFStateTestFiller, container: Container ) -> None: """Test operand stack reaching 1024 items.""" eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( "container", ( Container( name="no_inputs", sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH0 # Stack has 1024 items + Op.CALLF[2] + Op.POP + Op.RETF, code_outputs=0, ), Section.Code( Op.PUSH0 # Runtime stack overflow + Op.POP + Op.RETF, code_outputs=0, ), ], ), Container( name="with_inputs", sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH0 # Stack has 1024 items + Op.CALLF[2] + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_increase=1, ), Section.Code( Op.PUSH0 # Runtime stackoverflow + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_increase=1, ), ], ), ), ids=lambda x: x.name, ) def test_callf_operand_stack_overflow( eof_state_test: EOFStateTestFiller, container: Container ) -> None: """Test stack overflowing 1024 items in called function.""" eof_state_test( container=container, container_post=Account(storage={slot_code_worked: 0}), ) @pytest.mark.parametrize( ("stack_height", "failure"), ( pytest.param(1020, False, id="no_overflow"), pytest.param(1021, True, id="with_overflow"), ), ) def test_callf_sneaky_stack_overflow( stack_height: int, failure: bool, state_test: StateTestFiller, pre: Alloc, ) -> None: """ CALLF where a normal execution would not overflow, but EIP-4750 CALLF rule #3 triggers. Code Section 0 - Mostly fills the stack Code Section 1 - jumper to 2, so container verification passes (we want a runtime failure) Code Section 2 - Could require too much stack, but doesn't as it JUMPFs to 3 Code Section 3 - Writes canary values The intent is to catch implementations of CALLF that don't enforce rule #3 """ env = Environment() sender = pre.fund_eoa() inputs = 1 outputs = 3 contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.PUSH0 * stack_height + Op.CALLF[1] + Op.POP * stack_height + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), max_stack_increase=stack_height + outputs - inputs, ), Section.Code( Op.CALLF[2] + Op.POP + Op.RETF, code_inputs=inputs, code_outputs=outputs, max_stack_increase=outputs - inputs + 1, ), Section.Code( Op.RJUMPI[4] + Op.PUSH0 + Op.JUMPF[3] + Op.PUSH0 * (outputs - inputs + 3) + Op.POP + Op.RETF, code_inputs=inputs, code_outputs=outputs + 1, max_stack_increase=outputs - inputs + 2, ), Section.Code( Op.POP * inputs + Op.SSTORE(slot_stack_canary, value_canary_written) + Op.PUSH0 * (outputs + 1) + Op.RETF, code_inputs=inputs, code_outputs=outputs + 1, max_stack_increase=outputs - inputs + 1, ), ], ), storage={ slot_code_worked: ( value_canary_should_not_change if failure else value_canary_to_be_overwritten ), slot_stack_canary: ( value_canary_should_not_change if failure else value_canary_to_be_overwritten ), }, ) post = { contract_address: Account( storage={ slot_code_worked: ( value_canary_should_not_change if failure else value_code_worked ), slot_stack_canary: ( value_canary_should_not_change if failure else value_canary_written ), } ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( ("stack_height", "failure"), ( pytest.param(1018, False, id="no_max_stack"), pytest.param(1019, False, id="with_max_stack"), pytest.param(1020, True, id="over_max_stack"), ), ) def test_callf_max_stack( stack_height: int, failure: bool, state_test: StateTestFiller, pre: Alloc, ) -> None: """ CALLF where a normal execution would not overflow, but EIP-4750 CALLF rule #4 triggers. Code Section 0 - calls #1 with the configured height, but we load some operands so the return stack does not overflow Code Section 1 - expands stack, calls #2, THEN recursively calls itself until input is zero, and returns. Code Section 2 - Just returns, zero inputs, zero outputs This will catch CALLF execution rule #3: always fail if the operand stack is full. Not checking rule 3 results in a call to section 2 and not overfilling the stack (as it is just RETF). """ env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.PUSH0 * 4 # fill the stack up a little bit + Op.PUSH2(stack_height) + Op.CALLF[1] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), ), Section.Code( Op.PUSH1(1) # arg, 1 + Op.SWAP1 # 1, arg + Op.SUB # arg-1, + Op.DUP1 # arg-1, arg-1 + Op.CALLF[2] # arg-1, arg-1 + Op.ISZERO # jump?, arg-1, + Op.RJUMPI[5] # arg-1 + Op.DUP1 # arg-1, arg-1 + Op.CALLF[1] # ret, arg-1 + Op.POP # arg-1 + Op.RETF, code_inputs=1, code_outputs=1, ), Section.Code( Op.RETF, code_outputs=0, ), ], ), storage={ slot_code_worked: ( value_canary_should_not_change if failure else value_canary_to_be_overwritten ), }, ) post = { contract_address: Account( storage={ slot_code_worked: ( value_canary_should_not_change if failure else value_code_worked ), } ) } tx = Transaction( to=contract_address, gas_limit=100_000, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_callf_retf_memory_context( state_test: StateTestFiller, pre: Alloc, ) -> None: """Verifies CALLF and RETF don't corrupt memory.""" env = Environment() storage = Storage() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( Op.SSTORE(storage.store_next(value_code_worked), value_code_worked) + Op.MSTORE(0, 1) + Op.CALLF[1] + Op.SSTORE(storage.store_next(64), Op.MSIZE()) + Op.SSTORE(storage.store_next(2), Op.MLOAD(0)) + Op.SSTORE(storage.store_next(3), Op.MLOAD(32)) + Op.STOP, ), Section.Code( Op.SSTORE(storage.store_next(32), Op.MSIZE()) + Op.SSTORE(storage.store_next(1), Op.MLOAD(0)) + Op.MSTORE(0, 2) + Op.MSTORE(32, 3) + Op.RETF, code_outputs=0, ), ], ), ) post = { contract_address: Account(storage=storage), } tx = Transaction( to=contract_address, gas_limit=500_000, sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py ================================================ """Code validation of CALLF, RETF opcodes tests.""" from typing import List import pytest from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_types.eof.constants import MAX_RUNTIME_STACK_HEIGHT from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import ( MAX_CODE_OUTPUTS, MAX_CODE_SECTIONS, MAX_STACK_INCREASE_LIMIT, ) from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-4750.md" REFERENCE_SPEC_VERSION = "14400434e1199c57d912082127b1d22643788d11" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) VALID: List[Container] = [ Container( name="retf_stack_validation_0", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=2), Section.Code( code=Op.PUSH0 * 2 + Op.RETF, code_outputs=2, max_stack_height=2, ), ], ), Container( name="retf_stack_validation_3", sections=[ Section.Code( code=Op.PUSH0 + Op.CALLF[1] + Op.STOP, max_stack_height=2, ), Section.Code( code=Op.RJUMPI[7] + Op.PUSH1[1] * 2 + Op.RJUMP[2] + Op.PUSH0 * 2 + Op.RETF, code_inputs=1, code_outputs=2, max_stack_height=2, ), ], ), Container( name="retf_code_input_output", sections=[ Section.Code(code=Op.PUSH0 + Op.CALLF[1] + Op.POP + Op.POP + Op.STOP), Section.Code( code=Op.PUSH0 + Op.RETF, code_outputs=1, ), ], ), Container( name="stack_height_equal_code_outputs_retf_zero_stop", sections=[ Section.Code( code=Op.CALLF[1] + Op.POP + Op.STOP, code_inputs=0, max_stack_height=1, ), Section.Code( code=( Op.RJUMPI[len(Op.PUSH0) + len(Op.RETF)](Op.ORIGIN) + Op.PUSH0 + Op.RETF + Op.STOP ), code_inputs=0, code_outputs=1, max_stack_height=1, ), ], ), Container( name="callf_max_code_sections_1", sections=[ Section.Code(code=(sum(Op.CALLF[i] for i in range(1, MAX_CODE_SECTIONS)) + Op.STOP)) ] + ( [ Section.Code( code=Op.RETF, code_outputs=0, ) ] * (MAX_CODE_SECTIONS - 1) ), ), Container( name="callf_max_code_sections_2", sections=[Section.Code(code=(Op.CALLF[1] + Op.STOP))] + [ Section.Code( code=(Op.CALLF[i + 2] + Op.RETF), code_outputs=0, ) for i in range(MAX_CODE_SECTIONS - 2) ] + [ Section.Code( code=Op.RETF, code_outputs=0, ) ], ), ] INVALID: List[Container] = [ Container( name="retf_stack_validation_1", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=2), Section.Code( code=Op.PUSH0 + Op.RETF, code_outputs=2, max_stack_height=1, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="retf_variable_stack_0", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=5), Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 * 2 + Op.RETF, code_outputs=5, max_stack_height=3, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="retf_variable_stack_1", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=3), Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 * 2 + Op.RETF, code_outputs=3, max_stack_height=3, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="retf_variable_stack_4", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=3), Section.Code( code=Op.PUSH0 * 3 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.POP * 2 + Op.RETF, code_outputs=3, max_stack_height=4, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="callf_inputs_underflow_0", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=1), Section.Code( code=Op.PUSH0 + Op.CALLF[2] + Op.RETF, code_outputs=1, max_stack_height=1, ), Section.Code( code=Op.POP + Op.RETF, code_inputs=2, code_outputs=1, max_stack_height=2, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( # CALLF to function with incorrectly specified number of inputs name="code_inputs_underflow_1", # EOF1I4750_0020 sections=[ Section.Code(code=(Op.PUSH0 + Op.PUSH0 + Op.CALLF[1] + Op.STOP)), Section.Code( code=(Op.ADD + Op.RETF), code_inputs=0, code_outputs=0, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="code_inputs_underflow_2", sections=[ Section.Code(code=(Op.PUSH0 + Op.CALLF[1] + Op.STOP)), Section.Code( code=(Op.POP + Op.POP + Op.RETF), code_inputs=1, code_outputs=0, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( # CALLF without enough inputs name="callf_inputs_underflow", # EOF1I4750_0019 sections=[ Section.Code(code=(Op.CALLF[1] + Op.STOP)), Section.Code( code=(Op.ADD + Op.RETF), code_inputs=2, code_outputs=1, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="retf_stack_validation_2", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=2), Section.Code( code=Op.PUSH0 * 3 + Op.RETF, code_outputs=2, max_stack_height=3, ), ], validity_error=EOFException.STACK_HIGHER_THAN_OUTPUTS, ), Container( name="retf_variable_stack_2", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=1), Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 * 2 + Op.RETF, code_outputs=1, max_stack_height=3, ), ], validity_error=EOFException.STACK_HIGHER_THAN_OUTPUTS, ), Container( name="retf_variable_stack_5", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=1), Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.PUSH0 + Op.RETF, code_outputs=1, max_stack_height=3, ), ], validity_error=EOFException.STACK_HIGHER_THAN_OUTPUTS, ), Container( name="retf_variable_stack_6", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=1), Section.Code( code=Op.PUSH0 * 2 + Op.PUSH1[0] + Op.RJUMPI[1] + Op.POP + Op.RETF, code_outputs=1, max_stack_height=3, ), ], validity_error=EOFException.STACK_HIGHER_THAN_OUTPUTS, ), Container( name="retf_variable_stack_3", sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP), Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 * 2 + Op.RETF, code_outputs=0, max_stack_height=3, ), ], validity_error=EOFException.STACK_HIGHER_THAN_OUTPUTS, ), Container( name="stack_higher_than_code_outputs", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), ), Section.Code( code=(Op.PUSH0 + Op.RETF), code_outputs=0, ), ], validity_error=EOFException.STACK_HIGHER_THAN_OUTPUTS, ), Container( name="stack_shorter_than_code_outputs", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), ), Section.Code( code=(Op.PUSH0 + Op.RETF), code_outputs=2, max_stack_height=1, ), ], validity_error=EOFException.INVALID_MAX_STACK_INCREASE, ), Container( name="stack_shorter_than_code_outputs_1", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), # max_stack_heights of sections aligned with actual stack max_stack_height=1, ), Section.Code( code=(Op.PUSH0 + Op.RETF), code_outputs=2, max_stack_height=1, ), ], validity_error=EOFException.INVALID_MAX_STACK_INCREASE, ), Container( name="stack_shorter_than_code_outputs_2", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), # max_stack_heights of sections aligned with declared outputs max_stack_height=2, ), Section.Code( code=(Op.PUSH0 + Op.RETF), code_outputs=2, max_stack_height=2, ), ], validity_error=EOFException.STACK_UNDERFLOW, ), Container( name="overflow_code_sections_1", sections=[ Section.Code( code=(Op.CALLF[1] + Op.STOP), ) ] + [ Section.Code( code=(Op.CALLF[i + 2] + Op.RETF), code_outputs=0, ) for i in range(MAX_CODE_SECTIONS) ] + [ Section.Code( code=Op.RETF, code_outputs=0, ) ], validity_error=EOFException.TOO_MANY_CODE_SECTIONS, ), ] def container_name(c: Container) -> str: """Return the name of the container for use in pytest ids.""" if hasattr(c, "name") and c.name is not None: return c.name else: return c.__class__.__name__ @pytest.mark.parametrize( "container", [*VALID, *INVALID], ids=container_name, ) def test_eof_validity( eof_test: EOFTestFiller, container: Container, ) -> None: """ Test EOF container validation for features around EIP-4750 / Functions / Code Sections. """ eof_test(container=container) @pytest.mark.parametrize( "container", [ Container( name="imm0", sections=[ Section.Code( code=Op.CALLF, ) ], ), Container( name="imm1", sections=[ Section.Code( code=Op.CALLF + b"\x00", ) ], ), Container( name="imm_from_next_section", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.CALLF[1] + Op.STOP, ), Section.Code( code=Op.CALLF + b"\x00", # would be valid with "02" + Op.RETF. code_inputs=2, code_outputs=1, max_stack_height=2, ), Section.Code( code=Op.SUB + Op.RETF, # SUB (0x02) can be confused with CALLF[2]. code_inputs=2, code_outputs=1, max_stack_height=2, ), ], ), ], ids=container_name, ) def test_callf_truncated_immediate( eof_test: EOFTestFiller, container: Container, ) -> None: """Test cases for CALLF instructions with truncated immediate bytes.""" eof_test(container=container, expect_exception=EOFException.TRUNCATED_INSTRUCTION) @pytest.mark.parametrize( "container", [ Container( name="callf1", # EOF1I4750_0010 sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ) ], ), Container( name="callf2", # EOF1I0011 sections=[ Section.Code( Op.CALLF[2] + Op.STOP, ), Section.Code( Op.RETF, code_outputs=0, ), ], ), Container( name="callf1_callf2", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.CALLF[2] + Op.RETF, code_outputs=0, ), ], ), ], ids=container_name, ) def test_invalid_code_section_index( eof_test: EOFTestFiller, container: Container, ) -> None: """ Test cases for CALLF instructions with invalid target code section index. """ eof_test(container=container, expect_exception=EOFException.INVALID_CODE_SECTION_INDEX) @pytest.mark.parametrize( "container", [ Container( name="unreachable1", sections=[ Section.Code(Op.INVALID), Section.Code(Op.INVALID), # unreachable ], ), Container( name="unreachable1_selfjumpf", sections=[ Section.Code(Op.INVALID), Section.Code(Op.JUMPF[1]), # unreachable ], ), Container( name="unreachable1_selfcallf", sections=[ Section.Code(Op.INVALID), Section.Code(Op.CALLF[1] + Op.STOP), # unreachable ], ), Container( name="unreachable1_jumpf0", sections=[ Section.Code(Op.INVALID), Section.Code(Op.JUMPF[0]), # unreachable ], ), Container( name="unreachable1_callf0", sections=[ Section.Code(Op.INVALID), Section.Code(Op.CALLF[0] + Op.STOP), # unreachable ], ), Container( name="unreachable1_selfcall_jumpf0", sections=[ Section.Code(Op.INVALID), Section.Code(Op.CALLF[1] + Op.JUMPF[0]), # unreachable ], ), Container( name="unreachable12_of3_2jumpf1", sections=[ Section.Code(Op.INVALID), Section.Code(Op.STOP), # unreachable Section.Code(Op.JUMPF[1]), # unreachable ], ), Container( name="unreachable12_of3_2callf1", sections=[ Section.Code(Op.INVALID), Section.Code(Op.STOP), # unreachable Section.Code(Op.CALLF[1] + Op.STOP), # unreachable ], ), Container( name="unreachable12_of3_jumpf_loop", sections=[ Section.Code(Op.INVALID), Section.Code(Op.JUMPF[2]), # unreachable Section.Code(Op.JUMPF[1]), # unreachable ], ), Container( name="unreachable12_of3_callf_loop_stop", sections=[ Section.Code(Op.INVALID), Section.Code(Op.CALLF[2] + Op.STOP), # unreachable Section.Code(Op.CALLF[1] + Op.STOP), # unreachable ], ), Container( name="unreachable12_of3_callf_loop_retf", sections=[ Section.Code(Op.INVALID), Section.Code(Op.CALLF[2] + Op.RETF, code_outputs=0), # unreachable Section.Code(Op.CALLF[1] + Op.RETF, code_outputs=0), # unreachable ], ), Container( name="unreachable12_of3_callf_loop_mixed", sections=[ Section.Code(Op.INVALID), Section.Code(Op.CALLF[2] + Op.STOP), # unreachable Section.Code(Op.CALLF[1] + Op.RETF, code_outputs=0), # unreachable ], ), Container( name="selfjumpf0_unreachable1", sections=[ Section.Code(Op.JUMPF[0]), # self-reference Section.Code(Op.JUMPF[1]), # unreachable ], ), Container( name="unreachable2_of3", sections=[ Section.Code(Op.CALLF[1] + Op.STOP), Section.Code(Op.RETF, code_outputs=0), Section.Code(Op.INVALID), # unreachable ], ), Container( name="unreachable1_of3", sections=[ Section.Code(Op.CALLF[2] + Op.STOP), Section.Code(Op.INVALID), # unreachable Section.Code(Op.RETF, code_outputs=0), ], ), Container( name="unreachable1_of4", sections=[ Section.Code(Op.CALLF[3] + Op.STOP), Section.Code(Op.INVALID), # unreachable Section.Code(Op.RETF, code_outputs=0), Section.Code(Op.CALLF[2] + Op.RETF, code_outputs=0), ], ), Container( name="unreachable2_of3_retf", sections=[ Section.Code(Op.JUMPF[1]), Section.Code(Op.STOP), Section.Code(Op.RETF, code_outputs=0), ], ), Container( name="unreachable2-255", sections=[ Section.Code(Op.JUMPF[1]), Section.Code(Op.JUMPF[1]), # self-reference ] + [Section.Code(Op.JUMPF[i]) for i in range(3, 255)] # unreachable + [Section.Code(Op.STOP)], # unreachable ), Container( name="unreachable255", sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 255)] + [ Section.Code(Op.JUMPF[254]), # self-reference Section.Code(Op.STOP), # unreachable ], ), ], ids=container_name, ) def test_unreachable_code_sections( eof_test: EOFTestFiller, container: Container, ) -> None: """ Test cases for EOF unreachable code sections (i.e. code sections not reachable from the code section 0). """ eof_test(container=container, expect_exception=EOFException.UNREACHABLE_CODE_SECTIONS) @pytest.mark.parametrize("callee_outputs", [1, 2, MAX_CODE_OUTPUTS]) def test_callf_stack_height_limit_exceeded(eof_test: EOFTestFiller, callee_outputs: int) -> None: """ Test for invalid EOF code containing CALLF instruction exceeding the stack height limit. The code reaches the maximum runtime stack height (1024) which is above the EOF limit for the stack height in the type section (1023). """ callf_stack_height = MAX_RUNTIME_STACK_HEIGHT - callee_outputs container = Container( sections=[ Section.Code( Op.PUSH0 * callf_stack_height + Op.CALLF[1] + Op.STOP, max_stack_height=MAX_RUNTIME_STACK_HEIGHT, ), Section.Code( Op.PUSH0 * callee_outputs + Op.RETF, code_outputs=callee_outputs, max_stack_height=callee_outputs, ), ], ) eof_test(container=container, expect_exception=EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT) @pytest.mark.parametrize("stack_height", [512, 513, 1023]) def test_callf_stack_overflow(eof_test: EOFTestFiller, stack_height: int) -> None: """ Test CALLF instruction recursively calling itself causing stack overflow. """ container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP), Section.Code( code=Op.PUSH1[1] * stack_height + Op.CALLF[1] + Op.POP * stack_height + Op.RETF, code_outputs=0, max_stack_height=stack_height, ), ], ) stack_overflow = stack_height > MAX_RUNTIME_STACK_HEIGHT // 2 eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) @pytest.mark.parametrize("stack_height", [1, 2]) def test_callf_stack_overflow_after_callf(eof_test: EOFTestFiller, stack_height: int) -> None: """ Test CALLF instruction calling next function causing stack overflow at validation time. """ container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP), Section.Code( code=Op.PUSH1[1] * 1023 + Op.CALLF[2] + Op.POP * 1023 + Op.RETF, code_outputs=0, max_stack_height=1023, ), Section.Code( code=Op.PUSH0 * stack_height + Op.POP * stack_height + Op.RETF, code_outputs=0, max_stack_height=stack_height, ), ], ) stack_overflow = 1023 + stack_height > MAX_RUNTIME_STACK_HEIGHT eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) @pytest.mark.parametrize("stack_height", [512, 514, 515]) def test_callf_stack_overflow_variable_stack(eof_test: EOFTestFiller, stack_height: int) -> None: """Test CALLF instruction causing stack overflow.""" container = Container( sections=[ Section.Code( code=Op.RJUMPI[2](0) + Op.PUSH0 * (MAX_RUNTIME_STACK_HEIGHT // 2) + Op.CALLF[1] + Op.STOP, max_stack_height=512, ), Section.Code( code=Op.PUSH1[1] * stack_height + Op.POP * stack_height + Op.RETF, code_outputs=0, max_stack_height=stack_height, ), ], ) stack_overflow = stack_height > MAX_RUNTIME_STACK_HEIGHT // 2 eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) @pytest.mark.parametrize("stack_height", [509, 510, 512]) def test_callf_stack_overflow_variable_stack_2(eof_test: EOFTestFiller, stack_height: int) -> None: """Test CALLF instruction causing stack overflow.""" container = Container( sections=[ Section.Code( code=Op.PUSH0 * 2 + Op.RJUMPI[2](0) + Op.POP * 2 + Op.PUSH0 * (MAX_RUNTIME_STACK_HEIGHT // 2) + Op.CALLF[1] + Op.STOP, max_stack_height=514, ), Section.Code( code=Op.PUSH1[1] * stack_height + Op.POP * stack_height + Op.RETF, code_outputs=0, max_stack_height=stack_height, ), ], ) stack_overflow = stack_height > (MAX_RUNTIME_STACK_HEIGHT // 2) - 2 eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) @pytest.mark.parametrize("stack_height", [1, 2, 5]) def test_callf_stack_overflow_variable_stack_3(eof_test: EOFTestFiller, stack_height: int) -> None: """Test CALLF instruction causing stack overflow.""" container = Container( sections=[ Section.Code( code=Op.RJUMPI[2](0) + Op.PUSH0 * (MAX_RUNTIME_STACK_HEIGHT - 1) + Op.CALLF[1] + Op.STOP, max_stack_height=1023, ), Section.Code( code=Op.PUSH0 * stack_height + Op.POP * stack_height + Op.RETF, code_outputs=0, max_stack_height=stack_height, ), ], ) assert container.sections[0].max_stack_height is not None stack_overflow = ( container.sections[0].max_stack_height + stack_height > MAX_RUNTIME_STACK_HEIGHT ) eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) def test_callf_stack_overflow_variable_stack_4(eof_test: EOFTestFiller) -> None: """Test reaching stack overflow before CALLF instruction.""" container = Container( sections=[ Section.Code( code=Op.PUSH0 * 2 + Op.RJUMPI[2](0) + Op.POP * 2 + Op.PUSH0 * (MAX_RUNTIME_STACK_HEIGHT - 1) + Op.CALLF[1] + Op.STOP, max_stack_height=1023, ), Section.Code( code=Op.RETF, code_outputs=0, max_stack_height=0, ), ], ) eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW, ) @pytest.mark.parametrize("stack_height", [2, 3]) def test_callf_validate_outputs(eof_test: EOFTestFiller, stack_height: int) -> None: """ Test CALLF instruction when calling a function returning more outputs than expected. """ container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=1), Section.Code( code=Op.PUSH0 * stack_height + Op.CALLF[2] + Op.RETF, code_outputs=1, max_stack_height=stack_height, ), Section.Code( code=Op.POP + Op.RETF, code_inputs=2, code_outputs=1, max_stack_height=2, ), ], ) # Only 1 item consumed by function 2, if stack height > 2 # there will be more than 1 item as outputs in function 1 outputs_error = stack_height > 2 eof_test( container=container, expect_exception=EOFException.STACK_HIGHER_THAN_OUTPUTS if outputs_error else None, ) @pytest.mark.parametrize("push_stack", [1023, 1024]) @pytest.mark.parametrize("pop_stack", [1019, 1020, 1021]) @pytest.mark.parametrize( "code_section", [ pytest.param( Section.Code( code=Op.POP * 2 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=2, ), id="pop2", ), pytest.param( Section.Code( code=Op.PUSH1[1] + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=4, ), id="push_pop", ), pytest.param( Section.Code( code=Op.PUSH0 * 2 + Op.RETF, code_inputs=3, code_outputs=5, max_stack_height=5, ), id="push2", ), pytest.param( Section.Code( code=Op.PUSH0 * 2 + Op.POP * 2 + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=5, ), id="push2_pop2", ), pytest.param( Section.Code( code=Op.PUSH0 + Op.POP * 3 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=3, ), id="push_pop3", ), pytest.param( Section.Code( code=Op.PUSH0 * 2 + Op.POP * 4 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=4, ), id="push2_pop4", ), ], ) def test_callf_with_inputs_stack_overflow( eof_test: EOFTestFiller, code_section: Section, push_stack: int, pop_stack: int ) -> None: """Test CALLF to code section with inputs.""" container = Container( name="callf_with_inputs_stack_overflow_0", sections=[ Section.Code( code=Op.PUSH1[1] * push_stack + Op.CALLF[1] + Op.POP * pop_stack + Op.RETURN, max_stack_height=1023, ), code_section, ], ) assert code_section.max_stack_height is not None exception = None if ( push_stack + code_section.max_stack_height - code_section.code_inputs > MAX_RUNTIME_STACK_HEIGHT ): exception = EOFException.STACK_OVERFLOW elif push_stack - code_section.code_inputs + code_section.code_outputs - pop_stack < 2: exception = EOFException.STACK_UNDERFLOW elif push_stack != container.sections[0].max_stack_height: exception = EOFException.INVALID_MAX_STACK_INCREASE eof_test(container=container, expect_exception=exception) @pytest.mark.parametrize( "code_section", [ pytest.param( Section.Code( code=Op.POP * 2 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=2, ), id="pop2", ), pytest.param( Section.Code( code=Op.PUSH1[1] + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=4, ), id="push_pop", ), pytest.param( Section.Code( code=Op.PUSH0 * 4 + Op.RETF, code_inputs=3, code_outputs=7, max_stack_height=7, ), id="push4", ), pytest.param( Section.Code( code=Op.PUSH0 * 2 + Op.RETF, code_inputs=3, code_outputs=5, max_stack_height=5, ), id="push2", ), pytest.param( Section.Code( code=Op.PUSH0 * 4 + Op.POP * 2 + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=7, ), id="push4_pop2", ), pytest.param( Section.Code( code=Op.PUSH0 * 2 + Op.POP * 2 + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=5, ), id="push2_pop2", ), pytest.param( Section.Code( code=Op.PUSH0 * 3 + Op.POP * 5 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=5, ), id="push3_pop5", ), pytest.param( Section.Code( code=Op.PUSH0 + Op.POP * 3 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=3, ), id="push_pop3", ), pytest.param( Section.Code( code=Op.PUSH0 * 4 + Op.POP * 6 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=6, ), id="push4_pop6", ), pytest.param( Section.Code( code=Op.PUSH0 * 2 + Op.POP * 4 + Op.RETF, code_inputs=2, code_outputs=0, max_stack_height=4, ), id="push2_pop4", ), ], ) @pytest.mark.parametrize("push_stack", [1020, 1021]) def test_callf_with_inputs_stack_overflow_variable_stack( eof_test: EOFTestFiller, code_section: Section, push_stack: int ) -> None: """Test CALLF to code section with inputs (variable stack).""" container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 * 2 + Op.PUSH1[1] * push_stack + Op.CALLF[1] + Op.STOP, max_stack_height=1023, ), code_section, ], ) initial_stack = 3 # Initial items in the scak assert code_section.max_stack_height is not None exception = None if ( push_stack + initial_stack + code_section.max_stack_height - code_section.code_inputs > MAX_RUNTIME_STACK_HEIGHT ): exception = EOFException.STACK_OVERFLOW elif push_stack + initial_stack > 1023: exception = EOFException.INVALID_MAX_STACK_INCREASE eof_test(container=container, expect_exception=exception) @pytest.mark.parametrize("callee_outputs", [1, 2, MAX_CODE_OUTPUTS - 1, MAX_CODE_OUTPUTS]) @pytest.mark.parametrize( "max_stack_height", [0, 1, MAX_STACK_INCREASE_LIMIT - 1, MAX_STACK_INCREASE_LIMIT] ) def test_callf_stack_overflow_by_outputs( eof_test: EOFTestFiller, callee_outputs: int, max_stack_height: int ) -> None: """ Test for invalid EOF code containing CALLF instruction exceeding the runtime stack height limit by calling a function with at least one output. The computed stack height of the code section 0 is always above the maximum allowed in the EOF type section. Therefore, the test declares an invalid max_stack_height. """ callf_stack_height = (MAX_RUNTIME_STACK_HEIGHT + 1) - callee_outputs container = Container( sections=[ Section.Code( Op.PUSH0 * callf_stack_height + Op.CALLF[1] + Op.STOP, max_stack_height=max_stack_height, ), Section.Code( Op.PUSH0 + Op.DUP1 + Op.RETF, code_outputs=callee_outputs, max_stack_height=callee_outputs, ), ], ) eof_test(container=container, expect_exception=EOFException.STACK_OVERFLOW) @pytest.mark.parametrize( "callee_stack_height", [2, 3, MAX_STACK_INCREASE_LIMIT - 1, MAX_STACK_INCREASE_LIMIT], ) def test_callf_stack_overflow_by_height(eof_test: EOFTestFiller, callee_stack_height: int) -> None: """ Test for invalid EOF code containing CALLF instruction exceeding the runtime stack height limit by calling a function with 2+ maximum stack height. The callee with the maximum stack height of 1 is valid because runtime limit (1024) is 1 bigger than the EOF limit (1023). """ container = Container( sections=[ Section.Code( Op.PUSH0 * MAX_STACK_INCREASE_LIMIT + Op.CALLF[1] + Op.STOP, max_stack_height=MAX_STACK_INCREASE_LIMIT, ), Section.Code( Op.PUSH0 * callee_stack_height + Op.POP * callee_stack_height + Op.RETF, code_outputs=0, max_stack_height=callee_stack_height, ), ], ) eof_test(container=container, expect_exception=EOFException.STACK_OVERFLOW) @pytest.mark.parametrize( "container", [ Container( name="underflow_1", sections=[ Section.Code( code=Op.CALLF[1] + Op.STOP, max_stack_height=1, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=1, code_outputs=2, max_stack_height=2, ), ], ), Container( name="underflow_2", sections=[ Section.Code( code=Op.CALLF[1] + Op.STOP, max_stack_height=2, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=1, code_outputs=2, max_stack_height=2, ), ], ), Container( name="underflow_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.CALLF[1] + Op.STOP, max_stack_height=4, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=4, code_outputs=5, max_stack_height=5, ), ], ), Container( name="underflow_variable_stack_2a", sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.CALLF[1] + Op.STOP, max_stack_height=5, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=4, code_outputs=5, max_stack_height=5, ), ], ), Container( name="underflow_variable_stack_3", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.CALLF[1] + Op.STOP, max_stack_height=4, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=3, code_outputs=4, max_stack_height=4, ), ], ), Container( name="underflow_variable_stack_4", sections=[ Section.Code( code=Op.PUSH0 * 3 + Op.RJUMPI[1](0) + Op.POP + Op.CALLF[1] + Op.STOP, max_stack_height=4, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=3, code_outputs=4, max_stack_height=4, ), ], ), ], ids=lambda x: x.name, ) def test_callf_stack_underflow_examples(eof_test: EOFTestFiller, container: Container) -> None: """Test CALLF instruction causing validation time stack underflow.""" eof_test(container=container, expect_exception=EOFException.STACK_UNDERFLOW) def test_returning_section_aborts( eof_test: EOFTestFiller, ) -> None: """ Test EOF container validation where in the same code section we have returning and nonreturning terminating instructions. """ container = Container( name="returning_section_aborts", sections=[ Section.Code(code=Op.PUSH0 + Op.CALLF[1] + Op.POP + Op.POP + Op.STOP), Section.Code( code=Op.PUSH0 * 2 + Op.RJUMPI[1] + Op.RETF + Op.INVALID, code_outputs=1, ), ], ) eof_test(container=container) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip5450_stack/__init__.py ================================================ """ Tests for [EIP-5450: EOF - Stack Validation](https://eips.ethereum.org/EIPS/eip-5450). EIP-5450 defines stack validation requirements to ensure consistent behavior during execution. Opcodes introduced: None (specifies validation rules for stack usage). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip5450_stack/test_code_validation.py ================================================ """ Code validation of CALLF, JUMPF, RETF opcodes in conjunction with static relative jumps. """ import itertools from enum import Enum, auto, unique from typing import Generator, Tuple, Union import pytest from ethereum_test_exceptions.exceptions import EOFException from ethereum_test_tools import Account, EOFStateTestFiller, EOFTestFiller from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_STACK_INCREASE_LIMIT, NON_RETURNING_SECTION from ethereum_test_vm import Bytecode, Opcode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..eip3540_eof_v1.test_all_opcodes_in_container import valid_eof_opcodes from ..eip7620_eof_create.helpers import ( smallest_initcode_subcontainer, smallest_runtime_subcontainer, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-5450.md" REFERENCE_SPEC_VERSION = "f20b164b00ae5553f7536a6d7a83a0f254455e09" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @unique class RjumpKind(Enum): """Kinds of RJUMP* instruction snippets to generate.""" EMPTY_RJUMP = auto() EMPTY_RJUMPI = auto() RJUMPI_OVER_PUSH = auto() RJUMPI_OVER_NOOP = auto() RJUMPI_OVER_STOP = auto() RJUMPI_OVER_PUSH_POP = auto() RJUMPI_OVER_POP = auto() RJUMPI_OVER_NEXT = auto() RJUMPI_OVER_NEXT_NESTED = auto() RJUMPI_TO_START = auto() RJUMPV_EMPTY_AND_OVER_NEXT = auto() RJUMPV_OVER_PUSH_AND_TO_START = auto() RJUMPI_OVER_RETF = auto() def __str__(self) -> str: """Return string representation of the enum.""" return f"{self.name}" @unique class RjumpSpot(Enum): """ Possible spots in the code section layout where the RJUMP* is injected. """ BEGINNING = auto() BEFORE_TERMINATION = auto() def __str__(self) -> str: """Return string representation of the enum.""" return f"{self.name}" def rjump_code_with( rjump_kind: RjumpKind | None, code_so_far_len: int, next_code: Bytecode ) -> Tuple[Bytecode, bool, bool, bool]: """ Unless `rjump_kind` is None generates a code snippet with an RJUMP* instruction. For some kinds `code_so_far_len` must be code length in bytes preceding the snippet. For some kinds `next_code_len` must be code length in bytes of some code which follows. It is expected that the snippet and the jump target are valid, but the resulting code or its stack balance might not. Also returns some traits of the snippet: `is_backwards`, `pops` and `pushes` """ body = Bytecode() is_backwards = False pops = False pushes = False jumps_over_next = False if rjump_kind == RjumpKind.EMPTY_RJUMP: body = Op.RJUMP[0] elif rjump_kind == RjumpKind.EMPTY_RJUMPI: body = Op.RJUMPI[0](0) elif rjump_kind == RjumpKind.RJUMPI_OVER_PUSH: body = Op.RJUMPI[1](0) + Op.PUSH0 pushes = True elif rjump_kind == RjumpKind.RJUMPI_OVER_NOOP: body = Op.RJUMPI[1](0) + Op.NOOP elif rjump_kind == RjumpKind.RJUMPI_OVER_STOP: body = Op.RJUMPI[1](0) + Op.STOP elif rjump_kind == RjumpKind.RJUMPI_OVER_PUSH_POP: body = Op.RJUMPI[2](0) + Op.PUSH0 + Op.POP elif rjump_kind == RjumpKind.RJUMPI_OVER_POP: body = Op.RJUMPI[1](0) + Op.POP pops = True elif rjump_kind == RjumpKind.RJUMPI_OVER_NEXT: body = Op.RJUMPI[len(next_code)](0) jumps_over_next = True elif rjump_kind == RjumpKind.RJUMPI_OVER_NEXT_NESTED: rjump_inner = Op.RJUMPI[len(next_code)](0) body = Op.RJUMPI[len(rjump_inner)](0) + rjump_inner jumps_over_next = True elif rjump_kind == RjumpKind.RJUMPI_TO_START: rjumpi_len = len(Op.RJUMPI[0](0)) body = Op.RJUMPI[-code_so_far_len - rjumpi_len](0) is_backwards = True elif rjump_kind == RjumpKind.RJUMPV_EMPTY_AND_OVER_NEXT: body = Op.RJUMPV[[0, len(next_code)]](0) jumps_over_next = True elif rjump_kind == RjumpKind.RJUMPV_OVER_PUSH_AND_TO_START: rjumpv_two_destinations_len = len(Op.RJUMPV[[0, 0]](0)) body = Op.RJUMPV[[1, -code_so_far_len - rjumpv_two_destinations_len]](0) + Op.PUSH0 is_backwards = True pushes = True elif rjump_kind == RjumpKind.RJUMPI_OVER_RETF: body = Op.RJUMPI[1](0) + Op.RETF elif not rjump_kind: pass else: raise TypeError("unknown rjumps value" + str(rjump_kind)) if jumps_over_next: # This is against intuition, but if the code we're jumping over pushes, # the path which misses it will be short of stack items, as if the # RJUMP* popped and vice versa. if next_code.pushed_stack_items > next_code.popped_stack_items: pops = True elif next_code.popped_stack_items > next_code.pushed_stack_items: pushes = True return body, is_backwards, pops, pushes def call_code_with(inputs: int, outputs: int, call: Bytecode) -> Bytecode: """ Generate code snippet with the `call` bytecode provided and its respective input/output management. `inputs` and `outputs` are understood as those of the code section we're generating for. """ body = Bytecode() if call.popped_stack_items > inputs: body += Op.PUSH0 * (call.popped_stack_items - inputs) elif call.popped_stack_items < inputs: body += Op.POP * (inputs - call.popped_stack_items) body += call if call.pushed_stack_items < outputs: body += Op.PUSH0 * (outputs - call.pushed_stack_items) elif call.pushed_stack_items > outputs: body += Op.POP * (call.pushed_stack_items - outputs) return body def section_code_with( inputs: int, outputs: int, rjump_kind: RjumpKind | None, rjump_spot: RjumpSpot, call: Bytecode | None, termination: Bytecode, ) -> Tuple[Bytecode, bool, bool, bool, bool]: """ Generate code section with RJUMP* and CALLF/RETF instructions. Also returns some traits of the section: `has_invalid_back_jump`, `rjump_snippet_pops`, `rjump_snippet_pushes`, `rjump_falls_off_code` """ code = Bytecode() code.pushed_stack_items, code.max_stack_height = (inputs, inputs) if call: body = call_code_with(inputs, outputs, call) else: body = Op.POP * inputs + Op.PUSH0 * outputs has_invalid_back_jump = False rjump_snippet_pushes = False rjump_snippet_pops = False rjump_falls_off_code = False if rjump_spot == RjumpSpot.BEGINNING: rjump, is_backwards, rjump_snippet_pops, rjump_snippet_pushes = rjump_code_with( rjump_kind, 0, body ) if rjump_kind == RjumpKind.RJUMPI_OVER_RETF: if inputs > outputs: rjump_snippet_pushes = True elif outputs > inputs: rjump_snippet_pops = True code += rjump code += body if rjump_spot == RjumpSpot.BEFORE_TERMINATION: rjump, is_backwards, rjump_snippet_pops, rjump_snippet_pushes = rjump_code_with( rjump_kind, len(code), next_code=termination ) code += rjump if is_backwards and inputs != outputs: has_invalid_back_jump = True if rjump_spot == RjumpSpot.BEFORE_TERMINATION or ( rjump_spot == RjumpSpot.BEGINNING and len(termination) == 0 ): if rjump_kind in [ RjumpKind.RJUMPI_OVER_NEXT, RjumpKind.RJUMPI_OVER_NEXT_NESTED, RjumpKind.RJUMPV_EMPTY_AND_OVER_NEXT, ]: # Jump over termination or jump over body, but there is nothing # after the body. rjump_falls_off_code = True code += termination return ( code, has_invalid_back_jump, rjump_snippet_pops, rjump_snippet_pushes, rjump_falls_off_code, ) num_sections = 3 possible_inputs_outputs = range(2) @pytest.mark.parametrize( ["inputs", "outputs"], itertools.product( list(itertools.product(*([possible_inputs_outputs] * (num_sections - 1)))), list(itertools.product(*([possible_inputs_outputs] * (num_sections - 1)))), ), ) @pytest.mark.parametrize( "rjump_kind", RjumpKind, ) # Parameter value fixed for first iteration, to cover the most important case. @pytest.mark.parametrize("rjump_section_idx", [0, 1]) @pytest.mark.parametrize( "rjump_spot", RjumpSpot, ) def test_rjumps_callf_retf( eof_test: EOFTestFiller, inputs: Tuple[int, ...], outputs: Tuple[int, ...], rjump_kind: RjumpKind, rjump_section_idx: int, rjump_spot: RjumpSpot, ) -> None: """ Test EOF container validation for EIP-4200 vs EIP-4750 interactions. Each test's code consists of `num_sections` code sections, which call into one another and then return. Code may include RJUMP* snippets of `rjump_kind` in various `rjump_spots`. """ # Zeroth section has always 0 inputs and 0 outputs, so is excluded from # param inputs = (0,) + inputs outputs = (0,) + outputs assert len(inputs) == len(outputs) == num_sections sections = [] container_has_invalid_back_jump = False container_has_rjump_pops = False container_has_rjump_pushes = False container_has_rjump_off_code = False container_has_section_0_retf = ( rjump_section_idx == 0 and rjump_kind == RjumpKind.RJUMPI_OVER_RETF ) for section_idx in range(num_sections): if section_idx == 0: call = Op.CALLF[section_idx + 1] call.popped_stack_items = inputs[section_idx + 1] call.pushed_stack_items = outputs[section_idx + 1] call.min_stack_height = call.popped_stack_items call.max_stack_height = max(call.popped_stack_items, call.pushed_stack_items) termination = Op.STOP elif section_idx < num_sections - 1: call = Op.CALLF[section_idx + 1] call.popped_stack_items = inputs[section_idx + 1] call.pushed_stack_items = outputs[section_idx + 1] call.min_stack_height = call.popped_stack_items call.max_stack_height = max(call.popped_stack_items, call.pushed_stack_items) termination = Op.RETF else: call = None termination = Op.RETF ( code, section_has_invalid_back_jump, rjump_snippet_pops, rjump_snippet_pushes, rjump_falls_off_code, ) = section_code_with( inputs[section_idx], outputs[section_idx], rjump_kind if rjump_section_idx == section_idx else None, rjump_spot, call, termination, ) if section_has_invalid_back_jump: container_has_invalid_back_jump = True if rjump_snippet_pops: container_has_rjump_pops = True # Pushes to the stack never affect the zeroth section, because it # `STOP`s and not `RETF`s. if rjump_snippet_pushes and section_idx != 0: container_has_rjump_pushes = True if rjump_falls_off_code: container_has_rjump_off_code = True if section_idx > 0: sections.append( Section.Code( code, code_inputs=inputs[section_idx], code_outputs=outputs[section_idx], ) ) else: sections.append(Section.Code(code)) possible_exceptions = [] if container_has_invalid_back_jump: possible_exceptions.append(EOFException.STACK_HEIGHT_MISMATCH) if container_has_rjump_pops: possible_exceptions.append(EOFException.STACK_UNDERFLOW) if container_has_rjump_pushes: possible_exceptions.append(EOFException.STACK_HIGHER_THAN_OUTPUTS) if container_has_rjump_off_code: possible_exceptions.append(EOFException.INVALID_RJUMP_DESTINATION) if container_has_section_0_retf: possible_exceptions.append(EOFException.INVALID_NON_RETURNING_FLAG) eof_test(container=Container(sections=sections), expect_exception=possible_exceptions or None) @pytest.mark.parametrize( "inputs", itertools.product(*([possible_inputs_outputs] * (num_sections - 1))) ) @pytest.mark.parametrize( "rjump_kind", RjumpKind, ) # Parameter value fixed for first iteration, to cover the most important case. @pytest.mark.parametrize("rjump_section_idx", [0, 1]) @pytest.mark.parametrize( "rjump_spot", # `termination` is empty for JUMPF codes, because JUMPF serves as one. Spot # `BEFORE_TERMINATION` is unreachable code. [k for k in RjumpSpot if k not in [RjumpSpot.BEFORE_TERMINATION]], ) def test_rjumps_jumpf_nonreturning( eof_test: EOFTestFiller, inputs: Tuple[int, ...], rjump_kind: RjumpKind, rjump_section_idx: int, rjump_spot: RjumpSpot, ) -> None: """ Test EOF container validation for EIP-4200 vs EIP-6206 interactions on non-returning functions. """ # Zeroth section has always 0 inputs and 0 outputs, so is excluded from # param inputs = (0,) + inputs sections = [] container_has_rjump_pops = False container_has_rjump_off_code = False container_has_non_returning_retf = False for section_idx in range(num_sections): if section_idx < num_sections - 1: call = Op.JUMPF[section_idx + 1] call.popped_stack_items = inputs[section_idx + 1] call.pushed_stack_items = 0 call.min_stack_height = call.popped_stack_items call.max_stack_height = max(call.popped_stack_items, call.pushed_stack_items) termination = Bytecode() else: call = None termination = Op.STOP # `section_has_invalid_back_jump` - never happens: we excluded RJUMP # from the end `rjump_snippet_pushes` - never happens: we never RETF # where too large stack would fail ( code, _section_has_invalid_back_jump, rjump_snippet_pops, _rjump_snippet_pushes, rjump_falls_off_code, ) = section_code_with( inputs[section_idx], 0, rjump_kind if rjump_section_idx == section_idx else None, rjump_spot, call, termination, ) if rjump_snippet_pops: container_has_rjump_pops = True if rjump_falls_off_code: container_has_rjump_off_code = True if rjump_kind == RjumpKind.RJUMPI_OVER_RETF: container_has_non_returning_retf = True if section_idx > 0: sections.append( Section.Code( code, code_inputs=inputs[section_idx], code_outputs=NON_RETURNING_SECTION, ) ) else: sections.append(Section.Code(code)) possible_exceptions = [] if container_has_rjump_pops: possible_exceptions.append(EOFException.STACK_UNDERFLOW) if container_has_rjump_off_code: possible_exceptions.append(EOFException.INVALID_RJUMP_DESTINATION) if container_has_non_returning_retf: possible_exceptions.append(EOFException.INVALID_NON_RETURNING_FLAG) eof_test(container=Container(sections=sections), expect_exception=possible_exceptions or None) def gen_stack_underflow_params() -> Generator[tuple[Union[Op, Opcode], int], None, None]: """Generate parameters for stack underflow tests.""" opcodes = sorted(op for op in valid_eof_opcodes if op.min_stack_height > 0) + [ # Opcodes that have variable min_stack_height Op.SWAPN[0x00], Op.SWAPN[0xFF], Op.DUPN[0x00], Op.DUPN[0xFF], Op.EXCHANGE[0x00], Op.EXCHANGE[0xFF], ] for op in opcodes: yield op, 0 if op.min_stack_height > 1: yield op, op.min_stack_height - 1 @pytest.mark.parametrize("spread", [-1, 0, 1, MAX_STACK_INCREASE_LIMIT]) @pytest.mark.parametrize("op,stack_height", gen_stack_underflow_params()) def test_all_opcodes_stack_underflow( eof_test: EOFTestFiller, op: Op, stack_height: int, spread: int ) -> None: """ Test EOF validation failing due to stack overflow caused by the specific instruction `op`. """ code = Bytecode() if spread >= 0: # Check if the op increases the stack height (e.g. DUP instructions). # We need to leave space for this increase not to cause stack overflow. max_stack_increase = max(op.pushed_stack_items - op.popped_stack_items, 0) # Cap the spread if it would exceed the maximum stack height. spread = min(spread, MAX_STACK_INCREASE_LIMIT - (stack_height + max_stack_increase)) # Create a range stack height of 0-spread. code += Op.RJUMPI[spread](Op.CALLVALUE) + Op.PUSH0 * spread # Create the desired stack height. code += Op.PUSH0 * stack_height if op.has_data_portion(): code += op[0] # produce required imm bytes else: code += op if not op.terminating: code += Op.STOP sections = [ Section.Code( code, # Set reasonable stack height. Don't rely on automatic calculation, # because we are in the invalid stack height scenario. max_stack_height=max(spread, stack_height, int(spread >= 0)), ) ] if op == Op.EOFCREATE: # Make EOFCREATE valid by adding the target subcontainer. sections.append(Section.Container(smallest_initcode_subcontainer)) elif op == Op.RETURNCODE: # Make RETURNCODE valid by wrapping it with a container with EOFCREATE. sections = [ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container( container=Container( sections=[ sections[0], Section.Container(smallest_runtime_subcontainer), ] ) ), ] eof_test( container=Container( sections=sections, validity_error=EOFException.STACK_UNDERFLOW, ) ) @pytest.mark.parametrize( "container", [ Container( name="underflow_0", sections=[ Section.Code( code=Op.ADD + Op.STOP, max_stack_height=1, ), ], ), Container( name="underflow_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.LOG2 + Op.STOP, max_stack_height=3, ), ], ), Container( name="underflow_variable_stack_1", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.ADD + Op.STOP, max_stack_height=3, ), ], ), Container( name="underflow_variable_stack_2", sections=[ Section.Code( code=Op.PUSH0 * 2 + Op.RJUMPI[1](0) + Op.POP + Op.ADD + Op.STOP, max_stack_height=3, ), ], ), Container( name="underflow_variable_stack_3", sections=[ Section.Code( Op.RJUMPI[8](0) + Op.PUSH0 * 2 + Op.RJUMPI[1](0) + Op.POP * 2 + Op.PUSH0 * 2 + Op.REVERT, max_stack_height=3, ), ], ), ], ids=lambda x: x.name, ) def test_stack_underflow_examples(eof_test: EOFTestFiller, container: Container) -> None: """ Test EOF validation failing due to stack underflow at basic instructions. """ eof_test(container=container, expect_exception=EOFException.STACK_UNDERFLOW) @pytest.mark.parametrize("initial_stack", [0, 1, 2]) @pytest.mark.parametrize("calldata_1", [0, 1]) @pytest.mark.parametrize("calldata_2", [0, 1]) def test_valid_non_constant_stack_examples( eof_state_test: EOFStateTestFiller, initial_stack: int, calldata_1: int, calldata_2: int ) -> None: """Test valid containers with non constant stack items.""" # Stores the number of added items to the stack in storage slot 0 # calldata_1 == 1: number of items = 2 # calldata_1 == 0: # calldata_2 == 0: number of items: 3 # calldata_2 == 1: number of items: 4 expected_storage = {0: 2} if calldata_1 == 1 else ({0: 3} if calldata_2 == 0 else {0: 4}) data = calldata_1.to_bytes(32, "big") + calldata_2.to_bytes(32, "big") container = Container( sections=[ Section.Code( code=Op.PUSH0 * initial_stack + Op.CALLDATALOAD(0) + Op.RJUMPI[19] + Op.PUSH0 * 2 + Op.SSTORE(0, 2) # Stores added items (2) + Op.CALLDATALOAD(32) + Op.RJUMPI[6] + Op.POP + Op.SSTORE(0, 1) # Updates number of added items to 1 + Op.PUSH0 * 2 # <-- RJUMPI[19]/RJUMPI[6] target + Op.SLOAD(0) + Op.PUSH1(2) + Op.ADD # Add latest added items (+2) + Op.PUSH1(0) + Op.SSTORE + Op.STOP, max_stack_height=6 + initial_stack, ), ], ) eof_state_test( container=container, expect_exception=None, data=data, container_post=Account(storage=expected_storage), ) @pytest.mark.parametrize("num_rjumpi", [MAX_STACK_INCREASE_LIMIT, MAX_STACK_INCREASE_LIMIT + 1]) def test_stack_range_maximally_broad(eof_test: EOFTestFiller, num_rjumpi: int) -> None: """Test stack range 0-1023 at final instruction.""" code = Op.STOP() for i in range(0, num_rjumpi): offset = i * 5 + 1 code = Op.PUSH0 + Op.RJUMPI[offset] + Op.PUSH0 + code container = Container.Code(code=code, max_stack_increase=MAX_STACK_INCREASE_LIMIT) eof_test( container=container, expect_exception=None if num_rjumpi <= MAX_STACK_INCREASE_LIMIT else EOFException.INVALID_MAX_STACK_INCREASE, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip5450_stack/test_execution.py ================================================ """Test execution of EOF code in the context of the operand stack height.""" import pytest from ethereum_test_exceptions import EOFException from ethereum_test_tools import Account, EOFStateTestFiller from ethereum_test_types.eof.constants import MAX_RUNTIME_STACK_HEIGHT from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import ( MAX_CODE_INPUTS, MAX_STACK_INCREASE_LIMIT, NON_RETURNING_SECTION, ) from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-5450.md" REFERENCE_SPEC_VERSION = "f20b164b00ae5553f7536a6d7a83a0f254455e09" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize("code_inputs", [0, 1, 16, 127, 128]) @pytest.mark.parametrize("call_op", [Op.CALLF, Op.JUMPF]) def test_execution_at_max_stack_height( eof_state_test: EOFStateTestFiller, code_inputs: int, call_op: Op, ) -> None: """ Test execution at the maximum runtime operand stack height (1024). EOF doesn't allow to increase the stack height of a single code section more than 1023. The effect of the maximum runtime stack height is achieved by using non-zero number of the code section inputs and increasing the runtime stack to the limit accordingly. The test pushes consecutive numbers starting from 0 (including inputs). At the maximum stack height SSTORE is used so it should store 1022 at key 1023. """ max_stack_increase = MAX_RUNTIME_STACK_HEIGHT - code_inputs container = Container( sections=[ Section.Code( ( sum(Op.PUSH1(x) for x in range(code_inputs)) + call_op[1] + (Op.STOP if call_op == Op.CALLF else b"") ), ), Section.Code( sum(Op.PUSH2(x) for x in range(code_inputs, MAX_RUNTIME_STACK_HEIGHT)) + Op.SSTORE + Op.POP * (MAX_RUNTIME_STACK_HEIGHT - Op.SSTORE.popped_stack_items) + (Op.RETF if call_op == Op.CALLF else Op.STOP), code_inputs=code_inputs, code_outputs=0 if call_op == Op.CALLF else NON_RETURNING_SECTION, max_stack_increase=max_stack_increase, ), ], ) exception = None if max_stack_increase > MAX_STACK_INCREASE_LIMIT: exception = EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT elif code_inputs > MAX_CODE_INPUTS: exception = EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT eof_state_test( container=container, expect_exception=exception, container_post=Account( storage={MAX_RUNTIME_STACK_HEIGHT - 1: MAX_RUNTIME_STACK_HEIGHT - 2} ), ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/__init__.py ================================================ """ Test cases for [EIP-6206: EOF - JUMPF and non-returning functions](https:// eips.ethereum.org/EIPS/eip-6206). EIP-6206 adds a conditional forward jump instruction and support for functions without return values. Opcodes introduced: `JUMPF` (`0xE5`). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/helpers.py ================================================ """EOF JumpF tests helpers.""" import itertools """Storage addresses for common testing fields""" _slot = itertools.count() next(_slot) # don't use slot 0 slot_code_worked = next(_slot) slot_last_slot = next(_slot) slot_stack_canary = next(_slot) """Storage values for common testing fields""" value_code_worked = 0x2015 value_canary_written = 0xDEADB12D ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/spec.py ================================================ """EOF V1 Constants used throughout all tests.""" ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py ================================================ """EOF JUMPF tests covering simple cases.""" import pytest from ethereum_test_base_types import Storage from ethereum_test_specs import StateTestFiller from ethereum_test_tools import Account, Environment, EOFException, EOFStateTestFiller, Transaction from ethereum_test_types import Alloc from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import NON_RETURNING_SECTION from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import ( slot_code_worked, slot_stack_canary, value_canary_written, value_code_worked, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6206.md" REFERENCE_SPEC_VERSION = "2f365ea0cd58faa6e26013ea77ce6d538175f7d0" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_jumpf_forward( eof_state_test: EOFStateTestFiller, ) -> None: """Test JUMPF jumping forward.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.JUMPF[1], ), Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), data=b"\1", ) @pytest.mark.parametrize( "container", [ Container( name="forward", sections=[ Section.Code( code=Op.CALLF[1] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Code( code=Op.JUMPF[2], code_outputs=0, ), Section.Code( code=Op.RETF, code_outputs=0, ), ], ), Container( name="backward", sections=[ Section.Code( code=Op.CALLF[2] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Code( code=Op.RETF, code_outputs=0, ), Section.Code( code=Op.JUMPF[1], code_outputs=0, ), ], ), Container( name="equal_outputs", sections=[ Section.Code( Op.CALLF[1] + Op.SSTORE + Op.STOP, max_stack_height=2, ), Section.Code( Op.JUMPF[2], code_outputs=2, max_stack_height=0, ), Section.Code( Op.PUSH2[value_code_worked] + Op.PUSH2[slot_code_worked] + Op.RETF, code_outputs=2, max_stack_height=2, ), ], ), Container( name="compatible_outputs", sections=[ Section.Code( code=Op.CALLF[1] + Op.SSTORE + Op.STOP, max_stack_height=2, ), Section.Code( Op.PUSH2[value_code_worked] + Op.JUMPF[2], code_outputs=2, max_stack_height=1, ), Section.Code( Op.PUSH2[slot_code_worked] + Op.RETF, code_outputs=1, max_stack_height=1, ), ], ), ], ids=lambda container: container.name, ) def test_jumpf_to_retf(eof_state_test: EOFStateTestFiller, container: Container) -> None: """Tests JUMPF to a returning section with RETF.""" eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), data=b"\1", ) def test_jumpf_to_self( eof_state_test: EOFStateTestFiller, ) -> None: """Tests JUMPF jumping to self.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.SLOAD(slot_code_worked) + Op.ISZERO + Op.RJUMPI[1] + Op.STOP + Op.SSTORE(slot_code_worked, value_code_worked) + Op.JUMPF[0], ) ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), data=b"\1", ) @pytest.mark.parametrize( "container", [ Container( name="1_to_2_arg0", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.PUSH0 + Op.RJUMPI[3] + Op.JUMPF[2] + Op.RETF, code_outputs=0, ), Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETF, code_outputs=0, ), ], ), Container( name="1_to_2_arg1", sections=[ Section.Code( Op.PUSH1[1] + Op.CALLF[1] + Op.STOP, ), Section.Code( Op.RJUMPI[1] + Op.RETF + Op.SSTORE(slot_code_worked, value_code_worked) + Op.JUMPF[2], code_inputs=1, code_outputs=0, ), Section.Code( Op.RETF, code_outputs=0, ), ], ), Container( name="1_to_0_to_1", sections=[ Section.Code( Op.ISZERO(Op.SLOAD(slot_code_worked)) + Op.CALLF[1] + Op.STOP, ), Section.Code( Op.RJUMPI[1] + Op.RETF + Op.SSTORE(slot_code_worked, value_code_worked) + Op.JUMPF[0], code_inputs=1, code_outputs=0, ), ], ), Container( name="retf_in_nonreturning", sections=[ Section.Code( Op.PUSH0 + Op.JUMPF[1], ), Section.Code( Op.RJUMPI[1] + Op.RETF + Op.JUMPF[0], code_inputs=1, ), ], validity_error=EOFException.INVALID_NON_RETURNING_FLAG, ), Container( name="jumpf_to_returning", sections=[ Section.Code( Op.PUSH0 + Op.JUMPF[1], ), Section.Code( Op.RJUMPI[1] + Op.RETF + Op.JUMPF[2], code_inputs=1, ), Section.Code( Op.RETF, code_outputs=0, ), ], validity_error=EOFException.INVALID_NON_RETURNING_FLAG, ), Container( name="jumpf_to_returning_2", sections=[ Section.Code( Op.PUSH0 + Op.JUMPF[1], ), Section.Code( Op.RJUMPI[3] + Op.JUMPF[2] + Op.RETF, code_inputs=1, ), Section.Code( Op.RETF, code_outputs=0, ), ], validity_error=EOFException.INVALID_NON_RETURNING_FLAG, ), ], ids=lambda container: container.name, ) def test_jumpf_and_retf(eof_state_test: EOFStateTestFiller, container: Container) -> None: """Tests JUMPF and RETF in the same section.""" eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_jumpf_too_large( eof_state_test: EOFStateTestFiller, ) -> None: """Tests JUMPF jumping to a section outside the max section range.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.JUMPF[1025], ) ], validity_error=EOFException.INVALID_CODE_SECTION_INDEX, ), ) def test_jumpf_way_too_large( eof_state_test: EOFStateTestFiller, ) -> None: """Tests JUMPF jumping to uint64.MAX.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.JUMPF[0xFFFF], ) ], validity_error=EOFException.INVALID_CODE_SECTION_INDEX, ), ) def test_jumpf_to_nonexistent_section( eof_state_test: EOFStateTestFiller, ) -> None: """ Tests JUMPF jumping to valid section number but where the section does not exist. """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.JUMPF[5], ) ], validity_error=EOFException.INVALID_CODE_SECTION_INDEX, ), ) def test_callf_to_non_returning_section( eof_state_test: EOFStateTestFiller, ) -> None: """Tests CALLF into a non-returning section.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.CALLF[1], ), Section.Code( code=Op.STOP, code_outputs=0, ), ], validity_error=EOFException.MISSING_STOP_OPCODE, ), ) def test_jumpf_stack_size_1024( eof_state_test: EOFStateTestFiller, ) -> None: """Test stack reaching 1024 items in target function of JUMPF.""" eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 1022 + Op.JUMPF[1], max_stack_height=1022, ), Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, code_inputs=0, code_outputs=NON_RETURNING_SECTION, max_stack_height=2, ), ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_jumpf_with_inputs_stack_size_1024( eof_state_test: EOFStateTestFiller, ) -> None: """ Test stack reaching 1024 items in target function of JUMPF with inputs. """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 1022 + Op.JUMPF[1], max_stack_height=1022, ), Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, code_inputs=3, code_outputs=NON_RETURNING_SECTION, max_stack_height=5, ), ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_jumpf_stack_size_1024_at_push( eof_state_test: EOFStateTestFiller, ) -> None: """ Test stack reaching 1024 items in JUMPF target function at PUSH0 instruction. """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), max_stack_height=1023, ), Section.Code( # stack has 1023 items Op.JUMPF[2], code_inputs=0, code_outputs=0, max_stack_height=0, ), Section.Code( Op.PUSH0 + # stack has 1024 items Op.POP + Op.RETF, code_inputs=0, code_outputs=0, max_stack_height=1, ), ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( ("stack_height", "failure"), ( pytest.param(1021, False, id="no_overflow"), pytest.param(1022, True, id="rule_overflow"), pytest.param(1023, True, id="execution_overflow"), ), ) def test_jumpf_stack_overflow( stack_height: int, failure: bool, eof_state_test: EOFStateTestFiller, ) -> None: """ Test rule #2 in execution semantics, where we make sure we have enough stack to guarantee safe execution (the "reserved stack rule") max possible stack will not exceed 1024. But some executions may not overflow the stack, so we need to ensure the rule is checked. `no_overflow` - the stack does not overflow at JUMPF call, executes to end `rule_overflow` - reserved stack rule triggers, but execution would not overflow if allowed `execution_overflow` - execution would overflow (but still blocked by reserved stack rule) """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * stack_height + Op.CALLF[1] + Op.POP * stack_height + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), max_stack_height=stack_height, ), Section.Code( # Stack has stack_height items Op.JUMPF[2], code_inputs=0, code_outputs=0, max_stack_height=0, ), Section.Code( Op.CALLDATALOAD(0) + Op.ISZERO + Op.RJUMPI[6] + Op.PUSH0 * 3 + Op.POP * 3 + Op.SSTORE(slot_stack_canary, value_canary_written) + Op.RETF, code_inputs=0, code_outputs=0, max_stack_height=3, ), ], ), container_post=Account( storage={ slot_code_worked: 0 if failure else value_code_worked, slot_stack_canary: 0 if failure else value_canary_written, } ), ) def test_jumpf_with_inputs_stack_size_1024_at_push( eof_state_test: EOFStateTestFiller, ) -> None: """ Test stack reaching 1024 items in JUMPF target function with inputs at PUSH0 instruction. """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), max_stack_height=1023, ), Section.Code( # Stack has 1023 items Op.JUMPF[2], code_inputs=3, code_outputs=3, max_stack_height=3, ), Section.Code( Op.PUSH0 + # Stack has 1024 items Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=4, ), ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_jumpf_with_inputs_stack_overflow( eof_state_test: EOFStateTestFiller, ) -> None: """ Test stack overflowing 1024 items in JUMPF target function with inputs. """ eof_state_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 * 1023 + Op.CALLF[1] + Op.POP * 1023 + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, 0), max_stack_height=1023, ), Section.Code( # Stack has 1023 items Op.JUMPF[2], code_inputs=3, code_outputs=3, max_stack_height=3, ), Section.Code( Op.PUSH0 + Op.PUSH0 + # Runtime stackoverflow Op.POP + Op.POP + Op.RETF, code_inputs=3, code_outputs=3, max_stack_height=5, ), ], ), container_post=Account(storage={slot_code_worked: 0}), ) @pytest.mark.parametrize( "container", [ Container( name="self", sections=[ Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.JUMPF[0], ), ], ), Container( name="1_to_0", sections=[ Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.JUMPF[1], ), Section.Code( Op.JUMPF[0], ), ], ), Container( name="2_to_1", sections=[ Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.JUMPF[1], ), Section.Code( Op.JUMPF[2], ), Section.Code( Op.JUMPF[1], ), ], ), Container( name="2_to_1_returning", sections=[ Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.CALLF[1] + Op.STOP, ), Section.Code( Op.JUMPF[2], code_outputs=0, ), Section.Code( Op.JUMPF[1], code_outputs=0, ), ], ), Container( name="1_to_0_invalid", sections=[ Section.Code( Op.JUMPF[1], ), Section.Code( Op.JUMPF[0], code_outputs=0, ), ], validity_error=EOFException.INVALID_NON_RETURNING_FLAG, ), ], ids=lambda container: container.name, ) def test_jumpf_infinite_loop(eof_state_test: EOFStateTestFiller, container: Container) -> None: """Tests JUMPF causing an infinite loop.""" eof_state_test( container=container, container_post=Account(storage={slot_code_worked: 0}), ) def test_jumpf_memory_context( state_test: StateTestFiller, pre: Alloc, ) -> None: """Verifies JUMPF doesn't corrupt memory.""" env = Environment() storage = Storage() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( Op.SSTORE(storage.store_next(value_code_worked), value_code_worked) + Op.MSTORE(0, 1) + Op.JUMPF[1], ), Section.Code( Op.SSTORE(storage.store_next(32), Op.MSIZE()) + Op.SSTORE(storage.store_next(1), Op.MLOAD(0)) + Op.STOP, ), ], ), ) post = { contract_address: Account( storage=storage, ), } tx = Transaction( to=contract_address, gas_limit=500_000, sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) def test_callf_jumpf_retf_memory_context( state_test: StateTestFiller, pre: Alloc, ) -> None: """Verifies CALLF, JUMPF and RETF don't corrupt memory.""" env = Environment() storage = Storage() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( Op.SSTORE(storage.store_next(value_code_worked), value_code_worked) + Op.MSTORE(0, 1) + Op.CALLF[1] + Op.SSTORE(storage.store_next(96), Op.MSIZE()) + Op.SSTORE(storage.store_next(2), Op.MLOAD(0)) + Op.SSTORE(storage.store_next(21), Op.MLOAD(32)) + Op.SSTORE(storage.store_next(31), Op.MLOAD(64)) + Op.STOP, ), Section.Code( Op.SSTORE(storage.store_next(32), Op.MSIZE()) + Op.SSTORE(storage.store_next(1), Op.MLOAD(0)) + Op.MSTORE(0, 2) + Op.MSTORE(32, 3) + Op.JUMPF[2], code_outputs=0, ), Section.Code( Op.SSTORE(storage.store_next(64), Op.MSIZE()) + Op.SSTORE(storage.store_next(2), Op.MLOAD(0)) + Op.SSTORE(storage.store_next(3), Op.MLOAD(32)) + Op.MSTORE(32, 21) + Op.MSTORE(64, 31) + Op.RETF, code_outputs=0, ), ], ), ) post = { contract_address: Account( storage=storage, ), } tx = Transaction( to=contract_address, gas_limit=500_000, sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py ================================================ """EOF JUMPF tests covering stack validation rules.""" import pytest from ethereum_test_specs import EOFTestFiller from ethereum_test_tools import Account, EOFException, EOFStateTestFiller from ethereum_test_types.eof.constants import MAX_RUNTIME_STACK_HEIGHT from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import slot_code_worked, value_code_worked REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6206.md" REFERENCE_SPEC_VERSION = "2f365ea0cd58faa6e26013ea77ce6d538175f7d0" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "target_inputs", [0, 2, 4], ids=lambda x: "ti-%d" % x, ) @pytest.mark.parametrize( "stack_height", [0, 2, 4], ids=lambda x: "h-%d" % x, ) def test_jumpf_stack_non_returning_rules( eof_state_test: EOFStateTestFiller, target_inputs: int, stack_height: int, ) -> None: """ Tests for JUMPF validation stack rules. Non-returning section cases. Valid cases are executed. """ container = Container( name="stack-non-retuning_h-%d_ti-%d" % (stack_height, target_inputs), sections=[ Section.Code( code=Op.JUMPF[1], ), Section.Code( code=Op.PUSH0 * stack_height + Op.JUMPF[2], max_stack_height=stack_height, ), Section.Code( code=Op.POP * target_inputs + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, code_inputs=target_inputs, max_stack_height=max(2, target_inputs), ), ], ) if stack_height < target_inputs: container.validity_error = EOFException.STACK_UNDERFLOW eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), data=b"\1", ) @pytest.mark.parametrize( "source_outputs", [0, 2, 4], ids=lambda x: "so-%d" % x, ) @pytest.mark.parametrize( "target_outputs", [0, 2, 4], ids=lambda x: "to-%d" % x, ) @pytest.mark.parametrize( "target_inputs", [0, 2, 4], ids=lambda x: "ti-%d" % x, ) @pytest.mark.parametrize("stack_diff", [-1, 0, 1], ids=["less-stack", "same-stack", "more-stack"]) def test_jumpf_stack_returning_rules( eof_state_test: EOFStateTestFiller, source_outputs: int, target_outputs: int, target_inputs: int, stack_diff: int, ) -> None: """ Tests for JUMPF validation stack rules. Returning section cases. Valid cases are executed. """ if target_outputs > source_outputs: # These create invalid containers without JUMPF validation, Don't test. return if target_inputs == 0 and stack_diff < 0: # Code generation is impossible for this configuration. Don't test. return target_delta = target_outputs - target_inputs container = Container( name="stack-retuning_co-%d_to-%d_ti-%d_diff-%d" % (source_outputs, target_outputs, target_inputs, stack_diff), sections=[ Section.Code( code=Op.CALLF[1] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, max_stack_height=2 + source_outputs, ), Section.Code( code=Op.PUSH0 * max(0, target_inputs + stack_diff) + Op.JUMPF[2], code_outputs=source_outputs, max_stack_height=target_inputs, ), Section.Code( code=(Op.POP * -target_delta if target_delta < 0 else Op.PUSH0 * target_delta) + Op.RETF, code_inputs=target_inputs, code_outputs=target_outputs, max_stack_height=max(target_inputs, target_outputs), ), ], ) if stack_diff < source_outputs - target_outputs: container.validity_error = EOFException.STACK_UNDERFLOW elif stack_diff > source_outputs - target_outputs: container.validity_error = EOFException.STACK_HIGHER_THAN_OUTPUTS eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), data=b"\1", ) @pytest.mark.parametrize( ["target_inputs", "target_outputs", "stack_height", "expected_exception"], [ pytest.param(1, 0, 1, EOFException.STACK_UNDERFLOW, id="less_stack"), pytest.param(2, 1, 2, None, id="same_stack"), pytest.param( 3, 2, 3, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id="more_stack" ), pytest.param( 2, 2, 1, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id="less_output" ), pytest.param(1, 1, 1, None, id="same_output"), pytest.param(0, 0, 1, None, id="more_output"), ], ) def test_jumpf_incompatible_outputs( eof_test: EOFTestFiller, target_inputs: int, target_outputs: int, stack_height: int, expected_exception: EOFException, ) -> None: """Tests JUMPF into a section with incorrect number of outputs.""" current_section_outputs = 1 if (current_section_outputs + target_inputs - target_outputs) != stack_height: assert expected_exception is not None eof_test( container=Container( sections=[ Section.Code(Op.CALLF(1) + Op.STOP, max_stack_height=1), Section.Code( Op.PUSH0 * stack_height + Op.JUMPF(2), code_outputs=current_section_outputs, ), Section.Code( Op.POP * (target_inputs - target_outputs) + Op.RETF, code_inputs=target_inputs, code_outputs=target_outputs, max_stack_height=target_inputs, ), ] ), expect_exception=expected_exception, ) @pytest.mark.parametrize( ["target_inputs", "target_outputs", "stack_height", "expected_exception"], [ pytest.param(1, 0, 1, EOFException.STACK_UNDERFLOW, id="less_stack"), pytest.param(2, 1, 2, EOFException.STACK_HIGHER_THAN_OUTPUTS, id="same_stack"), pytest.param( 3, 2, 3, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id="more_stack" ), pytest.param( 2, 2, 1, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id="less_output" ), pytest.param(1, 1, 1, EOFException.STACK_HIGHER_THAN_OUTPUTS, id="same_output"), pytest.param(0, 0, 1, EOFException.STACK_HIGHER_THAN_OUTPUTS, id="more_output"), ], ) def test_jumpf_diff_max_stack_height( eof_test: EOFTestFiller, target_inputs: int, target_outputs: int, stack_height: int, expected_exception: EOFException, ) -> None: """Tests jumpf with a different max stack height.""" current_section_outputs = 1 eof_test( container=Container( sections=[ Section.Code(Op.CALLF(1) + Op.STOP, max_stack_height=1), Section.Code( (Op.PUSH0 * stack_height) # (0, 0) + Op.PUSH0 # (stack_height, stack_height) + Op.RJUMPI[1] # (stack_height + 1, stack_height + 1) + Op.PUSH0 # (stack_height, stack_height) + Op.JUMPF(2), # (stack_height, stack_height + 1) code_outputs=current_section_outputs, ), Section.Code( Op.POP * (target_inputs - target_outputs) + Op.RETF, code_inputs=target_inputs, code_outputs=target_outputs, max_stack_height=target_inputs, ), ] ), expect_exception=expected_exception, ) @pytest.mark.parametrize( ["target_inputs", "target_outputs", "stack_height", "expected_exception"], [ pytest.param(1, 0, 1, EOFException.STACK_UNDERFLOW, id="less_stack"), pytest.param(2, 1, 2, EOFException.STACK_UNDERFLOW, id="same_stack"), pytest.param( 3, 2, 3, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id="more_stack" ), pytest.param( 2, 2, 1, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id="less_output" ), pytest.param(1, 1, 1, EOFException.STACK_UNDERFLOW, id="same_output"), pytest.param(0, 0, 1, EOFException.STACK_UNDERFLOW, id="more_output"), ], ) def test_jumpf_diff_min_stack_height( eof_test: EOFTestFiller, target_inputs: int, target_outputs: int, stack_height: int, expected_exception: EOFException, ) -> None: """Tests jumpf with a different min stack height.""" current_section_outputs = 1 eof_test( container=Container( sections=[ Section.Code(Op.CALLF(1) + Op.STOP, max_stack_height=1), Section.Code( (Op.PUSH0 * (stack_height - 1)) # (0, 0) + Op.PUSH0 # (stack_height - 1, stack_height - 1) + Op.RJUMPI[1] # (stack_height, stack_height) + Op.PUSH0 # (stack_height - 1, stack_height - 1) + Op.JUMPF(2), # (stack_height - 1, stack_height) code_outputs=current_section_outputs, ), Section.Code( Op.POP * (target_inputs - target_outputs) + Op.RETF, code_inputs=target_inputs, code_outputs=target_outputs, max_stack_height=target_inputs, ), ] ), expect_exception=expected_exception, ) def test_jumpf_self_variadic_stack_overflow(eof_test: EOFTestFiller) -> None: """Test JUMPF calling self causing EOF validation stack overflow.""" container = Container( name="jumpf_stack_overflow_variable_stack_0", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 * 511 + Op.JUMPF[0], max_stack_height=512, ), ], ) eof_test(container=container) @pytest.mark.parametrize("stack_height", [512, 1022, 1023]) @pytest.mark.parametrize("callee_stack_height", [0, 1, 2, 5, 511, 512, 513]) def test_jumpf_variadic_stack_overflow( eof_test: EOFTestFiller, stack_height: int, callee_stack_height: int ) -> None: """ Test JUMPF stack validation causing stack overflow with variable stack height. """ container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 * (stack_height - 1) + Op.JUMPF[1], max_stack_height=stack_height, ), Section.Code( code=Op.PUSH0 * callee_stack_height + Op.STOP, max_stack_height=callee_stack_height, ), ], validity_error=EOFException.STACK_OVERFLOW if stack_height + callee_stack_height > MAX_RUNTIME_STACK_HEIGHT else None, ) eof_test(container=container) @pytest.mark.parametrize("stack_height", [1022, 1023]) @pytest.mark.parametrize("callee_stack_increase", [0, 1, 2]) def test_jumpf_with_inputs_stack_overflow( eof_test: EOFTestFiller, stack_height: int, callee_stack_increase: int ) -> None: """Test validation of JUMPF with inputs causing stack overflow.""" container = Container( sections=[ Section.Code( code=Op.PUSH0 * stack_height + Op.JUMPF[1], max_stack_height=stack_height, ), Section.Code( code=Op.PUSH0 * callee_stack_increase + Op.STOP, code_inputs=2, max_stack_height=2 + callee_stack_increase, ), ], validity_error=EOFException.STACK_OVERFLOW if stack_height + callee_stack_increase > MAX_RUNTIME_STACK_HEIGHT else None, ) eof_test(container=container) @pytest.mark.parametrize("stack_height", [1022, 1023]) @pytest.mark.parametrize("callee_stack_increase", [0, 1, 2]) def test_jumpf_with_inputs_stack_overflow_variable_stack( eof_test: EOFTestFiller, stack_height: int, callee_stack_increase: int ) -> None: """ Test JUMPF with variable stack depending on RJUMPI calling function with inputs. """ container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 * (stack_height - 1) + Op.JUMPF[1], max_stack_height=stack_height, ), Section.Code( code=Op.PUSH0 * callee_stack_increase + Op.STOP, code_inputs=2, max_stack_height=2 + callee_stack_increase, ), ], validity_error=EOFException.STACK_OVERFLOW if stack_height + callee_stack_increase > MAX_RUNTIME_STACK_HEIGHT else None, ) eof_test(container=container) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py ================================================ """EOF JUMPF tests covering JUMPF target rules.""" import pytest from ethereum_test_tools import Account, EOFException, EOFStateTestFiller from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import NON_RETURNING_SECTION from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import slot_code_worked, value_code_worked REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6206.md" REFERENCE_SPEC_VERSION = "2f365ea0cd58faa6e26013ea77ce6d538175f7d0" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "target_outputs", [NON_RETURNING_SECTION, 0, 2, 4, 127], ids=lambda x: "to-%s" % ("N" if x == NON_RETURNING_SECTION else x), ) @pytest.mark.parametrize( "source_outputs", [NON_RETURNING_SECTION, 0, 2, 4, 127], ids=lambda x: "so-%s" % ("N" if x == NON_RETURNING_SECTION else x), ) def test_jumpf_target_rules( eof_state_test: EOFStateTestFiller, source_outputs: int, target_outputs: int, ) -> None: """ Validate the target section rules of JUMPF, and execute valid cases. We are not testing stack so a lot of the logic is to get correct stack values. """ source_non_returning = source_outputs == NON_RETURNING_SECTION source_height = 0 if source_non_returning else source_outputs source_section_index = 1 target_non_returning = target_outputs == NON_RETURNING_SECTION target_height = 0 if target_non_returning else target_outputs target_section_index = 2 # Because we are testing the target and not the stack height validation we # need to do some work to make sure the stack passes validation. # `source_extra_push` is how many more pushes we need to match our stack # commitments source_extra_push = max(0, source_height - target_height) source_section = Section.Code( code=Op.PUSH0 * (source_height) + Op.CALLDATALOAD(0) + Op.RJUMPI[1] + (Op.STOP if source_non_returning else Op.RETF) + Op.PUSH0 * source_extra_push + Op.JUMPF[target_section_index], code_inputs=0, code_outputs=source_outputs, max_stack_height=source_height + max(1, source_extra_push), ) # `delta` is how many stack items the target output is from the input # height, and tracks the number of pushes or (if negative) pops the target # needs to do to match output commitments delta = 0 if target_non_returning or source_non_returning else target_outputs - source_height target_section = Section.Code( code=((Op.PUSH0 * delta) if delta >= 0 else (Op.POP * -delta)) + Op.CALLF[3] + (Op.STOP if target_non_returning else Op.RETF), code_inputs=source_height, code_outputs=target_outputs, max_stack_height=max(source_height, source_height + delta), ) base_code = ( Op.JUMPF[source_section_index] if source_non_returning else (Op.CALLF[source_section_index](0, 0) + Op.STOP) ) base_height = 0 if source_non_returning else 2 + source_outputs container = Container( name="so-%s_to-%s" % ( "N" if source_non_returning else source_outputs, "N" if target_non_returning else target_outputs, ), sections=[ Section.Code( code=base_code, max_stack_height=base_height, ), source_section, target_section, Section.Code( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETF, code_outputs=0, ), ], ) if target_non_returning or source_non_returning: if not target_non_returning and source_non_returning: # both as non-returning handled above container.validity_error = EOFException.INVALID_NON_RETURNING_FLAG elif source_outputs < target_outputs: container.validity_error = EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS eof_state_test( container=container, container_post=Account(storage={slot_code_worked: value_code_worked}), data=b"\1", ) @pytest.mark.skip("Not implemented") def test_jumpf_multi_target_rules( eof_state_test: EOFStateTestFiller, ) -> None: """ NOT IMPLEMENTED: Test a section that contains multiple JUMPF to different targets with different outputs. """ pass ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py ================================================ """EOF validation tests for JUMPF instruction.""" import pytest from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_types.eof.constants import MAX_RUNTIME_STACK_HEIGHT from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6206.md" REFERENCE_SPEC_VERSION = "2f365ea0cd58faa6e26013ea77ce6d538175f7d0" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "container", [ Container( name="to_0", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.JUMPF[0], code_outputs=0, ), ], ), Container( name="to_2", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.JUMPF[2], code_outputs=0, ), Section.Code( Op.INVALID, ), ], ), Container( name="to_retf", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.JUMPF[2], code_outputs=0, ), Section.Code( Op.RETF, ), ], ), ], ids=lambda container: container.name, ) def test_returning_jumpf( eof_test: EOFTestFiller, container: Container, ) -> None: """Test cases for JUMPF instruction validation in a returning sections.""" eof_test(container=container, expect_exception=EOFException.INVALID_NON_RETURNING_FLAG) @pytest.mark.parametrize( "container", [ Container( name="jumpf1", sections=[ Section.Code( Op.JUMPF[1], ) ], ), Container( name="jumpf2", sections=[ Section.Code( Op.JUMPF[2], ), Section.Code( Op.STOP, ), ], ), Container( name="jumpf1_jumpf2", sections=[ Section.Code( Op.JUMPF[1], ), Section.Code( Op.JUMPF[2], ), ], ), ], ids=lambda container: container.name, ) def test_invalid_code_section_index( eof_test: EOFTestFiller, container: Container, ) -> None: """ Test cases for JUMPF instructions with invalid target code section index. """ eof_test(container=container, expect_exception=EOFException.INVALID_CODE_SECTION_INDEX) def test_returning_section_aborts_jumpf( eof_test: EOFTestFiller, ) -> None: """ Test EOF container validation where in the same code section we have returning and nonreturning terminating instructions. """ container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=1), Section.Code( code=Op.PUSH0 * 2 + Op.RJUMPI[4] + Op.POP + Op.JUMPF[2] + Op.RETF, code_outputs=1, ), Section.Code( code=Op.PUSH0 * 2 + Op.RJUMPI[1] + Op.RETF + Op.INVALID, code_inputs=0, code_outputs=1, ), ], ) eof_test(container=container) @pytest.mark.parametrize("stack_height", [512, 513, 1023]) def test_jumpf_self_stack_overflow(eof_test: EOFTestFiller, stack_height: int) -> None: """ Test JUMPF instruction jumping to itself causing validation time stack overflow. """ container = Container( sections=[ Section.Code( code=(Op.PUSH0 * stack_height) + Op.JUMPF[0], max_stack_height=stack_height, ), ], ) stack_overflow = stack_height > MAX_RUNTIME_STACK_HEIGHT // 2 eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) @pytest.mark.parametrize("stack_height_other", [1, 2, 512, 513, 1023]) @pytest.mark.parametrize("stack_height", [1, 2, 512, 513, 1023]) def test_jumpf_other_stack_overflow( eof_test: EOFTestFiller, stack_height: int, stack_height_other: int ) -> None: """ Test JUMPF instruction jumping to other section causing validation time stack overflow. """ container = Container( sections=[ Section.Code( code=(Op.PUSH0 * stack_height) + Op.JUMPF[1], max_stack_height=stack_height, ), Section.Code( code=(Op.PUSH0 * stack_height_other) + Op.STOP, max_stack_height=stack_height_other, ), ], ) stack_overflow = stack_height + stack_height_other > MAX_RUNTIME_STACK_HEIGHT eof_test( container=container, expect_exception=EOFException.STACK_OVERFLOW if stack_overflow else None, ) @pytest.mark.parametrize("code_inputs", [0, 3]) @pytest.mark.parametrize("stack_height", [0, 2, 3, 4]) def test_jumpf_to_non_returning( eof_test: EOFTestFiller, stack_height: int, code_inputs: int ) -> None: """Test JUMPF jumping to a non-returning function.""" container = Container( sections=[ Section.Code( code=Op.PUSH0 * stack_height + Op.JUMPF[1], max_stack_height=stack_height ), Section.Code(code=Op.STOP, code_inputs=code_inputs, max_stack_height=code_inputs), ], ) eof_test( container=container, expect_exception=EOFException.STACK_UNDERFLOW if stack_height < code_inputs else None, ) @pytest.mark.parametrize("code_inputs", [0, 1, 3, 5]) def test_jumpf_to_non_returning_variable_stack(eof_test: EOFTestFiller, code_inputs: int) -> None: """ Test JUMPF jumping to a non-returning function with stack depending on RJUMPI. """ container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 * 2 + Op.JUMPF[1], max_stack_height=3, ), Section.Code(code=Op.INVALID, code_inputs=code_inputs, max_stack_height=code_inputs), ], ) eof_test( container=container, expect_exception=EOFException.STACK_UNDERFLOW if code_inputs >= 3 else None, ) @pytest.mark.parametrize("code_inputs", [0, 3]) @pytest.mark.parametrize("code_outputs", [1, 2]) @pytest.mark.parametrize("stack_height", [0, 1, 2, 3, 4, 5]) def test_jumpf_to_returning( eof_test: EOFTestFiller, code_inputs: int, code_outputs: int, stack_height: int ) -> None: """Test JUMPF jumping to a returning function.""" exceptions = [] if code_inputs > stack_height or (stack_height - code_inputs + code_outputs) < 2: exceptions.append(EOFException.STACK_UNDERFLOW) if stack_height - code_inputs + code_outputs > 2: exceptions.append(EOFException.STACK_HIGHER_THAN_OUTPUTS) third_cs_stack_height = code_inputs if code_inputs > code_outputs else code_outputs third_cs = None if code_outputs < code_inputs: third_cs = Op.POP * (code_inputs - code_outputs) + Op.RETF else: third_cs = Op.PUSH0 * (code_outputs - code_inputs) + Op.RETF container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=2), Section.Code(code=Op.PUSH0 * stack_height + Op.JUMPF[2], code_outputs=2), Section.Code( code=third_cs, code_inputs=code_inputs, code_outputs=code_outputs, max_stack_height=third_cs_stack_height, ), ], ) eof_test( container=container, expect_exception=exceptions if exceptions else None, ) @pytest.mark.parametrize("code_inputs", [0, 1, 3, 5]) @pytest.mark.parametrize("code_outputs", [1, 3]) @pytest.mark.parametrize("stack_increase", [0, 1, 2, 3, 4]) def test_jumpf_to_returning_variable_stack_1( eof_test: EOFTestFiller, code_inputs: int, code_outputs: int, stack_increase: int, ) -> None: """ Test JUMPF with variable stack jumping to a returning function increasing the stack. """ exception = None if code_inputs >= 3 or code_outputs + 1 < 3: # 3 = Section 1's max stack exception = EOFException.STACK_UNDERFLOW if 3 - code_inputs + code_outputs > 3: exception = EOFException.STACK_HIGHER_THAN_OUTPUTS container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=3), Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 * 2 + Op.JUMPF[2], code_outputs=3, max_stack_height=3, ), Section.Code( code=Op.PUSH0 * stack_increase + Op.RETF, code_inputs=code_inputs, code_outputs=code_outputs, max_stack_height=code_inputs if code_inputs > code_outputs else code_outputs, ), ], ) eof_test( container=container, expect_exception=exception, ) @pytest.mark.parametrize("code_inputs", [1, 3, 5]) @pytest.mark.parametrize("code_outputs", [1]) @pytest.mark.parametrize("stack_decrease", [0, 2, 4]) def test_jumpf_to_returning_variable_stack_2( eof_test: EOFTestFiller, code_inputs: int, code_outputs: int, stack_decrease: int, ) -> None: """ Test JUMPF with variable stack jumping to a returning function decreasing the stack. """ exceptions = [] if code_inputs >= 3 or code_outputs + 1 < 3: # 3 = Section 1's max stack exceptions.append(EOFException.STACK_UNDERFLOW) if 3 - code_inputs + code_outputs > 2: exceptions.append(EOFException.STACK_HIGHER_THAN_OUTPUTS) container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=2), Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 * 2 + Op.JUMPF[2], code_outputs=2, max_stack_height=3, ), Section.Code( code=Op.POP * stack_decrease + Op.RETF, code_inputs=code_inputs, code_outputs=code_outputs, max_stack_height=code_inputs if code_inputs > code_outputs else code_outputs, ), ], ) eof_test( container=container, expect_exception=exceptions, ) def test_jumpf_to_returning_variable_stack_3(eof_test: EOFTestFiller) -> None: """ Test JUMPF with variable stack jumping to a returning function increasing the stack. """ container = Container( sections=[ Section.Code(code=Op.CALLF[1] + Op.STOP, max_stack_height=2), Section.Code( code=Op.PUSH0 + Op.PUSH1[0] + Op.RJUMPI[2] + Op.PUSH0 * 2 + Op.JUMPF[2], code_outputs=2, max_stack_height=3, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_outputs=1, max_stack_height=1, ), ], ) eof_test( container=container, expect_exception=EOFException.STACK_HIGHER_THAN_OUTPUTS, ) @pytest.mark.parametrize( "container", [ Container( name="underflow_2", sections=[ Section.Code( code=Op.CALLF[1] + Op.STOP, max_stack_height=2, ), Section.Code( code=Op.JUMPF[2], code_outputs=2, max_stack_height=0, ), Section.Code( code=Op.PUSH0 + Op.RETF, code_inputs=1, code_outputs=2, max_stack_height=2, ), ], ), Container( name="underflow_3", sections=[ Section.Code( code=Op.JUMPF[1], ), Section.Code( code=Op.REVERT(0, 0), code_inputs=1, max_stack_height=3, ), ], ), Container( name="underflow_variable_stack_4", sections=[ Section.Code( code=Op.CALLF[1] + Op.STOP, max_stack_height=3, ), Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.JUMPF[2], code_outputs=3, max_stack_height=3, ), Section.Code( code=Op.POP + Op.POP + Op.RETF, code_inputs=5, code_outputs=3, max_stack_height=5, ), ], ), Container( name="underflow_variable_stack_6", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.JUMPF[1], max_stack_height=3, ), Section.Code( code=Op.REVERT(0, 0), code_inputs=4, max_stack_height=6, ), ], ), Container( name="underflow_variable_stack_7", sections=[ Section.Code( code=Op.PUSH0 + Op.RJUMPI[2](0) + Op.PUSH0 + Op.PUSH0 + Op.JUMPF[1], max_stack_height=3, ), Section.Code( code=Op.REVERT(0, 0), code_inputs=3, max_stack_height=5, ), ], ), Container( name="underflow_variable_stack_8", sections=[ Section.Code( code=Op.PUSH0 * 3 + Op.RJUMPI[1](0) + Op.POP + Op.JUMPF[1], max_stack_height=3, ), Section.Code( code=Op.REVERT(0, 0), code_inputs=3, max_stack_height=5, ), ], ), ], ids=lambda x: x.name, ) def test_jumpf_stack_underflow_examples(eof_test: EOFTestFiller, container: Container) -> None: """Test JUMPF instruction causing validation time stack underflow.""" eof_test(container=container, expect_exception=EOFException.STACK_UNDERFLOW) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py ================================================ """EOF validation tests for non-returning code sections.""" import pytest from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_types.eof.v1 import NON_RETURNING_SECTION, Container, ContainerKind, Section from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-6206.md" REFERENCE_SPEC_VERSION = "2f365ea0cd58faa6e26013ea77ce6d538175f7d0" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "code", [ pytest.param(Op.STOP, id="STOP"), pytest.param(Op.INVALID, id="INVALID"), pytest.param(Op.ADDRESS + Op.POP + Op.INVALID, id="ADDRESS_POP_INVALID"), pytest.param(Op.RETURN(0, 0), id="RETURN"), pytest.param(Op.RETF, id="RETF"), pytest.param(Op.PUSH0 + Op.RETF, id="PUSH0_RETF"), ], ) @pytest.mark.parametrize( "outputs", [0, 1, 0x7F, 0x81, 0xFF], ) def test_first_section_returning(eof_test: EOFTestFiller, code: Bytecode, outputs: int) -> None: """ Test EOF validation failing because the first section is not non-returning. """ eof_test( container=Container( sections=[Section.Code(code, code_outputs=outputs)], validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ) ) @pytest.mark.parametrize( "code", [ pytest.param(Op.INVALID, id="INVALID"), pytest.param(Op.RETF, id="RETF"), pytest.param(Op.POP + Op.RETF, id="POP_RETF"), ], ) @pytest.mark.parametrize( "inputs", [1, 2, 0x7F, 0x80, 0x81, 0xFF], ) @pytest.mark.parametrize( "outputs", [ 0, NON_RETURNING_SECTION, ], ) def test_first_section_with_inputs( eof_test: EOFTestFiller, code: Bytecode, inputs: int, outputs: int ) -> None: """ Test EOF validation failing because the first section has non-zero number of inputs. """ eof_test( container=Container( sections=[ Section.Code( code, code_inputs=inputs, code_outputs=outputs, max_stack_height=max(inputs, outputs), ) ], validity_error=EOFException.INVALID_FIRST_SECTION_TYPE, ) ) @pytest.mark.parametrize( "code_section", [ pytest.param(Section.Code(Op.STOP, code_outputs=0), id="stop0"), pytest.param(Section.Code(Op.PUSH0 + Op.STOP, code_outputs=1), id="stop1"), pytest.param(Section.Code(Op.INVALID, code_outputs=0), id="invalid0"), pytest.param(Section.Code(Op.PUSH0 + Op.INVALID, code_outputs=1), id="invalid1"), pytest.param(Section.Code(Op.RETURN(0, 0), code_outputs=0), id="return0"), pytest.param(Section.Code(Op.PUSH0 + Op.RETURN(0, 0), code_outputs=1), id="return1"), pytest.param(Section.Code(Op.REVERT(0, 0), code_outputs=0), id="revert0"), pytest.param(Section.Code(Op.PUSH0 + Op.REVERT(0, 0), code_outputs=1), id="revert1"), pytest.param(Section.Code(Op.RJUMP[-3], code_outputs=0), id="rjump0"), pytest.param(Section.Code(Op.PUSH0 + Op.RJUMP[-3], code_outputs=1), id="rjump1"), ], ) def test_returning_section_not_returning(eof_test: EOFTestFiller, code_section: Section) -> None: """ Test EOF validation failing due to returning section with no RETF or JUMPF-to-returning. """ eof_test( container=Container( sections=[ Section.Code(Op.CALLF[1] + Op.STOP, max_stack_height=code_section.code_outputs), code_section, ], validity_error=EOFException.INVALID_NON_RETURNING_FLAG, ), ) @pytest.mark.parametrize( "code_section", [ pytest.param(Section.Code(Op.RETURNCODE[0](0, 0), code_outputs=0), id="returncode0"), pytest.param( Section.Code(Op.PUSH0 + Op.RETURNCODE[0](0, 0), code_outputs=1), id="returncode1", ), ], ) def test_returning_section_returncode(eof_test: EOFTestFiller, code_section: Section) -> None: """ Test EOF validation failing because a returning section has no RETF or JUMPF-to-returning - RETURNCODE version. """ eof_test( container=Container( sections=[ Section.Code(Op.CALLF[1] + Op.INVALID, max_stack_height=code_section.code_outputs), code_section, ] + [Section.Container(Container.Code(Op.INVALID))], validity_error=EOFException.INVALID_NON_RETURNING_FLAG, kind=ContainerKind.INITCODE, ) ) first = pytest.mark.parametrize("first", [True, False]) code_prefix = pytest.mark.parametrize( "code_prefix", [ Bytecode(), Op.PUSH0, pytest.param(Op.PUSH0 * NON_RETURNING_SECTION, id="PUSH0x0x80"), ], ) @first @code_prefix def test_retf_in_nonreturning(eof_test: EOFTestFiller, first: bool, code_prefix: Bytecode) -> None: """ Test EOF validation failing due to non-returning section with the RETF instruction. """ sections = [Section.Code(code_prefix + Op.RETF, code_outputs=NON_RETURNING_SECTION)] if not first: # Prefix sections with additional valid JUMPF to invalid section sections = [Section.Code(Op.JUMPF[1])] + sections eof_test( container=Container( sections=sections, validity_error=EOFException.INVALID_NON_RETURNING_FLAG ) ) @first @code_prefix def test_jumpf_in_nonreturning( eof_test: EOFTestFiller, first: bool, code_prefix: Bytecode ) -> None: """ Test EOF validation failing due to non-returning section with the JUMPF instruction. """ invalid_section = Section.Code( code_prefix + Op.JUMPF[1 if first else 2], code_outputs=NON_RETURNING_SECTION, ) target_section = Section.Code(Op.RETF, code_outputs=0) sections = [invalid_section, target_section] if not first: # Prefix sections with additional valid JUMPF to invalid section sections = [Section.Code(Op.JUMPF[1])] + sections eof_test( container=Container( sections=sections, validity_error=EOFException.INVALID_NON_RETURNING_FLAG, ) ) @pytest.mark.parametrize( "container", [ Container( name="0_to_1", sections=[ Section.Code( Op.CALLF[1], ), Section.Code( Op.STOP, ), ], ), Container( name="self_0", sections=[ Section.Code( Op.CALLF[0] + Op.STOP, ) ], ), Container( name="self_1", sections=[ Section.Code( Op.JUMPF[1], ), Section.Code( Op.CALLF[1] + Op.STOP, ), ], ), Container( name="1_to_0", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.CALLF[0] + Op.RETF, code_outputs=0, ), ], ), Container( name="1_to_2", sections=[ Section.Code( Op.CALLF[1] + Op.STOP, ), Section.Code( Op.CALLF[2] + Op.RETF, code_outputs=0, ), Section.Code( Op.INVALID, ), ], ), ], ids=lambda x: x.name, ) def test_callf_to_nonreturning(eof_test: EOFTestFiller, container: Container) -> None: """Test EOF validation failing due to CALLF to non-returning section.""" eof_test(container=container, expect_exception=EOFException.CALLF_TO_NON_RETURNING) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/__init__.py ================================================ """ Test cases for EIP-663 SWAPN, DUPN and EXCHANGE instructions [EIP-663](https://eips.ethereum.org/EIPS/eip-663) defines new stack manipulation instructions that allow accessing the stack at higher depths. Opcodes introduced: `DUPN` (`0xE6`), `SWAPN` (`0xE7`), `EXCHANGEN` (`0xE8`). """ REFERENCE_SPEC_GIT_PATH = "EIPS/eip-663.md" REFERENCE_SPEC_VERSION = "b658bb87fe039d29e9475d5cfaebca9b92e0fca2" ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py ================================================ """ DUPN instruction tests Tests for DUPN instruction in [EIP-663: SWAPN, DUPN and EXCHANGE instructions](https://eips.ethereum.org/EIPS/eip-663). """ import pytest from ethereum_test_tools import ( Account, Alloc, Environment, EOFException, EOFStateTestFiller, EOFTestFiller, StateTestFiller, Transaction, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_STACK_INCREASE_LIMIT from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from . import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_dupn_all_valid_immediates(eof_state_test: EOFStateTestFiller) -> None: """Test case for all valid DUPN immediates.""" n = 2**8 values = range(0xD00, 0xD00 + n) eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in values) + sum(Op.SSTORE(x, Op.DUPN[x]) for x in range(0, n)) + Op.STOP, ) ], ) post = Account(storage=dict(zip(range(0, n), reversed(values), strict=False))) eof_state_test( tx_sender_funding_amount=1_000_000_000, container=eof_code, container_post=post, ) @pytest.mark.parametrize( "stack_height,max_stack_height", [ # [0, 0] is tested in test_all_opcodes_stack_underflow() [0, 1], [1, 1], [1, 2], [2**8 - 1, 2**8 - 1], [2**8 - 1, 2**8], ], ) def test_dupn_stack_underflow( stack_height: int, max_stack_height: int, eof_test: EOFTestFiller, ) -> None: """Test case out of bounds DUPN immediate.""" eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(0, stack_height)) + Op.DUPN[stack_height] + Op.STOP, max_stack_height=max_stack_height, ) ], ) eof_test( container=eof_code, expect_exception=EOFException.STACK_UNDERFLOW, ) @pytest.mark.parametrize( "dupn_operand,max_stack_height,expect_exception", [ [0, MAX_STACK_INCREASE_LIMIT, EOFException.INVALID_MAX_STACK_INCREASE], [0, MAX_STACK_INCREASE_LIMIT + 1, EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT], [2**8 - 1, MAX_STACK_INCREASE_LIMIT, EOFException.INVALID_MAX_STACK_INCREASE], [2**8 - 1, MAX_STACK_INCREASE_LIMIT + 1, EOFException.MAX_STACK_INCREASE_ABOVE_LIMIT], ], ) def test_dupn_stack_overflow( dupn_operand: int, max_stack_height: int, expect_exception: EOFException, eof_test: EOFTestFiller, ) -> None: """Test case where DUPN produces an stack overflow.""" eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(0, MAX_STACK_INCREASE_LIMIT)) + Op.DUPN[dupn_operand] + Op.STOP, max_stack_height=max_stack_height, ) ], ) eof_test( container=eof_code, expect_exception=expect_exception, ) @pytest.mark.parametrize( "dupn_arg,stack_height", [pytest.param(5, 9, id="5_of_9"), pytest.param(12, 30, id="12_of_30")] ) def test_dupn_simple( stack_height: int, dupn_arg: int, pre: Alloc, state_test: StateTestFiller, ) -> None: """Test case for simple DUPN operations.""" sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(stack_height, 0, -1)) + Op.DUPN[dupn_arg] + sum((Op.PUSH1(v) + Op.SSTORE) for v in range(0, stack_height + 1)) + Op.STOP, max_stack_height=stack_height + 2, ) ], ) ) storage = {v: v for v in range(1, stack_height + 1)} storage[0] = dupn_arg + 1 print(storage) post = {contract_address: Account(storage=storage)} tx = Transaction(to=contract_address, sender=sender, gas_limit=10_000_000) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py ================================================ """ Tests [EIP-663: SWAPN, DUPN and EXCHANGE instructions](https://eips.ethereum.org/EIPS/eip-663). """ import pytest from ethereum_test_tools import ( Account, Alloc, Environment, EOFException, EOFStateTestFiller, EOFTestFiller, StateTestFiller, Transaction, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from . import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_exchange_all_valid_immediates(eof_state_test: EOFStateTestFiller) -> None: """Test case for all valid EXCHANGE immediates.""" n = 256 s = 34 values = range(0x3E8, 0x3E8 + s) eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in values) + sum(Op.EXCHANGE[x] for x in range(0, n)) + sum((Op.PUSH1[x] + Op.SSTORE) for x in range(0, s)) + Op.STOP, ) ], ) # this does the same full-loop exchange values_rotated = list(range(0x3E8, 0x3E8 + s)) for e in range(0, n): a = (e >> 4) + 1 b = (e & 0x0F) + 1 + a temp = values_rotated[a] values_rotated[a] = values_rotated[b] values_rotated[b] = temp post = Account(storage=dict(zip(range(0, s), reversed(values_rotated), strict=False))) eof_state_test( tx_sender_funding_amount=1_000_000_000, container=eof_code, container_post=post, ) @pytest.mark.parametrize( "stack_height,x,y", [ # 2 and 3 are the lowest valid values for x and y, # which translates to the zero immediate value. # (0, 2, 3) is tested in test_all_opcodes_stack_underflow() pytest.param(1, 2, 3, id="stack_height=1_n=1_m=1"), pytest.param(2, 2, 3, id="stack_height=2_n=1_m=1"), pytest.param(17, 2, 18, id="stack_height=17_n=1_m=16"), pytest.param(17, 17, 18, id="stack_height=17_n=16_m=1"), pytest.param(32, 17, 33, id="stack_height=32_n=16_m=16"), ], ) def test_exchange_stack_underflow( eof_test: EOFTestFiller, stack_height: int, x: int, y: int, ) -> None: """Test case the EXCHANGE causing stack underflow.""" eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(stack_height)) + Op.EXCHANGE[x, y] + Op.POP * stack_height + Op.STOP, max_stack_height=stack_height, ) ], ) eof_test( container=eof_code, expect_exception=EOFException.STACK_UNDERFLOW, ) @pytest.mark.parametrize( "m_arg,n_arg,extra_stack", [pytest.param(0, 0, 3, id="m0_n0_extra3"), pytest.param(2, 3, 7, id="m2_n3_extra7")], ) def test_exchange_simple( m_arg: int, n_arg: int, extra_stack: int, pre: Alloc, state_test: StateTestFiller, ) -> None: """Test case for simple EXCHANGE operations.""" sender = pre.fund_eoa() stack_height = m_arg + n_arg + 2 + extra_stack contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(stack_height, 0, -1)) + Op.EXCHANGE[m_arg << 4 | n_arg] + sum((Op.PUSH1(v) + Op.SSTORE) for v in range(1, stack_height + 1)) + Op.STOP, max_stack_height=stack_height + 1, ) ], ) ) storage = {v: v for v in range(1, stack_height + 1)} first = m_arg + 2 # one based index, plus m=0 means first non-top item second = first + n_arg + 1 # n+1 past m storage[first], storage[second] = storage[second], storage[first] print(storage) post = {contract_address: Account(storage=storage)} tx = Transaction(to=contract_address, sender=sender, gas_limit=10_000_000) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py ================================================ """Tests [EIP-663: SWAPN, DUPN and EXCHANGE instructions](https://eips.ethereum.org/EIPS/eip-663).""" import pytest from ethereum_test_tools import ( Account, Alloc, Environment, EOFException, EOFStateTestFiller, EOFTestFiller, StateTestFiller, Transaction, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_STACK_INCREASE_LIMIT from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from . import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_swapn_all_valid_immediates(eof_state_test: EOFStateTestFiller) -> None: """Test case for all valid SWAPN immediates.""" n = 256 values = range(0x500, 0x500 + 257) eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in values) + sum(Op.SSTORE(x, Op.SWAPN[0xFF - x]) for x in range(0, n)) + Op.STOP, ) ], ) values_rotated = list(values[1:]) + [values[0]] post = Account(storage=dict(zip(range(0, n), reversed(values_rotated), strict=False))) eof_state_test( tx_sender_funding_amount=1_000_000_000, container=eof_code, container_post=post, ) @pytest.mark.parametrize( "swapn_operand", [ 0, 2**8 - 1, ], ) def test_swapn_on_max_stack( swapn_operand: int, eof_test: EOFTestFiller, ) -> None: """Test case out of bounds SWAPN (max stack).""" eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(0, MAX_STACK_INCREASE_LIMIT)) + Op.SWAPN[swapn_operand] + Op.STOP, ) ], ) eof_test( container=eof_code, ) @pytest.mark.parametrize( "stack_height", [ 0, 1, 21, 2**8 - 1, ], ) def test_swapn_stack_underflow( stack_height: int, eof_test: EOFTestFiller, ) -> None: """Test case out of bounds SWAPN (underflow).""" eof_code = Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(0, stack_height)) + Op.SWAPN[stack_height] + Op.STOP, # This is also tested in test_all_opcodes_stack_underflow() # so make it differ by the declared stack height. max_stack_height=stack_height + 1, ) ], ) eof_test( container=eof_code, expect_exception=EOFException.STACK_UNDERFLOW, ) @pytest.mark.parametrize( "swapn_arg,stack_height", [pytest.param(5, 9, id="5_of_9"), pytest.param(12, 30, id="12_of_30")], ) def test_swapn_simple( stack_height: int, swapn_arg: int, pre: Alloc, state_test: StateTestFiller, ) -> None: """Test case for simple SWAPN operations.""" sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=sum(Op.PUSH2[v] for v in range(stack_height, 0, -1)) + Op.SWAPN[swapn_arg] + sum((Op.PUSH1(v) + Op.SSTORE) for v in range(1, stack_height + 1)) + Op.STOP, max_stack_height=stack_height + 1, ) ], ) ) storage = {v: v for v in range(1, stack_height + 1)} storage[1], storage[swapn_arg + 2] = storage[swapn_arg + 2], storage[1] print(storage) post = {contract_address: Account(storage=storage)} tx = Transaction(to=contract_address, sender=sender, gas_limit=10_000_000) state_test(env=Environment(), pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/__init__.py ================================================ """ Test cases for EIP-7069 Revamped CALL instructions [EIP-7069: Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069) proposes modifications to `CALL` instructions to align with the structured EOF format. Opcodes introduced: `EXTCALL` (`0xF8`), `EXTDELEGATECALL` (`0xF9`), `EXTSTATICCALL` (`0xFB`), `RETURNDATALOAD` (`0xF7`). """ REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7069.md" REFERENCE_SPEC_VERSION = "1795943aeacc86131d5ab6bb3d65824b3b1d4cad" ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/helpers.py ================================================ """EOF extcall tests helpers.""" import itertools """Storage addresses for common testing fields""" _slot = itertools.count() next(_slot) # don't use slot 0 slot_code_worked = next(_slot) slot_eof_target_call_status = next(_slot) slot_legacy_target_call_status = next(_slot) slot_eof_target_returndata = next(_slot) slot_eof_target_returndatasize = next(_slot) slot_legacy_target_returndatasize = next(_slot) slot_delegate_code_worked = next(_slot) slot_call_status = next(_slot) slot_calldata_1 = next(_slot) slot_calldata_2 = next(_slot) slot_last_slot = next(_slot) """Storage value indicating an abort""" value_exceptional_abort_canary = 0x1984 """Storage values for common testing fields""" value_code_worked = 0x2015 """Memory and storage value for calldata""" value_calldata_1 = 0xC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 value_calldata_2 = 0xC2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2 size_calldata = 32 ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/spec.py ================================================ """EOF V1 Constants used throughout all tests.""" LEGACY_CALL_FAILURE = 0 LEGACY_CALL_SUCCESS = 1 EXTCALL_SUCCESS = 0 EXTCALL_REVERT = 1 EXTCALL_FAILURE = 2 ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py ================================================ """Tests the "Address Space Extension" aspect of EXT*CALL.""" import itertools import pytest from ethereum_test_tools import Account, Address, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import value_exceptional_abort_canary from .spec import EXTCALL_REVERT, EXTCALL_SUCCESS, LEGACY_CALL_SUCCESS REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7069.md" REFERENCE_SPEC_VERSION = "1795943aeacc86131d5ab6bb3d65824b3b1d4cad" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) _slot = itertools.count(1) slot_top_level_call_status = next(_slot) slot_target_call_status = next(_slot) slot_target_returndata = next(_slot) @pytest.mark.parametrize( "target_address", ( pytest.param(b"", id="zero"), pytest.param(b"\xc0\xde", id="short"), pytest.param(b"\x78" * 20, id="mid_20"), pytest.param(b"\xff" * 20, id="max_20"), pytest.param(b"\x01" + (b"\x00" * 20), id="min_ase"), pytest.param(b"\x5a" * 28, id="mid_ase"), pytest.param(b"\x5a" * 32, id="full_ase"), pytest.param(b"\xff" * 32, id="max_ase"), ), ) @pytest.mark.parametrize( "target_account_type", ( "empty", "EOA", "LegacyContract", # Hard-codes an address in pre-alloc "EOFContract", # Hard-codes an address in pre-alloc ), ids=lambda x: x, ) @pytest.mark.parametrize( "target_opcode", ( Op.CALL, Op.CALLCODE, Op.STATICCALL, Op.DELEGATECALL, Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ), ) def test_address_space_extension( state_test: StateTestFiller, pre: Alloc, target_address: bytes, target_opcode: Op, target_account_type: str, ) -> None: """ Test contacts with possibly extended address and fail if address is too large. """ env = Environment() ase_address = len(target_address) > 20 stripped_address = Address(target_address[-20:], left_padding=True) if ase_address and target_address[0] == b"00": raise ValueError("Test instrumentation requires target addresses trim leading zeros") ase_ready_opcode = ( False if target_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] else True ) sender = pre.fund_eoa() address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.SSTORE( slot_target_call_status, target_opcode(address=Op.CALLDATALOAD(0)), ) + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE) + Op.SSTORE(slot_target_returndata, Op.MLOAD(0)) + Op.STOP, code_inputs=0, ) ], ) if ase_ready_opcode else Op.SSTORE( slot_target_call_status, target_opcode(address=Op.CALLDATALOAD(0)), ) + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE) + Op.SSTORE(slot_target_returndata, Op.MLOAD(0)) + Op.STOP, storage={ slot_target_call_status: value_exceptional_abort_canary, slot_target_returndata: value_exceptional_abort_canary, }, ) address_entry_point = pre.deploy_contract( Op.MSTORE(0, Op.PUSH32(target_address)) + Op.SSTORE( slot_top_level_call_status, Op.CALL(50000, address_caller, 0, 0, 32, 0, 0), ) + Op.STOP(), storage={ slot_top_level_call_status: value_exceptional_abort_canary, }, ) match target_account_type: case "empty": # add no account pass case "EOA": pre.fund_address(stripped_address, 10**18) # TODO: we could use pre.fund_eoa here with nonce!=0. case "LegacyContract": pre[stripped_address] = Account( code=Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32), balance=0, nonce=0, ) case "EOFContract": pre[stripped_address] = Account( code=Container( sections=[ Section.Code( code=Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32), ) ], ), balance=0, nonce=0, ) caller_storage: dict[int, int | bytes | Address] = {} match target_account_type: case "empty" | "EOA": if ase_address and ase_ready_opcode: caller_storage[slot_target_call_status] = value_exceptional_abort_canary caller_storage[slot_target_returndata] = value_exceptional_abort_canary elif target_opcode == Op.EXTDELEGATECALL: caller_storage[slot_target_call_status] = EXTCALL_REVERT caller_storage[slot_target_returndata] = 0 else: caller_storage[slot_target_call_status] = ( EXTCALL_SUCCESS if ase_ready_opcode else LEGACY_CALL_SUCCESS ) case "LegacyContract" | "EOFContract": match target_opcode: case Op.CALL | Op.STATICCALL: caller_storage[slot_target_call_status] = LEGACY_CALL_SUCCESS # CALL and STATICCALL call will call the stripped address caller_storage[slot_target_returndata] = stripped_address case Op.CALLCODE | Op.DELEGATECALL: caller_storage[slot_target_call_status] = LEGACY_CALL_SUCCESS # CALLCODE and DELEGATECALL call will call the stripped # address but will change the sender to self caller_storage[slot_target_returndata] = address_caller case Op.EXTCALL | Op.EXTSTATICCALL: # EXTCALL and EXTSTATICCALL will fault if calling an ASE # address if ase_address: caller_storage[slot_target_call_status] = value_exceptional_abort_canary caller_storage[slot_target_returndata] = value_exceptional_abort_canary else: caller_storage[slot_target_call_status] = EXTCALL_SUCCESS caller_storage[slot_target_returndata] = stripped_address case Op.EXTDELEGATECALL: if ase_address: caller_storage[slot_target_call_status] = value_exceptional_abort_canary caller_storage[slot_target_returndata] = value_exceptional_abort_canary elif target_account_type == "LegacyContract": caller_storage[slot_target_call_status] = EXTCALL_REVERT caller_storage[slot_target_returndata] = 0 else: caller_storage[slot_target_call_status] = EXTCALL_SUCCESS # EXTDELEGATECALL call will call the stripped address # but will change the sender to self caller_storage[slot_target_returndata] = address_caller post = { address_entry_point: Account( storage={ slot_top_level_call_status: EXTCALL_SUCCESS if ase_ready_opcode and ase_address else LEGACY_CALL_SUCCESS } ), address_caller: Account(storage=caller_storage), } tx = Transaction( sender=sender, to=address_entry_point, gas_limit=50_000_000, data="", ) state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calldata.py ================================================ """ Call data tests for EXT*CALL instructions Tests for call data handling in [EIP-7069: Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069). """ import pytest from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from . import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION from .helpers import ( size_calldata, slot_call_status, slot_calldata_1, slot_calldata_2, slot_code_worked, slot_delegate_code_worked, slot_eof_target_returndata, value_calldata_1, value_calldata_2, value_code_worked, value_exceptional_abort_canary, ) from .spec import EXTCALL_FAILURE, EXTCALL_SUCCESS, LEGACY_CALL_FAILURE, LEGACY_CALL_SUCCESS REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def right_pad_32(v: bytes) -> bytes: """Take bytes and returns a 32 byte version right padded with zeros.""" return v.ljust(32, b"\0") @pytest.mark.parametrize("value", [0, 1]) @pytest.mark.parametrize( "memory", [ b"", b"1234567890abcdef", b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-", b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-" * 4, ], ids=lambda x: "size_%d" % len(x), ) @pytest.mark.parametrize("offset", [0, 8, 24, 80]) @pytest.mark.parametrize("length", [0, 8, 32, 48]) def test_extcalls_inputdata( state_test: StateTestFiller, pre: Alloc, value: int, memory: bytes, offset: int, length: int, ) -> None: """ Tests call data into EXTCALL including multiple offset conditions. Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte. """ env = Environment() sender = pre.fund_eoa() address_returner = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0)) + Op.SSTORE(slot_calldata_2, Op.CALLDATALOAD(32)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ), ] ), ) address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.DATACOPY(0, 0, len(memory)) + Op.SSTORE( slot_call_status, Op.EXTCALL(address_returner, offset, length, value), ) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ), Section.Data(data=memory), ] ), storage={slot_call_status: value_exceptional_abort_canary}, balance=10**9, ) calldata = memory[offset : offset + length] post = { address_returner: Account( storage={ slot_code_worked: value_code_worked, slot_calldata_1: right_pad_32(calldata[0:32]), slot_calldata_2: right_pad_32(calldata[32:64]), } ), address_caller: Account( storage={ slot_code_worked: value_code_worked, slot_call_status: EXTCALL_SUCCESS, } ), } tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "memory", [ b"", b"1234567890abcdef", b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-", b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-" * 4, ], ids=lambda x: "size_%d" % len(x), ) @pytest.mark.parametrize("offset", [0, 8, 24, 80]) @pytest.mark.parametrize("length", [0, 8, 32, 48]) def test_extdelegatecall_inputdata( state_test: StateTestFiller, pre: Alloc, memory: bytes, offset: int, length: int, ) -> None: """ Tests call data into EXTDELEGATECALL including multiple offset conditions. Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte. """ env = Environment() sender = pre.fund_eoa() address_returner = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0)) + Op.SSTORE(slot_calldata_2, Op.CALLDATALOAD(32)) + Op.SSTORE(slot_delegate_code_worked, value_code_worked) + Op.STOP ), ] ), ) address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.DATACOPY(0, 0, len(memory)) + Op.SSTORE( slot_call_status, Op.EXTDELEGATECALL(address_returner, offset, length), ) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ), Section.Data(data=memory), ] ), storage={slot_call_status: value_exceptional_abort_canary}, balance=10**9, ) calldata = memory[offset : offset + length] post = { address_returner: Account(storage={}), address_caller: Account( storage={ slot_code_worked: value_code_worked, slot_delegate_code_worked: value_code_worked, slot_call_status: EXTCALL_SUCCESS, slot_calldata_1: right_pad_32(calldata[0:32]), slot_calldata_2: right_pad_32(calldata[32:64]), } ), } tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "memory", [ b"", b"1234567890abcdef", b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-", b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-" * 4, ], ids=lambda x: "size_%d" % len(x), ) @pytest.mark.parametrize("offset", [0, 8, 24, 80]) @pytest.mark.parametrize("length", [0, 8, 32, 48]) def test_extstaticcall_inputdata( state_test: StateTestFiller, pre: Alloc, memory: bytes, offset: int, length: int, ) -> None: """ Tests call data into EXTSTATICCALL including multiple offset conditions. Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte. """ env = Environment() sender = pre.fund_eoa() address_returner = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.RETURN(0, Op.CALLDATASIZE) ), ] ), ) address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.DATACOPY(0, 0, len(memory)) + Op.SSTORE( slot_call_status, Op.EXTSTATICCALL(address_returner, offset, length), ) + Op.SSTORE(slot_calldata_1, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_calldata_2, Op.RETURNDATALOAD(32)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ), Section.Data(data=memory), ] ), storage={slot_call_status: value_exceptional_abort_canary}, balance=10**9, ) calldata = memory[offset : offset + length] post = { address_returner: Account(storage={}), address_caller: Account( storage={ slot_code_worked: value_code_worked, slot_call_status: EXTCALL_SUCCESS, slot_calldata_1: right_pad_32(calldata[0:32]), slot_calldata_2: right_pad_32(calldata[32:64]), } ), } tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "opcode", [ Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) def test_calldata_remains_after_subcall( state_test: StateTestFiller, pre: Alloc, opcode: Op, ) -> None: """ Tests call data remains after a call to another contract. Caller pushes data into memory, then calls the target. Target calls 3rd contract. 3rd contract returns. Target writes calldata to storage. """ env = Environment() sender = pre.fund_eoa() address_sub_called = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.SSTORE(slot_delegate_code_worked, value_code_worked) + Op.STOP ) ] ), storage={slot_delegate_code_worked: value_exceptional_abort_canary}, ) called_code = ( Op.MSTORE(0, value_calldata_2) + Op.SSTORE(slot_call_status, value_exceptional_abort_canary) + Op.SSTORE(slot_calldata_1, value_exceptional_abort_canary) + Op.SSTORE(slot_code_worked, value_exceptional_abort_canary) + Op.SSTORE( slot_call_status, opcode( address=address_sub_called, args_offset=0, args_size=size_calldata, ), ) + Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) match opcode: case Op.CALL | Op.CALLCODE | Op.DELEGATECALL | Op.STATICCALL: address_called = pre.deploy_contract(code=called_code) case Op.EXTCALL | Op.EXTDELEGATECALL | Op.EXTSTATICCALL: address_called = pre.deploy_contract( Container( sections=[ Section.Code(code=called_code), ] ), ) address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.MSTORE(0, value_calldata_1) + Op.SSTORE(slot_calldata_1, value_exceptional_abort_canary) + Op.SSTORE(slot_code_worked, value_exceptional_abort_canary) + Op.SSTORE( slot_call_status, Op.EXTCALL(address_called, 0, size_calldata, 0), ) + Op.SSTORE(slot_calldata_1, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ), ] ), storage={slot_call_status: value_exceptional_abort_canary}, balance=10**9, ) match opcode: case Op.STATICCALL: called_storage = { slot_code_worked: value_code_worked, slot_call_status: LEGACY_CALL_FAILURE, slot_calldata_1: value_calldata_1, } sub_called_storage = { slot_delegate_code_worked: value_exceptional_abort_canary, } case Op.DELEGATECALL | Op.CALLCODE: called_storage = { slot_code_worked: value_code_worked, slot_delegate_code_worked: value_code_worked, slot_call_status: LEGACY_CALL_SUCCESS, slot_calldata_1: value_calldata_1, } sub_called_storage = { slot_delegate_code_worked: value_exceptional_abort_canary, } case Op.CALL: called_storage = { slot_code_worked: value_code_worked, slot_call_status: LEGACY_CALL_SUCCESS, slot_calldata_1: value_calldata_1, } sub_called_storage = { slot_delegate_code_worked: value_code_worked, } case Op.EXTSTATICCALL: called_storage = { slot_code_worked: value_code_worked, slot_call_status: EXTCALL_FAILURE, slot_calldata_1: value_calldata_1, } sub_called_storage = { slot_delegate_code_worked: value_exceptional_abort_canary, } case Op.EXTDELEGATECALL: called_storage = { slot_code_worked: value_code_worked, slot_delegate_code_worked: value_code_worked, slot_call_status: EXTCALL_SUCCESS, slot_calldata_1: value_calldata_1, } sub_called_storage = { slot_delegate_code_worked: value_exceptional_abort_canary, } case Op.EXTCALL: called_storage = { slot_code_worked: value_code_worked, slot_call_status: EXTCALL_SUCCESS, slot_calldata_1: value_calldata_1, } sub_called_storage = { slot_delegate_code_worked: value_code_worked, } case _: raise ValueError(f"Unexpected opcode: {opcode}") post = { address_caller: Account(storage={slot_code_worked: value_code_worked}), address_called: Account(storage=called_storage), address_sub_called: Account(storage=sub_called_storage), } tx = Transaction(to=address_caller, gas_limit=4_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize("operation", [Op.EXTCALL, Op.EXTSTATICCALL, Op.EXTDELEGATECALL]) @pytest.mark.parametrize( "offset_field", [ pytest.param(True, id="offset"), pytest.param(False, id="size"), ], ) @pytest.mark.parametrize( ("test_arg", "success"), [ pytest.param(0, True, id="zero"), pytest.param(0xFF, True, id="8-bit"), pytest.param(0x100, True, id="9-bit"), pytest.param(0xFFFF, True, id="16-bit"), pytest.param(0x10000, True, id="17-bit"), pytest.param(0x1FFFF20, False, id="32-bit-mem-cost"), pytest.param(0x2D412E0, False, id="33-bit-mem-cost"), pytest.param(0xFFFFFFFF, False, id="32-bit"), pytest.param(0x100000000, False, id="33-bit"), pytest.param(0x1FFFFFFFF20, False, id="64-bit-mem-cost"), pytest.param(0x2D413CCCF00, False, id="65-bit-mem-cost"), pytest.param(0xFFFFFFFFFFFFFFFF, False, id="64-bit"), pytest.param(0x10000000000000000, False, id="65-bit"), pytest.param(0xFFFFFFFFFFFFFFFF, False, id="128-bit"), pytest.param(0x10000000000000000, False, id="129-bit"), pytest.param(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, False, id="256-bit"), ], ) def test_extcalls_input_offset( state_test: StateTestFiller, pre: Alloc, operation: Op, offset_field: str, test_arg: int, success: bool, ) -> None: """ Tests call data into EXT*CALL including multiple offset conditions. Returner returns a success value, which caller stores. If memory expansion cost is less than 2 billion gas call succeeds. Else whole transaction aborts, leaving canaries in memory. The name id of `*-mem-cost` refers to the bit-length of the result of the calculated memory expansion cost. Their length choice is designed to cause problems on shorter bit-length representations with native integers. The `offset_field` param indicates what part of the input data arguments are being tested, either the offset of the data in memory or the size of the data in memory. The `test_arg` param is the value passed into the field being tested (offset or size), intending to trigger integer size bugs for that particular field. """ env = Environment(gas_limit=1_000_000_000) sender = pre.fund_eoa() address_returner = pre.deploy_contract( Container( sections=[ Section.Code(code=Op.MSTORE(0, value_code_worked) + Op.RETURN(0, 32)), ] ), ) address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=( operation(address=address_returner, args_offset=test_arg, args_size=32) if offset_field else operation( address=address_returner, args_offset=32, args_size=test_arg ) ) + Op.SSTORE(slot_eof_target_returndata, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) ] ), storage={ slot_code_worked: value_exceptional_abort_canary, slot_eof_target_returndata: value_exceptional_abort_canary, }, ) post = { address_caller: Account( storage={ slot_eof_target_returndata: value_code_worked if success else value_exceptional_abort_canary, slot_code_worked: value_code_worked if success else value_exceptional_abort_canary, } ), } tx = Transaction(to=address_caller, gas_limit=1_000_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py ================================================ """test calls across EOF and Legacy.""" import itertools from enum import Enum, auto, unique import pytest from ethereum_test_base_types import Address, HashInt from ethereum_test_tools import ( EOA, Account, Alloc, Environment, StateTestFiller, Storage, Transaction, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.helpers import compute_eofcreate_address from ethereum_test_vm import Bytecode, EVMCodeType from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .spec import ( EXTCALL_FAILURE, EXTCALL_REVERT, EXTCALL_SUCCESS, LEGACY_CALL_FAILURE, LEGACY_CALL_SUCCESS, ) pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md" REFERENCE_SPEC_VERSION = "2f013de4065babde7c02f84a2ce9864a3c5bfbd3" """Storage addresses for common testing fields""" _slot = itertools.count(1) slot_code_worked = next(_slot) slot_call_result = next(_slot) slot_returndata = next(_slot) slot_returndatasize = next(_slot) slot_caller = next(_slot) slot_returndatasize_before_clear = next(_slot) slot_max_depth = next(_slot) slot_last_slot = next(_slot) """Storage values for common testing fields""" value_code_worked = 0x2015 value_returndata_magic = b"\x42" contract_eof_sstore = Container( sections=[ Section.Code( code=Op.SSTORE(slot_caller, Op.CALLER()) + Op.STOP, ) ] ) @unique class TargetAccountType(Enum): """Kinds of target accounts for calls.""" EMPTY = auto() EOA = auto() LEGACY_CONTRACT = auto() EOF_CONTRACT = auto() LEGACY_CONTRACT_INVALID = auto() EOF_CONTRACT_INVALID = auto() LEGACY_CONTRACT_REVERT = auto() EOF_CONTRACT_REVERT = auto() IDENTITY_PRECOMPILE = auto() def __str__(self) -> str: """Return string representation of the enum.""" return f"{self.name}" @pytest.fixture def target_address(pre: Alloc, target_account_type: TargetAccountType) -> Address: """Target address of the call depending on required type of account.""" match target_account_type: case TargetAccountType.EMPTY: return pre.fund_eoa(amount=0) case TargetAccountType.EOA: return pre.fund_eoa() case TargetAccountType.LEGACY_CONTRACT: return pre.deploy_contract( code=Op.STOP, ) case TargetAccountType.EOF_CONTRACT: return pre.deploy_contract( code=Container.Code(Op.STOP), ) case TargetAccountType.LEGACY_CONTRACT_INVALID: return pre.deploy_contract( code=Op.INVALID, ) case TargetAccountType.EOF_CONTRACT_INVALID: return pre.deploy_contract( code=Container.Code(Op.INVALID), ) case TargetAccountType.LEGACY_CONTRACT_REVERT: return pre.deploy_contract( code=Op.REVERT(0, 0), ) case TargetAccountType.EOF_CONTRACT_REVERT: return pre.deploy_contract( code=Container.Code(Op.REVERT(0, 0)), ) case TargetAccountType.IDENTITY_PRECOMPILE: return identity @pytest.mark.parametrize( "opcode", [ Op.CALL, Op.DELEGATECALL, Op.CALLCODE, Op.STATICCALL, ], ) def test_legacy_calls_eof_sstore( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """Test legacy contracts calling EOF contracts that use SSTORE.""" env = Environment() destination_contract_address = pre.deploy_contract(contract_eof_sstore) caller_contract = Op.SSTORE( slot_call_result, opcode(address=destination_contract_address) ) + Op.SSTORE(slot_code_worked, value_code_worked) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = Storage( { slot_code_worked: value_code_worked, # type: ignore slot_call_result: LEGACY_CALL_SUCCESS, # type: ignore } ) destination_storage = Storage() if opcode == Op.CALL: destination_storage[slot_caller] = calling_contract_address elif opcode == Op.DELEGATECALL: calling_storage[slot_caller] = sender elif opcode == Op.CALLCODE: calling_storage[slot_caller] = calling_contract_address elif opcode == Op.STATICCALL: calling_storage[slot_call_result] = LEGACY_CALL_FAILURE post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage=destination_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.CALL, Op.DELEGATECALL, Op.CALLCODE, Op.STATICCALL, ], ) def test_legacy_calls_eof_mstore( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """Test legacy contracts calling EOF contracts that only return data.""" env = Environment() destination_contract_code = Container( sections=[ Section.Code( code=Op.MSTORE8(0, int.from_bytes(value_returndata_magic, "big")) + Op.RETURN(0, len(value_returndata_magic)), ) ] ) destination_contract_address = pre.deploy_contract(destination_contract_code) caller_contract = ( Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE) + Op.RETURNDATACOPY(31, 0, 1) + Op.SSTORE(slot_returndata, Op.MLOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: LEGACY_CALL_SUCCESS, slot_returndatasize: len(value_returndata_magic), slot_returndata: value_returndata_magic, } post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage={}), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) def test_eof_calls_eof_sstore( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """Test EOF contracts calling EOF contracts that use SSTORE.""" env = Environment() destination_contract_address = pre.deploy_contract(contract_eof_sstore) caller_contract = Container( sections=[ Section.Code( code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ] ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = Storage( { HashInt(slot_code_worked): HashInt(value_code_worked), HashInt(slot_call_result): HashInt(EXTCALL_SUCCESS), } ) destination_storage = Storage() if opcode == Op.EXTCALL: destination_storage[slot_caller] = calling_contract_address elif opcode == Op.EXTDELEGATECALL: calling_storage[slot_caller] = sender elif opcode == Op.EXTSTATICCALL: calling_storage[slot_call_result] = EXTCALL_FAILURE post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage=destination_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) def test_eof_calls_eof_mstore( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """Test EOF contracts calling EOF contracts that return data.""" env = Environment() destination_contract_code = Container( sections=[ Section.Code( code=Op.MSTORE8(0, int.from_bytes(value_returndata_magic, "big")) + Op.RETURN(0, 32), ) ] ) destination_contract_address = pre.deploy_contract(destination_contract_code) caller_contract = Container( sections=[ Section.Code( code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE) + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ] ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_SUCCESS, slot_returndatasize: 0x20, slot_returndata: value_returndata_magic + b"\0" * (0x20 - len(value_returndata_magic)), } post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage={}), } state_test( env=env, pre=pre, post=post, tx=tx, ) identity = Address(0x04) # `blake2f`` is chosen for the test because it fails unless args_size == 213, # which is what we are interested in. blake2f = Address(0x09) # `p256verify` / RIP-7212 has been in and out of prague and osaka. # Hence we need to test explicitly p256verify = Address(0x100) @pytest.mark.parametrize( ["opcode", "precompile", "expected_result"], [ pytest.param(Op.EXTCALL, identity, EXTCALL_SUCCESS, id="extcall_success"), pytest.param(Op.EXTDELEGATECALL, identity, EXTCALL_REVERT, id="extdelegatecall_blocked1"), pytest.param(Op.EXTSTATICCALL, identity, EXTCALL_SUCCESS, id="extstaticcall_success"), pytest.param(Op.EXTCALL, blake2f, EXTCALL_FAILURE, id="extcall_failure"), pytest.param(Op.EXTDELEGATECALL, blake2f, EXTCALL_REVERT, id="extdelegatecall_blocked2"), pytest.param(Op.EXTSTATICCALL, blake2f, EXTCALL_FAILURE, id="extstaticcall_failure"), pytest.param(Op.EXTCALL, p256verify, EXTCALL_SUCCESS, id="extcall_p256verify"), pytest.param( Op.EXTDELEGATECALL, p256verify, EXTCALL_REVERT, id="extdelegatecall_p256verify" ), pytest.param(Op.EXTSTATICCALL, p256verify, EXTCALL_SUCCESS, id="extstaticcall_p256verify"), ], ) def test_eof_calls_precompile( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, precompile: Address, expected_result: int, ) -> None: """Test EOF contracts calling precompiles.""" env = Environment() caller_contract = Container.Code( Op.MSTORE(0, value_returndata_magic) + Op.SSTORE(slot_call_result, opcode(address=precompile, args_offset=0, args_size=32)) + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE) + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=5000000, ) success_identity = expected_result == EXTCALL_SUCCESS and precompile == identity calling_storage = { slot_code_worked: value_code_worked, slot_call_result: expected_result, slot_returndatasize: 32 if success_identity else 0, slot_returndata: value_returndata_magic if success_identity else 0, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) def test_eof_calls_legacy_sstore( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """Test EOF contracts calling Legacy contracts that use SSTORE.""" env = Environment() destination_contract_code = Op.SSTORE(slot_caller, Op.CALLER()) + Op.STOP destination_contract_address = pre.deploy_contract(destination_contract_code) caller_contract = Container( sections=[ Section.Code( code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ] ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_SUCCESS, } destination_storage = {} if opcode == Op.EXTCALL: destination_storage[slot_caller] = calling_contract_address elif opcode == Op.EXTDELEGATECALL: # EOF delegate call to legacy is a light failure by rule calling_storage[slot_call_result] = EXTCALL_REVERT elif opcode == Op.EXTSTATICCALL: calling_storage[slot_call_result] = EXTCALL_FAILURE post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage=destination_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) def test_eof_calls_legacy_mstore( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """Test EOF contracts calling Legacy contracts that return data.""" env = Environment() destination_contract_code = Op.MSTORE8( 0, int.from_bytes(value_returndata_magic, "big") ) + Op.RETURN(0, 32) destination_contract_address = pre.deploy_contract(destination_contract_code) caller_contract = Container( sections=[ Section.Code( code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE) + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ] ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_SUCCESS, slot_returndatasize: 0x20, slot_returndata: value_returndata_magic + b"\0" * (0x20 - len(value_returndata_magic)), } if opcode == Op.EXTDELEGATECALL: # EOF delegate call to legacy is a light failure by rule calling_storage[slot_call_result] = EXTCALL_REVERT calling_storage[slot_returndatasize] = 0 calling_storage[slot_returndata] = 0 post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage={}), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) @pytest.mark.parametrize( ["destination_code", "expected_result"], [ pytest.param(Op.REVERT(0, 0), EXTCALL_REVERT, id="legacy_revert"), pytest.param(Op.INVALID, EXTCALL_FAILURE, id="legacy_invalid"), pytest.param(Op.SHA3(0, 2**255), EXTCALL_FAILURE, id="legacy_oog"), pytest.param(Op.RETURNDATACOPY(0, 1, 2), EXTCALL_FAILURE, id="legacy_oob_returndata"), pytest.param(Container.Code(Op.REVERT(0, 0)), EXTCALL_REVERT, id="eof_revert"), pytest.param(Container.Code(Op.INVALID), EXTCALL_FAILURE, id="eof_invalid"), pytest.param(Container.Code(Op.SHA3(0, 2**255) + Op.STOP), EXTCALL_FAILURE, id="eof_oog"), ], ) def test_callee_fails( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, destination_code: Bytecode | Container, expected_result: int, ) -> None: """Test EOF contracts calling contracts that fail for various reasons.""" env = Environment() destination_contract_address = pre.deploy_contract(destination_code) caller_contract = Container.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.STOP, ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=4000000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_REVERT if opcode == Op.EXTDELEGATECALL and not isinstance(destination_code, Container) else expected_result, } post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage={}), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( ["opcode", "destination_code", "expected_result"], [ pytest.param(Op.EXTCALL, Op.ADDRESS, "destination", id="extcall_address"), pytest.param(Op.EXTDELEGATECALL, Op.ADDRESS, "caller", id="extdelegatecall_address"), pytest.param(Op.EXTSTATICCALL, Op.ADDRESS, "destination", id="extstaticcall_address"), pytest.param(Op.EXTCALL, Op.CALLER, "caller", id="extcall_caller"), pytest.param(Op.EXTDELEGATECALL, Op.CALLER, "sender", id="extdelegatecall_caller"), pytest.param(Op.EXTSTATICCALL, Op.CALLER, "caller", id="extstaticcall_caller"), pytest.param(Op.EXTCALL, Op.CALLVALUE, 0, id="extcall_call_value"), pytest.param( Op.EXTDELEGATECALL, Op.CALLVALUE, "tx_value", id="extdelegatecall_call_value" ), pytest.param(Op.EXTSTATICCALL, Op.CALLVALUE, 0, id="extstaticcall_call_value"), pytest.param(Op.EXTCALL, Op.ORIGIN, "sender", id="extcall_origin"), pytest.param(Op.EXTDELEGATECALL, Op.ORIGIN, "sender", id="extdelegatecall_origin"), pytest.param(Op.EXTSTATICCALL, Op.ORIGIN, "sender", id="extstaticcall_origin"), ], ) @pytest.mark.with_all_evm_code_types def test_callee_context( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, destination_code: Bytecode, expected_result: str | int, evm_code_type: EVMCodeType, ) -> None: """Test EOF calls' callee context instructions.""" env = Environment() tx_value = 0x1123 destination_contract_address = pre.deploy_contract( Op.MSTORE(0, destination_code) + Op.RETURN(0, 32) ) caller_contract = Container.Code( Op.SSTORE(slot_code_worked, value_code_worked) + opcode(address=destination_contract_address) + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0)) + Op.STOP, ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=100000, value=tx_value, ) expected_bytes: Address | int if expected_result == "destination": expected_bytes = destination_contract_address elif expected_result == "caller": expected_bytes = calling_contract_address elif expected_result == "sender": expected_bytes = sender elif expected_result == "tx_value": expected_bytes = tx_value elif isinstance(expected_result, int): expected_bytes = expected_result else: raise TypeError("Unexpected expected_result", expected_result) calling_storage = { slot_code_worked: value_code_worked, slot_returndata: 0 if (opcode == Op.EXTDELEGATECALL and evm_code_type == EVMCodeType.LEGACY) else expected_bytes, } post = { calling_contract_address: Account(storage=calling_storage), destination_contract_address: Account(storage={}), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, ], ) @pytest.mark.parametrize("fail_opcode", [Op.REVERT, Op.INVALID]) def test_eof_calls_eof_then_fails( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, fail_opcode: Op, ) -> None: """Test EOF contracts calling EOF contracts and failing after the call.""" env = Environment() destination_contract_address = pre.deploy_contract(contract_eof_sstore) caller_contract = Container.Code( Op.SSTORE(slot_call_result, opcode(address=destination_contract_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + fail_opcode(offset=0, size=0), ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) post = { calling_contract_address: Account(storage=Storage()), destination_contract_address: Account(storage=Storage()), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) @pytest.mark.parametrize( "target_account_type", TargetAccountType, ) @pytest.mark.parametrize("value", [0, 1]) def test_eof_calls_clear_return_buffer( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, target_address: Address, value: int, ) -> None: """Test EOF contracts calling clears returndata buffer.""" env = Environment() filling_contract_code = Container.Code( Op.MSTORE8(0, int.from_bytes(value_returndata_magic, "big")) + Op.RETURN(0, 32), ) filling_callee_address = pre.deploy_contract(filling_contract_code) caller_contract = Container.Code( # First fill the return buffer and sanity check Op.EXTCALL(filling_callee_address, 0, 0, 0) + Op.SSTORE(slot_returndatasize_before_clear, Op.RETURNDATASIZE) # Then call something that doesn't return and check returndata cleared + opcode(address=target_address, value=value) + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = { slot_code_worked: value_code_worked, # Sanity check slot_returndatasize_before_clear: 0x20, slot_returndatasize: 0, } post = { calling_contract_address: Account(storage=calling_storage), filling_callee_address: Account(storage={}), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.CALL, Op.EXTCALL, ], ) def test_eof_calls_static_flag_with_value( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """ Test EOF contracts calls handle static flag and sending value correctly. """ env = Environment() noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP)) failing_contract_code = opcode(address=noop_callee_address, value=1) + Op.STOP failing_contract_address = pre.deploy_contract( Container.Code( failing_contract_code, ) if opcode == Op.EXTCALL else failing_contract_code ) calling_contract_address = pre.deploy_contract( Container.Code( Op.SSTORE(slot_call_result, Op.EXTSTATICCALL(address=failing_contract_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) ) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=5_000_000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_FAILURE, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) min_retained_gas = 2300 min_callee_gas = 5000 @pytest.mark.parametrize( ["opcode", "extra_gas_value_transfer", "value"], [ [Op.EXTCALL, 0, 0], [Op.EXTCALL, 9_000, 1], [Op.EXTSTATICCALL, 0, 0], [Op.EXTDELEGATECALL, 0, 0], ], ids=["extcall_without_value", "extcall_with_value", "extstaticcall", "extdelegatecall"], ) @pytest.mark.parametrize( ["extra_gas_limit", "reverts"], [ [0, False], [min_retained_gas, False], [min_callee_gas, False], [min_retained_gas + min_callee_gas, True], ], ids=["no_allowances", "only_retained", "only_callee", "both_allowances"], ) def test_eof_calls_min_callee_gas( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, extra_gas_value_transfer: int, value: int, extra_gas_limit: int, reverts: bool, ) -> None: """ Test EOF contracts calls do light failure when retained/callee gas is not enough. Premise of the test is that there exists a range of `gas_limit` values, which are enough for all instructions to execute, but call's returned value is 1, meaning not enough for gas allowances (MIN_RETAINED_GAS and MIN_CALLEE_GAS) - ones marked with `reverts==False`. Once we provide both allowances, the RJUMPI condition is no longer met and `reverts==True`. """ env = Environment() noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP)) revert_block = Op.REVERT(0, 0) calling_contract_address = pre.deploy_contract( Container.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.EQ(opcode(address=noop_callee_address, value=value), EXTCALL_REVERT) # If the return code isn't 1, it means gas was enough to cover the # allowances. + Op.RJUMPI[len(revert_block)] + revert_block + Op.STOP ), balance=value, ) # `no_oog_gas` is minimum amount of gas_limit which makes the transaction # not go oog. push_operations = 3 + len(opcode.kwargs) no_oog_gas = ( 21_000 + 20_000 # SSTORE + 2_100 # SSTORE COLD_SLOAD_COST + push_operations * 3 # PUSH operations + 100 # WARM_STORAGE_READ_COST + 2500 # COLD_ACCOUNT_ACCESS - WARM_STORAGE_READ_COST + extra_gas_value_transfer + 4 # RJUMPI + 3 # EQ ) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=no_oog_gas + extra_gas_limit, ) calling_storage = { slot_code_worked: 0 if reverts else value_code_worked, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "balance", [0, 1, 2, pytest.param(2**256 - 1, marks=pytest.mark.pre_alloc_modify)] ) @pytest.mark.parametrize("value", [0, 1, 2, 2**256 - 1]) def test_eof_calls_with_value( state_test: StateTestFiller, pre: Alloc, sender: EOA, balance: int, value: int, ) -> None: """ Test EOF contracts calls handle value calls with and without enough balance. """ env = Environment() noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP)) calling_contract_address = pre.deploy_contract( Container.Code( Op.SSTORE(slot_call_result, Op.EXTCALL(address=noop_callee_address, value=value)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ), balance=balance, ) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=50000000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_REVERT if balance < value else EXTCALL_SUCCESS, } post = { calling_contract_address: Account(storage=calling_storage), noop_callee_address: Account(balance=0 if balance < value else value), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) def test_eof_calls_msg_depth( state_test: StateTestFiller, pre: Alloc, sender: EOA, opcode: Op, ) -> None: """ Test EOF contracts calls handle msg depth limit correctly (1024). Note: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet. """ # Not a precise gas_limit formula, but enough to exclude risk of gas # causing the failure. gas_limit = int(200000 * (64 / 63) ** 1024) env = Environment(gas_limit=gas_limit) # Flow of the test: # `callee_code` is recursively calling itself, passing msg depth as # calldata (kept with the `MSTORE(0, ADD(...))`). When maximum msg depth is # reached the call fails and starts returning. The deep-most frame returns: # - current reached msg depth (expected to be the maximum 1024), with the # `MSTORE(32, ADD(...))` # - the respective return code of the EXT*CALL (expected to be 1 - light # failure), with the `MSTORE(64, NOOP)`. Note the `NOOP` is just to # appease the `Op.MSTORE` call, the return code value is actually # coming from the `Op.DUP1` # When unwinding the msg call stack, the intermediate frames return # whatever the deeper callee returned with the `RETURNDATACOPY` # instruction. # Memory offsets layout: # - 0 - input - msg depth # - 32 - output - msg depth # - 64 - output - call result returndatacopy_block = Op.RETURNDATACOPY(32, 0, 64) + Op.RETURN(32, 64) deep_most_result_block = ( Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.RETURN(32, 64) ) rjump_offset = len(returndatacopy_block) callee_code = Container.Code( # current stack depth in memory bytes 0-31 Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1)) # pass it along deeper as calldata + opcode(address=Op.ADDRESS, args_size=32) # duplicate return code for the `returndatacopy_block` below + Op.DUP1 # if return code was: # - 1, we're in the deep-most frame, `deep_most_result_block` returns # the actual result # - 0, we're in an intermediate frame, `returndatacopy_block` only # passes on the result + Op.RJUMPI[rjump_offset] + returndatacopy_block + deep_most_result_block ) callee_address = pre.deploy_contract(callee_code) calling_contract_address = pre.deploy_contract( Container.Code( Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.EXTCALL(address=callee_address, args_size=32) + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) ) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=gas_limit, ) calling_storage = { slot_max_depth: 1024, slot_code_worked: value_code_worked, slot_call_result: EXTCALL_REVERT, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize("target_account_type", TargetAccountType) @pytest.mark.parametrize("delegate", [True, False]) @pytest.mark.parametrize("call_from_initcode", [True, False]) def test_extdelegate_call_targets( state_test: StateTestFiller, pre: Alloc, target_account_type: TargetAccountType, target_address: Address, delegate: bool, call_from_initcode: bool, ) -> None: """ Test EOF contracts extdelegatecalling various targets, especially resolved via 7702 delegation. """ env = Environment() if delegate: target_address = pre.fund_eoa(0, delegation=target_address) sender = pre.fund_eoa() delegate_call_code = Op.SSTORE( slot_call_result, Op.EXTDELEGATECALL(address=target_address) ) + Op.SSTORE(slot_code_worked, value_code_worked) if call_from_initcode: # Call from initcode caller_contract = Container( sections=[ Section.Code( code=delegate_call_code + Op.RETURNCODE[0](0, 0), ), Section.Container(Container.Code(Op.STOP)), ] ) initcode_hash = caller_contract.hash factory_address = pre.deploy_contract( code=Op.TXCREATE(tx_initcode_hash=initcode_hash) + Op.STOP, ) tx = Transaction( sender=sender, to=factory_address, data=caller_contract, gas_limit=4_000_000, initcodes=[caller_contract], ) calling_contract_address = compute_eofcreate_address(factory_address, 0) else: # Normal call from existing contract caller_contract = Container.Code( delegate_call_code + Op.STOP, ) calling_contract_address = pre.deploy_contract(caller_contract) tx = Transaction( sender=sender, to=calling_contract_address, gas_limit=4_000_000, ) calling_storage = { slot_code_worked: value_code_worked, slot_call_result: EXTCALL_SUCCESS if target_account_type == TargetAccountType.EOF_CONTRACT else EXTCALL_FAILURE if target_account_type == TargetAccountType.EOF_CONTRACT_INVALID else EXTCALL_REVERT, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py ================================================ """ Gas consumption tests for EXT*CALL instructions Tests for gas consumption in [EIP-7069: Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069). """ import pytest from ethereum_test_base_types import Address from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Environment, StateTestFiller from ethereum_test_types.eof.v1 import Container from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..gas_test import gas_test from . import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) COLD_ACCOUNT_ACCESS_GAS = 2600 WARM_ACCOUNT_ACCESS_GAS = 100 CALL_WITH_VALUE_GAS = 9000 ACCOUNT_CREATION_GAS = 25000 @pytest.fixture def state_env() -> Environment: """ Prepare the environment for all state test cases. Main difference is that the excess blob gas is not increased by the target, as there is no genesis block -> block 1 transition, and therefore the excess blob gas is not decreased by the target. """ return Environment() @pytest.mark.parametrize( ["opcode", "pre_setup", "cold_gas", "warm_gas", "new_account"], [ pytest.param( Op.EXTCALL, Op.PUSH0, COLD_ACCOUNT_ACCESS_GAS, WARM_ACCOUNT_ACCESS_GAS, False, id="EXTCALL", ), pytest.param( Op.EXTCALL, Op.PUSH1(1), COLD_ACCOUNT_ACCESS_GAS + CALL_WITH_VALUE_GAS, WARM_ACCOUNT_ACCESS_GAS + CALL_WITH_VALUE_GAS, False, id="EXTCALL_with_value", ), pytest.param( Op.EXTDELEGATECALL, Op.NOOP, COLD_ACCOUNT_ACCESS_GAS, WARM_ACCOUNT_ACCESS_GAS, False, id="EXTDELEGATECALL", ), pytest.param( Op.EXTSTATICCALL, Op.NOOP, COLD_ACCOUNT_ACCESS_GAS, WARM_ACCOUNT_ACCESS_GAS, False, id="EXTSTATICCALL", ), pytest.param( Op.EXTCALL, Op.PUSH0, COLD_ACCOUNT_ACCESS_GAS, WARM_ACCOUNT_ACCESS_GAS, True, id="EXTCALL_new_acc", ), pytest.param( Op.EXTCALL, Op.PUSH1(1), COLD_ACCOUNT_ACCESS_GAS + ACCOUNT_CREATION_GAS + CALL_WITH_VALUE_GAS, WARM_ACCOUNT_ACCESS_GAS + ACCOUNT_CREATION_GAS + CALL_WITH_VALUE_GAS, True, id="EXTCALL_with_value_new_acc", ), pytest.param( Op.EXTDELEGATECALL, Op.NOOP, COLD_ACCOUNT_ACCESS_GAS, WARM_ACCOUNT_ACCESS_GAS, True, id="EXTDELEGATECALL_new_acc", ), pytest.param( Op.EXTSTATICCALL, Op.NOOP, COLD_ACCOUNT_ACCESS_GAS, WARM_ACCOUNT_ACCESS_GAS, True, id="EXTSTATICCALL_new_acc", ), ], ) @pytest.mark.parametrize( "mem_expansion_bytes", [0, 1, 32, 33], ) def test_ext_calls_gas( state_test: StateTestFiller, pre: Alloc, fork: Fork, state_env: Environment, opcode: Op, pre_setup: Op, cold_gas: int, warm_gas: int, new_account: bool, mem_expansion_bytes: int, ) -> None: """ Tests variations of EXT*CALL gas, both warm and cold, without and with mem expansions. """ address_target = ( pre.fund_eoa(0) if new_account else pre.deploy_contract(Container.Code(Op.STOP)) ) cost_memory_bytes = fork.memory_expansion_gas_calculator() gas_test( state_test, state_env, pre, setup_code=pre_setup + Op.PUSH1(mem_expansion_bytes) + Op.PUSH0 + Op.PUSH20(address_target), subject_code=opcode, tear_down_code=Op.STOP, cold_gas=cold_gas + cost_memory_bytes(new_bytes=mem_expansion_bytes), warm_gas=warm_gas + cost_memory_bytes(new_bytes=mem_expansion_bytes), ) @pytest.mark.parametrize("opcode", [Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]) @pytest.mark.parametrize("value", [0, 1]) def test_transfer_gas_is_cleared( state_test: StateTestFiller, pre: Alloc, state_env: Environment, opcode: Op, value: int, ) -> None: """ Test that EXT*CALL call doesn't charge for value transfer, even if the outer call transferred value. NOTE: This is particularly possible for EXTDELEGATECALL, which carries over the value sent in the outer call, however, we extend the test to all 3 EXT*CALL opcodes for good measure. """ noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP)) extdelegatecall_contract_address = pre.deploy_contract( Container.Code(opcode(address=noop_callee_address) + Op.STOP) ) push_gas = (4 if opcode == Op.EXTCALL else 3) * 3 gas_test( state_test, state_env, pre, setup_code=Op.PUSH1(value) + Op.PUSH0 * 2 + Op.PUSH20(extdelegatecall_contract_address), subject_code=Op.EXTCALL, subject_balance=5 * value, tear_down_code=Op.STOP, # NOTE: CALL_WITH_VALUE_GAS is charged only once on the outer EXTCALL, # while the base call gas - twice. cold_gas=2 * COLD_ACCOUNT_ACCESS_GAS + (CALL_WITH_VALUE_GAS if value > 0 else 0) + push_gas, warm_gas=2 * WARM_ACCOUNT_ACCESS_GAS + (CALL_WITH_VALUE_GAS if value > 0 else 0) + push_gas, out_of_gas_testing=False, ) @pytest.mark.parametrize("opcode", [Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]) def test_late_account_create( state_test: StateTestFiller, pre: Alloc, state_env: Environment, opcode: Op, ) -> None: """ Test EXTCALL to a non-existent account after another EXT*CALL has called it and not created it. """ empty_address = Address(0xDECAFC0DE) gas_test( state_test, state_env, pre, prelude_code=Op.BALANCE(address=empty_address), setup_code=opcode(address=empty_address) + Op.PUSH1(1) + Op.PUSH0 + Op.PUSH0 + Op.PUSH20(empty_address), subject_code=Op.EXTCALL, subject_balance=5, tear_down_code=Op.STOP, cold_gas=WARM_ACCOUNT_ACCESS_GAS + CALL_WITH_VALUE_GAS + ACCOUNT_CREATION_GAS, warm_gas=WARM_ACCOUNT_ACCESS_GAS + CALL_WITH_VALUE_GAS, out_of_gas_testing=False, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py ================================================ """Memory expansion tests for RETURNDATACOPY executing in EOF code.""" from typing import Mapping, Tuple import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Storage, Transaction, ) from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7069.md" REFERENCE_SPEC_VERSION = "e469fd6c8d736b2a3e1ce632263e3ad36fc8624d" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.fixture def callee_bytecode(dest: int, src: int, length: int) -> Container: """Callee performs a single returndatacopy operation and then returns.""" bytecode = Bytecode() # Copy the initial memory bytecode += Op.CALLDATACOPY(0x00, 0x00, Op.CALLDATASIZE()) # Pushes for the return operation bytecode += Op.PUSH1(0x00) + Op.PUSH1(0x00) # Perform the returndatacopy operation bytecode += Op.RETURNDATACOPY(dest, src, length) bytecode += Op.RETURN return Container.Code(code=bytecode) @pytest.fixture def subcall_exact_cost( fork: Fork, initial_memory: bytes, dest: int, length: int, ) -> int: """ Return exact cost of the subcall, based on the initial memory and the length of the copy. """ cost_memory_bytes = fork.memory_expansion_gas_calculator() returndatacopy_cost = 3 returndatacopy_cost += 3 * ((length + 31) // 32) if length > 0 and dest + length > len(initial_memory): returndatacopy_cost += cost_memory_bytes( new_bytes=dest + length, previous_bytes=len(initial_memory) ) calldatacopy_cost = 3 calldatacopy_cost += 3 * ((len(initial_memory) + 31) // 32) calldatacopy_cost += cost_memory_bytes(new_bytes=len(initial_memory)) pushes_cost = 3 * 7 calldatasize_cost = 2 return returndatacopy_cost + calldatacopy_cost + pushes_cost + calldatasize_cost @pytest.fixture def bytecode_storage( subcall_exact_cost: int, successful: bool, memory_expansion_address: Address, ) -> Tuple[Bytecode, Storage.StorageDictType]: """ Prepare bytecode and storage for the test, based on the expected result of the subcall (whether it succeeds or fails depending on the length of the memory expansion). """ bytecode = Bytecode() storage = {} # Pass on the calldata bytecode += Op.CALLDATACOPY(0x00, 0x00, Op.CALLDATASIZE()) subcall_gas = subcall_exact_cost if successful else subcall_exact_cost - 1 # Perform the subcall and store a one in the result location bytecode += Op.SSTORE( Op.CALL(subcall_gas, memory_expansion_address, 0, 0, Op.CALLDATASIZE(), 0, 0), 1 ) storage[int(successful)] = 1 return (bytecode, storage) @pytest.fixture def tx_max_fee_per_gas() -> int: # noqa: D103 return 7 @pytest.fixture def block_gas_limit() -> int: # noqa: D103 return 100_000_000 @pytest.fixture def tx_gas_limit( # noqa: D103 subcall_exact_cost: int, block_gas_limit: int, ) -> int: return min(max(500_000, subcall_exact_cost * 2), block_gas_limit) @pytest.fixture def env( # noqa: D103 block_gas_limit: int, ) -> Environment: return Environment(gas_limit=block_gas_limit) @pytest.fixture def caller_address( # noqa: D103 pre: Alloc, bytecode_storage: Tuple[bytes, Storage.StorageDictType] ) -> Address: return pre.deploy_contract(code=bytecode_storage[0]) @pytest.fixture def memory_expansion_address(pre: Alloc, callee_bytecode: bytes) -> Address: # noqa: D103 return pre.deploy_contract(code=callee_bytecode) @pytest.fixture def sender(pre: Alloc, tx_max_fee_per_gas: int, tx_gas_limit: int) -> Address: # noqa: D103 return pre.fund_eoa(tx_max_fee_per_gas * tx_gas_limit) @pytest.fixture def tx( # noqa: D103 sender: Address, caller_address: Address, initial_memory: bytes, tx_max_fee_per_gas: int, tx_gas_limit: int, ) -> Transaction: return Transaction( sender=sender, to=caller_address, data=initial_memory, gas_limit=tx_gas_limit, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=0, ) @pytest.fixture def post( # noqa: D103 caller_address: Address, bytecode_storage: Tuple[bytes, Storage.StorageDictType] ) -> Mapping: return { caller_address: Account(storage=bytecode_storage[1]), } @pytest.mark.parametrize( "dest,src,length", [ (0x00, 0x00, 0x01), (0x100, 0x00, 0x01), (0x1F, 0x00, 0x01), (0x20, 0x00, 0x01), (0x1000, 0x00, 0x01), (0x1000, 0x00, 0x40), (0x00, 0x00, 0x00), (2**256 - 1, 0x00, 0x00), (0x00, 2**256 - 1, 0x00), (2**256 - 1, 2**256 - 1, 0x00), ], ids=[ "single_byte_expansion", "single_byte_expansion_2", "single_byte_expansion_word_boundary", "single_byte_expansion_word_boundary_2", "multi_word_expansion", "multi_word_expansion_2", "zero_length_expansion", "huge_dest_zero_length", "huge_src_zero_length", "huge_dest_huge_src_zero_length", ], ) @pytest.mark.parametrize("successful", [True, False]) @pytest.mark.parametrize( "initial_memory", [ bytes(range(0x00, 0x100)), bytes(), ], ids=[ "from_existent_memory", "from_empty_memory", ], ) def test_returndatacopy_memory_expansion( state_test: StateTestFiller, env: Environment, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform RETURNDATACOPY operations that expand the memory, and verify the gas it costs. """ state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "dest,src,length", [ pytest.param(2**256 - 1, 0x00, 0x01, id="max_dest_single_byte_expansion"), pytest.param(2**256 - 2, 0x00, 0x01, id="max_dest_minus_one_single_byte_expansion"), pytest.param(2**255 - 1, 0x00, 0x01, id="half_max_dest_single_byte_expansion"), pytest.param(0x00, 0x00, 2**256 - 1, id="max_length_expansion"), pytest.param(0x00, 0x00, 2**256 - 2, id="max_length_minus_one_expansion"), pytest.param(0x00, 0x00, 2**255 - 1, id="half_max_length_expansion"), pytest.param(0x1FFFF20, 0x00, 0x01, id="32-bit-mem-cost_offset"), pytest.param(0x2D412E0, 0x00, 0x01, id="33-bit-mem-cost_offset"), pytest.param(0x00, 0x00, 0x1FFFF20, id="32-bit-mem-cost_size"), pytest.param(0x00, 0x00, 0x2D412E0, id="33-bit-mem-cost_size"), pytest.param(0x1FFFFFFFF20, 0x00, 0x01, id="64-bit-mem-cost_offset"), pytest.param(0x2D413CCCF00, 0x00, 0x01, id="65-bit-mem-cost_offset"), pytest.param(0x00, 0x00, 0x1FFFFFFFF20, id="64-bit-mem-cost_size"), pytest.param(0x00, 0x00, 0x2D413CCCF00, id="65-bit-mem-cost_size"), ], ) @pytest.mark.parametrize( "subcall_exact_cost", [2**128 - 1], ids=[""], ) # Limit subcall gas, otherwise it would be impossibly large @pytest.mark.parametrize("successful", [False]) @pytest.mark.parametrize( "initial_memory", [ bytes(range(0x00, 0x100)), bytes(), ], ids=[ "from_existent_memory", "from_empty_memory", ], ) def test_returndatacopy_huge_memory_expansion( state_test: StateTestFiller, env: Environment, pre: Mapping[str, Account], post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform RETURNDATACOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas. """ state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_returndataload.py ================================================ """ RETURNDATALOAD instruction tests Tests for RETURNDATALOAD instruction in [EIP-7069: Revamped CALL instructions](https://eips.ethereum.org/EIPS/eip-7069). """ from typing import cast import pytest from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Storage, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from . import REFERENCE_SPEC_GIT_PATH, REFERENCE_SPEC_VERSION from .helpers import ( slot_code_worked, slot_eof_target_call_status, slot_eof_target_returndata, slot_eof_target_returndatasize, slot_legacy_target_call_status, slot_legacy_target_returndatasize, value_code_worked, value_exceptional_abort_canary, ) from .spec import EXTCALL_FAILURE, EXTCALL_SUCCESS, LEGACY_CALL_FAILURE, LEGACY_CALL_SUCCESS REFERENCE_SPEC_GIT_PATH = REFERENCE_SPEC_GIT_PATH REFERENCE_SPEC_VERSION = REFERENCE_SPEC_VERSION pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "opcode", [ Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) @pytest.mark.parametrize( "return_data", [ b"", b"\x10" * 0x10, b"\x20" * 0x20, b"\x30" * 0x30, ], ids=lambda x: "len_%x" % len(x), ) @pytest.mark.parametrize( "offset", [ 0, 0x10, 0x20, 0x30, ], ids=lambda x: "offset_%x" % x, ) @pytest.mark.parametrize( "size", [ 0, 0x10, 0x20, 0x30, ], ids=lambda x: "size_%x" % x, ) def test_returndatacopy_handling( state_test: StateTestFiller, pre: Alloc, opcode: Op, return_data: bytes, offset: int, size: int, ) -> None: """ Tests ReturnDataLoad including multiple offset conditions and differing legacy vs. eof boundary conditions. entrypoint creates a "0xff" test area of memory, delegate calls to caller. Caller is either EOF or legacy, as per parameter. Calls returner and copies the return data based on offset and size params. Cases are expected to trigger boundary violations. Entrypoint copies the test area to storage slots, and the expected result is asserted. """ env = Environment() slot_result_start = 0x1000 sender = pre.fund_eoa() address_returner = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.DATACOPY(0, 0, Op.DATASIZE) + Op.RETURN(0, Op.DATASIZE), ), Section.Data(data=return_data), ] ) ) result = [0xFF] * 0x40 result[0:size] = [0] * size extent = size - max(0, size + offset - len(return_data)) if extent > 0 and len(return_data) > 0: result[0:extent] = [return_data[0]] * extent code_under_test = ( opcode(address=address_returner) + Op.RETURNDATACOPY(0, offset, size) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURN(0, size) ) match opcode: case Op.EXTCALL | Op.EXTDELEGATECALL | Op.EXTSTATICCALL: address_caller = pre.deploy_contract( Container( sections=[ Section.Code( code=code_under_test, ) ] ) ) case Op.CALL | Op.CALLCODE | Op.DELEGATECALL | Op.STATICCALL: address_caller = pre.deploy_contract(code_under_test) address_entry_point = pre.deploy_contract( Op.NOOP # First, create a "dirty" area, so we can check zero overwrite + Op.MSTORE(0x00, -1) + Op.MSTORE(0x20, -1) # call the contract under test + Op.DELEGATECALL(1_000_000, address_caller, 0, 0, 0, 0) + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE) # store the return data + Op.SSTORE(slot_result_start, Op.MLOAD(0x0)) + Op.SSTORE(slot_result_start + 1, Op.MLOAD(0x20)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) post = { address_entry_point: Account( storage={ slot_code_worked: value_code_worked, slot_result_start: bytes(result[:0x20]), (slot_result_start + 0x1): bytes(result[0x20:]), } ) } if opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] and ( (offset + size) > len(return_data) ): post[address_entry_point] = Account( storage={ slot_code_worked: value_code_worked, slot_result_start: b"\xff" * 32, slot_result_start + 1: b"\xff" * 32, } ) tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL, ], ) @pytest.mark.parametrize( "return_data", [ b"", b"\x10" * 0x10, b"\x20" * 0x20, b"\x30" * 0x30, ], ids=lambda x: "len_%x" % len(x), ) @pytest.mark.parametrize( "offset", [ 0, 0x10, 0x20, 0x30, ], ids=lambda x: "offset_%x" % x, ) def test_returndataload_handling( state_test: StateTestFiller, pre: Alloc, opcode: Op, return_data: bytes, offset: int, ) -> None: """ Much simpler than returndatacopy, no memory or boosted call. Returner is called and results are stored in storage slot, which is asserted for expected values. The parameters offset and return data are configured to test boundary conditions. """ env = Environment() slot_result_start = 0x1000 sender = pre.fund_eoa() address_returner = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.DATACOPY(0, 0, Op.DATASIZE) + Op.RETURN(0, Op.DATASIZE), ), Section.Data(data=return_data), ] ) ) address_entry_point = pre.deploy_contract( Container( sections=[ Section.Code( code=opcode(address=address_returner) + Op.SSTORE(slot_result_start, Op.RETURNDATALOAD(offset)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) ] ) ) result = [0] * 0x20 extent = 0x20 - max(0, 0x20 + offset - len(return_data)) if extent > 0 and len(return_data) > 0: result[0:extent] = [return_data[0]] * extent post = { address_entry_point: Account( storage={ slot_code_worked: value_code_worked, slot_result_start: bytes(result), } ) } tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender) state_test( env=env, pre=pre, tx=tx, post=post, ) @pytest.mark.parametrize( "opcode", [ Op.CALL, Op.EXTCALL, ], ) def test_returndatacopy_oob( state_test: StateTestFiller, pre: Alloc, opcode: Op, ) -> None: """ Extends the RETURNDATACOPY test for correct out-of-bounds behavior, by checking if the caller frame's context being EOF or legacy doesn't impact the execution logic of the RETURNDATACOPY instance under test. """ env = Environment() sender = pre.fund_eoa() # Both callee codes below make an OOB (out-of-bounds) RETURNDATACOPY of one # byte, which they then attempt to return (Legacy should exceptionally halt # on RETURNDATACOPY). address_callee_eof = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.RETURNDATACOPY(0, 0, 1) + Op.RETURN(0, 1), max_stack_height=3, ) ] ) ) address_callee_legacy = pre.deploy_contract(Op.RETURNDATACOPY(0, 0, 1) + Op.RETURN(0, 1)) # Caller code is selected to either be Legacy or EOF using params. code_entry_point = ( Op.SSTORE(slot_eof_target_call_status, opcode(address=address_callee_eof)) + Op.SSTORE(slot_eof_target_returndatasize, Op.RETURNDATASIZE) + Op.SSTORE(slot_eof_target_returndata, Op.RETURNDATACOPY(0, 0, 1) + Op.MLOAD(0)) + Op.SSTORE( slot_legacy_target_call_status, opcode(address=address_callee_legacy), ) + Op.SSTORE(slot_legacy_target_returndatasize, Op.RETURNDATASIZE) + Op.STOP ) storage_entry_point = Storage( cast( Storage.StorageDictType, { slot_eof_target_call_status: value_exceptional_abort_canary, slot_eof_target_returndata: value_exceptional_abort_canary, slot_eof_target_returndatasize: value_exceptional_abort_canary, slot_legacy_target_call_status: value_exceptional_abort_canary, slot_legacy_target_returndatasize: value_exceptional_abort_canary, }, ) ) address_entry_point = ( pre.deploy_contract(code=code_entry_point, storage=storage_entry_point) if opcode == Op.CALL else pre.deploy_contract( Container( sections=[ Section.Code( code=code_entry_point, max_stack_height=4, storage=storage_entry_point, ) ] ) ) ) tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender) post = { address_entry_point: Account( storage={ slot_eof_target_call_status: LEGACY_CALL_SUCCESS, slot_eof_target_returndata: "0x00", slot_eof_target_returndatasize: "0x01", slot_legacy_target_call_status: LEGACY_CALL_FAILURE, slot_legacy_target_returndatasize: "0x00", } if opcode == Op.CALL else { slot_eof_target_call_status: EXTCALL_SUCCESS, slot_eof_target_returndata: "0x00", slot_eof_target_returndatasize: "0x01", slot_legacy_target_call_status: EXTCALL_FAILURE, slot_legacy_target_returndatasize: "0x00", } ) } state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7480_data_section/__init__.py ================================================ """ Test cases for EOF Data section access instructions for EIP-7480. EIP-7480 specifies instructions for accessing data stored in the dedicated data section of the EOF format. Full specification: [EIP-7480: EOF - Data section access instructions](https://eips.ethereum.org/EIPS/eip-7480). Opcodes introduced: `DATALOAD` (`0xD0`), `DATALOADN` (`0xD1`), `DATASIZE` (`0xD2`), `DATACOPY` (`0xD3`). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7480_data_section/spec.py ================================================ """EOF V1 Constants used throughout all tests.""" ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_code_validation.py ================================================ """EOF V1 Code Validation tests.""" import pytest from ethereum_test_tools import EOFException, EOFTestFiller from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_INITCODE_SIZE from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7480.md" REFERENCE_SPEC_VERSION = "3ee1334ef110420685f1c8ed63e80f9e1766c251" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) smallest_runtime_subcontainer = Container( name="Runtime Subcontainer", sections=[ Section.Code(code=Op.STOP), ], ) def container_name(c: Container) -> str: """Return the name of the container for use in pytest ids.""" if hasattr(c, "name") and c.name is not None: return c.name else: return c.__class__.__name__ @pytest.mark.parametrize( "container", [ Container( name="empty_data_section", sections=[ Section.Code( code=Op.ADDRESS + Op.POP + Op.STOP, ), Section.Data(data=""), ], ), Container( name="small_data_section", sections=[ Section.Code( code=Op.ADDRESS + Op.POP + Op.STOP, ), Section.Data(data="1122334455667788" * 4), ], ), pytest.param( Container( name="large_data_section", sections=[ Section.Code( code=Op.ADDRESS + Op.POP + Op.STOP, ), Section.Data(data="1122334455667788" * 3 * 1024), ], ), marks=pytest.mark.eof_test_only(reason="initcode exceeds max size"), ), pytest.param( Container( name="max_data_section", sections=[ Section.Code(code=Op.STOP), # Hits the 49152 bytes limit for the entire container Section.Data( data=b"\x00" * (MAX_INITCODE_SIZE - len(smallest_runtime_subcontainer)) ), ], ), marks=pytest.mark.eof_test_only(reason="initcode exceeds max size"), ), Container( name="DATALOADN_zero", sections=[ Section.Code( code=Op.DATALOADN[0] + Op.POP + Op.STOP, ), Section.Data(data="1122334455667788" * 16), ], ), Container( name="DATALOADN_middle", sections=[ Section.Code( code=Op.DATALOADN[16] + Op.POP + Op.STOP, ), Section.Data(data="1122334455667788" * 16), ], ), Container( name="DATALOADN_edge", sections=[ Section.Code( code=Op.DATALOADN[128 - 32] + Op.POP + Op.STOP, ), Section.Data(data="1122334455667788" * 16), ], ), ], ids=container_name, ) def test_valid_containers_with_data_section( eof_test: EOFTestFiller, container: Container, ) -> None: """Test EOF validation of valid containers with data sections.""" assert container.validity_error is None, ( f"Valid container with validity error: {container.validity_error}" ) eof_test( container=container, ) @pytest.mark.parametrize( "container", [ Container( name="DATALOADN_0_empty_data", sections=[ Section.Code( code=Op.DATALOADN[0] + Op.POP + Op.STOP, ), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_max_empty_data", sections=[ Section.Code( code=Op.DATALOADN[0xFFFF - 32] + Op.POP + Op.STOP, ), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_1_over_data", sections=[ Section.Code( code=Op.DATALOADN[1] + Op.POP + Op.STOP, ), Section.Data(b"\x00"), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_32_over_data", sections=[ Section.Code( code=Op.DATALOADN[32] + Op.POP + Op.STOP, ), Section.Data(b"\xda" * 32), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_0_data_31", sections=[ Section.Code( code=Op.DATALOADN[0] + Op.POP + Op.STOP, ), Section.Data(b"\xda" * 31), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_32_data_63", sections=[ Section.Code( code=Op.DATALOADN[32] + Op.POP + Op.STOP, ), Section.Data(b"\xda" * 63), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_max_imm", sections=[ Section.Code( code=Op.DATALOADN[0xFFFF] + Op.POP + Op.STOP, ), Section.Data(b"\xda" * 32), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_max_small_data", sections=[ Section.Code( code=Op.DATALOADN[0xFFFF - 32] + Op.POP + Op.STOP, ), Section.Data(data="1122334455667788" * 16), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), Container( name="DATALOADN_max_half_data", sections=[ Section.Code( code=Op.DATALOADN[0xFFFF - 32] + Op.POP + Op.STOP, ), Section.Data(data=("1122334455667788" * 4 * 1024)[2:]), ], validity_error=EOFException.INVALID_DATALOADN_INDEX, ), pytest.param( Container( name="data_section_over_container_limit", sections=[ Section.Code(code=Op.STOP), # Over the 49152 bytes limit for the entire container Section.Data( data=(b"12345678" * 6 * 1024)[len(smallest_runtime_subcontainer) - 1 :] ), ], validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT, ), marks=pytest.mark.eof_test_only(reason="initcode exceeds max size"), ), ], ids=container_name, ) def test_invalid_containers_with_data_section( eof_test: EOFTestFiller, container: Container, ) -> None: """Test EOF validation of invalid containers with data sections.""" assert container.validity_error is not None, "Invalid container without validity error" eof_test( container=container, expect_exception=container.validity_error, ) @pytest.mark.parametrize( "container", [ Container( name="imm0", sections=[ Section.Code(Op.DATALOADN), Section.Data(b"\xff" * 32), ], ), Container( name="imm1", sections=[ Section.Code(Op.DATALOADN + b"\x00"), Section.Data(b"\xff" * 32), ], ), Container( name="imm_from_next_section", sections=[ Section.Code( Op.CALLF[1] + Op.JUMPF[2], max_stack_height=1, ), Section.Code( Op.DATALOADN + b"\x00", code_outputs=1, ), Section.Code( Op.STOP, ), Section.Data(b"\xff" * 32), ], ), ], ids=container_name, ) def test_dataloadn_truncated_immediate( eof_test: EOFTestFiller, container: Container, ) -> None: """Test cases for DATALOADN instructions with truncated immediate bytes.""" eof_test(container=container, expect_exception=EOFException.TRUNCATED_INSTRUCTION) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py ================================================ """Execution of DATA* opcodes within EOF V1 containers tests.""" import pytest from ethereum_test_specs import EOFStateTestFiller from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7480.md" REFERENCE_SPEC_VERSION = "3ee1334ef110420685f1c8ed63e80f9e1766c251" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize("index", [0, 1, 31, 32, 33, 63, 64]) @pytest.mark.parametrize("suffix_len", [0, 1, 31, 32, 24000]) def test_dataloadn(eof_state_test: EOFStateTestFiller, index: int, suffix_len: int) -> None: """Basic tests for DATALOADN execution.""" sentinel = 0x8000000000000000000000000000000000000000000000000000000000000001 eof_state_test( container=Container( sections=[ Section.Code( Op.SSTORE(0, Op.DATALOADN[index]) + Op.STOP, ), Section.Data( index * b"\xbe" + sentinel.to_bytes(32, byteorder="big") + suffix_len * b"\xaf" ), ], ), container_post=Account(storage={0: sentinel}), ) def create_data_test(offset: int, datasize: int) -> tuple[Container, dict[int, int]]: """ Generate data load operators test cases based on load offset and data section size. """ data = b"".join(i.to_bytes(length=2, byteorder="big") for i in range(1, datasize // 2 + 1)) assert len(data) == datasize overhang = min(32, offset + 32 - datasize) answer = data[offset : offset + 32] if overhang <= 0 else data[offset:] + b"\x00" * overhang dataloadn_op = Op.DATALOADN[offset] if overhang <= 0 else Op.PUSH32[answer] return ( Container( sections=[ Section.Code( code=( Op.CALLF[1] + Op.CALLF[2] + Op.CALLF[3] + Op.CALLF[4] + Op.SSTORE(0, 1) + Op.STOP ), ), Section.Code( code=(Op.DATALOAD(offset) + Op.PUSH1(1) + Op.SSTORE + Op.RETF), code_inputs=0, code_outputs=0, ), Section.Code( code=(dataloadn_op + Op.PUSH1(2) + Op.SSTORE + Op.RETF), code_inputs=0, code_outputs=0, ), Section.Code( code=(Op.DATASIZE + Op.PUSH1(3) + Op.SSTORE + Op.RETF), code_inputs=0, code_outputs=0, ), Section.Code( code=(Op.DATACOPY(0, offset, 32) + Op.SSTORE(4, Op.MLOAD(0)) + Op.RETF), code_inputs=0, code_outputs=0, ), Section.Data(data), ], ), { 0: 1, 1: int.from_bytes(answer, byteorder="big"), 2: int.from_bytes(answer, byteorder="big"), 3: datasize, 4: int.from_bytes(answer, byteorder="big"), }, ) @pytest.mark.parametrize( ["offset", "datasize"], [ pytest.param(0, 0, id="empty_zero"), pytest.param(0, 2, id="short_zero"), pytest.param(0, 32, id="exact_zero"), pytest.param(0, 64, id="large_zero"), pytest.param(32, 0, id="empty_32"), pytest.param(32, 34, id="short_32"), pytest.param(32, 64, id="exact_32"), pytest.param(32, 96, id="large_32"), pytest.param(0x5BFE, 0, id="empty_23k"), pytest.param(0x5BFE, 0x5C00, id="short_23k"), pytest.param(0x5BE0, 0x5D00, id="exact_23k"), pytest.param(0x2345, 0x5C00, id="large_23k"), pytest.param(2**16 - 1, 32, id="u16_max"), pytest.param(2**16, 32, id="u16_max_plus_1"), pytest.param(2**32 - 1, 32, id="u32_max"), pytest.param(2**32, 32, id="u32_max_plus_1"), pytest.param(2**64 - 1, 32, id="u64_max"), pytest.param(2**64, 32, id="u64_max_plus_1"), ], ) def test_data_section_succeed( state_test: StateTestFiller, pre: Alloc, offset: int, datasize: int, ) -> None: """Test simple contracts that simply expect data section to succeed.""" env = Environment() (container, expected_storage) = create_data_test(offset, datasize) callee_contract = pre.deploy_contract(code=container) entry_point = pre.deploy_contract( code=Op.SSTORE(0, Op.DELEGATECALL(Op.GAS, callee_contract, 0, 0, 0, 0)) + Op.STOP() ) sender = pre.fund_eoa() tx = Transaction( to=entry_point, gas_limit=50000000, gas_price=10, protected=False, data="", sender=sender, ) post = {entry_point: Account(storage=expected_storage)} state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py ================================================ """Memory expansion tests for DATACOPY.""" from typing import Mapping, Tuple import pytest from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Address, Alloc, Bytecode, Environment, StateTestFiller, Storage, Transaction, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7480.md" REFERENCE_SPEC_VERSION = "3ee1334ef110420685f1c8ed63e80f9e1766c251" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.fixture def callee_bytecode(dest: int, src: int, length: int, data_section: bytes) -> Container: """Callee performs a single datacopy operation and then returns.""" bytecode = Bytecode() # Copy the initial memory bytecode += Op.CALLDATACOPY(0x00, 0x00, Op.CALLDATASIZE()) # Pushes for the return operation bytecode += Op.PUSH1(0x00) + Op.PUSH1(0x00) # Perform the datacopy operation bytecode += Op.DATACOPY(dest, src, length) bytecode += Op.RETURN return Container(sections=[Section.Code(code=bytecode), Section.Data(data=data_section)]) @pytest.fixture def subcall_exact_cost( fork: Fork, initial_memory: bytes, dest: int, length: int, ) -> int: """ Return exact cost of the subcall, based on the initial memory and the length of the copy. """ cost_memory_bytes = fork.memory_expansion_gas_calculator() datacopy_cost = 3 datacopy_cost += 3 * ((length + 31) // 32) if length > 0 and dest + length > len(initial_memory): datacopy_cost += cost_memory_bytes( new_bytes=dest + length, previous_bytes=len(initial_memory) ) calldatacopy_cost = 3 calldatacopy_cost += 3 * ((len(initial_memory) + 31) // 32) calldatacopy_cost += cost_memory_bytes(new_bytes=len(initial_memory)) pushes_cost = 3 * 7 calldatasize_cost = 2 return datacopy_cost + calldatacopy_cost + pushes_cost + calldatasize_cost @pytest.fixture def bytecode_storage( subcall_exact_cost: int, successful: bool, memory_expansion_address: Address, ) -> Tuple[Bytecode, Storage.StorageDictType]: """ Prepare bytecode and storage for the test, based on the expected result of the subcall (whether it succeeds or fails depending on the length of the memory expansion). """ bytecode = Bytecode() storage = {} # Pass on the calldata bytecode += Op.CALLDATACOPY(0x00, 0x00, Op.CALLDATASIZE()) subcall_gas = subcall_exact_cost if successful else subcall_exact_cost - 1 # Perform the subcall and store a one in the result location bytecode += Op.SSTORE( Op.CALL(subcall_gas, memory_expansion_address, 0, 0, Op.CALLDATASIZE(), 0, 0), 1 ) storage[int(successful)] = 1 return (bytecode, storage) @pytest.fixture def tx_max_fee_per_gas() -> int: # noqa: D103 return 7 @pytest.fixture def block_gas_limit() -> int: # noqa: D103 return 100_000_000 @pytest.fixture def tx_gas_limit( # noqa: D103 subcall_exact_cost: int, block_gas_limit: int, ) -> int: return min(max(500_000, subcall_exact_cost * 2), block_gas_limit) @pytest.fixture def env( # noqa: D103 block_gas_limit: int, ) -> Environment: return Environment(gas_limit=block_gas_limit) @pytest.fixture def caller_address( # noqa: D103 pre: Alloc, bytecode_storage: Tuple[bytes, Storage.StorageDictType] ) -> Address: return pre.deploy_contract(code=bytecode_storage[0]) @pytest.fixture def memory_expansion_address(pre: Alloc, callee_bytecode: bytes) -> Address: # noqa: D103 return pre.deploy_contract(code=callee_bytecode) @pytest.fixture def sender(pre: Alloc, tx_max_fee_per_gas: int, tx_gas_limit: int) -> Address: # noqa: D103 return pre.fund_eoa(tx_max_fee_per_gas * tx_gas_limit) @pytest.fixture def tx( # noqa: D103 sender: Address, caller_address: Address, initial_memory: bytes, tx_max_fee_per_gas: int, tx_gas_limit: int, ) -> Transaction: return Transaction( sender=sender, to=caller_address, data=initial_memory, gas_limit=tx_gas_limit, max_fee_per_gas=tx_max_fee_per_gas, max_priority_fee_per_gas=0, ) @pytest.fixture def post( # noqa: D103 caller_address: Address, bytecode_storage: Tuple[bytes, Storage.StorageDictType] ) -> Mapping: return { caller_address: Account(storage=bytecode_storage[1]), } @pytest.mark.parametrize( "dest,src,length", [ (0x00, 0x00, 0x01), (0x100, 0x00, 0x01), (0x1F, 0x00, 0x01), (0x20, 0x00, 0x01), (0x1000, 0x00, 0x01), (0x1000, 0x00, 0x40), (0x00, 0x00, 0x00), (2**256 - 1, 0x00, 0x00), (0x00, 2**256 - 1, 0x00), (2**256 - 1, 2**256 - 1, 0x00), ], ids=[ "single_byte_expansion", "single_byte_expansion_2", "single_byte_expansion_word_boundary", "single_byte_expansion_word_boundary_2", "multi_word_expansion", "multi_word_expansion_2", "zero_length_expansion", "huge_dest_zero_length", "huge_src_zero_length", "huge_dest_huge_src_zero_length", ], ) @pytest.mark.parametrize("successful", [True, False]) @pytest.mark.parametrize( "initial_memory", [ bytes(range(0x00, 0x100)), bytes(), ], ids=[ "from_existent_memory", "from_empty_memory", ], ) @pytest.mark.parametrize( "data_section", [ bytes(), b"\xfc", bytes(range(0x00, 0x20)), bytes(range(0x00, 0x100)), ], ids=["empty_data_section", "byte_data_section", "word_data_section", "large_data_section"], ) def test_datacopy_memory_expansion( state_test: StateTestFiller, env: Environment, pre: Alloc, post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform DATACOPY operations that expand the memory, and verify the gas it costs to do so. """ state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "dest,src,length", [ pytest.param(2**256 - 1, 0x00, 0x01, id="max_dest_single_byte_expansion"), pytest.param(2**256 - 2, 0x00, 0x01, id="max_dest_minus_one_single_byte_expansion"), pytest.param(2**255 - 1, 0x00, 0x01, id="half_max_dest_single_byte_expansion"), pytest.param(0x00, 0x00, 2**256 - 1, id="max_length_expansion"), pytest.param(0x00, 0x00, 2**256 - 2, id="max_length_minus_one_expansion"), pytest.param(0x00, 0x00, 2**255 - 1, id="half_max_length_expansion"), pytest.param(0x1FFFF20, 0x00, 0x01, id="32-bit-mem-cost_offset"), pytest.param(0x2D412E0, 0x00, 0x01, id="33-bit-mem-cost_offset"), pytest.param(0x00, 0x00, 0x1FFFF20, id="32-bit-mem-cost_size"), pytest.param(0x00, 0x00, 0x2D412E0, id="33-bit-mem-cost_size"), pytest.param(0x1FFFFFFFF20, 0x00, 0x01, id="64-bit-mem-cost_offset"), pytest.param(0x2D413CCCF00, 0x00, 0x01, id="65-bit-mem-cost_offset"), pytest.param(0x00, 0x00, 0x1FFFFFFFF20, id="64-bit-mem-cost_size"), pytest.param(0x00, 0x00, 0x2D413CCCF00, id="65-bit-mem-cost_size"), ], ) @pytest.mark.parametrize( "subcall_exact_cost", [2**128 - 1], ids=[""], ) # Limit subcall gas, otherwise it would be impossibly large @pytest.mark.parametrize("successful", [False]) @pytest.mark.parametrize( "initial_memory", [ bytes(range(0x00, 0x100)), bytes(), ], ids=[ "from_existent_memory", "from_empty_memory", ], ) @pytest.mark.parametrize( "data_section", [ bytes(), b"\xfc", bytes(range(0x00, 0x20)), bytes(range(0x00, 0x100)), ], ids=["empty_data_section", "byte_data_section", "word_data_section", "large_data_section"], ) def test_datacopy_huge_memory_expansion( state_test: StateTestFiller, env: Environment, pre: Mapping[str, Account], post: Mapping[str, Account], tx: Transaction, ) -> None: """ Perform DATACOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas. """ state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/__init__.py ================================================ """ Test cases for EOF Contract Creation for EIP-7620. EIP-7620 replaces `CREATE` and `CREATE2` with `EOFCREATE` for deploying contracts in the EOF format. Full specification: [EIP-7620: EOF Contract Creation](https://eips.ethereum.org/EIPS/eip-7620). Opcodes introduced: `EOFCREATE` (`0xEC`), `RETURNCODE` (`0xEE`). EOFCREATE, RETURNCODE, and container tests. evmone tests not ported: - create_tx_with_eof_initcode: This calls it invalid, it is now the way to add EOF contacts to state - eofcreate_extcall_returncode: Per the new initcode mode tests you cannot have RETURNCODE in a deployed contract - eofcreate_dataloadn_referring_to_auxdata: covered by tests.unscheduled.eip7480_data_section. test_data_opcodes.test_data_section_succeed - eofcreate_initcontainer_return: RETURN is banned in initcode containers - eofcreate_initcontainer_stop: STOP is banned in initcode containers - All TXCREATE tests. """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/helpers.py ================================================ """A collection of contracts used in 7620 EOF tests.""" import itertools from ethereum_test_tools import Opcodes as Op from ethereum_test_types.eof.v1 import Container, Section """Storage addresses for common testing fields""" _slot = itertools.count() next(_slot) # don't use slot 0 slot_code_worked = next(_slot) slot_code_should_fail = next(_slot) slot_create_address = next(_slot) slot_calldata = next(_slot) slot_call_result = next(_slot) slot_returndata = next(_slot) slot_returndata_size = next(_slot) slot_max_depth = next(_slot) slot_call_or_create = next(_slot) slot_counter = next(_slot) slot_data_load = next(_slot) slot_all_subcall_gas_gone = next(_slot) slot_a = next(_slot) slot_b = next(_slot) slot_last_slot = next(_slot) value_code_worked = 0x2015 value_canary_should_not_change = 0x2019 value_canary_to_be_overwritten = 0x2009 value_long_value = b"abcdefghijklmnopqrstuvwxyz123456" smallest_runtime_subcontainer = Container.Code(code=Op.STOP, name="Runtime Subcontainer") smallest_initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0)), Section.Container(container=smallest_runtime_subcontainer), ], ) smallest_initcode_subcontainer_gas = 2 * 3 aborting_container = Container.Code(Op.INVALID, name="Aborting Container") reverting_container = Container.Code(Op.REVERT(0, 0), name="Reverting Container") expensively_reverting_container = Container.Code( Op.SHA3(0, 32) + Op.REVERT(0, 0), name="Expensively Reverting Container" ) expensively_reverting_container_gas = 2 * 3 + 30 + 3 + 6 + 2 * 3 big_runtime_subcontainer = Container.Code(Op.NOOP * 10000 + Op.STOP, name="Big Subcontainer") bigger_initcode_subcontainer_gas = 3 + 4 + 2 * 3 bigger_initcode_subcontainer = Container( name="Bigger Initcode Subcontainer", sections=[ Section.Code( code=Op.RJUMPI[len(Op.RETURNCODE[0](0, 0))](1) + Op.RETURNCODE[0](0, 0) + Op.RETURNCODE[1](0, 0) ), Section.Container(container=smallest_runtime_subcontainer), Section.Container(container=smallest_runtime_subcontainer), ], ) data_runtime_container = smallest_runtime_subcontainer.copy() data_runtime_container.sections.append(Section.Data("0x00")) data_initcode_subcontainer = Container( name="Data Initcode Subcontainer", sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0)), Section.Container(container=data_runtime_container), ], ) data_appending_initcode_subcontainer = Container( name="Data Appending Initcode Subcontainer", sections=[ Section.Code(code=Op.RETURNCODE[0](0, 1)), Section.Container(container=smallest_runtime_subcontainer), ], ) data_appending_initcode_subcontainer_gas = 2 * 3 + 3 ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/spec.py ================================================ """EOF V1 Constants used throughout all tests.""" EOFCREATE_FAILURE = 0 ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py ================================================ """Test good and bad EOFCREATE cases.""" import pytest from ethereum_test_base_types import Storage from ethereum_test_base_types.base_types import Address from ethereum_test_exceptions import EOFException from ethereum_test_specs import EOFTestFiller from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, compute_eofcreate_address, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..eip7069_extcall.spec import EXTCALL_SUCCESS from .helpers import ( slot_call_result, slot_calldata, slot_code_worked, slot_create_address, slot_data_load, slot_last_slot, slot_returndata_size, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_canary_to_be_overwritten, value_code_worked, value_long_value, ) from .spec import EOFCREATE_FAILURE REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "52ddbcdddcf72dd72427c319f2beddeb468e1737" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_simple_eofcreate( state_test: StateTestFiller, pre: Alloc, ) -> None: """Verifies a simple EOFCREATE case.""" env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(0, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP, ), Section.Container(container=smallest_initcode_subcontainer), ], ), storage={0: 0xB17D}, # a canary to be overwritten ) # Storage in 0 should have the address, post = {contract_address: Account(storage={0: compute_eofcreate_address(contract_address, 0)})} tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_eofcreate_then_dataload( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies that a contract returned with auxdata does not overwrite the parent data. """ env = Environment() sender = pre.fund_eoa() small_auxdata_container = Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 32)), Section.Container(container=smallest_runtime_subcontainer), ], ) contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(0, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_data_load, Op.DATALOAD(0)) + Op.STOP, ), Section.Container( container=small_auxdata_container, ), Section.Data(data=value_long_value), ], ), storage={slot_data_load: value_canary_to_be_overwritten}, ) post = { contract_address: Account( storage={ 0: compute_eofcreate_address(contract_address, 0), slot_data_load: value_long_value, } ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_eofcreate_then_call( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies a simple EOFCREATE case, and then calls the deployed contract. """ env = Environment() callable_contract = Container( sections=[ Section.Code( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), ] ) callable_contract_initcode = Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=callable_contract), ] ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.EXTCALL(Op.SLOAD(slot_create_address), 0, 0, 0) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=callable_contract_initcode), ], ) ) callable_address = compute_eofcreate_address(contract_address, 0) # Storage in 0 should have the address, # post = { contract_address: Account( storage={slot_create_address: callable_address, slot_code_worked: value_code_worked} ), callable_address: Account(storage={slot_code_worked: value_code_worked}), } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "auxdata_bytes", [ pytest.param(b"", id="zero"), pytest.param(b"aabbcc", id="short"), pytest.param(b"aabbccddeef", id="one_byte_short"), pytest.param(b"aabbccddeeff", id="exact"), pytest.param(b"aabbccddeeffg", id="one_byte_long"), pytest.param(b"aabbccddeeffgghhii", id="extra"), ], ) def test_auxdata_variations(state_test: StateTestFiller, pre: Alloc, auxdata_bytes: bytes) -> None: """Verifies that auxdata bytes are correctly handled in RETURNCODE.""" env = Environment() auxdata_size = len(auxdata_bytes) pre_deploy_header_data_size = 18 pre_deploy_data = b"AABBCC" deploy_success = len(auxdata_bytes) + len(pre_deploy_data) >= pre_deploy_header_data_size runtime_subcontainer = Container( name="Runtime Subcontainer with truncated data", sections=[ Section.Code(code=Op.STOP), Section.Data(data=pre_deploy_data, custom_size=pre_deploy_header_data_size), ], ) initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.MSTORE(0, Op.PUSH32(auxdata_bytes.ljust(32, b"\0"))) + Op.RETURNCODE[0](0, auxdata_size), ), Section.Container(container=runtime_subcontainer), ], ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP, ), Section.Container(container=initcode_subcontainer), ] ), storage={slot_create_address: value_canary_to_be_overwritten}, ) # Storage in 0 should have the address, post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if deploy_success else b"\0" } ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_calldata(state_test: StateTestFiller, pre: Alloc) -> None: """Verifies CALLDATA passing through EOFCREATE.""" env = Environment() initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_calldata, Op.MLOAD(0)) + Op.RETURNCODE[0](0, Op.CALLDATASIZE), ), Section.Container(container=smallest_runtime_subcontainer), ], ) calldata_size = 32 calldata = b"\x45" * calldata_size sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.MSTORE(0, Op.PUSH32(calldata)) + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](input_size=calldata_size)) + Op.STOP, ), Section.Container(container=initcode_subcontainer), ] ) ) # deployed contract is smallest plus data deployed_contract = Container( name="deployed contract", sections=[ *smallest_runtime_subcontainer.sections, Section.Data(data=calldata), ], ) # factory contract Storage in 0 should have the created address, # created contract storage in 0 should have the calldata created_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account(storage={slot_create_address: created_address}), created_address: Account(code=deployed_contract, storage={slot_calldata: calldata}), } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_eofcreate_in_initcode( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies an EOFCREATE occurring within initcode creates that contract. """ nested_initcode_subcontainer = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURNCODE[1](0, 0), ), Section.Container(container=smallest_initcode_subcontainer), Section.Container(container=smallest_runtime_subcontainer), ] ) env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=nested_initcode_subcontainer), ] ) ) outer_address = compute_eofcreate_address(contract_address, 0) inner_address = compute_eofcreate_address(outer_address, 0) post = { contract_address: Account( storage={slot_create_address: outer_address, slot_code_worked: value_code_worked} ), outer_address: Account( storage={slot_create_address: inner_address, slot_code_worked: value_code_worked} ), } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_eofcreate_in_initcode_reverts( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies an EOFCREATE occurring in an initcode is rolled back when the initcode reverts. """ nested_initcode_subcontainer = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.REVERT(0, 0), ), Section.Container(container=smallest_initcode_subcontainer), ] ) env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=nested_initcode_subcontainer), ] ), storage={slot_create_address: value_canary_to_be_overwritten}, ) outer_address = compute_eofcreate_address(contract_address, 0) inner_address = compute_eofcreate_address(outer_address, 0) post = { contract_address: Account( storage={ slot_create_address: 0, slot_code_worked: value_code_worked, } ), outer_address: Account.NONEXISTENT, inner_address: Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_return_data_cleared( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies the return data is not reused from a extcall but is cleared upon eofcreate. """ env = Environment() value_return_canary = 0x4158675309 value_return_canary_size = 5 callable_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.MSTORE(0, value_return_canary) + Op.RETURN(0, value_return_canary_size), ) ] ) ) slot_returndata_size_2 = slot_last_slot * 2 + slot_returndata_size sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_call_result, Op.EXTCALL(callable_address, 0, 0, 0)) + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE) + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_returndata_size_2, Op.RETURNDATASIZE) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=smallest_initcode_subcontainer), ], ) ) new_contract_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account( storage={ slot_call_result: EXTCALL_SUCCESS, slot_returndata_size: value_return_canary_size, slot_create_address: new_contract_address, slot_returndata_size_2: 0, slot_code_worked: value_code_worked, }, nonce=2, ), callable_address: Account(nonce=1), new_contract_address: Account(nonce=1), } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_address_collision( state_test: StateTestFiller, pre: Alloc, ) -> None: """Tests address collision.""" env = Environment( gas_limit=300_000_000_000, ) slot_create_address_2 = slot_last_slot * 2 + slot_create_address slot_create_address_3 = slot_last_slot * 3 + slot_create_address sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_create_address_2, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_create_address_3, Op.EOFCREATE[0](salt=1)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=smallest_initcode_subcontainer), ], ) ) salt_zero_address = compute_eofcreate_address(contract_address, 0) salt_one_address = compute_eofcreate_address(contract_address, 1) # Hard-code address for collision, no other way to do this. # We should mark tests that do this, and fail on unmarked tests. pre[salt_one_address] = Account(balance=1, nonce=1) post = { contract_address: Account( storage={ slot_create_address: salt_zero_address, # had an in-transaction collision slot_create_address_2: EOFCREATE_FAILURE, # had a pre-existing collision slot_create_address_3: EOFCREATE_FAILURE, slot_code_worked: value_code_worked, } ) } # Multiple create fails is expensive, use an absurd amount of gas tx = Transaction( to=contract_address, gas_limit=300_000_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_eofcreate_revert_eof_returndata( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies the return data is not being deployed, even if happens to be valid EOF. """ env = Environment() code_reverts_with_calldata = Container( name="Initcode Subcontainer reverting with its calldata", sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.REVERT(0, Op.CALLDATASIZE), ), ], ) sender = pre.fund_eoa() salt = 0 contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( slot_create_address, Op.EOFCREATE[0](salt=salt, input_size=Op.CALLDATASIZE) ) + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE) + Op.STOP, ), Section.Container(container=code_reverts_with_calldata), ], ), storage={slot_create_address: value_canary_to_be_overwritten}, ) eof_create_address = compute_eofcreate_address(contract_address, salt) post = { contract_address: Account( storage={ slot_create_address: 0, slot_returndata_size: len(smallest_runtime_subcontainer), }, ), eof_create_address: Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=1_000_000, sender=sender, # Simplest possible valid EOF container, which is going to be # revert-returned from initcode and must not end up being deployed. data=smallest_runtime_subcontainer, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize("index", [0, 1, 255], ids=lambda x: x) def test_eofcreate_invalid_index( eof_test: EOFTestFiller, index: int, ) -> None: """EOFCREATE referring non-existent container section index.""" container = Container.Code(code=Op.EOFCREATE[index](0, 0, 0, 0) + Op.STOP) if index != 0: container.sections.append(Section.Container(container=Container.Code(Op.INVALID))) eof_test( container=container, expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX, ) def test_eofcreate_invalid_truncated_immediate( eof_test: EOFTestFiller, ) -> None: """EOFCREATE instruction with missing immediate byte.""" eof_test( container=Container( sections=[ Section.Code(Op.PUSH0 * 4 + Op.EOFCREATE), Section.Container(Container.Code(Op.INVALID)), ], ), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) @pytest.mark.parametrize( ["data_len", "data_section_size"], [ (0, 1), (0, 0xFFFF), (2, 3), (2, 0xFFFF), ], ) def test_eofcreate_truncated_container( eof_test: EOFTestFiller, data_len: int, data_section_size: int, ) -> None: """ EOFCREATE instruction targeting a container with truncated data section. """ assert data_len < data_section_size eof_test( container=Container( sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container( Container( sections=[ Section.Code(Op.INVALID), Section.Data(b"\xda" * data_len, custom_size=data_section_size), ], ) ), ], ), expect_exception=EOFException.EOFCREATE_WITH_TRUNCATED_CONTAINER, ) @pytest.mark.parametrize( ["destination_code", "expected_result"], [ pytest.param(Op.ADDRESS, "destination"), pytest.param(Op.CALLER, "caller"), pytest.param(Op.CALLVALUE, "eofcreate_value"), pytest.param(Op.ORIGIN, "sender"), pytest.param(Op.SELFBALANCE, "selfbalance"), pytest.param(Op.BALANCE(Op.CALLER), "factorybalance"), ], ) def test_eofcreate_context( state_test: StateTestFiller, pre: Alloc, destination_code: Bytecode, expected_result: str, ) -> None: """Test EOFCREATE's initcode context instructions.""" env = Environment() sender = pre.fund_eoa() value = 0x1123 eofcreate_value = 0x13 initcode = Container( sections=[ Section.Code(Op.SSTORE(slot_call_result, destination_code) + Op.RETURNCODE[0](0, 0)), Section.Container(smallest_runtime_subcontainer), ] ) factory_contract = Container( sections=[ Section.Code( Op.SSTORE(slot_code_worked, value_code_worked) + Op.EOFCREATE[0](value=eofcreate_value) + Op.STOP ), Section.Container(initcode), ] ) factory_address = pre.deploy_contract(factory_contract) destination_contract_address = compute_eofcreate_address(factory_address, 0) tx = Transaction(sender=sender, to=factory_address, gas_limit=200_000, value=value) expected_bytes: Address | int if expected_result == "destination": expected_bytes = destination_contract_address elif expected_result == "caller": expected_bytes = factory_address elif expected_result == "sender": expected_bytes = sender elif expected_result == "eofcreate_value": expected_bytes = eofcreate_value elif expected_result == "selfbalance": expected_bytes = eofcreate_value elif expected_result == "factorybalance": # Factory receives value from sender and passes on eofcreate_value as # endowment. expected_bytes = value - eofcreate_value else: raise TypeError("Unexpected expected_result", expected_result) calling_storage = { slot_code_worked: value_code_worked, } destination_contract_storage = { slot_call_result: expected_bytes, } post = { factory_address: Account(storage=calling_storage, balance=value - eofcreate_value), destination_contract_address: Account( storage=destination_contract_storage, balance=eofcreate_value ), } state_test( env=env, pre=pre, post=post, tx=tx, ) def test_eofcreate_memory_context( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies an EOFCREATE frame enjoys a separate EVM memory from its caller frame. """ env = Environment() destination_storage = Storage() contract_storage = Storage() initcontainer = Container( sections=[ Section.Code( Op.SSTORE(destination_storage.store_next(value_code_worked), value_code_worked) + Op.SSTORE(destination_storage.store_next(0), Op.MSIZE()) + Op.SSTORE(destination_storage.store_next(0), Op.MLOAD(0)) + Op.MSTORE(0, 2) + Op.MSTORE(32, 2) + Op.RETURNCODE[0](0, 0) ), Section.Container(smallest_runtime_subcontainer), ] ) contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( Op.SSTORE(contract_storage.store_next(value_code_worked), value_code_worked) + Op.MSTORE(0, 1) + Op.EOFCREATE[0](0, 0, 0, 0) + Op.SSTORE(contract_storage.store_next(32), Op.MSIZE()) + Op.SSTORE(contract_storage.store_next(1), Op.MLOAD(0)) + Op.SSTORE(contract_storage.store_next(0), Op.MLOAD(32)) + Op.STOP, ), Section.Container(initcontainer), ], ), ) destination_contract_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account(storage=contract_storage), destination_contract_address: Account(storage=destination_storage), } tx = Transaction( to=contract_address, gas_limit=200_000, sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py ================================================ """Test good and bad EOFCREATE cases.""" import pytest from ethereum_test_base_types.base_types import Address from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, compute_eofcreate_address, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE, MAX_INITCODE_SIZE from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..eip7069_extcall.spec import EXTCALL_FAILURE, EXTCALL_REVERT, LEGACY_CALL_FAILURE from .helpers import ( aborting_container, slot_call_or_create, slot_call_result, slot_code_should_fail, slot_code_worked, slot_counter, slot_create_address, slot_max_depth, slot_returndata, slot_returndata_size, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_canary_should_not_change, value_code_worked, ) from .spec import EOFCREATE_FAILURE REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "52ddbcdddcf72dd72427c319f2beddeb468e1737" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "revert", [ pytest.param(b"", id="empty"), pytest.param(b"\x08\xc3\x79\xa0", id="Error(string)"), ], ) def test_initcode_revert(state_test: StateTestFiller, pre: Alloc, revert: bytes) -> None: """Verifies proper handling of REVERT in initcode.""" env = Environment() revert_size = len(revert) initcode_subcontainer = Container( name="Initcode Subcontainer that reverts", sections=[ Section.Code( code=Op.MSTORE(0, Op.PUSH32(revert)) + Op.REVERT(32 - revert_size, revert_size), ), ], ) factory_contract = Container( name="factory contract", sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE) + Op.RETURNDATACOPY(Op.SUB(32, Op.RETURNDATASIZE), 0, Op.RETURNDATASIZE) + Op.SSTORE(slot_returndata, Op.MLOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=initcode_subcontainer), ], ) sender = pre.fund_eoa() contract_address = pre.deploy_contract(code=factory_contract) post = { contract_address: Account( storage={ slot_create_address: EOFCREATE_FAILURE, slot_returndata_size: revert_size, slot_returndata: revert, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_initcode_aborts( state_test: StateTestFiller, pre: Alloc, ) -> None: """Verifies correct handling of a halt in EOF initcode.""" env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=aborting_container), ] ) ) # Storage in slot_create_address should not have the address, post = { contract_address: Account( storage={ slot_create_address: EOFCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) """ Size of the factory portion of test_eofcreate_deploy_sizes, but as the runtime code is dynamic, we have to use a pre-calculated size """ factory_size = 78 @pytest.mark.parametrize( "target_deploy_size", [ pytest.param(0x4000, id="large"), pytest.param(MAX_BYTECODE_SIZE, id="max"), pytest.param(MAX_BYTECODE_SIZE + 1, id="overmax"), pytest.param(MAX_INITCODE_SIZE - factory_size, id="initcodemax"), pytest.param( MAX_INITCODE_SIZE - factory_size + 1, id="initcodeovermax", marks=pytest.mark.skip("Oversized container in pre-alloc"), ), pytest.param( 0xFFFF - factory_size, id="64k-1", marks=pytest.mark.skip("Oversized container in pre-alloc"), ), ], ) def test_eofcreate_deploy_sizes( state_test: StateTestFiller, pre: Alloc, target_deploy_size: int, ) -> None: """ Verifies a mix of runtime contract sizes mixing success and multiple size failure modes. """ env = Environment() runtime_container = Container( sections=[ Section.Code( code=Op.JUMPDEST * (target_deploy_size - len(smallest_runtime_subcontainer)) + Op.STOP, ), ] ) initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=runtime_container), ], ) factory_container = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=initcode_subcontainer), ] ) assert factory_size == (len(factory_container) - len(runtime_container)), ( "factory_size is wrong, expected factory_size is %d, calculated is %d" % ( factory_size, len(factory_container) - len(runtime_container), ) ) sender = pre.fund_eoa() contract_address = pre.deploy_contract(code=factory_container) # Storage in 0 should have the address, Storage 1 is a canary of 1 to make # sure it tried to execute, which also covers cases of data+code being # greater than initcode_size_max, which is allowed. success = target_deploy_size <= MAX_BYTECODE_SIZE post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if success else EOFCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account() if success else Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "target_deploy_size", [ pytest.param(0x4000, id="large"), pytest.param(MAX_BYTECODE_SIZE, id="max"), pytest.param(MAX_BYTECODE_SIZE + 1, id="overmax"), pytest.param(MAX_INITCODE_SIZE - factory_size, id="initcodemax"), pytest.param(MAX_INITCODE_SIZE - factory_size + 1, id="initcodeovermax"), pytest.param(0xFFFF - factory_size, id="64k-1"), ], ) @pytest.mark.skip("Not implemented") def test_eofcreate_deploy_sizes_tx( state_test: StateTestFiller, target_deploy_size: int, ) -> None: """ Verifies a mix of runtime contract sizes mixing success and multiple size failure modes where the initcontainer is included in a transaction. """ raise NotImplementedError("Not implemented") @pytest.mark.parametrize( "auxdata_size", [ pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer), id="maxcode"), pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer) + 1, id="overmaxcode"), pytest.param(0x10000 - 60, id="almost64k"), pytest.param(0x10000 - 1, id="64k-1"), pytest.param(0x10000, id="64k"), pytest.param(0x10000 + 1, id="over64k"), ], ) def test_auxdata_size_failures(state_test: StateTestFiller, pre: Alloc, auxdata_size: int) -> None: """ Exercises a number of auxdata size violations, and one maxcode success. """ env = Environment() auxdata_bytes = b"a" * auxdata_size initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.RETURNCODE[0](0, Op.CALLDATASIZE), ), Section.Container(container=smallest_runtime_subcontainer), ], ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](input_size=Op.CALLDATASIZE)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=initcode_subcontainer), ] ) ) deployed_container_size = len(smallest_runtime_subcontainer) + auxdata_size # Storage in 0 will have address in first test, 0 in all other cases # indicating failure # # Storage 1 in 1 is a canary to see if EOFCREATE opcode # halted success = deployed_container_size <= MAX_BYTECODE_SIZE post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if success else 0, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account() if success else Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, data=auxdata_bytes, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "value", [ pytest.param(1, id="1_wei"), pytest.param(10**9, id="1_gwei"), ], ) def test_eofcreate_insufficient_stipend( state_test: StateTestFiller, pre: Alloc, value: int, ) -> None: """ Exercises an EOFCREATE that fails because the calling account does not have enough ether to pay the stipend. """ env = Environment() initcode_container = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](value=value)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=smallest_initcode_subcontainer), ] ) sender = pre.fund_eoa(10**11) contract_address = pre.deploy_contract( code=initcode_container, balance=value - 1, ) # create will fail but not trigger a halt, so canary at storage 1 should be # set # # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: EOFCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_insufficient_initcode_gas( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Exercises an EOFCREATE when there is not enough gas for the initcode charge. """ env = Environment() initcode_data = b"a" * 0x5000 initcode_container = Container( name="Large Initcode Subcontainer", sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=smallest_runtime_subcontainer), Section.Data(data=initcode_data), ], ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_should_fail, value_code_worked) + Op.STOP, ), Section.Container(container=initcode_container), ], ), storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ) # enough gas for everything but EVM opcodes and EIP-150 reserves gas_limit = 21_000 + 32_000 + (len(initcode_data) + 31) // 32 * 6 # out_of_gas is triggered, so canary won't set value # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=gas_limit, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_insufficient_gas_memory_expansion( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Exercises EOFCREATE when the memory for auxdata has not been expanded but is requested. """ env = Environment() auxdata_size = 0x5000 initcode_container = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](input_size=auxdata_size)) + Op.SSTORE(slot_code_should_fail, slot_code_worked) + Op.STOP, ), Section.Container(container=smallest_initcode_subcontainer), ], ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=initcode_container, storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ) # enough gas for everything but EVM opcodes and EIP-150 reserves initcode_container_words = (len(initcode_container) + 31) // 32 auxdata_size_words = (auxdata_size + 31) // 32 gas_limit = ( 21_000 + 32_000 + initcode_container_words * 6 + 3 * auxdata_size_words + auxdata_size_words * auxdata_size_words // 512 ) # out_of_gas is triggered, so canary won't set value # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=gas_limit, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_insufficient_returncode_auxdata_gas( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Exercises a RETURNCODE when there is not enough gas for the initcode charge. """ env = Environment() auxdata_size = 0x5000 initcode_container = Container( name="Large Initcode Subcontainer", sections=[ Section.Code( code=Op.RETURNCODE[0](0, auxdata_size), ), Section.Container(container=smallest_runtime_subcontainer), ], ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.SSTORE(slot_code_should_fail, value_code_worked) + Op.STOP, ), Section.Container(container=initcode_container), ], ), storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ) # enough gas for everything but EVM opcodes and EIP-150 reserves initcode_container_words = (len(initcode_container) + 31) // 32 auxdata_size_words = (auxdata_size + 31) // 32 gas_limit = ( 21_000 + 32_000 + initcode_container_words * 6 + 3 * auxdata_size_words + auxdata_size_words * auxdata_size_words // 512 ) # out_of_gas is triggered, so canary won't set value # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=gas_limit, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize( "opcode", [ Op.STATICCALL, Op.EXTSTATICCALL, ], ) @pytest.mark.parametrize("endowment", [0, 1]) # included to verify static flag # check comes first @pytest.mark.parametrize( "initcode", [smallest_initcode_subcontainer, aborting_container], ids=["working_initcode", "aborting_code"], ) def test_static_flag_eofcreate( state_test: StateTestFiller, pre: Alloc, opcode: Op, endowment: int, initcode: Container, ) -> None: """Verifies correct handling of the static call flag with EOFCREATE.""" env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](value=endowment) + Op.STOP, ), Section.Container(container=initcode), ] ) ) calling_code = ( Op.SSTORE(slot_call_result, opcode(address=contract_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) calling_address = pre.deploy_contract( Container.Code(calling_code) if opcode == Op.EXTSTATICCALL else calling_code ) post = { calling_address: Account( storage={ slot_call_result: EXTCALL_FAILURE if opcode == Op.EXTSTATICCALL else LEGACY_CALL_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=calling_address, gas_limit=10_000_000, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) magic_value_call = 0xCA11 magic_value_create = 0xCC12EA7E @pytest.mark.parametrize( "opcode", [ Op.EXTCALL, Op.EXTDELEGATECALL, ], ) @pytest.mark.parametrize( "who_fails", [magic_value_call, magic_value_create], ids=["call_fails", "create_fails"], ) @pytest.mark.pre_alloc_modify def test_eof_eofcreate_msg_depth( state_test: StateTestFiller, pre: Alloc, opcode: Op, who_fails: int, ) -> None: """ Test EOFCREATE handles msg depth limit correctly (1024). NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet. NOTE: See `tests/unscheduled/eip7692_eof_v1/eip7069_extcall/ test_calls.py::test_eof_calls_msg_depth` for more explanations and comments. Most notable deviation from that test is that here calls and `EOFCREATE`s alternate in order to reach the max depth. `who_fails` decides whether the failing depth 1024 will be on a call or on an `EOFCREATE` to happen. """ # Not a precise gas_limit formula, but enough to exclude risk of gas # causing the failure. gas_limit = int(20000000 * (64 / 63) ** 1024) env = Environment(gas_limit=gas_limit) sender = pre.fund_eoa() callee_address = Address(0x5000) # Memory offsets layout: # - 0 - input - msg depth # - 32 - output - msg depth # - 64 - output - call result # - 96 - output - magic value: create or call returndatacopy_block = Op.RETURNDATACOPY(32, 0, 96) + Op.REVERT(32, 96) deep_most_result_block = ( Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.REVERT(32, 96) ) rjump_offset = len(returndatacopy_block) callee_code = Container( sections=[ Section.Code( Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(96, magic_value_create) + Op.EOFCREATE[0](salt=Op.CALLDATALOAD(0), input_size=32) + Op.RETURNDATASIZE + Op.ISZERO + Op.RJUMPI[rjump_offset] + returndatacopy_block + deep_most_result_block ), Section.Container( Container.Code( Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(96, magic_value_call) + opcode(address=callee_address, args_size=32) + Op.RETURNDATASIZE + Op.ISZERO + Op.RJUMPI[rjump_offset] + returndatacopy_block + deep_most_result_block ) ), ] ) pre.deploy_contract(callee_code, address=callee_address) calling_contract_address = pre.deploy_contract( Container.Code( Op.MSTORE(0, Op.CALLDATALOAD(0)) + opcode(address=callee_address, args_size=32) + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32)) + Op.SSTORE(slot_call_or_create, Op.RETURNDATALOAD(64)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) ) # Only bumps the msg call depth "register" and forwards to the # `calling_contract_address`. If it is used it makes the "failing" depth of # 1024 to happen on EOFCREATE, instead of CALL. passthrough_address = pre.deploy_contract( Container.Code( Op.MSTORE(0, 1) + Op.EXTCALL(address=calling_contract_address, args_size=32) + Op.STOP ) ) tx = Transaction( sender=sender, to=calling_contract_address if who_fails == magic_value_call else passthrough_address, gas_limit=gas_limit, data="", ) calling_storage = { slot_max_depth: 1024, slot_code_worked: value_code_worked, slot_call_result: EXTCALL_REVERT if who_fails == magic_value_call else EOFCREATE_FAILURE, slot_call_or_create: who_fails, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) def test_reentrant_eofcreate( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies a reentrant EOFCREATE case, where EIP-161 prevents conflict via nonce bump. """ env = Environment() # Calls into the factory contract with 1 as input. reenter_code = Op.MSTORE(0, 1) + Op.EXTCALL(address=Op.CALLDATALOAD(32), args_size=32) # Initcode: if given 0 as 1st word of input will call into the factory # again. 2nd word of input is the address of the factory. initcontainer = Container( sections=[ Section.Code( Op.SSTORE(slot_counter, Op.ADD(Op.SLOAD(slot_counter), 1)) + Op.CALLDATALOAD(0) + Op.RJUMPI[len(reenter_code)] + reenter_code + Op.RETURNCODE[0](0, 0) ), Section.Container(smallest_runtime_subcontainer), ] ) # Factory: # Passes on its input into the initcode. # It's 0 first time, 1 the second time. # Saves the result of deployment in slot 0 first time, 1 the # second time. contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( Op.CALLDATACOPY(0, 0, 32) + Op.MSTORE(32, Op.ADDRESS) # 1st word - copied from input (reenter flag) # 2nd word - `this.address` + Op.SSTORE(Op.CALLDATALOAD(0), Op.EOFCREATE[0](input_size=64)) + Op.STOP, ), Section.Container(initcontainer), ], ), storage={0: 0xB17D, 1: 0xB17D}, # a canary to be overwritten ) # Flow is: # reenter flag 0 -> factory -> reenter flag 0 -> initcode -> # reenter -> reenter flag 1 -> factory -> reenter flag 1 -> (!) initcode # -> stop # if the EIP-161 nonce bump is not implemented. # # If it is, it fails before second inicode marked (!). # # Storage in 0 should have the address from the outer EOFCREATE. # Storage in 1 should have 0 from the inner EOFCREATE. For the created # contract storage in `slot_counter` should be 1 as initcode # executes only once. post = { contract_address: Account( storage={ 0: compute_eofcreate_address(contract_address, 0), 1: 0, } ), compute_eofcreate_address(contract_address, 0): Account( nonce=1, code=smallest_runtime_subcontainer, storage={slot_counter: 1} ), } tx = Transaction( to=contract_address, gas_limit=500_000, sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_gas.py ================================================ """Test good and bad EOFCREATE cases.""" import pytest from ethereum_test_forks import Fork from ethereum_test_tools import Alloc, Environment, StateTestFiller, compute_eofcreate_address from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..gas_test import gas_test from .helpers import ( aborting_container, big_runtime_subcontainer, bigger_initcode_subcontainer, bigger_initcode_subcontainer_gas, data_appending_initcode_subcontainer, data_appending_initcode_subcontainer_gas, data_initcode_subcontainer, data_runtime_container, expensively_reverting_container, expensively_reverting_container_gas, reverting_container, slot_counter, smallest_initcode_subcontainer, smallest_initcode_subcontainer_gas, smallest_runtime_subcontainer, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "52ddbcdddcf72dd72427c319f2beddeb468e1737" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) EOFCREATE_GAS = 32000 def make_factory(initcode: Container) -> Container: """Wrap initcontainer into a minimal runtime container.""" return Container( name="Factory Subcontainer", sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container(initcode), ], ) @pytest.mark.parametrize("value", [0, 1]) @pytest.mark.parametrize("new_account", [True, False]) @pytest.mark.parametrize( "mem_expansion_bytes", [0, 1, 32, 33], ) @pytest.mark.parametrize( ["initcode", "initcode_execution_cost", "runtime"], [ pytest.param( smallest_initcode_subcontainer, smallest_initcode_subcontainer_gas, smallest_runtime_subcontainer, id="smallest_code", ), pytest.param( Container.Init(aborting_container), smallest_initcode_subcontainer_gas, aborting_container, id="aborting_runtime", ), pytest.param( reverting_container, smallest_initcode_subcontainer_gas, None, id="reverting_initcode" ), pytest.param( expensively_reverting_container, expensively_reverting_container_gas, None, id="expensively_reverting_initcode", ), pytest.param( Container.Init(big_runtime_subcontainer), smallest_initcode_subcontainer_gas, big_runtime_subcontainer, id="big_runtime", ), pytest.param( Container.Init(make_factory(smallest_initcode_subcontainer)), smallest_initcode_subcontainer_gas, make_factory(smallest_initcode_subcontainer), id="nested_initcode", ), pytest.param( bigger_initcode_subcontainer, bigger_initcode_subcontainer_gas, smallest_runtime_subcontainer, id="bigger_initcode", ), pytest.param( data_initcode_subcontainer, smallest_initcode_subcontainer_gas, data_runtime_container, id="data_initcode", ), pytest.param( data_appending_initcode_subcontainer, data_appending_initcode_subcontainer_gas, data_runtime_container, id="data_appending_initcode", ), ], ) def test_eofcreate_gas( state_test: StateTestFiller, pre: Alloc, fork: Fork, value: int, new_account: bool, mem_expansion_bytes: int, initcode: Container, initcode_execution_cost: int, runtime: Container, ) -> None: """Tests variations of EOFCREATE gas.""" deployed_code_cost = 200 * len(runtime) if runtime else 0 subject_address = pre.fund_eoa(0) salt_addresses = [compute_eofcreate_address(subject_address, i) for i in range(4)] if not new_account: for a in salt_addresses: pre.fund_address(a, 1) # Using `TLOAD` / `TSTORE` to work around warm/cold gas differences. We # need a counter to pick a distinct salt on each `EOFCREATE` and avoid # running into address conflicts. code_increment_counter = ( Op.TLOAD(slot_counter) + Op.DUP1 + Op.TSTORE(slot_counter, Op.PUSH1(1) + Op.ADD) ) cost_memory_bytes = fork.memory_expansion_gas_calculator() gas_test( state_test, Environment(), pre, setup_code=Op.PUSH32(value) + Op.PUSH1(mem_expansion_bytes) + Op.PUSH0 + code_increment_counter, subject_code=Op.EOFCREATE[0], tear_down_code=Op.STOP, cold_gas=EOFCREATE_GAS + cost_memory_bytes(new_bytes=mem_expansion_bytes) + initcode_execution_cost + deployed_code_cost, subject_subcontainer=initcode, subject_balance=value * 4, subject_address=subject_address, oog_difference=initcode_execution_cost + deployed_code_cost + 1, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py ================================================ """Test interactions between CREATE, CREATE2, and EOFCREATE.""" import pytest from ethereum_test_base_types.base_types import Address, Bytes from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Initcode as LegacyInitcode from ethereum_test_types.eof.v1 import Container from ethereum_test_types.helpers import compute_create_address from ethereum_test_vm import Opcodes from ethereum_test_vm import Opcodes as Op from ....prague.eip7702_set_code_tx.spec import Spec from .. import EOF_FORK_NAME from .helpers import ( slot_all_subcall_gas_gone, slot_code_worked, slot_create_address, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_code_worked, ) from .spec import EOFCREATE_FAILURE REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "52ddbcdddcf72dd72427c319f2beddeb468e1737" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "legacy_create_opcode", [ pytest.param(Op.CREATE, id="CREATE"), pytest.param(Op.CREATE2, id="CREATE2"), ], ) @pytest.mark.parametrize( "initcode", [ Bytes("0xEF00"), Bytes("0xEF0001"), pytest.param(smallest_initcode_subcontainer, id="deploy_eof_initcontainer"), pytest.param(smallest_runtime_subcontainer, id="deploy_eof_container"), ], ) def test_cross_version_creates_fail_light( state_test: StateTestFiller, pre: Alloc, legacy_create_opcode: Opcodes, initcode: Bytes | Container, ) -> None: """ Verifies that CREATE and CREATE2 cannot run EOF initcodes and fail early on attempt. """ env = Environment() sender = pre.fund_eoa() tx_gas_limit = 10_000_000 contract_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_create_address, legacy_create_opcode(size=Op.CALLDATASIZE)) # Approximates whether code until here consumed the 63/64th gas given # to subcall + Op.SSTORE(slot_all_subcall_gas_gone, Op.LT(Op.GAS, tx_gas_limit // 64)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) post = { contract_address: Account( storage={ slot_create_address: EOFCREATE_FAILURE, slot_code_worked: value_code_worked, slot_all_subcall_gas_gone: 0, }, nonce=1, ), # Double check no accounts were created compute_create_address(address=contract_address, nonce=1): Account.NONEXISTENT, compute_create_address( address=contract_address, initcode=initcode, salt=0, opcode=Op.CREATE2 ): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=tx_gas_limit, sender=sender, data=initcode, ) state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "legacy_create_opcode", [ pytest.param(Op.CREATE, id="CREATE"), pytest.param(Op.CREATE2, id="CREATE2"), ], ) @pytest.mark.parametrize( "initcode", [ Bytes("0xEF"), Bytes("0xEF01"), Bytes("0xEF0101"), Spec.delegation_designation(Address(0xAA)), Bytes("0xEF02"), ], ) def test_cross_version_creates_fail_hard( state_test: StateTestFiller, pre: Alloc, legacy_create_opcode: Opcodes, initcode: Bytes, ) -> None: """ Verifies that CREATE and CREATE2 fail hard on attempt to run initcode starting with `EF` but not `EF00`. """ env = Environment() sender = pre.fund_eoa() tx_gas_limit = 10_000_000 contract_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_create_address, legacy_create_opcode(size=Op.CALLDATASIZE)) # Approximates whether code until here consumed the 63/64th gas given # to subcall + Op.SSTORE(slot_all_subcall_gas_gone, Op.LT(Op.GAS, tx_gas_limit // 64)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) post = { contract_address: Account( storage={ slot_create_address: EOFCREATE_FAILURE, slot_code_worked: value_code_worked, slot_all_subcall_gas_gone: 1, }, nonce=2, ), # Double check no accounts were created compute_create_address(address=contract_address, nonce=1): Account.NONEXISTENT, compute_create_address( address=contract_address, initcode=initcode, salt=0, opcode=Op.CREATE2 ): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=tx_gas_limit, sender=sender, data=initcode, ) state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.parametrize( "legacy_create_opcode", [ pytest.param(Op.CREATE, id="CREATE"), pytest.param(Op.CREATE2, id="CREATE2"), ], ) @pytest.mark.parametrize( "deploy_code", [ Bytes("0xEF"), Bytes("0xEF00"), Bytes("0xEF0001"), Bytes("0xEF01"), pytest.param(smallest_initcode_subcontainer, id="deploy_eof_initcontainer"), pytest.param(smallest_runtime_subcontainer, id="deploy_eof_container"), ], ) def test_legacy_initcode_eof_contract_fails( state_test: StateTestFiller, pre: Alloc, legacy_create_opcode: Opcodes, deploy_code: Bytes | Container, ) -> None: """ Verifies that legacy initcode cannot create EOF. This tests only ensures EIP-3541 behavior is kept, not altered by EIP-7620. """ env = Environment() init_code = LegacyInitcode(deploy_code=deploy_code) salt_param = [0] if legacy_create_opcode == Op.CREATE2 else [] factory_code = ( Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_create_address, legacy_create_opcode(0, 0, Op.CALLDATASIZE, *salt_param)) + Op.SSTORE(slot_code_worked, value_code_worked) ) sender = pre.fund_eoa() contract_address = pre.deploy_contract(code=factory_code) # Storage in 0 should be empty as the final CREATE filed # and 1 in 1 to show execution continued and did not halt post = { contract_address: Account( storage={slot_create_address: EOFCREATE_FAILURE, slot_code_worked: value_code_worked} ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, data=init_code, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_memory.py ================================================ """Test good and bad EOFCREATE cases.""" import pytest from ethereum_test_base_types import Account, Storage from ethereum_test_tools import Alloc, Environment, StateTestFiller, compute_eofcreate_address from ethereum_test_types import Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import ( slot_code_worked, slot_create_address, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_canary_to_be_overwritten, value_code_worked, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "52ddbcdddcf72dd72427c319f2beddeb468e1737" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.parametrize( "offset_field", [ pytest.param(True, id="offset"), pytest.param(False, id="size"), ], ) @pytest.mark.parametrize( ("test_arg", "success"), [ pytest.param(0, True, id="zero"), pytest.param(0xFF, True, id="8-bit"), pytest.param(0x100, True, id="9-bit"), pytest.param(0xFFFF, True, id="16-bit"), pytest.param(0x10000, True, id="17-bit"), pytest.param(0x1FFFF20, False, id="32-bit-mem-cost"), pytest.param(0x2D412E0, False, id="33-bit-mem-cost"), pytest.param(0xFFFFFFFF, False, id="32-bit"), pytest.param(0x100000000, False, id="33-bit"), pytest.param(0x1FFFFFFFF20, False, id="64-bit-mem-cost"), pytest.param(0x2D413CCCF00, False, id="65-bit-mem-cost"), pytest.param(0xFFFFFFFFFFFFFFFF, False, id="64-bit"), pytest.param(0x10000000000000000, False, id="65-bit"), pytest.param(0xFFFFFFFFFFFFFFFF, False, id="128-bit"), pytest.param(0x10000000000000000, False, id="129-bit"), pytest.param(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, False, id="256-bit"), ], ) def test_eofcreate_memory( state_test: StateTestFiller, pre: Alloc, offset_field: str, test_arg: int, success: bool, ) -> None: """ Tests auxdata sizes in EOFCREATE including multiple offset conditions. EOFCREATE either succeeds or fails based on memory access cost, resulting in new address or zero in the create address slot. The name id of `*-mem-cost` refers to the bit-length of the result of the calculated memory expansion cost. Their length choice is designed to cause problems on shorter bit-length representations with native integers. The `offset_field` param indicates what part of the input data arguments are being tested, either the offset of the data in memory or the size of the data in memory. The `test_arg` param is the value passed into the field being tested (offset or size), intending to trigger integer size bugs for that particular field. """ env = Environment(gas_limit=2_000_000_000) sender = pre.fund_eoa(10**27) initial_storage = Storage( { slot_create_address: value_canary_to_be_overwritten, # type: ignore slot_code_worked: value_canary_to_be_overwritten, # type: ignore } ) calling_contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE( slot_create_address, Op.EOFCREATE[0]( value=0, salt=0, input_offset=test_arg if offset_field else 32, input_size=32 if offset_field else test_arg, ), ) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), Section.Container(container=smallest_initcode_subcontainer), ] ), storage=initial_storage, ) destination_contract_address = compute_eofcreate_address(calling_contract_address, 0) post = { calling_contract_address: Account( storage={ slot_create_address: destination_contract_address, slot_code_worked: value_code_worked, } if success else initial_storage, ), destination_contract_address: Account(code=smallest_runtime_subcontainer) if success else Account.NONEXISTENT, } tx = Transaction(sender=sender, to=calling_contract_address, gas_limit=2_000_000_000) state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_returncode.py ================================================ """Tests for RETURNCODE instruction validation.""" import pytest from ethereum_test_base_types import Account from ethereum_test_specs import StateTestFiller from ethereum_test_tools import Alloc, EOFException, EOFTestFiller from ethereum_test_types import Environment, Transaction, compute_eofcreate_address from ethereum_test_types.eof.v1 import Container, ContainerKind, Section from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import ( slot_create_address, smallest_runtime_subcontainer, value_canary_to_be_overwritten, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "f20b164b00ae5553f7536a6d7a83a0f254455e09" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) def test_returncode_valid_index_0( eof_test: EOFTestFiller, ) -> None: """Deploy container index 0.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])), ], ), ) def test_returncode_valid_index_1( eof_test: EOFTestFiller, ) -> None: """Deploy container index 1.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.RJUMPI[6](0) + Op.RETURNCODE[0](0, 0) + Op.RETURNCODE[1](0, 0), max_stack_height=2, ), Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])), Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])), ], ), ) def test_returncode_valid_index_255( eof_test: EOFTestFiller, ) -> None: """Deploy container index 255.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( sum((Op.RJUMPI[6](0) + Op.RETURNCODE[i](0, 0)) for i in range(256)) + Op.REVERT(0, 0), max_stack_height=2, ) ] + [Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)]))] * 256 ), ) def test_returncode_invalid_truncated_immediate( eof_test: EOFTestFiller, ) -> None: """Truncated immediate.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCODE, ), ], ), expect_exception=EOFException.TRUNCATED_INSTRUCTION, ) def test_returncode_invalid_index_0( eof_test: EOFTestFiller, ) -> None: """Referring to non-existent container section index 0.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), ], ), expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX, ) def test_returncode_invalid_index_1( eof_test: EOFTestFiller, ) -> None: """Referring to non-existent container section index 1.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.RETURNCODE[1](0, 0), ), Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])), ], ), expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX, ) def test_returncode_invalid_index_255( eof_test: EOFTestFiller, ) -> None: """Referring to non-existent container section index 255.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.RETURNCODE[255](0, 0), ), Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])), ], ), expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX, ) def test_returncode_terminating( eof_test: EOFTestFiller, ) -> None: """Unreachable code after RETURNCODE.""" eof_test( container_kind=ContainerKind.INITCODE, container=Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0) + Op.REVERT(0, 0), ), Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])), ], ), expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS, ) @pytest.mark.parametrize( "offset_field", [ pytest.param(True, id="offset"), pytest.param(False, id="size"), ], ) @pytest.mark.parametrize( ("test_arg", "success"), [ pytest.param(0, True, id="zero"), pytest.param(0xFF, True, id="8-bit"), pytest.param(0x100, True, id="9-bit"), pytest.param(0xFFFF, True, id="16-bit"), pytest.param(0x10000, True, id="17-bit"), pytest.param(0x1FFFF20, False, id="32-bit-mem-cost"), pytest.param(0x2D412E0, False, id="33-bit-mem-cost"), pytest.param(0xFFFFFFFF, False, id="32-bit"), pytest.param(0x100000000, False, id="33-bit"), pytest.param(0x1FFFFFFFF20, False, id="64-bit-mem-cost"), pytest.param(0x2D413CCCF00, False, id="65-bit-mem-cost"), pytest.param(0xFFFFFFFFFFFFFFFF, False, id="64-bit"), pytest.param(0x10000000000000000, False, id="65-bit"), pytest.param(0xFFFFFFFFFFFFFFFF, False, id="128-bit"), pytest.param(0x10000000000000000, False, id="129-bit"), pytest.param(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, False, id="256-bit"), ], ) def test_returncode_memory_expansion( state_test: StateTestFiller, pre: Alloc, offset_field: str, test_arg: int, success: bool, ) -> None: """ Attempts an EOFCREATE with a possibly too-large auxdata. Create either fails due to gas or contract too large, resulting in address or zero on failure in the create address slot. The name id of `*-mem-cost` refers to the bit-length of the result of the calculated memory expansion cost. Their length choice is designed to cause problems on shorter bit-length representations with native integers. The `offset_field` param indicates what part of the input data arguments are being tested, either the offset of the data in memory or the size of the data in memory. The `test_arg` param is the value passed into the field being tested (offset or size), intending to trigger integer size bugs for that particular field. """ env = Environment(gas_limit=2_000_000_000) sender = pre.fund_eoa(10**27) eof_size_acceptable = offset_field or test_arg < MAX_BYTECODE_SIZE mem_size_initcode_container = Container( sections=[ Section.Code( code=Op.RETURNCODE[0]( auxdata_offset=test_arg if offset_field else 32, auxdata_size=32 if offset_field else test_arg, ) ), Section.Container(container=smallest_runtime_subcontainer), ], ) contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP, ), Section.Container(container=mem_size_initcode_container), ], ), storage={ slot_create_address: value_canary_to_be_overwritten, }, ) # Storage in 0 should have the address, post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if success and eof_size_acceptable else 0, } ) } tx = Transaction( to=contract_address, gas_limit=2_000_000_000, gas_price=10, protected=False, sender=sender, ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py ================================================ """EOF Subcontainer tests covering simple cases.""" import pytest from ethereum_test_tools import Account, EOFException, EOFStateTestFiller, EOFTestFiller from ethereum_test_types.eof.v1 import Container, ContainerKind, Section from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE, MAX_INITCODE_SIZE from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from .helpers import slot_code_worked, value_code_worked REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7620.md" REFERENCE_SPEC_VERSION = "52ddbcdddcf72dd72427c319f2beddeb468e1737" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) eofcreate_code_section = Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, max_stack_height=4, ) eofcreate_revert_code_section = Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.REVERT(0, 0), ) returncode_code_section = Section.Code( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETURNCODE[0](0, 0), max_stack_height=2, ) stop_container = Container.Code(Op.STOP) stop_sub_container = Section.Container(stop_container) return_sub_container = Section.Container(Container.Code(Op.RETURN(0, 0))) revert_sub_container = Section.Container(Container.Code(Op.REVERT(0, 0))) abort_sub_container = Section.Container(Container.Code(Op.INVALID)) returncode_sub_container = Section.Container( Container( sections=[ Section.Code(Op.RETURNCODE[0](0, 0)), stop_sub_container, ], ) ) def test_simple_create_from_deployed( eof_state_test: EOFStateTestFiller, ) -> None: """Simple EOF creation from a deployed EOF container.""" eof_state_test( container=Container( sections=[ eofcreate_code_section, returncode_sub_container, ], ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) def test_simple_create_from_creation( eof_state_test: EOFStateTestFiller, ) -> None: """Simple EOF creation from a create transaction container.""" eof_state_test( container=Container( sections=[ returncode_code_section, stop_sub_container, ], kind=ContainerKind.INITCODE, ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( "zero_section", [eofcreate_code_section, returncode_code_section], ids=["eofcreate", "returncode"], ) def test_reverting_container( eof_state_test: EOFStateTestFiller, zero_section: Container, ) -> None: """Test revert containers.""" eof_state_test( container=Container( sections=[ zero_section, revert_sub_container, ], kind=( ContainerKind.INITCODE if zero_section == returncode_code_section else ContainerKind.RUNTIME ), ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( "code_section,first_sub_container,container_kind", [ (eofcreate_code_section, returncode_sub_container, ContainerKind.RUNTIME), (returncode_code_section, stop_sub_container, ContainerKind.INITCODE), ], ids=["eofcreate", "returncode"], ) @pytest.mark.parametrize( "extra_sub_container", [stop_sub_container, revert_sub_container, returncode_sub_container], ids=["stop", "revert", "returncode"], ) def test_orphan_container( eof_test: EOFTestFiller, code_section: Section, first_sub_container: Container, extra_sub_container: Container, container_kind: ContainerKind, ) -> None: """Test orphaned containers.""" eof_test( container=Container( sections=[ code_section, first_sub_container, extra_sub_container, ], kind=container_kind, ), expect_exception=EOFException.ORPHAN_SUBCONTAINER, ) @pytest.mark.parametrize( "code_section,sub_container,container_kind", [ pytest.param( eofcreate_code_section, returncode_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_RETURNCODE", ), pytest.param( returncode_code_section, stop_sub_container, ContainerKind.INITCODE, id="RETURNCODE_STOP", ), pytest.param( returncode_code_section, return_sub_container, ContainerKind.INITCODE, id="RETURNCODE_RETURN", ), pytest.param( eofcreate_code_section, revert_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_REVERT", ), pytest.param( returncode_code_section, revert_sub_container, ContainerKind.INITCODE, id="RETURNCODE_REVERT", ), ], ) def test_container_combos_valid( eof_state_test: EOFStateTestFiller, code_section: Section, sub_container: Container, container_kind: ContainerKind, ) -> None: """Test valid subcontainer reference / opcode combos.""" eof_state_test( container=Container( sections=[ code_section, sub_container, ], kind=container_kind, ), container_post=Account(storage={slot_code_worked: value_code_worked}), ) @pytest.mark.parametrize( "code_section,first_sub_container,container_kind", [ pytest.param( eofcreate_code_section, stop_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_STOP", ), pytest.param( eofcreate_code_section, return_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_RETURN", ), pytest.param( returncode_code_section, returncode_sub_container, ContainerKind.INITCODE, id="RETURNCODE_RETURNCODE", ), ], ) def test_container_combos_invalid( eof_test: EOFTestFiller, code_section: Section, first_sub_container: Container, container_kind: ContainerKind, ) -> None: """Test invalid subcontainer reference / opcode combos.""" eof_test( container=Container( sections=[ code_section, first_sub_container, ], kind=container_kind, ), expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND, ) @pytest.mark.parametrize( "code_section,first_sub_container", [ pytest.param( eofcreate_revert_code_section, returncode_sub_container, id="EOFCREATE_RETURNCODE", ), pytest.param( returncode_code_section, stop_sub_container, id="RETURNCODE_STOP", ), pytest.param( returncode_code_section, return_sub_container, id="RETURNCODE_RETURN", ), pytest.param( eofcreate_revert_code_section, revert_sub_container, id="EOFCREATE_REVERT", ), pytest.param( returncode_code_section, revert_sub_container, id="RETURNCODE_REVERT", ), ], ) def test_container_combos_deeply_nested_valid( eof_test: EOFTestFiller, code_section: Section, first_sub_container: Container, ) -> None: """ Test valid subcontainer reference / opcode combos on a deep container nesting level. """ valid_container = Container( sections=[ code_section, first_sub_container, ], kind=ContainerKind.INITCODE, ) container = valid_container while len(container) < MAX_BYTECODE_SIZE: container = Container( sections=[ eofcreate_revert_code_section, Section.Container(container=container.copy()), ], kind=ContainerKind.INITCODE, ) eof_test( container=container, deployed_container=None, # Execution reverts before deployment ) @pytest.mark.parametrize( "code_section,first_sub_container", [ pytest.param( eofcreate_revert_code_section, stop_sub_container, id="EOFCREATE_STOP", ), pytest.param( eofcreate_revert_code_section, return_sub_container, id="EOFCREATE_RETURN", ), pytest.param( returncode_code_section, returncode_sub_container, id="RETURNCODE_RETURNCODE", ), ], ) def test_container_combos_deeply_nested_invalid( eof_test: EOFTestFiller, code_section: Section, first_sub_container: Container, ) -> None: """ Test invalid subcontainer reference / opcode combos on a deep container nesting level. """ invalid_container = Container( sections=[ code_section, first_sub_container, ], kind=ContainerKind.INITCODE, ) container = invalid_container while len(container) < MAX_BYTECODE_SIZE: container = Container( sections=[ eofcreate_revert_code_section, Section.Container(container=container.copy()), ], kind=ContainerKind.INITCODE, ) eof_test( container=container, expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND, ) @pytest.mark.parametrize( "code_section,first_sub_container,container_kind", [ pytest.param( eofcreate_code_section, returncode_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_RETURNCODE", ), pytest.param( returncode_code_section, stop_sub_container, ContainerKind.INITCODE, id="RETURNCODE_STOP", ), pytest.param( returncode_code_section, return_sub_container, ContainerKind.INITCODE, id="RETURNCODE_RETURN", ), pytest.param( eofcreate_code_section, revert_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_REVERT", ), pytest.param( returncode_code_section, revert_sub_container, ContainerKind.INITCODE, id="RETURNCODE_REVERT", ), ], ) def test_container_combos_non_first_code_sections_valid( eof_test: EOFTestFiller, code_section: Section, first_sub_container: Container, container_kind: ContainerKind, ) -> None: """ Test valid subcontainer reference / opcode combos in a non-first code section. """ eof_test( container=Container( sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 1024)] + [code_section, first_sub_container], kind=container_kind, ), ) @pytest.mark.parametrize( "code_section,first_sub_container,container_kind", [ pytest.param( eofcreate_code_section, stop_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_STOP", ), pytest.param( eofcreate_code_section, return_sub_container, ContainerKind.RUNTIME, id="EOFCREATE_RETURN", ), pytest.param( returncode_code_section, returncode_sub_container, ContainerKind.INITCODE, id="RETURNCODE_RETURNCODE", ), ], ) def test_container_combos_non_first_code_sections_invalid( eof_test: EOFTestFiller, code_section: Section, first_sub_container: Container, container_kind: ContainerKind, ) -> None: """ Test invalid subcontainer reference / opcode combos in a non-first code section. """ eof_test( container=Container( sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 1024)] + [code_section, first_sub_container], kind=container_kind, ), expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND, ) def test_container_both_kinds_same_sub(eof_test: EOFTestFiller) -> None: """ Test subcontainer conflicts (both EOFCREATE and RETURNCODE Reference). """ eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.JUMPF[1], ), Section.Code( code=Op.RETURNCODE[0](0, 0), ), revert_sub_container, ], ), expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND, ) @pytest.mark.parametrize("container_idx", [0, 1, 255]) @pytest.mark.parametrize( "sub_container", [ pytest.param(abort_sub_container, id="abort"), pytest.param(revert_sub_container, id="revert"), ], ) def test_container_ambiguous_kind( eof_test: EOFTestFiller, container_idx: int, sub_container: Section ) -> None: """ Test ambiguous container kind: a single subcontainer reference by both EOFCREATE and RETURNCODE. """ sections = [ Section.Code( code=( sum(Op.EOFCREATE[i](0, 0, 0, 0) for i in range(container_idx)) + Op.EOFCREATE[container_idx](0, 0, 0, 0) + Op.RETURNCODE[container_idx](0, 0) ), ), ] sections += (container_idx + 1) * [sub_container] eof_test( container=Container( sections=sections, kind=ContainerKind.INITCODE, ), expect_exception=EOFException.AMBIGUOUS_CONTAINER_KIND, ) def test_container_both_kinds_different_sub(eof_test: EOFTestFiller) -> None: """Test multiple kinds of subcontainer at the same level.""" eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.JUMPF[1], ), Section.Code( code=Op.RETURNCODE[1](0, 0), ), returncode_sub_container, stop_sub_container, ], kind=ContainerKind.INITCODE, ), deployed_container=stop_container, ) def test_container_multiple_eofcreate_references(eof_test: EOFTestFiller) -> None: """ Test multiple references to the same subcontainer from an EOFCREATE operation. """ eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, ), returncode_sub_container, ], ), ) def test_container_multiple_returncode_references(eof_test: EOFTestFiller) -> None: """ Test multiple references to the same subcontainer from a RETURNCONTACT operation. """ eof_test( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.CALLDATALOAD + Op.RJUMPI[6] + Op.RETURNCODE[0](0, 0) + Op.RETURNCODE[0](0, 0) ), stop_sub_container, ], kind=ContainerKind.INITCODE, ), ) @pytest.mark.parametrize("version", [0, 255], ids=lambda x: x) def test_subcontainer_wrong_eof_version( eof_test: EOFTestFiller, version: int, ) -> None: """Test a subcontainer with the incorrect EOF version.""" eof_test( container=Container( sections=[ Section.Code( code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP, ), Section.Container( container=Container(version=[version], sections=[Section.Code(code=Op.STOP)]) ), ], kind=ContainerKind.RUNTIME, ), expect_exception=EOFException.INVALID_VERSION, ) @pytest.mark.parametrize("delta", [-1, 1], ids=["smaller", "larger"]) @pytest.mark.parametrize("kind", [ContainerKind.RUNTIME, ContainerKind.INITCODE]) def test_subcontainer_wrong_size( eof_test: EOFTestFiller, delta: int, kind: ContainerKind, ) -> None: """Test a subcontainer with the incorrect size in the parent's header.""" eof_test( container=Container( sections=[ Section.Code( code=(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP) if kind == ContainerKind.RUNTIME else (Op.RETURNCODE[0](0, 0)), ), Section.Container( container=Container(sections=[Section.Code(code=Op.STOP)]), custom_size=len(stop_sub_container.data) + delta, ), ], kind=kind, ), expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE, ) deep_container_parametrize = pytest.mark.parametrize( ["deepest_container", "exception"], [ pytest.param(Container.Code(Op.STOP), None, id="valid"), pytest.param( Container.Code(code=Op.PUSH0), EOFException.MISSING_STOP_OPCODE, id="code-error", ), pytest.param( Container(raw_bytes="EF0100A94F5374FCE5EDBC8E2A8697C15331677E6EBF0B"), EOFException.INVALID_MAGIC, id="structure-error", ), ], ) @deep_container_parametrize @pytest.mark.eof_test_only(reason="Initcontainer exceeds maximum") def test_deep_container( eof_test: EOFTestFiller, deepest_container: Container, exception: EOFException | None ) -> None: """ Test a very deeply nested container. This test skips generating a state test because the initcode size is too large. """ container = deepest_container last_container = deepest_container while len(container) < MAX_INITCODE_SIZE: last_container = container container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.EOFCREATE[0] + Op.STOP, ), Section.Container( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCODE[0], ), Section.Container(container=last_container), ] ) ), ], ) eof_test(container=last_container, expect_exception=exception) @deep_container_parametrize def test_deep_container_initcode( eof_test: EOFTestFiller, deepest_container: Container, exception: EOFException | None ) -> None: """Test a very deeply nested initcontainer.""" container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCODE[0], ), Section.Container(container=deepest_container), ], kind=ContainerKind.INITCODE, ) last_container = container while len(container) < MAX_INITCODE_SIZE: last_container = container container = Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCODE[0], ), Section.Container( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.EOFCREATE[0] + Op.STOP ), Section.Container(container=last_container), ] ) ), ], kind=ContainerKind.INITCODE, ) eof_test( container=last_container, expect_exception=exception, deployed_container=None, ) @pytest.mark.parametrize( ["width", "exception"], [ pytest.param(256, None, id="256"), pytest.param(257, EOFException.TOO_MANY_CONTAINERS, id="257"), pytest.param( 0x8000, EOFException.CONTAINER_SIZE_ABOVE_LIMIT, marks=pytest.mark.eof_test_only(reason="int too big to convert"), id="negative_i16", ), pytest.param( 0xFFFF, EOFException.CONTAINER_SIZE_ABOVE_LIMIT, marks=pytest.mark.eof_test_only(reason="int too big to convert"), id="max_u16", ), ], ) def test_wide_container(eof_test: EOFTestFiller, width: int, exception: EOFException) -> None: """Test a container with the maximum number of sub-containers.""" create_code: Bytecode = Op.STOP for x in range(0, 256): create_code = Op.EOFCREATE[x](0, 0, 0, 0) + create_code eof_test( container=Container( sections=[ Section.Code( code=create_code, ), *( [ Section.Container( container=Container( sections=[ Section.Code( code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCODE[0], ), stop_sub_container, ] ) ) ] * width ), ] ), expect_exception=exception, ) @pytest.mark.parametrize( "container", [ pytest.param( Container( sections=[ Section.Code( Op.CALLDATASIZE + Op.PUSH1[0] + Op.PUSH1[255] + Op.PUSH1[0] + Op.EOFCREATE[0] + Op.POP + Op.STOP ), abort_sub_container, ], expected_bytecode=""" ef0001010004020001000b03000100000014ff0000000080000436600060ff6000ec005000ef000101000402 00010001ff00000000800000fe""", ), id="eofcreate_0", ), pytest.param( Container( sections=[ Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP), abort_sub_container, ], expected_bytecode=""" ef0001010004020001000603000100000014ff000000008000016000e0000000ef000101000402000100 01ff00000000800000fe""", # Originally this test was "valid" because it was created # before "orphan subcontainer" rule was introduced. validity_error=EOFException.ORPHAN_SUBCONTAINER, ), id="orphan_subcontainer_0", ), pytest.param( Container( sections=[ Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP), abort_sub_container, Section.Data(custom_size=2), ], expected_bytecode=""" ef0001010004020001000603000100000014ff000200008000016000e0000000ef000101000402000100 01ff00000000800000fe""", # Originally this test was "valid" but against the current spec # it contains two errors: data section truncated and orphan # subcontainer. validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED, ), id="orphan_subcontainer_0_and_truncated_data", ), pytest.param( Container( sections=[ Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP), abort_sub_container, Section.Data("aabb"), ], expected_bytecode=""" ef0001010004020001000603000100000014ff000200008000016000e0000000ef000101000402000100 01ff00000000800000feaabb""", # Originally this test was "valid" because it was created # before "orphan subcontainer" rule was introduced. validity_error=EOFException.ORPHAN_SUBCONTAINER, ), id="orphan_subcontainer_0_and_data", ), pytest.param( Container( sections=[ Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP), Section.Container("aabbccddeeff"), ], # The original test has been modified to reference the # subcontainer by EOFCREATE. validity_error=EOFException.INVALID_MAGIC, ), id="subcontainer_0_with_invalid_prefix", ), pytest.param( Container( sections=[ Section.Code( Op.CALLDATASIZE + Op.PUSH1[0] + Op.PUSH1[255] + Op.PUSH1[0] + Op.EOFCREATE[1] + Op.POP + Op.STOP ) ] + 2 * [abort_sub_container], expected_bytecode=""" ef0001010004020001000b0300020000001400000014ff0000000080000436600060ff6000ec015000ef00010100 040200010001ff00000000800000feef00010100040200010001ff00000000800000fe""", # Originally this test was "valid" because it was created # before "orphan subcontainer" rule was introduced. validity_error=EOFException.ORPHAN_SUBCONTAINER, ), id="eofcreate_1_orphan_subcontainer_0", ), pytest.param( Container( sections=[ Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP), abort_sub_container, Section.Container(Container.Code(Op.PUSH0 + Op.PUSH0 + Op.RETURN)), ], expected_bytecode=""" ef000101000402000100060300020000001400000016ff000000008000016000e0000000ef000101000402000100 01ff00000000800000feef00010100040200010003ff000000008000025f5ff3""", # Originally this test was "valid" because it was created # before "orphan subcontainer" rule was introduced. validity_error=EOFException.ORPHAN_SUBCONTAINER, ), id="two_orphan_subcontainers", ), pytest.param( Container( sections=[ Section.Code( Op.CALLDATASIZE + Op.PUSH1[0] + Op.PUSH1[255] + Op.PUSH1[0] + Op.EOFCREATE[255] + Op.POP + Op.STOP ) ] + 256 * [abort_sub_container], # Originally this test was "valid" because it was created # before "orphan subcontainer" rule was introduced. validity_error=EOFException.ORPHAN_SUBCONTAINER, ), id="eofcreate_255_max_orphan_subcontainers", ), pytest.param( Container( sections=[Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP)] + 256 * [abort_sub_container], # Originally this test was "valid" because it was created # before "orphan subcontainer" rule was introduced. validity_error=EOFException.ORPHAN_SUBCONTAINER, ), id="max_orphan_subcontainers", ), ], ) def test_migrated_eofcreate(eof_test: EOFTestFiller, container: Container) -> None: """Tests migrated from EOFTests/efValidation/EOF1_eofcreate_valid_.json.""" eof_test(container=container, expect_exception=container.validity_error) def test_dangling_initcode_subcontainer_bytes( eof_test: EOFTestFiller, ) -> None: """ Initcode mode EOF Subcontainer test with subcontainer containing dangling bytes. """ eof_test( container=Container( sections=[ returncode_code_section, Section.Container( container=Container( raw_bytes=stop_sub_container.data + b"\x99", ), ), ], kind=ContainerKind.INITCODE, ), expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE, ) def test_dangling_runtime_subcontainer_bytes( eof_test: EOFTestFiller, ) -> None: """ Runtime mode EOF Subcontainer test with subcontainer containing dangling bytes. """ eof_test( container=Container( sections=[ eofcreate_code_section, Section.Container( container=Container( raw_bytes=returncode_sub_container.data + b"\x99", ), ), ], ), expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7873_tx_create/__init__.py ================================================ """ Test cases for [EIP-7873: TXCREATE and InitcodeTransaction](https://eips.ethereum.org/EIPS/eip-7873). """ ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7873_tx_create/spec.py ================================================ """EOF V1 Constants used throughout all tests.""" TXCREATE_FAILURE = 0 ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7873_tx_create/test_creation_tx.py ================================================ """Test bad TXCREATE cases.""" import pytest from ethereum_test_base_types.base_types import Address, Bytes from ethereum_test_tools import ( Account, Alloc, Environment, StateTestFiller, Transaction, ) from ethereum_test_tools import Initcode as LegacyInitcode from ethereum_test_types import TransactionReceipt from ethereum_test_types.eof.v1 import Container from ....prague.eip7702_set_code_tx.spec import Spec from .. import EOF_FORK_NAME from ..eip7620_eof_create.helpers import ( smallest_initcode_subcontainer, smallest_runtime_subcontainer, ) REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7873.md" REFERENCE_SPEC_VERSION = "23d96ceff8f0690432ab91089ae257f08f32340f" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.with_all_contract_creating_tx_types(selector=lambda tx_type: tx_type != 6) @pytest.mark.parametrize( "deploy_code", [ Bytes("0xEF"), Bytes("0xEF00"), Bytes("0xEF0001"), Bytes("0xEF01"), smallest_runtime_subcontainer, smallest_initcode_subcontainer, ], ) def test_legacy_create_tx_legacy_initcode_eof_bytecode( state_test: StateTestFiller, pre: Alloc, tx_type: int, deploy_code: Bytes | Container, ) -> None: """ Test that a legacy contract creation tx cannot create EOF code. This tests only ensures EIP-3541 behavior is kept, not altered by EIP-7873 """ env = Environment() sender = pre.fund_eoa() initcode = LegacyInitcode(deploy_code=deploy_code) tx = Transaction( ty=tx_type, sender=sender, to=None, gas_limit=100000, data=initcode, ) destination_contract_address = tx.created_contract post = { destination_contract_address: Account.NONEXISTENT, } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.with_all_contract_creating_tx_types(selector=lambda tx_type: tx_type != 6) @pytest.mark.parametrize( "initcode", [ Bytes("0xEF"), Bytes("0xEF01"), Bytes("0xEF0101"), Spec.delegation_designation(Address(0xAA)), Bytes("0xEF02"), Bytes("0xEF00"), Bytes("0xEF0001"), smallest_runtime_subcontainer, smallest_initcode_subcontainer, ], ) def test_legacy_create_tx_prefix_initcode( state_test: StateTestFiller, pre: Alloc, tx_type: int, initcode: Bytes, ) -> None: """ Test that a legacy contract creation tx behaves as it did before EIP-7873 for initcode stating with `EF`. The transaction should be valid but fail on executing of the first byte `EF`. """ env = Environment() sender = pre.fund_eoa() gas_limit = 100_000 tx = Transaction( ty=tx_type, sender=sender, to=None, gas_limit=gas_limit, data=initcode, expected_receipt=TransactionReceipt(gas_used=gas_limit), ) destination_contract_address = tx.created_contract post = {destination_contract_address: Account.NONEXISTENT, sender: Account(nonce=1)} state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7873_tx_create/test_txcreate.py ================================================ """Test good TXCREATE cases.""" import pytest from ethereum_test_base_types import Storage from ethereum_test_base_types.base_types import Address from ethereum_test_tools import ( Account, Alloc, Environment, EVMCodeType, StateTestFiller, Transaction, compute_eofcreate_address, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..eip7069_extcall.spec import EXTCALL_SUCCESS, LEGACY_CALL_SUCCESS from ..eip7620_eof_create.helpers import ( slot_call_result, slot_calldata, slot_code_worked, slot_create_address, slot_data_load, slot_last_slot, slot_returndata_size, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_canary_to_be_overwritten, value_code_worked, value_long_value, ) from .spec import TXCREATE_FAILURE REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7873.md" REFERENCE_SPEC_VERSION = "1115fe6110fcc0efc823fb7f8f5cd86c42173efe" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize("tx_initcode_count", [1, 255, 256]) def test_simple_txcreate(state_test: StateTestFiller, pre: Alloc, tx_initcode_count: int) -> None: """Verifies a simple TXCREATE case.""" env = Environment() sender = pre.fund_eoa() initcode_hash = smallest_initcode_subcontainer.hash contract_address = pre.deploy_contract( code=Op.SSTORE(0, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.STOP, storage={0: 0xB17D}, # a canary to be overwritten ) # Storage in 0 should have the address, post = {contract_address: Account(storage={0: compute_eofcreate_address(contract_address, 0)})} tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[smallest_initcode_subcontainer] * tx_initcode_count, ) state_test(env=env, pre=pre, post=post, tx=tx) def test_txcreate_then_dataload( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies that a contract returned with auxdata does not overwrite the parent data. """ env = Environment() sender = pre.fund_eoa() small_auxdata_container = Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 32)), Section.Container(container=smallest_runtime_subcontainer), ], ) initcode_hash = small_auxdata_container.hash contract_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.SSTORE(0, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_data_load, Op.DATALOAD(0)) + Op.STOP, ), Section.Data(data=value_long_value), ], ), storage={slot_data_load: value_canary_to_be_overwritten}, ) post = { contract_address: Account( storage={ 0: compute_eofcreate_address(contract_address, 0), slot_data_load: value_long_value, } ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[small_auxdata_container], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_txcreate_then_call( state_test: StateTestFiller, pre: Alloc, evm_code_type: EVMCodeType, ) -> None: """ Verifies a simple TXCREATE case, and then calls the deployed contract. """ env = Environment() callable_contract = Container( sections=[ Section.Code( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), ] ) callable_contract_initcode = Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=callable_contract), ] ) initcode_hash = callable_contract_initcode.hash sender = pre.fund_eoa() opcode = Op.EXTCALL if evm_code_type == EVMCodeType.EOF_V1 else Op.CALL contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + opcode(address=Op.SLOAD(slot_create_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) callable_address = compute_eofcreate_address(contract_address, 0) # Storage in 0 should have the address, # post = { contract_address: Account( storage={slot_create_address: callable_address, slot_code_worked: value_code_worked} ), callable_address: Account(storage={slot_code_worked: value_code_worked}), } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[callable_contract_initcode], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "auxdata_bytes", [ pytest.param(b"", id="zero"), pytest.param(b"aabbcc", id="short"), pytest.param(b"aabbccddeef", id="one_byte_short"), pytest.param(b"aabbccddeeff", id="exact"), pytest.param(b"aabbccddeeffg", id="one_byte_long"), pytest.param(b"aabbccddeeffgghhii", id="extra"), ], ) def test_auxdata_variations( state_test: StateTestFiller, pre: Alloc, auxdata_bytes: bytes, ) -> None: """Verifies that auxdata bytes are correctly handled in RETURNCODE.""" env = Environment() auxdata_size = len(auxdata_bytes) pre_deploy_header_data_size = 18 pre_deploy_data = b"AABBCC" deploy_success = len(auxdata_bytes) + len(pre_deploy_data) >= pre_deploy_header_data_size runtime_subcontainer = Container( name="Runtime Subcontainer with truncated data", sections=[ Section.Code(code=Op.STOP), Section.Data(data=pre_deploy_data, custom_size=pre_deploy_header_data_size), ], ) initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.MSTORE(0, Op.PUSH32(auxdata_bytes.ljust(32, b"\0"))) + Op.RETURNCODE[0](0, auxdata_size), ), Section.Container(container=runtime_subcontainer), ], ) initcode_hash = initcode_subcontainer.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.STOP, storage={slot_create_address: value_canary_to_be_overwritten}, ) # Storage in 0 should have the address, post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if deploy_success else b"\0" } ) } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_calldata(state_test: StateTestFiller, pre: Alloc) -> None: """Verifies CALLDATA passing through TXCREATE.""" env = Environment() initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(slot_calldata, Op.MLOAD(0)) + Op.RETURNCODE[0](0, Op.CALLDATASIZE), ), Section.Container(container=smallest_runtime_subcontainer), ], ) initcode_hash = initcode_subcontainer.hash calldata_size = 32 calldata = b"\x45" * calldata_size sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.MSTORE(0, Op.PUSH32(calldata)) + Op.SSTORE( slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash, input_size=calldata_size), ) + Op.STOP, ) # deployed contract is smallest plus data deployed_contract = Container( name="deployed contract", sections=[ *smallest_runtime_subcontainer.sections, Section.Data(data=calldata), ], ) # factory contract Storage in 0 should have the created address, # created contract storage in 0 should have the calldata created_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account(storage={slot_create_address: created_address}), created_address: Account(code=deployed_contract, storage={slot_calldata: calldata}), } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.parametrize("outer_create_opcode", [Op.TXCREATE, Op.EOFCREATE]) @pytest.mark.parametrize("inner_create_opcode", [Op.TXCREATE, Op.EOFCREATE]) @pytest.mark.parametrize("outer_create_reverts", [True, False]) def test_txcreate_in_initcode( state_test: StateTestFiller, pre: Alloc, outer_create_opcode: Op, inner_create_opcode: Op, outer_create_reverts: bool, ) -> None: """ Verifies an TXCREATE occurring within initcode creates that contract. Via the `outer_create_reverts` also verifies a TXCREATE occurring in an initcode is rolled back when the initcode reverts. """ smallest_initcode_subcontainer_hash = smallest_initcode_subcontainer.hash inner_create_bytecode = ( Op.TXCREATE(tx_initcode_hash=smallest_initcode_subcontainer_hash) if inner_create_opcode == Op.TXCREATE else Op.EOFCREATE[1](0, 0, 0, 0) ) # The terminating code of the inner initcontainer, the RJUMPI is a trick to # not need to deal with the subcontainer indices revert_code = Op.REVERT(0, 0) terminating_code = ( Op.RJUMPI[len(revert_code)](0) + revert_code + Op.RETURNCODE[0](0, 0) if outer_create_reverts else Op.RETURNCODE[0](0, 0) ) nested_initcode_subcontainer = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, inner_create_bytecode) + Op.SSTORE(slot_code_worked, value_code_worked) + terminating_code, ), Section.Container(container=smallest_runtime_subcontainer), ] + ( [Section.Container(container=smallest_initcode_subcontainer)] if inner_create_opcode == Op.EOFCREATE else [] ) ) nested_initcode_subcontainer_hash = nested_initcode_subcontainer.hash outer_create_bytecode = ( Op.TXCREATE(tx_initcode_hash=nested_initcode_subcontainer_hash) if outer_create_opcode == Op.TXCREATE else Op.EOFCREATE[0](0, 0, 0, 0) ) env = Environment() sender = pre.fund_eoa() contract_code = Container( sections=[ Section.Code( code=Op.SSTORE(slot_create_address, outer_create_bytecode) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ), ] + ( [Section.Container(container=nested_initcode_subcontainer)] if outer_create_opcode == Op.EOFCREATE else [] ) ) contract_address = pre.deploy_contract(code=contract_code) outer_address = compute_eofcreate_address(contract_address, 0) inner_address = compute_eofcreate_address(outer_address, 0) post = { contract_address: Account( storage={ slot_create_address: outer_address if not outer_create_reverts else 0, slot_code_worked: value_code_worked, } ), outer_address: Account( storage={slot_create_address: inner_address, slot_code_worked: value_code_worked} ) if not outer_create_reverts else Account.NONEXISTENT, inner_address: Account() if not outer_create_reverts else Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[nested_initcode_subcontainer, smallest_initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_return_data_cleared( state_test: StateTestFiller, pre: Alloc, evm_code_type: EVMCodeType, ) -> None: """ Verifies the return data is not reused from a extcall but is cleared upon TXCREATE. """ env = Environment() value_return_canary = 0x4158675309 value_return_canary_size = 5 callable_address = pre.deploy_contract( code=Container( sections=[ Section.Code( code=Op.MSTORE(0, value_return_canary) + Op.RETURN(0, value_return_canary_size), ) ] ) ) initcode_hash = smallest_initcode_subcontainer.hash slot_returndata_size_2 = slot_last_slot * 2 + slot_returndata_size sender = pre.fund_eoa() opcode = Op.EXTCALL if evm_code_type == EVMCodeType.EOF_V1 else Op.CALL contract_address = pre.deploy_contract( code=Op.SSTORE(slot_call_result, opcode(address=callable_address)) + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE) + Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_returndata_size_2, Op.RETURNDATASIZE) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) new_contract_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account( storage={ slot_call_result: EXTCALL_SUCCESS if evm_code_type == EVMCodeType.EOF_V1 else LEGACY_CALL_SUCCESS, slot_returndata_size: value_return_canary_size, slot_create_address: new_contract_address, slot_returndata_size_2: 0, slot_code_worked: value_code_worked, }, nonce=2, ), callable_address: Account(nonce=1), new_contract_address: Account(nonce=1), } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[smallest_initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_address_collision( state_test: StateTestFiller, pre: Alloc, ) -> None: """Tests address collision.""" env = Environment( gas_limit=300_000_000_000, ) slot_create_address_2 = slot_last_slot * 2 + slot_create_address slot_create_address_3 = slot_last_slot * 3 + slot_create_address sender = pre.fund_eoa() initcode_hash = smallest_initcode_subcontainer.hash contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_create_address_2, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_create_address_3, Op.TXCREATE(tx_initcode_hash=initcode_hash, salt=1)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) salt_zero_address = compute_eofcreate_address(contract_address, 0) salt_one_address = compute_eofcreate_address(contract_address, 1) # Hard-code address for collision, no other way to do this. # We should mark tests that do this, and fail on unmarked tests. pre[salt_one_address] = Account(balance=1, nonce=1) post = { contract_address: Account( storage={ slot_create_address: salt_zero_address, # had an in-transaction collision slot_create_address_2: TXCREATE_FAILURE, # had a pre-existing collision slot_create_address_3: TXCREATE_FAILURE, slot_code_worked: value_code_worked, } ) } # Multiple create fails is expensive, use an absurd amount of gas tx = Transaction( to=contract_address, gas_limit=300_000_000_000, sender=sender, initcodes=[smallest_initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_txcreate_revert_eof_returndata( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies the return data is not being deployed, even if happens to be valid EOF. """ env = Environment() code_reverts_with_calldata = Container( name="Initcode Subcontainer reverting with its calldata", sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.REVERT(0, Op.CALLDATASIZE), ), ], ) initcode_hash = code_reverts_with_calldata.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash, input_size=Op.CALLDATASIZE), ) + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE) + Op.STOP, storage={slot_create_address: value_canary_to_be_overwritten}, ) new_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account( storage={ slot_create_address: 0, slot_returndata_size: len(smallest_runtime_subcontainer), }, ), new_address: Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=1_000_000, sender=sender, initcodes=[code_reverts_with_calldata], # Simplest possible valid EOF container, which is going to be # revert-returned from initcode and must not end up being deployed. data=smallest_runtime_subcontainer, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( ["destination_code", "expected_result"], [ pytest.param(Op.ADDRESS, "destination"), pytest.param(Op.CALLER, "caller"), pytest.param(Op.CALLVALUE, "eofcreate_value"), pytest.param(Op.ORIGIN, "sender"), pytest.param(Op.SELFBALANCE, "selfbalance"), pytest.param(Op.BALANCE(Op.CALLER), "factorybalance"), ], ) def test_txcreate_context( state_test: StateTestFiller, pre: Alloc, destination_code: Bytecode, expected_result: str, ) -> None: """Test TXCREATE's initcode context instructions.""" env = Environment() sender = pre.fund_eoa() value = 0x1123 txcreate_value = 0x13 initcode = Container( sections=[ Section.Code(Op.SSTORE(slot_call_result, destination_code) + Op.RETURNCODE[0](0, 0)), Section.Container(smallest_runtime_subcontainer), ] ) initcode_hash = initcode.hash factory_address = pre.deploy_contract( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.TXCREATE(tx_initcode_hash=initcode_hash, value=txcreate_value) + Op.STOP ) destination_contract_address = compute_eofcreate_address(factory_address, 0) tx = Transaction( sender=sender, to=factory_address, gas_limit=200_000, value=value, initcodes=[initcode], ) expected_bytes: Address | int if expected_result == "destination": expected_bytes = destination_contract_address elif expected_result == "caller": expected_bytes = factory_address elif expected_result == "sender": expected_bytes = sender elif expected_result == "eofcreate_value": expected_bytes = txcreate_value elif expected_result == "selfbalance": expected_bytes = txcreate_value elif expected_result == "factorybalance": # Factory receives value from sender and passes on eofcreate_value as # endowment. expected_bytes = value - txcreate_value else: raise TypeError("Unexpected expected_result", expected_result) calling_storage = { slot_code_worked: value_code_worked, } destination_contract_storage = { slot_call_result: expected_bytes, } post = { factory_address: Account(storage=calling_storage, balance=value - txcreate_value), destination_contract_address: Account( storage=destination_contract_storage, balance=txcreate_value ), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.with_all_evm_code_types def test_txcreate_memory_context( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies an TXCREATE frame enjoys a separate EVM memory from its caller frame. """ env = Environment() destination_storage = Storage() contract_storage = Storage() initcontainer = Container( sections=[ Section.Code( Op.SSTORE(destination_storage.store_next(value_code_worked), value_code_worked) + Op.SSTORE(destination_storage.store_next(0), Op.MSIZE()) + Op.SSTORE(destination_storage.store_next(0), Op.MLOAD(0)) + Op.MSTORE(0, 2) + Op.MSTORE(32, 2) + Op.RETURNCODE[0](0, 0) ), Section.Container(smallest_runtime_subcontainer), ] ) initcode_hash = initcontainer.hash contract_address = pre.deploy_contract( code=Op.SSTORE(contract_storage.store_next(value_code_worked), value_code_worked) + Op.MSTORE(0, 1) + Op.TXCREATE(tx_initcode_hash=initcode_hash) + Op.SSTORE(contract_storage.store_next(32), Op.MSIZE()) + Op.SSTORE(contract_storage.store_next(1), Op.MLOAD(0)) + Op.SSTORE(contract_storage.store_next(0), Op.MLOAD(32)) + Op.STOP, ) destination_contract_address = compute_eofcreate_address(contract_address, 0) post = { contract_address: Account(storage=contract_storage), destination_contract_address: Account(storage=destination_storage), } tx = Transaction( to=contract_address, gas_limit=200_000, sender=pre.fund_eoa(), initcodes=[initcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_short_data_subcontainer( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Deploy a subcontainer where the data is "short" and filled by deployment code. """ env = Environment() sender = pre.fund_eoa() deploy_container = Container( sections=[ Section.Code(Op.STOP), Section.Data(data="001122", custom_size=4), ] ) initcontainer = Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 5)), Section.Container(deploy_container), ], ) initcode_hash = initcontainer.hash contract_address = pre.deploy_contract( code=Op.SSTORE(0, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.STOP, storage={0: 0xB17D}, # a canary to be overwritten ) # Storage in 0 should have the address, destination_address = compute_eofcreate_address(contract_address, 0) destination_code = deploy_container.copy() destination_code.sections[1] = Section.Data(data="0011220000000000") post = { contract_address: Account(storage={0: compute_eofcreate_address(contract_address, 0)}), destination_address: Account(code=destination_code), } tx = Transaction( to=contract_address, gas_limit=100_000, sender=sender, initcodes=[initcontainer], ) state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7873_tx_create/test_txcreate_failures.py ================================================ """Test bad TXCREATE cases.""" import pytest from ethereum_test_base_types import Bytes from ethereum_test_base_types.base_types import Address, Hash from ethereum_test_forks import Fork from ethereum_test_tools import ( Account, Alloc, Environment, EVMCodeType, StateTestFiller, Transaction, compute_eofcreate_address, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_types.eof.v1.constants import MAX_BYTECODE_SIZE, MAX_INITCODE_SIZE from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from .. import EOF_FORK_NAME from ..eip7069_extcall.spec import EXTCALL_FAILURE, EXTCALL_REVERT, LEGACY_CALL_FAILURE from ..eip7620_eof_create.helpers import ( aborting_container, slot_call_or_create, slot_call_result, slot_code_should_fail, slot_code_worked, slot_counter, slot_create_address, slot_max_depth, slot_returndata, slot_returndata_size, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_canary_should_not_change, value_canary_to_be_overwritten, value_code_worked, ) from .spec import TXCREATE_FAILURE REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7873.md" REFERENCE_SPEC_VERSION = "1115fe6110fcc0efc823fb7f8f5cd86c42173efe" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "revert", [ pytest.param(b"", id="empty"), pytest.param(b"\x08\xc3\x79\xa0", id="Error(string)"), ], ) def test_initcode_revert(state_test: StateTestFiller, pre: Alloc, revert: bytes) -> None: """Verifies proper handling of REVERT in initcode.""" env = Environment() revert_size = len(revert) initcode_subcontainer = Container( name="Initcode Subcontainer that reverts", sections=[ Section.Code( code=Op.MSTORE(0, Op.PUSH32(revert)) + Op.REVERT(32 - revert_size, revert_size), ), ], ) initcode_hash = initcode_subcontainer.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE) + Op.RETURNDATACOPY(Op.SUB(32, Op.RETURNDATASIZE), 0, Op.RETURNDATASIZE) + Op.SSTORE(slot_returndata, Op.MLOAD(0)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) post = { contract_address: Account( storage={ slot_create_address: TXCREATE_FAILURE, slot_returndata_size: revert_size, slot_returndata: revert, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "initcode_hash", [ Bytes("").keccak256(), Bytes("00" * 32), Bytes("FF" * 32), Bytes("EF01").keccak256(), smallest_runtime_subcontainer.hash, ], ) @pytest.mark.parametrize("tx_initcode_count", [1, 255, 256]) def test_txcreate_invalid_hash( state_test: StateTestFiller, pre: Alloc, tx_initcode_count: int, initcode_hash: Hash ) -> None: """Verifies proper handling of REVERT in initcode.""" env = Environment() sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) post = { contract_address: Account( storage={ slot_create_address: TXCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[smallest_initcode_subcontainer] * tx_initcode_count, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_initcode_aborts(state_test: StateTestFiller, pre: Alloc) -> None: """Verifies correct handling of a halt in EOF initcode.""" env = Environment() sender = pre.fund_eoa() initcode_hash = aborting_container.hash contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) # Storage in slot_create_address should not have the address, post = { contract_address: Account( storage={ slot_create_address: TXCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[aborting_container], ) state_test(env=env, pre=pre, post=post, tx=tx) """ Size of the initcode portion of test_txcreate_deploy_sizes, but as the runtime code is dynamic, we have to use a pre-calculated size """ initcode_size = 32 @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "target_deploy_size", [ pytest.param(0x4000, id="large"), pytest.param(MAX_BYTECODE_SIZE, id="max"), pytest.param(MAX_BYTECODE_SIZE + 1, id="overmax"), pytest.param(MAX_INITCODE_SIZE - initcode_size - 1, id="below_initcodemax"), pytest.param(MAX_INITCODE_SIZE - initcode_size, id="initcodemax"), ], ) def test_txcreate_deploy_sizes( state_test: StateTestFiller, pre: Alloc, target_deploy_size: int, ) -> None: """ Verify a mix of runtime contract sizes. This mixes success and multiple size failure modes. """ env = Environment() runtime_container = Container( sections=[ Section.Code( code=Op.JUMPDEST * (target_deploy_size - len(smallest_runtime_subcontainer)) + Op.STOP, ), ] ) initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=runtime_container), ], ) assert initcode_size == len(initcode_subcontainer) - len(runtime_container) assert initcode_size == (len(initcode_subcontainer) - len(runtime_container)), ( "initcode_size is wrong, expected initcode_size is %d, calculated is %d" % ( initcode_size, len(initcode_subcontainer) - len(runtime_container), ) ) initcode_hash = initcode_subcontainer.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) # Storage in 0 should have the address, Storage 1 is a canary of 1 to make # sure it tried to execute, which also covers cases of data+code being # greater than initcode_size_max, which is allowed. success = target_deploy_size <= MAX_BYTECODE_SIZE post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if success else TXCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account() if success else Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=20_000_000, sender=sender, initcodes=[initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "auxdata_size", [ pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer), id="maxcode"), pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer) + 1, id="overmaxcode"), pytest.param(0x10000 - 60, id="almost64k"), pytest.param(0x10000 - 1, id="64k-1"), pytest.param(0x10000, id="64k"), pytest.param(0x10000 + 1, id="over64k"), ], ) def test_auxdata_size_failures(state_test: StateTestFiller, pre: Alloc, auxdata_size: int) -> None: """ Exercises a number of auxdata size violations, and one maxcode success. """ env = Environment() auxdata_bytes = b"a" * auxdata_size initcode_subcontainer = Container( name="Initcode Subcontainer", sections=[ Section.Code( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.RETURNCODE[0](0, Op.CALLDATASIZE), ), Section.Container(container=smallest_runtime_subcontainer), ], ) sender = pre.fund_eoa() initcode_hash = initcode_subcontainer.hash contract_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE( slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash, input_size=Op.CALLDATASIZE), ) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, ) deployed_container_size = len(smallest_runtime_subcontainer) + auxdata_size # Storage in 0 will have address in first test, 0 in all other cases # indicating failure # # Storage 1 in 1 is a canary to see if TXCREATE opcode halted success = deployed_container_size <= MAX_BYTECODE_SIZE post = { contract_address: Account( storage={ slot_create_address: compute_eofcreate_address(contract_address, 0) if deployed_container_size <= MAX_BYTECODE_SIZE else 0, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account() if success else Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=20_000_000, sender=sender, initcodes=[initcode_subcontainer], data=auxdata_bytes, ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "value", [ pytest.param(1, id="1_wei"), pytest.param(10**9, id="1_gwei"), ], ) def test_txcreate_insufficient_stipend( state_test: StateTestFiller, pre: Alloc, value: int, ) -> None: """ Exercises an TXCREATE that fails because the calling account does not have enough ether to pay the stipend. """ env = Environment() sender = pre.fund_eoa(10**11) initcode_hash = smallest_initcode_subcontainer.hash contract_address = pre.deploy_contract( code=Op.SSTORE( slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash, value=value) ) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP, balance=value - 1, ) # create will fail but not trigger a halt, so canary at storage 1 # should be set # # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: TXCREATE_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=20_000_000, sender=sender, initcodes=[smallest_initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_insufficient_initcode_gas(state_test: StateTestFiller, pre: Alloc, fork: Fork) -> None: """ Exercises an TXCREATE when there is not enough gas for the constant charge. """ env = Environment() initcode_container = Container( sections=[ Section.Code( code=Op.RETURNCODE[0](0, 0), ), Section.Container(container=smallest_runtime_subcontainer), ], ) initcode_hash = initcode_container.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash)) + Op.SSTORE(slot_code_should_fail, value_code_worked) + Op.STOP, storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ) # enough gas for everything but EVM opcodes and EIP-150 reserves # FIXME: should not use that calculator!!! # FIXME: the -1000 is a wild guess - revisit this gas_limit = ( 32_000 - 1_000 + fork.transaction_intrinsic_cost_calculator()(calldata=initcode_container) ) # out_of_gas is triggered, so canary won't set value # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=gas_limit, sender=sender, initcodes=[initcode_container], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_insufficient_gas_memory_expansion( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Exercises TXCREATE when the memory for auxdata has not been expanded but is requested. """ env = Environment() auxdata_size = 0x5000 initcode_hash = smallest_initcode_subcontainer.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE( slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash, input_size=auxdata_size), ) + Op.SSTORE(slot_code_should_fail, slot_code_worked) + Op.STOP, storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ) # enough gas for everything but EVM opcodes and EIP-150 reserves auxdata_size_words = (auxdata_size + 31) // 32 gas_limit = ( 32_000 + 3 * auxdata_size_words + auxdata_size_words * auxdata_size_words // 512 + fork.transaction_intrinsic_cost_calculator()(calldata=smallest_initcode_subcontainer) ) # out_of_gas is triggered, so canary won't set value # also validate target created contract fails post = { contract_address: Account( storage={ slot_create_address: value_canary_should_not_change, slot_code_should_fail: value_canary_should_not_change, }, ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=gas_limit, sender=sender, initcodes=[smallest_initcode_subcontainer], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types def test_insufficient_returncode_auxdata_gas( state_test: StateTestFiller, pre: Alloc, fork: Fork, ) -> None: """ Exercises a RETURNCODE when there is not enough gas for the initcode charge. """ env = Environment() auxdata_size = 0x5000 initcode_container = Container( name="Large Initcode Subcontainer", sections=[ Section.Code( code=Op.RETURNCODE[0](0, auxdata_size), ), Section.Container(container=smallest_runtime_subcontainer), ], ) initcode_hash = initcode_container.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.TXCREATE(tx_initcode_hash=initcode_hash) + Op.STOP, storage={ slot_code_worked: value_canary_to_be_overwritten, }, ) # 63/64ths is not enough to cover RETURNCODE memory expansion. # Unfortunately the 1/64th left won't realistically accommodate a SSTORE auxdata_size_words = (auxdata_size + 31) // 32 gas_limit = ( 32_000 + 2600 # SSTORE + 3 * auxdata_size_words + auxdata_size_words * auxdata_size_words // 512 + fork.transaction_intrinsic_cost_calculator()(calldata=initcode_container) ) # out_of_gas is triggered in the initcode context, so canary will set value # also validate target created contract fails post = { contract_address: Account( storage={ slot_code_worked: value_code_worked, }, ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=contract_address, gas_limit=gas_limit, sender=sender, initcodes=[initcode_container], ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "opcode", [ Op.STATICCALL, Op.EXTSTATICCALL, ], ) @pytest.mark.parametrize("endowment", [0, 1]) # included to verify static flag # check comes first @pytest.mark.parametrize( "initcode", [smallest_initcode_subcontainer, aborting_container], ids=["working_initcode", "aborting_code"], ) def test_static_flag_txcreate( state_test: StateTestFiller, pre: Alloc, opcode: Op, endowment: int, initcode: Container, ) -> None: """Verifies correct handling of the static call flag with TXCREATE.""" env = Environment() initcode_hash = initcode.hash sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=Op.TXCREATE(tx_initcode_hash=initcode_hash, value=endowment) + Op.STOP, ) calling_code = ( Op.SSTORE(slot_call_result, opcode(address=contract_address)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) calling_address = pre.deploy_contract( calling_code, # Need to override the global value from the `with_all_evm_code_types` # marker. evm_code_type=EVMCodeType.EOF_V1 if opcode == Op.EXTSTATICCALL else EVMCodeType.LEGACY, ) post = { calling_address: Account( storage={ slot_call_result: EXTCALL_FAILURE if opcode == Op.EXTSTATICCALL else LEGACY_CALL_FAILURE, slot_code_worked: value_code_worked, } ), compute_eofcreate_address(contract_address, 0): Account.NONEXISTENT, } tx = Transaction( to=calling_address, gas_limit=10_000_000, sender=sender, initcodes=[initcode], ) state_test(env=env, pre=pre, post=post, tx=tx) magic_value_call = 0xCA11 magic_value_create = 0xCC12EA7E @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "who_fails", [magic_value_call, magic_value_create], ids=["call_fails", "create_fails"], ) @pytest.mark.pre_alloc_modify def test_eof_txcreate_msg_depth( state_test: StateTestFiller, pre: Alloc, who_fails: int, evm_code_type: EVMCodeType, ) -> None: """ Test TXCREATE handles msg depth limit correctly (1024). NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet. NOTE: See `tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py:: test_eof_calls_msg_depth` for more explanations and comments. Most notable deviation from that test is that here calls and `TXCREATE`s alternate in order to reach the max depth. `who_fails` decides whether the failing depth 1024 will be on a call or on an `TXCREATE` to happen. """ # Not a precise gas_limit formula, but enough to exclude risk of gas # causing the failure. gas_limit = int(20000000 * (64 / 63) ** 1024) env = Environment(gas_limit=gas_limit) callee_address = Address(0x5000) # Memory offsets layout: # - 0 - input - msg depth # - 32 - output - msg depth # - 64 - output - call result # - 96 - output - magic value: create or call returndatacopy_block = Op.RETURNDATACOPY(32, 0, 96) + Op.REVERT(32, 96) deep_most_result_block = ( Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.REVERT(32, 96) ) rjump_offset = len(returndatacopy_block) initcode = Container.Code( Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(96, magic_value_call) + Op.EXTCALL(address=callee_address, args_size=32) + Op.RETURNDATASIZE + Op.ISZERO + Op.RJUMPI[rjump_offset] + returndatacopy_block + deep_most_result_block ) initcode_hash = initcode.hash sender = pre.fund_eoa() jump_code = ( Op.RJUMPI[rjump_offset] if evm_code_type == EVMCodeType.EOF_V1 else Op.ADD(Op.PC, rjump_offset + 3) + Op.JUMPI ) callee_code = ( Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(96, magic_value_create) + Op.TXCREATE(tx_initcode_hash=initcode_hash, salt=Op.CALLDATALOAD(0), input_size=32) + Op.RETURNDATASIZE + Op.ISZERO + jump_code + returndatacopy_block + Op.JUMPDEST + deep_most_result_block ) pre.deploy_contract(callee_code, address=callee_address) calling_contract_address = pre.deploy_contract( Container.Code( Op.MSTORE(0, Op.CALLDATALOAD(0)) + Op.EXTCALL(address=callee_address, args_size=32) + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0)) + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32)) + Op.SSTORE(slot_call_or_create, Op.RETURNDATALOAD(64)) + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP ) ) # Only bumps the msg call depth "register" and forwards to the # `calling_contract_address`. If it is used it makes the "failing" depth of # 1024 to happen on TXCREATE, instead of CALL. passthrough_address = pre.deploy_contract( Container.Code( Op.MSTORE(0, 1) + Op.EXTCALL(address=calling_contract_address, args_size=32) + Op.STOP ) ) tx = Transaction( sender=sender, initcodes=[initcode], to=calling_contract_address if who_fails == magic_value_call else passthrough_address, gas_limit=gas_limit, data="", ) calling_storage = { slot_max_depth: 1024, slot_code_worked: value_code_worked, slot_call_result: EXTCALL_REVERT if who_fails == magic_value_call else TXCREATE_FAILURE, slot_call_or_create: who_fails, } post = { calling_contract_address: Account(storage=calling_storage), } state_test( env=env, pre=pre, post=post, tx=tx, ) @pytest.mark.with_all_evm_code_types def test_reentrant_txcreate( state_test: StateTestFiller, pre: Alloc, ) -> None: """ Verifies a reentrant TXCREATE case, where EIP-161 prevents conflict via nonce bump. """ env = Environment() # Calls into the factory contract with 1 as input. reenter_code = Op.MSTORE(0, 1) + Op.EXTCALL(address=Op.CALLDATALOAD(32), args_size=32) # Initcode: if given 0 as 1st word of input will call into the factory # again. 2nd word of input is the address of the factory. initcontainer = Container( sections=[ Section.Code( Op.SSTORE(slot_counter, Op.ADD(Op.SLOAD(slot_counter), 1)) + Op.CALLDATALOAD(0) + Op.RJUMPI[len(reenter_code)] + reenter_code + Op.RETURNCODE[0](0, 0) ), Section.Container(smallest_runtime_subcontainer), ] ) initcode_hash = initcontainer.hash # Factory: # Passes on its input into the initcode. # It's 0 first time, 1 the second time. # Saves the result of deployment in slot 0 first time, 1 the second time. contract_address = pre.deploy_contract( code=Op.CALLDATACOPY(0, 0, 32) + Op.MSTORE(32, Op.ADDRESS) # 1st word - copied from input (reenter flag) # 2nd word - `this.address` + Op.SSTORE( Op.CALLDATALOAD(0), Op.TXCREATE(tx_initcode_hash=initcode_hash, input_size=64), ) + Op.STOP, storage={0: 0xB17D, 1: 0xB17D}, # a canary to be overwritten ) # Flow is: reenter flag 0 -> factory -> reenter flag 0 -> initcode # -> reenter -> reenter flag 1 -> factory -> reenter flag 1 # -> (!) initcode -> stop, # if the EIP-161 nonce bump is not implemented. If it is, it fails before # second initcode marked (!). # Storage in 0 should have the address from the outer TXCREATE. # Storage in 1 should have 0 from the inner TXCREATE. # For the created contract storage in `slot_counter` should be 1 as # initcode executes only once post = { contract_address: Account( storage={ 0: compute_eofcreate_address(contract_address, 0), 1: 0, } ), compute_eofcreate_address(contract_address, 0): Account( nonce=1, code=smallest_runtime_subcontainer, storage={slot_counter: 1} ), } tx = Transaction( to=contract_address, gas_limit=500_000, initcodes=[initcontainer], sender=pre.fund_eoa(), ) state_test(env=env, pre=pre, post=post, tx=tx) @pytest.mark.with_all_evm_code_types @pytest.mark.parametrize( "reason", [ "valid", "invalid_deploy_container", "invalid_initcode", "invalid_opcode_during_initcode", "invalid_opcode_with_sstore_during_initcode", "revert_opcode_during_initcode", "out_of_gas_during_initcode", "out_of_gas_when_returning_contract", "out_of_gas_when_returning_contract_due_to_memory_expansion", ], ) def test_invalid_container_deployment( state_test: StateTestFiller, fork: Fork, pre: Alloc, reason: str, ) -> None: """ Verify contract is not deployed when an invalid container deployment is attempted. """ env = Environment() sender = pre.fund_eoa() # Valid defaults deployed_container = Container( sections=[ Section.Code(code=Op.CALLF[1](Op.PUSH0, Op.PUSH0) + Op.STOP), Section.Code(code=Op.ADD + Op.RETF, code_inputs=2, code_outputs=1), ] ) initcontainer: Container = Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0)), Section.Container(deployed_container), ], ) tx_gas_limit = 100_000 fork_intrinsic_gas_calculator = fork.transaction_intrinsic_cost_calculator() fork_gas_costs = fork.gas_costs() # Modify defaults based on invalidity reason if reason == "invalid_deploy_container": deployed_container = Container( sections=[ Section.Code(code=Op.CALLF[1](Op.PUSH0, Op.PUSH0) + Op.STOP), Section.Code(code=Op.ADD + Op.RETF, code_outputs=0), ] ) initcontainer = Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0, 0)), Section.Container(deployed_container), ], ) elif reason == "invalid_initcode": initcontainer = Container( sections=[ Section.Code(code=Op.RETURNCODE[1](0, 0)), Section.Container(deployed_container), ], ) elif ( reason == "invalid_opcode_during_initcode" or reason == "invalid_opcode_with_sstore_during_initcode" or reason == "revert_opcode_during_initcode" or reason == "out_of_gas_during_initcode" ): invalid_code_path: Bytecode if reason == "invalid_opcode_with_sstore_during_initcode": invalid_code_path = Op.SSTORE(0, 1) + Op.INVALID elif reason == "revert_opcode_during_initcode": invalid_code_path = Op.REVERT(0, 0) elif reason == "out_of_gas_during_initcode": invalid_code_path = Op.MSTORE(0xFFFFFFFFFFFFFFFFFFFFFFFFFFF, 1) elif reason == "invalid_opcode_during_initcode": invalid_code_path = Op.INVALID else: raise Exception(f"invalid case: {reason}") initcontainer = Container( sections=[ Section.Code( code=Op.RJUMPI[len(invalid_code_path)](Op.PUSH0) + invalid_code_path + Op.RETURNCODE[0](0, 0) ), Section.Container(deployed_container), ], ) elif reason == "out_of_gas_when_returning_contract": factory_gas_cost = ( 7 * fork_gas_costs.G_VERY_LOW + fork_gas_costs.G_STORAGE_SET + fork_gas_costs.G_COLD_SLOAD + fork_gas_costs.G_CREATE ) initcode_gas_cost = 2 * fork_gas_costs.G_VERY_LOW tx_gas_limit = ( fork_intrinsic_gas_calculator(calldata=initcontainer) + factory_gas_cost + (initcode_gas_cost - 1) * 64 // 63 ) elif reason == "out_of_gas_when_returning_contract_due_to_memory_expansion": factory_gas_cost = ( 7 * fork_gas_costs.G_VERY_LOW + fork_gas_costs.G_STORAGE_SET + fork_gas_costs.G_COLD_SLOAD + fork_gas_costs.G_CREATE ) initcode_gas_cost = ( # Code deposit gas cost len(deployed_container) * fork_gas_costs.G_CODE_DEPOSIT_BYTE # Two push opcodes + 2 * fork_gas_costs.G_VERY_LOW ) tx_gas_limit = ( fork_intrinsic_gas_calculator(calldata=initcontainer) + factory_gas_cost + initcode_gas_cost * 64 // 63 ) initcontainer = Container( sections=[ Section.Code(code=Op.RETURNCODE[0](0xFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x1)), Section.Container(deployed_container), ], ) elif reason == "valid": pass else: raise TypeError("Unexpected reason", reason) initcode_hash = initcontainer.hash contract_address = pre.deploy_contract( code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.TXCREATE(tx_initcode_hash=initcode_hash) + Op.STOP ) tx = Transaction( to=contract_address, sender=sender, gas_limit=tx_gas_limit, initcodes=[initcontainer], ) destination_contract_address = compute_eofcreate_address(contract_address, 0) post = ( { destination_contract_address: Account.NONEXISTENT, contract_address: Account( nonce=1 if reason in ["invalid_initcode", "invalid_deploy_container"] else 2, storage={ slot_code_worked: value_code_worked, }, ), } if reason != "valid" else { destination_contract_address: Account(nonce=1, code=deployed_container), contract_address: Account( nonce=2, storage={ slot_code_worked: value_code_worked, }, ), } ) state_test( env=env, pre=pre, post=post, tx=tx, ) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eip7873_tx_create/test_txcreate_validates.py ================================================ """Test bad TXCREATE cases.""" from enum import Enum, auto, unique from typing import Tuple import pytest from ethereum_test_base_types import Bytes from ethereum_test_base_types.base_types import Address, Hash from ethereum_test_base_types.composite_types import AccessList from ethereum_test_tools import ( Account, Alloc, Environment, EVMCodeType, StateTestFiller, Transaction, compute_eofcreate_address, ) from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Bytecode from ethereum_test_vm import Opcodes as Op from ....prague.eip7702_set_code_tx.spec import Spec from .. import EOF_FORK_NAME from ..eip7620_eof_create.helpers import ( slot_a, slot_b, slot_code_worked, smallest_initcode_subcontainer, smallest_runtime_subcontainer, value_code_worked, ) from .spec import TXCREATE_FAILURE REFERENCE_SPEC_GIT_PATH = "EIPS/eip-7873.md" REFERENCE_SPEC_VERSION = "1115fe6110fcc0efc823fb7f8f5cd86c42173efe" pytestmark = pytest.mark.valid_from(EOF_FORK_NAME) @unique class ValidatedCode(Enum): """Kinds of valid/invalid EOF.""" LEGACY = auto() EF = auto() EOFV1_RUNTIME = auto() EOFV1_RUNTIME_INVALID = auto() EOFV1_INITCODE = auto() EOFV2 = auto() DELEGATION = auto() SUBCONTAINER_INVALID = auto() def bytecode(self) -> Bytecode | Container | Bytes: """Bytecode for the code to validate.""" match self: case ValidatedCode.LEGACY: return Op.STOP case ValidatedCode.EF: return Bytes("0xEF") case ValidatedCode.EOFV1_RUNTIME: return smallest_runtime_subcontainer case ValidatedCode.EOFV1_RUNTIME_INVALID: return Container.Code(Op.ADD) case ValidatedCode.EOFV1_INITCODE: return smallest_initcode_subcontainer case ValidatedCode.EOFV2: return Bytes("0xEF0002") case ValidatedCode.DELEGATION: return Bytes(Spec.DELEGATION_DESIGNATION + Bytes("".join(20 * ["ab"]))) case ValidatedCode.SUBCONTAINER_INVALID: return Container( sections=[ Section.Code(Op.RETURNCODE[0](0, 0)), Section.Container(Container.Code(Op.ADD)), ] ) def valid(self) -> bool: """Whether the code is valid in EOF v1.""" return self in [ValidatedCode.EOFV1_INITCODE] def __str__(self) -> str: """Return string representation of the enum.""" return f"{self.name}" class Factory(Enum): """ Kinds of systems leading up to a call to TXCREATE. DIRECT just puts the TXCREATE in the code it generates, while *CALL ones call into another account which does the TXCREATE. """ DIRECT = auto() WITH_CALL = auto() WITH_DELEGATECALL = auto() WITH_STATICCALL = auto() def creation_snippet( self, initcode_hash: Hash, pre: Alloc, salt: int, evm_code_type: EVMCodeType, value: int, input_size: int, ) -> Tuple[Bytecode, Address | None]: """ Return snippet to cause TXCREATE to be called along with an address. This will end up in the `compute_eofcreate_address` or None if that would be the snippet itself. """ if evm_code_type not in [EVMCodeType.LEGACY, EVMCodeType.EOF_V1]: raise Exception(f"Test needs to be updated for {evm_code_type}") # Snippet which invokes the TXCREATE itself txcreate_code = Op.TXCREATE( tx_initcode_hash=initcode_hash, salt=salt, value=value, input_size=input_size ) # Snippet which returns the TXCREATE result to caller callee_txcreate_code = Op.MSTORE(0, txcreate_code) + Op.RETURN(0, 32) # Snippet which recovers the TXCREATE result from returndata (wipes # memory afterwards) returndataload_code = ( Op.RETURNDATALOAD if evm_code_type == EVMCodeType.EOF_V1 else Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE) + Op.MLOAD(0) + Op.MSTORE(0, 0) ) match self: case Factory.DIRECT: return txcreate_code, None case Factory.WITH_CALL: callee_address = pre.deploy_contract(callee_txcreate_code) if evm_code_type == EVMCodeType.EOF_V1: return Op.EXTCALL(address=callee_address) + returndataload_code, callee_address else: return Op.CALL(address=callee_address) + returndataload_code, callee_address case Factory.WITH_DELEGATECALL: callee_address = pre.deploy_contract(callee_txcreate_code) if evm_code_type == EVMCodeType.EOF_V1: return Op.EXTDELEGATECALL(address=callee_address) + returndataload_code, None else: return Op.DELEGATECALL(address=callee_address) + returndataload_code, None case Factory.WITH_STATICCALL: callee_address = pre.deploy_contract(callee_txcreate_code) if evm_code_type == EVMCodeType.EOF_V1: return Op.EXTSTATICCALL(address=callee_address) + returndataload_code, None else: return Op.STATICCALL(address=callee_address) + returndataload_code, None def __str__(self) -> str: """Return string representation of the enum.""" return f"{self.name}" @pytest.mark.with_all_evm_code_types # Subset chosen to limit number of test cases @pytest.mark.parametrize("code_a", [ValidatedCode.EOFV1_INITCODE, ValidatedCode.LEGACY]) @pytest.mark.parametrize("code_b", ValidatedCode) # Subset chosen to limit number of test cases @pytest.mark.parametrize("factory_a", [Factory.DIRECT, Factory.WITH_CALL]) @pytest.mark.parametrize("factory_b", Factory) @pytest.mark.parametrize("value", [0, 1]) @pytest.mark.parametrize("input_size", [0, 31]) @pytest.mark.parametrize("access_list_a", [True, False]) def test_txcreate_validates( state_test: StateTestFiller, pre: Alloc, code_a: ValidatedCode, code_b: ValidatedCode, factory_a: Factory, factory_b: Factory, evm_code_type: EVMCodeType, value: int, input_size: int, access_list_a: bool, ) -> None: """ Verifies proper validation of initcode on TXCREATE in various scenarios. """ env = Environment() snippet_a, factory_address_a = factory_a.creation_snippet( Bytes(code_a.bytecode()).keccak256(), pre, 0, evm_code_type, value, input_size ) snippet_b, factory_address_b = factory_b.creation_snippet( Bytes(code_b.bytecode()).keccak256(), pre, 1, evm_code_type, value, input_size ) sender = pre.fund_eoa() contract_address = pre.deploy_contract( code=( Op.SSTORE(slot_code_worked, value_code_worked) + Op.SSTORE(slot_a, snippet_a) + Op.SSTORE(slot_b, snippet_b) + Op.STOP ) ) create_address_a = factory_address_a if factory_address_a else contract_address create_address_b = factory_address_b if factory_address_b else contract_address destination_address_a = compute_eofcreate_address(create_address_a, 0) destination_address_b = compute_eofcreate_address(create_address_b, 1) post = { contract_address: Account( storage={ slot_a: destination_address_a if code_a.valid() and value == 0 and factory_a != Factory.WITH_STATICCALL else TXCREATE_FAILURE, slot_b: destination_address_b if code_b.valid() and value == 0 and factory_b != Factory.WITH_STATICCALL else TXCREATE_FAILURE, slot_code_worked: value_code_worked, } ) } if access_list_a: access_list = [AccessList(address=destination_address_a, storage_keys=[Hash(0x0)])] else: access_list = [] tx = Transaction( to=contract_address, gas_limit=10_000_000, sender=sender, initcodes=[code_a.bytecode(), code_b.bytecode()], access_list=access_list, ) state_test(env=env, pre=pre, post=post, tx=tx) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/eof_tracker.md ================================================ # EOF Testing Coverage Tracker - [ ] Example Test Case 1 - [x] Example Test Case 2 ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py`](./eip3540_eof_v1/test_eof_example/index.md)) ## EIP-3540: EOF - EVM Object Format v1 ### Validation - [x] Empty code is not a valid EOF ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k empty_container`) - [x] Valid container without data section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k single_code_section_no_data_section`) - [x] Valid container with data section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md) `-k single_code_section_with_data_section`) - [x] Valid container with truncated data section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k data_section_contents_incomplete`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py::test_migrated_valid_invalid`](./eip3540_eof_v1/test_migrated_valid_invalid/test_migrated_valid_invalid.md) `-k data_section_contents_incomplete`) - [x] Valid container with data section truncated to empty ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_data_section_contents`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py::test_migrated_valid_invalid`](./eip3540_eof_v1/test_migrated_valid_invalid/test_migrated_valid_invalid.md) `-k no_data_section_contents`) - [x] Valid containers with multiple code sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md) `-k multiple_code_sections`) - [x] Valid containers with max number of code sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_max_code_sections`](./eip3540_eof_v1/test_container_validation/test_max_code_sections.md)) - [x] Too many code sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k too_many_code_sections`) - [x] Truncated magic ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k incomplete_magic`) - [x] Valid container except magic ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_magic_validation`](./eip3540_eof_v1/test_container_validation/test_magic_validation.md)) - [x] Truncated before version ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_version`) - [x] Valid container except version ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_version_validation`](./eip3540_eof_v1/test_container_validation/test_version_validation.md)) - [x] Truncated before type section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_type_header`) - [x] Truncated before type section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_type_section_size`) - [x] Truncated type section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k incomplete_type_section_size`) - [x] No type section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order`](./eip3540_eof_v1/test_section_order/index.md) `-k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_TYPE`) - [x] Truncated before code section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_code_header`) - [x] Truncated before code section number ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k code_section_count_missing`) - [x] Truncated code section number ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k code_section_count_incomplete`) - [x] Truncated before code section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k code_section_size_missing`) - [x] Truncated code section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k code_section_size_incomplete`) - [x] No code section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order`](./eip3540_eof_v1/test_section_order/index.md) `-k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_CODE`) - [x] Zero code section number ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k zero_code_sections_header`) - [x] Zero code section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k empty_code_section`) - [x] Zero code section size with non-empty data section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k empty_code_section_with_non_empty_data`) - [x] No container sections, truncated before data section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k truncated_header_data_section`) - [x] Container sections present, truncated before data section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k truncated_header_data_section_with_container_section`) - [x] Truncated before data section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_data_section_size`) - [x] Truncated data section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k data_section_size_incomplete`) - [x] Truncated before header terminator ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k terminator_incomplete`) - [x] Truncated before type section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k truncated_before_type_section`) - [x] Type section truncated before outputs ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k truncated_type_section_before_outputs`) - [x] Type section truncated before max_stack_height ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k truncated_type_section_before_max_stack_height`) - [x] Type section truncated max_stack_height ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k truncated_type_section_truncated_max_stack_height`) - [x] Truncated before code sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_code_section_contents`) - [x] Truncated code section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k incomplete_code_section_contents`) - [x] Data section empty, trailing bytes ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k no_data_section_contents`) - [x] Data section non-empty, trailing bytes ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k trailing_bytes_after_data_section`) - [x] Wrong order of sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py`](./eip3540_eof_v1/index.md)) - [x] No data section header ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order`](./eip3540_eof_v1/test_section_order/index.md) `-k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_DATA`) - [x] Multiple data sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k multiple_data_sections`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k multiple_code_and_data_sections`) - [x] Unknown section id ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k unknown_section_1`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k unknown_section_2`) - [x] Type section size != 4 * code section number ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k type_section_too`) - [x] Code section with max max_stack_height ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md) `-k single_code_section_max_stack_size`) - [x] Code section with max_stack_height above limit ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers`](./eip3540_eof_v1/test_container_validation/test_invalid_containers.md) `-k single_code_section_max_stack_size_too_large`) - [x] Valid code sections with inputs/outputs ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_with_inputs_outputs`) - [x] Valid code section with max inputs ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_input_maximum`) - [x] Valid code section with max outputs ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_output_maximum`) - [x] Code sections with invalid number of inputs/outputs ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_input_too_large`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_output_too_large`) - [x] First section with inputs/outputs ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k invalid_first_code_section`) - [x] Multiple type section headers ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k too_many_type_sections`) - [x] Multiple code section headers ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k multiple_code_headers`) - [x] Multiple data section headers ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k multiple_data_sections`) - [x] Container without type section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order`](./eip3540_eof_v1/test_section_order/index.md) `-k 'SectionTest.MISSING-section_kind_TYPE'`) - [x] Container without code sections ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order`](./eip3540_eof_v1/test_section_order/index.md) `-k 'SectionTest.MISSING-section_kind_CODE'`) - [x] Container without data section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order`](./eip3540_eof_v1/test_section_order/index.md) `-k 'SectionTest.MISSING-section_kind_DATA'`) - [x] Valid containers without data section and with subcontainers ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md)`[fork_unscheduled-eof_test-single_subcontainer_without_data]`) - [x] Valid containers with data section and with subcontainers ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md)`[fork_unscheduled-eof_test-single_subcontainer_with_data]`) - [x] Valid container with maximum number of subcontainers ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_wide_container`](./eip7620_eof_create/test_subcontainer_validation/test_wide_container.md)`[fork_unscheduled-eof_test-256]`) - [x] Container with number of subcontainers above the limit ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_wide_container`](./eip7620_eof_create/test_subcontainer_validation/test_wide_container.md)`[fork_unscheduled-eof_test-257]`) - [x] Subcontainer section header truncated before subcontainer number ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k no_container_section_count`) - [x] Subcontainer section header truncated before subcontainer size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k incomplete_container_section_count`) - [x] Truncated subcontainer size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k no_container_section_size`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k incomplete_container_section_size`) - [x] Zero container section number ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k zero_container_section_count`) - [x] Zero container section size ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k zero_size_container_section`) - [x] Truncated container section body ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k no_container_section_contents`) - [x] Multiple container section headers ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k multiple_container_headers`) - [x] Invalid subcontainer ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py`](./eip7620_eof_create/test_subcontainer_validation/index.md)`-k invalid`) - [x] Invalid subcontainer on a deep nesting level ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_deep_container`](./eip7620_eof_create/test_subcontainer_validation/test_deep_container.md)) - [x] Max number of inputs/outputs in a section ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md)`[fork_unscheduled-eof_test-code_section_input_maximum]`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers`](./eip3540_eof_v1/test_container_validation/test_valid_containers.md)`[fork_unscheduled-eof_test-code_section_output_maximum]`) - [x] Number of inputs/outputs in a section above the limit ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_input_too_large`, [`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py`](./eip3540_eof_v1/test_container_validation/index.md)`-k code_section_output_too_large`) ### Execution - [x] Execution of EOF contracts ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_execution.py::test_eof_execution`](./eip3540_eof_v1/test_execution/test_eof_execution.md)) - [x] Legacy executing EXTCODESIZE of EOF contract ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py::test_legacy_calls_eof_sstore`](./eip3540_eof_v1/test_extcode/test_legacy_calls_eof_sstore.md)) - [x] Legacy executing EXTCODEHASH of EOF contract ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py::test_legacy_calls_eof_sstore`](./eip3540_eof_v1/test_extcode/test_legacy_calls_eof_sstore.md)) - [x] Legacy executing EXTCODECOPY of EOF contract ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py::test_legacy_calls_eof_sstore`](./eip3540_eof_v1/test_extcode/test_legacy_calls_eof_sstore.md)) ## EIP-3670: EOF - Code Validation ### Validation - [x] Code section with invalid opcodes is rejected ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_opcodes_in_container`](./eip3540_eof_v1/test_all_opcodes_in_container/test_all_opcodes_in_container.md)) - [x] INVALID opcode is valid ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_opcodes_in_container`](./eip3540_eof_v1/test_all_opcodes_in_container/test_all_opcodes_in_container.md)) - [x] Truncated PUSH data ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_truncated_data_portion_opcodes`](./eip3540_eof_v1/test_all_opcodes_in_container/test_truncated_data_portion_opcodes.md)) - [x] Opcodes deprecated in EOF are rejected ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_opcodes_in_container`](./eip3540_eof_v1/test_all_opcodes_in_container/test_all_opcodes_in_container.md)) - [x] Codes with each valid opcodes ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_opcodes_in_container`](./eip3540_eof_v1/test_all_opcodes_in_container/test_all_opcodes_in_container.md)) - [x] Undefined instruction after terminating instruction ([`tests/unscheduled/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_invalid_opcodes_after_stop`](./eip3540_eof_v1/test_all_opcodes_in_container/test_invalid_opcodes_after_stop.md)) ## EIP-4200: EOF - Static relative jumps ### Validation - [x] Valid RJUMP with various offsets ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative`](./eip4200_relative_jumps/test_rjump/test_rjump_positive_negative.md)) - [x] Valid RJUMP with maximum offset ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_maxes`](./eip4200_relative_jumps/test_rjump/test_rjump_maxes.md)) - [x] Valid RJUMP with minimum offset ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_maxes`](./eip4200_relative_jumps/test_rjump/test_rjump_maxes.md)) - [x] Valid RJUMPI with various offsets ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_forwards`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_forwards.md)) - [x] Valid RJUMPI with maximum offset ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_max_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_max_forward.md)) - [x] Valid RJUMPI with minimum offset ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_max_backward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_max_backward.md)) - [x] Valid RJUMPV with various number of offsets and various offsets ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_forwards`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_forwards.md)) - [x] Valid RJUMPV with table size 256 ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_full_table`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_full_table.md)) - [x] Valid RJUMPV containing maximum offset ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_max_forwards`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_max_forwards.md)) - [ ] Valid RJUMPV containing minimum offset - [x] Truncated before RJUMP immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_truncated_rjump`](./eip4200_relative_jumps/test_rjump/test_rjump_truncated_rjump.md)) - [x] Truncated RJUMP immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_truncated_rjump_2`](./eip4200_relative_jumps/test_rjump/test_rjump_truncated_rjump_2.md)) - [x] RJUMP out of container bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_after_container`](./eip4200_relative_jumps/test_rjump/test_rjump_after_container.md)) - [x] RJUMP out of section bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_into_data`](./eip4200_relative_jumps/test_rjump/test_rjump_into_data.md)) - [x] RJUMP into immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_into_push_1`](./eip4200_relative_jumps/test_rjump/test_rjump_into_push_1.md)) - [x] Truncated before RJUMPI immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_truncated`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_truncated.md)) - [x] Truncated RJUMPI immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_truncated_2`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_truncated_2.md)) - [x] RJUMPI out of container bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_after_container`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_after_container.md)) - [x] RJUMPI out of section bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_into_data`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_into_data.md)) - [x] RJUMPI into immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_into_push_1`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_into_push_1.md)) - [x] Truncated before RJUMPV immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_truncated_empty`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_truncated_empty.md)) - [x] Truncated RJUMPV immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_truncated`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_truncated.md)) - [x] RJUMPV out of container bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_after_container`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_after_container.md)) - [x] RJUMPV out of section bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_into_data`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_into_data.md)) - [x] RJUMPV into immediate ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_into_push_1`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_into_push_1.md)) ### Execution - [x] RJUMP forwards ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative`](./eip4200_relative_jumps/test_rjump/test_rjump_positive_negative.md)) - [x] RJUMP backwards ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative`](./eip4200_relative_jumps/test_rjump/test_rjump_positive_negative.md)) - [x] RJUMP with 0 offset ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_zero`](./eip4200_relative_jumps/test_rjump/test_rjump_zero.md)) - [x] RJUMPI forwards with condition true/false ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_forwards`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_condition_forwards.md)) - [x] RJUMPI backwards with condition true/false ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_backwards`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_condition_backwards.md)) - [x] RJUMPI with 0 offset with condition true/false ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_zero`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_condition_zero.md)) - [x] RJUMPV with different case values ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_condition.md)) - [x] RJUMPV with case value out of table bounds ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_condition.md)) - [x] RJUMPV with max cases number ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_condition.md), [`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py`](./eip4200_relative_jumps/test_rjumpv/index.md)`-k test_rjumpv_full_table`) ## EIP-4750: EOF - Functions ### Validation - [x] Valid CALLFs ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_callf_execution.py::test_callf`](./eip4750_functions/test_callf_execution/test_callf.md)) - [x] CALLFs to non-existing sections ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_invalid_code_section_index`](./eip4750_functions/test_code_validation/test_invalid_code_section_index.md)) - [x] Truncated CALLF immediate ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_truncated_immediate`](./eip4750_functions/test_code_validation/test_callf_truncated_immediate.md)) - [x] Unreachable code sections ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_unreachable_code_sections`](./eip4750_functions/test_code_validation/test_unreachable_code_sections.md)) - [x] Sections reachable from other sections, but not reachable from section 0 ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_unreachable_code_sections`](./eip4750_functions/test_code_validation/test_unreachable_code_sections.md)) - [x] Unreachable code section that calls itself with JUMPF ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_unreachable_code_sections`](./eip4750_functions/test_code_validation/test_unreachable_code_sections.md)) - [x] Unreachable code section that calls itself with CALLF ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_unreachable_code_sections`](./eip4750_functions/test_code_validation/test_unreachable_code_sections.md)) - [ ] RETF with maximum number of outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) ### Execution - [ ] CALLF/RETF execution (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml) - [ ] Dispatch to CALLF to different functions based on calldata (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml) - [ ] Maximum number of code sections, calling each section with CALLF (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml) ## EIP-5450: EOF - Stack Validation ### Validation #### Terminating instructions - [ ] Check all terminating opcodes (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [ ] Code section not terminating (executing beyond section end) (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/no_terminating_instruction_Copier.json) - [ ] Code section ending with NOP (not terminating) (src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [ ] Check that unreachable code is invalid after all terminating instructions (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) #### Jumps ##### RJUMP - [x] Valid RJUMP backwards in a constant stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_valid_backward`](./eip4200_relative_jumps/test_rjump/test_rjump_valid_backward.md) - [x] Invalid RJUMP backwards with mismatching stack in a constant stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_backward_invalid_max_stack_height`](./eip4200_relative_jumps/test_rjump/test_rjump_backward_invalid_max_stack_height.md) - [x] Valid RJUMP backwards in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_valid_backward`](./eip4200_relative_jumps/test_rjump/test_rjump_valid_backward.md) - [x] Invalid RJUMP backwards with mismatching stack in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_backward_invalid_max_stack_height`](./eip4200_relative_jumps/test_rjump/test_rjump_backward_invalid_max_stack_height.md) - [x] Valid RJUMP forwards ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_valid_forward`](./eip4200_relative_jumps/test_rjump/test_rjump_valid_forward.md) - [x] Valid RJUMP forwards from different stack ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_valid_forward`](./eip4200_relative_jumps/test_rjump/test_rjump_valid_forward.md) - [x] Valid RJUMP forwards in variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_valid_forward`](./eip4200_relative_jumps/test_rjump/test_rjump_valid_forward.md) - [x] Valid RJUMP forwards from different stack in variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_valid_forward`](./eip4200_relative_jumps/test_rjump/test_rjump_valid_forward.md) - [ ] Valid empty infinite loop with RJUMP (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [ ] Valid balanced infinite loop (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [x] RJUMP to self (including variadic stack height) ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_into_self`](./eip4200_relative_jumps/test_rjump/test_rjump_into_self.md)) ##### RJUMPI - [x] Valid RJUMPI backwards in a constant stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_backward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_backward.md) - [x] Invalid RJUMPI backwards with mismatching stack in a constant stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_backward_invalid_max_stack_height`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_backward_invalid_max_stack_height.md) - [x] Valid RJUMPI backwards in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_backward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_backward.md) - [x] Invalid RJUMPI backwards with mismatching stack in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_backward_invalid_max_stack_height`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_backward_invalid_max_stack_height.md) - [x] RJUMPI forward with branches of equal stack height ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] RJUMPI forward with branches of equal stack height in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] RJUMPI forward with branches of different stack height ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] RJUMPI forward with branches of different stack height in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] Valid loop using RJUMPI ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] Valid loop with a break using RJUMPI - equal stack after break and normal loop end ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] Valid loop with a break using RJUMPI - equal stack after break and normal loop end, variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] Valid loop with a break using RJUMPI - different stack after break and normal loop end ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] Valid loop with a break using RJUMPI - different stack after break and normal loop end, variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] If-then-else with equal stack height in branches ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] If-then-else with equal stack height in branches, variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] If-then-else with different stack height in branches ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] If-then-else with different stack height in branches, variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_valid_forward`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_valid_forward.md) - [x] RJUMPI to self (including variadic stack height) ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_into_self`](./eip4200_relative_jumps/test_rjumpi/test_rjumpi_into_self.md)) ##### RJUMPV - [x] Valid RJUMPV backwards in a constant stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_backward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_backward.md) - [x] Invalid RJUMPV backwards with mismatching stack in a constant stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_backward_invalid_max_stack_height`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_backward_invalid_max_stack_height.md) - [x] Valid RJUMPV backwards in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_backward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_backward.md) - [x] Invalid RJUMPV backwards with mismatching stack in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_backward_invalid_max_stack_height`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_backward_invalid_max_stack_height.md) - [x] RJUMPV forward with branches of equal stack height ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] RJUMPV forward with branches of equal stack height in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] RJUMPV forward with branches of different stack height ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] RJUMPV forward with branches of different stack height in a variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [ ] Valid infinite loop using RJUMPV (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [x] Switch with equal stack height in branches ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] Switch with equal stack height in branches, variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] Switch with different stack height in branches ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] Switch with different stack height in branches, variable stack segment ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_valid_forward`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_valid_forward.md) - [x] RJUMPV to self (including variadic stack height) ([`tests/unscheduled/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_into_self`](./eip4200_relative_jumps/test_rjumpv/test_rjumpv_into_self.md)) ##### Combinations - [ ] RJUMP and RJUMPI with the same target and equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json) - [ ] RJUMP and RJUMPI with the same target and equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json) - [ ] RJUMP and RJUMPI with the same target and different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json) - [ ] RJUMP and RJUMPI with the same target and different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json) - [ ] RJUMP and RJUMPV with the same target and equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json) - [ ] RJUMP and RJUMPV with the same target and equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json) - [ ] RJUMP and RJUMPV with the same target and different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json) - [ ] RJUMP and RJUMPV with the same target and different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json) - [ ] RJUMPI and RJUMPV with the same target #### Stack underflow - [x] Stack underflows ([`tests/unscheduled/eip7692_eof_v1/eip5450_stack/test_code_validation.py::test_all_opcodes_stack_underflow`](./eip5450_stack/test_code_validation/test_all_opcodes_stack_underflow.md)) - [x] Stack underflow with enough items available in caller stack - can't dig into caller frame ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [x] Stack underflow in variable stack segment, only min underflow ([`tests/unscheduled/eip7692_eof_v1/eip5450_stack/test_code_validation.py::test_all_opcodes_stack_underflow`](./eip5450_stack/test_code_validation/test_all_opcodes_stack_underflow.md)) - [x] Stack underflow in variable stack segment, both min and max underflow ([`tests/unscheduled/eip7692_eof_v1/eip5450_stack/test_code_validation.py::test_all_opcodes_stack_underflow`](./eip5450_stack/test_code_validation/test_all_opcodes_stack_underflow.md)) #### CALLF - [x] Valid CALLFs to functions with inputs ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [ ] CALLF stack underflows ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [ ] ./src/EOFTestsFiller/efExample/validInvalidFiller.yml - [ ] src/EOFTestsFiller/EIP5450/validInvalidFiller.yml - [x] CALLF stack underflow in variable stack segment, only min underflow ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_underflow_examples`](./eip4750_functions/test_code_validation/test_callf_stack_underflow_examples.md)) - [x] CALLF stack underflow in variable stack segment, both min and max underflow ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_underflow_examples`](./eip4750_functions/test_code_validation/test_callf_stack_underflow_examples.md)) - [ ] Branching to CALLFs with the same number of outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [ ] Check that CALLF stack inputs/outputs equal to target section type definition #### RETF - [ ] Valid RETF with correct number of items on stack ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [ ] src/EOFTestsFiller/EIP5450/validInvalidFiller.yml - [ ] Invalid RETF with extra items on stack ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [ ] ./src/EOFTestsFiller/efExample/validInvalidFiller.yml - [x] RETF stack underflow ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [x] RETF reached via different paths ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [x] RETF in variable stack segment is not allowed ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_eof_validity`](./eip4750_functions/test_code_validation/test_eof_validity.md)) - [ ] Extra items on stack allowed for terminating instructions other than RETF (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [x] Invalid RETF in a non-returning function ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_first_section_returning`](./eip6206_jumpf/test_nonreturning_validation/test_first_section_returning.md)) #### JUMPF - [x] Extra items on stack are allowed for JUMPF to non-returning function ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_non_returning`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_non_returning.md) [`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_non_returning_variable_stack`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_non_returning_variable_stack.md)) - [x] JUMPF stack underflows ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_non_returning`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_non_returning.md) [`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning.md)) - [x] JUMPF stack underflow in a variable stack segment - only min underflow ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_non_returning_variable_stack`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_non_returning_variable_stack.md)) - [x] JUMPF stack underflow in a variable stack segment - both min and max underflow ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_non_returning_variable_stack`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_non_returning_variable_stack.md)) - [x] JUMPF into function with the same number of outputs ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning.md)) - [x] JUMPF into function with fewer outputs than current one ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning.md)) - [x] Extra items on stack are allowed for JUMPF to returning function ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning.md)) - [x] JUMPF to returning in a variable stack segment is not allowed ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning_variable_stack_1`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning_variable_stack_1.md) [`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning_variable_stack_2`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning_variable_stack_2.md) [`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_to_returning_variable_stack_3`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_to_returning_variable_stack_3.md)) - (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_variable_stack_Copier.json) - [x] Invalid JUMPF in a non-returning function ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_retf_in_nonreturning`](./eip6206_jumpf/test_nonreturning_validation/test_retf_in_nonreturning.md)) - [ ] Truncated JUMPF immediate #### Stack overflow ##### CALLF - [x] Max allowed stack height reached in CALLF-ed function ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow`](./eip4750_functions/test_code_validation/test_callf_stack_overflow.md)) - [x] CALLF validation time stack overflow ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_after_callf`](./eip4750_functions/test_code_validation/test_callf_stack_overflow_after_callf.md)) - [x] Max allowed stack height reached in CALLF-ed function with inputs ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_with_inputs_stack_overflow`](./eip4750_functions/test_code_validation/test_callf_with_inputs_stack_overflow.md)) - [x] CALLF validation time stack overflow in function with inputs ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_with_inputs_stack_overflow`](./eip4750_functions/test_code_validation/test_callf_with_inputs_stack_overflow.md)) - [x] Max allowed stack height reached in CALLF-ed function. CALLF in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_variable_stack`](./eip4750_functions/test_code_validation/test_callf_stack_overflow_variable_stack.md) [`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_variable_stack_2`](./eip4750_functions/test_code_validation/test_callf_stack_overflow_variable_stack_2.md))) - [x] CALLF validation time stack overflow in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_variable_stack_3`](./eip4750_functions/test_code_validation/test_callf_stack_overflow_variable_stack_3.md) [`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_variable_stack_4`](./eip4750_functions/test_code_validation/test_callf_stack_overflow_variable_stack_4.md))) - [x] Max allowed stack height reached in CALLF-ed function with inputs. CALLF in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_with_inputs_stack_overflow_variable_stack`](./eip4750_functions/test_code_validation/test_callf_with_inputs_stack_overflow_variable_stack.md)) - [x] CALLF validation time stack overflow in function with inputs in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_with_inputs_stack_overflow_variable_stack`](./eip4750_functions/test_code_validation/test_callf_with_inputs_stack_overflow_variable_stack.md)) - [ ] Function inputs are accessible and accounted for (no stack underflow if they are popped) (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) ##### JUMPF - [x] Max allowed stack height reached in JUMPF-ed function ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_other_stack_overflow`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_other_stack_overflow.md)) - [x] JUMPF validation time stack overflow ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_jumpf_other_stack_overflow`](./eip6206_jumpf/test_jumpf_validation/test_jumpf_other_stack_overflow.md)) - [x] Max allowed stack height reached in JUMPF-ed function with inputs ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_with_inputs_stack_overflow`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_with_inputs_stack_overflow.md)) - [x] JUMPF validation time stack overflow in function with inputs ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_with_inputs_stack_overflow`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_with_inputs_stack_overflow.md)) - [x] JUMPF validation time stack overflow in function with inputs, variable stack segment, only max overflow ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_with_inputs_stack_overflow_variable_stack`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_with_inputs_stack_overflow_variable_stack.md)) - [x] JUMPF validation time stack overflow in function with inputs, variable stack segment, both max and min overflow ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_with_inputs_stack_overflow_variable_stack`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_with_inputs_stack_overflow_variable_stack.md)) - [x] Max allowed stack height reached in JUMPF-ed function. JUMPF in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_variadic_stack_overflow`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_variadic_stack_overflow.md)) - [x] JUMPF validation time stack overflow in variable stack segment - only max overflow. ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_variadic_stack_overflow`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_variadic_stack_overflow.md)) - [x] JUMPF validation time stack overflow in variable stack segment - both min and max overflow. ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_variadic_stack_overflow`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_variadic_stack_overflow.md)) - [x] Max allowed stack height reached in JUMPF-ed function with inputs. JUMPF in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_with_inputs_stack_overflow_variable_stack`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_with_inputs_stack_overflow_variable_stack.md)) - [x] JUMPF validation time stack overflow in function with inputs in variable stack segment. ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_with_inputs_stack_overflow_variable_stack`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_with_inputs_stack_overflow_variable_stack.md)) #### SWAPN/DUPN/EXCHANGE - [ ] Valid DUPN with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/dupn_stack_validation_Copier.json) - [ ] DUPN stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/dupn_stack_validation_Copier.json) - [ ] Valid SWAPN with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/swapn_stack_validation_Copier.json) - [ ] SWAPN stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/swapn_stack_validation_Copier.json) - [ ] Valid EXCHANGE with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/exchange_deep_stack_validation_Copier.json src/EOFTestsFiller/efStack/exchange_stack_validation_Copier.json) - [ ] EXCHANGE stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/exchange_stack_validation_Copier.json src/EOFTestsFiller/efStack/exchange_empty_stack_validation_Copier.json) #### Other - [ ] Wrong max_stack_height (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/max_stack_height_Copier.json) - [ ] All opcodes correctly account for stack inputs/outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml) - [ ] Code reachable only via backwards jump is invalid - [x] Maximally broad [0, 1023] stack range ([`tests/unscheduled/eip7692_eof_v1/eip_5450_stack/test_code_validation.py::test_stack_range_maximally_broad`](./eip5450_stack/test_code_validation/test_stack_range_maximally_broad.md)) ### Execution - [x] Max stack size (1024) in CALLF-ed function ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_callf_execution.py::test_callf_operand_stack_size_max`](./eip4750_functions/test_callf_execution/test_callf_operand_stack_size_max.md) ## EIP-6206: EOF - JUMPF and non-returning functions ### Validation - [x] Zero section returning ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_first_section_returning`](./eip6206_jumpf/test_nonreturning_validation/test_first_section_returning.md), ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml) - [x] Zero section declared non-returning but ends with RETF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_retf_in_nonreturning`](./eip6206_jumpf/test_nonreturning_validation/test_retf_in_nonreturning.md), ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml) - [x] CALLF into non-returning function ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_callf_to_nonreturning`](./eip6206_jumpf/test_nonreturning_validation/test_callf_to_nonreturning.md)) - [x] Valid JUMPF into sections with equal number of outputs ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py::test_jumpf_to_retf`](./eip6206_jumpf/test_jumpf_execution/test_jumpf_to_retf.md)) - [x] Valid JUMPF into sections with different but compatible number of outputs ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py::test_jumpf_to_retf`](./eip6206_jumpf/test_jumpf_execution/test_jumpf_to_retf.md)) - [x] JUMPF into sections with incompatible outputs ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py::test_jumpf_incompatible_outputs`](./eip6206_jumpf/test_jumpf_stack/test_jumpf_incompatible_outputs.md)) - [x] Non-returning section without JUMPF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py::test_jumpf_forward`](./eip6206_jumpf/test_jumpf_execution/test_jumpf_forward.md)) - [x] Non-returning section with JUMPF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_jumpf_in_nonreturning`](./eip6206_jumpf/test_nonreturning_validation/test_jumpf_in_nonreturning.md)) - [x] Returning section with RETF ([`tests/unscheduled/eip7692_eof_v1/eip4750_functions/test_callf_execution.py::test_callf`](./eip4750_functions/test_callf_execution/test_callf.md)) - [x] Returning section with JUMPF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_returning_jumpf`](./eip6206_jumpf/test_jumpf_validation/test_returning_jumpf.md)) - [x] Returning section with JUMPF to returning and RETF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py::test_jumpf_to_retf`](./eip6206_jumpf/test_jumpf_execution/test_jumpf_to_retf.md)) - [x] Returning section with JUMPF to non-returning and RETF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_returning_jumpf`](./eip6206_jumpf/test_jumpf_validation/test_returning_jumpf.md)) - [x] Returning section without JUMPF nor RETF ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_returning_section_not_returning`](./eip6206_jumpf/test_nonreturning_validation/test_returning_section_not_returning.md)) - [x] Invalid non-returning flag ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_nonreturning_validation.py::test_returning_section_not_returning`](./eip6206_jumpf/test_nonreturning_validation/test_returning_section_not_returning.md)) - [x] Circular JUMPF between two sections ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py::test_jumpf_infinite_loop`](./eip6206_jumpf/test_jumpf_execution/test_jumpf_infinite_loop.md)) - [x] JUMPF into non-existing section ([`tests/unscheduled/eip7692_eof_v1/eip6206_jumpf/test_jumpf_validation.py::test_invalid_code_section_index`](./eip6206_jumpf/test_jumpf_validation/test_invalid_code_section_index.md)) ## EIP-7480: EOF - Data section access instructions ### Validation - [x] Valid DATALOADN with various offsets ([`tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py::test_dataloadn`](./eip7480_data_section/test_data_opcodes/test_dataloadn.md) - [x] Truncated DATALOADN immediate ([`tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_code_validation.py::test_dataloadn_truncated_immediate`](./eip7480_data_section/test_code_validation/test_dataloadn_truncated_immediate.md) - [x] DATALOADN offset out of bounds ([`tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_code_validation.py::test_invalid_containers_with_data_section`](./eip7480_data_section/test_code_validation/test_invalid_containers_with_data_section.md) - [x] DATALOADN accessing not full word ([`tests/unscheduled/eip7692_eof_v1/eip7480_data_section/test_code_validation.py::test_invalid_containers_with_data_section`](./eip7480_data_section/test_code_validation/test_invalid_containers_with_data_section.md) ## EIP-663: SWAPN, DUPN and EXCHANGE instructions ### Validation - [ ] A DUPN instruction causes stack overflow - [ ] A DUPN instruction causes stack underflow - [ ] A DUPN instruction causes max stack height mismatch - [ ] A SWAPN instruction causes stack underflow ### Execution - [x] Positive tests for DUPN instructions ([`./tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py::test_dupn_all_valid_immediates`](./eip663_dupn_swapn_exchange/test_dupn/test_dupn_all_valid_immediates.md)) - [x] Positive tests for SWAPN instructions ([`./tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py::test_swapn_all_valid_immediates`](./eip663_dupn_swapn_exchange/test_swapn/test_swapn_all_valid_immediates.md)) - [x] Positive tests for EXCHANGE instruction ([`./tests/unscheduled/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py::test_exchange_all_valid_immediates`](./eip663_dupn_swapn_exchange/test_exchange/test_exchange_all_valid_immediates.md)) ## EIP-7069: Revamped CALL instructions ### Execution - [x] EXTDELEGATECALL from EOF to EOF ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_eof_sstore`](./eip7069_extcall/test_calls/test_eof_calls_eof_sstore.md)) - [x] EXTDELEGATECALL from EOF to legacy fails ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_legacy_sstore`](./eip7069_extcall/test_calls/test_eof_calls_legacy_sstore.md)) - [ ] EXTDELEGATECALL forwards static mode (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_static.json) - [x] EXTCALL with value success ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_with_value`](./eip7069_extcall/test_calls/test_eof_calls_with_value.md)) - [x] EXTCALL with value from EXTSTATICCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_static_flag_with_value`](./eip7069_extcall/test_calls/test_eof_calls_static_flag_with_value.md)) - [x] EXTCALL with value, not enough balance ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_with_value`](./eip7069_extcall/test_calls/test_eof_calls_with_value.md)) - [x] EXTCALL with value, check additional charge for value ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTCALL with gas not enough for callee to get 5000 gas ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_min_callee_gas`](./eip7069_extcall/test_calls/test_eof_calls_min_callee_gas.md)) - [x] RETURNDATA* after EXTCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_returndataload.py`](./eip7069_extcall/test_returndataload/index.md)) - [x] RETURNDATA* after EXTDELEGATECALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_returndataload.py`](./eip7069_extcall/test_returndataload/index.md)) - [x] RETURNDATA* after EXTSTATICCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_returndataload.py`](./eip7069_extcall/test_returndataload/index.md)) - [x] RETURNDATA* after aborted EXT*CALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_clear_return_buffer`](./eip7069_extcall/test_calls/test_eof_calls_clear_return_buffer.md)) - [x] Failed EXTCALL clears returndata from previous EXTCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_clear_return_buffer`](./eip7069_extcall/test_calls/test_eof_calls_clear_return_buffer.md)) - [x] EXTCALL not enough gas for input memory charge ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTDELEGATECALL not enough gas for input memory charge ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTSTATICCALL not enough gas for input memory charge ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTCALL exception due to target address overflow (bits set in high 12 bytes) ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py`](./eip7069_extcall/test_address_space_extension/index.md)) - [x] EXTDELEGATECALL exception due to target address overflow (bits set in high 12 bytes) ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py`](./eip7069_extcall/test_address_space_extension/index.md)) - [x] EXTSTATICCALL exception due to target address overflow (bits set in high 12 bytes) ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py`](./eip7069_extcall/test_address_space_extension/index.md)) - [x] EXTCALL not enough gas for warming up target address ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTDELEGATECALL not enough gas for warming up target address ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTSTATICCALL not enough gas for warming up target address ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] EXTCALL not enough gas for account creation cost (transfer value to non-existing account) ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas`](./eip7069_extcall/test_gas/test_ext_calls_gas.md)) - [x] OOG after EXTCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_eof_then_fails`](./eip7069_extcall/test_calls/test_eof_calls_eof_then_fails.md)) - [x] OOG after EXTDELEGATECALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_eof_then_fails`](./eip7069_extcall/test_calls/test_eof_calls_eof_then_fails.md)) - [x] OOG after EXTSTATICCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_eof_then_fails`](./eip7069_extcall/test_calls/test_eof_calls_eof_then_fails.md)) - [x] REVERT inside EXTCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_fails`](./eip7069_extcall/test_calls/test_callee_fails.md)) - [x] REVERT inside EXTDELEGATECALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_fails`](./eip7069_extcall/test_calls/test_callee_fails.md)) - [x] REVERT inside EXTSTATICCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_fails`](./eip7069_extcall/test_calls/test_callee_fails.md)) - [x] EXTCALL with input (`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calldata.py`) - [x] EXTDELEGATECALL with input (`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calldata.py`) - [x] EXTSTATICCALL with input (`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calldata.py`) - [x] EXTCALL with just enough gas for MIN_RETAINED_GAS and MIN_CALLEE_GAS ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_min_callee_gas`](./eip7069_extcall/test_calls/test_eof_calls_min_callee_gas.md)) - [x] EXTCALL with not enough gas for MIN_CALLEE_GAS ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_min_callee_gas`](./eip7069_extcall/test_calls/test_eof_calls_min_callee_gas.md)) - [x] ADDRESS and CALLER inside EXTCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_context`](./eip7069_extcall/test_calls/test_callee_context.md)) - [x] ADDRESS and CALLER inside EXTDELEGATECALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_context`](./eip7069_extcall/test_calls/test_callee_context.md)) - [x] ADDRESS and CALLER inside EXTSTATICCALL ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_context`](./eip7069_extcall/test_calls/test_callee_context.md)) - [ ] Refund inside EXTCALL is applied after the transaction (evmone-tests: state_tests/state_transition/eof_calls/extcall_gas_refund_propagation.json) - [ ] Refund inside EXTDELEGATECALL is applied after the transaction (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_gas_refund_propagation.json) - [x] EXTSTATICCALL from EOF to non-pure legacy contract failing ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_legacy_sstore`](./eip7069_extcall/test_calls/test_eof_calls_legacy_sstore.md)) - [x] EXTSTATICCALL from EOF to pure EOF contract ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_legacy_mstore`](./eip7069_extcall/test_calls/test_eof_calls_legacy_mstore.md)) - [x] EXTSTATICCALL from EOF to non-pure EOF contract failing ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_eof_sstore`](./eip7069_extcall/test_calls/test_eof_calls_eof_sstore.md)) - [x] `*CALLs` from legacy contracts to EOF contracts (ethereum/tests: ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_legacy_calls_eof_sstore`](./eip7069_extcall/test_calls/test_eof_calls_eof_sstore.md)) - [x] `EXT*CALLs` from EOF to legacy contracts ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_legacy_sstore`](./eip7069_extcall/test_calls/test_eof_calls_eof_sstore.md)) - [x] EXTDELEGATECALL from EOF to EOF contract ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_eof_sstore`](./eip7069_extcall/test_calls/test_eof_calls_eof_sstore.md)) - [x] EXTDELEGATECALL from EOF to legacy contract failing ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_extdelegate_call_targets`](./eip7069_extcall/test_calls/test_extdelegate_call_targets.md)) - [x] EXTDELEGATECALL from EOF to EOA failing ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_extdelegate_call_targets`](./eip7069_extcall/test_calls/test_extdelegate_call_targets.md)) - [x] EXTDELEGATECALL from EOF to empty account failing ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_extdelegate_call_targets`](./eip7069_extcall/test_calls/test_extdelegate_call_targets.md)) - [x] EXTDELEGATECALL to EIP-7702 delegate ([`./tests/unscheduled/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_extdelegate_call_targets`](./eip7069_extcall/test_calls/test_extdelegate_call_targets.md)) ## EIP-7620: EOF Contract Creation ### Validation - [ ] Valid EOFCREATEs referring to various container numbers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_valid_Copier.json) - [x] Truncated before EOFCREATE immediate ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py`](./eip7620_eof_create/test_eofcreate/index.md)`-k test_eofcreate_invalid_truncated_immediate`) - [ ] EOFCREATE is not a valid terminating instruction - [x] EOFCREATE immediate referring to non-existing container ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py`](./eip7620_eof_create/test_eofcreate/index.md)`-k test_eofcreate_invalid_index`) - [x] EOFCREATE immediate referring to container with truncated data ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py`](./eip7620_eof_create/test_eofcreate/index.md)`-k test_eofcreate_truncated_container`) - [x] Valid RETURNCODEs referring to various container numbers ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_returncode.py`](./eip7620_eof_create/test_returncode/index.md)`-k test_returncode_valid_index`) - [x] Truncated before RETURNCODE immediate ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_returncode.py::test_returncode_invalid_truncated_immediate`](./eip7620_eof_create/test_returncode/test_returncode_invalid_truncated_immediate.md)) - [x] RETURNCODE immediate referring to non-existing container ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_returncode.py`](./eip7620_eof_create/test_returncode/index.md)`-k test_returncode_invalid_index`) - [x] Unreachable code after RETURNCODE, check that RETURNCODE is terminating ([`tests/unscheduled/eip7692_eof_v1/eip7620_eof_create/test_returncode.py::test_returncode_terminating`](./eip7620_eof_create/test_returncode/test_returncode_terminating.md)) ### Execution - [ ] CREATE with EOF initcode fails in Prague (evmone-tests: state_tests/state_transition/eof_create/create_with_eof_initcode.json) - [ ] CREATE with EOF initcode fails in Cancun (evmone-tests: state_tests/state_transition/eof_create/create_with_eof_initcode_cancun.json) - [ ] CREATE2 with EOF initcode fails in Prague (evmone-tests: state_tests/state_transition/eof_create/create2_with_eof_initcode.json) - [ ] CREATE2 with EOF initcode fails in Cancun (evmone-tests: state_tests/state_transition/eof_create/create2_with_eof_initcode_cancun.json) - [ ] CREATE with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/create_deploying_eof.json) - [ ] CREATE2 with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/create2_deploying_eof.json) - [ ] EOFCREATE success with empty aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_empty_auxdata.json) - [ ] EOFCREATE success with aux data length equal to declared in deploy container (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_equal_to_declared.json) - [ ] EOFCREATE success with aux data longer than size declared in deploy container (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_longer_than_declared.json) - [ ] EOFCREATE with aux data shorter than size declared in deploy container fails (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_shorter_than_declared.json) - [ ] EOFCREATE success deploying DATALOADN referring to aux data portion of deploy container data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_dataloadn_referring_to_auxdata.json) - [ ] EOFCREATE success with deploy container having aux data and subcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_with_auxdata_and_subcontainer.json) - [ ] REVERT in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_revert_empty_returndata.json) - [ ] REVERT with return data in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_revert_non_empty_returndata.json) - [ ] Exceptional abort in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_initcontainer_aborts.json) - [ ] EOFCREATE with deploy container of max size 0x6000 (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_max_size.json) - [ ] EOFCREATE with deploy container size above limit (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_too_large.json) - [ ] EOFCREATE with deploy container data size above 64K after appending aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_appended_data_size_larger_than_64K.json) - [ ] EOFCREATE with deploy container size above limit after appending aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_with_aux_data_too_large.json) - [ ] EOFCREATE success nested in EOFCREATE initcode (evmone-tests: state_tests/state_transition/eof_create/eofcreate_nested_eofcreate.json) - [ ] EOFCREATE success nested in EOFCREATE initcode that reverts (evmone-tests: state_tests/state_transition/eof_create/eofcreate_nested_eofcreate_revert.json) - [ ] EOFCREATE with value success - [ ] EOFCREATE with value - not enough caller balance (evmone-tests: state_tests/state_transition/eof_create/eofcreate_caller_balance_too_low.json) - [ ] EOFCREATE not enough gas for initcode (EIP-3860) charge (evmone-tests: state_tests/state_transition/eof_create/eofcreate_not_enough_gas_for_initcode_charge.json) - [ ] EOFCREATE not enough gas for input memory expansion (evmone-tests: state_tests/state_transition/eof_create/eofcreate_not_enough_gas_for_mem_expansion.json) - [ ] RETURNCODE not enough gas for aux data memory expansion (evmone-tests: state_tests/state_transition/eof_create/returncode_not_enough_gas_for_mem_expansion.json) - [ ] Successful EOFCREATE clears returndata (evmone-tests: state_tests/state_transition/eof_create/eofcreate_clears_returndata.json) - [ ] Second EOFCREATE with the same container and salt fails (evmone-tests: state_tests/state_transition/eof_create/eofcreate_failure_after_eofcreate_success.json) - [ ] Call created contract after EOFCREATE (evmone-tests: state_tests/state_transition/eof_create/eofcreate_call_created_contract.json) ## EIP-7698: EOF - Creation transaction TODO: replace with `EIP-7873: EOF - TXCREATE and InitcodeTransaction type` test cases ### Execution - [ ] Creation transaction success with empty deploy container data (evmone-tests: state_tests/state_transition/eof_create/creation_tx.json) - [ ] Creation transaction success with data in deploy container without aux data (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_data.json) - [ ] Creation transaction success with data in deploy container with aux data length equal to declared (evmone-tests: state_tests/state_transition/eof_create/creation_tx_static_auxdata_in_calldata.json) - [ ] Creation transaction success with data in deploy container with aux data longer than declared (evmone-tests: state_tests/state_transition/eof_create/creation_tx_dynamic_auxdata_in_calldata.json) - [ ] Creation transaction success deploying DATALOADN referring to aux data portion of deploy container data (evmone-tests: state_tests/state_transition/eof_create/creation_tx_dataloadn_referring_to_auxdata.json) - [ ] Exceptional abort in creation transaction initcode (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_aborts.json) - [ ] RETURN in creation transaction initcode fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_return.json) - [ ] STOP in creation transaction initcode fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_stop.json) - [ ] Creation transaction with initcode of max allowed size 0xc000 (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_max_size.json) - [ ] Creation transaction with initcode size above limit (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_too_large.json) - [ ] Creation transaction deploys container of max allowed size 0x6000 (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_container_max_size.json) - [ ] Creation transaction deploying container of size above limit fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_container_too_large.json) - [ ] EOFCREATE success nested in creation transaction initcode (evmone-tests: state_tests/state_transition/eof_create/creation_tx_nested_eofcreate.json) - [ ] Creation transaction with invalid initcontainer (invalid header) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_initcode_header.json) - [ ] Creation transaction with invalid initcontainer (invalid EOF version) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_eof_version.json) - [ ] Creation transaction with invalid initcontainer (invalid max stack height) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_initcode.json) - [ ] Creation transaction fails if initcontainer has truncated data section (declared size > present data size ) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_truncated_data_initcode.json) - [ ] Creation transaction with invalid deploy container (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_deploycode.json) - [ ] Create transaction with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploying_eof.json) - [ ] EOF creation transaction fails before Prague (evmone-tests: state_tests/state_transition/eof_create/initcode_transaction_before_unscheduled.json) ================================================ FILE: tests/unscheduled/eip7692_eof_v1/gas_test.py ================================================ """Utility to generate gas usage related state tests automatically.""" import itertools from ethereum_test_base_types.base_types import Address from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction from ethereum_test_types.eof.v1 import Container, Section from ethereum_test_vm import Bytecode, EVMCodeType from ethereum_test_vm import Opcodes as Op from .eip7069_extcall.spec import ( LEGACY_CALL_FAILURE, LEGACY_CALL_SUCCESS, ) WARM_ACCOUNT_ACCESS_GAS = 100 """Storage addresses for common testing fields""" _slot = itertools.count() slot_cold_gas = next(_slot) slot_warm_gas = next(_slot) slot_oog_call_result = next(_slot) slot_sanity_call_result = next(_slot) def gas_test( state_test: StateTestFiller, env: Environment, pre: Alloc, setup_code: Bytecode, subject_code: Bytecode, tear_down_code: Bytecode, cold_gas: int, warm_gas: int | None = None, subject_subcontainer: Container | None = None, subject_address: Address | None = None, subject_balance: int = 0, oog_difference: int = 1, out_of_gas_testing: bool = True, *, prelude_code: Bytecode | None = None, ) -> None: """ Create State Test to check the gas cost of a sequence of EOF code. `setup_code` and `tear_down_code` are called multiple times during the test, and MUST NOT have any side-effects which persist across message calls, and in particular, any effects on the gas usage of `subject_code`. """ if cold_gas <= 0: raise ValueError(f"Target gas allocations (cold_gas) must be > 0, got {cold_gas}") if warm_gas is None: warm_gas = cold_gas sender = pre.fund_eoa() address_baseline = pre.deploy_contract(Container.Code(setup_code + tear_down_code)) code_subject = setup_code + subject_code + tear_down_code address_subject = pre.deploy_contract( Container.Code(code_subject) if not subject_subcontainer else Container( sections=[ Section.Code(code_subject), Section.Container(subject_subcontainer), ] ), balance=subject_balance, address=subject_address, ) # 2 times GAS, POP, CALL, 6 times PUSH1 - instructions charged for at every # gas run gas_single_gas_run = 2 * 2 + 2 + WARM_ACCOUNT_ACCESS_GAS + 6 * 3 address_legacy_harness = pre.deploy_contract( code=( # warm subject and baseline without executing (Op.BALANCE(address_subject) + Op.POP + Op.BALANCE(address_baseline) + Op.POP) # run any "prelude" code that may have universal side effects + prelude_code # Baseline gas run + ( Op.GAS + Op.CALL(address=address_baseline, gas=Op.GAS) + Op.POP + Op.GAS + Op.SWAP1 + Op.SUB ) # cold gas run + ( Op.GAS + Op.CALL(address=address_subject, gas=Op.GAS) + Op.POP + Op.GAS + Op.SWAP1 + Op.SUB ) # warm gas run + ( Op.GAS + Op.CALL(address=address_subject, gas=Op.GAS) + Op.POP + Op.GAS + Op.SWAP1 + Op.SUB ) # Store warm gas: DUP3 is the gas of the baseline gas run + (Op.DUP3 + Op.SWAP1 + Op.SUB + Op.PUSH2(slot_warm_gas) + Op.SSTORE) # store cold gas: DUP2 is the gas of the baseline gas run + (Op.DUP2 + Op.SWAP1 + Op.SUB + Op.PUSH2(slot_cold_gas) + Op.SSTORE) + ( ( # do an oog gas run, unless skipped with # `out_of_gas_testing=False`: # # - DUP7 is the gas of the baseline gas run, after other # CALL args were pushed # - subtract the gas charged by the harness # - add warm gas charged by the subject # - subtract `oog_difference` to cause OOG exception # (1 by default) Op.SSTORE( slot_oog_call_result, Op.CALL( gas=Op.ADD(warm_gas - gas_single_gas_run - oog_difference, Op.DUP7), address=address_subject, ), ) # sanity gas run: not subtracting 1 to see if enough gas # makes the call succeed + Op.SSTORE( slot_sanity_call_result, Op.CALL( gas=Op.ADD(warm_gas - gas_single_gas_run, Op.DUP7), address=address_subject, ), ) + Op.STOP ) if out_of_gas_testing else Op.STOP ) ), evm_code_type=EVMCodeType.LEGACY, # Needs to be legacy to use GAS # opcode ) post = { address_legacy_harness: Account( storage={ slot_warm_gas: warm_gas, slot_cold_gas: cold_gas, }, ), } if out_of_gas_testing: post[address_legacy_harness].storage[slot_oog_call_result] = LEGACY_CALL_FAILURE post[address_legacy_harness].storage[slot_sanity_call_result] = LEGACY_CALL_SUCCESS tx = Transaction(to=address_legacy_harness, gas_limit=env.gas_limit, sender=sender) state_test(env=env, pre=pre, tx=tx, post=post) ================================================ FILE: tox.ini ================================================ [tox] # Get a description of all available environments with `uvx --with=tox-uv tox -av` env_list = lint typecheck markdownlint spellcheck pytest tests-deployed tests-deployed-benchmark mkdocs [testenv] runner = uv-venv-lock-runner package = editable wheel_build_env = .pkg solc_version = 0.8.24 python_source_dirs = src tests .github/scripts [testenv:lint] description = Lint and code formatting checks (ruff) extras = lint commands = ruff check --no-fix --show-fixes {[testenv]python_source_dirs} ruff format --check {[testenv]python_source_dirs} # The following ensures docstring and comment line length is checked to 79 characters # see https://github.com/ethereum/execution-spec-tests/issues/2134 ruff check --select W505 --config 'lint.pycodestyle.max-doc-length = 79' {[testenv]python_source_dirs} [testenv:typecheck] description = Run type checking (mypy) extras = lint commands = mypy {[testenv]python_source_dirs} [testenv:spellcheck] description = Spellcheck code and documentation (codespell) extras = docs passenv = GITHUB_ACTIONS GITHUB_STEP_SUMMARY commands = python -c "import src.cli.tox_helpers; src.cli.tox_helpers.codespell()" [testenv:markdownlint] description = Lint markdown files (markdownlint) extras = docs commands = python -c "import src.cli.tox_helpers; src.cli.tox_helpers.markdownlint()" [testenv:changelog] description = Validate changelog entries (changelog) extras = docs commands = python -c "import src.cli.tox_helpers; src.cli.tox_helpers.validate_changelog()" [testenv:mkdocs] description = Build documentation in strict mode (mkdocs) extras = docs,lint setenv = GEN_TEST_DOC_VERSION = "tox" # Required for `cairosvg` so tox can find `libcairo-2`. # https://squidfunk.github.io/mkdocs-material/plugins/requirements/image-processing/?h=cairo#cairo-library-was-not-found DYLD_FALLBACK_LIBRARY_PATH = /opt/homebrew/lib commands = ruff check --no-fix --show-fixes docs/scripts ruff format --check docs/scripts mkdocs build --strict [testenv:pytest] description = Run library and framework unit tests (pytest) setenv = # Use custom EELS_RESOLUTIONS_FILE if it is set via the environment (eg, in CI) EELS_RESOLUTIONS_FILE = {env:EELS_RESOLUTIONS_FILE:} CI = {env:CI:} extras = test lint # Required `gentest` for formatting tests commands = pytest -n auto [forks] develop = Osaka eip7692 = EOFv1 [testenv:tests-deployed] description = Fill test cases in ./tests/ for deployed mainnet forks, except for slow/benchmark tests. setenv = # Use custom EELS_RESOLUTIONS_FILE if it is set via the environment (eg, in CI) EELS_RESOLUTIONS_FILE = {env:EELS_RESOLUTIONS_FILE:} commands = fill -n auto -m "not slow" --output=/tmp/fixtures-tox --clean [testenv:tests-deployed-benchmark] description = Fill benchmarking test cases in ./tests/ for deployed mainnet forks, using evmone-t8n. commands = fill -n auto -m "benchmark" --gas-benchmark-values 5 --output=/tmp/fixtures-tox --clean --evm-bin=evmone-t8n --from=Prague [testenv:tests-develop] description = Fill test cases in ./tests/ for deployed and development mainnet forks setenv = # Use custom EELS_RESOLUTIONS_FILE if it is set via the environment (eg, in CI) EELS_RESOLUTIONS_FILE = {env:EELS_RESOLUTIONS_FILE:} commands = fill -n auto --until={[forks]develop} -k "not slow" --output=/tmp/fixtures-tox --clean # ---------------------------------------------------------------------------------------------- # ALIAS ENVIRONMENTS # ---------------------------------------------------------------------------------------------- # For convenience/backwards compatibility. Using -e with a list of environments is preferred due # to clearer output and better parallelization, e.g. # uvx --with=tox-uv tox -e lint,typecheck,spellcheck,pytest # ---------------------------------------------------------------------------------------------- # ALIAS that runs checks on ./src/: lint, typecheck, spellcheck, pytest # uvx --with=tox-uv tox -e lint,typecheck,spellcheck,pytest [testenv:framework] description = Alias that runs lint, typecheck, spellcheck, pytest. extras = {[testenv:lint]extras} {[testenv:typecheck]extras} {[testenv:spellcheck]extras} {[testenv:pytest]extras} setenv = {[testenv:pytest]setenv} commands_pre = {[testenv:pytest]:commands_pre} commands = {[testenv:lint]commands} {[testenv:typecheck]commands} {[testenv:spellcheck]commands} {[testenv:pytest]commands} # ALIAS that runs checks on ./tests/: lint, typecheck, spellcheck, tests-deployed # uvx --with=tox-uv tox -e lint,typecheck,spellcheck,tests-deployed [testenv:tests] description = Alias that runs lint, typecheck, spellcheck, tests-deployed extras = {[testenv:lint]extras} {[testenv:typecheck]extras} {[testenv:spellcheck]extras} {[testenv:tests-deployed]extras} {[testenv:tests-deployed-benchmark]extras} setenv = {[testenv:pytest]setenv} commands_pre = {[testenv:tests-deployed]:commands_pre} {[testenv:tests-deployed-benchmark]:commands_pre} commands = {[testenv:lint]commands} {[testenv:typecheck]commands} {[testenv:spellcheck]commands} {[testenv:tests-deployed]commands} {[testenv:tests-deployed-benchmark]commands} # ALIAS that runs checks on ./docs/: spellcheck, markdownlint, mkdocs # uvx --with=tox-uv tox -e spellcheck,markdownlint,mkdocs [testenv:docs] description = Alias that runs all documentation checks (spellcheck, markdownlint, mkdocs). extras = {[testenv:spellcheck]extras} {[testenv:markdownlint]extras} {[testenv:mkdocs]extras} setenv = {[testenv:mkdocs]setenv} commands = {[testenv:spellcheck]commands} {[testenv:markdownlint]commands} {[testenv:mkdocs]commands} ================================================ FILE: whitelist.txt ================================================ uv femtoether Picoether microether milliether milli nanoether 0xaa AccessListType Account1 Account2 acl addr address address2 AddressType alloc api apis arcname argcount argnames argvalues ase asm at5 AuthorizationInvalidityType AutoSection auxdata balance base64 basefee basename bb BerlinToLondonAt besu pyspecs big0 big1 bigint blake2f blobgasfee blockchain BlockchainFixtures BlockchainTest BlockchainTestFiller BlockchainTests BlockException blockhash blockhashes blocknum blocktest bls bls12 blueswen bool boolean br bytecode byteorder bytes20 bytes32 bytes8 calc calldata calldatacopy calldataload calldatasize callee caller callvalue cancun cd chainid ChainIDType changelog chfast classdict cli clis CLIs cli2 cmd codeAddr codebase codecopy codesize coinbase coincurve commonpath compilable config configs conftest contractAddr controlflow cp CPUs crypto cryptographic currentframe customizations Customizations danceratopz dao dataclasses datacopy dataload dataloadn datasize datastructures delitem Dencun designator deprecations deserialization deserialized dev devnet difficulty dir dirname dirs discordapp dockerdocs docstring docstrings doseq dunder dup eip eip123 eip3540 eip4844 eip6110 eip7002 eip7069 eip7620 eip7692 P7692 eip7251 eips EIPs EIP's el endianness EngineAPI enum env envvar eoa EOA EOAs eof eofwrap EOF1 EOFException eofparse epilog esbenp eest EEST's ERC eth ethash ethereum ethereum's EthereumJS evaluatable evm EVMCodeType evmone Evmone executables extcodecopy extcodehash extcodesize exitstatus F00 fcu filelock filesystem fillvalue firstlineno fmt fn fname forkchoice formatOnSave formatter fp fp2 fromhex func g1 g1add g1msm g1mul g2 g2add g2msm g2mul gaslimit gasprice gcc GeneralStateTestsFiller gentest getframeinfo geth geth's getitem getmtime gh GHSA git's github Github Github's glightbox globals go-ethereum's Golang gwei hacky hardfork hash32 Hashable hasher HeaderNonce hexary hexbytes HexNumber hexsha hiveview homebrew html htmlpath https hyperledger iat idx ignoreRevsFile img imm immediates incr incrementing ini init initcode initcodes inputdata instantiation io isfile isidentifier islice isort isort's ispkg itemName javascripts jimporter joinpath jpg jq js json JSON keccak keccak256 keepends key2 kzg kzgs lastblockhash len Levenshtein linux listdir lll lllc london LTS macOS mainnet makefiles makereport makeconftest marioevz markdownlint md mem mempool metaclass mixin mixins mixhash mkdocs mkdocstrings mortem mortems msm mypy ctx namespace natively nav ncheck nektos nethermind Nethermind's nexternal nGo nJSON nonreturning nop NOP NOPs nPython nSHA t8ntool NOTSET num number ommer ommers oneliner oob OpenSSL opc oprypin ori origin P1 P2 p256verify parseable passthrough pathlib pdb Pectra perf permalink petersburg pformat platformdirs pluginmanager png Pomerantz POS ppa ppas prague pre Pre precompile predeploy prepend prestateTracer PrevRandao PRs programmatically pubkey px py pydantic pyproject Pyspec pyspelling pytest Pytest pytest's pytestArgs qGpsxSA questionary quickstart radd randao readme readthedocs reentrancy reentrant repo repo's repos returncode returncontract returndata returndatacopy returndatasize reusability rlp rootdir rpc ruleset runtestloop runtime S12 sandboxed secp256k1 secp256k1n selfbalance ser serializable servable setenv setitem sha SHA sharding SignerType simlimit solc soliditylang Spec4844 spencer spencertaylorbrown spencertb splitext squidfunk src ssz stackoverflow stateful StateTest StateTestFiller StateTests staticcalled stdin stdout stExample str streetsidesoftware subcall subclasscheck subcommands subdir subdirectories subdirectory subgraph subprocess subscriptable substring sudo sysconfig t8n tamasfe tbd terminalreporter testability TestAddress testscollected TestContractCreationGasUsage TestMultipleWithdrawalsSameAddress testrun textwrap ThreeHrSleep time15k timestamp tmp todo toml toplevel tox Tox traceback TransactionException trie triggerable tstorage tx tx1 tx2 txs txt ty typehints u256 ubuntu ukiyo uid uncomment underflow undersize unlink usr unixsocket util utils v0 v1 v2 v3 v4 validator validators ValidAt ValidAtTransitionTo ValidFrom ValidUntil venv visualstudio vm VRS vscode vv wd wds wei wikipedia wordlist workspaces www xdist xF xFA xFD xFF xpassed yaml YAML yml yParity yul zfill addoption addinivalue argname autouse basedir callspec collectonly copyfile copytree dedent dest exc extractall fg fixturenames fspath funcargs getfixturevalue getgroup getoption Golang groupby hookimpl hookwrapper IEXEC IGNORECASE inifile isatty iterdir ljust longreprtext makepyfile makereport metafunc modifyitems monkeypatching neth nethtest nodeid noop oog optparser originalname parametrized param params parametrize parametrizes parametrizer parametrizers parametrization parametrizing popen prevrandao prover provers pytestconfig pytester pytestmark readline regexes removesuffix reportinfo ret rglob ripemd rjust rootpath runpytest runtest startdir subclasses subcommand subcontainer substring substrings teardown tempdir testdir teststatus tmpdir toc tryfirst trylast usefixtures verifier verifiers writelines xfail ZeroPaddedHexNumber P7692 stop add mul sub div sdiv mod smod addmod mulmod exp signextend lt gt slt sgt eq iszero and or xor not byte shl shr sar sha3 address balance origin caller callvalue calldataload calldatasize calldatacopy codesize codecopy gasprice extcode extcodesize extcodecopy returndata returndatasize returndatacopy returndataload extcodehash blockhash coinbase timestamp number difficulty gaslimit pop mload mstore mstore8 sload sstore jump jumpi jumpf pc msize gas jumpdest rjump rjumpi rjumpkind rjumps rjumpv RJUMPV callf retf push0 push1 push2 push3 push4 push5 push6 push7 push8 push9 push10 push11 push12 push13 push14 push15 push16 push17 push18 push19 push20 push21 push22 push23 push24 push25 push26 push27 push28 push29 push30 push31 push32 dup1 dup2 dup3 dup4 dup5 dup6 dup7 dup8 dup9 dup10 dup11 dup12 dup13 dup14 dup15 dup16 dupn swap1 swap2 swap3 swap4 swap5 swap6 swap7 swap8 swap9 swap10 swap11 swap12 swap13 swap14 swap15 swap16 swapn log0 log1 log2 log3 log4 dataload dataloadn datasize datacopy tload tstore create create2 create3 create4 call callcode return delegatecall delegatecalling eofcreate eoftest extcall extcalls extdelegatecall staticcall extstaticcall revert selfdestruct selfdestructing sendall blobhash blobbasefee mcopy precompile precompiles deployer 0x modexp ModExp 0x00 0x01 0x10 fi url gz tT istanbul berlin 0A 0B 0C 0D 0E 0F 1A 1B 1C 1D 1E 1F 2A 2B 2C 2D 2E 2F 3A 3B 3C 3D 3E 3F 4A 4B 4C 4D 4E 4F 5A 5B 5C 5D 5E 5F 6A 6B 6C 6D 6E 6F 7A 7B 7C 7D 7E 7F 8A 8B 8C 8D 8E 8F 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DE DF DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ef01 uv EthereumCLI TransitionTool rebase deps datatables jinja templating EOFv subcontainers ize nectos fibonacci CPython legacytests pycryptodome pytest_sessionfinish levelname pytest_runtest_logstart pytest_runtest_logreport pytest_runtest_logfinish eestloglevel caplog workerinput dockerenv stderr EESTLogger Formatters UI asctime petertdavies cofactor cofactors coeffs uncomp isogeny codomain nametag CFI'd opcode's rf buildarg buildoutput nocache checktimelimit loglevel ci netstat tlnp golang newPayload baseimage nametags liveness paradigmxyz lightclient PreviousFork NewFork ps forkchoiceUpdated ps ufw benchmarking validium rollup JWT WebSocket Prysm xargs ghcr Erigon Dockerfiles dockerized tgz reth http PID xml junit dockerfile args PowerShell pectra uname Zsh usermod newgrp systemctl backticked Typecheck autoformat Typechecking groupstats SharedPreStateGroup qube aspell codespell nagydani guido marcin codespell peerdas ckzg CLZ Fujisan zkevm jsign Glamsterdam Watcherfall